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.7.0.RJQMIXM:user/release-keys");
ui_print("Target: Redmi/lime/lime:11/RKQ1.201004.002/V12.5.8.0.RJQMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/lime/lime:11/RKQ1.201004.002/V12.5.7.0.RJQMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/lime/lime:11/RKQ1.201004.002/V12.5.8.0.RJQMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/lime/lime:11/RKQ1.201004.002/V12.5.7.0.RJQMIXM:user/release-keys or Redmi/lime/lime:11/RKQ1.201004.002/V12.5.8.0.RJQMIXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:036c2bc28655aaded0d51580b721904030bf9640"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3dbb1247aafecbafaf640bf8dba23903161faca9")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:036c2bc28655aaded0d51580b721904030bf9640"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3dbb1247aafecbafaf640bf8dba23903161faca9"),"\" has unexpected contents."));
apply_patch_space(100663296) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1104,1,33,45,55,75,79,107,108,21363,21364,21394,21395,27559,27560,28974,43326,50492,56687,56694,56695,58032,58033,59154,59155,60885,60886,61721,61722,62929,62930,63081,63082,64006,64007,65536,65553,68388,68389,69374,69375,70740,70741,71190,71191,73360,73361,73622,73623,73715,73716,73966,73967,74183,74185,74323,74327,74335,74336,74395,74399,74405,74406,79284,79285,79297,79301,79305,79306,80756,80762,80796,80797,80803,80809,80810,80811,80816,80822,80823,80824,84320,84324,84364,84365,85346,85347,85997,85998,87929,87932,87940,87941,87963,87964,87968,87969,88404,88405,88565,88566,88597,88603,88604,88605,88725,88731,88732,88733,90119,90120,93914,93918,93956,93957,93971,93977,93978,93979,97639,97640,98304,98323,99705,99709,99775,99776,100864,100868,100889,100890,101538,101539,101643,101658,101663,101666,101667,101703,101989,101990,102006,102007,102138,102139,102141,102142,102144,102145,109436,109440,109466,109467,109596,109600,109605,109606,109739,109743,109750,109751,115034,115038,115107,115108,115136,115137,115175,115181,115182,115183,115431,115432,115465,115471,115472,115473,115948,115952,115968,115969,116521,116527,116528,116529,118399,118403,118448,118449,118453,118459,118460,118461,118492,118498,118499,118500,120190,120194,120218,120219,120243,120244,120246,120247,120248,120249,120250,120251,120281,120282,124180,124184,124221,124222,126281,126285,126310,126311,126340,126341,126346,126352,126353,126354,128159,128163,128205,128206,130739,130740,131072,131089,131864,131866,131867,131868,131902,131906,131923,131924,131929,131930,132380,132384,132786,132787,133477,133481,133497,133498,135607,135611,135651,135652,136104,136108,136121,136122,136159,136160,138858,138859,144977,144981,145068,145069,146283,146284,146428,146429,146594,146598,146625,146626,147267,147271,147291,147292,150565,150566,153837,153841,153886,153887,156294,156295,156945,156949,157005,157006,158799,158803,158841,158842,158883,158889,158895,158896,162549,162550,163200,163206,163246,163247,163268,163269,163840,163859,166612,166613,168712,168716,168747,168748,169879,169885,169908,169909,170086,170087,171405,171411,171433,171434,173383,173387,173417,173418,174112,174113,174774,174778,174800,174801,177002,177006,177038,177039,196608,196625,201397,201398,201683,201684,201859,201860,203609,203613,203781,203782,203874,203875,211221,211223,215431,215432,220617,220621,220692,220693,220745,220746,222470,222471,223408,223412,223437,223438,223451,223452,223455,223461,223466,223467,226836,226837,228485,228489,228536,228537,228568,228569,228571,228575,228576,228577,228621,228629,228630,230605,230636,230642,230643,230644,230686,230692,230693,230694,233016,233017,234030,234034,234073,234074,234156,234160,234165,234166,234177,234183,234184,234185,234752,234756,234771,234772,235995,235999,236025,236026,245396,245397,245398,245474,247368,247369,247395,247396,250331,250335,250501,250502,250581,250582,250590,250596,250597,250598,251271,251272,251886,251890,251912,251913,253586,253590,253607,253608,254664,254665,256300,256304,256332,256333,256340,256346,256347,256348,256353,256357,256362,256363,256367,256368,256383,256389,256390,256391,257374,257378,259126,259127,259151,259157,259158,259159,261603,261604,262144,262161,263937,263941,263988,263989,264015,264016,264364,264368,264381,264382,265804,265810,265832,265833,265842,265848,265849,265850,267297,267301,268738,268739,268763,268764,273595,273596,274631,274632,275756,275757,277408,277412,277495,277496,277532,277536,280050,280054,280068,280069,280597,280601,280609,280610,283407,283408,283414,283421,283434,283435,284045,284046,284631,284684,285225,285234,285582,285583,288855,288856,291664,291669,291670,291671,291672,291673,291674,291675,291676,291677,291678,291679,291680,291681,291682,291683,291684,291685,291686,291687,291688,291689,291690,291691,291692,291693,291694,291695,291696,291697,291698,291699,291700,291701,291702,291703,291704,291705,291706,291707,291708,291709,291710,291711,291712,291713,291714,291715,291716,291717,291718,291719,291720,291721,291722,291723,291724,291725,291726,291727,291728,291729,291730,291731,291732,291733,291734,291735,291736,291737,291738,291739,291740,291741,291742,291743,291744,291745,291746,291747,291748,291749,291750,291751,291752,291753,291754,291755,291756,291757,291758,291759,291760,291761,291762,291763,291764,291765,291766,291767,291768,291769,291770,291771,291772,291773,291774,291775,291776,291777,291778,291779,291780,291781,291782,291783,291784,291785,291786,291787,291788,291789,291790,291791,291792,291793,291794,291795,291796,291797,291798,291799,291800,291801,291802,291803,291804,291805,291806,291807,291808,291809,291810,291811,291812,291813,291814,291815,291816,291817,291818,291819,291820,291821,291822,291823,291824,291825,291826,291827,291828,291829,291830,291831,291832,291833,291834,291835,291836,291837,291838,291839,291840,291841,291842,291843,291844,291845,291846,291847,291848,291849,291850,291851,291852,291853,291854,291855,291856,291857,291858,291859,291860,291861,291862,291863,291864,291865,291866,291867,291868,291869,291870,291871,291872,291873,291874,291875,291876,291877,291878,291879,291880,291881,291882,291883,291884,291885,291886,291887,291888,291889,291890,291891,291892,291893,291894,291895,291896,291897,291898,291899,291900,291901,291902,291903,291904,291905,291906,291907,291908,291909,291910,291911,291912,291913,291914,291915,291916,291917,291918,291919,291920,291921,291922,291923,291924,291925,291926,291927,291928,291929,291930,291931,291932,291933,291934,291935,291936,291937,291938,291939,291940,291941,291942,291943,291944,291945,291946,291947,291948,291949,291950,291951,291952,291953,291954,291955,291956,291957,291958,291959,291960,291961,291962,291963,291964,291965,291966,291967,291968,291969,291970,291971,291972,291973,291974,291975,291976,291977,291978,291979,291980,291981,291982,291983,291984,291985,291986,291987,291988,291989,291990,291991,291992,291993,291994,291995,291996,291997,291998,291999,292000,292001,292002,292003,292004,292005,292006,292007,292008,292009,292010,292011,292012,292013,292014,292015,292016,292017,292018,292019,292020,292021,292022,292023,292024,292025,292026,292027,292028,292029,292030,292031,292032,292033,292034,292035,292036,292037,292038,292039,292040,292041,292042,292043,292044,292045,292046,292047,292048,292049,292050,292051,292052,292053,292054,292055,292056,292057,292058,292059,292060,292061,292062,292063,292064,292065,292066,292067,292068,292069,292070,292071,292072,292073,292074,292075,292076,292077,292078,292079,292080,292081,292082,292083,292084,292085,292086,292087,292088,292089,292090,292091,292092,292093,292094,292095,292096,292097,292098,292099,292100,292101,292102,292103,292104,292105,292106,292107,292108,292109,292110,292111,292112,292114,292119,292120,294912,294931,297898,297899,299379,299380,299384,299385,303717,303718,303864,303865,306650,306651,306976,306977,306979,307001,307013,307014,307021,307022,307056,307057,307062,307063,307088,307089,307172,307175,307181,307182,307244,307245,307248,307253,307254,307255,307256,307257,307258,307259,308182,308183,308190,308191,308744,308745,308746,308750,308751,308752,308753,308754,308755,308756,308757,308758,308759,308760,308761,308762,308763,308764,308766,308767,308768,308771,310015,310017,310157,310158,310161,310163,310421,310422,310424,310426,310969,310970,310985,310986,311001,311002,311320,311321,311467,311468,311476,311478,311480,311481,320504,320505,327680,327697,328456,328457,330441,330442,331072,331075,331081,331082,331087,331088,331093,331144,331149,655374,655377,658351,660344,670808,670949,670950") == "829fca99222769424af33547bb06723c7b8db839" || 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"), "1104,1,33,45,55,75,79,107,108,21363,21364,21394,21395,27559,27560,28974,43326,50492,56687,56694,56695,58032,58033,59154,59155,60885,60886,61721,61722,62929,62930,63081,63082,64006,64007,65536,65553,68388,68389,69374,69375,70740,70741,71190,71191,73360,73361,73622,73623,73715,73716,73966,73967,74183,74185,74323,74327,74335,74336,74395,74399,74405,74406,79284,79285,79297,79301,79305,79306,80756,80762,80796,80797,80803,80809,80810,80811,80816,80822,80823,80824,84320,84324,84364,84365,85346,85347,85997,85998,87929,87932,87940,87941,87963,87964,87968,87969,88404,88405,88565,88566,88597,88603,88604,88605,88725,88731,88732,88733,90119,90120,93914,93918,93956,93957,93971,93977,93978,93979,97639,97640,98304,98323,99705,99709,99775,99776,100864,100868,100889,100890,101538,101539,101643,101658,101663,101666,101667,101703,101989,101990,102006,102007,102138,102139,102141,102142,102144,102145,109436,109440,109466,109467,109596,109600,109605,109606,109739,109743,109750,109751,115034,115038,115107,115108,115136,115137,115175,115181,115182,115183,115431,115432,115465,115471,115472,115473,115948,115952,115968,115969,116521,116527,116528,116529,118399,118403,118448,118449,118453,118459,118460,118461,118492,118498,118499,118500,120190,120194,120218,120219,120243,120244,120246,120247,120248,120249,120250,120251,120281,120282,124180,124184,124221,124222,126281,126285,126310,126311,126340,126341,126346,126352,126353,126354,128159,128163,128205,128206,130739,130740,131072,131089,131864,131866,131867,131868,131902,131906,131923,131924,131929,131930,132380,132384,132786,132787,133477,133481,133497,133498,135607,135611,135651,135652,136104,136108,136121,136122,136159,136160,138858,138859,144977,144981,145068,145069,146283,146284,146428,146429,146594,146598,146625,146626,147267,147271,147291,147292,150565,150566,153837,153841,153886,153887,156294,156295,156945,156949,157005,157006,158799,158803,158841,158842,158883,158889,158895,158896,162549,162550,163200,163206,163246,163247,163268,163269,163840,163859,166612,166613,168712,168716,168747,168748,169879,169885,169908,169909,170086,170087,171405,171411,171433,171434,173383,173387,173417,173418,174112,174113,174774,174778,174800,174801,177002,177006,177038,177039,196608,196625,201397,201398,201683,201684,201859,201860,203609,203613,203781,203782,203874,203875,211221,211223,215431,215432,220617,220621,220692,220693,220745,220746,222470,222471,223408,223412,223437,223438,223451,223452,223455,223461,223466,223467,226836,226837,228485,228489,228536,228537,228568,228569,228571,228575,228576,228577,228621,228629,228630,230605,230636,230642,230643,230644,230686,230692,230693,230694,233016,233017,234030,234034,234073,234074,234156,234160,234165,234166,234177,234183,234184,234185,234752,234756,234771,234772,235995,235999,236025,236026,245396,245397,245398,245474,247368,247369,247395,247396,250331,250335,250501,250502,250581,250582,250590,250596,250597,250598,251271,251272,251886,251890,251912,251913,253586,253590,253607,253608,254664,254665,256300,256304,256332,256333,256340,256346,256347,256348,256353,256357,256362,256363,256367,256368,256383,256389,256390,256391,257374,257378,259126,259127,259151,259157,259158,259159,261603,261604,262144,262161,263937,263941,263988,263989,264015,264016,264364,264368,264381,264382,265804,265810,265832,265833,265842,265848,265849,265850,267297,267301,268738,268739,268763,268764,273595,273596,274631,274632,275756,275757,277408,277412,277495,277496,277532,277536,280050,280054,280068,280069,280597,280601,280609,280610,283407,283408,283414,283421,283434,283435,284045,284046,284631,284684,285225,285234,285582,285583,288855,288856,291664,291669,291670,291671,291672,291673,291674,291675,291676,291677,291678,291679,291680,291681,291682,291683,291684,291685,291686,291687,291688,291689,291690,291691,291692,291693,291694,291695,291696,291697,291698,291699,291700,291701,291702,291703,291704,291705,291706,291707,291708,291709,291710,291711,291712,291713,291714,291715,291716,291717,291718,291719,291720,291721,291722,291723,291724,291725,291726,291727,291728,291729,291730,291731,291732,291733,291734,291735,291736,291737,291738,291739,291740,291741,291742,291743,291744,291745,291746,291747,291748,291749,291750,291751,291752,291753,291754,291755,291756,291757,291758,291759,291760,291761,291762,291763,291764,291765,291766,291767,291768,291769,291770,291771,291772,291773,291774,291775,291776,291777,291778,291779,291780,291781,291782,291783,291784,291785,291786,291787,291788,291789,291790,291791,291792,291793,291794,291795,291796,291797,291798,291799,291800,291801,291802,291803,291804,291805,291806,291807,291808,291809,291810,291811,291812,291813,291814,291815,291816,291817,291818,291819,291820,291821,291822,291823,291824,291825,291826,291827,291828,291829,291830,291831,291832,291833,291834,291835,291836,291837,291838,291839,291840,291841,291842,291843,291844,291845,291846,291847,291848,291849,291850,291851,291852,291853,291854,291855,291856,291857,291858,291859,291860,291861,291862,291863,291864,291865,291866,291867,291868,291869,291870,291871,291872,291873,291874,291875,291876,291877,291878,291879,291880,291881,291882,291883,291884,291885,291886,291887,291888,291889,291890,291891,291892,291893,291894,291895,291896,291897,291898,291899,291900,291901,291902,291903,291904,291905,291906,291907,291908,291909,291910,291911,291912,291913,291914,291915,291916,291917,291918,291919,291920,291921,291922,291923,291924,291925,291926,291927,291928,291929,291930,291931,291932,291933,291934,291935,291936,291937,291938,291939,291940,291941,291942,291943,291944,291945,291946,291947,291948,291949,291950,291951,291952,291953,291954,291955,291956,291957,291958,291959,291960,291961,291962,291963,291964,291965,291966,291967,291968,291969,291970,291971,291972,291973,291974,291975,291976,291977,291978,291979,291980,291981,291982,291983,291984,291985,291986,291987,291988,291989,291990,291991,291992,291993,291994,291995,291996,291997,291998,291999,292000,292001,292002,292003,292004,292005,292006,292007,292008,292009,292010,292011,292012,292013,292014,292015,292016,292017,292018,292019,292020,292021,292022,292023,292024,292025,292026,292027,292028,292029,292030,292031,292032,292033,292034,292035,292036,292037,292038,292039,292040,292041,292042,292043,292044,292045,292046,292047,292048,292049,292050,292051,292052,292053,292054,292055,292056,292057,292058,292059,292060,292061,292062,292063,292064,292065,292066,292067,292068,292069,292070,292071,292072,292073,292074,292075,292076,292077,292078,292079,292080,292081,292082,292083,292084,292085,292086,292087,292088,292089,292090,292091,292092,292093,292094,292095,292096,292097,292098,292099,292100,292101,292102,292103,292104,292105,292106,292107,292108,292109,292110,292111,292112,292114,292119,292120,294912,294931,297898,297899,299379,299380,299384,299385,303717,303718,303864,303865,306650,306651,306976,306977,306979,307001,307013,307014,307021,307022,307056,307057,307062,307063,307088,307089,307172,307175,307181,307182,307244,307245,307248,307253,307254,307255,307256,307257,307258,307259,308182,308183,308190,308191,308744,308745,308746,308750,308751,308752,308753,308754,308755,308756,308757,308758,308759,308760,308761,308762,308763,308764,308766,308767,308768,308771,310015,310017,310157,310158,310161,310163,310421,310422,310424,310426,310969,310970,310985,310986,311001,311002,311320,311321,311467,311468,311476,311478,311480,311481,320504,320505,327680,327697,328456,328457,330441,330442,331072,331075,331081,331082,331087,331088,331093,331144,331149,655374,655377,658351,660344,670808,670949,670950") && 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"), "388,1,31,41,45,50,51,129,137,143,144,1821,1825,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2590,2594,2598,2599,2622,2623,2659,2663,2713,2714,2873,2874,2877,2883,2884,2891,2904,2905,4964,5303,5391,5392,7937,7938,9305,9306,9475,9522,10008,10010,10011,10012,10014,10017,10018,10019,10021,10023,10024,10025,10027,10029,10030,10031,10033,10035,10036,10037,10040,10042,10043,10044,10047,10049,10052,10054,10062,10064,10067,10069,10072,10074,10075,10076,10081,10082,10084,10086,10087,10088,10090,10092,10093,10094,10096,10098,10099,10100,10102,10104,10105,10106,10131,10132,10136,10137,10143,10144,10147,10148,10149,10150,10153,10154,10155,10156,10159,10160,10161,10162,10167,10168,10171,10172,10173,10174,10177,10178,10179,10180,10184,10185,10189,10190,10193,10195,10198,10200,10204,10205,10210,10211,10212,10213,10216,10217,10218,10219,10222,10223,10224,10225,10228,10229,10230,10231,10234,10235,10236,10237,10240,10241,10242,10243,10247,10248,10538,10539,11566,11574,26210,26211,26480,26482,26555,26556,28370,28371,32768,32800,33021,33022,33657,33659,34300,34301,34833,34834,35372,35373,35376,35377,35819,35820,36726,36727,36735,36736,36831,36832,38758,38760,49737,49738,50038,50039,50043,50045,50062,50063,50098,50099,50108,50109,50166,50167,51598,51599,55675,55676,55678,55680,55744,55745,55815,55816,55883,55884,55886,55887,55889,55890,55949,55951,55953,55954,56018,56019,56089,56090,56157,56158,56160,56161,56163,56166,56167,56169,56171,56172,56178,56179,56181,56182,56185,56186,56197,56199,56201,56202,56208,56209,56211,56212,56215,56216,56218,56219,56222,56225,56227,56228,56230,56232,56235,56237,56239,56240,56248,56249,56251,56252,56262,56263,56265,56266,56268,56269,56272,56273,56284,56286,56288,56289,56295,56296,56298,56299,56301,56302,56304,56305,56307,56318,56378,56379,56381,56382,56392,56393,56459,56460,56537,56538,56548,56549,56615,56616,56692,56693,56772,56773,56849,56850,56926,56927,57003,57004,57014,57015,57018,57019,57082,57083,57158,57159,57169,57170,57236,57237,57313,57314,57386,57387,57389,57390,57402,57407,57408,57409,57413,57414,57416,57417,57420,57421,58961,58962,58997,58999,59004,59006,59132,59133,59182,59185,59638,59639,59839,59840,59846,59847,59867,59868,59875,59876,60106,294934,294936,316552,316553,323458,324449,329592,329672,329673") == "e12347bd9ceebdf9b3839fd3913e4cd0857f6e23" || 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"), "388,1,31,41,45,50,51,129,137,143,144,1821,1825,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2590,2594,2598,2599,2622,2623,2659,2663,2713,2714,2873,2874,2877,2883,2884,2891,2904,2905,4964,5303,5391,5392,7937,7938,9305,9306,9475,9522,10008,10010,10011,10012,10014,10017,10018,10019,10021,10023,10024,10025,10027,10029,10030,10031,10033,10035,10036,10037,10040,10042,10043,10044,10047,10049,10052,10054,10062,10064,10067,10069,10072,10074,10075,10076,10081,10082,10084,10086,10087,10088,10090,10092,10093,10094,10096,10098,10099,10100,10102,10104,10105,10106,10131,10132,10136,10137,10143,10144,10147,10148,10149,10150,10153,10154,10155,10156,10159,10160,10161,10162,10167,10168,10171,10172,10173,10174,10177,10178,10179,10180,10184,10185,10189,10190,10193,10195,10198,10200,10204,10205,10210,10211,10212,10213,10216,10217,10218,10219,10222,10223,10224,10225,10228,10229,10230,10231,10234,10235,10236,10237,10240,10241,10242,10243,10247,10248,10538,10539,11566,11574,26210,26211,26480,26482,26555,26556,28370,28371,32768,32800,33021,33022,33657,33659,34300,34301,34833,34834,35372,35373,35376,35377,35819,35820,36726,36727,36735,36736,36831,36832,38758,38760,49737,49738,50038,50039,50043,50045,50062,50063,50098,50099,50108,50109,50166,50167,51598,51599,55675,55676,55678,55680,55744,55745,55815,55816,55883,55884,55886,55887,55889,55890,55949,55951,55953,55954,56018,56019,56089,56090,56157,56158,56160,56161,56163,56166,56167,56169,56171,56172,56178,56179,56181,56182,56185,56186,56197,56199,56201,56202,56208,56209,56211,56212,56215,56216,56218,56219,56222,56225,56227,56228,56230,56232,56235,56237,56239,56240,56248,56249,56251,56252,56262,56263,56265,56266,56268,56269,56272,56273,56284,56286,56288,56289,56295,56296,56298,56299,56301,56302,56304,56305,56307,56318,56378,56379,56381,56382,56392,56393,56459,56460,56537,56538,56548,56549,56615,56616,56692,56693,56772,56773,56849,56850,56926,56927,57003,57004,57014,57015,57018,57019,57082,57083,57158,57159,57169,57170,57236,57237,57313,57314,57386,57387,57389,57390,57402,57407,57408,57409,57413,57414,57416,57417,57420,57421,58961,58962,58997,58999,59004,59006,59132,59133,59182,59185,59638,59639,59839,59840,59846,59847,59867,59868,59875,59876,60106,294934,294936,316552,316553,323458,324449,329592,329672,329673") && 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"), "380,1,16,3110,3111,3417,3418,3444,3445,6155,6156,6172,6176,6180,6181,10025,10026,10606,10607,12378,12382,12478,12479,15114,15117,15125,15126,15165,15166,23348,23349,31336,31338,31468,31473,32751,32752,32768,32777,34055,34056,34499,34500,35799,35800,36162,36166,36685,36686,36698,36704,36705,36706,38546,38550,38592,38593,39983,39984,49154,49155,53070,53074,53105,53107,53400,53403,57203,57204,65536,65543,67052,67053,76597,76604,78080,78081,83470,83471,94967,94968,95193,95194,95592,95593,96094,96095,96100,96101,96229,96235,96236,96237,96249,96255,96256,96257,98304,98313,104069,104070,105294,105298,106305,106306,107096,107097,109463,109464,122749,122750,122826,122827,125005,125006,131072,131079,141363,141364,141623,141624,141820,141821,143732,143733,151185,151186,152168,152172,157245,157246,162304,162305,162312,162313,162319,162320,163840,163849,166658,166659,166892,166894,166904,166906,166952,166954,166964,166966,166975,166976,168794,168795,168796,168798,168961,168962,168963,168964,168966,168967,168983,168984,168987,168989,168990,168992,169008,169009,169022,169023,169062,169066,169070,169074,169075,169079,169080,169096,169511,169512,169883,169884,171369,171370,171459,171461,171463,171464,171466,171467,171469,171470,171472,171473,171475,171476,171478,171479,171490,171491,171495,171496,171501,171502,171507,171508,171512,171513,171518,171519,171548,171549,171569,171570,171576,171577,171597,171598,171614,171615,171619,171620,171637,171638,171643,171644,171663,171664,171678,171679,171683,171684,171703,171704,171710,171711,171731,171732,171747,171748,171752,171753,171755,171756,171758,171759,171761,171762,171764,171765,171767,171768,172338,172340,180636,180637,182242,182243,184168,184169,186227,186228,190172,190173,192206,192209,192211,192212,193612,193614,195001,195002,196608,196627,201713,201715,202765,202767,205007,205008,205182,205186,205234,205235,205250,205251,205491,205495,205746,205747,214042,214043,218859,218863,218930,218931,218959,218960,219097,219101,219109,219110,220498,220502,220537,220538,220678,220684,220685,220686,220690,220691,220807,220811,220812,220813,222214,222218,224984,224985,226515,226516,226519,226520,229376,229385,237626,237627,238210,238212,238756,238757,239420,239424,239440,239441,240978,240982,241007,241008,251840,251841,262144,262147,277009,277010,277216,277217,277523,277524,277695,277696,277937,277938,278674,278675,279255,279256,279433,279434,280378,280380,280883,280884,281525,281526,284421,284422,285214,285219,287437,287439,290773,290774,294912,294915,298108,302834,302908,302909") == "23b40991e360432e0dc7cad60a9afe023a1aa3e2" || 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"), "380,1,16,3110,3111,3417,3418,3444,3445,6155,6156,6172,6176,6180,6181,10025,10026,10606,10607,12378,12382,12478,12479,15114,15117,15125,15126,15165,15166,23348,23349,31336,31338,31468,31473,32751,32752,32768,32777,34055,34056,34499,34500,35799,35800,36162,36166,36685,36686,36698,36704,36705,36706,38546,38550,38592,38593,39983,39984,49154,49155,53070,53074,53105,53107,53400,53403,57203,57204,65536,65543,67052,67053,76597,76604,78080,78081,83470,83471,94967,94968,95193,95194,95592,95593,96094,96095,96100,96101,96229,96235,96236,96237,96249,96255,96256,96257,98304,98313,104069,104070,105294,105298,106305,106306,107096,107097,109463,109464,122749,122750,122826,122827,125005,125006,131072,131079,141363,141364,141623,141624,141820,141821,143732,143733,151185,151186,152168,152172,157245,157246,162304,162305,162312,162313,162319,162320,163840,163849,166658,166659,166892,166894,166904,166906,166952,166954,166964,166966,166975,166976,168794,168795,168796,168798,168961,168962,168963,168964,168966,168967,168983,168984,168987,168989,168990,168992,169008,169009,169022,169023,169062,169066,169070,169074,169075,169079,169080,169096,169511,169512,169883,169884,171369,171370,171459,171461,171463,171464,171466,171467,171469,171470,171472,171473,171475,171476,171478,171479,171490,171491,171495,171496,171501,171502,171507,171508,171512,171513,171518,171519,171548,171549,171569,171570,171576,171577,171597,171598,171614,171615,171619,171620,171637,171638,171643,171644,171663,171664,171678,171679,171683,171684,171703,171704,171710,171711,171731,171732,171747,171748,171752,171753,171755,171756,171758,171759,171761,171762,171764,171765,171767,171768,172338,172340,180636,180637,182242,182243,184168,184169,186227,186228,190172,190173,192206,192209,192211,192212,193612,193614,195001,195002,196608,196627,201713,201715,202765,202767,205007,205008,205182,205186,205234,205235,205250,205251,205491,205495,205746,205747,214042,214043,218859,218863,218930,218931,218959,218960,219097,219101,219109,219110,220498,220502,220537,220538,220678,220684,220685,220686,220690,220691,220807,220811,220812,220813,222214,222218,224984,224985,226515,226516,226519,226520,229376,229385,237626,237627,238210,238212,238756,238757,239420,239424,239440,239441,240978,240982,241007,241008,251840,251841,262144,262147,277009,277010,277216,277217,277523,277524,277695,277696,277937,277938,278674,278675,279255,279256,279433,279434,280378,280380,280883,280884,281525,281526,284421,284422,285214,285219,287437,287439,290773,290774,294912,294915,298108,302834,302908,302909") && 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"), "376,1,31,38,42,46,47,53,59,60,61,75,81,82,83,141,145,150,151,237,243,247,248,275,281,282,283,1171,1177,1200,1201,1207,1213,1214,1215,1441,1445,1454,1455,1485,1491,1492,1493,1687,1691,1695,1696,1699,1703,1708,1709,1712,1713,1735,1741,1742,1743,1747,1753,1754,1755,1757,1758,1769,1775,1776,1777,1787,1788,1793,1797,1801,1802,1806,1812,1816,1817,1824,1830,1831,1832,1844,1850,1851,1852,1862,1868,1869,1870,1872,1879,1885,1892,1959,1966,1971,1978,2013,2018,2037,2044,2062,2069,2085,2086,2296,2298,2307,2308,2320,2321,2322,2323,2324,2325,2334,2335,2358,2359,2407,2412,2415,2418,2421,2424,2427,2429,2433,2434,2438,2441,2445,2446,2969,2971,2975,2979,2980,2984,2989,2991,2996,3000,3001,3005,3006,3010,3011,3015,3016,3020,3021,3025,3026,3030,3031,3035,3036,3038,3045,3049,3050,3054,3055,3059,3060,3064,3065,3069,3070,3074,3075,3079,3080,3082,3083,3087,3088,3092,3093,3095,3096,3100,3101,3105,3106,3110,3111,3115,3116,3120,3121,3123,3127,3131,3132,3136,3137,3139,3140,3142,3143,3147,3148,3152,3153,3155,3156,3160,3161,3165,3166,3170,3171,3175,3176,3178,3179,3183,3184,3186,3190,3207,3212,3246,3249,3362,5774,5775,7010,7011,8200,8201,9347,9348,10529,10530,10580,10581,10890,10891,16216,16217,16247,16248,16437,16438,16498,16499,16678,16679,16799,16800,17008,17009,21901,21902,21904,21905,21934,21935,22128,22129,22302,22303,22328,22329,22346,22347,22423,22424,22447,22448,22504,22505,22610,22611,27584,27585,27604,27605,27883,27884,27970,27971,28009,28010,28087,28088,28343,28344,32768,32807,36527,36528,43717,43718,45352,45353,45404,45405,45723,45724,47851,47852,53996,54000,55684,55686,55869,55871,55919,55921,57505,57507,65536,65565,66041,66042,66049,66050,66120,66121,66424,66425,66427,66428,66437,66438,66441,66442,66451,66452,66479,66480,66490,66491,66505,66506,66508,66509,66518,66519,66520,66521,66529,66530,66569,66570,66571,66572,66859,66860,66869,66870,67184,67185,67189,67190,67195,67196,67201,67202,68065,68067,73285,73289,74220,74222,74246,98326,98328,118520,118880,120767,120806,120807") == "66ca96d191770e7a27161284328eecb0a43244f2" || 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"), "376,1,31,38,42,46,47,53,59,60,61,75,81,82,83,141,145,150,151,237,243,247,248,275,281,282,283,1171,1177,1200,1201,1207,1213,1214,1215,1441,1445,1454,1455,1485,1491,1492,1493,1687,1691,1695,1696,1699,1703,1708,1709,1712,1713,1735,1741,1742,1743,1747,1753,1754,1755,1757,1758,1769,1775,1776,1777,1787,1788,1793,1797,1801,1802,1806,1812,1816,1817,1824,1830,1831,1832,1844,1850,1851,1852,1862,1868,1869,1870,1872,1879,1885,1892,1959,1966,1971,1978,2013,2018,2037,2044,2062,2069,2085,2086,2296,2298,2307,2308,2320,2321,2322,2323,2324,2325,2334,2335,2358,2359,2407,2412,2415,2418,2421,2424,2427,2429,2433,2434,2438,2441,2445,2446,2969,2971,2975,2979,2980,2984,2989,2991,2996,3000,3001,3005,3006,3010,3011,3015,3016,3020,3021,3025,3026,3030,3031,3035,3036,3038,3045,3049,3050,3054,3055,3059,3060,3064,3065,3069,3070,3074,3075,3079,3080,3082,3083,3087,3088,3092,3093,3095,3096,3100,3101,3105,3106,3110,3111,3115,3116,3120,3121,3123,3127,3131,3132,3136,3137,3139,3140,3142,3143,3147,3148,3152,3153,3155,3156,3160,3161,3165,3166,3170,3171,3175,3176,3178,3179,3183,3184,3186,3190,3207,3212,3246,3249,3362,5774,5775,7010,7011,8200,8201,9347,9348,10529,10530,10580,10581,10890,10891,16216,16217,16247,16248,16437,16438,16498,16499,16678,16679,16799,16800,17008,17009,21901,21902,21904,21905,21934,21935,22128,22129,22302,22303,22328,22329,22346,22347,22423,22424,22447,22448,22504,22505,22610,22611,27584,27585,27604,27605,27883,27884,27970,27971,28009,28010,28087,28088,28343,28344,32768,32807,36527,36528,43717,43718,45352,45353,45404,45405,45723,45724,47851,47852,53996,54000,55684,55686,55869,55871,55919,55921,57505,57507,65536,65565,66041,66042,66049,66050,66120,66121,66424,66425,66427,66428,66437,66438,66441,66442,66451,66452,66479,66480,66490,66491,66505,66506,66508,66509,66518,66519,66520,66521,66529,66530,66569,66570,66571,66572,66859,66860,66869,66870,67184,67185,67189,67190,67195,67196,67201,67202,68065,68067,73285,73289,74220,74222,74246,98326,98328,118520,118880,120767,120806,120807") && 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/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- Start patching dynamic partitions ---


# 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.");

# 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.");

# --- 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:036c2bc28655aaded0d51580b721904030bf9640"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3dbb1247aafecbafaf640bf8dba23903161faca9"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:3dbb1247aafecbafaf640bf8dba23903161faca9")));

# ---- 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);
