diff --git a/Samples/AZX_Docs/html/annotated.html b/Samples/AZX_Docs/html/annotated.html index 72b65af..ae4f247 100644 --- a/Samples/AZX_Docs/html/annotated.html +++ b/Samples/AZX_Docs/html/annotated.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/app__cfg_8h.html b/Samples/AZX_Docs/html/app__cfg_8h.html index c8c9654..706e7dc 100644 --- a/Samples/AZX_Docs/html/app__cfg_8h.html +++ b/Samples/AZX_Docs/html/app__cfg_8h.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
@@ -116,7 +116,7 @@

Macros

-#define VERSION   "1.0.2" +#define VERSION   "1.0.3"  The current version of the Samples.
 
Log Settings
diff --git a/Samples/AZX_Docs/html/app__cfg_8h_source.html b/Samples/AZX_Docs/html/app__cfg_8h_source.html index 4a8fc69..225abca 100644 --- a/Samples/AZX_Docs/html/app__cfg_8h_source.html +++ b/Samples/AZX_Docs/html/app__cfg_8h_source.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
@@ -102,7 +102,7 @@
20 
21 
22 
-
26 #define VERSION "1.0.2"
+
26 #define VERSION "1.0.3"
27 
32 #define LOG_LEVEL AZX_LOG_LEVEL_DEBUG
33 #define LOG_CHANNEL AZX_LOG_TO_MAIN_UART
diff --git a/Samples/AZX_Docs/html/azx__log_8h.html b/Samples/AZX_Docs/html/azx__log_8h.html index 39caa40..acb6c4b 100644 --- a/Samples/AZX_Docs/html/azx__log_8h.html +++ b/Samples/AZX_Docs/html/azx__log_8h.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/azx__log_8h_source.html b/Samples/AZX_Docs/html/azx__log_8h_source.html index 4cb2607..5a0bc6d 100644 --- a/Samples/AZX_Docs/html/azx__log_8h_source.html +++ b/Samples/AZX_Docs/html/azx__log_8h_source.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/azx__utils_8h.html b/Samples/AZX_Docs/html/azx__utils_8h.html index dd9933f..d13b663 100644 --- a/Samples/AZX_Docs/html/azx__utils_8h.html +++ b/Samples/AZX_Docs/html/azx__utils_8h.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/azx__utils_8h_source.html b/Samples/AZX_Docs/html/azx__utils_8h_source.html index 8b13f74..f15ea84 100644 --- a/Samples/AZX_Docs/html/azx__utils_8h_source.html +++ b/Samples/AZX_Docs/html/azx__utils_8h_source.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/classes.html b/Samples/AZX_Docs/html/classes.html index 9fdc413..a7181ec 100644 --- a/Samples/AZX_Docs/html/classes.html +++ b/Samples/AZX_Docs/html/classes.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/dir_0045f852bf8045b6d5abd9c9eb54a446.html b/Samples/AZX_Docs/html/dir_0045f852bf8045b6d5abd9c9eb54a446.html index bb3e75f..fc1a3bc 100644 --- a/Samples/AZX_Docs/html/dir_0045f852bf8045b6d5abd9c9eb54a446.html +++ b/Samples/AZX_Docs/html/dir_0045f852bf8045b6d5abd9c9eb54a446.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/files.html b/Samples/AZX_Docs/html/files.html index 3c76e7e..4a439a2 100644 --- a/Samples/AZX_Docs/html/files.html +++ b/Samples/AZX_Docs/html/files.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/functions.html b/Samples/AZX_Docs/html/functions.html index aeb1e4b..436f287 100644 --- a/Samples/AZX_Docs/html/functions.html +++ b/Samples/AZX_Docs/html/functions.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/functions_vars.html b/Samples/AZX_Docs/html/functions_vars.html index 00399b8..23831fa 100644 --- a/Samples/AZX_Docs/html/functions_vars.html +++ b/Samples/AZX_Docs/html/functions_vars.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/globals.html b/Samples/AZX_Docs/html/globals.html index 7098c01..0042459 100644 --- a/Samples/AZX_Docs/html/globals.html +++ b/Samples/AZX_Docs/html/globals.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/globals_defs.html b/Samples/AZX_Docs/html/globals_defs.html index 17e8c54..c9b3564 100644 --- a/Samples/AZX_Docs/html/globals_defs.html +++ b/Samples/AZX_Docs/html/globals_defs.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/globals_enum.html b/Samples/AZX_Docs/html/globals_enum.html index 60f03b4..26d9fc8 100644 --- a/Samples/AZX_Docs/html/globals_enum.html +++ b/Samples/AZX_Docs/html/globals_enum.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/globals_eval.html b/Samples/AZX_Docs/html/globals_eval.html index 1ea62dd..e57feea 100644 --- a/Samples/AZX_Docs/html/globals_eval.html +++ b/Samples/AZX_Docs/html/globals_eval.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/globals_func.html b/Samples/AZX_Docs/html/globals_func.html index 191277b..c41fc9f 100644 --- a/Samples/AZX_Docs/html/globals_func.html +++ b/Samples/AZX_Docs/html/globals_func.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/graph_legend.html b/Samples/AZX_Docs/html/graph_legend.html index c067a7e..3d1afe1 100644 --- a/Samples/AZX_Docs/html/graph_legend.html +++ b/Samples/AZX_Docs/html/graph_legend.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/group__log_conf.html b/Samples/AZX_Docs/html/group__log_conf.html index 1376974..d6a31c9 100644 --- a/Samples/AZX_Docs/html/group__log_conf.html +++ b/Samples/AZX_Docs/html/group__log_conf.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/group__log_usage.html b/Samples/AZX_Docs/html/group__log_usage.html index af3b9bd..c55f4d6 100644 --- a/Samples/AZX_Docs/html/group__log_usage.html +++ b/Samples/AZX_Docs/html/group__log_usage.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/index.html b/Samples/AZX_Docs/html/index.html index 8159dec..f1afe74 100644 --- a/Samples/AZX_Docs/html/index.html +++ b/Samples/AZX_Docs/html/index.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/modules.html b/Samples/AZX_Docs/html/modules.html index 068f318..a69e48c 100644 --- a/Samples/AZX_Docs/html/modules.html +++ b/Samples/AZX_Docs/html/modules.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/AZX_Docs/html/struct_a_z_x___l_o_g___c_f_g___t.html b/Samples/AZX_Docs/html/struct_a_z_x___l_o_g___c_f_g___t.html index 6b7a960..395633c 100644 --- a/Samples/AZX_Docs/html/struct_a_z_x___l_o_g___c_f_g___t.html +++ b/Samples/AZX_Docs/html/struct_a_z_x___l_o_g___c_f_g___t.html @@ -34,7 +34,7 @@ Logo
AZX (AppZone eXtensions) documentation -  1.0.2 +  1.0.3
A set of companion utilities that make AZ development easier
diff --git a/Samples/BRAVO_Environment_BSEC_Demo/hdr/app_cfg.h b/Samples/BRAVO_Environment_BSEC_Demo/hdr/app_cfg.h index 293d158..7f96af8 100644 --- a/Samples/BRAVO_Environment_BSEC_Demo/hdr/app_cfg.h +++ b/Samples/BRAVO_Environment_BSEC_Demo/hdr/app_cfg.h @@ -23,7 +23,7 @@ /** * @brief The current version of the Samples */ -#define VERSION "1.0.2" +#define VERSION "1.0.3" /** * @name Log Settings diff --git a/Samples/BRAVO_Rotation_Demo/hdr/app_cfg.h b/Samples/BRAVO_Rotation_Demo/hdr/app_cfg.h index 293d158..7f96af8 100644 --- a/Samples/BRAVO_Rotation_Demo/hdr/app_cfg.h +++ b/Samples/BRAVO_Rotation_Demo/hdr/app_cfg.h @@ -23,7 +23,7 @@ /** * @brief The current version of the Samples */ -#define VERSION "1.0.2" +#define VERSION "1.0.3" /** * @name Log Settings diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_BHI160_Orientation.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_BHI160_Orientation.h deleted file mode 100644 index 8843ff7..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_BHI160_Orientation.h +++ /dev/null @@ -1,1767 +0,0 @@ -/* This code was generated by fw2h utility, please don't make change to it directly. - * FW2H version: 1.0.0.3. */ - -#ifndef BHY_FW_D224DB1EB8B56338_H -#define BHY_FW_D224DB1EB8B56338_H - -const uint8_t bhy1_fw[28104] = { - 0x2a, 0x65, 0x00, 0x1a, 0xcd, 0xe0, 0xd6, 0x67, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6d, 0x00, 0x00, - 0xac, 0xe5, 0x7f, 0x00, 0x4c, 0x5e, 0x00, 0x00, 0xc0, 0x8d, 0x7f, 0x00, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, - 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, - 0x34, 0x50, 0x60, 0x00, 0xa4, 0x53, 0x60, 0x00, 0x04, 0x52, 0x60, 0x00, 0xb4, 0x94, 0x60, 0x00, - 0xc0, 0x8d, 0x7f, 0x00, 0xc0, 0x8d, 0x7f, 0x00, 0xc0, 0x8d, 0x7f, 0x00, 0xc0, 0x8d, 0x7f, 0x00, - 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, - 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, 0x59, 0x06, 0x4f, 0x06, 0x91, 0x07, 0x4f, 0x06, - 0xb1, 0x02, 0x4f, 0x08, 0xa1, 0x04, 0x4f, 0x08, 0xbd, 0x05, 0x4f, 0x08, 0x05, 0x01, 0x8f, 0x08, - 0x09, 0x01, 0x8f, 0x08, 0xb9, 0x03, 0x8f, 0x08, 0xc1, 0x03, 0x8f, 0x08, 0xd1, 0x04, 0x8f, 0x08, - 0x1d, 0x02, 0xcf, 0x08, 0x8d, 0x04, 0xcf, 0x08, 0x8d, 0x07, 0xcf, 0x08, 0xc5, 0x07, 0xcf, 0x08, - 0x69, 0x01, 0x0f, 0x09, 0x99, 0x07, 0x4f, 0x09, 0xe9, 0x07, 0x4f, 0x09, 0x29, 0x00, 0x8f, 0x09, - 0x31, 0x00, 0x8f, 0x09, 0xf5, 0x00, 0x80, 0x01, 0xa5, 0x01, 0x8f, 0x09, 0xdd, 0x01, 0x8f, 0x09, - 0x09, 0x03, 0x8f, 0x09, 0x85, 0x03, 0x8f, 0x09, 0x49, 0x05, 0x8f, 0x09, 0x0d, 0x06, 0x8f, 0x09, - 0xed, 0x07, 0x8f, 0x09, 0xbd, 0x00, 0xcf, 0x09, 0x1d, 0x01, 0xcf, 0x09, 0x95, 0x01, 0xcf, 0x09, - 0x1d, 0x02, 0xcf, 0x09, 0x6d, 0x02, 0xcf, 0x09, 0xa5, 0x02, 0xcf, 0x09, 0x41, 0x03, 0xcf, 0x09, - 0x7d, 0x03, 0xcf, 0x09, 0xad, 0x05, 0xcf, 0x09, 0x0d, 0x06, 0xcf, 0x09, 0x6d, 0x06, 0xcf, 0x09, - 0xc1, 0x06, 0xcf, 0x09, 0x85, 0x01, 0x0f, 0x0a, 0x11, 0x02, 0x0f, 0x0a, 0x31, 0x02, 0x0f, 0x0a, - 0xb5, 0x02, 0x0f, 0x0a, 0xb9, 0x03, 0x0f, 0x0a, 0x69, 0x07, 0x0f, 0x0a, 0x05, 0x04, 0x4f, 0x0a, - 0x2d, 0x07, 0x4f, 0x0a, 0x95, 0x00, 0x8f, 0x0a, 0xad, 0x04, 0x8f, 0x0a, 0xd9, 0x05, 0x8f, 0x0a, - 0x95, 0x06, 0x8f, 0x0a, 0xed, 0x00, 0xcf, 0x0a, 0xf1, 0x00, 0xcf, 0x0a, 0xfd, 0x00, 0xcf, 0x0a, - 0x69, 0x01, 0xcf, 0x0a, 0x75, 0x01, 0xcf, 0x0a, 0x35, 0x02, 0xcf, 0x0a, 0x05, 0x03, 0xcf, 0x0a, - 0x09, 0x05, 0xcf, 0x0a, 0xfd, 0x05, 0xcf, 0x0a, 0xb1, 0x06, 0xcf, 0x0a, 0x01, 0x02, 0x0f, 0x0b, - 0x09, 0x06, 0x80, 0x01, 0xd1, 0x02, 0x8f, 0x0b, 0x29, 0x03, 0x8f, 0x0b, 0x91, 0x03, 0x8f, 0x0b, - 0xbd, 0x03, 0x8f, 0x0b, 0xe1, 0x04, 0x8f, 0x0b, 0x25, 0x05, 0x8f, 0x0b, 0xd5, 0x05, 0x8f, 0x0b, - 0x39, 0x06, 0x8f, 0x0b, 0x91, 0x07, 0x8f, 0x0b, 0x2d, 0x00, 0xcf, 0x0b, 0x49, 0x00, 0xcf, 0x0b, - 0x01, 0x01, 0xcf, 0x0b, 0xcd, 0x01, 0xcf, 0x0b, 0x79, 0x05, 0xcf, 0x0b, 0xc9, 0x05, 0xcf, 0x0b, - 0xb5, 0x07, 0xcf, 0x0b, 0x69, 0x00, 0x0f, 0x0c, 0x61, 0x06, 0x80, 0x01, 0xcd, 0x00, 0x0f, 0x0c, - 0xd5, 0x00, 0x0f, 0x0c, 0x45, 0x01, 0x0f, 0x0c, 0x5d, 0x01, 0x0f, 0x0c, 0x75, 0x01, 0x0f, 0x0c, - 0x0d, 0x02, 0x0f, 0x0c, 0xbd, 0x04, 0x0f, 0x0c, 0xdd, 0x04, 0x0f, 0x0c, 0x01, 0x07, 0x0f, 0x0c, - 0x41, 0x07, 0x0f, 0x0c, 0x49, 0x07, 0x0f, 0x0c, 0xc9, 0x07, 0x0f, 0x0c, 0x1d, 0x00, 0x4f, 0x0c, - 0x65, 0x00, 0x4f, 0x0c, 0x49, 0x01, 0x4f, 0x0c, 0x65, 0x01, 0x4f, 0x0c, 0x99, 0x01, 0x4f, 0x0c, - 0x3d, 0x02, 0x4f, 0x0c, 0x65, 0x02, 0x4f, 0x0c, 0xb1, 0x02, 0x4f, 0x0c, 0x61, 0x05, 0x4f, 0x0c, - 0xb1, 0x05, 0x4f, 0x0c, 0x45, 0x06, 0x4f, 0x0c, 0x79, 0x06, 0x4f, 0x0c, 0x85, 0x06, 0x4f, 0x0c, - 0x19, 0x07, 0x4f, 0x0c, 0x21, 0x00, 0x8f, 0x0c, 0x6d, 0x00, 0x8f, 0x0c, 0x7d, 0x00, 0x8f, 0x0c, - 0x7d, 0x04, 0x8f, 0x0c, 0x85, 0x05, 0x8f, 0x0c, 0xc1, 0x03, 0xcf, 0x0c, 0xc9, 0x03, 0xcf, 0x0c, - 0x0d, 0x07, 0xcf, 0x0c, 0x51, 0x07, 0xcf, 0x0c, 0x61, 0x07, 0xcf, 0x0c, 0x6d, 0x04, 0xc0, 0x01, - 0x25, 0x00, 0x0f, 0x0d, 0x4d, 0x00, 0x0f, 0x0d, 0x6d, 0x00, 0x0f, 0x0d, 0x71, 0x00, 0x0f, 0x0d, - 0x71, 0x00, 0x0f, 0x0d, 0x89, 0x00, 0x0f, 0x0d, 0x91, 0x00, 0x0f, 0x0d, 0x99, 0x00, 0x0f, 0x0d, - 0xa1, 0x00, 0x0f, 0x0d, 0xa5, 0x00, 0x0f, 0x0d, 0xad, 0x00, 0x0f, 0x0d, 0xbd, 0x00, 0x0f, 0x0d, - 0xc9, 0x00, 0x0f, 0x0d, 0xd5, 0x00, 0x0f, 0x0d, 0x89, 0x01, 0x0f, 0x0d, 0xf9, 0x01, 0x0f, 0x0d, - 0x21, 0x03, 0x0f, 0x0d, 0x65, 0x03, 0x0f, 0x0d, 0x1d, 0x04, 0x0f, 0x0d, 0x39, 0x04, 0x0f, 0x0d, - 0x45, 0x04, 0x0f, 0x0d, 0x4d, 0x04, 0x0f, 0x0d, 0x6d, 0x04, 0x0f, 0x0d, 0x71, 0x04, 0x0f, 0x0d, - 0xf5, 0x05, 0x0f, 0x0d, 0x3d, 0x06, 0x0f, 0x0d, 0x05, 0x00, 0x4f, 0x0d, 0x51, 0x00, 0x4f, 0x0d, - 0x8d, 0x00, 0x4f, 0x0d, 0xed, 0x00, 0x4f, 0x0d, 0x21, 0x02, 0x4f, 0x0d, 0xbd, 0x02, 0x4f, 0x0d, - 0xc1, 0x03, 0x4f, 0x0d, 0x25, 0x04, 0x4f, 0x0d, 0x31, 0x04, 0x4f, 0x0d, 0x4d, 0x06, 0xc0, 0x01, - 0x59, 0x06, 0xc0, 0x01, 0x65, 0x06, 0xc0, 0x01, 0x71, 0x06, 0xc0, 0x01, 0x7d, 0x06, 0xc0, 0x01, - 0x89, 0x06, 0xc0, 0x01, 0x95, 0x06, 0xc0, 0x01, 0xb5, 0x06, 0xc0, 0x01, 0xc1, 0x06, 0xc0, 0x01, - 0xe5, 0x06, 0xc0, 0x01, 0xf1, 0x06, 0xc0, 0x01, 0xfd, 0x06, 0xc0, 0x01, 0xc9, 0x04, 0x4f, 0x0d, - 0xf1, 0x05, 0x4f, 0x0d, 0x31, 0x07, 0x4f, 0x0d, 0x59, 0x07, 0x4f, 0x0d, 0x65, 0x07, 0x4f, 0x0d, - 0xa9, 0x01, 0x8f, 0x0d, 0xd1, 0x01, 0x8f, 0x0d, 0xdd, 0x01, 0x8f, 0x0d, 0xe5, 0x01, 0x8f, 0x0d, - 0x09, 0x02, 0x8f, 0x0d, 0x2d, 0x02, 0x8f, 0x0d, 0x7d, 0x02, 0x8f, 0x0d, 0x3d, 0x03, 0x8f, 0x0d, - 0x6d, 0x04, 0x8f, 0x0d, 0x49, 0x05, 0x8f, 0x0d, 0x59, 0x05, 0x8f, 0x0d, 0x91, 0x05, 0x8f, 0x0d, - 0xd5, 0x05, 0x8f, 0x0d, 0xf1, 0x00, 0xcf, 0x0d, 0x21, 0x02, 0xcf, 0x0d, 0xfd, 0x02, 0xcf, 0x0d, - 0xbd, 0x04, 0xcf, 0x0d, 0x89, 0x00, 0x0f, 0x0e, 0xc1, 0x04, 0x0f, 0x0e, 0xf1, 0x05, 0x0f, 0x0e, - 0x5d, 0x07, 0x0f, 0x0e, 0xc9, 0x07, 0x0f, 0x0e, 0x89, 0x05, 0x8f, 0x0e, 0x79, 0x06, 0x8f, 0x0e, - 0xa1, 0x06, 0x8f, 0x0e, 0x1d, 0x07, 0x8f, 0x0e, 0x6d, 0x07, 0x8f, 0x0e, 0x11, 0x00, 0xcf, 0x0e, - 0x4d, 0x01, 0xcf, 0x0e, 0x71, 0x01, 0xcf, 0x0e, 0xbd, 0x01, 0xcf, 0x0e, 0xcd, 0x01, 0xcf, 0x0e, - 0x25, 0x02, 0xcf, 0x0e, 0x99, 0x05, 0x00, 0x02, 0xbd, 0x02, 0xcf, 0x0e, 0xa1, 0x03, 0xcf, 0x0e, - 0x2d, 0x04, 0xcf, 0x0e, 0x75, 0x04, 0xcf, 0x0e, 0x81, 0x04, 0xcf, 0x0e, 0xa5, 0x04, 0xcf, 0x0e, - 0xe1, 0x04, 0xcf, 0x0e, 0x11, 0x05, 0xcf, 0x0e, 0x65, 0x05, 0xcf, 0x0e, 0xd5, 0x05, 0xcf, 0x0e, - 0x2d, 0x06, 0xcf, 0x0e, 0xbd, 0x07, 0xcf, 0x0e, 0x01, 0x00, 0x0f, 0x0f, 0x25, 0x00, 0x0f, 0x0f, - 0x5d, 0x04, 0x0f, 0x0f, 0x19, 0x05, 0x0f, 0x0f, 0x1d, 0x03, 0x4f, 0x0f, 0x99, 0x04, 0x4f, 0x0f, - 0x21, 0x05, 0x4f, 0x0f, 0x8d, 0x05, 0x4f, 0x0f, 0xa9, 0x05, 0x4f, 0x0f, 0xe1, 0x05, 0x4f, 0x0f, - 0x81, 0x06, 0x4f, 0x0f, 0x95, 0x06, 0x4f, 0x0f, 0xad, 0x06, 0x4f, 0x0f, 0x01, 0x07, 0x4f, 0x0f, - 0x1d, 0x07, 0x4f, 0x0f, 0x31, 0x07, 0x4f, 0x0f, 0xc5, 0x07, 0x4f, 0x0f, 0xe1, 0x07, 0x4f, 0x0f, - 0x21, 0x00, 0x8f, 0x0f, 0x85, 0x00, 0x8f, 0x0f, 0x9d, 0x00, 0x8f, 0x0f, 0xdd, 0x00, 0x8f, 0x0f, - 0xe5, 0x00, 0x8f, 0x0f, 0x7d, 0x01, 0x8f, 0x0f, 0x9d, 0x01, 0x8f, 0x0f, 0xb1, 0x01, 0x8f, 0x0f, - 0xd5, 0x01, 0x8f, 0x0f, 0x2d, 0x02, 0x8f, 0x0f, 0x71, 0x02, 0x8f, 0x0f, 0x09, 0x03, 0x8f, 0x0f, - 0x35, 0x03, 0x8f, 0x0f, 0x71, 0x03, 0x8f, 0x0f, 0x69, 0x04, 0x8f, 0x0f, 0xc9, 0x04, 0x8f, 0x0f, - 0x7d, 0x00, 0xcf, 0x0f, 0x91, 0x02, 0xcf, 0x0f, 0x15, 0x03, 0x4f, 0x09, 0x71, 0x06, 0xc0, 0x01, - 0x41, 0x03, 0xcf, 0x0a, 0x65, 0x04, 0xcf, 0x0a, 0x99, 0x04, 0xcf, 0x0a, 0x09, 0x05, 0xcf, 0x0a, - 0x49, 0x05, 0xcf, 0x0a, 0x61, 0x05, 0xcf, 0x0a, 0xb1, 0x06, 0xcf, 0x0a, 0xb9, 0x06, 0xcf, 0x0a, - 0xf1, 0x06, 0xcf, 0x0a, 0x31, 0x07, 0xcf, 0x0a, 0x75, 0x07, 0xcf, 0x0a, 0xd9, 0x05, 0x8f, 0x0b, - 0x71, 0x06, 0x8f, 0x0b, 0x6d, 0x06, 0x8f, 0x0a, 0x8d, 0x06, 0x8f, 0x0a, 0x31, 0x07, 0x8f, 0x0a, - 0xe5, 0x07, 0x8f, 0x0a, 0x69, 0x00, 0xcf, 0x0a, 0xc1, 0x00, 0xcf, 0x0a, 0x55, 0x01, 0xcf, 0x0a, - 0x89, 0x02, 0xcf, 0x0a, 0xc1, 0x05, 0xcf, 0x0a, 0xbd, 0x06, 0xcf, 0x0d, 0x11, 0x07, 0xcf, 0x0d, - 0xd9, 0x01, 0x8f, 0x04, 0x09, 0x02, 0x8f, 0x04, 0x15, 0x02, 0x8f, 0x04, 0x21, 0x02, 0x8f, 0x04, - 0x39, 0x02, 0x8f, 0x04, 0x5d, 0x02, 0x8f, 0x04, 0x69, 0x02, 0x8f, 0x04, 0xa5, 0x06, 0xc0, 0x00, - 0x49, 0x03, 0x8f, 0x04, 0x89, 0x03, 0x8f, 0x04, 0xb5, 0x06, 0xc0, 0x00, 0x51, 0x05, 0x8f, 0x04, - 0x8d, 0x05, 0x8f, 0x04, 0xa1, 0x05, 0x8f, 0x04, 0xf1, 0x05, 0x8f, 0x04, 0x21, 0x06, 0x8f, 0x04, - 0x59, 0x07, 0x8f, 0x04, 0x6d, 0x07, 0x8f, 0x04, 0xc5, 0x07, 0x8f, 0x04, 0xf1, 0x00, 0xcf, 0x04, - 0xfd, 0x00, 0xcf, 0x04, 0x05, 0x01, 0xcf, 0x04, 0x95, 0x01, 0xcf, 0x04, 0xfd, 0x01, 0xcf, 0x04, - 0x41, 0x02, 0xcf, 0x04, 0x55, 0x02, 0xcf, 0x04, 0xb9, 0x02, 0xcf, 0x04, 0xbd, 0x02, 0xcf, 0x04, - 0xc1, 0x02, 0xcf, 0x04, 0x05, 0x03, 0xcf, 0x04, 0x0d, 0x03, 0xcf, 0x04, 0x11, 0x03, 0xcf, 0x04, - 0x15, 0x03, 0xcf, 0x04, 0x19, 0x03, 0xcf, 0x04, 0x21, 0x03, 0xcf, 0x04, 0x45, 0x03, 0xcf, 0x04, - 0x4d, 0x03, 0xcf, 0x04, 0x61, 0x03, 0xcf, 0x04, 0x71, 0x03, 0xcf, 0x04, 0xc9, 0x03, 0xcf, 0x04, - 0xdd, 0x03, 0xcf, 0x04, 0x49, 0x05, 0xcf, 0x04, 0x55, 0x05, 0xcf, 0x04, 0x61, 0x05, 0xcf, 0x04, - 0x65, 0x05, 0xcf, 0x04, 0x69, 0x05, 0xcf, 0x04, 0x6d, 0x05, 0xcf, 0x04, 0x99, 0x05, 0xcf, 0x04, - 0x2d, 0x00, 0x0f, 0x05, 0xad, 0x00, 0x0f, 0x05, 0xf9, 0x00, 0x0f, 0x05, 0x41, 0x01, 0x0f, 0x05, - 0xe1, 0x01, 0x0f, 0x05, 0x09, 0x02, 0x0f, 0x05, 0xf1, 0x02, 0x0f, 0x05, 0xfd, 0x02, 0x0f, 0x05, - 0x21, 0x03, 0x0f, 0x05, 0x3d, 0x03, 0x0f, 0x05, 0x91, 0x03, 0x0f, 0x05, 0xad, 0x03, 0x0f, 0x05, - 0xb9, 0x03, 0x0f, 0x05, 0xdd, 0x03, 0x0f, 0x05, 0xed, 0x03, 0x0f, 0x05, 0xf5, 0x03, 0x0f, 0x05, - 0x55, 0x06, 0xc0, 0x00, 0x15, 0x06, 0x0f, 0x05, 0xa1, 0x06, 0x0f, 0x05, 0xb1, 0x06, 0x0f, 0x05, - 0xb9, 0x06, 0x0f, 0x05, 0xc1, 0x06, 0x0f, 0x05, 0xd5, 0x06, 0x0f, 0x05, 0x25, 0x07, 0x0f, 0x05, - 0x69, 0x07, 0x0f, 0x05, 0x71, 0x07, 0x0f, 0x05, 0x0d, 0x00, 0x4f, 0x05, 0x29, 0x00, 0x4f, 0x05, - 0x39, 0x00, 0x4f, 0x05, 0x6d, 0x00, 0x4f, 0x05, 0x79, 0x00, 0x4f, 0x05, 0x9d, 0x00, 0x4f, 0x05, - 0xe5, 0x01, 0x4f, 0x05, 0x1d, 0x02, 0x4f, 0x05, 0x2d, 0x02, 0x4f, 0x05, 0x31, 0x02, 0x4f, 0x05, - 0x45, 0x02, 0x4f, 0x05, 0x29, 0x03, 0x4f, 0x05, 0x65, 0x03, 0x4f, 0x05, 0x01, 0x04, 0x4f, 0x05, - 0x0d, 0x04, 0x4f, 0x05, 0x19, 0x04, 0x4f, 0x05, 0x4d, 0x04, 0x4f, 0x05, 0x59, 0x04, 0x4f, 0x05, - 0xd9, 0x04, 0x4f, 0x05, 0x81, 0x05, 0x4f, 0x05, 0x85, 0x05, 0x4f, 0x05, 0xad, 0x05, 0x4f, 0x05, - 0xfd, 0x05, 0x4f, 0x05, 0x05, 0x06, 0x4f, 0x05, 0x0d, 0x06, 0x4f, 0x05, 0x39, 0x06, 0x4f, 0x05, - 0x71, 0x00, 0x8f, 0x05, 0xe9, 0x00, 0x8f, 0x05, 0xf9, 0x00, 0x8f, 0x05, 0x09, 0x01, 0x8f, 0x05, - 0xb5, 0x01, 0x8f, 0x05, 0xc1, 0x01, 0x8f, 0x05, 0xe1, 0x01, 0x8f, 0x05, 0xed, 0x01, 0x8f, 0x05, - 0x01, 0x02, 0x8f, 0x05, 0x0d, 0x02, 0x8f, 0x05, 0x19, 0x02, 0x8f, 0x05, 0x49, 0x02, 0x8f, 0x05, - 0x55, 0x02, 0x8f, 0x05, 0x1d, 0x03, 0x8f, 0x05, 0x91, 0x03, 0x8f, 0x05, 0xe5, 0x03, 0x8f, 0x05, - 0x25, 0x04, 0x8f, 0x05, 0x95, 0x04, 0x8f, 0x05, 0xb5, 0x04, 0x8f, 0x05, 0x29, 0x05, 0x8f, 0x05, - 0xa5, 0x05, 0x8f, 0x05, 0x31, 0x06, 0x8f, 0x05, 0x39, 0x06, 0x8f, 0x05, 0x41, 0x06, 0x8f, 0x05, - 0x49, 0x06, 0x8f, 0x05, 0x65, 0x07, 0x8f, 0x05, 0x89, 0x07, 0x8f, 0x05, 0x95, 0x07, 0x8f, 0x05, - 0xb1, 0x07, 0x8f, 0x05, 0xd9, 0x07, 0x8f, 0x05, 0xe5, 0x07, 0x8f, 0x05, 0x15, 0x00, 0xcf, 0x05, - 0xd1, 0x00, 0xcf, 0x05, 0x2d, 0x01, 0xcf, 0x05, 0x45, 0x01, 0xcf, 0x05, 0x75, 0x01, 0xcf, 0x05, - 0xa5, 0x01, 0xcf, 0x05, 0xb5, 0x01, 0xcf, 0x05, 0xd1, 0x01, 0xcf, 0x05, 0xf5, 0x01, 0xcf, 0x05, - 0xb9, 0x02, 0xcf, 0x05, 0xc5, 0x02, 0xcf, 0x05, 0xfd, 0x02, 0xcf, 0x05, 0x11, 0x03, 0xcf, 0x05, - 0x25, 0x03, 0xcf, 0x05, 0x41, 0x03, 0xcf, 0x05, 0x55, 0x03, 0xcf, 0x05, 0x69, 0x03, 0xcf, 0x05, - 0x8d, 0x04, 0xcf, 0x05, 0x9d, 0x04, 0xcf, 0x05, 0xad, 0x04, 0xcf, 0x05, 0xd1, 0x04, 0xcf, 0x05, - 0xe1, 0x04, 0xcf, 0x05, 0x39, 0x05, 0xcf, 0x05, 0x75, 0x05, 0xcf, 0x05, 0xf9, 0x05, 0xcf, 0x05, - 0x05, 0x06, 0xcf, 0x05, 0x11, 0x06, 0xcf, 0x05, 0x25, 0x06, 0xcf, 0x05, 0x35, 0x06, 0xcf, 0x05, - 0x49, 0x06, 0xcf, 0x05, 0x5d, 0x06, 0xcf, 0x05, 0x7d, 0x06, 0xcf, 0x05, 0x91, 0x06, 0xcf, 0x05, - 0xb5, 0x06, 0xcf, 0x05, 0xd1, 0x06, 0xcf, 0x05, 0xf9, 0x06, 0xcf, 0x05, 0x55, 0x07, 0xcf, 0x05, - 0xf1, 0x07, 0xcf, 0x05, 0x09, 0x00, 0x0f, 0x06, 0xdd, 0x00, 0x0f, 0x06, 0xa5, 0x01, 0x0f, 0x06, - 0x19, 0x02, 0x0f, 0x06, 0x25, 0x02, 0x0f, 0x06, 0x39, 0x02, 0x0f, 0x06, 0x45, 0x02, 0x0f, 0x06, - 0x55, 0x02, 0x0f, 0x06, 0x81, 0x02, 0x0f, 0x06, 0xa1, 0x02, 0x0f, 0x06, 0xb5, 0x02, 0x0f, 0x06, - 0xc1, 0x02, 0x0f, 0x06, 0xc9, 0x02, 0x0f, 0x06, 0xd5, 0x02, 0x0f, 0x06, 0x31, 0x03, 0x0f, 0x06, - 0x41, 0x03, 0x0f, 0x06, 0x51, 0x03, 0x0f, 0x06, 0x5d, 0x03, 0x0f, 0x06, 0x65, 0x03, 0x0f, 0x06, - 0x75, 0x03, 0x0f, 0x06, 0xcd, 0x03, 0x0f, 0x06, 0xf9, 0x03, 0x0f, 0x06, 0x05, 0x04, 0x0f, 0x06, - 0x59, 0x06, 0x0f, 0x06, 0x61, 0x06, 0x0f, 0x06, 0xc1, 0x06, 0x0f, 0x06, 0xd5, 0x06, 0x0f, 0x06, - 0xd9, 0x06, 0x0f, 0x06, 0xdd, 0x06, 0x0f, 0x06, 0x79, 0x04, 0x4f, 0x06, 0x91, 0x04, 0x4f, 0x06, - 0xa9, 0x04, 0x4f, 0x06, 0x01, 0x05, 0x4f, 0x06, 0x35, 0x05, 0x4f, 0x06, 0x65, 0x05, 0x4f, 0x06, - 0x2d, 0x06, 0x4f, 0x06, 0x45, 0x06, 0x4f, 0x06, 0x69, 0x06, 0x4f, 0x06, 0x6d, 0x06, 0x4f, 0x06, - 0x71, 0x06, 0x4f, 0x06, 0x75, 0x06, 0x4f, 0x06, 0x79, 0x06, 0x4f, 0x06, 0x7d, 0x06, 0x4f, 0x06, - 0x81, 0x06, 0x4f, 0x06, 0x85, 0x06, 0x4f, 0x06, 0x89, 0x06, 0x4f, 0x06, 0x8d, 0x06, 0x4f, 0x06, - 0x91, 0x06, 0x4f, 0x06, 0x95, 0x06, 0x4f, 0x06, 0xa1, 0x06, 0x4f, 0x06, 0xa9, 0x06, 0x4f, 0x06, - 0x69, 0x00, 0x8f, 0x06, 0x75, 0x00, 0x8f, 0x06, 0x8d, 0x00, 0x8f, 0x06, 0x99, 0x00, 0x8f, 0x06, - 0xa5, 0x00, 0x8f, 0x06, 0xf1, 0x00, 0x8f, 0x06, 0xfd, 0x00, 0x8f, 0x06, 0x09, 0x01, 0x8f, 0x06, - 0x15, 0x01, 0x8f, 0x06, 0x25, 0x01, 0x8f, 0x06, 0xfd, 0x01, 0x8f, 0x06, 0x2d, 0x02, 0x8f, 0x06, - 0xf1, 0x02, 0x8f, 0x06, 0xb5, 0x03, 0x8f, 0x06, 0x4d, 0x04, 0x8f, 0x06, 0x65, 0x04, 0x8f, 0x06, - 0xa9, 0x04, 0x8f, 0x06, 0xbd, 0x05, 0x8f, 0x06, 0x61, 0x06, 0x8f, 0x06, 0x69, 0x06, 0x8f, 0x06, - 0x71, 0x06, 0x8f, 0x06, 0x91, 0x07, 0x8f, 0x06, 0xc5, 0x02, 0xcf, 0x06, 0xe1, 0x02, 0xcf, 0x06, - 0xe9, 0x02, 0xcf, 0x06, 0xf9, 0x02, 0xcf, 0x06, 0x09, 0x03, 0xcf, 0x06, 0xfd, 0x04, 0xcf, 0x06, - 0x55, 0x05, 0xcf, 0x06, 0x71, 0x05, 0xcf, 0x06, 0xd9, 0x05, 0xcf, 0x06, 0x9d, 0x07, 0xcf, 0x06, - 0xb1, 0x07, 0xcf, 0x06, 0xd5, 0x07, 0xcf, 0x06, 0xd9, 0x07, 0xcf, 0x06, 0xdd, 0x07, 0xcf, 0x06, - 0x19, 0x00, 0x0f, 0x07, 0x41, 0x01, 0x0f, 0x07, 0x89, 0x01, 0x0f, 0x07, 0x05, 0x02, 0x0f, 0x07, - 0x1d, 0x02, 0x0f, 0x07, 0x2d, 0x02, 0x0f, 0x07, 0x31, 0x02, 0x0f, 0x07, 0x35, 0x02, 0x0f, 0x07, - 0x3d, 0x02, 0x0f, 0x07, 0x9d, 0x02, 0x0f, 0x07, 0xc5, 0x02, 0x0f, 0x07, 0xed, 0x02, 0x0f, 0x07, - 0x15, 0x03, 0x0f, 0x07, 0x51, 0x03, 0x0f, 0x07, 0xa9, 0x03, 0x0f, 0x07, 0xcd, 0x03, 0x0f, 0x07, - 0xe5, 0x03, 0x0f, 0x07, 0xf5, 0x03, 0x0f, 0x07, 0x05, 0x04, 0x0f, 0x07, 0x2d, 0x04, 0x0f, 0x07, - 0x55, 0x04, 0x0f, 0x07, 0x99, 0x04, 0x0f, 0x07, 0xcd, 0x04, 0x0f, 0x07, 0xf1, 0x04, 0x0f, 0x07, - 0x09, 0x05, 0x0f, 0x07, 0x41, 0x05, 0x0f, 0x07, 0xc1, 0x05, 0x0f, 0x07, 0xe9, 0x05, 0x0f, 0x07, - 0x19, 0x07, 0x0f, 0x07, 0x59, 0x07, 0x0f, 0x07, 0x71, 0x07, 0x0f, 0x07, 0x89, 0x07, 0x0f, 0x07, - 0xa1, 0x07, 0x0f, 0x07, 0xe5, 0x07, 0x0f, 0x07, 0x55, 0x00, 0x4f, 0x07, 0x79, 0x00, 0x4f, 0x07, - 0xb9, 0x00, 0x4f, 0x07, 0x6d, 0x01, 0x4f, 0x07, 0xb5, 0x01, 0x4f, 0x07, 0x4d, 0x03, 0x4f, 0x07, - 0x21, 0x04, 0x4f, 0x07, 0x5d, 0x04, 0x4f, 0x07, 0x85, 0x04, 0x4f, 0x07, 0xf9, 0x04, 0x4f, 0x07, - 0x65, 0x05, 0x4f, 0x07, 0x81, 0x05, 0x4f, 0x07, 0xd9, 0x00, 0x8f, 0x07, 0x35, 0x01, 0x8f, 0x07, - 0x69, 0x01, 0x8f, 0x07, 0x75, 0x01, 0x8f, 0x07, 0xad, 0x01, 0x8f, 0x07, 0xed, 0x01, 0x8f, 0x07, - 0x19, 0x02, 0x8f, 0x07, 0x41, 0x02, 0x8f, 0x07, 0x4d, 0x02, 0x8f, 0x07, 0x59, 0x02, 0x8f, 0x07, - 0xa5, 0x03, 0x8f, 0x07, 0xb9, 0x03, 0x8f, 0x07, 0xc9, 0x03, 0x8f, 0x07, 0xd5, 0x03, 0x8f, 0x07, - 0xed, 0x03, 0x8f, 0x07, 0x01, 0x04, 0x8f, 0x07, 0x11, 0x04, 0x8f, 0x07, 0x21, 0x04, 0x8f, 0x07, - 0x31, 0x04, 0x8f, 0x07, 0x41, 0x04, 0x8f, 0x07, 0x51, 0x04, 0x8f, 0x07, 0x79, 0x04, 0x8f, 0x07, - 0x95, 0x04, 0x8f, 0x07, 0x9d, 0x04, 0x8f, 0x07, 0xa5, 0x04, 0x8f, 0x07, 0xb5, 0x04, 0x8f, 0x07, - 0xc5, 0x04, 0x8f, 0x07, 0xd5, 0x04, 0x8f, 0x07, 0xe5, 0x04, 0x8f, 0x07, 0xf5, 0x04, 0x8f, 0x07, - 0x05, 0x05, 0x8f, 0x07, 0x1d, 0x05, 0x8f, 0x07, 0x2d, 0x05, 0x8f, 0x07, 0x3d, 0x05, 0x8f, 0x07, - 0x51, 0x05, 0x8f, 0x07, 0xc5, 0x07, 0x8f, 0x07, 0xed, 0x07, 0x8f, 0x07, 0xf5, 0x07, 0x8f, 0x07, - 0xfd, 0x07, 0x8f, 0x07, 0x0d, 0x00, 0xcf, 0x07, 0x15, 0x00, 0xcf, 0x07, 0x1d, 0x00, 0xcf, 0x07, - 0x29, 0x00, 0xcf, 0x07, 0x31, 0x00, 0xcf, 0x07, 0x39, 0x00, 0xcf, 0x07, 0x51, 0x00, 0xcf, 0x07, - 0xd1, 0x00, 0xcf, 0x07, 0xd9, 0x00, 0xcf, 0x07, 0xe1, 0x00, 0xcf, 0x07, 0x41, 0x03, 0xcf, 0x07, - 0xad, 0x03, 0xcf, 0x07, 0xe9, 0x03, 0xcf, 0x07, 0x6d, 0x04, 0xcf, 0x07, 0xed, 0x04, 0xcf, 0x07, - 0x1d, 0x05, 0xcf, 0x07, 0x31, 0x05, 0xcf, 0x07, 0xc1, 0x05, 0xcf, 0x07, 0xb1, 0x06, 0xcf, 0x07, - 0xfd, 0x06, 0xcf, 0x07, 0xc1, 0x07, 0xcf, 0x07, 0xf9, 0x07, 0xcf, 0x07, 0x21, 0x00, 0x0f, 0x08, - 0x4d, 0x03, 0x0f, 0x08, 0x5d, 0x03, 0x0f, 0x08, 0x65, 0x03, 0x0f, 0x08, 0xb1, 0x03, 0x0f, 0x08, - 0x6d, 0x00, 0x8f, 0x08, 0x21, 0x02, 0x8f, 0x08, 0x89, 0x02, 0x4f, 0x0a, 0xd1, 0x02, 0x4f, 0x0a, - 0xe5, 0x02, 0x4f, 0x0a, 0xcd, 0x07, 0x4f, 0x0a, 0xd9, 0x07, 0x4f, 0x0a, 0x15, 0x02, 0x8f, 0x0a, - 0x5d, 0x02, 0x8f, 0x0a, 0x95, 0x02, 0x8f, 0x0a, 0xed, 0x02, 0x8f, 0x0a, 0x85, 0x03, 0x8f, 0x0a, - 0x45, 0x05, 0x8f, 0x0a, 0x4d, 0x05, 0x8f, 0x0a, 0x39, 0x06, 0x8f, 0x0a, 0x4d, 0x00, 0xcf, 0x0a, - 0x41, 0x04, 0xcf, 0x0a, 0x91, 0x04, 0xcf, 0x0a, 0xa9, 0x04, 0xcf, 0x0a, 0x31, 0x05, 0xcf, 0x0a, - 0xa5, 0x05, 0xcf, 0x0a, 0x0d, 0x06, 0xcf, 0x0a, 0x4d, 0x06, 0xcf, 0x0a, 0x61, 0x06, 0xcf, 0x0a, - 0x79, 0x06, 0xcf, 0x0a, 0x81, 0x06, 0xcf, 0x0a, 0xb5, 0x06, 0xcf, 0x0a, 0x59, 0x07, 0xcf, 0x0a, - 0x8d, 0x07, 0xcf, 0x0a, 0xc1, 0x07, 0xcf, 0x0a, 0xd5, 0x07, 0xcf, 0x0a, 0xfd, 0x07, 0xcf, 0x0a, - 0x49, 0x00, 0x0f, 0x0b, 0x71, 0x00, 0x0f, 0x0b, 0xf9, 0x00, 0x0f, 0x0b, 0x11, 0x01, 0x0f, 0x0b, - 0x5d, 0x01, 0x0f, 0x0b, 0x65, 0x01, 0x0f, 0x0b, 0x99, 0x01, 0x0f, 0x0b, 0xb9, 0x01, 0x0f, 0x0b, - 0xe5, 0x01, 0x0f, 0x0b, 0x55, 0x02, 0x0f, 0x0b, 0x6d, 0x02, 0x0f, 0x0b, 0x7d, 0x02, 0x0f, 0x0b, - 0x9d, 0x03, 0x0f, 0x0b, 0xa9, 0x03, 0x0f, 0x0b, 0xcd, 0x04, 0x0f, 0x0b, 0x45, 0x06, 0x0f, 0x0b, - 0x51, 0x06, 0x0f, 0x0b, 0xf5, 0x07, 0x0f, 0x0b, 0x0d, 0x00, 0x4f, 0x0b, 0xa1, 0x00, 0x4f, 0x0b, - 0x81, 0x01, 0x4f, 0x0b, 0x15, 0x02, 0x4f, 0x0b, 0x4d, 0x02, 0x4f, 0x0b, 0x5d, 0x02, 0x4f, 0x0b, - 0xbd, 0x02, 0x4f, 0x0b, 0xe5, 0x02, 0x4f, 0x0b, 0xc1, 0x03, 0x4f, 0x0b, 0x39, 0x04, 0x4f, 0x0b, - 0x41, 0x04, 0x4f, 0x0b, 0x95, 0x05, 0x4f, 0x0b, 0xf9, 0x05, 0x4f, 0x0b, 0x49, 0x06, 0x4f, 0x0b, - 0x6d, 0x06, 0x4f, 0x0b, 0x41, 0x03, 0x8f, 0x0b, 0x59, 0x03, 0x8f, 0x0b, 0x21, 0x07, 0x8f, 0x0b, - 0x89, 0x03, 0x0f, 0x0c, 0x5d, 0x05, 0x4f, 0x0c, 0xd9, 0x05, 0x4f, 0x0c, 0x05, 0x06, 0x4f, 0x0c, - 0x75, 0x06, 0x4f, 0x0c, 0x45, 0x07, 0x4f, 0x0c, 0x89, 0x07, 0x4f, 0x0c, 0xb5, 0x07, 0x4f, 0x0c, - 0x21, 0x00, 0x8f, 0x0c, 0xc5, 0x00, 0x8f, 0x0c, 0x75, 0x02, 0x8f, 0x0c, 0x95, 0x02, 0x8f, 0x0c, - 0x99, 0x02, 0x8f, 0x0c, 0x9d, 0x02, 0x8f, 0x0c, 0xa1, 0x02, 0x8f, 0x0c, 0xad, 0x02, 0x8f, 0x0c, - 0xb5, 0x02, 0x8f, 0x0c, 0xb9, 0x02, 0x8f, 0x0c, 0xc1, 0x02, 0x8f, 0x0c, 0x5d, 0x03, 0x8f, 0x0c, - 0xbd, 0x03, 0x8f, 0x0c, 0xc9, 0x03, 0x8f, 0x0c, 0xcd, 0x03, 0x8f, 0x0c, 0xd9, 0x03, 0x8f, 0x0c, - 0xe1, 0x03, 0x8f, 0x0c, 0xe5, 0x03, 0x8f, 0x0c, 0xed, 0x03, 0x8f, 0x0c, 0x3d, 0x04, 0x8f, 0x0c, - 0x6d, 0x04, 0x8f, 0x0c, 0x71, 0x04, 0x8f, 0x0c, 0x7d, 0x04, 0x8f, 0x0c, 0x81, 0x04, 0x8f, 0x0c, - 0x85, 0x04, 0x8f, 0x0c, 0x99, 0x04, 0x8f, 0x0c, 0x31, 0x05, 0x4f, 0x0d, 0x85, 0x05, 0x4f, 0x0d, - 0x61, 0x04, 0x8f, 0x0d, 0xc9, 0x04, 0x8f, 0x0d, 0x69, 0x05, 0x8f, 0x0d, 0xe9, 0x05, 0x8f, 0x0d, - 0x19, 0x06, 0x8f, 0x0d, 0xd1, 0x06, 0x8f, 0x0d, 0xe9, 0x07, 0x8f, 0x0d, 0xf1, 0x07, 0x8f, 0x0d, - 0x21, 0x00, 0xcf, 0x0d, 0x2d, 0x00, 0xcf, 0x0d, 0x39, 0x00, 0xcf, 0x0d, 0x45, 0x00, 0xcf, 0x0d, - 0x51, 0x00, 0xcf, 0x0d, 0x5d, 0x00, 0xcf, 0x0d, 0x65, 0x00, 0xcf, 0x0d, 0x6d, 0x00, 0xcf, 0x0d, - 0xf1, 0x00, 0xcf, 0x0d, 0xfd, 0x00, 0xcf, 0x0d, 0x05, 0x01, 0xcf, 0x0d, 0x0d, 0x01, 0xcf, 0x0d, - 0x15, 0x01, 0xcf, 0x0d, 0x1d, 0x01, 0xcf, 0x0d, 0x25, 0x01, 0xcf, 0x0d, 0xd5, 0x02, 0xcf, 0x0d, - 0x81, 0x07, 0xcf, 0x0d, 0xfd, 0x07, 0xcf, 0x0d, 0xd5, 0x00, 0x0f, 0x0e, 0x3d, 0x01, 0x0f, 0x0e, - 0x85, 0x01, 0x0f, 0x0e, 0xa1, 0x01, 0x0f, 0x0e, 0xa5, 0x02, 0x0f, 0x0e, 0x51, 0x03, 0x0f, 0x0e, - 0xfd, 0x03, 0x0f, 0x0e, 0x35, 0x07, 0x0f, 0x0e, 0x85, 0x07, 0x0f, 0x0e, 0x0d, 0x00, 0x4f, 0x0e, - 0x9d, 0x00, 0x4f, 0x0e, 0x21, 0x01, 0x4f, 0x0e, 0x2d, 0x02, 0x4f, 0x0e, 0x3d, 0x02, 0x4f, 0x0e, - 0x91, 0x07, 0x8f, 0x0e, 0x9d, 0x07, 0x8f, 0x0e, 0xa9, 0x07, 0x8f, 0x0e, 0xb5, 0x07, 0x8f, 0x0e, - 0xd9, 0x07, 0x8f, 0x0e, 0xed, 0x07, 0x8f, 0x0e, 0xd1, 0x00, 0xcf, 0x0e, 0xd9, 0x00, 0xcf, 0x0e, - 0xe1, 0x00, 0xcf, 0x0e, 0xf5, 0x00, 0xcf, 0x0e, 0x75, 0x00, 0x4f, 0x08, 0x5d, 0x06, 0x80, 0x00, - 0x5d, 0x06, 0x00, 0x00, 0xed, 0x01, 0x00, 0x00, 0x11, 0x03, 0x40, 0x01, 0x15, 0x04, 0xcf, 0x0b, - 0xe9, 0x00, 0x8f, 0x0c, 0xd9, 0x05, 0x8f, 0x0c, 0xed, 0x05, 0x8f, 0x0c, 0xf5, 0x05, 0x8f, 0x0c, - 0xf9, 0x05, 0x8f, 0x0c, 0x01, 0x06, 0x8f, 0x0c, 0x21, 0x06, 0x8f, 0x0c, 0x85, 0x00, 0xcf, 0x0c, - 0xa5, 0x01, 0xcf, 0x0c, 0xe1, 0x01, 0xcf, 0x0c, 0xe5, 0x01, 0xcf, 0x0c, 0x09, 0x05, 0x0f, 0x0d, - 0x31, 0x05, 0x0f, 0x0d, 0x85, 0x07, 0x0f, 0x0d, 0xad, 0x07, 0x0f, 0x0d, 0xb9, 0x07, 0x0f, 0x0d, - 0xc1, 0x07, 0x0f, 0x0d, 0xe5, 0x07, 0x0f, 0x0d, 0x29, 0x05, 0xc0, 0x02, 0x11, 0x04, 0x4f, 0x0e, - 0x25, 0x04, 0x4f, 0x0e, 0x5d, 0x04, 0x4f, 0x0e, 0x8d, 0x04, 0x4f, 0x0e, 0xb5, 0x04, 0x4f, 0x0e, - 0x85, 0x05, 0x4f, 0x0e, 0x29, 0x06, 0x4f, 0x0e, 0x65, 0x02, 0x8f, 0x0e, 0xad, 0x02, 0x8f, 0x0e, - 0xb9, 0x02, 0x8f, 0x0e, 0xdd, 0x02, 0x8f, 0x0e, 0x09, 0x03, 0x8f, 0x0e, 0xf5, 0x03, 0x0f, 0x0f, - 0x4d, 0x04, 0x0f, 0x0f, 0xed, 0x04, 0x0f, 0x0f, 0x95, 0x05, 0x0f, 0x0f, 0xe9, 0x01, 0x4f, 0x0f, - 0xab, 0x26, 0xe0, 0x7c, 0x00, 0x00, 0x4f, 0x00, 0x6f, 0x24, 0x3f, 0x00, 0x2f, 0x23, 0x00, 0x80, - 0x41, 0x2b, 0xc2, 0x00, 0xc3, 0x72, 0x00, 0x70, 0x00, 0x00, 0x2f, 0x21, 0x84, 0x00, 0x41, 0x2b, - 0x0c, 0x06, 0x61, 0xbc, 0x8c, 0x24, 0x83, 0x9f, 0xe1, 0x20, 0xc5, 0x07, 0x40, 0x2b, 0x00, 0x07, - 0xc5, 0x21, 0x81, 0x0f, 0x00, 0x7f, 0x00, 0x00, 0xe1, 0x20, 0xc1, 0x07, 0x74, 0x70, 0xe1, 0x20, - 0xc1, 0x07, 0xc2, 0x21, 0x41, 0x00, 0x41, 0x2a, 0x42, 0x05, 0x8d, 0x70, 0x60, 0x44, 0x0c, 0x24, - 0x80, 0x8f, 0x01, 0x00, 0x00, 0x00, 0xc1, 0x2c, 0x26, 0x04, 0xc0, 0x24, 0x25, 0x14, 0x8c, 0x24, - 0x04, 0x80, 0xc1, 0x2c, 0x26, 0x02, 0xc0, 0x24, 0x25, 0x12, 0x4c, 0x24, 0x00, 0x84, 0xc1, 0x2c, - 0x26, 0x01, 0xc0, 0x24, 0x25, 0x11, 0x94, 0x74, 0xc1, 0x2c, 0xa6, 0x00, 0xc0, 0x24, 0xa5, 0x10, - 0x94, 0x72, 0xc0, 0x24, 0x65, 0x10, 0x85, 0x71, 0x00, 0x2b, 0x03, 0x03, 0x69, 0xbc, 0x82, 0x7a, - 0x40, 0x2a, 0x02, 0x05, 0x2f, 0x21, 0x40, 0x80, 0x2f, 0x21, 0x84, 0x00, 0x41, 0x2b, 0x0c, 0x03, - 0x85, 0x79, 0xe0, 0x7f, 0x40, 0x2b, 0x00, 0x05, 0x2f, 0x24, 0x40, 0x90, 0x02, 0x24, 0x83, 0x1f, - 0x00, 0x70, 0x00, 0x00, 0x40, 0x2b, 0xc2, 0x00, 0x2f, 0x22, 0x84, 0x00, 0x02, 0x23, 0x83, 0x0f, - 0x20, 0x00, 0x00, 0x00, 0xd3, 0x73, 0xc0, 0x1f, 0x00, 0x00, 0x40, 0x28, 0x03, 0x01, 0x1a, 0x00, - 0x26, 0x00, 0x41, 0x28, 0x40, 0x87, 0x45, 0x78, 0x44, 0x20, 0x41, 0x00, 0x05, 0x21, 0xc1, 0x80, - 0xe0, 0x7f, 0xc1, 0x20, 0x22, 0x00, 0x2f, 0x23, 0xc4, 0x00, 0x45, 0x78, 0x41, 0x2c, 0x4c, 0x15, - 0x82, 0x24, 0x0d, 0x9a, 0xe1, 0x20, 0xcb, 0x07, 0xca, 0x20, 0x2b, 0x00, 0x42, 0x24, 0x0c, 0x96, - 0x53, 0x20, 0x81, 0x05, 0x22, 0x00, 0x2c, 0x00, 0x2f, 0x20, 0x00, 0x80, 0x05, 0x21, 0xc1, 0x80, - 0x2f, 0x20, 0x84, 0x0f, 0x80, 0xff, 0x00, 0x00, 0xd0, 0x20, 0xa1, 0x05, 0x8c, 0x24, 0xd1, 0x9f, - 0xe0, 0x7f, 0xd0, 0x20, 0xa2, 0x05, 0x4e, 0x24, 0x02, 0x10, 0x97, 0xb9, 0x01, 0x29, 0x80, 0x00, - 0x2f, 0x20, 0x04, 0x80, 0xe1, 0x20, 0xc6, 0x07, 0x4e, 0x22, 0xcc, 0x07, 0x13, 0x21, 0x01, 0x03, - 0x05, 0x21, 0xc1, 0x80, 0xd1, 0x20, 0x21, 0x80, 0xe0, 0x7f, 0xc0, 0x20, 0x62, 0x00, 0xe0, 0x78, - 0xcb, 0x44, 0xe0, 0xff, 0x00, 0x00, 0x14, 0x24, 0x44, 0x10, 0x14, 0x24, 0xc5, 0x10, 0xb6, 0xbc, - 0x0c, 0x24, 0x00, 0x83, 0xcc, 0x25, 0x05, 0x83, 0xc2, 0x00, 0x26, 0x00, 0x96, 0xbc, 0x41, 0x2c, - 0x44, 0x05, 0x41, 0x2d, 0x45, 0x05, 0x00, 0x25, 0x05, 0x01, 0x82, 0x25, 0x8f, 0x0f, 0x8c, 0x25, - 0xdf, 0x8e, 0xf4, 0x00, 0x26, 0x00, 0x07, 0x21, 0xcc, 0x80, 0x40, 0x25, 0x47, 0x00, 0x94, 0xb9, - 0xd4, 0xb9, 0x94, 0xbb, 0xcf, 0x27, 0xe4, 0x02, 0x40, 0x2b, 0xc3, 0x02, 0x41, 0x2a, 0x45, 0x05, - 0x40, 0x2a, 0xc2, 0x82, 0x1d, 0x20, 0x84, 0x00, 0x05, 0x23, 0x43, 0x01, 0x1c, 0x20, 0x8c, 0x00, - 0x94, 0x70, 0x1d, 0x20, 0xc4, 0x00, 0xcf, 0x27, 0xe2, 0x07, 0x1c, 0x20, 0xc5, 0x00, 0x00, 0x24, - 0x0c, 0x91, 0x1d, 0x21, 0x84, 0x00, 0x41, 0x25, 0x00, 0x00, 0x1c, 0x21, 0x85, 0x00, 0x00, 0x24, - 0x0c, 0x91, 0x1d, 0x21, 0xc4, 0x00, 0x01, 0x20, 0x40, 0x81, 0x1c, 0x21, 0xc5, 0x00, 0x41, 0x26, - 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x81, 0x01, 0x21, 0x41, 0x01, 0x1b, 0x09, - 0x3f, 0x05, 0x00, 0x24, 0x0c, 0x93, 0x42, 0x27, 0x47, 0x00, 0x01, 0x20, 0x00, 0x80, 0x01, 0x21, - 0x41, 0x00, 0x00, 0x24, 0x0c, 0x93, 0x40, 0x2f, 0x04, 0x05, 0xe1, 0x20, 0xc6, 0x07, 0x80, 0x71, - 0x40, 0x29, 0xc5, 0x07, 0x05, 0x25, 0xc5, 0x81, 0xcf, 0x25, 0xe2, 0x07, 0x41, 0x2d, 0xc5, 0x07, - 0x00, 0x20, 0x40, 0x81, 0xe0, 0x7f, 0x41, 0x21, 0x01, 0x00, 0x02, 0x24, 0x04, 0x83, 0xcc, 0x20, - 0x21, 0x80, 0xe1, 0x20, 0xc1, 0x07, 0xca, 0x21, 0x21, 0x00, 0x02, 0x25, 0x05, 0x83, 0xcc, 0x22, - 0x21, 0x80, 0xca, 0x20, 0x21, 0x00, 0xe1, 0x20, 0xc1, 0x07, 0xca, 0x21, 0x21, 0x00, 0x0c, 0x24, - 0x00, 0x83, 0xcc, 0x25, 0x05, 0x83, 0x20, 0x00, 0x25, 0x00, 0x0c, 0x24, 0x40, 0x81, 0xcc, 0x20, - 0x81, 0x80, 0xca, 0x20, 0x85, 0x00, 0xca, 0x21, 0xc5, 0x00, 0x07, 0x23, 0x43, 0x80, 0xe0, 0x7f, - 0xcf, 0x21, 0xe4, 0x07, 0x2f, 0x25, 0xc0, 0x80, 0x41, 0x26, 0x04, 0x70, 0x00, 0x00, 0x00, 0x00, - 0xcc, 0x22, 0x21, 0x80, 0x08, 0x03, 0x21, 0x00, 0x2f, 0x21, 0x40, 0x90, 0xc7, 0x24, 0x65, 0x00, - 0xcc, 0x20, 0x21, 0x80, 0xd4, 0x02, 0x01, 0x00, 0x41, 0x29, 0x46, 0x95, 0x06, 0x21, 0x81, 0x0f, - 0xf0, 0xff, 0x00, 0x00, 0xc5, 0x21, 0x82, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x22, 0x00, - 0x00, 0x40, 0xcb, 0x42, 0x10, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x80, 0x2f, 0x21, 0x4b, 0x00, - 0xc4, 0x71, 0x04, 0x21, 0xbe, 0x82, 0x42, 0x26, 0x46, 0x00, 0x12, 0x00, 0x02, 0x00, 0x2f, 0x20, - 0x00, 0x80, 0xf3, 0x07, 0xef, 0xff, 0x2f, 0x21, 0x4b, 0x00, 0x41, 0x2d, 0x47, 0x85, 0x06, 0x23, - 0x88, 0x0f, 0xf0, 0xff, 0x00, 0x00, 0xc5, 0x20, 0x82, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, - 0x22, 0x00, 0x40, 0x42, 0xcb, 0x42, 0x10, 0x00, 0x00, 0x00, 0x2f, 0x22, 0x80, 0x80, 0x2f, 0x20, - 0x0b, 0x12, 0xe4, 0x71, 0x04, 0x20, 0xbe, 0x92, 0x42, 0x27, 0x47, 0x00, 0x10, 0x00, 0x02, 0x00, - 0x2f, 0x22, 0x80, 0x80, 0xf1, 0x07, 0xef, 0xff, 0x2f, 0x20, 0x0b, 0x12, 0x8c, 0x26, 0xdf, 0x8f, - 0xf2, 0x01, 0x01, 0x00, 0x8c, 0x27, 0xdf, 0x8f, 0x1c, 0x02, 0x21, 0x00, 0x1d, 0x20, 0x8a, 0x00, - 0x00, 0x26, 0xc6, 0x01, 0x1c, 0x20, 0x8b, 0x00, 0x1d, 0x21, 0x87, 0x00, 0x82, 0x26, 0xcf, 0x0f, - 0x1c, 0x21, 0x8c, 0x00, 0x00, 0x23, 0xcb, 0x91, 0x41, 0x24, 0x02, 0x10, 0x1d, 0x20, 0x07, 0x02, - 0x1c, 0x20, 0x0c, 0x02, 0x00, 0x23, 0xcb, 0x91, 0x01, 0x22, 0x02, 0x03, 0x1d, 0x21, 0x07, 0x02, - 0x1c, 0x21, 0x0c, 0x02, 0x00, 0x22, 0xc2, 0x81, 0x41, 0x24, 0x09, 0x10, 0x40, 0x29, 0x01, 0x13, - 0x41, 0x2a, 0x03, 0x05, 0x65, 0x79, 0x40, 0x2a, 0x07, 0x03, 0x40, 0x2a, 0x00, 0x03, 0x41, 0x2b, - 0x03, 0x15, 0x65, 0x78, 0x40, 0x2b, 0x0c, 0x13, 0x55, 0x70, 0xc5, 0x24, 0xa2, 0x10, 0xd4, 0x70, - 0x40, 0x00, 0x0c, 0x00, 0x04, 0x21, 0xbe, 0x8f, 0x20, 0x00, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, - 0xc4, 0x71, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x80, 0x2f, 0x24, 0x04, 0x13, 0x95, 0x70, - 0x36, 0x00, 0x0a, 0x00, 0x04, 0x24, 0xbe, 0x9f, 0xff, 0x7f, 0xff, 0xff, 0x0c, 0x00, 0x02, 0x00, - 0x44, 0x20, 0x7e, 0x80, 0x22, 0x00, 0x01, 0x00, 0x40, 0x20, 0x40, 0x80, 0x41, 0x21, 0x01, 0x00, - 0x04, 0x21, 0xbe, 0x8f, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x01, 0x00, 0xc4, 0x71, 0x2f, 0x21, - 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x8c, 0x26, 0xdf, 0x8f, 0x0e, 0x01, 0x0a, 0x00, 0xd4, 0x70, - 0x1a, 0x00, 0x0c, 0x00, 0x06, 0x21, 0x81, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x40, 0x2e, 0x02, 0x05, - 0x45, 0x79, 0x2f, 0x22, 0x03, 0x01, 0x45, 0x79, 0xe0, 0x7e, 0x8c, 0x26, 0xff, 0x82, 0xfa, 0x00, - 0x0b, 0x00, 0x02, 0x26, 0x8a, 0x71, 0x00, 0x00, 0x00, 0x00, 0x42, 0x22, 0x4a, 0x90, 0x4a, 0x26, - 0x00, 0x70, 0x88, 0x00, 0x0b, 0x00, 0x8c, 0x00, 0x01, 0x00, 0x4c, 0x22, 0x00, 0x98, 0x4a, 0x26, - 0x00, 0x70, 0x2a, 0x00, 0x0b, 0x00, 0x42, 0x22, 0x0a, 0x18, 0x05, 0x24, 0x0c, 0x90, 0x6d, 0x77, - 0x10, 0x00, 0x02, 0x00, 0x00, 0x2b, 0x8b, 0x12, 0x87, 0x23, 0xff, 0x1f, 0x04, 0x21, 0xcc, 0x02, - 0x01, 0x29, 0x80, 0x02, 0x5d, 0x00, 0x20, 0x00, 0x2c, 0x70, 0x95, 0x70, 0x6d, 0x77, 0x1e, 0x00, - 0x02, 0x00, 0x4c, 0x22, 0x00, 0x98, 0xc2, 0x23, 0xca, 0x12, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x2b, - 0x8b, 0x12, 0x87, 0x23, 0xff, 0x1f, 0x04, 0x20, 0xcc, 0x02, 0x02, 0x26, 0x8b, 0xf2, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x29, 0xcb, 0x02, 0x14, 0x00, 0x09, 0x00, 0x40, 0x22, 0x0b, 0x18, 0x01, 0x29, - 0xc0, 0x02, 0x15, 0x00, 0x20, 0x00, 0x2c, 0x70, 0x01, 0x28, 0x80, 0x02, 0x01, 0x29, 0x81, 0x02, - 0x05, 0x20, 0xc0, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x80, 0x2f, 0x21, 0x4b, 0x00, - 0x44, 0x20, 0xbe, 0x80, 0x4a, 0x26, 0x00, 0x70, 0x1c, 0x00, 0x01, 0x00, 0x44, 0x20, 0x4a, 0x01, - 0x05, 0x22, 0x3e, 0x93, 0x4a, 0x26, 0x00, 0x70, 0x0c, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x80, - 0x41, 0x21, 0x01, 0x00, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x2f, 0x21, 0x42, 0x80, - 0x2f, 0x20, 0x04, 0x00, 0x02, 0x26, 0x86, 0x01, 0x04, 0x21, 0xbe, 0x8f, 0x10, 0x00, 0x00, 0x00, - 0xc0, 0x26, 0x62, 0x00, 0x80, 0xf1, 0x8a, 0x26, 0xdf, 0x0f, 0xc3, 0x41, 0x10, 0x00, 0x00, 0x00, - 0xf5, 0x06, 0xef, 0xff, 0x0c, 0x70, 0x02, 0x26, 0x86, 0x01, 0x2c, 0x70, 0xe9, 0x06, 0xef, 0xff, - 0x0c, 0x70, 0xd3, 0x71, 0x10, 0x00, 0x00, 0x00, 0xcc, 0x20, 0x21, 0x80, 0x2f, 0x21, 0x03, 0x01, - 0xc5, 0x21, 0x82, 0x0f, 0xf8, 0x7f, 0x00, 0x00, 0xc0, 0x78, 0x70, 0xf5, 0x8c, 0x27, 0xdf, 0x8f, - 0x14, 0x00, 0x01, 0x00, 0x2f, 0x21, 0x03, 0x01, 0x05, 0x21, 0x81, 0x0f, 0xf0, 0x7f, 0x00, 0x00, - 0x0c, 0x70, 0x64, 0xf1, 0x0c, 0x20, 0x80, 0x9f, 0x10, 0x00, 0x00, 0x00, 0xcc, 0x22, 0x21, 0x80, - 0x2f, 0x21, 0x03, 0x01, 0xc5, 0x21, 0x82, 0x0f, 0xf8, 0x7f, 0x00, 0x00, 0xc5, 0x21, 0x81, 0x0f, - 0xf0, 0x7f, 0x00, 0x00, 0x0c, 0x70, 0x52, 0xf1, 0x0c, 0x25, 0x80, 0x8f, 0xe0, 0xff, 0x00, 0x00, - 0x4a, 0x26, 0x00, 0x70, 0x2a, 0x00, 0x06, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x0c, 0x70, 0x2c, 0x70, - 0x94, 0x70, 0xc5, 0x21, 0x82, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x40, 0xf1, 0xc7, 0x24, 0x65, 0x00, - 0x0c, 0x21, 0x80, 0x9f, 0xe0, 0xff, 0x00, 0x00, 0xb2, 0xf7, 0x4a, 0x26, 0x00, 0x70, 0xc3, 0x41, - 0xf8, 0x7f, 0x00, 0x00, 0x0c, 0x70, 0x32, 0xf1, 0x07, 0x21, 0x81, 0x0f, 0x00, 0x80, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x07, 0x23, 0x83, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x00, 0x21, 0x44, 0x00, - 0x00, 0x23, 0xc5, 0x00, 0x0c, 0x24, 0x40, 0x81, 0xcc, 0x20, 0x81, 0x80, 0x10, 0x00, 0x06, 0x00, - 0x08, 0x44, 0x40, 0x40, 0x81, 0x42, 0x28, 0x44, 0x60, 0x41, 0x81, 0x43, 0x8a, 0x24, 0xdf, 0x1f, - 0x40, 0x2c, 0x4c, 0x15, 0x14, 0x24, 0x44, 0x10, 0x14, 0x24, 0xc5, 0x10, 0x40, 0x2c, 0x8c, 0x10, - 0x0c, 0x24, 0x00, 0x83, 0xcc, 0x25, 0x05, 0x83, 0x92, 0x01, 0x06, 0x00, 0x41, 0x29, 0x04, 0x05, - 0x41, 0x2b, 0x05, 0x05, 0x02, 0x24, 0x46, 0x01, 0x53, 0x26, 0x86, 0x02, 0x07, 0x21, 0xc7, 0x00, - 0x40, 0x29, 0xc1, 0x02, 0x41, 0x28, 0x4c, 0x05, 0x85, 0x79, 0x40, 0x28, 0xc0, 0x02, 0x40, 0x2b, - 0xc3, 0x02, 0x41, 0x2a, 0x4c, 0x05, 0x85, 0x7b, 0x40, 0x2a, 0xc2, 0x02, 0x9f, 0xbb, 0x4e, 0x26, - 0x0c, 0x88, 0x1c, 0x00, 0x2d, 0x00, 0x01, 0x2a, 0x85, 0x01, 0x8c, 0x26, 0x01, 0x80, 0x01, 0x2b, - 0x85, 0x01, 0xca, 0x25, 0x26, 0x00, 0x17, 0x00, 0x20, 0x00, 0x8d, 0x70, 0xd4, 0x70, 0x00, 0x2b, - 0x0c, 0x03, 0xc5, 0x25, 0x02, 0x03, 0x01, 0x2b, 0x8c, 0x01, 0x41, 0x2f, 0xc7, 0x87, 0x62, 0x00, - 0x22, 0x00, 0x9f, 0xb9, 0x00, 0x25, 0x05, 0x80, 0x01, 0x24, 0x4c, 0x90, 0x10, 0x00, 0x26, 0x00, - 0xc2, 0x24, 0x66, 0x00, 0x2f, 0x24, 0x04, 0x93, 0x2f, 0x25, 0x44, 0x01, 0x41, 0x2d, 0xc0, 0x82, - 0x40, 0x2c, 0x41, 0x15, 0x25, 0x78, 0x41, 0x2c, 0xc1, 0x12, 0x40, 0x2c, 0x04, 0x05, 0xe1, 0x20, - 0xc6, 0x07, 0x80, 0x71, 0x4c, 0x26, 0x00, 0x88, 0xca, 0x23, 0x85, 0x00, 0xca, 0x22, 0x25, 0x00, - 0x13, 0x23, 0x83, 0x01, 0x05, 0x23, 0x83, 0x80, 0xd3, 0x25, 0x61, 0x82, 0xd1, 0x20, 0x21, 0x80, - 0xca, 0x27, 0x62, 0x00, 0x00, 0x20, 0xc0, 0x81, 0xe0, 0x7f, 0x41, 0x21, 0x01, 0x00, 0x0e, 0x25, - 0x05, 0x80, 0x03, 0x21, 0x0c, 0x83, 0x52, 0x00, 0x23, 0x00, 0x0c, 0x70, 0x41, 0x2d, 0xc0, 0x82, - 0x40, 0x2c, 0x41, 0x15, 0x25, 0x78, 0x41, 0x2c, 0xc1, 0x12, 0x42, 0x24, 0x44, 0x00, 0x40, 0x2c, - 0x04, 0x05, 0xe1, 0x20, 0xc6, 0x07, 0x80, 0x71, 0x4c, 0x26, 0x00, 0x88, 0xca, 0x23, 0x85, 0x00, - 0xca, 0x22, 0x25, 0x00, 0x13, 0x23, 0x83, 0x01, 0x05, 0x23, 0x83, 0x80, 0xca, 0x27, 0x22, 0x00, - 0x04, 0x27, 0x07, 0x80, 0xd3, 0x25, 0x61, 0x82, 0xca, 0x27, 0x62, 0x00, 0x00, 0x20, 0xc0, 0x81, - 0xe0, 0x7f, 0x41, 0x21, 0x01, 0x00, 0xcc, 0x25, 0x21, 0x80, 0xe1, 0x20, 0xc1, 0x07, 0x2c, 0x70, - 0x00, 0x25, 0x45, 0x81, 0x01, 0x24, 0x0c, 0x93, 0xf8, 0x07, 0xe3, 0xff, 0x04, 0x71, 0x53, 0x24, - 0x81, 0x02, 0x0e, 0x20, 0x40, 0x80, 0x04, 0x24, 0x84, 0x0f, 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, - 0x22, 0x00, 0xc0, 0x20, 0x61, 0x00, 0x2f, 0x24, 0x02, 0x93, 0x2f, 0x25, 0x44, 0x01, 0x80, 0x07, - 0xe6, 0xff, 0xc5, 0x24, 0x06, 0x00, 0x4e, 0x20, 0x40, 0x00, 0x4e, 0x20, 0x01, 0x88, 0x1a, 0x00, - 0x2d, 0x00, 0x01, 0x2d, 0x05, 0x00, 0xc0, 0xe0, 0x01, 0x2c, 0x05, 0x10, 0xca, 0x25, 0x26, 0x00, - 0x15, 0x00, 0x20, 0x00, 0x8d, 0x70, 0x14, 0x70, 0x00, 0x2c, 0x41, 0x10, 0xc5, 0x25, 0x42, 0x00, - 0x01, 0x2c, 0x0c, 0x10, 0x49, 0x07, 0xef, 0xff, 0x84, 0x71, 0x2f, 0x22, 0x40, 0x90, 0x41, 0x26, - 0x04, 0x70, 0x00, 0x00, 0x00, 0x00, 0x34, 0x02, 0x01, 0x00, 0x2f, 0x23, 0xc0, 0x90, 0x41, 0x26, - 0x05, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x01, 0x00, 0x0c, 0x23, 0x80, 0x92, 0xcc, 0x22, - 0x01, 0x80, 0x08, 0x42, 0x14, 0x00, 0x0e, 0x00, 0x40, 0x40, 0x41, 0x42, 0x28, 0x42, 0x60, 0x41, - 0x41, 0x43, 0x88, 0x42, 0xa0, 0x44, 0x41, 0x45, 0x2f, 0x26, 0x40, 0x00, 0x41, 0x2e, 0x46, 0x85, - 0x06, 0x21, 0x81, 0x0f, 0xf0, 0xff, 0x00, 0x00, 0xc5, 0x21, 0x82, 0x0f, 0x10, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x22, 0x00, 0x00, 0x40, 0xcb, 0x42, 0x10, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x80, - 0x2f, 0x21, 0x4b, 0x00, 0xc4, 0x71, 0x04, 0x21, 0xbe, 0x82, 0x42, 0x26, 0x46, 0x00, 0x12, 0x00, - 0x02, 0x00, 0x2f, 0x20, 0x00, 0x80, 0xf3, 0x07, 0xef, 0xff, 0x2f, 0x21, 0x4b, 0x00, 0x2f, 0x27, - 0xc0, 0x00, 0x41, 0x2f, 0x47, 0x85, 0x06, 0x23, 0x88, 0x0f, 0xf0, 0xff, 0x00, 0x00, 0xc5, 0x20, - 0x82, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x22, 0x00, 0x40, 0x42, 0xcb, 0x42, 0x10, 0x00, - 0x00, 0x00, 0x2f, 0x22, 0x80, 0x80, 0x2f, 0x20, 0x0b, 0x12, 0xe4, 0x71, 0x04, 0x20, 0xbe, 0x92, - 0x42, 0x27, 0x47, 0x00, 0x10, 0x00, 0x02, 0x00, 0x2f, 0x22, 0x80, 0x80, 0xf1, 0x07, 0xef, 0xff, - 0x2f, 0x20, 0x0b, 0x12, 0x8c, 0x26, 0xdf, 0x8f, 0x4a, 0x26, 0x00, 0x70, 0x76, 0x03, 0x01, 0x00, - 0x8c, 0x27, 0xdf, 0x8f, 0x4a, 0x26, 0x00, 0x70, 0xc4, 0x03, 0x21, 0x00, 0x02, 0x26, 0xcb, 0x01, - 0x4c, 0x23, 0x80, 0x9d, 0x02, 0x21, 0x49, 0x12, 0x3a, 0x01, 0x09, 0x00, 0x42, 0x23, 0x8a, 0x90, - 0x4a, 0x26, 0x00, 0x70, 0x8a, 0x00, 0x01, 0x00, 0x24, 0x00, 0x09, 0x00, 0x2f, 0x22, 0x80, 0x80, - 0x2f, 0x20, 0x0b, 0x12, 0x40, 0x22, 0x4a, 0x90, 0x4a, 0x26, 0x00, 0x70, 0x72, 0x00, 0x01, 0x00, - 0x2f, 0x22, 0x80, 0x80, 0x6b, 0x00, 0x20, 0x00, 0x2f, 0x20, 0x0b, 0x12, 0x4c, 0x22, 0x00, 0x98, - 0x6d, 0x70, 0x28, 0x00, 0x2b, 0x00, 0x42, 0x22, 0x0a, 0x18, 0x0a, 0x21, 0x80, 0x90, 0x12, 0x00, - 0x02, 0x00, 0x02, 0x26, 0x8b, 0x72, 0x00, 0x00, 0x20, 0x00, 0x00, 0x28, 0xc9, 0x12, 0x01, 0x28, - 0x82, 0x12, 0x3f, 0x00, 0x20, 0x00, 0x0d, 0x70, 0x02, 0x26, 0x8b, 0x72, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x2a, 0xc9, 0x02, 0x02, 0x26, 0x8b, 0xf2, 0x00, 0x00, 0x20, 0x00, 0x00, 0x28, 0xcb, 0x12, - 0x12, 0x00, 0x09, 0x00, 0x40, 0x22, 0x0b, 0x18, 0x01, 0x28, 0xc2, 0x12, 0x13, 0x00, 0x20, 0x00, - 0x0d, 0x70, 0x01, 0x2a, 0x82, 0x02, 0x01, 0x28, 0x88, 0x12, 0x05, 0x22, 0xc2, 0x02, 0x2f, 0x20, - 0x00, 0x80, 0x2f, 0x21, 0x4b, 0x00, 0x2f, 0x20, 0x00, 0x80, 0x2f, 0x21, 0x4b, 0x00, 0x0c, 0x24, - 0x40, 0x81, 0x4a, 0x26, 0x00, 0x70, 0xe0, 0x01, 0x02, 0x00, 0x00, 0x20, 0x80, 0x80, 0x01, 0x21, - 0x01, 0x02, 0x04, 0x21, 0xbe, 0x8f, 0x80, 0x00, 0x00, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x14, 0x00, - 0x01, 0x00, 0xc4, 0x71, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x80, 0xc5, 0x21, 0x65, 0x10, - 0x44, 0x20, 0xbe, 0x80, 0x4a, 0x26, 0x00, 0x70, 0x34, 0x00, 0x21, 0x00, 0x35, 0x70, 0xcb, 0x20, - 0x61, 0x81, 0x4a, 0x26, 0x00, 0x70, 0x28, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x80, 0xc0, 0x21, - 0x65, 0x00, 0x04, 0x21, 0xbe, 0x8f, 0x80, 0x00, 0x00, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x10, 0x00, - 0x01, 0x00, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0xc4, 0x71, 0x2f, 0x21, 0x42, 0x80, - 0x2f, 0x20, 0x04, 0x00, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0xd4, 0x70, 0x4a, 0x26, - 0x00, 0x70, 0x66, 0x00, 0x0c, 0x00, 0x8c, 0x26, 0xdf, 0x8f, 0x4a, 0x26, 0x00, 0x70, 0x3e, 0x01, - 0x0a, 0x00, 0x06, 0x21, 0x81, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x40, 0x2e, 0x02, 0x05, 0x45, 0x79, - 0x2f, 0x22, 0x03, 0x01, 0x45, 0x79, 0xe0, 0x7e, 0x14, 0x70, 0x4a, 0x26, 0x00, 0x70, 0xce, 0x05, - 0xc2, 0xff, 0xd3, 0x73, 0x00, 0x80, 0x00, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x7c, 0x71, 0x12, 0x00, - 0x02, 0x00, 0x54, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x7c, 0x71, 0xca, 0x21, 0x41, 0x00, 0x40, 0x40, - 0xe0, 0x7e, 0x54, 0x70, 0x4a, 0x26, 0x00, 0x70, 0xb2, 0x05, 0xc2, 0xff, 0x4a, 0x26, 0x00, 0x70, - 0xe0, 0x7e, 0x4a, 0x26, 0x00, 0x70, 0x02, 0x26, 0x8a, 0x71, 0x00, 0x00, 0x00, 0x00, 0x42, 0x22, - 0x4a, 0x90, 0x4a, 0x26, 0x00, 0x70, 0x88, 0x00, 0x0b, 0x00, 0x8c, 0x00, 0x01, 0x00, 0x4c, 0x22, - 0x00, 0x98, 0x4a, 0x26, 0x00, 0x70, 0x2a, 0x00, 0x0b, 0x00, 0x42, 0x22, 0x0a, 0x18, 0x05, 0x21, - 0x09, 0x90, 0x6d, 0x77, 0x10, 0x00, 0x02, 0x00, 0x00, 0x2b, 0x8b, 0x12, 0x87, 0x23, 0xff, 0x1f, - 0x04, 0x21, 0xc9, 0x02, 0x01, 0x29, 0x80, 0x02, 0x5d, 0x00, 0x20, 0x00, 0x2c, 0x70, 0x35, 0x70, - 0x6d, 0x77, 0x1e, 0x00, 0x02, 0x00, 0x4c, 0x22, 0x00, 0x98, 0xc2, 0x23, 0xca, 0x12, 0x0a, 0x00, - 0x0a, 0x00, 0x00, 0x2b, 0x8b, 0x12, 0x87, 0x23, 0xff, 0x1f, 0x04, 0x20, 0xc9, 0x02, 0x02, 0x26, - 0x8b, 0xf2, 0x00, 0x00, 0x20, 0x00, 0x00, 0x29, 0xcb, 0x02, 0x14, 0x00, 0x09, 0x00, 0x40, 0x22, - 0x0b, 0x18, 0x01, 0x29, 0xc0, 0x02, 0x15, 0x00, 0x20, 0x00, 0x2c, 0x70, 0x01, 0x28, 0x80, 0x02, - 0x01, 0x29, 0x81, 0x02, 0x05, 0x20, 0xc0, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x80, - 0x2f, 0x21, 0x4b, 0x00, 0x44, 0x20, 0xbe, 0x80, 0x4a, 0x26, 0x00, 0x70, 0x1c, 0x00, 0x01, 0x00, - 0x44, 0x20, 0x4a, 0x01, 0x05, 0x22, 0x7e, 0x92, 0x4a, 0x26, 0x00, 0x70, 0x0c, 0x00, 0x01, 0x00, - 0x40, 0x20, 0x80, 0x80, 0x41, 0x21, 0x01, 0x00, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, - 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x02, 0x26, 0x86, 0x01, 0x04, 0x21, 0xbe, 0x8f, - 0x10, 0x00, 0x00, 0x00, 0xc0, 0x26, 0x62, 0x00, 0x65, 0xf1, 0x8a, 0x26, 0xdf, 0x0f, 0xc3, 0x41, - 0x10, 0x00, 0x00, 0x00, 0x0c, 0x70, 0x5f, 0xf1, 0x02, 0x26, 0x86, 0x01, 0x2c, 0x70, 0xb7, 0x06, - 0xef, 0xff, 0x0c, 0x70, 0x02, 0x20, 0x80, 0x80, 0x03, 0x21, 0x01, 0x02, 0x04, 0x21, 0xbe, 0x8f, - 0x40, 0x00, 0x00, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x20, 0x00, 0x02, 0x00, 0x2f, 0x20, 0x00, 0x80, - 0x2f, 0x21, 0x4b, 0x00, 0x42, 0x26, 0x46, 0x00, 0x04, 0x21, 0xbe, 0x8f, 0x40, 0x00, 0x00, 0x00, - 0x4a, 0x26, 0x00, 0x70, 0x52, 0x00, 0x01, 0x00, 0x44, 0x20, 0xbe, 0x80, 0x4a, 0x26, 0x00, 0x70, - 0x46, 0x00, 0x21, 0x00, 0x44, 0x20, 0x7e, 0x80, 0x4a, 0x26, 0x00, 0x70, 0x1a, 0x00, 0x02, 0x00, - 0x35, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x32, 0x00, 0x02, 0x00, 0x44, 0x20, 0x3e, 0x81, 0x4a, 0x26, - 0x00, 0x70, 0x26, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x80, 0x41, 0x21, 0x01, 0x00, 0x04, 0x21, - 0xbe, 0x8f, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x26, 0x62, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x2f, 0x21, - 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x2f, 0x21, - 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0xd3, 0x71, 0x10, 0x00, 0x00, 0x00, 0x4a, 0x26, 0x00, 0x70, - 0xfc, 0x05, 0xca, 0xff, 0x34, 0x70, 0xcc, 0x20, 0x21, 0x80, 0x4a, 0x26, 0x00, 0x70, 0xa6, 0xf3, - 0x2f, 0x20, 0x00, 0x80, 0x2f, 0x21, 0x4b, 0x00, 0xd3, 0x71, 0x10, 0x00, 0x00, 0x00, 0x42, 0x26, - 0x46, 0x00, 0xb8, 0xf6, 0xd4, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x3e, 0x06, 0xcc, 0xff, 0xe7, 0x05, - 0xcf, 0xff, 0xd3, 0x71, 0x10, 0x00, 0x00, 0x00, 0xcc, 0x20, 0x21, 0x80, 0x2f, 0x21, 0x03, 0x01, - 0x02, 0x78, 0x10, 0x00, 0x01, 0x00, 0x05, 0x21, 0x81, 0x0f, 0xf8, 0x7f, 0x00, 0x00, 0xe0, 0x7e, - 0x8c, 0x27, 0xdf, 0x8f, 0x4a, 0x26, 0x00, 0x70, 0x28, 0x00, 0x02, 0x00, 0x0c, 0x20, 0x80, 0x9f, - 0x10, 0x00, 0x00, 0x00, 0xcc, 0x22, 0x21, 0x80, 0x4a, 0x26, 0x00, 0x70, 0x0a, 0x00, 0x01, 0x00, - 0x2f, 0x21, 0x43, 0x01, 0xe9, 0xf1, 0x0c, 0x24, 0x40, 0x81, 0x4a, 0x26, 0x00, 0x70, 0xe5, 0xf5, - 0x05, 0x21, 0x81, 0x0f, 0xf0, 0x7f, 0x00, 0x00, 0x0c, 0x70, 0xe0, 0x7e, 0x60, 0x41, 0x40, 0x40, - 0xe0, 0x7e, 0xe0, 0x78, 0xfc, 0x1c, 0x88, 0xb1, 0xfc, 0x1c, 0x48, 0xb1, 0xfc, 0x1c, 0x08, 0xb1, - 0xe1, 0xc3, 0xe1, 0xc2, 0xe1, 0xc1, 0xe1, 0xc0, 0x07, 0xc0, 0x1c, 0x1c, 0xc0, 0x31, 0xe1, 0xc0, - 0xe0, 0x7f, 0x01, 0xc0, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, - 0x28, 0x28, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x10, 0x10, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x78, 0xe0, - 0x49, 0x08, 0x40, 0x00, 0x05, 0x20, 0x4c, 0x00, 0x44, 0x24, 0xfe, 0x90, 0xc2, 0x21, 0x22, 0x01, - 0x90, 0x00, 0x02, 0x00, 0x40, 0x80, 0x04, 0x11, 0x03, 0x04, 0xcb, 0x43, 0x01, 0x01, 0x01, 0x01, - 0x2f, 0x24, 0xc3, 0x12, 0x02, 0x22, 0xca, 0x02, 0x25, 0x0a, 0xc1, 0x00, 0x06, 0x22, 0xca, 0x10, - 0x04, 0x22, 0x0a, 0x93, 0x14, 0x00, 0x02, 0x00, 0x04, 0x10, 0x02, 0x02, 0x04, 0x11, 0x03, 0x04, - 0xe9, 0x07, 0xef, 0xff, 0x02, 0x22, 0xca, 0x02, 0xe0, 0x7f, 0x0c, 0x70, 0x2f, 0x20, 0x87, 0x80, - 0x6f, 0x79, 0x39, 0x08, 0x41, 0x00, 0xfa, 0xf3, 0x2f, 0x22, 0x88, 0x1f, 0xff, 0xff, 0x00, 0xff, - 0x04, 0x23, 0x81, 0x02, 0x04, 0x22, 0x80, 0x82, 0x21, 0x08, 0x41, 0x00, 0xee, 0xf3, 0x40, 0x2a, - 0x0a, 0x12, 0x04, 0x23, 0x81, 0x02, 0x04, 0x22, 0x80, 0x82, 0x11, 0x08, 0x41, 0x00, 0xe6, 0xf3, - 0x41, 0x2b, 0x01, 0x06, 0x41, 0x2a, 0x00, 0x06, 0x09, 0x09, 0x02, 0x00, 0xe0, 0x7f, 0x0c, 0x77, - 0xe0, 0x7f, 0x0c, 0x71, 0x0c, 0x71, 0x0a, 0x00, 0x06, 0x00, 0x2f, 0x20, 0xc5, 0x02, 0xe0, 0x7e, - 0x40, 0x88, 0x24, 0x73, 0x01, 0x11, 0x83, 0x02, 0x70, 0x72, 0x8a, 0x23, 0xc3, 0x1f, 0xf4, 0xf5, - 0x0a, 0x26, 0x80, 0xf0, 0x0c, 0x00, 0x01, 0x00, 0xed, 0x07, 0xef, 0xff, 0x01, 0x10, 0x82, 0x02, - 0xe0, 0x7f, 0x0c, 0x70, 0xe0, 0x78, 0xe0, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc3, 0x40, 0x00, 0x00, 0x00, 0x00, 0x84, 0xd7, 0x97, 0x41, - 0x00, 0x80, 0xe0, 0x37, 0x79, 0xc3, 0x41, 0x43, 0x17, 0x6e, 0x05, 0xb5, 0xb5, 0xb8, 0x93, 0x46, - 0xf5, 0xf9, 0x3f, 0xe9, 0x03, 0x4f, 0x38, 0x4d, 0x32, 0x1d, 0x30, 0xf9, 0x48, 0x77, 0x82, 0x5a, - 0x3c, 0xbf, 0x73, 0x7f, 0xdd, 0x4f, 0x15, 0x75, 0x08, 0x44, 0x40, 0x40, 0x81, 0x42, 0x28, 0x44, - 0x60, 0x41, 0x81, 0x43, 0xcb, 0x44, 0xe0, 0xff, 0x00, 0x00, 0x14, 0x24, 0x46, 0x10, 0x14, 0x24, - 0xca, 0x10, 0xb6, 0xbc, 0x0c, 0x26, 0x00, 0x83, 0xcc, 0x22, 0x05, 0x93, 0xde, 0x00, 0x26, 0x00, - 0x96, 0xbc, 0x04, 0x26, 0x06, 0x03, 0x04, 0x22, 0x0a, 0x13, 0x02, 0x26, 0x86, 0x82, 0x2f, 0x26, - 0x84, 0x01, 0x00, 0x26, 0x86, 0x0f, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x26, 0x0a, 0x83, 0xcc, 0x26, - 0x03, 0x83, 0x50, 0x01, 0x04, 0x00, 0x07, 0x21, 0xca, 0x80, 0xcf, 0x26, 0xe4, 0x07, 0x06, 0x21, - 0x04, 0x03, 0x86, 0x7b, 0x4f, 0x24, 0x04, 0x05, 0x94, 0xbb, 0x00, 0x45, 0x0c, 0x24, 0xc0, 0x80, - 0xcc, 0x25, 0x81, 0x80, 0x14, 0x00, 0x06, 0x00, 0x02, 0x26, 0x86, 0x0f, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x25, 0x45, 0x81, 0x01, 0x24, 0x04, 0x01, 0x4a, 0x24, 0x80, 0x75, 0x2c, 0x70, 0xa8, 0x20, - 0xc0, 0x04, 0x0c, 0x24, 0xc0, 0x80, 0xcc, 0x25, 0x81, 0x80, 0x12, 0x00, 0x05, 0x00, 0x0f, 0x21, - 0x01, 0x0f, 0x02, 0x25, 0x85, 0x80, 0x03, 0x24, 0xc4, 0x00, 0x00, 0x25, 0x45, 0x81, 0x01, 0x24, - 0x04, 0x01, 0x05, 0x24, 0x40, 0x81, 0x4a, 0x24, 0x00, 0x78, 0x0c, 0x70, 0xe8, 0x20, 0xa2, 0x04, - 0x0c, 0x24, 0xc0, 0x80, 0xcc, 0x25, 0x81, 0x80, 0x10, 0x00, 0x05, 0x00, 0x0f, 0x20, 0x00, 0x0f, - 0x02, 0x25, 0x85, 0x80, 0x03, 0x24, 0xc4, 0x00, 0x00, 0x25, 0x45, 0x81, 0x01, 0x24, 0x04, 0x01, - 0x2f, 0x20, 0x03, 0x00, 0x41, 0x29, 0x81, 0x80, 0x2f, 0x20, 0x04, 0x80, 0xc0, 0x71, 0xe1, 0x20, - 0xc6, 0x07, 0x44, 0x20, 0x4c, 0x00, 0x05, 0x24, 0x0c, 0x11, 0x05, 0x24, 0x4c, 0x91, 0xe0, 0x7c, - 0x40, 0x20, 0x40, 0x80, 0xe0, 0x7f, 0x41, 0x21, 0x01, 0x00, 0x02, 0x22, 0x0a, 0x93, 0xcc, 0x22, - 0x21, 0x80, 0x1a, 0x00, 0x02, 0x00, 0x2f, 0x26, 0x40, 0xf0, 0x2f, 0x21, 0x04, 0x03, 0xcc, 0x20, - 0x21, 0x80, 0xcf, 0x21, 0xe1, 0x04, 0xe0, 0x7f, 0x0c, 0x70, 0x0c, 0x22, 0x00, 0x93, 0xcc, 0x22, - 0x21, 0x80, 0xca, 0x20, 0x8d, 0x00, 0xe1, 0x20, 0xcd, 0x07, 0xca, 0x21, 0xcd, 0x00, 0x02, 0x26, - 0x06, 0x83, 0xcc, 0x20, 0x21, 0x80, 0xe1, 0x20, 0xc1, 0x07, 0xca, 0x21, 0x21, 0x00, 0x0c, 0x26, - 0x00, 0x83, 0xcc, 0x22, 0x05, 0x93, 0x4c, 0x00, 0x05, 0x00, 0x0c, 0x26, 0x00, 0x83, 0xcc, 0x20, - 0x21, 0x80, 0xe1, 0x20, 0xcd, 0x07, 0x0c, 0x22, 0x00, 0x93, 0xcc, 0x22, 0x21, 0x80, 0xca, 0x20, - 0x8d, 0x00, 0xe1, 0x20, 0xcd, 0x07, 0xca, 0x21, 0xcd, 0x00, 0x0c, 0x22, 0x00, 0x93, 0xcc, 0x22, - 0x21, 0x80, 0xcc, 0x26, 0x01, 0x83, 0xcc, 0x20, 0x21, 0x80, 0xe1, 0x20, 0xc1, 0x07, 0xcf, 0x21, - 0xe1, 0x04, 0x0c, 0x26, 0x00, 0x83, 0xcc, 0x20, 0x21, 0x80, 0xc0, 0x78, 0xe0, 0x7f, 0xc0, 0x79, - 0x2f, 0x25, 0xc0, 0x80, 0x41, 0x26, 0x04, 0x70, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x22, 0x21, 0x80, - 0x4a, 0x26, 0x00, 0x70, 0xaa, 0x02, 0x21, 0x00, 0x2f, 0x21, 0x40, 0x90, 0xc7, 0x24, 0x65, 0x00, - 0xcc, 0x20, 0x21, 0x80, 0x4a, 0x26, 0x00, 0x70, 0xc2, 0x02, 0x01, 0x00, 0x41, 0x29, 0x46, 0x95, - 0x06, 0x21, 0x81, 0x0f, 0xf0, 0xff, 0x00, 0x00, 0xc5, 0x21, 0x82, 0x0f, 0x10, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x22, 0x00, 0x00, 0x40, 0xcb, 0x42, 0x10, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x80, - 0x2f, 0x21, 0x4b, 0x00, 0xc4, 0x71, 0x04, 0x21, 0xbe, 0x82, 0x42, 0x26, 0x46, 0x00, 0x12, 0x00, - 0x02, 0x00, 0x2f, 0x20, 0x00, 0x80, 0xf3, 0x07, 0xef, 0xff, 0x2f, 0x21, 0x4b, 0x00, 0x41, 0x2d, - 0x47, 0x85, 0x06, 0x23, 0x88, 0x0f, 0xf0, 0xff, 0x00, 0x00, 0xc5, 0x20, 0x82, 0x1f, 0x10, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x22, 0x00, 0x40, 0x42, 0xcb, 0x42, 0x10, 0x00, 0x00, 0x00, 0x2f, 0x22, - 0x80, 0x80, 0x2f, 0x20, 0x0b, 0x12, 0xe4, 0x71, 0x04, 0x20, 0xbe, 0x92, 0x42, 0x27, 0x47, 0x00, - 0x10, 0x00, 0x02, 0x00, 0x2f, 0x22, 0x80, 0x80, 0xf1, 0x07, 0xef, 0xff, 0x2f, 0x20, 0x0b, 0x12, - 0x8c, 0x26, 0xdf, 0x8f, 0x4a, 0x26, 0x00, 0x70, 0x62, 0x02, 0x01, 0x00, 0x8c, 0x27, 0xdf, 0x8f, - 0x4a, 0x26, 0x00, 0x70, 0x8a, 0x02, 0x21, 0x00, 0x02, 0x26, 0xc6, 0x01, 0x80, 0x26, 0xcf, 0x0f, - 0x4a, 0x24, 0xc0, 0x7d, 0x6d, 0x70, 0x4d, 0x70, 0xa8, 0x20, 0x40, 0x05, 0x2f, 0x22, 0x80, 0x92, - 0x2f, 0x23, 0xcb, 0x12, 0x11, 0x71, 0xcc, 0x20, 0x81, 0x80, 0xc5, 0x22, 0x66, 0x10, 0x0e, 0x00, - 0x05, 0x00, 0x02, 0x20, 0x80, 0x80, 0x03, 0x21, 0x01, 0x02, 0x2f, 0x20, 0x00, 0x80, 0x2f, 0x21, - 0x4b, 0x00, 0x05, 0x21, 0x09, 0x00, 0x61, 0x41, 0x41, 0x40, 0x04, 0x21, 0xbe, 0x8f, 0x40, 0x00, - 0x00, 0x00, 0xc2, 0x26, 0x61, 0x00, 0x0e, 0x00, 0x02, 0x00, 0x2f, 0x20, 0x00, 0x80, 0x2f, 0x21, - 0x4b, 0x00, 0xd4, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x72, 0x00, 0x0c, 0x00, 0x44, 0x20, 0xbe, 0x80, - 0x4a, 0x26, 0x00, 0x70, 0x34, 0x00, 0x01, 0x00, 0x44, 0x20, 0x4a, 0x01, 0x05, 0x21, 0xbe, 0x92, - 0x4a, 0x26, 0x00, 0x70, 0x24, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x80, 0x41, 0x21, 0x01, 0x00, - 0x04, 0x21, 0xbe, 0x8f, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x26, 0x62, 0x00, 0x0c, 0x00, 0x01, 0x00, - 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, - 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x8c, 0x26, 0xdf, 0x8f, 0x4a, 0x26, 0x00, 0x70, - 0x22, 0x01, 0x0a, 0x00, 0x06, 0x21, 0x81, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x40, 0x2e, 0x02, 0x05, - 0x45, 0x79, 0x2f, 0x22, 0x03, 0x01, 0x45, 0x79, 0xe0, 0x7e, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, - 0x04, 0x80, 0xc5, 0x21, 0x65, 0x10, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x80, 0xc5, 0x21, - 0x65, 0x10, 0x8c, 0x26, 0xff, 0x82, 0x4a, 0x26, 0x00, 0x70, 0xfa, 0x00, 0x0b, 0x00, 0x02, 0x26, - 0x8a, 0x71, 0x00, 0x00, 0x00, 0x00, 0x42, 0x22, 0x4a, 0x90, 0x4a, 0x26, 0x00, 0x70, 0x88, 0x00, - 0x0b, 0x00, 0x8c, 0x00, 0x01, 0x00, 0x4c, 0x22, 0x00, 0x98, 0x4a, 0x26, 0x00, 0x70, 0x2a, 0x00, - 0x0b, 0x00, 0x42, 0x22, 0x0a, 0x18, 0x05, 0x21, 0x09, 0x90, 0x6d, 0x77, 0x10, 0x00, 0x02, 0x00, - 0x00, 0x2b, 0x8b, 0x12, 0x87, 0x23, 0xff, 0x1f, 0x04, 0x21, 0xc9, 0x02, 0x01, 0x29, 0x80, 0x02, - 0x5d, 0x00, 0x20, 0x00, 0x2c, 0x70, 0x35, 0x70, 0x6d, 0x77, 0x1e, 0x00, 0x02, 0x00, 0x4c, 0x22, - 0x00, 0x98, 0xc2, 0x23, 0xca, 0x12, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x2b, 0x8b, 0x12, 0x87, 0x23, - 0xff, 0x1f, 0x04, 0x20, 0xc9, 0x02, 0x02, 0x26, 0x8b, 0xf2, 0x00, 0x00, 0x20, 0x00, 0x00, 0x29, - 0xcb, 0x02, 0x14, 0x00, 0x09, 0x00, 0x40, 0x22, 0x0b, 0x18, 0x01, 0x29, 0xc0, 0x02, 0x15, 0x00, - 0x20, 0x00, 0x2c, 0x70, 0x01, 0x28, 0x80, 0x02, 0x01, 0x29, 0x81, 0x02, 0x05, 0x20, 0xc0, 0x02, - 0x0d, 0x00, 0x00, 0x00, 0x2f, 0x20, 0x00, 0x80, 0x2f, 0x21, 0x4b, 0x00, 0x44, 0x20, 0xbe, 0x80, - 0x4a, 0x26, 0x00, 0x70, 0x1c, 0x00, 0x01, 0x00, 0x44, 0x20, 0x4a, 0x01, 0x05, 0x22, 0x7e, 0x92, - 0x4a, 0x26, 0x00, 0x70, 0x0c, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x80, 0x41, 0x21, 0x01, 0x00, - 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, 0x2f, 0x21, 0x42, 0x80, 0x2f, 0x20, 0x04, 0x00, - 0x02, 0x26, 0x86, 0x01, 0x04, 0x21, 0xbe, 0x8f, 0x10, 0x00, 0x00, 0x00, 0xc0, 0x26, 0x62, 0x00, - 0x72, 0xf1, 0x8a, 0x26, 0xdf, 0x0f, 0xc3, 0x41, 0x10, 0x00, 0x00, 0x00, 0xd9, 0x06, 0xef, 0xff, - 0x0c, 0x70, 0x02, 0x26, 0x86, 0x01, 0x2c, 0x70, 0xcd, 0x06, 0xef, 0xff, 0x0c, 0x70, 0xc7, 0x24, - 0x65, 0x00, 0xcc, 0x20, 0x21, 0x80, 0x70, 0x00, 0x01, 0x00, 0x0c, 0x21, 0x80, 0x9f, 0xe0, 0xff, - 0x00, 0x00, 0xc3, 0x41, 0xf0, 0x7f, 0x00, 0x00, 0x5c, 0x00, 0x0d, 0x00, 0x94, 0x70, 0xc5, 0x21, - 0x82, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x0c, 0x70, 0xe0, 0x7e, 0x0c, 0x25, 0x80, 0x8f, 0xe0, 0xff, - 0x00, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x40, 0x00, 0x0d, 0x00, 0x2c, 0x70, 0x10, 0x00, 0x05, 0x00, - 0xcc, 0x22, 0x21, 0x80, 0x4a, 0x26, 0x00, 0x70, 0x2c, 0x00, 0x02, 0x00, 0x94, 0x70, 0xc5, 0x21, - 0x82, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x0c, 0x70, 0xe0, 0x7e, 0xd3, 0x71, 0x10, 0x00, 0x00, 0x00, - 0x4a, 0x26, 0x00, 0x70, 0x10, 0x00, 0x02, 0x00, 0x8c, 0x27, 0xdf, 0x8f, 0x4a, 0x26, 0x00, 0x70, - 0x0e, 0x00, 0x02, 0x00, 0xc3, 0x41, 0xf8, 0x7f, 0x00, 0x00, 0x0c, 0x70, 0xe0, 0x7e, 0x2f, 0x21, - 0x03, 0x01, 0x05, 0x21, 0x81, 0x0f, 0xf0, 0x7f, 0x00, 0x00, 0x0c, 0x70, 0xe0, 0x7e, 0x0c, 0x20, - 0x80, 0x9f, 0x10, 0x00, 0x00, 0x00, 0xcc, 0x22, 0x21, 0x80, 0xca, 0x20, 0x21, 0x00, 0xca, 0x21, - 0x21, 0x00, 0x08, 0x00, 0x02, 0x00, 0xe0, 0x7e, 0xe6, 0xf1, 0xe0, 0x78, 0x2f, 0x23, 0x40, 0x80, - 0x4a, 0x24, 0xc0, 0x02, 0x14, 0x00, 0x26, 0x00, 0x6f, 0x22, 0x0a, 0x00, 0x6f, 0x22, 0x0a, 0x00, - 0x2f, 0x22, 0x82, 0x00, 0x4a, 0x24, 0x80, 0x02, 0x2f, 0x24, 0x40, 0x90, 0xc0, 0x22, 0x65, 0x00, - 0x41, 0x2c, 0x43, 0x15, 0x8c, 0x23, 0xdf, 0x8f, 0x48, 0x00, 0x21, 0x00, 0x53, 0x21, 0x01, 0x85, - 0x8e, 0x23, 0xd0, 0x84, 0x1a, 0x00, 0x24, 0x00, 0x94, 0xb9, 0x9f, 0xe3, 0x01, 0x29, 0xc0, 0x00, - 0xca, 0x20, 0x29, 0x00, 0x51, 0x22, 0x00, 0x80, 0xe0, 0x7f, 0xce, 0x20, 0x21, 0x00, 0x4e, 0x23, - 0x03, 0x00, 0x90, 0x73, 0x4e, 0x23, 0x0c, 0x08, 0x01, 0x28, 0x00, 0x03, 0x00, 0x29, 0xc1, 0x00, - 0x25, 0x78, 0xca, 0x20, 0x89, 0x00, 0xd1, 0x22, 0x2c, 0x80, 0xe0, 0x7f, 0xce, 0x20, 0x21, 0x00, - 0xcc, 0x20, 0x21, 0x80, 0x40, 0x40, 0xd1, 0x20, 0x22, 0x80, 0xe0, 0x7f, 0xc0, 0x20, 0x62, 0x00, - 0x8d, 0x71, 0x0a, 0x21, 0x00, 0x80, 0xd4, 0x24, 0x04, 0x13, 0x13, 0x00, 0x20, 0x00, 0xce, 0x20, - 0x24, 0x00, 0xe0, 0x78, 0x0a, 0x21, 0x00, 0x80, 0x8d, 0x71, 0xe1, 0x20, 0xc1, 0x07, 0x40, 0x2c, - 0x8c, 0x17, 0x4c, 0x70, 0x00, 0x41, 0xd3, 0x71, 0x01, 0x00, 0x00, 0x00, 0xc1, 0x29, 0x26, 0x04, - 0xc0, 0x22, 0x25, 0x04, 0x8c, 0x21, 0x04, 0x80, 0xc1, 0x29, 0x26, 0x02, 0xc0, 0x22, 0x25, 0x02, - 0x90, 0xe1, 0xc1, 0x29, 0x26, 0x01, 0xc0, 0x22, 0x25, 0x01, 0x34, 0x74, 0xc1, 0x29, 0xa6, 0x00, - 0xc0, 0x22, 0xa5, 0x00, 0x34, 0x72, 0xc0, 0x22, 0x65, 0x00, 0x00, 0x28, 0x83, 0x00, 0x4e, 0x22, - 0xc2, 0x07, 0x40, 0x2a, 0x02, 0x05, 0x85, 0x7a, 0x40, 0x2b, 0x40, 0x05, 0x42, 0x2b, 0xc1, 0x02, - 0xe0, 0x7f, 0x59, 0x61, 0x34, 0x78, 0xe0, 0x7f, 0x14, 0x70, 0xe0, 0x78, 0x70, 0x71, 0x04, 0xf4, - 0x50, 0x70, 0x09, 0xf2, 0x7b, 0x7b, 0x3b, 0x79, 0x25, 0x78, 0x45, 0x78, 0x05, 0x20, 0xc0, 0x80, - 0x0b, 0xf4, 0xc3, 0x40, 0xe0, 0xff, 0x00, 0x00, 0x7b, 0x7b, 0x70, 0x70, 0x85, 0xf7, 0x04, 0xf7, - 0x40, 0x40, 0x03, 0xf0, 0x0c, 0x70, 0xe0, 0x7f, 0x14, 0x70, 0xe0, 0x78, 0xe1, 0xc0, 0xe1, 0xc1, - 0x40, 0x40, 0x60, 0x41, 0xc1, 0xc3, 0xc1, 0xc2, 0x28, 0x44, 0x07, 0x21, 0xfe, 0x80, 0x1e, 0x00, - 0x04, 0x00, 0x0a, 0x00, 0x02, 0x00, 0x50, 0x70, 0xe5, 0xf3, 0x50, 0x70, 0x03, 0x21, 0xc1, 0x00, - 0x07, 0x21, 0xc0, 0x80, 0xca, 0x20, 0x61, 0x00, 0xe7, 0xf1, 0x7b, 0x7b, 0x3b, 0x79, 0x25, 0x78, - 0x45, 0x78, 0x05, 0x20, 0xc0, 0x80, 0xe1, 0xf3, 0x45, 0x24, 0x40, 0x10, 0xdd, 0xf1, 0xe0, 0x78, - 0xf1, 0xc0, 0xd2, 0x0b, 0x8f, 0x03, 0xc3, 0x42, 0x00, 0x00, 0x18, 0xfc, 0xc3, 0x41, 0x80, 0x00, - 0x80, 0x2f, 0x40, 0xb1, 0x41, 0xb1, 0xd1, 0xc0, 0xe0, 0x7f, 0x42, 0xb1, 0xe4, 0xc2, 0x71, 0x0b, - 0x71, 0x00, 0x08, 0x45, 0x69, 0x0c, 0x31, 0x00, 0x2e, 0x78, 0x50, 0xb9, 0x02, 0x0a, 0x6f, 0x06, - 0x4e, 0x7a, 0xac, 0x15, 0x01, 0x10, 0xc1, 0xda, 0xba, 0x62, 0x2e, 0x09, 0x6f, 0x06, 0x6c, 0x76, - 0xc3, 0x41, 0x80, 0x00, 0x40, 0x1f, 0x00, 0x89, 0x41, 0x08, 0xb4, 0x01, 0x4c, 0x76, 0xac, 0x15, - 0x00, 0x10, 0xfa, 0x08, 0x6f, 0x06, 0x2c, 0x70, 0xb2, 0x15, 0x41, 0x11, 0x2f, 0x39, 0x43, 0x00, - 0x7e, 0x08, 0xef, 0x0b, 0x00, 0x38, 0x40, 0x00, 0x02, 0x36, 0x0e, 0x70, 0x40, 0x40, 0x00, 0x00, - 0x2c, 0x70, 0xfe, 0x0e, 0x6f, 0x03, 0xc1, 0x40, 0x0c, 0x70, 0x85, 0xf6, 0xfa, 0x0e, 0x6f, 0x03, - 0xc1, 0x40, 0xbe, 0x1d, 0x02, 0x10, 0x04, 0xf0, 0x04, 0x71, 0x00, 0xa9, 0xbe, 0x15, 0x80, 0x10, - 0xc4, 0xc6, 0xe0, 0x78, 0xec, 0xc3, 0xaa, 0xc1, 0x10, 0x41, 0x8a, 0x20, 0x45, 0x0d, 0x22, 0x70, - 0x00, 0x88, 0x70, 0x42, 0x2f, 0x08, 0xb4, 0x02, 0x55, 0x21, 0x0f, 0x2a, 0x8a, 0x20, 0x05, 0x0d, - 0x22, 0x70, 0x60, 0x88, 0xff, 0xdd, 0x50, 0x78, 0x7d, 0x65, 0x70, 0x40, 0x38, 0x60, 0xc7, 0xe1, - 0x8e, 0xf6, 0x0e, 0x78, 0x2f, 0x38, 0x03, 0x00, 0x00, 0x30, 0x80, 0x0f, 0xa3, 0x3c, 0x0a, 0xd7, - 0x10, 0xf0, 0x0c, 0x70, 0x00, 0xa7, 0x01, 0xa7, 0x02, 0xa7, 0xa5, 0xf0, 0x95, 0xe1, 0x2c, 0x71, - 0x93, 0xf6, 0x0e, 0x78, 0x2f, 0x38, 0x03, 0x00, 0x00, 0x30, 0x80, 0x0f, 0x4c, 0x3e, 0xcd, 0xcc, - 0x86, 0x0e, 0x4f, 0x03, 0x10, 0x79, 0x34, 0x76, 0x07, 0xd9, 0x07, 0xf7, 0x10, 0x79, 0x34, 0x72, - 0x2c, 0x71, 0xca, 0x21, 0x06, 0x00, 0xaf, 0x78, 0x30, 0x7e, 0x15, 0x21, 0x00, 0x20, 0x15, 0x21, - 0x91, 0x23, 0x7e, 0x80, 0x54, 0x80, 0x2a, 0x80, 0x00, 0x80, 0x74, 0x11, 0x07, 0x20, 0x4c, 0x11, - 0x06, 0x20, 0x24, 0x11, 0x05, 0x20, 0xfc, 0x11, 0x04, 0xa0, 0x86, 0xc4, 0x41, 0xc4, 0x8a, 0x09, - 0x6f, 0x0d, 0x00, 0x1c, 0x81, 0x30, 0x09, 0xc3, 0x08, 0xc2, 0x07, 0xc1, 0x06, 0xc0, 0x5a, 0x09, - 0x6f, 0x0d, 0x40, 0x24, 0x04, 0x32, 0x02, 0xc5, 0x2c, 0x70, 0xa1, 0x40, 0x22, 0x0e, 0x6f, 0x03, - 0x0e, 0x26, 0x0e, 0x14, 0xc5, 0xf6, 0x05, 0xc3, 0x04, 0xc2, 0x03, 0xc1, 0x10, 0xf0, 0x52, 0x25, - 0xcd, 0x17, 0x42, 0xc5, 0x03, 0xc0, 0x52, 0x20, 0xc1, 0x07, 0x43, 0xc1, 0x04, 0xc0, 0x52, 0x20, - 0xc2, 0x07, 0x44, 0xc2, 0x05, 0xc0, 0x52, 0x20, 0xc3, 0x07, 0x45, 0xc3, 0x40, 0x24, 0x04, 0x32, - 0x4e, 0x08, 0xaf, 0x0d, 0xa1, 0x40, 0x03, 0xc0, 0xd0, 0x79, 0x01, 0x32, 0x82, 0x24, 0x2f, 0x39, - 0x43, 0x00, 0xaa, 0x09, 0x6f, 0x08, 0x00, 0x3a, 0x4e, 0x00, 0x00, 0x36, 0x10, 0x10, 0x00, 0x1f, - 0x00, 0x14, 0x9a, 0x09, 0x6f, 0x08, 0x04, 0xc0, 0x00, 0x36, 0x12, 0x10, 0x04, 0x1f, 0x80, 0x14, - 0x8a, 0x09, 0x6f, 0x08, 0x05, 0xc0, 0xcb, 0x45, 0x0b, 0x42, 0x57, 0xa0, 0x00, 0x36, 0x11, 0x10, - 0x02, 0x40, 0xa1, 0x41, 0xaa, 0x0d, 0x6f, 0x03, 0x08, 0x1f, 0x40, 0x14, 0xa9, 0x46, 0x4b, 0xf6, - 0xcb, 0x46, 0x0b, 0xc2, 0x57, 0xa0, 0x02, 0x40, 0x96, 0x0d, 0x6f, 0x03, 0xc1, 0x41, 0xca, 0x26, - 0x09, 0x14, 0x42, 0x40, 0xa1, 0x41, 0x8a, 0x0d, 0x6f, 0x03, 0xc0, 0xa7, 0xa9, 0x46, 0x4b, 0xf6, - 0xcb, 0x46, 0x0b, 0xc2, 0x57, 0xa0, 0x42, 0x40, 0x76, 0x0d, 0x6f, 0x03, 0xc1, 0x41, 0xca, 0x26, - 0x89, 0x14, 0x22, 0x40, 0xa1, 0x41, 0x6a, 0x0d, 0x6f, 0x03, 0xc1, 0xa7, 0x4a, 0xf6, 0xcb, 0x45, - 0x0b, 0xc2, 0x57, 0xa0, 0x22, 0x40, 0x5a, 0x0d, 0x6f, 0x03, 0xa1, 0x41, 0xca, 0x25, 0x49, 0x14, - 0xa2, 0xa7, 0x0c, 0x70, 0xcc, 0xc7, 0xe0, 0x78, 0xe6, 0xc3, 0xa1, 0xc1, 0x48, 0x46, 0x20, 0x42, - 0x08, 0x45, 0x34, 0x70, 0xca, 0x27, 0x4a, 0x13, 0x45, 0xf6, 0x2d, 0xd8, 0x53, 0x7a, 0xe1, 0x6d, - 0x00, 0xad, 0x0a, 0xd9, 0x80, 0xc3, 0x8c, 0x70, 0x1a, 0x08, 0x20, 0x00, 0xe1, 0x40, 0x00, 0xc1, - 0xb0, 0x4f, 0x38, 0x60, 0x40, 0xc0, 0x03, 0xee, 0x00, 0xa6, 0xa1, 0x40, 0xc6, 0xc7, 0xe0, 0x78, - 0xea, 0xc3, 0xa9, 0xc1, 0x70, 0x40, 0x10, 0x41, 0x21, 0x09, 0xb0, 0x00, 0x8a, 0x23, 0xbf, 0x1d, - 0x1f, 0x09, 0x30, 0x04, 0x6c, 0x74, 0x8d, 0x73, 0x31, 0x09, 0x30, 0x02, 0x07, 0xdf, 0x17, 0x09, - 0x31, 0x01, 0x8d, 0x72, 0xed, 0x73, 0x12, 0xf0, 0xed, 0x71, 0x8d, 0x71, 0x0e, 0xf0, 0x0f, 0xdf, - 0x06, 0xf0, 0xed, 0x70, 0x6c, 0x70, 0x15, 0x09, 0xf2, 0x02, 0x8d, 0x70, 0x79, 0x24, 0x00, 0x00, - 0x68, 0x44, 0x75, 0x68, 0x40, 0x23, 0xcb, 0x0d, 0x40, 0x24, 0xce, 0x37, 0xad, 0x71, 0x20, 0x1c, - 0x03, 0x30, 0x08, 0xec, 0x01, 0x2a, 0x00, 0x03, 0x04, 0x22, 0xc3, 0x03, 0x00, 0x42, 0x06, 0xf0, - 0x09, 0x2a, 0x43, 0x00, 0x05, 0x2a, 0x42, 0x00, 0x89, 0xe3, 0x30, 0xd8, 0xca, 0x20, 0xc9, 0x02, - 0x78, 0x60, 0xa5, 0x71, 0xff, 0x1e, 0x12, 0x90, 0xed, 0xea, 0x21, 0x6e, 0x22, 0x40, 0x36, 0x0e, - 0x6f, 0x03, 0xa1, 0x42, 0x0b, 0x08, 0x30, 0x20, 0x09, 0x6d, 0x00, 0x18, 0x00, 0x20, 0x22, 0x40, - 0xca, 0xc7, 0xe0, 0x78, 0x40, 0x43, 0x20, 0x42, 0x10, 0xd9, 0x69, 0x07, 0xef, 0xff, 0x8c, 0x71, - 0xe4, 0xc0, 0x08, 0x45, 0x0c, 0x70, 0x8d, 0x70, 0xa9, 0x40, 0x12, 0xf0, 0xd3, 0x70, 0x99, 0x19, - 0x99, 0x99, 0x5a, 0x20, 0x80, 0x02, 0x4e, 0x23, 0xce, 0x0b, 0xca, 0x24, 0xad, 0x18, 0x10, 0x76, - 0x1b, 0x63, 0xa5, 0x71, 0xca, 0x24, 0xa5, 0x18, 0x42, 0x23, 0x00, 0x0c, 0x60, 0x8d, 0x32, 0x23, - 0x8e, 0x0f, 0x7f, 0x00, 0x15, 0x9a, 0xd9, 0x0e, 0xbf, 0x90, 0x11, 0x75, 0x6c, 0x77, 0xca, 0x24, - 0xc1, 0x10, 0x03, 0xe9, 0xa0, 0xa1, 0x03, 0xea, 0x80, 0xa2, 0xc4, 0xc4, 0x40, 0x43, 0x20, 0x42, - 0x0a, 0xd9, 0x11, 0x07, 0xef, 0xff, 0x8c, 0x70, 0xf6, 0xc3, 0xa6, 0xc1, 0xa8, 0x45, 0x41, 0xc3, - 0x30, 0x47, 0x08, 0x47, 0x40, 0xc2, 0x0e, 0x70, 0x0a, 0x21, 0x80, 0x21, 0x0a, 0x22, 0x00, 0x21, - 0x80, 0x41, 0x80, 0xc0, 0xa1, 0x42, 0xc0, 0x43, 0x0a, 0x24, 0xc0, 0x01, 0x00, 0x1f, 0x00, 0x04, - 0x0a, 0x23, 0xc0, 0x21, 0x92, 0x08, 0xaf, 0x07, 0x00, 0x19, 0x00, 0x24, 0x08, 0x46, 0x0e, 0xe8, - 0xc3, 0x41, 0x7f, 0x00, 0xd2, 0xd3, 0xde, 0x0c, 0xaf, 0xff, 0xc1, 0x40, 0x0e, 0xe8, 0xe1, 0x40, - 0xde, 0x0a, 0x60, 0x01, 0xc1, 0x41, 0x11, 0xf0, 0x04, 0x14, 0x14, 0x30, 0x00, 0xc6, 0x50, 0x24, - 0xc0, 0x27, 0x05, 0x20, 0xbe, 0x83, 0x0b, 0xf4, 0xa1, 0x40, 0xe2, 0x41, 0xe1, 0x42, 0xaa, 0x0c, - 0xe0, 0x00, 0x00, 0x19, 0x00, 0x24, 0x1f, 0x02, 0x00, 0x00, 0x4c, 0x70, 0x6c, 0x70, 0xc1, 0x40, - 0x82, 0x41, 0x21, 0x5b, 0x4c, 0x70, 0x48, 0x44, 0xca, 0x24, 0x6b, 0x10, 0x6c, 0x70, 0xc1, 0x40, - 0x82, 0x41, 0x00, 0x1b, 0x00, 0x23, 0x21, 0x5b, 0x45, 0xf6, 0x52, 0x24, 0xc0, 0x27, 0x40, 0xc6, - 0x41, 0xc0, 0xda, 0x08, 0xaf, 0x07, 0x80, 0xc0, 0x4d, 0xde, 0x21, 0x08, 0x32, 0x00, 0x0c, 0x7e, - 0x48, 0xbe, 0xc5, 0x71, 0x89, 0x26, 0x04, 0x1d, 0x8a, 0x09, 0x60, 0x00, 0xc1, 0x40, 0x00, 0xc2, - 0x7a, 0x0d, 0xaf, 0xff, 0x01, 0xc3, 0x0c, 0xf0, 0x4d, 0xe6, 0x48, 0xbe, 0x88, 0x26, 0x3b, 0x13, - 0x72, 0x09, 0x60, 0x00, 0xd3, 0x78, 0x00, 0xc2, 0x01, 0xc3, 0x23, 0x5b, 0x10, 0x44, 0x30, 0x43, - 0x40, 0xc0, 0x50, 0x21, 0xc0, 0x07, 0x41, 0xc1, 0x05, 0x20, 0x3e, 0x85, 0x48, 0xf2, 0xc3, 0x42, - 0x99, 0x99, 0x9a, 0x99, 0xc3, 0x43, 0xb9, 0x3f, 0x99, 0x99, 0x82, 0x40, 0x62, 0x41, 0x50, 0x46, - 0x0a, 0x25, 0xc0, 0x20, 0x21, 0x5b, 0x54, 0xf6, 0x4c, 0x70, 0xc3, 0x43, 0x24, 0x40, 0x00, 0x00, - 0x82, 0x40, 0x62, 0x41, 0x23, 0x5b, 0xc2, 0x42, 0xa2, 0x43, 0x10, 0x44, 0x30, 0x43, 0xc5, 0x77, - 0x21, 0x5b, 0xb4, 0xf6, 0x00, 0x1c, 0x00, 0x35, 0x04, 0x1c, 0xc0, 0x34, 0x4c, 0x70, 0x82, 0x40, - 0x62, 0x41, 0xc3, 0x43, 0xf0, 0x3f, 0x00, 0x00, 0x21, 0x5b, 0x97, 0xf6, 0x4c, 0x70, 0xc3, 0x43, - 0x24, 0x40, 0x00, 0x00, 0x82, 0x40, 0x02, 0x0d, 0xaf, 0xff, 0x62, 0x41, 0x4c, 0x70, 0xc3, 0x43, - 0xf0, 0x3f, 0x00, 0x00, 0x10, 0x44, 0x30, 0x43, 0xc5, 0x71, 0x21, 0x5b, 0x70, 0xf6, 0x00, 0x1c, - 0x00, 0x35, 0x04, 0x1c, 0xc0, 0x34, 0x82, 0x40, 0x62, 0x41, 0xc2, 0x42, 0xa2, 0x43, 0x21, 0x5b, - 0x46, 0xf6, 0x04, 0x1c, 0x40, 0x35, 0x00, 0x1c, 0x80, 0x35, 0x06, 0xf0, 0x0a, 0x26, 0x00, 0x25, - 0x0a, 0x25, 0xc0, 0x24, 0x8c, 0x22, 0xc1, 0xa9, 0x04, 0xf4, 0x19, 0x0d, 0x13, 0x10, 0x09, 0xf0, - 0x8c, 0x22, 0x81, 0xa9, 0x06, 0xf4, 0x00, 0x25, 0x8d, 0x93, 0x08, 0x00, 0x03, 0x00, 0xad, 0x70, - 0x49, 0x25, 0xc1, 0x14, 0x42, 0x27, 0x40, 0x20, 0x42, 0x27, 0x8d, 0x20, 0x10, 0x71, 0xca, 0x25, - 0x4b, 0x10, 0x87, 0x0d, 0x32, 0x10, 0x6e, 0x70, 0xf1, 0x44, 0x06, 0xf0, 0x04, 0x14, 0x15, 0x30, - 0x00, 0x14, 0x16, 0x30, 0x4c, 0x70, 0xc3, 0x43, 0x97, 0x41, 0x84, 0xd7, 0xc2, 0x40, 0xa2, 0x41, - 0x23, 0x5b, 0x10, 0x45, 0x6a, 0x09, 0xef, 0xff, 0x30, 0x46, 0xfe, 0x09, 0xef, 0xff, 0x10, 0x47, - 0xa2, 0x42, 0x8a, 0x0a, 0x6f, 0xff, 0xc2, 0x43, 0x41, 0xc1, 0x40, 0xc0, 0x83, 0xc0, 0x0a, 0xd9, - 0x82, 0xc3, 0x8c, 0x70, 0x1e, 0x0d, 0xef, 0xff, 0xe2, 0x42, 0x27, 0x0b, 0x30, 0x20, 0x02, 0xc2, - 0x21, 0x0a, 0x33, 0x02, 0x4a, 0x20, 0x00, 0x00, 0x30, 0xd9, 0x01, 0x1c, 0x52, 0x20, 0x02, 0xc2, - 0x27, 0x68, 0xf9, 0x0a, 0x62, 0x80, 0x04, 0x77, 0x02, 0x23, 0x13, 0x20, 0x02, 0xf0, 0x6e, 0x70, - 0x83, 0xc1, 0xa2, 0x0b, 0x6f, 0x03, 0x82, 0x40, 0x02, 0xc0, 0x00, 0x23, 0x13, 0x20, 0x91, 0x0d, - 0xe3, 0x94, 0x00, 0x24, 0x14, 0x20, 0xa8, 0x67, 0x3f, 0x08, 0x74, 0x0d, 0x69, 0x6d, 0xb5, 0x70, - 0xca, 0x20, 0xcc, 0x00, 0xd6, 0xf6, 0x79, 0x67, 0x40, 0x89, 0x23, 0x0a, 0x71, 0x0e, 0x30, 0xdc, - 0x0a, 0x6d, 0x21, 0x0b, 0x72, 0x00, 0x80, 0xa9, 0x19, 0x67, 0x40, 0x89, 0x11, 0x0a, 0x71, 0x0e, - 0x14, 0x70, 0x04, 0x77, 0x80, 0xa9, 0x3a, 0xf6, 0x04, 0xf0, 0x60, 0x40, 0x44, 0x71, 0x40, 0xa9, - 0x11, 0x08, 0x32, 0x00, 0x31, 0xd8, 0x8a, 0xed, 0x30, 0xd8, 0xad, 0x71, 0x00, 0xaf, 0x06, 0xf0, - 0xc5, 0x71, 0x00, 0xaf, 0x82, 0xed, 0xad, 0x71, 0xb8, 0x67, 0x00, 0x18, 0x02, 0x04, 0x00, 0x19, - 0x80, 0x23, 0x8c, 0x22, 0xc1, 0xa9, 0x17, 0xf4, 0x42, 0x25, 0x40, 0x90, 0x13, 0xf2, 0xf8, 0x60, - 0x20, 0x88, 0x23, 0x09, 0x11, 0x0c, 0x00, 0x18, 0x02, 0x04, 0x42, 0x25, 0x80, 0x90, 0x0b, 0xf2, - 0x19, 0x67, 0x40, 0x89, 0x0f, 0x0a, 0x31, 0x0c, 0x42, 0x20, 0x40, 0x80, 0x00, 0x19, 0x02, 0x04, - 0xf8, 0xf5, 0xe1, 0x40, 0xd6, 0xc7, 0xe0, 0x78, 0xfa, 0xc2, 0xfc, 0x1c, 0xc8, 0xb6, 0x82, 0x24, - 0x03, 0x31, 0x43, 0xc0, 0x0c, 0x70, 0x70, 0x40, 0xed, 0x70, 0x18, 0x43, 0x18, 0x40, 0x42, 0xc1, - 0x40, 0xc2, 0x41, 0xc0, 0x45, 0xc0, 0x47, 0xc0, 0x4a, 0xc0, 0x46, 0xc0, 0x4b, 0xc0, 0x05, 0xf0, - 0x20, 0x5b, 0x00, 0x18, 0x81, 0x05, 0x00, 0xc6, 0x04, 0xf0, 0x04, 0x10, 0x0e, 0x24, 0x40, 0xc6, - 0x00, 0x8e, 0x14, 0x70, 0x29, 0xf2, 0x2c, 0x70, 0xc3, 0x42, 0xff, 0x7f, 0xff, 0xff, 0x5a, 0x09, - 0xe0, 0x00, 0xc1, 0x40, 0xd3, 0x41, 0xff, 0x7f, 0xff, 0xff, 0x48, 0xc0, 0x04, 0xe8, 0x08, 0xc0, - 0x02, 0x20, 0x91, 0x03, 0x25, 0xd9, 0xc1, 0x40, 0x3e, 0x09, 0xe0, 0x00, 0x22, 0x42, 0x08, 0x45, - 0x83, 0xe8, 0x00, 0x26, 0x4d, 0x14, 0x02, 0x25, 0x91, 0x93, 0x0a, 0xf2, 0x02, 0xc0, 0x03, 0xc3, - 0xc1, 0x41, 0x60, 0x7b, 0x22, 0x42, 0x14, 0x77, 0x0c, 0x77, 0xf2, 0xf2, 0x07, 0xc0, 0x20, 0x8d, - 0x22, 0x70, 0x47, 0xc0, 0x34, 0x70, 0xde, 0x06, 0x01, 0x00, 0x01, 0x8d, 0x4f, 0xe8, 0x41, 0x6d, - 0xcd, 0x70, 0x40, 0xc5, 0x07, 0x00, 0x00, 0x00, 0x44, 0x71, 0x40, 0xc2, 0x20, 0x8a, 0x13, 0x09, - 0x10, 0x08, 0x13, 0x09, 0xd0, 0x08, 0x13, 0x09, 0xd1, 0x0a, 0x81, 0xbe, 0xf6, 0xf1, 0x82, 0xbe, - 0xf4, 0xf1, 0x83, 0xbe, 0xf2, 0xf1, 0x0b, 0x09, 0x51, 0x0b, 0x80, 0xbe, 0xee, 0xf1, 0x13, 0x09, - 0x90, 0x0a, 0xc3, 0x40, 0x7f, 0x00, 0x15, 0x9a, 0x08, 0x61, 0x49, 0x08, 0x9e, 0x00, 0x0c, 0x70, - 0xb0, 0xe1, 0x41, 0xc0, 0xca, 0x20, 0x82, 0x00, 0x06, 0xf4, 0x01, 0x6a, 0x40, 0xc0, 0x21, 0x8a, - 0x31, 0xda, 0x41, 0xc2, 0x11, 0x09, 0xb1, 0x0a, 0x80, 0xc1, 0x04, 0x71, 0x40, 0xc0, 0x04, 0x10, - 0x00, 0x24, 0x05, 0xf0, 0xee, 0x0b, 0xef, 0xff, 0x4c, 0x70, 0x45, 0xc0, 0x05, 0xc0, 0x0b, 0x08, - 0x12, 0x00, 0x85, 0xbe, 0x06, 0xf0, 0x05, 0xc0, 0x45, 0x26, 0x4e, 0x18, 0x13, 0x78, 0x45, 0xc0, - 0x00, 0xc1, 0x2e, 0x76, 0x00, 0x89, 0x51, 0x08, 0xb1, 0x0b, 0x6e, 0x71, 0x01, 0x69, 0x40, 0xc0, - 0x41, 0x89, 0x11, 0x0a, 0x91, 0x0a, 0x02, 0x69, 0x40, 0xc0, 0x04, 0x10, 0x13, 0x24, 0x13, 0xf0, - 0x1b, 0x0a, 0x71, 0x0b, 0x4c, 0x70, 0x02, 0x69, 0x40, 0xc0, 0x42, 0x89, 0x23, 0x0a, 0xb1, 0x0a, - 0x4c, 0x70, 0x03, 0x69, 0x06, 0x74, 0x40, 0xc0, 0x0e, 0xf0, 0x9a, 0x0b, 0xef, 0xff, 0x80, 0xc1, - 0x10, 0x43, 0x15, 0x0b, 0x12, 0x20, 0x86, 0xbe, 0x0a, 0x21, 0xc0, 0x24, 0x04, 0xf0, 0x86, 0x0b, - 0xef, 0xff, 0x80, 0xc1, 0x00, 0xc0, 0x6c, 0x70, 0x21, 0x68, 0x40, 0xc1, 0x40, 0x88, 0xcc, 0xe2, - 0x0f, 0xf2, 0xec, 0xe2, 0x0b, 0xf4, 0x22, 0x68, 0x40, 0xc1, 0xa1, 0x88, 0xec, 0xe5, 0x0f, 0xf4, - 0x23, 0x68, 0x40, 0xc1, 0xa2, 0x88, 0x4c, 0xda, 0x09, 0xf0, 0xe8, 0xe2, 0x05, 0xf4, 0x22, 0x68, - 0x40, 0xc1, 0xa1, 0x88, 0x03, 0xf0, 0x48, 0x45, 0x4c, 0x70, 0x4d, 0xc3, 0xc4, 0xe5, 0x07, 0xf6, - 0xa5, 0xe5, 0x25, 0xdd, 0x3e, 0xf5, 0x67, 0x03, 0x00, 0x00, 0xd7, 0xe5, 0x06, 0xf6, 0xc5, 0xe5, - 0x5f, 0xf2, 0xc7, 0xe5, 0x36, 0xf5, 0x5a, 0xf0, 0xe2, 0xe5, 0x06, 0xf6, 0xd8, 0xe5, 0x32, 0xf5, - 0xd9, 0x02, 0x00, 0x00, 0x8a, 0x20, 0x7e, 0x07, 0xb8, 0x60, 0x95, 0xe0, 0x54, 0x06, 0xed, 0xff, - 0xb1, 0x42, 0x24, 0x20, 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, 0x75, 0x03, 0x00, 0x00, 0x93, 0x00, - 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x39, 0x06, 0xcf, 0xff, 0x61, 0x03, - 0x00, 0x00, 0x31, 0x06, 0xcf, 0xff, 0x2d, 0x06, 0xcf, 0xff, 0x29, 0x06, 0xcf, 0xff, 0x25, 0x06, - 0xcf, 0xff, 0x2f, 0x00, 0x00, 0x00, 0x1b, 0x03, 0x00, 0x00, 0x25, 0x03, 0x00, 0x00, 0x15, 0x06, - 0xcf, 0xff, 0x11, 0x06, 0xcf, 0xff, 0x29, 0x00, 0x00, 0x00, 0x09, 0x06, 0xcf, 0xff, 0x2d, 0x03, - 0x00, 0x00, 0x01, 0x06, 0xcf, 0xff, 0xfd, 0x05, 0xcf, 0xff, 0x71, 0x02, 0x00, 0x00, 0x04, 0x10, - 0x01, 0x24, 0xe8, 0xe2, 0x16, 0xf4, 0x07, 0xc0, 0x00, 0xb1, 0x16, 0xf0, 0x04, 0x10, 0x19, 0x24, - 0x37, 0x70, 0x92, 0x02, 0x22, 0x00, 0x4c, 0x76, 0x02, 0xc0, 0x03, 0xc3, 0xc3, 0x41, 0x7f, 0x00, - 0xa0, 0xd3, 0x40, 0x7b, 0x14, 0x77, 0xd2, 0x05, 0xe2, 0xff, 0x0c, 0x77, 0x09, 0x05, 0x00, 0x00, - 0x07, 0xc0, 0x00, 0xa1, 0xc3, 0x05, 0xcf, 0xff, 0x07, 0x09, 0x11, 0x20, 0x2e, 0x71, 0xc3, 0x40, - 0x7f, 0x00, 0x15, 0x9a, 0x08, 0x65, 0xb1, 0x42, 0x44, 0x20, 0x40, 0x80, 0x4e, 0xc0, 0x01, 0xc0, - 0xc0, 0x22, 0x22, 0x28, 0x03, 0xe8, 0x0b, 0x0e, 0x1e, 0x10, 0x0c, 0x70, 0x41, 0xc0, 0x0e, 0x43, - 0x06, 0x42, 0x8c, 0x22, 0x41, 0xa9, 0x0a, 0x25, 0x40, 0x04, 0x9d, 0xc0, 0x4f, 0xd9, 0x40, 0x24, - 0x06, 0x3c, 0xc0, 0x25, 0x61, 0x00, 0x40, 0x24, 0x07, 0x3d, 0x0a, 0x24, 0x80, 0x04, 0x50, 0x46, - 0x8a, 0x0a, 0xef, 0xff, 0x70, 0x45, 0xc3, 0x41, 0x7f, 0x00, 0xa8, 0xd3, 0x96, 0x0f, 0x6f, 0xff, - 0x18, 0x41, 0x30, 0x14, 0x13, 0x30, 0x05, 0x23, 0x3e, 0xa0, 0x05, 0xf4, 0x6e, 0x71, 0x30, 0x1c, - 0xc0, 0x34, 0xc3, 0x42, 0xff, 0x7f, 0xff, 0xff, 0x2c, 0x70, 0x23, 0x40, 0xba, 0x0e, 0xa0, 0x00, - 0x50, 0x44, 0x48, 0xc0, 0x04, 0xe8, 0x08, 0xc0, 0x02, 0x20, 0x54, 0x06, 0x00, 0x11, 0x81, 0x30, - 0xc3, 0x40, 0x7f, 0x00, 0x15, 0x9a, 0x08, 0x61, 0x4f, 0x08, 0xbe, 0x00, 0xee, 0x70, 0x24, 0x1c, - 0xc0, 0x35, 0x10, 0x1c, 0xc0, 0x35, 0x8c, 0x22, 0x41, 0xa9, 0x4a, 0xf2, 0x8c, 0x22, 0x81, 0xa9, - 0x0c, 0xf2, 0x8c, 0x22, 0xc1, 0xa9, 0x1d, 0xf4, 0x8c, 0x23, 0x7f, 0xaf, 0xcc, 0x21, 0xca, 0xa4, - 0x7a, 0x00, 0x0b, 0x00, 0x02, 0x21, 0xd1, 0x24, 0x2f, 0x0b, 0x72, 0x20, 0x8a, 0x26, 0x81, 0x29, - 0x51, 0x0c, 0xe3, 0x24, 0x4c, 0x70, 0x02, 0x23, 0x00, 0x25, 0x10, 0x1c, 0x00, 0x35, 0x46, 0xc0, - 0x58, 0x43, 0x58, 0x40, 0x6c, 0xf0, 0x10, 0x1c, 0x00, 0x35, 0xce, 0x70, 0x90, 0xf0, 0x4c, 0x70, - 0x50, 0x46, 0x58, 0x43, 0x1f, 0xf0, 0x4e, 0x23, 0x01, 0x20, 0x42, 0x2b, 0xd3, 0x27, 0x04, 0x23, - 0x58, 0x20, 0x0c, 0x71, 0x0c, 0x21, 0x00, 0xa6, 0x18, 0x01, 0x2c, 0x00, 0x46, 0xc0, 0x00, 0x24, - 0x00, 0x26, 0x32, 0x70, 0x56, 0x01, 0x2c, 0x00, 0x02, 0x21, 0x1b, 0x26, 0x4c, 0x70, 0x50, 0xf0, - 0x02, 0x24, 0xdb, 0x24, 0x4c, 0x70, 0x10, 0x1c, 0xc0, 0x34, 0x0c, 0x23, 0x40, 0xb4, 0xca, 0x23, - 0x49, 0x34, 0x0c, 0x70, 0x46, 0xc0, 0x18, 0x40, 0x42, 0xf0, 0x26, 0x77, 0x50, 0x25, 0xd5, 0x27, - 0x10, 0x1c, 0x41, 0x30, 0x05, 0x25, 0xbe, 0xa5, 0x06, 0xf4, 0x30, 0x1c, 0xc0, 0x35, 0x2c, 0x70, - 0xed, 0x70, 0x0c, 0xf0, 0x42, 0x23, 0x41, 0xa0, 0x41, 0x29, 0xcf, 0x07, 0x0c, 0x00, 0x23, 0x00, - 0x4c, 0xc1, 0x4e, 0x23, 0x41, 0x20, 0x4c, 0xc1, 0x9a, 0xc0, 0x42, 0x08, 0xef, 0xff, 0x89, 0xc2, - 0x09, 0xc1, 0x1b, 0x09, 0xb3, 0x00, 0x29, 0x68, 0x30, 0xd8, 0xff, 0x19, 0x12, 0x80, 0x09, 0xc0, - 0x04, 0x71, 0xf9, 0x08, 0xb2, 0x80, 0x49, 0xc0, 0x01, 0x69, 0x0e, 0xc1, 0x79, 0x27, 0x02, 0x10, - 0x42, 0x24, 0x5b, 0x20, 0x75, 0x69, 0x2a, 0x68, 0x48, 0xc1, 0x5b, 0x79, 0x52, 0x23, 0x42, 0x01, - 0x2b, 0xe1, 0x45, 0xe2, 0xff, 0x18, 0x42, 0x80, 0xfe, 0x18, 0x82, 0x80, 0x09, 0xc0, 0x2c, 0x70, - 0x8a, 0x26, 0x41, 0x29, 0x42, 0x68, 0x38, 0x40, 0x46, 0xc1, 0x49, 0xc2, 0x06, 0xc1, 0x42, 0x43, - 0x00, 0x20, 0xc0, 0x36, 0x3a, 0x62, 0x2c, 0x71, 0x44, 0x26, 0x08, 0x12, 0x4a, 0xc1, 0xb8, 0x23, - 0xc1, 0x09, 0x3e, 0x21, 0x01, 0x20, 0x78, 0x20, 0x0c, 0x10, 0x65, 0x79, 0x1a, 0x62, 0x0e, 0x20, - 0x40, 0x04, 0x04, 0xc7, 0x2b, 0x7c, 0x4b, 0xc0, 0xc0, 0x78, 0x4b, 0xc0, 0x58, 0x60, 0x1f, 0x08, - 0x31, 0x10, 0x1f, 0x67, 0x29, 0x09, 0x72, 0x20, 0x0c, 0x70, 0x13, 0x0b, 0x11, 0x30, 0x07, 0xeb, - 0x79, 0x20, 0x00, 0x30, 0x2f, 0x08, 0x30, 0x30, 0x4a, 0xc0, 0xe5, 0x71, 0x8e, 0x70, 0x40, 0x20, - 0x10, 0x22, 0x92, 0x45, 0x92, 0x41, 0x56, 0x70, 0x9d, 0xf4, 0xb6, 0xf0, 0x4a, 0xc0, 0xf8, 0xf1, - 0x4c, 0x70, 0x8c, 0x22, 0xc1, 0xa9, 0x0a, 0x20, 0x40, 0x34, 0x58, 0x43, 0xca, 0x20, 0x21, 0x30, - 0xc6, 0xf1, 0x6f, 0x70, 0x7b, 0x40, 0xec, 0xf1, 0x41, 0x2e, 0x80, 0x10, 0x10, 0xd9, 0x44, 0x20, - 0x94, 0x00, 0x00, 0x10, 0x0f, 0x20, 0xe8, 0xe2, 0xa1, 0x44, 0xf0, 0x7a, 0xca, 0x27, 0x81, 0x10, - 0xf5, 0x70, 0x91, 0xc0, 0x84, 0xc3, 0xb8, 0x24, 0x01, 0x0e, 0xe1, 0x42, 0x86, 0x0f, 0xaf, 0xff, - 0xca, 0x24, 0x21, 0x20, 0x18, 0x41, 0x4e, 0x70, 0x52, 0xf0, 0x4c, 0x70, 0x0a, 0x23, 0x00, 0x35, - 0xa6, 0xf1, 0xcb, 0x47, 0xff, 0x7f, 0xff, 0xff, 0x2c, 0x70, 0x23, 0x40, 0xba, 0x0c, 0xa0, 0x00, - 0xe1, 0x42, 0x48, 0xc0, 0x04, 0xe8, 0x08, 0xc0, 0x02, 0x20, 0x4f, 0x06, 0x3a, 0x23, 0xc1, 0x23, - 0x41, 0x2e, 0x80, 0x11, 0xee, 0x70, 0x2b, 0x78, 0xf2, 0x45, 0x7e, 0x77, 0x73, 0xdd, 0xf2, 0x46, - 0xb2, 0x41, 0x44, 0xc7, 0x70, 0xf0, 0x04, 0x10, 0x0d, 0x24, 0xee, 0x70, 0xed, 0x71, 0xf2, 0x45, - 0x71, 0xc5, 0x54, 0x24, 0x99, 0x38, 0xf2, 0x46, 0xb2, 0x41, 0x44, 0xc7, 0x64, 0xf0, 0x41, 0x2e, - 0xc0, 0x10, 0x08, 0xd9, 0x6f, 0xdd, 0x44, 0x20, 0x54, 0x00, 0xbd, 0xf1, 0x04, 0x10, 0x01, 0x24, - 0x91, 0xc0, 0xa6, 0x0f, 0xaf, 0xff, 0x84, 0xc2, 0xee, 0x70, 0x04, 0xc7, 0xf2, 0x45, 0x18, 0x41, - 0x70, 0xdd, 0xf2, 0x46, 0xb2, 0x41, 0x50, 0xf0, 0x75, 0xdd, 0x4e, 0x70, 0x00, 0x10, 0x0f, 0x20, - 0xf5, 0xe5, 0x07, 0xf2, 0x0b, 0x0f, 0x13, 0x10, 0xf3, 0x7f, 0x34, 0x1c, 0xc1, 0x3f, 0x91, 0xc0, - 0x84, 0xc2, 0xce, 0x0f, 0xaf, 0xff, 0xe1, 0x41, 0x18, 0x41, 0x8e, 0x70, 0x01, 0xc0, 0xce, 0x70, - 0x14, 0x70, 0x0c, 0x70, 0x06, 0xf2, 0x01, 0xc0, 0x46, 0x26, 0xbe, 0x9f, 0x02, 0xf2, 0x0c, 0x70, - 0x06, 0x74, 0x05, 0x27, 0xfe, 0x94, 0x10, 0xf2, 0x04, 0xc1, 0x41, 0xc0, 0x78, 0x21, 0x17, 0x00, - 0x02, 0x23, 0x40, 0x20, 0xe2, 0x71, 0x08, 0x21, 0xcf, 0x04, 0x72, 0x71, 0xca, 0x27, 0x0b, 0x20, - 0x82, 0x77, 0x09, 0xf0, 0x44, 0x1c, 0x82, 0x35, 0x10, 0x1c, 0x80, 0x35, 0xee, 0x70, 0x41, 0xc0, - 0xed, 0x70, 0x0d, 0xc0, 0x0a, 0x25, 0xc0, 0x25, 0x87, 0xe8, 0xee, 0x71, 0x4b, 0x26, 0x80, 0x91, - 0x10, 0xf2, 0x21, 0x0a, 0x10, 0x20, 0x14, 0x70, 0x2d, 0xd8, 0x06, 0xf4, 0xe1, 0xbe, 0x20, 0xd8, - 0xca, 0x20, 0xe2, 0x0a, 0x40, 0x24, 0x51, 0x20, 0xe5, 0x71, 0xee, 0x71, 0x4d, 0xc0, 0x04, 0xf0, - 0x0a, 0x21, 0x00, 0x25, 0x2b, 0x0e, 0x7e, 0x11, 0x6e, 0x70, 0x05, 0xc0, 0x23, 0x0f, 0x23, 0x10, - 0xe0, 0xbe, 0x05, 0xc0, 0x1f, 0xbe, 0xe2, 0x78, 0x4e, 0x70, 0x5f, 0xbe, 0xca, 0x22, 0x01, 0x20, - 0x04, 0x26, 0x14, 0x10, 0x08, 0xf2, 0x05, 0xc7, 0x2c, 0x70, 0x41, 0xc1, 0x05, 0xf0, 0x4e, 0x70, - 0x52, 0x44, 0x04, 0xf0, 0x05, 0xc7, 0x45, 0xc0, 0x1f, 0x0a, 0x10, 0x20, 0x01, 0xc0, 0x79, 0x20, - 0x00, 0x00, 0x8b, 0xe8, 0x03, 0xc0, 0x02, 0xc1, 0x6c, 0x70, 0xce, 0x0c, 0xa0, 0x00, 0x42, 0x42, - 0x14, 0x70, 0x0c, 0x77, 0x98, 0xf4, 0x55, 0x0f, 0x10, 0x20, 0x3b, 0x09, 0x10, 0x20, 0x0d, 0xc0, - 0x07, 0xe8, 0x42, 0x21, 0x51, 0xa0, 0x6e, 0x71, 0x4c, 0x71, 0x6f, 0xc0, 0x0c, 0xf2, 0x8f, 0xc0, - 0x30, 0xd9, 0x62, 0x70, 0x40, 0x23, 0x42, 0x20, 0x0d, 0x09, 0xb2, 0x20, 0x20, 0xa8, 0x40, 0x23, - 0x82, 0x20, 0xa1, 0xa8, 0x02, 0xc0, 0x03, 0xc3, 0x60, 0x7b, 0x8f, 0xc1, 0x14, 0x77, 0x0c, 0x77, - 0x7a, 0xf2, 0x19, 0x0d, 0x30, 0x20, 0x6c, 0x71, 0x03, 0xc0, 0x02, 0xc1, 0x7a, 0x0c, 0xa0, 0x00, - 0xa2, 0x42, 0x14, 0x70, 0x0c, 0x77, 0x70, 0xf4, 0x01, 0xc0, 0x0d, 0xe8, 0x17, 0x0a, 0x30, 0x20, - 0x42, 0x42, 0x03, 0xc0, 0x02, 0xc1, 0x62, 0x0c, 0xa0, 0x00, 0x01, 0xc3, 0x14, 0x70, 0x0c, 0x77, - 0x62, 0xf4, 0x04, 0xc2, 0x08, 0xea, 0x02, 0xc0, 0x03, 0xc3, 0x60, 0x7b, 0x23, 0x41, 0x14, 0x77, - 0x0c, 0x77, 0x5a, 0xf2, 0x8f, 0x0e, 0x10, 0x20, 0x04, 0xc5, 0x06, 0xc0, 0x0a, 0xe8, 0x03, 0xc0, - 0x02, 0xc1, 0x06, 0xc2, 0x32, 0x0c, 0xa0, 0x00, 0x6c, 0x71, 0x14, 0x70, 0x0c, 0x77, 0x4c, 0xf4, - 0x0a, 0xc0, 0x0c, 0xe8, 0x2e, 0xdb, 0x6f, 0xc3, 0x02, 0xc0, 0x03, 0xc3, 0x8f, 0xc1, 0x60, 0x7b, - 0x4c, 0x71, 0x14, 0x77, 0x0c, 0x77, 0x40, 0xf2, 0x17, 0x08, 0x30, 0x30, 0x6c, 0x71, 0x03, 0xc0, - 0x02, 0xc1, 0x06, 0x0c, 0xa0, 0x00, 0x03, 0x42, 0x14, 0x70, 0x0c, 0x77, 0x34, 0xf4, 0x19, 0x0b, - 0x30, 0x30, 0x00, 0x21, 0x41, 0x33, 0x02, 0xc0, 0x03, 0xc3, 0x60, 0x7b, 0x63, 0x42, 0x14, 0x77, - 0x0c, 0x77, 0x2a, 0xf2, 0x0b, 0xc0, 0x0b, 0xe8, 0x03, 0xc0, 0x02, 0xc1, 0x0b, 0xc2, 0xda, 0x0b, - 0xa0, 0x00, 0x6c, 0x71, 0x14, 0x70, 0x0c, 0x77, 0x1e, 0xf4, 0x8c, 0x26, 0x41, 0xa9, 0x0b, 0xf4, - 0x09, 0xc2, 0x09, 0xea, 0x02, 0xc0, 0x08, 0xc1, 0x03, 0xc3, 0x40, 0x7b, 0x14, 0x77, 0x0c, 0x77, - 0x12, 0xf2, 0x19, 0x0c, 0x30, 0x20, 0x82, 0x42, 0x03, 0xc0, 0x02, 0xc1, 0xaa, 0x0b, 0xa0, 0x00, - 0x01, 0xc3, 0x14, 0x70, 0x0c, 0x77, 0x08, 0xf4, 0x07, 0xc0, 0xf8, 0x60, 0xcb, 0x00, 0xef, 0xff, - 0x47, 0xc0, 0x07, 0xc0, 0x80, 0x24, 0x03, 0x31, 0x04, 0x14, 0x1b, 0x34, 0xda, 0xc6, 0xe0, 0x78, - 0xe6, 0xc2, 0x08, 0x46, 0xc3, 0x41, 0xf0, 0x3f, 0x00, 0x00, 0x0c, 0x70, 0xad, 0x71, 0xcb, 0x47, - 0x7f, 0x00, 0xf0, 0x9c, 0x0b, 0x00, 0x00, 0x00, 0x08, 0xe7, 0xa5, 0x71, 0xdc, 0x7e, 0x0a, 0xee, - 0x11, 0x0d, 0x95, 0x12, 0xf5, 0x0e, 0x1e, 0x90, 0x40, 0x87, 0x61, 0x87, 0x23, 0x5b, 0xf6, 0xf1, - 0xc6, 0xc6, 0xe0, 0x78, 0xe4, 0xc2, 0x28, 0x45, 0x92, 0x0d, 0x6f, 0x07, 0x08, 0x46, 0x2c, 0x71, - 0x8a, 0xe8, 0x0c, 0x70, 0xfd, 0xe6, 0x09, 0xf4, 0x2d, 0xd8, 0x20, 0xad, 0x21, 0xad, 0x03, 0xad, - 0xb0, 0xd8, 0x02, 0xad, 0x0c, 0x71, 0xc4, 0xc6, 0xe4, 0xc3, 0xa1, 0xc1, 0x08, 0x45, 0x03, 0x1c, - 0x83, 0x30, 0x2a, 0x5b, 0x08, 0x46, 0x27, 0x5b, 0x00, 0x42, 0x1d, 0xd8, 0xc1, 0x41, 0x29, 0x5b, - 0x15, 0x80, 0x40, 0x24, 0xc1, 0x30, 0x00, 0x88, 0x03, 0x1c, 0x02, 0x30, 0x49, 0x85, 0xa1, 0x40, - 0x3e, 0x5b, 0xc3, 0x40, 0x7f, 0x00, 0xe8, 0xd2, 0x5a, 0x0f, 0xa0, 0x00, 0x03, 0x14, 0x81, 0x30, - 0x0c, 0x70, 0xc4, 0xc7, 0xe0, 0x7f, 0x0c, 0x70, 0xe6, 0xc3, 0xa1, 0xc1, 0xcb, 0x46, 0x80, 0x00, - 0xb8, 0x3b, 0x40, 0x86, 0x28, 0x45, 0x08, 0x47, 0x9b, 0x0a, 0x60, 0x00, 0x03, 0x1c, 0x03, 0x30, - 0x8c, 0x25, 0x02, 0x90, 0x04, 0xf4, 0x03, 0x1c, 0x83, 0x34, 0x0a, 0xf0, 0x8c, 0x25, 0xc3, 0x9f, - 0x04, 0xf4, 0x03, 0x1c, 0x43, 0x34, 0x04, 0xf0, 0x03, 0x1c, 0x03, 0x34, 0x7e, 0xd9, 0x40, 0x24, - 0xc2, 0x30, 0x6c, 0x71, 0xe1, 0x40, 0x33, 0x5b, 0x0c, 0x74, 0x25, 0x5b, 0x8c, 0x25, 0x02, 0x90, - 0x0f, 0xf4, 0xb7, 0xd9, 0xc3, 0x40, 0x7f, 0x00, 0x74, 0xd3, 0xfa, 0x0e, 0xa0, 0x00, 0x03, 0x1c, - 0x42, 0x30, 0x40, 0xd9, 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, 0xe1, 0x40, 0x13, 0xf0, 0x40, 0xd9, - 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, 0xe1, 0x40, 0x31, 0x5b, 0x03, 0x14, 0x80, 0x30, 0x40, 0xd9, - 0xc3, 0xb8, 0x4f, 0x20, 0x4c, 0x01, 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, 0xe1, 0x40, 0x03, 0x1c, - 0x02, 0x33, 0x33, 0x5b, 0x0c, 0x71, 0x25, 0x5b, 0x6c, 0xd9, 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, - 0xe1, 0x40, 0x03, 0x1c, 0x03, 0x30, 0x33, 0x5b, 0x8c, 0x25, 0x02, 0x90, 0x03, 0xf4, 0x0c, 0x71, - 0x25, 0x5b, 0xa0, 0xa6, 0xc6, 0xc7, 0xe0, 0x78, 0xf1, 0xc0, 0xc3, 0x42, 0x80, 0x00, 0x08, 0x21, - 0x03, 0xa2, 0x04, 0x89, 0x20, 0x45, 0x10, 0xe2, 0x1b, 0xd9, 0x6c, 0x75, 0xc3, 0x44, 0x7f, 0x00, - 0xa8, 0xb2, 0x32, 0x5b, 0xd1, 0xc0, 0xe0, 0x7e, 0xec, 0xc2, 0xc5, 0x08, 0x31, 0x00, 0x28, 0x47, - 0x2a, 0x5b, 0x08, 0x45, 0x27, 0x5b, 0x00, 0x42, 0x10, 0xd8, 0xa1, 0x41, 0x29, 0x5b, 0x10, 0x42, - 0x2a, 0x5b, 0x08, 0x45, 0x27, 0x5b, 0x00, 0x42, 0x11, 0xd8, 0xa1, 0x41, 0x29, 0x5b, 0x10, 0x41, - 0x2a, 0x5b, 0x08, 0x45, 0x27, 0x5b, 0x00, 0x42, 0x12, 0xd8, 0xa1, 0x41, 0x29, 0x5b, 0x10, 0x40, - 0x2a, 0x5b, 0x08, 0x45, 0x27, 0x5b, 0x00, 0x42, 0x1d, 0xd8, 0xa1, 0x41, 0x29, 0x5b, 0xcb, 0x45, - 0x80, 0x00, 0x08, 0x21, 0x31, 0x8d, 0x1b, 0x09, 0xbe, 0x00, 0x08, 0x46, 0x09, 0xee, 0xc3, 0x40, - 0x7f, 0x00, 0x88, 0xd3, 0x1e, 0x0e, 0x80, 0x00, 0x00, 0x1d, 0x43, 0x10, 0x0d, 0xf0, 0x12, 0x15, - 0xc0, 0x10, 0x1d, 0x08, 0x13, 0x00, 0x0c, 0xee, 0xc3, 0x40, 0x7f, 0x00, 0x94, 0xd3, 0x06, 0x0e, - 0x80, 0x00, 0x00, 0x1d, 0x03, 0x10, 0x18, 0x87, 0xc1, 0x41, 0x40, 0x5b, 0x10, 0x15, 0xc0, 0x10, - 0x0f, 0x08, 0x33, 0x00, 0xe1, 0x41, 0xda, 0x09, 0x20, 0x00, 0x03, 0x85, 0x10, 0x8d, 0x11, 0x08, - 0x9e, 0x01, 0x0d, 0x0a, 0x30, 0x20, 0x42, 0x41, 0x18, 0x87, 0x40, 0x5b, 0x11, 0x8d, 0x13, 0x08, - 0x5e, 0x00, 0x0f, 0x09, 0x30, 0x20, 0x22, 0x41, 0x18, 0x87, 0x40, 0x5b, 0x11, 0x8d, 0x11, 0x08, - 0x1e, 0x00, 0x0d, 0x08, 0x30, 0x20, 0x02, 0x41, 0x18, 0x87, 0x40, 0x5b, 0xcc, 0xc6, 0xe0, 0x78, - 0xe4, 0xc2, 0xcb, 0x45, 0x80, 0x00, 0xf4, 0x20, 0x5f, 0xd9, 0x6c, 0x71, 0xa1, 0x42, 0x08, 0x46, - 0x33, 0x5b, 0x0c, 0x71, 0x25, 0x5b, 0x41, 0x6d, 0x60, 0xd9, 0x6c, 0x71, 0xc1, 0x40, 0x33, 0x5b, - 0x0c, 0x71, 0x25, 0x5b, 0x42, 0x6d, 0x61, 0xd9, 0x6c, 0x71, 0xc1, 0x40, 0x33, 0x5b, 0x0c, 0x71, - 0x25, 0x5b, 0x43, 0x6d, 0x62, 0xd9, 0x6c, 0x71, 0xc1, 0x40, 0x33, 0x5b, 0x0c, 0x71, 0x25, 0x5b, - 0x0c, 0x70, 0xc4, 0xc6, 0xea, 0xc3, 0xa6, 0xc1, 0xcd, 0x70, 0x7e, 0xd9, 0xb6, 0xda, 0x3c, 0xdb, - 0x04, 0x1c, 0x84, 0x33, 0x10, 0x41, 0x44, 0xc6, 0x42, 0xc6, 0xf6, 0x0f, 0x2f, 0x08, 0x40, 0xc6, - 0x7e, 0xd9, 0x11, 0xda, 0x3c, 0xdb, 0xea, 0x0f, 0x2f, 0x08, 0x22, 0x40, 0x08, 0xd9, 0x12, 0x0d, - 0x2f, 0x08, 0x22, 0x40, 0x40, 0xd9, 0x2c, 0xda, 0x6c, 0x70, 0xd6, 0x0f, 0x2f, 0x08, 0x22, 0x40, - 0xcb, 0x47, 0x48, 0x42, 0x00, 0x00, 0x6c, 0x71, 0x6d, 0xd9, 0x40, 0x24, 0xc2, 0x35, 0xc1, 0x44, - 0xc1, 0x45, 0x22, 0x40, 0xe1, 0x46, 0xab, 0x23, 0x61, 0x0a, 0x70, 0x40, 0x17, 0x1c, 0x43, 0x33, - 0x36, 0x5b, 0x12, 0xd9, 0x80, 0xc2, 0x6c, 0x76, 0x22, 0x40, 0x31, 0x5b, 0x01, 0x14, 0xcd, 0x30, - 0x03, 0x14, 0x80, 0x30, 0x05, 0x14, 0x88, 0x30, 0x20, 0xc4, 0x02, 0x14, 0x8b, 0x30, 0x04, 0x14, - 0x89, 0x30, 0x08, 0xbd, 0x08, 0xb8, 0x40, 0x28, 0x08, 0x12, 0x85, 0x7d, 0x05, 0x20, 0xc0, 0x02, - 0x08, 0x1c, 0x44, 0x33, 0x0a, 0x1c, 0x04, 0x30, 0x05, 0x20, 0x48, 0x12, 0x6d, 0xd9, 0x40, 0x24, - 0xc2, 0x35, 0x6c, 0x71, 0xc1, 0x44, 0xc1, 0x45, 0x22, 0x40, 0xe1, 0x46, 0x0c, 0x1c, 0x04, 0x32, - 0xab, 0x20, 0x61, 0x2a, 0x17, 0x1c, 0x43, 0x32, 0x36, 0x5b, 0x12, 0xd9, 0x80, 0xc2, 0x6c, 0x76, - 0x22, 0x40, 0x31, 0x5b, 0x01, 0x14, 0xc0, 0x30, 0x03, 0x14, 0x82, 0x30, 0x05, 0x14, 0x8f, 0x30, - 0x20, 0xc1, 0x02, 0x14, 0x83, 0x30, 0x21, 0xc4, 0x08, 0xb8, 0x08, 0xba, 0x08, 0xbf, 0x25, 0x78, - 0x45, 0x7b, 0xe5, 0x7c, 0x23, 0xd9, 0x10, 0x1c, 0x04, 0x30, 0x12, 0x1c, 0xc4, 0x30, 0x14, 0x1c, - 0x04, 0x33, 0xab, 0x20, 0x61, 0x2a, 0x00, 0x1e, 0x40, 0x70, 0x80, 0x00, 0xcc, 0x3b, 0x40, 0x24, - 0x81, 0x34, 0x40, 0x24, 0x82, 0x32, 0xed, 0x70, 0x05, 0xf0, 0x02, 0x12, 0x4d, 0x05, 0x02, 0x11, - 0x40, 0x05, 0xae, 0x7b, 0x0e, 0x78, 0x62, 0x78, 0x42, 0x28, 0xc3, 0x07, 0x78, 0x60, 0x67, 0x78, - 0x10, 0x78, 0x11, 0x08, 0x82, 0x0f, 0x00, 0x00, 0x01, 0x20, 0xef, 0x78, 0x0f, 0x20, 0x8f, 0x03, - 0xc5, 0x71, 0xdb, 0x0e, 0xf2, 0x90, 0x3c, 0xdb, 0x7e, 0xd9, 0xb6, 0xda, 0xd2, 0x0e, 0x2f, 0x08, - 0x22, 0x40, 0x19, 0x0f, 0x3e, 0x10, 0x61, 0xd8, 0xef, 0x79, 0x11, 0x09, 0x7e, 0x00, 0x62, 0xd8, - 0x09, 0x09, 0xbe, 0x00, 0x64, 0xd8, 0x0c, 0x72, 0xca, 0xc7, 0xe0, 0x78, 0xf1, 0xc0, 0x20, 0x45, - 0x86, 0x11, 0xc1, 0x00, 0x1d, 0x09, 0x33, 0x00, 0x12, 0xd9, 0xc3, 0x42, 0x80, 0x00, 0x0c, 0x21, - 0x02, 0xa2, 0x04, 0x15, 0x80, 0x00, 0x6c, 0x76, 0xc3, 0x44, 0x7f, 0x00, 0x34, 0xb5, 0x32, 0x5b, - 0xd1, 0xc0, 0xe0, 0x7e, 0xe6, 0xc2, 0x28, 0x43, 0x9e, 0xe8, 0xc3, 0x40, 0x80, 0x00, 0x08, 0x21, - 0x05, 0x10, 0xc1, 0x00, 0x84, 0x88, 0x07, 0x10, 0xcf, 0x00, 0x09, 0x10, 0xc2, 0x00, 0xa8, 0x88, - 0xc6, 0x88, 0x63, 0x80, 0x40, 0x29, 0x00, 0x02, 0x85, 0x78, 0xcb, 0x44, 0x80, 0x00, 0x70, 0x3a, - 0x00, 0xa4, 0x40, 0x2f, 0x00, 0x12, 0x08, 0xba, 0xc5, 0x78, 0x01, 0xa4, 0xa5, 0x7a, 0x61, 0x40, - 0x60, 0x7b, 0x42, 0xa4, 0xc6, 0xc6, 0xe0, 0x78, 0xee, 0xc2, 0x28, 0x45, 0x08, 0x46, 0x27, 0x5b, - 0x10, 0x40, 0x2a, 0x5b, 0x08, 0x47, 0x11, 0xd8, 0xe1, 0x41, 0x02, 0x42, 0x29, 0x5b, 0x10, 0x43, - 0x12, 0xd8, 0xe1, 0x41, 0x02, 0x42, 0x29, 0x5b, 0x10, 0x42, 0x13, 0xd8, 0xe1, 0x41, 0x02, 0x42, - 0x29, 0x5b, 0x10, 0x41, 0x1d, 0xd8, 0xe1, 0x41, 0x02, 0x42, 0x29, 0x5b, 0x10, 0x40, 0xc3, 0x40, - 0x7f, 0x00, 0x7c, 0xd3, 0x6e, 0x0b, 0xa0, 0x00, 0xc1, 0x41, 0xcb, 0x47, 0x80, 0x00, 0xbc, 0x3b, - 0x8c, 0x26, 0xc3, 0x9f, 0x29, 0xf2, 0x65, 0x0e, 0x30, 0x14, 0x8c, 0x26, 0x02, 0x90, 0x39, 0xf2, - 0x99, 0x0e, 0xb5, 0x10, 0x62, 0x40, 0x9a, 0x0a, 0xcf, 0x07, 0x11, 0xe8, 0x92, 0x0a, 0xef, 0x07, - 0x42, 0x40, 0x0d, 0xe8, 0x8a, 0x0a, 0xef, 0x07, 0x02, 0x40, 0x09, 0xe8, 0x82, 0x0a, 0xef, 0x07, - 0x22, 0x40, 0x05, 0xe8, 0x04, 0x8d, 0x2c, 0x70, 0x03, 0xf0, 0x04, 0x8d, 0x80, 0xd9, 0xde, 0x0b, - 0xcf, 0xff, 0x86, 0x15, 0x80, 0x10, 0xa1, 0x41, 0xc6, 0xb8, 0x86, 0x1d, 0x02, 0x10, 0x0c, 0x70, - 0xc0, 0xa7, 0x41, 0x5b, 0x2a, 0xf0, 0x04, 0x8d, 0x00, 0x17, 0x10, 0x10, 0xbe, 0x0b, 0xef, 0xff, - 0xff, 0xd9, 0xb8, 0x20, 0x02, 0x20, 0x15, 0xf0, 0x8e, 0x0d, 0xef, 0xff, 0x04, 0x8d, 0x00, 0x41, - 0xa1, 0x40, 0x3f, 0x5b, 0x26, 0x85, 0x60, 0x79, 0xa1, 0x40, 0x10, 0xd8, 0xce, 0xc6, 0x04, 0x8d, - 0x00, 0x17, 0x10, 0x10, 0x96, 0x0b, 0xef, 0xff, 0x80, 0xd9, 0xb8, 0x20, 0xc3, 0x2f, 0x0c, 0x70, - 0xa1, 0x41, 0xc0, 0xa7, 0x41, 0x5b, 0x15, 0x08, 0x30, 0x20, 0xa1, 0x41, 0xc3, 0x40, 0x80, 0x00, - 0xdc, 0x3b, 0x49, 0x85, 0x60, 0x7a, 0x00, 0x80, 0x00, 0x87, 0xce, 0xc6, 0xea, 0xc3, 0xa1, 0xc1, - 0xcd, 0x70, 0x10, 0x41, 0xc3, 0x40, 0x80, 0x00, 0xdc, 0x3b, 0xcb, 0x45, 0x7f, 0x00, 0x54, 0xd2, - 0x28, 0x47, 0x03, 0x1c, 0x82, 0x33, 0x02, 0x1c, 0x82, 0x33, 0x00, 0x18, 0x40, 0x04, 0xb1, 0x40, - 0x00, 0x95, 0x22, 0x41, 0x8a, 0x0c, 0xef, 0x02, 0x2f, 0x38, 0x03, 0x00, 0x45, 0xf6, 0xc5, 0x71, - 0xf1, 0x0e, 0x34, 0x91, 0xa5, 0x74, 0xae, 0x0d, 0x2f, 0x08, 0xe1, 0x40, 0x8c, 0x20, 0xc3, 0x8f, - 0x07, 0xf2, 0xa2, 0x0d, 0x2f, 0x08, 0xe1, 0x40, 0x8c, 0x20, 0x02, 0x80, 0x3b, 0xf4, 0x04, 0x8f, - 0x15, 0x20, 0x8c, 0x23, 0x40, 0xd9, 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, 0xa2, 0x8c, 0x31, 0x5b, - 0x03, 0x14, 0x81, 0x30, 0xe1, 0x40, 0x7e, 0x0d, 0x2f, 0x08, 0x02, 0x1c, 0x42, 0x30, 0x8c, 0x20, - 0x02, 0x80, 0x12, 0xf4, 0x03, 0x14, 0x81, 0x30, 0x53, 0x25, 0xc0, 0x10, 0x87, 0xb8, 0x47, 0x08, - 0x60, 0x00, 0x02, 0x1c, 0x02, 0x30, 0x04, 0x8f, 0x40, 0xd9, 0x40, 0x24, 0x82, 0x30, 0x6c, 0x71, - 0x33, 0x5b, 0x19, 0xf0, 0x4e, 0x0d, 0x2f, 0x08, 0xe1, 0x40, 0x8c, 0x20, 0xc3, 0x8f, 0x13, 0xf4, - 0x03, 0x14, 0x81, 0x30, 0x53, 0x25, 0xc0, 0x10, 0x85, 0xb8, 0x1b, 0x08, 0x60, 0x00, 0x02, 0x1c, - 0x02, 0x30, 0x04, 0x8f, 0x8c, 0x70, 0x40, 0xd9, 0x40, 0x24, 0x82, 0x30, 0x6c, 0x71, 0x80, 0x45, - 0x34, 0x5b, 0x15, 0x20, 0x80, 0x23, 0x00, 0x90, 0xcb, 0x45, 0x80, 0x00, 0xd4, 0x3b, 0x2f, 0x3a, - 0x03, 0x00, 0x0c, 0x70, 0xe1, 0x41, 0x40, 0xa5, 0x43, 0x5b, 0x00, 0x85, 0xca, 0xc7, 0xe0, 0x78, - 0x42, 0x28, 0xc1, 0x07, 0x38, 0x60, 0x27, 0x78, 0xe0, 0x7f, 0x0e, 0x78, 0x2c, 0x70, 0x9e, 0xb9, - 0x20, 0x42, 0x01, 0x08, 0xa4, 0x00, 0x22, 0xb9, 0x2c, 0x70, 0x0b, 0xea, 0x5b, 0x61, 0x0b, 0x08, - 0xc4, 0x00, 0x62, 0x78, 0x54, 0x79, 0x41, 0x2a, 0x82, 0x80, 0x3d, 0x79, 0xf8, 0xf5, 0xe0, 0x7f, - 0x30, 0x78, 0xe0, 0x78, 0x80, 0x98, 0x61, 0x98, 0x42, 0x98, 0x89, 0x7c, 0x69, 0x7b, 0x49, 0x7a, - 0x98, 0x63, 0xcd, 0x07, 0xef, 0xff, 0x58, 0x60, 0xe2, 0xc2, 0xde, 0x0c, 0x6f, 0x09, 0x08, 0x45, - 0x06, 0x1d, 0x05, 0x13, 0xc2, 0xc6, 0xe0, 0x78, 0xe6, 0xc2, 0xcb, 0x45, 0x80, 0x00, 0xf6, 0x1f, - 0x60, 0x8d, 0x87, 0x0b, 0x31, 0x00, 0x48, 0x43, 0xcb, 0x46, 0x80, 0x00, 0x9c, 0x1f, 0x65, 0x86, - 0x84, 0x86, 0x2f, 0x39, 0x43, 0x00, 0x2f, 0x38, 0x03, 0x00, 0x02, 0x31, 0xc1, 0x00, 0x02, 0x30, - 0x00, 0x03, 0x46, 0x86, 0x00, 0x31, 0x41, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x30, 0x41, 0x00, - 0x2f, 0x38, 0xc3, 0x02, 0x02, 0x30, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, - 0xc3, 0x41, 0x49, 0x45, 0x9c, 0x53, 0x2a, 0x0b, 0xef, 0x02, 0xe1, 0x8d, 0xc3, 0xf6, 0xe5, 0x71, - 0xe1, 0xad, 0xef, 0x78, 0x8c, 0x20, 0x03, 0x82, 0x06, 0xf4, 0x01, 0x95, 0x01, 0x1d, 0x03, 0x10, - 0x04, 0x71, 0x01, 0xb5, 0x1e, 0x8e, 0x0f, 0x08, 0x71, 0x00, 0x0c, 0x70, 0x01, 0xad, 0x01, 0xb5, - 0x02, 0xf0, 0x01, 0x95, 0x22, 0x95, 0x13, 0x08, 0x41, 0x00, 0x01, 0x1d, 0x03, 0x10, 0x02, 0x1d, - 0x05, 0x10, 0x00, 0x1d, 0x43, 0x10, 0xc6, 0xc6, 0xf1, 0xc0, 0xc3, 0x42, 0x80, 0x00, 0x20, 0x21, - 0x20, 0x82, 0x20, 0x81, 0x1b, 0x09, 0x80, 0x0f, 0xa5, 0x5a, 0x6b, 0xb6, 0x24, 0x8a, 0x89, 0xe9, - 0x2c, 0x71, 0x14, 0x70, 0x27, 0xd8, 0x24, 0xaa, 0x05, 0xf2, 0x27, 0xd8, 0x3c, 0x5b, 0xd1, 0xc0, - 0xe0, 0x7e, 0xab, 0x20, 0xe0, 0x0c, 0xab, 0x21, 0x61, 0x0a, 0xff, 0xf1, 0xe6, 0xc2, 0x28, 0x45, - 0x08, 0x46, 0x30, 0x5b, 0x08, 0x47, 0x28, 0x5b, 0x00, 0x42, 0x1c, 0xd8, 0xe1, 0x41, 0x2f, 0x5b, - 0x2d, 0x8e, 0x11, 0xe9, 0x34, 0x8e, 0x1f, 0x09, 0x11, 0x04, 0x0d, 0xe8, 0x2c, 0x5b, 0x0b, 0xe8, - 0x00, 0x85, 0xcb, 0x46, 0x48, 0x43, 0x00, 0x00, 0x86, 0x0a, 0xef, 0x02, 0xc1, 0x41, 0x43, 0xf6, - 0xc0, 0xa5, 0xc6, 0xc6, 0xee, 0xc2, 0x30, 0x5b, 0x08, 0x45, 0x28, 0x5b, 0x00, 0x42, 0x1c, 0xd8, - 0xa1, 0x41, 0x2f, 0x5b, 0x10, 0x41, 0x30, 0x5b, 0x08, 0x45, 0x28, 0x5b, 0x00, 0x42, 0x1b, 0xd8, - 0xa1, 0x41, 0x2f, 0x5b, 0x10, 0x43, 0x2a, 0x5b, 0x08, 0x45, 0x27, 0x5b, 0x00, 0x42, 0x1d, 0xd8, - 0xa1, 0x41, 0x29, 0x5b, 0x08, 0x47, 0x2a, 0x5b, 0x08, 0x45, 0x27, 0x5b, 0x00, 0x42, 0x10, 0xd8, - 0xa1, 0x41, 0x29, 0x5b, 0x79, 0x09, 0x30, 0x20, 0x10, 0x40, 0x22, 0x40, 0x2c, 0x5b, 0xd3, 0x42, - 0x7f, 0x00, 0x84, 0xdc, 0x13, 0xe8, 0x0d, 0x19, 0x43, 0x20, 0x56, 0x08, 0xa0, 0x00, 0x0d, 0x1a, - 0x43, 0x20, 0x1b, 0x08, 0x10, 0x20, 0x0d, 0x10, 0x80, 0x20, 0x89, 0xe8, 0xc3, 0x40, 0x7f, 0x00, - 0x70, 0xd2, 0x12, 0x08, 0xa0, 0x00, 0x0d, 0x18, 0x43, 0x20, 0x0d, 0x11, 0x80, 0x20, 0x20, 0xe8, - 0xad, 0x72, 0x08, 0xef, 0x0d, 0x8f, 0x84, 0xe8, 0x0d, 0x1f, 0x43, 0x10, 0x15, 0x87, 0xa0, 0x88, - 0xcb, 0x46, 0x7f, 0x00, 0x78, 0xd2, 0x23, 0x0b, 0x10, 0x20, 0x0d, 0x13, 0x80, 0x20, 0x0d, 0xe8, - 0xe2, 0x0f, 0x60, 0x00, 0xc1, 0x40, 0x0c, 0xef, 0x0d, 0x8f, 0x0a, 0xe8, 0x0d, 0x18, 0x42, 0x23, - 0x87, 0xed, 0x4c, 0x4e, 0x08, 0xf0, 0xce, 0x0f, 0x60, 0x00, 0x6c, 0x4e, 0xce, 0xc6, 0x0d, 0x0d, - 0x71, 0x10, 0x38, 0x4e, 0xbe, 0x0f, 0x40, 0x00, 0x0d, 0x19, 0x42, 0x23, 0x0d, 0x1a, 0x42, 0x23, - 0xce, 0xc6, 0xe0, 0x78, 0x0c, 0x70, 0xc3, 0x41, 0x80, 0x00, 0x9c, 0x1f, 0x8d, 0x71, 0xc3, 0x42, - 0x80, 0x00, 0xc8, 0x1f, 0xc3, 0x43, 0x80, 0x00, 0xc2, 0x1f, 0x04, 0xa1, 0x05, 0xa1, 0x06, 0xa1, - 0x02, 0xa9, 0x1c, 0xa9, 0x1d, 0xa9, 0x01, 0xa1, 0x02, 0xa1, 0x03, 0xa1, 0x00, 0xb1, 0x10, 0xb1, - 0x11, 0xb1, 0x92, 0xb1, 0x1e, 0xa9, 0xc3, 0x41, 0x80, 0x00, 0xf6, 0x1f, 0x08, 0xa2, 0x09, 0xa2, - 0x0a, 0xa2, 0x04, 0xab, 0x1c, 0xaa, 0x09, 0xaa, 0x08, 0xaa, 0x06, 0xb2, 0x00, 0xa2, 0x01, 0xa2, - 0x05, 0xb2, 0x01, 0xb3, 0x0d, 0xb2, 0x0c, 0xb2, 0x0f, 0xaa, 0x10, 0xaa, 0x05, 0xa2, 0x04, 0xb1, - 0x05, 0xb1, 0x01, 0xa9, 0x01, 0xb1, 0x06, 0xa9, 0x00, 0xa9, 0x07, 0xa9, 0x8a, 0x20, 0x04, 0x0b, - 0x02, 0xb1, 0x8a, 0x20, 0x16, 0x08, 0x85, 0xab, 0x9e, 0xaa, 0x80, 0xab, 0x8e, 0xaa, 0x2c, 0x1a, - 0x85, 0x00, 0x9d, 0xaa, 0xe0, 0x7f, 0x06, 0xb1, 0xee, 0xc2, 0xcb, 0x47, 0x80, 0x00, 0xb4, 0x1f, - 0x64, 0x97, 0xcd, 0x70, 0x64, 0x71, 0x64, 0xb7, 0x70, 0x7b, 0xc6, 0xaf, 0x8c, 0x23, 0x43, 0x82, - 0x8a, 0xf7, 0x85, 0x97, 0xa6, 0x97, 0x61, 0x6c, 0x65, 0xb7, 0x70, 0x7b, 0x07, 0x0d, 0xc5, 0x10, - 0x85, 0xb7, 0xc4, 0xb7, 0x05, 0x21, 0x03, 0x00, 0x45, 0x7b, 0x2f, 0x26, 0xc8, 0xf0, 0x15, 0xf2, - 0xc3, 0x43, 0x80, 0x00, 0x9c, 0x1f, 0x62, 0x8b, 0x1f, 0x0b, 0x90, 0x00, 0x84, 0xeb, 0x8a, 0x0a, - 0x00, 0x00, 0x0b, 0xf0, 0x6e, 0x8f, 0x09, 0xeb, 0x65, 0x8f, 0x15, 0x0b, 0x71, 0x00, 0x10, 0x43, - 0x50, 0x42, 0x20, 0x40, 0x0b, 0xf0, 0x6c, 0x70, 0x60, 0x40, 0xce, 0xc6, 0x84, 0xeb, 0x50, 0x43, - 0x30, 0x42, 0x05, 0xf0, 0x10, 0x43, 0x30, 0x42, 0x40, 0x40, 0x04, 0x17, 0xc1, 0x10, 0x29, 0x78, - 0x0e, 0x7d, 0x62, 0x40, 0x42, 0x41, 0xc6, 0x09, 0x60, 0x00, 0xa1, 0x42, 0x62, 0x40, 0x42, 0x41, - 0x66, 0x0b, 0x20, 0x00, 0xa1, 0x42, 0x62, 0x40, 0x42, 0x41, 0xa1, 0x42, 0x3a, 0x0d, 0x20, 0x00, - 0xb1, 0x41, 0x08, 0x97, 0x8c, 0x20, 0x1f, 0x84, 0x11, 0xf4, 0x12, 0x8f, 0x8f, 0xe8, 0x26, 0x97, - 0x05, 0x97, 0x8a, 0x22, 0xdf, 0x03, 0x13, 0x08, 0x61, 0x00, 0x48, 0xb7, 0x13, 0x8f, 0x0b, 0x08, - 0x51, 0x00, 0xc5, 0xa7, 0xc6, 0xa7, 0x06, 0x1f, 0x43, 0x10, 0x1c, 0x8f, 0x00, 0x17, 0x10, 0x10, - 0x98, 0xe8, 0xad, 0x70, 0x02, 0x40, 0x5a, 0x08, 0xef, 0x02, 0xa1, 0x41, 0x02, 0x40, 0x04, 0xf6, - 0x02, 0x35, 0x00, 0x14, 0xc3, 0x41, 0xd1, 0x38, 0x17, 0xb7, 0x46, 0x08, 0xef, 0x02, 0xbd, 0x8f, - 0x03, 0xf6, 0xb5, 0x70, 0x79, 0xf2, 0xc7, 0xd8, 0x1c, 0x1f, 0x43, 0x10, 0x0f, 0xb7, 0xd0, 0xb7, - 0xc3, 0x42, 0x80, 0x00, 0xd6, 0x1f, 0x2f, 0x3c, 0x43, 0x14, 0x26, 0x87, 0x02, 0x34, 0x00, 0x14, - 0x60, 0x8a, 0x00, 0x38, 0x80, 0x0f, 0x48, 0x43, 0x00, 0x00, 0x01, 0x30, 0x4d, 0x00, 0xa6, 0xa7, - 0x05, 0xeb, 0x01, 0x1a, 0x43, 0x00, 0xc0, 0xaa, 0x04, 0xf0, 0x01, 0x8a, 0x8f, 0x08, 0x10, 0x00, - 0x02, 0x8a, 0xc3, 0x41, 0x80, 0x00, 0xdc, 0x1f, 0x13, 0x08, 0x35, 0x05, 0x04, 0x71, 0x60, 0x81, - 0x02, 0xaa, 0x01, 0x34, 0xc0, 0x10, 0x00, 0xa1, 0x39, 0xf0, 0x00, 0x81, 0xc2, 0xaa, 0x00, 0x38, - 0x80, 0x0f, 0xa0, 0x41, 0x00, 0x00, 0x00, 0xa1, 0x02, 0x30, 0x00, 0x04, 0xc3, 0x41, 0x20, 0xc1, - 0x00, 0x00, 0x10, 0x40, 0xca, 0x0f, 0xaf, 0x02, 0xc1, 0xaa, 0x4c, 0xf6, 0x72, 0x0a, 0xaf, 0xfe, - 0x02, 0x40, 0xc3, 0x42, 0x33, 0x33, 0x33, 0x33, 0xc3, 0x43, 0xc3, 0x3f, 0x33, 0x33, 0x12, 0xf0, - 0xc3, 0x41, 0x20, 0x41, 0x00, 0x00, 0xaa, 0x0f, 0xaf, 0x02, 0x02, 0x40, 0xd7, 0xf6, 0x52, 0x0a, - 0xaf, 0xfe, 0x02, 0x40, 0xc3, 0x42, 0xae, 0x47, 0x7b, 0x14, 0xc3, 0x43, 0x84, 0x3f, 0xe1, 0x7a, - 0x23, 0x5b, 0x10, 0x40, 0xa1, 0x40, 0x3a, 0x0a, 0xaf, 0xfe, 0x28, 0x45, 0x02, 0x42, 0xa1, 0x43, - 0x22, 0x5b, 0xca, 0x0a, 0x8f, 0xfe, 0x08, 0x45, 0x06, 0xa7, 0x00, 0x35, 0x80, 0x1f, 0xf9, 0x3c, - 0xb1, 0xfc, 0xcb, 0x45, 0x34, 0x43, 0x00, 0x00, 0xa1, 0x41, 0x66, 0x0f, 0xaf, 0x02, 0x10, 0x40, - 0xca, 0x20, 0x49, 0x23, 0x9f, 0xbd, 0x02, 0x40, 0xa1, 0x41, 0x56, 0x0f, 0xaf, 0x02, 0x14, 0x1f, - 0x00, 0x14, 0x43, 0xf6, 0xa5, 0xa7, 0xcb, 0x45, 0x80, 0x00, 0xe0, 0x1f, 0x00, 0x95, 0x8c, 0x20, - 0x09, 0x86, 0x8d, 0xf7, 0x13, 0x8f, 0x8a, 0x21, 0xc9, 0x05, 0x20, 0xb5, 0xd2, 0xaf, 0x0f, 0x08, - 0x71, 0x00, 0x06, 0x1f, 0x43, 0x10, 0xc5, 0xa7, 0xc6, 0xa7, 0x62, 0x40, 0x42, 0x41, 0xae, 0x0b, - 0xef, 0xff, 0x22, 0x42, 0x01, 0x95, 0x11, 0x08, 0x74, 0x0f, 0x04, 0x77, 0x01, 0xb5, 0xd2, 0xaf, - 0x0c, 0x70, 0x0d, 0xf0, 0xc3, 0x41, 0x16, 0x40, 0x66, 0x66, 0x06, 0x0f, 0xaf, 0x02, 0x05, 0x87, - 0x43, 0xf6, 0x0c, 0x72, 0x02, 0xf0, 0x0c, 0x71, 0x12, 0xaf, 0x24, 0x8d, 0x11, 0x09, 0x71, 0x00, - 0x6c, 0x70, 0x8d, 0x70, 0x8c, 0xe8, 0x8d, 0x71, 0xc4, 0xad, 0x0a, 0xf0, 0x8d, 0x70, 0x88, 0xe9, - 0x0d, 0x08, 0x71, 0x00, 0x8d, 0x70, 0x04, 0x1d, 0x43, 0x10, 0x8d, 0x72, 0x16, 0x08, 0x20, 0x00, - 0x81, 0x40, 0x09, 0x6c, 0x14, 0x71, 0x04, 0xf7, 0x81, 0x43, 0x85, 0xad, 0xfd, 0x05, 0xcf, 0xff, - 0xc3, 0x41, 0x80, 0x00, 0xfc, 0x1f, 0x40, 0x89, 0x04, 0xea, 0x01, 0x19, 0x03, 0x00, 0x2b, 0xf0, - 0x0b, 0x08, 0x51, 0x00, 0x01, 0x19, 0x03, 0x00, 0x15, 0xf0, 0x0d, 0x08, 0x91, 0x00, 0x01, 0x19, - 0x43, 0x00, 0x04, 0xf0, 0x01, 0x89, 0x0f, 0xe8, 0x01, 0x91, 0x04, 0x71, 0x01, 0xb1, 0x10, 0x78, - 0x1b, 0x08, 0x81, 0x0f, 0x00, 0x00, 0xe0, 0x2e, 0x02, 0x91, 0x02, 0x19, 0x05, 0x00, 0x04, 0x71, - 0x03, 0xf0, 0x0c, 0x70, 0x01, 0xb1, 0x02, 0xb1, 0x02, 0xf0, 0x02, 0x91, 0x43, 0x91, 0x10, 0x78, - 0x50, 0x70, 0xe0, 0x7d, 0x02, 0x19, 0x05, 0x00, 0x04, 0x19, 0x05, 0x00, 0xe0, 0x7f, 0x00, 0x19, - 0x43, 0x00, 0xe0, 0x7e, 0xea, 0xc3, 0xa3, 0xc1, 0xcb, 0x45, 0x80, 0x00, 0x9c, 0x1f, 0x60, 0x95, - 0x48, 0x40, 0x20, 0x46, 0x08, 0x41, 0x51, 0x0b, 0x85, 0x0f, 0x00, 0x00, 0x70, 0x17, 0x01, 0x6b, - 0xc1, 0x85, 0x10, 0x79, 0x8c, 0x21, 0x03, 0x82, 0x42, 0x00, 0x26, 0x00, 0x00, 0xb5, 0x2f, 0x38, - 0x43, 0x02, 0xc3, 0x41, 0x48, 0x43, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x01, 0x30, 0x80, 0x03, - 0x42, 0x85, 0x01, 0xa5, 0x2f, 0x38, 0x83, 0x01, 0x00, 0x38, 0x40, 0x00, 0x01, 0x30, 0x80, 0x00, - 0x63, 0x85, 0x02, 0xa5, 0x2f, 0x38, 0x03, 0x02, 0x00, 0x38, 0x40, 0x00, 0x01, 0x30, 0xc0, 0x00, - 0x03, 0xa5, 0xca, 0xc7, 0x02, 0x1d, 0x83, 0x10, 0xca, 0xc7, 0xed, 0x70, 0x0a, 0xf4, 0x22, 0x85, - 0x03, 0x85, 0xc4, 0xa5, 0x25, 0xa5, 0x06, 0xa5, 0xe1, 0xa5, 0xe2, 0xa5, 0xe3, 0xa5, 0xca, 0xc7, - 0x10, 0x15, 0x0b, 0x10, 0x2f, 0x3a, 0x43, 0x02, 0x02, 0x32, 0xcb, 0x02, 0xc3, 0x42, 0x48, 0x43, - 0x00, 0x00, 0x05, 0x85, 0x00, 0x3b, 0x8b, 0x10, 0x01, 0x33, 0x8e, 0x13, 0x2f, 0x3b, 0x83, 0x11, - 0x22, 0x85, 0x02, 0x33, 0x00, 0x10, 0x86, 0x85, 0x00, 0x38, 0x80, 0x00, 0x01, 0x30, 0x41, 0x00, - 0x2f, 0x38, 0x03, 0x02, 0x63, 0x85, 0x02, 0x30, 0x00, 0x03, 0x00, 0x38, 0x80, 0x00, 0x01, 0x30, - 0xc0, 0x00, 0x40, 0xc6, 0x41, 0xc1, 0xc1, 0xa5, 0x22, 0xa5, 0x03, 0xa5, 0x42, 0xc0, 0x40, 0x24, - 0x11, 0x31, 0x0e, 0x70, 0x03, 0xf0, 0x04, 0x11, 0x0e, 0x24, 0xc1, 0x40, 0x82, 0x0d, 0xaf, 0x02, - 0x02, 0x41, 0xc1, 0x40, 0x03, 0xf6, 0x02, 0x30, 0x80, 0x23, 0xc3, 0x41, 0x23, 0x44, 0x0b, 0xd7, - 0x6e, 0x0d, 0x8f, 0x02, 0x05, 0xf6, 0xe5, 0x71, 0xdf, 0x0f, 0xd2, 0x90, 0x13, 0xf0, 0xc1, 0x40, - 0x5e, 0x0d, 0xaf, 0x02, 0x02, 0x41, 0x0c, 0x77, 0xca, 0x20, 0x69, 0x00, 0x1c, 0xad, 0x0c, 0x70, - 0xfd, 0xad, 0x02, 0x1d, 0x43, 0x10, 0x01, 0xa5, 0x02, 0xa5, 0x03, 0xa5, 0x04, 0xa5, 0x05, 0xa5, - 0x06, 0xa5, 0xca, 0xc7, 0xe6, 0xc2, 0xcb, 0x45, 0x80, 0x00, 0xac, 0x1f, 0x81, 0x85, 0xc0, 0x85, - 0x20, 0x43, 0x2f, 0x3b, 0xc3, 0x00, 0x2f, 0x38, 0x03, 0x00, 0x02, 0x30, 0x80, 0x03, 0x02, 0x33, - 0x03, 0x03, 0xe2, 0x85, 0x00, 0x33, 0xc3, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x30, 0xc3, 0x00, - 0x2f, 0x38, 0x83, 0x00, 0x02, 0x30, 0xc0, 0x03, 0x00, 0x30, 0x00, 0x00, 0xc3, 0x41, 0x49, 0x45, - 0x9c, 0x53, 0x01, 0x33, 0x00, 0x00, 0xfa, 0x0c, 0xaf, 0x02, 0xc7, 0x85, 0x57, 0xf6, 0xed, 0x70, - 0x9e, 0xbf, 0xc1, 0x40, 0xea, 0x0c, 0xaf, 0x02, 0xe1, 0x41, 0x51, 0xf6, 0x0c, 0x95, 0x5b, 0x95, - 0x04, 0x71, 0x0c, 0xb5, 0x44, 0x71, 0xf3, 0x79, 0xc1, 0x40, 0xd6, 0x0c, 0xaf, 0x02, 0x5b, 0xb5, - 0x4a, 0xf6, 0x1a, 0x95, 0x04, 0x71, 0x1a, 0xb5, 0xc6, 0xc6, 0x0c, 0x70, 0x0c, 0xb5, 0x1a, 0xb5, - 0x1b, 0xb5, 0xc6, 0xc6, 0x34, 0x1d, 0x05, 0x10, 0xc6, 0xc6, 0xe0, 0x78, 0xf0, 0xc3, 0xa4, 0xc1, - 0x2c, 0x7a, 0x70, 0x43, 0x08, 0x47, 0x5f, 0x0a, 0x72, 0x00, 0x50, 0x40, 0x6c, 0x24, 0x54, 0x01, - 0x40, 0x24, 0x12, 0x30, 0x2e, 0x70, 0x0a, 0x46, 0x49, 0x26, 0x0d, 0x13, 0x05, 0x25, 0x03, 0x15, - 0xe1, 0x42, 0x40, 0x24, 0x41, 0x30, 0x4a, 0x20, 0x00, 0x00, 0x17, 0x0d, 0x72, 0x10, 0x60, 0xc3, - 0x01, 0x12, 0x83, 0x04, 0x04, 0x71, 0xfd, 0x08, 0x62, 0x83, 0x01, 0x19, 0xd2, 0x00, 0x00, 0x25, - 0x81, 0x14, 0x13, 0x0e, 0x33, 0x13, 0xa1, 0x40, 0x04, 0x71, 0x01, 0x08, 0x32, 0x03, 0x01, 0x19, - 0x4a, 0x04, 0xf5, 0xd8, 0x80, 0xc1, 0x62, 0x42, 0x3d, 0x5b, 0xa2, 0x7e, 0xbd, 0x0e, 0x73, 0x90, - 0xbf, 0x67, 0x02, 0x40, 0xd0, 0xc7, 0xe0, 0x78, 0x05, 0xe8, 0x00, 0x18, 0x84, 0x0f, 0x00, 0x00, - 0xe4, 0x07, 0x06, 0xe9, 0x00, 0x19, 0x82, 0x0f, 0x00, 0x00, 0x02, 0x00, 0x05, 0xea, 0x00, 0x1a, - 0x82, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x06, 0xeb, 0x00, 0x1b, 0x82, 0x0f, 0x00, 0x00, 0x03, 0x00, - 0x0d, 0x0c, 0x10, 0x00, 0x00, 0x1c, 0x82, 0x0f, 0x00, 0x00, 0x35, 0x00, 0xb4, 0x70, 0xe0, 0x7c, - 0x00, 0x1d, 0x82, 0x0f, 0x00, 0x00, 0x17, 0x00, 0xe0, 0x7e, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, - 0xf6, 0x1f, 0xe0, 0x7f, 0x00, 0x88, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, 0xfc, 0x1f, 0xe0, 0x7f, - 0x00, 0x88, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, 0x9e, 0x1f, 0xe0, 0x7f, 0x00, 0x88, 0xe0, 0x78, - 0xc3, 0x40, 0x80, 0x00, 0xc7, 0x1f, 0xe0, 0x7f, 0x00, 0x88, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, - 0xe5, 0x1f, 0xe0, 0x7f, 0x00, 0x88, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, 0xc8, 0x1f, 0x00, 0x80, - 0x00, 0x30, 0x80, 0x0f, 0x7a, 0x44, 0x00, 0x00, 0xe0, 0x7e, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, - 0xac, 0x1f, 0xe0, 0x7f, 0x00, 0x80, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, 0xb0, 0x1f, 0xe0, 0x7f, - 0x00, 0x80, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, 0xb4, 0x1f, 0xe0, 0x7f, 0x00, 0x80, 0xe0, 0x78, - 0xc3, 0x40, 0x80, 0x00, 0xd0, 0x1f, 0xe0, 0x7f, 0x00, 0x88, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, - 0xc0, 0x1f, 0xe0, 0x7f, 0x00, 0x90, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, 0xb9, 0x1f, 0xe0, 0x7f, - 0x00, 0x88, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, 0xb8, 0x1f, 0x00, 0x10, 0xc0, 0x00, 0xe0, 0x7f, - 0x7f, 0x20, 0x00, 0x00, 0xf6, 0xc2, 0xcb, 0x46, 0x80, 0x00, 0xd4, 0x1f, 0x72, 0x8e, 0x48, 0x43, - 0x00, 0x42, 0xcb, 0x45, 0x80, 0x00, 0xd1, 0x1f, 0x74, 0x71, 0xaa, 0xf4, 0x85, 0x86, 0x07, 0x86, - 0xe6, 0x86, 0x60, 0x96, 0x5c, 0x64, 0xf9, 0x61, 0x61, 0x70, 0x85, 0xa6, 0x26, 0xa6, 0x07, 0xa6, - 0x8c, 0x23, 0xc3, 0x81, 0x03, 0xf7, 0x64, 0x71, 0x60, 0xb6, 0x70, 0x7a, 0x8c, 0x22, 0x03, 0x82, - 0x95, 0xf4, 0xcb, 0x47, 0x80, 0x00, 0x9c, 0x1f, 0x10, 0x17, 0x15, 0x10, 0x8e, 0x70, 0x2f, 0x38, - 0x03, 0x20, 0x2f, 0x3a, 0x43, 0x20, 0xa2, 0x40, 0x82, 0x41, 0x06, 0x0b, 0xaf, 0x02, 0x2f, 0x3e, - 0x03, 0x23, 0xc3, 0x42, 0x48, 0x43, 0x00, 0x00, 0xa2, 0x40, 0x04, 0xf6, 0x02, 0x34, 0x40, 0x25, - 0x14, 0x17, 0x11, 0x10, 0xc3, 0x41, 0xd1, 0x38, 0x17, 0xb7, 0x00, 0x38, 0x93, 0x20, 0x00, 0x3a, - 0x92, 0x20, 0x30, 0x40, 0xda, 0x0a, 0xaf, 0x02, 0x00, 0x3e, 0x96, 0x20, 0x5d, 0xf6, 0x22, 0x40, - 0xce, 0x0a, 0xaf, 0x02, 0x82, 0x41, 0x22, 0x40, 0x03, 0xf6, 0x02, 0x34, 0x40, 0x24, 0xc2, 0x0a, - 0xaf, 0x02, 0x02, 0x41, 0x51, 0xf6, 0x06, 0x87, 0x82, 0x41, 0xb6, 0x0a, 0xaf, 0x02, 0x10, 0x40, - 0x03, 0xf6, 0x02, 0x34, 0x10, 0x24, 0xc3, 0x41, 0xd1, 0x38, 0x17, 0xb7, 0xa2, 0x0a, 0xaf, 0x02, - 0x02, 0x40, 0x90, 0x00, 0x0b, 0x00, 0x4a, 0x0d, 0x6f, 0xfe, 0xa2, 0x40, 0xc3, 0x42, 0x99, 0x99, - 0x9a, 0x99, 0xc3, 0x43, 0xe9, 0x3f, 0x99, 0x99, 0x50, 0x40, 0x70, 0x44, 0x23, 0x5b, 0x10, 0x47, - 0xc2, 0x40, 0x2e, 0x0d, 0x6f, 0xfe, 0x30, 0x46, 0x50, 0x24, 0x43, 0x25, 0x02, 0x42, 0x70, 0x45, - 0x23, 0x5b, 0xe2, 0x42, 0xc2, 0x43, 0x22, 0x5b, 0xb2, 0x0d, 0x4f, 0xfe, 0x10, 0x46, 0x12, 0x0d, - 0x6f, 0xfe, 0x22, 0x40, 0x02, 0x42, 0x82, 0x43, 0x23, 0x5b, 0x10, 0x41, 0x42, 0x40, 0x02, 0x0d, - 0x6f, 0xfe, 0x30, 0x42, 0x02, 0x42, 0xa2, 0x43, 0x23, 0x5b, 0x22, 0x42, 0x42, 0x43, 0x22, 0x5b, - 0x8a, 0x0d, 0x4f, 0xfe, 0x26, 0x87, 0x10, 0x42, 0xe6, 0x0c, 0x6f, 0xfe, 0x20, 0x40, 0x02, 0x42, - 0x82, 0x43, 0x23, 0x5b, 0x10, 0x41, 0x62, 0x40, 0xd6, 0x0c, 0x6f, 0xfe, 0x30, 0x43, 0x02, 0x42, - 0xa2, 0x43, 0x23, 0x5b, 0x22, 0x42, 0x62, 0x43, 0x22, 0x5b, 0x62, 0x0d, 0x4f, 0xfe, 0x10, 0x43, - 0x0c, 0x70, 0x10, 0x1f, 0x80, 0x15, 0x14, 0x1f, 0x80, 0x14, 0x18, 0x1f, 0xc0, 0x14, 0x05, 0xa6, - 0x06, 0xa6, 0x07, 0xa6, 0x00, 0x1d, 0x43, 0x10, 0x00, 0xb6, 0xd6, 0xc6, 0x0c, 0x70, 0x00, 0xb6, - 0x00, 0xad, 0x05, 0xa6, 0x06, 0xa6, 0x07, 0xa6, 0xd6, 0xc6, 0xe0, 0x78, 0xc3, 0x40, 0x80, 0x00, - 0xd6, 0x1f, 0xe0, 0x7f, 0x00, 0x18, 0x43, 0x00, 0xc3, 0x42, 0x7f, 0x00, 0x00, 0xd4, 0xc3, 0x43, - 0x7f, 0x00, 0x04, 0xd4, 0x31, 0x06, 0xcf, 0x09, 0xc3, 0x42, 0x7f, 0x00, 0xe8, 0xd3, 0xc3, 0x43, - 0x7f, 0x00, 0xec, 0xd3, 0x21, 0x06, 0xcf, 0x09, 0xc3, 0x42, 0x7f, 0x00, 0xd4, 0xd3, 0xc3, 0x43, - 0x7f, 0x00, 0xdc, 0xd3, 0x11, 0x06, 0xcf, 0x09, 0xc3, 0x42, 0x7f, 0x00, 0xe4, 0xd3, 0xc3, 0x43, - 0x7f, 0x00, 0xe8, 0xd3, 0x01, 0x06, 0xcf, 0x09, 0xc3, 0x42, 0x7f, 0x00, 0xdc, 0xd3, 0xc3, 0x43, - 0x7f, 0x00, 0xe4, 0xd3, 0xf1, 0x05, 0xcf, 0x09, 0xc3, 0x42, 0x7f, 0x00, 0xec, 0xd3, 0xc3, 0x43, - 0x7f, 0x00, 0x00, 0xd4, 0xd1, 0x05, 0xcf, 0x09, 0xf1, 0xc0, 0xa1, 0xc1, 0x2c, 0x70, 0xc3, 0x42, - 0x7f, 0x00, 0x04, 0xd4, 0xc3, 0x43, 0x7f, 0x00, 0x08, 0xd4, 0x8c, 0x76, 0x7e, 0x0d, 0x6f, 0x0b, - 0x40, 0x24, 0x05, 0x30, 0x00, 0xc0, 0x87, 0x74, 0xd1, 0xc0, 0xe0, 0x7e, 0xc3, 0x42, 0x7f, 0x00, - 0x0c, 0xd4, 0xc3, 0x43, 0x7f, 0x00, 0x0c, 0xd4, 0x9d, 0x05, 0xcf, 0x09, 0xf1, 0xc0, 0xa1, 0xc1, - 0x0c, 0x70, 0x2c, 0x70, 0xc3, 0x42, 0x7f, 0x00, 0x08, 0xd4, 0xc3, 0x43, 0x7f, 0x00, 0x08, 0xd4, - 0x8c, 0x74, 0x4a, 0x0d, 0x6f, 0x0b, 0x40, 0x24, 0xc5, 0x30, 0x03, 0x14, 0x80, 0x30, 0x87, 0x74, - 0xd1, 0xc0, 0xe0, 0x7e, 0xc3, 0x42, 0x7f, 0x00, 0x0c, 0xd4, 0xc3, 0x43, 0x7f, 0x00, 0x0c, 0xd4, - 0x65, 0x05, 0xcf, 0x09, 0xc3, 0x42, 0x7f, 0x00, 0x0c, 0xd4, 0xc3, 0x43, 0x7f, 0x00, 0x0c, 0xd4, - 0x55, 0x05, 0xcf, 0x09, 0xc3, 0x42, 0x7f, 0x00, 0x04, 0xd4, 0x55, 0x05, 0xef, 0x09, 0x40, 0x43, - 0xe2, 0xc2, 0x40, 0x43, 0x39, 0x08, 0xf0, 0x00, 0x2c, 0x71, 0x69, 0x08, 0x91, 0x00, 0xa0, 0x8b, - 0x09, 0x6d, 0xb7, 0x08, 0x35, 0x01, 0x2c, 0x70, 0xc3, 0x42, 0x80, 0x00, 0xf4, 0x20, 0x80, 0x8a, - 0xc3, 0x40, 0x7f, 0x00, 0x10, 0xd4, 0x6c, 0x24, 0x4c, 0x10, 0xbc, 0x64, 0x00, 0x88, 0x8c, 0x70, - 0x5f, 0xd9, 0x6c, 0x71, 0x80, 0x45, 0x80, 0x24, 0xc3, 0x1f, 0x19, 0xf0, 0x60, 0x8b, 0xc3, 0x42, - 0x80, 0x00, 0xf4, 0x20, 0xc3, 0x40, 0x7f, 0x00, 0x0c, 0xd4, 0x11, 0x0b, 0x34, 0x04, 0x2c, 0x70, - 0x09, 0x0b, 0x34, 0x08, 0xbf, 0xe3, 0x16, 0xf7, 0x20, 0x8a, 0x04, 0x88, 0xc1, 0xb9, 0x8c, 0x70, - 0x15, 0x21, 0xcc, 0x00, 0x5f, 0xd9, 0x6c, 0x71, 0x80, 0x45, 0x80, 0xaa, 0x35, 0x5b, 0x2c, 0xf0, - 0x57, 0x08, 0x51, 0x00, 0x80, 0x8b, 0x2c, 0x70, 0x09, 0x6c, 0x0f, 0x78, 0x8c, 0x20, 0x83, 0x81, - 0x46, 0x00, 0x2d, 0x00, 0x8c, 0x70, 0xc3, 0x42, 0x80, 0x00, 0xf5, 0x20, 0x80, 0xaa, 0x80, 0x8b, - 0x00, 0x16, 0x80, 0x70, 0x7f, 0x00, 0x10, 0xd4, 0xa1, 0x6a, 0x60, 0xd9, 0x6c, 0x71, 0x80, 0x45, - 0xc3, 0x46, 0x80, 0x3f, 0x00, 0x00, 0x80, 0xad, 0x37, 0x5b, 0x00, 0x16, 0x80, 0x70, 0x7f, 0x00, - 0x10, 0xd4, 0x8c, 0x70, 0x61, 0xd9, 0x6c, 0x71, 0x80, 0x45, 0xa1, 0x42, 0xc3, 0x46, 0x80, 0x3f, - 0x00, 0x00, 0x37, 0x5b, 0x2c, 0x71, 0x20, 0x40, 0xc2, 0xc6, 0xe0, 0x78, 0xe2, 0xc2, 0xc3, 0x41, - 0x80, 0x00, 0x99, 0x7d, 0x1a, 0x08, 0xaf, 0x02, 0x08, 0x45, 0x50, 0xf6, 0x2c, 0x70, 0x12, 0x08, - 0xaf, 0x02, 0xa1, 0x40, 0x46, 0x00, 0x2c, 0x00, 0xa1, 0x40, 0x0e, 0x0c, 0x0f, 0x0d, 0x7f, 0xd9, - 0x17, 0xb9, 0x00, 0x39, 0x00, 0x00, 0x1a, 0xf0, 0x2f, 0x20, 0x41, 0x03, 0x00, 0x35, 0x82, 0x1f, - 0x00, 0x3f, 0x00, 0x00, 0x4a, 0x24, 0x00, 0x71, 0x0e, 0x20, 0x80, 0x0f, 0x37, 0x5f, 0x86, 0x5a, - 0xa8, 0x20, 0x00, 0x03, 0x00, 0x30, 0x01, 0x00, 0x00, 0x32, 0x41, 0x00, 0x02, 0x36, 0x41, 0x70, - 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, 0xc2, 0xc6, 0xc3, 0x40, 0xc0, 0x7f, 0x00, 0x00, - 0xc2, 0xc6, 0xe0, 0x78, 0xe2, 0xc0, 0x8d, 0x70, 0x15, 0xea, 0x60, 0x88, 0x2f, 0x7d, 0xb1, 0x73, - 0xca, 0x24, 0x01, 0x10, 0x0f, 0xf2, 0x1f, 0x0a, 0x70, 0x00, 0x40, 0x20, 0x41, 0x00, 0x44, 0x77, - 0x00, 0x89, 0x11, 0x08, 0x60, 0x03, 0x42, 0x22, 0x42, 0x80, 0x24, 0x71, 0xfa, 0xf5, 0x03, 0xf0, - 0x28, 0x44, 0x81, 0x40, 0xc2, 0xc4, 0xe0, 0x78, 0xe8, 0xc2, 0x30, 0x40, 0xba, 0xe8, 0xc3, 0x40, - 0x80, 0x00, 0x08, 0x21, 0xcb, 0x45, 0x80, 0x00, 0xf4, 0x20, 0x00, 0x88, 0x2c, 0x8d, 0x14, 0x70, - 0xc3, 0x40, 0x7f, 0x00, 0x58, 0xd3, 0x09, 0xf2, 0x6c, 0x21, 0x81, 0x00, 0x2c, 0xad, 0x2e, 0x8d, - 0x45, 0x21, 0xc1, 0x01, 0x08, 0xf0, 0x45, 0x21, 0xc1, 0x01, 0x2c, 0xad, 0x2e, 0x8d, 0x08, 0xe0, - 0x6c, 0x21, 0x81, 0x00, 0x4e, 0x0d, 0x20, 0x00, 0x2e, 0xad, 0x26, 0x5b, 0xcb, 0x47, 0x7f, 0x00, - 0x10, 0xd4, 0x7f, 0xde, 0x00, 0x8f, 0x8c, 0x70, 0x17, 0xbe, 0x40, 0x25, 0x02, 0x13, 0x50, 0xd9, - 0x6c, 0x71, 0x80, 0x45, 0xc1, 0x46, 0x37, 0x5b, 0x00, 0x8f, 0x8c, 0x70, 0x40, 0x25, 0x82, 0x13, - 0x52, 0xd9, 0x6c, 0x71, 0x80, 0x45, 0xc1, 0x46, 0x37, 0x5b, 0x22, 0x85, 0x60, 0x79, 0x02, 0x40, - 0xc8, 0xc6, 0xe0, 0x78, 0xe4, 0xc2, 0x14, 0x70, 0xca, 0x20, 0x61, 0x00, 0xc9, 0x69, 0x30, 0x70, - 0xca, 0x26, 0x0b, 0x10, 0x48, 0x45, 0x40, 0x40, 0x30, 0xd9, 0x0a, 0x0a, 0xef, 0x0b, 0xc1, 0x42, - 0xd8, 0x65, 0x00, 0x18, 0x03, 0x00, 0xc4, 0xc6, 0xe6, 0xc2, 0xcb, 0x45, 0x80, 0x00, 0xd0, 0x1f, - 0x60, 0x8d, 0x48, 0x43, 0x05, 0xeb, 0xc3, 0x42, 0xc9, 0x44, 0x9c, 0x53, 0x0b, 0xf0, 0x72, 0x95, - 0x2f, 0x3c, 0xc3, 0x10, 0xc3, 0x43, 0x03, 0x42, 0x6f, 0x12, 0x00, 0x34, 0xcc, 0x10, 0x00, 0x34, - 0xc2, 0x10, 0xc3, 0x43, 0x80, 0x00, 0x9c, 0x1f, 0x85, 0x83, 0xc4, 0x83, 0x2f, 0x38, 0x03, 0x00, - 0xe6, 0x83, 0x2f, 0x3b, 0x43, 0x00, 0x02, 0x33, 0x03, 0x03, 0x02, 0x30, 0x80, 0x03, 0x00, 0x33, - 0xc3, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x30, 0xc3, 0x00, 0x2f, 0x38, 0xc3, 0x02, 0x02, 0x30, - 0xc0, 0x03, 0x00, 0x30, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x86, 0x0e, 0x6f, 0x02, 0x40, 0x41, - 0x4d, 0xf6, 0x01, 0x95, 0x04, 0x71, 0x01, 0xb5, 0x10, 0x78, 0x8c, 0x20, 0x03, 0x82, 0x06, 0xf4, - 0xc7, 0xd8, 0x16, 0x1d, 0x43, 0x10, 0x01, 0xb5, 0xc6, 0xc6, 0x02, 0x1d, 0x05, 0x10, 0x16, 0x1d, - 0x03, 0x10, 0xc6, 0xc6, 0xea, 0xc2, 0x30, 0x41, 0x79, 0x23, 0x01, 0x00, 0xf0, 0x26, 0x41, 0x70, - 0x7f, 0x00, 0x68, 0xd2, 0x48, 0x45, 0x08, 0x47, 0xc3, 0xba, 0x22, 0x40, 0x60, 0x7f, 0x30, 0x40, - 0x8a, 0x26, 0xff, 0x1f, 0x04, 0x71, 0x0e, 0xe8, 0x17, 0x0d, 0x12, 0x14, 0x10, 0xda, 0x22, 0x40, - 0x60, 0x7f, 0x02, 0x41, 0x04, 0x71, 0x06, 0xe8, 0x70, 0xbd, 0xf5, 0x0d, 0x13, 0x94, 0xcd, 0x70, - 0xc1, 0x40, 0xca, 0xc6, 0xe6, 0xc3, 0xa1, 0xc1, 0x48, 0x45, 0xcb, 0x46, 0x7f, 0x00, 0x40, 0xd3, - 0xcb, 0x47, 0x7f, 0x00, 0x0c, 0xd4, 0xa6, 0xe9, 0x04, 0x8f, 0x50, 0xd9, 0x40, 0x24, 0xc2, 0x30, - 0x6c, 0x71, 0x31, 0x5b, 0x04, 0x8f, 0xbb, 0x7f, 0x03, 0x14, 0x8b, 0x30, 0x44, 0x25, 0x4c, 0x10, - 0x44, 0x27, 0x8f, 0x10, 0x85, 0x7f, 0x92, 0x6d, 0x44, 0x24, 0x0c, 0x11, 0x8c, 0x70, 0xe5, 0x7c, - 0x6c, 0x23, 0x8f, 0x10, 0xe5, 0x7c, 0x50, 0xd9, 0x40, 0x24, 0xc2, 0x30, 0xc3, 0x46, 0x80, 0x3f, - 0x00, 0x00, 0x6c, 0x71, 0x80, 0x45, 0x03, 0x1c, 0x02, 0x33, 0x37, 0x5b, 0x1c, 0x4e, 0x27, 0xf0, - 0x51, 0x09, 0x71, 0x00, 0x52, 0xd9, 0x04, 0x8f, 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, 0x31, 0x5b, - 0x04, 0x8f, 0xbb, 0x7f, 0x03, 0x14, 0x8b, 0x30, 0x44, 0x25, 0x4c, 0x10, 0x44, 0x27, 0x8f, 0x10, - 0x85, 0x7f, 0x92, 0x6d, 0x44, 0x24, 0x0c, 0x11, 0x8c, 0x70, 0xe5, 0x7c, 0x6c, 0x23, 0x8f, 0x10, - 0xe5, 0x7c, 0x52, 0xd9, 0x40, 0x24, 0xc2, 0x30, 0xc3, 0x46, 0x80, 0x3f, 0x00, 0x00, 0x6c, 0x71, - 0x80, 0x45, 0x03, 0x1c, 0x02, 0x33, 0x37, 0x5b, 0xc1, 0x40, 0x7a, 0x0b, 0x20, 0x00, 0xa1, 0x41, - 0xc6, 0xc7, 0xe0, 0x78, 0xf1, 0xc0, 0x26, 0x5b, 0xd1, 0xc0, 0xe0, 0x7f, 0x0c, 0x70, 0xe0, 0x78, - 0xe2, 0xc2, 0xcb, 0x45, 0x7f, 0x00, 0x92, 0xd4, 0x00, 0x15, 0xc0, 0x10, 0x13, 0x08, 0x32, 0x00, - 0x2c, 0x71, 0x36, 0x0f, 0xef, 0xff, 0x4c, 0x71, 0x00, 0x8d, 0x87, 0xb8, 0x00, 0xad, 0xc3, 0x40, - 0x7f, 0x00, 0x68, 0xd3, 0x3e, 0x0b, 0x00, 0x00, 0x0c, 0x70, 0xc2, 0xc6, 0xe0, 0x7f, 0x0c, 0x71, - 0xc3, 0x40, 0x80, 0x00, 0x04, 0x21, 0xe0, 0x7f, 0x00, 0x80, 0xe0, 0x78, 0xe4, 0xc2, 0xc3, 0x45, - 0x7f, 0x00, 0x0c, 0xd4, 0x86, 0x15, 0xc1, 0x00, 0x2d, 0x09, 0x33, 0x00, 0x6c, 0x73, 0xc3, 0x41, - 0x80, 0x00, 0x08, 0x21, 0x04, 0x15, 0x8e, 0x00, 0xa0, 0x89, 0xcb, 0x44, 0x80, 0x00, 0xf4, 0x20, - 0x02, 0xa4, 0x50, 0xd9, 0xc3, 0x44, 0x7f, 0x00, 0x98, 0xc3, 0x40, 0x24, 0x02, 0x13, 0xc1, 0x40, - 0xa4, 0xac, 0x32, 0x5b, 0xc4, 0xc6, 0xe0, 0x78, 0x7f, 0xd8, 0xe0, 0x7f, 0x17, 0xb8, 0xe0, 0x78, - 0x7f, 0xd8, 0xe0, 0x7f, 0x17, 0xb8, 0xe0, 0x78, 0xe6, 0xc3, 0xa1, 0xc1, 0xcb, 0x45, 0x7f, 0x00, - 0x10, 0xd4, 0x80, 0x8d, 0x08, 0x47, 0x2c, 0x70, 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, 0x81, 0x40, - 0x31, 0x5b, 0x22, 0xde, 0xa9, 0xe8, 0x03, 0x14, 0x80, 0x30, 0x21, 0xde, 0x6c, 0x20, 0xc0, 0x00, - 0x8c, 0x20, 0x03, 0x84, 0x21, 0xf4, 0x56, 0x0c, 0x6f, 0x07, 0x00, 0x8d, 0x9d, 0xe8, 0x00, 0x8d, - 0x54, 0xd9, 0x40, 0x24, 0xc2, 0x30, 0x6c, 0x71, 0x03, 0x1c, 0x43, 0x30, 0x33, 0x5b, 0x0c, 0x71, - 0x25, 0x5b, 0xe2, 0x0c, 0x6f, 0xff, 0x00, 0x8d, 0x0c, 0x70, 0x3a, 0x08, 0x20, 0x00, 0xe1, 0x41, - 0x0b, 0xd8, 0xc3, 0x41, 0x7f, 0x00, 0x30, 0xc2, 0x3a, 0x5b, 0xc3, 0x40, 0x80, 0x00, 0xf8, 0x20, - 0xcd, 0x70, 0x00, 0x18, 0x43, 0x00, 0xc1, 0x40, 0xc6, 0xc7, 0xe0, 0x78, 0xf1, 0xc0, 0x0c, 0x70, - 0xc3, 0x41, 0x7f, 0x00, 0x0c, 0xd4, 0x42, 0x5b, 0xd1, 0xc0, 0xe0, 0x7f, 0x0c, 0x71, 0xe0, 0x78, - 0xec, 0xc2, 0x08, 0x45, 0x27, 0x5b, 0x08, 0x47, 0x2a, 0x5b, 0x08, 0x46, 0x0c, 0x71, 0xc1, 0x41, - 0xe1, 0x42, 0x29, 0x5b, 0x10, 0x40, 0x12, 0xd8, 0xc1, 0x41, 0xe1, 0x42, 0x29, 0x5b, 0x10, 0x42, - 0x13, 0xd8, 0xc1, 0x41, 0xe1, 0x42, 0x29, 0x5b, 0x10, 0x41, 0x11, 0xd8, 0xc1, 0x41, 0xe1, 0x42, - 0x29, 0x5b, 0x08, 0x46, 0x8c, 0x25, 0xc3, 0x9f, 0xcc, 0x25, 0x82, 0x9f, 0x00, 0x00, 0x80, 0x00, - 0x21, 0xf2, 0x71, 0x0d, 0xb5, 0x10, 0x02, 0x40, 0x56, 0x09, 0x4f, 0x07, 0x14, 0xe8, 0x52, 0x09, - 0x6f, 0x07, 0x42, 0x40, 0x10, 0xe8, 0x4a, 0x09, 0x6f, 0x07, 0xc1, 0x40, 0x0c, 0xe8, 0x42, 0x09, - 0x6f, 0x07, 0x22, 0x40, 0x08, 0xe8, 0xc3, 0x40, 0x7f, 0x00, 0x10, 0xd4, 0x00, 0x88, 0x9e, 0x0a, - 0x6f, 0xff, 0x2c, 0x70, 0xc3, 0x41, 0x7f, 0x00, 0x92, 0xd4, 0x00, 0x89, 0xc6, 0xb8, 0x00, 0xa9, - 0x0f, 0xf0, 0x20, 0x10, 0x01, 0x20, 0x60, 0x79, 0x02, 0x40, 0x8c, 0x20, 0xc3, 0x8f, 0x09, 0xf2, - 0xc3, 0x40, 0x7f, 0x00, 0x10, 0xd4, 0x00, 0x88, 0x72, 0x0a, 0x6f, 0xff, 0x80, 0xd9, 0xc3, 0x42, - 0x80, 0x00, 0x04, 0x21, 0x0c, 0x70, 0xc3, 0x41, 0x7f, 0x00, 0x0c, 0xd4, 0xa0, 0xa2, 0x41, 0x5b, - 0xc3, 0x40, 0x80, 0x00, 0x04, 0x21, 0x00, 0x80, 0xcc, 0xc6, 0xe0, 0x78, 0xf1, 0xc0, 0x0c, 0x70, - 0xc3, 0x41, 0x7f, 0x00, 0x0c, 0xd4, 0x43, 0x5b, 0x7f, 0xd8, 0xd1, 0xc0, 0xe0, 0x7f, 0x17, 0xb8, - 0x00, 0x16, 0x80, 0x70, 0x7f, 0x00, 0xc9, 0xda, 0xad, 0x03, 0xef, 0x0c, 0x79, 0x20, 0x00, 0x00, - 0xe0, 0x7f, 0x0c, 0x70, 0xe2, 0xc2, 0x40, 0x8a, 0x6c, 0x70, 0x0e, 0xea, 0x1b, 0x08, 0x71, 0x00, - 0xad, 0x71, 0xc3, 0x41, 0x80, 0x00, 0x04, 0x20, 0x03, 0x11, 0xc0, 0x00, 0x42, 0xa9, 0x60, 0xa9, - 0x45, 0x5b, 0x03, 0xf0, 0xad, 0x70, 0xa1, 0x40, 0xc2, 0xc6, 0xe0, 0x78, 0x0f, 0x08, 0x91, 0x00, - 0xc3, 0x40, 0x80, 0x00, 0x04, 0x20, 0x00, 0x88, 0x00, 0xa9, 0xe0, 0x7f, 0x0c, 0x71, 0xe0, 0x78, - 0xe6, 0xc2, 0xaa, 0x20, 0x21, 0x0e, 0xcb, 0x45, 0x80, 0x00, 0x04, 0x20, 0x0f, 0x08, 0x9e, 0x00, - 0x05, 0x1d, 0x03, 0x10, 0x04, 0x1d, 0x03, 0x10, 0x3d, 0xf0, 0x04, 0x8d, 0xa3, 0xe8, 0x30, 0x5b, - 0x08, 0x46, 0x28, 0x5b, 0x00, 0x42, 0x1c, 0xd8, 0xc1, 0x41, 0x2f, 0x5b, 0x08, 0x46, 0x30, 0x5b, - 0x08, 0x47, 0x28, 0x5b, 0x00, 0x42, 0x1b, 0xd8, 0xe1, 0x41, 0x2f, 0x5b, 0x13, 0xe8, 0x2d, 0x88, - 0x91, 0xe9, 0x11, 0xee, 0x2d, 0x8e, 0x8f, 0xe9, 0x32, 0xd9, 0x49, 0x5b, 0xc8, 0xd9, 0xc1, 0x40, - 0x49, 0x5b, 0x26, 0x5b, 0xc3, 0x40, 0x7f, 0x00, 0x0c, 0xd3, 0xda, 0x08, 0x20, 0x00, 0x04, 0x1d, - 0x43, 0x10, 0x05, 0x8d, 0x97, 0xe8, 0x03, 0x15, 0xc0, 0x10, 0x47, 0x5b, 0x20, 0x8d, 0x91, 0xe9, - 0x52, 0x20, 0x3e, 0x80, 0x0d, 0xf2, 0xc3, 0x40, 0x7f, 0x00, 0x30, 0xd3, 0xb6, 0x08, 0x00, 0x00, - 0x03, 0x15, 0xc0, 0x10, 0x00, 0x1d, 0x43, 0x10, 0x01, 0x1d, 0x03, 0x10, 0x46, 0x5b, 0x05, 0x1d, - 0x43, 0x10, 0x0c, 0x70, 0xc6, 0xc6, 0xe0, 0x78, 0xe2, 0xc2, 0xcb, 0x45, 0x80, 0x00, 0x04, 0x20, - 0x0c, 0x70, 0x04, 0xad, 0x01, 0xad, 0xaa, 0x22, 0xe2, 0x03, 0x0e, 0xd8, 0xc3, 0x41, 0x7f, 0x00, - 0xb4, 0xc7, 0xa5, 0xba, 0xab, 0x22, 0xe2, 0x03, 0x3a, 0x5b, 0x0e, 0xd8, 0xc3, 0x41, 0x7f, 0x00, - 0xdc, 0xc7, 0x3b, 0x5b, 0x7f, 0xd8, 0x17, 0xb8, 0xc3, 0x41, 0x7f, 0x00, 0xc8, 0xc8, 0x4c, 0x70, - 0x48, 0x5b, 0x03, 0xad, 0x0c, 0x70, 0xc2, 0xc6, 0xe2, 0xc2, 0xcb, 0x45, 0x80, 0x00, 0x04, 0x20, - 0x00, 0x8d, 0x29, 0x08, 0x51, 0x00, 0x01, 0x8d, 0x22, 0x8d, 0x04, 0x71, 0x01, 0xad, 0x0f, 0x78, - 0x19, 0x09, 0x05, 0x00, 0xc3, 0x40, 0x7f, 0x00, 0x00, 0xd3, 0x3a, 0x08, 0x20, 0x00, 0x00, 0x1d, - 0x83, 0x10, 0x03, 0x15, 0xc0, 0x10, 0x45, 0x5b, 0xc2, 0xc6, 0xe0, 0x78, 0x00, 0x16, 0x80, 0x70, - 0x7f, 0x00, 0xc9, 0xda, 0x14, 0x70, 0xe0, 0x7d, 0x4d, 0x02, 0xef, 0x0c, 0x0c, 0x70, 0xe0, 0x78, - 0x28, 0x44, 0x00, 0x43, 0x2c, 0x71, 0x8c, 0x70, 0x55, 0x05, 0xaf, 0xff, 0x81, 0x40, 0xe0, 0x78, - 0xf1, 0xc0, 0xd6, 0x08, 0x8f, 0xfe, 0xe1, 0xc5, 0xa1, 0xc1, 0x08, 0x45, 0x84, 0xc0, 0x40, 0xc0, - 0x2e, 0x5b, 0x00, 0xc3, 0x00, 0x41, 0xc3, 0x40, 0x7f, 0x00, 0x10, 0xc9, 0x8e, 0x08, 0x2f, 0xff, - 0xa1, 0x42, 0x87, 0x74, 0xc1, 0xc5, 0xd1, 0xc0, 0xe0, 0x7f, 0xa8, 0xc0, 0xc3, 0x40, 0x80, 0x00, - 0x9c, 0x1f, 0x2c, 0x70, 0x31, 0xb0, 0xe0, 0x7f, 0x30, 0xb0, 0xe0, 0x78, 0x38, 0x60, 0xc3, 0x42, - 0x00, 0x00, 0xff, 0x7f, 0x13, 0x0a, 0x02, 0x00, 0xc3, 0x41, 0xff, 0xff, 0xff, 0x7f, 0x0b, 0x09, - 0x22, 0x00, 0x00, 0x42, 0x41, 0x69, 0xe0, 0x7f, 0x4e, 0x78, 0xe0, 0x78, 0xee, 0xc2, 0x30, 0x42, - 0x49, 0x79, 0xad, 0x70, 0x08, 0x46, 0x8d, 0xbd, 0xb8, 0x61, 0x21, 0x9e, 0x2e, 0xb8, 0x0e, 0x78, - 0xa8, 0x47, 0x0a, 0x23, 0x00, 0x21, 0x70, 0x40, 0xc6, 0x0f, 0xef, 0xff, 0x0a, 0x21, 0x80, 0x21, - 0x1e, 0x20, 0x81, 0x24, 0x40, 0x9e, 0xb9, 0x61, 0x2e, 0xb9, 0x10, 0x40, 0x2e, 0x79, 0xb2, 0x0f, - 0xef, 0xff, 0x40, 0x40, 0x1a, 0x20, 0xc1, 0x23, 0xb9, 0x61, 0x2e, 0xb9, 0xa2, 0x0f, 0xef, 0xff, - 0x2e, 0x79, 0x1e, 0x23, 0x81, 0x24, 0x1a, 0x20, 0x43, 0x24, 0xb9, 0x61, 0x2e, 0xb9, 0x2e, 0x7a, - 0xb9, 0x63, 0x2e, 0xb9, 0x01, 0xb6, 0x2e, 0x79, 0x86, 0x0f, 0xef, 0xff, 0x40, 0x40, 0x00, 0xb6, - 0x02, 0x40, 0xce, 0xc6, 0xe2, 0xc0, 0xa0, 0x98, 0xcb, 0x44, 0x00, 0x00, 0xff, 0x7f, 0x33, 0x4c, - 0x6c, 0x7a, 0xa9, 0x79, 0x59, 0x61, 0x04, 0x29, 0x01, 0x03, 0x20, 0xb0, 0xc2, 0xc4, 0xe0, 0x78, - 0xc3, 0x41, 0x80, 0x00, 0xf6, 0x1f, 0xe0, 0x7f, 0x00, 0xa9, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, - 0xfa, 0x1f, 0xe0, 0x7f, 0x00, 0xb1, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, 0xc2, 0x1f, 0xe0, 0x7f, - 0x00, 0xa9, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, 0xfc, 0x1f, 0xe0, 0x7f, 0x00, 0xa9, 0xe0, 0x78, - 0xc3, 0x41, 0x80, 0x00, 0x02, 0x20, 0xe0, 0x7f, 0x00, 0xb1, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, - 0x9e, 0x1f, 0xe0, 0x7f, 0x00, 0xa9, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, 0xc7, 0x1f, 0xe0, 0x7f, - 0x00, 0xa9, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, 0x9c, 0x1f, 0x0b, 0xa1, 0x00, 0x30, 0x80, 0x0f, - 0x03, 0x42, 0x6f, 0x12, 0xe0, 0x7f, 0x0c, 0xa1, 0x1f, 0x20, 0x01, 0x00, 0xc3, 0x40, 0x80, 0x00, - 0xf4, 0x1f, 0xe0, 0x7f, 0x20, 0xb0, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, 0xac, 0x1f, 0xe0, 0x7f, - 0x00, 0xa1, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, 0xb0, 0x1f, 0xe0, 0x7f, 0x00, 0xa1, 0xe0, 0x78, - 0x00, 0x38, 0x81, 0x0f, 0x20, 0x41, 0x00, 0x00, 0xc3, 0x40, 0x80, 0x00, 0xb4, 0x1f, 0xe0, 0x7f, - 0x20, 0xa0, 0xe0, 0x78, 0xc3, 0x41, 0x80, 0x00, 0xc0, 0x1f, 0xe0, 0x7f, 0x00, 0xb1, 0xe0, 0x78, - 0xc3, 0x41, 0x80, 0x00, 0xb9, 0x1f, 0xe0, 0x7f, 0x00, 0xa9, 0xe0, 0x78, 0x79, 0x20, 0x00, 0x00, - 0x1b, 0x78, 0x29, 0x68, 0xc3, 0x40, 0x80, 0x00, 0xb8, 0x1f, 0xe0, 0x7f, 0x20, 0xa8, 0xe0, 0x78, - 0xea, 0xc2, 0x04, 0x77, 0x48, 0x45, 0x8f, 0xe0, 0x14, 0x01, 0x2d, 0x00, 0x0f, 0x79, 0x25, 0x20, - 0x40, 0x00, 0x11, 0xf0, 0x32, 0xf0, 0x84, 0xf0, 0x82, 0xf0, 0x41, 0xf0, 0x80, 0xf0, 0x49, 0xf0, - 0x4e, 0xf0, 0x52, 0xf0, 0x53, 0xf0, 0x7c, 0xf0, 0x55, 0xf0, 0x7a, 0xf0, 0x5a, 0xf0, 0x61, 0xf0, - 0x6b, 0xf0, 0x01, 0x8d, 0x20, 0x8d, 0x08, 0xb8, 0x25, 0x78, 0xcb, 0x46, 0xff, 0xff, 0x00, 0x80, - 0xd8, 0x60, 0x04, 0x15, 0x91, 0x10, 0x05, 0x15, 0x90, 0x10, 0xe2, 0x8d, 0x2f, 0x38, 0x03, 0x00, - 0x72, 0x0f, 0xef, 0xff, 0xa3, 0x8d, 0x08, 0xbd, 0xe5, 0x7d, 0xd8, 0x65, 0x5a, 0x0f, 0xef, 0xff, - 0x2f, 0x38, 0x03, 0x00, 0x40, 0x28, 0x10, 0x22, 0x05, 0x21, 0x11, 0x24, 0x22, 0x76, 0x3e, 0x0f, - 0xef, 0xff, 0x2f, 0x38, 0x83, 0x03, 0x54, 0xf0, 0x01, 0x8d, 0x20, 0x8d, 0x42, 0x8d, 0x63, 0x8d, - 0x08, 0xb8, 0x25, 0x78, 0x40, 0x2a, 0x01, 0x04, 0x05, 0x79, 0x40, 0x2b, 0x00, 0x06, 0x25, 0x78, - 0xf6, 0x0e, 0xef, 0xff, 0x2f, 0x38, 0x03, 0x00, 0x42, 0xf0, 0x4a, 0x0f, 0xef, 0xff, 0x00, 0x8d, - 0x4e, 0x0f, 0xef, 0xff, 0x01, 0x8d, 0xca, 0x0e, 0xef, 0xff, 0x02, 0x8d, 0x38, 0xf0, 0x01, 0x8d, - 0x20, 0x8d, 0x08, 0xb8, 0x22, 0x0f, 0xef, 0xff, 0x25, 0x78, 0x32, 0xf0, 0x8e, 0x0e, 0xef, 0xff, - 0x00, 0x8d, 0x2e, 0xf0, 0xaa, 0x0d, 0x8f, 0xff, 0x2a, 0xf0, 0xd2, 0x0e, 0xef, 0xff, 0x00, 0x8d, - 0x26, 0xf0, 0x01, 0x8d, 0x20, 0x8d, 0x08, 0xb8, 0x66, 0x0e, 0xef, 0xff, 0x25, 0x78, 0x20, 0xf0, - 0x01, 0x8d, 0x20, 0x8d, 0x08, 0xb8, 0x7e, 0x0e, 0xef, 0xff, 0x25, 0x78, 0x18, 0xf0, 0x00, 0x8d, - 0xc3, 0x41, 0x80, 0x00, 0x99, 0x1f, 0x1b, 0x08, 0x91, 0x00, 0x0c, 0x70, 0x5a, 0x0e, 0xef, 0xff, - 0x01, 0x19, 0x03, 0x00, 0x0c, 0xf0, 0x76, 0x0e, 0xef, 0xff, 0x00, 0x8d, 0x08, 0xf0, 0x11, 0x08, - 0x71, 0x00, 0x0c, 0x70, 0x1e, 0x0e, 0xef, 0xff, 0x00, 0x19, 0x03, 0x00, 0x0c, 0x71, 0xca, 0xc6, - 0xe4, 0xc2, 0x04, 0x77, 0x28, 0x45, 0xdd, 0x08, 0x75, 0x04, 0x0f, 0x79, 0x25, 0x20, 0x40, 0x00, - 0x11, 0xf0, 0x2f, 0xf0, 0x3b, 0xf0, 0x3e, 0xf0, 0x3f, 0xf0, 0x49, 0xf0, 0x4e, 0xf0, 0x62, 0xf0, - 0x60, 0xf0, 0x60, 0xf0, 0x50, 0xf0, 0x5e, 0xf0, 0x51, 0xf0, 0x5c, 0xf0, 0x5a, 0xf0, 0x52, 0xf0, - 0x53, 0xf0, 0x66, 0x0b, 0x8f, 0xff, 0x47, 0xde, 0x18, 0xbe, 0xfe, 0x0e, 0x2f, 0x02, 0x01, 0x30, - 0x80, 0x03, 0x00, 0xad, 0x28, 0xb8, 0x46, 0x0b, 0xaf, 0xff, 0x01, 0xad, 0xea, 0x0e, 0x2f, 0x02, - 0x01, 0x30, 0x80, 0x03, 0x02, 0xad, 0x28, 0xb8, 0x26, 0x0b, 0xaf, 0xff, 0x03, 0xad, 0xda, 0x0e, - 0x2f, 0x02, 0x01, 0x30, 0x80, 0x03, 0x04, 0xad, 0x28, 0xb8, 0x05, 0xad, 0x3a, 0xf0, 0xfe, 0x0a, - 0x8f, 0xff, 0x4a, 0x0e, 0x4f, 0x06, 0x41, 0x28, 0x01, 0x02, 0x00, 0xad, 0x21, 0xad, 0x41, 0x28, - 0x01, 0x04, 0x38, 0xb8, 0x22, 0xad, 0x03, 0xad, 0x2c, 0xf0, 0x1a, 0x0b, 0x8f, 0xff, 0x29, 0xf0, - 0xce, 0x0a, 0x8f, 0xff, 0x25, 0xf0, 0x26, 0x0b, 0x8f, 0xff, 0x2e, 0x0b, 0xaf, 0xff, 0x00, 0xad, - 0xa6, 0x0a, 0xaf, 0xff, 0x01, 0xad, 0x02, 0xad, 0x1c, 0xf0, 0x0c, 0x70, 0x03, 0xad, 0x02, 0xad, - 0x01, 0xad, 0x00, 0x1d, 0x43, 0x10, 0x16, 0xf0, 0xf6, 0x0a, 0x8f, 0xff, 0x00, 0xad, 0x28, 0xb8, - 0x01, 0xad, 0x10, 0xf0, 0x6a, 0x0a, 0x8f, 0xff, 0x0b, 0xf0, 0x72, 0x0a, 0x8f, 0xff, 0x09, 0xf0, - 0x82, 0x0a, 0x8f, 0xff, 0x05, 0xf0, 0xc3, 0x40, 0x80, 0x00, 0x9b, 0x1f, 0x00, 0x88, 0x00, 0xad, - 0x0c, 0x71, 0xc4, 0xc6, 0xe6, 0xc3, 0xa4, 0xc1, 0x08, 0x45, 0x2a, 0x5b, 0x08, 0x46, 0x27, 0x5b, - 0x00, 0x42, 0x10, 0xd8, 0xc1, 0x41, 0x29, 0x5b, 0x55, 0x80, 0x4a, 0x21, 0x00, 0x00, 0x80, 0xc3, - 0x04, 0x12, 0x00, 0x04, 0x24, 0x71, 0x2f, 0x38, 0x03, 0x00, 0x04, 0x1b, 0x10, 0x00, 0x2f, 0x78, - 0xf1, 0x08, 0xd4, 0x80, 0xa6, 0x0d, 0x6f, 0x06, 0x00, 0xc0, 0x01, 0xc1, 0x08, 0x46, 0x9e, 0x0d, - 0x6f, 0x06, 0x20, 0x40, 0x02, 0xc1, 0x08, 0x47, 0x92, 0x0d, 0x6f, 0x06, 0x20, 0x40, 0xce, 0x7b, - 0x0e, 0x7a, 0xee, 0x79, 0xd6, 0x0c, 0x6f, 0xff, 0x60, 0x40, 0xcb, 0x47, 0x80, 0x00, 0x99, 0x1f, - 0x20, 0x8f, 0x08, 0x46, 0x8d, 0xe9, 0xea, 0x09, 0x8f, 0xff, 0x17, 0x08, 0x71, 0x00, 0x83, 0xc1, - 0x00, 0x1f, 0x43, 0x10, 0x0c, 0x1c, 0xc1, 0x30, 0x49, 0x85, 0xa1, 0x40, 0x3e, 0x5b, 0x01, 0x8f, - 0x8d, 0xe8, 0xda, 0x09, 0x8f, 0xff, 0x17, 0x08, 0x71, 0x00, 0x83, 0xc1, 0x01, 0x1f, 0x43, 0x10, - 0x0c, 0x1c, 0x01, 0x31, 0x49, 0x85, 0xa1, 0x40, 0x3e, 0x5b, 0x09, 0x6e, 0x1b, 0x08, 0xb5, 0x00, - 0x83, 0xc1, 0x43, 0xc6, 0x49, 0x85, 0xa1, 0x40, 0x3e, 0x5b, 0xc3, 0x40, 0x7f, 0x00, 0xc8, 0xd2, - 0xa2, 0x0b, 0xef, 0xff, 0x03, 0xc1, 0x0c, 0x70, 0xc6, 0xc7, 0xe0, 0x78, 0xf1, 0xc0, 0xea, 0x0b, - 0x4f, 0xff, 0xc3, 0x40, 0x7f, 0x00, 0xd0, 0xd2, 0x8a, 0x0b, 0xcf, 0xff, 0x0d, 0xd8, 0xc3, 0x41, - 0x7f, 0x00, 0xd0, 0xca, 0x3a, 0x5b, 0x0d, 0xd8, 0xc3, 0x41, 0x7f, 0x00, 0xf0, 0xcb, 0x3b, 0x5b, - 0xc3, 0x41, 0x80, 0x00, 0x9b, 0x1f, 0x0c, 0x70, 0xd1, 0xc0, 0xe0, 0x7f, 0x00, 0x19, 0x03, 0x00, - 0xe0, 0x7f, 0x0c, 0x70, 0xf4, 0xc2, 0x08, 0x46, 0x40, 0x40, 0x00, 0x1d, 0x03, 0x00, 0x0a, 0x21, - 0x80, 0x21, 0x0a, 0x20, 0x40, 0x21, 0x0a, 0x25, 0x00, 0x21, 0x70, 0x46, 0x28, 0x47, 0xaa, 0x09, - 0x6f, 0xff, 0x00, 0x1e, 0xc3, 0x00, 0x10, 0x42, 0x2f, 0x26, 0x06, 0xf0, 0xc3, 0x40, 0x00, 0x00, - 0xff, 0x7f, 0x14, 0x16, 0x46, 0x11, 0x16, 0x16, 0x45, 0x11, 0x0e, 0x16, 0x44, 0x11, 0x68, 0x9e, - 0x49, 0x9e, 0xca, 0x22, 0x04, 0x20, 0x2f, 0x21, 0x86, 0x04, 0x76, 0x0b, 0xef, 0xff, 0x2e, 0x4f, - 0x2c, 0x96, 0x10, 0x43, 0x0e, 0xe9, 0x14, 0x16, 0x46, 0x11, 0x16, 0x16, 0x45, 0x11, 0x0e, 0x16, - 0x44, 0x11, 0x68, 0x9e, 0x49, 0x9e, 0x3a, 0x4f, 0x56, 0x0b, 0xef, 0xff, 0x62, 0x41, 0x10, 0x43, - 0x02, 0x97, 0x02, 0x20, 0xc0, 0x04, 0x1e, 0x09, 0x6f, 0xff, 0x0e, 0x78, 0x44, 0x28, 0x00, 0x08, - 0x25, 0x9e, 0x09, 0x78, 0x0e, 0x78, 0x44, 0x28, 0x80, 0x00, 0x0e, 0x7a, 0x9a, 0x0b, 0xef, 0xff, - 0x18, 0x4f, 0x32, 0x9e, 0x04, 0x9f, 0x73, 0x9e, 0x42, 0x9f, 0x09, 0x79, 0x18, 0x23, 0x80, 0x00, - 0x3f, 0x21, 0x00, 0x00, 0x21, 0x68, 0x00, 0x19, 0x42, 0x20, 0x17, 0x96, 0x1a, 0xe8, 0x2f, 0x20, - 0x88, 0x04, 0xc3, 0x70, 0x00, 0x00, 0x00, 0xf8, 0x0e, 0x78, 0x14, 0x70, 0xc6, 0xf6, 0x14, 0x17, - 0xc0, 0x10, 0x21, 0x08, 0x13, 0x00, 0x07, 0xf0, 0x4c, 0xf6, 0x14, 0x17, 0xc0, 0x10, 0x15, 0x08, - 0x52, 0x00, 0x29, 0x97, 0x13, 0x78, 0x24, 0x71, 0x29, 0xb7, 0x14, 0xaf, 0x00, 0x11, 0x81, 0x20, - 0x34, 0x72, 0x07, 0x9f, 0x40, 0x26, 0x03, 0x17, 0x40, 0x26, 0x82, 0x16, 0xca, 0x22, 0xc1, 0x00, - 0x2c, 0x71, 0xae, 0x0a, 0xef, 0xff, 0x00, 0x12, 0x14, 0x01, 0x07, 0xb7, 0x42, 0x9f, 0x21, 0x9e, - 0x26, 0x0b, 0xef, 0xff, 0xe1, 0x40, 0x42, 0x9f, 0x00, 0x9e, 0x20, 0x9f, 0x58, 0x60, 0x09, 0x09, - 0x03, 0x00, 0x00, 0xb7, 0x23, 0x9e, 0xa2, 0x6f, 0xa1, 0x40, 0x0e, 0x0b, 0xef, 0xff, 0xb1, 0x42, - 0x22, 0x9e, 0x02, 0x9f, 0x41, 0x9f, 0x31, 0x48, 0x0b, 0x09, 0xa3, 0x00, 0x04, 0x6f, 0x00, 0x1a, - 0x44, 0x20, 0x25, 0x9e, 0xf2, 0x0a, 0xef, 0xff, 0x62, 0x42, 0x00, 0x9f, 0xad, 0x70, 0x72, 0x70, - 0x0c, 0x70, 0x4e, 0xf6, 0x00, 0x1f, 0xc4, 0x14, 0x2b, 0x8f, 0xad, 0x70, 0x88, 0xe9, 0x27, 0x9f, - 0x0d, 0x0c, 0x63, 0x20, 0xad, 0x70, 0xad, 0x71, 0xab, 0xaf, 0x07, 0xb7, 0x00, 0x12, 0x41, 0x21, - 0x0b, 0x0b, 0x43, 0x20, 0x02, 0x1f, 0xc4, 0x14, 0x0b, 0xaf, 0x5f, 0x0e, 0x30, 0x20, 0x2c, 0x71, - 0x2e, 0x0a, 0xef, 0xff, 0x06, 0x9f, 0x2c, 0x71, 0x06, 0xb7, 0x00, 0x18, 0x42, 0x23, 0x28, 0xed, - 0x15, 0x96, 0x09, 0xe8, 0x56, 0x96, 0x23, 0x9f, 0x06, 0x9f, 0x4c, 0x79, 0x04, 0xb8, 0x3e, 0x20, - 0x41, 0x00, 0x17, 0x96, 0x6e, 0x70, 0x14, 0x70, 0x0c, 0x70, 0x06, 0xf2, 0x49, 0x97, 0x18, 0x96, - 0x3c, 0x20, 0x80, 0x00, 0x40, 0x27, 0x92, 0x12, 0x16, 0xe9, 0x96, 0xe8, 0x24, 0x96, 0x00, 0x12, - 0x80, 0x20, 0x3d, 0x08, 0x63, 0x00, 0xa1, 0x68, 0xaf, 0x78, 0x30, 0x70, 0x00, 0x1a, 0x42, 0x23, - 0xca, 0x25, 0x2b, 0x10, 0x2b, 0xf0, 0x00, 0x18, 0x42, 0x23, 0x60, 0xf0, 0x06, 0x9f, 0x40, 0x27, - 0x92, 0x12, 0x46, 0xf0, 0x0a, 0x1f, 0xc2, 0x14, 0x51, 0x96, 0x8a, 0x21, 0x06, 0x04, 0x54, 0x70, - 0x8a, 0x20, 0x0c, 0x08, 0xca, 0x20, 0x41, 0x00, 0x03, 0xb7, 0x33, 0xf0, 0x26, 0x97, 0x03, 0x97, - 0x04, 0xb9, 0x1b, 0x78, 0x22, 0x78, 0x9e, 0x0f, 0x2f, 0xff, 0x0e, 0x78, 0x30, 0x96, 0x66, 0x6f, - 0x0d, 0x08, 0x63, 0x00, 0xad, 0x71, 0xad, 0x72, 0x00, 0x18, 0x42, 0x23, 0x06, 0x97, 0x26, 0x9e, - 0x04, 0xb8, 0x0e, 0x7a, 0x12, 0x0a, 0xef, 0xff, 0x60, 0x40, 0x51, 0x96, 0x03, 0xea, 0xaf, 0x78, - 0x1b, 0x7d, 0x2f, 0x20, 0x47, 0x93, 0x15, 0xf2, 0xa6, 0x41, 0x8f, 0x97, 0x28, 0x16, 0x0b, 0x11, - 0x4a, 0x20, 0x00, 0x00, 0x61, 0x74, 0x41, 0x2c, 0x03, 0x12, 0x6f, 0x7b, 0x04, 0x71, 0x79, 0x61, - 0x0f, 0x7b, 0xf5, 0x0b, 0x24, 0x82, 0x8f, 0x7c, 0x8f, 0xb7, 0x00, 0x1d, 0x40, 0x20, 0x0c, 0x1f, - 0xc4, 0x14, 0x04, 0xea, 0x10, 0x1f, 0x43, 0x10, 0x0c, 0x70, 0x09, 0xb7, 0x2f, 0x96, 0x1f, 0x09, - 0x23, 0x00, 0x2c, 0x70, 0x2a, 0xaf, 0x11, 0x96, 0x8a, 0x22, 0x06, 0x04, 0x14, 0x70, 0x8a, 0x20, - 0x0c, 0x08, 0xca, 0x20, 0x81, 0x00, 0x03, 0xb7, 0x03, 0xf0, 0x00, 0x12, 0x81, 0x20, 0x04, 0x96, - 0x09, 0x09, 0x03, 0x00, 0x00, 0x19, 0x03, 0x20, 0x11, 0x96, 0x0f, 0xe8, 0x03, 0x9f, 0x44, 0x28, - 0x81, 0x00, 0x06, 0x9f, 0x04, 0xb8, 0x13, 0x08, 0x42, 0x00, 0x10, 0x8f, 0x05, 0xe8, 0x00, 0x18, - 0x43, 0x20, 0x10, 0x1f, 0x03, 0x10, 0xd4, 0xc6, 0x05, 0x00, 0x00, 0x00, 0xe2, 0xc0, 0x49, 0x98, - 0x6c, 0x70, 0x8e, 0xbb, 0x88, 0x98, 0x55, 0x4b, 0x4b, 0x98, 0x94, 0x4d, 0x52, 0x4c, 0x44, 0x2a, - 0x0c, 0x02, 0x23, 0xbb, 0x44, 0x2d, 0x02, 0x12, 0x8b, 0xb1, 0x4c, 0xb1, 0x8d, 0xb1, 0x4e, 0xb1, - 0xc3, 0x42, 0x00, 0x00, 0x33, 0x09, 0x40, 0xb1, 0x8a, 0x22, 0xdc, 0x0c, 0x41, 0xb1, 0x4c, 0x70, - 0x62, 0xb1, 0x0b, 0x19, 0x83, 0x00, 0x46, 0xb1, 0x47, 0xb1, 0x44, 0xb1, 0x4f, 0xb1, 0x11, 0x90, - 0x03, 0xe8, 0x10, 0x19, 0x03, 0x00, 0x14, 0x70, 0x8a, 0x22, 0x06, 0x04, 0x8a, 0x20, 0x0c, 0x08, - 0xca, 0x20, 0x81, 0x00, 0x0a, 0x19, 0x03, 0x00, 0x03, 0xb1, 0x14, 0x19, 0x43, 0x00, 0x12, 0x19, - 0x05, 0x00, 0xc2, 0xc4, 0xf1, 0xc0, 0xa1, 0xc1, 0x30, 0x80, 0x40, 0x91, 0x00, 0x1c, 0x84, 0x30, - 0x42, 0x81, 0x80, 0xc1, 0x3e, 0x5b, 0x87, 0x74, 0xd1, 0xc0, 0xe0, 0x7f, 0x0c, 0x70, 0xe0, 0x78, - 0xea, 0xc3, 0xa3, 0xc1, 0x40, 0x10, 0x10, 0x00, 0x08, 0x46, 0x2a, 0x5b, 0x08, 0x45, 0x27, 0x5b, - 0x00, 0x42, 0x0c, 0x71, 0xa1, 0x41, 0x29, 0x5b, 0x30, 0x80, 0xf5, 0x80, 0x60, 0x79, 0x08, 0x45, - 0x2a, 0x8d, 0x8d, 0x71, 0x6c, 0xb9, 0x38, 0x7c, 0x4c, 0x70, 0x80, 0xc3, 0x04, 0x17, 0x41, 0x15, - 0x44, 0x71, 0x0c, 0x79, 0x04, 0x29, 0x01, 0x03, 0x02, 0x1b, 0x54, 0x00, 0x4f, 0x79, 0xf1, 0x09, - 0xf4, 0x80, 0x40, 0x24, 0xc6, 0x32, 0xcb, 0x45, 0x80, 0x00, 0x82, 0x1f, 0x60, 0x8d, 0xe2, 0x6d, - 0x40, 0x25, 0x51, 0x10, 0xc3, 0x40, 0x80, 0x00, 0x50, 0x1f, 0xc3, 0x41, 0x80, 0x00, 0xc0, 0x22, - 0x80, 0xc2, 0xe1, 0x44, 0x72, 0x0c, 0xef, 0xff, 0x0a, 0x25, 0x40, 0x04, 0xc3, 0x41, 0x80, 0x00, - 0x90, 0x1f, 0x0b, 0x14, 0x82, 0x30, 0x08, 0x89, 0x09, 0x0a, 0x00, 0x00, 0x06, 0x1d, 0x43, 0x10, - 0x00, 0x87, 0x60, 0x81, 0x81, 0x81, 0x07, 0x7b, 0x48, 0xa9, 0x05, 0x23, 0x3e, 0x83, 0x05, 0xf4, - 0x00, 0x19, 0x03, 0x20, 0x0e, 0xf0, 0x04, 0x19, 0x01, 0x00, 0x00, 0xa1, 0x08, 0x1c, 0x04, 0x30, - 0x00, 0x19, 0x43, 0x20, 0x49, 0x86, 0x82, 0xc1, 0xc1, 0x40, 0x08, 0x18, 0x80, 0x20, 0x3e, 0x5b, - 0x0c, 0x70, 0xca, 0xc7, 0xe2, 0xc2, 0xcb, 0x45, 0x80, 0x00, 0x50, 0x1f, 0xc3, 0x42, 0x80, 0x00, - 0x24, 0x3b, 0xc3, 0x41, 0x80, 0x00, 0xc0, 0x22, 0xa1, 0x40, 0xb2, 0x0e, 0xef, 0xff, 0x00, 0x1a, - 0xc1, 0x0f, 0x0c, 0x70, 0x11, 0xa5, 0x10, 0xa5, 0xc3, 0x42, 0x80, 0x00, 0x98, 0x1f, 0x0c, 0xd8, - 0xc3, 0x41, 0x7f, 0x00, 0x10, 0xd2, 0x00, 0x1a, 0xc3, 0x00, 0x3a, 0x5b, 0x0c, 0x70, 0xc2, 0xc6, - 0xf1, 0xc0, 0x30, 0x80, 0x40, 0x81, 0x2c, 0x70, 0x3e, 0x5b, 0xd1, 0xc0, 0xe0, 0x7f, 0x0c, 0x70, - 0xf1, 0xc0, 0x00, 0x16, 0x81, 0x70, 0x80, 0x00, 0x83, 0x1f, 0x07, 0xe9, 0x49, 0x80, 0x70, 0x80, - 0x2c, 0x70, 0x40, 0xa3, 0x3e, 0x5b, 0xd1, 0xc0, 0xe0, 0x7f, 0x0c, 0x70, 0xe0, 0x7f, 0x0c, 0x70, - 0x14, 0x71, 0x0c, 0x70, 0xe0, 0x7d, 0x20, 0x8a, 0x34, 0x71, 0xe0, 0x7d, 0xc3, 0x41, 0x80, 0x00, - 0x50, 0x1f, 0x11, 0xa1, 0x0d, 0xa1, 0x10, 0xa1, 0xe0, 0x7f, 0x0c, 0x71, 0xe4, 0xc2, 0x28, 0x45, - 0x08, 0x46, 0x2c, 0x70, 0xc3, 0x42, 0xff, 0x7f, 0xff, 0xff, 0x2e, 0x09, 0xaf, 0xff, 0xa1, 0x40, - 0x4e, 0x25, 0x41, 0x10, 0x1a, 0x61, 0xa1, 0x41, 0x7a, 0x0a, 0x2f, 0x02, 0xc1, 0x40, 0xc1, 0x40, - 0xc4, 0xc6, 0x00, 0x00, 0x19, 0x00, 0x06, 0x00, 0x32, 0x00, 0x07, 0x00, 0x64, 0x00, 0x08, 0x00, - 0xc8, 0x00, 0x09, 0x00, 0x90, 0x01, 0x0a, 0x00, 0xac, 0xd3, 0x7f, 0x00, 0xc0, 0xd3, 0x7f, 0x00, - 0x65, 0x6e, 0x5f, 0x67, 0x79, 0x72, 0x6f, 0x00, 0x56, 0x69, 0x72, 0x74, 0x41, 0x6e, 0x79, 0x4e, - 0x6f, 0x4d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x79, 0x72, 0x6f, 0x00, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x79, 0x72, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x56, 0x69, 0x72, 0x74, - 0x41, 0x6e, 0x79, 0x4e, 0x6f, 0x4d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x64, 0x6f, 0x6f, 0x72, 0x20, 0x25, 0x64, 0x00, - 0x73, 0x6d, 0x61, 0x72, 0x74, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6d, - 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x25, 0x64, 0x00, - 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x56, 0x69, 0x72, 0x74, - 0x53, 0x6d, 0x61, 0x72, 0x74, 0x20, 0x56, 0x69, 0x72, 0x74, 0x41, 0x6e, 0x79, 0x4e, 0x6f, 0x4d, - 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x00, 0x00, 0x00, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, - 0x4e, 0x4f, 0x4d, 0x4f, 0x54, 0x49, 0x4f, 0x4e, 0x25, 0x64, 0x00, 0x00, 0x41, 0x4e, 0x59, 0x4d, - 0x4f, 0x54, 0x49, 0x4f, 0x4e, 0x25, 0x64, 0x00, 0x70, 0x68, 0x79, 0x5f, 0x61, 0x6e, 0x79, 0x00, - 0x70, 0x68, 0x79, 0x5f, 0x6e, 0x6f, 0x00, 0x00, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, - 0x6e, 0x00, 0x00, 0x00, 0x38, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x00, 0x53, 0x65, 0x74, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x25, 0x64, 0x00, 0x00, 0x31, 0x36, 0x30, 0x49, 0x52, 0x51, 0x5f, 0x61, - 0x6e, 0x79, 0x00, 0x00, 0x31, 0x36, 0x30, 0x49, 0x52, 0x51, 0x5f, 0x6e, 0x6f, 0x00, 0x00, 0x00, - 0x28, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x69, 0x2f, 0xe8, 0x03, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1d, 0x0a, 0x00, 0x00, 0x48, 0xc6, 0x7f, 0x00, 0xd0, 0xc6, 0x7f, 0x00, 0xf0, 0xc5, 0x7f, 0x00, - 0x8c, 0xc7, 0x7f, 0x00, 0x38, 0xc6, 0x7f, 0x00, 0xc0, 0xc5, 0x7f, 0x00, 0xb4, 0xc5, 0x7f, 0x00, - 0x40, 0xc6, 0x7f, 0x00, 0xfc, 0xc5, 0x7f, 0x00, 0xbc, 0xc6, 0x7f, 0x00, 0xec, 0xc5, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xc2, 0x75, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x08, 0xe8, 0x03, - 0x30, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0xd8, 0xbc, 0x60, 0x00, 0x78, 0xb5, 0x7f, 0x00, 0x50, 0xbc, 0x60, 0x00, 0x6c, 0xb6, 0x7f, 0x00, - 0x84, 0xbc, 0x60, 0x00, 0x08, 0xbc, 0x60, 0x00, 0xd4, 0xbb, 0x60, 0x00, 0x90, 0xbc, 0x60, 0x00, - 0x88, 0xb2, 0x7f, 0x00, 0x20, 0xbd, 0x60, 0x00, 0x44, 0xbc, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x3a, 0x80, 0x00, - 0x7c, 0xde, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x1e, 0x05, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x10, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x2f, 0xe8, 0x03, 0x31, 0x01, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0xb4, 0xb4, 0x60, 0x00, - 0x40, 0xb5, 0x60, 0x00, 0x2c, 0xb4, 0x60, 0x00, 0xa8, 0xb5, 0x60, 0x00, 0x60, 0xb4, 0x60, 0x00, - 0xbc, 0xb3, 0x60, 0x00, 0x88, 0xb3, 0x60, 0x00, 0x6c, 0xb4, 0x60, 0x00, 0x38, 0xb4, 0x60, 0x00, - 0xfc, 0xb4, 0x60, 0x00, 0x20, 0xb4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3a, 0x80, 0x00, 0x28, 0xe5, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0xe8, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0xe8, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x94, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xd1, 0x7f, 0x00, 0xe0, 0xd1, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0xd1, 0x7f, 0x00, 0xf0, 0xd0, 0x7f, 0x00, - 0xd4, 0xd0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x22, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, - 0x96, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8c, 0xcd, 0x7f, 0x00, 0xd4, 0xcc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x02, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd4, 0xb1, 0x7f, 0x00, 0x98, 0xb1, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc8, 0x7f, 0x00, - 0xf0, 0xc7, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x7d, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x20, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, - 0xe9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x34, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x58, 0x49, 0x61, 0x00, 0xe8, 0x48, 0x61, 0x00, 0xd8, 0x48, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xea, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xec, 0x27, 0x61, 0x00, 0x7c, 0x27, 0x61, 0x00, 0x6c, 0x27, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x9c, 0x60, 0x00, - 0xec, 0x9b, 0x60, 0x00, 0xd0, 0x9b, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x21, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xe4, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x7b, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x7c, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf6, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x9c, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x61, 0x00, - 0x34, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x7c, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x7c, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, - 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xd2, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x96, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0xcd, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0xc7, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0xff, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, - 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x35, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x7e, 0x61, 0x00, 0x1c, 0x7d, 0x61, 0x00, 0x98, 0x7d, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0xec, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x70, 0x61, 0x00, 0xf4, 0x6f, 0x61, 0x00, 0xe4, 0x6f, 0x61, 0x00, 0x7c, 0x70, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xc8, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xe9, 0x60, 0x00, - 0x98, 0xe4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xc8, 0x00, 0x00, - 0x03, 0x1d, 0x00, 0x00, 0xb0, 0x2d, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x03, 0x01, - 0x00, 0x09, 0x0c, 0x96, 0x00, 0x10, 0x3c, 0x00, 0x01, 0x00, 0x01, 0x00, 0xb0, 0x04, 0x52, 0x03, - 0x00, 0x00, 0x40, 0x41, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0xb4, - 0x73, 0x00, 0x00, 0x00, 0x82, 0x06, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0xb3, 0x3e, 0xcd, 0xcc, 0x0c, 0x3f, 0xcd, 0xcc, - 0x0c, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x00, - 0x09, 0x04, 0x02, 0x17, 0xb7, 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xbd, 0x37, 0x86, 0x35, 0xbd, 0x37, 0x86, 0x35, 0xbd, 0x37, 0x86, 0x35, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0xe8, 0x03, 0x05, 0x00, 0x2d, 0x00, 0x84, 0x03, 0xb0, - 0x04, 0x96, 0x00, 0x08, 0x96, 0x00, 0x0e, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0xb3, 0x3e, 0xcd, 0xcc, 0x0c, 0x3f, 0xcd, - 0xcc, 0x0c, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0x01, - 0x06, 0x04, 0x02, 0x00, 0x05, 0x00, 0x41, 0x01, 0x40, 0x01, 0x24, 0x00, 0x78, 0x00, 0x04, 0x01, - 0x14, 0x14, 0x02, 0x02, 0x00, 0x04, 0x00, 0x00, 0x80, 0x3f, 0xcd, 0xcc, 0xcc, 0x3d, 0x9a, 0x99, - 0x99, 0x3f, 0xcd, 0xcc, 0xcc, 0x3e, 0xcd, 0xcc, 0xcc, 0x3d, 0x01, 0x00, 0x14, 0x00, 0x10, 0x04, - 0x78, 0x00, 0x08, 0x00, 0x00, 0x05, 0x9a, 0x99, 0x19, 0x3f, 0x9a, 0x99, 0x19, 0x3f, 0x50, 0x00, - 0x09, 0x00, 0x1e, 0x00, 0xe8, 0x03, 0x50, 0x00, 0x41, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x80, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0xb5, 0xfe, 0x16, - 0x37, 0xb5, 0xfe, 0x16, 0x37, 0xb5, 0xfe, 0x16, 0x37, 0x8b, 0xde, 0xa9, 0x38, 0x00, 0x00, 0xe0, - 0x40, 0x0e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0xcc, 0x3d, 0x01, 0x09, 0x09, 0x03, 0x13, 0x32, - 0xa3, 0x04, 0xcd, 0x0c, 0x19, 0x28, 0x04, 0x0e, 0x00, 0x03, 0x9a, 0x99, 0x99, 0x3e, 0x9a, 0x99, - 0x99, 0x3e, 0xcd, 0xcc, 0xcc, 0x3e, 0x9a, 0x99, 0x19, 0x3f, 0x9a, 0x99, 0x99, 0x3e, 0x00, 0x00, - 0x80, 0x3e, 0x9a, 0x99, 0x99, 0x3e, 0xec, 0x51, 0xb8, 0x3e, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, - 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3e, 0xcd, 0xcc, - 0x4c, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e, 0x01, 0xc2, 0xb8, 0xb2, 0x3e, 0x35, - 0xfa, 0x8e, 0x3c, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x50, 0x77, 0x56, 0x3d, - 0x0e, 0x00, 0x00, 0x80, 0x3e, 0x8f, 0xc2, 0xf5, 0x3c, 0x0a, 0xd7, 0xa3, 0x3c, 0x64, 0x80, 0x34, - 0x2d, 0x46, 0x01, 0x0a, 0x00, 0x50, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x09, - 0x02, 0x00, 0x00, 0xc8, 0x41, 0x00, 0x00, 0x80, 0x42, 0x00, 0x00, 0x80, 0x41, 0x00, 0x00, 0xc0, - 0x3f, 0xcd, 0xcc, 0x4c, 0x3d, 0xc2, 0xb8, 0xb2, 0x3d, 0x32, 0x25, 0x3b, 0x18, 0x47, 0x00, 0x00, - 0xa0, 0x40, 0x9a, 0x99, 0x19, 0x3f, 0x0a, 0xd7, 0x23, 0x3c, 0x0a, 0xd7, 0x23, 0x3c, 0x02, 0x50, - 0x77, 0x56, 0x3d, 0x00, 0x01, 0xcd, 0xcc, 0x4c, 0x3f, 0x00, 0x00, 0x60, 0x40, 0x00, 0x00, 0x20, - 0x40, 0xcd, 0xcc, 0xcc, 0x3d, 0x04, 0x8f, 0xc2, 0xf5, 0x3c, 0x02, 0x01, 0x02, 0x03, 0x04, 0x01, - 0x0a, 0xb0, 0x04, 0x64, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x0a, 0xd7, 0x23, 0x3c, 0x01, 0x0a, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0xfa, 0x43, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0xa0, 0x3f, 0x00, 0x00, - 0x48, 0x42, 0x00, 0x00, 0x80, 0x3f, 0x9a, 0x99, 0x19, 0x3e, 0x9a, 0x99, 0x99, 0x3d, 0x00, 0x00, - 0x20, 0x42, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x96, 0x18, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x18, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x18, 0x4b, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, - 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xc5, - 0x27, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xc5, 0x27, 0x37, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xc5, 0x27, 0x37, 0x00, 0x24, 0x74, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x24, 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x03, 0x04, 0x19, 0x40, 0x12, 0x18, 0x00, 0x40, - 0x72, 0x08, 0x00, 0x0e, 0xb3, 0x80, 0x00, 0x00, 0x0e, 0x00, 0x01, 0x01, 0x01, 0x09, 0x0c, 0x88, - 0x13, 0x10, 0x01, 0x01, 0x71, 0x2a, 0x00, 0x00, 0xd4, 0xd3, 0x7f, 0x00, 0xdc, 0xd3, 0x7f, 0x00, - 0xdc, 0xd3, 0x7f, 0x00, 0xe4, 0xd3, 0x7f, 0x00, 0xe4, 0xd3, 0x7f, 0x00, 0xe8, 0xd3, 0x7f, 0x00, - 0xe8, 0xd3, 0x7f, 0x00, 0xec, 0xd3, 0x7f, 0x00, 0xec, 0xd3, 0x7f, 0x00, 0x00, 0xd4, 0x7f, 0x00, - 0x00, 0xd4, 0x7f, 0x00, 0x04, 0xd4, 0x7f, 0x00, 0x04, 0xd4, 0x7f, 0x00, 0x04, 0xd4, 0x7f, 0x00, - 0x04, 0xd4, 0x7f, 0x00, 0x08, 0xd4, 0x7f, 0x00, 0x08, 0xd4, 0x7f, 0x00, 0x08, 0xd4, 0x7f, 0x00, - 0x08, 0xd4, 0x7f, 0x00, 0x0c, 0xd4, 0x7f, 0x00, 0x0c, 0xd4, 0x7f, 0x00, 0x0c, 0xd4, 0x7f, 0x00, - 0x0c, 0xd4, 0x7f, 0x00, 0x0c, 0xd4, 0x7f, 0x00, 0x0c, 0xd4, 0x7f, 0x00, 0x0c, 0xd4, 0x7f, 0x00, - 0xab, 0x26, 0x0a, 0x74, 0x7f, 0x00, 0x98, 0x80, 0xe0, 0x7e, 0xe0, 0x78, 0xc3, 0x40, 0x7f, 0x00, - 0x00, 0x80, 0x6b, 0x20, 0x40, 0x09, 0xdb, 0x44, 0x80, 0x00, 0x40, 0x1f, 0xdb, 0x42, 0x80, 0x00, - 0x40, 0x20, 0x0a, 0x22, 0x80, 0x8f, 0x7f, 0x00, 0xa0, 0xe5, 0xe2, 0x20, 0x82, 0x00, 0x6f, 0x70, - 0x22, 0x20, 0x80, 0x0f, 0x7f, 0x00, 0xe0, 0xe5, 0xd9, 0x07, 0x0f, 0x01, 0x2c, 0xea, 0x7f, 0x00, - 0xf1, 0xc0, 0xc3, 0x40, 0x80, 0x00, 0xc0, 0x22, 0xc3, 0x41, 0x80, 0x00, 0x8c, 0x23, 0x12, 0x49, - 0x42, 0x08, 0xef, 0x0a, 0x2c, 0x70, 0x12, 0x08, 0x00, 0x00, 0x36, 0x0c, 0x00, 0x00, 0xd1, 0xc0, - 0xe0, 0x7e, 0xe0, 0x78, 0xe8, 0xc3, 0xa1, 0xc1, 0xc3, 0x40, 0x7f, 0x00, 0xb8, 0xed, 0x33, 0xe8, - 0xcb, 0x46, 0x7f, 0x00, 0xd4, 0xeb, 0x56, 0x0b, 0xaf, 0x0c, 0xc1, 0x40, 0xac, 0xe8, 0x03, 0x8e, - 0x0f, 0x08, 0xf4, 0x00, 0xe4, 0x6e, 0xa0, 0x87, 0x40, 0x26, 0x0f, 0x12, 0x10, 0xf0, 0xcb, 0x45, - 0x60, 0x00, 0xe8, 0x99, 0x19, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x02, 0x40, 0xc1, 0x41, 0x60, 0x7d, - 0x81, 0x42, 0x03, 0x6e, 0x6c, 0x20, 0x40, 0x00, 0x1f, 0x67, 0x08, 0xe7, 0xc1, 0x87, 0xd5, 0x70, - 0x1a, 0x00, 0x21, 0x00, 0x80, 0x87, 0x40, 0x27, 0x10, 0x12, 0x30, 0xf6, 0xd3, 0x7a, 0x2c, 0x70, - 0xd2, 0x0f, 0xaf, 0x0a, 0x81, 0x40, 0x0a, 0x47, 0xf2, 0xf1, 0x05, 0xec, 0x04, 0x6f, 0xe4, 0x68, - 0xee, 0xf1, 0x0c, 0x70, 0xc8, 0xc7, 0xe0, 0x78, 0x00, 0x41, 0x14, 0x70, 0x0c, 0x70, 0xe0, 0x7c, - 0xe0, 0x7f, 0x16, 0x81, 0xc3, 0x40, 0x7f, 0x00, 0xa4, 0xde, 0xe0, 0x7e, 0xe8, 0xc3, 0xa5, 0xc1, - 0x2a, 0x5b, 0x08, 0x47, 0x27, 0x5b, 0x08, 0x46, 0x0c, 0x71, 0xe1, 0x41, 0xc1, 0x42, 0x29, 0x5b, - 0x10, 0x40, 0x0e, 0xd8, 0xe1, 0x41, 0xc1, 0x42, 0x29, 0x5b, 0x08, 0x45, 0x10, 0xd8, 0xe1, 0x41, - 0xc1, 0x42, 0x29, 0x5b, 0x00, 0x42, 0x02, 0x40, 0xf0, 0xff, 0x00, 0x43, 0xa1, 0x40, 0xef, 0xff, - 0x08, 0x44, 0x40, 0x40, 0xed, 0xff, 0xcb, 0x46, 0x80, 0x00, 0xa0, 0x3b, 0x07, 0xed, 0x28, 0x8d, - 0x0b, 0x09, 0x11, 0x02, 0x00, 0x1e, 0x03, 0x10, 0x0d, 0xf0, 0xc3, 0x42, 0x80, 0x00, 0xe8, 0x3a, - 0x00, 0x16, 0x0d, 0x71, 0x80, 0x00, 0xea, 0x3a, 0x20, 0x92, 0x00, 0x1e, 0x43, 0x10, 0xa6, 0x79, - 0x20, 0xb2, 0x30, 0xd9, 0xab, 0x21, 0xa0, 0x0d, 0x0c, 0x1c, 0x80, 0x3f, 0x7f, 0x00, 0xa4, 0xde, - 0x40, 0xc3, 0x42, 0xc0, 0x80, 0xc0, 0x36, 0x0f, 0xef, 0x07, 0x41, 0xc4, 0x2f, 0x21, 0x07, 0x80, - 0xad, 0x71, 0x0f, 0xf2, 0x40, 0x29, 0x00, 0x06, 0xab, 0x20, 0x60, 0x0d, 0xad, 0x70, 0x5a, 0xd8, - 0xab, 0x25, 0x60, 0x1d, 0xab, 0x25, 0x60, 0x1d, 0xab, 0x21, 0x60, 0x0d, 0x3c, 0x5b, 0x04, 0xc0, - 0x25, 0x08, 0x84, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x0e, 0xed, 0x2f, 0x26, 0x07, 0xf0, 0x0c, 0xf2, - 0x0b, 0x20, 0x80, 0x8f, 0x00, 0x00, 0x00, 0xff, 0x06, 0xf2, 0x0b, 0x20, 0x80, 0x8f, 0xff, 0x00, - 0x00, 0x00, 0x04, 0xf4, 0x5b, 0xd8, 0x3c, 0x5b, 0x8e, 0x0a, 0xaf, 0x08, 0x0c, 0x70, 0x0c, 0x72, - 0xc3, 0x41, 0x7f, 0x00, 0x74, 0xb1, 0x3b, 0x5b, 0x0c, 0x72, 0xc3, 0x41, 0x60, 0x00, 0x64, 0x9d, - 0x3a, 0x5b, 0x0f, 0xd8, 0xc3, 0x41, 0x61, 0x00, 0x18, 0x0f, 0x3b, 0x5b, 0x0f, 0xd8, 0xc3, 0x41, - 0x61, 0x00, 0x48, 0x0e, 0x3a, 0x5b, 0x3f, 0xd8, 0xab, 0x20, 0xa0, 0x0d, 0xc8, 0xc7, 0xe0, 0x78, - 0xf2, 0xc2, 0x30, 0x44, 0x10, 0x43, 0x1b, 0xd9, 0x0c, 0x70, 0x70, 0x42, 0x50, 0x45, 0xab, 0x21, - 0xa0, 0x0d, 0x24, 0x5b, 0xc3, 0x40, 0x7f, 0x00, 0x0c, 0xd4, 0xc3, 0x41, 0x7f, 0x00, 0xb0, 0xd5, - 0x02, 0x79, 0xd3, 0x41, 0x7f, 0x00, 0xb0, 0xd5, 0xc3, 0x43, 0x7f, 0x00, 0x38, 0xdc, 0xd3, 0x40, - 0x7f, 0x00, 0x38, 0xdc, 0xc3, 0x42, 0x7f, 0x00, 0x4c, 0xde, 0x02, 0x23, 0x4e, 0x04, 0x02, 0x22, - 0x0d, 0x04, 0x84, 0x29, 0x02, 0x03, 0xcb, 0x47, 0x80, 0x00, 0x20, 0x21, 0x84, 0x2e, 0x01, 0x13, - 0x25, 0xaf, 0x2f, 0x79, 0x84, 0x2d, 0x01, 0x13, 0xc6, 0xaf, 0xd6, 0x09, 0xaf, 0x0b, 0xa7, 0xaf, - 0xcf, 0x79, 0x16, 0x0a, 0xaf, 0x0b, 0x22, 0x40, 0xaf, 0x79, 0x02, 0x0a, 0xaf, 0x0b, 0x02, 0x40, - 0xcb, 0x45, 0x7f, 0x00, 0x4c, 0xde, 0x12, 0x09, 0xaf, 0x0b, 0xa1, 0x40, 0xaa, 0x20, 0xe1, 0x04, - 0x82, 0x41, 0x05, 0x20, 0x82, 0x0f, 0xb0, 0x2d, 0x00, 0x00, 0x62, 0x40, 0x06, 0x0a, 0x6f, 0x0a, - 0xab, 0x22, 0xe1, 0x04, 0x2f, 0x21, 0x85, 0x04, 0xbe, 0x0a, 0x6f, 0x0c, 0xa2, 0x40, 0x66, 0x8f, - 0x27, 0x8f, 0xc3, 0x40, 0x80, 0x00, 0xb8, 0x22, 0x45, 0x8f, 0x00, 0x21, 0xc4, 0x00, 0x61, 0x80, - 0x20, 0x80, 0x66, 0x08, 0x20, 0x00, 0xa1, 0x40, 0x1d, 0xd9, 0x0c, 0x70, 0xab, 0x21, 0xa0, 0x0d, - 0x24, 0x5b, 0x0a, 0x08, 0x00, 0x00, 0xd2, 0xc6, 0xe4, 0xc2, 0xad, 0x70, 0xcb, 0x46, 0x7f, 0x00, - 0x38, 0xe5, 0x08, 0x16, 0x00, 0x14, 0xfc, 0x16, 0x01, 0x90, 0x02, 0x79, 0x22, 0xb9, 0x2f, 0x79, - 0x09, 0x09, 0x92, 0x00, 0x1a, 0x0f, 0x0f, 0x0a, 0xa5, 0x71, 0xeb, 0x0d, 0x54, 0x93, 0xc3, 0x42, - 0x7f, 0x00, 0x08, 0xd4, 0xc3, 0x43, 0x7f, 0x00, 0x0c, 0xd4, 0xee, 0x0e, 0x8f, 0x08, 0xc4, 0xc6, - 0xf1, 0xc0, 0x38, 0x5b, 0x14, 0x70, 0x0c, 0x71, 0x04, 0xf4, 0x25, 0xd8, 0x3c, 0x5b, 0x0c, 0x70, - 0xd1, 0xc0, 0xe0, 0x7e, 0xf0, 0xc2, 0x50, 0x40, 0x10, 0xda, 0xab, 0x22, 0xa0, 0x0d, 0x55, 0x88, - 0x97, 0x88, 0xcc, 0x88, 0x70, 0x44, 0x76, 0x88, 0x14, 0x88, 0x08, 0xba, 0x08, 0xbc, 0x45, 0x78, - 0x05, 0x24, 0xc2, 0x10, 0x10, 0xba, 0x30, 0x41, 0x0a, 0x23, 0x00, 0x21, 0xc3, 0x41, 0x00, 0x00, - 0xaa, 0x0a, 0xad, 0x70, 0x6d, 0x72, 0x4a, 0x24, 0x00, 0x72, 0xc3, 0xbe, 0x05, 0x7a, 0xa8, 0x20, - 0xc0, 0x05, 0x53, 0x22, 0x40, 0x00, 0x4f, 0x20, 0x43, 0x00, 0x15, 0x0b, 0xb1, 0x00, 0x00, 0x2b, - 0x43, 0x13, 0x66, 0x79, 0x14, 0x72, 0xcf, 0x21, 0x41, 0x03, 0x07, 0xf2, 0x0b, 0x08, 0x71, 0x00, - 0x00, 0x2b, 0x40, 0x13, 0x05, 0x79, 0x22, 0xba, 0xa5, 0x72, 0x52, 0x6e, 0x0c, 0x71, 0xdb, 0x7c, - 0x6c, 0x73, 0x00, 0x28, 0x82, 0x00, 0x00, 0x2b, 0x00, 0x03, 0x06, 0x79, 0xc1, 0x40, 0xab, 0x22, - 0xa1, 0x0d, 0xab, 0x21, 0xe2, 0x03, 0x39, 0x5b, 0xd5, 0x08, 0x30, 0x00, 0x1c, 0xd8, 0x4c, 0x72, - 0xab, 0x20, 0xd0, 0x02, 0x42, 0x20, 0xc1, 0x03, 0x04, 0x71, 0xf9, 0x09, 0x74, 0x84, 0xab, 0x22, - 0x88, 0x01, 0x4a, 0x24, 0x40, 0x71, 0x11, 0xd8, 0xa8, 0x20, 0xc0, 0x02, 0x40, 0x20, 0x02, 0x04, - 0x42, 0x20, 0x81, 0x03, 0x04, 0x71, 0xab, 0x22, 0xd0, 0x02, 0xab, 0x21, 0x88, 0x01, 0x8d, 0x70, - 0x4a, 0x24, 0x00, 0x73, 0x0c, 0x70, 0xed, 0x71, 0xa8, 0x20, 0x00, 0x02, 0xa8, 0x48, 0x04, 0x71, - 0xab, 0x21, 0xd0, 0x02, 0xab, 0x27, 0x88, 0x11, 0x4a, 0x23, 0x80, 0x16, 0x8a, 0x21, 0x10, 0x00, - 0x19, 0xde, 0x8a, 0x20, 0x08, 0x00, 0x8a, 0x22, 0x04, 0x00, 0x11, 0xdb, 0xad, 0x70, 0xd3, 0x42, - 0x00, 0x00, 0xff, 0xff, 0xab, 0x23, 0xd0, 0x12, 0xab, 0x24, 0x88, 0x11, 0xab, 0x21, 0xe1, 0x0c, - 0xab, 0x21, 0x62, 0x07, 0xab, 0x21, 0xa2, 0x06, 0xab, 0x26, 0xd0, 0x12, 0xab, 0x27, 0x88, 0x11, - 0xab, 0x20, 0xe2, 0x06, 0xab, 0x20, 0xe1, 0x0c, 0xab, 0x20, 0x62, 0x07, 0xab, 0x20, 0xa2, 0x06, - 0xab, 0x22, 0x62, 0x07, 0xab, 0x22, 0xa2, 0x06, 0x3d, 0x08, 0x30, 0x20, 0xab, 0x23, 0xa0, 0x0d, - 0x22, 0x42, 0x0c, 0x70, 0x23, 0x92, 0x65, 0x8a, 0x55, 0x22, 0xc2, 0x08, 0xc9, 0xb9, 0x44, 0x23, - 0x03, 0x04, 0x3c, 0x21, 0x8e, 0x04, 0x79, 0x21, 0x0f, 0x00, 0x24, 0xbb, 0xcb, 0x7f, 0x65, 0x78, - 0x85, 0x71, 0xe5, 0x0c, 0x24, 0x94, 0xca, 0x22, 0x42, 0x20, 0x07, 0xf0, 0xb0, 0xd8, 0x3c, 0x5b, - 0xad, 0x70, 0x13, 0xf0, 0x0c, 0x70, 0x7a, 0x0a, 0x4f, 0x0a, 0x3a, 0x0a, 0x6f, 0x0a, 0x42, 0x40, - 0x22, 0x40, 0x02, 0x41, 0x82, 0x42, 0x7e, 0x0e, 0xef, 0xff, 0x62, 0x43, 0x05, 0xe8, 0x12, 0xd8, - 0xad, 0x71, 0xab, 0x20, 0xa0, 0x0d, 0xa1, 0x40, 0xd0, 0xc6, 0xe0, 0x78, 0xe4, 0xc3, 0x82, 0x24, - 0x11, 0x39, 0x8a, 0x21, 0x0c, 0x08, 0x00, 0x24, 0x80, 0x3f, 0x00, 0x00, 0x44, 0x01, 0x80, 0xc2, - 0x38, 0x60, 0x0d, 0x0a, 0x25, 0x00, 0x40, 0xc2, 0x00, 0x42, 0x40, 0xc0, 0x81, 0xc0, 0x56, 0x20, - 0x00, 0x0a, 0x09, 0x0a, 0x05, 0x00, 0x40, 0xc0, 0xcb, 0x45, 0x80, 0x00, 0xbc, 0x11, 0xcb, 0x46, - 0x80, 0x00, 0x20, 0x21, 0xcb, 0x44, 0xa5, 0x5a, 0x6b, 0xb6, 0x00, 0x24, 0x80, 0x3f, 0x00, 0x00, - 0x44, 0x01, 0x28, 0xd9, 0x81, 0xc2, 0x10, 0xdb, 0xa0, 0xa6, 0x1a, 0x0d, 0xef, 0xff, 0x80, 0xa5, - 0x44, 0x6d, 0xc3, 0x41, 0x80, 0x00, 0x00, 0x00, 0xc3, 0x43, 0x7f, 0x00, 0x7c, 0xde, 0xc3, 0x44, - 0x80, 0x00, 0x00, 0x00, 0x4a, 0x0c, 0xaf, 0x0a, 0xa1, 0x40, 0x0c, 0x70, 0xc4, 0xc7, 0xe0, 0x78, - 0xf0, 0xc2, 0x70, 0x41, 0x50, 0x42, 0x30, 0x43, 0x10, 0x44, 0xab, 0x0b, 0x30, 0x00, 0xcd, 0x70, - 0x8a, 0x20, 0x01, 0x23, 0x1a, 0x26, 0x0f, 0x14, 0x42, 0x77, 0xe1, 0x40, 0x2b, 0x5b, 0x0d, 0x08, - 0x95, 0x00, 0x22, 0x1f, 0x83, 0x10, 0x0a, 0xf0, 0x11, 0x08, 0x34, 0x02, 0xc1, 0x40, 0x9a, 0x20, - 0x01, 0x03, 0x42, 0x70, 0x22, 0x18, 0xc3, 0x0f, 0x4c, 0xd8, 0xcc, 0x78, 0x42, 0x70, 0x35, 0x88, - 0xc1, 0xb9, 0x23, 0x09, 0x71, 0x00, 0xa4, 0x68, 0x01, 0x95, 0x1b, 0xe8, 0x2f, 0x38, 0x03, 0x00, - 0xc3, 0x41, 0x7f, 0x00, 0xa8, 0x8d, 0xe1, 0x42, 0x48, 0x5b, 0x2b, 0x08, 0x33, 0x00, 0x01, 0xad, - 0x23, 0xf0, 0xa1, 0x40, 0x82, 0x41, 0x62, 0x42, 0x42, 0x43, 0xa6, 0x08, 0x20, 0x00, 0x0a, 0x24, - 0x40, 0x04, 0x09, 0xe8, 0x00, 0x41, 0x00, 0x80, 0xfe, 0xe8, 0xe0, 0xa1, 0x03, 0xf0, 0x01, 0x1d, - 0xc3, 0x1f, 0xc9, 0x45, 0x9a, 0x25, 0x01, 0x13, 0x42, 0x75, 0x06, 0x85, 0x0d, 0xe8, 0x39, 0x8d, - 0xc1, 0xb9, 0x13, 0x09, 0xb1, 0x00, 0x0f, 0x78, 0x82, 0x41, 0x62, 0x42, 0x29, 0x5b, 0x06, 0xa5, - 0x03, 0xf0, 0x18, 0x1d, 0x01, 0x10, 0xc5, 0x71, 0xad, 0x70, 0x6d, 0x0e, 0x64, 0x94, 0xed, 0x70, - 0x05, 0xf0, 0xad, 0x70, 0xed, 0x70, 0x03, 0xf0, 0xa5, 0x71, 0x49, 0x0d, 0x65, 0x14, 0x4c, 0xde, - 0xac, 0x7e, 0x00, 0x22, 0x90, 0xa3, 0xfa, 0xf3, 0x02, 0x40, 0x2d, 0x5b, 0x76, 0xe8, 0x42, 0x76, - 0x15, 0x8e, 0xc1, 0xb8, 0xe5, 0x08, 0x70, 0x80, 0x02, 0x40, 0x2b, 0x5b, 0x08, 0x46, 0x02, 0x40, - 0x2d, 0x5b, 0x2b, 0x5b, 0xd5, 0x0e, 0x25, 0x90, 0xa1, 0x41, 0x9a, 0x21, 0x01, 0x03, 0x02, 0x40, - 0x00, 0x22, 0x4e, 0x20, 0x2d, 0x5b, 0x2b, 0x5b, 0xed, 0x71, 0x22, 0x1e, 0x02, 0x10, 0xde, 0xf1, - 0xf5, 0x70, 0xad, 0x70, 0xed, 0x70, 0xdb, 0xf5, 0x0c, 0x71, 0xd0, 0xc6, 0xe2, 0xc2, 0x08, 0x45, - 0x01, 0x88, 0xc1, 0xb8, 0x17, 0x08, 0xb0, 0x00, 0x80, 0x8d, 0x14, 0x71, 0x0c, 0x70, 0x09, 0xf7, - 0x81, 0x40, 0x60, 0x41, 0x80, 0x42, 0x2f, 0x5b, 0x03, 0xf0, 0x81, 0x40, 0x29, 0x5b, 0x00, 0xa5, - 0xc2, 0xc6, 0x00, 0x00, 0x49, 0x4e, 0x49, 0x03, 0xfc, 0x99, 0x60, 0x00, 0xd4, 0xd3, 0x7f, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x01, 0x30, 0x21, 0x80, 0x00, 0x78, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, - 0xdc, 0xd3, 0x7f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x21, 0x80, 0x00, 0x80, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xe4, 0xd3, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0xd3, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x90, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xec, 0xd3, 0x7f, 0x00, 0x15, 0x00, 0x00, 0x00, 0x01, 0x28, 0x21, 0x80, - 0x00, 0x38, 0x21, 0x80, 0x00, 0x70, 0x22, 0x80, 0x00, 0xa8, 0x22, 0x80, 0x00, 0xb0, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x68, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x04, 0xd4, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x98, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x08, 0xd4, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0xa0, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x80, 0x00, 0x32, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x0e, 0x01, 0x2d, 0x01, 0xd4, 0x7b, 0x3b, 0x01, 0xdb, 0x7a, 0x04, 0x00, 0x3f, 0x7b, 0xcd, 0x6c, - 0x00, 0x00, 0xc3, 0x04, 0x85, 0x09, 0xc3, 0x04, 0xec, 0xe6, 0x0c, 0x46, 0x00, 0x00, 0x27, 0x00, - 0x19, 0x00, 0x00, 0x80, 0x96, 0x00, 0xa0, 0x00, 0x01, 0x00, 0x0c, 0x00, 0xf0, 0x3c, 0x00, 0x01, - 0x01, 0x00, 0x03, 0x02, 0x0c, 0xee, 0x8f, 0x0e, 0x02, 0x04, 0x0e, 0x43, 0x07, 0x0f, 0xff, 0x07, - 0x09, 0x0f, 0x08, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x00, 0x00, 0xb4, - 0x0f, 0x6c, 0xff, 0x3f, 0x0f, 0x23, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x09, 0x10, - 0x04, 0x00, 0xe0, 0x05, 0x00, 0x47, 0x02, 0x02, 0x25, 0x09, 0x11, 0x0f, 0x0a, 0x0f, 0x10, 0x05, - 0x10, 0x06, 0x02, 0x07, 0xa4, 0xb8, 0x7f, 0x00, 0x0a, 0x15, 0xe2, 0x02, 0x08, 0x6c, 0x02, 0x08, - 0x01, 0x02, 0x08, 0x0c, 0xd5, 0x60, 0x00, 0x03, 0x18, 0xd0, 0xd4, 0x60, 0x02, 0x0e, 0x0f, 0x03, - 0x0f, 0x10, 0xff, 0x1f, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x05, 0x10, 0x80, 0xa5, - 0x60, 0x04, 0x00, 0x00, 0x68, 0x02, 0x04, 0x58, 0x5e, 0x61, 0x00, 0xa4, 0x37, 0x61, 0x00, 0xdc, - 0xa2, 0x60, 0x00, 0xc4, 0x10, 0x40, 0xa3, 0x60, 0x00, 0x40, 0x02, 0x04, 0xec, 0xaa, 0x60, 0x00, - 0x90, 0xa0, 0x60, 0x00, 0xa0, 0x02, 0x20, 0xf4, 0xc1, 0x42, 0x02, 0x0c, 0x30, 0x1c, 0x61, 0x00, - 0x3c, 0x02, 0x0c, 0x03, 0x3a, 0x05, 0x02, 0x05, 0x34, 0xd1, 0x60, 0x00, 0x03, 0x08, 0x08, 0x4a, - 0x25, 0xd3, 0x05, 0x08, 0x80, 0x06, 0x10, 0x9c, 0xd2, 0x05, 0x10, 0xac, 0x06, 0x10, 0x5c, 0x06, - 0x08, 0xc4, 0xd0, 0x05, 0x18, 0x8c, 0xe6, 0x12, 0x00, 0x7f, 0x34, 0x26, 0xfc, 0xc8, 0x15, 0x80, - 0xa0, 0xc7, 0x7f, 0x00, 0x0c, 0xd4, 0x7f, 0x00, 0xb0, 0xd5, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -#endif /*~ BHY_FW_D224DB1EB8B56338_H */ diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_PCB_7183_di03_BMI160-7183_di03.2.1.11696_170103.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_PCB_7183_di03_BMI160-7183_di03.2.1.11696_170103.h deleted file mode 100644 index 72623c6..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_PCB_7183_di03_BMI160-7183_di03.2.1.11696_170103.h +++ /dev/null @@ -1,788 +0,0 @@ -const unsigned char bhy1_fw[] = { - 0x2a, 0x65, 0x00, 0x1a, 0x20, 0xb7, 0x7c, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x24, 0x00, 0x00, 0x5c, 0x96, 0x7f, 0x00, 0xb8, 0x15, 0x00, 0x00, - 0x50, 0x8d, 0x7f, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0xe8, 0x47, 0x60, 0x00, - 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, - 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, - 0xe8, 0x47, 0x60, 0x00, 0x34, 0x50, 0x60, 0x00, 0xa4, 0x53, 0x60, 0x00, - 0x04, 0x52, 0x60, 0x00, 0xb4, 0x94, 0x60, 0x00, 0x50, 0x8d, 0x7f, 0x00, - 0x50, 0x8d, 0x7f, 0x00, 0x50, 0x8d, 0x7f, 0x00, 0x50, 0x8d, 0x7f, 0x00, - 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, - 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, - 0x59, 0x06, 0x4f, 0x06, 0x91, 0x07, 0x4f, 0x06, 0xb1, 0x02, 0x4f, 0x08, - 0xa1, 0x04, 0x4f, 0x08, 0xbd, 0x05, 0x4f, 0x08, 0x05, 0x01, 0x8f, 0x08, - 0x09, 0x01, 0x8f, 0x08, 0xb9, 0x03, 0x8f, 0x08, 0xc1, 0x03, 0x8f, 0x08, - 0xd1, 0x04, 0x8f, 0x08, 0x1d, 0x02, 0xcf, 0x08, 0x8d, 0x04, 0xcf, 0x08, - 0x8d, 0x07, 0xcf, 0x08, 0xc5, 0x07, 0xcf, 0x08, 0x69, 0x01, 0x0f, 0x09, - 0x99, 0x07, 0x4f, 0x09, 0xe9, 0x07, 0x4f, 0x09, 0x29, 0x00, 0x8f, 0x09, - 0x31, 0x00, 0x8f, 0x09, 0xd1, 0x00, 0x8f, 0x09, 0xa5, 0x01, 0x8f, 0x09, - 0xdd, 0x01, 0x8f, 0x09, 0x09, 0x03, 0x8f, 0x09, 0x85, 0x03, 0x8f, 0x09, - 0x49, 0x05, 0x8f, 0x09, 0x0d, 0x06, 0x8f, 0x09, 0xed, 0x07, 0x8f, 0x09, - 0xbd, 0x00, 0xcf, 0x09, 0x1d, 0x01, 0xcf, 0x09, 0x95, 0x01, 0xcf, 0x09, - 0x1d, 0x02, 0xcf, 0x09, 0x6d, 0x02, 0xcf, 0x09, 0xa5, 0x02, 0xcf, 0x09, - 0x41, 0x03, 0xcf, 0x09, 0x7d, 0x03, 0xcf, 0x09, 0xad, 0x05, 0xcf, 0x09, - 0x0d, 0x06, 0xcf, 0x09, 0x6d, 0x06, 0xcf, 0x09, 0xc1, 0x06, 0xcf, 0x09, - 0x85, 0x01, 0x0f, 0x0a, 0x11, 0x02, 0x0f, 0x0a, 0x31, 0x02, 0x0f, 0x0a, - 0xb5, 0x02, 0x0f, 0x0a, 0xb9, 0x03, 0x0f, 0x0a, 0x69, 0x07, 0x0f, 0x0a, - 0x05, 0x04, 0x4f, 0x0a, 0x2d, 0x07, 0x4f, 0x0a, 0x95, 0x00, 0x8f, 0x0a, - 0xad, 0x04, 0x8f, 0x0a, 0xd9, 0x05, 0x8f, 0x0a, 0x95, 0x06, 0x8f, 0x0a, - 0xed, 0x00, 0xcf, 0x0a, 0xf1, 0x00, 0xcf, 0x0a, 0xfd, 0x00, 0xcf, 0x0a, - 0x69, 0x01, 0xcf, 0x0a, 0x75, 0x01, 0xcf, 0x0a, 0x35, 0x02, 0xcf, 0x0a, - 0x05, 0x03, 0xcf, 0x0a, 0x09, 0x05, 0xcf, 0x0a, 0xfd, 0x05, 0xcf, 0x0a, - 0xb1, 0x06, 0xcf, 0x0a, 0x01, 0x02, 0x0f, 0x0b, 0xcd, 0x03, 0x40, 0x00, - 0xd1, 0x02, 0x8f, 0x0b, 0x29, 0x03, 0x8f, 0x0b, 0x91, 0x03, 0x8f, 0x0b, - 0xbd, 0x03, 0x8f, 0x0b, 0xe1, 0x04, 0x8f, 0x0b, 0x25, 0x05, 0x8f, 0x0b, - 0xd5, 0x05, 0x8f, 0x0b, 0x39, 0x06, 0x8f, 0x0b, 0x91, 0x07, 0x8f, 0x0b, - 0x2d, 0x00, 0xcf, 0x0b, 0x49, 0x00, 0xcf, 0x0b, 0x01, 0x01, 0xcf, 0x0b, - 0xcd, 0x01, 0xcf, 0x0b, 0x79, 0x05, 0xcf, 0x0b, 0xc9, 0x05, 0xcf, 0x0b, - 0xb5, 0x07, 0xcf, 0x0b, 0x69, 0x00, 0x0f, 0x0c, 0xb5, 0x03, 0x40, 0x00, - 0xcd, 0x00, 0x0f, 0x0c, 0xd5, 0x00, 0x0f, 0x0c, 0x45, 0x01, 0x0f, 0x0c, - 0x5d, 0x01, 0x0f, 0x0c, 0x75, 0x01, 0x0f, 0x0c, 0x0d, 0x02, 0x0f, 0x0c, - 0xbd, 0x04, 0x0f, 0x0c, 0xdd, 0x04, 0x0f, 0x0c, 0x01, 0x07, 0x0f, 0x0c, - 0x41, 0x07, 0x0f, 0x0c, 0x49, 0x07, 0x0f, 0x0c, 0xc9, 0x07, 0x0f, 0x0c, - 0x1d, 0x00, 0x4f, 0x0c, 0x65, 0x00, 0x4f, 0x0c, 0x49, 0x01, 0x4f, 0x0c, - 0x65, 0x01, 0x4f, 0x0c, 0x99, 0x01, 0x4f, 0x0c, 0x3d, 0x02, 0x4f, 0x0c, - 0x65, 0x02, 0x4f, 0x0c, 0xb1, 0x02, 0x4f, 0x0c, 0x61, 0x05, 0x4f, 0x0c, - 0xb1, 0x05, 0x4f, 0x0c, 0x45, 0x06, 0x4f, 0x0c, 0x79, 0x06, 0x4f, 0x0c, - 0x85, 0x06, 0x4f, 0x0c, 0x19, 0x07, 0x4f, 0x0c, 0x21, 0x00, 0x8f, 0x0c, - 0x6d, 0x00, 0x8f, 0x0c, 0x7d, 0x00, 0x8f, 0x0c, 0x7d, 0x04, 0x8f, 0x0c, - 0x85, 0x05, 0x8f, 0x0c, 0xc1, 0x03, 0xcf, 0x0c, 0xc9, 0x03, 0xcf, 0x0c, - 0x0d, 0x07, 0xcf, 0x0c, 0x51, 0x07, 0xcf, 0x0c, 0x61, 0x07, 0xcf, 0x0c, - 0x55, 0x03, 0x40, 0x00, 0x25, 0x00, 0x0f, 0x0d, 0x4d, 0x00, 0x0f, 0x0d, - 0x6d, 0x00, 0x0f, 0x0d, 0x71, 0x00, 0x0f, 0x0d, 0x71, 0x00, 0x0f, 0x0d, - 0x89, 0x00, 0x0f, 0x0d, 0x91, 0x00, 0x0f, 0x0d, 0x99, 0x00, 0x0f, 0x0d, - 0xa1, 0x00, 0x0f, 0x0d, 0xa5, 0x00, 0x0f, 0x0d, 0xad, 0x00, 0x0f, 0x0d, - 0xbd, 0x00, 0x0f, 0x0d, 0xc9, 0x00, 0x0f, 0x0d, 0xd5, 0x00, 0x0f, 0x0d, - 0x89, 0x01, 0x0f, 0x0d, 0xf9, 0x01, 0x0f, 0x0d, 0x21, 0x03, 0x0f, 0x0d, - 0x65, 0x03, 0x0f, 0x0d, 0x1d, 0x04, 0x0f, 0x0d, 0x39, 0x04, 0x0f, 0x0d, - 0x45, 0x04, 0x0f, 0x0d, 0x4d, 0x04, 0x0f, 0x0d, 0x6d, 0x04, 0x0f, 0x0d, - 0x71, 0x04, 0x0f, 0x0d, 0xf5, 0x05, 0x0f, 0x0d, 0x3d, 0x06, 0x0f, 0x0d, - 0x05, 0x00, 0x4f, 0x0d, 0x51, 0x00, 0x4f, 0x0d, 0x8d, 0x00, 0x4f, 0x0d, - 0xed, 0x00, 0x4f, 0x0d, 0x21, 0x02, 0x4f, 0x0d, 0xbd, 0x02, 0x4f, 0x0d, - 0xc1, 0x03, 0x4f, 0x0d, 0x25, 0x04, 0x4f, 0x0d, 0x31, 0x04, 0x4f, 0x0d, - 0x09, 0x03, 0x40, 0x00, 0x15, 0x03, 0x40, 0x00, 0x21, 0x03, 0x40, 0x00, - 0x2d, 0x03, 0x40, 0x00, 0x39, 0x03, 0x40, 0x00, 0x45, 0x03, 0x40, 0x00, - 0x51, 0x03, 0x40, 0x00, 0x71, 0x03, 0x40, 0x00, 0x7d, 0x03, 0x40, 0x00, - 0xa1, 0x03, 0x40, 0x00, 0xad, 0x03, 0x40, 0x00, 0xb9, 0x03, 0x40, 0x00, - 0xc9, 0x04, 0x4f, 0x0d, 0xf1, 0x05, 0x4f, 0x0d, 0x31, 0x07, 0x4f, 0x0d, - 0x59, 0x07, 0x4f, 0x0d, 0x65, 0x07, 0x4f, 0x0d, 0xa9, 0x01, 0x8f, 0x0d, - 0xd1, 0x01, 0x8f, 0x0d, 0xdd, 0x01, 0x8f, 0x0d, 0xe5, 0x01, 0x8f, 0x0d, - 0x09, 0x02, 0x8f, 0x0d, 0x2d, 0x02, 0x8f, 0x0d, 0x7d, 0x02, 0x8f, 0x0d, - 0x3d, 0x03, 0x8f, 0x0d, 0x6d, 0x04, 0x8f, 0x0d, 0x49, 0x05, 0x8f, 0x0d, - 0x59, 0x05, 0x8f, 0x0d, 0x91, 0x05, 0x8f, 0x0d, 0xd5, 0x05, 0x8f, 0x0d, - 0xf1, 0x00, 0xcf, 0x0d, 0x21, 0x02, 0xcf, 0x0d, 0xfd, 0x02, 0xcf, 0x0d, - 0xbd, 0x04, 0xcf, 0x0d, 0x89, 0x00, 0x0f, 0x0e, 0xc1, 0x04, 0x0f, 0x0e, - 0xf1, 0x05, 0x0f, 0x0e, 0x5d, 0x07, 0x0f, 0x0e, 0xc9, 0x07, 0x0f, 0x0e, - 0x89, 0x05, 0x8f, 0x0e, 0x79, 0x06, 0x8f, 0x0e, 0xa1, 0x06, 0x8f, 0x0e, - 0x1d, 0x07, 0x8f, 0x0e, 0x6d, 0x07, 0x8f, 0x0e, 0x11, 0x00, 0xcf, 0x0e, - 0x4d, 0x01, 0xcf, 0x0e, 0x71, 0x01, 0xcf, 0x0e, 0xbd, 0x01, 0xcf, 0x0e, - 0xcd, 0x01, 0xcf, 0x0e, 0x25, 0x02, 0xcf, 0x0e, 0x75, 0x02, 0xcf, 0x0e, - 0xbd, 0x02, 0xcf, 0x0e, 0xa1, 0x03, 0xcf, 0x0e, 0x2d, 0x04, 0xcf, 0x0e, - 0x75, 0x04, 0xcf, 0x0e, 0x81, 0x04, 0xcf, 0x0e, 0xa5, 0x04, 0xcf, 0x0e, - 0xe1, 0x04, 0xcf, 0x0e, 0x11, 0x05, 0xcf, 0x0e, 0x65, 0x05, 0xcf, 0x0e, - 0xd5, 0x05, 0xcf, 0x0e, 0x2d, 0x06, 0xcf, 0x0e, 0xbd, 0x07, 0xcf, 0x0e, - 0x01, 0x00, 0x0f, 0x0f, 0x25, 0x00, 0x0f, 0x0f, 0x5d, 0x04, 0x0f, 0x0f, - 0x19, 0x05, 0x0f, 0x0f, 0x1d, 0x03, 0x4f, 0x0f, 0x99, 0x04, 0x4f, 0x0f, - 0x21, 0x05, 0x4f, 0x0f, 0x8d, 0x05, 0x4f, 0x0f, 0xa9, 0x05, 0x4f, 0x0f, - 0xe1, 0x05, 0x4f, 0x0f, 0x81, 0x06, 0x4f, 0x0f, 0x95, 0x06, 0x4f, 0x0f, - 0xad, 0x06, 0x4f, 0x0f, 0x01, 0x07, 0x4f, 0x0f, 0x1d, 0x07, 0x4f, 0x0f, - 0x31, 0x07, 0x4f, 0x0f, 0xc5, 0x07, 0x4f, 0x0f, 0xe1, 0x07, 0x4f, 0x0f, - 0x21, 0x00, 0x8f, 0x0f, 0x85, 0x00, 0x8f, 0x0f, 0x9d, 0x00, 0x8f, 0x0f, - 0xdd, 0x00, 0x8f, 0x0f, 0xe5, 0x00, 0x8f, 0x0f, 0x7d, 0x01, 0x8f, 0x0f, - 0x9d, 0x01, 0x8f, 0x0f, 0xb1, 0x01, 0x8f, 0x0f, 0xd5, 0x01, 0x8f, 0x0f, - 0x2d, 0x02, 0x8f, 0x0f, 0x71, 0x02, 0x8f, 0x0f, 0x09, 0x03, 0x8f, 0x0f, - 0x35, 0x03, 0x8f, 0x0f, 0x71, 0x03, 0x8f, 0x0f, 0x69, 0x04, 0x8f, 0x0f, - 0xc9, 0x04, 0x8f, 0x0f, 0x7d, 0x00, 0xcf, 0x0f, 0x91, 0x02, 0xcf, 0x0f, - 0x15, 0x03, 0x4f, 0x09, 0xbd, 0x03, 0x8f, 0x0d, 0x41, 0x03, 0xcf, 0x0a, - 0x65, 0x04, 0xcf, 0x0a, 0x99, 0x04, 0xcf, 0x0a, 0x09, 0x05, 0xcf, 0x0a, - 0x49, 0x05, 0xcf, 0x0a, 0x61, 0x05, 0xcf, 0x0a, 0xb1, 0x06, 0xcf, 0x0a, - 0xb9, 0x06, 0xcf, 0x0a, 0xf1, 0x06, 0xcf, 0x0a, 0x31, 0x07, 0xcf, 0x0a, - 0x75, 0x07, 0xcf, 0x0a, 0xd9, 0x05, 0x8f, 0x0b, 0x71, 0x06, 0x8f, 0x0b, - 0x6d, 0x06, 0x8f, 0x0a, 0x8d, 0x06, 0x8f, 0x0a, 0x31, 0x07, 0x8f, 0x0a, - 0xe5, 0x07, 0x8f, 0x0a, 0x69, 0x00, 0xcf, 0x0a, 0xc1, 0x00, 0xcf, 0x0a, - 0x55, 0x01, 0xcf, 0x0a, 0x89, 0x02, 0xcf, 0x0a, 0xc1, 0x05, 0xcf, 0x0a, - 0xbd, 0x06, 0xcf, 0x0d, 0x11, 0x07, 0xcf, 0x0d, 0xd9, 0x01, 0x8f, 0x04, - 0x09, 0x02, 0x8f, 0x04, 0x15, 0x02, 0x8f, 0x04, 0x21, 0x02, 0x8f, 0x04, - 0x39, 0x02, 0x8f, 0x04, 0x5d, 0x02, 0x8f, 0x04, 0x69, 0x02, 0x8f, 0x04, - 0x75, 0x02, 0x8f, 0x04, 0x49, 0x03, 0x8f, 0x04, 0x89, 0x03, 0x8f, 0x04, - 0xf1, 0x04, 0x8f, 0x04, 0x51, 0x05, 0x8f, 0x04, 0x8d, 0x05, 0x8f, 0x04, - 0xa1, 0x05, 0x8f, 0x04, 0xf1, 0x05, 0x8f, 0x04, 0x21, 0x06, 0x8f, 0x04, - 0x59, 0x07, 0x8f, 0x04, 0x6d, 0x07, 0x8f, 0x04, 0xc5, 0x07, 0x8f, 0x04, - 0xf1, 0x00, 0xcf, 0x04, 0xfd, 0x00, 0xcf, 0x04, 0x05, 0x01, 0xcf, 0x04, - 0x95, 0x01, 0xcf, 0x04, 0xfd, 0x01, 0xcf, 0x04, 0x41, 0x02, 0xcf, 0x04, - 0x55, 0x02, 0xcf, 0x04, 0xb9, 0x02, 0xcf, 0x04, 0xbd, 0x02, 0xcf, 0x04, - 0xc1, 0x02, 0xcf, 0x04, 0x05, 0x03, 0xcf, 0x04, 0x0d, 0x03, 0xcf, 0x04, - 0x11, 0x03, 0xcf, 0x04, 0x15, 0x03, 0xcf, 0x04, 0x19, 0x03, 0xcf, 0x04, - 0x21, 0x03, 0xcf, 0x04, 0x45, 0x03, 0xcf, 0x04, 0x4d, 0x03, 0xcf, 0x04, - 0x61, 0x03, 0xcf, 0x04, 0x71, 0x03, 0xcf, 0x04, 0xc9, 0x03, 0xcf, 0x04, - 0xdd, 0x03, 0xcf, 0x04, 0x49, 0x05, 0xcf, 0x04, 0x55, 0x05, 0xcf, 0x04, - 0x61, 0x05, 0xcf, 0x04, 0x65, 0x05, 0xcf, 0x04, 0x69, 0x05, 0xcf, 0x04, - 0x6d, 0x05, 0xcf, 0x04, 0x99, 0x05, 0xcf, 0x04, 0x2d, 0x00, 0x0f, 0x05, - 0xad, 0x00, 0x0f, 0x05, 0xf9, 0x00, 0x0f, 0x05, 0x41, 0x01, 0x0f, 0x05, - 0xe1, 0x01, 0x0f, 0x05, 0x09, 0x02, 0x0f, 0x05, 0xf1, 0x02, 0x0f, 0x05, - 0xfd, 0x02, 0x0f, 0x05, 0x21, 0x03, 0x0f, 0x05, 0x3d, 0x03, 0x0f, 0x05, - 0x91, 0x03, 0x0f, 0x05, 0xad, 0x03, 0x0f, 0x05, 0xb9, 0x03, 0x0f, 0x05, - 0xdd, 0x03, 0x0f, 0x05, 0xed, 0x03, 0x0f, 0x05, 0xf5, 0x03, 0x0f, 0x05, - 0x65, 0x04, 0x0f, 0x05, 0x15, 0x06, 0x0f, 0x05, 0xa1, 0x06, 0x0f, 0x05, - 0xb1, 0x06, 0x0f, 0x05, 0xb9, 0x06, 0x0f, 0x05, 0xc1, 0x06, 0x0f, 0x05, - 0xd5, 0x06, 0x0f, 0x05, 0x25, 0x07, 0x0f, 0x05, 0x69, 0x07, 0x0f, 0x05, - 0x71, 0x07, 0x0f, 0x05, 0x0d, 0x00, 0x4f, 0x05, 0x29, 0x00, 0x4f, 0x05, - 0x39, 0x00, 0x4f, 0x05, 0x6d, 0x00, 0x4f, 0x05, 0x79, 0x00, 0x4f, 0x05, - 0x9d, 0x00, 0x4f, 0x05, 0xe5, 0x01, 0x4f, 0x05, 0x1d, 0x02, 0x4f, 0x05, - 0x2d, 0x02, 0x4f, 0x05, 0x31, 0x02, 0x4f, 0x05, 0x45, 0x02, 0x4f, 0x05, - 0x29, 0x03, 0x4f, 0x05, 0x65, 0x03, 0x4f, 0x05, 0x01, 0x04, 0x4f, 0x05, - 0x0d, 0x04, 0x4f, 0x05, 0x19, 0x04, 0x4f, 0x05, 0x4d, 0x04, 0x4f, 0x05, - 0x59, 0x04, 0x4f, 0x05, 0xd9, 0x04, 0x4f, 0x05, 0x81, 0x05, 0x4f, 0x05, - 0x85, 0x05, 0x4f, 0x05, 0xad, 0x05, 0x4f, 0x05, 0xfd, 0x05, 0x4f, 0x05, - 0x05, 0x06, 0x4f, 0x05, 0x0d, 0x06, 0x4f, 0x05, 0x39, 0x06, 0x4f, 0x05, - 0x71, 0x00, 0x8f, 0x05, 0xe9, 0x00, 0x8f, 0x05, 0xf9, 0x00, 0x8f, 0x05, - 0x09, 0x01, 0x8f, 0x05, 0xb5, 0x01, 0x8f, 0x05, 0xc1, 0x01, 0x8f, 0x05, - 0xe1, 0x01, 0x8f, 0x05, 0xed, 0x01, 0x8f, 0x05, 0x01, 0x02, 0x8f, 0x05, - 0x0d, 0x02, 0x8f, 0x05, 0x19, 0x02, 0x8f, 0x05, 0x49, 0x02, 0x8f, 0x05, - 0x55, 0x02, 0x8f, 0x05, 0x1d, 0x03, 0x8f, 0x05, 0x91, 0x03, 0x8f, 0x05, - 0xe5, 0x03, 0x8f, 0x05, 0x25, 0x04, 0x8f, 0x05, 0x95, 0x04, 0x8f, 0x05, - 0xb5, 0x04, 0x8f, 0x05, 0x29, 0x05, 0x8f, 0x05, 0xa5, 0x05, 0x8f, 0x05, - 0x31, 0x06, 0x8f, 0x05, 0x39, 0x06, 0x8f, 0x05, 0x41, 0x06, 0x8f, 0x05, - 0x49, 0x06, 0x8f, 0x05, 0x65, 0x07, 0x8f, 0x05, 0x89, 0x07, 0x8f, 0x05, - 0x95, 0x07, 0x8f, 0x05, 0xb1, 0x07, 0x8f, 0x05, 0xd9, 0x07, 0x8f, 0x05, - 0xe5, 0x07, 0x8f, 0x05, 0x15, 0x00, 0xcf, 0x05, 0xd1, 0x00, 0xcf, 0x05, - 0x2d, 0x01, 0xcf, 0x05, 0x45, 0x01, 0xcf, 0x05, 0x75, 0x01, 0xcf, 0x05, - 0xa5, 0x01, 0xcf, 0x05, 0xb5, 0x01, 0xcf, 0x05, 0xd1, 0x01, 0xcf, 0x05, - 0xf5, 0x01, 0xcf, 0x05, 0xb9, 0x02, 0xcf, 0x05, 0xc5, 0x02, 0xcf, 0x05, - 0xfd, 0x02, 0xcf, 0x05, 0x11, 0x03, 0xcf, 0x05, 0x25, 0x03, 0xcf, 0x05, - 0x41, 0x03, 0xcf, 0x05, 0x55, 0x03, 0xcf, 0x05, 0x69, 0x03, 0xcf, 0x05, - 0x8d, 0x04, 0xcf, 0x05, 0x9d, 0x04, 0xcf, 0x05, 0xad, 0x04, 0xcf, 0x05, - 0xd1, 0x04, 0xcf, 0x05, 0xe1, 0x04, 0xcf, 0x05, 0x39, 0x05, 0xcf, 0x05, - 0x75, 0x05, 0xcf, 0x05, 0xf9, 0x05, 0xcf, 0x05, 0x05, 0x06, 0xcf, 0x05, - 0x11, 0x06, 0xcf, 0x05, 0x25, 0x06, 0xcf, 0x05, 0x35, 0x06, 0xcf, 0x05, - 0x49, 0x06, 0xcf, 0x05, 0x5d, 0x06, 0xcf, 0x05, 0x7d, 0x06, 0xcf, 0x05, - 0x91, 0x06, 0xcf, 0x05, 0xb5, 0x06, 0xcf, 0x05, 0xd1, 0x06, 0xcf, 0x05, - 0xf9, 0x06, 0xcf, 0x05, 0x55, 0x07, 0xcf, 0x05, 0xf1, 0x07, 0xcf, 0x05, - 0x09, 0x00, 0x0f, 0x06, 0xdd, 0x00, 0x0f, 0x06, 0xa5, 0x01, 0x0f, 0x06, - 0x19, 0x02, 0x0f, 0x06, 0x25, 0x02, 0x0f, 0x06, 0x39, 0x02, 0x0f, 0x06, - 0x45, 0x02, 0x0f, 0x06, 0x55, 0x02, 0x0f, 0x06, 0x81, 0x02, 0x0f, 0x06, - 0xa1, 0x02, 0x0f, 0x06, 0xb5, 0x02, 0x0f, 0x06, 0xc1, 0x02, 0x0f, 0x06, - 0xc9, 0x02, 0x0f, 0x06, 0xd5, 0x02, 0x0f, 0x06, 0x31, 0x03, 0x0f, 0x06, - 0x41, 0x03, 0x0f, 0x06, 0x51, 0x03, 0x0f, 0x06, 0x5d, 0x03, 0x0f, 0x06, - 0x65, 0x03, 0x0f, 0x06, 0x75, 0x03, 0x0f, 0x06, 0xcd, 0x03, 0x0f, 0x06, - 0xf9, 0x03, 0x0f, 0x06, 0x05, 0x04, 0x0f, 0x06, 0x59, 0x06, 0x0f, 0x06, - 0x61, 0x06, 0x0f, 0x06, 0xc1, 0x06, 0x0f, 0x06, 0xd5, 0x06, 0x0f, 0x06, - 0xd9, 0x06, 0x0f, 0x06, 0xdd, 0x06, 0x0f, 0x06, 0x79, 0x04, 0x4f, 0x06, - 0x91, 0x04, 0x4f, 0x06, 0xa9, 0x04, 0x4f, 0x06, 0x01, 0x05, 0x4f, 0x06, - 0x35, 0x05, 0x4f, 0x06, 0x65, 0x05, 0x4f, 0x06, 0x2d, 0x06, 0x4f, 0x06, - 0x45, 0x06, 0x4f, 0x06, 0x69, 0x06, 0x4f, 0x06, 0x6d, 0x06, 0x4f, 0x06, - 0x71, 0x06, 0x4f, 0x06, 0x75, 0x06, 0x4f, 0x06, 0x79, 0x06, 0x4f, 0x06, - 0x7d, 0x06, 0x4f, 0x06, 0x81, 0x06, 0x4f, 0x06, 0x85, 0x06, 0x4f, 0x06, - 0x89, 0x06, 0x4f, 0x06, 0x8d, 0x06, 0x4f, 0x06, 0x91, 0x06, 0x4f, 0x06, - 0x95, 0x06, 0x4f, 0x06, 0xa1, 0x06, 0x4f, 0x06, 0xa9, 0x06, 0x4f, 0x06, - 0x69, 0x00, 0x8f, 0x06, 0x75, 0x00, 0x8f, 0x06, 0x8d, 0x00, 0x8f, 0x06, - 0x99, 0x00, 0x8f, 0x06, 0xa5, 0x00, 0x8f, 0x06, 0xf1, 0x00, 0x8f, 0x06, - 0xfd, 0x00, 0x8f, 0x06, 0x09, 0x01, 0x8f, 0x06, 0x15, 0x01, 0x8f, 0x06, - 0x25, 0x01, 0x8f, 0x06, 0xfd, 0x01, 0x8f, 0x06, 0x2d, 0x02, 0x8f, 0x06, - 0xf1, 0x02, 0x8f, 0x06, 0xb5, 0x03, 0x8f, 0x06, 0x4d, 0x04, 0x8f, 0x06, - 0x65, 0x04, 0x8f, 0x06, 0xa9, 0x04, 0x8f, 0x06, 0xbd, 0x05, 0x8f, 0x06, - 0x61, 0x06, 0x8f, 0x06, 0x69, 0x06, 0x8f, 0x06, 0x71, 0x06, 0x8f, 0x06, - 0x91, 0x07, 0x8f, 0x06, 0xc5, 0x02, 0xcf, 0x06, 0xe1, 0x02, 0xcf, 0x06, - 0xe9, 0x02, 0xcf, 0x06, 0xf9, 0x02, 0xcf, 0x06, 0x09, 0x03, 0xcf, 0x06, - 0xfd, 0x04, 0xcf, 0x06, 0x55, 0x05, 0xcf, 0x06, 0x71, 0x05, 0xcf, 0x06, - 0xd9, 0x05, 0xcf, 0x06, 0x9d, 0x07, 0xcf, 0x06, 0xb1, 0x07, 0xcf, 0x06, - 0xd5, 0x07, 0xcf, 0x06, 0xd9, 0x07, 0xcf, 0x06, 0xdd, 0x07, 0xcf, 0x06, - 0x19, 0x00, 0x0f, 0x07, 0x41, 0x01, 0x0f, 0x07, 0x89, 0x01, 0x0f, 0x07, - 0x05, 0x02, 0x0f, 0x07, 0x1d, 0x02, 0x0f, 0x07, 0x2d, 0x02, 0x0f, 0x07, - 0x31, 0x02, 0x0f, 0x07, 0x35, 0x02, 0x0f, 0x07, 0x3d, 0x02, 0x0f, 0x07, - 0x9d, 0x02, 0x0f, 0x07, 0xc5, 0x02, 0x0f, 0x07, 0xed, 0x02, 0x0f, 0x07, - 0x15, 0x03, 0x0f, 0x07, 0x51, 0x03, 0x0f, 0x07, 0xa9, 0x03, 0x0f, 0x07, - 0xcd, 0x03, 0x0f, 0x07, 0xe5, 0x03, 0x0f, 0x07, 0xf5, 0x03, 0x0f, 0x07, - 0x05, 0x04, 0x0f, 0x07, 0x2d, 0x04, 0x0f, 0x07, 0x55, 0x04, 0x0f, 0x07, - 0x99, 0x04, 0x0f, 0x07, 0xcd, 0x04, 0x0f, 0x07, 0xf1, 0x04, 0x0f, 0x07, - 0x09, 0x05, 0x0f, 0x07, 0x41, 0x05, 0x0f, 0x07, 0xc1, 0x05, 0x0f, 0x07, - 0xe9, 0x05, 0x0f, 0x07, 0x19, 0x07, 0x0f, 0x07, 0x59, 0x07, 0x0f, 0x07, - 0x71, 0x07, 0x0f, 0x07, 0x89, 0x07, 0x0f, 0x07, 0xa1, 0x07, 0x0f, 0x07, - 0xe5, 0x07, 0x0f, 0x07, 0x55, 0x00, 0x4f, 0x07, 0x79, 0x00, 0x4f, 0x07, - 0xb9, 0x00, 0x4f, 0x07, 0x6d, 0x01, 0x4f, 0x07, 0xb5, 0x01, 0x4f, 0x07, - 0x4d, 0x03, 0x4f, 0x07, 0x21, 0x04, 0x4f, 0x07, 0x5d, 0x04, 0x4f, 0x07, - 0x85, 0x04, 0x4f, 0x07, 0xf9, 0x04, 0x4f, 0x07, 0x65, 0x05, 0x4f, 0x07, - 0x81, 0x05, 0x4f, 0x07, 0xd9, 0x00, 0x8f, 0x07, 0x35, 0x01, 0x8f, 0x07, - 0x69, 0x01, 0x8f, 0x07, 0x75, 0x01, 0x8f, 0x07, 0xad, 0x01, 0x8f, 0x07, - 0xed, 0x01, 0x8f, 0x07, 0x19, 0x02, 0x8f, 0x07, 0x41, 0x02, 0x8f, 0x07, - 0x4d, 0x02, 0x8f, 0x07, 0x59, 0x02, 0x8f, 0x07, 0xa5, 0x03, 0x8f, 0x07, - 0xb9, 0x03, 0x8f, 0x07, 0xc9, 0x03, 0x8f, 0x07, 0xd5, 0x03, 0x8f, 0x07, - 0xed, 0x03, 0x8f, 0x07, 0x01, 0x04, 0x8f, 0x07, 0x11, 0x04, 0x8f, 0x07, - 0x21, 0x04, 0x8f, 0x07, 0x31, 0x04, 0x8f, 0x07, 0x41, 0x04, 0x8f, 0x07, - 0x51, 0x04, 0x8f, 0x07, 0x79, 0x04, 0x8f, 0x07, 0x95, 0x04, 0x8f, 0x07, - 0x9d, 0x04, 0x8f, 0x07, 0xa5, 0x04, 0x8f, 0x07, 0xb5, 0x04, 0x8f, 0x07, - 0xc5, 0x04, 0x8f, 0x07, 0xd5, 0x04, 0x8f, 0x07, 0xe5, 0x04, 0x8f, 0x07, - 0xf5, 0x04, 0x8f, 0x07, 0x05, 0x05, 0x8f, 0x07, 0x1d, 0x05, 0x8f, 0x07, - 0x2d, 0x05, 0x8f, 0x07, 0x3d, 0x05, 0x8f, 0x07, 0x51, 0x05, 0x8f, 0x07, - 0xc5, 0x07, 0x8f, 0x07, 0xed, 0x07, 0x8f, 0x07, 0xf5, 0x07, 0x8f, 0x07, - 0xfd, 0x07, 0x8f, 0x07, 0x0d, 0x00, 0xcf, 0x07, 0x15, 0x00, 0xcf, 0x07, - 0x1d, 0x00, 0xcf, 0x07, 0x29, 0x00, 0xcf, 0x07, 0x31, 0x00, 0xcf, 0x07, - 0x39, 0x00, 0xcf, 0x07, 0x51, 0x00, 0xcf, 0x07, 0xd1, 0x00, 0xcf, 0x07, - 0xd9, 0x00, 0xcf, 0x07, 0xe1, 0x00, 0xcf, 0x07, 0x41, 0x03, 0xcf, 0x07, - 0xad, 0x03, 0xcf, 0x07, 0xe9, 0x03, 0xcf, 0x07, 0x6d, 0x04, 0xcf, 0x07, - 0xed, 0x04, 0xcf, 0x07, 0x1d, 0x05, 0xcf, 0x07, 0x31, 0x05, 0xcf, 0x07, - 0xc1, 0x05, 0xcf, 0x07, 0xb1, 0x06, 0xcf, 0x07, 0xfd, 0x06, 0xcf, 0x07, - 0xc1, 0x07, 0xcf, 0x07, 0xf9, 0x07, 0xcf, 0x07, 0x21, 0x00, 0x0f, 0x08, - 0x4d, 0x03, 0x0f, 0x08, 0x5d, 0x03, 0x0f, 0x08, 0x65, 0x03, 0x0f, 0x08, - 0xb1, 0x03, 0x0f, 0x08, 0x6d, 0x00, 0x8f, 0x08, 0x21, 0x02, 0x8f, 0x08, - 0x89, 0x02, 0x4f, 0x0a, 0xd1, 0x02, 0x4f, 0x0a, 0xe5, 0x02, 0x4f, 0x0a, - 0xcd, 0x07, 0x4f, 0x0a, 0xd9, 0x07, 0x4f, 0x0a, 0x15, 0x02, 0x8f, 0x0a, - 0x5d, 0x02, 0x8f, 0x0a, 0x95, 0x02, 0x8f, 0x0a, 0xed, 0x02, 0x8f, 0x0a, - 0x85, 0x03, 0x8f, 0x0a, 0x45, 0x05, 0x8f, 0x0a, 0x4d, 0x05, 0x8f, 0x0a, - 0x39, 0x06, 0x8f, 0x0a, 0x4d, 0x00, 0xcf, 0x0a, 0x41, 0x04, 0xcf, 0x0a, - 0x91, 0x04, 0xcf, 0x0a, 0xa9, 0x04, 0xcf, 0x0a, 0x31, 0x05, 0xcf, 0x0a, - 0xa5, 0x05, 0xcf, 0x0a, 0x0d, 0x06, 0xcf, 0x0a, 0x4d, 0x06, 0xcf, 0x0a, - 0x61, 0x06, 0xcf, 0x0a, 0x79, 0x06, 0xcf, 0x0a, 0x81, 0x06, 0xcf, 0x0a, - 0xb5, 0x06, 0xcf, 0x0a, 0x59, 0x07, 0xcf, 0x0a, 0x8d, 0x07, 0xcf, 0x0a, - 0xc1, 0x07, 0xcf, 0x0a, 0xd5, 0x07, 0xcf, 0x0a, 0xfd, 0x07, 0xcf, 0x0a, - 0x49, 0x00, 0x0f, 0x0b, 0x71, 0x00, 0x0f, 0x0b, 0xf9, 0x00, 0x0f, 0x0b, - 0x11, 0x01, 0x0f, 0x0b, 0x5d, 0x01, 0x0f, 0x0b, 0x65, 0x01, 0x0f, 0x0b, - 0x99, 0x01, 0x0f, 0x0b, 0x21, 0x02, 0x00, 0x00, 0xe5, 0x01, 0x0f, 0x0b, - 0x55, 0x02, 0x0f, 0x0b, 0x6d, 0x02, 0x0f, 0x0b, 0x7d, 0x02, 0x0f, 0x0b, - 0x9d, 0x03, 0x0f, 0x0b, 0xa9, 0x03, 0x0f, 0x0b, 0xcd, 0x04, 0x0f, 0x0b, - 0x45, 0x06, 0x0f, 0x0b, 0x51, 0x06, 0x0f, 0x0b, 0xf5, 0x07, 0x0f, 0x0b, - 0x0d, 0x00, 0x4f, 0x0b, 0xa1, 0x00, 0x4f, 0x0b, 0x81, 0x01, 0x4f, 0x0b, - 0x15, 0x02, 0x4f, 0x0b, 0x4d, 0x02, 0x4f, 0x0b, 0x5d, 0x02, 0x4f, 0x0b, - 0xbd, 0x02, 0x4f, 0x0b, 0xe5, 0x02, 0x4f, 0x0b, 0xc1, 0x03, 0x4f, 0x0b, - 0x39, 0x04, 0x4f, 0x0b, 0x41, 0x04, 0x4f, 0x0b, 0x95, 0x05, 0x4f, 0x0b, - 0xf9, 0x05, 0x4f, 0x0b, 0x49, 0x06, 0x4f, 0x0b, 0x6d, 0x06, 0x4f, 0x0b, - 0x41, 0x03, 0x8f, 0x0b, 0x59, 0x03, 0x8f, 0x0b, 0x21, 0x07, 0x8f, 0x0b, - 0x89, 0x03, 0x0f, 0x0c, 0x5d, 0x05, 0x4f, 0x0c, 0xd9, 0x05, 0x4f, 0x0c, - 0x05, 0x06, 0x4f, 0x0c, 0x75, 0x06, 0x4f, 0x0c, 0x45, 0x07, 0x4f, 0x0c, - 0x89, 0x07, 0x4f, 0x0c, 0xb5, 0x07, 0x4f, 0x0c, 0x21, 0x00, 0x8f, 0x0c, - 0xc5, 0x00, 0x8f, 0x0c, 0x75, 0x02, 0x8f, 0x0c, 0x95, 0x02, 0x8f, 0x0c, - 0x99, 0x02, 0x8f, 0x0c, 0x9d, 0x02, 0x8f, 0x0c, 0xa1, 0x02, 0x8f, 0x0c, - 0xad, 0x02, 0x8f, 0x0c, 0xb5, 0x02, 0x8f, 0x0c, 0xb9, 0x02, 0x8f, 0x0c, - 0xc1, 0x02, 0x8f, 0x0c, 0x5d, 0x03, 0x8f, 0x0c, 0xbd, 0x03, 0x8f, 0x0c, - 0xc9, 0x03, 0x8f, 0x0c, 0xcd, 0x03, 0x8f, 0x0c, 0xd9, 0x03, 0x8f, 0x0c, - 0xe1, 0x03, 0x8f, 0x0c, 0xe5, 0x03, 0x8f, 0x0c, 0xed, 0x03, 0x8f, 0x0c, - 0x3d, 0x04, 0x8f, 0x0c, 0x6d, 0x04, 0x8f, 0x0c, 0x71, 0x04, 0x8f, 0x0c, - 0x7d, 0x04, 0x8f, 0x0c, 0x81, 0x04, 0x8f, 0x0c, 0x85, 0x04, 0x8f, 0x0c, - 0x99, 0x04, 0x8f, 0x0c, 0x31, 0x05, 0x4f, 0x0d, 0x85, 0x05, 0x4f, 0x0d, - 0x61, 0x04, 0x8f, 0x0d, 0xc9, 0x04, 0x8f, 0x0d, 0x69, 0x05, 0x8f, 0x0d, - 0xe9, 0x05, 0x8f, 0x0d, 0x19, 0x06, 0x8f, 0x0d, 0xd1, 0x06, 0x8f, 0x0d, - 0xe9, 0x07, 0x8f, 0x0d, 0xf1, 0x07, 0x8f, 0x0d, 0x21, 0x00, 0xcf, 0x0d, - 0x2d, 0x00, 0xcf, 0x0d, 0x39, 0x00, 0xcf, 0x0d, 0x45, 0x00, 0xcf, 0x0d, - 0x51, 0x00, 0xcf, 0x0d, 0x5d, 0x00, 0xcf, 0x0d, 0x65, 0x00, 0xcf, 0x0d, - 0x6d, 0x00, 0xcf, 0x0d, 0xf1, 0x00, 0xcf, 0x0d, 0xfd, 0x00, 0xcf, 0x0d, - 0x05, 0x01, 0xcf, 0x0d, 0x0d, 0x01, 0xcf, 0x0d, 0x15, 0x01, 0xcf, 0x0d, - 0x1d, 0x01, 0xcf, 0x0d, 0x25, 0x01, 0xcf, 0x0d, 0xd5, 0x02, 0xcf, 0x0d, - 0x81, 0x07, 0xcf, 0x0d, 0xfd, 0x07, 0xcf, 0x0d, 0xd5, 0x00, 0x0f, 0x0e, - 0x3d, 0x01, 0x0f, 0x0e, 0x85, 0x01, 0x0f, 0x0e, 0xa1, 0x01, 0x0f, 0x0e, - 0xa5, 0x02, 0x0f, 0x0e, 0x51, 0x03, 0x0f, 0x0e, 0xfd, 0x03, 0x0f, 0x0e, - 0x35, 0x07, 0x0f, 0x0e, 0x85, 0x07, 0x0f, 0x0e, 0x0d, 0x00, 0x4f, 0x0e, - 0x9d, 0x00, 0x4f, 0x0e, 0x21, 0x01, 0x4f, 0x0e, 0x2d, 0x02, 0x4f, 0x0e, - 0x3d, 0x02, 0x4f, 0x0e, 0x91, 0x07, 0x8f, 0x0e, 0x9d, 0x07, 0x8f, 0x0e, - 0xa9, 0x07, 0x8f, 0x0e, 0xb5, 0x07, 0x8f, 0x0e, 0xd9, 0x07, 0x8f, 0x0e, - 0xed, 0x07, 0x8f, 0x0e, 0xd1, 0x00, 0xcf, 0x0e, 0xd9, 0x00, 0xcf, 0x0e, - 0xe1, 0x00, 0xcf, 0x0e, 0xf5, 0x00, 0xcf, 0x0e, 0x75, 0x00, 0x00, 0x00, - 0xf1, 0x05, 0x8f, 0x0c, 0x11, 0x06, 0x8f, 0x0c, 0x15, 0x06, 0x8f, 0x0c, - 0x1d, 0x06, 0x8f, 0x0c, 0xa5, 0x00, 0xcf, 0x0c, 0x05, 0x02, 0xcf, 0x0c, - 0xd5, 0x04, 0x80, 0x00, 0x55, 0x04, 0x4f, 0x0e, 0x69, 0x04, 0x4f, 0x0e, - 0xa1, 0x04, 0x4f, 0x0e, 0xd1, 0x04, 0x4f, 0x0e, 0x69, 0x03, 0x8f, 0x0e, - 0x01, 0x06, 0x0f, 0x0f, 0xab, 0x26, 0xe0, 0x7c, 0x00, 0x00, 0x4f, 0x00, - 0x6f, 0x24, 0x3f, 0x00, 0xe2, 0xc2, 0x1a, 0x0f, 0xaf, 0x0a, 0x08, 0x45, - 0x06, 0x1d, 0xc5, 0x11, 0xc2, 0xc6, 0xe0, 0x78, 0xf1, 0xc0, 0x00, 0x16, - 0x83, 0x70, 0x80, 0x00, 0xc4, 0x23, 0x05, 0xeb, 0x8e, 0x0f, 0xcf, 0x0a, - 0x04, 0xf0, 0xc3, 0x40, 0x00, 0x00, 0xfd, 0xff, 0xd1, 0xc0, 0xe0, 0x7f, - 0x0e, 0x78, 0xe0, 0x78, 0xf1, 0xc0, 0xc3, 0x42, 0x80, 0x00, 0xc8, 0x22, - 0x20, 0x82, 0x20, 0x81, 0x1b, 0x09, 0x80, 0x0f, 0xa5, 0x5a, 0x6b, 0xb6, - 0x24, 0x8a, 0x89, 0xe9, 0x2c, 0x71, 0x14, 0x70, 0x27, 0xd8, 0x24, 0xaa, - 0x05, 0xf2, 0x27, 0xd8, 0x2b, 0x5b, 0xd1, 0xc0, 0xe0, 0x7e, 0xab, 0x20, - 0xe0, 0x0c, 0xab, 0x21, 0x61, 0x0a, 0xff, 0xf1, 0x05, 0xe8, 0x00, 0x18, - 0x84, 0x0f, 0x00, 0x00, 0xe0, 0x07, 0x06, 0xe9, 0x00, 0x19, 0x82, 0x0f, - 0x00, 0x00, 0x09, 0x00, 0x05, 0xea, 0x00, 0x1a, 0x82, 0x0f, 0x00, 0x00, - 0x07, 0x00, 0x06, 0xeb, 0x00, 0x1b, 0x82, 0x0f, 0x00, 0x00, 0x03, 0x00, - 0x0d, 0x0c, 0x10, 0x00, 0x00, 0x1c, 0x82, 0x0f, 0x00, 0x00, 0x0b, 0x00, - 0xb4, 0x70, 0xe0, 0x7c, 0x00, 0x1d, 0x82, 0x0f, 0x00, 0x00, 0x35, 0x00, - 0xe0, 0x7e, 0xe0, 0x78, 0xc3, 0x42, 0x7f, 0x00, 0x3c, 0x8f, 0xc3, 0x43, - 0x7f, 0x00, 0x40, 0x8f, 0x75, 0x01, 0x8f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, - 0x20, 0x8f, 0xc3, 0x43, 0x7f, 0x00, 0x24, 0x8f, 0x65, 0x01, 0x8f, 0x0b, - 0xc3, 0x42, 0x7f, 0x00, 0x10, 0x8f, 0xc3, 0x43, 0x7f, 0x00, 0x14, 0x8f, - 0x55, 0x01, 0x8f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, 0x1c, 0x8f, 0xc3, 0x43, - 0x7f, 0x00, 0x20, 0x8f, 0x45, 0x01, 0x8f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, - 0x14, 0x8f, 0xc3, 0x43, 0x7f, 0x00, 0x1c, 0x8f, 0x35, 0x01, 0x8f, 0x0b, - 0xc3, 0x42, 0x7f, 0x00, 0x24, 0x8f, 0xc3, 0x43, 0x7f, 0x00, 0x3c, 0x8f, - 0x15, 0x01, 0x8f, 0x0b, 0xf1, 0xc0, 0xa1, 0xc1, 0x2c, 0x70, 0xc3, 0x42, - 0x7f, 0x00, 0x40, 0x8f, 0xc3, 0x43, 0x7f, 0x00, 0x44, 0x8f, 0x8c, 0x76, - 0xc2, 0x08, 0x2f, 0x0d, 0x40, 0x24, 0x05, 0x30, 0x00, 0xc0, 0x87, 0x74, - 0xd1, 0xc0, 0xe0, 0x7e, 0xc3, 0x42, 0x7f, 0x00, 0x48, 0x8f, 0xc3, 0x43, - 0x7f, 0x00, 0x48, 0x8f, 0xe1, 0x00, 0x8f, 0x0b, 0xf1, 0xc0, 0xa1, 0xc1, - 0x0c, 0x70, 0x2c, 0x70, 0xc3, 0x42, 0x7f, 0x00, 0x44, 0x8f, 0xc3, 0x43, - 0x7f, 0x00, 0x44, 0x8f, 0x8c, 0x74, 0x8e, 0x08, 0x2f, 0x0d, 0x40, 0x24, - 0xc5, 0x30, 0x03, 0x14, 0x80, 0x30, 0x87, 0x74, 0xd1, 0xc0, 0xe0, 0x7e, - 0xc3, 0x42, 0x7f, 0x00, 0x48, 0x8f, 0xc3, 0x43, 0x7f, 0x00, 0x48, 0x8f, - 0xa9, 0x00, 0x8f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, 0x48, 0x8f, 0xc3, 0x43, - 0x7f, 0x00, 0x48, 0x8f, 0x99, 0x00, 0x8f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, - 0x40, 0x8f, 0x99, 0x00, 0xaf, 0x0b, 0x40, 0x43, 0x00, 0x16, 0x80, 0x70, - 0x7f, 0x00, 0xfd, 0x93, 0x61, 0x04, 0xaf, 0x0e, 0x79, 0x20, 0x00, 0x00, - 0x00, 0x16, 0x80, 0x70, 0x7f, 0x00, 0xfd, 0x93, 0x14, 0x70, 0xe0, 0x7d, - 0x4d, 0x04, 0xaf, 0x0e, 0x0c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x08, 0xe8, 0x03, - 0x30, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x00, 0xd8, 0xbc, 0x60, 0x00, 0x64, 0xbd, 0x60, 0x00, - 0x50, 0xbc, 0x60, 0x00, 0x40, 0xbe, 0x60, 0x00, 0x84, 0xbc, 0x60, 0x00, - 0x08, 0xbc, 0x60, 0x00, 0xd4, 0xbb, 0x60, 0x00, 0x90, 0xbc, 0x60, 0x00, - 0x40, 0xb3, 0x60, 0x00, 0x20, 0xbd, 0x60, 0x00, 0x44, 0xbc, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x3a, 0x80, 0x00, 0x90, 0x96, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x1e, 0x05, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, - 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x69, 0x2f, 0xe8, 0x03, 0x31, 0x01, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0xb4, 0xb4, 0x60, 0x00, 0x40, 0xb5, 0x60, 0x00, 0x2c, 0xb4, 0x60, 0x00, - 0xa8, 0xb5, 0x60, 0x00, 0x60, 0xb4, 0x60, 0x00, 0xbc, 0xb3, 0x60, 0x00, - 0x88, 0xb3, 0x60, 0x00, 0x6c, 0xb4, 0x60, 0x00, 0x38, 0xb4, 0x60, 0x00, - 0xfc, 0xb4, 0x60, 0x00, 0x20, 0xb4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7c, 0x3a, 0x80, 0x00, 0x3c, 0x9d, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0xe8, 0x03, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x7d, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xe9, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x34, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x49, 0x61, 0x00, - 0xe8, 0x48, 0x61, 0x00, 0xd8, 0x48, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd8, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, - 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xec, 0x27, 0x61, 0x00, 0x7c, 0x27, 0x61, 0x00, 0x6c, 0x27, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x22, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x01, 0x00, 0x00, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x9c, 0x60, 0x00, 0xec, 0x9b, 0x60, 0x00, - 0xd0, 0x9b, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x21, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8c, 0xe4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x94, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x7b, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xcc, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x7b, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x68, 0x61, 0x00, 0x1c, 0x68, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x68, 0x61, 0x00, 0xd0, 0x67, 0x61, 0x00, 0xb8, 0x67, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x23, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x61, 0x00, - 0x34, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, - 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf4, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc8, 0x00, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x17, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x7e, 0x61, 0x00, 0x1c, 0x7d, 0x61, 0x00, - 0x98, 0x7d, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0xec, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x35, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x70, 0x61, 0x00, - 0xf4, 0x6f, 0x61, 0x00, 0xe4, 0x6f, 0x61, 0x00, 0x7c, 0x70, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xc8, 0x00, - 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0xe9, 0x60, 0x00, 0x98, 0xe4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xc8, 0x00, 0x00, - 0x02, 0x12, 0x00, 0x00, 0xb0, 0x2d, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x8f, 0x7f, 0x00, - 0x14, 0x8f, 0x7f, 0x00, 0x14, 0x8f, 0x7f, 0x00, 0x1c, 0x8f, 0x7f, 0x00, - 0x1c, 0x8f, 0x7f, 0x00, 0x20, 0x8f, 0x7f, 0x00, 0x20, 0x8f, 0x7f, 0x00, - 0x24, 0x8f, 0x7f, 0x00, 0x24, 0x8f, 0x7f, 0x00, 0x3c, 0x8f, 0x7f, 0x00, - 0x3c, 0x8f, 0x7f, 0x00, 0x40, 0x8f, 0x7f, 0x00, 0x40, 0x8f, 0x7f, 0x00, - 0x40, 0x8f, 0x7f, 0x00, 0x40, 0x8f, 0x7f, 0x00, 0x44, 0x8f, 0x7f, 0x00, - 0x44, 0x8f, 0x7f, 0x00, 0x44, 0x8f, 0x7f, 0x00, 0x44, 0x8f, 0x7f, 0x00, - 0x48, 0x8f, 0x7f, 0x00, 0x48, 0x8f, 0x7f, 0x00, 0x48, 0x8f, 0x7f, 0x00, - 0x48, 0x8f, 0x7f, 0x00, 0x48, 0x8f, 0x7f, 0x00, 0x48, 0x8f, 0x7f, 0x00, - 0x48, 0x8f, 0x7f, 0x00, 0xab, 0x26, 0x0a, 0x74, 0x7f, 0x00, 0x98, 0x80, - 0xe0, 0x7e, 0xe0, 0x78, 0xc3, 0x40, 0x7f, 0x00, 0x00, 0x80, 0x6b, 0x20, - 0x40, 0x09, 0xdb, 0x44, 0x80, 0x00, 0x50, 0x20, 0xdb, 0x42, 0x80, 0x00, - 0x50, 0x21, 0x0a, 0x22, 0x80, 0x8f, 0x7f, 0x00, 0x50, 0x96, 0xe2, 0x20, - 0x82, 0x00, 0x6f, 0x70, 0x22, 0x20, 0x80, 0x0f, 0x7f, 0x00, 0x4c, 0x9d, - 0x29, 0x07, 0x8f, 0x03, 0x94, 0xa1, 0x7f, 0x00, 0x25, 0x00, 0x03, 0x01, - 0x00, 0x09, 0x0c, 0x96, 0x00, 0x10, 0x3c, 0x00, 0x01, 0x00, 0x01, 0x00, - 0xb0, 0x04, 0x52, 0x03, 0x00, 0x00, 0x40, 0x41, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0xb4, 0x73, 0x00, 0x00, 0x00, - 0x82, 0x06, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, - 0xb3, 0x3e, 0xcd, 0xcc, 0x0c, 0x3f, 0xcd, 0xcc, 0x0c, 0x3f, 0x33, 0x33, - 0x33, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x00, - 0x09, 0x04, 0x02, 0x17, 0xb7, 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, - 0xb7, 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x37, 0x86, 0x35, 0xbd, - 0x37, 0x86, 0x35, 0xbd, 0x37, 0x86, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x42, 0xe8, 0x03, 0x05, 0x00, 0x2d, 0x00, 0x84, 0x03, 0xb0, - 0x04, 0x96, 0x00, 0x08, 0x96, 0x00, 0x0e, 0x01, 0x03, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0x33, 0xb3, 0x3e, 0xcd, 0xcc, 0x0c, 0x3f, 0xcd, - 0xcc, 0x0c, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0xcd, - 0xcc, 0x4c, 0x3e, 0x01, 0x06, 0x04, 0x02, 0x00, 0x05, 0x00, 0x41, 0x01, - 0x40, 0x01, 0x24, 0x00, 0x78, 0x00, 0x04, 0x01, 0x14, 0x14, 0x02, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x80, 0x3f, 0xcd, 0xcc, 0xcc, 0x3d, 0x9a, 0x99, - 0x99, 0x3f, 0xcd, 0xcc, 0xcc, 0x3e, 0xcd, 0xcc, 0xcc, 0x3d, 0x01, 0x00, - 0x14, 0x00, 0x10, 0x04, 0x78, 0x00, 0x08, 0x00, 0x00, 0x05, 0x9a, 0x99, - 0x19, 0x3f, 0x9a, 0x99, 0x19, 0x3f, 0x50, 0x00, 0x09, 0x00, 0x1e, 0x00, - 0xe8, 0x03, 0x50, 0x00, 0x41, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x80, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x40, 0xb5, 0xfe, 0x16, 0x37, 0xb5, 0xfe, 0x16, 0x37, 0xb5, 0xfe, 0x16, - 0x37, 0x8b, 0xde, 0xa9, 0x38, 0x00, 0x00, 0xe0, 0x40, 0x0e, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xcd, 0xcc, 0xcc, 0x3d, 0x01, 0x09, 0x09, 0x03, 0x13, 0x32, - 0xa3, 0x04, 0xcd, 0x0c, 0x19, 0x28, 0x04, 0x0e, 0x00, 0x03, 0x9a, 0x99, - 0x99, 0x3e, 0x9a, 0x99, 0x99, 0x3e, 0xcd, 0xcc, 0xcc, 0x3e, 0x9a, 0x99, - 0x19, 0x3f, 0x9a, 0x99, 0x99, 0x3e, 0x00, 0x00, 0x80, 0x3e, 0x9a, 0x99, - 0x99, 0x3e, 0xec, 0x51, 0xb8, 0x3e, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, - 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, - 0x4c, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e, 0xcd, 0xcc, - 0x4c, 0x3e, 0x01, 0xc2, 0xb8, 0xb2, 0x3e, 0x35, 0xfa, 0x8e, 0x3c, 0x0a, - 0x00, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x50, 0x77, 0x56, 0x3d, - 0x0e, 0x00, 0x00, 0x80, 0x3e, 0x8f, 0xc2, 0xf5, 0x3c, 0x0a, 0xd7, 0xa3, - 0x3c, 0x64, 0x80, 0x34, 0x2d, 0x46, 0x01, 0x0a, 0x00, 0x50, 0x00, 0x00, - 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x09, 0x02, 0x00, 0x00, 0xc8, - 0x41, 0x00, 0x00, 0x80, 0x42, 0x00, 0x00, 0x80, 0x41, 0x00, 0x00, 0xc0, - 0x3f, 0xcd, 0xcc, 0x4c, 0x3d, 0xc2, 0xb8, 0xb2, 0x3d, 0x32, 0x25, 0x3b, - 0x18, 0x47, 0x00, 0x00, 0xa0, 0x40, 0x9a, 0x99, 0x19, 0x3f, 0x0a, 0xd7, - 0x23, 0x3c, 0x0a, 0xd7, 0x23, 0x3c, 0x02, 0x50, 0x77, 0x56, 0x3d, 0x00, - 0x01, 0xcd, 0xcc, 0x4c, 0x3f, 0x00, 0x00, 0x60, 0x40, 0x00, 0x00, 0x20, - 0x40, 0xcd, 0xcc, 0xcc, 0x3d, 0x04, 0x8f, 0xc2, 0xf5, 0x3c, 0x02, 0x01, - 0x02, 0x03, 0x04, 0x01, 0x0a, 0xb0, 0x04, 0x64, 0x00, 0x0a, 0xd7, 0x23, - 0x3c, 0x0a, 0xd7, 0x23, 0x3c, 0x01, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0xfa, 0x43, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0xa0, 0x3f, 0x00, 0x00, - 0x48, 0x42, 0x00, 0x00, 0x80, 0x3f, 0x9a, 0x99, 0x19, 0x3e, 0x9a, 0x99, - 0x99, 0x3d, 0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x96, 0x18, 0x4b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, - 0x18, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x96, 0x18, 0x4b, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xd7, - 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, - 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xd7, - 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xc5, 0x27, 0x37, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xc5, - 0x27, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xac, 0xc5, 0x27, 0x37, 0x00, 0x24, 0x74, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, - 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x24, 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x03, 0x04, 0x19, 0x40, - 0x12, 0x18, 0x00, 0x40, 0x72, 0x08, 0x00, 0x0e, 0xb3, 0x80, 0x00, 0x00, - 0x0e, 0x00, 0x01, 0x01, 0x01, 0x09, 0x0c, 0x88, 0x13, 0x10, 0x01, 0x01, - 0x71, 0x2a, 0x00, 0x00, 0xf1, 0xc0, 0xc3, 0x40, 0x80, 0x00, 0xd8, 0x22, - 0xc3, 0x42, 0x80, 0x00, 0x84, 0x23, 0x2c, 0x70, 0xd6, 0x08, 0x2f, 0x0d, - 0x02, 0x7a, 0x12, 0x08, 0x00, 0x00, 0x32, 0x0c, 0x00, 0x00, 0xd1, 0xc0, - 0xe0, 0x7e, 0xe0, 0x78, 0xe8, 0xc3, 0xa1, 0xc1, 0xc3, 0x40, 0x7f, 0x00, - 0xc0, 0xa4, 0x32, 0xe8, 0xcb, 0x46, 0x7f, 0x00, 0x3c, 0xa3, 0xea, 0x0b, - 0xef, 0x0e, 0xc1, 0x40, 0xab, 0xe8, 0x03, 0x8e, 0x0f, 0x08, 0xf4, 0x00, - 0xe4, 0x6e, 0xa0, 0x87, 0x40, 0x26, 0x0f, 0x12, 0x10, 0xf0, 0xcb, 0x45, - 0x60, 0x00, 0xe8, 0x99, 0x19, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x02, 0x40, - 0xc1, 0x41, 0x60, 0x7d, 0x81, 0x42, 0x03, 0x6e, 0x6c, 0x20, 0x40, 0x00, - 0x1f, 0x67, 0x08, 0xe7, 0xc1, 0x87, 0x80, 0x87, 0xd5, 0x70, 0x0c, 0xf2, - 0x40, 0x27, 0x10, 0x12, 0x30, 0xf6, 0xd3, 0x7a, 0x2c, 0x70, 0x6a, 0x08, - 0x2f, 0x0d, 0x81, 0x40, 0x0a, 0x47, 0xf4, 0xf1, 0x04, 0xec, 0x04, 0x6f, - 0xe4, 0x68, 0xf0, 0xf1, 0x0c, 0x70, 0xc8, 0xc7, 0xe8, 0xc3, 0xa5, 0xc1, - 0x23, 0x5b, 0x08, 0x47, 0x21, 0x5b, 0x08, 0x46, 0x0c, 0x71, 0xe1, 0x41, - 0xc1, 0x42, 0x22, 0x5b, 0x10, 0x40, 0x0e, 0xd8, 0xe1, 0x41, 0xc1, 0x42, - 0x22, 0x5b, 0x08, 0x45, 0x10, 0xd8, 0xe1, 0x41, 0xc1, 0x42, 0x22, 0x5b, - 0x08, 0x44, 0xae, 0x09, 0x20, 0x00, 0x02, 0x40, 0x00, 0x42, 0xa6, 0x09, - 0x20, 0x00, 0xa1, 0x40, 0x00, 0x43, 0x9e, 0x09, 0x20, 0x00, 0x81, 0x40, - 0x08, 0x44, 0xcb, 0x46, 0x80, 0x00, 0xa0, 0x3b, 0x07, 0xed, 0x08, 0x8d, - 0x0b, 0x08, 0x11, 0x02, 0x00, 0x1e, 0x03, 0x10, 0x0d, 0xf0, 0xc3, 0x41, - 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x16, 0x0d, 0x71, 0x80, 0x00, 0xea, 0x3a, - 0x00, 0x91, 0x00, 0x1e, 0x43, 0x10, 0xa6, 0x78, 0x00, 0xb1, 0x30, 0xd9, - 0x80, 0xc0, 0xab, 0x21, 0xa0, 0x0d, 0x0c, 0x1c, 0x80, 0x3f, 0x7f, 0x00, - 0xb8, 0x96, 0x40, 0xc2, 0x42, 0xc4, 0xda, 0x0f, 0x2f, 0x0a, 0x41, 0xc3, - 0x2f, 0x21, 0x07, 0x80, 0xad, 0x71, 0x0f, 0xf2, 0x40, 0x29, 0x02, 0x06, - 0x5a, 0xd8, 0xad, 0x70, 0xab, 0x22, 0x60, 0x0d, 0xab, 0x25, 0x60, 0x1d, - 0xab, 0x25, 0x60, 0x1d, 0xab, 0x21, 0x60, 0x0d, 0x2b, 0x5b, 0x15, 0xed, - 0x11, 0x14, 0x80, 0x30, 0x24, 0xc1, 0x12, 0x14, 0x82, 0x30, 0x13, 0x14, - 0x83, 0x30, 0x79, 0x20, 0x0c, 0x00, 0x79, 0x21, 0x00, 0x00, 0x79, 0x22, - 0x02, 0x00, 0x84, 0x78, 0x79, 0x23, 0x01, 0x00, 0x44, 0x78, 0x0b, 0x79, - 0x03, 0xf4, 0x5b, 0xd8, 0x2b, 0x5b, 0x32, 0x0b, 0xef, 0x0a, 0x0c, 0x70, - 0x0c, 0x72, 0xc3, 0x41, 0x60, 0x00, 0x08, 0x9f, 0x2a, 0x5b, 0x0c, 0x72, - 0xc3, 0x41, 0x60, 0x00, 0x64, 0x9d, 0x29, 0x5b, 0x0f, 0xd8, 0xc3, 0x41, - 0x61, 0x00, 0x18, 0x0f, 0x2a, 0x5b, 0x0f, 0xd8, 0xc3, 0x41, 0x61, 0x00, - 0x48, 0x0e, 0x29, 0x5b, 0x3f, 0xd8, 0xab, 0x20, 0xa0, 0x0d, 0xc8, 0xc7, - 0xf2, 0xc2, 0x30, 0x44, 0x10, 0x43, 0x1b, 0xd9, 0x0c, 0x70, 0x70, 0x42, - 0x50, 0x45, 0xab, 0x21, 0xa0, 0x0d, 0x20, 0x5b, 0xc3, 0x40, 0x7f, 0x00, - 0x48, 0x8f, 0xc3, 0x41, 0x7f, 0x00, 0x60, 0x90, 0x02, 0x79, 0xd3, 0x41, - 0x7f, 0x00, 0x60, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0x88, 0x94, 0xd3, 0x40, - 0x7f, 0x00, 0x88, 0x94, 0xc3, 0x42, 0x7f, 0x00, 0xb8, 0x95, 0x02, 0x23, - 0x4e, 0x04, 0x02, 0x22, 0x0d, 0x04, 0x84, 0x29, 0x02, 0x03, 0xcb, 0x47, - 0x80, 0x00, 0xc8, 0x22, 0x84, 0x2e, 0x01, 0x13, 0x25, 0xaf, 0x2f, 0x79, - 0x84, 0x2d, 0x01, 0x13, 0xc6, 0xaf, 0x7a, 0x0a, 0xef, 0x0d, 0xa7, 0xaf, - 0xcf, 0x79, 0xba, 0x0a, 0xef, 0x0d, 0x22, 0x40, 0xaf, 0x79, 0xa6, 0x0a, - 0xef, 0x0d, 0x02, 0x40, 0xcb, 0x45, 0x7f, 0x00, 0xb8, 0x95, 0xb6, 0x09, - 0xef, 0x0d, 0xa1, 0x40, 0xaa, 0x20, 0xe1, 0x04, 0x82, 0x41, 0x05, 0x20, - 0x82, 0x0f, 0xb0, 0x2d, 0x00, 0x00, 0x62, 0x40, 0xaa, 0x0a, 0xaf, 0x0c, - 0xab, 0x22, 0xe1, 0x04, 0x2f, 0x21, 0x85, 0x04, 0x62, 0x0b, 0xaf, 0x0e, - 0xa2, 0x40, 0x66, 0x8f, 0x27, 0x8f, 0xc3, 0x40, 0x80, 0x00, 0xd0, 0x22, - 0x45, 0x8f, 0x00, 0x21, 0xc4, 0x00, 0x61, 0x80, 0x20, 0x80, 0x72, 0x08, - 0x20, 0x00, 0xa1, 0x40, 0x1d, 0xd9, 0x0c, 0x70, 0xab, 0x21, 0xa0, 0x0d, - 0x20, 0x5b, 0x16, 0x08, 0x00, 0x00, 0xd2, 0xc6, 0x00, 0x41, 0x14, 0x70, - 0x0c, 0x70, 0xe0, 0x7c, 0xe0, 0x7f, 0x16, 0x81, 0xe4, 0xc2, 0xad, 0x70, - 0xcb, 0x46, 0x7f, 0x00, 0xe8, 0x95, 0x08, 0x16, 0x00, 0x14, 0xfc, 0x16, - 0x01, 0x90, 0x02, 0x79, 0x22, 0xb9, 0x2f, 0x79, 0x09, 0x09, 0x92, 0x00, - 0xb2, 0x0f, 0x4f, 0x0c, 0xa5, 0x71, 0xeb, 0x0d, 0x54, 0x93, 0xc3, 0x42, - 0x7f, 0x00, 0x44, 0x8f, 0xc3, 0x43, 0x7f, 0x00, 0x48, 0x8f, 0x86, 0x0f, - 0xcf, 0x0a, 0xc4, 0xc6, 0xf1, 0xc0, 0x27, 0x5b, 0x14, 0x70, 0x0c, 0x71, - 0x04, 0xf4, 0x25, 0xd8, 0x2b, 0x5b, 0x0c, 0x70, 0xd1, 0xc0, 0xe0, 0x7e, - 0xf0, 0xc2, 0x50, 0x40, 0x10, 0xda, 0xab, 0x22, 0xa0, 0x0d, 0x55, 0x88, - 0x97, 0x88, 0xcc, 0x88, 0x70, 0x44, 0x76, 0x88, 0x14, 0x88, 0x08, 0xba, - 0x08, 0xbc, 0x45, 0x78, 0x05, 0x24, 0xc2, 0x10, 0x10, 0xba, 0x30, 0x41, - 0x0a, 0x23, 0x00, 0x21, 0xc3, 0x41, 0x00, 0x00, 0xaa, 0x0a, 0xad, 0x70, - 0x6d, 0x72, 0x4a, 0x24, 0x00, 0x72, 0xc3, 0xbe, 0x05, 0x7a, 0xa8, 0x20, - 0xc0, 0x05, 0x53, 0x22, 0x40, 0x00, 0x4f, 0x20, 0x43, 0x00, 0x15, 0x0b, - 0xb1, 0x00, 0x00, 0x2b, 0x43, 0x13, 0x66, 0x79, 0x14, 0x72, 0xcf, 0x21, - 0x41, 0x03, 0x07, 0xf2, 0x0b, 0x08, 0x71, 0x00, 0x00, 0x2b, 0x40, 0x13, - 0x05, 0x79, 0x22, 0xba, 0xa5, 0x72, 0x52, 0x6e, 0x0c, 0x71, 0xdb, 0x7c, - 0x6c, 0x73, 0x00, 0x28, 0x82, 0x00, 0x00, 0x2b, 0x00, 0x03, 0x06, 0x79, - 0xc1, 0x40, 0xab, 0x22, 0xa1, 0x0d, 0xab, 0x21, 0xe2, 0x03, 0x28, 0x5b, - 0xd5, 0x08, 0x30, 0x00, 0x1c, 0xd8, 0x4c, 0x72, 0xab, 0x20, 0xd0, 0x02, - 0x42, 0x20, 0xc1, 0x03, 0x04, 0x71, 0xf9, 0x09, 0x74, 0x84, 0xab, 0x22, - 0x88, 0x01, 0x4a, 0x24, 0x40, 0x71, 0x11, 0xd8, 0xa8, 0x20, 0xc0, 0x02, - 0x40, 0x20, 0x02, 0x04, 0x42, 0x20, 0x81, 0x03, 0x04, 0x71, 0xab, 0x22, - 0xd0, 0x02, 0xab, 0x21, 0x88, 0x01, 0x8d, 0x70, 0x4a, 0x24, 0x00, 0x73, - 0x0c, 0x70, 0xed, 0x71, 0xa8, 0x20, 0x00, 0x02, 0xa8, 0x48, 0x04, 0x71, - 0xab, 0x21, 0xd0, 0x02, 0xab, 0x27, 0x88, 0x11, 0x4a, 0x23, 0x80, 0x16, - 0x8a, 0x21, 0x10, 0x00, 0x19, 0xde, 0x8a, 0x20, 0x08, 0x00, 0x8a, 0x22, - 0x04, 0x00, 0x11, 0xdb, 0xad, 0x70, 0xd3, 0x42, 0x00, 0x00, 0xff, 0xff, - 0xab, 0x23, 0xd0, 0x12, 0xab, 0x24, 0x88, 0x11, 0xab, 0x21, 0xe1, 0x0c, - 0xab, 0x21, 0x62, 0x07, 0xab, 0x21, 0xa2, 0x06, 0xab, 0x26, 0xd0, 0x12, - 0xab, 0x27, 0x88, 0x11, 0xab, 0x20, 0xe2, 0x06, 0xab, 0x20, 0xe1, 0x0c, - 0xab, 0x20, 0x62, 0x07, 0xab, 0x20, 0xa2, 0x06, 0xab, 0x22, 0x62, 0x07, - 0xab, 0x22, 0xa2, 0x06, 0x3d, 0x08, 0x30, 0x20, 0xab, 0x23, 0xa0, 0x0d, - 0x22, 0x42, 0x0c, 0x70, 0x23, 0x92, 0x65, 0x8a, 0x55, 0x22, 0xc2, 0x08, - 0xc9, 0xb9, 0x44, 0x23, 0x03, 0x04, 0x3c, 0x21, 0x8e, 0x04, 0x79, 0x21, - 0x0f, 0x00, 0x24, 0xbb, 0xcb, 0x7f, 0x65, 0x78, 0x85, 0x71, 0xe5, 0x0c, - 0x24, 0x94, 0xca, 0x22, 0x42, 0x20, 0x07, 0xf0, 0xb0, 0xd8, 0x2b, 0x5b, - 0xad, 0x70, 0x13, 0xf0, 0x0c, 0x70, 0x12, 0x0b, 0x8f, 0x0c, 0xd2, 0x0a, - 0xaf, 0x0c, 0x42, 0x40, 0x22, 0x40, 0x02, 0x41, 0x82, 0x42, 0x7e, 0x0e, - 0xef, 0xff, 0x62, 0x43, 0x05, 0xe8, 0x12, 0xd8, 0xad, 0x71, 0xab, 0x20, - 0xa0, 0x0d, 0xa1, 0x40, 0xd0, 0xc6, 0xe0, 0x78, 0xe4, 0xc3, 0x82, 0x24, - 0x11, 0x39, 0x8a, 0x21, 0x0c, 0x08, 0x00, 0x24, 0x80, 0x3f, 0x00, 0x00, - 0x44, 0x01, 0x80, 0xc2, 0x38, 0x60, 0x0d, 0x0a, 0x25, 0x00, 0x40, 0xc2, - 0x00, 0x42, 0x40, 0xc0, 0x81, 0xc0, 0x56, 0x20, 0x00, 0x0a, 0x09, 0x0a, - 0x05, 0x00, 0x40, 0xc0, 0xcb, 0x45, 0x80, 0x00, 0xcc, 0x12, 0xcb, 0x46, - 0x80, 0x00, 0xc8, 0x22, 0xcb, 0x44, 0xa5, 0x5a, 0x6b, 0xb6, 0x00, 0x24, - 0x80, 0x3f, 0x00, 0x00, 0x44, 0x01, 0x28, 0xd9, 0x81, 0xc2, 0x10, 0xdb, - 0xa0, 0xa6, 0x0e, 0x0d, 0xef, 0xff, 0x80, 0xa5, 0x44, 0x6d, 0xc3, 0x41, - 0x80, 0x00, 0x00, 0x00, 0xc3, 0x43, 0x7f, 0x00, 0xe8, 0x95, 0xc3, 0x44, - 0x80, 0x00, 0x00, 0x00, 0xe2, 0x0c, 0xef, 0x0c, 0xa1, 0x40, 0x0c, 0x70, - 0xc4, 0xc7, 0xe0, 0x78, 0xf0, 0xc2, 0x70, 0x41, 0x50, 0x42, 0x30, 0x43, - 0x10, 0x44, 0xab, 0x0b, 0x30, 0x00, 0xcd, 0x70, 0x8a, 0x20, 0x01, 0x23, - 0x1a, 0x26, 0x0f, 0x14, 0x42, 0x77, 0xe1, 0x40, 0x24, 0x5b, 0x0d, 0x08, - 0x95, 0x00, 0x22, 0x1f, 0x83, 0x10, 0x0a, 0xf0, 0x11, 0x08, 0x34, 0x02, - 0xc1, 0x40, 0x9a, 0x20, 0x01, 0x03, 0x42, 0x70, 0x22, 0x18, 0xc3, 0x0f, - 0x4c, 0xd8, 0xcc, 0x78, 0x42, 0x70, 0x35, 0x88, 0xc1, 0xb9, 0x23, 0x09, - 0x71, 0x00, 0xa4, 0x68, 0x01, 0x95, 0x1b, 0xe8, 0x2f, 0x38, 0x03, 0x00, - 0xc3, 0x41, 0x7f, 0x00, 0x48, 0x8d, 0xe1, 0x42, 0x2d, 0x5b, 0x2b, 0x08, - 0x33, 0x00, 0x01, 0xad, 0x23, 0xf0, 0xa1, 0x40, 0x82, 0x41, 0x62, 0x42, - 0x42, 0x43, 0xa6, 0x08, 0x20, 0x00, 0x0a, 0x24, 0x40, 0x04, 0x09, 0xe8, - 0x00, 0x41, 0x00, 0x80, 0xfe, 0xe8, 0xe0, 0xa1, 0x03, 0xf0, 0x01, 0x1d, - 0xc3, 0x1f, 0xc9, 0x45, 0x9a, 0x25, 0x01, 0x13, 0x42, 0x75, 0x06, 0x85, - 0x0d, 0xe8, 0x39, 0x8d, 0xc1, 0xb9, 0x13, 0x09, 0xb1, 0x00, 0x0f, 0x78, - 0x82, 0x41, 0x62, 0x42, 0x22, 0x5b, 0x06, 0xa5, 0x03, 0xf0, 0x18, 0x1d, - 0x01, 0x10, 0xc5, 0x71, 0xad, 0x70, 0x6d, 0x0e, 0x64, 0x94, 0xed, 0x70, - 0x05, 0xf0, 0xad, 0x70, 0xed, 0x70, 0x03, 0xf0, 0xa5, 0x71, 0x49, 0x0d, - 0x65, 0x14, 0x4c, 0xde, 0xac, 0x7e, 0x00, 0x22, 0x90, 0xa3, 0xfa, 0xf3, - 0x02, 0x40, 0x25, 0x5b, 0x76, 0xe8, 0x42, 0x76, 0x15, 0x8e, 0xc1, 0xb8, - 0xe5, 0x08, 0x70, 0x80, 0x02, 0x40, 0x24, 0x5b, 0x08, 0x46, 0x02, 0x40, - 0x25, 0x5b, 0x24, 0x5b, 0xd5, 0x0e, 0x25, 0x90, 0xa1, 0x41, 0x9a, 0x21, - 0x01, 0x03, 0x02, 0x40, 0x00, 0x22, 0x4e, 0x20, 0x25, 0x5b, 0x24, 0x5b, - 0xed, 0x71, 0x22, 0x1e, 0x02, 0x10, 0xde, 0xf1, 0xf5, 0x70, 0xad, 0x70, - 0xed, 0x70, 0xdb, 0xf5, 0x0c, 0x71, 0xd0, 0xc6, 0xe2, 0xc2, 0x08, 0x45, - 0x01, 0x88, 0xc1, 0xb8, 0x17, 0x08, 0xb0, 0x00, 0x80, 0x8d, 0x14, 0x71, - 0x0c, 0x70, 0x09, 0xf7, 0x81, 0x40, 0x60, 0x41, 0x80, 0x42, 0x26, 0x5b, - 0x03, 0xf0, 0x81, 0x40, 0x22, 0x5b, 0x00, 0xa5, 0xc2, 0xc6, 0x00, 0x00, - 0x49, 0x4e, 0x49, 0x03, 0xfc, 0x99, 0x60, 0x00, 0x10, 0x8f, 0x7f, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x01, 0x78, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x8f, 0x7f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x21, 0x80, - 0x00, 0x80, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x8f, 0x7f, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x8f, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x90, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x8f, 0x7f, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x01, 0x38, 0x21, 0x80, 0x00, 0x70, 0x22, 0x80, 0x00, 0xa8, 0x22, 0x80, - 0x00, 0xa8, 0x22, 0x80, 0x00, 0xb8, 0x22, 0x80, 0x00, 0xc0, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x8f, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x01, 0x68, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x8f, 0x7f, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x01, 0x98, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x8f, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0xa0, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x20, 0x80, 0x00, 0xd4, 0x00, 0x00, 0x00, - 0x00, 0xfe, 0xff, 0x00, 0x0f, 0x01, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x03, 0x10, 0x10, 0xc4, - 0x04, 0x00, 0x00, 0x01, 0x02, 0x08, 0x0c, 0xd5, 0x60, 0x00, 0x06, 0x02, - 0x08, 0xd0, 0xd4, 0x60, 0x02, 0x06, 0x0f, 0x03, 0xff, 0x3f, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x05, 0x10, 0x80, 0xa5, 0x08, 0x00, 0x60, 0x00, 0x68, 0x02, 0x04, 0x58, - 0x5e, 0x61, 0x00, 0xa4, 0x37, 0x61, 0x00, 0xdc, 0xa2, 0x60, 0x00, 0x20, - 0x80, 0xc4, 0xa3, 0x60, 0x00, 0x40, 0x02, 0x04, 0xec, 0xaa, 0x60, 0x00, - 0x90, 0xa0, 0x60, 0x00, 0xa0, 0x02, 0x20, 0x82, 0x85, 0xf4, 0x02, 0x0c, - 0x30, 0x1c, 0x61, 0x00, 0x3c, 0x02, 0x0c, 0x03, 0x3a, 0x05, 0x02, 0x05, - 0x34, 0xd1, 0x60, 0x00, 0x03, 0x08, 0x94, 0x4a, 0x08, 0xd3, 0x05, 0x08, - 0x80, 0x06, 0x10, 0x9c, 0xd2, 0x05, 0x10, 0xac, 0x06, 0x10, 0x5c, 0x06, - 0x08, 0xc4, 0xd0, 0x05, 0x18, 0xe0, 0x10, 0xa7, 0x9d, 0x7f, 0x00, 0x0a, - 0x02, 0x40, 0x2c, 0x67, 0x61, 0x02, 0x06, 0x05, 0x03, 0x13, 0x80, 0xfc, - 0x8e, 0x05, 0x18, 0xec, 0x02, 0x08, 0x01, 0x00, 0x05, 0x16, 0x00, 0x00, - 0x48, 0x8f, 0x7f, 0x00, 0x60, 0x90, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h deleted file mode 100644 index b1880e5..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/firmware/Bosch_PCB_7183_di03_BMI160_BMM150-7183_di03.2.1.11696_170103.h +++ /dev/null @@ -1,867 +0,0 @@ -const unsigned char bhy1_fw[] = { - 0x2a, 0x65, 0x00, 0x1a, 0x9a, 0x31, 0x1b, 0xe7, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x28, 0x00, 0x00, 0xe8, 0x99, 0x7f, 0x00, 0x44, 0x19, 0x00, 0x00, - 0x68, 0x8d, 0x7f, 0x00, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, - 0x4a, 0x26, 0x00, 0x70, 0x4a, 0x26, 0x00, 0x70, 0xe8, 0x47, 0x60, 0x00, - 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, - 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, 0xe8, 0x47, 0x60, 0x00, - 0xe8, 0x47, 0x60, 0x00, 0x34, 0x50, 0x60, 0x00, 0xa4, 0x53, 0x60, 0x00, - 0x04, 0x52, 0x60, 0x00, 0xb4, 0x94, 0x60, 0x00, 0x68, 0x8d, 0x7f, 0x00, - 0x68, 0x8d, 0x7f, 0x00, 0x68, 0x8d, 0x7f, 0x00, 0x68, 0x8d, 0x7f, 0x00, - 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, - 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, 0x4c, 0x8d, 0x60, 0x00, - 0x59, 0x06, 0x4f, 0x06, 0x91, 0x07, 0x4f, 0x06, 0xb1, 0x02, 0x4f, 0x08, - 0xa1, 0x04, 0x4f, 0x08, 0xbd, 0x05, 0x4f, 0x08, 0x05, 0x01, 0x8f, 0x08, - 0x09, 0x01, 0x8f, 0x08, 0xb9, 0x03, 0x8f, 0x08, 0xc1, 0x03, 0x8f, 0x08, - 0xd1, 0x04, 0x8f, 0x08, 0x1d, 0x02, 0xcf, 0x08, 0x8d, 0x04, 0xcf, 0x08, - 0x8d, 0x07, 0xcf, 0x08, 0xc5, 0x07, 0xcf, 0x08, 0x69, 0x01, 0x0f, 0x09, - 0x99, 0x07, 0x4f, 0x09, 0xe9, 0x07, 0x4f, 0x09, 0x29, 0x00, 0x8f, 0x09, - 0x31, 0x00, 0x8f, 0x09, 0xd1, 0x00, 0x8f, 0x09, 0xa5, 0x01, 0x8f, 0x09, - 0xdd, 0x01, 0x8f, 0x09, 0x09, 0x03, 0x8f, 0x09, 0x85, 0x03, 0x8f, 0x09, - 0x49, 0x05, 0x8f, 0x09, 0x0d, 0x06, 0x8f, 0x09, 0xed, 0x07, 0x8f, 0x09, - 0xbd, 0x00, 0xcf, 0x09, 0x1d, 0x01, 0xcf, 0x09, 0x95, 0x01, 0xcf, 0x09, - 0x1d, 0x02, 0xcf, 0x09, 0x6d, 0x02, 0xcf, 0x09, 0xa5, 0x02, 0xcf, 0x09, - 0x41, 0x03, 0xcf, 0x09, 0x7d, 0x03, 0xcf, 0x09, 0xad, 0x05, 0xcf, 0x09, - 0x0d, 0x06, 0xcf, 0x09, 0x6d, 0x06, 0xcf, 0x09, 0xc1, 0x06, 0xcf, 0x09, - 0x85, 0x01, 0x0f, 0x0a, 0x11, 0x02, 0x0f, 0x0a, 0x31, 0x02, 0x0f, 0x0a, - 0xb5, 0x02, 0x0f, 0x0a, 0xb9, 0x03, 0x0f, 0x0a, 0x69, 0x07, 0x0f, 0x0a, - 0x05, 0x04, 0x4f, 0x0a, 0x2d, 0x07, 0x4f, 0x0a, 0x95, 0x00, 0x8f, 0x0a, - 0xad, 0x04, 0x8f, 0x0a, 0xd9, 0x05, 0x8f, 0x0a, 0x95, 0x06, 0x8f, 0x0a, - 0xed, 0x00, 0xcf, 0x0a, 0xf1, 0x00, 0xcf, 0x0a, 0xfd, 0x00, 0xcf, 0x0a, - 0x69, 0x01, 0xcf, 0x0a, 0x75, 0x01, 0xcf, 0x0a, 0x35, 0x02, 0xcf, 0x0a, - 0x05, 0x03, 0xcf, 0x0a, 0x09, 0x05, 0xcf, 0x0a, 0xfd, 0x05, 0xcf, 0x0a, - 0xb1, 0x06, 0xcf, 0x0a, 0x01, 0x02, 0x0f, 0x0b, 0x51, 0x05, 0x40, 0x00, - 0xd1, 0x02, 0x8f, 0x0b, 0x29, 0x03, 0x8f, 0x0b, 0x91, 0x03, 0x8f, 0x0b, - 0xbd, 0x03, 0x8f, 0x0b, 0xe1, 0x04, 0x8f, 0x0b, 0x25, 0x05, 0x8f, 0x0b, - 0xd5, 0x05, 0x8f, 0x0b, 0x39, 0x06, 0x8f, 0x0b, 0x91, 0x07, 0x8f, 0x0b, - 0x2d, 0x00, 0xcf, 0x0b, 0x49, 0x00, 0xcf, 0x0b, 0x01, 0x01, 0xcf, 0x0b, - 0xcd, 0x01, 0xcf, 0x0b, 0x79, 0x05, 0xcf, 0x0b, 0xc9, 0x05, 0xcf, 0x0b, - 0xb5, 0x07, 0xcf, 0x0b, 0x69, 0x00, 0x0f, 0x0c, 0x39, 0x05, 0x40, 0x00, - 0xcd, 0x00, 0x0f, 0x0c, 0xd5, 0x00, 0x0f, 0x0c, 0x45, 0x01, 0x0f, 0x0c, - 0x5d, 0x01, 0x0f, 0x0c, 0x75, 0x01, 0x0f, 0x0c, 0x0d, 0x02, 0x0f, 0x0c, - 0xbd, 0x04, 0x0f, 0x0c, 0xdd, 0x04, 0x0f, 0x0c, 0x01, 0x07, 0x0f, 0x0c, - 0x41, 0x07, 0x0f, 0x0c, 0x49, 0x07, 0x0f, 0x0c, 0xc9, 0x07, 0x0f, 0x0c, - 0x1d, 0x00, 0x4f, 0x0c, 0x65, 0x00, 0x4f, 0x0c, 0x49, 0x01, 0x4f, 0x0c, - 0x65, 0x01, 0x4f, 0x0c, 0x99, 0x01, 0x4f, 0x0c, 0x3d, 0x02, 0x4f, 0x0c, - 0x65, 0x02, 0x4f, 0x0c, 0xb1, 0x02, 0x4f, 0x0c, 0x61, 0x05, 0x4f, 0x0c, - 0xb1, 0x05, 0x4f, 0x0c, 0x45, 0x06, 0x4f, 0x0c, 0x79, 0x06, 0x4f, 0x0c, - 0x85, 0x06, 0x4f, 0x0c, 0x19, 0x07, 0x4f, 0x0c, 0x21, 0x00, 0x8f, 0x0c, - 0x6d, 0x00, 0x8f, 0x0c, 0x7d, 0x00, 0x8f, 0x0c, 0x7d, 0x04, 0x8f, 0x0c, - 0x85, 0x05, 0x8f, 0x0c, 0xc1, 0x03, 0xcf, 0x0c, 0xc9, 0x03, 0xcf, 0x0c, - 0x0d, 0x07, 0xcf, 0x0c, 0x51, 0x07, 0xcf, 0x0c, 0x61, 0x07, 0xcf, 0x0c, - 0xd9, 0x04, 0x40, 0x00, 0x25, 0x00, 0x0f, 0x0d, 0x4d, 0x00, 0x0f, 0x0d, - 0x6d, 0x00, 0x0f, 0x0d, 0x71, 0x00, 0x0f, 0x0d, 0x71, 0x00, 0x0f, 0x0d, - 0x89, 0x00, 0x0f, 0x0d, 0x91, 0x00, 0x0f, 0x0d, 0x99, 0x00, 0x0f, 0x0d, - 0xa1, 0x00, 0x0f, 0x0d, 0xa5, 0x00, 0x0f, 0x0d, 0xad, 0x00, 0x0f, 0x0d, - 0xbd, 0x00, 0x0f, 0x0d, 0xc9, 0x00, 0x0f, 0x0d, 0xd5, 0x00, 0x0f, 0x0d, - 0x89, 0x01, 0x0f, 0x0d, 0xf9, 0x01, 0x0f, 0x0d, 0x21, 0x03, 0x0f, 0x0d, - 0x65, 0x03, 0x0f, 0x0d, 0x1d, 0x04, 0x0f, 0x0d, 0x39, 0x04, 0x0f, 0x0d, - 0x45, 0x04, 0x0f, 0x0d, 0x4d, 0x04, 0x0f, 0x0d, 0x6d, 0x04, 0x0f, 0x0d, - 0x71, 0x04, 0x0f, 0x0d, 0xf5, 0x05, 0x0f, 0x0d, 0x3d, 0x06, 0x0f, 0x0d, - 0x05, 0x00, 0x4f, 0x0d, 0x51, 0x00, 0x4f, 0x0d, 0x8d, 0x00, 0x4f, 0x0d, - 0xed, 0x00, 0x4f, 0x0d, 0x21, 0x02, 0x4f, 0x0d, 0xbd, 0x02, 0x4f, 0x0d, - 0xc1, 0x03, 0x4f, 0x0d, 0x25, 0x04, 0x4f, 0x0d, 0x31, 0x04, 0x4f, 0x0d, - 0x8d, 0x04, 0x40, 0x00, 0x99, 0x04, 0x40, 0x00, 0xa5, 0x04, 0x40, 0x00, - 0xb1, 0x04, 0x40, 0x00, 0xbd, 0x04, 0x40, 0x00, 0xc9, 0x04, 0x40, 0x00, - 0xd5, 0x04, 0x40, 0x00, 0xf5, 0x04, 0x40, 0x00, 0x01, 0x05, 0x40, 0x00, - 0x25, 0x05, 0x40, 0x00, 0x31, 0x05, 0x40, 0x00, 0x3d, 0x05, 0x40, 0x00, - 0xc9, 0x04, 0x4f, 0x0d, 0xf1, 0x05, 0x4f, 0x0d, 0x31, 0x07, 0x4f, 0x0d, - 0x59, 0x07, 0x4f, 0x0d, 0x65, 0x07, 0x4f, 0x0d, 0xa9, 0x01, 0x8f, 0x0d, - 0xd1, 0x01, 0x8f, 0x0d, 0xdd, 0x01, 0x8f, 0x0d, 0xe5, 0x01, 0x8f, 0x0d, - 0x09, 0x02, 0x8f, 0x0d, 0x2d, 0x02, 0x8f, 0x0d, 0x7d, 0x02, 0x8f, 0x0d, - 0x3d, 0x03, 0x8f, 0x0d, 0x6d, 0x04, 0x8f, 0x0d, 0x49, 0x05, 0x8f, 0x0d, - 0x59, 0x05, 0x8f, 0x0d, 0x91, 0x05, 0x8f, 0x0d, 0xd5, 0x05, 0x8f, 0x0d, - 0xf1, 0x00, 0xcf, 0x0d, 0x21, 0x02, 0xcf, 0x0d, 0xfd, 0x02, 0xcf, 0x0d, - 0xbd, 0x04, 0xcf, 0x0d, 0x89, 0x00, 0x0f, 0x0e, 0xc1, 0x04, 0x0f, 0x0e, - 0xf1, 0x05, 0x0f, 0x0e, 0x5d, 0x07, 0x0f, 0x0e, 0xc9, 0x07, 0x0f, 0x0e, - 0x89, 0x05, 0x8f, 0x0e, 0x79, 0x06, 0x8f, 0x0e, 0xa1, 0x06, 0x8f, 0x0e, - 0x1d, 0x07, 0x8f, 0x0e, 0x6d, 0x07, 0x8f, 0x0e, 0x11, 0x00, 0xcf, 0x0e, - 0x4d, 0x01, 0xcf, 0x0e, 0x71, 0x01, 0xcf, 0x0e, 0xbd, 0x01, 0xcf, 0x0e, - 0xcd, 0x01, 0xcf, 0x0e, 0x25, 0x02, 0xcf, 0x0e, 0x75, 0x02, 0xcf, 0x0e, - 0xbd, 0x02, 0xcf, 0x0e, 0xa1, 0x03, 0xcf, 0x0e, 0x2d, 0x04, 0xcf, 0x0e, - 0x75, 0x04, 0xcf, 0x0e, 0x81, 0x04, 0xcf, 0x0e, 0xa5, 0x04, 0xcf, 0x0e, - 0xe1, 0x04, 0xcf, 0x0e, 0x11, 0x05, 0xcf, 0x0e, 0x65, 0x05, 0xcf, 0x0e, - 0xd5, 0x05, 0xcf, 0x0e, 0x2d, 0x06, 0xcf, 0x0e, 0xbd, 0x07, 0xcf, 0x0e, - 0x01, 0x00, 0x0f, 0x0f, 0x25, 0x00, 0x0f, 0x0f, 0x5d, 0x04, 0x0f, 0x0f, - 0x19, 0x05, 0x0f, 0x0f, 0x1d, 0x03, 0x4f, 0x0f, 0x99, 0x04, 0x4f, 0x0f, - 0x21, 0x05, 0x4f, 0x0f, 0x8d, 0x05, 0x4f, 0x0f, 0xa9, 0x05, 0x4f, 0x0f, - 0xe1, 0x05, 0x4f, 0x0f, 0x81, 0x06, 0x4f, 0x0f, 0x95, 0x06, 0x4f, 0x0f, - 0xad, 0x06, 0x4f, 0x0f, 0x01, 0x07, 0x4f, 0x0f, 0x1d, 0x07, 0x4f, 0x0f, - 0x31, 0x07, 0x4f, 0x0f, 0xc5, 0x07, 0x4f, 0x0f, 0xe1, 0x07, 0x4f, 0x0f, - 0x21, 0x00, 0x8f, 0x0f, 0x85, 0x00, 0x8f, 0x0f, 0x9d, 0x00, 0x8f, 0x0f, - 0xdd, 0x00, 0x8f, 0x0f, 0xe5, 0x00, 0x8f, 0x0f, 0x7d, 0x01, 0x8f, 0x0f, - 0x9d, 0x01, 0x8f, 0x0f, 0xb1, 0x01, 0x8f, 0x0f, 0xd5, 0x01, 0x8f, 0x0f, - 0x2d, 0x02, 0x8f, 0x0f, 0x71, 0x02, 0x8f, 0x0f, 0x09, 0x03, 0x8f, 0x0f, - 0x35, 0x03, 0x8f, 0x0f, 0x71, 0x03, 0x8f, 0x0f, 0x69, 0x04, 0x8f, 0x0f, - 0xc9, 0x04, 0x8f, 0x0f, 0x7d, 0x00, 0xcf, 0x0f, 0x91, 0x02, 0xcf, 0x0f, - 0x15, 0x03, 0x4f, 0x09, 0xbd, 0x03, 0x8f, 0x0d, 0x41, 0x03, 0xcf, 0x0a, - 0x65, 0x04, 0xcf, 0x0a, 0x99, 0x04, 0xcf, 0x0a, 0x09, 0x05, 0xcf, 0x0a, - 0x49, 0x05, 0xcf, 0x0a, 0x61, 0x05, 0xcf, 0x0a, 0xb1, 0x06, 0xcf, 0x0a, - 0xb9, 0x06, 0xcf, 0x0a, 0xf1, 0x06, 0xcf, 0x0a, 0x31, 0x07, 0xcf, 0x0a, - 0x75, 0x07, 0xcf, 0x0a, 0xd9, 0x05, 0x8f, 0x0b, 0x71, 0x06, 0x8f, 0x0b, - 0x6d, 0x06, 0x8f, 0x0a, 0x8d, 0x06, 0x8f, 0x0a, 0x31, 0x07, 0x8f, 0x0a, - 0xe5, 0x07, 0x8f, 0x0a, 0x69, 0x00, 0xcf, 0x0a, 0xc1, 0x00, 0xcf, 0x0a, - 0x55, 0x01, 0xcf, 0x0a, 0x89, 0x02, 0xcf, 0x0a, 0xc1, 0x05, 0xcf, 0x0a, - 0xbd, 0x06, 0xcf, 0x0d, 0x11, 0x07, 0xcf, 0x0d, 0xd9, 0x01, 0x8f, 0x04, - 0x09, 0x02, 0x8f, 0x04, 0x15, 0x02, 0x8f, 0x04, 0x21, 0x02, 0x8f, 0x04, - 0x39, 0x02, 0x8f, 0x04, 0x5d, 0x02, 0x8f, 0x04, 0x69, 0x02, 0x8f, 0x04, - 0x75, 0x02, 0x8f, 0x04, 0x49, 0x03, 0x8f, 0x04, 0x89, 0x03, 0x8f, 0x04, - 0xf1, 0x04, 0x8f, 0x04, 0x51, 0x05, 0x8f, 0x04, 0x8d, 0x05, 0x8f, 0x04, - 0xa1, 0x05, 0x8f, 0x04, 0xf1, 0x05, 0x8f, 0x04, 0x21, 0x06, 0x8f, 0x04, - 0x59, 0x07, 0x8f, 0x04, 0x6d, 0x07, 0x8f, 0x04, 0xc5, 0x07, 0x8f, 0x04, - 0xf1, 0x00, 0xcf, 0x04, 0xfd, 0x00, 0xcf, 0x04, 0x05, 0x01, 0xcf, 0x04, - 0x95, 0x01, 0xcf, 0x04, 0xfd, 0x01, 0xcf, 0x04, 0x41, 0x02, 0xcf, 0x04, - 0x55, 0x02, 0xcf, 0x04, 0xb9, 0x02, 0xcf, 0x04, 0xbd, 0x02, 0xcf, 0x04, - 0xc1, 0x02, 0xcf, 0x04, 0x05, 0x03, 0xcf, 0x04, 0x0d, 0x03, 0xcf, 0x04, - 0x11, 0x03, 0xcf, 0x04, 0x15, 0x03, 0xcf, 0x04, 0x19, 0x03, 0xcf, 0x04, - 0x21, 0x03, 0xcf, 0x04, 0x45, 0x03, 0xcf, 0x04, 0x4d, 0x03, 0xcf, 0x04, - 0x61, 0x03, 0xcf, 0x04, 0x71, 0x03, 0xcf, 0x04, 0xc9, 0x03, 0xcf, 0x04, - 0xdd, 0x03, 0xcf, 0x04, 0x49, 0x05, 0xcf, 0x04, 0x55, 0x05, 0xcf, 0x04, - 0x61, 0x05, 0xcf, 0x04, 0x65, 0x05, 0xcf, 0x04, 0x69, 0x05, 0xcf, 0x04, - 0x6d, 0x05, 0xcf, 0x04, 0x99, 0x05, 0xcf, 0x04, 0x2d, 0x00, 0x0f, 0x05, - 0xad, 0x00, 0x0f, 0x05, 0xf9, 0x00, 0x0f, 0x05, 0x41, 0x01, 0x0f, 0x05, - 0xe1, 0x01, 0x0f, 0x05, 0x09, 0x02, 0x0f, 0x05, 0xf1, 0x02, 0x0f, 0x05, - 0xfd, 0x02, 0x0f, 0x05, 0x21, 0x03, 0x0f, 0x05, 0x3d, 0x03, 0x0f, 0x05, - 0x91, 0x03, 0x0f, 0x05, 0xad, 0x03, 0x0f, 0x05, 0xb9, 0x03, 0x0f, 0x05, - 0xdd, 0x03, 0x0f, 0x05, 0xed, 0x03, 0x0f, 0x05, 0xf5, 0x03, 0x0f, 0x05, - 0x65, 0x04, 0x0f, 0x05, 0x15, 0x06, 0x0f, 0x05, 0xa1, 0x06, 0x0f, 0x05, - 0xb1, 0x06, 0x0f, 0x05, 0xb9, 0x06, 0x0f, 0x05, 0xc1, 0x06, 0x0f, 0x05, - 0xd5, 0x06, 0x0f, 0x05, 0x25, 0x07, 0x0f, 0x05, 0x69, 0x07, 0x0f, 0x05, - 0x71, 0x07, 0x0f, 0x05, 0x0d, 0x00, 0x4f, 0x05, 0x29, 0x00, 0x4f, 0x05, - 0x39, 0x00, 0x4f, 0x05, 0x6d, 0x00, 0x4f, 0x05, 0x79, 0x00, 0x4f, 0x05, - 0x9d, 0x00, 0x4f, 0x05, 0xe5, 0x01, 0x4f, 0x05, 0x1d, 0x02, 0x4f, 0x05, - 0x2d, 0x02, 0x4f, 0x05, 0x31, 0x02, 0x4f, 0x05, 0x45, 0x02, 0x4f, 0x05, - 0x29, 0x03, 0x4f, 0x05, 0x65, 0x03, 0x4f, 0x05, 0x01, 0x04, 0x4f, 0x05, - 0x0d, 0x04, 0x4f, 0x05, 0x19, 0x04, 0x4f, 0x05, 0x4d, 0x04, 0x4f, 0x05, - 0x59, 0x04, 0x4f, 0x05, 0xd9, 0x04, 0x4f, 0x05, 0x81, 0x05, 0x4f, 0x05, - 0x85, 0x05, 0x4f, 0x05, 0xad, 0x05, 0x4f, 0x05, 0xfd, 0x05, 0x4f, 0x05, - 0x05, 0x06, 0x4f, 0x05, 0x0d, 0x06, 0x4f, 0x05, 0x39, 0x06, 0x4f, 0x05, - 0x71, 0x00, 0x8f, 0x05, 0xe9, 0x00, 0x8f, 0x05, 0xf9, 0x00, 0x8f, 0x05, - 0x09, 0x01, 0x8f, 0x05, 0xb5, 0x01, 0x8f, 0x05, 0xc1, 0x01, 0x8f, 0x05, - 0xe1, 0x01, 0x8f, 0x05, 0xed, 0x01, 0x8f, 0x05, 0x01, 0x02, 0x8f, 0x05, - 0x0d, 0x02, 0x8f, 0x05, 0x19, 0x02, 0x8f, 0x05, 0x49, 0x02, 0x8f, 0x05, - 0x55, 0x02, 0x8f, 0x05, 0x1d, 0x03, 0x8f, 0x05, 0x91, 0x03, 0x8f, 0x05, - 0xe5, 0x03, 0x8f, 0x05, 0x25, 0x04, 0x8f, 0x05, 0x95, 0x04, 0x8f, 0x05, - 0xb5, 0x04, 0x8f, 0x05, 0x29, 0x05, 0x8f, 0x05, 0xa5, 0x05, 0x8f, 0x05, - 0x31, 0x06, 0x8f, 0x05, 0x39, 0x06, 0x8f, 0x05, 0x41, 0x06, 0x8f, 0x05, - 0x49, 0x06, 0x8f, 0x05, 0x65, 0x07, 0x8f, 0x05, 0x89, 0x07, 0x8f, 0x05, - 0x95, 0x07, 0x8f, 0x05, 0xb1, 0x07, 0x8f, 0x05, 0xd9, 0x07, 0x8f, 0x05, - 0xe5, 0x07, 0x8f, 0x05, 0x15, 0x00, 0xcf, 0x05, 0xd1, 0x00, 0xcf, 0x05, - 0x2d, 0x01, 0xcf, 0x05, 0x45, 0x01, 0xcf, 0x05, 0x75, 0x01, 0xcf, 0x05, - 0xa5, 0x01, 0xcf, 0x05, 0xb5, 0x01, 0xcf, 0x05, 0xd1, 0x01, 0xcf, 0x05, - 0xf5, 0x01, 0xcf, 0x05, 0xb9, 0x02, 0xcf, 0x05, 0xc5, 0x02, 0xcf, 0x05, - 0xfd, 0x02, 0xcf, 0x05, 0x11, 0x03, 0xcf, 0x05, 0x25, 0x03, 0xcf, 0x05, - 0x41, 0x03, 0xcf, 0x05, 0x55, 0x03, 0xcf, 0x05, 0x69, 0x03, 0xcf, 0x05, - 0x8d, 0x04, 0xcf, 0x05, 0x9d, 0x04, 0xcf, 0x05, 0xad, 0x04, 0xcf, 0x05, - 0xd1, 0x04, 0xcf, 0x05, 0xe1, 0x04, 0xcf, 0x05, 0x39, 0x05, 0xcf, 0x05, - 0x75, 0x05, 0xcf, 0x05, 0xf9, 0x05, 0xcf, 0x05, 0x05, 0x06, 0xcf, 0x05, - 0x11, 0x06, 0xcf, 0x05, 0x25, 0x06, 0xcf, 0x05, 0x35, 0x06, 0xcf, 0x05, - 0x49, 0x06, 0xcf, 0x05, 0x5d, 0x06, 0xcf, 0x05, 0x7d, 0x06, 0xcf, 0x05, - 0x91, 0x06, 0xcf, 0x05, 0xb5, 0x06, 0xcf, 0x05, 0xd1, 0x06, 0xcf, 0x05, - 0xf9, 0x06, 0xcf, 0x05, 0x55, 0x07, 0xcf, 0x05, 0xf1, 0x07, 0xcf, 0x05, - 0x09, 0x00, 0x0f, 0x06, 0xdd, 0x00, 0x0f, 0x06, 0xa5, 0x01, 0x0f, 0x06, - 0x19, 0x02, 0x0f, 0x06, 0x25, 0x02, 0x0f, 0x06, 0x39, 0x02, 0x0f, 0x06, - 0x45, 0x02, 0x0f, 0x06, 0x55, 0x02, 0x0f, 0x06, 0x81, 0x02, 0x0f, 0x06, - 0xa1, 0x02, 0x0f, 0x06, 0xb5, 0x02, 0x0f, 0x06, 0xc1, 0x02, 0x0f, 0x06, - 0xc9, 0x02, 0x0f, 0x06, 0xd5, 0x02, 0x0f, 0x06, 0x31, 0x03, 0x0f, 0x06, - 0x41, 0x03, 0x0f, 0x06, 0x51, 0x03, 0x0f, 0x06, 0x5d, 0x03, 0x0f, 0x06, - 0x65, 0x03, 0x0f, 0x06, 0x75, 0x03, 0x0f, 0x06, 0xcd, 0x03, 0x0f, 0x06, - 0xf9, 0x03, 0x0f, 0x06, 0x05, 0x04, 0x0f, 0x06, 0x59, 0x06, 0x0f, 0x06, - 0x61, 0x06, 0x0f, 0x06, 0xc1, 0x06, 0x0f, 0x06, 0xd5, 0x06, 0x0f, 0x06, - 0xd9, 0x06, 0x0f, 0x06, 0xdd, 0x06, 0x0f, 0x06, 0x79, 0x04, 0x4f, 0x06, - 0x91, 0x04, 0x4f, 0x06, 0xa9, 0x04, 0x4f, 0x06, 0x01, 0x05, 0x4f, 0x06, - 0x35, 0x05, 0x4f, 0x06, 0x65, 0x05, 0x4f, 0x06, 0x2d, 0x06, 0x4f, 0x06, - 0x45, 0x06, 0x4f, 0x06, 0x69, 0x06, 0x4f, 0x06, 0x6d, 0x06, 0x4f, 0x06, - 0x71, 0x06, 0x4f, 0x06, 0x75, 0x06, 0x4f, 0x06, 0x79, 0x06, 0x4f, 0x06, - 0x7d, 0x06, 0x4f, 0x06, 0x81, 0x06, 0x4f, 0x06, 0x85, 0x06, 0x4f, 0x06, - 0x89, 0x06, 0x4f, 0x06, 0x8d, 0x06, 0x4f, 0x06, 0x91, 0x06, 0x4f, 0x06, - 0x95, 0x06, 0x4f, 0x06, 0xa1, 0x06, 0x4f, 0x06, 0xa9, 0x06, 0x4f, 0x06, - 0x69, 0x00, 0x8f, 0x06, 0x75, 0x00, 0x8f, 0x06, 0x8d, 0x00, 0x8f, 0x06, - 0x99, 0x00, 0x8f, 0x06, 0xa5, 0x00, 0x8f, 0x06, 0xf1, 0x00, 0x8f, 0x06, - 0xfd, 0x00, 0x8f, 0x06, 0x09, 0x01, 0x8f, 0x06, 0x15, 0x01, 0x8f, 0x06, - 0x25, 0x01, 0x8f, 0x06, 0xfd, 0x01, 0x8f, 0x06, 0x2d, 0x02, 0x8f, 0x06, - 0xf1, 0x02, 0x8f, 0x06, 0xb5, 0x03, 0x8f, 0x06, 0x4d, 0x04, 0x8f, 0x06, - 0x65, 0x04, 0x8f, 0x06, 0xa9, 0x04, 0x8f, 0x06, 0xbd, 0x05, 0x8f, 0x06, - 0x61, 0x06, 0x8f, 0x06, 0x69, 0x06, 0x8f, 0x06, 0x71, 0x06, 0x8f, 0x06, - 0x91, 0x07, 0x8f, 0x06, 0xc5, 0x02, 0xcf, 0x06, 0xe1, 0x02, 0xcf, 0x06, - 0xe9, 0x02, 0xcf, 0x06, 0xf9, 0x02, 0xcf, 0x06, 0x09, 0x03, 0xcf, 0x06, - 0xfd, 0x04, 0xcf, 0x06, 0x55, 0x05, 0xcf, 0x06, 0x71, 0x05, 0xcf, 0x06, - 0xd9, 0x05, 0xcf, 0x06, 0x9d, 0x07, 0xcf, 0x06, 0xb1, 0x07, 0xcf, 0x06, - 0xd5, 0x07, 0xcf, 0x06, 0xd9, 0x07, 0xcf, 0x06, 0xdd, 0x07, 0xcf, 0x06, - 0x19, 0x00, 0x0f, 0x07, 0x41, 0x01, 0x0f, 0x07, 0x89, 0x01, 0x0f, 0x07, - 0x05, 0x02, 0x0f, 0x07, 0x1d, 0x02, 0x0f, 0x07, 0x2d, 0x02, 0x0f, 0x07, - 0x31, 0x02, 0x0f, 0x07, 0x35, 0x02, 0x0f, 0x07, 0x3d, 0x02, 0x0f, 0x07, - 0x9d, 0x02, 0x0f, 0x07, 0xc5, 0x02, 0x0f, 0x07, 0xed, 0x02, 0x0f, 0x07, - 0x15, 0x03, 0x0f, 0x07, 0x51, 0x03, 0x0f, 0x07, 0xa9, 0x03, 0x0f, 0x07, - 0xcd, 0x03, 0x0f, 0x07, 0xe5, 0x03, 0x0f, 0x07, 0xf5, 0x03, 0x0f, 0x07, - 0x05, 0x04, 0x0f, 0x07, 0x2d, 0x04, 0x0f, 0x07, 0x55, 0x04, 0x0f, 0x07, - 0x99, 0x04, 0x0f, 0x07, 0xcd, 0x04, 0x0f, 0x07, 0xf1, 0x04, 0x0f, 0x07, - 0x09, 0x05, 0x0f, 0x07, 0x41, 0x05, 0x0f, 0x07, 0xc1, 0x05, 0x0f, 0x07, - 0xe9, 0x05, 0x0f, 0x07, 0x19, 0x07, 0x0f, 0x07, 0x59, 0x07, 0x0f, 0x07, - 0x71, 0x07, 0x0f, 0x07, 0x89, 0x07, 0x0f, 0x07, 0xa1, 0x07, 0x0f, 0x07, - 0xe5, 0x07, 0x0f, 0x07, 0x55, 0x00, 0x4f, 0x07, 0x79, 0x00, 0x4f, 0x07, - 0xb9, 0x00, 0x4f, 0x07, 0x6d, 0x01, 0x4f, 0x07, 0xb5, 0x01, 0x4f, 0x07, - 0x4d, 0x03, 0x4f, 0x07, 0x21, 0x04, 0x4f, 0x07, 0x5d, 0x04, 0x4f, 0x07, - 0x85, 0x04, 0x4f, 0x07, 0xf9, 0x04, 0x4f, 0x07, 0x65, 0x05, 0x4f, 0x07, - 0x81, 0x05, 0x4f, 0x07, 0xd9, 0x00, 0x8f, 0x07, 0x35, 0x01, 0x8f, 0x07, - 0x69, 0x01, 0x8f, 0x07, 0x75, 0x01, 0x8f, 0x07, 0xad, 0x01, 0x8f, 0x07, - 0xed, 0x01, 0x8f, 0x07, 0x19, 0x02, 0x8f, 0x07, 0x41, 0x02, 0x8f, 0x07, - 0x4d, 0x02, 0x8f, 0x07, 0x59, 0x02, 0x8f, 0x07, 0xa5, 0x03, 0x8f, 0x07, - 0xb9, 0x03, 0x8f, 0x07, 0xc9, 0x03, 0x8f, 0x07, 0xd5, 0x03, 0x8f, 0x07, - 0xed, 0x03, 0x8f, 0x07, 0x01, 0x04, 0x8f, 0x07, 0x11, 0x04, 0x8f, 0x07, - 0x21, 0x04, 0x8f, 0x07, 0x31, 0x04, 0x8f, 0x07, 0x41, 0x04, 0x8f, 0x07, - 0x51, 0x04, 0x8f, 0x07, 0x79, 0x04, 0x8f, 0x07, 0x95, 0x04, 0x8f, 0x07, - 0x9d, 0x04, 0x8f, 0x07, 0xa5, 0x04, 0x8f, 0x07, 0xb5, 0x04, 0x8f, 0x07, - 0xc5, 0x04, 0x8f, 0x07, 0xd5, 0x04, 0x8f, 0x07, 0xe5, 0x04, 0x8f, 0x07, - 0xf5, 0x04, 0x8f, 0x07, 0x05, 0x05, 0x8f, 0x07, 0x1d, 0x05, 0x8f, 0x07, - 0x2d, 0x05, 0x8f, 0x07, 0x3d, 0x05, 0x8f, 0x07, 0x51, 0x05, 0x8f, 0x07, - 0xc5, 0x07, 0x8f, 0x07, 0xed, 0x07, 0x8f, 0x07, 0xf5, 0x07, 0x8f, 0x07, - 0xfd, 0x07, 0x8f, 0x07, 0x0d, 0x00, 0xcf, 0x07, 0x15, 0x00, 0xcf, 0x07, - 0x1d, 0x00, 0xcf, 0x07, 0x29, 0x00, 0xcf, 0x07, 0x31, 0x00, 0xcf, 0x07, - 0x39, 0x00, 0xcf, 0x07, 0x51, 0x00, 0xcf, 0x07, 0xd1, 0x00, 0xcf, 0x07, - 0xd9, 0x00, 0xcf, 0x07, 0xe1, 0x00, 0xcf, 0x07, 0x41, 0x03, 0xcf, 0x07, - 0xad, 0x03, 0xcf, 0x07, 0xe9, 0x03, 0xcf, 0x07, 0x6d, 0x04, 0xcf, 0x07, - 0xed, 0x04, 0xcf, 0x07, 0x1d, 0x05, 0xcf, 0x07, 0x31, 0x05, 0xcf, 0x07, - 0xc1, 0x05, 0xcf, 0x07, 0xb1, 0x06, 0xcf, 0x07, 0xfd, 0x06, 0xcf, 0x07, - 0xc1, 0x07, 0xcf, 0x07, 0xf9, 0x07, 0xcf, 0x07, 0x21, 0x00, 0x0f, 0x08, - 0x4d, 0x03, 0x0f, 0x08, 0x5d, 0x03, 0x0f, 0x08, 0x65, 0x03, 0x0f, 0x08, - 0xb1, 0x03, 0x0f, 0x08, 0x6d, 0x00, 0x8f, 0x08, 0x21, 0x02, 0x8f, 0x08, - 0x89, 0x02, 0x4f, 0x0a, 0xd1, 0x02, 0x4f, 0x0a, 0xe5, 0x02, 0x4f, 0x0a, - 0xcd, 0x07, 0x4f, 0x0a, 0xd9, 0x07, 0x4f, 0x0a, 0x15, 0x02, 0x8f, 0x0a, - 0x5d, 0x02, 0x8f, 0x0a, 0x95, 0x02, 0x8f, 0x0a, 0xed, 0x02, 0x8f, 0x0a, - 0x85, 0x03, 0x8f, 0x0a, 0x45, 0x05, 0x8f, 0x0a, 0x4d, 0x05, 0x8f, 0x0a, - 0x39, 0x06, 0x8f, 0x0a, 0x4d, 0x00, 0xcf, 0x0a, 0x41, 0x04, 0xcf, 0x0a, - 0x91, 0x04, 0xcf, 0x0a, 0xa9, 0x04, 0xcf, 0x0a, 0x31, 0x05, 0xcf, 0x0a, - 0xa5, 0x05, 0xcf, 0x0a, 0x0d, 0x06, 0xcf, 0x0a, 0x4d, 0x06, 0xcf, 0x0a, - 0x61, 0x06, 0xcf, 0x0a, 0x79, 0x06, 0xcf, 0x0a, 0x81, 0x06, 0xcf, 0x0a, - 0xb5, 0x06, 0xcf, 0x0a, 0x59, 0x07, 0xcf, 0x0a, 0x8d, 0x07, 0xcf, 0x0a, - 0xc1, 0x07, 0xcf, 0x0a, 0xd5, 0x07, 0xcf, 0x0a, 0xfd, 0x07, 0xcf, 0x0a, - 0x49, 0x00, 0x0f, 0x0b, 0x71, 0x00, 0x0f, 0x0b, 0xf9, 0x00, 0x0f, 0x0b, - 0x11, 0x01, 0x0f, 0x0b, 0x5d, 0x01, 0x0f, 0x0b, 0x65, 0x01, 0x0f, 0x0b, - 0x99, 0x01, 0x0f, 0x0b, 0xa5, 0x03, 0x00, 0x00, 0xe5, 0x01, 0x0f, 0x0b, - 0x55, 0x02, 0x0f, 0x0b, 0x6d, 0x02, 0x0f, 0x0b, 0x7d, 0x02, 0x0f, 0x0b, - 0x9d, 0x03, 0x0f, 0x0b, 0xa9, 0x03, 0x0f, 0x0b, 0xcd, 0x04, 0x0f, 0x0b, - 0x45, 0x06, 0x0f, 0x0b, 0x51, 0x06, 0x0f, 0x0b, 0xf5, 0x07, 0x0f, 0x0b, - 0x0d, 0x00, 0x4f, 0x0b, 0xa1, 0x00, 0x4f, 0x0b, 0x81, 0x01, 0x4f, 0x0b, - 0x15, 0x02, 0x4f, 0x0b, 0x4d, 0x02, 0x4f, 0x0b, 0x5d, 0x02, 0x4f, 0x0b, - 0xbd, 0x02, 0x4f, 0x0b, 0xe5, 0x02, 0x4f, 0x0b, 0xc1, 0x03, 0x4f, 0x0b, - 0x39, 0x04, 0x4f, 0x0b, 0x41, 0x04, 0x4f, 0x0b, 0x95, 0x05, 0x4f, 0x0b, - 0xf9, 0x05, 0x4f, 0x0b, 0x49, 0x06, 0x4f, 0x0b, 0x6d, 0x06, 0x4f, 0x0b, - 0x41, 0x03, 0x8f, 0x0b, 0x59, 0x03, 0x8f, 0x0b, 0x21, 0x07, 0x8f, 0x0b, - 0x89, 0x03, 0x0f, 0x0c, 0x5d, 0x05, 0x4f, 0x0c, 0xd9, 0x05, 0x4f, 0x0c, - 0x05, 0x06, 0x4f, 0x0c, 0x75, 0x06, 0x4f, 0x0c, 0x45, 0x07, 0x4f, 0x0c, - 0x89, 0x07, 0x4f, 0x0c, 0xb5, 0x07, 0x4f, 0x0c, 0x21, 0x00, 0x8f, 0x0c, - 0xc5, 0x00, 0x8f, 0x0c, 0x75, 0x02, 0x8f, 0x0c, 0x95, 0x02, 0x8f, 0x0c, - 0x99, 0x02, 0x8f, 0x0c, 0x9d, 0x02, 0x8f, 0x0c, 0xa1, 0x02, 0x8f, 0x0c, - 0xad, 0x02, 0x8f, 0x0c, 0xb5, 0x02, 0x8f, 0x0c, 0xb9, 0x02, 0x8f, 0x0c, - 0xc1, 0x02, 0x8f, 0x0c, 0x5d, 0x03, 0x8f, 0x0c, 0xbd, 0x03, 0x8f, 0x0c, - 0xc9, 0x03, 0x8f, 0x0c, 0xcd, 0x03, 0x8f, 0x0c, 0xd9, 0x03, 0x8f, 0x0c, - 0xe1, 0x03, 0x8f, 0x0c, 0xe5, 0x03, 0x8f, 0x0c, 0xed, 0x03, 0x8f, 0x0c, - 0x3d, 0x04, 0x8f, 0x0c, 0x6d, 0x04, 0x8f, 0x0c, 0x71, 0x04, 0x8f, 0x0c, - 0x7d, 0x04, 0x8f, 0x0c, 0x81, 0x04, 0x8f, 0x0c, 0x85, 0x04, 0x8f, 0x0c, - 0x99, 0x04, 0x8f, 0x0c, 0x31, 0x05, 0x4f, 0x0d, 0x85, 0x05, 0x4f, 0x0d, - 0x61, 0x04, 0x8f, 0x0d, 0xc9, 0x04, 0x8f, 0x0d, 0x69, 0x05, 0x8f, 0x0d, - 0xe9, 0x05, 0x8f, 0x0d, 0x19, 0x06, 0x8f, 0x0d, 0xd1, 0x06, 0x8f, 0x0d, - 0xe9, 0x07, 0x8f, 0x0d, 0xf1, 0x07, 0x8f, 0x0d, 0x21, 0x00, 0xcf, 0x0d, - 0x2d, 0x00, 0xcf, 0x0d, 0x39, 0x00, 0xcf, 0x0d, 0x45, 0x00, 0xcf, 0x0d, - 0x51, 0x00, 0xcf, 0x0d, 0x5d, 0x00, 0xcf, 0x0d, 0x65, 0x00, 0xcf, 0x0d, - 0x6d, 0x00, 0xcf, 0x0d, 0xf1, 0x00, 0xcf, 0x0d, 0xfd, 0x00, 0xcf, 0x0d, - 0x05, 0x01, 0xcf, 0x0d, 0x0d, 0x01, 0xcf, 0x0d, 0x15, 0x01, 0xcf, 0x0d, - 0x1d, 0x01, 0xcf, 0x0d, 0x25, 0x01, 0xcf, 0x0d, 0xd5, 0x02, 0xcf, 0x0d, - 0x81, 0x07, 0xcf, 0x0d, 0xfd, 0x07, 0xcf, 0x0d, 0xd5, 0x00, 0x0f, 0x0e, - 0x3d, 0x01, 0x0f, 0x0e, 0x85, 0x01, 0x0f, 0x0e, 0xa1, 0x01, 0x0f, 0x0e, - 0xa5, 0x02, 0x0f, 0x0e, 0x51, 0x03, 0x0f, 0x0e, 0xfd, 0x03, 0x0f, 0x0e, - 0x35, 0x07, 0x0f, 0x0e, 0x85, 0x07, 0x0f, 0x0e, 0x0d, 0x00, 0x4f, 0x0e, - 0x9d, 0x00, 0x4f, 0x0e, 0x21, 0x01, 0x4f, 0x0e, 0x2d, 0x02, 0x4f, 0x0e, - 0x3d, 0x02, 0x4f, 0x0e, 0x91, 0x07, 0x8f, 0x0e, 0x9d, 0x07, 0x8f, 0x0e, - 0xa9, 0x07, 0x8f, 0x0e, 0xb5, 0x07, 0x8f, 0x0e, 0xd9, 0x07, 0x8f, 0x0e, - 0xed, 0x07, 0x8f, 0x0e, 0xd1, 0x00, 0xcf, 0x0e, 0xd9, 0x00, 0xcf, 0x0e, - 0xe1, 0x00, 0xcf, 0x0e, 0xf5, 0x00, 0xcf, 0x0e, 0xf9, 0x01, 0x00, 0x00, - 0x25, 0x04, 0xcf, 0x0b, 0xed, 0x05, 0x8f, 0x0c, 0x0d, 0x06, 0x8f, 0x0c, - 0x11, 0x06, 0x8f, 0x0c, 0x19, 0x06, 0x8f, 0x0c, 0xa1, 0x00, 0xcf, 0x0c, - 0x01, 0x02, 0xcf, 0x0c, 0x2d, 0x05, 0x0f, 0x0d, 0xad, 0x07, 0x0f, 0x0d, - 0xf1, 0x07, 0x0f, 0x0d, 0x79, 0x00, 0xc0, 0x00, 0x45, 0x04, 0x4f, 0x0e, - 0x59, 0x04, 0x4f, 0x0e, 0x91, 0x04, 0x4f, 0x0e, 0xc1, 0x04, 0x4f, 0x0e, - 0x65, 0x06, 0x4f, 0x0e, 0xed, 0x02, 0x8f, 0x0e, 0x51, 0x03, 0x8f, 0x0e, - 0xe9, 0x05, 0x0f, 0x0f, 0xab, 0x26, 0xe0, 0x7c, 0x00, 0x00, 0x4f, 0x00, - 0x6f, 0x24, 0x3f, 0x00, 0xec, 0xc3, 0xa1, 0xc1, 0xcb, 0x47, 0x80, 0x00, - 0x50, 0x20, 0x40, 0x8f, 0x28, 0x46, 0x8b, 0x0a, 0x31, 0x00, 0x08, 0x45, - 0x02, 0x6f, 0x0e, 0x70, 0x00, 0x18, 0x43, 0x00, 0x10, 0x41, 0x04, 0x8e, - 0x8c, 0x70, 0x4b, 0xd9, 0x6c, 0x71, 0x80, 0x45, 0xc3, 0x46, 0x80, 0x3f, - 0x00, 0x00, 0x22, 0x42, 0x2a, 0x5b, 0x04, 0x8e, 0x40, 0xd9, 0x40, 0x24, - 0xc2, 0x30, 0x6c, 0x71, 0x28, 0x5b, 0x87, 0xe8, 0x03, 0x14, 0x80, 0x30, - 0x0f, 0x08, 0xb0, 0x0c, 0x4c, 0xd9, 0x06, 0x71, 0xd3, 0x08, 0x92, 0xa2, - 0x23, 0xf0, 0x02, 0x1c, 0x83, 0x31, 0x04, 0x8e, 0x40, 0x24, 0x82, 0x30, - 0x6c, 0x71, 0x29, 0x5b, 0x00, 0x8f, 0x35, 0x08, 0xb5, 0x00, 0x2c, 0x71, - 0x8a, 0x22, 0x4d, 0x00, 0x6c, 0x71, 0x11, 0xf0, 0x00, 0x1c, 0x84, 0x30, - 0x00, 0x14, 0x00, 0x31, 0x64, 0x77, 0x0a, 0xf0, 0x0c, 0x71, 0xab, 0x20, - 0x61, 0x0a, 0x8b, 0x44, 0x00, 0x94, 0x04, 0x77, 0x00, 0xb4, 0x00, 0x94, - 0xf8, 0xe8, 0x2f, 0x26, 0xc8, 0xf0, 0xf0, 0xf5, 0x20, 0xaf, 0xd3, 0x41, - 0x80, 0x00, 0x72, 0x3e, 0xd3, 0x40, 0x80, 0x00, 0x68, 0x3e, 0x85, 0x0d, - 0xb4, 0x10, 0x4e, 0x70, 0xad, 0x0d, 0x30, 0x14, 0xc1, 0x40, 0x8c, 0x25, - 0x02, 0x90, 0xcc, 0x25, 0x82, 0x9f, 0x00, 0x00, 0xff, 0x00, 0x33, 0xf4, - 0x00, 0x11, 0x80, 0x20, 0x44, 0x6f, 0x40, 0x27, 0x52, 0x11, 0x46, 0x20, - 0x00, 0x0e, 0x00, 0x1a, 0x03, 0x01, 0x00, 0x1a, 0x83, 0x23, 0x00, 0x19, - 0x02, 0x20, 0x7f, 0xdd, 0x04, 0x8e, 0x8c, 0x70, 0x17, 0xbd, 0x51, 0xd9, - 0x6c, 0x71, 0x80, 0x45, 0xa1, 0x46, 0x2a, 0x5b, 0x04, 0x8e, 0x8c, 0x70, - 0x52, 0xd9, 0x6c, 0x71, 0x80, 0x45, 0x42, 0x42, 0xa1, 0x46, 0x2a, 0x5b, - 0x00, 0x11, 0x80, 0x20, 0xff, 0xdc, 0x43, 0x6f, 0x00, 0x18, 0x00, 0x23, - 0x00, 0xaa, 0x04, 0x8e, 0x8c, 0x70, 0x4e, 0xd9, 0x6c, 0x71, 0x80, 0x45, - 0xa1, 0x46, 0x2a, 0x5b, 0x0c, 0x70, 0xc1, 0x41, 0x00, 0x1f, 0x83, 0x10, - 0x31, 0x5b, 0x00, 0x10, 0x0d, 0x20, 0x24, 0xf0, 0x42, 0x6f, 0x00, 0x1a, - 0x82, 0x04, 0x00, 0x19, 0x82, 0x24, 0x04, 0x8e, 0x4b, 0xd9, 0x6c, 0x71, - 0x42, 0x44, 0x42, 0x45, 0xc3, 0x46, 0x80, 0x3f, 0x00, 0x00, 0x2a, 0x5b, - 0x0c, 0x71, 0x00, 0x1f, 0x82, 0x14, 0x21, 0x5b, 0x0c, 0x70, 0xc1, 0x41, - 0x00, 0x18, 0x40, 0x23, 0x31, 0x5b, 0x0c, 0xf0, 0x2a, 0x09, 0x8f, 0x09, - 0x00, 0x41, 0xc1, 0x40, 0x30, 0x5b, 0x47, 0x86, 0x0c, 0x71, 0x60, 0x7a, - 0xc1, 0x41, 0x10, 0xdd, 0xa1, 0x40, 0xcc, 0xc7, 0xe2, 0xc2, 0x96, 0x0d, - 0xaf, 0x0a, 0x08, 0x45, 0x06, 0x1d, 0xc5, 0x11, 0xc2, 0xc6, 0xe0, 0x78, - 0xf1, 0xc0, 0x00, 0x16, 0x83, 0x70, 0x80, 0x00, 0xc4, 0x23, 0x05, 0xeb, - 0x0a, 0x0e, 0xcf, 0x0a, 0x04, 0xf0, 0xc3, 0x40, 0x00, 0x00, 0xfd, 0xff, - 0xd1, 0xc0, 0xe0, 0x7f, 0x0e, 0x78, 0xe0, 0x78, 0xf1, 0xc0, 0xc3, 0x42, - 0x80, 0x00, 0xd0, 0x22, 0x20, 0x82, 0x20, 0x81, 0x1b, 0x09, 0x80, 0x0f, - 0xa5, 0x5a, 0x6b, 0xb6, 0x24, 0x8a, 0x89, 0xe9, 0x2c, 0x71, 0x14, 0x70, - 0x27, 0xd8, 0x24, 0xaa, 0x05, 0xf2, 0x27, 0xd8, 0x2f, 0x5b, 0xd1, 0xc0, - 0xe0, 0x7e, 0xab, 0x20, 0xe0, 0x0c, 0xab, 0x21, 0x61, 0x0a, 0xff, 0xf1, - 0x05, 0xe8, 0x00, 0x18, 0x84, 0x0f, 0x00, 0x00, 0xe1, 0x07, 0x06, 0xe9, - 0x00, 0x19, 0x82, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x05, 0xea, 0x00, 0x1a, - 0x82, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x06, 0xeb, 0x00, 0x1b, 0x82, 0x0f, - 0x00, 0x00, 0x04, 0x00, 0x0d, 0x0c, 0x10, 0x00, 0x00, 0x1c, 0x82, 0x0f, - 0x00, 0x00, 0x26, 0x00, 0xb4, 0x70, 0xe0, 0x7c, 0x00, 0x1d, 0x82, 0x0f, - 0x00, 0x00, 0x0b, 0x00, 0xe0, 0x7e, 0xe0, 0x78, 0xc3, 0x42, 0x7f, 0x00, - 0xc0, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xc4, 0x90, 0xf1, 0x07, 0x4f, 0x0b, - 0xc3, 0x42, 0x7f, 0x00, 0xa4, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xa8, 0x90, - 0xe1, 0x07, 0x4f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, 0x94, 0x90, 0xc3, 0x43, - 0x7f, 0x00, 0x98, 0x90, 0xd1, 0x07, 0x4f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, - 0xa0, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xa4, 0x90, 0xc1, 0x07, 0x4f, 0x0b, - 0xc3, 0x42, 0x7f, 0x00, 0x98, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xa0, 0x90, - 0xb1, 0x07, 0x4f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, 0xa8, 0x90, 0xc3, 0x43, - 0x7f, 0x00, 0xc0, 0x90, 0x91, 0x07, 0x4f, 0x0b, 0xf1, 0xc0, 0xa1, 0xc1, - 0x2c, 0x70, 0xc3, 0x42, 0x7f, 0x00, 0xc4, 0x90, 0xc3, 0x43, 0x7f, 0x00, - 0xc8, 0x90, 0x8c, 0x76, 0x3e, 0x0f, 0xef, 0x0c, 0x40, 0x24, 0x05, 0x30, - 0x00, 0xc0, 0x87, 0x74, 0xd1, 0xc0, 0xe0, 0x7e, 0xc3, 0x42, 0x7f, 0x00, - 0xcc, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xcc, 0x90, 0x5d, 0x07, 0x4f, 0x0b, - 0xf1, 0xc0, 0xa1, 0xc1, 0x0c, 0x70, 0x2c, 0x70, 0xc3, 0x42, 0x7f, 0x00, - 0xc8, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xc8, 0x90, 0x8c, 0x74, 0x0a, 0x0f, - 0xef, 0x0c, 0x40, 0x24, 0xc5, 0x30, 0x03, 0x14, 0x80, 0x30, 0x87, 0x74, - 0xd1, 0xc0, 0xe0, 0x7e, 0xc3, 0x42, 0x7f, 0x00, 0xcc, 0x90, 0xc3, 0x43, - 0x7f, 0x00, 0xcc, 0x90, 0x25, 0x07, 0x4f, 0x0b, 0xc3, 0x42, 0x7f, 0x00, - 0xcc, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xcc, 0x90, 0x15, 0x07, 0x4f, 0x0b, - 0xc3, 0x42, 0x7f, 0x00, 0xc4, 0x90, 0x15, 0x07, 0x6f, 0x0b, 0x40, 0x43, - 0x00, 0x16, 0x80, 0x70, 0x7f, 0x00, 0xa5, 0x96, 0xdd, 0x02, 0xaf, 0x0e, - 0x79, 0x20, 0x00, 0x00, 0x00, 0x16, 0x80, 0x70, 0x7f, 0x00, 0xa5, 0x96, - 0x14, 0x70, 0xe0, 0x7d, 0xc9, 0x02, 0xaf, 0x0e, 0x0c, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x2f, 0x90, 0x01, 0x0b, 0x05, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0xdc, 0xcd, 0x60, 0x00, - 0x74, 0x8d, 0x7f, 0x00, 0x10, 0xcd, 0x60, 0x00, 0x18, 0xd0, 0x60, 0x00, - 0x3c, 0xcd, 0x60, 0x00, 0xd0, 0xcc, 0x60, 0x00, 0xa4, 0xcc, 0x60, 0x00, - 0x48, 0xcd, 0x60, 0x00, 0x1c, 0xcd, 0x60, 0x00, 0xf4, 0xce, 0x60, 0x00, - 0x08, 0xcd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x80, 0x00, - 0x1c, 0x9a, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0x00, 0xd0, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x08, 0xe8, 0x03, - 0x30, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x00, 0xd8, 0xbc, 0x60, 0x00, 0x64, 0xbd, 0x60, 0x00, - 0x50, 0xbc, 0x60, 0x00, 0x40, 0xbe, 0x60, 0x00, 0x84, 0xbc, 0x60, 0x00, - 0x08, 0xbc, 0x60, 0x00, 0xd4, 0xbb, 0x60, 0x00, 0x90, 0xbc, 0x60, 0x00, - 0x40, 0xb3, 0x60, 0x00, 0x20, 0xbd, 0x60, 0x00, 0x44, 0xbc, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x3a, 0x80, 0x00, 0x44, 0x9a, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x1e, 0x05, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, - 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x69, 0x2f, 0xe8, 0x03, 0x31, 0x01, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0xb4, 0xb4, 0x60, 0x00, 0x40, 0xb5, 0x60, 0x00, 0x2c, 0xb4, 0x60, 0x00, - 0xa8, 0xb5, 0x60, 0x00, 0x60, 0xb4, 0x60, 0x00, 0xbc, 0xb3, 0x60, 0x00, - 0x88, 0xb3, 0x60, 0x00, 0x6c, 0xb4, 0x60, 0x00, 0x38, 0xb4, 0x60, 0x00, - 0xfc, 0xb4, 0x60, 0x00, 0x20, 0xb4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7c, 0x3a, 0x80, 0x00, 0xf0, 0xa0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0xe8, 0x03, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x7d, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xe9, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x34, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x49, 0x61, 0x00, - 0xe8, 0x48, 0x61, 0x00, 0xd8, 0x48, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, - 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xec, 0x27, 0x61, 0x00, 0x7c, 0x27, 0x61, 0x00, 0x6c, 0x27, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x01, 0x00, 0x00, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x9c, 0x60, 0x00, 0xec, 0x9b, 0x60, 0x00, - 0xd0, 0x9b, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x21, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8c, 0xe4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x94, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf3, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcc, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xf5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x7c, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf6, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9c, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x68, 0x61, 0x00, - 0x1c, 0x68, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xf9, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68, 0x61, 0x00, - 0xd0, 0x67, 0x61, 0x00, 0xb8, 0x67, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x61, 0x00, 0x34, 0x64, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x7c, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x7a, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x7b, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x7c, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe0, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x41, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf4, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, - 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x17, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x7e, 0x61, 0x00, 0x1c, 0x7d, 0x61, 0x00, 0x98, 0x7d, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x20, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x32, 0x00, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x70, 0x61, 0x00, 0xf4, 0x6f, 0x61, 0x00, - 0xe4, 0x6f, 0x61, 0x00, 0x7c, 0x70, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xc8, 0x00, 0xf0, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xe9, 0x60, 0x00, - 0x98, 0xe4, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8b, 0xc8, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, - 0xb0, 0x2d, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x94, 0x90, 0x7f, 0x00, 0x98, 0x90, 0x7f, 0x00, - 0x98, 0x90, 0x7f, 0x00, 0xa0, 0x90, 0x7f, 0x00, 0xa0, 0x90, 0x7f, 0x00, - 0xa4, 0x90, 0x7f, 0x00, 0xa4, 0x90, 0x7f, 0x00, 0xa8, 0x90, 0x7f, 0x00, - 0xa8, 0x90, 0x7f, 0x00, 0xc0, 0x90, 0x7f, 0x00, 0xc0, 0x90, 0x7f, 0x00, - 0xc4, 0x90, 0x7f, 0x00, 0xc4, 0x90, 0x7f, 0x00, 0xc4, 0x90, 0x7f, 0x00, - 0xc4, 0x90, 0x7f, 0x00, 0xc8, 0x90, 0x7f, 0x00, 0xc8, 0x90, 0x7f, 0x00, - 0xc8, 0x90, 0x7f, 0x00, 0xc8, 0x90, 0x7f, 0x00, 0xcc, 0x90, 0x7f, 0x00, - 0xcc, 0x90, 0x7f, 0x00, 0xcc, 0x90, 0x7f, 0x00, 0xcc, 0x90, 0x7f, 0x00, - 0xcc, 0x90, 0x7f, 0x00, 0xcc, 0x90, 0x7f, 0x00, 0xcc, 0x90, 0x7f, 0x00, - 0xab, 0x26, 0x0a, 0x74, 0x7f, 0x00, 0x98, 0x80, 0xe0, 0x7e, 0xe0, 0x78, - 0xc3, 0x40, 0x7f, 0x00, 0x00, 0x80, 0x6b, 0x20, 0x40, 0x09, 0xdb, 0x44, - 0x80, 0x00, 0x50, 0x20, 0xdb, 0x42, 0x80, 0x00, 0x50, 0x21, 0x0a, 0x22, - 0x80, 0x8f, 0x7f, 0x00, 0xdc, 0x99, 0xe2, 0x20, 0x82, 0x00, 0x6f, 0x70, - 0x22, 0x20, 0x80, 0x0f, 0x7f, 0x00, 0x00, 0xa1, 0x9d, 0x03, 0x8f, 0x03, - 0x48, 0xa5, 0x7f, 0x00, 0x27, 0x00, 0x02, 0x01, 0x14, 0x05, 0x14, 0x05, - 0xc4, 0x09, 0x06, 0x09, 0x70, 0x17, 0x00, 0x00, 0x80, 0x3d, 0xcd, 0xcc, - 0x4c, 0x3f, 0x00, 0x00, 0xe0, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x86, 0x54, 0x00, 0x25, 0x00, 0x03, 0x01, - 0x00, 0x09, 0x0c, 0x96, 0x00, 0x10, 0x3c, 0x00, 0x01, 0x00, 0x01, 0x00, - 0xb0, 0x04, 0x52, 0x03, 0x00, 0x00, 0x40, 0x41, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0xb4, 0x73, 0x00, 0x00, 0x00, - 0x82, 0x06, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, - 0xb3, 0x3e, 0xcd, 0xcc, 0x0c, 0x3f, 0xcd, 0xcc, 0x0c, 0x3f, 0x33, 0x33, - 0x33, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0x01, 0x00, - 0x09, 0x04, 0x02, 0x17, 0xb7, 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, - 0xb7, 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x37, 0x86, 0x35, 0xbd, - 0x37, 0x86, 0x35, 0xbd, 0x37, 0x86, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x42, 0xe8, 0x03, 0x05, 0x00, 0x2d, 0x00, 0x84, 0x03, 0xb0, - 0x04, 0x96, 0x00, 0x08, 0x96, 0x00, 0x0e, 0x01, 0x03, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0x33, 0xb3, 0x3e, 0xcd, 0xcc, 0x0c, 0x3f, 0xcd, - 0xcc, 0x0c, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x3f, 0xcd, - 0xcc, 0x4c, 0x3e, 0x01, 0x06, 0x04, 0x02, 0x00, 0x05, 0x00, 0x41, 0x01, - 0x40, 0x01, 0x24, 0x00, 0x78, 0x00, 0x04, 0x01, 0x14, 0x14, 0x02, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x80, 0x3f, 0xcd, 0xcc, 0xcc, 0x3d, 0x9a, 0x99, - 0x99, 0x3f, 0xcd, 0xcc, 0xcc, 0x3e, 0xcd, 0xcc, 0xcc, 0x3d, 0x01, 0x00, - 0x14, 0x00, 0x10, 0x04, 0x78, 0x00, 0x08, 0x00, 0x00, 0x05, 0x9a, 0x99, - 0x19, 0x3f, 0x9a, 0x99, 0x19, 0x3f, 0x50, 0x00, 0x09, 0x00, 0x1e, 0x00, - 0xe8, 0x03, 0x50, 0x00, 0x41, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x80, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x40, 0xb5, 0xfe, 0x16, 0x37, 0xb5, 0xfe, 0x16, 0x37, 0xb5, 0xfe, 0x16, - 0x37, 0x8b, 0xde, 0xa9, 0x38, 0x00, 0x00, 0xe0, 0x40, 0x0e, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xcd, 0xcc, 0xcc, 0x3d, 0x01, 0x09, 0x09, 0x03, 0x13, 0x32, - 0xa3, 0x04, 0xcd, 0x0c, 0x19, 0x28, 0x04, 0x0e, 0x00, 0x03, 0x9a, 0x99, - 0x99, 0x3e, 0x9a, 0x99, 0x99, 0x3e, 0xcd, 0xcc, 0xcc, 0x3e, 0x9a, 0x99, - 0x19, 0x3f, 0x9a, 0x99, 0x99, 0x3e, 0x00, 0x00, 0x80, 0x3e, 0x9a, 0x99, - 0x99, 0x3e, 0xec, 0x51, 0xb8, 0x3e, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, - 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, 0x4c, 0x3f, 0xcd, 0xcc, - 0x4c, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e, 0xcd, 0xcc, - 0x4c, 0x3e, 0x01, 0xc2, 0xb8, 0xb2, 0x3e, 0x35, 0xfa, 0x8e, 0x3c, 0x0a, - 0x00, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x50, 0x77, 0x56, 0x3d, - 0x0e, 0x00, 0x00, 0x80, 0x3e, 0x8f, 0xc2, 0xf5, 0x3c, 0x0a, 0xd7, 0xa3, - 0x3c, 0x64, 0x80, 0x34, 0x2d, 0x46, 0x01, 0x0a, 0x00, 0x50, 0x00, 0x00, - 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x09, 0x02, 0x00, 0x00, 0xc8, - 0x41, 0x00, 0x00, 0x80, 0x42, 0x00, 0x00, 0x80, 0x41, 0x00, 0x00, 0xc0, - 0x3f, 0xcd, 0xcc, 0x4c, 0x3d, 0xc2, 0xb8, 0xb2, 0x3d, 0x32, 0x25, 0x3b, - 0x18, 0x47, 0x00, 0x00, 0xa0, 0x40, 0x9a, 0x99, 0x19, 0x3f, 0x0a, 0xd7, - 0x23, 0x3c, 0x0a, 0xd7, 0x23, 0x3c, 0x02, 0x50, 0x77, 0x56, 0x3d, 0x00, - 0x01, 0xcd, 0xcc, 0x4c, 0x3f, 0x00, 0x00, 0x60, 0x40, 0x00, 0x00, 0x20, - 0x40, 0xcd, 0xcc, 0xcc, 0x3d, 0x04, 0x8f, 0xc2, 0xf5, 0x3c, 0x02, 0x01, - 0x02, 0x03, 0x04, 0x01, 0x0a, 0xb0, 0x04, 0x64, 0x00, 0x0a, 0xd7, 0x23, - 0x3c, 0x0a, 0xd7, 0x23, 0x3c, 0x01, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0xfa, 0x43, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0xa0, 0x3f, 0x00, 0x00, - 0x48, 0x42, 0x00, 0x00, 0x80, 0x3f, 0x9a, 0x99, 0x19, 0x3e, 0x9a, 0x99, - 0x99, 0x3d, 0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x96, 0x18, 0x4b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, - 0x18, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x96, 0x18, 0x4b, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xd7, - 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xb7, - 0xd1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x17, 0xb7, 0xd1, 0x38, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xd7, - 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xc5, 0x27, 0x37, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xc5, - 0x27, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xac, 0xc5, 0x27, 0x37, 0x00, 0x24, 0x74, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, - 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x24, 0x74, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x03, 0x04, 0x19, 0x40, - 0x12, 0x18, 0x00, 0x40, 0x72, 0x08, 0x00, 0x0e, 0xb3, 0x80, 0x00, 0x00, - 0x0e, 0x00, 0x01, 0x01, 0x01, 0x09, 0x0c, 0x88, 0x13, 0x10, 0x01, 0x01, - 0x71, 0x2a, 0x00, 0x00, 0xf1, 0xc0, 0xc3, 0x40, 0x80, 0x00, 0xe0, 0x22, - 0xc3, 0x42, 0x80, 0x00, 0x8c, 0x23, 0x2c, 0x70, 0x22, 0x0d, 0xef, 0x0c, - 0x02, 0x7a, 0x12, 0x08, 0x00, 0x00, 0x32, 0x0c, 0x00, 0x00, 0xd1, 0xc0, - 0xe0, 0x7e, 0xe0, 0x78, 0xe8, 0xc3, 0xa1, 0xc1, 0xc3, 0x40, 0x7f, 0x00, - 0x74, 0xa8, 0x32, 0xe8, 0xcb, 0x46, 0x7f, 0x00, 0xf0, 0xa6, 0x36, 0x08, - 0xef, 0x0e, 0xc1, 0x40, 0xab, 0xe8, 0x03, 0x8e, 0x0f, 0x08, 0xf4, 0x00, - 0xe4, 0x6e, 0xa0, 0x87, 0x40, 0x26, 0x0f, 0x12, 0x10, 0xf0, 0xcb, 0x45, - 0x60, 0x00, 0xe8, 0x99, 0x19, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x02, 0x40, - 0xc1, 0x41, 0x60, 0x7d, 0x81, 0x42, 0x03, 0x6e, 0x6c, 0x20, 0x40, 0x00, - 0x1f, 0x67, 0x08, 0xe7, 0xc1, 0x87, 0x80, 0x87, 0xd5, 0x70, 0x0c, 0xf2, - 0x40, 0x27, 0x10, 0x12, 0x30, 0xf6, 0xd3, 0x7a, 0x2c, 0x70, 0xb6, 0x0c, - 0xef, 0x0c, 0x81, 0x40, 0x0a, 0x47, 0xf4, 0xf1, 0x04, 0xec, 0x04, 0x6f, - 0xe4, 0x68, 0xf0, 0xf1, 0x0c, 0x70, 0xc8, 0xc7, 0xe8, 0xc3, 0xa5, 0xc1, - 0x24, 0x5b, 0x08, 0x47, 0x22, 0x5b, 0x08, 0x46, 0x0c, 0x71, 0xe1, 0x41, - 0xc1, 0x42, 0x23, 0x5b, 0x10, 0x40, 0x0e, 0xd8, 0xe1, 0x41, 0xc1, 0x42, - 0x23, 0x5b, 0x08, 0x45, 0x10, 0xd8, 0xe1, 0x41, 0xc1, 0x42, 0x23, 0x5b, - 0x08, 0x44, 0xae, 0x09, 0x20, 0x00, 0x02, 0x40, 0x00, 0x42, 0xa6, 0x09, - 0x20, 0x00, 0xa1, 0x40, 0x00, 0x43, 0x9e, 0x09, 0x20, 0x00, 0x81, 0x40, - 0x08, 0x44, 0xcb, 0x46, 0x80, 0x00, 0xa0, 0x3b, 0x07, 0xed, 0x08, 0x8d, - 0x0b, 0x08, 0x11, 0x02, 0x00, 0x1e, 0x03, 0x10, 0x0d, 0xf0, 0xc3, 0x41, - 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x16, 0x0d, 0x71, 0x80, 0x00, 0xea, 0x3a, - 0x00, 0x91, 0x00, 0x1e, 0x43, 0x10, 0xa6, 0x78, 0x00, 0xb1, 0x30, 0xd9, - 0x80, 0xc0, 0xab, 0x21, 0xa0, 0x0d, 0x0c, 0x1c, 0x80, 0x3f, 0x7f, 0x00, - 0x6c, 0x9a, 0x40, 0xc2, 0x42, 0xc4, 0x26, 0x0c, 0x2f, 0x0a, 0x41, 0xc3, - 0x2f, 0x21, 0x07, 0x80, 0xad, 0x71, 0x0f, 0xf2, 0x40, 0x29, 0x02, 0x06, - 0x5a, 0xd8, 0xad, 0x70, 0xab, 0x22, 0x60, 0x0d, 0xab, 0x25, 0x60, 0x1d, - 0xab, 0x25, 0x60, 0x1d, 0xab, 0x21, 0x60, 0x0d, 0x2f, 0x5b, 0x15, 0xed, - 0x11, 0x14, 0x80, 0x30, 0x24, 0xc1, 0x12, 0x14, 0x82, 0x30, 0x13, 0x14, - 0x83, 0x30, 0x79, 0x20, 0x0c, 0x00, 0x79, 0x21, 0x00, 0x00, 0x79, 0x22, - 0x02, 0x00, 0x84, 0x78, 0x79, 0x23, 0x01, 0x00, 0x44, 0x78, 0x0b, 0x79, - 0x03, 0xf4, 0x5b, 0xd8, 0x2f, 0x5b, 0x7e, 0x0f, 0xaf, 0x0a, 0x0c, 0x70, - 0x0c, 0x72, 0xc3, 0x41, 0x60, 0x00, 0x08, 0x9f, 0x2e, 0x5b, 0x0c, 0x72, - 0xc3, 0x41, 0x60, 0x00, 0x64, 0x9d, 0x2d, 0x5b, 0x0f, 0xd8, 0xc3, 0x41, - 0x61, 0x00, 0x18, 0x0f, 0x2e, 0x5b, 0x0f, 0xd8, 0xc3, 0x41, 0x61, 0x00, - 0x48, 0x0e, 0x2d, 0x5b, 0x3f, 0xd8, 0xab, 0x20, 0xa0, 0x0d, 0xc8, 0xc7, - 0xf2, 0xc2, 0x30, 0x44, 0x10, 0x43, 0x1b, 0xd9, 0x0c, 0x70, 0x70, 0x42, - 0x50, 0x45, 0xab, 0x21, 0xa0, 0x0d, 0x20, 0x5b, 0xc3, 0x40, 0x7f, 0x00, - 0xcc, 0x90, 0xc3, 0x41, 0x7f, 0x00, 0x70, 0x92, 0x02, 0x79, 0xd3, 0x41, - 0x7f, 0x00, 0x70, 0x92, 0xc3, 0x43, 0x7f, 0x00, 0x14, 0x98, 0xd3, 0x40, - 0x7f, 0x00, 0x14, 0x98, 0xc3, 0x42, 0x7f, 0x00, 0x44, 0x99, 0x02, 0x23, - 0x4e, 0x04, 0x02, 0x22, 0x0d, 0x04, 0x84, 0x29, 0x02, 0x03, 0xcb, 0x47, - 0x80, 0x00, 0xd0, 0x22, 0x84, 0x2e, 0x01, 0x13, 0x25, 0xaf, 0x2f, 0x79, - 0x84, 0x2d, 0x01, 0x13, 0xc6, 0xaf, 0xc6, 0x0e, 0xaf, 0x0d, 0xa7, 0xaf, - 0xcf, 0x79, 0x06, 0x0f, 0xaf, 0x0d, 0x22, 0x40, 0xaf, 0x79, 0xf2, 0x0e, - 0xaf, 0x0d, 0x02, 0x40, 0xcb, 0x45, 0x7f, 0x00, 0x44, 0x99, 0x02, 0x0e, - 0xaf, 0x0d, 0xa1, 0x40, 0xaa, 0x20, 0xe1, 0x04, 0x82, 0x41, 0x05, 0x20, - 0x82, 0x0f, 0xb0, 0x2d, 0x00, 0x00, 0x62, 0x40, 0xf6, 0x0e, 0x6f, 0x0c, - 0xab, 0x22, 0xe1, 0x04, 0x2f, 0x21, 0x85, 0x04, 0xae, 0x0f, 0x6f, 0x0e, - 0xa2, 0x40, 0x66, 0x8f, 0x27, 0x8f, 0xc3, 0x40, 0x80, 0x00, 0xd8, 0x22, - 0x45, 0x8f, 0x00, 0x21, 0xc4, 0x00, 0x61, 0x80, 0x20, 0x80, 0x72, 0x08, - 0x20, 0x00, 0xa1, 0x40, 0x1d, 0xd9, 0x0c, 0x70, 0xab, 0x21, 0xa0, 0x0d, - 0x20, 0x5b, 0x16, 0x08, 0x00, 0x00, 0xd2, 0xc6, 0x00, 0x41, 0x14, 0x70, - 0x0c, 0x70, 0xe0, 0x7c, 0xe0, 0x7f, 0x16, 0x81, 0xe4, 0xc2, 0xad, 0x70, - 0xcb, 0x46, 0x7f, 0x00, 0x74, 0x99, 0x08, 0x16, 0x00, 0x14, 0xfc, 0x16, - 0x01, 0x90, 0x02, 0x79, 0x22, 0xb9, 0x2f, 0x79, 0x09, 0x09, 0x92, 0x00, - 0xfe, 0x0b, 0x4f, 0x0c, 0xa5, 0x71, 0xeb, 0x0d, 0x54, 0x93, 0xc3, 0x42, - 0x7f, 0x00, 0xc8, 0x90, 0xc3, 0x43, 0x7f, 0x00, 0xcc, 0x90, 0xd2, 0x0b, - 0xcf, 0x0a, 0xc4, 0xc6, 0xf1, 0xc0, 0x2b, 0x5b, 0x14, 0x70, 0x0c, 0x71, - 0x04, 0xf4, 0x25, 0xd8, 0x2f, 0x5b, 0x0c, 0x70, 0xd1, 0xc0, 0xe0, 0x7e, - 0xf0, 0xc2, 0x50, 0x40, 0x10, 0xda, 0xab, 0x22, 0xa0, 0x0d, 0x55, 0x88, - 0x97, 0x88, 0xcc, 0x88, 0x70, 0x44, 0x76, 0x88, 0x14, 0x88, 0x08, 0xba, - 0x08, 0xbc, 0x45, 0x78, 0x05, 0x24, 0xc2, 0x10, 0x10, 0xba, 0x30, 0x41, - 0x0a, 0x23, 0x00, 0x21, 0xc3, 0x41, 0x00, 0x00, 0xaa, 0x0a, 0xad, 0x70, - 0x6d, 0x72, 0x4a, 0x24, 0x00, 0x72, 0xc3, 0xbe, 0x05, 0x7a, 0xa8, 0x20, - 0xc0, 0x05, 0x53, 0x22, 0x40, 0x00, 0x4f, 0x20, 0x43, 0x00, 0x15, 0x0b, - 0xb1, 0x00, 0x00, 0x2b, 0x43, 0x13, 0x66, 0x79, 0x14, 0x72, 0xcf, 0x21, - 0x41, 0x03, 0x07, 0xf2, 0x0b, 0x08, 0x71, 0x00, 0x00, 0x2b, 0x40, 0x13, - 0x05, 0x79, 0x22, 0xba, 0xa5, 0x72, 0x52, 0x6e, 0x0c, 0x71, 0xdb, 0x7c, - 0x6c, 0x73, 0x00, 0x28, 0x82, 0x00, 0x00, 0x2b, 0x00, 0x03, 0x06, 0x79, - 0xc1, 0x40, 0xab, 0x22, 0xa1, 0x0d, 0xab, 0x21, 0xe2, 0x03, 0x2c, 0x5b, - 0xd5, 0x08, 0x30, 0x00, 0x1c, 0xd8, 0x4c, 0x72, 0xab, 0x20, 0xd0, 0x02, - 0x42, 0x20, 0xc1, 0x03, 0x04, 0x71, 0xf9, 0x09, 0x74, 0x84, 0xab, 0x22, - 0x88, 0x01, 0x4a, 0x24, 0x40, 0x71, 0x11, 0xd8, 0xa8, 0x20, 0xc0, 0x02, - 0x40, 0x20, 0x02, 0x04, 0x42, 0x20, 0x81, 0x03, 0x04, 0x71, 0xab, 0x22, - 0xd0, 0x02, 0xab, 0x21, 0x88, 0x01, 0x8d, 0x70, 0x4a, 0x24, 0x00, 0x73, - 0x0c, 0x70, 0xed, 0x71, 0xa8, 0x20, 0x00, 0x02, 0xa8, 0x48, 0x04, 0x71, - 0xab, 0x21, 0xd0, 0x02, 0xab, 0x27, 0x88, 0x11, 0x4a, 0x23, 0x80, 0x16, - 0x8a, 0x21, 0x10, 0x00, 0x19, 0xde, 0x8a, 0x20, 0x08, 0x00, 0x8a, 0x22, - 0x04, 0x00, 0x11, 0xdb, 0xad, 0x70, 0xd3, 0x42, 0x00, 0x00, 0xff, 0xff, - 0xab, 0x23, 0xd0, 0x12, 0xab, 0x24, 0x88, 0x11, 0xab, 0x21, 0xe1, 0x0c, - 0xab, 0x21, 0x62, 0x07, 0xab, 0x21, 0xa2, 0x06, 0xab, 0x26, 0xd0, 0x12, - 0xab, 0x27, 0x88, 0x11, 0xab, 0x20, 0xe2, 0x06, 0xab, 0x20, 0xe1, 0x0c, - 0xab, 0x20, 0x62, 0x07, 0xab, 0x20, 0xa2, 0x06, 0xab, 0x22, 0x62, 0x07, - 0xab, 0x22, 0xa2, 0x06, 0x3d, 0x08, 0x30, 0x20, 0xab, 0x23, 0xa0, 0x0d, - 0x22, 0x42, 0x0c, 0x70, 0x23, 0x92, 0x65, 0x8a, 0x55, 0x22, 0xc2, 0x08, - 0xc9, 0xb9, 0x44, 0x23, 0x03, 0x04, 0x3c, 0x21, 0x8e, 0x04, 0x79, 0x21, - 0x0f, 0x00, 0x24, 0xbb, 0xcb, 0x7f, 0x65, 0x78, 0x85, 0x71, 0xe5, 0x0c, - 0x24, 0x94, 0xca, 0x22, 0x42, 0x20, 0x07, 0xf0, 0xb0, 0xd8, 0x2f, 0x5b, - 0xad, 0x70, 0x13, 0xf0, 0x0c, 0x70, 0x5e, 0x0f, 0x4f, 0x0c, 0x1e, 0x0f, - 0x6f, 0x0c, 0x42, 0x40, 0x22, 0x40, 0x02, 0x41, 0x82, 0x42, 0x7e, 0x0e, - 0xef, 0xff, 0x62, 0x43, 0x05, 0xe8, 0x12, 0xd8, 0xad, 0x71, 0xab, 0x20, - 0xa0, 0x0d, 0xa1, 0x40, 0xd0, 0xc6, 0xe0, 0x78, 0xe4, 0xc3, 0x82, 0x24, - 0x11, 0x39, 0x8a, 0x21, 0x0c, 0x08, 0x00, 0x24, 0x80, 0x3f, 0x00, 0x00, - 0x44, 0x01, 0x80, 0xc2, 0x38, 0x60, 0x0d, 0x0a, 0x25, 0x00, 0x40, 0xc2, - 0x00, 0x42, 0x40, 0xc0, 0x81, 0xc0, 0x56, 0x20, 0x00, 0x0a, 0x09, 0x0a, - 0x05, 0x00, 0x40, 0xc0, 0xcb, 0x45, 0x80, 0x00, 0xcc, 0x12, 0xcb, 0x46, - 0x80, 0x00, 0xd0, 0x22, 0xcb, 0x44, 0xa5, 0x5a, 0x6b, 0xb6, 0x00, 0x24, - 0x80, 0x3f, 0x00, 0x00, 0x44, 0x01, 0x28, 0xd9, 0x81, 0xc2, 0x10, 0xdb, - 0xa0, 0xa6, 0x0e, 0x0d, 0xef, 0xff, 0x80, 0xa5, 0x44, 0x6d, 0xc3, 0x41, - 0x80, 0x00, 0x00, 0x00, 0xc3, 0x43, 0x7f, 0x00, 0x74, 0x99, 0xc3, 0x44, - 0x80, 0x00, 0x00, 0x00, 0x2e, 0x09, 0xef, 0x0c, 0xa1, 0x40, 0x0c, 0x70, - 0xc4, 0xc7, 0xe0, 0x78, 0xf0, 0xc2, 0x70, 0x41, 0x50, 0x42, 0x30, 0x43, - 0x10, 0x44, 0xab, 0x0b, 0x30, 0x00, 0xcd, 0x70, 0x8a, 0x20, 0x01, 0x23, - 0x1a, 0x26, 0x0f, 0x14, 0x42, 0x77, 0xe1, 0x40, 0x25, 0x5b, 0x0d, 0x08, - 0x95, 0x00, 0x22, 0x1f, 0x83, 0x10, 0x0a, 0xf0, 0x11, 0x08, 0x34, 0x02, - 0xc1, 0x40, 0x9a, 0x20, 0x01, 0x03, 0x42, 0x70, 0x22, 0x18, 0xc3, 0x0f, - 0x4c, 0xd8, 0xcc, 0x78, 0x42, 0x70, 0x35, 0x88, 0xc1, 0xb9, 0x23, 0x09, - 0x71, 0x00, 0xa4, 0x68, 0x01, 0x95, 0x1b, 0xe8, 0x2f, 0x38, 0x03, 0x00, - 0xc3, 0x41, 0x7f, 0x00, 0x60, 0x8d, 0xe1, 0x42, 0x33, 0x5b, 0x2b, 0x08, - 0x33, 0x00, 0x01, 0xad, 0x23, 0xf0, 0xa1, 0x40, 0x82, 0x41, 0x62, 0x42, - 0x42, 0x43, 0xa6, 0x08, 0x20, 0x00, 0x0a, 0x24, 0x40, 0x04, 0x09, 0xe8, - 0x00, 0x41, 0x00, 0x80, 0xfe, 0xe8, 0xe0, 0xa1, 0x03, 0xf0, 0x01, 0x1d, - 0xc3, 0x1f, 0xc9, 0x45, 0x9a, 0x25, 0x01, 0x13, 0x42, 0x75, 0x06, 0x85, - 0x0d, 0xe8, 0x39, 0x8d, 0xc1, 0xb9, 0x13, 0x09, 0xb1, 0x00, 0x0f, 0x78, - 0x82, 0x41, 0x62, 0x42, 0x23, 0x5b, 0x06, 0xa5, 0x03, 0xf0, 0x18, 0x1d, - 0x01, 0x10, 0xc5, 0x71, 0xad, 0x70, 0x6d, 0x0e, 0x64, 0x94, 0xed, 0x70, - 0x05, 0xf0, 0xad, 0x70, 0xed, 0x70, 0x03, 0xf0, 0xa5, 0x71, 0x49, 0x0d, - 0x65, 0x14, 0x4c, 0xde, 0xac, 0x7e, 0x00, 0x22, 0x90, 0xa3, 0xfa, 0xf3, - 0x02, 0x40, 0x26, 0x5b, 0x76, 0xe8, 0x42, 0x76, 0x15, 0x8e, 0xc1, 0xb8, - 0xe5, 0x08, 0x70, 0x80, 0x02, 0x40, 0x25, 0x5b, 0x08, 0x46, 0x02, 0x40, - 0x26, 0x5b, 0x25, 0x5b, 0xd5, 0x0e, 0x25, 0x90, 0xa1, 0x41, 0x9a, 0x21, - 0x01, 0x03, 0x02, 0x40, 0x00, 0x22, 0x4e, 0x20, 0x26, 0x5b, 0x25, 0x5b, - 0xed, 0x71, 0x22, 0x1e, 0x02, 0x10, 0xde, 0xf1, 0xf5, 0x70, 0xad, 0x70, - 0xed, 0x70, 0xdb, 0xf5, 0x0c, 0x71, 0xd0, 0xc6, 0xe2, 0xc2, 0x08, 0x45, - 0x01, 0x88, 0xc1, 0xb8, 0x17, 0x08, 0xb0, 0x00, 0x80, 0x8d, 0x14, 0x71, - 0x0c, 0x70, 0x09, 0xf7, 0x81, 0x40, 0x60, 0x41, 0x80, 0x42, 0x27, 0x5b, - 0x03, 0xf0, 0x81, 0x40, 0x23, 0x5b, 0x00, 0xa5, 0xc2, 0xc6, 0x00, 0x00, - 0x49, 0x4e, 0x49, 0x03, 0xfc, 0x99, 0x60, 0x00, 0x94, 0x90, 0x7f, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x01, 0x80, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x90, 0x7f, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x48, 0x21, 0x80, - 0x00, 0x88, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x90, 0x7f, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x01, 0x90, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, - 0xa4, 0x90, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x98, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xa8, 0x90, 0x7f, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x21, 0x80, 0x00, 0x78, 0x22, 0x80, 0x00, 0xb0, 0x22, 0x80, - 0x00, 0xb0, 0x22, 0x80, 0x00, 0xc0, 0x22, 0x80, 0x00, 0xc8, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x01, 0x70, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x90, 0x7f, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x01, 0xa0, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x90, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0xa8, 0x22, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x20, 0x80, 0x00, 0xd4, 0x00, 0x00, 0x00, - 0x00, 0xfe, 0xff, 0x00, 0x0f, 0x01, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0b, 0x10, 0x10, 0xc4, - 0x04, 0x00, 0x00, 0x01, 0x02, 0x10, 0x0c, 0xd5, 0x60, 0x00, 0x06, 0x02, - 0x08, 0xd0, 0xd4, 0x60, 0x02, 0x06, 0x0f, 0x03, 0xff, 0x3f, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, - 0x05, 0x10, 0x80, 0xa5, 0x08, 0x00, 0x60, 0x00, 0x68, 0x02, 0x04, 0x58, - 0x5e, 0x61, 0x00, 0xa4, 0x37, 0x61, 0x00, 0xdc, 0xa2, 0x60, 0x00, 0x20, - 0x80, 0xc4, 0xa3, 0x60, 0x00, 0x40, 0x02, 0x04, 0xec, 0xaa, 0x60, 0x00, - 0x90, 0xa0, 0x60, 0x00, 0xa0, 0x02, 0x20, 0x82, 0x85, 0xf4, 0x02, 0x0c, - 0x30, 0x1c, 0x61, 0x00, 0x3c, 0x02, 0x0c, 0x03, 0x3a, 0x05, 0x02, 0x05, - 0x34, 0xd1, 0x60, 0x00, 0x03, 0x08, 0x94, 0x4a, 0x08, 0xd3, 0x05, 0x08, - 0x80, 0x06, 0x10, 0x9c, 0xd2, 0x05, 0x10, 0xac, 0x06, 0x10, 0x5c, 0x06, - 0x08, 0xc4, 0xd0, 0x05, 0x18, 0x94, 0x10, 0xa7, 0xa1, 0x7f, 0x00, 0x0a, - 0x02, 0x40, 0x2c, 0x67, 0x61, 0x02, 0x06, 0x05, 0x03, 0x13, 0x80, 0x80, - 0x90, 0x05, 0x18, 0x70, 0x02, 0x08, 0x01, 0x00, 0x05, 0x16, 0x00, 0x00, - 0xcc, 0x90, 0x7f, 0x00, 0x70, 0x92, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy.h deleted file mode 100644 index 699214e..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy.h +++ /dev/null @@ -1,3075 +0,0 @@ -/** \mainpage -* -**************************************************************************** -* Copyright (C) 2015 - 2016 Bosch Sensortec GmbH -* -* File : bhy.h -* -* Date : 2016/01/22 -* -* Revision : 1.0.4 $ -* -* Usage: Sensor Driver file for BHY sensor -* -**************************************************************************** -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* -* Neither the name of the copyright holder nor the names of the -* contributors may be used to endorse or promote products derived from -* this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER -* OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, -* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE -* -* The information provided is believed to be accurate and reliable. -* The copyright holder assumes no responsibility -* for the consequences of use -* of such information nor for any infringement of patents or -* other rights of third parties which may result from its use. -* No license is granted by implication or otherwise under any patent or -* patent rights of the copyright holder. -* -**************************************************************************/ -/*! \file bhy.h - \brief BHY Sensor Driver Support Header File */ - -#ifndef __BHY_H__ -#define __BHY_H__ - -#ifdef __cplusplus -extern "C"{ -#endif -/****************************************************************/ -/**\name DATA TYPES INCLUDES */ -/************************************************************/ -/*! -* @brief The following definition uses for define the data types -* -* @note While porting the API please consider the following -* @note Please check the version of C standard -* @note Are you using Linux platform -*/ - -/*! -* @brief For the Linux platform support -* Please use the types.h for your data types definitions -*/ -#ifdef __KERNEL__ - -#include -/* singed integer type*/ -typedef int8_t s8;/**< used for signed 8bit */ -typedef int16_t s16;/**< used for signed 16bit */ -typedef int32_t s32;/**< used for signed 32bit */ -typedef int64_t s64;/**< used for signed 64bit */ - -typedef u_int8_t u8;/**< used for unsigned 8bit */ -typedef u_int16_t u16;/**< used for unsigned 16bit */ -typedef u_int32_t u32;/**< used for unsigned 32bit */ -typedef u_int64_t u64;/**< used for unsigned 64bit */ - - - -#else /* ! __KERNEL__ */ -/********************************************************** -* These definition uses for define the C -* standard version data types -***********************************************************/ -# if !defined(__STDC_VERSION__) - -/************************************************ - * compiler is C11 C standard -************************************************/ -#if (__STDC_VERSION__ == 201112L) - -/************************************************/ -#include -/************************************************/ - -/*unsigned integer types*/ -typedef uint8_t u8;/**< used for unsigned 8bit */ -typedef uint16_t u16;/**< used for unsigned 16bit */ -typedef uint32_t u32;/**< used for unsigned 32bit */ -typedef uint64_t u64;/**< used for unsigned 64bit */ - -/*signed integer types*/ -typedef int8_t s8;/**< used for signed 8bit */ -typedef int16_t s16;/**< used for signed 16bit */ -typedef int32_t s32;/**< used for signed 32bit */ -typedef int64_t s64;/**< used for signed 64bit */ -/************************************************ - * compiler is C99 C standard -************************************************/ - -#elif (__STDC_VERSION__ == 199901L) - -/* stdint.h is a C99 supported c library. -which is used to fixed the integer size*/ -/************************************************/ -#include -/************************************************/ - -/*unsigned integer types*/ -typedef uint8_t u8;/**< used for unsigned 8bit */ -typedef uint16_t u16;/**< used for unsigned 16bit */ -typedef uint32_t u32;/**< used for unsigned 32bit */ -typedef uint64_t u64;/**< used for unsigned 64bit */ - -/*signed integer types*/ -typedef int8_t s8;/**< used for signed 8bit */ -typedef int16_t s16;/**< used for signed 16bit */ -typedef int32_t s32;/**< used for signed 32bit */ -typedef int64_t s64;/**< used for signed 64bit */ -/************************************************ - * compiler is C89 or other C standard -************************************************/ -#elif __cplusplus - -/* stdint.h is a C++ supported c library. -which is used to fixed the integer size*/ -/************************************************/ -#include -/************************************************/ - -/*unsigned integer types*/ -typedef uint8_t u8;/**< used for unsigned 8bit */ -typedef uint16_t u16;/**< used for unsigned 16bit */ -typedef uint32_t u32;/**< used for unsigned 32bit */ -typedef uint64_t u64;/**< used for unsigned 64bit */ - -/*signed integer types*/ -typedef int8_t s8;/**< used for signed 8bit */ -typedef int16_t s16;/**< used for signed 16bit */ -typedef int32_t s32;/**< used for signed 32bit */ -typedef int64_t s64;/**< used for signed 64bit */ -/************************************************ - * compiler is C++ -************************************************/ -#else /* !defined(__STDC_VERSION__) */ -/*! -* @brief By default it is defined as 32 bit machine configuration -* define your data types based on your -* machine/compiler/controller configuration -*/ -#define MACHINE_32_BIT -/*! @brief - * If your machine support 16 bit - * define the MACHINE_16_BIT - */ -#ifdef MACHINE_16_BIT -#include -/*signed integer types*/ -typedef signed char s8;/**< used for signed 8bit */ -typedef signed short int s16;/**< used for signed 16bit */ -typedef signed long int s32;/**< used for signed 32bit */ - -#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL -typedef long int s64;/**< used for signed 64bit */ -typedef unsigned long int u64;/**< used for unsigned 64bit */ -#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL) -typedef long long int s64;/**< used for signed 64bit */ -typedef unsigned long long int u64;/**< used for unsigned 64bit */ -#else -#warning Either the correct data type for signed 64 bit integer \ -could not be found, or 64 bit integers are not supported in your environment. -#warning If 64 bit integers are supported on your platform, \ -please set s64 manually. -#endif - -/*unsigned integer types*/ -typedef unsigned char u8;/**< used for unsigned 8bit */ -typedef unsigned short int u16;/**< used for unsigned 16bit */ -typedef unsigned long int u32;/**< used for unsigned 32bit */ - -/* If your machine support 32 bit -define the MACHINE_32_BIT*/ -#elif defined MACHINE_32_BIT -/*signed integer types*/ -typedef signed char s8;/**< used for signed 8bit */ -typedef signed short int s16;/**< used for signed 16bit */ -typedef signed int s32;/**< used for signed 32bit */ - -/*unsigned integer types*/ -typedef unsigned char u8;/**< used for unsigned 8bit */ -typedef unsigned short int u16;/**< used for unsigned 16bit */ -typedef unsigned int u32;/**< used for unsigned 32bit */ - -/* If your machine support 64 bit -define the MACHINE_64_BIT*/ -#elif defined MACHINE_64_BIT -/*signed integer types*/ -typedef signed char s8;/**< used for signed 8bit */ -typedef signed short int s16;/**< used for signed 16bit */ -typedef signed int s32;/**< used for signed 32bit */ -typedef signed long int s64;/**< used for signed 64bit */ - -/*unsigned integer types*/ -typedef unsigned char u8;/**< used for unsigned 8bit */ -typedef unsigned short int u16;/**< used for unsigned 16bit */ -typedef unsigned int u32;/**< used for unsigned 32bit */ -typedef unsigned long int u64;/**< used for unsigned 64bit */ - -#else -#warning The data types defined above which not supported \ -define the data types manually -#endif -#endif - -/*** This else will execute for the compilers - * which are not supported the C standards - * Like C89/C99/C11***/ -#else -/*! -* @brief By default it is defined as 32 bit machine configuration -* define your data types based on your -* machine/compiler/controller configuration -*/ -#define MACHINE_32_BIT - -/* If your machine support 16 bit -define the MACHINE_16_BIT*/ -#ifdef MACHINE_16_BIT -#include -/*signed integer types*/ -typedef signed char s8;/**< used for signed 8bit */ -typedef signed short int s16;/**< used for signed 16bit */ -typedef signed long int s32;/**< used for signed 32bit */ - -#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL -typedef long int s64;/**< used for signed 64bit */ -typedef unsigned long int u64;/**< used for unsigned 64bit */ -#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL) -typedef long long int s64;/**< used for signed 64bit */ -typedef unsigned long long int u64;/**< used for unsigned 64bit */ -#else -#warning Either the correct data type for signed 64 bit integer \ -could not be found, or 64 bit integers are not supported in your environment. -#warning If 64 bit integers are supported on your platform, \ -please set s64 manually. -#endif - -/*unsigned integer types*/ -typedef unsigned char u8;/**< used for unsigned 8bit */ -typedef unsigned short int u16;/**< used for unsigned 16bit */ -typedef unsigned long int u32;/**< used for unsigned 32bit */ - -/*! @brief If your machine support 32 bit -define the MACHINE_32_BIT*/ -#elif defined MACHINE_32_BIT -/*signed integer types*/ -typedef signed char s8;/**< used for signed 8bit */ -typedef signed short int s16;/**< used for signed 16bit */ -typedef signed int s32;/**< used for signed 32bit */ - -/*unsigned integer types*/ -typedef unsigned char u8;/**< used for unsigned 8bit */ -typedef unsigned short int u16;/**< used for unsigned 16bit */ -typedef unsigned int u32;/**< used for unsigned 32bit */ - -/* If your machine support 64 bit -define the MACHINE_64_BIT*/ -#elif defined MACHINE_64_BIT -/*signed integer types*/ -typedef signed char s8;/**< used for signed 8bit */ -typedef signed short int s16;/**< used for signed 16bit */ -typedef signed int s32;/**< used for signed 32bit */ -typedef signed long int s64;/**< used for signed 64bit */ - -/*unsigned integer types*/ -typedef unsigned char u8;/**< used for unsigned 8bit */ -typedef unsigned short int u16;/**< used for unsigned 16bit */ -typedef unsigned int u32;/**< used for unsigned 32bit */ -typedef unsigned long int u64;/**< used for unsigned 64bit */ - -#else -#warning The data types defined above which not supported \ -define the data types manually -#endif -#endif -#endif -/***************************************************************/ -/**\name BUS READ AND WRITE FUNCTION POINTERS */ -/***************************************************************/ -/*! - @brief Define the calling convention of YOUR bus communication routine. - @note This includes types of parameters. This example shows the - configuration for an SPI bus link. - - If your communication function looks like this: - - write_my_bus_xy(u8 device_addr, u8 register_addr, - u8 * data, u8 length); - - The BHY_WR_FUNC_PTR would equal: - - BHY_WR_FUNC_PTR s8 (* bus_write)(u8, - u8, u8 *, u8) - - Parameters can be mixed as needed refer to the - @ref BHY_BUS_WRITE_FUNC macro. - - -*/ -#define BHY_WR_FUNC_PTR s8 (*bus_write)(u8, u8,\ -u8 *, u16) -/**< link macro between API function calls and bus write function - @note The bus write function can change since this is a - system dependant issue. - - If the bus_write parameter calling order is like: reg_addr, - reg_data, wr_len it would be as it is here. - - If the parameters are differently ordered or your communication - function like I2C need to know the device address, - you can change this macro accordingly. - - - BHY_BUS_WRITE_FUNC(device_addr, reg_addr, reg_data, wr_len)\ - bus_write(device_addr, reg_addr, reg_data, wr_len) - - This macro lets all API functions call YOUR communication routine in a - way that equals your definition in the - @ref BHY_WR_FUNC_PTR definition. - -*/ -#define BHY_BUS_WRITE_FUNC(device_addr, reg_addr, reg_data, wr_len)\ -bus_write(device_addr, reg_addr, reg_data, wr_len) - -/**< Define the calling convention of YOUR bus communication routine. - @note This includes types of parameters. This example shows the - configuration for an SPI bus link. - - If your communication function looks like this: - - read_my_bus_xy(u8 device_addr, u8 register_addr, - u8 * data, u8 length); - - The BHY_RD_FUNC_PTR would equal: - - BHY_RD_FUNC_PTR s8 (* bus_read)(u8, - u8, u8 *, u8) - - Parameters can be mixed as needed refer to the - refer BHY_BUS_READ_FUNC macro. - -*/ -#define BHY_SPI_READ_MASK 0x80 /* for spi read transactions on SPI the - MSB has to be set */ -#define BHY_RD_FUNC_PTR s8 (*bus_read)(u8, u8, u8 *, u16) - -#define BHY_BRD_FUNC_PTR s8 (*burst_read)(u8, u8, u8 *, u32) - -/**< link macro between API function calls and bus read function - @note The bus write function can change since this is a - system dependant issue. - - If the bus_read parameter calling order is like: reg_addr, - reg_data, wr_len it would be as it is here. - - If the parameters are differently ordered or your communication - function like I2C need to know the device address, - you can change this macro accordingly. - - - BHY_BUS_READ_FUNC(device_addr, reg_addr, reg_data, wr_len)\ - bus_read(device_addr, reg_addr, reg_data, wr_len) - - This macro lets all API functions call YOUR communication routine in a - way that equals your definition in the - refer BHY_WR_FUNC_PTR definition. - - @note: this macro also includes the "MSB='1' - for reading BHY addresses. - -*/ -#define BHY_BUS_READ_FUNC(device_addr, reg_addr, reg_data, r_len)\ - bus_read(device_addr, reg_addr, reg_data, r_len) - -#define BHY_BURST_READ_FUNC(device_addr, register_addr, register_data, rd_len)\ - burst_read(device_addr, register_addr, register_data, rd_len) - - -#define BHY_MDELAY_DATA_TYPE u32 -/***************************************************************/ -/**\name I2C ADDRESS DEFINITIONS */ -/***************************************************************/ -#define BHY_I2C_ADDR1 (0x28) -#define BHY_I2C_ADDR2 (0x29) -/***************************************************************/ -/**\name CONSTANTS */ -/***************************************************************/ -#define BHY_INIT_VALUE (0) -#define BHY_GEN_READ_WRITE_LENGTH (1) -#define BHY_BYTES_REMAINING_LENGTH (2) -#define BHY_CRC_HOST_LENGTH (4) -#define BHY_PARAMETER_ACK_LENGTH (250) -#define BHY_READ_BUFFER_LENGTH (16) -#define BHY_PARAMETER_ACK_DELAY (50) -#define BHY_SIGNATURE_MEM_LEN (17) -/***************************************************************/ -/**\name BIT SHIFTING DEFINITION */ -/***************************************************************/ -#define BHY_SHIFT_BIT_POSITION_BY_01_BIT (1) -#define BHY_SHIFT_BIT_POSITION_BY_02_BITS (2) -#define BHY_SHIFT_BIT_POSITION_BY_03_BITS (3) -#define BHY_SHIFT_BIT_POSITION_BY_04_BITS (4) -#define BHY_SHIFT_BIT_POSITION_BY_05_BITS (5) -#define BHY_SHIFT_BIT_POSITION_BY_06_BITS (6) -#define BHY_SHIFT_BIT_POSITION_BY_07_BITS (7) -#define BHY_SHIFT_BIT_POSITION_BY_08_BITS (8) -#define BHY_SHIFT_BIT_POSITION_BY_16_BITS (16) -#define BHY_SHIFT_BIT_POSITION_BY_24_BITS (24) -/****************************************************/ -/**\name ARRAY SIZE DEFINITIONS */ -/***************************************************/ -#define BHY_BYTES_REMAINING_SIZE (2) -#define BHY_BYTES_REMAINING_LSB (0) -#define BHY_BYTES_REMAINING_MSB (1) - -#define BHY_CRC_HOST_SIZE (4) -#define BHY_CRC_HOST_LSB (0) -#define BHY_CRC_HOST_XLSB (1) -#define BHY_CRC_HOST_XXLSB (2) -#define BHY_CRC_HOST_MSB (3) -#define BHY_CRC_HOST_FILE_LSB (4) -#define BHY_CRC_HOST_FILE_XLSB (5) -#define BHY_CRC_HOST_FILE_XXLSB (6) -#define BHY_CRC_HOST_FILE_MSB (7) - -#define BHY_INDEX_LEN (19) - -#define BHY_WRITE_BUFFER_SIZE (8) -#define BHY_WRITE_BUFFER_1_REG (0) -#define BHY_WRITE_BUFFER_2_REG (1) -#define BHY_WRITE_BUFFER_3_REG (2) -#define BHY_WRITE_BUFFER_4_REG (3) -#define BHY_WRITE_BUFFER_5_REG (4) -#define BHY_WRITE_BUFFER_6_REG (5) -#define BHY_WRITE_BUFFER_7_REG (6) -#define BHY_WRITE_BUFFER_8_REG (7) - -#define BHY_READ_BUFFER_SIZE (16) -#define BHY_READ_BUFFER_1_REG (0) -#define BHY_READ_BUFFER_2_REG (1) -#define BHY_READ_BUFFER_3_REG (2) -#define BHY_READ_BUFFER_4_REG (3) -#define BHY_READ_BUFFER_5_REG (4) -#define BHY_READ_BUFFER_6_REG (5) -#define BHY_READ_BUFFER_7_REG (6) -#define BHY_READ_BUFFER_8_REG (7) -#define BHY_READ_BUFFER_9_REG (8) -#define BHY_READ_BUFFER_10_REG (9) -#define BHY_READ_BUFFER_11_REG (10) -#define BHY_READ_BUFFER_12_REG (11) -#define BHY_READ_BUFFER_13_REG (12) -#define BHY_READ_BUFFER_14_REG (13) -#define BHY_READ_BUFFER_15_REG (14) -#define BHY_READ_BUFFER_16_REG (15) - -#define BHY_FIFO_SENSOR_DATA_SIZE (100) -/****************************************************/ -/**\name ERROR CODES */ -/***************************************************/ - -#define BHY_NULL_PTR ((void *) 0) -#define BHY_NULL ((u8)0) -#define BHY_COMM_RES ((s8)-1) -#define BHY_OUT_OF_RANGE ((s8)-2) -#define BHY_SUCCESS ((u8)0) -#define BHY_ERROR ((s8)-3) -#define BHY_RAMPATCH_NOT_MATCH ((s8)-4) -#define BHY_RAMPATCH_NOT_SUPPORT ((s8)-5) -#define BHY_CRC_ERROR ((s8)-6) -#define BHY_PRODUCT_ID_ERROR ((s8)-7) - -/* Constants */ -#define BHY_DELAY_SETTLING_TIME (5) -#define BHY_FIFO_BUFFER_SIZE (50) -/*This refers BHY return type as s8 */ -#define BHY_RETURN_FUNCTION_TYPE s8 -/****************************************************/ -/**\name REGISTER DEFINITIONS */ -/***************************************************/ -/****************************************************/ -/**\name I2C REGISTER MAP DEFINITIONS */ -/***************************************************/ -/* i2c buffer read for sensor fifo data*/ -#define BHY_I2C_REG_BUFFER_ZERO_ADDR (0x00) -#define BHY_I2C_REG_BUFFER_END_ADDR (0x31) -#define BHY_I2C_REG_BUFFER_LENGTH ((BHY_I2C_REG_BUFFER_END_ADDR) - (BHY_I2C_REG_BUFFER_ZERO_ADDR) + 1) -/* fifo flush, chip control and status registers*/ -#define BHY_I2C_REG_FIFO_FLUSH_ADDR (0x32) -#define BHY_I2C_REG_CHIP_CONTROL_ADDR (0x34) -#define BHY_I2C_REG_HOST_STATUS_ADDR (0x35) -#define BHY_I2C_REG_INT_STATUS_ADDR (0x36) -#define BHY_I2C_REG_CHIP_STATUS_ADDR (0x37) -/* bytes remaining register*/ -#define BHY_I2C_REG_BYTES_REMAINING_LSB_ADDR (0x38) -#define BHY_I2C_REG_BYTES_REMAINING_MSB_ADDR (0x39) -#define BHY_I2C_REG_PARAMETER_ACKNOWLEDGE_ADDR (0x3A) -/* saved parameter */ -#define BHY_I2C_REG_PARAMETER_READ_BUFFER_ZERO (0x3B) - -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_ADDR (0x54) -/**< parameter page selection address*/ -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR (0x55) -/**< host interface control address*/ -/*! - * @brief parameter write buffer*/ -#define BHY_I2C_REG_PARAMETER_WRITE_BUFFER_ZERO (0x5C) -#define BHY_I2C_REG_PARAMETER_REQUEST_ADDR (0x64) -/**< used to select the respective parameter number*/ - -/* product and revision id */ -#define BHY_BHY_HOST_IRQ_TIMESTAMP_ADDR (0x6C) -/**< host IRQ time stamp address*/ -#define BHY_ROM_VERSION_ADDR (0x70) -/**< ROM version address*/ -#define BHY_RAM_VERSION_ADDR (0x72) -/**< RAM version address*/ -#define BHY_I2C_REG_PRODUCT_ID_ADDR (0x90) -/**< product id address*/ -#define BHY_I2C_REG_REVISION_ID_ADDR (0x91) -/**< revision id address*/ -#define BHY_I2C_REG_UPLOAD_0_ADDR (0x94) -#define BHY_I2C_REG_UPLOAD_1_ADDR (0x95) -/**< upload address for RAM patch*/ -#define BHY_I2C_REG_UPLOAD_DATA_ADDR (0x96) -/**< upload data address for RAM patch*/ -#define BHY_I2C_REG_CRC_HOST_ADDR (0x97) -/**< CRC register*/ -#define BHY_I2C_REG_RESET_REQUEST_ADDR (0x9B) -/**< reset register*/ -/****************************************************/ -/**\name ARRAY DEFINITIONS FOR IRQ TIME STAMP*/ -/**************************************************************/ -#define BHY_HOST_IRQ_TIMESTAMP_SIZE (4) -#define BHY_HOST_IRQ_TIMESTAMP_LSB_DATA (0) -#define BHY_HOST_IRQ_TIMESTAMP_XLSB_DATA (1) -#define BHY_HOST_IRQ_TIMESTAMP_XXLSB_DATA (2) -#define BHY_HOST_IRQ_TIMESTAMP_MSB_DATA (3) -/****************************************************/ -/**\name ARRAY DEFINITIONS FOR ROM VERSION*/ -/**************************************************************/ -#define BHY_ROM_VERSION_SIZE (2) -#define BHY_ROM_VERSION_LSB_DATA (0) -#define BHY_ROM_VERSION_MSB_DATA (1) - -#define BHY_RAM_VERSION_SIZE (2) -#define BHY_RAM_VERSION_LSB_DATA (0) -#define BHY_RAM_VERSION_MSB_DATA (1) -#define BHY_FIFO_DATA_BUFFER (200) - -#define BHY_ROM_VERSION_DI01 (u16)(0x2112) -//#define BHY_ROM_VERSION_DI02 (u16)(0x2112) //DI02 is not supported -#define BHY_ROM_VERSION_DI03 (u16)(0x2DAD) -/**************************************************************/ -/**\name STRUCTURE DEFINITIONS */ -/**************************************************************/ -/*! -* @brief BHY structure -* This structure holds all relevant information about BHY -*/ -struct bhy_t { -u8 product_id;/**< product id of BHY */ -u8 device_addr;/**< device address of BHY */ -BHY_WR_FUNC_PTR;/**< bus write function pointer -used to map the user bus write functions*/ -BHY_RD_FUNC_PTR;/**< bus read function pointer -used to map the user bus read functions*/ -BHY_BRD_FUNC_PTR;/**< burst read function pointer -used to map the user burst read functions*/ -void (*delay_msec)(BHY_MDELAY_DATA_TYPE);/**< delay function pointer */ -}; -/*! -* @brief BHY parameter read buffer -* structure holds all relevant information about -* the respective parameter bytes data -*/ -struct parameter_read_buffer_t { -u8 parameter_1;/**>11)&0x03) -#define BHY_ROM_VER_ANY (0x00) -#define BHY_ROM_VER_DI01 (0x01) -#define BHY_ROM_VER_DI02 (0x02) -#define BHY_ROM_VER_DI03 (0x03) -/**************************************************************/ -/**\name META EVENT DEFINITION */ -/**************************************************************/ -#define BHY_META_EVENT_1 (1) -#define BHY_META_EVENT_2 (2) -#define BHY_META_EVENT_3 (3) -#define BHY_META_EVENT_4 (4) -#define BHY_META_EVENT_5 (5) -#define BHY_META_EVENT_6 (6) -#define BHY_META_EVENT_7 (7) -#define BHY_META_EVENT_8 (8) -#define BHY_META_EVENT_9 (9) -#define BHY_META_EVENT_10 (10) -#define BHY_META_EVENT_11 (11) -#define BHY_META_EVENT_12 (12) -#define BHY_META_EVENT_13 (13) -#define BHY_META_EVENT_14 (14) -#define BHY_META_EVENT_15 (15) -#define BHY_META_EVENT_16 (16) -#define BHY_META_EVENT_17 (17) -#define BHY_META_EVENT_18 (18) -#define BHY_META_EVENT_19 (19) -#define BHY_META_EVENT_20 (20) -#define BHY_META_EVENT_21 (21) -#define BHY_META_EVENT_22 (22) -#define BHY_META_EVENT_23 (23) -#define BHY_META_EVENT_24 (24) -#define BHY_META_EVENT_25 (25) -#define BHY_META_EVENT_26 (26) -#define BHY_META_EVENT_27 (27) -#define BHY_META_EVENT_28 (28) -#define BHY_META_EVENT_29 (29) -#define BHY_META_EVENT_30 (30) -#define BHY_META_EVENT_31 (31) -#define BHY_META_EVENT_32 (32) -/**************************************************************/ -/**\name SENSOR ID DEFINITION FOR NON WAKEUP*/ -/**************************************************************/ -#define BHY_NON_WAKEUP_ROTATION_VECTOR (11) -#define BHY_NON_WAKEUP_GAME_ROTATION_VECTOR (15) -#define BHY_NON_WAKEUP_GEOMAG_ROTATION_VECTOR (20) -#define BHY_NON_WAKEUP_ACCELR (1) -#define BHY_NON_WAKEUP_MAG (2) -#define BHY_NON_WAKEUP_ORIENTATION (3) -#define BHY_NON_WAKEUP_GYRO (4) -#define BHY_NON_WAKEUP_GRAVITY (9) -#define BHY_NON_WAKEUP_LINEAR_ACCEL (10) -#define BHY_NON_WAKEUP_LIGHT (5) -#define BHY_NON_WAKEUP_PROXIMITY (8) -#define BHY_NON_WAKEUP_HUMIDITY (12) -#define BHY_NON_WAKEUP_STEP_COUNTER (19) -#define BHY_NON_WAKEUP_TEMPERATURE (7) -#define BHY_NON_WAKEUP_AMBIENT_TEMPERATURE (13) -#define BHY_NON_WAKEUP_BAROMETER (6) -#define BHY_NON_WAKEUP_SIGNIFICANT_MOTION (17) -#define BHY_NON_WAKEUP_STEP_DETECTOR (18) -#define BHY_NON_WAKEUP_TILT_DETECTOR (22) -#define BHY_NON_WAKEUP_WAKE_GESTURE (23) -#define BHY_NON_WAKEUP_GLANCE_GESTURE (24) -#define BHY_NON_WAKEUP_PICKUP_GESTURE (25) -#define BHY_NON_WAKEUP_UNCALIB_MAG (14) -#define BHY_NON_WAKEUP_UNCALIB_GYRO (16) -#define BHY_NON_WAKEUP_HEART_RATE (21) -#define BHY_NON_WAKEUP_ACTIVITY (31) -#define BHY_NON_WAKEUP_BSX_C (249) -#define BHY_NON_WAKEUP_BSX_B (250) -#define BHY_NON_WAKEUP_BSX_A (251) -#define BHY_NON_WAKEUP_TIMESTAMP_LSW (252) -#define BHY_NON_WAKEUP_TIMESTAMP_MSW (253) -#define BHY_NON_WAKEUP_META_EVENTS (254) - -/**************************************************************/ -/**\name SENSOR ID DEFINITION FOR WAKEUP*/ -/**************************************************************/ -#define BHY_WAKEUP_ROTATION_VECTOR (43) -#define BHY_WAKEUP_GAME_ROTATION_VECTOR (47) -#define WAKEUP_GEOMAG_ROTATION_VECTOR (52) -#define BHY_WAKEUP_ACCEL (33) -#define BHY_WAKEUP_MAG (34) -#define BHY_WAKEUP_ORIENTATION (35) -#define BHY_WAKEUP_GYRO (36) -#define BHY_WAKEUP_GRAVITY (41) -#define BHY_WAKEUP_LINEAR_ACCEL (42) -#define BHY_WAKEUP_LIGHT (37) -#define BHY_WAKEUP_PROXIMITY (40) -#define BHY_WAKEUP_HUMIDITY (44) -#define BHY_WAKEUP_STEP_COUNTER (51) -#define BHY_WAKEUP_TEMPERATURE (39) -#define BHY_WAKEUP_AMBIENT_TEMPERATURE (45) -#define BHY_WAKEUP_BAROMETER (38) -#define BHY_WAKEUP_SIGNIFICANT_MOTION (49) -#define BHY_WAKEUP_STEP_DETECTOR (50) -#define BHY_WAKEUP_TILT_DETECTOR (54) -#define BHY_WAKEUP_WAKE_GESTURE (55) -#define BHY_WAKEUP_GLANCE_GESTURE (56) -#define BHY_WAKEUP_PICKUP_GESTURE (57) -#define BHY_WAKEUP_UNCALIB_MAG (46) -#define BHY_WAKEUP_UNCALIB_GYRO (48) -#define BHY_WAKEUP_HEART_RATE (53) -#define BHY_WAKEUP_ACTIVITY (63) -#define BHY_WAKEUP_TIMESTAMP_LSW (246) -#define BHY_WAKEUP_TIMESTAMP_MSW (247) -#define BHY_WAKEUP_META_EVENTS (248) -/**************************************************************/ -/**\name USER DATA REGISTERS DEFINITION START */ -/**************************************************************/ - -/**************************************************************/ -/**\name FIFO FLUSH LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_FIFO_FLUSH__POS (0) -#define BHY_I2C_REG_FIFO_FLUSH__MSK (0xFF) -#define BHY_I2C_REG_FIFO_FLUSH__LEN (8) -#define BHY_I2C_REG_FIFO_FLUSH__REG (BHY_I2C_REG_FIFO_FLUSH_ADDR) -/**************************************************************/ -/**\name CHIP CONTROL LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_CHIP_CONTROL__POS (0) -#define BHY_I2C_REG_CHIP_CONTROL__MSK (0xFF) -#define BHY_I2C_REG_CHIP_CONTROL__LEN (8) -#define BHY_I2C_REG_CHIP_CONTROL__REG \ -(BHY_I2C_REG_CHIP_CONTROL_ADDR) -/**************************************************************/ -/**\name HOST STATUS LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_HOST_STATUS__POS (0) -#define BHY_I2C_REG_HOST_STATUS__MSK (0xFF) -#define BHY_I2C_REG_HOST_STATUS__LEN (8) -#define BHY_I2C_REG_HOST_STATUS__REG (BHY_I2C_REG_HOST_STATUS_ADDR) - -#define BHY_I2C_REG_HOST_STATUS_ALGO_STANDBY__POS (1) -#define BHY_I2C_REG_HOST_STATUS_ALGO_STANDBY__MSK (0x02) -#define BHY_I2C_REG_HOST_STATUS_ALGO_STANDBY__LEN (1) -#define BHY_I2C_REG_HOST_STATUS_ALGO_STANDBY__REG \ -(BHY_I2C_REG_HOST_STATUS_ADDR) - -#define BHY_I2C_REG_BHY_HOST_INTERFACE_ID__POS (2) -#define BHY_I2C_REG_BHY_HOST_INTERFACE_ID__MSK (0x1C) -#define BHY_I2C_REG_BHY_HOST_INTERFACE_ID__LEN (3) -#define BHY_I2C_REG_BHY_HOST_INTERFACE_ID__REG \ -(BHY_I2C_REG_HOST_STATUS_ADDR) - -#define BHY_I2C_REG_BHY_HOST_STATUS_ALGO_ID__POS (5) -#define BHY_I2C_REG_BHY_HOST_STATUS_ALGO_ID__MSK (0xE0) -#define BHY_I2C_REG_BHY_HOST_STATUS_ALGO_ID__LEN (3) -#define BHY_I2C_REG_BHY_HOST_STATUS_ALGO_ID__REG \ -(BHY_I2C_REG_HOST_STATUS_ADDR) -/**************************************************************/ -/**\name INTERRUPT STATUS LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_INT_STATUS__POS (0) -#define BHY_I2C_REG_INT_STATUS__MSK (0xFF) -#define BHY_I2C_REG_INT_STATUS__LEN (8) -#define BHY_I2C_REG_INT_STATUS__REG (BHY_I2C_REG_INT_STATUS_ADDR) - -#define BHY_I2C_REG_BHY_INT_STATUS_HOST_INTR__POS (0) -#define BHY_I2C_REG_BHY_INT_STATUS_HOST_INTR__MSK (0x01) -#define BHY_I2C_REG_BHY_INT_STATUS_HOST_INTR__LEN (1) -#define BHY_I2C_REG_BHY_INT_STATUS_HOST_INTR__REG (BHY_I2C_REG_INT_STATUS_ADDR) - -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_WM__POS (1) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_WM__MSK (0x02) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_WM__LEN (1) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_WM__REG \ -(BHY_I2C_REG_INT_STATUS_ADDR) - -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_LATENCY__POS (2) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_LATENCY__MSK (0x04) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_LATENCY__LEN (1) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_LATENCY__REG \ -(BHY_I2C_REG_INT_STATUS_ADDR) - -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_IMMEDIATE__POS (3) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_IMMEDIATE__MSK (0x08) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_IMMEDIATE__LEN (1) -#define BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_IMMEDIATE__REG \ -(BHY_I2C_REG_INT_STATUS_ADDR) - -#define BHY_I2C_REG_BHY_INT_STATUS_NON_WAKEUP_WM__POS (4) -#define BHY_I2C_REG_BHY_INT_STATUS_NON_WAKEUP_WM__MSK (0x10) -#define BHY_I2C_REG_BHY_INT_STATUS_NON_WAKEUP_WM__LEN (1) -#define BHY_I2C_REG_BHY_INT_STATUS_NON_WAKEUP_WM__REG \ -(BHY_I2C_REG_INT_STATUS_ADDR) - -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_LATENCY__POS (5) -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_LATENCY__MSK (0x20) -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_LATENCY__LEN (1) -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_LATENCY__REG \ -(BHY_I2C_REG_INT_STATUS_ADDR) - -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_IMMEDIATE__POS (6) -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_IMMEDIATE__MSK (0x40) -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_IMMEDIATE__LEN (1) -#define BHY_I2C_REG_INT_STATUS_NON_WAKEUP_IMMEDIATE__REG \ -(BHY_I2C_REG_INT_STATUS_ADDR) -/**************************************************************/ -/**\name CHIP STATUS LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_CHIP_STATUS__POS (0) -#define BHY_I2C_REG_CHIP_STATUS__MSK (0xFF) -#define BHY_I2C_REG_CHIP_STATUS__LEN (8) -#define BHY_I2C_REG_CHIP_STATUS__REG (BHY_I2C_REG_CHIP_STATUS_ADDR) - -#define BHY_I2C_REG_CHIP_STATUS_EEPROM_DETECTED__POS (0) -#define BHY_I2C_REG_CHIP_STATUS_EEPROM_DETECTED__MSK (0x01) -#define BHY_I2C_REG_CHIP_STATUS_EEPROM_DETECTED__LEN (1) -#define BHY_I2C_REG_CHIP_STATUS_EEPROM_DETECTED__REG \ -(BHY_I2C_REG_CHIP_STATUS_ADDR) - -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_DONE__POS (1) -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_DONE__MSK (0x02) -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_DONE__LEN (1) -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_DONE__REG \ -(BHY_I2C_REG_CHIP_STATUS_ADDR) - -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_ERROR__POS (2) -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_ERROR__MSK (0x04) -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_ERROR__LEN (1) -#define BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_ERROR__REG \ -(BHY_I2C_REG_CHIP_STATUS_ADDR) - -#define BHY_I2C_REG_CHIP_STATUS_FIRMWARE_IDLE__POS (3) -#define BHY_I2C_REG_CHIP_STATUS_FIRMWARE_IDLE__MSK (0x08) -#define BHY_I2C_REG_CHIP_STATUS_FIRMWARE_IDLE__LEN (1) -#define BHY_I2C_REG_CHIP_STATUS_FIRMWARE_IDLE__REG \ -(BHY_I2C_REG_CHIP_STATUS_ADDR) - -#define BHY_I2C_REG_CHIP_STATUS_NO_EEPROM__POS (4) -#define BHY_I2C_REG_CHIP_STATUS_NO_EEPROM__MSK (0x10) -#define BHY_I2C_REG_CHIP_STATUS_NO_EEPROM__LEN (1) -#define BHY_I2C_REG_CHIP_STATUS_NO_EEPROM__REG (BHY_I2C_REG_CHIP_STATUS_ADDR) - -/**************************************************************/ -/**\name PAGE SELECT LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT__POS (0) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT__MSK (0xFF) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT__LEN (8) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT__REG \ -(BHY_I2C_REG_PARAMETER_PAGE_SELECT_ADDR) - -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_PAGE__POS (0) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_PAGE__MSK (0x0F) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_PAGE__LEN (4) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_PAGE__REG \ -(BHY_I2C_REG_PARAMETER_PAGE_SELECT_ADDR) - -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_SIZE__POS (4) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_SIZE__MSK (0xF0) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_SIZE__LEN (4) -#define BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_SIZE__REG \ -(BHY_I2C_REG_PARAMETER_PAGE_SELECT_ADDR) -/**************************************************************/ -/**\name HOST INTERFACE SELECTION LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL__POS (0) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL__MSK (0xFF) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL__LEN (8) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__POS (0) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__MSK (0x01) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__LEN (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__POS (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__MSK (0x02) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__LEN (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__POS (2) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__MSK (0x04) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__LEN (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__POS (3) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__MSK (0x08) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__LEN (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__POS (4) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__MSK (0x10) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__LEN (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__POS (5) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__MSK (0x20) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__LEN (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__POS (6) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__MSK (0x40) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__LEN (1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) - -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__POS \ -(7) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__MSK \ -(0x80) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__LEN \ -(1) -#define BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__REG \ -(BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR) -/**************************************************************/ -/**\name LOAD PARAMETER REQUEST SELECTION LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_LOAD_PARAMETER_REQUEST__POS (0) -#define BHY_I2C_REG_LOAD_PARAMETER_REQUEST__MSK (0xFF) -#define BHY_I2C_REG_LOAD_PARAMETER_REQUEST__LEN (8) -#define BHY_I2C_REG_LOAD_PARAMETER_REQUEST__REG \ -(BHY_I2C_REG_PARAMETER_REQUEST_ADDR) - -/**************************************************************/ -/**\name RESET REQUEST SELECTION LENGTH, POSITION AND MASK */ -/**************************************************************/ -#define BHY_I2C_REG_RESET_REQUEST__POS (0) -#define BHY_I2C_REG_RESET_REQUEST__MSK (0xFF) -#define BHY_I2C_REG_RESET_REQUEST__LEN (8) -#define BHY_I2C_REG_RESET_REQUEST__REG \ -(BHY_I2C_REG_RESET_REQUEST_ADDR) - -/**************************************************/ -/**\name BIT SLICE GET AND SET FUNCTIONS */ -/*************************************************/ -#define BHY_GET_BITSLICE(regvar, bitname)\ - ((regvar & bitname##__MSK) >> bitname##__POS) - - -#define BHY_SET_BITSLICE(regvar, bitname, val)\ - ((regvar & ~bitname##__MSK) | \ - ((val< Success - * @retval -1 -> Error - * - * @note - * While changing the parameter of the bhy_t - * consider the following point: - * Changing the reference value of the parameter - * will changes the local copy or local reference - * make sure your changes will not - * affect the reference value of the parameter - * (Better case don't change the reference value of the parameter) - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_init(struct bhy_t *bhy); -/*! - * @brief - * This API write the data to - * the given register - * - * - * @param v_addr_u8 -> Address of the register - * @param v_data_u8 -> The data from the register - * @param v_len_u8 -> no of bytes to read - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - */ -BHY_RETURN_FUNCTION_TYPE bhy_write_reg(u8 v_addr_u8, -u8 *v_data_u8, u16 v_len_u16); -/*! - * @brief - * This API reads the data from - * the given register - * - * - * @param v_addr_u8 -> Address of the register - * @param v_data_u8 -> The data from the register - * @param v_len_u8 -> no of bytes to read - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - */ -BHY_RETURN_FUNCTION_TYPE bhy_read_reg(u8 v_addr_u8, -u8 *v_data_u8, u16 v_len_u16); -/*! - * @brief API used to get the FIFO flush from the register 0x32 - * bit 0 to 7 - * - * - * @param v_fifo_flush_u8 : The value of fifo flush - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_flush(u8 *v_fifo_flush_u8); -/*! - * @brief API used to set the FIFO flush from the register 0x32 - * bit 0 to 7 - * - * - * @param v_fifo_flush_u8 : The value of fifo flush - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_fifo_flush(u8 v_fifo_flush_u8); -/*! - * @brief API used to get the chip control from the register 0x34 - * bit 0 to 7 - * @note Chip control used to provide the control fundamental - * behaviour of the chip - * - * @param v_chipcontrol_u8 : The value of chip control - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_chip_control(u8 *v_chipcontrol_u8); -/*! - * @brief API used to set the chip control from the register 0x34 - * bit 0 to 7 - * @note Chip control used to provide the control fundamental - * behaviour of the chip - * - * @param v_chipcontrol_u8 : The value of chip control - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_chip_control(u8 v_chipcontrol_u8); -/*! - * @brief API used to get the host status from the register 0x35 - * bit 0 to 7 - * - * - * @param v_algo_standby_u8 : The value of algorithm standby duration - * @param v_algo_id_u8 : The value of algorithm id - * @param v_host_interface_id_u8 : The value of host interface id - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_host_status( -u8 *v_algo_standby_u8, u8 *v_algo_id_u8, -u8 *v_host_interface_id_u8); -/*! - * @brief API used to get the interrupt status from the register 0x36 - * bit 0 to 7 - * - * - * @param v_host_int_u8 : - * The value of host interrupt status - * @param v_wakeup_water_mark_u8 : - * The value of wakeup watermark status - * @param v_wakeup_latency_u8 : - * The value of wakeup latency status - * @param v_wakeup_immediate_u8 : - * The value of wakeup immediate status - * @param v_non_wakeup_water_mark_u8 : - * The value of non wakeup watermark status - * @param v_non_wakeup_latency_u8 : - * The value of non wakeup latency status - * @param v_non_wakeup_immediate_u8 : - * The value of non wakeup immediate - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_interrupt_status( -u8 *v_host_int_u8, -u8 *v_wakeup_water_mark_u8, u8 *v_wakeup_latency_u8, -u8 *v_wakeup_immediate_u8, u8 *v_non_wakeup_water_mark_u8, -u8 *v_non_wakeup_latency_u8, u8 *v_non_wakeup_immediate_u8); -/*! - * @brief API used to get the chip status from the register 0x37 - * bit 0 to 7 - * - * - * - * @param v_eeprom_detected_u8 : The value of eeprom - * detected status - * @param v_ee_upload_done_u8 : The value of ee_upload - * done status - * @param v_ee_upload_error_u8 : The value of ee_upload - * done error - * @param v_firmware_idle_u8 : The value of firmware error status - * @param v_no_eeprom_u8 : The value of no eeprom status - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_chip_status( -u8 *v_eeprom_detected_u8, -u8 *v_ee_upload_done_u8, u8 *v_ee_upload_error_u8, -u8 *v_firmware_idle_u8, u8 *v_no_eeprom_u8); -/*! - * @brief API used to get the bytes remaining from the register 0x38 - * and 0x39 bit 0 to 7 - * - * - * @param v_bytes_remaining_u16 : The value of bytes remaining - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * @note This indicates how many bytes are available in the FIFO buffer - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_read_bytes_remaining( -u16 *v_bytes_remaining_u16); -/*! - * @brief API used to get the parameter - * acknowledgement from the register 0x3A - * bit 0 to 7 - * - * - * @param v_parameter_acknowledge_u8: - * The value of parameter acknowledgement - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * @note - * - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_acknowledge( -u8 *v_parameter_acknowledge_u8); -/*! - * @brief API used to get the parameter - * page select from the register 0x54 - * bit 0 to 7 - * - * - * @param v_page_select_u8 : The value of parameter page selection - * page information | value - * ------------------------|---------- - * BHY_PAGE_SELECT_PARAMETER_PAGE | 0 - * BHY_PAGE_SELECT_PARAMETER_SIZE | 1 - * - * @param v_parameter_page_u8 : The value of page selection - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_page_select( -u8 v_page_select_u8, u8 *v_parameter_page_u8); -/*! - * @brief API used to set the parameter - * page select from the register 0x54 - * bit 0 to 7 - * - * - * @param v_page_select_u8 : The value of parameter page selection - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_parameter_page_select( -u8 v_page_select_u8); -/*! - * @brief API used to get the host interface control - * from the register 0x55 - * bit 0 to 7 - * - * - * - * @param v_algo_standby_req_u8 : The value of algorithm standby - * request - * @param v_abort_transfer_u8 : The value of abort transfer - * @param v_update_transfer_cnt_u8 : The value of update - * transfer count - * @param v_wakeup_fifo_intr_disable_u8 : - * The value of wakeup fifo host - * interrupt disable - * @param v_ned_coordinates_u8 : The value of NED coordinates - * @param v_ap_suspend_u8 : The value of AP suspended - * @param v_sensor_selftest_u8 : The value of sensor self test - * @param v_non_wakeup_fifo_intr_disable_u8: - * The value of non wakeup fifo host - * interrupt disable - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_host_interface_control( -u8 *v_algo_standby_req_u8, -u8 *v_abort_transfer_u8, u8 *v_update_transfer_cnt_u8, -u8 *v_wakeup_fifo_intr_disable_u8, u8 *v_ned_coordinates_u8, -u8 *v_ap_suspend_u8, u8 *v_sensor_selftest_u8, -u8 *v_non_wakeup_fifo_intr_disable_u8); -/*! - * @brief API used to set the host interface control - * from the register 0x55 - * bit 0 to 7 - * - * - * @param v_host_interface_select_u8 : The value of host interface selection - * host interface | value - * -----------------------------------|---------- - * BHY_HOST_ALGO_STANDBY_REQUEST | 0 - * BHY_HOST_ABORT_TRANSFER | 1 - * BHY_HOST_UPDATE_TRANSFER_COUNT | 2 - * BHY_HOST_WAKEUP_FIFO_DISABLE | 3 - * BHY_HOST_NED_COORDINATE | 4 - * BHY_HOST_AP_SUSPEND | 5 - * BHY_HOST_SELFTEST | 6 - * BHY_HOST_NON_WAKEUP_FIFO_DISABLE | 7 - * - * @param v_host_interface_status_u8 : The value of host interface - * Data | status - * -----------------| ----------- - * 0 | DISABLE - * 1 | ENABLE - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_host_interface_control( -u8 v_host_interface_select_u8, u8 v_host_interface_status_u8); -/*! - * @brief API used to get the parameter - * request from the register 0x64 - * bit 0 to 7 - * - * - * @param v_parameter_request_u8 : The value of parameter request - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_request( -u8 *v_parameter_request_u8); -/*! - * @brief API used to get the parameter - * request from the register 0x64 - * bit 0 to 7 - * - * - * @param v_parameter_request_u8 : The value of parameter request - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_parameter_request( -u8 v_parameter_request_u8); -/*! - * @brief API used to get the host IRQ time stamp - * request from the register 0x6C to 0x6F - * bit 0 to 7 - * - * - * @param v_host_irq_timestamp_u32 : The value of host irq time stamp - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_host_irq_timestamp( -u32 *v_host_irq_timestamp_u32); -/*! - * @brief API used to get the ROM version - * request from the register 0x70 to 0x71 - * bit 0 to 7 - * - * - * @param v_rom_version_u16 : The value ROM version - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_rom_version( -u16 *v_rom_version_u16); -/*! - * @brief API used to get the RAM version - * request from the register 0x72 to 0x73 - * bit 0 to 7 - * - * - * @param v_ram_version_u16 : The value RAM version - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_ram_version( -u16 *v_ram_version_u16); -/*! - * @brief API used to get the product id - * request from the register 0x90 - * bit 0 to 7 - * - * - * @param v_product_id_u8 : The value of product id - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_product_id(u8 *v_product_id_u8); -/*! - * @brief API used to get the revision id - * request from the register 0x91 - * bit 0 to 7 - * - * - * @param v_revision_id_u8 : The value of revision id - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_revision_id(u8 *v_revision_id_u8); -/*! - * @brief API used to get the CRC host - * request from the register 0x91 - * bit 0 to 7 - * - * - * @param v_crc_host_u32 : The value of CRC host - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_crc_host(u32 *v_crc_host_u32); -/*! - * @brief API used to set the reset - * request from the register 0x9B - * bit 0 to 7 - * - * - * @param v_reset_request_u8 : The value of parameter request - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_reset_request(u8 v_reset_request_u8); -/*! - * @brief API used to get the meta event control from - * system page-1 parameter 1 - * - * @param v_meta_event_u8 : The value of meta event selection - * meta event | value - * --------------------------|--------------- - * BHY_META_EVENT_1 | 1 - * BHY_META_EVENT_2 | 2 - * BHY_META_EVENT_3 | 3 - * BHY_META_EVENT_4 | 4 - * BHY_META_EVENT_5 | 5 - * BHY_META_EVENT_6 | 6 - * BHY_META_EVENT_7 | 7 - * BHY_META_EVENT_8 | 8 - * BHY_META_EVENT_9 | 9 - * BHY_META_EVENT_10 | 10 - * BHY_META_EVENT_11 | 11 - * BHY_META_EVENT_12 | 12 - * BHY_META_EVENT_13 | 13 - * BHY_META_EVENT_14 | 14 - * BHY_META_EVENT_15 | 15 - * BHY_META_EVENT_16 | 16 - * BHY_META_EVENT_17 | 17 - * BHY_META_EVENT_18 | 18 - * BHY_META_EVENT_19 | 19 - * BHY_META_EVENT_20 | 20 - * BHY_META_EVENT_21 | 21 - * BHY_META_EVENT_22 | 22 - * BHY_META_EVENT_23 | 23 - * BHY_META_EVENT_24 | 24 - * BHY_META_EVENT_25 | 25 - * BHY_META_EVENT_26 | 26 - * BHY_META_EVENT_27 | 27 - * BHY_META_EVENT_28 | 28 - * BHY_META_EVENT_29 | 29 - * BHY_META_EVENT_30 | 30 - * BHY_META_EVENT_31 | 31 - * BHY_META_EVENT_32 | 32 - * - * @param meta_intr : - * The value of meta event interrupt selection - * - * @param meta_event : - * The value of meta event event selection - * - * @param v_event_type_u8 : The value of - * interrupt or event selection - * value | Event - * -------------------------|---------------- - * BHY_META_EVENT_INTR_ENABLE | 0 - * BHY_META_EVENT_ENABLE | 1 - * - * @param v_meta_parameter_request_u8: The value of parameter request - * for wakeup or non wakeup fifo - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_meta_event( -u8 v_meta_event_u8, -u8 v_input_data_u8, u8 v_event_type_u8, -u8 v_meta_parameter_request_u8); -/*! - * @brief API used to get the meta event control from - * system page-1 parameter 1 - * - * @param v_meta_event_u8 : The value of meta event selection - * meta event | value - * --------------------------|--------------- - * BHY_META_EVENT_1 | 1 - * BHY_META_EVENT_2 | 2 - * BHY_META_EVENT_3 | 3 - * BHY_META_EVENT_4 | 4 - * BHY_META_EVENT_5 | 5 - * BHY_META_EVENT_6 | 6 - * BHY_META_EVENT_7 | 7 - * BHY_META_EVENT_8 | 8 - * BHY_META_EVENT_9 | 9 - * BHY_META_EVENT_10 | 10 - * BHY_META_EVENT_11 | 11 - * BHY_META_EVENT_12 | 12 - * BHY_META_EVENT_13 | 13 - * BHY_META_EVENT_14 | 14 - * BHY_META_EVENT_15 | 15 - * BHY_META_EVENT_16 | 16 - * BHY_META_EVENT_17 | 17 - * BHY_META_EVENT_18 | 18 - * BHY_META_EVENT_19 | 19 - * BHY_META_EVENT_20 | 20 - * BHY_META_EVENT_21 | 21 - * BHY_META_EVENT_22 | 22 - * BHY_META_EVENT_23 | 23 - * BHY_META_EVENT_24 | 24 - * BHY_META_EVENT_25 | 25 - * BHY_META_EVENT_26 | 26 - * BHY_META_EVENT_27 | 27 - * BHY_META_EVENT_28 | 28 - * BHY_META_EVENT_29 | 29 - * BHY_META_EVENT_30 | 30 - * BHY_META_EVENT_31 | 31 - * BHY_META_EVENT_32 | 32 - * - * @param meta_intr : - * The value of meta event interrupt selection - * - * @param meta_event : - * The value of meta event event selection - * - * @param v_event_type_u8 : The value of - * interrupt or event selection - * value | Event - * -------------------------|---------------- - * BHY_META_EVENT_INTR_ENABLE | 0 - * BHY_META_EVENT_ENABLE | 1 - * - * @param v_meta_parameter_request_u8: The value of parameter request - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_meta_event( -u8 v_meta_event_u8, u8 v_event_type_u8, -u8* meta_event_intr, -u8* meta_event_event, -u8 v_meta_parameter_request_u8); -/*! - * @brief API used to get the fifo water mark from - * system page-1 parameter 2 - * - * - * @param v_parameter_u8 : - * The value of fifo water mark wakeup or non-wakeup selection - * water mark | value - * --------------------------|--------------- - * FIFO_WM_WAKEUP | 0 - * FIFO_WM_NON_WAKEUP | 1 - * - * @param v_fifo_water_mark_u16: The value of fifo water mark - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_water_mark( -u8 v_parameter_u8, u16 *v_fifo_water_mark_u16); -/*! - * @brief API used to set the fifo water mark from - * system page-1 parameter 2 - * - * - * @param v_parameter_u8 : - * The value of fifo water mark wakeup or non-wakeup selection - * water mark | value - * --------------------------|--------------- - * FIFO_WM_WAKEUP | 0 - * FIFO_WM_NON_WAKEUP | 1 - * - * @param v_fifo_water_mark_u16: The value of fifo water mark - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_fifo_water_mark(u8 v_parameter_u8, -u16 v_fifo_water_mark_u16); -/*! - * @brief API used to get the fifo size from - * system page-1 parameter 2 - * @note wakeup - bytes from 2 and 3 - * @note non wakeup - bytes from 6 and 7 - * - * - * @param v_fifo_size_select_u8 : - * The value of fifo size mark wakeup or non-wakeup selection - * water mark | value - * --------------------------|--------------- - * BHY_FIFO_SIZE_WAKEUP | 0 - * BHY_FIFO_SIZE_NON_WAKEUP | 1 - * - * @param v_fifo_size_u16 : The value of fifo size - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_size( -u8 v_fifo_size_select_u8, u16 *v_fifo_size_u16); - -/*! - * @brief API used to get the sensor status bank from - * system page-1 parameter 3 to 6 - * @note Sensor status bank 0 : parameter 3 contains 1 to 16 sensor type - * @note Sensor status bank 1 : parameter 4 contains 17 to 32 sensor type - * @note Sensor status bank 2 : parameter 5 contains 33 to 48 sensor type - * @note Sensor status bank 3 : parameter 6 contains 49 to 64 sensor type - * - * - * @param v_sensor_type_u8 : - * The value of sensor status bank sensor type selection - * v_sensor_type_u8 | value - * -----------------------------------|--------------- - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_1 | 0 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_2 | 1 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_3 | 3 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_4 | 4 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_5 | 5 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_6 | 6 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_7 | 7 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_8 | 8 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_9 | 9 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_10 | 10 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_11 | 11 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_12 | 12 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_13 | 13 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_14 | 14 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_15 | 15 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_16 | 16 - * - * - * @param v_sensor_status_parameter_u8 : - * The value of sensor status bank parameter selection - * parameter | value - * -------------------------------|----------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_3 | 0x03 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_4 | 0x04 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_5 | 0x05 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_6 | 0x06 - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_sensor_status_bank( -u8 v_sensor_status_parameter_u8, u8 v_sensor_type_u8); -/*! - * @brief API used to get the host IRQ time - * stamp and current time stamp from - * system page-1 parameter 30 - * Host IRQ time stamp bytes 0 to 3 - * Current time stamp bytes 4 to 7 - * - * - * @param v_time_stamp_selection_u8 : - * The value of Host IRQ or current time stamp selection - * time stamp | value - * --------------------------|--------------- - * BHY_HOST_IRQ_TIMESTAMP | 0 - * BHY_CURRENT_TIME_STAMP | 1 - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * @param v_time_stamp_u32 : - * The value of Host IRQ or current time stamp - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_time_stamp( -u8 v_time_stamp_selection_u8, u32 *v_time_stamp_u32); -/*! - * @brief API used to get the physical sensor status - * system page-1 parameter 31 - * @note Accel sample rate byte 0 and 1 - * @note Accel dynamic range byte 2 and 3 - * @note Accel flags byte 4 - * @note Gyro sample rate byte 5 and 6 - * @note Gyro dynamic range byte 7 and 8 - * @note Gyro flags byte 9 - * @note Mag sample rate byte 10 and 11 - * @note Mag dynamic range byte 12 and 13 - * @note Mag flags byte 14 - * - * @param accel_status : contains the accel physical status - * @param gyro_status : contains the gyro physical status - * @param mag_status : contains the mag physical status - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_physical_sensor_status( -struct accel_physical_status_t *accel_status, -struct gyro_physical_status_t *gyro_status, -struct mag_physical_status_t *mag_status); -/*! - * @brief API used to get the non wakeup sensor information, - * Sensor page-3 parameter 1 to 31 - * - * @param v_parameter_request_u8 : - * Value desired parameter to read non wakeup sensor information - * param_request | value - * -----------------------------------|------------ - * BHY_PARAMETER_REQUEST_READ_PARAMETER_1 | 0x01 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_2 | 0x02 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_3 | 0x03 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_4 | 0x04 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_5 | 0x05 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_6 | 0x06 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_7 | 0x87 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_8 | 0x88 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_9 | 0x89 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_10 | 0x8A - * BHY_PARAMETER_REQUEST_READ_PARAMETER_11 | 0x8B - * BHY_PARAMETER_REQUEST_READ_PARAMETER_12 | 0x8C - * BHY_PARAMETER_REQUEST_READ_PARAMETER_13 | 0x8D - * BHY_PARAMETER_REQUEST_READ_PARAMETER_14 | 0x8E - * BHY_PARAMETER_REQUEST_READ_PARAMETER_15 | 0x8F - * BHY_PARAMETER_REQUEST_READ_PARAMETER_16 | 0x90 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_17 | 0x91 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_18 | 0x92 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_19 | 0x93 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_20 | 0x94 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_21 | 0x95 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_22 | 0x96 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_23 | 0x97 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_24 | 0x98 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_25 | 0x99 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_31 | 0x9F - * - * @param sensor_information : - * holds the value of non wakeup sensor information - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_non_wakeup_sensor_information( -u8 v_parameter_request_u8, -struct sensor_information_non_wakeup_t *sensor_information); -/*! - * @brief API used to get the wakeup sensor information, - * Sensor page-3 parameter 32 to 63 - * - * @param v_parameter_request_u8 : - * Value desired parameter to read non wakeup sensor information - * param_request | value | Virtual sensor - * ----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_33 | 0xA1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_34 | 0xA2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_35 | 0xA3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_36 | 0xA4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_37 | 0xA5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_38 | 0xA6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_39 | 0xA7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_40 | 0xA8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_41 | 0xA9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_42 | 0xAA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_43 | 0xAB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_44 | 0xAC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_45 | 0xAD | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_46 | 0xAE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_47 | 0xAF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_48 | 0xB0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_49 | 0xB1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_50 | 0xB2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_51 | 0xB3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_52 | 0xB4 | Geomagnetic rotation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_53 | 0xB5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_54 | 0xB6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_55 | 0xB7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_56 | 0xB8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_57 | 0xB9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_63 | 0xBF | Activity - * - * @param sensor_information : - * holds the value of non wakeup sensor information - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_wakeup_sensor_information( -u8 v_parameter_request_u8, -struct sensor_information_wakeup_t *sensor_information); -/*! - * @brief API used to set the sensor non wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param sensor_configuration : contains the non wakeup sensor configuration - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * ----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_65 | 0xC1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_66 | 0xC2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_67 | 0xC3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_68 | 0xC4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_69 | 0xC5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_70 | 0xC6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_71 | 0xC7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_72 | 0xC8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_73 | 0xC9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_74 | 0xCA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_75 | 0xCB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_76 | 0xCC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_77 | 0xCD | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_78 | 0xCE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_79 | 0xCF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_80 | 0xD0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_81 | 0xD1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_82 | 0xD2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_83 | 0xD3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_84 | 0xD4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_85 | 0xD5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_86 | 0xD6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_87 | 0xD7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_88 | 0xD8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_89 | 0xD9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_95 | 0xDF | Activity - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_non_wakeup_sensor_configuration( -struct sensor_configuration_non_wakeup_t *sensor_configuration, -u8 v_parameter_request_u8); -/*! - * @brief API used to get the sensor non wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param v_sample_rate_u16 : contains the non wakeup sample rate data - * @param v_max_report_latency_u16: - * contains the non wakeup max report latency - * @param v_change_sensitivity_u16: contains the non wakeup sensitivity - * @param v_dynamic_range_u16: contains the non wakeup dynamic range - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * ----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_65 | 0xC1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_66 | 0xC2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_67 | 0xC3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_68 | 0xC4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_69 | 0xC5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_70 | 0xC6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_71 | 0xC7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_72 | 0xC8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_73 | 0xC9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_74 | 0xCA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_75 | 0xCB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_76 | 0xCC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_77 | 0xCD | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_78 | 0xCE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_79 | 0xCF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_80 | 0xD0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_81 | 0xD1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_82 | 0xD2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_83 | 0xD3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_84 | 0xD4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_85 | 0xD5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_86 | 0xD6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_87 | 0xD7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_88 | 0xD8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_89 | 0xD9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_95 | 0xDF | Activity - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_non_wakeup_sensor_configuration( -u8 v_parameter_request_u8, u16 *v_sample_rate_u16, -u16 *v_max_report_latency_u16, -u16 *v_change_sensitivity_u16, u16 *v_dynamic_range_u16); -/*! - * @brief API used to set the sensor wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param sensor_configuration : contains the wakeup sensor configuration - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * -----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_97 | 0xE1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_98 | 0xE2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_99 | 0xE3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_100 | 0xE4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_101 | 0xE5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_102 | 0xE6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_103 | 0xE7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_104 | 0xE8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_105 | 0xE9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_106 | 0xEA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_107 | 0xEB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_108 | 0xEC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_109 | 0xED | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_110 | 0xEE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_111 | 0xEF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_112 | 0xF0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_113 | 0xF1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_114 | 0xF2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_115 | 0xF3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_116 | 0xF4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_117 | 0xF5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_118 | 0xF6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_119 | 0xF7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_120 | 0xF8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_121 | 0xF9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_127 | 0xFF | Activity - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_wakeup_sensor_configuration( -struct sensor_configuration_wakeup_t *sensor_configuration, -u8 v_parameter_request_u8); -/*! - * @brief API used to get the sensor wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param v_sample_rate_u16 : contains the wakeup sample rate data - * @param v_max_report_latency_u16: contains the wakeup max report latency - * @param v_change_sensitivity_u16: contains the wakeup sensitivity - * @param v_dynamic_range_u16: contains the wakeup dynamic range - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * -----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_97 | 0xE1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_98 | 0xE2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_99 | 0xE3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_100 | 0xE4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_101 | 0xE5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_102 | 0xE6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_103 | 0xE7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_104 | 0xE8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_105 | 0xE9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_106 | 0xEA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_107 | 0xEB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_108 | 0xEC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_109 | 0xED | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_110 | 0xEE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_111 | 0xEF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_112 | 0xF0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_113 | 0xF1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_114 | 0xF2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_115 | 0xF3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_116 | 0xF4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_117 | 0xF5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_118 | 0xF6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_119 | 0xF7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_120 | 0xF8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_121 | 0xF9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_127 | 0xFF | Activity - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_wakeup_sensor_configuration( -u8 v_parameter_request_u8, u16 *v_sample_rate_u16, -u16 *v_max_report_latency_u16, -u16 *v_change_sensitivity_u16, u16 *v_dynamic_range_u16); -/*! - * @brief API used to set the soft pass through - * Sensor page-15 parameter 0 to 7 - * - * @param soft_pass_through : - * contains the value of soft pass through - * - * @param v_parameter_request_u8: value of selected parameter request - * parameter | value - * ------------------------------------|-------------------- - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_1 | 0x01 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2 | 0x02 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_3 | 0x03 - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_soft_pass_through( -struct soft_pass_through_write_t *soft_pass_through, -u8 v_parameter_request_u8); -/*! - * @brief API used to get the soft pass through - * Sensor page-15 parameter 0 to 7 - * - * @param soft_pass_through : - * contains the value of soft pass through - * - * @param v_parameter_request_u8: value of selected parameter request - * parameter | value - * ------------------------------------|-------------------- - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_1 | 0x01 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2 | 0x02 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_3 | 0x03 - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_soft_pass_through( -struct soft_pass_through_read_t *soft_pass_through, -u8 v_parameter_request_u8); -/*! - * @brief API used to get the data from the parameter - * I2C page register from 0x3B to 0x4A - * - * - * @param v_page_select_u8 : This input value for set the desired page - * @param v_parameter_request_u8 : - * This input value for set the desired parameter - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_read_parameter_bytes( -u8 v_page_select_u8, u8 v_parameter_request_u8); -/*! - * @brief API used to set the data from the parameter - * I2C page register from 0x5C to 0x63 - * - * - * @param v_page_select_u8 : This input value for set the desired page - * @param v_parameter_request_u8 : - * This input value for set the desired parameter - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_write_parameter_bytes( -u8 v_page_select_u8, u8 v_parameter_request_u8); -/*! - * @brief API used to flash the ram patch. There is two versions, - * one that accepts constant input data - * - * - * @param memory : The value of data from the - * ram patch. - * @param v_file_length_u32 : Length of the patch data - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_initialize( -u8 *memory, u32 v_file_length_u32); -BHY_RETURN_FUNCTION_TYPE bhy_initialize_from_rom( -const u8 *memory, const u32 v_file_length_u32); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_support.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_support.h deleted file mode 100644 index ee659b5..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_support.h +++ /dev/null @@ -1,110 +0,0 @@ -/*! - * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holder nor the names of the - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - * The information provided is believed to be accurate and reliable. - * The copyright holder assumes no responsibility - * for the consequences of use - * of such information nor for any infringement of patents or - * other rights of third parties which may result from its use. - * No license is granted by implication or otherwise under any patent or - * patent rights of the copyright holder. - * - * - * @file bhy_support.h - * - * @date 12/19/2016 - * - * @brief driver on MCU for bhy - * - * - */ - -#ifndef BHY_SUPPORT_H_ -#define BHY_SUPPORT_H_ -#ifdef __cplusplus -extern "C"{ -#endif -/********************************************************************************/ -/* HEADER FILES */ -/********************************************************************************/ -#include "bhy.h" - -/********************************************************************************/ -/* MACROS */ -/********************************************************************************/ -#define RETRY_NUM 3 - -/*! determines the I2C slave address of BHy -* The default I2C address of the BHy device is 0101000b (0x28). */ -/* 0x28 CONFLICTS ON ATMEL DEV KITS WITH THE ONBOARD EDBG!!!! */ -#define BHY_I2C_SLAVE_ADDRESS BHY_I2C_ADDR1 -/*! the delay required to wait for BHY chip to reset */ -#define BHY_RESET_DELAY_MS UINT32_C(50) - -/*! these two macros are defined for i2c read/write limitation of host */ -/*! users must modify these two macros according to their own IIC hardware design */ -#define I2C_ONCE_WRITE_MAX_COUNT (8) -#define I2C_ONCE_READ_MAX_COUNT (8) - -/********************************************************************************/ -/* FUNCTION DECLARATIONS */ -/********************************************************************************/ -/*! -* @brief Initializes BHY smart sensor and its required connections -* -*/ -int8_t bhy_initialize_support(void); - -/*! -* @brief Initiates a delay of the length of the argument in milliseconds -* -* @param[in] msec Delay length in terms of milliseconds -* -*/ -void bhy_delay_msec(uint32_t msec); - -/*! - * @brief provides a print function to the bhy driver on DD2.0 platform - */ -void bhy_printf (const u8 * string); - -/*! - * @brief provides the mcu reference code version - */ -uint8_t *bhy_get_version(void); - -#ifdef __cplusplus -} -#endif - -#endif /* BHY_SUPPORT_H_ */ diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver.h deleted file mode 100644 index 08df408..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver.h +++ /dev/null @@ -1,259 +0,0 @@ -/*! - * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holder nor the names of the - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - * The information provided is believed to be accurate and reliable. - * The copyright holder assumes no responsibility - * for the consequences of use - * of such information nor for any infringement of patents or - * other rights of third parties which may result from its use. - * No license is granted by implication or otherwise under any patent or - * patent rights of the copyright holder. - * - * - * @file bhy_uc_driver.h - * - * @date 12/19/2016 - * - * @brief headfile of driver on MCU for bhy - * - * - */ - -#ifndef BHY_UC_DRIVER_H_ -#define BHY_UC_DRIVER_H_ - -#ifdef __cplusplus -extern "C"{ -#endif - - -#include "bhy_support.h" -#include "bhy_uc_driver_types.h" - -/****************************************************************************/ -/* Driver Functions */ -/****************************************************************************/ - - -/* initializes the driver, the API and loads the ram patch into the sensor */ -BHY_RETURN_FUNCTION_TYPE bhy_driver_init - (const uint8_t *bhy_fw_data); - -/* this function configures meta event */ -BHY_RETURN_FUNCTION_TYPE bhy_meta_event_set_config( bhy_meta_event_type_t meta_event_id, - bhy_meta_event_fifo_type_t fifo_sel, - uint8_t enable_state, uint8_t int_enable_state); - -/* this function gets configuration from specific meta event */ -BHY_RETURN_FUNCTION_TYPE bhy_meta_event_get_config( bhy_meta_event_type_t meta_event_id, - bhy_meta_event_fifo_type_t fifo_sel, - uint8_t* p_enable_state, uint8_t* p_int_enable_state); - -/***************************************************************************** - * Function : bhy_mapping_matrix_set - * Description : Set mapping matrix to a corresponding physical sensor. - * Input : index: physical sensor index. - * PHYSICAL_SENSOR_INDEX_ACC = 0, - * PHYSICAL_SENSOR_INDEX_MAG = 1, - * PHYSICAL_SENSOR_INDEX_GYRO = 2, - * p_mapping_matrix: pointer to a "int8_t mapping_matrix[9]". - * Output : None - * Return : -*****************************************************************************/ -BHY_RETURN_FUNCTION_TYPE bhy_mapping_matrix_set(bhy_physical_sensor_index_type_t index , int8_t *p_mapping_matrix); - -/***************************************************************************** - * Function : bhy_mapping_matrix_get - * Description : Get mapping matrix from a corresponding physical sensor. - * Input : index: physical sensor index. - * PHYSICAL_SENSOR_INDEX_ACC = 0, - * PHYSICAL_SENSOR_INDEX_MAG = 1, - * PHYSICAL_SENSOR_INDEX_GYRO = 2, - * Output : p_mapping_matrix: pointer to a "int8_t mapping_matrix[9]". - * Return : -*****************************************************************************/ -BHY_RETURN_FUNCTION_TYPE bhy_mapping_matrix_get(bhy_physical_sensor_index_type_t index , int8_t *p_mapping_matrix); - -/* This function uses the soft pass-through feature to perform single multi-*/ -/* byte transfers in order to write the data. parameters: */ -/* addr i2c address of the slave device */ -/* reg register address to write to */ -/* data pointer to the data buffer with data to write to the */ -/* slave */ -/* length number of bytes to write to the slave */ -/* increment_reg if true, the function will automatically increment the */ -/* register between successive 4-bytes transfers */ -BHY_RETURN_FUNCTION_TYPE bhy_soft_passthru_write(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t length, uint8_t increment_reg); - -/* This function uses the soft pass-through feature to perform single multi-*/ -/* byte transfers in order to read the data. parameters: */ -/* addr i2c address of the slave device */ -/* reg register address to read from */ -/* data pointer to the data buffer where to place the data read */ -/* from the slave */ -/* length number of bytes to fread from the slave */ -/* increment_reg if true, the function will automatically increment the */ -/* register between successive 4-bytes transfers */ -BHY_RETURN_FUNCTION_TYPE bhy_soft_passthru_read(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t length, uint8_t increment_reg); - -/***************************************************************************** - * Function : bhy_gp_register_write - * Description : Write data to specific GP register. - * Input : bhy_gp_register_type_t: GP register address. - * : p_data: pointer to receive buffer. - * Output : - * Return : -*****************************************************************************/ -BHY_RETURN_FUNCTION_TYPE bhy_gp_register_write(bhy_gp_register_type_t gp_reg, uint8_t data); - -/***************************************************************************** - * Function : bhy_gp_register_read - * Description : Read data from specific GP register. - * Input : bhy_gp_register_type_t: GP register address. - * Output : p_data: pointer to receive buffer. - * Return : -*****************************************************************************/ -BHY_RETURN_FUNCTION_TYPE bhy_gp_register_read(bhy_gp_register_type_t gp_reg, uint8_t *p_data); - -/* this functions enables the selected virtual sensor */ -BHY_RETURN_FUNCTION_TYPE bhy_enable_virtual_sensor - (bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status, uint16_t sample_rate, - uint16_t max_report_latency_ms, uint8_t flush_sensor, uint16_t change_sensitivity, - uint16_t dynamic_range); - -/* this functions disables the selected virtual sensor */ -BHY_RETURN_FUNCTION_TYPE bhy_disable_virtual_sensor - (bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status); - -/* retrieves the fifo data. it needs a buffer of at least 51 bytes to work */ -/* it outputs the data into the variable buffer. the number of bytes read */ -/* into bytes_read and the bytes remaining in the fifo into bytes_left. */ -/* Setting BST_APPLICATION_BOARD to 1 will limit the size to 51 bytes all */ -/* the time. Arguments : */ -/* buffer Pointer to the buffer to use for the fifo readout. */ -/* buffer_size Size of the buffer to work with. Needs to be 51 bytes+ */ -/* bytes_read Pointer to output the number of bytes actually read from*/ -/* the fifo. */ -/* bytes_left Pointer to output the number of bytes still in the fifo.*/ -/* This function automatically keeps track of the current */ -/* fifo readout progress. -*/ -BHY_RETURN_FUNCTION_TYPE bhy_read_fifo(uint8_t * buffer, uint16_t buffer_size, - uint16_t * bytes_read, uint16_t * bytes_left); - -/* This function parses the next fifo packet and return it into a generic */ -/* data structure while telling you what the data type is so you can */ -/* retrieve it. Here are the parameters: */ -/* fifo_buffer pointer to the fifo byte that is the start of a */ -/* packet. This pointer will be automatically */ -/* incremented so you can call this function in a loop */ -/* fifo_buffer_length pointer to the amount of data left in the */ -/* fifo_buffer. This data will be automatically */ -/* decremented so you can call this function in a loop */ -/* fifo_data_output buffer in which to place the data */ -/* fifo_data_type data type output */ -BHY_RETURN_FUNCTION_TYPE bhy_parse_next_fifo_packet - (uint8_t **fifo_buffer, uint16_t *fifo_buffer_length, - bhy_data_generic_t * fifo_data_output, bhy_data_type_t * fifo_data_type); - -/* This function will detect the timestamp packet accordingly and update */ -/* either the MSW or the LSW of the system timestamp. Arguments : */ -/* timestamp_packet The timestamp packet processed by the parse_next_ */ -/* fifo_packet, properly typecasted */ -/* system_timestamp Pointer to a 32bit variable holding the system */ -/* timestamp in 1/32000th seconds. it will wrap around */ -/* every 36 hours. */ -BHY_RETURN_FUNCTION_TYPE bhy_update_system_timestamp(bhy_data_scalar_u16_t *timestamp_packet, - uint32_t * system_timestamp); - -/* This function writes arbitrary data to an arbitrary parameter page. To be*/ -/* used carefully since it can override system configurations. Refer to the */ -/* datasheet for free to use parameter pages. Here are the arguments: */ -/* page Page number. Valid range 1 to 15. */ -/* parameter Parameter number. Valid range 0 to 127. */ -/* data Pointer to the data source to write to. */ -/* length Number of bytes to write. Valid range 1 to 8. */ -BHY_RETURN_FUNCTION_TYPE bhy_write_parameter_page(uint8_t page, uint8_t parameter, - uint8_t *data, uint8_t length); - -/* This function reads arbitrary data to an arbitrary parameter page. To be*/ -/* used carefully since it can override system configurations. Refer to the */ -/* datasheet for free to use parameter pages. Here are the arguments: */ -/* page Page number. Valid range 1 to 15. */ -/* parameter Parameter number. Valid range 0 to 127. */ -/* data Pointer to the data source to write to. */ -/* length Number of bytes to read. Valid range 1 to 16. */ -BHY_RETURN_FUNCTION_TYPE bhy_read_parameter_page(uint8_t page, uint8_t parameter, - uint8_t *data, uint8_t length); - -/* This function write a new SIC matrix to the BHy. Arguments are: */ -/* sic_matrix pointer to array of 9 floats with SIC matrix */ -BHY_RETURN_FUNCTION_TYPE bhy_set_sic_matrix(float * sic_matrix); - -/* This function reads out the current SIC matrix from BHy. Arguments are: */ -/* sic_matrix pointer to array of 9 floats with SIC matrix */ -BHY_RETURN_FUNCTION_TYPE bhy_get_sic_matrix(float * sic_matrix); - -/* This function outputs the debug data to function pointer. You need to */ -/* provide a function that takes as argument a zero-terminated string and */ -/* prints it */ -void bhy_print_debug_packet(bhy_data_debug_t *packet, void (*debug_print_ptr)(const uint8_t *)); - -BHY_RETURN_FUNCTION_TYPE bhy_sync_cus_evt_size(void); - -int8_t bhy_get_cus_evt_size(bhy_virtual_sensor_t sensor_id); - - -#if BHY_CALLBACK_MODE -/* These functions will install the callback and return an error code if */ -/* there is already a callback installed */ -BHY_RETURN_FUNCTION_TYPE bhy_install_sensor_callback (bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status, void (*sensor_callback)(bhy_data_generic_t *, bhy_virtual_sensor_t)); -BHY_RETURN_FUNCTION_TYPE bhy_install_timestamp_callback(uint8_t wakeup_status, void (*timestamp_callback)(bhy_data_scalar_u16_t *)); -BHY_RETURN_FUNCTION_TYPE bhy_install_meta_event_callback(bhy_meta_event_type_t meta_event_id, void (*meta_event_callback)(bhy_data_meta_event_t *, bhy_meta_event_type_t)); - - -/* These functions will uninstall the callback and return an error code if */ -/* there was no callback installed */ -BHY_RETURN_FUNCTION_TYPE bhy_uninstall_sensor_callback (bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status); -BHY_RETURN_FUNCTION_TYPE bhy_uninstall_timestamp_callback (uint8_t wakeup_status ); -BHY_RETURN_FUNCTION_TYPE bhy_uninstall_meta_event_callback (bhy_meta_event_type_t meta_event_id); - -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* BHY_UC_DRIVER_H_ */ - -/** @}*/ diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_config.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_config.h deleted file mode 100644 index 73f693c..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_config.h +++ /dev/null @@ -1,74 +0,0 @@ -/*! - * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holder nor the names of the - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - * The information provided is believed to be accurate and reliable. - * The copyright holder assumes no responsibility - * for the consequences of use - * of such information nor for any infringement of patents or - * other rights of third parties which may result from its use. - * No license is granted by implication or otherwise under any patent or - * patent rights of the copyright holder. - * - * @file bhy_uc_driver_config.h - * - * @date 12/15/2016 - * - * @brief header file of bhy_uc_driver.c - * - */ - - - - -#ifndef BHY_UC_DRIVER_CONFIG_H_ -#define BHY_UC_DRIVER_CONFIG_H_ -#ifdef __cplusplus -extern "C"{ -#endif -/****************************************************************************/ -/* Driver configuration */ -/****************************************************************************/ -#define BHY_MCU_REFERENCE_VERSION "1.1.1.0" - -/* Enabling BHY_DEBUG will allow you print all the sensor raw data */ -//#define BHY_DEBUG - -/* Enabling BHY_CALLBACK_MODE will allow you to install callback function */ -/* that will be called from the bhy_parse_next_fifo_packet function. is uses*/ -/* ~250 bytes of ROM and ~350 bytes of RAM */ -#define BHY_CALLBACK_MODE 1 - -#ifdef __cplusplus -} -#endif -#endif /* BHY_UC_DRIVER_CONFIG_H_ */ diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_constants.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_constants.h deleted file mode 100644 index 9cc6bd3..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_constants.h +++ /dev/null @@ -1,144 +0,0 @@ -/*! - * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holder nor the names of the - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - * The information provided is believed to be accurate and reliable. - * The copyright holder assumes no responsibility - * for the consequences of use - * of such information nor for any infringement of patents or - * other rights of third parties which may result from its use. - * No license is granted by implication or otherwise under any patent or - * patent rights of the copyright holder. - * - * @file bhy_uc_driver_constants.h - * - * @date 12/15/2016 - * - * @brief header file of bhy_uc_driver.c - * - */ - - -#ifndef BHY_UC_DRIVER_CONSTANTS_H_ -#define BHY_UC_DRIVER_CONSTANTS_H_ -#ifdef __cplusplus -extern "C"{ -#endif -#include "bhy_uc_driver_config.h" - -/****************************************************************************/ -/* Constants definitions */ -/****************************************************************************/ - -/* definition of all the known IDs. User can add their own IDs to the */ -/* bhy_parse_next_fifo_packet function. follow section 15 table 28 of the */ -/* BHI160 datasheet. */ -#define VS_ID_PADDING 0 -#define VS_ID_ACCELEROMETER 1 -#define VS_ID_MAGNETOMETER 2 -#define VS_ID_ORIENTATION 3 -#define VS_ID_GYROSCOPE 4 -#define VS_ID_LIGHT 5 -#define VS_ID_BAROMETER 6 -#define VS_ID_TEMPERATURE 7 -#define VS_ID_PROXIMITY 8 -#define VS_ID_GRAVITY 9 -#define VS_ID_LINEAR_ACCELERATION 10 -#define VS_ID_ROTATION_VECTOR 11 -#define VS_ID_HUMIDITY 12 -#define VS_ID_AMBIENT_TEMPERATURE 13 -#define VS_ID_UNCALIBRATED_MAGNETOMETER 14 -#define VS_ID_GAME_ROTATION_VECTOR 15 -#define VS_ID_UNCALIBRATED_GYROSCOPE 16 -#define VS_ID_SIGNIFICANT_MOTION 17 -#define VS_ID_STEP_DETECTOR 18 -#define VS_ID_STEP_COUNTER 19 -#define VS_ID_GEOMAGNETIC_ROTATION_VECTOR 20 -#define VS_ID_HEART_RATE 21 -#define VS_ID_TILT_DETECTOR 22 -#define VS_ID_WAKE_GESTURE 23 -#define VS_ID_GLANCE_GESTURE 24 -#define VS_ID_PICKUP_GESTURE 25 -#define VS_ID_CUS1 26 -#define VS_ID_CUS2 27 -#define VS_ID_CUS3 28 -#define VS_ID_CUS4 29 -#define VS_ID_CUS5 30 -#define VS_ID_ACTIVITY 31 - -#define VS_ID_ACCELEROMETER_WAKEUP (VS_ID_ACCELEROMETER+32) -#define VS_ID_MAGNETOMETER_WAKEUP (VS_ID_MAGNETOMETER+32) -#define VS_ID_ORIENTATION_WAKEUP (VS_ID_ORIENTATION+32) -#define VS_ID_GYROSCOPE_WAKEUP (VS_ID_GYROSCOPE+32) -#define VS_ID_LIGHT_WAKEUP (VS_ID_LIGHT+32) -#define VS_ID_BAROMETER_WAKEUP (VS_ID_BAROMETER+32) -#define VS_ID_TEMPERATURE_WAKEUP (VS_ID_TEMPERATURE+32) -#define VS_ID_PROXIMITY_WAKEUP (VS_ID_PROXIMITY+32) -#define VS_ID_GRAVITY_WAKEUP (VS_ID_GRAVITY+32) -#define VS_ID_LINEAR_ACCELERATION_WAKEUP (VS_ID_LINEAR_ACCELERATION+32) -#define VS_ID_ROTATION_VECTOR_WAKEUP (VS_ID_ROTATION_VECTOR+32) -#define VS_ID_HUMIDITY_WAKEUP (VS_ID_HUMIDITY+32) -#define VS_ID_AMBIENT_TEMPERATURE_WAKEUP (VS_ID_AMBIENT_TEMPERATURE+32) -#define VS_ID_UNCALIBRATED_MAGNETOMETER_WAKEUP (VS_ID_UNCALIBRATED_MAGNETOMETER+32) -#define VS_ID_GAME_ROTATION_VECTOR_WAKEUP (VS_ID_GAME_ROTATION_VECTOR+32) -#define VS_ID_UNCALIBRATED_GYROSCOPE_WAKEUP (VS_ID_UNCALIBRATED_GYROSCOPE+32) -#define VS_ID_SIGNIFICANT_MOTION_WAKEUP (VS_ID_SIGNIFICANT_MOTION+32) -#define VS_ID_STEP_DETECTOR_WAKEUP (VS_ID_STEP_DETECTOR+32) -#define VS_ID_STEP_COUNTER_WAKEUP (VS_ID_STEP_COUNTER+32) -#define VS_ID_GEOMAGNETIC_ROTATION_VECTOR_WAKEUP (VS_ID_GEOMAGNETIC_ROTATION_VECTOR+32) -#define VS_ID_HEART_RATE_WAKEUP (VS_ID_HEART_RATE+32) -#define VS_ID_TILT_DETECTOR_WAKEUP (VS_ID_TILT_DETECTOR+32) -#define VS_ID_WAKE_GESTURE_WAKEUP (VS_ID_WAKE_GESTURE+32) -#define VS_ID_GLANCE_GESTURE_WAKEUP (VS_ID_GLANCE_GESTURE+32) -#define VS_ID_PICKUP_GESTURE_WAKEUP (VS_ID_PICKUP_GESTURE+32) -#define VS_ID_CUS1_WAKEUP (VS_ID_CUS1+32) -#define VS_ID_CUS2_WAKEUP (VS_ID_CUS2+32) -#define VS_ID_CUS3_WAKEUP (VS_ID_CUS3+32) -#define VS_ID_CUS4_WAKEUP (VS_ID_CUS4+32) -#define VS_ID_CUS5_WAKEUP (VS_ID_CUS5+32) -#define VS_ID_ACTIVITY_WAKEUP (VS_ID_ACTIVITY+32) - -#define VS_ID_DEBUG 245 -#define VS_ID_TIMESTAMP_LSW_WAKEUP 246 -#define VS_ID_TIMESTAMP_MSW_WAKEUP 247 -#define VS_ID_META_EVENT_WAKEUP 248 -#define VS_ID_BSX_C 249 -#define VS_ID_BSX_B 250 -#define VS_ID_BSX_A 251 -#define VS_ID_TIMESTAMP_LSW 252 -#define VS_ID_TIMESTAMP_MSW 253 -#define VS_ID_META_EVENT 254 - -#ifdef __cplusplus -} -#endif -#endif /* BHY_UC_DRIVER_CONSTANTS_H_ */ diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_types.h b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_types.h deleted file mode 100644 index da7cade..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/inc/bhy_uc_driver_types.h +++ /dev/null @@ -1,334 +0,0 @@ -/*! - * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holder nor the names of the - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - * The information provided is believed to be accurate and reliable. - * The copyright holder assumes no responsibility - * for the consequences of use - * of such information nor for any infringement of patents or - * other rights of third parties which may result from its use. - * No license is granted by implication or otherwise under any patent or - * patent rights of the copyright holder. - * - * @file bhy_uc_driver_types.h - * - * @date 12/15/2016 - * - * @brief header file of bhy_uc_driver.c - * - */ - - -#ifndef BHY_UC_DRIVER_TYPES_H_ -#define BHY_UC_DRIVER_TYPES_H_ - -#include "bhy_uc_driver_constants.h" - -#ifdef __cplusplus -extern "C"{ -#endif - - -/****************************************************************************/ -/* MACRO */ -/****************************************************************************/ -/* system page */ -#define BHY_PAGE_SYSTEM 1 -#define BHY_PARAM_SYSTEM_META_EVENT_CTRL 1 -#define BHY_PARAM_SYSTEM_FIFO_CTRL 2 -#define BHY_PARAM_SYSTEM_STAUS_BANK_0 3 -#define BHY_PARAM_SYSTEM_STAUS_BANK_1 4 -#define BHY_PARAM_SYSTEM_STAUS_BANK_2 5 -#define BHY_PARAM_SYSTEM_STAUS_BANK_3 6 -#define BHY_PARAM_SYSTEM_CUSTOM_VERSION 24 -#define BHY_PARAM_SYSTEM_WAKE_UP_META_EVENT_CTRL 29 -#define BHY_PARAM_SYSTEM_HOST_IRQ_TIMESTAMP 30 -#define BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_STATUS 31 -#define BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_PRESENT 32 -#define BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_DETAIL_0 32 -#define BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_DETAIL_ACC 33 - -#define VS_NON_WAKEUP 0 -#define VS_WAKEUP 32 -#define VS_FLUSH_NONE 0x00 -#define VS_FLUSH_ALL 0xFF -#define VS_FLUSH_SINGLE 0x01 - -#define META_EVENT_1_INT_ENABLE_BIT (1<<0) -#define META_EVENT_1_ENABLE_BIT (1<<1) - -/****************************************************************************/ -/* ENUM */ -/****************************************************************************/ -/* follows section 9.4 table 14 of the BHI160 datasheet */ -typedef enum { - VS_TYPE_ACCELEROMETER = VS_ID_ACCELEROMETER, - VS_TYPE_GEOMAGNETIC_FIELD = VS_ID_MAGNETOMETER, - VS_TYPE_ORIENTATION = VS_ID_ORIENTATION, - VS_TYPE_GYROSCOPE = VS_ID_GYROSCOPE, - VS_TYPE_LIGHT = VS_ID_LIGHT, - VS_TYPE_PRESSURE = VS_ID_BAROMETER, - VS_TYPE_TEMPERATURE = VS_ID_TEMPERATURE, - VS_TYPE_PROXIMITY = VS_ID_PROXIMITY, - VS_TYPE_GRAVITY = VS_ID_GRAVITY, - VS_TYPE_LINEAR_ACCELERATION = VS_ID_LINEAR_ACCELERATION, - VS_TYPE_ROTATION_VECTOR = VS_ID_ROTATION_VECTOR, - VS_TYPE_RELATIVE_HUMIDITY = VS_ID_HUMIDITY, - VS_TYPE_AMBIENT_TEMPERATURE = VS_ID_AMBIENT_TEMPERATURE, - VS_TYPE_MAGNETIC_FIELD_UNCALIBRATED = VS_ID_UNCALIBRATED_MAGNETOMETER, - VS_TYPE_GAME_ROTATION_VECTOR = VS_ID_GAME_ROTATION_VECTOR, - VS_TYPE_GYROSCOPE_UNCALIBRATED = VS_ID_UNCALIBRATED_GYROSCOPE, - VS_TYPE_SIGNIFICANT_MOTION = VS_ID_SIGNIFICANT_MOTION, - VS_TYPE_STEP_DETECTOR = VS_ID_STEP_DETECTOR, - VS_TYPE_STEP_COUNTER = VS_ID_STEP_COUNTER, - VS_TYPE_GEOMAGNETIC_ROTATION_VECTOR = VS_ID_GEOMAGNETIC_ROTATION_VECTOR, - VS_TYPE_HEART_RATE = VS_ID_HEART_RATE, - VS_TYPE_TILT = VS_ID_TILT_DETECTOR, - VS_TYPE_WAKEUP = VS_ID_WAKE_GESTURE, - VS_TYPE_GLANCE = VS_ID_GLANCE_GESTURE, - VS_TYPE_PICKUP = VS_ID_PICKUP_GESTURE, - VS_TYPE_CUS1 = VS_ID_CUS1, - VS_TYPE_CUS2 = VS_ID_CUS2, - VS_TYPE_CUS3 = VS_ID_CUS3, - VS_TYPE_CUS4 = VS_ID_CUS4, - VS_TYPE_CUS5 = VS_ID_CUS5, - VS_TYPE_ACTIVITY_RECOGNITION = VS_ID_ACTIVITY -} bhy_virtual_sensor_t; - -typedef enum { - BHY_META_EVENT_TYPE_NOT_USED = 0, - BHY_META_EVENT_TYPE_FLUSH_COMPLETE = 1, - BHY_META_EVENT_TYPE_SAMPLE_RATE_CHANGED = 2, - BHY_META_EVENT_TYPE_POWER_MODE_CHANGED = 3, - BHY_META_EVENT_TYPE_ERROR = 4, - BHY_META_EVENT_TYPE_ALGORITHM = 5, - /* IDs 6-10 are reserved */ - BHY_META_EVENT_TYPE_SENSOR_ERROR = 11, - BHY_META_EVENT_TYPE_FIFO_OVERFLOW = 12, - BHY_META_EVENT_TYPE_DYNAMIC_RANGE_CHANGED = 13, - BHY_META_EVENT_TYPE_FIFO_WATERMARK = 14, - BHY_META_EVENT_TYPE_SELF_TEST_RESULTS = 15, - BHY_META_EVENT_TYPE_INITIALIZED = 16, - -} bhy_meta_event_type_t; - -typedef enum { - /* group 1 only read for host -s */ - BHY_GP_REG_20 = 0x4B, - BHY_GP_REG_21 = 0x4C, - BHY_GP_REG_22 = 0x4D, - BHY_GP_REG_23 = 0x4E, - BHY_GP_REG_24 = 0x4F, - /* group 1 only read for host -e */ - /* group 2 read & write for host -s */ - BHY_GP_REG_31 = 0x56, - BHY_GP_REG_32 = 0x57, - BHY_GP_REG_33 = 0x58, - BHY_GP_REG_34 = 0x59, - BHY_GP_REG_35 = 0x5A, - BHY_GP_REG_36 = 0x5B, - /* group 2 read & write for host -e */ - /* group 3 read & write for host -s */ - BHY_GP_REG_46 = 0x65, - BHY_GP_REG_47 = 0x66, - BHY_GP_REG_48 = 0x67, - BHY_GP_REG_49 = 0x68, - BHY_GP_REG_50 = 0x69, - BHY_GP_REG_51 = 0x6A, - BHY_GP_REG_52 = 0x6B, - /* group 3 read & write for host -e */ -} bhy_gp_register_type_t; - -/* follows section 15 of the BHI160 datasheet the order of this enumeration */ -/* is important, do not change it */ -typedef enum { - BHY_DATA_TYPE_PADDING = 0, - BHY_DATA_TYPE_QUATERNION = 1, - BHY_DATA_TYPE_VECTOR = 2, - BHY_DATA_TYPE_SCALAR_U8 = 3, - BHY_DATA_TYPE_SCALAR_U16 = 4, - BHY_DATA_TYPE_SCALAR_S16 = 5, - BHY_DATA_TYPE_SCALAR_U24 = 6, - BHY_DATA_TYPE_SENSOR_EVENT = 7, - BHY_DATA_TYPE_UNCALIB_VECTOR = 8, - BHY_DATA_TYPE_META_EVENT = 9, - BHY_DATA_TYPE_BSX = 10, - BHY_DATA_TYPE_DEBUG = 11, - BHY_DATA_TYPE_CUS1 = 12, - BHY_DATA_TYPE_CUS2 = 13, - BHY_DATA_TYPE_CUS3 = 14, - BHY_DATA_TYPE_CUS4 = 15, - BHY_DATA_TYPE_CUS5 = 16, -} bhy_data_type_t; - -typedef enum { - META_EVENT_IN_NON_WAKEUP_FIFO = 1, - META_EVENT_IN_WAKEUP_FIFO = 29, -} bhy_meta_event_fifo_type_t; - -typedef enum -{ - PHYSICAL_SENSOR_INDEX_ACC = 0, - PHYSICAL_SENSOR_INDEX_MAG, - PHYSICAL_SENSOR_INDEX_GYRO, - PHYSICAL_SENSOR_COUNT -} bhy_physical_sensor_index_type_t; - -/****************************************************************************/ -/* STRUCTRE DEFINITION */ -/****************************************************************************/ - -/* definition of structures of all the data types */ -typedef struct { - uint8_t sensor_id; -} bhy_data_padding_t; - -typedef struct { - uint8_t sensor_id; - int16_t x; - int16_t y; - int16_t z; - int16_t w; - int16_t estimated_accuracy; -} bhy_data_quaternion_t; - -typedef struct { - uint8_t sensor_id; - int16_t x; - int16_t y; - int16_t z; - uint8_t status; -} bhy_data_vector_t; - -typedef struct { - uint8_t sensor_id; - uint8_t data; -} bhy_data_scalar_u8_t; - -typedef struct { - uint8_t sensor_id; - uint16_t data; -} bhy_data_scalar_u16_t; - -typedef struct { - uint8_t sensor_id; - int16_t data; -} bhy_data_scalar_s16_t; - -typedef struct { - uint8_t sensor_id; - uint32_t data; -} bhy_data_scalar_u24_t; - -typedef struct { - uint8_t sensor_id; -} bhy_data_sensor_event_t; - -typedef struct { - uint8_t sensor_id; - int16_t x; - int16_t y; - int16_t z; - int16_t x_bias; - int16_t y_bias; - int16_t z_bias; - uint8_t status; -} bhy_data_uncalib_vector_t; - -typedef struct { - uint8_t meta_event_id; - bhy_meta_event_type_t event_number; - uint8_t sensor_type; - uint8_t event_specific; -} bhy_data_meta_event_t; - -typedef struct { - uint8_t sensor_id; - int32_t x; - int32_t y; - int32_t z; - uint32_t timestamp; -} bhy_data_bsx_t; - -typedef struct { - uint8_t sensor_id; - uint8_t data[13]; -} bhy_data_debug_t; - -typedef struct { - uint8_t sensor_id; - int16_t deltaX; - int16_t deltaY; - int16_t deltaZ; - int16_t confidencelevel; - uint16_t direction; - uint16_t stepCount; -} bhy_data_pdr_t; - -typedef struct { - uint8_t sensor_id; - uint8_t data[16]; -} bhy_data_custom_t; - -typedef struct { - uint8_t sensor_id; - uint8_t status; -} bhy_data_helmet_t; - -/* definition of a generic structure that can contain any data type it */ -/* occupies in RAM the size of the largest data structure, which is 18 bytes*/ -/* as of 08/04/2015 */ -typedef union { - bhy_data_padding_t data_padding; - bhy_data_quaternion_t data_quaternion; - bhy_data_vector_t data_vector; - bhy_data_scalar_u8_t data_scalar_u8; - bhy_data_scalar_u16_t data_scalar_u16; - bhy_data_scalar_s16_t data_scalar_s16; - bhy_data_scalar_u24_t data_scalar_u24; - bhy_data_sensor_event_t data_sensor_event; - bhy_data_uncalib_vector_t data_uncalib_vector; - bhy_data_meta_event_t data_meta_event; - bhy_data_bsx_t data_bsx; - bhy_data_debug_t data_debug; - bhy_data_custom_t data_custom; - bhy_data_pdr_t data_pdr; - bhy_data_helmet_t data_helmet_event; - bhy_data_helmet_t data_helmet_wear_status; -} bhy_data_generic_t; - -#ifdef __cplusplus -} -#endif - - -#endif /* BHY_UC_DRIVER_TYPES_H_ */ diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy.c b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy.c deleted file mode 100644 index 87a306e..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy.c +++ /dev/null @@ -1,4309 +0,0 @@ -/* -**************************************************************************** -* Copyright (C) 2015 - 2016 Bosch Sensortec GmbH -* -* File : bhy.c -* -* Date : 2016/01/22 -* -* Revision : 1.0.4 $ -* -* Usage: Sensor Driver for BHY sensor -* -**************************************************************************** -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* -* Neither the name of the copyright holder nor the names of the -* contributors may be used to endorse or promote products derived from -* this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER -* OR CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, -* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE -* -* The information provided is believed to be accurate and reliable. -* The copyright holder assumes no responsibility -* for the consequences of use -* of such information nor for any infringement of patents or -* other rights of third parties which may result from its use. -* No license is granted by implication or otherwise under any patent or -* patent rights of the copyright holder. -* -**************************************************************************/ -/*! file - brief */ -#include "bhy.h" -/* static structure for bhy */ -static struct bhy_t *p_bhy; -/* contain the saved parameters data*/ -static struct parameter_read_buffer_t read_buffer; -/* contain the load parameters data*/ -static struct parameter_write_buffer_t write_buffer; -/* Assign the sensor status bank*/ -struct sensor_status_bank_t sensor_status_bank; - -/*! - * @brief - * This function is used for initialize - * bus read and bus write functions - * and device address - * product id is read in the register 0x90 bit from 0 to 7 - * - * @param bhy : structure pointer - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * @note - * While changing the parameter of the bhy_t - * consider the following point: - * Changing the reference value of the parameter - * will changes the local copy or local reference - * make sure your changes will not - * affect the reference value of the parameter - * (Better case don't change the reference value of the parameter) - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_init(struct bhy_t *bhy) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* assign bhy ptr */ - p_bhy = bhy; - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_PRODUCT_ID_ADDR, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - /* read product Id */ - p_bhy->product_id = v_data_u8; - return com_rslt; -} -/*! - * @brief - * This API write the data to - * the given register - * - * - * @param v_addr_u8 -> Address of the register - * @param v_data_u8 -> The data from the register - * @param v_len_u8 -> no of bytes to read - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - */ -BHY_RETURN_FUNCTION_TYPE bhy_write_reg(u8 v_addr_u8, -u8 *v_data_u8, u16 v_len_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* check the p_bhy structure as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* write data from register*/ - com_rslt = - p_bhy->BHY_BUS_WRITE_FUNC(p_bhy->device_addr, - v_addr_u8, v_data_u8, v_len_u16); - } - return com_rslt; -} -/*! - * @brief - * This API reads the data from - * the given register - * - * - * @param v_addr_u8 -> Address of the register - * @param v_data_u8 -> The data from the register - * @param v_len_u8 -> no of bytes to read - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - */ -BHY_RETURN_FUNCTION_TYPE bhy_read_reg(u8 v_addr_u8, -u8 *v_data_u8, u16 v_len_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* check the p_bhy structure as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* Read data from register*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - v_addr_u8, v_data_u8, v_len_u16); - } - return com_rslt; -} -/*! - * @brief API used to get the FIFO flush from the register 0x32 - * bit 0 to 7 - * - * - * @param v_fifo_flush_u8 : The value of fifo flush - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_flush(u8 *v_fifo_flush_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_FIFO_FLUSH__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - *v_fifo_flush_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_FIFO_FLUSH); - } - return com_rslt; -} -/*! - * @brief API used to set the FIFO flush from the register 0x32 - * bit 0 to 7 - * - * - * @param v_fifo_flush_u8 : The value of fifo flush - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_fifo_flush(u8 v_fifo_flush_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_FIFO_FLUSH__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_FIFO_FLUSH, - v_fifo_flush_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_FIFO_FLUSH__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } - } - return com_rslt; -} -/*! - * @brief API used to get the chip control from the register 0x34 - * bit 0 to 7 - * @note Chip control used to provide the control fundamental - * behaviour of the chip - * - * @param v_chipcontrol_u8 : The value of chip control - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_chip_control(u8 *v_chipcontrol_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy structure as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the chip control status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_CHIP_CONTROL__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - *v_chipcontrol_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_CHIP_CONTROL); - } - return com_rslt; -} -/*! - * @brief API used to set the chip control from the register 0x34 - * bit 0 to 7 - * @note Chip control used to provide the control fundamental - * behaviour of the chip - * - * @param v_chipcontrol_u8 : The value of chip control - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_chip_control(u8 v_chipcontrol_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy structure as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_CHIP_CONTROL__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_CHIP_CONTROL, - v_chipcontrol_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_CHIP_CONTROL__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } - } - return com_rslt; -} -/*! - * @brief API used to get the host status from the register 0x35 - * bit 0 to 7 - * - * - * @param v_algo_standby_u8 : The value of algorithm standby duration - * @param v_algo_id_u8 : The value of algorithm id - * @param v_host_interface_id_u8 : The value of host interface id - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_host_status( -u8 *v_algo_standby_u8, u8 *v_algo_id_u8, -u8 *v_host_interface_id_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the host status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_STATUS__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - /* read the host algo status*/ - *v_algo_standby_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_STATUS_ALGO_STANDBY); - /* read the host algo id */ - *v_algo_id_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_BHY_HOST_STATUS_ALGO_ID); - /* host interface id */ - *v_host_interface_id_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_BHY_HOST_INTERFACE_ID); - } - return com_rslt; -} -/*! - * @brief API used to get the interrupt status from the register 0x36 - * bit 0 to 7 - * - * - * @param v_host_int_u8 : - * The value of host interrupt status - * @param v_wakeup_water_mark_u8 : - * The value of wakeup watermark status - * @param v_wakeup_latency_u8 : - * The value of wakeup latency status - * @param v_wakeup_immediate_u8 : - * The value of wakeup immediate status - * @param v_non_wakeup_water_mark_u8 : - * The value of non wakeup watermark status - * @param v_non_wakeup_latency_u8 : - * The value of non wakeup latency status - * @param v_non_wakeup_immediate_u8 : - * The value of non wakeup immediate - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_interrupt_status( -u8 *v_host_int_u8, -u8 *v_wakeup_water_mark_u8, u8 *v_wakeup_latency_u8, -u8 *v_wakeup_immediate_u8, u8 *v_non_wakeup_water_mark_u8, -u8 *v_non_wakeup_latency_u8, u8 *v_non_wakeup_immediate_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the interrupt status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_INT_STATUS__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - /* read the host interrupt status*/ - *v_host_int_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_BHY_INT_STATUS_HOST_INTR); - /* read the wakeup watermark interrupt status*/ - *v_wakeup_water_mark_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_WM); - /* read the wakeup latency interrupt status*/ - *v_wakeup_latency_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_LATENCY); - /* read the wakeup immediate interrupt status*/ - *v_wakeup_immediate_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_IMMEDIATE); - /* read the non wakeup watermark interrupt status*/ - *v_non_wakeup_water_mark_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_BHY_INT_STATUS_NON_WAKEUP_WM); - /* read the non wakeup latency interrupt status*/ - *v_non_wakeup_latency_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_INT_STATUS_NON_WAKEUP_LATENCY); - /* read the non wakeup immediate status*/ - *v_non_wakeup_immediate_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_INT_STATUS_NON_WAKEUP_IMMEDIATE); - } - return com_rslt; -} -/*! - * @brief API used to get the chip status from the register 0x37 - * bit 0 to 7 - * - * - * - * @param v_eeprom_detected_u8 : The value of eeprom - * detected status - * @param v_ee_upload_done_u8 : The value of ee_upload - * done status - * @param v_ee_upload_error_u8 : The value of ee_upload - * done error - * @param v_firmware_idle_u8 : The value of firmware error status - * @param v_no_eeprom_u8 : The value of no eeprom status - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_chip_status( -u8 *v_eeprom_detected_u8, -u8 *v_ee_upload_done_u8, u8 *v_ee_upload_error_u8, -u8 *v_firmware_idle_u8, u8 *v_no_eeprom_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the chip status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_CHIP_STATUS__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - /* read eeprom detected status*/ - *v_eeprom_detected_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_CHIP_STATUS_EEPROM_DETECTED); - /* read eeprom upload done status*/ - *v_ee_upload_done_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_DONE); - /* read eeprom upload error status*/ - *v_ee_upload_error_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_ERROR); - /* read firmware idle status*/ - *v_firmware_idle_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_CHIP_STATUS_FIRMWARE_IDLE); - /* read no eeprom detected status*/ - *v_no_eeprom_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_CHIP_STATUS_NO_EEPROM); - } - return com_rslt; -} -/*! - * @brief API used to get the bytes remaining from the register 0x38 - * and 0x39 bit 0 to 7 - * - * - * @param v_bytes_remaining_u16 : The value of bytes remaining - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * @note This indicates how many bytes are available in the FIFO buffer - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_read_bytes_remaining(u16 *v_bytes_remaining_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* Array contains the bytes reaming of FIFO lSB and MSB data - v_data_u8[LSB_ZERO] - LSB - v_data_u8[MSB_ONE] - MSB*/ - u8 v_data_u8[BHY_BYTES_REMAINING_SIZE] = {BHY_INIT_VALUE, - BHY_INIT_VALUE}; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read bytes remaining data */ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_BYTES_REMAINING_LSB_ADDR, - v_data_u8, BHY_BYTES_REMAINING_LENGTH); - /* get the bytes remaining data*/ - *v_bytes_remaining_u16 = (u16) - ((v_data_u8[BHY_BYTES_REMAINING_MSB] - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (v_data_u8[BHY_BYTES_REMAINING_LSB])); - } - return com_rslt; -} -/*! - * @brief API used to get the parameter - * acknowledgement from the register 0x3A - * bit 0 to 7 - * - * - * @param v_parameter_acknowledge_u8: - * The value of parameter acknowledgement - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_acknowledge( -u8 *v_parameter_acknowledge_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the parameter acknowledgement*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_PARAMETER_ACKNOWLEDGE_ADDR, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - *v_parameter_acknowledge_u8 = v_data_u8; - } - return com_rslt; -} -/*! - * @brief API used to get the parameter - * page select from the register 0x54 - * bit 0 to 7 - * - * - * @param v_page_select_u8 : The value of parameter page selection - * page information | value - * ------------------------|---------- - * BHY_PAGE_SELECT_PARAMETER_PAGE | 0 - * BHY_PAGE_SELECT_PARAMETER_SIZE | 1 - * - * @param v_parameter_page_u8 : The value of page selection - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_page_select( -u8 v_page_select_u8, u8 *v_parameter_page_u8) -{ -/* variable used for return the status of communication result*/ -BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; -u8 v_data_u8 = BHY_INIT_VALUE; -/* check the p_bhy pointer as NULL*/ -if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the parameter page information*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_PARAMETER_PAGE_SELECT__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - switch (v_page_select_u8) { - case BHY_PAGE_SELECT_PARAMETER_PAGE: - *v_parameter_page_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_PAGE); - break; - case BHY_PAGE_SELECT_PARAMETER_SIZE: - *v_parameter_page_u8 - = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_SIZE); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - } -return com_rslt; -} -/*! - * @brief API used to set the parameter - * page select from the register 0x54 - * bit 0 to 7 - * - * - * @param v_page_select_u8 : The value of parameter page selection - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_parameter_page_select( -u8 v_page_select_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - v_data_u8 = v_page_select_u8; - /* read the parameter page information*/ - com_rslt = p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_PARAMETER_PAGE_SELECT__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } - return com_rslt; - } - -/*! - * @brief API used to get the host interface control - * from the register 0x55 - * bit 0 to 7 - * - * - * - * @param v_algo_standby_req_u8 : The value of algorithm standby - * request - * @param v_abort_transfer_u8 : The value of abort transfer - * @param v_update_transfer_cnt_u8 : The value of update - * transfer count - * @param v_wakeup_fifo_intr_disable_u8 : - * The value of wakeup fifo host - * interrupt disable - * @param v_ned_coordinates_u8 : The value of NED coordinates - * @param v_ap_suspend_u8 : The value of AP suspended - * @param v_sensor_selftest_u8 : The value of sensor self test - * @param v_non_wakeup_fifo_intr_disable_u8: - * The value of non wakeup fifo host - * interrupt disable - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_host_interface_control( -u8 *v_algo_standby_req_u8, -u8 *v_abort_transfer_u8, u8 *v_update_transfer_cnt_u8, -u8 *v_wakeup_fifo_intr_disable_u8, u8 *v_ned_coordinates_u8, -u8 *v_ap_suspend_u8, u8 *v_sensor_selftest_u8, -u8 *v_non_wakeup_fifo_intr_disable_u8) -{ -/* variable used for return the status of communication result*/ -BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; -u8 v_data_u8 = BHY_INIT_VALUE; -/* check the p_bhy pointer as NULL*/ -if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the host interrupt status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - /* read algorithm standby request status*/ - *v_algo_standby_req_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST); - /* read host interrupt control status*/ - *v_abort_transfer_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER); - /* read update transfer control status*/ - *v_update_transfer_cnt_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT); - /* read wakeup fifo host interrupt disable status*/ - *v_wakeup_fifo_intr_disable_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE); - /* read ned coordinates status*/ - *v_ned_coordinates_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE); - /* read AP suspended status*/ - *v_ap_suspend_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND); - /* read self test status*/ - *v_sensor_selftest_u8 = BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST); - /* read non wakeup fifo host interrupt disable status*/ - *v_non_wakeup_fifo_intr_disable_u8 = - BHY_GET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE); - } -return com_rslt; -} -/*! - * @brief API used to set the host interface control - * from the register 0x55 - * bit 0 to 7 - * - * - * @param v_host_interface_select_u8 : The value of host interface selection - * host interface | value - * -----------------------------------|---------- - * BHY_HOST_ALGO_STANDBY_REQUEST | 0 - * BHY_HOST_ABORT_TRANSFER | 1 - * BHY_HOST_UPDATE_TRANSFER_COUNT | 2 - * BHY_HOST_WAKEUP_FIFO_DISABLE | 3 - * BHY_HOST_NED_COORDINATE | 4 - * BHY_HOST_AP_SUSPEND | 5 - * BHY_HOST_SELFTEST | 6 - * BHY_HOST_NON_WAKEUP_FIFO_DISABLE | 7 - * - * @param v_host_interface_status_u8 : The value of host interface - * Data | status - * -----------------| ----------- - * 0 | DISABLE - * 1 | ENABLE - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_host_interface_control( -u8 v_host_interface_select_u8, u8 v_host_interface_status_u8) -{ -/* variable used for return the status of communication result*/ -BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; -u8 v_data_u8 = BHY_INIT_VALUE; -/* check the p_bhy pointer as NULL*/ -if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; -} else { -switch (v_host_interface_select_u8) { -case BHY_HOST_ALGO_STANDBY_REQUEST: - /* write algorithm standby request status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -case BHY_HOST_ABORT_TRANSFER: - /* write host interrupt control status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -case BHY_HOST_UPDATE_TRANSFER_COUNT: - /* write update transfer control status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -case BHY_HOST_WAKEUP_FIFO_DISABLE: - /* write wakeup fifo host interrupt disable status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -case BHY_HOST_NED_COORDINATE: - /* write ned coordinates status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -case BHY_HOST_AP_SUSPEND: - /* write AP suspended status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -case BHY_HOST_SELFTEST: - /* write self test status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -case BHY_HOST_NON_WAKEUP_FIFO_DISABLE: -/* write non wakeup fifo host interrupt disable status*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - if (BHY_SUCCESS == com_rslt) { - v_data_u8 = BHY_SET_BITSLICE(v_data_u8, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE, - v_host_interface_status_u8); - com_rslt += p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } -break; -default: - com_rslt = BHY_OUT_OF_RANGE; -break; -} -} -return com_rslt; -} -/*! - * @brief API used to get the parameter - * request from the register 0x64 - * bit 0 to 7 - * - * - * @param v_parameter_request_u8 : The value of parameter request - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_request( -u8 *v_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the load parameter request rate*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_PARAMETER_REQUEST_ADDR, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - *v_parameter_request_u8 = v_data_u8; - } - return com_rslt; -} -/*! - * @brief API used to get the parameter - * request from the register 0x64 - * bit 0 to 7 - * - * - * @param v_parameter_request_u8 : The value of parameter request - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_parameter_request( -u8 v_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* write load parameter request*/ - v_data_u8 = v_parameter_request_u8; - com_rslt = p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_LOAD_PARAMETER_REQUEST__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } - return com_rslt; -} -/*! - * @brief API used to get the host IRQ time stamp - * request from the register 0x6C to 0x6F - * bit 0 to 7 - * - * - * @param v_host_irq_timestamp_u32 : The value of host irq time stamp - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_host_irq_timestamp( -u32 *v_host_irq_timestamp_u32) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8[BHY_HOST_IRQ_TIMESTAMP_SIZE] = {BHY_INIT_VALUE, - BHY_INIT_VALUE, BHY_INIT_VALUE, BHY_INIT_VALUE}; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the load parameter request rate*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_BHY_HOST_IRQ_TIMESTAMP_ADDR, - v_data_u8, BHY_HOST_IRQ_TIMESTAMP_SIZE); - *v_host_irq_timestamp_u32 = - (u32)((v_data_u8[BHY_HOST_IRQ_TIMESTAMP_MSB_DATA] - << BHY_SHIFT_BIT_POSITION_BY_24_BITS) - |(v_data_u8[BHY_HOST_IRQ_TIMESTAMP_XXLSB_DATA] - << BHY_SHIFT_BIT_POSITION_BY_16_BITS) - |(v_data_u8[BHY_HOST_IRQ_TIMESTAMP_XLSB_DATA] - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (v_data_u8[BHY_HOST_IRQ_TIMESTAMP_LSB_DATA])); - } - return com_rslt; -} -/*! - * @brief API used to get the ROM version - * request from the register 0x70 to 0x71 - * bit 0 to 7 - * - * - * @param v_rom_version_u16 : The value ROM version - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_rom_version(u16 *v_rom_version_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8[BHY_ROM_VERSION_SIZE] = {BHY_INIT_VALUE, - BHY_INIT_VALUE}; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the load parameter request rate*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_ROM_VERSION_ADDR, - v_data_u8, BHY_ROM_VERSION_SIZE); - *v_rom_version_u16 = - (u16)((v_data_u8[BHY_ROM_VERSION_MSB_DATA] - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (v_data_u8[BHY_ROM_VERSION_LSB_DATA])); - } - return com_rslt; -} -/*! - * @brief API used to get the RAM version - * request from the register 0x72 to 0x73 - * bit 0 to 7 - * - * - * @param v_ram_version_u16 : The value RAM version - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_ram_version( -u16 *v_ram_version_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8[BHY_RAM_VERSION_SIZE] = {BHY_INIT_VALUE, - BHY_INIT_VALUE}; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the load parameter request rate*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_RAM_VERSION_ADDR, - v_data_u8, BHY_RAM_VERSION_SIZE); - *v_ram_version_u16 = - (u16)((v_data_u8[BHY_RAM_VERSION_MSB_DATA] - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (v_data_u8[BHY_RAM_VERSION_LSB_DATA])); - } - return com_rslt; -} -/*! - * @brief API used to get the product id - * request from the register 0x90 - * bit 0 to 7 - * - * - * @param v_product_id_u8 : The value of product id - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_product_id(u8 *v_product_id_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the load parameter request rate*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_PRODUCT_ID_ADDR, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - *v_product_id_u8 = v_data_u8; - } - return com_rslt; -} -/*! - * @brief API used to get the revision id - * request from the register 0x91 - * bit 0 to 7 - * - * - * @param v_revision_id_u8 : The value of revision id - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_revision_id(u8 *v_revision_id_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* read the load parameter request rate*/ - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_REVISION_ID_ADDR, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - *v_revision_id_u8 = v_data_u8; - } - return com_rslt; -} -/*! - * @brief API used to get the CRC host - * request from the register 0x91 - * bit 0 to 7 - * - * - * @param v_crc_host_u32 : The value of CRC host - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_crc_host(u32 *v_crc_host_u32) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* Array contains the sensor time it is 32 bit data - a_data_u8[0] - crc HOST - a_data_u8[1] - crc HOST - a_data_u8[2] - crc HOST - a_data_u8[3] - crc HOST - */ - u8 a_data_u8[BHY_CRC_HOST_SIZE] = {BHY_INIT_VALUE, - BHY_INIT_VALUE, BHY_INIT_VALUE, BHY_INIT_VALUE}; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_CRC_HOST_ADDR, - a_data_u8, BHY_CRC_HOST_LENGTH); - *v_crc_host_u32 = (u32) - (((u32)a_data_u8[BHY_CRC_HOST_MSB] - << BHY_SHIFT_BIT_POSITION_BY_24_BITS) | - ((u32)a_data_u8[BHY_CRC_HOST_XXLSB] - << BHY_SHIFT_BIT_POSITION_BY_16_BITS) - |(a_data_u8[BHY_CRC_HOST_XLSB] - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (a_data_u8[BHY_CRC_HOST_LSB])); - } - return com_rslt; -} -/*! - * @brief API used to set the reset - * request from the register 0x9B - * bit 0 to 7 - * - * - * @param v_reset_request_u8 : The value of parameter request - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_reset_request(u8 v_reset_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - v_data_u8 = v_reset_request_u8; - /* write load parameter request*/ - com_rslt = p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_RESET_REQUEST__REG, - &v_data_u8, BHY_GEN_READ_WRITE_LENGTH); - } - return com_rslt; -} -/*! - * @brief API used to flash the ram patch - * - * - * @param memory : The value of data from the - * ram patch. - * @param v_file_length_u32 : Length of the patch data - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_initialize(u8 *memory, u32 v_file_length_u32) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_upload_addr = BHY_UPLOAD_DATA; - u8 v_chip_control_u8 = BHY_CHIP_CTRL_ENABLE_1; - u32 v_crc_from_memory_u32 = BHY_INIT_VALUE; - u32 v_length_to_process_u32 = BHY_INIT_VALUE; - u32 v_crc_host_u32 = BHY_INIT_VALUE; - u32 write_data = BHY_INIT_VALUE; - u8 data_from_mem[BHY_SIGNATURE_MEM_LEN]; - u8 data_byte[BHY_RAM_WRITE_LENGTH]; - u32 read_index_u8 = BHY_INIT_VALUE; - s32 reverse_index_s32 = BHY_INIT_VALUE; - u32 bytes_to_write_u8 = BHY_RAM_WRITE_LENGTH; - u32 read_bytes_index = BHY_INIT_VALUE; - u32 write_index_u32 = BHY_INIT_VALUE; - u32 write_ram_index = BHY_INIT_VALUE; - u32 index_mem = BHY_INIT_VALUE; - u32 write_length = BHY_INIT_VALUE; - u32 data_to_process = BHY_INIT_VALUE; - u8 init_array_data = BHY_INIT_VALUE; - /* initialize the array*/ - for (init_array_data = 0; init_array_data < BHY_SIGNATURE_MEM_LEN; init_array_data++) - { - data_from_mem[init_array_data] = BHY_INIT_VALUE; - } - for (init_array_data = BHY_INIT_VALUE; init_array_data < BHY_RAM_WRITE_LENGTH; init_array_data++) - { - data_byte[init_array_data] = BHY_INIT_VALUE; - } - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) - { - com_rslt = BHY_NULL; - } - else - { - /* Assign the memory data into the local array*/ - for (read_index_u8 = BHY_INIT_VALUE; read_index_u8 <= BHY_SIGNATURE_LENGTH; read_index_u8++) - { - data_from_mem[read_index_u8] = *(memory+read_index_u8); - } - /* Verify the signature of the data*/ - if ((data_from_mem[BHY_SIGNATURE_1] == BHY_IMAGE_SIGNATURE1) - && (data_from_mem[BHY_SIGNATURE_2] == BHY_IMAGE_SIGNATURE2)) - { - com_rslt = BHY_SUCCESS; - } - else - { - com_rslt = BHY_ERROR; - } - /* read the CRC data from memory */ - v_crc_from_memory_u32 = (u32) - (((u32)data_from_mem[BHY_CRC_HOST_FILE_MSB] - << BHY_SHIFT_BIT_POSITION_BY_24_BITS) | - ((u32)data_from_mem[BHY_CRC_HOST_FILE_XXLSB] - << BHY_SHIFT_BIT_POSITION_BY_16_BITS) - |(data_from_mem[BHY_CRC_HOST_FILE_XLSB] - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (data_from_mem[BHY_CRC_HOST_FILE_LSB])); - /* Remove the first 16 bytes*/ - data_to_process = v_file_length_u32 - BHY_SIGNATURE_LENGTH; - /* data to write for length calculation*/ - v_length_to_process_u32 = (data_to_process / BHY_RAM_WRITE_LENGTH); - read_index_u8 = BHY_SIGNATURE_LENGTH; - read_bytes_index = BHY_INIT_READ_BYTES; - for (write_index_u32 = BHY_INIT_VALUE; write_index_u32 < v_length_to_process_u32;) - { - /* reverse the data*/ - if (read_index_u8 <= read_bytes_index && read_bytes_index <= data_to_process) - { - for (reverse_index_s32 = bytes_to_write_u8 - BHY_INIT_BYTE_MINUS_ONE; - reverse_index_s32 >= BHY_INIT_VALUE;) - { - data_byte[reverse_index_s32] = *(memory + read_index_u8); - read_index_u8++; - reverse_index_s32--; - } - } - /* write the data into the register*/ - read_bytes_index = read_bytes_index + BHY_RAM_WRITE_LENGTH; - reverse_index_s32 = BHY_INIT_VALUE; - - for (write_ram_index = BHY_INIT_VALUE; write_ram_index <= BHY_CHECK_BYTE;) - { - *(memory + index_mem) = data_byte[write_ram_index]; - index_mem++; - write_ram_index++; - } - write_index_u32++; - } - /* set the reset as 0x01*/ - com_rslt = bhy_set_reset_request(BHY_RESET_ENABLE); - com_rslt += bhy_write_reg(BHY_I2C_REG_CHIP_CONTROL_ADDR, - &v_chip_control_u8, BHY_GEN_READ_WRITE_LENGTH); - /* set the upload data*/ - com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_0_ADDR, - &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH); - com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_1_ADDR, - &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH); - /* write the chip control register as 0x02*/ - write_length = - data_to_process / BHY_RAM_WRITE_LENGTH_API; - read_index_u8 = BHY_INIT_VALUE; - /* write the memory of data */ - if (com_rslt == BHY_SUCCESS) { - for (read_index_u8 = BHY_INIT_VALUE; read_index_u8 < write_length; read_index_u8++) - { - com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_DATA_ADDR, \ - (u8 *)(memory + write_data), \ - BHY_RAM_WRITE_LENGTH_API); - write_data = write_data + BHY_RAM_WRITE_LENGTH_API; - } - } - /* Check the CRC success*/ - com_rslt = bhy_get_crc_host(&v_crc_host_u32); - if (v_crc_from_memory_u32 == v_crc_host_u32) - { - com_rslt = BHY_SUCCESS; - } - else - { - com_rslt = BHY_ERROR; - } - /* disable upload mode*/ - v_chip_control_u8 = BHY_CHIP_CTRL_ENABLE_2; - /* write the chip control register as 0x02*/ - com_rslt += bhy_write_reg(BHY_I2C_REG_CHIP_CONTROL_ADDR, &v_chip_control_u8, BHY_GEN_READ_WRITE_LENGTH); - } - return com_rslt; -} - -BHY_RETURN_FUNCTION_TYPE bhy_initialize_from_rom( const u8 *memory, const u32 v_file_length_u32) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_upload_addr = BHY_UPLOAD_DATA; - u8 v_chip_control_u8 = BHY_CHIP_CTRL_ENABLE_1; - u32 v_crc_from_memory_u32 = BHY_INIT_VALUE; - u32 v_crc_host_u32 = BHY_INIT_VALUE; - u32 write_data = BHY_INIT_VALUE; - u8 data_from_mem[BHY_SIGNATURE_MEM_LEN]; - u8 data_byte[BHY_RAM_WRITE_LENGTH_API]; - u32 read_index_u8 = BHY_INIT_VALUE; - u32 reverse_index_u32 = BHY_INIT_VALUE; - u32 reverse_block_index_u32 = BHY_INIT_VALUE; - u32 write_length = BHY_INIT_VALUE; - u32 data_to_process = BHY_INIT_VALUE; - u32 packet_length = BHY_INIT_VALUE;; - u16 signature_flag = 0; - u16 rom_version = 0; - u8 rom_ver_exp = 0; - u8 i = BHY_INIT_VALUE; - /* initialize the array*/ - for (i=0; i < BHY_SIGNATURE_MEM_LEN; i++) - { - data_from_mem[i] = BHY_INIT_VALUE; - } - for (i = BHY_INIT_VALUE; i < BHY_RAM_WRITE_LENGTH; i++) - { - data_byte[i] = BHY_INIT_VALUE; - } - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) - { - com_rslt = BHY_NULL; - } - else - { - /* Assign the memory data into the local array*/ - for (read_index_u8 = BHY_INIT_VALUE;read_index_u8 <= BHY_SIGNATURE_LENGTH; read_index_u8++) - { - data_from_mem[read_index_u8] = *(memory+read_index_u8); - } - /* Verify the signature of the data*/ - if ((data_from_mem[BHY_SIGNATURE_1] == BHY_IMAGE_SIGNATURE1) - && (data_from_mem[BHY_SIGNATURE_2] == BHY_IMAGE_SIGNATURE2)) - { - com_rslt = BHY_SUCCESS; - } - else - { - com_rslt = BHY_ERROR; - goto bhy_init_from_rom_return; - } - /* Verify the signature of the data*/ - signature_flag = data_from_mem[BHY_SIG_FLAG_1_POS] + ((u16)data_from_mem[BHY_SIG_FLAG_2_POS]<<8); - rom_ver_exp = BHY_GET_ROMVEREXP (signature_flag); - bhy_get_rom_version(&rom_version); - if(BHY_ROM_VER_DI01 == rom_ver_exp) - { - if(BHY_ROM_VERSION_DI01 == rom_version) - { - com_rslt = BHY_SUCCESS; - } - else - { - com_rslt = BHY_RAMPATCH_NOT_MATCH; - goto bhy_init_from_rom_return; - } - } - else if(BHY_ROM_VER_DI03 == rom_ver_exp) - { - if(BHY_ROM_VERSION_DI03 == rom_version) - { - com_rslt = BHY_SUCCESS; - } - else - { - com_rslt = BHY_RAMPATCH_NOT_MATCH; - goto bhy_init_from_rom_return; - } - } - else - { - com_rslt = BHY_RAMPATCH_NOT_SUPPORT; - goto bhy_init_from_rom_return; - } - /* read the CRC data from memory */ - v_crc_from_memory_u32 = (u32) - (((u32)data_from_mem[BHY_CRC_HOST_FILE_MSB] - << BHY_SHIFT_BIT_POSITION_BY_24_BITS) | - ((u32)data_from_mem[BHY_CRC_HOST_FILE_XXLSB] - << BHY_SHIFT_BIT_POSITION_BY_16_BITS) - |(data_from_mem[BHY_CRC_HOST_FILE_XLSB] - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (data_from_mem[BHY_CRC_HOST_FILE_LSB])); - /* Remove the first 16 bytes*/ - data_to_process = v_file_length_u32 - BHY_SIGNATURE_LENGTH; - - /* set the reset as 0x01*/ - com_rslt = bhy_set_reset_request(BHY_RESET_ENABLE); - com_rslt += bhy_write_reg(BHY_I2C_REG_CHIP_CONTROL_ADDR, &v_chip_control_u8, BHY_GEN_READ_WRITE_LENGTH); - /* set the upload data*/ - com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_0_ADDR, &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH); - com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_1_ADDR, &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH); - /* write the chip control register as 0x02*/ - write_length = data_to_process / BHY_RAM_WRITE_LENGTH_API; - read_index_u8 = BHY_INIT_VALUE; - - /* write the memory of data */ - /*skips first 16 bytes*/ - write_data += 16; - if (com_rslt == BHY_SUCCESS) - { - for (read_index_u8 = BHY_INIT_VALUE; read_index_u8 <= write_length; read_index_u8++) - { - packet_length = (read_index_u8 == write_length) ? - (data_to_process % BHY_RAM_WRITE_LENGTH_API) / BHY_RAM_WRITE_LENGTH : - BHY_RAM_WRITE_LENGTH_API / BHY_RAM_WRITE_LENGTH; - - /*reverse the data*/ - for (reverse_block_index_u32 = 1; reverse_block_index_u32 <=packet_length ;reverse_block_index_u32++) - { - for (reverse_index_u32 = 0; reverse_index_u32 Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_meta_event( -u8 v_meta_event_u8, -u8 v_input_data_u8, u8 v_event_type_u8, -u8 v_meta_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_meta_bytes_u8 = BHY_INIT_VALUE; - /* read the stored meta events using saved parameter bytes*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_1, v_meta_parameter_request_u8); - if (BHY_SUCCESS == com_rslt) { - /* switch for selecting the different meta events*/ - switch (v_meta_event_u8) { - /* case for meta event one*/ - case BHY_META_EVENT_1: - /* switch for selecting interrupt or event*/ - switch (v_event_type_u8) { - /* case for event enable*/ - case BHY_META_EVENT_ENABLE: - /* set the meta event 1, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - /* case for interrupt enable*/ - case BHY_META_INTR_ENABLE: - /* set the meta event 1, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 0))) | (v_input_data_u8)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - /* case for meta event 2*/ - case BHY_META_EVENT_2: - /* case for interrupt or event enable*/ - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 2, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 2, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - /* case for meta event 3*/ - case BHY_META_EVENT_3: - switch (v_event_type_u8) { - /* case for event or interrupt enable*/ - case BHY_META_EVENT_ENABLE: - /* set the meta event 3, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 3, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - /* case for meta event four*/ - case BHY_META_EVENT_4: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 4, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 4, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte0(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_5: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 5, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 5, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 0)))|(v_input_data_u8 << 0)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_6: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 6, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 6, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_7: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 7, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 7, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_8: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 8, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 8, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte1(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_9: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 9, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 9, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 0)))|(v_input_data_u8 << 0)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_10: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 10, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 10, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_11: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 11, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 11, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_12: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 12, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 12, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte2(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_13: - /* set the meta event 13, event enable*/ - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 13, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 0)))|(v_input_data_u8 << 0)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_14: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 14, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 14, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_15: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 15, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 15, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_16: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 16, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 16, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte3(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_17: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 17, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 17, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 0)))|(v_input_data_u8 << 0)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_18: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 18, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 18, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_19: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 19, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 19, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_20: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 20, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 20, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte4(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_21: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 21, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 21, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 0)))|(v_input_data_u8 << 0)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_22: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 22, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 22, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_23: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 23, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 23, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_24: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 24, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 24, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte5(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_25: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 25, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 25, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 0)))|(v_input_data_u8 << 0)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_26: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 26, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 26, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_27: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 27, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 27, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_28: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 28, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 28, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte6(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_29: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 29, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 1)))|(v_input_data_u8 << 1)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 29, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 0)))|(v_input_data_u8 << 0)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_30: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 30, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 3)))|(v_input_data_u8 << 3)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 30, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 2)))|(v_input_data_u8 << 2)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_31: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 31, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 5)))|(v_input_data_u8 << 5)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 31, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 4)))|(v_input_data_u8 << 4)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_32: - switch (v_event_type_u8) { - case BHY_META_EVENT_ENABLE: - /* set the meta event 32, event enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 7)))|(v_input_data_u8 << 7)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - case BHY_META_INTR_ENABLE: - /* set the meta event 32, interrupt enable*/ - v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 6)))|(v_input_data_u8 << 6)); - bhy_assign_meta_event_byte7(v_meta_bytes_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - } - /* write the meta event values to the meta event bytes*/ - com_rslt += bhy_write_parameter_bytes( - BHY_PAGE_1, (v_meta_parameter_request_u8+0x80)); - return com_rslt; -} -/*! - * @brief API used to get the meta event control from - * system page-1 parameter 1 - * - * @param v_meta_event_u8 : The value of meta event selection - * meta event | value - * --------------------------|--------------- - * BHY_META_EVENT_1 | 1 - * BHY_META_EVENT_2 | 2 - * BHY_META_EVENT_3 | 3 - * BHY_META_EVENT_4 | 4 - * BHY_META_EVENT_5 | 5 - * BHY_META_EVENT_6 | 6 - * BHY_META_EVENT_7 | 7 - * BHY_META_EVENT_8 | 8 - * BHY_META_EVENT_9 | 9 - * BHY_META_EVENT_10 | 10 - * BHY_META_EVENT_11 | 11 - * BHY_META_EVENT_12 | 12 - * BHY_META_EVENT_13 | 13 - * BHY_META_EVENT_14 | 14 - * BHY_META_EVENT_15 | 15 - * BHY_META_EVENT_16 | 16 - * BHY_META_EVENT_17 | 17 - * BHY_META_EVENT_18 | 18 - * BHY_META_EVENT_19 | 19 - * BHY_META_EVENT_20 | 20 - * BHY_META_EVENT_21 | 21 - * BHY_META_EVENT_22 | 22 - * BHY_META_EVENT_23 | 23 - * BHY_META_EVENT_24 | 24 - * BHY_META_EVENT_25 | 25 - * BHY_META_EVENT_26 | 26 - * BHY_META_EVENT_27 | 27 - * BHY_META_EVENT_28 | 28 - * BHY_META_EVENT_29 | 29 - * BHY_META_EVENT_30 | 30 - * BHY_META_EVENT_31 | 31 - * BHY_META_EVENT_32 | 32 - * - * @param meta_intr : - * The value of meta event interrupt selection - * - * @param meta_event : - * The value of meta event event selection - * - * @param v_event_type_u8 : The value of - * interrupt or event selection - * value | Event - * -------------------------|---------------- - * BHY_META_EVENT_INTR_ENABLE | 0 - * BHY_META_EVENT_ENABLE | 1 - * - * @param v_meta_parameter_request_u8: The value of parameter request - * for wakeup or non wakeup fifo - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_meta_event( -u8 v_meta_event_u8, u8 v_event_type_u8, -u8* meta_event_intr, -u8* meta_event_event, -u8 v_meta_parameter_request_u8) -{ -/* variable used for return the status of communication result*/ -BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; -u8 v_meta_event_byte_0_u8 = BHY_INIT_VALUE; -u8 v_meta_event_byte_1_u8 = BHY_INIT_VALUE; -u8 v_meta_event_byte_2_u8 = BHY_INIT_VALUE; -u8 v_meta_event_byte_3_u8 = BHY_INIT_VALUE; -u8 v_meta_event_byte_4_u8 = BHY_INIT_VALUE; -u8 v_meta_event_byte_5_u8 = BHY_INIT_VALUE; -u8 v_meta_event_byte_6_u8 = BHY_INIT_VALUE; -u8 v_meta_event_byte_7_u8 = BHY_INIT_VALUE; -/* check the p_bhy pointer as NULL*/ -if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; -} else { - /* input as page 1 and parameter 1 for system page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_1, v_meta_parameter_request_u8); - v_meta_event_byte_0_u8 = read_buffer.parameter_1; - v_meta_event_byte_1_u8 = read_buffer.parameter_2; - v_meta_event_byte_2_u8 = read_buffer.parameter_3; - v_meta_event_byte_3_u8 = read_buffer.parameter_4; - v_meta_event_byte_4_u8 = read_buffer.parameter_5; - v_meta_event_byte_5_u8 = read_buffer.parameter_6; - v_meta_event_byte_6_u8 = read_buffer.parameter_7; - v_meta_event_byte_7_u8 = read_buffer.parameter_8; - switch (v_meta_event_u8) { - case BHY_META_EVENT_1: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_0_u8 & - BHY_META_EVENT1_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_0_u8 & - BHY_META_EVENT1_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_2: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_0_u8 & - BHY_META_EVENT2_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_0_u8 & - BHY_META_EVENT2_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_3: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_0_u8 & - BHY_META_EVENT3_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_0_u8 & - BHY_META_EVENT3_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_4: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_0_u8 & - BHY_META_EVENT4_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_0_u8 & - BHY_META_EVENT4_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_5: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_1_u8 & - BHY_META_EVENT5_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_1_u8 & - BHY_META_EVENT5_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_6: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_1_u8 & - BHY_META_EVENT6_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_1_u8 & - BHY_META_EVENT6_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_7: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_1_u8 & - BHY_META_EVENT7_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_1_u8 & - BHY_META_EVENT7_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_8: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_1_u8 & - BHY_META_EVENT8_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_1_u8 & - BHY_META_EVENT8_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_9: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_2_u8 & - BHY_META_EVENT9_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_2_u8 & - BHY_META_EVENT9_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_10: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_2_u8 & - BHY_META_EVENT10_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_2_u8 & - BHY_META_EVENT10_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_11: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_2_u8 & - BHY_META_EVENT11_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_2_u8 & - BHY_META_EVENT11_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_12: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_2_u8 & - BHY_META_EVENT12_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_2_u8 & - BHY_META_EVENT12_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_13: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_3_u8 & - BHY_META_EVENT13_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_3_u8 & - BHY_META_EVENT13_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_14: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_3_u8 & - BHY_META_EVENT14_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_3_u8 & - BHY_META_EVENT14_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_15: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_3_u8 & - BHY_META_EVENT15_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_3_u8 & - BHY_META_EVENT15_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_16: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_3_u8 & - BHY_META_EVENT16_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_3_u8 & - BHY_META_EVENT16_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_17: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_4_u8 & - BHY_META_EVENT17_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_4_u8 & - BHY_META_EVENT17_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_18: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_4_u8 & - BHY_META_EVENT18_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_4_u8 & - BHY_META_EVENT18_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_19: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_4_u8 & - BHY_META_EVENT19_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_4_u8 & - BHY_META_EVENT19_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_20: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_4_u8 & - BHY_META_EVENT20_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_4_u8 & - BHY_META_EVENT20_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_21: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_5_u8 & - BHY_META_EVENT21_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_5_u8 & - BHY_META_EVENT21_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_22: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_5_u8 & - BHY_META_EVENT22_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_5_u8 & - BHY_META_EVENT22_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_23: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_5_u8 & - BHY_META_EVENT23_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_5_u8 & - BHY_META_EVENT23_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_24: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_5_u8 & - BHY_META_EVENT24_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_5_u8 & - BHY_META_EVENT24_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_25: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_6_u8 & - BHY_META_EVENT25_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_6_u8 & - BHY_META_EVENT25_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_26: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_6_u8 & - BHY_META_EVENT26_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_6_u8 & - BHY_META_EVENT26_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_27: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_6_u8 & - BHY_META_EVENT27_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_6_u8 & - BHY_META_EVENT27_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_28: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_6_u8 & - BHY_META_EVENT28_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_6_u8 & - BHY_META_EVENT28_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_29: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - (v_meta_event_byte_7_u8 & - BHY_META_EVENT29_INTR_ENABLE); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_7_u8 & - BHY_META_EVENT29_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_30: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_7_u8 & - BHY_META_EVENT30_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_7_u8 & - BHY_META_EVENT30_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_31: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_7_u8 & - BHY_META_EVENT31_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_7_u8 & - BHY_META_EVENT31_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - case BHY_META_EVENT_32: - switch (v_event_type_u8) { - case BHY_META_INTR_ENABLE: - *meta_event_intr = (u8) - ((v_meta_event_byte_7_u8 & - BHY_META_EVENT32_INTR_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_06_BITS); - break; - case BHY_META_EVENT_ENABLE: - *meta_event_event = (u8) - ((v_meta_event_byte_7_u8 & - BHY_META_EVENT32_EVENT_ENABLE) - >> BHY_SHIFT_BIT_POSITION_BY_07_BITS); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } -} -return com_rslt; -} -/*! - * @brief API used to get the fifo water mark from - * system page-1 parameter 2 - * - * - * @param v_parameter_u8 : - * The value of fifo water mark wakeup or non-wakeup selection - * water mark | value - * --------------------------|--------------- - * FIFO_WM_WAKEUP | 0 - * FIFO_WM_NON_WAKEUP | 1 - * - * @param v_fifo_water_mark_u16: The value of fifo water mark - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_water_mark(u8 v_parameter_u8, u16 *v_fifo_water_mark_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_fifo_wm_wakeup_lsb_u8 = BHY_INIT_VALUE; - u8 v_fifo_wm_wakeup_msb_u8 = BHY_INIT_VALUE; - u8 v_fifo_wm_non_wakeup_lsb_u8 = BHY_INIT_VALUE; - u8 v_fifo_wm_non_wakeup_msb_u8 = BHY_INIT_VALUE; - /* input as page 1 and parameter 2 for system page*/ - com_rslt = bhy_read_parameter_bytes( BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_2); - if (BHY_SUCCESS == com_rslt) - { - switch (v_parameter_u8) - { - case BHY_FIFO_WATER_MARK_WAKEUP: - /* fifo wakeup water mark*/ - v_fifo_wm_wakeup_lsb_u8 = read_buffer.parameter_1; - v_fifo_wm_wakeup_msb_u8 = read_buffer.parameter_2; - *v_fifo_water_mark_u16 = (u16)((v_fifo_wm_wakeup_msb_u8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)\ - |(v_fifo_wm_wakeup_lsb_u8)); - break; - case BHY_FIFO_WATER_MARK_NON_WAKEUP: - /* fifo non wakeup water mark*/ - v_fifo_wm_non_wakeup_lsb_u8 = read_buffer.parameter_5; - v_fifo_wm_non_wakeup_msb_u8 = read_buffer.parameter_6; - *v_fifo_water_mark_u16 = (u16)((v_fifo_wm_non_wakeup_msb_u8<< BHY_SHIFT_BIT_POSITION_BY_08_BITS)\ - |(v_fifo_wm_non_wakeup_lsb_u8)); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - } - return com_rslt; -} -/*! - * @brief API used to set the fifo water mark from - * system page-1 parameter 2 - * - * - * @param v_parameter_u8 : - * The value of fifo water mark wakeup or non-wakeup selection - * water mark | value - * --------------------------|--------------- - * FIFO_WM_WAKEUP | 0 - * FIFO_WM_NON_WAKEUP | 1 - * - * @param v_fifo_water_mark_u16: The value of fifo water mark - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_fifo_water_mark(u8 v_parameter_u8, u16 v_fifo_water_mark_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_fifo_wm_lsb_u8 = BHY_INIT_VALUE; - u8 v_fifo_wm_msb_u8 = BHY_INIT_VALUE; - /* read the fifo water mark using saved parameter bytes*/ - com_rslt = bhy_read_parameter_bytes( BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_2); - if (BHY_SUCCESS == com_rslt) - { - v_fifo_wm_lsb_u8 = (u8)(v_fifo_water_mark_u16 & BHY_MASK_LSB_DATA); - v_fifo_wm_msb_u8 = (u8)((v_fifo_water_mark_u16 & BHY_MASK_MSB_DATA)>> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - switch (v_parameter_u8) - { - /* fifo wakeup water mark*/ - case BHY_FIFO_WATER_MARK_WAKEUP: - write_buffer.write_parameter_byte1 = v_fifo_wm_lsb_u8; - write_buffer.write_parameter_byte2 = v_fifo_wm_msb_u8; - write_buffer.write_parameter_byte5 = read_buffer.parameter_5; - write_buffer.write_parameter_byte6 = read_buffer.parameter_6; - break; - /* fifo non wakeup water mark*/ - case BHY_FIFO_WATER_MARK_NON_WAKEUP: - write_buffer.write_parameter_byte1 = read_buffer.parameter_1; - write_buffer.write_parameter_byte2 = read_buffer.parameter_2; - write_buffer.write_parameter_byte5 = v_fifo_wm_lsb_u8; - write_buffer.write_parameter_byte6 = v_fifo_wm_msb_u8; - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - } - com_rslt += bhy_write_parameter_bytes( - BHY_PAGE_1, BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2); - return com_rslt; -} -/*! - * @brief API used to get the fifo size from - * system page-1 parameter 2 - * @note wakeup - bytes from 2 and 3 - * @note non wakeup - bytes from 6 and 7 - * - * - * @param v_fifo_size_select_u8 : - * The value of fifo size mark wakeup or non-wakeup selection - * water mark | value - * --------------------------|--------------- - * BHY_FIFO_SIZE_WAKEUP | 0 - * BHY_FIFO_SIZE_NON_WAKEUP | 1 - * - * @param v_fifo_size_u16 : The value of fifo size - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_size( -u8 v_fifo_size_select_u8, u16 *v_fifo_size_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_fifo_size_wakeup_lsb_u8 = BHY_INIT_VALUE; - u8 v_fifo_size_wakeup_msb_u8 = BHY_INIT_VALUE; - u8 v_fifo_size_non_wakeup_lsb_u8 = BHY_INIT_VALUE; - u8 v_fifo_size_non_wakeup_msb_u8 = BHY_INIT_VALUE; - /* check the p_bhy pointer as NULL*/ - if (BHY_NULL_PTR == p_bhy) { - com_rslt = BHY_NULL; - } else { - /* input as page 1 and parameter 2 for system page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_2); - if (BHY_SUCCESS == com_rslt) { - switch (v_fifo_size_select_u8) { - case BHY_FIFO_SIZE_WAKEUP: - /* fifo size in wakeup*/ - v_fifo_size_wakeup_lsb_u8 = - read_buffer.parameter_3; - v_fifo_size_wakeup_msb_u8 = - read_buffer.parameter_4; - *v_fifo_size_u16 = - (u16)((v_fifo_size_wakeup_msb_u8 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - |(v_fifo_size_wakeup_lsb_u8)); - break; - case BHY_FIFO_SIZE_NON_WAKEUP: - /* fifo size in non wakeup*/ - v_fifo_size_non_wakeup_lsb_u8 = - read_buffer.parameter_7; - v_fifo_size_non_wakeup_msb_u8 = - read_buffer.parameter_8; - *v_fifo_size_u16 = - (u16)((v_fifo_size_non_wakeup_msb_u8 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - |(v_fifo_size_non_wakeup_lsb_u8)); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - } - } - return com_rslt; -} -/*! - * @brief API used to assign the sensor status bank data - * - * - * @param v_sensor_status_u8 : - * The value for saved parameter data - * - * - * @return Nothing - * - * -*/ -static void bhy_assign_sensor_status_bank(u8 v_sensor_status_u8) -{ - /* Assign the sensor status bank*/ - /* data available*/ - sensor_status_bank.data_available = (u8) - (v_sensor_status_u8 - & BHY_SENSOR_BANK_STATUS_DATA_AVAILABLE); - /* i2c nack*/ - sensor_status_bank.i2c_nack = (u8) - ((v_sensor_status_u8 - & BHY_SENSOR_BANK_STATUS_I2C_NACK) - >> BHY_SHIFT_BIT_POSITION_BY_01_BIT); - /* device id error*/ - sensor_status_bank.device_id_error = (u8) - ((v_sensor_status_u8 - & BHY_SENSOR_BANK_STATUS_DEVICE_ID_ERROR) - >> BHY_SHIFT_BIT_POSITION_BY_02_BITS); - /* transient error*/ - sensor_status_bank.transient_error = (u8) - ((v_sensor_status_u8 - & BHY_SENSOR_BANK_STATUS_TRANSIENT_ERROR) - >> BHY_SHIFT_BIT_POSITION_BY_03_BITS); - /* data lost*/ - sensor_status_bank.data_lost = (u8) - ((v_sensor_status_u8 - & BHY_SENSOR_BANK_STATUS_DATA_LOST) - >> BHY_SHIFT_BIT_POSITION_BY_04_BITS); - /* sensor power mode*/ - sensor_status_bank.sensor_power_mode = (u8) - ((v_sensor_status_u8 - & BHY_SENSOR_BANK_STATUS_POWER_MODE) - >> BHY_SHIFT_BIT_POSITION_BY_05_BITS); - -} -/*! - * @brief API used to get the sensor status bank from - * system page-1 parameter 3 to 6 - * @note Sensor status bank 0 : parameter 3 contains 1 to 16 sensor type - * @note Sensor status bank 1 : parameter 4 contains 17 to 32 sensor type - * @note Sensor status bank 2 : parameter 5 contains 33 to 48 sensor type - * @note Sensor status bank 3 : parameter 6 contains 49 to 64 sensor type - * - * - * @param v_sensor_type_u8 : - * The value of sensor status bank sensor type selection - * v_sensor_type_u8 | value - * -----------------------------------|--------------- - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_1 | 0 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_2 | 1 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_3 | 3 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_4 | 4 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_5 | 5 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_6 | 6 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_7 | 7 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_8 | 8 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_9 | 9 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_10 | 10 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_11 | 11 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_12 | 12 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_13 | 13 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_14 | 14 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_15 | 15 - * BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_16 | 16 - * - * - * @param v_sensor_status_parameter_u8 : - * The value of sensor status bank parameter selection - * parameter | value - * -------------------------------|----------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_3 | 0x03 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_4 | 0x04 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_5 | 0x05 - * BHY_PARAMETER_REQUEST_READ_PARAMETER_6 | 0x06 - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_sensor_status_bank( -u8 v_sensor_status_parameter_u8, u8 v_sensor_type_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_data_u8 = BHY_INIT_VALUE; - /* input as page 1 and parameter - 3(4 or 5 or 6)for system page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_1, v_sensor_status_parameter_u8); - if (BHY_SUCCESS == com_rslt) { - switch (v_sensor_type_u8) { - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_1: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_1; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_2: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_2; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_3: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_3; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_4: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_4; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_5: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_5; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_6: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_6; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_7: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_7; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_8: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_8; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_9: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_9; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_10: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_10; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_11: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_11; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_12: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_12; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_13: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_13; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_14: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_14; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_15: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_15; - bhy_assign_sensor_status_bank(v_data_u8); - break; - case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_16: - /* sensor status of data available*/ - v_data_u8 = read_buffer.parameter_16; - bhy_assign_sensor_status_bank(v_data_u8); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - } - return com_rslt; -} -/*! - * @brief API used to get the host IRQ time - * stamp and current time stamp from - * system page-1 parameter 30 - * Host IRQ time stamp bytes 0 to 3 - * Current time stamp bytes 4 to 7 - * - * - * @param v_time_stamp_selection_u8 : - * The value of Host IRQ or current time stamp selection - * time stamp | value - * --------------------------|--------------- - * BHY_HOST_IRQ_TIMESTAMP | 0 - * BHY_CURRENT_TIME_STAMP | 1 - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * @param v_time_stamp_u32 : - * The value of Host IRQ or current time stamp - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_time_stamp( -u8 v_time_stamp_selection_u8, u32 *v_time_stamp_u32) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u16 v_lsb_time_u16 = BHY_INIT_VALUE; - u16 v_msb_time_u16 = BHY_INIT_VALUE; - /* input as page 1 and parameter 30 for system page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_30); - if (BHY_SUCCESS == com_rslt) { - switch (v_time_stamp_selection_u8) { - case BHY_HOST_IRQ_TIMESTAMP: - /* host IRQ time stamp*/ - /* IRQ time stamp lsb data*/ - v_lsb_time_u16 = (u16)((read_buffer.parameter_2 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_1)); - /* IRQ time stamp msb data*/ - v_msb_time_u16 = (u16)((read_buffer.parameter_4 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_3)); - /* return IRQ time stamp*/ - *v_time_stamp_u32 = (u32)(((u32)v_msb_time_u16 - << BHY_SHIFT_BIT_POSITION_BY_16_BITS) - | (v_lsb_time_u16)); - break; - case BHY_CURRENT_TIME_STAMP: - /* current time stamp*/ - /* current time stamp lsb data*/ - v_lsb_time_u16 = (u16)((read_buffer.parameter_6 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_5)); - /* current time stamp msb data*/ - v_msb_time_u16 = (u16)((read_buffer.parameter_8 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_7)); - /* return current time stamp*/ - *v_time_stamp_u32 = (u32)(((u32)v_msb_time_u16 - << BHY_SHIFT_BIT_POSITION_BY_16_BITS) - | (v_lsb_time_u16)); - break; - default: - com_rslt = BHY_OUT_OF_RANGE; - break; - } - } - return com_rslt; -} -/*! - * @brief API used to get the physical sensor status - * system page-1 parameter 31 - * @note Accel sample rate byte 0 and 1 - * @note Accel dynamic range byte 2 and 3 - * @note Accel flags byte 4 - * @note Gyro sample rate byte 5 and 6 - * @note Gyro dynamic range byte 7 and 8 - * @note Gyro flags byte 9 - * @note Mag sample rate byte 10 and 11 - * @note Mag dynamic range byte 12 and 13 - * @note Mag flags byte 14 - * - * @param accel_status : contains the accel physical status - * @param gyro_status : contains the gyro physical status - * @param mag_status : contains the mag physical status - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_physical_sensor_status( -struct accel_physical_status_t *accel_status, -struct gyro_physical_status_t *gyro_status, -struct mag_physical_status_t *mag_status) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* input as page 1 and parameter 31 for system page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_31); - /* accel physical status*/ - /* accl sample rate*/ - accel_status->accel_sample_rate = (u16)((read_buffer.parameter_2 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_1)); - /* accel dynamic range*/ - accel_status->accel_dynamic_range = (u16)((read_buffer.parameter_4 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_3)); - /* accel flag*/ - accel_status->accel_flag = read_buffer.parameter_5; - /* gyro physical status*/ - /* gyro sample rate*/ - gyro_status->gyro_sample_rate = (u16)((read_buffer.parameter_7 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_6)); - /* accel dynamic range*/ - gyro_status->gyro_dynamic_range = (u16)((read_buffer.parameter_9 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_8)); - /* accel flag*/ - gyro_status->gyro_flag = (u8)(read_buffer.parameter_10); - /* mag physical status*/ - /* mag sample rate*/ - mag_status->mag_sample_rate = (u16)((read_buffer.parameter_12 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_11)); - /* mag dynamic range*/ - mag_status->mag_dynamic_range = (u16)((read_buffer.parameter_14 - << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_13)); - /* accel flag*/ - mag_status->mag_flag = (u8)(read_buffer.parameter_15); - - return com_rslt; -} -/*! - * @brief API used to get the non wakeup sensor information, - * Sensor page-3 parameter 1 to 31 - * - * @param v_parameter_request_u8 : - * Value desired parameter to read non wakeup sensor information - * param_request | value | Virtual sensor - * ----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_1 | 0x01 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_2 | 0x02 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_3 | 0x03 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_4 | 0x04 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_5 | 0x05 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_6 | 0x06 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_7 | 0x87 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_8 | 0x88 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_9 | 0x89 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_10 | 0x8A | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_11 | 0x8B | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_12 | 0x8C | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_13 | 0x8D | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_14 | 0x8E | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_15 | 0x8F | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_16 | 0x90 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_17 | 0x91 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_18 | 0x92 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_19 | 0x93 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_20 | 0x94 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_21 | 0x95 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_22 | 0x96 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_23 | 0x97 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_24 | 0x98 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_25 | 0x99 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_31 | 0x9F | Activity - * - * @param sensor_information : - * holds the value of non wakeup sensor information - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_non_wakeup_sensor_information( -u8 v_parameter_request_u8, -struct sensor_information_non_wakeup_t *sensor_information) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* input as page 3 and parameter request for sensor page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_3, v_parameter_request_u8); - /* sensor type information */ - sensor_information->non_wakeup_sensor_type - = (u8)(read_buffer.parameter_1); - /* driver id information */ - sensor_information->non_wakeup_driver_id = - (u8)(read_buffer.parameter_2); - /* driver version information */ - sensor_information->non_wakeup_driver_version = - (u8)(read_buffer.parameter_3); - /* power information */ - sensor_information->non_wakeup_power = - (u8)(read_buffer.parameter_4); - /* maximum range information */ - sensor_information->non_wakeup_max_range = (u16) - ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_5)); - /* resolution information */ - sensor_information->non_wakeup_resolution = (u16) - ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_7)); - /* maximum rate information */ - sensor_information->non_wakeup_max_rate = (u16) - ((read_buffer.parameter_10 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_9)); - /* fifo reserved information */ - sensor_information->non_wakeup_fifo_reserved = (u16) - ((read_buffer.parameter_12 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_11)); - /* fifo max information */ - sensor_information->non_wakeup_fifo_max = (u16) - ((read_buffer.parameter_14 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_13)); - /* event size information */ - sensor_information->non_wakeup_event_size = read_buffer.parameter_15; - /* minimum rate information */ - sensor_information->non_wakeup_min_rate = read_buffer.parameter_16; - - return com_rslt; -} -/*! - * @brief API used to get the wakeup sensor information, - * Sensor page-3 parameter 32 to 63 - * - * @param v_parameter_request_u8 : - * Value desired parameter to read non wakeup sensor information - * param_request | value | Virtual sensor - * ----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_33 | 0xA1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_34 | 0xA2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_35 | 0xA3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_36 | 0xA4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_37 | 0xA5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_38 | 0xA6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_39 | 0xA7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_40 | 0xA8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_41 | 0xA9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_42 | 0xAA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_43 | 0xAB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_44 | 0xAC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_45 | 0xAD | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_46 | 0xAE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_47 | 0xAF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_48 | 0xB0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_49 | 0xB1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_50 | 0xB2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_51 | 0xB3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_52 | 0xB4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_53 | 0xB5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_54 | 0xB6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_55 | 0xB7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_56 | 0xB8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_57 | 0xB9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_63 | 0xBF | Activity - * - * @param sensor_information : - * holds the value of non wakeup sensor information - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_wakeup_sensor_information( -u8 v_parameter_request_u8, -struct sensor_information_wakeup_t *sensor_information) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* input as page 3 and parameter request for sensor page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_3, v_parameter_request_u8); - /* sensor type information */ - sensor_information->wakeup_sensor_type = - (u8)(read_buffer.parameter_1); - /* driver id information */ - sensor_information->wakeup_driver_id = - (u8)(read_buffer.parameter_2); - /* driver version information */ - sensor_information->wakeup_driver_version = - (u8)(read_buffer.parameter_3); - /* power information */ - sensor_information->wakeup_power = - (u8)(read_buffer.parameter_4); - /* maximum range information */ - sensor_information->wakeup_max_range = (u16) - ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_5)); - /* resolution information */ - sensor_information->wakeup_resolution = (u16) - ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_7)); - /* maximum rate information */ - sensor_information->wakeup_max_rate = (u16) - ((read_buffer.parameter_10 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_9)); - /* fifo reserved information */ - sensor_information->wakeup_fifo_reserved = (u16) - ((read_buffer.parameter_12 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_11)); - /* fifo max information */ - sensor_information->wakeup_fifo_max = (u16) - ((read_buffer.parameter_14 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_13)); - /* event size information */ - sensor_information->wakeup_event_size = read_buffer.parameter_15; - /* minimum rate information */ - sensor_information->wakeup_min_rate = read_buffer.parameter_16; - - return com_rslt; -} -/*! - * @brief API used to set the sensor non wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param sensor_configuration : contains the non wakeup sensor configuration - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * ----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_65 | 0xC1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_66 | 0xC2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_67 | 0xC3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_68 | 0xC4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_69 | 0xC5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_70 | 0xC6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_71 | 0xC7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_72 | 0xC8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_73 | 0xC9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_74 | 0xCA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_75 | 0xCB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_76 | 0xCC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_77 | 0xCD | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_78 | 0xCE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_79 | 0xCF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_80 | 0xD0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_81 | 0xD1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_82 | 0xD2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_83 | 0xD3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_84 | 0xD4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_85 | 0xD5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_86 | 0xD6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_87 | 0xD7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_88 | 0xD8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_89 | 0xD9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_95 | 0xDF | Activity - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_non_wakeup_sensor_configuration( -struct sensor_configuration_non_wakeup_t *sensor_configuration, -u8 v_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* write sample rate*/ - write_buffer.write_parameter_byte1 = (u8)( - sensor_configuration->non_wakeup_sample_rate & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte2 = (u8)( - (sensor_configuration->non_wakeup_sample_rate - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* write maximum report latency*/ - write_buffer.write_parameter_byte3 = (u8)( - sensor_configuration->non_wakeup_max_report_latency - & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte4 = (u8)( - (sensor_configuration->non_wakeup_max_report_latency - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* write sensitivity*/ - write_buffer.write_parameter_byte5 = (u8)( - sensor_configuration->non_wakeup_change_sensitivity - & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte6 = (u8)( - (sensor_configuration->non_wakeup_change_sensitivity - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* write dynamic range*/ - write_buffer.write_parameter_byte7 = (u8)( - sensor_configuration->non_wakeup_dynamic_range & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte8 = (u8)( - (sensor_configuration->non_wakeup_dynamic_range - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* load the parameter of non wakeup sensor configuration*/ - com_rslt = bhy_write_parameter_bytes( - BHY_PAGE_3, v_parameter_request_u8); - - return com_rslt; -} -/*! - * @brief API used to get the sensor non wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param v_sample_rate_u16 : - * contains the non wakeup sample rate data - * @param v_max_report_latency_u16: - * contains the non wakeup max report latency - * @param v_change_sensitivity_u16: - * contains the non wakeup sensitivity - * @param v_dynamic_range_u16: - * contains the non wakeup dynamic range - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * ----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_65 | 0xC1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_66 | 0xC2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_67 | 0xC3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_68 | 0xC4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_69 | 0xC5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_70 | 0xC6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_71 | 0xC7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_72 | 0xC8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_73 | 0xC9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_74 | 0xCA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_75 | 0xCB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_76 | 0xCC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_77 | 0xCD | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_78 | 0xCE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_79 | 0xCF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_80 | 0xD0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_81 | 0xD1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_82 | 0xD2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_83 | 0xD3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_84 | 0xD4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_85 | 0xD5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_86 | 0xD6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_87 | 0xD7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_88 | 0xD8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_89 | 0xD9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_95 | 0xDF | Activity - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_non_wakeup_sensor_configuration( -u8 v_parameter_request_u8, -u16 *v_sample_rate_u16, u16 *v_max_report_latency_u16, -u16 *v_change_sensitivity_u16, u16 *v_dynamic_range_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* input as page 3 and parameter request for sensor page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_3, v_parameter_request_u8); - /* sample rate information */ - *v_sample_rate_u16 = (u16) - ((read_buffer.parameter_2 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_1)); - /* max report latency information */ - *v_max_report_latency_u16 = (u16) - ((read_buffer.parameter_4 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_3)); - /* sensitivity information */ - *v_change_sensitivity_u16 = (u16) - ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_5)); - /* dynamic range information */ - *v_dynamic_range_u16 = (u16) - ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_7)); - - return com_rslt; -} -/*! - * @brief API used to set the sensor wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param sensor_configuration : contains the wakeup sensor configuration - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * -----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_97 | 0xE1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_98 | 0xE2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_99 | 0xE3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_100 | 0xE4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_101 | 0xE5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_102 | 0xE6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_103 | 0xE7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_104 | 0xE8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_105 | 0xE9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_106 | 0xEA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_107 | 0xEB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_108 | 0xEC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_109 | 0xED | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_110 | 0xEE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_111 | 0xEF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_112 | 0xF0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_113 | 0xF1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_114 | 0xF2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_115 | 0xF3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_116 | 0xF4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_117 | 0xF5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_118 | 0xF6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_119 | 0xF7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_120 | 0xF8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_121 | 0xF9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_127 | 0xFF | Activity - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_wakeup_sensor_configuration( -struct sensor_configuration_wakeup_t *sensor_configuration, -u8 v_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* write sample rate*/ - write_buffer.write_parameter_byte1 = (u8)( - sensor_configuration->wakeup_sample_rate & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte2 = (u8)( - (sensor_configuration->wakeup_sample_rate - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* write maximum report latency*/ - write_buffer.write_parameter_byte3 = (u8)( - sensor_configuration->wakeup_max_report_latency & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte4 = (u8)( - (sensor_configuration->wakeup_max_report_latency - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* write change sensitivity*/ - write_buffer.write_parameter_byte5 = (u8)( - sensor_configuration->wakeup_change_sensitivity & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte6 = (u8)( - (sensor_configuration->wakeup_change_sensitivity - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* write dynamic range*/ - write_buffer.write_parameter_byte7 = (u8)( - sensor_configuration->wakeup_dynamic_range & BHY_MASK_LSB_DATA); - write_buffer.write_parameter_byte8 = (u8)( - (sensor_configuration->wakeup_dynamic_range - & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS); - /* load the parameter of non wakeup sensor configuration*/ - com_rslt = bhy_write_parameter_bytes( - BHY_PAGE_3, v_parameter_request_u8); - - return com_rslt; -} -/*! - * @brief API used to get the sensor wakeup configuration - * Sensor page-3 parameter 65 to 89 - * - * @param v_sample_rate_u16 : contains the wakeup sample rate data - * @param v_max_report_latency_u16: contains the wakeup max report latency - * @param v_change_sensitivity_u16: contains the wakeup sensitivity - * @param v_dynamic_range_u16: contains the wakeup dynamic range - * - * @param v_parameter_request_u8: value of selected parameter request - * param_request | value | Virtual sensor - * -----------------------------------|-------|---------------- - * BHY_PARAMETER_REQUEST_READ_PARAMETER_97 | 0xE1 | Accelerometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_98 | 0xE2 | Magnetometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_99 | 0xE3 | Orientation - * BHY_PARAMETER_REQUEST_READ_PARAMETER_100 | 0xE4 | Gyroscope - * BHY_PARAMETER_REQUEST_READ_PARAMETER_101 | 0xE5 | Light - * BHY_PARAMETER_REQUEST_READ_PARAMETER_102 | 0xE6 | Barometer - * BHY_PARAMETER_REQUEST_READ_PARAMETER_103 | 0xE7 | Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_104 | 0xE8 | Proximity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_105 | 0xE9 | Gravity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_106 | 0xEA | Liner accel - * BHY_PARAMETER_REQUEST_READ_PARAMETER_107 | 0xEB | Rotation vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_108 | 0xEC | Humidity - * BHY_PARAMETER_REQUEST_READ_PARAMETER_109 | 0xED | Ambient Temperature - * BHY_PARAMETER_REQUEST_READ_PARAMETER_110 | 0xEE | Uncalibrated Mag - * BHY_PARAMETER_REQUEST_READ_PARAMETER_111 | 0xEF | Game rotation Vector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_112 | 0xF0 | Uncalibrated Gyro - * BHY_PARAMETER_REQUEST_READ_PARAMETER_113 | 0xF1 | Signification Motion - * BHY_PARAMETER_REQUEST_READ_PARAMETER_114 | 0xF2 | Step detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_115 | 0xF3 | Step Counter - * BHY_PARAMETER_REQUEST_READ_PARAMETER_116 | 0xF4 | Geomagnetic - * BHY_PARAMETER_REQUEST_READ_PARAMETER_117 | 0xF5 | Heart Rate - * BHY_PARAMETER_REQUEST_READ_PARAMETER_118 | 0xF6 | Tilt Detector - * BHY_PARAMETER_REQUEST_READ_PARAMETER_119 | 0xF7 | Wakeup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_120 | 0xF8 | Glance Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_121 | 0xF9 | Pickup Gesture - * BHY_PARAMETER_REQUEST_READ_PARAMETER_127 | 0xFF | Activity - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_wakeup_sensor_configuration( -u8 v_parameter_request_u8, -u16 *v_sample_rate_u16, u16 *v_max_report_latency_u16, -u16 *v_change_sensitivity_u16, u16 *v_dynamic_range_u16) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* input as page 3 and parameter request for sensor page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_3, v_parameter_request_u8); - /* sample rate information */ - *v_sample_rate_u16 = (u16) - ((read_buffer.parameter_2 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_1)); - /* max report latency information */ - *v_max_report_latency_u16 = (u16) - ((read_buffer.parameter_4 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_3)); - /* sensitivity information */ - *v_change_sensitivity_u16 = (u16) - ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_5)); - /* dynamic range information */ - *v_dynamic_range_u16 = (u16) - ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS) - | (read_buffer.parameter_7)); - - return com_rslt; -} -/*! - * @brief API used to get the soft pass through - * Sensor page-15 parameter 0 to 7 - * - * @param soft_pass_through : - * contains the value of soft pass through - * - * @param v_parameter_request_u8: value of selected parameter request - * parameter | value - * ------------------------------------|-------------------- - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_1 | 0x01 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2 | 0x02 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_3 | 0x03 - * - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_get_soft_pass_through( -struct soft_pass_through_read_t *soft_pass_through, -u8 v_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* input as page 3 and parameter request for sensor page*/ - com_rslt = bhy_read_parameter_bytes( - BHY_PAGE_15, v_parameter_request_u8); - /* i2c slave address information */ - soft_pass_through->i2c_slave_address = - (u8)(read_buffer.parameter_1); - /* start register information */ - soft_pass_through->start_register = - (u8)(read_buffer.parameter_2); - /* read length information */ - soft_pass_through->read_length = - (u8)(read_buffer.parameter_3); - /* completion status information */ - soft_pass_through->completion_status = - (u8)(read_buffer.parameter_4); - /* return register value 1 information */ - soft_pass_through->reg_value_byte1 = - (u8)(read_buffer.parameter_5); - /* return register value 2 information */ - soft_pass_through->reg_value_byte2 = - (u8)(read_buffer.parameter_6); - /* return register value 3 information */ - soft_pass_through->reg_value_byte3 = - (u8)(read_buffer.parameter_7); - /* return register value 4 information */ - soft_pass_through->reg_value_byte4 = - (u8)(read_buffer.parameter_8); - - return com_rslt; -} -/*! - * @brief API used to set the soft pass through - * Sensor page-15 parameter 0 to 7 - * - * @param soft_pass_through : - * contains the value of soft pass through - * - * @param v_parameter_request_u8: value of selected parameter request - * parameter | value - * ------------------------------------|-------------------- - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_1 | 0x01 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2 | 0x02 - * BHY_PARAMETER_REQUEST_WRITE_PARAMETER_3 | 0x03 - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_set_soft_pass_through( -struct soft_pass_through_write_t *soft_pass_through, -u8 v_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - /* i2c slave address information */ - write_buffer.write_parameter_byte1 = - soft_pass_through->i2c_slave_address; - /* start register information */ - write_buffer.write_parameter_byte2 = - soft_pass_through->start_register; - /* write length information */ - write_buffer.write_parameter_byte3 = - soft_pass_through->write_length; - /* completion status information */ - write_buffer.write_parameter_byte4 = - soft_pass_through->completion_status; - /* return register value 1 information */ - write_buffer.write_parameter_byte5 = - soft_pass_through->reg_value_byte1; - /* return register value 2 information */ - write_buffer.write_parameter_byte6 = - soft_pass_through->reg_value_byte2; - /* return register value 3 information */ - write_buffer.write_parameter_byte7 = - soft_pass_through->reg_value_byte3; - /* return register value 4 information */ - write_buffer.write_parameter_byte8 = - soft_pass_through->reg_value_byte4; - /* load the parameter of soft - pass through sensor configuration*/ - com_rslt = bhy_write_parameter_bytes( - BHY_PAGE_15, v_parameter_request_u8); - return com_rslt; -} - -/*! - * @brief API used to get the data from the parameter - * I2C page register from 0x3B to 0x4A - * - * - * @param v_page_select_u8 : This input value for set the desired page - * @param v_parameter_request_u8 : - * This input value for set the desired parameter - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_read_parameter_bytes( -u8 v_page_select_u8, u8 v_parameter_request_u8) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_parameter_ack_u8 = BHY_INIT_VALUE; - u8 init_array_data = BHY_INIT_VALUE; - u8 a_read_data_u8[BHY_READ_BUFFER_SIZE]; - u8 v_parameter_ack_check_u8 = BHY_INIT_VALUE; - - for (; init_array_data < BHY_READ_BUFFER_SIZE; init_array_data++) - a_read_data_u8[init_array_data] = BHY_INIT_VALUE; - /* select the page*/ - com_rslt = bhy_set_parameter_page_select(v_page_select_u8); - /* select the parameter*/ - com_rslt += bhy_set_parameter_request(v_parameter_request_u8); - /* read the values*/ - for (v_parameter_ack_check_u8 = BHY_INIT_VALUE; - v_parameter_ack_check_u8 < BHY_PARAMETER_ACK_LENGTH; - v_parameter_ack_check_u8++) { - /* read acknowledgement*/ - com_rslt = bhy_get_parameter_acknowledge(&v_parameter_ack_u8); - if (v_parameter_ack_u8 == v_parameter_request_u8) { - break; - } else if (v_parameter_ack_u8 == BHY_PARAMETER_ACK_CHECK) { - p_bhy->delay_msec(BHY_PARAMETER_ACK_DELAY); - com_rslt = BHY_ERROR; - } else { - /* device not ready yet */ - p_bhy->delay_msec(1); - } - } - com_rslt = - p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr, - BHY_I2C_REG_PARAMETER_READ_BUFFER_ZERO, - a_read_data_u8, BHY_READ_BUFFER_LENGTH); - read_buffer.parameter_1 = - a_read_data_u8[BHY_READ_BUFFER_1_REG]; - read_buffer.parameter_2 = - a_read_data_u8[BHY_READ_BUFFER_2_REG]; - read_buffer.parameter_3 = - a_read_data_u8[BHY_READ_BUFFER_3_REG]; - read_buffer.parameter_4 = - a_read_data_u8[BHY_READ_BUFFER_4_REG]; - read_buffer.parameter_5 = - a_read_data_u8[BHY_READ_BUFFER_5_REG]; - read_buffer.parameter_6 = - a_read_data_u8[BHY_READ_BUFFER_6_REG]; - read_buffer.parameter_7 = - a_read_data_u8[BHY_READ_BUFFER_7_REG]; - read_buffer.parameter_8 = - a_read_data_u8[BHY_READ_BUFFER_8_REG]; - read_buffer.parameter_9 = - a_read_data_u8[BHY_READ_BUFFER_9_REG]; - read_buffer.parameter_10 = - a_read_data_u8[BHY_READ_BUFFER_10_REG]; - read_buffer.parameter_11 = - a_read_data_u8[BHY_READ_BUFFER_11_REG]; - read_buffer.parameter_12 = - a_read_data_u8[BHY_READ_BUFFER_12_REG]; - read_buffer.parameter_13 = - a_read_data_u8[BHY_READ_BUFFER_13_REG]; - read_buffer.parameter_14 = - a_read_data_u8[BHY_READ_BUFFER_14_REG]; - read_buffer.parameter_15 = - a_read_data_u8[BHY_READ_BUFFER_15_REG]; - read_buffer.parameter_16 = - a_read_data_u8[BHY_READ_BUFFER_16_REG]; - - return com_rslt; -} -/*! - * @brief API used to set the data from the parameter - * I2C page register from 0x5C to 0x63 - * - * - * @param v_page_select_u8 : This input value for set the desired page - * @param v_parameter_request_u8 : - * This input value for set the desired parameter - * - * @return results of bus communication function - * @retval 0 -> Success - * @retval -1 -> Error - * - * -*/ -BHY_RETURN_FUNCTION_TYPE bhy_write_parameter_bytes( -u8 v_page_select_u8, u8 v_parameter_request_u8) -{ -/* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - u8 v_parameter_ack_u8 = BHY_INIT_VALUE; - u8 v_parameter_ack_check_u8 = BHY_INIT_VALUE; - u8 v_write_parameter_byte_u8[BHY_WRITE_BUFFER_SIZE]; - u8 init_array_data = BHY_INIT_VALUE; - - for (; init_array_data < BHY_WRITE_BUFFER_SIZE; init_array_data++) - v_write_parameter_byte_u8[init_array_data] = BHY_INIT_VALUE; - /* check the p_bhy structure as NULL*/ - if (p_bhy == BHY_NULL) { - return BHY_NULL; - } else { - /* Assign the load parameters*/ - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_1_REG] - = write_buffer.write_parameter_byte1; - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_2_REG] - = write_buffer.write_parameter_byte2; - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_3_REG] - = write_buffer.write_parameter_byte3; - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_4_REG] - = write_buffer.write_parameter_byte4; - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_5_REG] - = write_buffer.write_parameter_byte5; - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_6_REG] - = write_buffer.write_parameter_byte6; - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_7_REG] - = write_buffer.write_parameter_byte7; - v_write_parameter_byte_u8[BHY_WRITE_BUFFER_8_REG] - = write_buffer.write_parameter_byte8; - /* write values to the load address*/ - com_rslt = p_bhy->BHY_BUS_WRITE_FUNC - (p_bhy->device_addr, - BHY_I2C_REG_PARAMETER_WRITE_BUFFER_ZERO, - &v_write_parameter_byte_u8[BHY_WRITE_BUFFER_1_REG], - BHY_WRITE_BUFFER_SIZE); - /* select the page*/ - com_rslt += bhy_set_parameter_page_select(v_page_select_u8); - /* select the parameter*/ - com_rslt += bhy_set_parameter_request(v_parameter_request_u8); - for (v_parameter_ack_check_u8 = BHY_INIT_VALUE; - v_parameter_ack_check_u8 < BHY_PARAMETER_ACK_LENGTH; - v_parameter_ack_check_u8++) { - /* read the acknowledgement*/ - com_rslt += bhy_get_parameter_acknowledge( - &v_parameter_ack_u8); - if (v_parameter_ack_u8 == v_parameter_request_u8) { - com_rslt += BHY_SUCCESS; - break; - } else if (v_parameter_ack_u8 - == BHY_PARAMETER_ACK_CHECK) { - p_bhy->delay_msec(BHY_PARAMETER_ACK_DELAY); - com_rslt += BHY_ERROR; - } else { - /* device not ready yet */ - p_bhy->delay_msec(1); - } - } - - } - return com_rslt; -} diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy_support.c b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy_support.c deleted file mode 100644 index 924ef1d..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy_support.c +++ /dev/null @@ -1,133 +0,0 @@ -/*! - * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holder nor the names of the - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - * The information provided is believed to be accurate and reliable. - * The copyright holder assumes no responsibility - * for the consequences of use - * of such information nor for any infringement of patents or - * other rights of third parties which may result from its use. - * No license is granted by implication or otherwise under any patent or - * patent rights of the copyright holder. - * - * - * @file bhy_support.c - * - * @date 12/19/2016 - * - * @brief driver on MCU for bhy - * - * - */ - - -/********************************************************************************/ -/* HEADER FILES */ -/********************************************************************************/ -#include "m2mb_types.h" -#include "azx_utils.h" - -#include "bhy_support.h" -#include "bhy_uc_driver_config.h" - -/********************************************************************************/ -/* STATIC VARIABLES */ -/********************************************************************************/ -static struct bhy_t bhy; -static uint8_t *version = (uint8_t *) BHY_MCU_REFERENCE_VERSION; - -/********************************************************************************/ -/* EXTERN FUNCTION DECLARATIONS */ -/********************************************************************************/ -extern int8_t sensor_i2c_write(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size); -extern int8_t sensor_i2c_read(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size); -extern void trace_log(const char *fmt, ...); - -/********************************************************************************/ -/* FUNCTION DECLARATIONS */ -/********************************************************************************/ -/*! -* @brief Initializes BHY smart sensor and its required connections -* -*/ -int8_t bhy_initialize_support(void) -{ - uint8_t tmp_retry = RETRY_NUM; - - bhy.bus_write = &sensor_i2c_write; - bhy.bus_read = &sensor_i2c_read; - bhy.delay_msec = &bhy_delay_msec; - bhy.device_addr = BHY_I2C_SLAVE_ADDRESS; - - bhy_init(&bhy); - - bhy_set_reset_request(BHY_RESET_ENABLE);; - - while(tmp_retry--) - { - bhy_get_product_id(&bhy.product_id); - - if(PRODUCT_ID_7183 == bhy.product_id) - { - return BHY_SUCCESS; - } - - bhy_delay_msec(BHY_PARAMETER_ACK_DELAY); - } - - return BHY_PRODUCT_ID_ERROR; -} -/*! -* @brief Initiates a delay of the length of the argument in milliseconds -* -* @param[in] msec Delay length in terms of milliseconds -* -*/ -void bhy_delay_msec(uint32_t msec) -{ - azx_sleep_ms(msec); -} -/*! - * @brief provides a print function to the bhy driver on DD2.0 platform - */ -void bhy_printf(const u8 * string) -{ - trace_log("%s",string); -} -/*! - * @brief provides the mcu reference code version - */ -uint8_t * bhy_get_version(void) -{ - return (version); -} -/** @}*/ diff --git a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy_uc_driver.c b/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy_uc_driver.c deleted file mode 100644 index e266161..0000000 --- a/Samples/BRAVO_SmartLock_Demo/BOSCH/BHI160/src/bhy_uc_driver.c +++ /dev/null @@ -1,1646 +0,0 @@ -/*! - * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of the copyright holder nor the names of the - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - * The information provided is believed to be accurate and reliable. - * The copyright holder assumes no responsibility - * for the consequences of use - * of such information nor for any infringement of patents or - * other rights of third parties which may result from its use. - * No license is granted by implication or otherwise under any patent or - * patent rights of the copyright holder. - * - * - * @file bhy_uc_driver.c - * - * @date 12/19/2016 - * - * @brief driver on MCU for bhy - * - * - */ - -/********************************************************************************/ -/* HEADER FILES */ -/********************************************************************************/ -#include "bhy_uc_driver.h" - - -/********************************************************************************/ -/* MACROS */ -/********************************************************************************/ -#ifdef __cplusplus -extern "C"{ -#endif - -/* firmware download retry time */ -#define BHY_INIT_RETRY_COUNT 3 -/* these FIFO sizes are dependent on the type enumeration */ -/* do not change the order */ -#define BHY_DATA_SIZE_PADDING 1 -#define BHY_DATA_SIZE_QUATERNION 11 -#define BHY_DATA_SIZE_VECTOR 8 -#define BHY_DATA_SIZE_SCALAR_U8 2 -#define BHY_DATA_SIZE_SCALAR_U16 3 -#define BHY_DATA_SIZE_SCALAR_S16 3 -#define BHY_DATA_SIZE_SCALAR_U24 4 -#define BHY_DATA_SIZE_SENSOR_EVENT 1 -#define BHY_DATA_SIZE_UNCALIB_VECTOR 14 -#define BHY_DATA_SIZE_META_EVENT 4 -#define BHY_DATA_SIZE_BSX 17 -#define BHY_DATA_SIZE_DEBUG 14 - -/* set default custom sensor packet size to 1, same as padding */ -#define BHY_DATA_SIZE_CUS1 1 -#define BHY_DATA_SIZE_CUS2 1 -#define BHY_DATA_SIZE_CUS3 1 -#define BHY_DATA_SIZE_CUS4 1 -#define BHY_DATA_SIZE_CUS5 1 - -#define MAX_PAGE_NUM 15 -#define MAX_SENSOR_ID 0x20 -#define MAX_SENSOR_ID_NONWAKEUP 0x3F -#define MAX_WRITE_BYTES 8 -#define SENSOR_CALLBACK_LIST_NUM 64 -#define TIMESTAMP_CALLBACK_LIST_NUM 2 -#define METAEVENT_CALLBACK_LIST_NUM 32 -#define SENSOR_PARAMETER_WRITE 0xC0 -#define MAX_METAEVENT_ID 17 - -/********************************************************************************/ -/* GLOBAL VARIABLES */ -/********************************************************************************/ - -/* these FIFO sizes are dependent on the enumeration above */ -/* do not change the order */ -uint8_t _fifoSizes[] = { - BHY_DATA_SIZE_PADDING, - BHY_DATA_SIZE_QUATERNION, - BHY_DATA_SIZE_VECTOR, - BHY_DATA_SIZE_SCALAR_U8, - BHY_DATA_SIZE_SCALAR_U16, - BHY_DATA_SIZE_SCALAR_S16, - BHY_DATA_SIZE_SCALAR_U24, - BHY_DATA_SIZE_SENSOR_EVENT, - BHY_DATA_SIZE_UNCALIB_VECTOR, - BHY_DATA_SIZE_META_EVENT, - BHY_DATA_SIZE_BSX, - BHY_DATA_SIZE_DEBUG, - BHY_DATA_SIZE_CUS1, - BHY_DATA_SIZE_CUS2, - BHY_DATA_SIZE_CUS3, - BHY_DATA_SIZE_CUS4, - BHY_DATA_SIZE_CUS5, -}; - -#if BHY_CALLBACK_MODE -/* The callback feature is a type of software interrupt. */ -/* The driver keeps in RAM an array of function pointers */ -/* for every sensor ID, wakeup and non-wakeup, every meta */ -/* event, and both wakeup and non-wakeup timestamps. When */ -/* parsing the fifo within the bhy_parse_next_fifo_packet */ -/* function, it will jump into the callback if the pointer */ -/* is non-null. */ -/* to sort through the array, it use either the sensor_id */ -/* or the event id. */ - -static void (*sensor_callback_list[SENSOR_CALLBACK_LIST_NUM])(bhy_data_generic_t *, bhy_virtual_sensor_t) = {0}; -static void (*timestamp_callback_list[TIMESTAMP_CALLBACK_LIST_NUM])(bhy_data_scalar_u16_t *) = {0}; -static void (*meta_event_callback_list[METAEVENT_CALLBACK_LIST_NUM])(bhy_data_meta_event_t *, bhy_meta_event_type_t) = {0}; -#endif - -//extern void trace_log(const char *fmt, ...); - - -/********************************************************************************/ -/* FUNCTIONS */ -/********************************************************************************/ - -/*! - * @brief This function initializes the driver, the API and loads the ram patch into the sensor - * - * @param[in] bhy_fw_data pointer to the firmware of bhy - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_driver_init(const uint8_t *bhy_fw_data) -{ - uint32_t tmp_fw_len = 0; - int8_t init_retry_count = BHY_INIT_RETRY_COUNT; - BHY_RETURN_FUNCTION_TYPE result = BHY_SUCCESS; - - /* get fw lenght */ - tmp_fw_len = 16 + bhy_fw_data[12] + (256 * bhy_fw_data[13]); - - /* retry BHY_INIT_RETRY_COUNT times to avoid firmware download fail*/ - while (init_retry_count > 0) - { - bhy_initialize_support(); - - /* downloads the ram patch to the BHy */ - result += bhy_initialize_from_rom(bhy_fw_data, /*bhy_fw_len*/tmp_fw_len); - - if (result == BHY_SUCCESS) - { - break; - } - - init_retry_count--; - } - - return result; -} - -/*! - * @brief this function configures meta event - * - * @param[in] meta_event_id ID of meta event - * @param[in] fifo_sel to choose the FIFO - * @param[in] enable_state enable state of bhy - * @param[in] int_enable_state enable state of interrupt - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_meta_event_set_config(bhy_meta_event_type_t meta_event_id, - bhy_meta_event_fifo_type_t fifo_sel, - uint8_t enable_state, uint8_t int_enable_state) -{ - BHY_RETURN_FUNCTION_TYPE result = BHY_SUCCESS; - - result += bhy_set_meta_event(meta_event_id, enable_state, BHY_META_EVENT_ENABLE, fifo_sel); - result += bhy_set_meta_event(meta_event_id, int_enable_state, BHY_META_INTR_ENABLE, fifo_sel); - - return result; -} - -/*! - * @brief this function gets configuration from specific meta event - * - * @param[in] meta_event_id ID of meta event - * @param[in] fifo_sel to choose the FIFO - * @param[in] p_enable_state pointer of enable state of bhy - * @param[in] p_int_enable_state pointer of the enable state of interrupt - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_meta_event_get_config(bhy_meta_event_type_t meta_event_id, - bhy_meta_event_fifo_type_t fifo_sel, - uint8_t *p_enable_state, uint8_t *p_int_enable_state) -{ - BHY_RETURN_FUNCTION_TYPE result = BHY_SUCCESS; - - result += bhy_get_meta_event(meta_event_id, BHY_META_EVENT_ENABLE, p_int_enable_state, p_enable_state, fifo_sel); - result += bhy_get_meta_event(meta_event_id, BHY_META_INTR_ENABLE, p_int_enable_state, p_enable_state, fifo_sel); - - return result; -} - -/*! - * @brief this functions enables the selected virtual sensor - * - * @param[in] sensor_id sensor ID - * @param[in] wakeup_status status after wakeup - * @param[in] sample_rate sample rate - * @param[in] max_report_latency_ms max report latency,unit is millisecond - * @param[in] flush_sensor how to flush the fifo of sensor - * @param[in] change_sensitivity whether to change the sensitivity - * @param[in] dynamic_range dynamic range - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_enable_virtual_sensor(bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status, - uint16_t sample_rate, uint16_t max_report_latency_ms, - uint8_t flush_sensor, uint16_t change_sensitivity, - uint16_t dynamic_range) -{ - uint16_t int_sensor_id = sensor_id; - BHY_RETURN_FUNCTION_TYPE result = BHY_SUCCESS; - union - { - struct sensor_configuration_wakeup_t sensor_configuration_wakeup; - struct sensor_configuration_non_wakeup_t sensor_configuration_non_wakeup; - } sensor_configuration; - - /* checks if sensor id is in range */ - if ((uint8_t)sensor_id >= MAX_SENSOR_ID) - { - return BHY_OUT_OF_RANGE; - } - - /*computes the sensor id */ - int_sensor_id = int_sensor_id + wakeup_status; - - /* flush the fifo if requested */ - switch (flush_sensor) - { - case VS_FLUSH_SINGLE: - result += bhy_set_fifo_flush(int_sensor_id); - break; - case VS_FLUSH_ALL: - result += bhy_set_fifo_flush(VS_FLUSH_ALL); - break; - case VS_FLUSH_NONE: - break; - default: - return BHY_OUT_OF_RANGE; - } - - /* computes the param page as sensor_id + 0xC0 (sensor parameter write)*/ - int_sensor_id = int_sensor_id + SENSOR_PARAMETER_WRITE; - - /*calls the right function */ - switch (wakeup_status) - { - case VS_NON_WAKEUP: - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_sample_rate = sample_rate; - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_max_report_latency = max_report_latency_ms; - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_change_sensitivity = change_sensitivity; - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_dynamic_range = dynamic_range; - result += bhy_set_non_wakeup_sensor_configuration( &sensor_configuration.sensor_configuration_non_wakeup, int_sensor_id); - return result; - case VS_WAKEUP: - sensor_configuration.sensor_configuration_wakeup.wakeup_sample_rate = sample_rate; - sensor_configuration.sensor_configuration_wakeup.wakeup_max_report_latency = max_report_latency_ms; - sensor_configuration.sensor_configuration_wakeup.wakeup_change_sensitivity = change_sensitivity; - sensor_configuration.sensor_configuration_wakeup.wakeup_dynamic_range = dynamic_range; - result += bhy_set_wakeup_sensor_configuration(&sensor_configuration.sensor_configuration_wakeup, int_sensor_id); - return result; - default: - return BHY_OUT_OF_RANGE; - } -} - -/*! - * @brief this functions disables the selected virtual sensor - * - * @param[in] sensor_id sensor ID - * @param[in] wakeup_status status of WAKEUP OR NONWAKEUP - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_disable_virtual_sensor(bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status) -{ - uint16_t int_sensor_id = sensor_id; - - union - { - struct sensor_configuration_wakeup_t sensor_configuration_wakeup; - struct sensor_configuration_non_wakeup_t sensor_configuration_non_wakeup; - } sensor_configuration; - - /* checks if sensor id is in range */ - if (sensor_id >= MAX_SENSOR_ID) - { - return BHY_OUT_OF_RANGE; - } - - /* computes the param page as */ - /* wakeup_status + sensor_id + 0xC0 (sensor parameter write) */ - int_sensor_id = int_sensor_id + SENSOR_PARAMETER_WRITE; - - /*calls the right function */ - switch (wakeup_status) - { - case VS_NON_WAKEUP: - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_sample_rate = 0; - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_max_report_latency = 0; - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_change_sensitivity = 0; - sensor_configuration.sensor_configuration_non_wakeup.non_wakeup_dynamic_range = 0; - return bhy_set_non_wakeup_sensor_configuration(&sensor_configuration.sensor_configuration_non_wakeup, int_sensor_id); - - case VS_WAKEUP: - sensor_configuration.sensor_configuration_wakeup.wakeup_sample_rate = 0; - sensor_configuration.sensor_configuration_wakeup.wakeup_max_report_latency = 0; - sensor_configuration.sensor_configuration_wakeup.wakeup_change_sensitivity = 0; - sensor_configuration.sensor_configuration_wakeup.wakeup_dynamic_range = 0; - return bhy_set_wakeup_sensor_configuration(&sensor_configuration.sensor_configuration_wakeup, int_sensor_id); - - default: - return BHY_OUT_OF_RANGE; - } -} - -/*! - * @brief this functions retrieves the fifo data,it needs a buffer of at least (BHY_I2C_REG_BUFFER_LENGTH + 1) bytes to work. - * it outputs the data into the variable buffer. the number of bytes read. - * - * @param[in] buffer pointer of buffer - * @param[in] buffer_size size of the buffer in bytes - * @param[out] bytes_read the bytes in fifo which have been read - * @param[out] bytes_left the bytes left in fifo which have not been read - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_read_fifo(uint8_t *buffer, uint16_t buffer_size, uint16_t *bytes_read, uint16_t *bytes_left) -{ - BHY_RETURN_FUNCTION_TYPE result = BHY_SUCCESS; - static uint16_t current_index = 0; - static uint16_t current_transaction_size = 0; - - if (buffer_size <= BHY_I2C_REG_BUFFER_LENGTH) - { - return BHY_OUT_OF_RANGE; - } - - /* gets the number of bytes left in the fifo either from memory of from */ - /* the register */ - if (current_transaction_size == 0) - { - result = bhy_read_bytes_remaining(¤t_transaction_size); - } - - /* if there are bytes in the fifo to read */ - if (current_transaction_size) - { - /* calculates the number of bytes to read. either the number of */ - /* bytes left, or the buffer size, or just enough so the last page */ - /* does not get turned */ - if (buffer_size >= current_transaction_size - current_index) - { - *bytes_read = current_transaction_size - current_index; - } - else if (current_transaction_size - (current_index+buffer_size) <= BHY_I2C_REG_BUFFER_LENGTH) - { - *bytes_read = (current_transaction_size - (BHY_I2C_REG_BUFFER_LENGTH + 1)) - current_index; - } - else - { - *bytes_read = buffer_size; - } - - result += bhy_read_reg(current_index % BHY_I2C_REG_BUFFER_LENGTH, buffer, *bytes_read); - - current_index += *bytes_read; - - (*bytes_left) = current_transaction_size - current_index; - - if ((*bytes_left) == 0) - { - current_index = 0; - current_transaction_size = 0; - } - - } - else - { - (*bytes_read) = 0; - (*bytes_left) = 0; - return result; - } - - return result; -} - -/*! - * @brief this functions parse the packet in fifo and get the actual fifo data of sensors - * - * - * @param[in] fifo_buffer pointer of fifo - * @param[in] fifo_buffer_length size of the fifo - * @param[out] fifo_data_output the actual fifo data of sensors - * @param[out] fifo_data_type data type of fifo data - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_parse_next_fifo_packet (uint8_t **fifo_buffer, uint16_t *fifo_buffer_length, - bhy_data_generic_t * fifo_data_output, - bhy_data_type_t * fifo_data_type) -{ - uint16_t i = 0; - - if ((*fifo_buffer_length) == 0) - { - /* there are no more bytes in the fifo buffer to read */ - return BHY_SUCCESS; - } - - /* the first fifo byte should be a known virtual sensor ID */ - switch (**fifo_buffer) - { - case VS_ID_PADDING: - (*fifo_data_type) = BHY_DATA_TYPE_PADDING; - fifo_data_output->data_padding.sensor_id = (**fifo_buffer); - break; - - case VS_ID_ROTATION_VECTOR: - case VS_ID_ROTATION_VECTOR_WAKEUP: - case VS_ID_GAME_ROTATION_VECTOR: - case VS_ID_GAME_ROTATION_VECTOR_WAKEUP: - case VS_ID_GEOMAGNETIC_ROTATION_VECTOR: - case VS_ID_GEOMAGNETIC_ROTATION_VECTOR_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_QUATERNION]) - return BHY_OUT_OF_RANGE; - (*fifo_data_type) = BHY_DATA_TYPE_QUATERNION; - fifo_data_output->data_quaternion.sensor_id = (**fifo_buffer); - fifo_data_output->data_quaternion.x = - (int16_t)(((uint16_t)*((*fifo_buffer) + 1)) | ((uint16_t)*((*fifo_buffer) + 2) << 8)); - fifo_data_output->data_quaternion.y = - (int16_t)(((uint16_t)*((*fifo_buffer) + 3)) | ((uint16_t)*((*fifo_buffer) + 4) << 8)); - fifo_data_output->data_quaternion.z = - (int16_t)(((uint16_t)*((*fifo_buffer) + 5)) | ((uint16_t)*((*fifo_buffer) + 6) << 8)); - fifo_data_output->data_quaternion.w = - (int16_t)(((uint16_t)*((*fifo_buffer) + 7)) | ((uint16_t)*((*fifo_buffer) + 8) << 8)); - fifo_data_output->data_quaternion.estimated_accuracy = - (int16_t)(((uint16_t)*((*fifo_buffer) + 9)) | ((uint16_t)*((*fifo_buffer) + 10) << 8)); - break; - - case VS_ID_ACCELEROMETER: - case VS_ID_ACCELEROMETER_WAKEUP: - case VS_ID_MAGNETOMETER: - case VS_ID_MAGNETOMETER_WAKEUP: - case VS_ID_ORIENTATION: - case VS_ID_ORIENTATION_WAKEUP: - case VS_ID_GYROSCOPE: - case VS_ID_GYROSCOPE_WAKEUP: - case VS_ID_GRAVITY: - case VS_ID_GRAVITY_WAKEUP: - case VS_ID_LINEAR_ACCELERATION: - case VS_ID_LINEAR_ACCELERATION_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_VECTOR]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_VECTOR; - fifo_data_output->data_vector.sensor_id = (**fifo_buffer); - fifo_data_output->data_vector.x = - (int16_t)(((uint16_t)*((*fifo_buffer) + 1)) | ((uint16_t)*((*fifo_buffer) + 2) << 8)); - fifo_data_output->data_vector.y = - (int16_t)(((uint16_t)*((*fifo_buffer) + 3)) | ((uint16_t)*((*fifo_buffer) + 4) << 8)); - fifo_data_output->data_vector.z = - (int16_t)(((uint16_t)*((*fifo_buffer) + 5)) | ((uint16_t)*((*fifo_buffer) + 6) << 8)); - fifo_data_output->data_vector.status = *((*fifo_buffer) + 7); - break; - - case VS_ID_HEART_RATE: - case VS_ID_HEART_RATE_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_SCALAR_U8]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_SCALAR_U8; - fifo_data_output->data_scalar_u8.sensor_id = (**fifo_buffer); - fifo_data_output->data_scalar_u8.data = *((*fifo_buffer) + 1); - break; - - case VS_ID_LIGHT: - case VS_ID_LIGHT_WAKEUP: - case VS_ID_PROXIMITY: - case VS_ID_PROXIMITY_WAKEUP: - case VS_ID_HUMIDITY: - case VS_ID_HUMIDITY_WAKEUP: - case VS_ID_STEP_COUNTER: - case VS_ID_STEP_COUNTER_WAKEUP: - case VS_ID_ACTIVITY: - case VS_ID_ACTIVITY_WAKEUP: - case VS_ID_TIMESTAMP_LSW: - case VS_ID_TIMESTAMP_LSW_WAKEUP: - case VS_ID_TIMESTAMP_MSW: - case VS_ID_TIMESTAMP_MSW_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_SCALAR_U16]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_SCALAR_U16; - fifo_data_output->data_scalar_u16.sensor_id = (**fifo_buffer); - fifo_data_output->data_scalar_u16.data = - (uint16_t)(((uint16_t)*((*fifo_buffer) + 1)) | ((uint16_t)*((*fifo_buffer) + 2) << 8)); - break; - - case VS_ID_TEMPERATURE: - case VS_ID_TEMPERATURE_WAKEUP: - case VS_ID_AMBIENT_TEMPERATURE: - case VS_ID_AMBIENT_TEMPERATURE_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_SCALAR_S16]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_SCALAR_S16; - fifo_data_output->data_scalar_s16.sensor_id = (**fifo_buffer); - fifo_data_output->data_scalar_s16.data = - (int16_t)(((uint16_t)*(*fifo_buffer + 1)) | ((uint16_t)*(*fifo_buffer + 2) << 8)); - break; - - case VS_ID_BAROMETER: - case VS_ID_BAROMETER_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_SCALAR_U24]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_SCALAR_U24; - fifo_data_output->data_scalar_u24.sensor_id = (**fifo_buffer); - fifo_data_output->data_scalar_u24.data = - (uint32_t)(((uint32_t)*((*fifo_buffer) + 1)) | ((uint32_t)*((*fifo_buffer) + 2) << 8) | - ((uint32_t)*((*fifo_buffer) + 3) << 16)); - break; - - case VS_ID_SIGNIFICANT_MOTION: - case VS_ID_SIGNIFICANT_MOTION_WAKEUP: - case VS_ID_STEP_DETECTOR: - case VS_ID_STEP_DETECTOR_WAKEUP: - case VS_ID_TILT_DETECTOR: - case VS_ID_TILT_DETECTOR_WAKEUP: - case VS_ID_WAKE_GESTURE: - case VS_ID_WAKE_GESTURE_WAKEUP: - case VS_ID_GLANCE_GESTURE: - case VS_ID_GLANCE_GESTURE_WAKEUP: - case VS_ID_PICKUP_GESTURE: - case VS_ID_PICKUP_GESTURE_WAKEUP: - (*fifo_data_type) = BHY_DATA_TYPE_SENSOR_EVENT; - fifo_data_output->data_sensor_event.sensor_id = (**fifo_buffer); - break; - - case VS_ID_UNCALIBRATED_MAGNETOMETER: - case VS_ID_UNCALIBRATED_MAGNETOMETER_WAKEUP: - case VS_ID_UNCALIBRATED_GYROSCOPE: - case VS_ID_UNCALIBRATED_GYROSCOPE_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_UNCALIB_VECTOR]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_UNCALIB_VECTOR; - fifo_data_output->data_uncalib_vector.sensor_id = (**fifo_buffer); - fifo_data_output->data_uncalib_vector.x = - (int16_t)(((uint16_t)*((*fifo_buffer) + 1)) | ((uint16_t)*((*fifo_buffer) + 2) << 8)); - fifo_data_output->data_uncalib_vector.y = - (int16_t)(((uint16_t)*((*fifo_buffer) + 3)) | ((uint16_t)*((*fifo_buffer) + 4) << 8)); - fifo_data_output->data_uncalib_vector.z = - (int16_t)(((uint16_t)*((*fifo_buffer) + 5)) | ((uint16_t)*((*fifo_buffer) + 6) << 8)); - fifo_data_output->data_uncalib_vector.x_bias = - (int16_t)(((uint16_t)*((*fifo_buffer) + 7)) | ((uint16_t)*((*fifo_buffer) + 8) << 8)); - fifo_data_output->data_uncalib_vector.y_bias = - (int16_t)(((uint16_t)*((*fifo_buffer) + 9)) | ((uint16_t)*((*fifo_buffer) + 10) << 8)); - fifo_data_output->data_uncalib_vector.z_bias = - (int16_t)(((uint16_t)*((*fifo_buffer) + 11)) | ((uint16_t)*((*fifo_buffer) + 12) << 8)); - fifo_data_output->data_uncalib_vector.status = *((*fifo_buffer)+13); - break; - - case VS_ID_META_EVENT: - case VS_ID_META_EVENT_WAKEUP: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_META_EVENT]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_META_EVENT; - fifo_data_output->data_meta_event.meta_event_id = (**fifo_buffer); - fifo_data_output->data_meta_event.event_number = (bhy_meta_event_type_t)(*((*fifo_buffer) + 1)); - fifo_data_output->data_meta_event.sensor_type = *((*fifo_buffer) + 2); - fifo_data_output->data_meta_event.event_specific = *((*fifo_buffer) + 3); - break; - case VS_ID_DEBUG: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_DEBUG]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_DEBUG; - fifo_data_output->data_debug.sensor_id = (**fifo_buffer); - fifo_data_output->data_debug.data[0] = *((*fifo_buffer) + 1); - fifo_data_output->data_debug.data[1] = *((*fifo_buffer) + 2); - fifo_data_output->data_debug.data[2] = *((*fifo_buffer) + 3); - fifo_data_output->data_debug.data[3] = *((*fifo_buffer) + 4); - fifo_data_output->data_debug.data[4] = *((*fifo_buffer) + 5); - fifo_data_output->data_debug.data[5] = *((*fifo_buffer) + 6); - fifo_data_output->data_debug.data[6] = *((*fifo_buffer) + 7); - fifo_data_output->data_debug.data[7] = *((*fifo_buffer) + 8); - fifo_data_output->data_debug.data[8] = *((*fifo_buffer) + 9); - fifo_data_output->data_debug.data[9] = *((*fifo_buffer) + 10); - fifo_data_output->data_debug.data[10] = *((*fifo_buffer) + 11); - fifo_data_output->data_debug.data[11] = *((*fifo_buffer) + 12); - fifo_data_output->data_debug.data[12] = *((*fifo_buffer) + 13); - break; - case VS_ID_BSX_C: - case VS_ID_BSX_B: - case VS_ID_BSX_A: - if ((*fifo_buffer_length) < _fifoSizes[BHY_DATA_TYPE_BSX]) - { - return BHY_OUT_OF_RANGE; - } - - (*fifo_data_type) = BHY_DATA_TYPE_BSX; - fifo_data_output->data_bsx.sensor_id = (**fifo_buffer); - fifo_data_output->data_bsx.x = - (uint32_t)(((uint32_t)*((*fifo_buffer) + 1)) | ((uint32_t)*((*fifo_buffer) + 2) << 8) | - ((uint32_t)*((*fifo_buffer) + 3) << 16) | ((uint32_t)*((*fifo_buffer) + 4) << 24)); - fifo_data_output->data_bsx.y = - (uint32_t)(((uint32_t)*((*fifo_buffer) + 5)) | ((uint32_t)*((*fifo_buffer) + 6) << 8) | - ((uint32_t)*((*fifo_buffer) + 7) << 16) | ((uint32_t)*((*fifo_buffer) + 8) << 24)); - fifo_data_output->data_bsx.z = - (uint32_t)(((uint32_t)*((*fifo_buffer) + 9)) | ((uint32_t)*((*fifo_buffer) + 10) << 8) | - ((uint32_t)*((*fifo_buffer) + 11) << 16) | ((uint32_t)*((*fifo_buffer) + 12) << 24)); - fifo_data_output->data_bsx.timestamp = - (uint32_t)(((uint32_t)*((*fifo_buffer) + 13)) | ((uint32_t)*((*fifo_buffer) + 14) << 8) | - ((uint32_t)*((*fifo_buffer) + 15) << 16) | ((uint32_t)*((*fifo_buffer) + 16) << 24)); - break; - - case VS_ID_CUS1: - case VS_ID_CUS2: - case VS_ID_CUS3: - case VS_ID_CUS4: - case VS_ID_CUS5: - (*fifo_data_type) = (bhy_data_type_t)(BHY_DATA_TYPE_CUS1 + **fifo_buffer - VS_ID_CUS1); - - if ((*fifo_buffer_length) < _fifoSizes[*fifo_data_type]) - { - return BHY_OUT_OF_RANGE; - } - - fifo_data_output->data_custom.sensor_id = (**fifo_buffer); - - for(i = 0; i < _fifoSizes[*fifo_data_type] - 1; i++) - fifo_data_output->data_custom.data[i] = *((*fifo_buffer) + i + 1); - break; - - case VS_ID_CUS1_WAKEUP: - case VS_ID_CUS2_WAKEUP: - case VS_ID_CUS3_WAKEUP: - case VS_ID_CUS4_WAKEUP: - case VS_ID_CUS5_WAKEUP: - (*fifo_data_type) = (bhy_data_type_t)(BHY_DATA_TYPE_CUS1+ **fifo_buffer - VS_ID_CUS1_WAKEUP); - - if ((*fifo_buffer_length) < _fifoSizes[*fifo_data_type]) - { - return BHY_OUT_OF_RANGE; - } - - fifo_data_output->data_custom.sensor_id = (**fifo_buffer); - - for(i = 0; i < _fifoSizes[*fifo_data_type]-1; i++) - { - fifo_data_output->data_custom.data[i] = *((*fifo_buffer) + i + 1); - } - break; - - /* the VS sensor ID is unknown. Either the sync has been lost or the */ - /* ram patch implements a new sensor ID that this driver doesn't yet */ - /* support */ - default: - return BHY_OUT_OF_RANGE; - } - - -#if defined(BHY_DEBUG) - { - uint8_t *p_name = "UnDefined"; - const char *sensors[] = {"PAdding", "Acc", "Mag", "Orient", "Gyro", "Light", "Bar", "Temp" - ,"Prox", "Gravity", "Line Acc", "R Vector", "Humidity", "A temp", "un Mag", "GR Vector" - ,"Un Gyro","SigMotion","StepDet", "StepCnt", "GeoR Vector", "HeartRate", "TiltDect","WGesture" - ,"Glance", "PickUp", "Cus1", "Cus2", "Cus3", "Cus4", "Cus5", "Activity" - }; - - if((uint8_t)**fifo_buffer <= VS_ID_ACTIVITY) - { - p_name = sensors[(uint8_t)**fifo_buffer]; - } - else if((uint8_t)**fifo_buffer <= VS_ID_ACTIVITY_WAKEUP) - { - p_name = sensors[(uint8_t)**fifo_buffer - 32]; - } - else - { - switch(**fifo_buffer) - { - case VS_ID_DEBUG: - p_name = "DString"; - break; - case VS_ID_TIMESTAMP_LSW_WAKEUP: - case VS_ID_TIMESTAMP_LSW: - p_name = "LSW"; - break; - case VS_ID_TIMESTAMP_MSW_WAKEUP: - case VS_ID_TIMESTAMP_MSW: - p_name = "MSW"; - break; - case VS_ID_META_EVENT_WAKEUP: - case VS_ID_META_EVENT: - p_name = "Meta Evt"; - break; - case VS_ID_BSX_A: - p_name = "BSX A"; - break; - case VS_ID_BSX_B: - p_name = "BSX B"; - break; - case VS_ID_BSX_C: - p_name = "BSX C"; - break; - default: - p_name = "UnKnown"; - break; - } - } - - trace_log("[Sample](%12s):(%02d)", p_name, _fifoSizes[*fifo_data_type]); - for(i = 0; i < _fifoSizes[*fifo_data_type]; i++) - trace_log(" %02x", *((*fifo_buffer) + i)); - trace_log("\n"); - } -#endif - - -#if BHY_CALLBACK_MODE - if((**fifo_buffer) < 0x40) - { - if (sensor_callback_list[(**fifo_buffer)] != 0) - { - sensor_callback_list[(**fifo_buffer)](fifo_data_output, (bhy_virtual_sensor_t)(**fifo_buffer)); - } - } - else if ((**fifo_buffer) == VS_ID_TIMESTAMP_LSW ||(**fifo_buffer) == VS_ID_TIMESTAMP_MSW) - { - if (timestamp_callback_list[0] != 0) - { - timestamp_callback_list[0](&fifo_data_output->data_scalar_u16); - } - } - else if ((**fifo_buffer) == VS_ID_TIMESTAMP_LSW_WAKEUP ||(**fifo_buffer) == VS_ID_TIMESTAMP_MSW_WAKEUP) - { - if (timestamp_callback_list[1] != 0) - { - timestamp_callback_list[1](&fifo_data_output->data_scalar_u16); - } - } - else if ((**fifo_buffer) == VS_ID_META_EVENT ||(**fifo_buffer) == VS_ID_META_EVENT_WAKEUP) - { - if (meta_event_callback_list[fifo_data_output->data_meta_event.event_number] != 0) - { - meta_event_callback_list[fifo_data_output->data_meta_event.event_number](&fifo_data_output->data_meta_event, - fifo_data_output->data_meta_event.event_number); - } - } -#endif - - - (*fifo_buffer) += _fifoSizes[*fifo_data_type]; - (*fifo_buffer_length) -= _fifoSizes[*fifo_data_type]; - - return BHY_SUCCESS; -}; - -/*! - * @brief This function will detect the timestamp packet accordingly and update - * either the MSW or the LSW of the system timestamp - * - * system_timestamp is only valid after LSW comes. - * - * @param[in] timestamp_packet timestamp of packets - * @param[in/out] system_timestamp timestamp of system - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_update_system_timestamp(bhy_data_scalar_u16_t *timestamp_packet, - uint32_t *system_timestamp) -{ - static uint32_t timestamp_wakeup = 0; - static uint32_t timestamp_nonwakeup = 0; - - switch (timestamp_packet->sensor_id) - { - case VS_ID_TIMESTAMP_LSW: - timestamp_nonwakeup = (timestamp_nonwakeup & 0xFFFF0000) | (uint32_t)timestamp_packet->data; - *system_timestamp = timestamp_nonwakeup; - break; - case VS_ID_TIMESTAMP_LSW_WAKEUP: - timestamp_wakeup = (timestamp_wakeup & 0xFFFF0000) | (uint32_t)timestamp_packet->data; - *system_timestamp = timestamp_wakeup; - break;; - - case VS_ID_TIMESTAMP_MSW: - timestamp_nonwakeup = (timestamp_nonwakeup & 0x0000FFFF) | ((uint32_t)timestamp_packet->data << 16); - break; - case VS_ID_TIMESTAMP_MSW_WAKEUP: - timestamp_wakeup = (timestamp_wakeup & 0x0000FFFF) | ((uint32_t)timestamp_packet->data << 16); - break; - default: - return BHY_OUT_OF_RANGE; - } - /* FabioPi */ - return BHY_SUCCESS; -} - -/*! - * @brief This function writes arbitrary data to an arbitrary parameter page - * - * @param[in] page select the page of parameter - * @param[in] parameter select the parameter - * @param[in] data data to be written to parameter - * @param[in] length length of data - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_write_parameter_page(uint8_t page, uint8_t parameter, uint8_t *data, uint8_t length) -{ - /* variable used for return the status of communication result */ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - - uint8_t v_parameter_ack = BHY_INIT_VALUE; - uint8_t v_parameter_ack_check = BHY_INIT_VALUE; - - /* write values to the load address*/ - if (length > MAX_WRITE_BYTES) - { - length = MAX_WRITE_BYTES; - } - else if (length == 0) - { - return BHY_SUCCESS; - } - - com_rslt = bhy_write_reg(BHY_I2C_REG_PARAMETER_WRITE_BUFFER_ZERO, data, length); - - /* select the page*/ - if (page > MAX_PAGE_NUM) - { - page = MAX_PAGE_NUM; - } - else if (page == 0) - { - return BHY_SUCCESS; - } - - page = ((length & 0x07) << 4) | page; - com_rslt += bhy_write_reg(BHY_I2C_REG_PARAMETER_PAGE_SELECT__REG, &page, 1); - - /* select the parameter*/ - parameter |= 0x80; - com_rslt += bhy_set_parameter_request(parameter); - for (v_parameter_ack_check = BHY_INIT_VALUE; - v_parameter_ack_check < BHY_PARAMETER_ACK_LENGTH; - v_parameter_ack_check++) - { - /* read the acknowledgment*/ - com_rslt += bhy_get_parameter_acknowledge(&v_parameter_ack); - if (v_parameter_ack == parameter) - { - com_rslt += BHY_SUCCESS; - break; - } - else if (v_parameter_ack == BHY_PARAMETER_ACK_CHECK) - { - bhy_delay_msec(BHY_PARAMETER_ACK_DELAY); - com_rslt += BHY_ERROR; - } - else - { - /* device not ready yet */ - bhy_delay_msec(10); - } - } - return com_rslt; -} - -/*! - * @brief This function reads arbitrary data from an arbitrary parameter page - * - * @param[in] page select the page of parameter - * @param[in] parameter select the parameter - * @param[out] data data to be read from parameter - * @param[in] length length of data - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_read_parameter_page(uint8_t page, uint8_t parameter, uint8_t *data, uint8_t length) -{ - /* variable used for return the status of communication result*/ - BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES; - - uint8_t v_parameter_ack = BHY_INIT_VALUE; - uint8_t v_parameter_ack_check = BHY_INIT_VALUE; - - if (length > 16) - { - length = 16; - } - else if (length == 0) - { - return BHY_SUCCESS; - } - - /* select the page*/ - if (page > 15) - { - page = 15; - } - else if (page == 0) - { - return BHY_SUCCESS; - } - - page = ((length & 0x0F) << 4) | page; - com_rslt = bhy_write_reg(BHY_I2C_REG_PARAMETER_PAGE_SELECT__REG, &page, 1); - - /* select the parameter*/ - parameter &= 0x7F; - com_rslt += bhy_set_parameter_request(parameter); - for (v_parameter_ack_check = BHY_INIT_VALUE; - v_parameter_ack_check < BHY_PARAMETER_ACK_LENGTH; - v_parameter_ack_check++) - { - /* read the acknowledgment*/ - com_rslt += bhy_get_parameter_acknowledge(&v_parameter_ack); - if (v_parameter_ack == parameter) - { - com_rslt += BHY_SUCCESS; - break; - } - else if(v_parameter_ack == BHY_PARAMETER_ACK_CHECK) - { - bhy_delay_msec(BHY_PARAMETER_ACK_DELAY); - com_rslt += BHY_ERROR; - } - else - { - /* device not ready yet */ - bhy_delay_msec(10); - } - } - /* read values to the load address*/ - com_rslt += bhy_read_reg(BHY_I2C_REG_PARAMETER_READ_BUFFER_ZERO, data, length); - - return com_rslt; -} - -/*! - * @brief This function set mapping matrix to a corresponding physical sensor. - * - * @param[in] index physical sensor index - * @param[in] mapping_matrix pointer to a int8_t mapping_matrix[9] - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_mapping_matrix_set(bhy_physical_sensor_index_type_t index ,int8_t *mapping_matrix) -{ - uint8_t data[8] = { 0, }; - int32_t i; - int32_t handle; - BHY_RETURN_FUNCTION_TYPE ret = BHY_SUCCESS; - - switch (index) - { - case PHYSICAL_SENSOR_INDEX_ACC: - handle = VS_ID_ACCELEROMETER; - break; - case PHYSICAL_SENSOR_INDEX_MAG: - handle = VS_ID_UNCALIBRATED_MAGNETOMETER; - break; - case PHYSICAL_SENSOR_INDEX_GYRO: - handle = VS_ID_UNCALIBRATED_GYROSCOPE; - break; - default: - return BHY_ERROR; - } - - for (i = 0; i < 5; ++i) - { - switch (mapping_matrix[2 * i]) - { - case 0: - data[i] = 0; - break; - case 1: - data[i] = 1; - break; - case -1: - data[i] = 0xF; - break; - default: - return BHY_ERROR; - } - - if (i == 4) - { - break; - } - - switch (mapping_matrix[2 * i + 1]) - { - case 0: - break; - case 1: - data[i] |= 0x10; - break; - case -1: - data[i] |= 0xF0; - break; - default: - return BHY_ERROR; - } - } - - /* mutex_lock(&client_data->mutex_bus_op); */ - ret = bhy_write_parameter_page(BHY_PAGE_SYSTEM, BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_DETAIL_0 + handle, data, sizeof(data)); - - /* mutex_unlock(&client_data->mutex_bus_op); */ - if (ret < 0) - { - return ret; - } - - return 0; -} - -/*! - * @brief This function get mapping matrix from a corresponding physical sensor. - * - * @param[in] index physical sensor index - * @param[in] mapping_matrix pointer to a int8_t mapping_matrix[9] - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_mapping_matrix_get(bhy_physical_sensor_index_type_t index , int8_t* mapping_matrix) -{ - int32_t i, j; - BHY_RETURN_FUNCTION_TYPE ret = BHY_SUCCESS; - uint8_t data[16]; - uint8_t map[32]; - uint8_t handle[3] = - { - VS_ID_ACCELEROMETER, - VS_ID_UNCALIBRATED_MAGNETOMETER, - VS_ID_UNCALIBRATED_GYROSCOPE, - }; - uint8_t param; - - /* Check sensor existance */ - ret = bhy_read_parameter_page(BHY_PAGE_SYSTEM, BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_PRESENT, - data, sizeof(data)); - if (ret < 0) - { - return ret; - } - - for (i = 0; i < 4; ++i) - { - for (j = 0; j < 8; ++j) - { - if (data[i] & (1 << j)) - { - map[i * 8 + j] = 1; - } - else - { - map[i * 8 + j] = 0; - } - } - } - - if (!map[handle[index]]) - { - return BHY_ERROR; - } - - param = BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_DETAIL_0 + handle[index]; - ret = bhy_read_parameter_page(BHY_PAGE_SYSTEM,param, data, sizeof(data)); - if (ret < 0) - { - return ret; - } - - mapping_matrix[0] = ((data[11] & 0x0F) == 0x0F) ? (-1) : (data[11] & 0x0F); - mapping_matrix[1] = (((data[11] >> 4) & 0x0F) == 0x0F) ? (-1) : ((data[11] >> 4) & 0x0F); - mapping_matrix[2] = (data[12] & 0x0F) == 0x0F ? (-1) : (data[12] & 0x0F); - mapping_matrix[3] = (((data[12] >> 4) & 0x0F) == 0x0F) ? (-1) : ((data[12] >> 4) & 0x0F); - mapping_matrix[4] = (data[13] & 0x0F) == 0x0F ? (-1) : (data[13] & 0x0F); - mapping_matrix[5] = (((data[13] >> 4) & 0x0F) == 0x0F) ? (-1) : ((data[13] >> 4) & 0x0F); - mapping_matrix[6] = (data[14] & 0x0F) == 0x0F ? (-1) : (data[14] & 0x0F); - mapping_matrix[7] = (((data[14] >> 4) & 0x0F) == 0x0F) ? (-1) : ((data[14] >> 4) & 0x0F); - mapping_matrix[8] = (data[15] & 0x0F) == 0x0F ? (-1) : (data[15] & 0x0F); - - return ret; -} - -/*! - * @brief Soft pass-through parameter write function. - * - * @param[in] addr physical sensor index - * @param[in] reg register address to be written - * @param[in] data pointer to data to be written - * @param[in] length - * @param[in] increment_reg if true, the function will automatically increment the register between successive 4-bytes transfers - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_soft_passthru_write(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t length, uint8_t increment_reg) -{ - /* follows data structures in page table 26 and 27 of datasheet */ - uint8_t temp_data[8]; - BHY_RETURN_FUNCTION_TYPE ret = BHY_SUCCESS; - - while (length) - { - temp_data[0] = addr; - temp_data[1] = reg; - temp_data[2] = (length > 4) ? 4 : length; - length -= temp_data[2]; - if (increment_reg) - { - reg += temp_data[2]; - } - temp_data[3] = 0x00; - temp_data[4] = *(data++); - temp_data[5] = (temp_data[2] >= 2) ? *(data++) : 0x00; - temp_data[6] = (temp_data[2] >= 3) ? *(data++) : 0x00; - temp_data[7] = (temp_data[2] >= 4) ? *(data++) : 0x00; - - ret = bhy_write_parameter_page(15, 2, temp_data, 8); - - /* wait until transaction is over */ - do - { - ret = bhy_read_parameter_page(15, 2, temp_data, 8); - } while (temp_data[3] == 0x00); - } - return ret; -} - -/*! - * @brief Soft pass-through parameter read function. - * - * @param[in] addr physical sensor index - * @param[in] reg register address to be written - * @param[out] data pointer to data to be written - * @param[in] length - * @param[in] increment_reg if true, the function will automatically increment the register between successive 4-bytes transfers - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_soft_passthru_read(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t length, uint8_t increment_reg) -{ - /* follows data structures in page table 26 and 27 of datasheet */ - uint8_t temp_data[8]; - BHY_RETURN_FUNCTION_TYPE ret = BHY_SUCCESS; - - while (length) - { - temp_data[0] = addr; - temp_data[1] = reg; - temp_data[2] = (length > 4) ? 4 : length; - length -= temp_data[2]; - if (increment_reg) - { - reg += temp_data[2]; - } - temp_data[3] = 0x00; - temp_data[4] = 0x00; - temp_data[5] = 0x00; - temp_data[6] = 0x00; - temp_data[7] = 0x00; - - ret = bhy_write_parameter_page(15, 1, temp_data, 8); - - /* wait until transaction is over */ - do - { - ret = bhy_read_parameter_page(15, 1, temp_data, 8); - } while (temp_data[3] == 0x00); - - if (temp_data[3] == 0x01) - { - *(data++) = temp_data[4]; - if (temp_data[2] >= 2) - { - *(data++) = temp_data[5]; - } - - if (temp_data[2] >= 3) - { - *(data++) = temp_data[6]; - } - - if (temp_data[2] >= 4) - { - *(data++) = temp_data[7]; - } - } - } - - return ret; -} - -/*! - * @brief Write data to specific GP register. - * - * @param[in] gp_reg GP register address - * @param[in] data data to be written to GP register - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_gp_register_write(bhy_gp_register_type_t gp_reg, uint8_t data) -{ - BHY_RETURN_FUNCTION_TYPE ret = BHY_SUCCESS; - - if((gp_reg >= BHY_GP_REG_20) && (gp_reg <= BHY_GP_REG_24)) - { - /* GP register 20~24 are read only */ - ret = BHY_ERROR; - } - else - { - ret += bhy_write_reg(gp_reg, &data, 1); - } - - return ret; -} - -/*! - * @brief Write data to specific GP register. - * - * @param[in] gp_reg GP register address - * @param[in] data pointer to receive buffer - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_gp_register_read(bhy_gp_register_type_t gp_reg, uint8_t *data) -{ - BHY_RETURN_FUNCTION_TYPE ret = BHY_SUCCESS; - - ret += bhy_read_reg(gp_reg, data, 1); - - return ret; -} - -/*! - * @brief This function reads out the current SIC matrix from BHy - * - * @param[in] sic_matrix pointer to SIC matrix - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_get_sic_matrix(float * sic_matrix) -{ - BHY_RETURN_FUNCTION_TYPE return_val; - - return_val = bhy_read_parameter_page(BHY_PAGE_2, PAGE2_SIC_MATRIX_0_1, (uint8_t *)(&sic_matrix[0]), 8); - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_read_parameter_page(BHY_PAGE_2, PAGE2_SIC_MATRIX_2_3, (uint8_t *)(&sic_matrix[2]), 8); - } - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_read_parameter_page(BHY_PAGE_2, PAGE2_SIC_MATRIX_4_5, (uint8_t *)(&sic_matrix[4]), 8); - } - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_read_parameter_page(BHY_PAGE_2, PAGE2_SIC_MATRIX_6_7, (uint8_t *)(&sic_matrix[6]), 8); - } - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_read_parameter_page(BHY_PAGE_2, PAGE2_SIC_MATRIX_8, (uint8_t *)(&sic_matrix[8]), 4); - } - - return return_val; -} - -/*! - * @brief This function get all the custom sensor data length according reading information from hub. - * - * @param[in] none - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_sync_cus_evt_size(void) -{ - struct sensor_information_wakeup_t sensor_info_wakeup; - uint8_t i = 0; - - for(i = 0; i < 5; i++) - { - bhy_get_wakeup_sensor_information(VS_ID_CUS1 + i, &sensor_info_wakeup); - - if(sensor_info_wakeup.wakeup_sensor_type == (VS_TYPE_CUS1 + i)) - { - _fifoSizes[BHY_DATA_TYPE_CUS1+i] = sensor_info_wakeup.wakeup_event_size; - } - } - - return BHY_SUCCESS; -} - -/*! - * @brief This function get the specific custom sensor data length according reading information from hub. - * - * @param[in] sensor_id pointer to sensor_id - * - * @retval result of data length - */ -int8_t bhy_get_cus_evt_size(bhy_virtual_sensor_t sensor_id) -{ - if(sensor_id >= VS_TYPE_CUS1 && sensor_id <= VS_TYPE_CUS5) - { - return _fifoSizes[BHY_DATA_TYPE_CUS1 + sensor_id - VS_TYPE_CUS1]; - } - - return BHY_ERROR; -} - -/*! - * @brief This function write a new SIC matrix to the BHy - * - * @param[in] sic_matrix pointer to SIC matrix - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_set_sic_matrix(float *sic_matrix) -{ - BHY_RETURN_FUNCTION_TYPE return_val; - - return_val = bhy_write_parameter_page(BHY_PAGE_2, PAGE2_SIC_MATRIX_0_1, (uint8_t *)(&sic_matrix[0]), 8); - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_write_parameter_page(BHY_PAGE_2,PAGE2_SIC_MATRIX_2_3, (uint8_t *)(&sic_matrix[2]), 8); - } - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_write_parameter_page(BHY_PAGE_2,PAGE2_SIC_MATRIX_4_5, (uint8_t *)(&sic_matrix[4]), 8); - } - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_write_parameter_page(BHY_PAGE_2,PAGE2_SIC_MATRIX_6_7, (uint8_t *)(&sic_matrix[6]), 8); - } - - if (BHY_SUCCESS == return_val) - { - return_val = bhy_write_parameter_page(BHY_PAGE_2,PAGE2_SIC_MATRIX_8, (uint8_t *)(&sic_matrix[8]), 4); - } - - return return_val; -} - -/*! - * @brief This function outputs the debug data to function pointer - * You need to provide a function that takes as argument a zero-terminated string and prints it - * - * @param[in] packet debug message - * @param[in] debug_print_ptr print function - * - * @retval result of execution - */ -void bhy_print_debug_packet(bhy_data_debug_t *packet, void (*debug_print_ptr)(const uint8_t *)) -{ - uint8_t len; - uint8_t tempstr[25]; - uint8_t i=0; - - len = packet->data[0] & 0x3F; - if (packet->data[0] & 0x40) - { - /* Binary data */ - while (i < len) - { - tempstr[i*2] = (packet->data[i+1] & 0xF0) > 0x90 ? - ((packet->data[i+1] & 0xF0)>>4) - 0x0A + 'A' : - ((packet->data[i+1] & 0xF0)>>4) + '0' ; - tempstr[i*2+1] = (packet->data[i+1] & 0x0F) > 0x09 ? - (packet->data[i+1] & 0x0F) - 0x0A + 'A' : - (packet->data[i+1] & 0x0F) + '0' ; - ++i; - } - tempstr[i*2] = '\0'; - } - else - { - while (i < len) - { - tempstr[i] = packet->data[i+1]; - ++i; - } - tempstr[i] = '\0'; - } - - debug_print_ptr(tempstr); -} - -#if BHY_CALLBACK_MODE -/*! - * @brief configure callback function for sensor - * - * @param[in] sensor_id sensor ID - * @param[in] wakeup_status status of WAKEUP OR NONWAKEUP - * @param[in] sensor_callback callback function to be configured - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_install_sensor_callback (bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status, - void (*sensor_callback)(bhy_data_generic_t *, bhy_virtual_sensor_t)) -{ - if ((uint8_t)sensor_id > MAX_SENSOR_ID_NONWAKEUP) - { - /* Invalid sensor ID */ - return BHY_OUT_OF_RANGE; - } - - if ((wakeup_status != VS_WAKEUP) && (wakeup_status != VS_NON_WAKEUP)) - { - /* Invalid wakeup state */ - return BHY_OUT_OF_RANGE; - } - - sensor_id = (bhy_virtual_sensor_t)((sensor_id & 0x1F) + wakeup_status); - - if (sensor_callback_list[sensor_id] != 0) - { - /* There is already a callback installed */ - return BHY_OUT_OF_RANGE; - } - else - { - sensor_callback_list[sensor_id] = sensor_callback; - return BHY_SUCCESS; - } -} - -/*! - * @brief uninstall callback function for sensor - * - * - * @param[in] sensor_id sensor ID - * @param[in] wakeup_status status of WAKEUP OR NONWAKEUP - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_uninstall_sensor_callback(bhy_virtual_sensor_t sensor_id, uint8_t wakeup_status) -{ - if ((uint8_t)sensor_id > MAX_SENSOR_ID_NONWAKEUP) - { - /* Invalid sensor ID */ - return BHY_OUT_OF_RANGE; - } - - if ((wakeup_status != VS_WAKEUP) && (wakeup_status != VS_NON_WAKEUP)) - { - /* Invalid wakeup state */ - return BHY_OUT_OF_RANGE; - } - - sensor_id = (bhy_virtual_sensor_t)((sensor_id & 0x1F) + wakeup_status); - if (sensor_callback_list[sensor_id] == 0) - { - /* There are no callback installed */ - return BHY_OUT_OF_RANGE; - } - else - { - sensor_callback_list[sensor_id] = 0; - return BHY_SUCCESS; - } -} - -/*! - * @brief install callback function for timestamp - * - * - * @param[in] wakeup_status status of WAKEUP OR NONWAKEUP - * @param[in] sensor_callback callback function to be configured - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_install_timestamp_callback (uint8_t wakeup_status, void (*timestamp_callback)(bhy_data_scalar_u16_t *)) -{ - if ((wakeup_status != VS_WAKEUP) && (wakeup_status != VS_NON_WAKEUP)) - { - /* Invalid wakeup state */ - return BHY_OUT_OF_RANGE; - } - if (timestamp_callback_list[wakeup_status == VS_WAKEUP] != 0) - { - /* There is already a callback installed */ - return BHY_OUT_OF_RANGE; - } - else - { - timestamp_callback_list[wakeup_status == VS_WAKEUP] = timestamp_callback; - return BHY_SUCCESS; - } -} - -/*! - * @brief uninstall callback function for timestamp - * - * @param[in] wakeup_status status of WAKEUP OR NONWAKEUP - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_uninstall_timestamp_callback (uint8_t wakeup_status) -{ - if ((wakeup_status != VS_WAKEUP) && (wakeup_status != VS_NON_WAKEUP)) - { - /* Invalid wakeup state */ - return BHY_OUT_OF_RANGE; - } - if (timestamp_callback_list[wakeup_status == VS_WAKEUP] == 0) - { - /* There are no callback installed */ - return BHY_OUT_OF_RANGE; - } - else - { - timestamp_callback_list[wakeup_status == VS_WAKEUP] = 0; - return BHY_SUCCESS; - } -} - -/*! - * @brief install callback function for meta event - * - * - * @param[in] meta_event_id meta event ID - * @param[in] meta_event_callback callback function to be configured - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_install_meta_event_callback (bhy_meta_event_type_t meta_event_id, - void (*meta_event_callback)(bhy_data_meta_event_t *, - bhy_meta_event_type_t)) -{ - if (meta_event_id > MAX_METAEVENT_ID) - { - /* Invalid meta event ID */ - return BHY_OUT_OF_RANGE; - } - else if (meta_event_callback_list[meta_event_id] != 0) - { - /* There is already a callback installed */ - return BHY_OUT_OF_RANGE; - } - else - { - meta_event_callback_list[meta_event_id] = meta_event_callback; - return BHY_SUCCESS; - } -} - -/*! - * @brief uninstall callback function for meta event - * - * - * @param[in] meta_event_id meta event ID - * - * @retval result of execution - */ -BHY_RETURN_FUNCTION_TYPE bhy_uninstall_meta_event_callback (bhy_meta_event_type_t meta_event_id) -{ - if (meta_event_id > MAX_METAEVENT_ID) - { - /* Invalid meta event ID */ - return BHY_OUT_OF_RANGE; - } - else if (meta_event_callback_list[meta_event_id] == 0) - { - /* There is no callback installed */ - return BHY_OUT_OF_RANGE; - } - else - { - meta_event_callback_list[meta_event_id] = 0; - return BHY_SUCCESS; - } -} -#endif - -#ifdef __cplusplus -} -#endif - -/** @}*/ diff --git a/Samples/BRAVO_SmartLock_Demo/Makefile.in b/Samples/BRAVO_SmartLock_Demo/Makefile.in deleted file mode 100644 index d691056..0000000 --- a/Samples/BRAVO_SmartLock_Demo/Makefile.in +++ /dev/null @@ -1,7 +0,0 @@ -CPPFLAGS += -I azx/hdr -OBJS += $(patsubst %.c,%.o,$(wildcard azx/src/*.c)) -CPPFLAGS += -I src/demo_utils -OBJS += $(patsubst %.c,%.o,$(wildcard src/demo_utils/*.c)) -CPPFLAGS += -I BOSCH/BHI160/firmware -I BOSCH/BHI160/inc -OBJS += $(patsubst %.c,%.o,$(wildcard BOSCH/BHI160/src/*.c)) -CPPFLAGS += -Wall -Werror -Wextra -Wunreachable-code -Wno-missing-field-initializers -Wno-format diff --git a/Samples/BRAVO_SmartLock_Demo/README.md b/Samples/BRAVO_SmartLock_Demo/README.md deleted file mode 100644 index b87a382..0000000 --- a/Samples/BRAVO_SmartLock_Demo/README.md +++ /dev/null @@ -1,44 +0,0 @@ - -### Bravo SmartLock demo - - - -**Features** - ---- - -- Connect to LWM2M Portal -- Retrieve movement information from BMI160 sensor -- Update portal about current status (door status) - ---- - -#### Prerequisites - -This application requires the file **object_26247.xml** (provided) to be stored into module's `/mod/` folder, along with the application binary itself. - -To load it, use - -`AT#M2MWRITE=/mod/object_26247.xml,1427` - -And at prompt, send the file content in raw mode. - -#### Prerequisites on the OneEdge Portal - -This application requires the **object_26247.xml** content to be stored in your OneEdge organization object registry. The latter can be accessed from the link https:///lwm2m/object_registry -where could be for example `portal-dev.telit.com`. open the xml file in a notepad tool, select all the content and copy it. Then, in the object registry webpage, press "New Object" button on the right and paste the content of the xml file, then press Add button. - -Now from Developer webpage, go in **Thing Definitions** page from the list on the left and press `Import` button on the right. Press `Attach File` and provide `json/bravo_SmartLock_thing_def.json` from the project root, then press `Import`. - -Again from the Developer webpage, select **Device Profiles**, `Import` button, `Attach File` and provide `json/bravo_SmartLock_device_profile.json`, then press `Import`. - -Lastly, from the Developer webpage, select **Triggers**, `Actions` menu on the right, `Import` , `Attach File` and provide `json/bravo_SmartLock_triggers.json`, then press `Import`. Now open the trigger **bravo_SmartLockDemo_state_trigger** by pressing the View button (the eye icon on the left) and be sure to press the `play` button, and that the trigger status is 'started'. - -#### Calibration -At application startup, the board red LED will turn ON. After it turns OFF, move the board to perform a door open movement. Wait 3 seconds, then perform a door close movement. -The calibration is now complete and the board will signal any door status change - - ---- - - diff --git a/Samples/BRAVO_SmartLock_Demo/azx/hdr/azx_log.h b/Samples/BRAVO_SmartLock_Demo/azx/hdr/azx_log.h deleted file mode 100644 index 38912d3..0000000 --- a/Samples/BRAVO_SmartLock_Demo/azx/hdr/azx_log.h +++ /dev/null @@ -1,245 +0,0 @@ -/*Copyright (C) 2020 Telit Communications S.p.A. Italy - All Rights Reserved.*/ -/* See LICENSE file in the project root for full license information. */ - -#ifndef HDR_AZX_LOG_H_ -#define HDR_AZX_LOG_H_ -/** - * @file azx_log.h - * @version 1.0.5 - * @dependencies - * @author Fabio Pintus - * @author Ioannis Demetriou - * @date 13/01/2017 - * - * @brief Logging utilities to print on available output channels - * - * This library code will give user the possibility to print debug messages on - * their application. - */ -#include "m2mb_types.h" -#include "app_cfg.h" - -/* Global declarations =======================================================*/ - - -/* Global typedefs ===========================================================*/ - -/** @defgroup logConf Configuration of logging functionalities - * Configuration functions, macros and enumerators can be used to set the - * logging channel (Main UART, Auxiliary UART, USB0/ USB1) and the logging mask - * (which allows to enable each log level independently) - */ - -/** @defgroup logUsage Usage of logging functionalities - * Macros that can be used to actually print log messages - */ - -/** - * @brief Logging levels - * \ingroup logConf - */ -typedef enum -{ - AZX_LOG_LEVEL_TRACE = 1, /**< Prints every message, adds a "TRACE" at the beginning of the message*/ - AZX_LOG_LEVEL_DEBUG = 2, /**< Prints most of the messages, adds a "DEBUG" at the beginning of the message*/ - AZX_LOG_LEVEL_INFO = 3, /**< print the message only, without any additional info */ - AZX_LOG_LEVEL_WARN = 4, /**< like DEBUG, but adds a "WARNING" at the beginning of the message. */ - AZX_LOG_LEVEL_ERROR = 5, /**< like DEBUG, but adds an "ERROR" at the beginning of the message */ - AZX_LOG_LEVEL_CRITICAL = 6, /**< like DEBUG, but adds an "CRITICAL" at the beginning of the message */ - AZX_LOG_LEVEL_NONE = 0x7F, /**< Do not print anything */ -} AZX_LOG_LEVEL_E; - - -/** - * @brief Logging errors - * \ingroup logUsage - */ -typedef enum -{ - AZX_LOG_NOT_INIT, /** (max) ? (max) : val))) - -/** - * @brief Puts the task to sleep for a specified time. - * - * This function returns once the specified number of milliseconds elapses. - * - * @param[in] ms The number of milliseconds to wait before returning. - */ -void azx_sleep_ms(UINT32 ms); - -/* @{ */ -#define AZX_UTILS_HEX_DUMP_BUFFER_SIZE 250 -/** - * @brief Dumps HEX data to string - * - * Useful for logging binary data. If the data gets trimmed, adjust - * @ref AZX_UTILS_HEX_DUMP_BUFFER_SIZE in the c file. - * - * @param[in] data The data to print in hex format - * @param[in] len The number of bytes - * - * @return A string with the hex data. The string is valid until the subsequent - * call to azx_hex_dump(). - */ -const CHAR* azx_hex_dump(const void* data, UINT32 len); -/** @} */ - -/** - @brief Reboots the modem straight away. - - @details - This utility will ask the module to reboot. It will not be executed immediately, so - code flow must take care of instructions after this one. - - @return None - -*/ -/*-----------------------------------------------------------------------------------------------*/ -void azx_reboot_now(void); - -/** - @brief Shuts the modem down straight away. - - @details - This utility will ask the module to shutdown. It will not be executed immediately, so - code flow must take care of instructions after this one. - - @return None - -*/ -/*-----------------------------------------------------------------------------------------------*/ -void azx_shutdown_now(void); - - - - -#endif /* HDR_AZX_UTILS_H_ */ diff --git a/Samples/BRAVO_SmartLock_Demo/azx/src/azx_log.c b/Samples/BRAVO_SmartLock_Demo/azx/src/azx_log.c deleted file mode 100644 index abade1f..0000000 --- a/Samples/BRAVO_SmartLock_Demo/azx/src/azx_log.c +++ /dev/null @@ -1,782 +0,0 @@ -/*Copyright (C) 2020 Telit Communications S.p.A. Italy - All Rights Reserved.*/ -/* See LICENSE file in the project root for full license information. */ - -/* Include files =============================================================*/ - -#include -#include -#include - -#include "m2mb_types.h" -#include "m2mb_os_api.h" -#include "m2mb_usb.h" -#include "m2mb_uart.h" - -#include "m2mb_fs_posix.h" -#include "m2mb_fs_stdio.h" -#include "m2mb_rtc.h" - -#include "app_cfg.h" -#include "azx_log.h" - -/* Local defines =============================================================*/ -#define USB_CH_MAX 3 -#define LOG_BUFFER_SIZE 2048 -#define MAX_FILE_LOG_CACHE 10000 - -#define NO_COLOUR "\033[0m" -#define BOLD "\033[1m" -#define DARK "\033[2m" -#define UNDERLINE "\033[4m" -#define BLINK "\033[5m" -#define REVERSE "\033[7m" -#define CONCEALED "\033[8m" - -#define BLACK "\033[30m" -#define RED "\033[31m" -#define GREEN "\033[32m" -#define YELLOW "\033[33m" -#define BLUE "\033[34m" -#define MAGENTA "\033[35m" -#define CYAN "\033[36m" -#define WHITE "\033[37m" - -#define ON_BLACK "\033[40m" -#define ON_RED "\033[41m" -#define ON_GREEN "\033[42m" -#define ON_YELLOW "\033[43m" -#define ON_BLUE "\033[44m" -#define ON_MAGENTA "\033[45m" -#define ON_CYAN "\033[46m" -#define ON_WHITE "\033[47m" - -#define LOG_TRACE_COLOR CYAN -#define LOG_DEBUG_COLOR YELLOW -#define LOG_INFO_COLOR BOLD WHITE -#define LOG_WARN_COLOR BOLD YELLOW -#define LOG_ERROR_COLOR BOLD RED -#define LOG_CRITICAL_COLOR BOLD RED ON_WHITE - - -#define LOG_PREFIX(tag) \ - case AZX_LOG_LEVEL_##tag: \ - offset = snprintf(log_buffer, LOG_BUFFER_SIZE, \ - (log_cfg.colouredLogs)? prefix_fmt_colour : prefix_fmt_no_colour, \ - (log_cfg.colouredLogs)? LOG_##tag##_COLOR: "", #tag, (log_cfg.colouredLogs)? NO_COLOUR :"", \ - now / 1000.0, \ - get_file_title(file), line, \ - function, \ - get_current_task_name(task_name) \ - ); \ - break - -#define LOG_FILE_PREFIX(tag) \ - case AZX_LOG_LEVEL_##tag: \ - offset = snprintf(log_buffer, LOG_BUFFER_SIZE, \ - prefix_fmt_file, get_date_time(), \ - ((now / 10) % 100), #tag, \ - get_file_title(file), line \ - ); \ - break - -/* Local typedefs ============================================================*/ -/* Local statics =============================================================*/ -static struct -{ - BOOLEAN isInit; - AZX_LOG_LEVEL_E level; - AZX_LOG_HANDLE_E channel; - INT32 ch_fd; - BOOLEAN colouredLogs; - M2MB_OS_SEM_HANDLE CSSemHandle; -} log_cfg = {/*.isInit*/ FALSE, /*.level*/ AZX_LOG_LEVEL_NONE, /*.channel*/ AZX_LOG_TO_MAX, /*.ch_fd */ -1, /*.colouredLogs*/ FALSE, /*.CSSemHandle */ NULL}; - - - -static CHAR log_buffer[LOG_BUFFER_SIZE] = { 0 }; -static CHAR task_name[64]; -static CHAR dateTime[32] = { 0 }; - -static struct -{ - M2MB_FILE_T* fd; - CHAR name[32]; - CHAR current_name[40]; - UINT32 circular_chunks; - UINT32 max_size_kb; - AZX_LOG_LEVEL_E min_level; - UINT32 cache_idx; - CHAR cache[MAX_FILE_LOG_CACHE]; -} logFile = { - /*.fd */ - 0, - /*.name */ - { 0 }, - /*.current_name */ - { 0 }, - /*.circular_chunks */ - 0, - /*.max_size_kb */ - 0, - /*.min_level */ - AZX_LOG_LEVEL_CRITICAL, - /*.cache_idx */ - 0, - /*.cache */ - { 0 } -}; - - -static const CHAR* prefix_fmt_colour = "[%s%-5s%s] %3.2f " CYAN "%s" NO_COLOUR - ":" BOLD CYAN "%d" NO_COLOUR - " - %s{" BOLD WHITE "%s" NO_COLOUR "}$ "; -static const CHAR* prefix_fmt_no_colour = "[%s%-5s%s] %3.2f %s:%d - %s{%s}$ "; -static const CHAR* prefix_fmt_file = "%s.%.2u [%-5s] %s:%d "; - - -/* Local function prototypes =================================================*/ - -/*----------------------------------------------------------------------------*/ -/*! - \brief Print directly on the main UART - - \param [in] message: the string to print - \return sent bytes - */ -/*----------------------------------------------------------------------------*/ -static INT32 log_print_to_UART(const CHAR *message); - -/*----------------------------------------------------------------------------*/ -/*! - \brief Print directly on the auxiliary UART - - \param [in] message: the string to print - \return sent bytes - - */ -/*----------------------------------------------------------------------------*/ -static INT32 log_print_to_AUX_UART(const CHAR *message); - -/*----------------------------------------------------------------------------*/ -/*! - \brief Prints as log_printToUart but using a specified USB channel - - \param [in] path: USB resource path where to print (e.g. /dev/USB0 - \param [in] message : Message to print - \return sent bytes, negative in case of error - - \details Using channel:USB_CH_DEFAULT uses channel assigned to instance - USER_USB_INSTANCE_0 - */ -/*----------------------------------------------------------------------------*/ -static INT32 log_print_to_USB (const CHAR *path, const CHAR *message ); - -static UINT32 get_uptime(void); -static const char* get_file_title(const CHAR* path); -static char* get_current_task_name(CHAR *name); -static BOOLEAN check_file_size(const CHAR* filename, UINT32 max_size_kb); -static void flush_log_to_file(); -static void file_log_or_cache(const CHAR* buffer); -static const CHAR* get_next_log_filename(const CHAR* filename, - UINT32 circular_chunks, UINT32 max_size_kb); -static BOOLEAN rotate_log_files(const CHAR* filename, UINT32 circular_chunks); -static const char* get_date_time(); - -/* Static functions ==========================================================*/ - -/*----------------------------------------------------------------------------*/ -/*! - \brief Print directly on the main UART - - \param [in] message: the string to print - \return sent bytes - - */ -/*----------------------------------------------------------------------------*/ -static INT32 log_print_to_UART(const CHAR *message) -{ - INT32 sent = 0; - - /* Get a UART handle first */ - if(log_cfg.ch_fd == -1) - { - log_cfg.ch_fd = m2mb_uart_open( "/dev/tty0", 0 ); - } - - if ( -1 != log_cfg.ch_fd) - { - sent = m2mb_uart_write(log_cfg.ch_fd, (char*) message, strlen(message)); - - } - return sent; -} - -/*----------------------------------------------------------------------------*/ -/*! - \brief Print directly on the auxiliary UART - - \param [in] message: the string to print - \return sent bytes - - */ -/*----------------------------------------------------------------------------*/ -static INT32 log_print_to_AUX_UART(const CHAR *message) -{ - INT32 sent = 0; - - /* Get a UART handle first */ - if(log_cfg.ch_fd == -1) - { - log_cfg.ch_fd = m2mb_uart_open( "/dev/tty1", 0 ); - } - - if ( -1 != log_cfg.ch_fd) - { - sent = m2mb_uart_write(log_cfg.ch_fd, (char*) message, strlen(message)); - - //m2mb_uart_close(g_AUX_fd); - } - return sent; -} - -/*----------------------------------------------------------------------------*/ -/*! - \brief Prints as log_printToUart but using a specified USB channel - - \param [in] path: USB resource path where to print (e.g. /dev/USB0 - \param [in] message: Message to print - \return sent bytes, negative in case of error - - */ -/*-----------------------------------------------------------------------------*/ -static INT32 log_print_to_USB (const CHAR *path, const CHAR *message ) -{ - INT32 ch; - INT32 result; - INT32 sent = 0; - - /* get the requested channel from the path, - * so the related semaphore can be retrieved */ - result = sscanf(path, "/dev/USB%d", &ch); - if(!result) - { - return AZX_LOG_CANNOT_OPEN_USB_CHANNEL; - } - - - /* Get a USB handle first */ - if(log_cfg.ch_fd == -1) - { - log_cfg.ch_fd = m2mb_usb_open(path, 0); - } - if ( log_cfg.ch_fd == -1 ) - { - return AZX_LOG_CANNOT_OPEN_USB_CHANNEL; - } - sent = m2mb_usb_write( log_cfg.ch_fd, (const void*) message, strlen(message)); - - /* in case of concurrency using m2m_hw_usb... - * Comment the next API to avoid closing */ - //(void)m2mb_usb_close(log_cfg.ch_fd); - - return sent; -} - -/*-----------------------------------------------------------------------------------------------*/ -/*! - \brief returns the system uptime in milliseconds - - \return the system uptime - - */ -/*-----------------------------------------------------------------------------------------------*/ -static UINT32 get_uptime(void) -{ - - UINT32 sysTicks = m2mb_os_getSysTicks(); - - FLOAT32 ms_per_tick = m2mb_os_getSysTickDuration_ms(); - - return (UINT32) (sysTicks * ms_per_tick); //milliseconds -} - - -static CHAR fileTitle[12] = ""; - -/*-----------------------------------------------------------------------------------------------*/ -/*! - \brief Removes the file path from the provided path, leaving only filename - - \param [in] path: the file path - \return the filename(+ extension) extracted from the path - - */ -/*-----------------------------------------------------------------------------------------------*/ -static const char* get_file_title(const CHAR* path) -{ - const CHAR* p = path; - const CHAR* start = path; - const CHAR* end = path; - - while (*p) { - if (*p == '/' || *p == '\\') { - start = p + 1; - } - - if(*p == '.') { - end = p; - } - - p++; - } - - if(end <= start) { - end = p; - } - - snprintf(fileTitle, sizeof(fileTitle), "%.*s", (INT32)(end - start), start); - return fileTitle; -} - - -/*-----------------------------------------------------------------------------------------------*/ -/*! - \brief Returns the current task name - - \param [in] name: the buffer where the task name will be saved - \return a reference to name variable - - */ -/*-----------------------------------------------------------------------------------------------*/ -static char* get_current_task_name(CHAR *name) -{ - MEM_W out; - M2MB_OS_TASK_HANDLE taskHandle = m2mb_os_taskGetId(); - - if(M2MB_OS_SUCCESS != - m2mb_os_taskGetItem(taskHandle, M2MB_OS_TASK_SEL_CMD_NAME, &out, NULL)) - { - return NULL; - } - else - { - strcpy(name, (CHAR*)out); - return name; - } -} - -static const char* get_date_time(void) -{ - INT32 fd = m2mb_rtc_open( "/dev/rtc0", 0 ); - M2MB_RTC_TIME_T ts = { 0 }; - if(fd == -1) - { - dateTime[0] = '\0'; - return dateTime; - } - - if(-1 == m2mb_rtc_ioctl( fd, M2MB_RTC_IOCTL_GET_SYSTEM_TIME, &ts )) - { - m2mb_rtc_close( fd ); - dateTime[0] = '\0'; - return dateTime; - } - m2mb_rtc_close( fd ); - snprintf(dateTime, sizeof(dateTime), "%02u-%02u %02u:%02u:%02u", - ts.mon, ts.day, - ts.hour, ts.min, ts.sec); - return dateTime; -} - -/* Global functions ==========================================================*/ - - -void azx_log_init(AZX_LOG_CFG_T *cfg) -{ - M2MB_OS_SEM_ATTR_HANDLE semAttrHandle; - - if(log_cfg.isInit == TRUE) - { - return; - } - - log_cfg.level = cfg->log_level; - log_cfg.channel = cfg->log_channel; - log_cfg.colouredLogs = cfg->log_colours; - log_cfg.ch_fd = -1; - - if (NULL == log_cfg.CSSemHandle) - { - m2mb_os_sem_setAttrItem(&semAttrHandle, - CMDS_ARGS(M2MB_OS_SEM_SEL_CMD_CREATE_ATTR, NULL, - M2MB_OS_SEM_SEL_CMD_COUNT, 1 /*CS*/, - M2MB_OS_SEM_SEL_CMD_TYPE, M2MB_OS_SEM_GEN, - M2MB_OS_SEM_SEL_CMD_NAME, "CSSem")); - m2mb_os_sem_init( &log_cfg.CSSemHandle, &semAttrHandle ); - } - log_cfg.isInit = TRUE; -} - - -INT32 azx_log_deinit(void) -{ - INT32 rc; - if ( ! log_cfg.isInit) - { - return AZX_LOG_NOT_INIT; - } - - switch(log_cfg.channel) - { - case AZX_LOG_TO_MAIN_UART: - if(log_cfg.ch_fd != -1) - { - rc = m2mb_uart_close(log_cfg.ch_fd); - } - break; - case AZX_LOG_TO_AUX_UART: - if(log_cfg.ch_fd != -1) - { - rc = m2mb_uart_close(log_cfg.ch_fd); - } - break; - case AZX_LOG_TO_USB0: - if(log_cfg.ch_fd != -1) - { - rc = m2mb_usb_close(log_cfg.ch_fd); - } - break; - case AZX_LOG_TO_USB1: - if(log_cfg.ch_fd != -1) - { - rc = m2mb_usb_close(log_cfg.ch_fd); - } - break; - default: - //TODO return some error - break; - } - log_cfg.ch_fd = -1; - - //destroy lock related to USB that can not be opened - m2mb_os_sem_deinit(log_cfg.CSSemHandle); - log_cfg.CSSemHandle = NULL; - - log_cfg.isInit = FALSE; - return rc; -} - -void azx_log_setLevel(AZX_LOG_LEVEL_E level) -{ - - log_cfg.level = level; -} - -AZX_LOG_LEVEL_E azx_log_getLevel(void) -{ - if(log_cfg.isInit) - { - return log_cfg.level; - } - - return AZX_LOG_LEVEL_NONE; -} - -/*----------------------------------------------------------------------------*/ -/*! - \brief Prints on the requested log channel (USB, UART, AUX) - - \param [in] msg: message to be printed on output - \return amount of printed bytes, negative value in case of error - - */ -/*----------------------------------------------------------------------------*/ -static INT32 log_base_function(const char *msg) -{ - INT32 result; - - - if ( ! log_cfg.isInit) - { - return AZX_LOG_NOT_INIT; - } - - switch(log_cfg.channel) - { - case AZX_LOG_TO_MAIN_UART: - result = log_print_to_UART(msg); - break; - case AZX_LOG_TO_AUX_UART: - result = log_print_to_AUX_UART(msg); - break; - case AZX_LOG_TO_USB0: - result = log_print_to_USB("/dev/USB0", msg); - break; - case AZX_LOG_TO_USB1: - result = log_print_to_USB("/dev/USB1", msg); - break; - default: - //TODO return some error - break; - } - - return result; -} - -/*----------------------------------------------------------------------------*/ -/*! - \brief Prints on the defined stream (UART or USB channel) - * - \param [in] level: Logging level. see AZX_LOG_LEVEL_E enum - \param [in] function: source function name to add to the output if log is verbose - \param [in] file: source file path to add to the output if log is verbose - \param [in] line: source file line to add to the output if log is verbose - \param [in] fmt : string format with parameters to print - \param [in] ... : ... - \return the number of sent bytes. - 0 if logging level is not enabled, negative in case of error - - */ -/*----------------------------------------------------------------------------*/ -INT32 azx_log_formatted(AZX_LOG_LEVEL_E level, - const char* function, const char* file, int line, const CHAR *fmt, ... ) -{ - INT32 sent = 0; - va_list arg; - INT32 offset = 0; - UINT32 now; - - /* If the selected log level is set */ - if(level >= azx_log_getLevel()) - { - m2mb_os_sem_get(log_cfg.CSSemHandle, M2MB_OS_WAIT_FOREVER ); - - now = get_uptime(); - /*Prepare buffer*/ - memset(log_buffer,0,LOG_BUFFER_SIZE); - - switch(level) - { - LOG_PREFIX(TRACE); - LOG_PREFIX(DEBUG); - LOG_PREFIX(WARN); - LOG_PREFIX(ERROR); - LOG_PREFIX(CRITICAL); - default: - break; - } - - va_start(arg, fmt); - vsnprintf(log_buffer + offset, LOG_BUFFER_SIZE-offset, fmt, arg); - va_end(arg); - - /* Print the message on the selected output stream */ - sent = log_base_function(log_buffer); - - if(logFile.fd && level >= logFile.min_level) - { - if(!check_file_size(logFile.current_name, logFile.max_size_kb)) - { - /* Log limit reached, so we'll need to open the next file in the rotation. Log in the file - * that this limit is reached and then get the next filename */ - m2mb_fs_fputs("=== Log file size limit reached\r\n", logFile.fd); - m2mb_fs_fclose(logFile.fd); - logFile.fd = 0; - - snprintf(logFile.current_name, sizeof(logFile.current_name), "%s", - get_next_log_filename(logFile.name, logFile.circular_chunks, - logFile.max_size_kb)); - - if(logFile.current_name[0] == '\0') - { - goto end; - } - - logFile.fd = m2mb_fs_fopen(logFile.current_name, "a"); - - if(!logFile.fd) - { - goto end; - } - } - - switch(level) - { - LOG_FILE_PREFIX(TRACE); - LOG_FILE_PREFIX(DEBUG); - LOG_FILE_PREFIX(INFO); - LOG_FILE_PREFIX(WARN); - LOG_FILE_PREFIX(ERROR); - LOG_FILE_PREFIX(CRITICAL); - default: - break; - } - - va_start(arg, fmt); - vsnprintf(log_buffer + offset, LOG_BUFFER_SIZE - offset, fmt, arg); - va_end(arg); - file_log_or_cache(log_buffer); - } - -end: - m2mb_os_sem_put(log_cfg.CSSemHandle); - } - - return sent; -} - -static BOOLEAN check_file_size(const CHAR* filename, UINT32 max_size_kb) -{ - struct M2MB_STAT stat; - if(-1 == m2mb_fs_stat(filename, &stat)) - { - /* Most likely the file doesn't exist, so return true */ - return TRUE; - } - return ((stat.st_size >> 10) < max_size_kb); -} - -static void flush_log_to_file(void) -{ - logFile.cache[logFile.cache_idx] = '\0'; - m2mb_fs_fwrite(logFile.cache, logFile.cache_idx, 1, logFile.fd); - logFile.cache_idx = 0; -} - -static void file_log_or_cache(const CHAR* buffer) -{ - const UINT32 size = strlen(buffer); - - if(MAX_FILE_LOG_CACHE - 1 - size < logFile.cache_idx) - { - flush_log_to_file(); - } - - memcpy(&logFile.cache[logFile.cache_idx], buffer, size); - logFile.cache_idx += size; -} - -static CHAR filenameInUse[40] = ""; - -static BOOLEAN rotate_log_files(const CHAR* filename, UINT32 circular_chunks) -{ - CHAR from[40] = ""; - CHAR to[40] = ""; - UINT32 i = 0; - - /* This will move log.1 to log.2, log.2 to log.3 and so on until the last one */ - snprintf(from, sizeof(from), "%s.%u", filename, circular_chunks); - - m2mb_fs_remove(from); - - for(i = circular_chunks - 1; i > 0; --i) - { - snprintf(from, sizeof(from), "%s.%u", filename, i); - snprintf(to, sizeof(to), "%s.%u", filename, i+1); - if(-1 == m2mb_fs_rename(from, to)) - { - /* Only return FALSE when the final file cannot be renamed - the other renames could be - * failing if there are no files there */ - if(i == 1) - { - return FALSE; - } - } - } - return TRUE; -} - -static const CHAR* get_next_log_filename(const CHAR* filename, - UINT32 circular_chunks, UINT32 max_size_kb) -{ - filenameInUse[0] = '\0'; - - if(!filename) - { - goto end; - } - - /* First try the original file */ - snprintf(filenameInUse, sizeof(filenameInUse), "%s", filename); - - if(check_file_size(filenameInUse, max_size_kb)) - { - goto end; - } - - /* If there is no circular logging and the original file is full, just return empty string */ - if(circular_chunks == 0) - { - filenameInUse[0] = '\0'; - goto end; - } - - /* We should log to filename.1, but if that's full we need to rotate logs and then still use - * filename.1 (since the old one got moved to filename.2) */ - snprintf(filenameInUse, sizeof(filenameInUse), "%s.1", filename); - - if(check_file_size(filenameInUse, max_size_kb)) - { - goto end; - } - - if(!rotate_log_files(filename, circular_chunks)) - { - /* Since we failed to rotate, just wipe filename.1 so it can be reused */ - m2mb_fs_remove(filenameInUse); - goto end; - } - -end: - return filenameInUse; -} - -BOOLEAN azx_log_send_to_file(const CHAR* filename, UINT32 circular_chunks, - AZX_LOG_LEVEL_E min_level, UINT32 max_size_kb) - -{ - if(!filename) - { - return FALSE; - } - - if(circular_chunks == 0 && !check_file_size(filename, max_size_kb)) - { - return FALSE; - } - - if(logFile.fd) - { - m2mb_fs_fclose(logFile.fd); - logFile.fd = 0; - } - - snprintf(logFile.current_name, sizeof(logFile.current_name), "%s", - get_next_log_filename(filename, circular_chunks, max_size_kb)); - - if(logFile.current_name[0] == '\0') - { - return FALSE; - } - - logFile.fd = m2mb_fs_fopen(logFile.current_name, "a"); - - if(!logFile.fd) - { - return FALSE; - } - - snprintf(logFile.name, sizeof(logFile.name), "%s", filename); - logFile.circular_chunks = circular_chunks; - logFile.min_level = min_level; - logFile.max_size_kb = max_size_kb; - logFile.cache_idx = 0; - return TRUE; -} - -void azx_log_flush_to_file(void) -{ - m2mb_os_sem_get(log_cfg.CSSemHandle, M2MB_OS_WAIT_FOREVER ); - flush_log_to_file(); - m2mb_os_sem_put(log_cfg.CSSemHandle); -} diff --git a/Samples/BRAVO_SmartLock_Demo/azx/src/azx_utils.c b/Samples/BRAVO_SmartLock_Demo/azx/src/azx_utils.c deleted file mode 100644 index a15c5cf..0000000 --- a/Samples/BRAVO_SmartLock_Demo/azx/src/azx_utils.c +++ /dev/null @@ -1,68 +0,0 @@ -/*Copyright (C) 2020 Telit Communications S.p.A. Italy - All Rights Reserved.*/ -/* See LICENSE file in the project root for full license information. */ - -#include -#include -#include "m2mb_types.h" -#include "m2mb_os_types.h" -#include "m2mb_os_api.h" -#include "m2mb_power.h" - -#include "azx_log.h" - -#include "azx_utils.h" - -void azx_sleep_ms(UINT32 ms) -{ - m2mb_os_taskSleep( M2MB_OS_MS2TICKS(ms) ); -} - - -#define MIN(i,j) (((i) < (j)) ? (i) : (j)) -const CHAR* azx_hex_dump(const void* data, UINT32 len) -{ - static CHAR buff[AZX_UTILS_HEX_DUMP_BUFFER_SIZE]; - UINT32 i = 0; - - memset(buff, 0, AZX_UTILS_HEX_DUMP_BUFFER_SIZE); - if (data == NULL) - { - snprintf(buff, AZX_UTILS_HEX_DUMP_BUFFER_SIZE, "(null)"); - goto end; - } - - len = MIN(len, AZX_UTILS_HEX_DUMP_BUFFER_SIZE/5); - - for (i = 0; i < len; ++i) - { - snprintf(buff + 5*i, AZX_UTILS_HEX_DUMP_BUFFER_SIZE - 5*i, - "0x%02x ", ((const UINT8*)data)[i]); - } - -end: - return buff; -} - -void azx_reboot_now(void) -{ - M2MB_POWER_HANDLE h = NULL; - - if(M2MB_RESULT_SUCCESS == m2mb_power_init(&h, NULL, NULL)) - { - AZX_LOG_DEBUG("It's dead, Jim!\r\n"); - AZX_LOG_INFO("Rebooting device\r\n"); - m2mb_power_reboot(h); - } -} - -void azx_shutdown_now(void) -{ - M2MB_POWER_HANDLE h = NULL; - - if(M2MB_RESULT_SUCCESS == m2mb_power_init(&h, NULL, NULL)) - { - AZX_LOG_DEBUG("It's dead, Jim!\r\n"); - AZX_LOG_INFO("Shutting down device\r\n"); - m2mb_power_shutdown(h); - } -} diff --git a/Samples/BRAVO_SmartLock_Demo/description.txt b/Samples/BRAVO_SmartLock_Demo/description.txt deleted file mode 100644 index 285f37c..0000000 --- a/Samples/BRAVO_SmartLock_Demo/description.txt +++ /dev/null @@ -1 +0,0 @@ -SmartLock Demo application. Debug prints on MAIN UART diff --git a/Samples/BRAVO_SmartLock_Demo/hdr/app_cfg.h b/Samples/BRAVO_SmartLock_Demo/hdr/app_cfg.h deleted file mode 100644 index 293d158..0000000 --- a/Samples/BRAVO_SmartLock_Demo/hdr/app_cfg.h +++ /dev/null @@ -1,84 +0,0 @@ -/*===============================================================================================*/ -/* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */ -/*! - @file - app_cfg.h - - @brief Application configuration settings conveniently located here. - - @note - Dependencies: - m2mb_types.h - azx_log.h - - @author - -*/ - -#ifndef HDR_SAMPLE_APP_CFG_H_ -#define HDR_SAMPLE_APP_CFG_H_ - - - -/** - * @brief The current version of the Samples - */ -#define VERSION "1.0.2" - -/** - * @name Log Settings - * @{ - */ -#define LOG_LEVEL AZX_LOG_LEVEL_DEBUG /**< How detailed should the logs be. See @ref AZX_LOG_LEVEL_E */ -#define LOG_CHANNEL AZX_LOG_TO_MAIN_UART -#define LOG_WITH_COLOUR 0 /**< Set to 1 to add ANSI colours to the logs*/ - - -/** - * @brief Call this at your AZ entry point to easily configure logging - */ -#define AZX_LOG_INIT() do {\ - AZX_LOG_CFG_T cfg =\ - {\ - .log_level=LOG_LEVEL,\ - .log_channel=LOG_CHANNEL,\ - .log_colours=LOG_WITH_COLOUR\ - };\ - azx_log_init(&cfg);\ -} while(0) - - -/** \addtogroup logUsage -@{ */ - -/* LOGGING MACROS */ -/** \name Public log Macros - * \brief These function-like macros can be used to print different messages with different log levels - * @{ */ - - -#define AZX_LOG_CRITICAL(a...) azx_log_formatted(AZX_LOG_LEVEL_CRITICAL, __FUNCTION__, __FILE__, __LINE__, a) -/** - - - SmartLock - - 26247 - urn:oma:lwm2m:x:26247 - 1.0 - 1.0 - Multiple - Optional - - - Event - RW - Single - Mandatory - Integer - - - - - - Event timestamp - RW - Single - Optional - Time - - - - - - - - diff --git a/Samples/BRAVO_SmartLock_Demo/src/M2MB_main.c b/Samples/BRAVO_SmartLock_Demo/src/M2MB_main.c deleted file mode 100644 index f2f74aa..0000000 --- a/Samples/BRAVO_SmartLock_Demo/src/M2MB_main.c +++ /dev/null @@ -1,595 +0,0 @@ -/*=========================================================================*/ -/* Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. */ -/** - @file - M2MB_main.c - - @brief - The file contains the main user entry point of Appzone - - @details - - @description - SmartLock Demo application. Debug prints on MAIN UART - @version - 1.0.0 - @note - Start of Appzone: Entry point - User code entry is in function M2MB_main() - - @author WhiteBeard - @author FabioPi - - @date - 2020-02-26 -*/ - -/* Include files ================================================================================*/ -#include -#include -#include - -#include "m2mb_types.h" -#include "m2mb_os_api.h" -#include "m2mb_fs_stdio.h" -#include "m2mb_i2c.h" -#include "m2mb_gpio.h" -#include "m2mb_lwm2m.h" -#include "m2mb_power.h" - -#include "m2mb_fs_posix.h" -#include "m2mb_fs_errno.h" - -#include "azx_log.h" -#include "azx_utils.h" - -#include "app_cfg.h" - - -#include "bhy_support.h" -#include "bhy_uc_driver.h" -#include "Bosch_BHI160_Orientation.h" - -#include "gpio.h" -#include "i2c.h" -#include "lwm2m.h" - - -/* Local defines ================================================================================*/ - -/* - Bosch device -*/ -#define INT_GPIO_PIN_NUM 6 -#define LED_PIN_NUM 10 - -#define SENSOR_AR_TOUT 100 // 10 = 1 sec - -#define XML_NAME "object_26247.xml" - - - - -#define FIFO_SIZE 300 -#define MAX_PACKET_LENGTH 18 -#define TICKS_IN_ONE_SECOND 32000.0F - -/* Local typedefs ===============================================================================*/ -/* Local statics ================================================================================*/ - -static uint8_t fifo[FIFO_SIZE]; - -static struct accel_physical_status_t phy_acc; -static struct gyro_physical_status_t phy_gyro; -static struct mag_physical_status_t phy_mag; -static uint8_t physical_sensor_present_bitmap[8]; - -/* Local function prototypes ====================================================================*/ -/*-----------------------------------------------------------------------------------------------*/ - -/*-----------------------------------------------------------------------------------------------*/ -/** - @brief This function is used to run bhy hub -*/ -static void demo_sensor( void ); - -/*-----------------------------------------------------------------------------------------------*/ -/** - @brief This function is a callback function to acquire sensor data - - @param[in] sensor_data - @param[in] sensor_id -*/ -static void sensors_callback( bhy_data_generic_t *sensor_data, bhy_virtual_sensor_t sensor_id ); - - -/*-----------------------------------------------------------------------------------------------*/ -/*! - @brief This function is a callback function to get meta event info - - @param[in] event_data - @param[in] event_type -*/ -static void meta_event_callback( bhy_data_meta_event_t *event_data, - bhy_meta_event_type_t event_type ); - - -/* Static functions =============================================================================*/ -static void sensors_callback( bhy_data_generic_t *sensor_data, bhy_virtual_sensor_t sensor_id ) -{ - write_LED( M2MB_GPIO_HIGH_VALUE ); - - switch( ( INT32 )sensor_id ) - { - case VS_ID_CUS2: // cus2 id 0x1B indicates VirtAnyNoMotion virtual sensor driver - case VS_ID_CUS2_WAKEUP: - { - uint8_t motion_event = sensor_data->data_custom.data[0]; - - if( motion_event == 0 ) - { - AZX_LOG_INFO( "No Motion\r\n" ); - update_smartlock_LWM2MObject( 0 ); - } - else - if( motion_event == 1 ) - { - AZX_LOG_INFO( "Any Motion\r\n" ); - update_smartlock_LWM2MObject( 5 ); - } - } - break; - - case VS_ID_CUS3: // cus3 id 0x1C indicates VirtSmartLock virtual sensor driver - case VS_ID_CUS3_WAKEUP: - { - uint8_t door_status = sensor_data->data_custom.data[0]; - - if( door_status == 1 ) - { - AZX_LOG_INFO( "Door is Closed\r\n" ); - update_smartlock_LWM2MObject( 1 ); - } - else - if( door_status == 2 ) - { - AZX_LOG_INFO( "Door is Open\r\n" ); - update_smartlock_LWM2MObject( 2 ); - } - else - if( door_status == 3 ) - { - AZX_LOG_INFO( "Calibration Alert\r\n" ); - update_smartlock_LWM2MObject( 3 ); - } - else - if( door_status == 4 ) - { - // "Door open too long time" alert, timer can be configured by BHY_PAGE_13_PARAMETER_DOOR_OPEN_TIMER - AZX_LOG_INFO( "Door Open too long\r\n" ); - update_smartlock_LWM2MObject( 4 ); - } - } - break; - - default: - AZX_LOG_DEBUG( "unknown id = %d\r\n", sensor_id ); - break; - } - - write_LED( M2MB_GPIO_LOW_VALUE ); -} - - -static void meta_event_callback( bhy_data_meta_event_t *event_data, - bhy_meta_event_type_t event_type ) -{ - switch( event_type ) - { - case BHY_META_EVENT_TYPE_INITIALIZED: - AZX_LOG_DEBUG( "Initialize success!\r\n" ); - break; - - case BHY_META_EVENT_TYPE_FIFO_OVERFLOW: - AZX_LOG_INFO( "FIFO overflow: %d %d %d %d\r\n", event_data->meta_event_id, event_data->event_number, - event_data->sensor_type, event_data->event_specific ); - break; - - case BHY_META_EVENT_TYPE_ERROR: - AZX_LOG_INFO( "Error: %d %d %d %d\r\n", event_data->meta_event_id, event_data->event_number, - event_data->sensor_type, event_data->event_specific ); - break; - - case BHY_META_EVENT_TYPE_SENSOR_ERROR: - AZX_LOG_INFO( "Sensor error: %d %d %d %d\r\n", event_data->meta_event_id, event_data->event_number, - event_data->sensor_type, event_data->event_specific ); - break; - - case BHY_META_EVENT_TYPE_SELF_TEST_RESULTS: - if( event_data->event_specific == BHY_SUCCESS ) - { - AZX_LOG_DEBUG( "self test result success! sensor_type=%d\r\n", event_data->sensor_type ); - } - else - { - AZX_LOG_DEBUG( "self test result fail! sensor_type=%d \r\n", event_data->sensor_type ); - } - - break; - - default: - AZX_LOG_DEBUG( "Unknown meta event\r\n" ); - break; - } -} - -/*-----------------------------------------------------------------------------------------------*/ - -static void demo_sensor( void ) -{ - /* BHY Variable*/ - uint8_t *fifoptr = NULL; - uint16_t bytes_left_in_fifo = 0; - uint16_t bytes_remaining = 0; - uint16_t bytes_read = 0; - uint32_t i = 0; - bhy_data_generic_t fifo_packet; - bhy_data_type_t packet_type; - BHY_RETURN_FUNCTION_TYPE result; - struct sensor_information_non_wakeup_t sensor_info_non_wakeup; - struct sensor_information_wakeup_t sensor_info_wakeup; - /* To get the customized version number in firmware, it is necessary to read Parameter Page 2, index 125 */ - /* to get this information. This feature is only supported for customized firmware. To get this customized */ - /* firmware, you need to contact your local FAE of Bosch Sensortec. */ - struct cus_version_t bhy_cus_version; - /* If custom sensor is related to IMU sensor, then the remapping matrix for BHA or BHI here should */ - /* be configured according to its placement on customer's PCB. */ - /* for details, please check 'Application Notes Axes remapping of BHA250(B)/BHI160(B)' document. */ - /* For detauls on how to configure remapping matrix, please check example of 'accelerometer_remapping_example.c'. */ - bhy_install_meta_event_callback( BHY_META_EVENT_TYPE_INITIALIZED, meta_event_callback ); - bhy_install_meta_event_callback( BHY_META_EVENT_TYPE_SELF_TEST_RESULTS, meta_event_callback ); - if (BHY_SUCCESS != (result = bhy_install_sensor_callback( VS_TYPE_CUS2, VS_WAKEUP, sensors_callback ))) - { - AZX_LOG_ERROR("cannot register callback! %d\r\n", result); - return; - } - if (BHY_SUCCESS != (result = bhy_install_sensor_callback( VS_TYPE_CUS3, VS_WAKEUP, sensors_callback ))) - { - AZX_LOG_ERROR("cannot register callback! %d\r\n", result); - return; - } - - /* init the bhy chip */ - if( bhy_driver_init( bhy1_fw ) ) - { - AZX_LOG_ERROR( "Fail to init bhy\r\n" ); - return; - } - else - { - AZX_LOG_INFO("BHY Correctly Initialized\r\n"); - } - /* wait for the bhy trigger the interrupt pin go down and up again */ - while( read_gpio() ) - { - azx_sleep_ms( 10 ); - } - - while( !read_gpio() ) - { - azx_sleep_ms( 10 ); - } - - /* To get the customized version number in firmware, it is necessary to read Parameter Page 2, index 125 */ - /* to get this information. This feature is only supported for customized firmware. To get this customized */ - /* firmware, you need to contact your local FAE of Bosch Sensortec. */ - bhy_read_parameter_page( BHY_PAGE_2, PAGE2_CUS_FIRMWARE_VERSION, ( uint8_t * )&bhy_cus_version, - sizeof( struct cus_version_t ) ); - AZX_LOG_TRACE( "CUS version - base:%d major:%d minor:%d\n", bhy_cus_version.base, - bhy_cus_version.major, bhy_cus_version.minor ); - /* get physical sensor presence from sensor hub */ - bhy_read_parameter_page( BHY_PAGE_1, BHY_PARAM_SYSTEM_PHYSICAL_SENSOR_PRESENT, - &physical_sensor_present_bitmap[0], 8 ); - AZX_LOG_INFO( "Physical Sensor is present\r\n" ); - - for( i = 0; i < 8; i++ ) - { - AZX_LOG_TRACE( "bitmap[%d] = 0x%x\r\n", i, physical_sensor_present_bitmap[i] ); - } - - - /* get physical sensor status from sensor hub */ - bhy_get_physical_sensor_status( &phy_acc, &phy_gyro, &phy_mag ); - /* Physical Sensor Status: - Flags[bit 0]: interrupt enable - Flags[bits 5-7]: Sensor Power Mode values: - 0: Sensor Not Present - 1: Power Down - 2: Suspend - 3: Self-Test - 4: Interrupt Motion - 5: One Shot - 6: Low Power Active - 7: Active - */ - AZX_LOG_INFO( "Physical Sensor Status:\r\n" ); - AZX_LOG_INFO( "Acc : sample rate %d, range %d, int %d pwr %d\r\n", - phy_acc.accel_sample_rate, phy_acc.accel_dynamic_range, phy_acc.accel_flag & 0x01, - ( phy_acc.accel_flag & 0xE0 ) >> 5 ); - AZX_LOG_INFO( "Gyro: sample rate %d, range %d, int %d pwr %d\r\n", - phy_gyro.gyro_sample_rate, phy_gyro.gyro_dynamic_range, phy_gyro.gyro_flag & 0x01, - ( phy_gyro.gyro_flag & 0xE0 ) >> 5 ); - AZX_LOG_INFO( "Mag : sample rate %d, range %d, int %d pwr %d\r\n", - phy_mag.mag_sample_rate, phy_mag.mag_dynamic_range, phy_mag.mag_flag & 0x01, - ( phy_mag.mag_flag & 0xE0 ) >> 5 ); - AZX_LOG_INFO( "" ); - - /* read custom sensor event size from hub for later fifo parse */ - bhy_sync_cus_evt_size(); - AZX_LOG_INFO( "CUS evt size = %d %d %d %d %d\r\n", bhy_get_cus_evt_size( VS_TYPE_CUS1 ), - bhy_get_cus_evt_size( VS_TYPE_CUS2 ), \ - bhy_get_cus_evt_size( VS_TYPE_CUS3 ), bhy_get_cus_evt_size( VS_TYPE_CUS4 ), \ - bhy_get_cus_evt_size( VS_TYPE_CUS5 ) ); - - - /* get virtual sensor information from sensor hub */ - AZX_LOG_TRACE( "Supported Virtual Sensor Information:\r\n" ); - - for( i = 1; i < 32; i++ ) - { - bhy_get_wakeup_sensor_information( i, &sensor_info_wakeup ); - - if( sensor_info_wakeup.wakeup_sensor_type == i ) - { - AZX_LOG_TRACE( "id=%2d\r\n", i ); - } - } - - for( i = 33; i < 64; i++ ) - { - bhy_get_non_wakeup_sensor_information( i, &sensor_info_non_wakeup ); - - if( sensor_info_non_wakeup.non_wakeup_sensor_type == i ) - { - AZX_LOG_TRACE( "id=%2d\r\n", i ); - } - } - - /* enables the virtual sensor */ - bhy_enable_virtual_sensor( VS_TYPE_CUS2, VS_WAKEUP, 50, 0, VS_FLUSH_ALL, 0, - 0 ); // 50Hz for VirtAnyNoMotion - bhy_enable_virtual_sensor( VS_TYPE_CUS3, VS_WAKEUP, 200, 0, VS_FLUSH_ALL, 0, - 0 ); // 200Hz for VirtSmartLock - AZX_LOG_INFO( "Virtual Sensors Enabled\r\n" ); - - - /* get physical sensor status from sensor hub */ - bhy_get_physical_sensor_status( &phy_acc, &phy_gyro, &phy_mag ); - /* Physical Sensor Status: - Flags[bit 0]: interrupt enable - Flags[bits 5-7]: Sensor Power Mode values: - 0: Sensor Not Present - 1: Power Down - 2: Suspend - 3: Self-Test - 4: Interrupt Motion - 5: One Shot - 6: Low Power Active - 7: Active - */ - AZX_LOG_INFO( "Physical Sensor Status:\r\n" ); - AZX_LOG_INFO( "Acc : sample rate %d, range %d, int %d pwr %d\r\n", - phy_acc.accel_sample_rate, phy_acc.accel_dynamic_range, phy_acc.accel_flag & 0x01, - ( phy_acc.accel_flag & 0xE0 ) >> 5 ); - AZX_LOG_INFO( "Gyro: sample rate %d, range %d, int %d pwr %d\r\n", - phy_gyro.gyro_sample_rate, phy_gyro.gyro_dynamic_range, phy_gyro.gyro_flag & 0x01, - ( phy_gyro.gyro_flag & 0xE0 ) >> 5 ); - AZX_LOG_INFO( "Mag : sample rate %d, range %d, int %d pwr %d\r\n", - phy_mag.mag_sample_rate, phy_mag.mag_dynamic_range, phy_mag.mag_flag & 0x01, - ( phy_mag.mag_flag & 0xE0 ) >> 5 ); - AZX_LOG_INFO( "" ); - - /* read custom sensor event size from hub for later fifo parse */ - bhy_sync_cus_evt_size(); - AZX_LOG_INFO( "CUS evt size = %d %d %d %d %d\r\n", bhy_get_cus_evt_size( VS_TYPE_CUS1 ), - bhy_get_cus_evt_size( VS_TYPE_CUS2 ), \ - bhy_get_cus_evt_size( VS_TYPE_CUS3 ), bhy_get_cus_evt_size( VS_TYPE_CUS4 ), \ - bhy_get_cus_evt_size( VS_TYPE_CUS5 ) ); - - write_LED( M2MB_GPIO_HIGH_VALUE ); - azx_sleep_ms( 100 ); - write_LED( M2MB_GPIO_LOW_VALUE ); - azx_sleep_ms( 100 ); - write_LED( M2MB_GPIO_HIGH_VALUE ); - azx_sleep_ms( 100 ); - write_LED( M2MB_GPIO_LOW_VALUE ); - azx_sleep_ms( 100 ); - - while( 1 ) - { - /* wait until the interrupt fires */ - /* unless we already know there are bytes remaining in the fifo */ - while( !read_gpio() && !bytes_remaining ) - { - azx_sleep_ms( 10 ); - } - - bhy_read_fifo( fifo + bytes_left_in_fifo, FIFO_SIZE - bytes_left_in_fifo, &bytes_read, - &bytes_remaining ); - bytes_read += bytes_left_in_fifo; - fifoptr = fifo; - packet_type = BHY_DATA_TYPE_PADDING; - - do - { - /* this function will call callbacks that are registered */ - result = bhy_parse_next_fifo_packet( &fifoptr, &bytes_read, &fifo_packet, &packet_type ); - AZX_LOG_TRACE( "Result %d, PackType :%d", result, packet_type ); - - if( AZX_LOG_LEVEL_TRACE >= azx_log_getLevel() ) - { - /* prints all the debug packets */ - if( packet_type == BHY_DATA_TYPE_PADDING ) - { - /* padding data only added at the end of each FIFO dump, discard it. */ - - AZX_LOG_INFO( ">Padding\r\n" ); - - } - else - if( packet_type == BHY_DATA_TYPE_DEBUG ) - { - - AZX_LOG_INFO( ">DebugString : " ); - bhy_print_debug_packet( &fifo_packet.data_debug, bhy_printf ); - AZX_LOG_INFO( "\r\n" ); - - } - else - { - AZX_LOG_INFO( "\r\n" ); - } - } - /* the logic here is that if doing a partial parsing of the fifo, then we should not parse */ - /* the last 18 bytes (max length of a packet) so that we don't try to parse an incomplete */ - /* packet */ - azx_sleep_ms( 10 ); - } - while( ( result == BHY_SUCCESS ) && ( bytes_read > ( bytes_remaining ? MAX_PACKET_LENGTH : 0 ) ) ); - - bytes_left_in_fifo = 0; - - if( bytes_remaining ) - { - /* shifts the remaining bytes to the beginning of the buffer */ - while( bytes_left_in_fifo < bytes_read ) - { - fifo[bytes_left_in_fifo++] = *( fifoptr++ ); - } - } - - azx_sleep_ms( 10 ); - } -} - - - -/* Global functions =============================================================================*/ - -/*-----------------------------------------------------------------------------------------------*/ -/** - @brief This is the log function that bhy uses as extern. - - @param[in] fmt string format - @param[in] - -*/ -void trace_log( const char *fmt, ... ) -{ - char log_buffer[256]; - va_list arg; - va_start( arg, fmt ); - vsnprintf( log_buffer, sizeof( log_buffer ), fmt, arg ); - va_end( arg ); - AZX_LOG_INFO( log_buffer ); -} - -/*-----------------------------------------------------------------------------------------------*/ - - -/*************************************************************************************************** - \User Entry Point of Appzone - - \param [in] Module Id - - \details Main of the appzone user - **************************************************************************************************/ -void M2MB_main( int argc, char **argv ) -{ - ( void )argc; - ( void )argv; - /* SET output channel */ - AZX_LOG_INIT(); - AZX_LOG_INFO( "Starting SmartLock Demo app. This is v%s built on %s %s.\r\n", - VERSION, __DATE__, __TIME__ ); - - /* Open GPIO */ - if( open_LED( LED_PIN_NUM ) != 0 ) - { - AZX_LOG_ERROR( "Cannot open gpio channel.\r\n" ); - return; - } - - write_LED( M2MB_GPIO_HIGH_VALUE ); - azx_sleep_ms( 5000 ); - write_LED( M2MB_GPIO_LOW_VALUE ); - - /* Copy xml file if not exixting */ - if( 0 != check_xml_file( XML_NAME ) ) - { - if( 0 != copy_xml_file( XML_NAME ) ) - { - AZX_LOG_CRITICAL( "Failed copying file!\r\n" ); - - for( int i = 0; i < 10; i++ ) - { - write_LED( M2MB_GPIO_HIGH_VALUE ); - azx_sleep_ms( 200 ); - write_LED( M2MB_GPIO_LOW_VALUE ); - azx_sleep_ms( 200 ); - } - - return; - } - else - { - M2MB_POWER_HANDLE handle; - AZX_LOG_DEBUG( "Rebooting to apply xml file\r\n" ); - - if( M2MB_RESULT_SUCCESS != m2mb_power_init( &handle, NULL, ( void * ) NULL ) ) - { - AZX_LOG_CRITICAL( "cannot init power module!\r\n" ); - } - else - { - for( int i = 0; i < 3; i++ ) - { - write_LED( M2MB_GPIO_HIGH_VALUE ); - azx_sleep_ms( 1000 ); - write_LED( M2MB_GPIO_LOW_VALUE ); - azx_sleep_ms( 1000 ); - } - - m2mb_power_reboot( handle ); - m2mb_power_deinit( handle ); - return; - } - } - } - - /* Open I2C */ - if( open_I2C() != 0 ) - { - AZX_LOG_ERROR( "cannot open I2C channel.\r\n" ); - return; - } - - /* Open GPIO */ - if( open_gpio( INT_GPIO_PIN_NUM ) != 0 ) - { - AZX_LOG_ERROR( "cannot open gpio channel.\r\n" ); - return; - } - - if( oneedge_init( SMARTLOCK_OBJ_ID ) != 0 ) - { - AZX_LOG_ERROR( "Failed enabling LWM2M!\r\n" ); - return; - } - else - { - AZX_LOG_INFO("LWM2M Ready, start sensors demo.\r\n\r\n"); - demo_sensor(); - } - -} diff --git a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/gpio.c b/Samples/BRAVO_SmartLock_Demo/src/demo_utils/gpio.c deleted file mode 100644 index fa509ee..0000000 --- a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/gpio.c +++ /dev/null @@ -1,162 +0,0 @@ - -/*=========================================================================*/ -/* Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. */ -/** - @file - gpio.c - - @brief - The file contains gpio utilities - - @details - - - @author WhiteBeard - @author FabioPi - - @date - 2020-02-15 -*/ - -/* Include files ================================================================================*/ -#include -#include -#include -#include -#include -#include "m2mb_types.h" -#include "m2mb_os_api.h" -#include "m2mb_fs_stdio.h" -#include "m2mb_i2c.h" -#include "m2mb_gpio.h" -#include "m2mb_lwm2m.h" -#include "m2mb_power.h" - -#include "gpio.h" - -/* Local defines ================================================================================*/ -/* Local typedefs ===============================================================================*/ -/* Local statics ================================================================================*/ - -/* GPIO files descriptors */ -static INT32 gpio_fd = -1; -static INT32 led_fd = -1; -/* Local function prototypes ====================================================================*/ -/* Static functions =============================================================================*/ -/* Global functions =============================================================================*/ - - -void gpio_interr_cb( UINT32 fd, void *userdata ) -{ - ( void )fd; - ( void )userdata; -} - -int open_gpio( int pin ) -{ - INT32 ret; - char path[32]; - memset( path, 0, sizeof( path ) ); - sprintf( path, "/dev/GPIO%d", pin ); - /* Open file descriptor for GPIO*/ - gpio_fd = m2mb_gpio_open( path, 0 ); - - if( gpio_fd != -1 ) - { - ret = m2mb_gpio_multi_ioctl( gpio_fd, - CMDS_ARGS( M2MB_GPIO_IOCTL_SET_DIR, M2MB_GPIO_MODE_INPUT, /*Set gpio in input mode*/ - M2MB_GPIO_IOCTL_SET_PULL, - M2MB_GPIO_PULL_DOWN, /*Set pull configuration as pull down*/ - M2MB_GPIO_IOCTL_SET_DRIVE, M2MB_GPIO_MEDIUM_DRIVE, /*Pull drive set to medium*/ - M2MB_GPIO_IOCTL_SET_INTR_TYPE, - INTR_CB_SET, /*Select interrupt type as callback function*/ - M2MB_GPIO_IOCTL_SET_INTR_TRIGGER, - M2MB_GPIO_INTR_ANYEDGE, /*Select interrupt event on both edges*/ - M2MB_GPIO_IOCTL_SET_INTR_CB, ( UINT32 )gpio_interr_cb, /*Register interrupt callback*/ - M2MB_GPIO_IOCTL_SET_INTR_ARG, ( UINT32 ) - pin, /*Register interrupt callback parameter*/ - M2MB_GPIO_IOCTL_INIT_INTR, ( UINT32 )NULL ) /*enable interrupts*/ - ); - - if( ret == -1 ) - { - return -1; - } - else - { - return 0; - } - } - else - { - return 1; - } - - return 0; -} - -/*-----------------------------------------------------------------------------------------------*/ -int open_LED( int pin ) -{ - INT32 ret; - char path[32]; - memset( path, 0, sizeof( path ) ); - sprintf( path, "/dev/GPIO%d", pin ); - /* Open file descriptor for GPIO*/ - led_fd = m2mb_gpio_open( path, 0 ); - - if( led_fd != -1 ) - { - ret = m2mb_gpio_multi_ioctl( led_fd, - CMDS_ARGS( M2MB_GPIO_IOCTL_SET_DIR, M2MB_GPIO_MODE_OUTPUT, /*Set gpio in output mode*/ - M2MB_GPIO_IOCTL_SET_PULL, M2MB_GPIO_PULL_DOWN, /*Set pull configuration as pull down*/ - M2MB_GPIO_IOCTL_SET_DRIVE, M2MB_GPIO_MEDIUM_DRIVE ) /*Pull drive set to medium*/ - ); - - if( ret == -1 ) - { - return -1; - } - - return 0; - } - else - { - return 1; - } - - return 0; -} - -/*-----------------------------------------------------------------------------------------------*/ -M2MB_GPIO_VALUE_E read_gpio( INT32 fd ) -{ - M2MB_GPIO_VALUE_E value; - - if( 0 == m2mb_gpio_read( fd, &value ) ) - { - return value; - } - else - { - return M2MB_GPIO_LOW_VALUE; - } -} - -/*-----------------------------------------------------------------------------------------------*/ -void write_gpio( INT32 fd, M2MB_GPIO_VALUE_E value ) -{ - m2mb_gpio_write( fd, value ); -} - - -M2MB_GPIO_VALUE_E read_gpio( void ) -{ - return read_gpio( gpio_fd ); -} -/*-----------------------------------------------------------------------------------------------*/ -void write_LED( M2MB_GPIO_VALUE_E value ) -{ - m2mb_gpio_write( led_fd, value ); -} - diff --git a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/gpio.h b/Samples/BRAVO_SmartLock_Demo/src/demo_utils/gpio.h deleted file mode 100644 index c3bee2f..0000000 --- a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/gpio.h +++ /dev/null @@ -1,89 +0,0 @@ -/*===============================================================================================*/ -/* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */ -/** - @file - gpio.h - - @brief - demo gpio utilities - - @details - - - @note - Dependencies: - m2mb_types.h - - @author WhiteBeard - @author FabioPi - - @date - 2020-02-15 -*/ - -#ifndef SRC_GPIO_H_ -#define SRC_GPIO_H_ - -/* Global declarations ==========================================================================*/ -/* Global typedefs ==============================================================================*/ -/* Global functions =============================================================================*/ - - -/** - @brief Callback for GPIO interrupts - - @param[in] fd File descriptor of GPIO device - @param[in] userdata Address of user data buffer - -*/ -void gpio_interr_cb( UINT32 fd, void *userdata ); - - -/** - @brief Open GPIO input file/device - - @param[in] pin GPIO pin number - @retval 0 = device open, error other values - -*/ -int open_gpio( int pin ); - -/** - @brief Open GPIO output file/device for LED - - @param[in] pin GPIO pin number - @retval 0 = device open, error other values - -*/ -int open_LED( int pin ); - -/** - @brief Read value from GPIO file/device - - @param[in] fd file/device descriptor - @retval GPIO status - -*/ -M2MB_GPIO_VALUE_E read_gpio( INT32 fd ); - -M2MB_GPIO_VALUE_E read_gpio( void ); - - -/** - @brief Write value to GPIO file/device - - @param[in] fd file/device descriptor - @param[in] value GPIO status to be written - -*/ -void write_gpio( INT32 fd, M2MB_GPIO_VALUE_E value ); - -/** - @brief Write value to interrupt GPIO file/device - - @param[in] value GPIO status to be written - -*/ -void write_LED( M2MB_GPIO_VALUE_E value ); - -#endif /* SRC_GPIO_H_ */ diff --git a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/i2c.c b/Samples/BRAVO_SmartLock_Demo/src/demo_utils/i2c.c deleted file mode 100644 index 6c980b1..0000000 --- a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/i2c.c +++ /dev/null @@ -1,220 +0,0 @@ - -/*=========================================================================*/ -/* Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. */ -/** - @file - i2c.c - - @brief - The file contains i2c utilities - - @details - - - @author WhiteBeard - @author FabioPi - - @date - 2020-02-15 -*/ -/* Include files ================================================================================*/ -#include -#include -#include -#include -#include -#include "m2mb_types.h" -#include "m2mb_os_api.h" -#include "m2mb_fs_stdio.h" -#include "m2mb_i2c.h" -#include "m2mb_gpio.h" -#include "m2mb_lwm2m.h" -#include "m2mb_power.h" -#include "azx_log.h" -#include "azx_utils.h" -#include "app_cfg.h" - -#include "i2c.h" - - -/* Local defines ================================================================================*/ - -/* Local typedefs ===============================================================================*/ -/* Local statics ================================================================================*/ -static INT32 i2c_fd = -1; - - -/* Local function prototypes ====================================================================*/ -/* Static functions =============================================================================*/ -/* Global functions =============================================================================*/ - -/*-----------------------------------------------------------------------------------------------*/ -int open_I2C( void ) -{ - INT32 res; - CHAR dev_ID[64]; - M2MB_I2C_CFG_T config; - /************** - Configuring the IIC device. - **************/ - AZX_LOG_INFO( "\r\nConfiguring the Bosch device...\r\n" ); - //Create device name using device address in decimal base, left shifted by 1 bit - sprintf( dev_ID, "/dev/I2C-%d", - ( UINT16 ) BHY_I2C_160B_ADDR1 << 1 ); //I2C API require an already left-shifted device address - AZX_LOG_INFO( "Opening channel %s\r\n", dev_ID ); - i2c_fd = m2mb_i2c_open( dev_ID, 0 ); - - if( -1 == i2c_fd ) - { - AZX_LOG_ERROR( "cannot open I2C channel!\r\n" ); - return 1; - } - - config.sclPin = I2C_SCL; - config.sdaPin = I2C_SDA; - config.registerId = 0x00; //dummy register - res = m2mb_i2c_ioctl( i2c_fd, M2MB_I2C_IOCTL_SET_CFG, ( void * )&config ); - - if( res != 0 ) - { - AZX_LOG_ERROR( "cannot configure I2C channel\r\n" ); - return 1; - } - - return 0; -} - -/*-----------------------------------------------------------------------------------------------*/ -int8_t sensor_i2c_write( uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size ) -{ - ( void )addr; - INT32 i2c_res; - M2MB_I2C_CFG_T config; - - if( i2c_fd == -1 ) - { - return 1; - } - - i2c_res = m2mb_i2c_ioctl( i2c_fd, M2MB_I2C_IOCTL_GET_CFG, ( void * )&config ); - - if( i2c_res != 0 ) - { - AZX_LOG_ERROR( "cannot get I2C channel configuration\r\n" ); - return 1; - } - - config.registerId = reg; - i2c_res = m2mb_i2c_ioctl( i2c_fd, M2MB_I2C_IOCTL_SET_CFG, ( void * )&config ); - - if( i2c_res != 0 ) - { - AZX_LOG_ERROR( "cannot set I2C channel configuration\r\n" ); - return 1; - } - - AZX_LOG_TRACE( "Configuring I2C Registers - Writing %d bytes into 0x%02X register...\r\n", size, - reg ); - i2c_res = m2mb_i2c_write( i2c_fd, p_buf, size ); - - if( i2c_res != size ) - { - AZX_LOG_ERROR( "cannot write data! error: %d\r\n", i2c_res ); - return 1; - } - else - { - AZX_LOG_TRACE( "Write: success\r\n" ); - return 0; - } -} - -/*-----------------------------------------------------------------------------------------------*/ -int8_t sensor_i2c_read_16( uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size, - M2MB_I2C_CFG_T *pConfig ) -{ - ( void )addr; - - for( int i = 0; size > 0; i++ ) - { - pConfig->registerId = reg; - INT32 i2c_res = m2mb_i2c_ioctl( i2c_fd, M2MB_I2C_IOCTL_SET_CFG, ( void * )pConfig ); - - if( i2c_res != 0 ) - { - AZX_LOG_ERROR( "Cannot set I2C channel configuration\r\n" ); - return 1; - } - - uint16_t tmpsize; - - if( size >= 16 ) - { - tmpsize = 16; - } - else - { - tmpsize = size; - } - - i2c_res = m2mb_i2c_read( i2c_fd, p_buf, tmpsize ); //reading 16 bytes max at a time - - if( i2c_res == tmpsize ) - { - size = size - tmpsize; - reg = reg + tmpsize; - p_buf = p_buf + tmpsize; - AZX_LOG_TRACE( "Reading Success.\r\n" ); - AZX_LOG_TRACE( "i2c->" ); - - for( int i = 1; i < i2c_res; i++ ) - { - AZX_LOG_TRACE( " %02x", p_buf[i] ); - } - - AZX_LOG_TRACE( "\r\n" ); - } - else - { - AZX_LOG_ERROR( "Reading FAIL for %d bytes on register 0x%02X! - Exit Value: %d.\r\n", size, reg, - i2c_res ); - return 1; - } - } - - return 0; -} - - -/*-----------------------------------------------------------------------------------------------*/ -int8_t sensor_i2c_read( uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size ) -{ - INT32 i2c_res; - M2MB_I2C_CFG_T config; - AZX_LOG_TRACE( "I2C read register..." ); - i2c_res = m2mb_i2c_ioctl( i2c_fd, M2MB_I2C_IOCTL_GET_CFG, ( void * )&config ); - - if( i2c_res != 0 ) - { - AZX_LOG_ERROR( "Cannot get I2C channel configuration\r\n" ); - return 1; - } - - if( reg == 0 ) // if read FIFO double buffer - { - for( ; size > 50; ) - { - i2c_res = sensor_i2c_read_16( addr, reg, p_buf, 50, &config ); - size = size - 50; - p_buf = p_buf + 50; - } - - i2c_res += sensor_i2c_read_16( addr, reg, p_buf, size, &config ); - } - else - { - i2c_res = sensor_i2c_read_16( addr, reg, p_buf, size, &config ); - } - - return i2c_res; -} diff --git a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/i2c.h b/Samples/BRAVO_SmartLock_Demo/src/demo_utils/i2c.h deleted file mode 100644 index 8c65949..0000000 --- a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/i2c.h +++ /dev/null @@ -1,67 +0,0 @@ -/*===============================================================================================*/ -/* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */ -/** - @file - i2c.h - - @brief - demo i2c utilities - - @details - - - @note - Dependencies: - m2mb_types.h - - @author WhiteBeard - @author FabioPi - - @date - 2020-02-15 -*/ -#ifndef SRC_I2C_H_ -#define SRC_I2C_H_ - -/* Global declarations ==========================================================================*/ -/* default I2C configuration */ -#define I2C_SDA (UINT8) 2 //GPIO 2 -#define I2C_SCL (UINT8) 3 //GPIO 3 -#define BHY_I2C_160B_ADDR1 (UINT16) 0x28 - -/* Global typedefs ==============================================================================*/ -/* Global functions =============================================================================*/ - -/** - @brief Opens I2C device at BHI160B default address - -*/ -int open_I2C( void ); - - -/** - @brief Writes data from buffer using I2C - - @param[in] addr Device address on I2C bus (not used) - @param[in] reg Start register address - @param[in] p_buf Pointer to buffer with data to be written - @param[in] size Size of the data to be written - @return 1 on error, 0 if OK - -*/ -int8_t sensor_i2c_write( uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size ); - -/** - @brief Reads data to buffer using I2C 16 bytes a t a time - internal function - - @param[in] addr Device address on I2C bus (not used) - @param[in] reg Start register address - @param[in] p_buf Pointer to buffer with data to be read - @param[in] size Size of the data to be written - @return 1 on error, 0 if OK - -*/ -int8_t sensor_i2c_read( uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size ); - - -#endif /* SRC_I2C_H_ */ diff --git a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/lwm2m.c b/Samples/BRAVO_SmartLock_Demo/src/demo_utils/lwm2m.c deleted file mode 100644 index 0a3eeb1..0000000 --- a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/lwm2m.c +++ /dev/null @@ -1,502 +0,0 @@ - -/*=========================================================================*/ -/* Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. */ -/** - @file - lwm2m.c - - @brief - The file contains lwm2m callbacks and utilities - - @details - - - @author WhiteBeard - @author FabioPi - - @date - 2020-02-15 -*/ -/* Include files ================================================================================*/ -#include -#include -#include -#include -#include - -#include "m2mb_types.h" -#include "m2mb_os_api.h" -#include "m2mb_fs_stdio.h" -#include "m2mb_i2c.h" -#include "m2mb_gpio.h" -#include "m2mb_lwm2m.h" -#include "m2mb_power.h" - -#include "m2mb_fs_posix.h" -#include "m2mb_fs_errno.h" - -#include "azx_log.h" -#include "azx_utils.h" -#include "app_cfg.h" - -#include "lwm2m.h" - - -/* Local defines ================================================================================*/ -/* Local typedefs ===============================================================================*/ -/* Local statics ================================================================================*/ - -/* ONEEDGE */ -static M2MB_LWM2M_HANDLE _h; - -static M2MB_LWM2M_OBJ_URI_T _obj_telit_service_uri = {.uriLen = 4, .obj = 33211, .objInst = 0, .resource = 0, .resourceInst = 1}; - - -static M2MB_LWM2M_OBJ_URI_T _obj_tamper_uri = {3, TAMPERING_OBJ_ID, 0, 1}; - -static M2MB_LWM2M_OBJ_URI_T _obj_environment_uri_t = {3, ENVIRONMENT_OBJ_ID, 0, 1, 0}; -static M2MB_LWM2M_OBJ_URI_T _obj_environment_uri_p = {3, ENVIRONMENT_OBJ_ID, 0, 2, 0}; -static M2MB_LWM2M_OBJ_URI_T _obj_environment_uri_h = {3, ENVIRONMENT_OBJ_ID, 0, 3, 0}; -static M2MB_LWM2M_OBJ_URI_T _obj_environment_uri_iaq = {3, ENVIRONMENT_OBJ_ID, 0, 4, 0}; - -static M2MB_LWM2M_OBJ_URI_T _obj_rotation_uri_w = {3, ROTATION_OBJ_ID, 0, 1, 0}; -static M2MB_LWM2M_OBJ_URI_T _obj_rotation_uri_x = {3, ROTATION_OBJ_ID, 0, 2, 0}; -static M2MB_LWM2M_OBJ_URI_T _obj_rotation_uri_y = {3, ROTATION_OBJ_ID, 0, 3, 0}; -static M2MB_LWM2M_OBJ_URI_T _obj_rotation_uri_z = {3, ROTATION_OBJ_ID, 0, 4, 0}; -static M2MB_LWM2M_OBJ_URI_T _obj_rotation_uri_a = {3, ROTATION_OBJ_ID, 0, 5, 0}; - -static M2MB_LWM2M_OBJ_URI_T _obj_smartlock_uri = { 3, SMARTLOCK_OBJ_ID, 0, 1}; - - - -static M2MB_OS_EV_HANDLE lwm2m_evHandle = NULL; - -/* Local function prototypes ====================================================================*/ -/* Static functions =============================================================================*/ -/* Global functions =============================================================================*/ - -void lwm2mIndCB( M2MB_LWM2M_HANDLE h, M2MB_LWM2M_EVENT_E event, UINT16 resp_size, void *resp_struct, - void *userdata ) -{ - ( void ) h; - ( void ) resp_size; - ( void ) userdata; - - /* Client generated events */ - switch( event ) - { - - case M2MB_LWM2M_ENABLE_RES: - { - M2MB_LWM2M_ENABLE_RES_T *resp = ( M2MB_LWM2M_ENABLE_RES_T * )resp_struct; - if(resp->result == M2MB_LWM2M_RES_SUCCESS) - { - AZX_LOG_DEBUG( "LWM2M enable result OK\r\n"); - } - else - { - AZX_LOG_WARN( "Enable result %d\r\n", resp->result ); - } - break; - } - - case M2MB_LWM2M_SET_RES: - { - M2MB_LWM2M_SET_RES_T *resp = ( M2MB_LWM2M_SET_RES_T * )resp_struct; - if(resp->result == M2MB_LWM2M_RES_SUCCESS) - { - AZX_LOG_DEBUG( "LWM2M set result OK\r\n"); - } - else - { - AZX_LOG_WARN( "set result %d\r\n", resp->result ); - } - break; - } - - case M2MB_LWM2M_WRITE_RES: - { - M2MB_LWM2M_WRITE_RES_T *resp = ( M2MB_LWM2M_WRITE_RES_T * )resp_struct; - if(resp->result == M2MB_LWM2M_RES_SUCCESS) - { - AZX_LOG_TRACE( "LWM2M write result OK\r\n"); - } - else - { - AZX_LOG_WARN( "Enable write %d\r\n", resp->result ); - } - break; - } - - case M2MB_LWM2M_NEW_INST_RES: - { - // event in response to the m2mb_lwm2m_newinst - M2MB_LWM2M_NEW_INST_RES_T *resp = ( M2MB_LWM2M_NEW_INST_RES_T * )resp_struct; - - switch( resp->result ) - { - case M2MB_LWM2M_RES_SUCCESS: - AZX_LOG_TRACE( "New Instance created successfully\r\n" ); - break; - - case M2MB_LWM2M_RES_FAIL_NOT_ALLOWED: - AZX_LOG_WARN( "New instance creation not allowed (already present?)\r\n" ); - break; - - default: - AZX_LOG_DEBUG( "Creating object instance specified: generic result %d\r\n", resp->result ); - break; - } - - break; - } - - case M2MB_LWM2M_SRV_INFO_IND: - { - - AZX_LOG_TRACE("M2MB_LWM2M_SRV_INFO_IND\r\n"); - M2MB_LWM2M_SRV_INFO_IND_T *resp = ( M2MB_LWM2M_SRV_INFO_IND_T * )resp_struct; - - - switch(resp->info) - { - case M2MB_LWM2M_CL_STATE_DISABLED: - break; - case M2MB_LWM2M_CL_STATE_BOOTSTRAPPING: - AZX_LOG_DEBUG( "resp->info == M2MB_LWM2M_CL_STATE_BOOTSTRAPPING\r\n" ); - break; - case M2MB_LWM2M_CL_STATE_BOOTSTRAPPED: - AZX_LOG_DEBUG( "resp->info == M2MB_LWM2M_CL_STATE_BOOTSTRAPPED\r\n" ); - break; - case M2MB_LWM2M_CL_STATE_REGISTERING: - AZX_LOG_DEBUG( "resp->info == M2MB_LWM2M_CL_STATE_REGISTERING\r\n" ); - break; - case M2MB_LWM2M_CL_STATE_REGISTERED: - AZX_LOG_DEBUG( "resp->info == M2MB_LWM2M_CL_STATE_REGISTERED\r\n" ); - m2mb_os_ev_set(lwm2m_evHandle, EV_SRV_REG_BIT, M2MB_OS_EV_SET); - break; - case M2MB_LWM2M_CL_STATE_DEREGISTERING: - AZX_LOG_DEBUG( "resp->info == M2MB_LWM2M_CL_STATE_DEREGISTERING\r\n" ); - break; - case M2MB_LWM2M_CL_STATE_SUSPENDED: - AZX_LOG_DEBUG( "resp->info == M2MB_LWM2M_CL_STATE_SUSPENDED\r\n" ); - break; - default: - AZX_LOG_WARN( "resp->info: unexpected value!! %d\r\n", resp->info); - break; - } - break; - } - - case M2MB_LWM2M_SESSION_INFO_IND: - { - AZX_LOG_DEBUG( "M2MB_LWM2M_SESSION_INFO_IND\r\n" ); - M2MB_LWM2M_INFO_IND_T *resp = ( M2MB_LWM2M_INFO_IND_T * )resp_struct; - - if( resp->info == M2MB_LWM2M_INFO_RESOURCE_EXECUTE ) - { - M2MB_LWM2M_OBJ_URI_T *currData = ( M2MB_LWM2M_OBJ_URI_T * )resp->data; - AZX_LOG_DEBUG( "Info Exec Ind: %d/%d/%d\r\n", currData->obj, currData->objInst, - currData->resource ); - /* example - if( currData->obj == 3303 && currData->resource == 5605) - { - AZX_LOG_DEBUG( "Reset Min/Max Value of temperature\r\n"); - } - else - { - AZX_LOG_DEBUG("executed another resource"); - }*/ - } - - break; - } - - default: - AZX_LOG_DEBUG( "LWM2M EVENT %d\r\n", event ); - break; - } -} - -/*-----------------------------------------------------------------------------------------------*/ -uint8_t oneedge_init( INT32 obj_id ) -{ - M2MB_RESULT_E retVal; - M2MB_LWM2M_ENABLE_REQ_T pars; - M2MB_LWM2M_OBJ_URI_T uri; - M2MB_LWM2M_NEW_INST_REQ_T new_inst_params; - INT32 service_enable = 1; - - - M2MB_OS_RESULT_E osRes; - M2MB_OS_EV_ATTR_HANDLE evAttrHandle; - UINT32 curEvBits; - - - - /* Init events handler */ - osRes = m2mb_os_ev_setAttrItem( &evAttrHandle, CMDS_ARGS(M2MB_OS_EV_SEL_CMD_CREATE_ATTR, NULL, M2MB_OS_EV_SEL_CMD_NAME, "lwm2m_ev")); - osRes = m2mb_os_ev_init( &lwm2m_evHandle, &evAttrHandle ); - - if ( osRes != M2MB_OS_SUCCESS ) - { - m2mb_os_ev_setAttrItem( &evAttrHandle, M2MB_OS_EV_SEL_CMD_DEL_ATTR, NULL ); - AZX_LOG_CRITICAL("m2mb_os_ev_init failed!\r\n"); - return 0; - } - else - { - AZX_LOG_TRACE("m2mb_os_ev_init success\r\n"); - } - - - //get the handle of the lwm2m client on _h - retVal = m2mb_lwm2m_init( &_h, lwm2mIndCB, ( void * )NULL ); - - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_init returned error %d\r\n", retVal ); - return -1; - } - - - retVal = m2mb_lwm2m_write( _h, &_obj_telit_service_uri, &service_enable, sizeof( INT32 ) ); - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_write returned error %d\r\n", retVal ); - return -1; - } - - //AT#LWM2MENA=1 - memset( &pars, 0, sizeof( M2MB_LWM2M_ENABLE_REQ_T ) ); - - pars.apnclass = 0; - pars.guardRequestEventSecs = 0; - pars.guardReleaseEventSecs = 0; - pars.commandType = M2MB_LWM2MENA_CMD_TYPE_SET; - pars.mode = M2MB_LWM2M_MODE_NO_ACK; - - retVal = m2mb_lwm2m_enable( _h, &pars ); - - - - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_enable returned error %d\r\n", retVal ); - return -1; - } - - - /*new object instance information*/ - uri.obj = obj_id; - uri.objInst = 0; - - new_inst_params.agent = 0; /*Telit Agent*/ - /*If OK the instance was not present, and so it was created. If an error - is received, it is likely because the instance already exists.*/ - retVal = m2mb_lwm2m_newinst( _h, &uri, &new_inst_params ); - - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_newinst returned error %d\r\n", retVal ); - return -1; - } - - AZX_LOG_DEBUG("Waiting LWM2M Registering (60 seconds)...\r\n"); - osRes = m2mb_os_ev_get(lwm2m_evHandle, EV_SRV_REG_BIT, M2MB_OS_EV_GET_ANY_AND_CLEAR, &curEvBits, M2MB_OS_MS2TICKS(60000)); - if(osRes != M2MB_OS_SUCCESS) - { - AZX_LOG_ERROR("LWM2M Register timeout!\r\n"); - return 1; - } - - return 0; -} - - -/*-----------------------------------------------------------------------------------------------*/ -void update_tamper_LWM2MObject( int value ) -{ - M2MB_RESULT_E retVal = m2mb_lwm2m_write( _h, &_obj_tamper_uri, &value, sizeof( int ) ); - - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_set returned error %d\r\n", retVal ); - return; - } -} - - -/*-----------------------------------------------------------------------------------------------*/ -void update_environment_LWM2MObject( float _t, float _p, float _rh, INT16 _iaq ) -{ - M2MB_RESULT_E retVal = m2mb_lwm2m_set( _h, &_obj_environment_uri_t, &_t, sizeof( float ) ); - azx_sleep_ms( 10 ); - retVal = m2mb_lwm2m_set( _h, &_obj_environment_uri_p, &_p, sizeof( float ) ); - azx_sleep_ms( 10 ); - retVal = m2mb_lwm2m_set( _h, &_obj_environment_uri_h, &_rh, sizeof( float ) ); - azx_sleep_ms( 10 ); - retVal = m2mb_lwm2m_set( _h, &_obj_environment_uri_iaq, &_iaq, sizeof( INT16 ) ); - - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_set returned error %d\r\n", retVal ); - return; - } -} - - -/*-----------------------------------------------------------------------------------------------*/ -void update_rotation_LWM2MObject( float _w, float _x, float _y, float _z, INT16 _acc ) -{ - M2MB_RESULT_E retVal; - retVal = m2mb_lwm2m_set( _h, &_obj_rotation_uri_w, &_w, sizeof( float ) ); - //azx_sleep_ms(100); - retVal = m2mb_lwm2m_set( _h, &_obj_rotation_uri_x, &_x, sizeof( float ) ); - //azx_sleep_ms(100); - retVal = m2mb_lwm2m_set( _h, &_obj_rotation_uri_y, &_y, sizeof( float ) ); - //azx_sleep_ms(100); - retVal = m2mb_lwm2m_set( _h, &_obj_rotation_uri_z, &_z, sizeof( float ) ); - //azx_sleep_ms(100); - retVal = m2mb_lwm2m_set( _h, &_obj_rotation_uri_a, &_acc, sizeof( INT16 ) ); - - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_set returned error %d\r\n", retVal ); - return; - } -} - - -/*-----------------------------------------------------------------------------------------------*/ -void update_smartlock_LWM2MObject( int value ) -{ - M2MB_RESULT_E retVal = m2mb_lwm2m_write( _h, &_obj_smartlock_uri, &value, sizeof( int ) ); - - if( retVal != M2MB_RESULT_SUCCESS ) - { - AZX_LOG_ERROR( "m2mb_lwm2m_set returned error %d\r\n", retVal ); - return; - } -} - - -/*-----------------------------------------------------------------------------------------------*/ -int check_xml_file( const char *name ) -{ - char path[64] = {0}; - struct M2MB_STAT info; - sprintf( path, "/XML/%s", name ); - AZX_LOG_DEBUG( "Looking for <%s> file..\r\n", path ); - - if( 0 == m2mb_fs_stat( path, &info ) ) - { - AZX_LOG_DEBUG( "File is present, continue...\r\n" ); - return 0; - } - else - { - INT32 last_errno = m2mb_fs_get_errno_value(); - - if( last_errno == M2MB_FS_ENOENT ) - { - AZX_LOG_WARN( "File not found.\r\n" ); - return -1; - } - else - { - AZX_LOG_ERROR( "Error with m2mb_fs_stat, errno is: %d\r\n", last_errno ); - return -2; - } - } -} - - -/*-----------------------------------------------------------------------------------------------*/ -int copy_xml_file( const char *name ) -{ - char inpath[64] = {0}; - char outpath[64] = {0}; - char data[256]; - INT32 in_fd, out_fd; - sprintf( inpath, "/mod/%s", name ); - sprintf( outpath, "/XML/%s", name ); - in_fd = m2mb_fs_open( inpath, M2MB_O_RDONLY ); - - if( -1 == in_fd ) - { - AZX_LOG_ERROR( "cannot find input file! abort.\r\n" ); - return -1; - } - else - { - out_fd = m2mb_fs_open( outpath, M2MB_O_WRONLY | M2MB_O_CREAT ); - - if( -1 == out_fd ) - { - AZX_LOG_ERROR( "cannot create output file! abort.\r\n" ); - return -2; - } - else - { - struct M2MB_STAT stats; - UINT32 filesize; - UINT32 written = 0; - UINT32 chunk = sizeof( data ); - AZX_LOG_DEBUG( "%s output file opened\r\n", outpath ); - - if( -1 == m2mb_fs_fstat( in_fd, &stats ) ) - { - AZX_LOG_ERROR( "cannot stat input file! abort\r\n" ); - return -3; - } - else - { - filesize = stats.st_size; - AZX_LOG_DEBUG( "File size: %u\r\n", filesize ); - - if( chunk > filesize ) - { - AZX_LOG_DEBUG( "chunk is %u, bigger than filesize (%u). Decrease it.\r\n", chunk, filesize ); - chunk = filesize; - } - - while( 1 ) - { - SSIZE_T res = 0; - res = m2mb_fs_read( in_fd, data, chunk ); - - if( res != ( SSIZE_T ) chunk ) - { - AZX_LOG_ERROR( "read is less than expected: %d instead of %d\r\n", res, chunk ); - return -4; - } - - res = m2mb_fs_write( out_fd, data, chunk ); - - if( res != ( SSIZE_T ) chunk ) - { - AZX_LOG_ERROR( "written is less than expected: %d instead of %d\r\n", res, chunk ); - return -5; - } - - AZX_LOG_DEBUG( "%u bytes written into output file.\r\n", chunk ); - written += chunk; - - if( ( filesize - written ) < chunk ) - { - chunk = filesize - written; - } - - if( written == filesize ) - { - AZX_LOG_DEBUG( "file written. \r\n" ); - break; - } - } - - return 0; - } - } - } -} diff --git a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/lwm2m.h b/Samples/BRAVO_SmartLock_Demo/src/demo_utils/lwm2m.h deleted file mode 100644 index 52a7ac0..0000000 --- a/Samples/BRAVO_SmartLock_Demo/src/demo_utils/lwm2m.h +++ /dev/null @@ -1,124 +0,0 @@ -/*===============================================================================================*/ -/* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */ -/** - @file - lwm2m.h - - @brief - demo lwm2m utilities - - @details - - - @note - Dependencies: - m2mb_types.h - m2mb_lwm2m.h - - @author WhiteBeard - @author FabioPi - - @date - 2020-02-15 -*/ -/* Global declarations ==========================================================================*/ -/* Global typedefs ==============================================================================*/ -/* Global functions =============================================================================*/ -#ifndef SRC_LWM2M_H_ -#define SRC_LWM2M_H_ - -#define TAMPERING_OBJ_ID 26242 -#define ENVIRONMENT_OBJ_ID 26251 -#define ROTATION_OBJ_ID 26250 -#define SMARTLOCK_OBJ_ID 26247 - - -#define EV_SRV_REG_BIT (UINT32)0x1 /*0x0000000000000001*/ - - -/** - @brief Callback function for Client generated LWM2M events - - @param[in] h LWM2M handle - @param[in] event Event Identification - @param[in] resp_size Size of the response buffer - @param[in] resp_struct Address of response buffer - @param[in] userdata Address of user data - -*/ -void lwm2mIndCB( M2MB_LWM2M_HANDLE h, M2MB_LWM2M_EVENT_E event, UINT16 resp_size, void *resp_struct, - void *userdata ); - - -/** - @brief Initialize OneEdge connection - @param[in] obj_id Object ID to be used for initialization - @return result of initialization - -*/ -uint8_t oneedge_init( INT32 obj_id ); - -/** - @brief Write a value to LWM2M Tamper uri - - @param[in] value Integer value to be written - -*/ -void update_tamper_LWM2MObject( int value ); - - - -/** - @brief Write a value to LWM2M Environmental uri - - @param[in] _t Temperature to be written - @param[in] _p Pressure value to be written - @param[in] _rh Humidity value to be written - @param[in] _iaq Index Air Quality value to be written - -*/ -void update_environment_LWM2MObject( float _t, float _p, float _rh, INT16 _iaq ); - - -/** - @brief Write a value to LWM2M Rotation uri - - @param[in] _w w parameter - @param[in] _x x component - @param[in] _y y component - @param[in] _z z component - @param[in] _acc accuracy - -*/ -void update_rotation_LWM2MObject( float _w, float _x, float _y, float _z, INT16 _acc ); - - -/** - @brief Write a value to LWM2M SmartLock uri - - @param[in] value integer to be written - -*/ -void update_smartlock_LWM2MObject( int value ); - -/** - @brief Check existence of XML object description file in XML directory - - @param[in] name Name of the file to be checked - @retval 0 if OK, other values error - -*/ -int check_xml_file( const char *name ); - - -/** - @brief Copy XML file from /mod to /XML directory - - @param[in] name Name of the file to be checked - @retval 0 if OK, other values error - -*/ -int copy_xml_file( const char *name ); - - -#endif /* SRC_LWM2M_H_ */ diff --git a/Samples/BRAVO_Tampering_Demo/hdr/app_cfg.h b/Samples/BRAVO_Tampering_Demo/hdr/app_cfg.h index 293d158..7f96af8 100644 --- a/Samples/BRAVO_Tampering_Demo/hdr/app_cfg.h +++ b/Samples/BRAVO_Tampering_Demo/hdr/app_cfg.h @@ -23,7 +23,7 @@ /** * @brief The current version of the Samples */ -#define VERSION "1.0.2" +#define VERSION "1.0.3" /** * @name Log Settings diff --git a/Samples/README.md b/Samples/README.md index e92c2ce..544a431 100644 --- a/Samples/README.md +++ b/Samples/README.md @@ -4,7 +4,7 @@ -Package Version: **1.0.2** +Package Version: **1.0.3** Firmware Version: **30.00.XX8** @@ -77,54 +77,6 @@ The applications code follow the structure below: ##Applications -### Bravo SmartLock demo - - - -**Features** - ---- - -- Connect to LWM2M Portal -- Retrieve movement information from BMI160 sensor -- Update portal about current status (door status) - ---- - -#### Prerequisites - -This application requires the file **object_26247.xml** (provided) to be stored into module's `/mod/` folder, along with the application binary itself. - -To load it, use - -`AT#M2MWRITE=/mod/object_26247.xml,1427` - -And at prompt, send the file content in raw mode. - -#### Prerequisites on the OneEdge Portal - -This application requires the **object_26247.xml** content to be stored in your OneEdge organization object registry. The latter can be accessed from the link https:///lwm2m/object_registry -where could be for example `portal-dev.telit.com`. open the xml file in a notepad tool, select all the content and copy it. Then, in the object registry webpage, press "New Object" button on the right and paste the content of the xml file, then press Add button. - -Now from Developer webpage, go in **Thing Definitions** page from the list on the left and press `Import` button on the right. Press `Attach File` and provide `json/bravo_SmartLock_thing_def.json` from the project root, then press `Import`. - -Again from the Developer webpage, select **Device Profiles**, `Import` button, `Attach File` and provide `json/bravo_SmartLock_device_profile.json`, then press `Import`. - -Lastly, from the Developer webpage, select **Triggers**, `Actions` menu on the right, `Import` , `Attach File` and provide `json/bravo_SmartLock_triggers.json`, then press `Import`. Now open the trigger **bravo_SmartLockDemo_state_trigger** by pressing the View button (the eye icon on the left) and be sure to press the `play` button, and that the trigger status is 'started'. - -#### Calibration -At application startup, the board red LED will turn ON. After it turns OFF, move the board to perform a door open movement. Wait 3 seconds, then perform a door close movement. -The calibration is now complete and the board will signal any door status change - - ---- - - -SmartLock Demo application. Debug prints on **MAIN UART** - - - - ### Bravo Tampering demo