getprop("ro.product.device") == "davinci" || abort("E3004: This package is for \"davinci\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/davinci_eea/davinci:10/QKQ1.190825.002/V11.0.5.0.QFJEUXM:user/release-keys");
ui_print("Target: Xiaomi/davinci_eea/davinci:10/QKQ1.190825.002/V11.0.6.0.QFJEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/davinci_eea/davinci:10/QKQ1.190825.002/V11.0.5.0.QFJEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/davinci_eea/davinci:10/QKQ1.190825.002/V11.0.6.0.QFJEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/davinci_eea/davinci:10/QKQ1.190825.002/V11.0.5.0.QFJEUXM:user/release-keys or Xiaomi/davinci_eea/davinci:10/QKQ1.190825.002/V11.0.6.0.QFJEUXM: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:134217728:dcde3c740f412e8cba3b98691ba3bd2c60debf22",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:8999a2cb2c443086dded938962eba873f4f0d780") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:dcde3c740f412e8cba3b98691ba3bd2c60debf22\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:8999a2cb2c443086dded938962eba873f4f0d780\" 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", "496,1,578,728,742,774,781,783,784,1030,1035,1037,1038,1144,1145,1630,1631,2319,2320,2322,2324,2325,2326,2341,2342,2523,2524,3693,3694,3696,3697,3701,3702,3710,3711,3712,3713,9070,9071,9073,9074,9478,9479,9481,9482,10479,10481,16420,16421,16554,16555,19324,19326,25656,25658,32768,32770,32990,32991,34823,34824,34826,34828,34887,34888,35021,35023,35076,35077,35083,35084,35294,35295,35307,35308,35921,35924,35930,35931,35936,35937,36054,36057,37114,37115,39326,39327,39357,39358,39503,39504,39601,41014,42226,42227,42240,42241,42246,42247,42249,42250,44426,44427,44797,44798,44864,44867,44954,44955,45146,45147,47729,47730,47733,47734,48036,48037,51728,51729,51890,51891,52295,52296,52980,52981,52985,52986,53008,53009,54600,54601,54654,54655,54691,54692,59335,59337,63940,63941,64128,64129,65431,65432,65536,65537,66075,66076,66108,66109,66559,66560,67242,67243,68472,68473,68648,68649,71446,71447,73580,73581,74066,74067,79568,79569,81521,81522,81548,81549,81620,81621,81643,81646,84100,84101,85496,85497,85870,85871,86017,86018,86369,86370,98304,98306,98526,98527,100572,100573,100781,100784,100794,100795,103082,103083,103299,103300,103351,103352,103355,103358,103363,103364,105221,105222,105305,105306,105308,105309,105330,105331,105762,105765,106130,106133,106299,106300,107630,107633,107672,107673,109114,109115,109165,109166,109516,109517,109538,109539,109610,109611,110225,110226,113802,113803,113808,113809,113911,113912,115378,115379,116365,116368,116816,116817,116821,116822,116830,116831,116835,116836,116847,116848,116871,116872,118468,118469,118603,118604,118876,118879,118882,118883,119801,119802,120469,120470,120736,120739,122560,122561,122885,122886,125299,125300,125312,125313,125648,125649,127229,127238,127554,127555,127988,127989,128852,128963,129731,129732,131072,131073,132760,132765,132771,132772,133083,133084,133096,133097,133106,133109,133110,133111,133112,133113,133115,133116,133117,133118,133154,133155,133161,133162,133248,133251,133253,133254,134361,134362,134602,134603,134604,134606,134629,134630,134699,134700,134703,134708,134709,134710,134711,134712,134713,134714,135493,135494,135500,135501,135964,135966,136429,136431,136432,136433,136434,136435,136436,136437,136438,136439,136440,136441,136442,136443,136445,136446,136447,136450,137117,137119,137120,137121,137204,137205,137207,137208,137211,137213,137471,137472,137479,137481,137967,137969,138091,138092,138103,138104,138370,138371,138484,138485,138501,138503,138505,138506,147428,147429,155435,155436,157302,157303,157580,157669,158855,159108,160430,163842,164062,164063,164568,175001,175226,175267,175274,177374,179971,180073,180135,180136,181475,181788,183357,196609,197114,200477,200749,200795,200802,203372,206402,206412,207467,207468,217400,224862,225167,225616,225651,225924,225938,225942,225946,225947,225951,225954,225959,225960,225964,225966,225981,225982,225987,229378,229598,229599,230104,262145,262650,294914,295134,295135,295640,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819422,819423,819928,847137,884736,884738,884958,884959,903007,917316,917503,917504") == "b5438534e29136fb6bfbbadbc4251429fe39dc21" || 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", "496,1,578,728,742,774,781,783,784,1030,1035,1037,1038,1144,1145,1630,1631,2319,2320,2322,2324,2325,2326,2341,2342,2523,2524,3693,3694,3696,3697,3701,3702,3710,3711,3712,3713,9070,9071,9073,9074,9478,9479,9481,9482,10479,10481,16420,16421,16554,16555,19324,19326,25656,25658,32768,32770,32990,32991,34823,34824,34826,34828,34887,34888,35021,35023,35076,35077,35083,35084,35294,35295,35307,35308,35921,35924,35930,35931,35936,35937,36054,36057,37114,37115,39326,39327,39357,39358,39503,39504,39601,41014,42226,42227,42240,42241,42246,42247,42249,42250,44426,44427,44797,44798,44864,44867,44954,44955,45146,45147,47729,47730,47733,47734,48036,48037,51728,51729,51890,51891,52295,52296,52980,52981,52985,52986,53008,53009,54600,54601,54654,54655,54691,54692,59335,59337,63940,63941,64128,64129,65431,65432,65536,65537,66075,66076,66108,66109,66559,66560,67242,67243,68472,68473,68648,68649,71446,71447,73580,73581,74066,74067,79568,79569,81521,81522,81548,81549,81620,81621,81643,81646,84100,84101,85496,85497,85870,85871,86017,86018,86369,86370,98304,98306,98526,98527,100572,100573,100781,100784,100794,100795,103082,103083,103299,103300,103351,103352,103355,103358,103363,103364,105221,105222,105305,105306,105308,105309,105330,105331,105762,105765,106130,106133,106299,106300,107630,107633,107672,107673,109114,109115,109165,109166,109516,109517,109538,109539,109610,109611,110225,110226,113802,113803,113808,113809,113911,113912,115378,115379,116365,116368,116816,116817,116821,116822,116830,116831,116835,116836,116847,116848,116871,116872,118468,118469,118603,118604,118876,118879,118882,118883,119801,119802,120469,120470,120736,120739,122560,122561,122885,122886,125299,125300,125312,125313,125648,125649,127229,127238,127554,127555,127988,127989,128852,128963,129731,129732,131072,131073,132760,132765,132771,132772,133083,133084,133096,133097,133106,133109,133110,133111,133112,133113,133115,133116,133117,133118,133154,133155,133161,133162,133248,133251,133253,133254,134361,134362,134602,134603,134604,134606,134629,134630,134699,134700,134703,134708,134709,134710,134711,134712,134713,134714,135493,135494,135500,135501,135964,135966,136429,136431,136432,136433,136434,136435,136436,136437,136438,136439,136440,136441,136442,136443,136445,136446,136447,136450,137117,137119,137120,137121,137204,137205,137207,137208,137211,137213,137471,137472,137479,137481,137967,137969,138091,138092,138103,138104,138370,138371,138484,138485,138501,138503,138505,138506,147428,147429,155435,155436,157302,157303,157580,157669,158855,159108,160430,163842,164062,164063,164568,175001,175226,175267,175274,177374,179971,180073,180135,180136,181475,181788,183357,196609,197114,200477,200749,200795,200802,203372,206402,206412,207467,207468,217400,224862,225167,225616,225651,225924,225938,225942,225946,225947,225951,225954,225959,225960,225964,225966,225981,225982,225987,229378,229598,229599,230104,262145,262650,294914,295134,295135,295640,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819422,819423,819928,847137,884736,884738,884958,884959,903007,917316,917503,917504") && 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", "66,1,271,602,610,620,621,702,703,2409,2410,2474,2485,2723,2724,2729,2730,2732,2733,3241,3242,3250,3251,3729,3779,3798,4103,4180,4181,4233,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,163842,163936,163937,164442,196609,197114,229378,229472,229473,229978,262145,262650,294914,295008,295009,295514,327681,328186,360449,360954,366086,386991,393125,393215,393216") == "74c2e99afa6908f703af6a77e82c15e52b5e5af5" || 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", "66,1,271,602,610,620,621,702,703,2409,2410,2474,2485,2723,2724,2729,2730,2732,2733,3241,3242,3250,3251,3729,3779,3798,4103,4180,4181,4233,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,163842,163936,163937,164442,196609,197114,229378,229472,229473,229978,262145,262650,294914,295008,295009,295514,327681,328186,360449,360954,366086,386991,393125,393215,393216") && 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 ----

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:134217728:dcde3c740f412e8cba3b98691ba3bd2c60debf22",
                "EMMC:/dev/block/bootdevice/by-name/boot:134217728:8999a2cb2c443086dded938962eba873f4f0d780",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:134217728:8999a2cb2c443086dded938962eba873f4f0d780");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
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/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
