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_eea/pine:10/QKQ1.191014.001/V11.0.2.0.QCMEUXM:user/release-keys");
ui_print("Target: Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.3.0.QCMEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.2.0.QCMEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.3.0.QCMEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.2.0.QCMEUXM:user/release-keys or Xiaomi/pine_eea/pine:10/QKQ1.191014.001/V11.0.3.0.QCMEUXM: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:74831a3e8aadc9ab754b816e3dc0c52792688d42",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:bbe0dbcd5320be325ac437ee61f3fadae3ed6d12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:74831a3e8aadc9ab754b816e3dc0c52792688d42\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:bbe0dbcd5320be325ac437ee61f3fadae3ed6d12\" has unexpected contents.");
apply_patch_space(38666240) || 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:57fc392cd38a3f41d18945d4d3298daafb3c75ed",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:57fc392cd38a3f41d18945d4d3298daafb3c75ed\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:57fc392cd38a3f41d18945d4d3298daafb3c75ed",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:57fc392cd38a3f41d18945d4d3298daafb3c75ed\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:34dbcae403b539ff7336735447dfce6f3782ce52",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:34dbcae403b539ff7336735447dfce6f3782ce52\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:34dbcae403b539ff7336735447dfce6f3782ce52",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:34dbcae403b539ff7336735447dfce6f3782ce52\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:813ef4e65f6310a7c79a585559c2ece4e23fba95",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5e0cccba148b0db931e42aef86780536be3524a1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:813ef4e65f6310a7c79a585559c2ece4e23fba95\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5e0cccba148b0db931e42aef86780536be3524a1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:15d9d0d196318bdcec18488ad894fd968db0fd62",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:7eaa2272fc3d90628817adc9bf109c77c6861942") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:15d9d0d196318bdcec18488ad894fd968db0fd62\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:7eaa2272fc3d90628817adc9bf109c77c6861942\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:15d9d0d196318bdcec18488ad894fd968db0fd62",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:7eaa2272fc3d90628817adc9bf109c77c6861942") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:15d9d0d196318bdcec18488ad894fd968db0fd62\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:7eaa2272fc3d90628817adc9bf109c77c6861942\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a44aa7d4d61fdd558b5e52c42861a45ebc5446ea",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:d8b7a3b5096d48e3ec64b3a3ef009eade85e1d20") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a44aa7d4d61fdd558b5e52c42861a45ebc5446ea\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:d8b7a3b5096d48e3ec64b3a3ef009eade85e1d20\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:272305a5011f124500309611fae7554767672547") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:272305a5011f124500309611fae7554767672547\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:272305a5011f124500309611fae7554767672547") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:272305a5011f124500309611fae7554767672547\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:138a60b5036fb67fb29ce2ee5503917597e6a079",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:cc5fbded5587aa3aae72c219548dec4d7358ea18") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:138a60b5036fb67fb29ce2ee5503917597e6a079\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:cc5fbded5587aa3aae72c219548dec4d7358ea18\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3480886a822d21c90fca039df25f48775e0ca884",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:998af15ae2cf1ac63e05a25bf5cd3aa3f99473d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3480886a822d21c90fca039df25f48775e0ca884\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:998af15ae2cf1ac63e05a25bf5cd3aa3f99473d4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:6171521436f83b0c4845d109dcebd90a20f1e90d",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9be70f8565325671cba2e01d175bd584fabcc9c0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:6171521436f83b0c4845d109dcebd90a20f1e90d\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9be70f8565325671cba2e01d175bd584fabcc9c0\" 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", "90,1,554,696,710,716,32770,32958,32959,33464,65537,66042,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,294914,295102,295103,295608,327681,328186,360449,360954,361704,361911,362024,362026,362052,362062,362285,362286,362359,362360,362405,362407,362412,362413,362490,362501,362522,362525,362547,362551,362704,362707,362758,362759,365904,365905,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,700765,753664,753665,774003,786268,786431,786432") == "9ae571cdc78613101f7f2d3cfff969a9ec10858a" || 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", "90,1,554,696,710,716,32770,32958,32959,33464,65537,66042,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,294914,295102,295103,295608,327681,328186,360449,360954,361704,361911,362024,362026,362052,362062,362285,362286,362359,362360,362405,362407,362412,362413,362490,362501,362522,362525,362547,362551,362704,362707,362758,362759,365904,365905,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,700765,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,215788,229376,229378,229440,229441,257987,262077,262143,262144") == "9081b437a41a88c1bd550b13311c37fcbdf30c22" || 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,215788,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:57fc392cd38a3f41d18945d4d3298daafb3c75ed",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:34dbcae403b539ff7336735447dfce6f3782ce52",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8",
                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:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:813ef4e65f6310a7c79a585559c2ece4e23fba95",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5e0cccba148b0db931e42aef86780536be3524a1",
                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:5e0cccba148b0db931e42aef86780536be3524a1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:15d9d0d196318bdcec18488ad894fd968db0fd62",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:7eaa2272fc3d90628817adc9bf109c77c6861942",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:7eaa2272fc3d90628817adc9bf109c77c6861942");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a44aa7d4d61fdd558b5e52c42861a45ebc5446ea",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:d8b7a3b5096d48e3ec64b3a3ef009eade85e1d20",
                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:d8b7a3b5096d48e3ec64b3a3ef009eade85e1d20");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:272305a5011f124500309611fae7554767672547",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:272305a5011f124500309611fae7554767672547");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:138a60b5036fb67fb29ce2ee5503917597e6a079",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:cc5fbded5587aa3aae72c219548dec4d7358ea18",
                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:cc5fbded5587aa3aae72c219548dec4d7358ea18");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:57fc392cd38a3f41d18945d4d3298daafb3c75ed",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:34dbcae403b539ff7336735447dfce6f3782ce52",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8",
                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:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:15d9d0d196318bdcec18488ad894fd968db0fd62",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:7eaa2272fc3d90628817adc9bf109c77c6861942",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:7eaa2272fc3d90628817adc9bf109c77c6861942");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:272305a5011f124500309611fae7554767672547",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:272305a5011f124500309611fae7554767672547");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:74831a3e8aadc9ab754b816e3dc0c52792688d42",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:bbe0dbcd5320be325ac437ee61f3fadae3ed6d12",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:bbe0dbcd5320be325ac437ee61f3fadae3ed6d12");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:57fc392cd38a3f41d18945d4d3298daafb3c75ed",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:34dbcae403b539ff7336735447dfce6f3782ce52",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8",
                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:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:813ef4e65f6310a7c79a585559c2ece4e23fba95",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5e0cccba148b0db931e42aef86780536be3524a1",
                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:5e0cccba148b0db931e42aef86780536be3524a1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:15d9d0d196318bdcec18488ad894fd968db0fd62",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:7eaa2272fc3d90628817adc9bf109c77c6861942",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:7eaa2272fc3d90628817adc9bf109c77c6861942");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a44aa7d4d61fdd558b5e52c42861a45ebc5446ea",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:d8b7a3b5096d48e3ec64b3a3ef009eade85e1d20",
                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:d8b7a3b5096d48e3ec64b3a3ef009eade85e1d20");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:272305a5011f124500309611fae7554767672547",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:272305a5011f124500309611fae7554767672547");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:138a60b5036fb67fb29ce2ee5503917597e6a079",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:cc5fbded5587aa3aae72c219548dec4d7358ea18",
                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:cc5fbded5587aa3aae72c219548dec4d7358ea18");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:57fc392cd38a3f41d18945d4d3298daafb3c75ed",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7b6aaa6b184b9b498ddddb34b6a8b0ef4a1afb9c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:9e564a597133db76aa5fcec5d6f83c4fd10c3d30",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:6bb24d7c0f18211aeebeba81e15b43d783bee518");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:34dbcae403b539ff7336735447dfce6f3782ce52",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8",
                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:b2cf062e15d84fcb5dab27fc0b0515835e5e29b8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:15d9d0d196318bdcec18488ad894fd968db0fd62",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:7eaa2272fc3d90628817adc9bf109c77c6861942",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:7eaa2272fc3d90628817adc9bf109c77c6861942");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:cf3a333e3a8e28977dc832803a53563e81b7d0ca",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:272305a5011f124500309611fae7554767672547",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:272305a5011f124500309611fae7554767672547");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a5b38eaece4f9ba63a357558a7d88c177912d82",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:839d0347fd3a0688c332bf44d1bae0dba0a496d4");
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:3480886a822d21c90fca039df25f48775e0ca884",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:998af15ae2cf1ac63e05a25bf5cd3aa3f99473d4",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:998af15ae2cf1ac63e05a25bf5cd3aa3f99473d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:6171521436f83b0c4845d109dcebd90a20f1e90d",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9be70f8565325671cba2e01d175bd584fabcc9c0",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9be70f8565325671cba2e01d175bd584fabcc9c0");
