getprop("ro.product.device") == "vayu" || abort("E3004: This package is for \"vayu\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/vayu_tr/vayu:11/RKQ1.200826.002/V12.5.3.0.RJUTRXM:user/release-keys");
ui_print("Target: Xiaomi/vayu_tr/vayu:11/RKQ1.200826.002/V12.5.4.0.RJUTRXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/vayu_tr/vayu:11/RKQ1.200826.002/V12.5.3.0.RJUTRXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/vayu_tr/vayu:11/RKQ1.200826.002/V12.5.4.0.RJUTRXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/vayu_tr/vayu:11/RKQ1.200826.002/V12.5.3.0.RJUTRXM:user/release-keys or Xiaomi/vayu_tr/vayu:11/RKQ1.200826.002/V12.5.4.0.RJUTRXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f14cfe2ee857ca7bfbc4f96fa895f695e6917be9"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1d682f4769153377a77f6a5a0a3de22c7a17b4f8")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f14cfe2ee857ca7bfbc4f96fa895f695e6917be9"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1d682f4769153377a77f6a5a0a3de22c7a17b4f8"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "16,1,32,43,53,55,59,87,88,104,719990,720896,720897,722183,733627,733781,733782") == "72a6fa287264a94cad1ab6e0a3bab7af6b0b0cd3" || 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"), "16,1,32,43,53,55,59,87,88,104,719990,720896,720897,722183,733627,733781,733782") && 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"), "464,1,196,508,515,525,529,534,535,613,621,627,628,872,876,881,882,884,888,890,891,894,898,902,903,906,907,916,920,924,931,944,945,1617,1668,1753,1754,1926,1932,4166,4167,4603,4604,12739,12740,12800,12801,13752,13754,13755,13756,13758,13761,13762,13763,13765,13767,13768,13769,13771,13773,13774,13775,13777,13779,13780,13781,13783,13785,13786,13787,13789,13791,13796,13798,13801,13803,13806,13808,13816,13818,13821,13823,13824,13825,13827,13829,13830,13831,13834,13836,13837,13838,13840,13842,13843,13844,13846,13848,13849,13850,13852,13854,13855,13856,13858,13860,13861,13862,13871,13872,13891,13892,13893,13894,13898,13899,13900,13901,13904,13905,13906,13907,13910,13911,13912,13913,13916,13917,13918,13919,13923,13924,13925,13926,13929,13930,13931,13932,13936,13937,13941,13942,13946,13947,13951,13952,13956,13957,13958,13959,13968,13969,13970,13971,13974,13975,13976,13977,13980,13981,13982,13983,13986,13987,13988,13989,13991,13993,14285,14286,14401,14402,15337,15347,21519,21520,28550,28551,28573,28574,28675,28676,28677,28678,29176,29178,29183,29185,29191,29193,29198,29200,29259,29261,29481,29482,30712,30714,30760,30761,30844,30845,30846,30847,30911,30912,31276,31278,31771,31772,31837,31838,32768,32771,53587,53588,53592,53594,53611,53612,53647,53648,53657,53658,53660,53661,53711,53712,53715,53716,53767,53768,53978,53979,54004,54005,54037,54038,54145,54146,54180,54181,54320,54321,54334,54335,54444,54445,54447,54449,54451,54452,54511,54512,54514,54515,54575,54576,54578,54579,54640,54641,54643,54644,54708,54709,54711,54712,54776,54777,54779,54780,54843,54844,54910,54911,54913,54914,54978,54979,55047,55048,55050,55051,55112,55113,55115,55116,55180,55181,55183,55184,55245,55246,55248,55249,55313,55314,55317,55318,55379,55380,55382,55383,55447,55448,55450,55451,55515,55516,55518,55519,55583,55584,55586,55587,55651,55652,55654,55655,55722,55723,55724,55725,55791,55792,55793,55794,55799,55800,55803,55804,55864,55865,55867,55868,55931,55932,55998,55999,56001,56002,56066,56067,56135,56136,56138,56139,56200,56201,56203,56204,56268,56269,56271,56272,56333,56334,56336,56337,56401,56402,56405,56406,56467,56468,56470,56471,56535,56536,56538,56539,56603,56604,56606,56607,56671,56672,56674,56675,56739,56740,56742,56743,56810,56811,56812,56813,56879,56880,56881,56882,57045,57046,57057,57058,57521,57523,57569,57570,57685,57686,61234,61235,64230,64231,64322,64323,64324,64325,64369,64370,64794,64795,64851,64852,65191,65193,65194,65196,65197,65199,65207,65209,65210,65211,65221,65222,65223,65224,65226,65230,65359,65369,65536,65537,66107,66108,66180,66181,66185,98307,98812,131073,131578,163843,164348,196609,197114,229379,229884,262145,262650,294915,295420,327681,328186,345162,360448,360449,386991,393125,393215,393216") == "c98305570a1056b173cdaff94683d94f35e188bd" || 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"), "464,1,196,508,515,525,529,534,535,613,621,627,628,872,876,881,882,884,888,890,891,894,898,902,903,906,907,916,920,924,931,944,945,1617,1668,1753,1754,1926,1932,4166,4167,4603,4604,12739,12740,12800,12801,13752,13754,13755,13756,13758,13761,13762,13763,13765,13767,13768,13769,13771,13773,13774,13775,13777,13779,13780,13781,13783,13785,13786,13787,13789,13791,13796,13798,13801,13803,13806,13808,13816,13818,13821,13823,13824,13825,13827,13829,13830,13831,13834,13836,13837,13838,13840,13842,13843,13844,13846,13848,13849,13850,13852,13854,13855,13856,13858,13860,13861,13862,13871,13872,13891,13892,13893,13894,13898,13899,13900,13901,13904,13905,13906,13907,13910,13911,13912,13913,13916,13917,13918,13919,13923,13924,13925,13926,13929,13930,13931,13932,13936,13937,13941,13942,13946,13947,13951,13952,13956,13957,13958,13959,13968,13969,13970,13971,13974,13975,13976,13977,13980,13981,13982,13983,13986,13987,13988,13989,13991,13993,14285,14286,14401,14402,15337,15347,21519,21520,28550,28551,28573,28574,28675,28676,28677,28678,29176,29178,29183,29185,29191,29193,29198,29200,29259,29261,29481,29482,30712,30714,30760,30761,30844,30845,30846,30847,30911,30912,31276,31278,31771,31772,31837,31838,32768,32771,53587,53588,53592,53594,53611,53612,53647,53648,53657,53658,53660,53661,53711,53712,53715,53716,53767,53768,53978,53979,54004,54005,54037,54038,54145,54146,54180,54181,54320,54321,54334,54335,54444,54445,54447,54449,54451,54452,54511,54512,54514,54515,54575,54576,54578,54579,54640,54641,54643,54644,54708,54709,54711,54712,54776,54777,54779,54780,54843,54844,54910,54911,54913,54914,54978,54979,55047,55048,55050,55051,55112,55113,55115,55116,55180,55181,55183,55184,55245,55246,55248,55249,55313,55314,55317,55318,55379,55380,55382,55383,55447,55448,55450,55451,55515,55516,55518,55519,55583,55584,55586,55587,55651,55652,55654,55655,55722,55723,55724,55725,55791,55792,55793,55794,55799,55800,55803,55804,55864,55865,55867,55868,55931,55932,55998,55999,56001,56002,56066,56067,56135,56136,56138,56139,56200,56201,56203,56204,56268,56269,56271,56272,56333,56334,56336,56337,56401,56402,56405,56406,56467,56468,56470,56471,56535,56536,56538,56539,56603,56604,56606,56607,56671,56672,56674,56675,56739,56740,56742,56743,56810,56811,56812,56813,56879,56880,56881,56882,57045,57046,57057,57058,57521,57523,57569,57570,57685,57686,61234,61235,64230,64231,64322,64323,64324,64325,64369,64370,64794,64795,64851,64852,65191,65193,65194,65196,65197,65199,65207,65209,65210,65211,65221,65222,65223,65224,65226,65230,65359,65369,65536,65537,66107,66108,66180,66181,66185,98307,98812,131073,131578,163843,164348,196609,197114,229379,229884,262145,262650,294915,295420,327681,328186,345162,360448,360449,386991,393125,393215,393216") && 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,15,3862,3863,4441,4442,6213,6217,6313,6314,8949,8952,8960,8961,9000,9001,17183,17184,25171,25173,25303,25308,26586,26587,27262,27266,28232,28233,29569,29570,29971,29972,31271,31272,31634,31638,32157,32158,32170,32174,32178,32179,32768,32776,39990,39991,41215,41216,50391,50392,54303,54307,54338,54340,54633,54636,58436,58437,65536,65542,68284,68285,77829,77836,79312,79313,84702,84703,96200,96201,96426,96427,96825,96826,97327,97328,97333,97334,97462,97468,97469,97470,97482,97488,97489,97490,98280,98281,98304,98312,100655,100656,113941,113942,114018,114019,116197,116198,131072,131078,132554,132555,132814,132815,133011,133012,134923,134924,142376,142377,143359,143363,148436,148437,153495,153496,153503,153504,153510,153511,157848,157849,158074,158076,158086,158088,158134,158136,158146,158148,158157,158158,159976,159977,159980,159983,163749,163750,163840,163848,169598,169599,169619,169620,169683,169684,170345,170346,171890,171891,180943,180944,180950,180951,181422,181423,184808,184809,189359,189360,191058,191059,191063,191064,193969,193970,196608,196614,205397,205401,207152,207153,211542,211543,212103,212104,212108,212109,212132,212134,212135,212136,212168,212169,212180,212181,214100,214101,214104,214105,220408,220409,220572,220573,220574,220575,220577,220578,220594,220595,220598,220600,220601,220603,220621,220622,220635,220636,220675,220679,220683,220687,220688,220692,220693,220709,221124,221125,221496,221497,222982,222983,223072,223074,223076,223077,223079,223080,223082,223083,223085,223086,223088,223089,223091,223092,223102,223103,223107,223108,223113,223114,223119,223120,223124,223125,223130,223131,223160,223161,223181,223182,223188,223189,223209,223210,223226,223227,223938,223940,229376,229412,232242,232243,233815,233817,234174,234175,237767,237768,239719,239720,241639,241641,243663,243664,243673,243675,245045,245047,253210,253211,254261,254263,256503,256504,256678,256680,256728,256729,262144,262154,265047,265048,269867,269871,269938,269939,269967,269968,270104,270108,270116,270117,271505,271509,271544,271545,271715,271721,271722,271723,271727,271728,271871,271875,271876,271877,273277,273281,276047,276048,277578,277579,277582,277583,287559,287560,288143,288145,288690,288691,289354,289358,289374,289375,290912,290916,290941,290942,294912,294920,301778,301779,325773,325774,325795,325796,326003,326004,326309,326310,326430,326431,326723,326724,327459,327460,327680,327681,328009,328010,328224,328225,329168,329170,329675,329676,330317,330318,333213,333214,334006,334009,337343,337344,344809,350275,350357,350358") == "82e04e9f62b5423e9d5278e26cd119213f8696dc" || 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,15,3862,3863,4441,4442,6213,6217,6313,6314,8949,8952,8960,8961,9000,9001,17183,17184,25171,25173,25303,25308,26586,26587,27262,27266,28232,28233,29569,29570,29971,29972,31271,31272,31634,31638,32157,32158,32170,32174,32178,32179,32768,32776,39990,39991,41215,41216,50391,50392,54303,54307,54338,54340,54633,54636,58436,58437,65536,65542,68284,68285,77829,77836,79312,79313,84702,84703,96200,96201,96426,96427,96825,96826,97327,97328,97333,97334,97462,97468,97469,97470,97482,97488,97489,97490,98280,98281,98304,98312,100655,100656,113941,113942,114018,114019,116197,116198,131072,131078,132554,132555,132814,132815,133011,133012,134923,134924,142376,142377,143359,143363,148436,148437,153495,153496,153503,153504,153510,153511,157848,157849,158074,158076,158086,158088,158134,158136,158146,158148,158157,158158,159976,159977,159980,159983,163749,163750,163840,163848,169598,169599,169619,169620,169683,169684,170345,170346,171890,171891,180943,180944,180950,180951,181422,181423,184808,184809,189359,189360,191058,191059,191063,191064,193969,193970,196608,196614,205397,205401,207152,207153,211542,211543,212103,212104,212108,212109,212132,212134,212135,212136,212168,212169,212180,212181,214100,214101,214104,214105,220408,220409,220572,220573,220574,220575,220577,220578,220594,220595,220598,220600,220601,220603,220621,220622,220635,220636,220675,220679,220683,220687,220688,220692,220693,220709,221124,221125,221496,221497,222982,222983,223072,223074,223076,223077,223079,223080,223082,223083,223085,223086,223088,223089,223091,223092,223102,223103,223107,223108,223113,223114,223119,223120,223124,223125,223130,223131,223160,223161,223181,223182,223188,223189,223209,223210,223226,223227,223938,223940,229376,229412,232242,232243,233815,233817,234174,234175,237767,237768,239719,239720,241639,241641,243663,243664,243673,243675,245045,245047,253210,253211,254261,254263,256503,256504,256678,256680,256728,256729,262144,262154,265047,265048,269867,269871,269938,269939,269967,269968,270104,270108,270116,270117,271505,271509,271544,271545,271715,271721,271722,271723,271727,271728,271871,271875,271876,271877,273277,273281,276047,276048,277578,277579,277582,277583,287559,287560,288143,288145,288690,288691,289354,289358,289374,289375,290912,290916,290941,290942,294912,294920,301778,301779,325773,325774,325795,325796,326003,326004,326309,326310,326430,326431,326723,326724,327459,327460,327680,327681,328009,328010,328224,328225,329168,329170,329675,329676,330317,330318,333213,333214,334006,334009,337343,337344,344809,350275,350357,350358") && 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("odm"), "14,1,13,14,17,25,27,34,35,257,258,262,271,287,288") == "c8796fed13451a66f6587b48c370fe8d5134e2cd" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "14,1,13,14,17,25,27,34,35,257,258,262,271,287,288") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "342,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,236,242,246,247,253,259,260,261,489,493,502,503,533,539,540,541,735,739,743,744,747,751,756,757,760,761,767,773,774,775,797,803,804,805,1540,1544,1562,1563,1567,1573,1574,1575,1577,1578,1589,1595,1596,1597,1607,1608,1613,1617,1621,1622,1626,1632,1636,1637,1644,1650,1651,1652,1664,1670,1671,1672,1674,1681,1687,1694,1699,1706,1736,1743,1762,1769,1787,1792,1809,1816,1832,1833,2042,2044,2054,2055,2067,2068,2069,2070,2071,2072,2081,2082,2105,2106,2152,2157,2160,2163,2166,2169,2172,2174,2178,2179,2183,2186,2670,2672,2676,2680,2685,2687,2692,2696,2697,2701,2702,2706,2707,2711,2712,2716,2717,2721,2722,2726,2727,2729,2736,2740,2741,2745,2746,2750,2751,2755,2756,2760,2761,2765,2766,2770,2771,2773,2774,2778,2779,2783,2784,2788,2789,2793,2794,2798,2799,2803,2804,2808,2809,2811,2815,2819,2820,2822,2823,2825,2826,2830,2831,2835,2836,2838,2839,2843,2844,2848,2849,2853,2854,2858,2859,2861,2862,2866,2867,2869,2873,2886,2891,2921,2924,3031,5434,5435,5569,6247,6249,6259,6500,6501,7748,7972,8566,8567,8625,8626,9166,9167,9217,9218,9527,9528,14709,14710,14782,14783,14791,14792,14853,14854,14927,14928,14932,14933,14986,14987,14997,14998,15031,15032,15051,15052,15104,15105,15250,15251,15326,15327,15473,15474,21411,22448,22452,22468,23276,23277,24863,24864,25331,25672,29957,29958,30836,30837,30888,30889,31207,31208,32768,32805,33279,33280,39208,39212,39213,40913,41078,41080,41128,41130,42714,42716,51224,51225,51731,51732,51771,51772,51785,51786,52205,52206,53256,53258,58475,58479,58750,98188,98304,98324,98327,98352,99313,99314,99840,101434,101464,101470,101471,101472,101500,101506,101510,101511,102304,102308,102332,102333,102340,102346,102347,102348,102626,102632,102640,102647,102668,102673,102994,104630,104665,104666") == "2d138453fbc5d3698929cef6e114efda783d153b" || 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"), "342,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,236,242,246,247,253,259,260,261,489,493,502,503,533,539,540,541,735,739,743,744,747,751,756,757,760,761,767,773,774,775,797,803,804,805,1540,1544,1562,1563,1567,1573,1574,1575,1577,1578,1589,1595,1596,1597,1607,1608,1613,1617,1621,1622,1626,1632,1636,1637,1644,1650,1651,1652,1664,1670,1671,1672,1674,1681,1687,1694,1699,1706,1736,1743,1762,1769,1787,1792,1809,1816,1832,1833,2042,2044,2054,2055,2067,2068,2069,2070,2071,2072,2081,2082,2105,2106,2152,2157,2160,2163,2166,2169,2172,2174,2178,2179,2183,2186,2670,2672,2676,2680,2685,2687,2692,2696,2697,2701,2702,2706,2707,2711,2712,2716,2717,2721,2722,2726,2727,2729,2736,2740,2741,2745,2746,2750,2751,2755,2756,2760,2761,2765,2766,2770,2771,2773,2774,2778,2779,2783,2784,2788,2789,2793,2794,2798,2799,2803,2804,2808,2809,2811,2815,2819,2820,2822,2823,2825,2826,2830,2831,2835,2836,2838,2839,2843,2844,2848,2849,2853,2854,2858,2859,2861,2862,2866,2867,2869,2873,2886,2891,2921,2924,3031,5434,5435,5569,6247,6249,6259,6500,6501,7748,7972,8566,8567,8625,8626,9166,9167,9217,9218,9527,9528,14709,14710,14782,14783,14791,14792,14853,14854,14927,14928,14932,14933,14986,14987,14997,14998,15031,15032,15051,15052,15104,15105,15250,15251,15326,15327,15473,15474,21411,22448,22452,22468,23276,23277,24863,24864,25331,25672,29957,29958,30836,30837,30888,30889,31207,31208,32768,32805,33279,33280,39208,39212,39213,40913,41078,41080,41128,41130,42714,42716,51224,51225,51731,51732,51771,51772,51785,51786,52205,52206,53256,53258,58475,58479,58750,98188,98304,98324,98327,98352,99313,99314,99840,101434,101464,101470,101471,101472,101500,101506,101510,101511,102304,102308,102332,102333,102340,102346,102347,102348,102626,102632,102640,102647,102668,102673,102994,104630,104665,104666") && 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/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/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
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/dspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/km41.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/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/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/km41.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");

# --- 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.500000, 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 odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm 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",":134217728:f14cfe2ee857ca7bfbc4f96fa895f695e6917be9"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1d682f4769153377a77f6a5a0a3de22c7a17b4f8"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1d682f4769153377a77f6a5a0a3de22c7a17b4f8")));

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