getprop("ro.product.device") == "gauguin" || abort("E3004: This package is for \"gauguin\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/gauguinin/gauguin:11/RKQ1.200826.002/V12.0.1.0.RJSINXM:user/release-keys");
ui_print("Target: Redmi/gauguinin/gauguin:11/RKQ1.200826.002/V12.0.2.0.RJSINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/gauguinin/gauguin:11/RKQ1.200826.002/V12.0.1.0.RJSINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/gauguinin/gauguin:11/RKQ1.200826.002/V12.0.2.0.RJSINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/gauguinin/gauguin:11/RKQ1.200826.002/V12.0.1.0.RJSINXM:user/release-keys or Redmi/gauguinin/gauguin:11/RKQ1.200826.002/V12.0.2.0.RJSINXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d1416fb531d75956c7ba8c0f5ba763482e71a7b0"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f0b861cca102e3fd5955e509f83c187b56d3b4b4")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d1416fb531d75956c7ba8c0f5ba763482e71a7b0"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f0b861cca102e3fd5955e509f83c187b56d3b4b4"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "280,1,34,44,54,56,60,88,89,113,114,20484,20485,26649,26650,28078,28079,32768,32788,55786,55787,57087,57088,58208,58209,59926,59927,60528,60529,61560,61561,61712,61713,62636,62637,65536,65554,66825,66826,67809,67810,69175,69176,69618,69619,71792,71793,72047,72048,72140,72141,72387,72388,72604,72606,72770,72774,72782,72783,72812,72816,72820,72821,72833,72839,72840,72841,74288,74294,74328,74329,74335,74341,74342,74343,74348,74354,74355,74356,76396,76397,76406,76407,77052,77056,77096,77097,78062,78063,78713,78714,80645,80648,80656,80657,80679,80680,80684,80685,81119,81120,81265,81266,81297,81303,81304,81305,81622,81626,81634,81635,81755,81761,81762,83130,86461,86465,86494,86517,86524,86530,86531,86532,90071,90072,90745,90749,90795,90796,91884,91888,91909,91910,92039,92043,92049,92050,92183,92187,92194,92195,96839,96843,96909,96910,96935,96936,97184,97185,97255,97259,97264,97265,97490,97494,97501,97502,98304,98324,110750,110751,111457,111461,111554,111555,112028,112034,112035,112036,113906,113910,113955,113956,113960,113966,113967,113968,113999,114005,114006,114007,115697,115701,115725,115726,116591,116595,116618,116619,118682,118686,118712,118713,122020,122022,125808,125809,125814,125820,125821,125822,127610,127614,127656,127657,130190,130191,130530,130532,130533,130534,130567,130571,130588,130589,130594,130595,131045,131049,131072,131090,131469,131470,132160,132164,132180,132181,134566,134570,134616,134617,134780,134784,134788,134789,135199,135203,135216,135217,137336,137337,142872,142876,142958,142959,144422,144426,144453,144454,147256,147257,148181,148185,148216,148217,148243,148244,152107,152111,152136,152137,154732,154736,154764,154765,154785,154786,156571,156575,156613,156614,156653,156659,156664,622596,622610,629487,631376,641382,641518,641519") == "8399abb4b2a29a13a99bc8b15b4e0cd241c7a663" || 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"), "280,1,34,44,54,56,60,88,89,113,114,20484,20485,26649,26650,28078,28079,32768,32788,55786,55787,57087,57088,58208,58209,59926,59927,60528,60529,61560,61561,61712,61713,62636,62637,65536,65554,66825,66826,67809,67810,69175,69176,69618,69619,71792,71793,72047,72048,72140,72141,72387,72388,72604,72606,72770,72774,72782,72783,72812,72816,72820,72821,72833,72839,72840,72841,74288,74294,74328,74329,74335,74341,74342,74343,74348,74354,74355,74356,76396,76397,76406,76407,77052,77056,77096,77097,78062,78063,78713,78714,80645,80648,80656,80657,80679,80680,80684,80685,81119,81120,81265,81266,81297,81303,81304,81305,81622,81626,81634,81635,81755,81761,81762,83130,86461,86465,86494,86517,86524,86530,86531,86532,90071,90072,90745,90749,90795,90796,91884,91888,91909,91910,92039,92043,92049,92050,92183,92187,92194,92195,96839,96843,96909,96910,96935,96936,97184,97185,97255,97259,97264,97265,97490,97494,97501,97502,98304,98324,110750,110751,111457,111461,111554,111555,112028,112034,112035,112036,113906,113910,113955,113956,113960,113966,113967,113968,113999,114005,114006,114007,115697,115701,115725,115726,116591,116595,116618,116619,118682,118686,118712,118713,122020,122022,125808,125809,125814,125820,125821,125822,127610,127614,127656,127657,130190,130191,130530,130532,130533,130534,130567,130571,130588,130589,130594,130595,131045,131049,131072,131090,131469,131470,132160,132164,132180,132181,134566,134570,134616,134617,134780,134784,134788,134789,135199,135203,135216,135217,137336,137337,142872,142876,142958,142959,144422,144426,144453,144454,147256,147257,148181,148185,148216,148217,148243,148244,152107,152111,152136,152137,154732,154736,154764,154765,154785,154786,156571,156575,156613,156614,156653,156659,156664,622596,622610,629487,631376,641382,641518,641519") && 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"), "1038,1,29,39,43,48,49,128,136,142,143,1817,1821,2298,2299,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2591,2592,2628,2632,2682,2683,2842,2843,2846,2850,2854,2855,2858,2859,5283,5284,5325,5366,7776,7777,16880,16881,17450,17511,17897,17899,17900,17901,17903,17906,17907,17908,17910,17912,17913,17914,17916,17918,17919,17920,17922,17924,17925,17926,17928,17930,17931,17932,17934,17936,17941,17943,17946,17948,17951,17953,17961,17963,17966,17968,17969,17970,17972,17974,17975,17976,17979,17981,17982,17983,17985,17987,17988,17989,17991,17993,17994,17995,17997,17999,18000,18001,18003,18005,18006,18007,18016,18017,18036,18037,18038,18039,18043,18044,18045,18046,18049,18050,18051,18052,18055,18056,18057,18058,18061,18062,18063,18064,18068,18069,18070,18071,18074,18075,18076,18077,18081,18082,18086,18087,18091,18092,18096,18097,18101,18102,18103,18104,18113,18114,18115,18116,18119,18120,18121,18122,18125,18126,18127,18128,18131,18132,18133,18134,18136,18138,18430,18431,18546,18547,19582,19589,32083,32084,32106,32107,32208,32209,32210,32211,32709,32711,32716,32718,32724,32726,32731,32733,32768,32795,32819,32821,33041,33042,34272,34274,34322,34323,39032,39034,39701,39703,40257,40259,40842,40843,41749,41750,41758,41759,41980,41981,45350,45351,45967,45968,47695,47696,65536,65559,75029,75030,75034,75036,75053,75054,75089,75090,75099,75100,75243,75244,75294,75295,75301,75302,76007,76008,76021,76022,76073,76074,76099,76100,76133,76134,76241,76242,76259,76260,76265,76266,76327,76328,76751,76752,80782,80783,80800,80801,80918,80919,80921,80923,80987,80988,81058,81059,81126,81127,81129,81130,81132,81133,81192,81194,81196,81197,81261,81262,81332,81333,81400,81401,81403,81404,81406,81412,81414,81415,81417,81419,81421,81432,81492,81493,81495,81496,81506,81507,81573,81574,81651,81652,81729,81730,81806,81807,81886,81887,81963,81964,82040,82041,82117,82118,82132,82133,82196,82197,82272,82273,82350,82351,82427,82428,82500,82501,82503,82504,82516,82522,82582,82583,82585,82586,82652,82653,82655,82656,82720,82721,82723,82724,82787,82788,82790,82791,82854,82855,82857,82858,82921,82922,82924,82925,82988,82989,82991,82992,83056,83057,83059,83060,83125,83126,83195,83196,83272,83273,83348,83349,83426,83427,83429,83430,83493,83494,83496,83497,83561,83562,83564,83565,83628,83629,83631,83632,83695,83696,83698,83699,83761,83762,83764,83765,83826,83827,83829,83830,83906,83907,83980,83981,83983,83984,84048,84049,84051,84052,84119,84120,84122,84123,84188,84189,84191,84192,84259,84260,84262,84263,84329,84330,84332,84333,84336,84337,84402,84403,84404,84405,84475,84476,84477,84478,84551,84552,84554,84555,84623,84624,84626,84627,84635,84636,84695,84696,84698,84699,84764,84765,84767,84768,84837,84838,84840,84841,84906,84907,84909,84910,84978,84979,84981,84982,85047,85048,85050,85051,85117,85118,85120,85121,85181,85182,85184,85185,85247,85248,85316,85317,85382,85383,85385,85386,85446,85447,85449,85450,85512,85513,85578,85579,85581,85582,85641,85642,85644,85645,85713,85714,85716,85717,85785,85786,85858,85859,85935,85936,85949,85950,86014,86015,86089,86090,86092,86093,86156,86157,86159,86160,86223,86224,86226,86227,86290,86291,86293,86294,86357,86358,86360,86361,86422,86423,86425,86426,86487,86488,86490,86491,86567,86568,86640,86641,86643,86644,86708,86709,86711,86712,86778,86779,86781,86782,86847,86848,86850,86851,86918,86919,86921,86922,86990,86991,86993,86994,87062,87063,87064,87065,87137,87138,87139,87140,87212,87213,87215,87216,87284,87285,87287,87288,87290,87291,87357,87358,87360,87361,87429,87430,87498,87499,87501,87502,87567,87568,87570,87571,87638,87639,87641,87642,87707,87708,87710,87711,87776,87777,87779,87780,87840,87841,87843,87844,87906,87907,87974,87975,88040,88041,88043,88044,88104,88105,88107,88108,88170,88171,88236,88237,88239,88240,88299,88300,88302,88303,88370,88371,88373,88374,92957,92958,93090,93091,93182,93183,93533,93534,93595,93596,93745,93746,93825,93826,93858,93859,93935,93936,94004,94005,94101,94102,94194,94195,94267,94268,94313,94314,94434,94435,94461,94462,94464,94465,94497,94498,94659,94660,94731,94732,94784,94785,95109,95110,95112,95113,95207,95208,95332,95333,95426,95427,95466,95467,95494,95495,95558,95559,95630,95631,95696,95698,95699,95701,95802,95804,95810,95814,97100,97101,97258,97259,98120,98121,98124,98125,98304,98338,98437,98438,98531,98532,98597,98598,98600,98601,98695,98696,98699,98700,98980,98981,100124,100125,100516,100517,100519,100521,101008,101010,101479,101480,101482,101483,102066,102067,102685,102686,102688,102689,102691,102692,103441,103442,105523,105529,105545,105549,105560,105564,105572,105573,105720,105721,105722,105724,105727,105728,105763,105765,105766,105768,106063,106064,106078,106081,106082,106083,106487,106490,106501,106502,106511,106516,106522,106525,106666,106668,106669,106671,106673,106674,106675,106676,106710,106711,106712,106714,106944,106968,106985,106986,107605,107606,107685,107690,107696,107698,107700,107701,107703,107707,107852,107853,107854,107857,107859,107860,108200,108201,108203,108207,108611,108612,108621,108626,108843,108844,108846,108847,113296,115668,118948,118949,119474,119489,119790,119791,125663,125665,128302,128303,130045,130046,131072,131104,134018,134019,134021,134022,141180,141181,141801,141802,142715,142716,145595,145596,146877,146878,150391,150402,150895,152855,152861,155470,157146,157147,158431,158432,158777,158778,159141,159142,161306,161308,163840,163864,164097,164098,164445,164446,165049,165055,165354,165355,172470,172471,172529,172530,173422,175581,179144,179146,179976,179977,189372,189373,190843,190844,192064,192065,192233,192295,196608,196631,197337,197338,201495,202025,204170,204171,204505,204516,204530,204541,204578,204579,204591,204592,223068,223069,224439,224501,229376,229405,233635,233636,233640,233641,236960,236961,239628,239630,241999,242000,242002,242003,242010,242011,242095,242096,242336,242337,245366,245367,246048,246049,246055,246056,247545,247546,248422,248423,253349,253350,262144,262167,262506,262507,266888,266889,266891,266892,268473,268475,275803,275804,275810,275812,275819,275820,281264,281265,281463,281464,281466,281467,281471,281472,281480,281481,281489,281490,281491,281492,281537,281538,281553,281554,281556,281557,281562,281563,281565,281566,281567,281569,281752,281753,283333,283334,283340,283342,283349,283350,285528,285529,285745,285746,287301,287302,288879,288880,290568,290569,294912,294934,299281,299282,303646,303648,303982,303984,305376,360458,360468,360732,361821,367557,367643,367644") == "069d6f730ca0659aceb8c65e075be7b8ea357f60" || 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"), "1038,1,29,39,43,48,49,128,136,142,143,1817,1821,2298,2299,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2591,2592,2628,2632,2682,2683,2842,2843,2846,2850,2854,2855,2858,2859,5283,5284,5325,5366,7776,7777,16880,16881,17450,17511,17897,17899,17900,17901,17903,17906,17907,17908,17910,17912,17913,17914,17916,17918,17919,17920,17922,17924,17925,17926,17928,17930,17931,17932,17934,17936,17941,17943,17946,17948,17951,17953,17961,17963,17966,17968,17969,17970,17972,17974,17975,17976,17979,17981,17982,17983,17985,17987,17988,17989,17991,17993,17994,17995,17997,17999,18000,18001,18003,18005,18006,18007,18016,18017,18036,18037,18038,18039,18043,18044,18045,18046,18049,18050,18051,18052,18055,18056,18057,18058,18061,18062,18063,18064,18068,18069,18070,18071,18074,18075,18076,18077,18081,18082,18086,18087,18091,18092,18096,18097,18101,18102,18103,18104,18113,18114,18115,18116,18119,18120,18121,18122,18125,18126,18127,18128,18131,18132,18133,18134,18136,18138,18430,18431,18546,18547,19582,19589,32083,32084,32106,32107,32208,32209,32210,32211,32709,32711,32716,32718,32724,32726,32731,32733,32768,32795,32819,32821,33041,33042,34272,34274,34322,34323,39032,39034,39701,39703,40257,40259,40842,40843,41749,41750,41758,41759,41980,41981,45350,45351,45967,45968,47695,47696,65536,65559,75029,75030,75034,75036,75053,75054,75089,75090,75099,75100,75243,75244,75294,75295,75301,75302,76007,76008,76021,76022,76073,76074,76099,76100,76133,76134,76241,76242,76259,76260,76265,76266,76327,76328,76751,76752,80782,80783,80800,80801,80918,80919,80921,80923,80987,80988,81058,81059,81126,81127,81129,81130,81132,81133,81192,81194,81196,81197,81261,81262,81332,81333,81400,81401,81403,81404,81406,81412,81414,81415,81417,81419,81421,81432,81492,81493,81495,81496,81506,81507,81573,81574,81651,81652,81729,81730,81806,81807,81886,81887,81963,81964,82040,82041,82117,82118,82132,82133,82196,82197,82272,82273,82350,82351,82427,82428,82500,82501,82503,82504,82516,82522,82582,82583,82585,82586,82652,82653,82655,82656,82720,82721,82723,82724,82787,82788,82790,82791,82854,82855,82857,82858,82921,82922,82924,82925,82988,82989,82991,82992,83056,83057,83059,83060,83125,83126,83195,83196,83272,83273,83348,83349,83426,83427,83429,83430,83493,83494,83496,83497,83561,83562,83564,83565,83628,83629,83631,83632,83695,83696,83698,83699,83761,83762,83764,83765,83826,83827,83829,83830,83906,83907,83980,83981,83983,83984,84048,84049,84051,84052,84119,84120,84122,84123,84188,84189,84191,84192,84259,84260,84262,84263,84329,84330,84332,84333,84336,84337,84402,84403,84404,84405,84475,84476,84477,84478,84551,84552,84554,84555,84623,84624,84626,84627,84635,84636,84695,84696,84698,84699,84764,84765,84767,84768,84837,84838,84840,84841,84906,84907,84909,84910,84978,84979,84981,84982,85047,85048,85050,85051,85117,85118,85120,85121,85181,85182,85184,85185,85247,85248,85316,85317,85382,85383,85385,85386,85446,85447,85449,85450,85512,85513,85578,85579,85581,85582,85641,85642,85644,85645,85713,85714,85716,85717,85785,85786,85858,85859,85935,85936,85949,85950,86014,86015,86089,86090,86092,86093,86156,86157,86159,86160,86223,86224,86226,86227,86290,86291,86293,86294,86357,86358,86360,86361,86422,86423,86425,86426,86487,86488,86490,86491,86567,86568,86640,86641,86643,86644,86708,86709,86711,86712,86778,86779,86781,86782,86847,86848,86850,86851,86918,86919,86921,86922,86990,86991,86993,86994,87062,87063,87064,87065,87137,87138,87139,87140,87212,87213,87215,87216,87284,87285,87287,87288,87290,87291,87357,87358,87360,87361,87429,87430,87498,87499,87501,87502,87567,87568,87570,87571,87638,87639,87641,87642,87707,87708,87710,87711,87776,87777,87779,87780,87840,87841,87843,87844,87906,87907,87974,87975,88040,88041,88043,88044,88104,88105,88107,88108,88170,88171,88236,88237,88239,88240,88299,88300,88302,88303,88370,88371,88373,88374,92957,92958,93090,93091,93182,93183,93533,93534,93595,93596,93745,93746,93825,93826,93858,93859,93935,93936,94004,94005,94101,94102,94194,94195,94267,94268,94313,94314,94434,94435,94461,94462,94464,94465,94497,94498,94659,94660,94731,94732,94784,94785,95109,95110,95112,95113,95207,95208,95332,95333,95426,95427,95466,95467,95494,95495,95558,95559,95630,95631,95696,95698,95699,95701,95802,95804,95810,95814,97100,97101,97258,97259,98120,98121,98124,98125,98304,98338,98437,98438,98531,98532,98597,98598,98600,98601,98695,98696,98699,98700,98980,98981,100124,100125,100516,100517,100519,100521,101008,101010,101479,101480,101482,101483,102066,102067,102685,102686,102688,102689,102691,102692,103441,103442,105523,105529,105545,105549,105560,105564,105572,105573,105720,105721,105722,105724,105727,105728,105763,105765,105766,105768,106063,106064,106078,106081,106082,106083,106487,106490,106501,106502,106511,106516,106522,106525,106666,106668,106669,106671,106673,106674,106675,106676,106710,106711,106712,106714,106944,106968,106985,106986,107605,107606,107685,107690,107696,107698,107700,107701,107703,107707,107852,107853,107854,107857,107859,107860,108200,108201,108203,108207,108611,108612,108621,108626,108843,108844,108846,108847,113296,115668,118948,118949,119474,119489,119790,119791,125663,125665,128302,128303,130045,130046,131072,131104,134018,134019,134021,134022,141180,141181,141801,141802,142715,142716,145595,145596,146877,146878,150391,150402,150895,152855,152861,155470,157146,157147,158431,158432,158777,158778,159141,159142,161306,161308,163840,163864,164097,164098,164445,164446,165049,165055,165354,165355,172470,172471,172529,172530,173422,175581,179144,179146,179976,179977,189372,189373,190843,190844,192064,192065,192233,192295,196608,196631,197337,197338,201495,202025,204170,204171,204505,204516,204530,204541,204578,204579,204591,204592,223068,223069,224439,224501,229376,229405,233635,233636,233640,233641,236960,236961,239628,239630,241999,242000,242002,242003,242010,242011,242095,242096,242336,242337,245366,245367,246048,246049,246055,246056,247545,247546,248422,248423,253349,253350,262144,262167,262506,262507,266888,266889,266891,266892,268473,268475,275803,275804,275810,275812,275819,275820,281264,281265,281463,281464,281466,281467,281471,281472,281480,281481,281489,281490,281491,281492,281537,281538,281553,281554,281556,281557,281562,281563,281565,281566,281567,281569,281752,281753,283333,283334,283340,283342,283349,283350,285528,285529,285745,285746,287301,287302,288879,288880,290568,290569,294912,294934,299281,299282,303646,303648,303982,303984,305376,360458,360468,360732,361821,367557,367643,367644") && 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"), "288,1,16,4077,4078,5752,5756,5831,5832,8691,8694,8698,8699,8742,8743,9544,9545,12915,12919,13034,13035,17388,17389,24265,24266,31344,31347,31552,31555,31571,31575,32455,32456,32768,32777,33140,33144,34110,34111,35677,35678,36966,36967,37329,37333,37852,37853,37865,37869,37873,37874,39714,39718,39760,39761,41151,41152,49147,49148,49543,49544,58357,58358,62698,62699,62783,62785,62799,62802,62862,62867,62880,62882,63027,63030,65536,65543,66739,66740,76327,76328,85522,85528,87315,87316,92210,92211,98304,98313,103193,103194,103199,103200,103328,103334,103335,103336,103348,103354,103355,103356,106296,106297,118573,118574,118629,118630,131072,131079,131080,131081,137645,137646,142331,142332,142334,142335,142341,142342,145244,145245,145447,145451,150563,150564,155629,155630,155637,155638,155644,155645,159502,159503,159506,159508,159672,159673,159674,159675,159677,159678,159693,159694,159697,159699,159700,159702,159720,159721,159733,159734,159773,159777,159781,159785,159786,159790,159791,159807,160222,160223,160594,160595,162080,162081,162170,162172,163263,163265,163840,163882,167151,167152,174150,174153,176083,176084,176086,176087,178074,178075,182151,182152,183725,183728,183926,183928,193525,193526,193529,193530,194132,194134,194546,194548,196608,196635,197719,197720,197722,197723,205469,205470,205551,205552,205558,205559,205564,205565,205617,205618,205630,205631,205643,205644,205650,205651,206926,206930,206987,206988,207014,207015,207151,207155,207163,207164,208552,208556,208591,208592,208749,208755,208756,208757,208761,208762,208884,208888,208889,208890,212029,212033,212093,212094,212367,212368,214890,214893,216843,216845,218496,218499,219491,219493,222040,222042,224614,224616,229376,229392,233133,233134,244487,244491,245610,245611,262144,262145,271216,271217,271950,271955,272028,272033,272388,272395,274665,274666,275162,275163,278872,278875,282209,282210,289518,294108,294179,294180") == "ab1eaab8655f126b30e6e3029bce04c0855002ab" || 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"), "288,1,16,4077,4078,5752,5756,5831,5832,8691,8694,8698,8699,8742,8743,9544,9545,12915,12919,13034,13035,17388,17389,24265,24266,31344,31347,31552,31555,31571,31575,32455,32456,32768,32777,33140,33144,34110,34111,35677,35678,36966,36967,37329,37333,37852,37853,37865,37869,37873,37874,39714,39718,39760,39761,41151,41152,49147,49148,49543,49544,58357,58358,62698,62699,62783,62785,62799,62802,62862,62867,62880,62882,63027,63030,65536,65543,66739,66740,76327,76328,85522,85528,87315,87316,92210,92211,98304,98313,103193,103194,103199,103200,103328,103334,103335,103336,103348,103354,103355,103356,106296,106297,118573,118574,118629,118630,131072,131079,131080,131081,137645,137646,142331,142332,142334,142335,142341,142342,145244,145245,145447,145451,150563,150564,155629,155630,155637,155638,155644,155645,159502,159503,159506,159508,159672,159673,159674,159675,159677,159678,159693,159694,159697,159699,159700,159702,159720,159721,159733,159734,159773,159777,159781,159785,159786,159790,159791,159807,160222,160223,160594,160595,162080,162081,162170,162172,163263,163265,163840,163882,167151,167152,174150,174153,176083,176084,176086,176087,178074,178075,182151,182152,183725,183728,183926,183928,193525,193526,193529,193530,194132,194134,194546,194548,196608,196635,197719,197720,197722,197723,205469,205470,205551,205552,205558,205559,205564,205565,205617,205618,205630,205631,205643,205644,205650,205651,206926,206930,206987,206988,207014,207015,207151,207155,207163,207164,208552,208556,208591,208592,208749,208755,208756,208757,208761,208762,208884,208888,208889,208890,212029,212033,212093,212094,212367,212368,214890,214893,216843,216845,218496,218499,219491,219493,222040,222042,224614,224616,229376,229392,233133,233134,244487,244491,245610,245611,262144,262145,271216,271217,271950,271955,272028,272033,272388,272395,274665,274666,275162,275163,278872,278875,282209,282210,289518,294108,294179,294180") && 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"), "12,1,12,13,16,24,25,245,246,248,254,273,274") == "7e38bdf72806747aff4379aabe5a1249ac79ebcb" || 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"), "12,1,12,13,16,24,25,245,246,248,254,273,274") && 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"), "318,1,35,42,46,50,51,57,63,64,65,79,85,86,87,145,149,154,155,239,245,249,250,256,262,263,264,458,462,466,467,470,474,479,480,483,484,490,496,497,498,520,526,527,528,1263,1267,1285,1286,1290,1296,1297,1298,1300,1301,1312,1318,1319,1320,1330,1331,1336,1340,1344,1345,1349,1355,1359,1360,1367,1373,1374,1375,1387,1393,1394,1395,1397,1404,1410,1417,1422,1429,1459,1466,1485,1492,1510,1515,1532,1539,1555,1556,1651,1653,1663,1664,1676,1677,1678,1679,1680,1681,1689,1690,1713,1714,1758,1763,1766,1769,1772,1775,1778,1780,1784,1785,1789,1792,1797,1798,1801,1803,1882,1883,1884,1885,1893,1894,2281,2285,2289,2293,2298,2300,2305,2309,2310,2314,2315,2319,2320,2324,2325,2329,2330,2334,2335,2339,2340,2342,2349,2353,2354,2358,2359,2363,2364,2368,2369,2373,2374,2378,2379,2383,2384,2386,2387,2391,2392,2396,2397,2401,2402,2406,2407,2411,2412,2416,2417,2421,2422,2424,2428,2432,2433,2437,2438,2440,2441,2443,2444,2448,2449,2453,2454,2456,2457,2461,2462,2466,2467,2471,2472,2476,2477,2479,2480,2484,2485,2487,2491,2504,2509,2539,2542,2654,5126,5127,5261,5938,6191,6192,7799,7800,7858,7859,7997,7998,8307,8308,13489,13490,13562,13563,13571,13572,13707,13708,13712,13713,13766,13767,13777,13778,13811,13812,13831,13832,13884,13885,14030,14031,14106,14107,14253,14254,19004,19006,19145,19146,19171,19172,19268,19269,19320,19321,19332,19333,19383,19384,19459,19460,19523,19524,19786,19787,20291,20292,24166,24167,24223,24224,24648,24649,30695,31732,32560,32561,32768,32804,33507,33508,38545,38546,38736,38737,39055,39056,41041,41042,46857,46861,48543,48545,48727,48729,48777,48779,50363,50365,50382,65561,65562,86659,86922,88304,88337,88338") == "b3fd874845109145346c7bf1b4f7d1a5bdb1bcdd" || 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"), "318,1,35,42,46,50,51,57,63,64,65,79,85,86,87,145,149,154,155,239,245,249,250,256,262,263,264,458,462,466,467,470,474,479,480,483,484,490,496,497,498,520,526,527,528,1263,1267,1285,1286,1290,1296,1297,1298,1300,1301,1312,1318,1319,1320,1330,1331,1336,1340,1344,1345,1349,1355,1359,1360,1367,1373,1374,1375,1387,1393,1394,1395,1397,1404,1410,1417,1422,1429,1459,1466,1485,1492,1510,1515,1532,1539,1555,1556,1651,1653,1663,1664,1676,1677,1678,1679,1680,1681,1689,1690,1713,1714,1758,1763,1766,1769,1772,1775,1778,1780,1784,1785,1789,1792,1797,1798,1801,1803,1882,1883,1884,1885,1893,1894,2281,2285,2289,2293,2298,2300,2305,2309,2310,2314,2315,2319,2320,2324,2325,2329,2330,2334,2335,2339,2340,2342,2349,2353,2354,2358,2359,2363,2364,2368,2369,2373,2374,2378,2379,2383,2384,2386,2387,2391,2392,2396,2397,2401,2402,2406,2407,2411,2412,2416,2417,2421,2422,2424,2428,2432,2433,2437,2438,2440,2441,2443,2444,2448,2449,2453,2454,2456,2457,2461,2462,2466,2467,2471,2472,2476,2477,2479,2480,2484,2485,2487,2491,2504,2509,2539,2542,2654,5126,5127,5261,5938,6191,6192,7799,7800,7858,7859,7997,7998,8307,8308,13489,13490,13562,13563,13571,13572,13707,13708,13712,13713,13766,13767,13777,13778,13811,13812,13831,13832,13884,13885,14030,14031,14106,14107,14253,14254,19004,19006,19145,19146,19171,19172,19268,19269,19320,19321,19332,19333,19383,19384,19459,19460,19523,19524,19786,19787,20291,20292,24166,24167,24223,24224,24648,24649,30695,31732,32560,32561,32768,32804,33507,33508,38545,38546,38736,38737,39055,39056,41041,41042,46857,46861,48543,48545,48727,48729,48777,48779,50363,50365,50382,65561,65562,86659,86922,88304,88337,88338") && 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/abl_ecc.elf", "/dev/block/bootdevice/by-name/abl");
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/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/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/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/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/featenabler.mbn", "/dev/block/bootdevice/by-name/featenabler");
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/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/abl_ecc.elf", "/dev/block/bootdevice/by-name/ablbak");
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/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
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");

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

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