get_device_compatible("santoni") == "OK" || abort("This package is for \"santoni\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Target: Xiaomi/santoni/santoni:6.0.1/MMB29M/V8.2.10.0.MAMMIEA:user/release-keys");
show_progress(0.100000, 2);
mount("ext4", "EMMC", "/dev/block/bootdevice/by-name/cust", "/cust", "max_batch_time=0,commit=1,data=ordered,barrier=1,errors=panic,nodelalloc");
delete("/cust/app/customized/ota-miui-BBS_MSITE/ota-miui-BBS_MSITE.apk",
       "/cust/app/customized/ota-partner-GooglePinyin/ota-partner-GooglePinyin.apk",
       "/cust/app/customized/ota-miui-MiGalleryLockscreen_global/ota-miui-MiGalleryLockscreen_global.apk",
       "/cust/app/customized/ota-miui-MiuiGlobalForum/ota-miui-MiuiGlobalForum.apk",
       "/cust/app/customized/partner-XMRemoteController/partner-XMRemoteController.apk",
       "/cust/app/customized/ota-miui-GlobalMiShop/ota-miui-GlobalMiShop.apk",
       "/cust/app/customized/ota-partner-GoogleZhuyin/ota-partner-GoogleZhuyin.apk");
delete("/cust/app/customized/recommended-3rd-com.immomo.momo.apk",
       "/cust/app/customized/recommended-3rd-com.immomo.momo/recommended-3rd-com.immomo.momo.apk",
       "/cust/app/customized/recommended-3rd-com.juanpi.ui.apk",
       "/cust/app/customized/recommended-3rd-com.juanpi.ui/recommended-3rd-com.juanpi.ui.apk",
       "/cust/app/customized/recommended-3rd-com.qiyi.video.apk",
       "/cust/app/customized/recommended-3rd-com.qiyi.video/recommended-3rd-com.qiyi.video.apk",
       "/cust/app/customized/recommended-3rd-com.qzone.apk",
       "/cust/app/customized/recommended-3rd-com.qzone/recommended-3rd-com.qzone.apk",
       "/cust/app/customized/recommended-3rd-com.sina.weibo.apk",
       "/cust/app/customized/recommended-3rd-com.sina.weibo/recommended-3rd-com.sina.weibo.apk",
       "/cust/app/customized/recommended-3rd-com.tencent.qqmusic.apk",
       "/cust/app/customized/recommended-3rd-com.tencent.qqmusic/recommended-3rd-com.tencent.qqmusic.apk",
       "/cust/app/customized/recommended-3rd-com.tuniu.app.ui.apk",
       "/cust/app/customized/recommended-3rd-com.tuniu.app.ui/recommended-3rd-com.tuniu.app.ui.apk",
       "/cust/app/customized/recommended-3rd-tv.danmaku.bili.apk",
       "/cust/app/customized/recommended-3rd-tv.danmaku.bili/recommended-3rd-tv.danmaku.bili.apk",
       "/cust/app/customized/partner-AmazonKindle.apk",
       "/cust/app/customized/partner-AmazonKindle/partner-AmazonKindle.apk");
package_extract_dir("cust", "/cust") || abort("Failed to extract dir from \"cust\" to \"/cust\".");
set_metadata_recursive("/cust", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
show_progress(0.200000, 10);
package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");

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

ui_print("Patching firmware images...");
ifelse(msm.boot_update("main"), (
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/aboot");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecapp");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/keymaster.mbn", "/dev/block/bootdevice/by-name/keymaster");
), "");
ifelse(msm.boot_update("backup"), (
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/abootbak");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecappbak");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1bak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/keymaster.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
), "");
msm.boot_update("finalize");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/adspso.bin", "/dev/block/bootdevice/by-name/dsp");
unmount("/firmware");
mount("vfat", "EMMC", "/dev/block/bootdevice/by-name/splash", "/firmware");
package_extract_file("firmware-update/splash.img", "/firmware/image/splash.img");
unmount("/firmware");
package_extract_file("META-INF/com/miui/miui_update", "/cache/miui_update");
set_metadata("/cache/miui_update", "uid", 0, "gid", 0, "mode", 0555, "capabilities", 0x0);
run_program("/cache/miui_update");
delete("/cache/miui_update");
show_progress(0.600000, 150);
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");
ui_print("Verifying the updated system image...");
if range_sha1("/dev/block/bootdevice/by-name/system", "102,0,32770,32961,32963,33471,65535,65536,65538,66046,98303,98304,98306,98497,98499,99007,131071,131072,131074,131582,163839,163840,163842,164033,164035,164543,196607,196608,196610,197118,229375,229376,229378,229569,229571,230079,262143,262144,262146,262654,294911,294912,294914,295105,295107,295615,327679,327680,327682,328190,360447,360448,360450,360958,393215,393216,393218,393726,425983,425984,425986,426494,458751,458752,458754,459262,491519,491520,491522,492030,524287,524288,524290,524798,557055,557056,557058,557566,589823,589824,589826,590334,622591,622592,622594,623102,655359,655360,655362,655870,688127,688128,688130,688638,717743,720896,720898,753664,753666,754174,780230,780231,786384") == "abd9b1c0c244cc9012c458454d89d72e9dad51b1" then
if range_sha1("/dev/block/bootdevice/by-name/system", "104,32770,32961,32963,33471,65535,65536,65538,66046,98303,98304,98306,98497,98499,99007,131071,131072,131074,131582,163839,163840,163842,164033,164035,164543,196607,196608,196610,197118,229375,229376,229378,229569,229571,230079,262143,262144,262146,262654,294911,294912,294914,295105,295107,295615,327679,327680,327682,328190,360447,360448,360450,360958,393215,393216,393218,393726,425983,425984,425986,426494,458751,458752,458754,459262,491519,491520,491522,492030,524287,524288,524290,524798,557055,557056,557058,557566,589823,589824,589826,590334,622591,622592,622594,623102,655359,655360,655362,655870,688127,688128,688130,688638,717743,718255,720384,720896,720898,721410,753152,753664,753666,754174,780230,780231") == "fa7632b4a45e778ec4823a6c73bcae075f88e76e" then
ui_print("Verified the updated system image.");
else
  abort("system partition has unexpected non-zero contents after OTA update");
endif;
else
  dump_block("/dev/block/bootdevice/by-name/system", "102,0,32770,32961,32963,33471,65535,65536,65538,66046,98303,98304,98306,98497,98499,99007,131071,131072,131074,131582,163839,163840,163842,164033,164035,164543,196607,196608,196610,197118,229375,229376,229378,229569,229571,230079,262143,262144,262146,262654,294911,294912,294914,295105,295107,295615,327679,327680,327682,328190,360447,360448,360450,360958,393215,393216,393218,393726,425983,425984,425986,426494,458751,458752,458754,459262,491519,491520,491522,492030,524287,524288,524290,524798,557055,557056,557058,557566,589823,589824,589826,590334,622591,622592,622594,623102,655359,655360,655362,655870,688127,688128,688130,688638,717743,720896,720898,753664,753666,754174,780230,780231,786384", package_extract_file("system.hash.list"));
  abort("system partition has unexpected contents after OTA update");
endif;
show_progress(0.100000, 2);
unmount("/cust");
