ui_print("Target: None");
show_progress(0.750000, 0);

set_inactive_slot_as_unbootable() || abort("Failed to set inactive slot as unbootable!");

ui_print("Copying blocks of all A/B partitions (except system & boot) from active to inactive slots...");
copy_all_source_partitions_except("system,boot") || abort("E3009: Failed to copy all partitions from active to inactive slot");

ui_print("Patching system image unconditionally...");
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("Verifying the updated system image...");
if range_sha1("/dev/block/bootdevice/by-name/system", "32,0,32767,32768,32770,32833,65535,65536,98303,98304,98306,98369,98371,98872,131071,131072,131074,131575,152106,163840,163842,163905,163907,164408,196607,196608,196610,229376,229378,229441,229443,229944,256399") == "22ffece5993cd30644b3abb0435912889a9a06aa" then
if range_sha1("/dev/block/bootdevice/by-name/system", "36,32767,32768,32770,32833,65535,65536,98303,98304,98306,98369,98371,98872,131071,131072,131074,131575,152106,152618,163328,163840,163842,163905,163907,164408,196607,196608,196610,197122,228864,229376,229378,229441,229443,229944,256399,256400") == "3359aed2b13e314724385f42b28a0692c6caed2e" then
ui_print("Verified the updated system image.");
else
  abort("E1003: system partition has unexpected non-zero contents after OTA update");
endif;
else
  abort("E1002: system partition has unexpected contents after OTA update");
endif;
show_progress(0.050000, 5);
(package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot") && block_device_check("/dev/block/bootdevice/by-name/boot", "12285952", "8729417a50eb11c2009cec55a15ebc925bb6c2a9")) ||
  abort("Failed to extract boot.img to /dev/block/bootdevice/by-name/boot");
show_progress(0.200000, 10);

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

ui_print("Patching firmware images...");
(package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64") && block_device_check("/dev/block/bootdevice/by-name/cmnlib64", "520150", "e464470c4f337e2c0a20d82a8d008e2b182a517e")) ||
  abort("Failed to extract firmware-update/cmnlib64.mbn to /dev/block/bootdevice/by-name/cmnlib64");
(package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib") && block_device_check("/dev/block/bootdevice/by-name/cmnlib", "398870", "ce31bcb3d0417e13f19ae669120a8afa9ffb4044")) ||
  abort("Failed to extract firmware-update/cmnlib.mbn to /dev/block/bootdevice/by-name/cmnlib");
(package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp") && block_device_check("/dev/block/bootdevice/by-name/hyp", "381744", "51fc24769e7cfec4f694586cceadb7b8fc3fd1d7")) ||
  abort("Failed to extract firmware-update/hyp.mbn to /dev/block/bootdevice/by-name/hyp");
(package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster") && block_device_check("/dev/block/bootdevice/by-name/keymaster", "238037", "aa99d573754aeca55a077b16d97386789c07c990")) ||
  abort("Failed to extract firmware-update/km4.mbn to /dev/block/bootdevice/by-name/keymaster");
(package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz") && block_device_check("/dev/block/bootdevice/by-name/tz", "2060288", "d9fa850bb6ea1a3a1db51d9432bfbd62b7e8a332")) ||
  abort("Failed to extract firmware-update/tz.mbn to /dev/block/bootdevice/by-name/tz");
(package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop") && block_device_check("/dev/block/bootdevice/by-name/aop", "160620", "9a751c5097ac7683c3451c6584063a0ed7364ec5")) ||
  abort("Failed to extract firmware-update/aop.mbn to /dev/block/bootdevice/by-name/aop");
(package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config") && block_device_check("/dev/block/bootdevice/by-name/xbl_config", "73004", "087345515d95c00eae8e9e0549b9e938d99b82a6")) ||
  abort("Failed to extract firmware-update/xbl_config.elf to /dev/block/bootdevice/by-name/xbl_config");
(package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec") && block_device_check("/dev/block/bootdevice/by-name/storsec", "20573", "12cd036d8f78a1ddd1005c43dd119f677105145b")) ||
  abort("Failed to extract firmware-update/storsec.mbn to /dev/block/bootdevice/by-name/storsec");
(package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp") && block_device_check("/dev/block/bootdevice/by-name/uefisecapp", "126880", "f20765ea5d9137299e51dd49fc9d551ada0fbf49")) ||
  abort("Failed to extract firmware-update/uefi_sec.mbn to /dev/block/bootdevice/by-name/uefisecapp");
(package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw") && block_device_check("/dev/block/bootdevice/by-name/qupfw", "47791", "23bd56af93cbb6f484dc57b64c833120f33b3517")) ||
  abort("Failed to extract firmware-update/qupv3fw.elf to /dev/block/bootdevice/by-name/qupfw");
(package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl") && block_device_check("/dev/block/bootdevice/by-name/abl", "151552", "aad160de6388b39843ed08668277928cb6171eee")) ||
  abort("Failed to extract firmware-update/abl.elf to /dev/block/bootdevice/by-name/abl");
(package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo") && block_device_check("/dev/block/bootdevice/by-name/dtbo", "3407356", "7bdf4cfcf1b9ee348c9ea0a11cc2aedf0512f903")) ||
  abort("Failed to extract firmware-update/dtbo.img to /dev/block/bootdevice/by-name/dtbo");
(package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg") && block_device_check("/dev/block/bootdevice/by-name/devcfg", "44548", "b8b4752f330ac209896b74120a453c6db6f40684")) ||
  abort("Failed to extract firmware-update/devcfg.mbn to /dev/block/bootdevice/by-name/devcfg");
(package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl") && block_device_check("/dev/block/bootdevice/by-name/xbl", "3108648", "dc8dc8b86b2a6a96d1a596b2e83dbb3357633147")) ||
  abort("Failed to extract firmware-update/xbl.elf to /dev/block/bootdevice/by-name/xbl");
(package_extract_file("firmware-update/dspso.bin", "/dev/block/bootdevice/by-name/dsp") && block_device_check("/dev/block/bootdevice/by-name/dsp", "33554432", "e9ac8fe7199bbc8a1a998de7e40a4fdc3e2f47d0")) ||
  abort("Failed to extract firmware-update/dspso.bin to /dev/block/bootdevice/by-name/dsp");
(package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem") && block_device_check("/dev/block/bootdevice/by-name/modem", "33862144", "d0249d6aeacf503a25f60e749670d06fd5ba348e")) ||
  abort("Failed to extract firmware-update/NON-HLOS.bin to /dev/block/bootdevice/by-name/modem");
(package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth") && block_device_check("/dev/block/bootdevice/by-name/bluetooth", "798720", "be98ffade230113ac0288ed9aa5df35b123640d5")) ||
  abort("Failed to extract firmware-update/BTFM.bin to /dev/block/bootdevice/by-name/bluetooth");
run_program("/usr/bin/find", "/","-name", "__emptyfile__", "-type", "f", "-delete");

set_inactive_slot_as_active() || abort("Failed to set inactive slot as active!");

set_progress(1.000000);
