getprop("ro.product.device") == "onc" || abort("E3004: This package is for \"onc\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.4.0.PFLCNXM:user/release-keys");
ui_print("Target: xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.5.0.PFLCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.4.0.PFLCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.5.0.PFLCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.4.0.PFLCNXM:user/release-keys or xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.5.0.PFLCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 5);
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:67108864:140f258b50016be074cf3bf87b32abe21be869d6:67108864:97a0ab426e13e99fb4963d6122ea626a113d72fb") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:140f258b50016be074cf3bf87b32abe21be869d6:67108864:97a0ab426e13e99fb4963d6122ea626a113d72fb\" has unexpected contents.");
apply_patch_space(214249472) || 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", "832,1,239,254,593,8318,27148,27331,27438,27828,27868,27895,28512,28528,28548,29262,29272,29309,29564,29593,29807,30053,32770,32990,47088,52149,52153,52700,52758,53316,54976,54981,55007,55029,55062,55173,55176,55215,70717,72710,72768,74168,74236,74375,79707,79752,79838,80007,90401,90691,90696,90852,90888,90901,90905,91057,91345,91535,91562,91646,91708,91970,92306,92420,98306,98526,135222,135234,135236,135260,163842,164062,229378,229598,257775,257776,257808,257811,257819,257820,257822,257824,257832,257835,257857,257859,258011,258012,258015,258018,267264,267265,267420,267422,267903,267904,267909,267911,267917,267920,269811,269812,269814,269816,269842,269845,270086,270087,270090,270092,270111,270112,270233,270235,287446,287447,289669,289670,293198,293199,294912,295134,298150,298151,302169,302170,302497,302498,303228,303229,303575,303576,306571,306572,307639,307640,315367,315368,315982,315983,321848,321849,328788,328789,336142,336143,347691,347692,351861,351862,352887,352888,353280,353281,355302,355303,365326,365327,370022,370023,383780,384479,384829,384830,388134,388135,396870,396871,401964,401965,405236,405238,405239,405240,405546,405549,405552,405553,405567,405568,405587,405588,405633,405634,405704,405705,405713,405714,405727,405728,405736,405737,405758,405759,405782,405783,405784,405787,405789,405791,405831,405833,405839,405840,405846,405847,405851,405852,408757,408759,408769,408771,408789,408790,408895,408897,408905,408906,408912,408914,408915,408916,408917,408918,408919,408920,408922,408923,408924,408925,408926,408927,408928,408929,408930,408931,408935,408936,408938,408939,408940,408941,408942,408943,408945,408946,408947,408948,408949,408950,408951,408952,408953,408954,408955,408956,408957,408958,408960,408961,408962,408963,408968,408969,409059,409060,412653,413168,413294,413601,414067,414336,416977,416978,417192,417193,417828,417829,419697,419698,420641,420642,427169,427175,427186,427187,427328,427330,427338,427341,427580,427582,427593,427596,427624,427625,427786,427788,427798,427801,428703,428704,428771,428772,428778,428780,428788,428789,428797,428798,431185,431186,431899,431901,433089,433090,433096,433098,433104,433107,433108,433109,433491,433493,433503,433504,433513,433515,433521,433524,433802,433803,435001,435003,435032,435033,435041,435043,435049,435050,435055,435057,435063,435066,435076,435077,438950,438952,439001,439002,440115,440117,440147,440148,440211,440213,440219,440220,440360,440362,440370,440371,440377,440378,440608,440612,440623,440626,440730,440731,446177,446178,448314,448316,453505,453506,472563,472564,472882,472884,472896,472897,474345,474347,474391,474392,478989,478990,479048,479050,479058,479059,479601,479603,479621,479622,481730,481732,481779,481782,481796,481797,484078,484081,489012,489014,495724,495727,498004,498005,498032,498034,498042,498043,511547,511549,511647,511648,511668,511670,511676,511677,511682,511684,511690,511691,516325,516327,519612,519613,520893,520894,523291,523293,523319,523320,523640,523642,523655,523656,524288,530360,534389,534391,534462,534463,536437,536439,536482,536483,538166,538168,540414,540415,540423,540425,540431,540432,540800,540802,540814,542370,542381,542382,542499,542501,542511,542512,549715,549716,550095,550097,550114,550115,550947,550949,550975,550976,550981,550983,550993,550994,551672,551674,551693,551694,552012,552014,552029,552030,552043,552045,552051,552054,552091,552092,552109,552111,552118,552121,553474,553475,554382,554384,554409,554412,556808,556809,564250,564252,564254,564316,564338,564341,564506,564507,564567,564569,564577,564578,564586,564589,564651,564652,564658,564660,564666,564669,566268,566795,572605,572606,573825,573826,573894,573896,573996,573997,574007,574009,574015,574016,574019,574021,574027,574028,574661,574663,574681,574682,575862,575864,575894,575895,581418,581419,582570,582572,582582,582583,582611,582613,582619,582622,584852,584853,584874,584876,584882,584885,587203,587204,587251,587290,587298,587571,590148,590149,591239,591240,595560,595561,601301,601302,604513,604514,610301,610302,610783,610784,616513,616514,620956,620957,627354,627355,627360,627361,631917,631919,634368,634369,634449,634450,634453,634794,634795,634804,634805,634840,634841,634851,634852,634857,634858,634859,634860,634861,634862,635658,635659,635661,635665,635666,635667,635676,635677,635985,635994,636705,648512,651741,651743,652262,652319,652605,654474,655355,656254,658437,661215,661216,661559,661731,661732,662103,680316,680317,683234,684346,684593,684594,687641,687642,688384,688386,697482,697483,700472,700721,700748,700764,700786,700792,700804,700890,703563,703564,703642,703653,703663,703669,703674,703789,703794,703801,703858,703863,703871,703877,703880,703908,704106,704111,704116,704134,704139,704231,704378,704383,704386,704543,704544,704562,704578,704613,704619,704630,704717,704719,704726,704731,704749,704755,704877,704962,705016,705146,705172,705187,705199,705201,705207,705257,705262,705271,705276,705682,705687,705704,705713,705761,705773,705875,705960,706409,706425,706430,706441,706875,706880,707123,707129,707137,707146,707151,707156,707162,707172,707194,707200,707205,707212,707279,707283,707290,707294,707387,707389,707420,707421,713058,713059,713070,713072,713121,713123,713379,713384,713441,713443,713457,713580,713610,713660,713708,713710,713747,713764,713996,713999,714119,714144,714149,714201,714230,714250,714311,714347,714461,714586,714614,714628,714648,715970,715971,735466,735467,735786,735787,735790,735791,735795,735796,736061,736080,736084,736085,736103,736120,736551,736560,736647,736699,736850,736920,736962,737054,737094,737179,740214,740215,741573,741574,741576,741578,741579,741581,741587,741588,742215,742216,742217,742219,742220,742221,742224,742227,742761,903074,917316,917503,917504") == "00e3c60deb505557537ddd38698ea85bf727d3d0" || 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", "832,1,239,254,593,8318,27148,27331,27438,27828,27868,27895,28512,28528,28548,29262,29272,29309,29564,29593,29807,30053,32770,32990,47088,52149,52153,52700,52758,53316,54976,54981,55007,55029,55062,55173,55176,55215,70717,72710,72768,74168,74236,74375,79707,79752,79838,80007,90401,90691,90696,90852,90888,90901,90905,91057,91345,91535,91562,91646,91708,91970,92306,92420,98306,98526,135222,135234,135236,135260,163842,164062,229378,229598,257775,257776,257808,257811,257819,257820,257822,257824,257832,257835,257857,257859,258011,258012,258015,258018,267264,267265,267420,267422,267903,267904,267909,267911,267917,267920,269811,269812,269814,269816,269842,269845,270086,270087,270090,270092,270111,270112,270233,270235,287446,287447,289669,289670,293198,293199,294912,295134,298150,298151,302169,302170,302497,302498,303228,303229,303575,303576,306571,306572,307639,307640,315367,315368,315982,315983,321848,321849,328788,328789,336142,336143,347691,347692,351861,351862,352887,352888,353280,353281,355302,355303,365326,365327,370022,370023,383780,384479,384829,384830,388134,388135,396870,396871,401964,401965,405236,405238,405239,405240,405546,405549,405552,405553,405567,405568,405587,405588,405633,405634,405704,405705,405713,405714,405727,405728,405736,405737,405758,405759,405782,405783,405784,405787,405789,405791,405831,405833,405839,405840,405846,405847,405851,405852,408757,408759,408769,408771,408789,408790,408895,408897,408905,408906,408912,408914,408915,408916,408917,408918,408919,408920,408922,408923,408924,408925,408926,408927,408928,408929,408930,408931,408935,408936,408938,408939,408940,408941,408942,408943,408945,408946,408947,408948,408949,408950,408951,408952,408953,408954,408955,408956,408957,408958,408960,408961,408962,408963,408968,408969,409059,409060,412653,413168,413294,413601,414067,414336,416977,416978,417192,417193,417828,417829,419697,419698,420641,420642,427169,427175,427186,427187,427328,427330,427338,427341,427580,427582,427593,427596,427624,427625,427786,427788,427798,427801,428703,428704,428771,428772,428778,428780,428788,428789,428797,428798,431185,431186,431899,431901,433089,433090,433096,433098,433104,433107,433108,433109,433491,433493,433503,433504,433513,433515,433521,433524,433802,433803,435001,435003,435032,435033,435041,435043,435049,435050,435055,435057,435063,435066,435076,435077,438950,438952,439001,439002,440115,440117,440147,440148,440211,440213,440219,440220,440360,440362,440370,440371,440377,440378,440608,440612,440623,440626,440730,440731,446177,446178,448314,448316,453505,453506,472563,472564,472882,472884,472896,472897,474345,474347,474391,474392,478989,478990,479048,479050,479058,479059,479601,479603,479621,479622,481730,481732,481779,481782,481796,481797,484078,484081,489012,489014,495724,495727,498004,498005,498032,498034,498042,498043,511547,511549,511647,511648,511668,511670,511676,511677,511682,511684,511690,511691,516325,516327,519612,519613,520893,520894,523291,523293,523319,523320,523640,523642,523655,523656,524288,530360,534389,534391,534462,534463,536437,536439,536482,536483,538166,538168,540414,540415,540423,540425,540431,540432,540800,540802,540814,542370,542381,542382,542499,542501,542511,542512,549715,549716,550095,550097,550114,550115,550947,550949,550975,550976,550981,550983,550993,550994,551672,551674,551693,551694,552012,552014,552029,552030,552043,552045,552051,552054,552091,552092,552109,552111,552118,552121,553474,553475,554382,554384,554409,554412,556808,556809,564250,564252,564254,564316,564338,564341,564506,564507,564567,564569,564577,564578,564586,564589,564651,564652,564658,564660,564666,564669,566268,566795,572605,572606,573825,573826,573894,573896,573996,573997,574007,574009,574015,574016,574019,574021,574027,574028,574661,574663,574681,574682,575862,575864,575894,575895,581418,581419,582570,582572,582582,582583,582611,582613,582619,582622,584852,584853,584874,584876,584882,584885,587203,587204,587251,587290,587298,587571,590148,590149,591239,591240,595560,595561,601301,601302,604513,604514,610301,610302,610783,610784,616513,616514,620956,620957,627354,627355,627360,627361,631917,631919,634368,634369,634449,634450,634453,634794,634795,634804,634805,634840,634841,634851,634852,634857,634858,634859,634860,634861,634862,635658,635659,635661,635665,635666,635667,635676,635677,635985,635994,636705,648512,651741,651743,652262,652319,652605,654474,655355,656254,658437,661215,661216,661559,661731,661732,662103,680316,680317,683234,684346,684593,684594,687641,687642,688384,688386,697482,697483,700472,700721,700748,700764,700786,700792,700804,700890,703563,703564,703642,703653,703663,703669,703674,703789,703794,703801,703858,703863,703871,703877,703880,703908,704106,704111,704116,704134,704139,704231,704378,704383,704386,704543,704544,704562,704578,704613,704619,704630,704717,704719,704726,704731,704749,704755,704877,704962,705016,705146,705172,705187,705199,705201,705207,705257,705262,705271,705276,705682,705687,705704,705713,705761,705773,705875,705960,706409,706425,706430,706441,706875,706880,707123,707129,707137,707146,707151,707156,707162,707172,707194,707200,707205,707212,707279,707283,707290,707294,707387,707389,707420,707421,713058,713059,713070,713072,713121,713123,713379,713384,713441,713443,713457,713580,713610,713660,713708,713710,713747,713764,713996,713999,714119,714144,714149,714201,714230,714250,714311,714347,714461,714586,714614,714628,714648,715970,715971,735466,735467,735786,735787,735790,735791,735795,735796,736061,736080,736084,736085,736103,736120,736551,736560,736647,736699,736850,736920,736962,737054,737094,737179,740214,740215,741573,741574,741576,741578,741579,741581,741587,741588,742215,742216,742217,742219,742220,742221,742224,742227,742761,903074,917316,917503,917504") && 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", "20,1,69,71,73,80,239,4112,32770,32832,98306,98368,143073,163840,163842,229376,229378,257987,262077,262143,262144") == "76d49efd792baa0dc8c83f45bef9bfeae9ac8b7b" || 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", "20,1,69,71,73,80,239,4112,32770,32832,98306,98368,143073,163840,163842,229376,229378,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);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:67108864:140f258b50016be074cf3bf87b32abe21be869d6:67108864:97a0ab426e13e99fb4963d6122ea626a113d72fb",
            "-", 97a0ab426e13e99fb4963d6122ea626a113d72fb, 67108864,
            140f258b50016be074cf3bf87b32abe21be869d6, package_extract_file("patch/boot.img.p")) || abort("Failed to apply patch \"patch/boot.img.p \".");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
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/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/aboot");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecapp");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/adspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/abootbak");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecappbak");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1bak");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
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.");

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
show_progress(0.100000, 2);
