getprop("ro.product.device") == "olivelite" || abort("E3004: This package is for \"olivelite\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPIDXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPIDXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPIDXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 10);
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/boot:33554432:7e4139d2ce5ed7eb6d70eaf0e4603eae7939df46",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:f705ddc700b7fc282f9333ec86d0243d4c717f82") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:7e4139d2ce5ed7eb6d70eaf0e4603eae7939df46\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:f705ddc700b7fc282f9333ec86d0243d4c717f82\" has unexpected contents.");
apply_patch_space(158158848) || abort("E3006: Not enough free space on /cache to apply patches.");

# ---- radio update verification ----

ui_print("Verifying radio-update...");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:169092:de252e218dbcd23f929c6443383729d051e3f6d8",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:2100d400f882eecffbb00094072c4f375517bfcf") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:de252e218dbcd23f929c6443383729d051e3f6d8\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:2100d400f882eecffbb00094072c4f375517bfcf\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:de252e218dbcd23f929c6443383729d051e3f6d8",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:2100d400f882eecffbb00094072c4f375517bfcf") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:de252e218dbcd23f929c6443383729d051e3f6d8\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:2100d400f882eecffbb00094072c4f375517bfcf\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cb61f034c4271ee999da56e1875e8963c233181e",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cb61f034c4271ee999da56e1875e8963c233181e\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cb61f034c4271ee999da56e1875e8963c233181e",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cb61f034c4271ee999da56e1875e8963c233181e\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:a6043b17025d3934b07b5c18978ac1ac66105780",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:af6fe88cff5f004c84c8539d1758fc92dadb61fb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:a6043b17025d3934b07b5c18978ac1ac66105780\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:af6fe88cff5f004c84c8539d1758fc92dadb61fb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4929a6442c96a3e972f54960177d1907acd2fe69",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4929a6442c96a3e972f54960177d1907acd2fe69\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4929a6442c96a3e972f54960177d1907acd2fe69",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4929a6442c96a3e972f54960177d1907acd2fe69\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:cc397070e75ede4d505ec34992a39374fd6b827d",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:5ec0b05ca1e793b030f8e721967ad12389ca8277") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:cc397070e75ede4d505ec34992a39374fd6b827d\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:5ec0b05ca1e793b030f8e721967ad12389ca8277\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ded29c3ee22f2ff9642d214e42033aca3e123242",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ded29c3ee22f2ff9642d214e42033aca3e123242\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ded29c3ee22f2ff9642d214e42033aca3e123242",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ded29c3ee22f2ff9642d214e42033aca3e123242\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:5cab0e98553509d671407657df90547049e2d382") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:5cab0e98553509d671407657df90547049e2d382\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5cab0e98553509d671407657df90547049e2d382") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5cab0e98553509d671407657df90547049e2d382\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc931d042364a26c10dfac317acf3a5380a30f5d",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dbe0558f2f336c233df139a62b3d6c1b31637068") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc931d042364a26c10dfac317acf3a5380a30f5d\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:dbe0558f2f336c233df139a62b3d6c1b31637068\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3f185431987322f8bbef5680a4658a421ff76e14",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:365a95f2c709c3a3b72ddaa3effea1ab8bc553ff") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3f185431987322f8bbef5680a4658a421ff76e14\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:365a95f2c709c3a3b72ddaa3effea1ab8bc553ff\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4b3dca6d391ad93d772dca3b83fae82309da313a",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c36f7de08e6cfa72bf98ad5f3ec112c1558ae5c1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4b3dca6d391ad93d772dca3b83fae82309da313a\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c36f7de08e6cfa72bf98ad5f3ec112c1558ae5c1\" has unexpected contents.");
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1("/dev/block/bootdevice/by-name/system", "152,1,624,759,773,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,1998,2040,2086,2101,2125,2231,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,3085,3170,4203,4299,5423,5449,6468,6502,7008,7009,7011,7012,7296,7297,7299,7300,7863,7865,13804,13805,13938,13939,16708,16710,22982,22983,22985,22987,23046,23047,23180,32770,33021,33022,33527,58646,61418,65537,66042,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,262145,262650,294914,295165,295166,295671,327681,328186,346896,346933,360449,360954,371959,371961,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819453,819454,819959,851969,852474,884738,884989,884990,885495,887685,1015808,1015809,1032011,1048363,1048575,1048576") == "61a6ad7f4e3197819cc3ba0fcf5317d47ef7f5d9" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "152,1,624,759,773,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,1998,2040,2086,2101,2125,2231,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,3085,3170,4203,4299,5423,5449,6468,6502,7008,7009,7011,7012,7296,7297,7299,7300,7863,7865,13804,13805,13938,13939,16708,16710,22982,22983,22985,22987,23046,23047,23180,32770,33021,33022,33527,58646,61418,65537,66042,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,262145,262650,294914,295165,295166,295671,327681,328186,346896,346933,360449,360954,371959,371961,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819453,819454,819959,851969,852474,884738,884989,884990,885495,887685,1015808,1015809,1032011,1048363,1048575,1048576") && block_image_verify("/dev/block/bootdevice/by-name/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("/dev/block/bootdevice/by-name/vendor", "30,1,457,570,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,229378,229440,229441,229946,230964,257987,262077,262143,262144") == "5122ace167a3ac02e02097c5ee8e2c5abb8573e8" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "30,1,457,570,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,229378,229440,229441,229946,230964,257987,262077,262143,262144") && block_image_verify("/dev/block/bootdevice/by-name/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;

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

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:7e4139d2ce5ed7eb6d70eaf0e4603eae7939df46",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:f705ddc700b7fc282f9333ec86d0243d4c717f82",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:f705ddc700b7fc282f9333ec86d0243d4c717f82");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:de252e218dbcd23f929c6443383729d051e3f6d8",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:2100d400f882eecffbb00094072c4f375517bfcf",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:2100d400f882eecffbb00094072c4f375517bfcf");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cb61f034c4271ee999da56e1875e8963c233181e",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:a6043b17025d3934b07b5c18978ac1ac66105780",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:af6fe88cff5f004c84c8539d1758fc92dadb61fb",
                package_extract_file("patch/firmware-update/cmnlib64_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:af6fe88cff5f004c84c8539d1758fc92dadb61fb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4929a6442c96a3e972f54960177d1907acd2fe69",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:cc397070e75ede4d505ec34992a39374fd6b827d",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:5ec0b05ca1e793b030f8e721967ad12389ca8277",
                package_extract_file("patch/firmware-update/cmnlib_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:5ec0b05ca1e793b030f8e721967ad12389ca8277");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ded29c3ee22f2ff9642d214e42033aca3e123242",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:5cab0e98553509d671407657df90547049e2d382",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:5cab0e98553509d671407657df90547049e2d382");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc931d042364a26c10dfac317acf3a5380a30f5d",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dbe0558f2f336c233df139a62b3d6c1b31637068",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:134217728:dbe0558f2f336c233df139a62b3d6c1b31637068");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:de252e218dbcd23f929c6443383729d051e3f6d8",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:2100d400f882eecffbb00094072c4f375517bfcf",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:2100d400f882eecffbb00094072c4f375517bfcf");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cb61f034c4271ee999da56e1875e8963c233181e",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:357edcdcabb6cca00b137425dce0039ca5ec52d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:779468:bcd2f804d30b34a7ac86a4101532729c48bc30a9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4929a6442c96a3e972f54960177d1907acd2fe69",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:c8eb3a3c6881e1669d45d94c67a32e88fd68fb8a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ded29c3ee22f2ff9642d214e42033aca3e123242",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:22a295c6934f06efa9b906ce1c0aa6d8ff7df5a0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5cab0e98553509d671407657df90547049e2d382",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5cab0e98553509d671407657df90547049e2d382");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 2);

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3f185431987322f8bbef5680a4658a421ff76e14",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:365a95f2c709c3a3b72ddaa3effea1ab8bc553ff",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:365a95f2c709c3a3b72ddaa3effea1ab8bc553ff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4b3dca6d391ad93d772dca3b83fae82309da313a",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c36f7de08e6cfa72bf98ad5f3ec112c1558ae5c1",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c36f7de08e6cfa72bf98ad5f3ec112c1558ae5c1");
