getprop("ro.product.device") == "lime" || abort("E3004: This package is for \"lime\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/lime/lime:11/RKQ1.201004.002/V12.5.9.0.RJQINXM:user/release-keys");
ui_print("Target: Redmi/lime/lime:11/RKQ1.201004.002/V12.5.10.0.RJQINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/lime/lime:11/RKQ1.201004.002/V12.5.9.0.RJQINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/lime/lime:11/RKQ1.201004.002/V12.5.10.0.RJQINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/lime/lime:11/RKQ1.201004.002/V12.5.9.0.RJQINXM:user/release-keys or Redmi/lime/lime:11/RKQ1.201004.002/V12.5.10.0.RJQINXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e15f249d6b3dff811efd5dfdf3df9540714c13c4"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3d6e8ba541c6272e1001547ff2a8e02cba7cfa08")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e15f249d6b3dff811efd5dfdf3df9540714c13c4"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3d6e8ba541c6272e1001547ff2a8e02cba7cfa08"),"\" has unexpected contents."));
apply_patch_space(100663296) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "490,1,33,45,55,75,79,107,108,21363,21364,21394,21395,27560,27561,28976,56690,56697,56698,58043,58044,60201,60202,63025,63026,63770,63771,65331,65332,65524,65525,65536,65553,66762,66763,71132,71133,72250,72251,74269,74270,74751,74752,77915,77916,78512,78513,78700,78701,79403,79404,79620,79622,79784,79788,79796,79797,79858,79862,79868,79869,84750,84751,84764,84768,84772,84773,86194,86200,86233,86234,86241,86247,86248,86249,86256,86262,86263,86264,89758,89762,89802,89803,90784,90785,91435,91436,93367,93370,93378,93379,93401,93402,93406,93407,93843,93844,94018,94019,94051,94057,94058,94059,94181,94187,94188,95290,95428,98806,98821,98827,98828,98829,103771,103772,104554,104558,104624,104625,105714,105718,105739,105740,106388,106389,106493,106508,106513,106516,106517,106553,106839,106840,106856,106857,106988,106989,106991,106992,106994,106995,114287,114291,114317,114318,114448,114452,114457,114458,114592,114596,114603,114604,119889,119893,119962,119963,119991,119992,120031,120037,120038,120039,120287,120288,120322,120328,120329,120330,120806,120810,120826,120827,131072,131089,132678,132679,136195,136196,136287,136288,136292,136293,136958,136962,137068,137069,137621,137627,137628,137629,139500,139504,139549,139550,139554,139560,139561,139562,139593,139599,139600,139601,141292,141296,141320,141321,145366,145370,145407,145408,147175,147179,147197,147198,147228,147229,147235,147241,147242,147243,149048,149052,149094,149095,151628,151629,152743,152745,152746,152810,153260,153264,153666,153667,154357,154361,154377,154378,156493,156497,156525,156526,156537,156839,156876,156877,159574,159575,163840,163859,165711,165715,165802,165803,167018,167019,167163,167164,167332,167336,167363,167364,168007,168011,168032,168033,171306,171307,174577,174581,174606,174607,174626,174627,176937,176938,177682,177686,177742,177743,179568,179572,179611,179612,179655,179661,179667,184027,184048,184049,187372,187373,189472,189476,189507,189508,190640,190646,190669,190670,190849,190850,192167,192173,192195,192196,193674,193675,194147,194151,194181,194182,194876,194877,195537,195541,195563,195564,196608,196625,197779,197783,197815,197816,204638,204639,205162,205163,214552,214556,214627,214628,214680,214681,216379,216380,217289,217293,217318,217319,217332,217333,217338,217344,217349,217350,220719,220720,222365,222369,222416,222417,222448,222449,222453,222457,222458,222459,222505,222513,222514,222515,225340,225346,225391,225392,225424,225430,225431,225432,225476,225482,225483,298574,298586,298587,298594,298595,298629,298630,298635,298636,298661,298662,298745,298748,298754,298755,298818,298819,298822,298827,298828,298829,298830,298831,298832,298833,299756,299757,299764,299765,300318,300319,300320,300324,300325,300326,300327,300328,300329,300330,300331,300332,300333,300334,300335,300336,300337,300338,300340,300341,300342,300345,301589,301591,301731,301732,301737,301739,301997,301998,302000,302002,302545,302546,302561,302562,302579,302580,302726,302727,302735,302737,302739,302740,311763,311764,319698,319699,321683,321684,322314,322317,322323,322324,322329,322330,322335,322386,322391,325726,325731,325738,325752,325758,325768,325769,325774,325775,325780,325906,325910,325954,325963,325965,325971,325972,325977,325978,325983,326038,326043,655375,655377,667057,669076,679679,679824,679825") == "cfc0035f514fb23f86c29851343b22279fb3fc8c" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "490,1,33,45,55,75,79,107,108,21363,21364,21394,21395,27560,27561,28976,56690,56697,56698,58043,58044,60201,60202,63025,63026,63770,63771,65331,65332,65524,65525,65536,65553,66762,66763,71132,71133,72250,72251,74269,74270,74751,74752,77915,77916,78512,78513,78700,78701,79403,79404,79620,79622,79784,79788,79796,79797,79858,79862,79868,79869,84750,84751,84764,84768,84772,84773,86194,86200,86233,86234,86241,86247,86248,86249,86256,86262,86263,86264,89758,89762,89802,89803,90784,90785,91435,91436,93367,93370,93378,93379,93401,93402,93406,93407,93843,93844,94018,94019,94051,94057,94058,94059,94181,94187,94188,95290,95428,98806,98821,98827,98828,98829,103771,103772,104554,104558,104624,104625,105714,105718,105739,105740,106388,106389,106493,106508,106513,106516,106517,106553,106839,106840,106856,106857,106988,106989,106991,106992,106994,106995,114287,114291,114317,114318,114448,114452,114457,114458,114592,114596,114603,114604,119889,119893,119962,119963,119991,119992,120031,120037,120038,120039,120287,120288,120322,120328,120329,120330,120806,120810,120826,120827,131072,131089,132678,132679,136195,136196,136287,136288,136292,136293,136958,136962,137068,137069,137621,137627,137628,137629,139500,139504,139549,139550,139554,139560,139561,139562,139593,139599,139600,139601,141292,141296,141320,141321,145366,145370,145407,145408,147175,147179,147197,147198,147228,147229,147235,147241,147242,147243,149048,149052,149094,149095,151628,151629,152743,152745,152746,152810,153260,153264,153666,153667,154357,154361,154377,154378,156493,156497,156525,156526,156537,156839,156876,156877,159574,159575,163840,163859,165711,165715,165802,165803,167018,167019,167163,167164,167332,167336,167363,167364,168007,168011,168032,168033,171306,171307,174577,174581,174606,174607,174626,174627,176937,176938,177682,177686,177742,177743,179568,179572,179611,179612,179655,179661,179667,184027,184048,184049,187372,187373,189472,189476,189507,189508,190640,190646,190669,190670,190849,190850,192167,192173,192195,192196,193674,193675,194147,194151,194181,194182,194876,194877,195537,195541,195563,195564,196608,196625,197779,197783,197815,197816,204638,204639,205162,205163,214552,214556,214627,214628,214680,214681,216379,216380,217289,217293,217318,217319,217332,217333,217338,217344,217349,217350,220719,220720,222365,222369,222416,222417,222448,222449,222453,222457,222458,222459,222505,222513,222514,222515,225340,225346,225391,225392,225424,225430,225431,225432,225476,225482,225483,298574,298586,298587,298594,298595,298629,298630,298635,298636,298661,298662,298745,298748,298754,298755,298818,298819,298822,298827,298828,298829,298830,298831,298832,298833,299756,299757,299764,299765,300318,300319,300320,300324,300325,300326,300327,300328,300329,300330,300331,300332,300333,300334,300335,300336,300337,300338,300340,300341,300342,300345,301589,301591,301731,301732,301737,301739,301997,301998,302000,302002,302545,302546,302561,302562,302579,302580,302726,302727,302735,302737,302739,302740,311763,311764,319698,319699,321683,321684,322314,322317,322323,322324,322329,322330,322335,322386,322391,325726,325731,325738,325752,325758,325768,325769,325774,325775,325780,325906,325910,325954,325963,325965,325971,325972,325977,325978,325983,326038,326043,655375,655377,667057,669076,679679,679824,679825") && block_image_verify(map_partition("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(map_partition("vendor"), "52,1,31,42,46,51,52,132,140,146,147,1824,1828,2307,2308,2553,2557,2562,2563,2566,2570,2573,2574,2597,2601,2605,2606,2629,2630,2666,2670,2720,2721,2882,2883,2888,2894,2895,2902,2916,2917,4921,4970,4976,294934,294936,320785,320790,325036,326032,331200,331280,331281") == "ec1f805cfe26d8b3b84785bc1d65b110cc9c4d9d" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "52,1,31,42,46,51,52,132,140,146,147,1824,1828,2307,2308,2553,2557,2562,2563,2566,2570,2573,2574,2597,2601,2605,2606,2629,2630,2666,2670,2720,2721,2882,2883,2888,2894,2895,2902,2916,2917,4921,4970,4976,294934,294936,320785,320790,325036,326032,331200,331280,331281") && block_image_verify(map_partition("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(map_partition("product"), "366,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,10928,10929,14299,14303,14418,14419,18772,18773,27186,27187,32768,32777,37003,37004,37679,37683,38649,38650,39992,39993,40127,40128,40183,40184,41798,41799,42161,42165,42684,42685,42697,42703,42704,42705,44545,44549,44591,44592,44600,45983,55734,55735,59606,59607,59857,59862,59874,59875,59939,59942,60135,60140,60397,60399,63881,63882,65536,65543,73730,73731,83275,83282,84758,84759,90134,90135,93284,93285,98304,98313,102845,102846,102853,102854,102983,102989,102990,102991,103004,103010,103011,103012,110533,110534,111773,111777,112790,112791,116639,116641,130124,130125,130194,130195,131072,131079,132423,132425,152923,152924,154932,154933,162234,162235,163840,163849,168615,168616,172605,172606,172907,172908,172960,172962,172971,172972,173066,173068,173857,173858,173865,173866,173872,173873,178210,178211,178436,178438,178448,178450,178496,178498,178508,178510,178519,178520,180338,180339,180340,180342,180506,180507,180508,180509,180511,180512,180529,180530,180533,180535,180536,180538,180554,180555,180567,180568,180607,180611,180615,180619,180620,180624,180625,180641,181056,181057,181428,181429,182914,182915,183004,183006,183009,183010,183013,183014,183017,183018,183021,183022,183025,183026,183029,183030,183044,183045,183051,183052,183058,183059,183065,183066,183072,183073,183079,183080,183122,183123,183144,183145,183152,183153,183174,183175,183192,183193,183199,183200,183218,183219,183226,183227,183246,183247,183262,183263,183268,183269,183289,183290,183297,183298,183319,183320,183337,183338,183344,183345,183947,183949,186395,186396,196608,196632,196633,196634,203758,203760,204901,204902,213101,213103,214153,214155,216395,216396,216570,216574,216622,216623,216638,216639,216879,216883,217134,217135,225695,225696,229231,229232,229281,229282,229376,229385,230860,230864,230932,230933,230963,230964,231100,231104,231112,231113,232501,232505,232540,232541,232682,232688,232689,232690,232694,232695,232812,232816,232817,232818,234218,234222,234266,236989,237721,237722,244160,244161,248382,248383,249910,249911,250575,250579,250595,250596,252169,252173,252198,252199,262144,262147,263034,263035,288180,288181,288206,288207,288410,288411,288888,288889,289128,289129,289868,289869,290448,290449,290626,290627,291602,291604,292718,292719,294912,294915,295650,295651,296588,296591,299925,299926,307279,312151,312227,312228") == "f90e0ec19c72efcac97f3c5a94944ad9eaedf0cf" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "366,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,10928,10929,14299,14303,14418,14419,18772,18773,27186,27187,32768,32777,37003,37004,37679,37683,38649,38650,39992,39993,40127,40128,40183,40184,41798,41799,42161,42165,42684,42685,42697,42703,42704,42705,44545,44549,44591,44592,44600,45983,55734,55735,59606,59607,59857,59862,59874,59875,59939,59942,60135,60140,60397,60399,63881,63882,65536,65543,73730,73731,83275,83282,84758,84759,90134,90135,93284,93285,98304,98313,102845,102846,102853,102854,102983,102989,102990,102991,103004,103010,103011,103012,110533,110534,111773,111777,112790,112791,116639,116641,130124,130125,130194,130195,131072,131079,132423,132425,152923,152924,154932,154933,162234,162235,163840,163849,168615,168616,172605,172606,172907,172908,172960,172962,172971,172972,173066,173068,173857,173858,173865,173866,173872,173873,178210,178211,178436,178438,178448,178450,178496,178498,178508,178510,178519,178520,180338,180339,180340,180342,180506,180507,180508,180509,180511,180512,180529,180530,180533,180535,180536,180538,180554,180555,180567,180568,180607,180611,180615,180619,180620,180624,180625,180641,181056,181057,181428,181429,182914,182915,183004,183006,183009,183010,183013,183014,183017,183018,183021,183022,183025,183026,183029,183030,183044,183045,183051,183052,183058,183059,183065,183066,183072,183073,183079,183080,183122,183123,183144,183145,183152,183153,183174,183175,183192,183193,183199,183200,183218,183219,183226,183227,183246,183247,183262,183263,183268,183269,183289,183290,183297,183298,183319,183320,183337,183338,183344,183345,183947,183949,186395,186396,196608,196632,196633,196634,203758,203760,204901,204902,213101,213103,214153,214155,216395,216396,216570,216574,216622,216623,216638,216639,216879,216883,217134,217135,225695,225696,229231,229232,229281,229282,229376,229385,230860,230864,230932,230933,230963,230964,231100,231104,231112,231113,232501,232505,232540,232541,232682,232688,232689,232690,232694,232695,232812,232816,232817,232818,234218,234222,234266,236989,237721,237722,244160,244161,248382,248383,249910,249911,250575,250579,250595,250596,252169,252173,252198,252199,262144,262147,263034,263035,288180,288181,288206,288207,288410,288411,288888,288889,289128,289129,289868,289869,290448,290449,290626,290627,291602,291604,292718,292719,294912,294915,295650,295651,296588,296591,299925,299926,307279,312151,312227,312228") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "248,1,31,40,44,48,49,57,63,64,65,81,87,88,89,148,152,157,158,719,721,778,782,797,798,827,833,834,835,1724,1730,1753,1754,1761,1767,1768,1769,1997,2001,2010,2011,2042,2048,2049,2050,2246,2250,2254,2255,2259,2263,2268,2269,2274,2275,2299,2305,2306,2307,2313,2319,2320,2321,2324,2325,2337,2343,2344,2345,2356,2357,2363,2367,2371,2372,2377,2383,2387,2388,2397,2403,2404,2405,2418,2424,2425,2426,2438,2444,2445,2446,2449,2456,2464,2471,2539,2546,2552,2559,2595,2600,2620,2627,2646,2653,2671,2672,2882,2884,2893,2894,2906,2907,2908,2909,2910,2911,2920,2921,2944,2945,2993,2998,3001,3004,3007,3010,3013,3015,3019,3020,3024,3027,3031,3032,3049,3112,3555,3557,3561,3565,3566,3570,3575,3577,3582,3586,3587,3591,3592,3596,3597,3601,3602,3606,3607,3611,3612,3616,3617,3621,3622,3624,3631,3635,3636,3640,3641,3645,3646,3650,3651,3655,3656,3660,3661,3665,3666,3668,3669,3673,3674,3678,3679,3681,3682,3686,3687,3691,3692,3696,3697,3701,3702,3706,3707,3709,3713,3717,3718,3722,3723,3725,3726,3728,3729,3733,3734,3738,3739,3741,3742,3746,3747,3751,3752,3756,3757,3761,3762,3764,3765,3769,3770,3772,3776,3793,3798,3832,3835,3948,6360,6361,6644,7314,7596,7597,8786,8787,9210,10312,10483,98326,98328,119066,119428,121324,121363,121364") == "2abf27ed657a2e0fc7f99c9c12a0dbc2c4583a66" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "248,1,31,40,44,48,49,57,63,64,65,81,87,88,89,148,152,157,158,719,721,778,782,797,798,827,833,834,835,1724,1730,1753,1754,1761,1767,1768,1769,1997,2001,2010,2011,2042,2048,2049,2050,2246,2250,2254,2255,2259,2263,2268,2269,2274,2275,2299,2305,2306,2307,2313,2319,2320,2321,2324,2325,2337,2343,2344,2345,2356,2357,2363,2367,2371,2372,2377,2383,2387,2388,2397,2403,2404,2405,2418,2424,2425,2426,2438,2444,2445,2446,2449,2456,2464,2471,2539,2546,2552,2559,2595,2600,2620,2627,2646,2653,2671,2672,2882,2884,2893,2894,2906,2907,2908,2909,2910,2911,2920,2921,2944,2945,2993,2998,3001,3004,3007,3010,3013,3015,3019,3020,3024,3027,3031,3032,3049,3112,3555,3557,3561,3565,3566,3570,3575,3577,3582,3586,3587,3591,3592,3596,3597,3601,3602,3606,3607,3611,3612,3616,3617,3621,3622,3624,3631,3635,3636,3640,3641,3645,3646,3650,3651,3655,3656,3660,3661,3665,3666,3668,3669,3673,3674,3678,3679,3681,3682,3686,3687,3691,3692,3696,3697,3701,3702,3706,3707,3709,3713,3717,3718,3722,3723,3725,3726,3728,3729,3733,3734,3738,3739,3741,3742,3746,3747,3751,3752,3756,3757,3761,3762,3764,3765,3769,3770,3772,3776,3793,3798,3832,3835,3948,6360,6361,6644,7314,7596,7597,8786,8787,9210,10312,10483,98326,98328,119066,119428,121324,121363,121364") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

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


# ---- 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/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/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
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/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/storsec.mbn", "/dev/block/bootdevice/by-name/storsecbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.600000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e15f249d6b3dff811efd5dfdf3df9540714c13c4"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3d6e8ba541c6272e1001547ff2a8e02cba7cfa08"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3d6e8ba541c6272e1001547ff2a8e02cba7cfa08")));

# ---- 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");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
set_progress(1.000000);
