Просмотр исходного кода

[FL-1138] CLI commands unification (#484)

* power_otg command, merge sd_info and sd_status, added small usage instructions for commands with args
* remove duplicated sd status string
* cli_print_usage added, typo fix
its your bedtime 4 лет назад
Родитель
Сommit
f1e9a12eb0

+ 34 - 1
applications/cli/cli.c

@@ -70,8 +70,41 @@ void cli_print_version(const Version* version) {
     }
 }
 
+void cli_print_usage(const char* cmd, const char* usage, const char* arg) {
+    furi_assert(cmd);
+    furi_assert(arg);
+    furi_assert(usage);
+
+    printf("%s: illegal option -- %s\r\nusage: %s %s", cmd, arg, cmd, usage);
+}
+
 void cli_motd() {
-    printf("Flipper cli.\r\n");
+    printf("                                      __ \r\n \
+                                 _.-~  ) \r\n \
+                      _..--~~~~,'   ,-/     _\r\n \
+                   .-'. . . .'   ,-','    ,' ) \r\n \
+                 ,'. . . _   ,--~,-'__..-'  ,' \r\n \
+               ,'. . .  (@)' ---~~~~      ,'\r\n \
+              /. . . . '~~             ,-'\r\n \
+             /. . . . .             ,-'\r\n \
+            ; . . . .  - .        ,'\r\n \
+           : . . . .       _     /\r\n \
+          . . . . .          `-.:\r\n \
+         . . . ./  - .          )\r\n \
+       .  . . |  _____..---.._/ _____\r\n \
+~-----~~~~----~~~~                   ~~~-----~~~~~-----~\r\n \
+ ______ _ _                          _____ _      _____\r\n \
+|  ____| (_)                        / ____| |    |_   _|\r\n \
+| |__  | |_ _ __  _ __   ___ _ __  | |    | |      | |\r\n \
+|  __| | | | '_ \\| '_ \\ / _ \\ '__| | |    | |      | |\r\n \
+| |    | | | |_) | |_) |  __/ |    | |____| |____ _| |_\r\n \
+|_|    |_|_| .__/| .__/ \\___|_|     \\_____|______|_____|\r\n \
+           | |   | |\r\n \
+           |_|   |_|\r\n\r\n"
+
+    );
+
+    printf("You are now connected to Flipper Command Line Interface.\r\n\r\n");
 
     printf("Bootloader\r\n");
     cli_print_version(api_hal_version_get_boot_version());

+ 8 - 0
applications/cli/cli.h

@@ -27,6 +27,14 @@ typedef void (*CliCallback)(Cli* cli, string_t args, void* context);
  */
 void cli_add_command(Cli* cli, const char* name, CliCallback callback, void* context);
 
+/* Print unified cmd usage tip
+ * @param cmd - cmd name
+ * @param usage - usage tip
+ * @param arg - arg passed by user
+ */
+
+void cli_print_usage(const char* cmd, const char* usage, const char* arg);
+
 /* Delete cli command
  * @param cli - pointer to cli instance
  * @param name - command name

+ 5 - 5
applications/cli/cli_commands.c

@@ -115,7 +115,7 @@ void cli_command_vibro(Cli* cli, string_t args, void* context) {
         notification_message_block(notification, &sequence_set_vibro_on);
         furi_record_close("notification");
     } else {
-        printf("Wrong input");
+        cli_print_usage("vibro", "<1|0>", string_get_cstr(args));
     }
 }
 
@@ -126,7 +126,7 @@ void cli_command_led(Cli* cli, string_t args, void* context) {
     string_init(light_name);
     size_t ws = string_search_char(args, ' ');
     if(ws == STRING_FAILURE) {
-        printf("Wrong input");
+        cli_print_usage("led", "<r|g|b|bl> <0-255>", string_get_cstr(args));
         string_clear(light_name);
         return;
     } else {
@@ -144,7 +144,7 @@ void cli_command_led(Cli* cli, string_t args, void* context) {
     } else if(!string_cmp(light_name, "bl")) {
         notification_led_message.type = NotificationMessageTypeLedDisplay;
     } else {
-        printf("Wrong argument");
+        cli_print_usage("led", "<r|g|b|bl> <0-255>", string_get_cstr(args));
         string_clear(light_name);
         return;
     }
@@ -153,7 +153,7 @@ void cli_command_led(Cli* cli, string_t args, void* context) {
     char* end_ptr;
     uint32_t value = strtoul(string_get_cstr(args), &end_ptr, 0);
     if(!(value < 256 && *end_ptr == '\0')) {
-        printf("Wrong argument");
+        cli_print_usage("led", "<r|g|b|bl> <0-255>", string_get_cstr(args));
         return;
     }
 
@@ -191,7 +191,7 @@ void cli_command_gpio_set(Cli* cli, string_t args, void* context) {
     string_init(pin_name);
     size_t ws = string_search_char(args, ' ');
     if(ws == STRING_FAILURE) {
-        printf("Wrong input. Correct usage: gpio_set <pin_name> <0|1>");
+        cli_print_usage("gpio_set", "<pin_name> <0|1>", string_get_cstr(args));
         string_clear(pin_name);
         return;
     } else {

+ 1 - 1
applications/cli/cli_commands.h

@@ -2,4 +2,4 @@
 
 #include "cli_i.h"
 
-void cli_commands_init(Cli* cli);
+void cli_commands_init(Cli* cli);

+ 11 - 10
applications/power/power_cli.c

@@ -29,16 +29,18 @@ void power_cli_factory_reset(Cli* cli, string_t args, void* context) {
     }
 }
 
-void power_cli_test(Cli* cli, string_t args, void* context) {
+void power_cli_info(Cli* cli, string_t args, void* context) {
     api_hal_power_dump_state();
 }
 
-void power_cli_otg_on(Cli* cli, string_t args, void* context) {
-    api_hal_power_enable_otg();
-}
-
-void power_cli_otg_off(Cli* cli, string_t args, void* context) {
-    api_hal_power_disable_otg();
+void power_cli_otg(Cli* cli, string_t args, void* context) {
+    if(!string_cmp(args, "0")) {
+        api_hal_power_disable_otg();
+    } else if(!string_cmp(args, "1")) {
+        api_hal_power_enable_otg();
+    } else {
+        cli_print_usage("power_otg", "<1|0>", string_get_cstr(args));
+    }
 }
 
 void power_cli_init(Cli* cli, Power* power) {
@@ -46,7 +48,6 @@ void power_cli_init(Cli* cli, Power* power) {
     cli_add_command(cli, "reset", power_cli_reset, power);
     cli_add_command(cli, "factory_reset", power_cli_factory_reset, power);
     cli_add_command(cli, "dfu", power_cli_dfu, power);
-    cli_add_command(cli, "power_test", power_cli_test, power);
-    cli_add_command(cli, "power_otg_on", power_cli_otg_on, power);
-    cli_add_command(cli, "power_otg_off", power_cli_otg_off, power);
+    cli_add_command(cli, "power_info", power_cli_info, power);
+    cli_add_command(cli, "power_otg", power_cli_otg, power);
 }

+ 3 - 12
applications/sd-filesystem/sd-filesystem.c

@@ -522,14 +522,6 @@ void app_sd_eject_callback(void* context) {
 
 /******************* Cli callbacks *******************/
 
-static void cli_sd_status(Cli* cli, string_t args, void* _ctx) {
-    SdApp* sd_app = (SdApp*)_ctx;
-
-    printf("SD status: ");
-    printf(fs_error_get_internal_desc(sd_app->info.status));
-    printf("\r\n");
-}
-
 static void cli_sd_format(Cli* cli, string_t args, void* _ctx) {
     SdApp* sd_app = (SdApp*)_ctx;
 
@@ -552,18 +544,18 @@ static void cli_sd_info(Cli* cli, string_t args, void* _ctx) {
     SDInfo sd_info;
 
     get_sd_info(sd_app, &sd_info);
+    printf("SD Status: %s\r\n", fs_error_get_internal_desc(sd_app->info.status));
 
     if(sd_info.error == SD_OK) {
         const char* fs_type = get_fs_type_text(sd_info.fs_type);
         printf("Label: %s\r\n", sd_info.label);
-        printf("%s\r\n", fs_type);
+        printf("Filesystem: %s\r\n", fs_type);
         printf("Cluster: %d sectors\r\n", sd_info.cluster_size);
         printf("Sector: %d bytes\r\n", sd_info.sector_size);
         printf("%lu KB total\r\n", sd_info.kb_total);
         printf("%lu KB free\r\n", sd_info.kb_free);
     } else {
-        printf("SD status error: %s\r\n", fs_error_get_internal_desc(_fs_status(&sd_app->info)));
-        printf("SD info error: %s\r\n", fs_error_get_internal_desc(sd_info.error));
+        printf("SD Info error: %s\r\n", fs_error_get_internal_desc(sd_info.error));
     }
 }
 
@@ -635,7 +627,6 @@ int32_t sd_filesystem(void* p) {
 
     gui_add_view_port(gui, sd_app->icon.view_port, GuiLayerStatusBarLeft);
 
-    cli_add_command(cli, "sd_status", cli_sd_status, sd_app);
     cli_add_command(cli, "sd_format", cli_sd_format, sd_app);
     cli_add_command(cli, "sd_info", cli_sd_info, sd_app);
 

+ 55 - 55
applications/tests/irda_decoder/test_data/irda_decoder_nec_test_data.h

@@ -11,9 +11,9 @@ const uint32_t test_nec_input1[] = {
 1415838, 9080, 4436, 611, 494, 600, 505, 578, 500, 608, 501, 602, 502, 580, 498, 606, 508, 605, 500, 583, 1633, 608, 1608, 611, 1631, 578, 1638, 602, 1614, 606, 1637, 583, 1633, 607, 1609, 611, 494, 600, 505, 570, 500, 604, 501, 602, 502, 581, 497, 606, 499, 605, 499, 583, 1633, 617, 1608, 611, 1631, 579, 1638, 602};
 
 const IrdaMessage test_nec_expected1[] = {
-    {IrdaProtocolNEC,     0xFF00,      0,  false},
-    {IrdaProtocolNEC,     0xFF00,      0,  true},
-    {IrdaProtocolNEC,     0xFF00,      0,  false},
+    {IrdaProtocolNEC,     0,      0,  false},
+    {IrdaProtocolNEC,     0,      0,  true},
+    {IrdaProtocolNEC,     0,      0,  false},
 };
 
 const uint32_t test_nec_input2[] = {
@@ -124,57 +124,57 @@ const uint32_t test_nec_input2[] = {
 };
 
 const IrdaMessage test_nec_expected2[] = {
-    {IrdaProtocolNEC,     0xFF00,      0x02,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x02,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x06,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x06,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x04,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x04,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x09,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x09,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x09,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x0A,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   true},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x0A,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x08,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x0A,   false},
-    {IrdaProtocolNEC,     0xFF00,      0x0A,   true},
+    {IrdaProtocolNEC,     0,      0x02,   false},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   false},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x02,   true},
+    {IrdaProtocolNEC,     0,      0x06,   false},
+    {IrdaProtocolNEC,     0,      0x06,   true},
+    {IrdaProtocolNEC,     0,      0x04,   false},
+    {IrdaProtocolNEC,     0,      0x04,   true},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   true},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   true},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x09,   false},
+    {IrdaProtocolNEC,     0,      0x09,   false},
+    {IrdaProtocolNEC,     0,      0x09,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x0A,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   true},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x08,   true},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x0A,   false},
+    {IrdaProtocolNEC,     0,      0x08,   false},
+    {IrdaProtocolNEC,     0,      0x0A,   false},
+    {IrdaProtocolNEC,     0,      0x0A,   true},
 };
 

