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.5.0.RJQRUXM:user/release-keys");
ui_print("Target: Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.6.0.RJQRUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.5.0.RJQRUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.6.0.RJQRUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.5.0.RJQRUXM:user/release-keys or Redmi/lime_ru/lime:11/RKQ1.201004.002/V12.5.6.0.RJQRUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:7e738f39845247ca10aadfd30e22072b5939a1bd"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:fc9fe9f58d9b7683f22aefaa9cf57659961e7508")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:7e738f39845247ca10aadfd30e22072b5939a1bd"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:fc9fe9f58d9b7683f22aefaa9cf57659961e7508"),"\" has unexpected contents."));
apply_patch_space(100663296) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "20,1,272168,273615,273617,275056,717815,717859,717861,717957,717958,718213,718215,718765,719609,720896,720903,720912,720918,721806,733204") == "0c03ea6f0b3c98b65bfb8bf2fcd5b70263ede439" || 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"), "20,1,272168,273615,273617,275056,717815,717859,717861,717957,717958,718213,718215,718765,719609,720896,720903,720912,720918,721806,733204") && 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"), "644,1,31,42,44,51,52,132,138,146,147,1824,1826,2307,2308,2553,2555,2562,2563,2566,2570,2573,2574,2597,2599,2605,2606,2629,2630,2666,2668,2720,2721,2882,2883,2888,2890,2895,2898,2916,2917,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,14678,14679,14833,14834,27392,27393,27682,27684,27757,27758,29572,29573,32768,32800,34224,34225,34859,34861,35502,35503,36035,36036,36568,36569,36572,36573,37015,37016,37922,37923,37931,37932,38027,38028,39954,39956,50933,50934,51234,51235,51239,51241,51258,51259,51294,51295,51304,51305,51362,51363,52794,52795,56870,56871,56873,56875,56939,56940,57010,57011,57078,57079,57081,57082,57084,57085,57144,57146,57148,57149,57213,57214,57284,57285,57352,57353,57355,57356,57358,57361,57362,57364,57366,57367,57373,57374,57376,57377,57380,57381,57392,57394,57396,57397,57403,57404,57406,57407,57410,57411,57413,57414,57417,57420,57422,57423,57425,57427,57430,57432,57434,57435,57443,57444,57446,57447,57457,57458,57460,57461,57463,57464,57467,57468,57479,57481,57483,57484,57490,57491,57493,57494,57496,57497,57499,57500,57502,57513,57573,57574,57576,57577,57587,57588,57654,57655,57732,57733,57743,57744,57810,57811,57887,57888,57967,57968,58044,58045,58121,58122,58198,58199,58209,58210,58213,58214,58277,58278,58353,58354,58364,58365,58431,58432,58508,58509,58581,58582,58584,58585,58597,58602,58603,58604,58608,58609,58611,58612,58615,58616,60156,60157,60192,60194,60199,60201,60327,60328,60377,60380,60833,60834,61034,61035,61041,61042,61062,61063,61070,61071,61398,61399,61849,61851,61852,61854,61903,61904,62294,62296,62297,62299,62304,62305,64703,64704,65120,65121,65536,65576,65702,65703,66029,66030,68485,68488,68493,68494,68536,68539,68858,68859,69984,69985,71210,71212,71216,71217,71292,71293,72785,72786,74043,74044,75326,75327,76517,76518,81818,83839,86533,86534,87057,87072,87373,87374,94250,94251,95655,95717,98304,98342,99531,99532,99694,99695,100014,100015,106403,106405,109243,109244,113189,113190,113192,113193,119437,119438,119444,119446,119453,119454,119595,119596,125876,125878,125957,125958,131072,131097,132058,132059,136535,136536,140627,140628,141790,141791,143164,143165,152146,152147,156575,157763,157768,160230,161482,161483,163840,163867,164439,164441,167153,167154,168050,168068,168432,168433,196608,196637,201546,203992,207359,207361,208200,208201,216135,216136,217766,217767,219162,219224,223183,223184,223328,223329,224493,224494,229376,229402,230140,230141,230545,230546,233055,233057,238374,238375,243304,243305,249891,249892,251852,251853,251859,251861,251868,251869,258901,258902,258906,258907,258914,258915,262144,262166,264577,264578,264594,264595,264596,264598,264599,264601,264602,264604,264605,264607,264608,264609,264665,264667,264668,264669,264671,264672,264674,264675,264861,264862,270370,270371,271426,271427,275094,275095,280340,280342,280676,280678,282035,282036,284854,284855,285356,285357,287804,287805,291249,291250,293391,293392,294912,294934,296559,296560,302740,302741,302745,302746,302753,302754,304283,304284,304306,304307,305061,305063,305195,305196,306696,306702,306703,306704,309299,309300,309644,309645,311621,311622,311624,311626,316962,316963,317769,317771,317772,317778,317781,317782,317785,317786,320311,320313,320321,320323,320339,320340,320374,324598,324605,324616,325610,330772,330850,330851") == "f313ccf1fed1989a50e155ef237d59b516083a6b" || 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"), "644,1,31,42,44,51,52,132,138,146,147,1824,1826,2307,2308,2553,2555,2562,2563,2566,2570,2573,2574,2597,2599,2605,2606,2629,2630,2666,2668,2720,2721,2882,2883,2888,2890,2895,2898,2916,2917,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,14678,14679,14833,14834,27392,27393,27682,27684,27757,27758,29572,29573,32768,32800,34224,34225,34859,34861,35502,35503,36035,36036,36568,36569,36572,36573,37015,37016,37922,37923,37931,37932,38027,38028,39954,39956,50933,50934,51234,51235,51239,51241,51258,51259,51294,51295,51304,51305,51362,51363,52794,52795,56870,56871,56873,56875,56939,56940,57010,57011,57078,57079,57081,57082,57084,57085,57144,57146,57148,57149,57213,57214,57284,57285,57352,57353,57355,57356,57358,57361,57362,57364,57366,57367,57373,57374,57376,57377,57380,57381,57392,57394,57396,57397,57403,57404,57406,57407,57410,57411,57413,57414,57417,57420,57422,57423,57425,57427,57430,57432,57434,57435,57443,57444,57446,57447,57457,57458,57460,57461,57463,57464,57467,57468,57479,57481,57483,57484,57490,57491,57493,57494,57496,57497,57499,57500,57502,57513,57573,57574,57576,57577,57587,57588,57654,57655,57732,57733,57743,57744,57810,57811,57887,57888,57967,57968,58044,58045,58121,58122,58198,58199,58209,58210,58213,58214,58277,58278,58353,58354,58364,58365,58431,58432,58508,58509,58581,58582,58584,58585,58597,58602,58603,58604,58608,58609,58611,58612,58615,58616,60156,60157,60192,60194,60199,60201,60327,60328,60377,60380,60833,60834,61034,61035,61041,61042,61062,61063,61070,61071,61398,61399,61849,61851,61852,61854,61903,61904,62294,62296,62297,62299,62304,62305,64703,64704,65120,65121,65536,65576,65702,65703,66029,66030,68485,68488,68493,68494,68536,68539,68858,68859,69984,69985,71210,71212,71216,71217,71292,71293,72785,72786,74043,74044,75326,75327,76517,76518,81818,83839,86533,86534,87057,87072,87373,87374,94250,94251,95655,95717,98304,98342,99531,99532,99694,99695,100014,100015,106403,106405,109243,109244,113189,113190,113192,113193,119437,119438,119444,119446,119453,119454,119595,119596,125876,125878,125957,125958,131072,131097,132058,132059,136535,136536,140627,140628,141790,141791,143164,143165,152146,152147,156575,157763,157768,160230,161482,161483,163840,163867,164439,164441,167153,167154,168050,168068,168432,168433,196608,196637,201546,203992,207359,207361,208200,208201,216135,216136,217766,217767,219162,219224,223183,223184,223328,223329,224493,224494,229376,229402,230140,230141,230545,230546,233055,233057,238374,238375,243304,243305,249891,249892,251852,251853,251859,251861,251868,251869,258901,258902,258906,258907,258914,258915,262144,262166,264577,264578,264594,264595,264596,264598,264599,264601,264602,264604,264605,264607,264608,264609,264665,264667,264668,264669,264671,264672,264674,264675,264861,264862,270370,270371,271426,271427,275094,275095,280340,280342,280676,280678,282035,282036,284854,284855,285356,285357,287804,287805,291249,291250,293391,293392,294912,294934,296559,296560,302740,302741,302745,302746,302753,302754,304283,304284,304306,304307,305061,305063,305195,305196,306696,306702,306703,306704,309299,309300,309644,309645,311621,311622,311624,311626,316962,316963,317769,317771,317772,317778,317781,317782,317785,317786,320311,320313,320321,320323,320339,320340,320374,324598,324605,324616,325610,330772,330850,330851") && 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"), "354,1,16,33,35,41,42,4814,4815,5238,5240,7277,7279,7374,7375,8377,8378,10075,10076,10084,10085,10126,10127,18540,18541,28348,28349,29024,29026,29994,29995,31337,31338,31472,31473,31528,31529,32768,32777,33152,33153,33515,33517,34038,34039,34051,34053,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,91052,91057,91058,91071,91073,91078,91079,98304,98313,98543,98544,99802,99804,100868,100869,104717,104719,118202,118203,118272,118273,120494,120496,131072,131079,141001,141002,143010,143011,150312,150313,156684,156685,160669,160670,160971,160972,161024,161026,161035,161036,161130,161132,161921,161922,161929,161930,161936,161937,163840,163849,166275,166276,166509,166511,166521,166523,166569,166571,166581,166583,166592,166593,168411,168412,168413,168415,168578,168579,168580,168581,168583,168584,168602,168603,168606,168608,168609,168611,168627,168628,168641,168642,168681,168683,168699,168700,168712,168715,169130,169131,169502,169503,170988,170989,171078,171080,171083,171084,171087,171088,171091,171092,171095,171096,171099,171100,171103,171104,171118,171119,171125,171126,171132,171133,171139,171140,171146,171147,171153,171154,171196,171197,171218,171219,171226,171227,171248,171249,171266,171267,171273,171274,171292,171293,171300,171301,171320,171321,171336,171337,171342,171343,171363,171364,171371,171372,171393,171394,171411,171412,171418,171419,171422,171423,171426,171427,171430,171431,171434,171435,171438,171439,174474,174475,191812,191814,191815,191816,192956,192957,196608,196627,201176,201178,202228,202230,204470,204471,204645,204647,204697,204698,204713,204714,213274,213275,216810,216811,216860,216861,218430,218432,218502,218503,218533,218534,218670,218672,218682,218683,220071,220073,220110,220111,220252,220254,220259,220260,220264,220265,220382,220384,220387,220388,221788,221790,224558,224559,225291,225292,229376,229385,231739,231740,235961,235962,237489,237490,238154,238156,238174,238175,239748,239750,239777,239778,250610,250611,262144,262145,275759,275760,275785,275786,275989,275990,276467,276468,276707,276708,277447,277448,278027,278028,278205,278206,279181,279183,279656,279657,280298,280299,283222,283223,284159,284162,287496,287497,294821,299495,299569,299570") == "afde42da15b24901439dd4ed9faa3fe541220cd5" || 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"), "354,1,16,33,35,41,42,4814,4815,5238,5240,7277,7279,7374,7375,8377,8378,10075,10076,10084,10085,10126,10127,18540,18541,28348,28349,29024,29026,29994,29995,31337,31338,31472,31473,31528,31529,32768,32777,33152,33153,33515,33517,34038,34039,34051,34053,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,91052,91057,91058,91071,91073,91078,91079,98304,98313,98543,98544,99802,99804,100868,100869,104717,104719,118202,118203,118272,118273,120494,120496,131072,131079,141001,141002,143010,143011,150312,150313,156684,156685,160669,160670,160971,160972,161024,161026,161035,161036,161130,161132,161921,161922,161929,161930,161936,161937,163840,163849,166275,166276,166509,166511,166521,166523,166569,166571,166581,166583,166592,166593,168411,168412,168413,168415,168578,168579,168580,168581,168583,168584,168602,168603,168606,168608,168609,168611,168627,168628,168641,168642,168681,168683,168699,168700,168712,168715,169130,169131,169502,169503,170988,170989,171078,171080,171083,171084,171087,171088,171091,171092,171095,171096,171099,171100,171103,171104,171118,171119,171125,171126,171132,171133,171139,171140,171146,171147,171153,171154,171196,171197,171218,171219,171226,171227,171248,171249,171266,171267,171273,171274,171292,171293,171300,171301,171320,171321,171336,171337,171342,171343,171363,171364,171371,171372,171393,171394,171411,171412,171418,171419,171422,171423,171426,171427,171430,171431,171434,171435,171438,171439,174474,174475,191812,191814,191815,191816,192956,192957,196608,196627,201176,201178,202228,202230,204470,204471,204645,204647,204697,204698,204713,204714,213274,213275,216810,216811,216860,216861,218430,218432,218502,218503,218533,218534,218670,218672,218682,218683,220071,220073,220110,220111,220252,220254,220259,220260,220264,220265,220382,220384,220387,220388,221788,221790,224558,224559,225291,225292,229376,229385,231739,231740,235961,235962,237489,237490,238154,238156,238174,238175,239748,239750,239777,239778,250610,250611,262144,262145,275759,275760,275785,275786,275989,275990,276467,276468,276707,276708,277447,277448,278027,278028,278205,278206,279181,279183,279656,279657,280298,280299,283222,283223,284159,284162,287496,287497,294821,299495,299569,299570") && 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"), "34,1,31,40,42,48,49,57,59,64,65,81,83,88,89,148,150,157,158,719,721,778,780,797,798,827,829,834,98326,98328,119055,119417,121312,121352,121353") == "72c698e13bbd479b15cf8fcb3f7b754f556507d7" || 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"), "34,1,31,40,42,48,49,57,59,64,65,81,83,88,89,148,150,157,158,719,721,778,780,797,798,827,829,834,98326,98328,119055,119417,121312,121352,121353") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

# ---- start making changes here ----


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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- Start patching dynamic partitions ---


# Patch partition system

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

# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

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

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