getprop("ro.product.device") == "beam" || abort("This package is for \"beam\" devices; this is a \"" + getprop("ro.product.device") + "\".");
assert(getprop("ro.product.name") == "ZTE_BEAM");
ui_print("Source: ZTE/ZTE_BEAM/beam:6.0.1/MMB29M/20161011.224046:user/release-keys");
ui_print("Target: ZTE/ZTE_BEAM/beam:6.0.1/MMB29M/20170314.224616:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "ZTE/ZTE_BEAM/beam:6.0.1/MMB29M/20161011.224046:user/release-keys" ||
    getprop("ro.build.fingerprint") == "ZTE/ZTE_BEAM/beam:6.0.1/MMB29M/20170314.224616:user/release-keys" ||
    abort("Package expects build fingerprint of ZTE/ZTE_BEAM/beam:6.0.1/MMB29M/20161011.224046:user/release-keys or ZTE/ZTE_BEAM/beam:6.0.1/MMB29M/20170314.224616:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.400000, 180);
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/sbl1:263720:38e9ba62cfcfdbb304674ce2c798b7fe22cf00f5:263720:1a8687785110bfb10616987d89eff853aaa95fef", "38e9ba62cfcfdbb304674ce2c798b7fe22cf00f5", "1a8687785110bfb10616987d89eff853aaa95fef") || abort("\"EMMC:/dev/block/bootdevice/by-name/sbl1:263720:38e9ba62cfcfdbb304674ce2c798b7fe22cf00f5:263720:1a8687785110bfb10616987d89eff853aaa95fef\" has unexpected contents.");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/hyp:57344:ddce2d6f07b1588805133b3b6ae601c037c7e4ac:57344:41e8a1f171345bcac5f54e471a9a4da008054398", "ddce2d6f07b1588805133b3b6ae601c037c7e4ac", "41e8a1f171345bcac5f54e471a9a4da008054398") || abort("\"EMMC:/dev/block/bootdevice/by-name/hyp:57344:ddce2d6f07b1588805133b3b6ae601c037c7e4ac:57344:41e8a1f171345bcac5f54e471a9a4da008054398\" has unexpected contents.");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/rpm:155244:31c84fad0ded4a207243f83add553b1b2437473b:155244:6dff4d1f66b385ee651e3615373455516cf5c29e", "31c84fad0ded4a207243f83add553b1b2437473b", "6dff4d1f66b385ee651e3615373455516cf5c29e") || abort("\"EMMC:/dev/block/bootdevice/by-name/rpm:155244:31c84fad0ded4a207243f83add553b1b2437473b:155244:6dff4d1f66b385ee651e3615373455516cf5c29e\" has unexpected contents.");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/tz:487740:ef8e6100d51a2e3dd787b08ed940c31710e4785b:487740:1a7cec8d514483dc5fb527dbbc9a1a649f2e9246", "ef8e6100d51a2e3dd787b08ed940c31710e4785b", "1a7cec8d514483dc5fb527dbbc9a1a649f2e9246") || abort("\"EMMC:/dev/block/bootdevice/by-name/tz:487740:ef8e6100d51a2e3dd787b08ed940c31710e4785b:487740:1a7cec8d514483dc5fb527dbbc9a1a649f2e9246\" has unexpected contents.");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/modem:55182848:5f0838a658da1d96a3fd65c6e0ce816b51faa381:55182848:fc397e54fe6c1cc434e4ee3bf3e233481ca09a99", "5f0838a658da1d96a3fd65c6e0ce816b51faa381", "fc397e54fe6c1cc434e4ee3bf3e233481ca09a99") || abort("\"EMMC:/dev/block/bootdevice/by-name/modem:55182848:5f0838a658da1d96a3fd65c6e0ce816b51faa381:55182848:fc397e54fe6c1cc434e4ee3bf3e233481ca09a99\" has unexpected contents.");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/aboot:386108:84d117a1ad0655d22a10befb2af14de1dc34faf2:386108:a4bfd13a2aece70098bfadad34a93072f08ed8b7", "84d117a1ad0655d22a10befb2af14de1dc34faf2", "a4bfd13a2aece70098bfadad34a93072f08ed8b7") || abort("\"EMMC:/dev/block/bootdevice/by-name/aboot:386108:84d117a1ad0655d22a10befb2af14de1dc34faf2:386108:a4bfd13a2aece70098bfadad34a93072f08ed8b7\" has unexpected contents.");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:19810304:be001c4d7c15d1c7015428e8dc619d01c241207b:19810304:3aa3972a63dfd92bd59babb10d7e4d35684183c5", "be001c4d7c15d1c7015428e8dc619d01c241207b", "3aa3972a63dfd92bd59babb10d7e4d35684183c5") || abort("\"EMMC:/dev/block/bootdevice/by-name/boot:19810304:be001c4d7c15d1c7015428e8dc619d01c241207b:19810304:3aa3972a63dfd92bd59babb10d7e4d35684183c5\" has unexpected contents.");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/recovery:17924096:529bb63246bbe7f61c71e84715800732af25ae75:17924096:7e8535923d01a6f838fcbefaf0ca677a3a26c21f", "529bb63246bbe7f61c71e84715800732af25ae75", "7e8535923d01a6f838fcbefaf0ca677a3a26c21f") || abort("\"EMMC:/dev/block/bootdevice/by-name/recovery:17924096:529bb63246bbe7f61c71e84715800732af25ae75:17924096:7e8535923d01a6f838fcbefaf0ca677a3a26c21f\" has unexpected contents.");
if (range_sha1("/dev/block/bootdevice/by-name/system", "94,1,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,572675,589824,589826,622592,622594,655360,655362,688128,688130,720896,720898,753664,753666,754174,780230,780231,786384") == "2e2b7df49394f26865fcd4c4b95849e776409e16" || 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
abort("system partition has unexpected contents");
endif;

# ---- start making changes here ----

ui_print("Patching system image after verification.");
show_progress(0.550000, 0);
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", "94,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,572778,589824,589826,622592,622594,655360,655362,688128,688130,720896,720898,753664,753666,754174,780230,780231,786384") == "4ab05b9e956c4c269fff15c410146c867fea8fc9" 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,572778,573290,589312,589824,589826,590338,622080,622592,622594,623106,654848,655360,655362,655874,687616,688128,688130,688642,720384,720896,720898,721410,753152,753664,753666,754174,780230,780231") == "c47a7d1f3182eae4b3595337927cd901f5c7fec1" then
ui_print("Verified the updated system image.");
else
  abort("system partition has unexpected non-zero contents after OTA update");
