getprop("ro.product.device") == "olivelite" || abort("E3004: This package is for \"olivelite\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPINXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPINXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPINXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 10);
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/boot:33554432:ea040e38b9dc0cbc3babf23dab2823feffacd119",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:01d49b1327d69333eeb0af0c627de643726e40bc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:ea040e38b9dc0cbc3babf23dab2823feffacd119\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:01d49b1327d69333eeb0af0c627de643726e40bc\" has unexpected contents.");
apply_patch_space(174256128) || abort("E3006: Not enough free space on /cache to apply patches.");

# ---- radio update verification ----

ui_print("Verifying radio-update...");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:17a776a4f8e86ae442c2342da94d80e483724f38\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:17a776a4f8e86ae442c2342da94d80e483724f38\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:52147420a62c24059a669c933d78889578193b00",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:52147420a62c24059a669c933d78889578193b00\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:52147420a62c24059a669c933d78889578193b00",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:52147420a62c24059a669c933d78889578193b00\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:0c22ed190e48d4699d2624a063305e8dd00319e2",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ebbff205642e06728c84f7d38834525f30a6d234") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:0c22ed190e48d4699d2624a063305e8dd00319e2\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ebbff205642e06728c84f7d38834525f30a6d234\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a1ffc2f53a0c44abc2c4751aeb495c987a36eb9c",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b0488b3dcf474a8c69236b6f278ce705fd3d4644") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a1ffc2f53a0c44abc2c4751aeb495c987a36eb9c\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b0488b3dcf474a8c69236b6f278ce705fd3d4644\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:857b118984dd1996b865ebafdfb61999600801a1",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:5e199ceed4668d8ab1b4d37202ec41bc16b468b1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:857b118984dd1996b865ebafdfb61999600801a1\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:5e199ceed4668d8ab1b4d37202ec41bc16b468b1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:a52dbe120aa068d38077a77698b9caeaac3be203\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:a52dbe120aa068d38077a77698b9caeaac3be203\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ce270c4364c8ced5548069087f417ea74cbfd646\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ce270c4364c8ced5548069087f417ea74cbfd646\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:e568f3541deb4ef0bc332597840016f1e77e0011",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a98f4da5ad5ed4b46c2c524cb34278a87560a52b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:e568f3541deb4ef0bc332597840016f1e77e0011\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a98f4da5ad5ed4b46c2c524cb34278a87560a52b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:0045e2cfea545aedbe927cc6cf4680d415202d50",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:b127332e9bc118f5c5ce72b285e1a7667a64525e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:0045e2cfea545aedbe927cc6cf4680d415202d50\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:b127332e9bc118f5c5ce72b285e1a7667a64525e\" has unexpected contents.");
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1("/dev/block/bootdevice/by-name/system", "154,1,624,759,773,784,787,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2394,2516,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,4203,4389,5826,5948,7008,7009,7011,7012,7296,7297,7299,7300,7863,7865,13804,13805,13938,13939,16708,16710,22982,22983,22985,22987,23046,23047,23180,32770,33021,33022,33527,65537,66042,89974,90027,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,164770,165660,165662,165691,194337,194338,196609,197114,229378,229629,229630,230135,262145,262650,269371,269377,275729,275735,294914,295165,295166,295671,308813,308870,321371,321381,327681,328186,335321,336483,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819453,819454,819959,820284,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "b803fa9e4c8a8a9c59b108883ef46cf3adefba63" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "154,1,624,759,773,784,787,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2394,2516,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,4203,4389,5826,5948,7008,7009,7011,7012,7296,7297,7299,7300,7863,7865,13804,13805,13938,13939,16708,16710,22982,22983,22985,22987,23046,23047,23180,32770,33021,33022,33527,65537,66042,89974,90027,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,164770,165660,165662,165691,194337,194338,196609,197114,229378,229629,229630,230135,262145,262650,269371,269377,275729,275735,294914,295165,295166,295671,308813,308870,321371,321381,327681,328186,335321,336483,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819453,819454,819959,820284,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") && block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1("/dev/block/bootdevice/by-name/vendor", "610,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,968,970,971,1195,1203,1211,1217,1220,1224,1228,1229,1802,1803,3711,3712,3893,3894,4281,4282,4914,4915,5651,5656,14850,14851,23433,23434,29606,29607,32768,32770,32832,32833,41345,41346,45320,45321,62588,62589,65536,65537,68383,68384,69614,69616,69636,69638,69957,69958,70284,70285,70579,70580,70888,70889,71171,71172,71466,71467,71843,71844,71918,71919,75334,75335,75527,75528,75616,75619,75637,75638,75683,75684,75702,75704,75753,75754,75785,75786,76673,76674,76687,76688,76718,76719,76817,76818,77101,77102,77118,77119,77215,77216,77218,77219,77785,77786,77861,77862,77863,77864,77876,77878,79144,79145,80282,80284,80705,80706,80980,80981,81405,81406,81604,81608,82449,82450,83358,83359,92337,92338,93324,93325,98304,98306,98368,98369,103646,103647,105125,105126,106789,106791,108451,108452,110227,110228,111890,111891,113615,113616,115309,115310,116524,116525,117851,117852,119173,119174,120400,120401,121724,121725,123111,123112,124404,124405,125707,125708,127062,127063,128357,128358,129614,129615,130850,130851,131072,131073,131581,131582,132710,132711,133893,133894,135246,135247,136485,136486,137295,137296,137320,137321,137345,137346,137602,137603,137627,137628,137652,137653,137677,137678,137702,137703,137803,137804,138045,138046,138070,138071,138208,138209,138233,138234,138258,138259,138868,138869,138893,138894,138918,138919,139131,139132,139176,139177,139201,139202,139226,139227,139251,139252,139276,139277,139618,139619,139643,139644,139781,139782,139806,139807,139831,139832,140468,140469,141670,141671,142990,142991,143181,143182,143206,143207,143231,143232,144273,144274,145567,145568,146720,146721,147968,147969,149185,149186,150376,150377,151627,151628,152841,152842,153990,153991,155131,155132,156276,156277,157426,157427,157892,157893,157917,157918,157942,157943,158199,158200,158224,158225,158249,158250,158274,158275,158299,158300,158641,158642,158666,158667,158710,158711,158805,158806,158830,158831,158855,158856,159465,159466,159490,159491,159515,159516,159772,159773,159797,159798,159822,159823,159847,159848,159872,159873,159925,159926,160215,160216,160240,160241,160378,160379,160403,160404,160428,160429,161141,161142,161380,161381,161405,161406,161430,161431,162294,162295,163840,163842,163904,163905,164424,164425,164618,164619,166340,166341,168081,168082,168304,168305,168329,168330,168354,168355,168379,168380,168404,168405,168746,168747,168771,168772,169830,169831,171320,171321,172685,172686,174031,174032,175309,175310,176668,176669,178009,178010,179266,179267,180583,180584,182295,182296,184011,184012,196608,196609,197304,197305,203025,203026,203354,203355,204261,204262,204288,204289,204324,204325,204371,204372,204404,204405,204433,204434,204466,204467,204502,204503,204538,204539,204559,204560,204592,204593,204664,204665,205085,205086,205104,205105,205123,205124,205143,205144,205185,205186,205227,205228,205268,205269,205288,205289,205312,205313,205327,205328,205362,205363,205388,205389,205427,205428,205458,205459,205487,205488,205516,205517,205545,205546,205564,205565,205580,205581,205602,205603,205622,205623,205651,205652,205678,205679,205701,205702,205724,205725,205773,205774,205799,205800,205824,205825,205847,205848,205876,205877,205904,205905,205922,205923,205940,205941,205968,205969,205990,205991,206022,206023,206041,206042,206063,206064,206086,206087,206103,206104,206125,206126,206147,206148,206169,206170,206192,206193,206267,206268,206296,206297,206325,206326,206355,206356,206394,206395,206433,206434,206475,206476,206514,206515,206604,206605,206642,206643,206676,206677,206700,206701,206722,206723,206746,206747,206772,206773,206793,206794,206810,206811,206828,206829,206999,207000,208139,208140,208155,208156,219506,219592,219974,219975,220451,220452,221079,221080,223828,223829,229376,229378,229440,229441,230523,230524,230547,230548,231321,232578,232581,233936,234026,234028,234282,234283,235045,235046,237505,237506,239421,239422,239509,239513,239527,239528,239548,239552,242026,242072,242077,242128,257987,262077,262143,262144") == "6e979c7afce8eb250ae221f6739a36dad8f94587" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "610,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,968,970,971,1195,1203,1211,1217,1220,1224,1228,1229,1802,1803,3711,3712,3893,3894,4281,4282,4914,4915,5651,5656,14850,14851,23433,23434,29606,29607,32768,32770,32832,32833,41345,41346,45320,45321,62588,62589,65536,65537,68383,68384,69614,69616,69636,69638,69957,69958,70284,70285,70579,70580,70888,70889,71171,71172,71466,71467,71843,71844,71918,71919,75334,75335,75527,75528,75616,75619,75637,75638,75683,75684,75702,75704,75753,75754,75785,75786,76673,76674,76687,76688,76718,76719,76817,76818,77101,77102,77118,77119,77215,77216,77218,77219,77785,77786,77861,77862,77863,77864,77876,77878,79144,79145,80282,80284,80705,80706,80980,80981,81405,81406,81604,81608,82449,82450,83358,83359,92337,92338,93324,93325,98304,98306,98368,98369,103646,103647,105125,105126,106789,106791,108451,108452,110227,110228,111890,111891,113615,113616,115309,115310,116524,116525,117851,117852,119173,119174,120400,120401,121724,121725,123111,123112,124404,124405,125707,125708,127062,127063,128357,128358,129614,129615,130850,130851,131072,131073,131581,131582,132710,132711,133893,133894,135246,135247,136485,136486,137295,137296,137320,137321,137345,137346,137602,137603,137627,137628,137652,137653,137677,137678,137702,137703,137803,137804,138045,138046,138070,138071,138208,138209,138233,138234,138258,138259,138868,138869,138893,138894,138918,138919,139131,139132,139176,139177,139201,139202,139226,139227,139251,139252,139276,139277,139618,139619,139643,139644,139781,139782,139806,139807,139831,139832,140468,140469,141670,141671,142990,142991,143181,143182,143206,143207,143231,143232,144273,144274,145567,145568,146720,146721,147968,147969,149185,149186,150376,150377,151627,151628,152841,152842,153990,153991,155131,155132,156276,156277,157426,157427,157892,157893,157917,157918,157942,157943,158199,158200,158224,158225,158249,158250,158274,158275,158299,158300,158641,158642,158666,158667,158710,158711,158805,158806,158830,158831,158855,158856,159465,159466,159490,159491,159515,159516,159772,159773,159797,159798,159822,159823,159847,159848,159872,159873,159925,159926,160215,160216,160240,160241,160378,160379,160403,160404,160428,160429,161141,161142,161380,161381,161405,161406,161430,161431,162294,162295,163840,163842,163904,163905,164424,164425,164618,164619,166340,166341,168081,168082,168304,168305,168329,168330,168354,168355,168379,168380,168404,168405,168746,168747,168771,168772,169830,169831,171320,171321,172685,172686,174031,174032,175309,175310,176668,176669,178009,178010,179266,179267,180583,180584,182295,182296,184011,184012,196608,196609,197304,197305,203025,203026,203354,203355,204261,204262,204288,204289,204324,204325,204371,204372,204404,204405,204433,204434,204466,204467,204502,204503,204538,204539,204559,204560,204592,204593,204664,204665,205085,205086,205104,205105,205123,205124,205143,205144,205185,205186,205227,205228,205268,205269,205288,205289,205312,205313,205327,205328,205362,205363,205388,205389,205427,205428,205458,205459,205487,205488,205516,205517,205545,205546,205564,205565,205580,205581,205602,205603,205622,205623,205651,205652,205678,205679,205701,205702,205724,205725,205773,205774,205799,205800,205824,205825,205847,205848,205876,205877,205904,205905,205922,205923,205940,205941,205968,205969,205990,205991,206022,206023,206041,206042,206063,206064,206086,206087,206103,206104,206125,206126,206147,206148,206169,206170,206192,206193,206267,206268,206296,206297,206325,206326,206355,206356,206394,206395,206433,206434,206475,206476,206514,206515,206604,206605,206642,206643,206676,206677,206700,206701,206722,206723,206746,206747,206772,206773,206793,206794,206810,206811,206828,206829,206999,207000,208139,208140,208155,208156,219506,219592,219974,219975,220451,220452,221079,221080,223828,223829,229376,229378,229440,229441,230523,230524,230547,230548,231321,232578,232581,233936,234026,234028,234282,234283,235045,235046,237505,237506,239421,239422,239509,239513,239527,239528,239548,239552,242026,242072,242077,242128,257987,262077,262143,262144") && block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;

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

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:ea040e38b9dc0cbc3babf23dab2823feffacd119",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:01d49b1327d69333eeb0af0c627de643726e40bc",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:01d49b1327d69333eeb0af0c627de643726e40bc");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:52147420a62c24059a669c933d78889578193b00",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:0c22ed190e48d4699d2624a063305e8dd00319e2",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ebbff205642e06728c84f7d38834525f30a6d234",
                package_extract_file("patch/firmware-update/cmnlib64_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ebbff205642e06728c84f7d38834525f30a6d234");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a1ffc2f53a0c44abc2c4751aeb495c987a36eb9c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b0488b3dcf474a8c69236b6f278ce705fd3d4644",
                package_extract_file("patch/firmware-update/cmnlib_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b0488b3dcf474a8c69236b6f278ce705fd3d4644");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:857b118984dd1996b865ebafdfb61999600801a1",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:5e199ceed4668d8ab1b4d37202ec41bc16b468b1",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:134217728:5e199ceed4668d8ab1b4d37202ec41bc16b468b1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:52147420a62c24059a669c933d78889578193b00",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:779468:2cbeb1b6724a132d1177b8bcd6b4595e1c8e1c82");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 2);

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:e568f3541deb4ef0bc332597840016f1e77e0011",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a98f4da5ad5ed4b46c2c524cb34278a87560a52b",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a98f4da5ad5ed4b46c2c524cb34278a87560a52b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:0045e2cfea545aedbe927cc6cf4680d415202d50",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:b127332e9bc118f5c5ce72b285e1a7667a64525e",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:b127332e9bc118f5c5ce72b285e1a7667a64525e");
