getprop("ro.product.device") == "ginkgo" || abort("E3004: This package is for \"ginkgo\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: xiaomi/ginkgo_eea/ginkgo:10/QKQ1.200114.002/V12.0.1.0.QCOEUXM:user/release-keys");
ui_print("Target: xiaomi/ginkgo_eea/ginkgo:10/QKQ1.200114.002/V12.0.2.0.QCOEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "xiaomi/ginkgo_eea/ginkgo:10/QKQ1.200114.002/V12.0.1.0.QCOEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "xiaomi/ginkgo_eea/ginkgo:10/QKQ1.200114.002/V12.0.2.0.QCOEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of xiaomi/ginkgo_eea/ginkgo:10/QKQ1.200114.002/V12.0.1.0.QCOEUXM:user/release-keys or xiaomi/ginkgo_eea/ginkgo:10/QKQ1.200114.002/V12.0.2.0.QCOEUXM: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:67108864:95cc31b8a85f4b3e87fa272c50aad455e7707423",
                      "EMMC:/dev/block/bootdevice/by-name/boot:67108864:8ac1af328b40fae8557be8d75352a2dbaa35b078") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:95cc31b8a85f4b3e87fa272c50aad455e7707423\" or \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:8ac1af328b40fae8557be8d75352a2dbaa35b078\" has unexpected contents.");
apply_patch_space(119877632) || 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/uefisecapp:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185",
                      "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:c94116cf790db48962dbd3f9456d4ea0960421ff") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185\" or \"EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:c94116cf790db48962dbd3f9456d4ea0960421ff\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185",
                      "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:c94116cf790db48962dbd3f9456d4ea0960421ff") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185\" or \"EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:c94116cf790db48962dbd3f9456d4ea0960421ff\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:f93954b34616c7e26e591894a0637064d2c06881") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:f93954b34616c7e26e591894a0637064d2c06881\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:f93954b34616c7e26e591894a0637064d2c06881") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:f93954b34616c7e26e591894a0637064d2c06881\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:223724:44175452bb5289a947dba47084a1128c925bfde1",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:223724:44175452bb5289a947dba47084a1128c925bfde1\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:44175452bb5289a947dba47084a1128c925bfde1",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:44175452bb5289a947dba47084a1128c925bfde1\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:121767424:bb19009b4a26c5c4e3f2e573730529f6ab7b98c3",
                      "EMMC:/dev/block/bootdevice/by-name/modem:121538048:8388548c7de16039af8a67df2e017675f02446ae") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:121767424:bb19009b4a26c5c4e3f2e573730529f6ab7b98c3\" or \"EMMC:/dev/block/bootdevice/by-name/modem:121538048:8388548c7de16039af8a67df2e017675f02446ae\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:fcac3979255eac89e693de3c1e9bbe5a2757b7d5",
                      "EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:387775e03ea9a11d82a7f1253fe471af863d58aa") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:fcac3979255eac89e693de3c1e9bbe5a2757b7d5\" or \"EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:387775e03ea9a11d82a7f1253fe471af863d58aa\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:c1f5098731fd46eac2a2640413e57f0567e026f3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:238037:c1f5098731fd46eac2a2640413e57f0567e026f3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:c1f5098731fd46eac2a2640413e57f0567e026f3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:c1f5098731fd46eac2a2640413e57f0567e026f3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:77a74b0e1dad59a14da202676000cecc06027d12",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:3528392:77a74b0e1dad59a14da202676000cecc06027d12\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:77a74b0e1dad59a14da202676000cecc06027d12",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:77a74b0e1dad59a14da202676000cecc06027d12\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a",
                      "EMMC:/dev/block/bootdevice/by-name/tz:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a\" or \"EMMC:/dev/block/bootdevice/by-name/tz:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:369800:d902c06d505e96149ac3c078baf145dd6b208eec",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:369800:d902c06d505e96149ac3c078baf145dd6b208eec\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:d902c06d505e96149ac3c078baf145dd6b208eec",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:369800:d902c06d505e96149ac3c078baf145dd6b208eec\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:0aacd6f405fce109fc7bf06f45897326fbefebab",
                      "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:8da284d91d5ac890d3e6a021563f9a358e661d61") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/imagefv:20480:0aacd6f405fce109fc7bf06f45897326fbefebab\" or \"EMMC:/dev/block/bootdevice/by-name/imagefv:20480:8da284d91d5ac890d3e6a021563f9a358e661d61\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:0aacd6f405fce109fc7bf06f45897326fbefebab",
                      "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:8da284d91d5ac890d3e6a021563f9a358e661d61") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:0aacd6f405fce109fc7bf06f45897326fbefebab\" or \"EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:8da284d91d5ac890d3e6a021563f9a358e661d61\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:20477:7105065cf66176ca1d8febd3491951c038f85aae",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:20477:68d23a355b387ff46d176efd0086fc33e405351c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:20477:7105065cf66176ca1d8febd3491951c038f85aae\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:20477:68d23a355b387ff46d176efd0086fc33e405351c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75",
                      "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:021babea4b09143d72420b894a7d07940752c66c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/qupfw:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75\" or \"EMMC:/dev/block/bootdevice/by-name/qupfw:49203:021babea4b09143d72420b894a7d07940752c66c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75",
                      "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:021babea4b09143d72420b894a7d07940752c66c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75\" or \"EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:021babea4b09143d72420b894a7d07940752c66c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:fa0ffbb28839871e1be30f1e799d118058e3e930") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:fa0ffbb28839871e1be30f1e799d118058e3e930\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:fa0ffbb28839871e1be30f1e799d118058e3e930") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:fa0ffbb28839871e1be30f1e799d118058e3e930\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9",
                      "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9\" or \"EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9",
                      "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9\" or \"EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:ab31a50a70abca8fa3e67f1e9622b6a9bae83ce6",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6d29a18b5df1aee2f911f2a596ce9450798104c4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:ab31a50a70abca8fa3e67f1e9622b6a9bae83ce6\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6d29a18b5df1aee2f911f2a596ce9450798104c4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:1434e9f422fae0a04161913bec8adeff9ed66cff",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:719feccbba2a463c02c42f117ea323ccdf77b1fb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:1434e9f422fae0a04161913bec8adeff9ed66cff\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:719feccbba2a463c02c42f117ea323ccdf77b1fb\" has unexpected contents.");
