getprop("ro.product.device") == "lavender" || abort("E3004: This package is for \"lavender\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: xiaomi/lavender/lavender:10/QKQ1.190910.002/V12.0.1.0.QFGINXM:user/release-keys");
ui_print("Target: xiaomi/lavender/lavender:10/QKQ1.190910.002/V12.0.2.0.QFGINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "xiaomi/lavender/lavender:10/QKQ1.190910.002/V12.0.1.0.QFGINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "xiaomi/lavender/lavender:10/QKQ1.190910.002/V12.0.2.0.QFGINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of xiaomi/lavender/lavender:10/QKQ1.190910.002/V12.0.1.0.QFGINXM:user/release-keys or xiaomi/lavender/lavender:10/QKQ1.190910.002/V12.0.2.0.QFGINXM: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:67108864:04f948e00ee660786c2eea997694fb8a919d7ae7",
                      "EMMC:/dev/block/bootdevice/by-name/boot:67108864:86f6b7558f191484e71036a7bb5dc1057150b354") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:04f948e00ee660786c2eea997694fb8a919d7ae7\" or \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:86f6b7558f191484e71036a7bb5dc1057150b354\" has unexpected contents.");
apply_patch_space(67108864) || 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", "1420,1,513,3724,3754,5093,5297,5607,5877,8625,8655,9135,9539,20406,21876,25214,25607,27022,28886,34303,34812,35126,36123,36137,36759,36762,36768,36769,36774,36775,36895,36898,38512,38513,38544,38545,38644,38645,40458,40459,40473,40474,40476,40477,42941,42942,43312,43313,43357,43360,43618,43619,43706,43707,43898,43899,46584,46585,46588,46899,47147,47148,47176,47177,47332,47333,47955,47956,59144,59145,59605,59606,60512,60513,60517,60518,60540,60541,61766,61767,62171,62172,62208,62209,65516,65518,65536,66042,69810,69811,71397,71398,71536,71537,71569,71570,72020,72021,72704,72705,74058,74059,74235,74236,76050,76051,78536,78537,79022,79023,83326,83327,86056,86057,87236,87237,87309,87310,87329,87332,90638,90639,93262,93263,94053,94054,94203,94204,94864,94878,94893,94894,94904,94905,98304,99032,101230,101231,102879,102880,102931,102932,102935,102938,104796,104797,104881,104882,104884,104885,104906,104907,105856,105859,106259,106262,106724,106727,106764,106765,108750,108751,108789,108790,108840,108841,108862,108863,108936,108937,109553,109554,113706,113707,113712,113713,114109,114110,115595,115596,117140,117141,117589,117590,117594,117595,117607,117608,117612,117613,117624,117625,117648,117649,119610,119611,119765,119766,120045,120048,121391,121392,121395,121396,122321,122589,123687,123690,125981,125982,126330,126331,129735,129736,129748,129749,130084,130085,131072,131578,132230,132231,134432,134433,136624,136626,136627,136628,136629,136630,136631,136632,136633,136634,136635,136636,136637,136638,136639,136640,136641,136642,136643,136644,136645,136646,136647,136648,136649,136650,136651,136652,136653,136654,136655,136656,136657,136658,136659,136660,136661,136662,136663,136664,136665,136666,136667,136668,136669,136670,136671,136672,136673,136674,136675,136676,136677,136678,136679,136680,136681,136682,136683,136684,136685,136686,136687,136688,136689,136690,136691,136692,136693,136694,136695,136696,136697,136698,136699,136700,136701,136702,136703,136704,136705,136706,136707,136708,136709,136710,136711,136712,136713,136714,136715,136716,136717,136718,136719,136720,136721,136722,136723,136724,136725,136726,136727,136728,136729,136730,136731,136732,136733,136734,136735,136736,136737,136738,136739,136740,136741,136742,136743,136744,136745,136746,136747,136748,136749,136750,136751,136752,136753,136754,136755,136756,136757,136758,136759,136760,136761,136762,136763,136764,136765,136766,136767,136768,136769,136770,136771,136772,136773,136774,136775,136776,136777,136778,136779,136780,136781,136782,136783,136784,136785,136786,136787,136788,136789,136790,136791,136792,136793,136794,136795,136796,136797,136798,136799,136800,136801,136802,136803,136804,136805,136806,136807,136808,136809,136810,136811,136812,136813,136814,136815,136816,136817,136818,136819,136820,136821,136822,136823,136824,136825,136826,136827,136828,136829,136830,136831,136832,136833,136834,136835,136836,136837,136838,136839,136840,136841,136842,136843,136844,136845,136846,136847,136848,136849,136850,136851,136852,136853,136854,136855,136856,136857,136858,136859,136860,136861,136862,136863,136864,136865,136866,136867,136868,136869,136870,136871,136872,136873,136874,136875,136876,136877,136878,136879,136880,136881,136882,136883,136884,136885,136886,136887,136888,136889,136890,136891,136892,136893,136894,136895,136896,136897,136898,136899,136900,136901,136902,136903,136904,136905,136906,136907,136908,136909,136910,136911,136912,136913,136914,136915,136916,136917,136918,136919,136920,136921,136922,136923,136924,136925,136926,136927,136928,136929,136930,136931,136932,136933,136934,136935,136936,136937,136938,136939,136940,136941,136942,136943,136944,136945,136946,136947,136948,136949,136950,136951,136952,136953,136954,136955,136956,136957,136958,136959,136960,136961,136962,136963,136964,136965,136966,136967,136968,136969,136970,136971,136972,136973,136974,136975,136976,136977,136978,136979,136980,136981,136982,136983,136984,136985,136986,136987,136988,136989,136990,136991,136992,136993,136994,136995,136996,136997,136998,136999,137000,137001,137002,137003,137004,137005,137006,137007,137008,137009,137010,137011,137012,137013,137014,137015,137016,137017,137018,137019,137020,137021,137022,137023,137024,137025,137026,137027,137028,137029,137030,137031,137032,137033,137034,137035,137036,137037,137038,137039,137040,137041,137042,137043,137044,137045,137046,137047,137048,137049,137050,137051,137052,137053,137054,137055,137056,137057,137058,137059,137060,137061,137062,137063,137064,137065,137066,137067,137068,137069,137071,137077,137398,144527,144823,144827,144828,144839,144840,144849,144852,144853,144854,144855,144856,144858,144859,144860,144861,144898,144899,144904,144905,145010,145013,145015,145016,146123,146124,146365,146366,146389,146390,146458,146459,146462,146467,146468,146469,146470,146471,146472,146473,147403,147404,147411,147412,147965,147967,148520,148522,148523,148524,148525,148526,148527,148528,148529,148530,148531,148532,148533,148534,148536,148537,148538,148541,149398,149400,149401,149402,149487,149488,149491,149493,149751,149752,149759,149761,150240,150241,150246,150247,150277,150278,150289,150290,150556,150557,150669,150670,150692,150694,150696,150697,159631,159632,163840,164568,168296,168297,170237,170238,170514,170515,175614,175615,192423,192424,192585,192586,196608,197114,199124,199125,219169,219352,220201,220202,229376,230104,239636,239638,239649,239650,247208,247501,252994,253000,255095,255096,255193,255194,259597,259598,259950,259951,260282,260283,260298,260299,260326,260327,260370,260371,262144,262650,271367,271368,279902,279903,282355,282356,282724,282725,286360,286361,291816,291817,292209,292210,292384,292385,293673,293674,294912,295640,299063,299064,301399,301400,301781,301782,301802,301803,301837,301838,301908,301909,303948,303949,312102,312109,316232,316233,327680,328186,330553,330554,335489,335490,345544,345546,352987,352988,358026,358029,360448,360954,362462,362463,367353,367354,374693,374694,375244,375245,375464,375465,377222,377225,379090,379091,379305,379306,383590,383591,384345,384349,384368,384369,384372,384373,384396,384397,384468,384469,384483,384484,384493,384494,384503,384504,384517,384518,384539,384540,384585,384587,384588,384589,384590,384591,384592,384593,384594,384595,384597,384598,384602,384603,384604,384605,384607,384608,384609,384610,384611,384612,384614,384615,384616,384617,384618,384619,384620,384621,384622,384623,384624,384625,384626,384627,384628,384629,384630,384631,384633,384634,384636,384637,384638,384641,384643,384645,384653,384654,384660,384662,384668,384669,384675,384676,384680,384681,385790,385791,385896,385898,385908,385910,385928,385930,385970,385971,385973,385975,393040,393041,393216,393722,393989,393992,397020,397021,397383,397384,397436,397437,398837,398838,400100,400101,401599,401601,402078,402079,408250,408251,408310,408311,408388,408389,408515,408516,408714,408715,408721,408722,410254,410255,415560,415561,416571,416572,416630,416631,422883,422884,423216,423217,423224,423225,423342,423343,424040,424041,425984,426490,427209,427210,427218,427219,427232,427233,427610,427611,427618,427619,429821,429822,435580,437478,437479,437627,437894,437895,439123,439124,439153,439154,439621,439622,441095,441096,441746,441747,441840,441843,441900,441901,441906,441907,443729,443730,443855,443856,451568,451569,454260,454261,455811,457753,458752,459258,462372,462373,465234,465235,480391,480394,480662,480663,491520,492026,493338,493339,496045,496046,504309,504310,511319,511320,521638,521639,524288,524794,531250,531251,531268,531269,531306,531307,531334,531335,531345,531346,531363,531364,531366,531367,531883,531884,533579,533580,533584,533585,533646,533647,547272,547273,547345,547346,547350,547351,547441,547442,550215,550216,550231,550232,555327,555328,556943,556944,557056,557562,557606,557607,557615,557616,557658,557659,566431,566432,566458,566459,568627,568628,569190,569191,569276,569277,569603,569606,569619,569620,573956,573957,573964,573965,574619,574620,574624,574625,580864,580865,581504,581505,581869,581870,581882,581883,588776,588777,589178,589179,589824,590330,596842,596843,604901,604902,616789,616790,617446,617447,617453,617454,617872,617873,617880,617881,617885,617886,617897,617898,622592,623098,632969,632970,648651,648652,650063,650064,655360,655866,656952,656953,664195,664196,664202,664203,664206,664207,664211,664212,664216,664217,664223,664224,664226,664227,667337,667338,667356,667357,667365,667366,667373,667374,667383,667384,667392,667394,667395,667396,667397,667398,667399,667400,667401,667402,667435,667436,667437,667438,667440,667442,667443,667444,668286,668287,671954,671955,672268,672269,677151,677152,677584,677587,678001,678002,678373,678374,682194,682195,682285,682287,682289,682290,682292,682293,682295,682296,682298,682299,682301,682302,682304,682305,682307,682308,682312,682313,682318,682319,682323,682324,682340,682341,682360,682361,682366,682367,682386,682387,682402,682403,682407,682408,682424,682425,682430,682431,682449,682450,682463,682464,682468,682469,682486,682487,682492,682493,682512,682513,682527,682528,682530,682531,682533,682534,682536,682537,682539,682540,682542,682543,682545,682546,682548,682549,682551,682552,682554,682555,682557,682559,682854,682855,682899,682900,684218,684219,685713,685714,688128,688634,689607,689608,708254,708256,711015,711016,711187,711188,711228,711229,711353,711354,712602,712603,713652,713653,720896,721402,722787,722788,729619,729620,744853,744854,745344,745345,746720,746721,748128,748129,750010,750011,750436,750437,753664,754170,781868,781869,786432,786938,794422,797687,797717,797718,800280,800281,800284,800285,800562,800565,800586,800587,800602,800605,810387,814281,814657,814658,814663,814664,814683,814684,814743,814745,814754,814755,814880,814881,815075,815076,815077,903111,910279") == "d1448cc2da19246427f559ba42fbb95da2b46e61" || 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", "1420,1,513,3724,3754,5093,5297,5607,5877,8625,8655,9135,9539,20406,21876,25214,25607,27022,28886,34303,34812,35126,36123,36137,36759,36762,36768,36769,36774,36775,36895,36898,38512,38513,38544,38545,38644,38645,40458,40459,40473,40474,40476,40477,42941,42942,43312,43313,43357,43360,43618,43619,43706,43707,43898,43899,46584,46585,46588,46899,47147,47148,47176,47177,47332,47333,47955,47956,59144,59145,59605,59606,60512,60513,60517,60518,60540,60541,61766,61767,62171,62172,62208,62209,65516,65518,65536,66042,69810,69811,71397,71398,71536,71537,71569,71570,72020,72021,72704,72705,74058,74059,74235,74236,76050,76051,78536,78537,79022,79023,83326,83327,86056,86057,87236,87237,87309,87310,87329,87332,90638,90639,93262,93263,94053,94054,94203,94204,94864,94878,94893,94894,94904,94905,98304,99032,101230,101231,102879,102880,102931,102932,102935,102938,104796,104797,104881,104882,104884,104885,104906,104907,105856,105859,106259,106262,106724,106727,106764,106765,108750,108751,108789,108790,108840,108841,108862,108863,108936,108937,109553,109554,113706,113707,113712,113713,114109,114110,115595,115596,117140,117141,117589,117590,117594,117595,117607,117608,117612,117613,117624,117625,117648,117649,119610,119611,119765,119766,120045,120048,121391,121392,121395,121396,122321,122589,123687,123690,125981,125982,126330,126331,129735,129736,129748,129749,130084,130085,131072,131578,132230,132231,134432,134433,136624,136626,136627,136628,136629,136630,136631,136632,136633,136634,136635,136636,136637,136638,136639,136640,136641,136642,136643,136644,136645,136646,136647,136648,136649,136650,136651,136652,136653,136654,136655,136656,136657,136658,136659,136660,136661,136662,136663,136664,136665,136666,136667,136668,136669,136670,136671,136672,136673,136674,136675,136676,136677,136678,136679,136680,136681,136682,136683,136684,136685,136686,136687,136688,136689,136690,136691,136692,136693,136694,136695,136696,136697,136698,136699,136700,136701,136702,136703,136704,136705,136706,136707,136708,136709,136710,136711,136712,136713,136714,136715,136716,136717,136718,136719,136720,136721,136722,136723,136724,136725,136726,136727,136728,136729,136730,136731,136732,136733,136734,136735,136736,136737,136738,136739,136740,136741,136742,136743,136744,136745,136746,136747,136748,136749,136750,136751,136752,136753,136754,136755,136756,136757,136758,136759,136760,136761,136762,136763,136764,136765,136766,136767,136768,136769,136770,136771,136772,136773,136774,136775,136776,136777,136778,136779,136780,136781,136782,136783,136784,136785,136786,136787,136788,136789,136790,136791,136792,136793,136794,136795,136796,136797,136798,136799,136800,136801,136802,136803,136804,136805,136806,136807,136808,136809,136810,136811,136812,136813,136814,136815,136816,136817,136818,136819,136820,136821,136822,136823,136824,136825,136826,136827,136828,136829,136830,136831,136832,136833,136834,136835,136836,136837,136838,136839,136840,136841,136842,136843,136844,136845,136846,136847,136848,136849,136850,136851,136852,136853,136854,136855,136856,136857,136858,136859,136860,136861,136862,136863,136864,136865,136866,136867,136868,136869,136870,136871,136872,136873,136874,136875,136876,136877,136878,136879,136880,136881,136882,136883,136884,136885,136886,136887,136888,136889,136890,136891,136892,136893,136894,136895,136896,136897,136898,136899,136900,136901,136902,136903,136904,136905,136906,136907,136908,136909,136910,136911,136912,136913,136914,136915,136916,136917,136918,136919,136920,136921,136922,136923,136924,136925,136926,136927,136928,136929,136930,136931,136932,136933,136934,136935,136936,136937,136938,136939,136940,136941,136942,136943,136944,136945,136946,136947,136948,136949,136950,136951,136952,136953,136954,136955,136956,136957,136958,136959,136960,136961,136962,136963,136964,136965,136966,136967,136968,136969,136970,136971,136972,136973,136974,136975,136976,136977,136978,136979,136980,136981,136982,136983,136984,136985,136986,136987,136988,136989,136990,136991,136992,136993,136994,136995,136996,136997,136998,136999,137000,137001,137002,137003,137004,137005,137006,137007,137008,137009,137010,137011,137012,137013,137014,137015,137016,137017,137018,137019,137020,137021,137022,137023,137024,137025,137026,137027,137028,137029,137030,137031,137032,137033,137034,137035,137036,137037,137038,137039,137040,137041,137042,137043,137044,137045,137046,137047,137048,137049,137050,137051,137052,137053,137054,137055,137056,137057,137058,137059,137060,137061,137062,137063,137064,137065,137066,137067,137068,137069,137071,137077,137398,144527,144823,144827,144828,144839,144840,144849,144852,144853,144854,144855,144856,144858,144859,144860,144861,144898,144899,144904,144905,145010,145013,145015,145016,146123,146124,146365,146366,146389,146390,146458,146459,146462,146467,146468,146469,146470,146471,146472,146473,147403,147404,147411,147412,147965,147967,148520,148522,148523,148524,148525,148526,148527,148528,148529,148530,148531,148532,148533,148534,148536,148537,148538,148541,149398,149400,149401,149402,149487,149488,149491,149493,149751,149752,149759,149761,150240,150241,150246,150247,150277,150278,150289,150290,150556,150557,150669,150670,150692,150694,150696,150697,159631,159632,163840,164568,168296,168297,170237,170238,170514,170515,175614,175615,192423,192424,192585,192586,196608,197114,199124,199125,219169,219352,220201,220202,229376,230104,239636,239638,239649,239650,247208,247501,252994,253000,255095,255096,255193,255194,259597,259598,259950,259951,260282,260283,260298,260299,260326,260327,260370,260371,262144,262650,271367,271368,279902,279903,282355,282356,282724,282725,286360,286361,291816,291817,292209,292210,292384,292385,293673,293674,294912,295640,299063,299064,301399,301400,301781,301782,301802,301803,301837,301838,301908,301909,303948,303949,312102,312109,316232,316233,327680,328186,330553,330554,335489,335490,345544,345546,352987,352988,358026,358029,360448,360954,362462,362463,367353,367354,374693,374694,375244,375245,375464,375465,377222,377225,379090,379091,379305,379306,383590,383591,384345,384349,384368,384369,384372,384373,384396,384397,384468,384469,384483,384484,384493,384494,384503,384504,384517,384518,384539,384540,384585,384587,384588,384589,384590,384591,384592,384593,384594,384595,384597,384598,384602,384603,384604,384605,384607,384608,384609,384610,384611,384612,384614,384615,384616,384617,384618,384619,384620,384621,384622,384623,384624,384625,384626,384627,384628,384629,384630,384631,384633,384634,384636,384637,384638,384641,384643,384645,384653,384654,384660,384662,384668,384669,384675,384676,384680,384681,385790,385791,385896,385898,385908,385910,385928,385930,385970,385971,385973,385975,393040,393041,393216,393722,393989,393992,397020,397021,397383,397384,397436,397437,398837,398838,400100,400101,401599,401601,402078,402079,408250,408251,408310,408311,408388,408389,408515,408516,408714,408715,408721,408722,410254,410255,415560,415561,416571,416572,416630,416631,422883,422884,423216,423217,423224,423225,423342,423343,424040,424041,425984,426490,427209,427210,427218,427219,427232,427233,427610,427611,427618,427619,429821,429822,435580,437478,437479,437627,437894,437895,439123,439124,439153,439154,439621,439622,441095,441096,441746,441747,441840,441843,441900,441901,441906,441907,443729,443730,443855,443856,451568,451569,454260,454261,455811,457753,458752,459258,462372,462373,465234,465235,480391,480394,480662,480663,491520,492026,493338,493339,496045,496046,504309,504310,511319,511320,521638,521639,524288,524794,531250,531251,531268,531269,531306,531307,531334,531335,531345,531346,531363,531364,531366,531367,531883,531884,533579,533580,533584,533585,533646,533647,547272,547273,547345,547346,547350,547351,547441,547442,550215,550216,550231,550232,555327,555328,556943,556944,557056,557562,557606,557607,557615,557616,557658,557659,566431,566432,566458,566459,568627,568628,569190,569191,569276,569277,569603,569606,569619,569620,573956,573957,573964,573965,574619,574620,574624,574625,580864,580865,581504,581505,581869,581870,581882,581883,588776,588777,589178,589179,589824,590330,596842,596843,604901,604902,616789,616790,617446,617447,617453,617454,617872,617873,617880,617881,617885,617886,617897,617898,622592,623098,632969,632970,648651,648652,650063,650064,655360,655866,656952,656953,664195,664196,664202,664203,664206,664207,664211,664212,664216,664217,664223,664224,664226,664227,667337,667338,667356,667357,667365,667366,667373,667374,667383,667384,667392,667394,667395,667396,667397,667398,667399,667400,667401,667402,667435,667436,667437,667438,667440,667442,667443,667444,668286,668287,671954,671955,672268,672269,677151,677152,677584,677587,678001,678002,678373,678374,682194,682195,682285,682287,682289,682290,682292,682293,682295,682296,682298,682299,682301,682302,682304,682305,682307,682308,682312,682313,682318,682319,682323,682324,682340,682341,682360,682361,682366,682367,682386,682387,682402,682403,682407,682408,682424,682425,682430,682431,682449,682450,682463,682464,682468,682469,682486,682487,682492,682493,682512,682513,682527,682528,682530,682531,682533,682534,682536,682537,682539,682540,682542,682543,682545,682546,682548,682549,682551,682552,682554,682555,682557,682559,682854,682855,682899,682900,684218,684219,685713,685714,688128,688634,689607,689608,708254,708256,711015,711016,711187,711188,711228,711229,711353,711354,712602,712603,713652,713653,720896,721402,722787,722788,729619,729620,744853,744854,745344,745345,746720,746721,748128,748129,750010,750011,750436,750437,753664,754170,781868,781869,786432,786938,794422,797687,797717,797718,800280,800281,800284,800285,800562,800565,800586,800587,800602,800605,810387,814281,814657,814658,814663,814664,814683,814684,814743,814745,814754,814755,814880,814881,815075,815076,815077,903111,910279") && 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", "228,1,364,633,641,651,652,733,734,739,740,804,805,807,808,810,816,859,864,907,908,913,914,916,917,1683,1684,4310,4311,4426,4427,4444,4504,5211,5212,5839,5840,6757,6762,9015,9017,16625,16626,21298,21299,26144,26145,30119,30120,32768,32770,32895,32896,44074,44075,48831,48832,49854,49856,49871,49873,50129,50130,50358,50359,50508,50509,50719,50720,50889,50898,50999,51000,60867,60870,60888,60889,60934,60935,60953,60955,61004,61005,61032,61033,61830,61831,61844,61845,61854,61855,61877,61878,62005,62011,65045,65046,65058,65059,65536,65537,67704,67706,73839,73840,73843,73844,74038,74225,74401,74402,74637,74638,74639,74640,74653,74654,75077,75078,75099,75101,75103,75110,75111,75113,75115,75122,75124,75129,75153,75161,76147,76148,76174,76178,76194,76195,77040,77042,77115,77690,77917,77918,78763,79135,79511,79838,80028,80090,80646,81093,89086,89087,98304,98306,98431,98432,99351,99352,100908,100909,102255,102256,103436,103438,104602,104603,105808,105809,106936,106937,108179,108180,109330,109331,110531,110532,111882,111883,113131,113132,114286,114287,115512,115513,116702,116703,117789,117790,118875,118876,119991,119992,121093,121094,122242,122243,123527,123528,124850,124851,126116,126117,131072,131073,149450,149664,149770,149808,149994,163842,163967,163968,164473,196609,197114,229378,229503,229504,230009,233367,294912,294914,491520,491521,515995,524173,524287,524288") == "bba3f4981183ede1353306311c8499128b11a123" || 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", "228,1,364,633,641,651,652,733,734,739,740,804,805,807,808,810,816,859,864,907,908,913,914,916,917,1683,1684,4310,4311,4426,4427,4444,4504,5211,5212,5839,5840,6757,6762,9015,9017,16625,16626,21298,21299,26144,26145,30119,30120,32768,32770,32895,32896,44074,44075,48831,48832,49854,49856,49871,49873,50129,50130,50358,50359,50508,50509,50719,50720,50889,50898,50999,51000,60867,60870,60888,60889,60934,60935,60953,60955,61004,61005,61032,61033,61830,61831,61844,61845,61854,61855,61877,61878,62005,62011,65045,65046,65058,65059,65536,65537,67704,67706,73839,73840,73843,73844,74038,74225,74401,74402,74637,74638,74639,74640,74653,74654,75077,75078,75099,75101,75103,75110,75111,75113,75115,75122,75124,75129,75153,75161,76147,76148,76174,76178,76194,76195,77040,77042,77115,77690,77917,77918,78763,79135,79511,79838,80028,80090,80646,81093,89086,89087,98304,98306,98431,98432,99351,99352,100908,100909,102255,102256,103436,103438,104602,104603,105808,105809,106936,106937,108179,108180,109330,109331,110531,110532,111882,111883,113131,113132,114286,114287,115512,115513,116702,116703,117789,117790,118875,118876,119991,119992,121093,121094,122242,122243,123527,123528,124850,124851,126116,126117,131072,131073,149450,149664,149770,149808,149994,163842,163967,163968,164473,196609,197114,229378,229503,229504,230009,233367,294912,294914,491520,491521,515995,524173,524287,524288") && 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:67108864:04f948e00ee660786c2eea997694fb8a919d7ae7",
                "EMMC:/dev/block/bootdevice/by-name/boot:67108864:86f6b7558f191484e71036a7bb5dc1057150b354",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:67108864:86f6b7558f191484e71036a7bb5dc1057150b354");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/mdtpsecapp.mbn", "/dev/block/bootdevice/by-name/mdtpsecapp");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
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/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/pmic.elf", "/dev/block/bootdevice/by-name/pmic");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
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/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/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsecbak");
package_extract_file("firmware-update/pmic.elf", "/dev/block/bootdevice/by-name/pmicbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
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");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
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");
