getprop("ro.product.device") == "pine" || abort("E3004: This package is for \"pine\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.1.0.QCMINXM:user/release-keys");
ui_print("Target: Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.2.0.QCMINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.1.0.QCMINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.2.0.QCMINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.1.0.QCMINXM:user/release-keys or Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.2.0.QCMINXM: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:10efc837726ff3629fc7f7e21242438afaebdaa8",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:679d5ee934ad12335cf40e3a83faa0ed0b0e8d29") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:10efc837726ff3629fc7f7e21242438afaebdaa8\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:679d5ee934ad12335cf40e3a83faa0ed0b0e8d29\" has unexpected contents.");
apply_patch_space(101240832) || 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:05e899d650a3583a38a9724b7afc275da485477f",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:c007497aea948fa05cb21b852031cecc1703a124") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:05e899d650a3583a38a9724b7afc275da485477f\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:c007497aea948fa05cb21b852031cecc1703a124\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:05e899d650a3583a38a9724b7afc275da485477f",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:c007497aea948fa05cb21b852031cecc1703a124") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:05e899d650a3583a38a9724b7afc275da485477f\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:c007497aea948fa05cb21b852031cecc1703a124\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:c060f1ddd2704a41517c219de830db0798bf816c",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:c060f1ddd2704a41517c219de830db0798bf816c\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:c060f1ddd2704a41517c219de830db0798bf816c",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:c060f1ddd2704a41517c219de830db0798bf816c\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:ebce0170f6712e273a8268de1c0b69005e0928fe",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:15d3054518b8357ee5adda30f64990e31c382466") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:ebce0170f6712e273a8268de1c0b69005e0928fe\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:15d3054518b8357ee5adda30f64990e31c382466\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:ebce0170f6712e273a8268de1c0b69005e0928fe",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:15d3054518b8357ee5adda30f64990e31c382466") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:ebce0170f6712e273a8268de1c0b69005e0928fe\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:15d3054518b8357ee5adda30f64990e31c382466\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ab9f55d205912e195c641a5c0a8055895685c3c0",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dcaa292162fff93ae34928c73b5f47108d659b28") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ab9f55d205912e195c641a5c0a8055895685c3c0\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dcaa292162fff93ae34928c73b5f47108d659b28\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:12b48ac5bdc4e0122877dc107aa3d36772cd153b",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:e572a7fe2a3336e9bf14b80fa68c4b099c770c89") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:12b48ac5bdc4e0122877dc107aa3d36772cd153b\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:e572a7fe2a3336e9bf14b80fa68c4b099c770c89\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:c68f94cea6a8d8770d77bb4fff4d63208cb60a7e",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc86f1ea13ee0487bef44233405d0d7f530a7fe7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:c68f94cea6a8d8770d77bb4fff4d63208cb60a7e\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc86f1ea13ee0487bef44233405d0d7f530a7fe7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:08781baa3fce0981ea00ab591963aac5213c4e23",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:92af968cbaa5a11859192badc04a412f7069a23e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:08781baa3fce0981ea00ab591963aac5213c4e23\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:92af968cbaa5a11859192badc04a412f7069a23e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:ed43951c1da5683eb43428b9f0d2bc84fd4ac37c",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:66c1f58362fd356b63b25d570f0b0ab093f816b8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:ed43951c1da5683eb43428b9f0d2bc84fd4ac37c\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:66c1f58362fd356b63b25d570f0b0ab093f816b8\" 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", "98,1,553,696,710,716,32770,32958,32959,33464,65537,66042,98042,98304,98306,98494,98495,117005,117007,117203,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,294914,295102,295103,295608,327681,328186,359990,360197,360310,360312,360338,360348,360449,360954,361077,361078,361151,361152,361197,361199,361204,361205,361282,361293,361314,361317,361339,361343,361496,361499,361550,361551,364696,364697,374429,393216,393217,399696,409596,410131,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,699005,753664,753665,774003,786268,786431,786432") == "f36ec9f78ef5af3bd1d14a68308d57bb9ebbda94" || 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", "98,1,553,696,710,716,32770,32958,32959,33464,65537,66042,98042,98304,98306,98494,98495,117005,117007,117203,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,294914,295102,295103,295608,327681,328186,359990,360197,360310,360312,360338,360348,360449,360954,361077,361078,361151,361152,361197,361199,361204,361205,361282,361293,361314,361317,361339,361343,361496,361499,361550,361551,364696,364697,374429,393216,393217,399696,409596,410131,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,699005,753664,753665,774003,786268,786431,786432") && 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", "72,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,1186,1194,1202,1203,1246,1254,1259,1260,1263,1267,1271,1272,1529,1560,1845,1846,2293,2760,3216,3264,3759,3760,3898,3942,4328,4329,4961,4962,5431,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,215773,229376,229378,229440,229441,257987,262077,262143,262144") == "b9ac3960259330e33bf40bcfe537d35568ea1397" || 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", "72,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,1186,1194,1202,1203,1246,1254,1259,1260,1263,1267,1271,1272,1529,1560,1845,1846,2293,2760,3216,3264,3759,3760,3898,3942,4328,4329,4961,4962,5431,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,215773,229376,229378,229440,229441,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 ----


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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:05e899d650a3583a38a9724b7afc275da485477f",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:c007497aea948fa05cb21b852031cecc1703a124",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:c007497aea948fa05cb21b852031cecc1703a124");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:c060f1ddd2704a41517c219de830db0798bf816c",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:ebce0170f6712e273a8268de1c0b69005e0928fe",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:15d3054518b8357ee5adda30f64990e31c382466",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:774108:15d3054518b8357ee5adda30f64990e31c382466");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ab9f55d205912e195c641a5c0a8055895685c3c0",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dcaa292162fff93ae34928c73b5f47108d659b28",
                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:dcaa292162fff93ae34928c73b5f47108d659b28");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:12b48ac5bdc4e0122877dc107aa3d36772cd153b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:e572a7fe2a3336e9bf14b80fa68c4b099c770c89",
                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:e572a7fe2a3336e9bf14b80fa68c4b099c770c89");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:c68f94cea6a8d8770d77bb4fff4d63208cb60a7e",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc86f1ea13ee0487bef44233405d0d7f530a7fe7",
                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:dc86f1ea13ee0487bef44233405d0d7f530a7fe7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:05e899d650a3583a38a9724b7afc275da485477f",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:c007497aea948fa05cb21b852031cecc1703a124",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:c007497aea948fa05cb21b852031cecc1703a124");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:c060f1ddd2704a41517c219de830db0798bf816c",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:ebce0170f6712e273a8268de1c0b69005e0928fe",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:15d3054518b8357ee5adda30f64990e31c382466",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:774108:15d3054518b8357ee5adda30f64990e31c382466");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:10efc837726ff3629fc7f7e21242438afaebdaa8",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:679d5ee934ad12335cf40e3a83faa0ed0b0e8d29",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:679d5ee934ad12335cf40e3a83faa0ed0b0e8d29");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:05e899d650a3583a38a9724b7afc275da485477f",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:c007497aea948fa05cb21b852031cecc1703a124",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:c007497aea948fa05cb21b852031cecc1703a124");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:c060f1ddd2704a41517c219de830db0798bf816c",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:ebce0170f6712e273a8268de1c0b69005e0928fe",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:15d3054518b8357ee5adda30f64990e31c382466",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:774108:15d3054518b8357ee5adda30f64990e31c382466");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ab9f55d205912e195c641a5c0a8055895685c3c0",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dcaa292162fff93ae34928c73b5f47108d659b28",
                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:dcaa292162fff93ae34928c73b5f47108d659b28");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:12b48ac5bdc4e0122877dc107aa3d36772cd153b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:e572a7fe2a3336e9bf14b80fa68c4b099c770c89",
                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:e572a7fe2a3336e9bf14b80fa68c4b099c770c89");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:c68f94cea6a8d8770d77bb4fff4d63208cb60a7e",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc86f1ea13ee0487bef44233405d0d7f530a7fe7",
                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:dc86f1ea13ee0487bef44233405d0d7f530a7fe7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:05e899d650a3583a38a9724b7afc275da485477f",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:c007497aea948fa05cb21b852031cecc1703a124",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:c007497aea948fa05cb21b852031cecc1703a124");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:c060f1ddd2704a41517c219de830db0798bf816c",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8762ceeeacb93fbecf3798dee827e4d32adf4fff");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:ebce0170f6712e273a8268de1c0b69005e0928fe",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:15d3054518b8357ee5adda30f64990e31c382466",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:774108:15d3054518b8357ee5adda30f64990e31c382466");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:03aa1a32e9121863e5496a3403ed3fc5c59471e7",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:bc3cd0ed8c2195431e817ea81c3e771b4d0463d2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b15974fcd0ec926a142bda05779bbf464f6e4c80",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:d19d2ab5a1ad1ec81f0c5dc503b6d02dd652c49b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:eb6aa6d0f345047828725ec6bf2809f68b6b5d89",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e89de89c3cb5acbbfbf43cc397c5271184b5f6f8");
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:08781baa3fce0981ea00ab591963aac5213c4e23",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:92af968cbaa5a11859192badc04a412f7069a23e",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:92af968cbaa5a11859192badc04a412f7069a23e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:ed43951c1da5683eb43428b9f0d2bc84fd4ac37c",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:66c1f58362fd356b63b25d570f0b0ab093f816b8",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:66c1f58362fd356b63b25d570f0b0ab093f816b8");
