Fix to work with new universal binaries

New ones split the last RP2040 block after all the RP2350 blocks to prevent Windows errors, so fix build_rmap_uf2 to handle that
diff --git a/main.cpp b/main.cpp
index bf0765f..4ec3119 100644
--- a/main.cpp
+++ b/main.cpp
@@ -3306,12 +3306,32 @@
     uf2_block block;
     unsigned int pos = 0;
     uint32_t next_family_id = 0;
+    vector<uint32_t> family_ids = {};
     do {
         file->read((char*)&block, sizeof(uf2_block));
         if (file->fail()) {
             if (file->eof()) { file->clear(); break; }
             fail(ERROR_READ_FAILED, "unexpected end of input file");
         }
+        if(
+            std::find(family_ids.begin(), family_ids.end(), block.file_size) == family_ids.end()
+    #if SUPPORT_RP2350_A2
+            && !check_abs_block(block)
+    #endif
+        ) {
+            // new family ID found
+            family_ids.push_back(block.file_size);
+            DEBUG_LOG("New family ID %s\n", family_name(block.file_size).c_str());
+            if (
+                std::find(family_ids.begin(), family_ids.end(), family_id) != family_ids.end()
+                && std::find(family_ids.begin(), family_ids.end(), family_id) + 1 == std::find(family_ids.begin(), family_ids.end(), block.file_size)
+            ) {
+                DEBUG_LOG("This is next family ID %s\n", family_name(block.file_size).c_str());
+                next_family_id = block.file_size;
+            } else if (block.file_size == family_id) {
+                DEBUG_LOG("This is selected family ID %s\n", family_name(block.file_size).c_str());
+            }
+        }
         if (block.magic_start0 == UF2_MAGIC_START0 && block.magic_start1 == UF2_MAGIC_START1 &&
             block.magic_end == UF2_MAGIC_END) {
             if (block.flags & UF2_FLAG_FAMILY_ID_PRESENT &&
@@ -3325,20 +3345,10 @@
                 } else {
                     rmap.insert(range(block.target_addr, block.target_addr + PAGE_SIZE), pos + offsetof(uf2_block, data[0]));
                     family_id = block.file_size;
-                    next_family_id = 0;
                 }
                 #else
                 rmap.insert(range(block.target_addr, block.target_addr + PAGE_SIZE), pos + offsetof(uf2_block, data[0]));
                 family_id = block.file_size;
-                next_family_id = 0;
-                #endif
-            } else if (block.file_size != family_id && family_id && !next_family_id) {
-                #if SUPPORT_RP2350_A2
-                if (!check_abs_block(block)) {
-                #endif
-                    next_family_id = block.file_size;
-                #if SUPPORT_RP2350_A2
-                }
                 #endif
             }
         }