getprop("ro.product.device") == "platina" || abort("E3004: This package is for \"platina\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.1.0.QDTCNXM:user/release-keys");
ui_print("Target: Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.2.0.QDTCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.1.0.QDTCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.2.0.QDTCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.1.0.QDTCNXM:user/release-keys or Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.2.0.QDTCNXM: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:35366218:70e313506f706e92c9274a28889fa5bfef66c76d",
                      "EMMC:/dev/block/bootdevice/by-name/boot:35366218:d0b10bd7d5e8e9ecef82c335f8eeb1ab83aab2ed") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:35366218:70e313506f706e92c9274a28889fa5bfef66c76d\" or \"EMMC:/dev/block/bootdevice/by-name/boot:35366218:d0b10bd7d5e8e9ecef82c335f8eeb1ab83aab2ed\" has unexpected contents.");
apply_patch_space(110948352) || 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/cmnlib:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:48a94edb1ea0938b4440b2d758164e206d227e49") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:48a94edb1ea0938b4440b2d758164e206d227e49\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:48a94edb1ea0938b4440b2d758164e206d227e49") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:48a94edb1ea0938b4440b2d758164e206d227e49\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:117720576:1eb9e1c7fdc0b01f2d59e38985d524736fd2c411",
                      "EMMC:/dev/block/bootdevice/by-name/modem:117720576:783fad176540a86dd4209087e98a4a416b5caa6e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:1eb9e1c7fdc0b01f2d59e38985d524736fd2c411\" or \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:783fad176540a86dd4209087e98a4a416b5caa6e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:31b8279d9b3fdf9c85b9a218a588890b16d01dc3",
                      "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:ef3eb455f5da72b0b60cf329a361e8a434133d87") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:31b8279d9b3fdf9c85b9a218a588890b16d01dc3\" or \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:ef3eb455f5da72b0b60cf329a361e8a434133d87\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:2744848:1c489116347868ad4279dfae289dcb48141c8a1e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:2744848:1c489116347868ad4279dfae289dcb48141c8a1e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:1c489116347868ad4279dfae289dcb48141c8a1e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:1c489116347868ad4279dfae289dcb48141c8a1e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmic:39896:9ec09059e7bccd61ce886471922a6c9787d63a97",
                      "EMMC:/dev/block/bootdevice/by-name/pmic:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:9ec09059e7bccd61ce886471922a6c9787d63a97\" or \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:9ec09059e7bccd61ce886471922a6c9787d63a97",
                      "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:9ec09059e7bccd61ce886471922a6c9787d63a97\" or \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:d042f7133f7502494d41f2238bfa6683b39d9c31") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:d042f7133f7502494d41f2238bfa6683b39d9c31\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:d042f7133f7502494d41f2238bfa6683b39d9c31") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:d042f7133f7502494d41f2238bfa6683b39d9c31\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:278528:79b8260321b61afb4e9643c80f86cb9470311643",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:79b8260321b61afb4e9643c80f86cb9470311643\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:79b8260321b61afb4e9643c80f86cb9470311643",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:79b8260321b61afb4e9643c80f86cb9470311643\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a",
                      "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a\" or \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3\" has unexpected contents.");
