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_ru/lime:11/RKQ1.201004.002/V12.5.8.0.RJQRUXM:user/release-keys");
ui_print("Target: Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.9.0.RJQRUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.8.0.RJQRUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.9.0.RJQRUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.8.0.RJQRUXM:user/release-keys or Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.9.0.RJQRUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e20ad6e82b9f8581f88ffebe0f9dfad329a31092"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:56c8377d841b9fcb5143e93c7a8d2a662ce84fba")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e20ad6e82b9f8581f88ffebe0f9dfad329a31092"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:56c8377d841b9fcb5143e93c7a8d2a662ce84fba"),"\" has unexpected contents."));
apply_patch_space(100663296) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "76,1,33,45,55,75,79,107,108,124,21387,21394,21395,27560,27561,28976,43328,50494,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,79860,79868,256493,257476,257478,259228,655373,655377,688129,688145,707000,707081,707847,709988,721239,721391,721392") == "f0891526790e23f8a89800d80982e6c5af3c6c42" || 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"), "76,1,33,45,55,75,79,107,108,124,21387,21394,21395,27560,27561,28976,43328,50494,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,79860,79868,256493,257476,257478,259228,655373,655377,688129,688145,707000,707081,707847,709988,721239,721391,721392") && 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"), "638,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,5403,5404,7949,7950,9317,9318,10020,10022,10023,10024,10026,10029,10030,10031,10033,10035,10036,10037,10039,10041,10042,10043,10045,10047,10048,10049,10052,10054,10055,10056,10059,10061,10064,10066,10074,10076,10079,10081,10084,10086,10087,10088,10093,10094,10096,10098,10099,10100,10102,10104,10105,10106,10108,10110,10111,10112,10114,10116,10117,10118,10143,10144,10148,10149,10155,10156,10159,10160,10161,10162,10165,10166,10167,10168,10171,10172,10173,10174,10179,10180,10183,10184,10185,10186,10189,10190,10191,10192,10196,10197,10201,10202,10205,10207,10210,10212,10216,10217,10222,10223,10224,10225,10228,10229,10230,10231,10234,10235,10236,10237,10240,10241,10242,10243,10246,10247,10248,10249,10252,10253,10254,10255,10259,10260,10550,10551,11578,11586,18762,18763,18895,18896,18906,18907,27837,27838,28127,28129,28202,28203,30017,30018,32768,32800,34669,34670,35304,35306,35947,35948,36480,36481,37013,37014,37017,37018,37460,37461,38367,38368,38376,38377,38472,38473,40399,40401,51378,51379,51679,51680,51684,51686,51703,51704,51739,51740,51749,51750,51807,51808,53239,53240,57315,57316,57318,57320,57384,57385,57455,57456,57523,57524,57526,57527,57529,57530,57589,57591,57593,57594,57658,57659,57729,57730,57797,57798,57800,57801,57803,57806,57807,57809,57811,57812,57818,57819,57821,57822,57825,57826,57837,57839,57841,57842,57848,57849,57851,57852,57855,57856,57858,57859,57862,57865,57867,57868,57870,57872,57875,57877,57879,57880,57888,57889,57891,57892,57902,57903,57905,57906,57908,57909,57912,57913,57924,57926,57928,57929,57935,57936,57938,57939,57941,57942,57944,57945,57947,57958,58018,58019,58021,58022,58032,58033,58099,58100,58177,58178,58188,58189,58255,58256,58332,58333,58412,58413,58489,58490,58566,58567,58643,58644,58654,58655,58658,58659,58722,58723,58798,58799,58809,58810,58876,58877,58953,58954,59026,59027,59029,59030,59042,59047,59048,59049,59053,59054,59056,59057,59060,59061,60601,60602,60637,60639,60644,60646,60772,60773,60822,60825,61278,61279,61479,61480,61486,61487,61507,61508,61515,61516,61843,61844,62880,62881,65536,65576,65652,65653,66129,66130,67396,67397,67406,67407,68944,68945,69016,69017,70134,70135,70432,70433,71813,71814,73087,73088,73110,73111,74921,74922,75781,75782,75880,75881,77083,77084,77150,77152,82321,84342,87036,87037,87560,87575,87876,87877,94753,94754,96158,96220,98304,98342,100034,100035,100197,100198,100517,100518,106906,106908,109746,109747,113692,113693,113695,113696,119940,119941,119947,119949,119956,119957,120098,120099,126379,126381,126460,126461,131072,131097,132561,132562,137038,137039,141131,141132,142292,142293,143666,143667,152648,152649,157077,158265,158270,160732,161984,161985,163840,163867,164941,164943,167655,167656,168552,168570,168934,168935,196608,196637,202048,204494,207861,207863,208702,208703,216637,216638,218268,218269,219664,219726,223685,223686,223830,223831,224995,224996,229376,229402,230642,230643,231047,231048,233557,233559,238876,238877,243806,243807,250393,250394,252354,252355,252361,252363,252370,252371,259403,259404,259408,259409,259416,259417,262144,262166,265079,265080,265096,265097,265098,265100,265101,265103,265104,265106,265107,265109,265110,265111,265167,265169,265170,265171,265173,265174,265176,265177,265363,265364,270872,270873,271928,271929,275597,275598,280838,280840,281174,281176,282533,282534,285352,285353,285854,285855,288302,288303,291747,291748,293889,293890,294912,294934,297057,297058,303238,303239,303243,303244,303251,303252,304781,304782,304804,304805,305559,305561,305693,305694,307194,307200,307201,307202,309797,309798,310142,310143,312119,312120,312122,312124,317460,317461,318267,318269,318270,318276,318279,318280,318283,318284,320809,320811,320819,320821,320837,320838,320873,325099,325106,325117,326113,331283,331361,331362") == "2a676d732072c6f887b7b45ca6befaa77306d51e" || 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"), "638,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,5403,5404,7949,7950,9317,9318,10020,10022,10023,10024,10026,10029,10030,10031,10033,10035,10036,10037,10039,10041,10042,10043,10045,10047,10048,10049,10052,10054,10055,10056,10059,10061,10064,10066,10074,10076,10079,10081,10084,10086,10087,10088,10093,10094,10096,10098,10099,10100,10102,10104,10105,10106,10108,10110,10111,10112,10114,10116,10117,10118,10143,10144,10148,10149,10155,10156,10159,10160,10161,10162,10165,10166,10167,10168,10171,10172,10173,10174,10179,10180,10183,10184,10185,10186,10189,10190,10191,10192,10196,10197,10201,10202,10205,10207,10210,10212,10216,10217,10222,10223,10224,10225,10228,10229,10230,10231,10234,10235,10236,10237,10240,10241,10242,10243,10246,10247,10248,10249,10252,10253,10254,10255,10259,10260,10550,10551,11578,11586,18762,18763,18895,18896,18906,18907,27837,27838,28127,28129,28202,28203,30017,30018,32768,32800,34669,34670,35304,35306,35947,35948,36480,36481,37013,37014,37017,37018,37460,37461,38367,38368,38376,38377,38472,38473,40399,40401,51378,51379,51679,51680,51684,51686,51703,51704,51739,51740,51749,51750,51807,51808,53239,53240,57315,57316,57318,57320,57384,57385,57455,57456,57523,57524,57526,57527,57529,57530,57589,57591,57593,57594,57658,57659,57729,57730,57797,57798,57800,57801,57803,57806,57807,57809,57811,57812,57818,57819,57821,57822,57825,57826,57837,57839,57841,57842,57848,57849,57851,57852,57855,57856,57858,57859,57862,57865,57867,57868,57870,57872,57875,57877,57879,57880,57888,57889,57891,57892,57902,57903,57905,57906,57908,57909,57912,57913,57924,57926,57928,57929,57935,57936,57938,57939,57941,57942,57944,57945,57947,57958,58018,58019,58021,58022,58032,58033,58099,58100,58177,58178,58188,58189,58255,58256,58332,58333,58412,58413,58489,58490,58566,58567,58643,58644,58654,58655,58658,58659,58722,58723,58798,58799,58809,58810,58876,58877,58953,58954,59026,59027,59029,59030,59042,59047,59048,59049,59053,59054,59056,59057,59060,59061,60601,60602,60637,60639,60644,60646,60772,60773,60822,60825,61278,61279,61479,61480,61486,61487,61507,61508,61515,61516,61843,61844,62880,62881,65536,65576,65652,65653,66129,66130,67396,67397,67406,67407,68944,68945,69016,69017,70134,70135,70432,70433,71813,71814,73087,73088,73110,73111,74921,74922,75781,75782,75880,75881,77083,77084,77150,77152,82321,84342,87036,87037,87560,87575,87876,87877,94753,94754,96158,96220,98304,98342,100034,100035,100197,100198,100517,100518,106906,106908,109746,109747,113692,113693,113695,113696,119940,119941,119947,119949,119956,119957,120098,120099,126379,126381,126460,126461,131072,131097,132561,132562,137038,137039,141131,141132,142292,142293,143666,143667,152648,152649,157077,158265,158270,160732,161984,161985,163840,163867,164941,164943,167655,167656,168552,168570,168934,168935,196608,196637,202048,204494,207861,207863,208702,208703,216637,216638,218268,218269,219664,219726,223685,223686,223830,223831,224995,224996,229376,229402,230642,230643,231047,231048,233557,233559,238876,238877,243806,243807,250393,250394,252354,252355,252361,252363,252370,252371,259403,259404,259408,259409,259416,259417,262144,262166,265079,265080,265096,265097,265098,265100,265101,265103,265104,265106,265107,265109,265110,265111,265167,265169,265170,265171,265173,265174,265176,265177,265363,265364,270872,270873,271928,271929,275597,275598,280838,280840,281174,281176,282533,282534,285352,285353,285854,285855,288302,288303,291747,291748,293889,293890,294912,294934,297057,297058,303238,303239,303243,303244,303251,303252,304781,304782,304804,304805,305559,305561,305693,305694,307194,307200,307201,307202,309797,309798,310142,310143,312119,312120,312122,312124,317460,317461,318267,318269,318270,318276,318279,318280,318283,318284,320809,320811,320819,320821,320837,320838,320873,325099,325106,325117,326113,331283,331361,331362") && 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"), "358,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,18540,18541,28348,28349,29024,29028,29994,29995,31337,31338,31472,31473,31528,31529,32768,32777,33152,33153,33515,33519,34038,34039,34051,34057,34058,34059,43810,43811,47682,47683,47933,47938,47950,47951,48015,48018,48211,48216,48473,48475,51957,51958,61800,61801,65536,65543,71351,71358,72834,72835,78210,78211,81360,81361,90912,90913,90920,90921,91050,91056,91057,91058,91071,91077,91078,91079,98304,98313,98608,98609,99849,99853,100866,100867,104715,104717,118200,118201,118270,118271,120492,120494,131072,131079,140999,141000,143008,143009,150310,150311,156682,156683,160672,160673,160974,160975,161027,161029,161038,161039,161133,161135,161924,161925,161932,161933,161939,161940,163840,163849,166278,166279,166512,166514,166524,166526,166572,166574,166584,166586,166595,166596,168414,168415,168416,168418,168581,168582,168583,168584,168586,168587,168605,168606,168609,168611,168612,168614,168630,168631,168644,168645,168684,168688,168692,168696,168697,168701,168702,168718,169133,169134,169505,169506,170991,170992,171081,171083,171086,171087,171090,171091,171094,171095,171098,171099,171102,171103,171106,171107,171121,171122,171128,171129,171135,171136,171142,171143,171149,171150,171156,171157,171199,171200,171221,171222,171229,171230,171251,171252,171269,171270,171276,171277,171295,171296,171303,171304,171323,171324,171339,171340,171345,171346,171366,171367,171374,171375,171396,171397,171414,171415,171421,171422,171425,171426,171429,171430,171433,171434,171437,171438,171441,171442,172029,172031,174477,174478,191815,191817,191818,191819,192959,192960,196608,196627,201178,201180,202230,202232,204472,204473,204647,204651,204699,204700,204715,204716,213276,213277,216812,216813,216862,216863,218432,218436,218504,218505,218535,218536,218672,218676,218684,218685,220073,220077,220112,220113,220254,220260,220261,220262,220266,220267,220384,220388,220389,220390,221790,221794,224560,224561,225293,225294,229376,229385,231741,231742,235963,235964,237491,237492,238156,238160,238176,238177,239750,239754,239779,239780,250612,250613,262144,262145,275761,275762,275787,275788,275991,275992,276469,276470,276709,276710,277449,277450,278029,278030,278207,278208,279183,279185,279658,279659,280300,280301,283224,283225,284161,284164,287498,287499,294823,299497,299571,299572") == "302079083234d908a779ee0a4db1db2c0e868e4c" || 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"), "358,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,18540,18541,28348,28349,29024,29028,29994,29995,31337,31338,31472,31473,31528,31529,32768,32777,33152,33153,33515,33519,34038,34039,34051,34057,34058,34059,43810,43811,47682,47683,47933,47938,47950,47951,48015,48018,48211,48216,48473,48475,51957,51958,61800,61801,65536,65543,71351,71358,72834,72835,78210,78211,81360,81361,90912,90913,90920,90921,91050,91056,91057,91058,91071,91077,91078,91079,98304,98313,98608,98609,99849,99853,100866,100867,104715,104717,118200,118201,118270,118271,120492,120494,131072,131079,140999,141000,143008,143009,150310,150311,156682,156683,160672,160673,160974,160975,161027,161029,161038,161039,161133,161135,161924,161925,161932,161933,161939,161940,163840,163849,166278,166279,166512,166514,166524,166526,166572,166574,166584,166586,166595,166596,168414,168415,168416,168418,168581,168582,168583,168584,168586,168587,168605,168606,168609,168611,168612,168614,168630,168631,168644,168645,168684,168688,168692,168696,168697,168701,168702,168718,169133,169134,169505,169506,170991,170992,171081,171083,171086,171087,171090,171091,171094,171095,171098,171099,171102,171103,171106,171107,171121,171122,171128,171129,171135,171136,171142,171143,171149,171150,171156,171157,171199,171200,171221,171222,171229,171230,171251,171252,171269,171270,171276,171277,171295,171296,171303,171304,171323,171324,171339,171340,171345,171346,171366,171367,171374,171375,171396,171397,171414,171415,171421,171422,171425,171426,171429,171430,171433,171434,171437,171438,171441,171442,172029,172031,174477,174478,191815,191817,191818,191819,192959,192960,196608,196627,201178,201180,202230,202232,204472,204473,204647,204651,204699,204700,204715,204716,213276,213277,216812,216813,216862,216863,218432,218436,218504,218505,218535,218536,218672,218676,218684,218685,220073,220077,220112,220113,220254,220260,220261,220262,220266,220267,220384,220388,220389,220390,221790,221794,224560,224561,225293,225294,229376,229385,231741,231742,235963,235964,237491,237492,238156,238160,238176,238177,239750,239754,239779,239780,250612,250613,262144,262145,275761,275762,275787,275788,275991,275992,276469,276470,276709,276710,277449,277450,278029,278030,278207,278208,279183,279185,279658,279659,280300,280301,283224,283225,284161,284164,287498,287499,294823,299497,299571,299572") && 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"), "310,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,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,8839,9063,9210,9376,9934,9935,10025,10185,11114,11115,11165,11166,11475,11476,16801,16802,16832,16833,17022,17023,17083,17084,17263,17264,17384,17385,17593,17594,22486,22487,22489,22490,22519,22520,22713,22714,22887,22888,22913,22914,22931,22932,23008,23009,23032,23033,23089,23090,23195,23196,28169,28170,28189,28190,28468,28469,28555,28556,28594,28595,28672,28673,28928,28929,32768,32807,35221,98326,98328,119102,119464,121360,121399,121400") == "fa1ceb281f3b311861de89f91bcbc1f45d83588c" || 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"), "310,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,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,8839,9063,9210,9376,9934,9935,10025,10185,11114,11115,11165,11166,11475,11476,16801,16802,16832,16833,17022,17023,17083,17084,17263,17264,17384,17385,17593,17594,22486,22487,22489,22490,22519,22520,22713,22714,22887,22888,22913,22914,22931,22932,23008,23009,23032,23033,23089,23090,23195,23196,28169,28170,28189,28190,28468,28469,28555,28556,28594,28595,28672,28673,28928,28929,32768,32807,35221,98326,98328,119102,119464,121360,121399,121400") && 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:e20ad6e82b9f8581f88ffebe0f9dfad329a31092"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:56c8377d841b9fcb5143e93c7a8d2a662ce84fba"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:56c8377d841b9fcb5143e93c7a8d2a662ce84fba")));

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