+ 218 - 180
applications/tests/irda_decoder/test_data/irda_decoder_samsung_test_data.h

@@ -1,184 +1,222 @@
 const uint32_t test_samsung32_input1[] = {
-3129767, 4513, 4483, 565, 530, 586, 1670, 563, 1664, 588, 1666, 566, 530, 586, 535, 560, 535, 591, 531, 565, 531, 585, 1669, 563, 1666, 587, 1640, 593, 531, 566, 530, 587, 536, 559, 562, 564, 531, 585, 537, 558, 1670, 562, 1665, 587, 534, 561, 534, 592, 530, 566, 529, 587, 1668, 564, 1664, 589, 533, 563, 533, 594, 1661, 560, 1667, 565, 1661, 591, 1664, 558, 
-46325, 4517, 4480, 558, 1668, 595, 
-
-679127, 4511, 4485, 562, 532, 584, 1671, 561, 1666, 587, 1668, 564, 532, 585, 537, 559, 537, 589, 533, 562, 533, 593, 1661, 561, 1667, 586, 1642, 590, 532, 563, 531, 585, 537, 559, 564, 563, 1666, 567, 528, 588, 535, 613, 483, 593, 530, 586, 536, 559, 536, 590, 1637, 584, 537, 558, 1669, 594, 1661, 561, 1667, 586, 1642, 591, 1664, 559, 1670, 583, 534, 567, 
-46429, 4515, 4480, 558, 1671, 593, 
-
-618571, 4508, 4488, 560, 561, 566, 1663, 559, 1667, 583, 1670, 562, 534, 582, 540, 565, 531, 587, 536, 560, 536, 590, 1664, 558, 1670, 583, 1644, 588, 535, 561, 534, 592, 530, 566, 557, 610, 1616, 616, 479, 585, 537, 558, 537, 589, 534, 584, 539, 567, 529, 587, 534, 561, 534, 592, 1663, 559, 1668, 564, 1664, 588, 1666, 566, 1661, 581, 1646, 585, 1669, 563, 
-46106, 4511, 4485, 563, 1664, 589, 
-
-514897, 4514, 4482, 556, 564, 614, 1616, 565, 1664, 589, 1666, 557, 538, 588, 534, 562, 534, 592, 529, 566, 529, 587, 1667, 565, 1663, 590, 1638, 584, 538, 568, 527, 590, 534, 562, 562, 566, 530, 587, 1642, 590, 532, 563, 530, 586, 537, 589, 533, 563, 533, 583, 539, 566, 1661, 561, 561, 566, 1663, 559, 1668, 584, 1671, 563, 1666, 556, 1671, 591, 1663, 559, 
-46210, 4508, 4488, 560, 1668, 585, 
-
-683922, 4509, 4487, 561, 560, 565, 1662, 559, 1669, 585, 1670, 562, 534, 583, 540, 566, 529, 586, 535, 560, 535, 591, 1663, 559, 1669, 584, 1644, 588, 534, 561, 533, 593, 529, 556, 567, 561, 1668, 564, 1664, 590, 534, 563, 532, 584, 538, 557, 537, 589, 534, 562, 534, 593, 530, 566, 555, 561, 1667, 564, 1662, 589, 1665, 557, 1671, 581, 1647, 586, 1669, 564, 
-46686, 4514, 4481, 556, 1672, 592, 
-
-1088255, 4514, 4481, 557, 564, 562, 1667, 565, 1663, 591, 1665, 558, 538, 590, 533, 564, 532, 583, 539, 567, 528, 588, 1666, 566, 1663, 580, 1648, 585, 537, 559, 537, 589, 533, 562, 560, 618, 478, 589, 535, 562, 1667, 565, 1662, 588, 531, 565, 531, 585, 537, 558, 536, 590, 1666, 566, 1661, 592, 530, 566, 530, 586, 1669, 564, 1664, 558, 1669, 594, 1662, 560, 
-46291, 4510, 4485, 563, 1663, 589, 
-97349, 4510, 4487, 561, 1666, 586, 
-97560, 4513, 4482, 566, 1662, 591, 
-97123, 4510, 4485, 563, 1664, 588, 
-97605, 4508, 4487, 561, 1666, 586, 
-97371, 4518, 4478, 560, 1668, 595, 
-97514, 4518, 4478, 560, 1667, 586, 
-97014, 4515, 4480, 568, 1660, 593, 
-96719, 4516, 4481, 567, 1660, 593, 
-97528, 4515, 4480, 568, 1659, 593, 
-97453, 4510, 4485, 563, 1665, 587, 
-97351, 4518, 4477, 561, 1668, 585, 
-97216, 4511, 4484, 564, 1664, 589, 
-97708, 4518, 4477, 561, 1667, 586, 
-96718, 4516, 4479, 559, 1669, 594, 
-97070, 4515, 4480, 568, 1660, 593, 
-97500, 4511, 4484, 564, 1662, 590, 
-97425, 4515, 4481, 567, 1660, 593, 
-97025, 4515, 4482, 566, 1660, 592, 
-96796, 4509, 4487, 561, 1666, 587, 
-97399, 4512, 4484, 565, 1662, 591, 
-97486, 4516, 4480, 567, 1658, 594, 
-97425, 4515, 4481, 567, 1659, 593, 
-97511, 4510, 4485, 563, 1664, 650, 
-96969, 4511, 4485, 562, 1665, 588, 
-97243, 4512, 4484, 564, 1663, 590, 
-97031, 4519, 4478, 560, 1666, 586, 
-97548, 4514, 4482, 566, 1661, 591, 
-97302, 4515, 4480, 568, 1659, 593, 
-97726, 4510, 4486, 562, 1665, 588, 
-97396, 4514, 4482, 566, 1661, 592, 
-97301, 4515, 4480, 568, 1661, 593, 
-97453, 4518, 4477, 560, 1667, 585, 
-97430, 4518, 4477, 561, 1665, 587, 
-97521, 4511, 4484, 564, 1664, 589, 
-97182, 4512, 4484, 564, 1663, 590, 
-97760, 4516, 4479, 559, 1668, 595, 
-97268, 4516, 4479, 559, 1668, 595, 
-97243, 4512, 4485, 563, 1663, 589, 
-97695, 4510, 4486, 562, 1664, 588, 
-374205, 4513, 4483, 565, 530, 586, 1669, 564, 1665, 589, 1667, 567, 529, 587, 535, 560, 535, 591, 531, 565, 530, 585, 1669, 563, 1664, 588, 1639, 593, 529, 566, 529, 587, 536, 560, 563, 565, 532, 585, 537, 560, 1669, 563, 1664, 587, 534, 561, 534, 592, 529, 566, 529, 586, 1668, 564, 1663, 589, 532, 563, 534, 593, 1661, 562, 1666, 566, 1662, 591, 1664, 558, 
-
-149343, 4512, 4483, 565, 530, 586, 1669, 563, 1664, 588, 1667, 565, 530, 586, 536, 560, 536, 590, 532, 563, 531, 586, 1670, 563, 1666, 567, 1660, 592, 530, 565, 529, 586, 537, 558, 563, 563, 532, 584, 538, 568, 1661, 561, 1665, 587, 535, 560, 535, 592, 532, 565, 531, 587, 1669, 563, 1665, 587, 534, 561, 534, 592, 1663, 559, 1668, 564, 1662, 590, 1666, 566, 
-
-116399, 4514, 4482, 566, 531, 587, 1669, 564, 1664, 589, 1666, 566, 529, 587, 535, 561, 535, 592, 531, 565, 529, 587, 1668, 564, 1664, 558, 1670, 595, 529, 566, 528, 589, 535, 560, 562, 565, 531, 585, 536, 559, 1668, 564, 1664, 589, 534, 561, 533, 593, 530, 565, 528, 588, 1668, 564, 1665, 590, 533, 564, 532, 594, 1661, 561, 1666, 566, 1661, 592, 1663, 558, 
-
-121946, 4517, 4478, 559, 537, 590, 1664, 568, 1660, 593, 1661, 560, 536, 590, 531, 564, 531, 585, 537, 559, 536, 590, 1665, 568, 1661, 561, 1666, 587, 537, 559, 529, 591, 531, 564, 558, 558, 537, 588, 533, 562, 1665, 567, 1659, 593, 530, 565, 529, 587, 536, 561, 535, 592, 1664, 559, 1671, 593, 530, 566, 528, 587, 1667, 565, 1662, 558, 1668, 595, 1660, 561, 
-46509, 4516, 4479, 558, 1668, 594, 
-
-88785, 4512, 4484, 564, 530, 585, 1669, 563, 1664, 588, 1666, 566, 530, 587, 536, 560, 535, 592, 532, 565, 531, 585, 1669, 563, 1665, 557, 1669, 594, 530, 566, 530, 586, 535, 560, 562, 564, 530, 585, 537, 558, 1669, 563, 1664, 589, 535, 561, 534, 593, 529, 566, 529, 586, 1668, 564, 1664, 589, 533, 562, 532, 594, 1661, 561, 1666, 565, 1662, 591, 1665, 558, 
-
-289651, 4512, 4483, 564, 531, 586, 1669, 563, 1665, 588, 1667, 565, 529, 587, 536, 560, 536, 590, 531, 563, 531, 584, 1670, 562, 1666, 556, 1671, 592, 529, 566, 531, 586, 536, 561, 562, 564, 532, 585, 537, 558, 1669, 563, 1665, 588, 535, 561, 536, 590, 530, 565, 531, 585, 1669, 563, 1664, 587, 534, 561, 533, 593, 1662, 561, 1669, 564, 1663, 590, 1665, 567, 
-46302, 4509, 4487, 561, 1667, 585, 
-
-97097, 4513, 4483, 565, 529, 587, 1668, 564, 1663, 589, 1666, 567, 529, 587, 536, 560, 535, 591, 530, 565, 529, 587, 1669, 563, 1664, 558, 1669, 594, 529, 566, 527, 587, 535, 561, 561, 563, 530, 586, 537, 560, 1669, 563, 1663, 589, 534, 561, 532, 594, 529, 566, 528, 587, 1668, 564, 1663, 589, 532, 563, 532, 594, 1660, 561, 1667, 566, 1661, 592, 1663, 558, 
-46311, 4510, 4485, 562, 1665, 589, 
-
-99001, 4514, 4481, 566, 528, 587, 1667, 565, 1662, 589, 1664, 568, 528, 588, 535, 561, 535, 593, 529, 567, 528, 589, 1668, 564, 1663, 559, 1668, 595, 528, 567, 527, 589, 534, 562, 561, 565, 530, 586, 536, 560, 1668, 564, 1663, 590, 533, 563, 532, 595, 524, 567, 527, 588, 1667, 565, 1662, 590, 532, 563, 531, 595, 1659, 562, 1666, 566, 1661, 593, 1664, 559, 
-
-300259, 4514, 4482, 556, 565, 561, 1668, 564, 1663, 589, 1664, 556, 539, 588, 535, 561, 535, 643, 478, 568, 530, 587, 1668, 564, 1664, 589, 1636, 594, 529, 567, 528, 588, 534, 561, 561, 565, 1662, 560, 536, 590, 532, 564, 531, 586, 537, 589, 532, 564, 533, 584, 538, 568, 528, 588, 1667, 565, 1662, 560, 1669, 584, 1670, 562, 1666, 587, 1641, 591, 1664, 559, 
-46271, 4561, 4435, 562, 1666, 586, 
-
-81421, 4514, 4482, 556, 565, 561, 1667, 565, 1662, 589, 1664, 558, 538, 588, 534, 562, 534, 593, 530, 567, 530, 587, 1669, 564, 1663, 589, 1637, 594, 529, 567, 528, 588, 534, 561, 560, 566, 1663, 559, 535, 591, 531, 565, 530, 587, 538, 589, 533, 563, 533, 583, 539, 567, 529, 587, 1667, 565, 1662, 560, 1669, 584, 1669, 563, 1666, 587, 1640, 592, 1663, 560, 
-46296, 4516, 4480, 558, 1669, 594, 
-
-80690, 4508, 4489, 560, 561, 565, 1663, 558, 1670, 593, 1660, 561, 534, 592, 530, 565, 530, 586, 537, 560, 536, 591, 1664, 558, 1670, 583, 1644, 587, 535, 560, 534, 592, 530, 566, 556, 559, 1669, 563, 532, 584, 538, 558, 537, 588, 534, 582, 540, 567, 530, 588, 535, 562, 535, 591, 1663, 559, 1669, 564, 1665, 588, 1666, 566, 1662, 560, 1668, 585, 1669, 563, 
-
-136483, 4511, 4485, 563, 531, 585, 1671, 561, 1666, 587, 1668, 564, 531, 585, 536, 559, 537, 589, 532, 563, 532, 584, 1670, 562, 1666, 587, 1642, 591, 531, 566, 531, 585, 536, 559, 563, 563, 1665, 567, 528, 588, 535, 561, 534, 593, 529, 567, 556, 560, 535, 591, 530, 565, 531, 585, 1670, 563, 1665, 568, 1660, 593, 1662, 560, 1668, 564, 1663, 590, 1666, 566, 
-
-129038, 4511, 4484, 564, 533, 583, 1670, 562, 1666, 587, 1668, 565, 532, 586, 537, 559, 536, 591, 532, 564, 532, 594, 1660, 562, 1666, 566, 1660, 593, 531, 565, 530, 586, 537, 558, 563, 563, 1664, 568, 528, 589, 535, 562, 533, 595, 530, 567, 556, 560, 535, 591, 531, 565, 531, 584, 1669, 563, 1664, 567, 1661, 592, 1662, 559, 1668, 564, 1663, 590, 1666, 566, 
-46187, 4511, 4486, 562, 1665, 589, 
-
-110663, 4517, 4478, 558, 536, 590, 1665, 568, 1660, 593, 1661, 560, 536, 590, 531, 564, 531, 584, 537, 558, 536, 590, 1665, 567, 1661, 561, 1666, 587, 536, 560, 535, 591, 532, 564, 559, 557, 1670, 562, 532, 594, 529, 567, 528, 649, 473, 561, 561, 565, 531, 585, 536, 559, 536, 589, 1665, 567, 1660, 562, 1666, 587, 1668, 564, 1663, 558, 1669, 594, 1661, 561, 
-
-143736, 4517, 4479, 559, 536, 591, 1664, 558, 1670, 593, 1661, 559, 536, 590, 531, 564, 531, 585, 536, 559, 537, 589, 1665, 567, 1661, 561, 1666, 587, 536, 560, 536, 590, 530, 564, 557, 558, 1669, 562, 533, 593, 528, 568, 530, 586, 534, 561, 560, 566, 530, 586, 536, 560, 536, 591, 1664, 558, 1671, 562, 1666, 587, 1667, 565, 1663, 559, 1668, 594, 1660, 562, 
-46234, 4514, 4482, 566, 1661, 591, 
-
-120661, 4564, 4432, 565, 530, 586, 1669, 563, 1665, 587, 1666, 566, 531, 585, 536, 559, 536, 591, 532, 564, 532, 586, 1670, 563, 1666, 557, 1666, 592, 530, 565, 530, 586, 536, 560, 562, 563, 1664, 558, 538, 588, 533, 562, 533, 593, 528, 558, 565, 561, 534, 582, 541, 566, 530, 586, 1670, 563, 1664, 567, 1660, 593, 1662, 560, 1668, 564, 1663, 590, 1665, 567, 
-46472, 4513, 4484, 564, 1664, 588, 
-
-125301, 4511, 4484, 564, 532, 584, 1670, 562, 1666, 587, 1668, 565, 531, 586, 537, 560, 537, 591, 532, 565, 533, 584, 1671, 562, 1666, 566, 1661, 591, 530, 565, 532, 584, 536, 559, 562, 564, 1665, 567, 529, 587, 534, 563, 535, 593, 529, 568, 556, 561, 535, 592, 531, 565, 531, 585, 1669, 563, 1665, 567, 1660, 593, 1663, 559, 1668, 564, 1664, 589, 1666, 567, 
-
-200253, 4517, 4479, 558, 562, 615, 1613, 558, 1670, 592, 1661, 560, 536, 591, 531, 616, 480, 585, 537, 559, 537, 641, 1613, 568, 1661, 582, 1646, 586, 536, 559, 535, 591, 532, 564, 558, 558, 1670, 562, 533, 592, 530, 566, 529, 588, 536, 581, 542, 617, 479, 587, 537, 560, 536, 590, 1665, 557, 1670, 562, 1666, 587, 1668, 564, 1664, 558, 1669, 593, 1662, 561, 
-46230, 4570, 4426, 561, 1667, 586, 
-
-115418, 4514, 4483, 565, 557, 561, 1669, 563, 1664, 589, 1666, 566, 529, 587, 534, 561, 534, 592, 530, 566, 530, 586, 1668, 564, 1664, 589, 1639, 594, 529, 567, 528, 587, 534, 561, 561, 565, 1663, 559, 535, 590, 532, 563, 532, 584, };
+    3129767, 4513, 4483,  565,  530,   586,  1670,  563,  1664,  588,  1666,  566,  530,   586,
+    535,     560,  535,   591,  531,   565,  531,   585,  1669,  563,  1666,  587,  1640,  593,
+    531,     566,  530,   587,  536,   559,  562,   564,  531,   585,  537,   558,  1670,  562,
+    1665,    587,  534,   561,  534,   592,  530,   566,  529,   587,  1668,  564,  1664,  589,
+    533,     563,  533,   594,  1661,  560,  1667,  565,  1661,  591,  1664,  558,  46325, 4517,
+    4480,    558,  1668,  595,
+
+    679127,  4511, 4485,  562,  532,   584,  1671,  561,  1666,  587,  1668,  564,  532,   585,
+    537,     559,  537,   589,  533,   562,  533,   593,  1661,  561,  1667,  586,  1642,  590,
+    532,     563,  531,   585,  537,   559,  564,   563,  1666,  567,  528,   588,  535,   613,
+    483,     593,  530,   586,  536,   559,  536,   590,  1637,  584,  537,   558,  1669,  594,
+    1661,    561,  1667,  586,  1642,  591,  1664,  559,  1670,  583,  534,   567,  46429, 4515,
+    4480,    558,  1671,  593,
+
+    618571,  4508, 4488,  560,  561,   566,  1663,  559,  1667,  583,  1670,  562,  534,   582,
+    540,     565,  531,   587,  536,   560,  536,   590,  1664,  558,  1670,  583,  1644,  588,
+    535,     561,  534,   592,  530,   566,  557,   610,  1616,  616,  479,   585,  537,   558,
+    537,     589,  534,   584,  539,   567,  529,   587,  534,   561,  534,   592,  1663,  559,
+    1668,    564,  1664,  588,  1666,  566,  1661,  581,  1646,  585,  1669,  563,  46106, 4511,
+    4485,    563,  1664,  589,
+
+    514897,  4514, 4482,  556,  564,   614,  1616,  565,  1664,  589,  1666,  557,  538,   588,
+    534,     562,  534,   592,  529,   566,  529,   587,  1667,  565,  1663,  590,  1638,  584,
+    538,     568,  527,   590,  534,   562,  562,   566,  530,   587,  1642,  590,  532,   563,
+    530,     586,  537,   589,  533,   563,  533,   583,  539,   566,  1661,  561,  561,   566,
+    1663,    559,  1668,  584,  1671,  563,  1666,  556,  1671,  591,  1663,  559,  46210, 4508,
+    4488,    560,  1668,  585,
+
+    683922,  4509, 4487,  561,  560,   565,  1662,  559,  1669,  585,  1670,  562,  534,   583,
+    540,     566,  529,   586,  535,   560,  535,   591,  1663,  559,  1669,  584,  1644,  588,
+    534,     561,  533,   593,  529,   556,  567,   561,  1668,  564,  1664,  590,  534,   563,
+    532,     584,  538,   557,  537,   589,  534,   562,  534,   593,  530,   566,  555,   561,
+    1667,    564,  1662,  589,  1665,  557,  1671,  581,  1647,  586,  1669,  564,  46686, 4514,
+    4481,    556,  1672,  592,
+
+    1088255, 4514, 4481,  557,  564,   562,  1667,  565,  1663,  591,  1665,  558,  538,   590,
+    533,     564,  532,   583,  539,   567,  528,   588,  1666,  566,  1663,  580,  1648,  585,
+    537,     559,  537,   589,  533,   562,  560,   618,  478,   589,  535,   562,  1667,  565,
+    1662,    588,  531,   565,  531,   585,  537,   558,  536,   590,  1666,  566,  1661,  592,
+    530,     566,  530,   586,  1669,  564,  1664,  558,  1669,  594,  1662,  560,  46291, 4510,
+    4485,    563,  1663,  589,  97349, 4510, 4487,  561,  1666,  586,  97560, 4513, 4482,  566,
+    1662,    591,  97123, 4510, 4485,  563,  1664,  588,  97605, 4508, 4487,  561,  1666,  586,
+    97371,   4518, 4478,  560,  1668,  595,  97514, 4518, 4478,  560,  1667,  586,  97014, 4515,
+    4480,    568,  1660,  593,  96719, 4516, 4481,  567,  1660,  593,  97528, 4515, 4480,  568,
+    1659,    593,  97453, 4510, 4485,  563,  1665,  587,  97351, 4518, 4477,  561,  1668,  585,
+    97216,   4511, 4484,  564,  1664,  589,  97708, 4518, 4477,  561,  1667,  586,  96718, 4516,
+    4479,    559,  1669,  594,  97070, 4515, 4480,  568,  1660,  593,  97500, 4511, 4484,  564,
+    1662,    590,  97425, 4515, 4481,  567,  1660,  593,  97025, 4515, 4482,  566,  1660,  592,
+    96796,   4509, 4487,  561,  1666,  587,  97399, 4512, 4484,  565,  1662,  591,  97486, 4516,
+    4480,    567,  1658,  594,  97425, 4515, 4481,  567,  1659,  593,  97511, 4510, 4485,  563,
+    1664,    650,  96969, 4511, 4485,  562,  1665,  588,  97243, 4512, 4484,  564,  1663,  590,
+    97031,   4519, 4478,  560,  1666,  586,  97548, 4514, 4482,  566,  1661,  591,  97302, 4515,
+    4480,    568,  1659,  593,  97726, 4510, 4486,  562,  1665,  588,  97396, 4514, 4482,  566,
+    1661,    592,  97301, 4515, 4480,  568,  1661,  593,  97453, 4518, 4477,  560,  1667,  585,
+    97430,   4518, 4477,  561,  1665,  587,  97521, 4511, 4484,  564,  1664,  589,  97182, 4512,
+    4484,    564,  1663,  590,  97760, 4516, 4479,  559,  1668,  595,  97268, 4516, 4479,  559,
+    1668,    595,  97243, 4512, 4485,  563,  1663,  589,  97695, 4510, 4486,  562,  1664,  588,
+    374205,  4513, 4483,  565,  530,   586,  1669,  564,  1665,  589,  1667,  567,  529,   587,
+    535,     560,  535,   591,  531,   565,  530,   585,  1669,  563,  1664,  588,  1639,  593,
+    529,     566,  529,   587,  536,   560,  563,   565,  532,   585,  537,   560,  1669,  563,
+    1664,    587,  534,   561,  534,   592,  529,   566,  529,   586,  1668,  564,  1663,  589,
+    532,     563,  534,   593,  1661,  562,  1666,  566,  1662,  591,  1664,  558,
+
+    149343,  4512, 4483,  565,  530,   586,  1669,  563,  1664,  588,  1667,  565,  530,   586,
+    536,     560,  536,   590,  532,   563,  531,   586,  1670,  563,  1666,  567,  1660,  592,
+    530,     565,  529,   586,  537,   558,  563,   563,  532,   584,  538,   568,  1661,  561,
+    1665,    587,  535,   560,  535,   592,  532,   565,  531,   587,  1669,  563,  1665,  587,
+    534,     561,  534,   592,  1663,  559,  1668,  564,  1662,  590,  1666,  566,
+
+    116399,  4514, 4482,  566,  531,   587,  1669,  564,  1664,  589,  1666,  566,  529,   587,
+    535,     561,  535,   592,  531,   565,  529,   587,  1668,  564,  1664,  558,  1670,  595,
+    529,     566,  528,   589,  535,   560,  562,   565,  531,   585,  536,   559,  1668,  564,
+    1664,    589,  534,   561,  533,   593,  530,   565,  528,   588,  1668,  564,  1665,  590,
+    533,     564,  532,   594,  1661,  561,  1666,  566,  1661,  592,  1663,  558,
+
+    121946,  4517, 4478,  559,  537,   590,  1664,  568,  1660,  593,  1661,  560,  536,   590,
+    531,     564,  531,   585,  537,   559,  536,   590,  1665,  568,  1661,  561,  1666,  587,
+    537,     559,  529,   591,  531,   564,  558,   558,  537,   588,  533,   562,  1665,  567,
+    1659,    593,  530,   565,  529,   587,  536,   561,  535,   592,  1664,  559,  1671,  593,
+    530,     566,  528,   587,  1667,  565,  1662,  558,  1668,  595,  1660,  561,  46509, 4516,
+    4479,    558,  1668,  594,
+
+    88785,   4512, 4484,  564,  530,   585,  1669,  563,  1664,  588,  1666,  566,  530,   587,
+    536,     560,  535,   592,  532,   565,  531,   585,  1669,  563,  1665,  557,  1669,  594,
+    530,     566,  530,   586,  535,   560,  562,   564,  530,   585,  537,   558,  1669,  563,
+    1664,    589,  535,   561,  534,   593,  529,   566,  529,   586,  1668,  564,  1664,  589,
+    533,     562,  532,   594,  1661,  561,  1666,  565,  1662,  591,  1665,  558,
+
+    289651,  4512, 4483,  564,  531,   586,  1669,  563,  1665,  588,  1667,  565,  529,   587,
+    536,     560,  536,   590,  531,   563,  531,   584,  1670,  562,  1666,  556,  1671,  592,
+    529,     566,  531,   586,  536,   561,  562,   564,  532,   585,  537,   558,  1669,  563,
+    1665,    588,  535,   561,  536,   590,  530,   565,  531,   585,  1669,  563,  1664,  587,
+    534,     561,  533,   593,  1662,  561,  1669,  564,  1663,  590,  1665,  567,  46302, 4509,
+    4487,    561,  1667,  585,
+
+    97097,   4513, 4483,  565,  529,   587,  1668,  564,  1663,  589,  1666,  567,  529,   587,
+    536,     560,  535,   591,  530,   565,  529,   587,  1669,  563,  1664,  558,  1669,  594,
+    529,     566,  527,   587,  535,   561,  561,   563,  530,   586,  537,   560,  1669,  563,
+    1663,    589,  534,   561,  532,   594,  529,   566,  528,   587,  1668,  564,  1663,  589,
+    532,     563,  532,   594,  1660,  561,  1667,  566,  1661,  592,  1663,  558,  46311, 4510,
+    4485,    562,  1665,  589,
+
+    99001,   4514, 4481,  566,  528,   587,  1667,  565,  1662,  589,  1664,  568,  528,   588,
+    535,     561,  535,   593,  529,   567,  528,   589,  1668,  564,  1663,  559,  1668,  595,
+    528,     567,  527,   589,  534,   562,  561,   565,  530,   586,  536,   560,  1668,  564,
+    1663,    590,  533,   563,  532,   595,  524,   567,  527,   588,  1667,  565,  1662,  590,
+    532,     563,  531,   595,  1659,  562,  1666,  566,  1661,  593,  1664,  559,
+
+    300259,  4514, 4482,  556,  565,   561,  1668,  564,  1663,  589,  1664,  556,  539,   588,
+    535,     561,  535,   643,  478,   568,  530,   587,  1668,  564,  1664,  589,  1636,  594,
+    529,     567,  528,   588,  534,   561,  561,   565,  1662,  560,  536,   590,  532,   564,
+    531,     586,  537,   589,  532,   564,  533,   584,  538,   568,  528,   588,  1667,  565,
+    1662,    560,  1669,  584,  1670,  562,  1666,  587,  1641,  591,  1664,  559,  46271, 4561,
+    4435,    562,  1666,  586,
+
+    81421,   4514, 4482,  556,  565,   561,  1667,  565,  1662,  589,  1664,  558,  538,   588,
+    534,     562,  534,   593,  530,   567,  530,   587,  1669,  564,  1663,  589,  1637,  594,
+    529,     567,  528,   588,  534,   561,  560,   566,  1663,  559,  535,   591,  531,   565,
+    530,     587,  538,   589,  533,   563,  533,   583,  539,   567,  529,   587,  1667,  565,
+    1662,    560,  1669,  584,  1669,  563,  1666,  587,  1640,  592,  1663,  560,  46296, 4516,
+    4480,    558,  1669,  594,
+
+    80690,   4508, 4489,  560,  561,   565,  1663,  558,  1670,  593,  1660,  561,  534,   592,
+    530,     565,  530,   586,  537,   560,  536,   591,  1664,  558,  1670,  583,  1644,  587,
+    535,     560,  534,   592,  530,   566,  556,   559,  1669,  563,  532,   584,  538,   558,
+    537,     588,  534,   582,  540,   567,  530,   588,  535,   562,  535,   591,  1663,  559,
+    1669,    564,  1665,  588,  1666,  566,  1662,  560,  1668,  585,  1669,  563,
+
+    136483,  4511, 4485,  563,  531,   585,  1671,  561,  1666,  587,  1668,  564,  531,   585,
+    536,     559,  537,   589,  532,   563,  532,   584,  1670,  562,  1666,  587,  1642,  591,
+    531,     566,  531,   585,  536,   559,  563,   563,  1665,  567,  528,   588,  535,   561,
+    534,     593,  529,   567,  556,   560,  535,   591,  530,   565,  531,   585,  1670,  563,
+    1665,    568,  1660,  593,  1662,  560,  1668,  564,  1663,  590,  1666,  566,
+
+    129038,  4511, 4484,  564,  533,   583,  1670,  562,  1666,  587,  1668,  565,  532,   586,
+    537,     559,  536,   591,  532,   564,  532,   594,  1660,  562,  1666,  566,  1660,  593,
+    531,     565,  530,   586,  537,   558,  563,   563,  1664,  568,  528,   589,  535,   562,
+    533,     595,  530,   567,  556,   560,  535,   591,  531,   565,  531,   584,  1669,  563,
+    1664,    567,  1661,  592,  1662,  559,  1668,  564,  1663,  590,  1666,  566,  46187, 4511,
+    4486,    562,  1665,  589,
+
+    110663,  4517, 4478,  558,  536,   590,  1665,  568,  1660,  593,  1661,  560,  536,   590,
+    531,     564,  531,   584,  537,   558,  536,   590,  1665,  567,  1661,  561,  1666,  587,
+    536,     560,  535,   591,  532,   564,  559,   557,  1670,  562,  532,   594,  529,   567,
+    528,     649,  473,   561,  561,   565,  531,   585,  536,   559,  536,   589,  1665,  567,
+    1660,    562,  1666,  587,  1668,  564,  1663,  558,  1669,  594,  1661,  561,
+
+    143736,  4517, 4479,  559,  536,   591,  1664,  558,  1670,  593,  1661,  559,  536,   590,
+    531,     564,  531,   585,  536,   559,  537,   589,  1665,  567,  1661,  561,  1666,  587,
+    536,     560,  536,   590,  530,   564,  557,   558,  1669,  562,  533,   593,  528,   568,
+    530,     586,  534,   561,  560,   566,  530,   586,  536,   560,  536,   591,  1664,  558,
+    1671,    562,  1666,  587,  1667,  565,  1663,  559,  1668,  594,  1660,  562,  46234, 4514,
+    4482,    566,  1661,  591,
+
+    120661,  4564, 4432,  565,  530,   586,  1669,  563,  1665,  587,  1666,  566,  531,   585,
+    536,     559,  536,   591,  532,   564,  532,   586,  1670,  563,  1666,  557,  1666,  592,
+    530,     565,  530,   586,  536,   560,  562,   563,  1664,  558,  538,   588,  533,   562,
+    533,     593,  528,   558,  565,   561,  534,   582,  541,   566,  530,   586,  1670,  563,
+    1664,    567,  1660,  593,  1662,  560,  1668,  564,  1663,  590,  1665,  567,  46472, 4513,
+    4484,    564,  1664,  588,
+
+    125301,  4511, 4484,  564,  532,   584,  1670,  562,  1666,  587,  1668,  565,  531,   586,
+    537,     560,  537,   591,  532,   565,  533,   584,  1671,  562,  1666,  566,  1661,  591,
+    530,     565,  532,   584,  536,   559,  562,   564,  1665,  567,  529,   587,  534,   563,
+    535,     593,  529,   568,  556,   561,  535,   592,  531,   565,  531,   585,  1669,  563,
+    1665,    567,  1660,  593,  1663,  559,  1668,  564,  1664,  589,  1666,  567,
+
+    200253,  4517, 4479,  558,  562,   615,  1613,  558,  1670,  592,  1661,  560,  536,   591,
+    531,     616,  480,   585,  537,   559,  537,   641,  1613,  568,  1661,  582,  1646,  586,
+    536,     559,  535,   591,  532,   564,  558,   558,  1670,  562,  533,   592,  530,   566,
+    529,     588,  536,   581,  542,   617,  479,   587,  537,   560,  536,   590,  1665,  557,
+    1670,    562,  1666,  587,  1668,  564,  1664,  558,  1669,  593,  1662,  561,  46230, 4570,
+    4426,    561,  1667,  586,
+
+    115418,  4514, 4483,  565,  557,   561,  1669,  563,  1664,  589,  1666,  566,  529,   587,
+    534,     561,  534,   592,  530,   566,  530,   586,  1668,  564,  1664,  589,  1639,  594,
+    529,     567,  528,   587,  534,   561,  561,   565,  1663,  559,  535,   590,  532,   563,
+    532,     584,
+};
 
 const IrdaMessage test_samsung32_expected1[] = {
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x81, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x81,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x02, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x02,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x03, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x03,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01,  true},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01, false},
-    {IrdaProtocolSamsung32, 0x0E, 0x01,  true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x81, false}, {IrdaProtocolSamsung32, 0x0E, 0x81, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x02, false}, {IrdaProtocolSamsung32, 0x0E, 0x02, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x03, false}, {IrdaProtocolSamsung32, 0x0E, 0x03, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, true},  {IrdaProtocolSamsung32, 0x0E, 0x01, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, true},  {IrdaProtocolSamsung32, 0x0E, 0x01, false},
+    {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true},
 };