apply_patch_space(117720576) || 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", "156,1,518,698,712,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,2550,2693,2999,3158,3645,3676,3678,3679,3683,3684,3692,3693,3694,3695,4312,4435,6180,6225,7234,7279,8546,8576,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,20324,21794,23616,25000,25567,25569,26940,28804,31312,32770,32959,32960,33466,34026,34726,34727,34729,34731,34790,34791,34924,34926,35156,35157,35225,35241,35311,35312,35321,42641,42923,65537,66043,98306,98495,98496,99002,131073,131579,136007,136535,163842,164031,164032,164538,196609,197115,201519,202311,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,720897,721403,734356,753664,753665,774155,780254,780261,780714") == "592b8101f96706d2c379fd567c9940a533e1a45f" || 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", "156,1,518,698,712,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,2550,2693,2999,3158,3645,3676,3678,3679,3683,3684,3692,3693,3694,3695,4312,4435,6180,6225,7234,7279,8546,8576,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,20324,21794,23616,25000,25567,25569,26940,28804,31312,32770,32959,32960,33466,34026,34726,34727,34729,34731,34790,34791,34924,34926,35156,35157,35225,35241,35311,35312,35321,42641,42923,65537,66043,98306,98495,98496,99002,131073,131579,136007,136535,163842,164031,164032,164538,196609,197115,201519,202311,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,720897,721403,734356,753664,753665,774155,780254,780261,780714") && 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", "76,1,440,698,706,716,717,798,799,863,864,866,867,869,880,885,886,888,889,915,921,1147,1173,1361,1411,1503,1504,1551,1591,2121,2869,4067,4068,4193,4256,4962,4963,5640,5641,6569,6574,27978,27979,29168,29169,32768,32770,32959,32960,36807,36808,39404,65537,66043,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,216893,229376,229378,294912,294914,753664,753665,774155,780254,780261,780622") == "261c17426fa73b023ab8d90e49c6c08a53fb75a2" || 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", "76,1,440,698,706,716,717,798,799,863,864,866,867,869,880,885,886,888,889,915,921,1147,1173,1361,1411,1503,1504,1551,1591,2121,2869,4067,4068,4193,4256,4962,4963,5640,5641,6569,6574,27978,27979,29168,29169,32768,32770,32959,32960,36807,36808,39404,65537,66043,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,216893,229376,229378,294912,294914,753664,753665,774155,780254,780261,780622") && 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 ----


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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:48a94edb1ea0938b4440b2d758164e206d227e49",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:48a94edb1ea0938b4440b2d758164e206d227e49");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:1eb9e1c7fdc0b01f2d59e38985d524736fd2c411",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:783fad176540a86dd4209087e98a4a416b5caa6e",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:783fad176540a86dd4209087e98a4a416b5caa6e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:31b8279d9b3fdf9c85b9a218a588890b16d01dc3",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:ef3eb455f5da72b0b60cf329a361e8a434133d87",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:ef3eb455f5da72b0b60cf329a361e8a434133d87");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744848:1c489116347868ad4279dfae289dcb48141c8a1e",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744848:1c489116347868ad4279dfae289dcb48141c8a1e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:9ec09059e7bccd61ce886471922a6c9787d63a97",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495",
                "EMMC:/dev/block/bootdevice/by-name/tz:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:d042f7133f7502494d41f2238bfa6683b39d9c31",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:d042f7133f7502494d41f2238bfa6683b39d9c31");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:79b8260321b61afb4e9643c80f86cb9470311643",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:48a94edb1ea0938b4440b2d758164e206d227e49",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:48a94edb1ea0938b4440b2d758164e206d227e49");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:1c489116347868ad4279dfae289dcb48141c8a1e",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:1c489116347868ad4279dfae289dcb48141c8a1e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:9ec09059e7bccd61ce886471922a6c9787d63a97",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:d042f7133f7502494d41f2238bfa6683b39d9c31",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:d042f7133f7502494d41f2238bfa6683b39d9c31");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:79b8260321b61afb4e9643c80f86cb9470311643",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:35366218:70e313506f706e92c9274a28889fa5bfef66c76d",
                "EMMC:/dev/block/bootdevice/by-name/boot:35366218:d0b10bd7d5e8e9ecef82c335f8eeb1ab83aab2ed",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:35366218:d0b10bd7d5e8e9ecef82c335f8eeb1ab83aab2ed");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:48a94edb1ea0938b4440b2d758164e206d227e49",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:48a94edb1ea0938b4440b2d758164e206d227e49");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:1eb9e1c7fdc0b01f2d59e38985d524736fd2c411",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:783fad176540a86dd4209087e98a4a416b5caa6e",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:783fad176540a86dd4209087e98a4a416b5caa6e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:31b8279d9b3fdf9c85b9a218a588890b16d01dc3",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:ef3eb455f5da72b0b60cf329a361e8a434133d87",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:ef3eb455f5da72b0b60cf329a361e8a434133d87");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744848:1c489116347868ad4279dfae289dcb48141c8a1e",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744848:1c489116347868ad4279dfae289dcb48141c8a1e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:9ec09059e7bccd61ce886471922a6c9787d63a97",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495",
                "EMMC:/dev/block/bootdevice/by-name/tz:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:d042f7133f7502494d41f2238bfa6683b39d9c31",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:d042f7133f7502494d41f2238bfa6683b39d9c31");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:79b8260321b61afb4e9643c80f86cb9470311643",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:9f9fa30a3b5308a5d61b5696ee4eb7da70e905f3",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:48a94edb1ea0938b4440b2d758164e206d227e49",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:48a94edb1ea0938b4440b2d758164e206d227e49");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:bbaa12cddeddd6a2d0b8fb405e7193d3c9545d39",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:e316fb2ca1174fcb7c75aea43a66b2fb3a9bd977");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:85e4fc19cee430fcc6e7d4e18b8593ff714312af",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:4d9bbdf74c2388d69964f1c60ab03983379c7b73");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7cf70db49feeece73fcc8f4292e0f698c2d20fad",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:1c489116347868ad4279dfae289dcb48141c8a1e",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:1c489116347868ad4279dfae289dcb48141c8a1e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:9ec09059e7bccd61ce886471922a6c9787d63a97",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:abdf5e5f2ae82b3b8ce053e8b8a4553c1db97a8e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:340dd654e85a27f25fa7c22a8ccb832e2db82495",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:a17d465c33b021681f3f45cc57ec6c46526db7ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:cd0e94f9a59cbd0328c68e27bd5cacc6430fd50b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:d042f7133f7502494d41f2238bfa6683b39d9c31",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:d042f7133f7502494d41f2238bfa6683b39d9c31");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:79b8260321b61afb4e9643c80f86cb9470311643",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:3e7b14978d5dd68be95c181cc6dcc398c1117c94");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:95a2854ae1db433692ba640c7029f0eadbf4b6db",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:0da7de558d2cd5e7ec03726911d9989ddb0ce936");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:ec1a61f6dbe49e3b693e2eb20de76fb96d4f0d8a",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:51961c4c7d3ea0618ba9bbe25af2be6754d90148");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8971cce8f1cf4fd1b1dadec1f8ebac3bdf429fb3");
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...");
