getprop("ro.product.device") == "px30_evb" || abort("E3004: This package is for \"px30_evb\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/110331:userdebug/test-keys");
ui_print("Target: rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/150039:userdebug/test-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/110331:userdebug/test-keys" ||
    getprop("ro.build.fingerprint") == "rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/150039:userdebug/test-keys" ||
    abort("E3001: Package expects build fingerprint of rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/110331:userdebug/test-keys or rockchip/px30_evb/px30_evb:8.1.0/OPM8.190605.003/150039:userdebug/test-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/by-name/boot:24616960:140415248d51c058e2183b9ab0237cf1db8408af:24616960:ba8c54a13eb86afad665dbf98d11637feff99410") || abort("E3005: \"EMMC:/dev/block/by-name/boot:24616960:140415248d51c058e2183b9ab0237cf1db8408af:24616960:ba8c54a13eb86afad665dbf98d11637feff99410\" has unexpected contents.");
apply_patch_space(88543232) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/by-name/system", "262,1,203,214,383,6262,6271,6303,6305,6461,6462,6877,6879,7454,7455,16455,16457,17729,17730,18062,18064,18167,18170,18196,21716,21782,21785,23892,23895,24126,24129,24139,24142,24240,24241,24930,24931,24938,24940,24976,24979,25004,25005,25010,25014,25022,25025,26362,26365,26793,26794,26815,26817,26825,26826,26828,26830,26836,26837,28789,28791,29289,29290,29295,29297,29406,29409,29728,29729,29744,29746,29767,29768,29772,29774,29786,29789,29809,29810,29816,29819,31264,31265,31323,31325,31333,31334,32656,32658,32768,32770,33389,33390,33415,33417,33441,33442,33444,33446,33454,33455,33482,33484,33634,33635,33637,33639,33648,33651,33736,33739,33755,33756,33803,33805,33858,33861,34232,34233,35718,35719,36168,36169,36210,36211,36222,36223,57981,57982,67586,67588,67598,67648,69076,69078,70549,70550,71259,71260,74748,76932,77484,77485,77981,77982,98106,98109,98304,98306,98805,98806,101487,101488,105064,105065,105271,105272,111342,111343,126507,126508,126524,126525,128948,128950,130532,130533,130536,130537,131072,131073,139486,139487,141177,141178,142618,142619,143048,143049,143778,143779,143827,143828,143832,143833,143835,143836,143837,143838,144097,144098,144107,144108,144587,144588,144610,144611,144612,144613,144743,144744,144962,144963,145049,145050,145066,145070,145081,145082,145086,145088,145095,145100,145171,145172,145181,145183,145192,156499,157817,163842,164030,229378,229566,288149,288308,288748,288762,288765,288800,291171,293914,294914,295102,296222,296364,296404,296804,296859,297090,297093,297131,297133,297410,297416,306774,306775,307684,307757,307769,308027,308080,308110,308139,308203,308276,308278,315875,384833,387072,390122,390129,393216") == "7f0d933b931d4a4a2151ef4d52c1ea88a2c9dc9f" || block_image_verify("/dev/block/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/by-name/system");
ifelse (block_image_recover("/dev/block/by-name/system", "262,1,203,214,383,6262,6271,6303,6305,6461,6462,6877,6879,7454,7455,16455,16457,17729,17730,18062,18064,18167,18170,18196,21716,21782,21785,23892,23895,24126,24129,24139,24142,24240,24241,24930,24931,24938,24940,24976,24979,25004,25005,25010,25014,25022,25025,26362,26365,26793,26794,26815,26817,26825,26826,26828,26830,26836,26837,28789,28791,29289,29290,29295,29297,29406,29409,29728,29729,29744,29746,29767,29768,29772,29774,29786,29789,29809,29810,29816,29819,31264,31265,31323,31325,31333,31334,32656,32658,32768,32770,33389,33390,33415,33417,33441,33442,33444,33446,33454,33455,33482,33484,33634,33635,33637,33639,33648,33651,33736,33739,33755,33756,33803,33805,33858,33861,34232,34233,35718,35719,36168,36169,36210,36211,36222,36223,57981,57982,67586,67588,67598,67648,69076,69078,70549,70550,71259,71260,74748,76932,77484,77485,77981,77982,98106,98109,98304,98306,98805,98806,101487,101488,105064,105065,105271,105272,111342,111343,126507,126508,126524,126525,128948,128950,130532,130533,130536,130537,131072,131073,139486,139487,141177,141178,142618,142619,143048,143049,143778,143779,143827,143828,143832,143833,143835,143836,143837,143838,144097,144098,144107,144108,144587,144588,144610,144611,144612,144613,144743,144744,144962,144963,145049,145050,145066,145070,145081,145082,145086,145088,145095,145100,145171,145172,145181,145183,145192,156499,157817,163842,164030,229378,229566,288149,288308,288748,288762,288765,288800,291171,293914,294914,295102,296222,296364,296404,296804,296859,297090,297093,297131,297133,297410,297416,306774,306775,307684,307757,307769,308027,308080,308110,308139,308203,308276,308278,315875,384833,387072,390122,390129,393216") && block_image_verify("/dev/block/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/by-name/vendor", "58,1,53,55,96,3079,3086,3115,3116,3150,3151,3211,3212,4349,4354,4585,4614,4634,4635,5141,5142,5674,5675,10599,10610,14896,14925,15334,15335,15398,15399,20037,20038,20505,22098,24997,25726,26380,29425,31886,31894,32200,32201,32539,32540,32768,32770,32817,32818,37765,37766,37767,38078,38886,66290,96760,97524,97531,98304") == "677561b9d393d7be8ad02130a21eb528f78303e3" || block_image_verify("/dev/block/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/by-name/vendor");
ifelse (block_image_recover("/dev/block/by-name/vendor", "58,1,53,55,96,3079,3086,3115,3116,3150,3151,3211,3212,4349,4354,4585,4614,4634,4635,5141,5142,5674,5675,10599,10610,14896,14925,15334,15335,15398,15399,20037,20038,20505,22098,24997,25726,26380,29425,31886,31894,32200,32201,32539,32540,32768,32770,32817,32818,37765,37766,37767,38078,38886,66290,96760,97524,97531,98304") && block_image_verify("/dev/block/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;
if (range_sha1("/dev/block/by-name/oem", "22,1,36,37,39,2053,2060,2750,2754,6061,6062,6064,6065,8973,9005,32768,32770,32801,32802,64504,65014,65021,65536") == "5e257f136fc7e86b6ff74f6eb8ad83c917f7b826" || block_image_verify("/dev/block/by-name/oem", package_extract_file("oem.transfer.list"), "oem.new.dat", "oem.patch.dat")) then
ui_print("Verified oem image...");
else
check_first_block("/dev/block/by-name/oem");
ifelse (block_image_recover("/dev/block/by-name/oem", "22,1,36,37,39,2053,2060,2750,2754,6061,6062,6064,6065,8973,9005,32768,32770,32801,32802,64504,65014,65021,65536") && block_image_verify("/dev/block/by-name/oem", package_extract_file("oem.transfer.list"), "oem.new.dat", "oem.patch.dat"), ui_print("oem recovered successfully."), abort("E2004: oem partition fails to recover"));
endif;

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

ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/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.");
show_progress(0.100000, 0);
block_image_update("/dev/block/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
ui_print("Patching oem image after verification.");
show_progress(0.100000, 0);
block_image_update("/dev/block/by-name/oem", package_extract_file("oem.transfer.list"), "oem.new.dat", "oem.patch.dat") ||
  abort("E2001: Failed to update oem image.");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/by-name/boot:24616960:140415248d51c058e2183b9ab0237cf1db8408af:24616960:ba8c54a13eb86afad665dbf98d11637feff99410",
            "-", ba8c54a13eb86afad665dbf98d11637feff99410, 24616960,
            140415248d51c058e2183b9ab0237cf1db8408af,
            package_extract_file("patch/boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/by-name/boot:24616960:140415248d51c058e2183b9ab0237cf1db8408af:24616960:ba8c54a13eb86afad665dbf98d11637feff99410");
ui_print("Writing uboot loader img...");
package_extract_file("uboot.img", "/dev/block/by-name/uboot");
set_progress(1.000000);