endif;
else
  abort("system partition has unexpected contents after OTA update");
endif;
show_progress(0.050000, 10);
ui_print("Patching sbl1 image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/sbl1:263720:38e9ba62cfcfdbb304674ce2c798b7fe22cf00f5:263720:1a8687785110bfb10616987d89eff853aaa95fef",
            "-", 1a8687785110bfb10616987d89eff853aaa95fef, 263720,
            38e9ba62cfcfdbb304674ce2c798b7fe22cf00f5, package_extract_file("patch/sbl1.mbn.p"));
ui_print("Patching hyp image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/hyp:57344:ddce2d6f07b1588805133b3b6ae601c037c7e4ac:57344:41e8a1f171345bcac5f54e471a9a4da008054398",
            "-", 41e8a1f171345bcac5f54e471a9a4da008054398, 57344,
            ddce2d6f07b1588805133b3b6ae601c037c7e4ac, package_extract_file("patch/hyp.mbn.p"));
ui_print("Patching rpm image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/rpm:155244:31c84fad0ded4a207243f83add553b1b2437473b:155244:6dff4d1f66b385ee651e3615373455516cf5c29e",
            "-", 6dff4d1f66b385ee651e3615373455516cf5c29e, 155244,
            31c84fad0ded4a207243f83add553b1b2437473b, package_extract_file("patch/rpm.mbn.p"));
ui_print("Patching tz image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/tz:487740:ef8e6100d51a2e3dd787b08ed940c31710e4785b:487740:1a7cec8d514483dc5fb527dbbc9a1a649f2e9246",
            "-", 1a7cec8d514483dc5fb527dbbc9a1a649f2e9246, 487740,
            ef8e6100d51a2e3dd787b08ed940c31710e4785b, package_extract_file("patch/tz.mbn.p"));
ui_print("Patching modem image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/modem:55182848:5f0838a658da1d96a3fd65c6e0ce816b51faa381:55182848:fc397e54fe6c1cc434e4ee3bf3e233481ca09a99",
            "-", fc397e54fe6c1cc434e4ee3bf3e233481ca09a99, 55182848,
            5f0838a658da1d96a3fd65c6e0ce816b51faa381, package_extract_file("patch/modem.mbn.p"));
ui_print("Patching appsbl image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/aboot:386108:84d117a1ad0655d22a10befb2af14de1dc34faf2:386108:a4bfd13a2aece70098bfadad34a93072f08ed8b7",
            "-", a4bfd13a2aece70098bfadad34a93072f08ed8b7, 386108,
            84d117a1ad0655d22a10befb2af14de1dc34faf2, package_extract_file("patch/appsbl.mbn.p"));
ui_print("Patching boot image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:19810304:be001c4d7c15d1c7015428e8dc619d01c241207b:19810304:3aa3972a63dfd92bd59babb10d7e4d35684183c5",
            "-", 3aa3972a63dfd92bd59babb10d7e4d35684183c5, 19810304,
            be001c4d7c15d1c7015428e8dc619d01c241207b, package_extract_file("patch/boot.img.p"));
ui_print("Patching recovery image...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/recovery:17924096:529bb63246bbe7f61c71e84715800732af25ae75:17924096:7e8535923d01a6f838fcbefaf0ca677a3a26c21f",
            "-", 7e8535923d01a6f838fcbefaf0ca677a3a26c21f, 17924096,
            529bb63246bbe7f61c71e84715800732af25ae75, package_extract_file("patch/recovery.img.p"));
set_progress(1.000000);