apply_patch_space(121538048) || 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", "162,1,746,791,805,813,816,834,842,895,896,1156,1161,1163,1164,1270,1271,1755,1756,2444,2445,2447,2449,2450,2451,2466,2467,2648,2649,3818,3819,3821,3822,3826,3827,3835,3836,3837,3838,5157,5361,9152,9153,9155,9562,9564,9565,10560,10562,16501,16502,16635,16636,19405,19407,25669,25671,32768,32770,33053,33054,34935,34936,34938,34940,34999,35000,35133,35135,35295,35299,35307,35308,35316,35320,35325,35326,35347,35351,35355,36441,36453,36457,36461,51942,52629,52631,52655,65537,66042,98306,98589,98590,99095,131073,131578,163842,164125,164126,164631,196609,197114,229378,229661,229662,230167,262145,262650,294914,295197,295198,295703,327681,328186,360449,360954,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,819485,819486,819991,851969,852474,884738,885021,885022,885527,917505,918010,950273,950778,960338,1146880,1146881,1161015,1179411,1179647,1179648") == "f0770f82c3cfed07ec386bc93ec0fbbe1d1702a2" || 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", "162,1,746,791,805,813,816,834,842,895,896,1156,1161,1163,1164,1270,1271,1755,1756,2444,2445,2447,2449,2450,2451,2466,2467,2648,2649,3818,3819,3821,3822,3826,3827,3835,3836,3837,3838,5157,5361,9152,9153,9155,9562,9564,9565,10560,10562,16501,16502,16635,16636,19405,19407,25669,25671,32768,32770,33053,33054,34935,34936,34938,34940,34999,35000,35133,35135,35295,35299,35307,35308,35316,35320,35325,35326,35347,35351,35355,36441,36453,36457,36461,51942,52629,52631,52655,65537,66042,98306,98589,98590,99095,131073,131578,163842,164125,164126,164631,196609,197114,229378,229661,229662,230167,262145,262650,294914,295197,295198,295703,327681,328186,360449,360954,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,819485,819486,819991,851969,852474,884738,885021,885022,885527,917505,918010,950273,950778,960338,1146880,1146881,1161015,1179411,1179647,1179648") && 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", "356,1,331,602,610,620,624,629,630,711,715,720,721,2426,2430,2443,2909,2914,2915,3178,3182,3187,3188,3190,3191,3193,3199,3242,3250,3255,3258,3260,3261,3273,3277,3281,3282,3285,3289,3293,3294,3802,3806,3819,3820,3828,3832,3837,3842,3854,3855,4825,4826,7992,7993,8110,8111,9072,9073,9705,9706,10667,10672,12925,12927,20535,20536,25208,25209,30054,30055,32768,32770,32864,32865,43978,43979,48735,48736,53690,53691,54713,54715,54734,54736,55178,55179,55556,55557,55932,55933,56320,56321,56388,56389,63663,63666,63684,63685,63730,63731,63749,63750,63751,63752,63801,63802,63845,63846,63849,63850,63875,63876,63887,63888,63910,63911,63967,63972,64028,64029,64033,64034,64056,64059,64251,64252,64264,64265,65536,65537,71765,71766,71772,71773,71775,71776,71971,72164,72333,72335,72489,72490,72498,72499,72500,72501,72523,72524,72949,72950,73000,73002,73003,73009,73114,73116,73121,73131,73218,73219,73221,73225,73241,73242,74056,74057,75035,75036,84862,84863,91998,91999,96644,96645,97809,97834,97853,97854,98304,98306,98400,98401,99654,99656,100880,100881,102091,102092,103309,103310,104588,104589,105778,105779,107224,107225,108374,108375,108422,108423,108890,108891,109661,109662,110866,110867,112123,112124,113485,113486,115517,115518,131072,131073,138525,138526,138864,138865,139703,139704,139722,139723,139741,139742,139757,139758,139782,139783,139788,139807,139830,139831,139871,139872,139899,139900,139918,139919,139935,139936,139967,139968,139999,140000,140033,140034,140062,140063,140070,140071,140091,140092,140124,140125,140176,140177,140479,140480,141131,141132,141155,141156,142587,142588,142603,142604,142754,142755,143607,148640,154390,154548,155095,155125,155723,155724,156351,156352,156486,156487,158223,158497,159909,159910,159933,159934,161868,163842,163936,163937,164442,164922,164926,168173,168263,168265,169342,169343,171709,171710,174043,174044,174131,174132,175381,175382,176410,176411,176725,176726,182972,182973,191234,191235,196608,196609,199311,199312,202491,202492,202652,210525,217725,217726,218361,218362,219752,219753,219777,219778,220868,220869,225320,225321,229313,229315,229376,229378,229472,229473,230648,230652,230687,230688,230708,230712,230727,233314,294912,294914,360448,360449,386991,393125,393215,393216") == "6d6b363a24b0917fa25aafdac50d17e6845197f6" || 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", "356,1,331,602,610,620,624,629,630,711,715,720,721,2426,2430,2443,2909,2914,2915,3178,3182,3187,3188,3190,3191,3193,3199,3242,3250,3255,3258,3260,3261,3273,3277,3281,3282,3285,3289,3293,3294,3802,3806,3819,3820,3828,3832,3837,3842,3854,3855,4825,4826,7992,7993,8110,8111,9072,9073,9705,9706,10667,10672,12925,12927,20535,20536,25208,25209,30054,30055,32768,32770,32864,32865,43978,43979,48735,48736,53690,53691,54713,54715,54734,54736,55178,55179,55556,55557,55932,55933,56320,56321,56388,56389,63663,63666,63684,63685,63730,63731,63749,63750,63751,63752,63801,63802,63845,63846,63849,63850,63875,63876,63887,63888,63910,63911,63967,63972,64028,64029,64033,64034,64056,64059,64251,64252,64264,64265,65536,65537,71765,71766,71772,71773,71775,71776,71971,72164,72333,72335,72489,72490,72498,72499,72500,72501,72523,72524,72949,72950,73000,73002,73003,73009,73114,73116,73121,73131,73218,73219,73221,73225,73241,73242,74056,74057,75035,75036,84862,84863,91998,91999,96644,96645,97809,97834,97853,97854,98304,98306,98400,98401,99654,99656,100880,100881,102091,102092,103309,103310,104588,104589,105778,105779,107224,107225,108374,108375,108422,108423,108890,108891,109661,109662,110866,110867,112123,112124,113485,113486,115517,115518,131072,131073,138525,138526,138864,138865,139703,139704,139722,139723,139741,139742,139757,139758,139782,139783,139788,139807,139830,139831,139871,139872,139899,139900,139918,139919,139935,139936,139967,139968,139999,140000,140033,140034,140062,140063,140070,140071,140091,140092,140124,140125,140176,140177,140479,140480,141131,141132,141155,141156,142587,142588,142603,142604,142754,142755,143607,148640,154390,154548,155095,155125,155723,155724,156351,156352,156486,156487,158223,158497,159909,159910,159933,159934,161868,163842,163936,163937,164442,164922,164926,168173,168263,168265,169342,169343,171709,171710,174043,174044,174131,174132,175381,175382,176410,176411,176725,176726,182972,182973,191234,191235,196608,196609,199311,199312,202491,202492,202652,210525,217725,217726,218361,218362,219752,219753,219777,219778,220868,220869,225320,225321,229313,229315,229376,229378,229472,229473,230648,230652,230687,230688,230708,230712,230727,233314,294912,294914,360448,360449,386991,393125,393215,393216") && 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/uefisecapp:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185",
                "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:c94116cf790db48962dbd3f9456d4ea0960421ff",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:c94116cf790db48962dbd3f9456d4ea0960421ff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:f93954b34616c7e26e591894a0637064d2c06881",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:f93954b34616c7e26e591894a0637064d2c06881");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:223724:44175452bb5289a947dba47084a1128c925bfde1",
                "EMMC:/dev/block/bootdevice/by-name/rpm:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:121767424:bb19009b4a26c5c4e3f2e573730529f6ab7b98c3",
                "EMMC:/dev/block/bootdevice/by-name/modem:121538048:8388548c7de16039af8a67df2e017675f02446ae",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:121538048:8388548c7de16039af8a67df2e017675f02446ae");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:fcac3979255eac89e693de3c1e9bbe5a2757b7d5",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:387775e03ea9a11d82a7f1253fe471af863d58aa",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:387775e03ea9a11d82a7f1253fe471af863d58aa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:c1f5098731fd46eac2a2640413e57f0567e026f3",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:238037:c1f5098731fd46eac2a2640413e57f0567e026f3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:77a74b0e1dad59a14da202676000cecc06027d12",
                "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a",
                "EMMC:/dev/block/bootdevice/by-name/tz:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:369800:d902c06d505e96149ac3c078baf145dd6b208eec",
                "EMMC:/dev/block/bootdevice/by-name/hyp:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:0aacd6f405fce109fc7bf06f45897326fbefebab",
                "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:8da284d91d5ac890d3e6a021563f9a358e661d61",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefv:20480:8da284d91d5ac890d3e6a021563f9a358e661d61");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:20477:7105065cf66176ca1d8febd3491951c038f85aae",
                "EMMC:/dev/block/bootdevice/by-name/storsec:20477:68d23a355b387ff46d176efd0086fc33e405351c",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:20477:68d23a355b387ff46d176efd0086fc33e405351c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75",
                "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:021babea4b09143d72420b894a7d07940752c66c",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfw:49203:021babea4b09143d72420b894a7d07940752c66c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:fa0ffbb28839871e1be30f1e799d118058e3e930",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:fa0ffbb28839871e1be30f1e799d118058e3e930");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9",
                "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185",
                "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:c94116cf790db48962dbd3f9456d4ea0960421ff",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:c94116cf790db48962dbd3f9456d4ea0960421ff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:f93954b34616c7e26e591894a0637064d2c06881",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:f93954b34616c7e26e591894a0637064d2c06881");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:44175452bb5289a947dba47084a1128c925bfde1",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:c1f5098731fd46eac2a2640413e57f0567e026f3",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:c1f5098731fd46eac2a2640413e57f0567e026f3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:77a74b0e1dad59a14da202676000cecc06027d12",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:d902c06d505e96149ac3c078baf145dd6b208eec",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:0aacd6f405fce109fc7bf06f45897326fbefebab",
                "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:8da284d91d5ac890d3e6a021563f9a358e661d61",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:8da284d91d5ac890d3e6a021563f9a358e661d61");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75",
                "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:021babea4b09143d72420b894a7d07940752c66c",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:021babea4b09143d72420b894a7d07940752c66c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:fa0ffbb28839871e1be30f1e799d118058e3e930",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:fa0ffbb28839871e1be30f1e799d118058e3e930");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9",
                "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:67108864:95cc31b8a85f4b3e87fa272c50aad455e7707423",
                "EMMC:/dev/block/bootdevice/by-name/boot:67108864:8ac1af328b40fae8557be8d75352a2dbaa35b078",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:67108864:8ac1af328b40fae8557be8d75352a2dbaa35b078");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185",
                "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:c94116cf790db48962dbd3f9456d4ea0960421ff",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:c94116cf790db48962dbd3f9456d4ea0960421ff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:f93954b34616c7e26e591894a0637064d2c06881",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:f93954b34616c7e26e591894a0637064d2c06881");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:223724:44175452bb5289a947dba47084a1128c925bfde1",
                "EMMC:/dev/block/bootdevice/by-name/rpm:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:121767424:bb19009b4a26c5c4e3f2e573730529f6ab7b98c3",
                "EMMC:/dev/block/bootdevice/by-name/modem:121538048:8388548c7de16039af8a67df2e017675f02446ae",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:121538048:8388548c7de16039af8a67df2e017675f02446ae");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:fcac3979255eac89e693de3c1e9bbe5a2757b7d5",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:387775e03ea9a11d82a7f1253fe471af863d58aa",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:387775e03ea9a11d82a7f1253fe471af863d58aa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:c1f5098731fd46eac2a2640413e57f0567e026f3",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:238037:c1f5098731fd46eac2a2640413e57f0567e026f3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:77a74b0e1dad59a14da202676000cecc06027d12",
                "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a",
                "EMMC:/dev/block/bootdevice/by-name/tz:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:369800:d902c06d505e96149ac3c078baf145dd6b208eec",
                "EMMC:/dev/block/bootdevice/by-name/hyp:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:0aacd6f405fce109fc7bf06f45897326fbefebab",
                "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:8da284d91d5ac890d3e6a021563f9a358e661d61",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefv:20480:8da284d91d5ac890d3e6a021563f9a358e661d61");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:20477:7105065cf66176ca1d8febd3491951c038f85aae",
                "EMMC:/dev/block/bootdevice/by-name/storsec:20477:68d23a355b387ff46d176efd0086fc33e405351c",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:20477:68d23a355b387ff46d176efd0086fc33e405351c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75",
                "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:021babea4b09143d72420b894a7d07940752c66c",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfw:49203:021babea4b09143d72420b894a7d07940752c66c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:fa0ffbb28839871e1be30f1e799d118058e3e930",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:fa0ffbb28839871e1be30f1e799d118058e3e930");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9",
                "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:2070fbbe57f327dbbdda27b5373cbc31ef2b7185",
                "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:c94116cf790db48962dbd3f9456d4ea0960421ff",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:c94116cf790db48962dbd3f9456d4ea0960421ff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:c4baa77c72f02e50c7ad3c89eb49f4f3a72826fe",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:f93954b34616c7e26e591894a0637064d2c06881",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:f93954b34616c7e26e591894a0637064d2c06881");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:44175452bb5289a947dba47084a1128c925bfde1",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:6a1fd6c4108d7a069fc75ad2c613fe3f9927101c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:27de78701ddfc531ac569aa77ce781cd02eb6c95",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ca9d7d4dfce6c6e2bdb7d0bd4223a8f01655b0a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:a03c4496f7ad64bcef11412efd61642e43c9bef2",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:c1f5098731fd46eac2a2640413e57f0567e026f3",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:c1f5098731fd46eac2a2640413e57f0567e026f3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:77a74b0e1dad59a14da202676000cecc06027d12",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:eab07ce41ec0955c11897b381ad67e9f0d333c7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:66fa72480ca226b193a74b898b6ce338223e4e9a",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:bb62e20ca81ca71569cb94e3e7446189f9f4ee29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:6582c9c8c252d1a0b39ad6beac4bbf7c46aebf04",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:726dbadd6ba4977af265e3e44dfb18a160c15e5c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:d902c06d505e96149ac3c078baf145dd6b208eec",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:369800:72c7e4c66cd9b8e4ecf2eee84199db1577842897");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:0aacd6f405fce109fc7bf06f45897326fbefebab",
                "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:8da284d91d5ac890d3e6a021563f9a358e661d61",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:8da284d91d5ac890d3e6a021563f9a358e661d61");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:97f36109e2a8003f3012925a42a3f5eef27ccb75",
                "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:021babea4b09143d72420b894a7d07940752c66c",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:021babea4b09143d72420b894a7d07940752c66c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:c6a65f57f463cb71ec8c1d3e36d6c993902b80c3",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:fa0ffbb28839871e1be30f1e799d118058e3e930",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:fa0ffbb28839871e1be30f1e799d118058e3e930");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:62b146d19bc0d060cc0400e3787a60fa43f9f3e9",
                "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:df84f87d293125cf9fb5e1a71a1b653fdb4112d9");
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...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:ab31a50a70abca8fa3e67f1e9622b6a9bae83ce6",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6d29a18b5df1aee2f911f2a596ce9450798104c4",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6d29a18b5df1aee2f911f2a596ce9450798104c4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:1434e9f422fae0a04161913bec8adeff9ed66cff",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:719feccbba2a463c02c42f117ea323ccdf77b1fb",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:719feccbba2a463c02c42f117ea323ccdf77b1fb");
