getprop("ro.product.device") == "gauguin" || abort("E3004: This package is for \"gauguin\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.4.0.RJSTRXM:user/release-keys");
ui_print("Target: Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.5.0.RJSTRXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.4.0.RJSTRXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.5.0.RJSTRXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.4.0.RJSTRXM:user/release-keys or Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.5.0.RJSTRXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:b44bde2515bbc1088c74490757d206b133b5e8e8"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9bf9e75b6c194192558df42340a32c7ac0d4847b")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:b44bde2515bbc1088c74490757d206b133b5e8e8"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9bf9e75b6c194192558df42340a32c7ac0d4847b"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "16,1,33,44,54,56,60,88,89,105,655373,655377,688129,688145,694333,696434,707463") == "d8d63be232cb5d9d812d8e944417222e7acfb734" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "16,1,33,44,54,56,60,88,89,105,655373,655377,688129,688145,694333,696434,707463") && block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1(map_partition("vendor"), "8,1,360460,360468,361704,362796,368548,368633,368634") == "e18346628d5d98f738d853152f05b219575fe6d2" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "8,1,360460,360468,361704,362796,368548,368633,368634") && block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;
if (range_sha1(map_partition("product"), "78,1,16,3863,3864,4442,4443,6214,6218,6314,6315,8950,8953,8961,8962,9001,9002,17184,17185,25172,25174,25304,25309,26587,26588,27263,27267,28233,28234,29570,29571,29972,29973,31272,31273,31635,31639,32158,32159,32171,32175,32179,32180,32768,32777,41360,41361,45276,45280,45311,45313,45606,45609,49409,49410,59252,59253,65536,65543,68803,68810,70286,70287,75676,75677,87174,87175,87400,87401,87799,87800,88301,262145,262151,287075,287936,292502,292572,292573") == "8c56db942e97db5c3641243958a793af80de4f04" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "78,1,16,3863,3864,4442,4443,6214,6218,6314,6315,8950,8953,8961,8962,9001,9002,17184,17185,25172,25174,25304,25309,26587,26588,27263,27267,28233,28234,29570,29571,29972,29973,31272,31273,31635,31639,32158,32159,32171,32175,32179,32180,32768,32777,41360,41361,45276,45280,45311,45313,45606,45609,49409,49410,59252,59253,65536,65543,68803,68810,70286,70287,75676,75677,87174,87175,87400,87401,87799,87800,88301,262145,262151,287075,287936,292502,292572,292573") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "12,1,12,13,16,24,244,246,247,249,255,274,275") == "f8460d1be0221e143d22b0361257dae523830afd" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "12,1,12,13,16,24,244,246,247,249,255,274,275") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "8,1,98324,98327,113575,113916,115723,115763,115764") == "9586c393db8f4822ad15ce6064a90f17b47a0845" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "8,1,98324,98327,113575,113916,115723,115763,115764") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

# ---- start making changes here ----


# ---- radio update tasks ----

ui_print("Patching firmware images...");
package_extract_file("firmware-update/abl_ecc.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl_ecc.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- Start patching dynamic partitions ---


# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:b44bde2515bbc1088c74490757d206b133b5e8e8"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9bf9e75b6c194192558df42340a32c7ac0d4847b"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9bf9e75b6c194192558df42340a32c7ac0d4847b")));

# ---- radio update tasks 2 ----

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
set_progress(1.000000);
