getprop("ro.product.device") == "tiare" || abort("E3004: This package is for \"tiare\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/tiare_in/tiare:8.1.0/OPM1.171019.026/V10.2.18.0.OCLINXM:user/release-keys");
ui_print("Target: Xiaomi/tiare_in/tiare:8.1.0/OPM1.171019.026/V10.2.19.0.OCLINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/tiare_in/tiare:8.1.0/OPM1.171019.026/V10.2.18.0.OCLINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/tiare_in/tiare:8.1.0/OPM1.171019.026/V10.2.19.0.OCLINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/tiare_in/tiare:8.1.0/OPM1.171019.026/V10.2.18.0.OCLINXM:user/release-keys or Xiaomi/tiare_in/tiare:8.1.0/OPM1.171019.026/V10.2.19.0.OCLINXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_space(64520192) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/bootdevice/by-name/system", "832,1,177,187,337,5412,26964,27167,28127,28580,32770,32933,35936,36190,70616,73435,78573,78818,78819,78925,78926,78960,78962,79020,79021,79024,79029,79030,79031,79034,79036,79040,79042,79043,79045,79056,79060,79064,79065,79077,79078,79079,79081,79086,79087,79089,79090,79091,79092,79094,79097,79098,79100,79101,79102,79107,79108,79115,79116,79117,79118,79160,79161,79190,79193,79207,79208,79209,79210,79212,79214,79217,79226,79227,79228,79231,79233,79235,79239,79242,79243,79244,79245,79263,79264,79267,79268,79271,79274,79275,79279,79281,79282,79283,79284,79287,79292,79293,79295,79297,79298,79301,79302,79306,79307,79309,79310,79314,79315,79324,79326,79327,79330,79333,79341,79343,79348,79350,79351,79355,79356,79365,79366,79367,79368,79375,79377,79381,79383,79391,79392,79393,79407,79409,79411,79412,79414,79415,79416,79419,79423,79424,79425,79426,79427,79429,79430,79432,79433,79440,79442,79443,79445,79446,79448,79453,79455,79456,79457,79464,79466,79475,79478,79479,79480,79485,79487,79488,79491,79503,79505,79509,79512,79513,79516,79519,79521,79524,79527,79535,79536,79542,79546,79547,79549,79553,79554,79568,79569,79570,79572,79576,79577,79582,79583,79584,79588,79629,79630,79632,79634,79636,79637,79650,79652,79653,79654,79656,79657,79739,79740,79746,79747,79755,79756,79767,79768,79778,79779,79786,79787,79790,79792,79799,79801,79803,79804,79942,79943,79964,79965,80071,80072,80137,80138,80165,80166,80198,80199,80209,80210,80260,80261,80271,80272,80273,80275,80367,80368,80395,80396,80399,80400,80406,80407,80423,80424,80485,80486,80492,80493,80506,80508,80522,80523,80558,80559,80572,80573,80574,80575,80581,80583,80589,80590,80595,80597,80620,80622,80624,80625,80626,80627,80634,80635,80650,80651,80859,80861,80895,80896,80971,80974,81062,81063,81064,81065,81067,81068,81076,81077,81080,81081,81085,81086,81238,81239,81417,81419,81487,81488,81573,81574,81577,81578,81610,81614,81623,81625,81633,81634,81635,81636,81639,81640,81743,81744,81795,81797,81825,81826,81837,81838,81862,81863,81904,81905,82059,82060,82116,82118,82136,82139,82597,82598,82614,82616,83132,95097,95099,96140,96141,96142,96143,96196,96197,96202,96203,96207,96208,96212,96213,96230,96231,96287,96289,96291,96294,96308,96309,96311,96312,96315,96316,96317,96318,96321,96322,96326,96327,96371,96374,96393,96394,96400,96401,96405,96406,96414,96415,96418,96419,96449,96451,96460,96461,96473,96476,96477,96478,96541,96542,96543,96545,96549,96550,96564,96565,96587,96588,96596,96598,96600,96602,96603,96605,96610,96611,96612,96613,96614,96615,96623,96629,96634,96636,96639,96640,96651,96652,96656,96657,96665,96666,96667,96668,96696,96697,96698,96699,96710,96711,96715,96716,96758,96760,96762,96763,96764,96765,96767,96768,96773,96774,96775,96777,96787,96788,96791,96792,96802,96803,96808,96809,96821,96822,96826,96827,96832,96833,96863,96864,96865,96866,96868,96869,97087,97088,97089,97092,97118,97119,97151,97152,97153,97154,97170,97171,97303,97305,97325,97326,97327,97328,97331,97332,97343,97344,97353,97354,97358,97361,97367,97368,97387,97391,97409,97411,97416,97417,97420,97421,97424,97426,97439,97440,97455,97456,97463,97464,97465,97467,97477,97478,97480,97481,97532,97540,97541,97542,97548,97549,97557,97559,97561,97564,97567,97572,97573,97576,97588,97590,97608,97609,97612,97613,97645,97647,97648,97650,97654,97655,97679,97680,97683,97684,97690,97691,97701,97702,97705,97706,97716,97717,97742,97743,97966,97967,97970,97972,97995,97996,97997,97998,98011,98012,98018,98020,98025,98026,98040,98041,98100,98101,98107,98108,98118,98119,98126,98127,98132,98133,98134,98135,98144,98145,98146,98147,98154,98155,98164,98165,98167,98168,98177,98178,98179,98181,98191,98193,98204,98205,98206,98208,98209,98211,98215,98216,98217,98218,98223,98224,98232,98233,98235,98236,98238,98239,98257,98258,98306,98469,98477,98478,98488,98489,98490,98491,98492,98495,98496,98497,98498,98499,98507,98508,98526,98531,98543,98544,98552,98553,98561,98562,98564,98566,98567,98568,98569,98570,98583,98584,98598,98599,98673,98675,98676,98678,98681,98682,98691,98693,98694,98695,98700,98702,98705,98708,98710,98711,98714,98715,98719,98724,98725,98726,98730,98733,98734,98738,98740,98741,98745,98746,98753,98754,98756,98757,98758,98762,98769,98770,98772,98775,98776,98779,98781,98782,98786,98791,98793,98794,98801,98802,98803,98808,98812,98813,98816,98817,98818,98821,98835,98836,98837,98838,98892,98895,98897,98899,98911,98913,98919,98930,98933,98934,98945,98946,99081,99083,99084,99087,99088,99089,99092,99096,99097,99100,99101,99103,99106,99107,99108,99116,99117,99118,99119,99120,99121,99122,99137,99139,99140,99141,99142,99179,99180,99211,131073,139264,150231,155031,163842,164005,188278,189511,189862,190168,191323,191964,203937,203938,203939,204007,204012,204020,204021,205316,205317,205370,205371,205639,205640,205727,205729,205730,205836,205843,205846,205847,205855,205856,205857,205858,205859,205998,205999,206006,215351,220151,226392,229376,229378,230283,230284,231358,236158,238408,270070,270624,289813,292786,292787,293047,293061,293426,294914,295077,305454,334150,336784,336791,339456") == "5a629bebd78f93d4f1b4f6b0a59bf2222dee20e4" || 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,177,187,337,5412,26964,27167,28127,28580,32770,32933,35936,36190,70616,73435,78573,78818,78819,78925,78926,78960,78962,79020,79021,79024,79029,79030,79031,79034,79036,79040,79042,79043,79045,79056,79060,79064,79065,79077,79078,79079,79081,79086,79087,79089,79090,79091,79092,79094,79097,79098,79100,79101,79102,79107,79108,79115,79116,79117,79118,79160,79161,79190,79193,79207,79208,79209,79210,79212,79214,79217,79226,79227,79228,79231,79233,79235,79239,79242,79243,79244,79245,79263,79264,79267,79268,79271,79274,79275,79279,79281,79282,79283,79284,79287,79292,79293,79295,79297,79298,79301,79302,79306,79307,79309,79310,79314,79315,79324,79326,79327,79330,79333,79341,79343,79348,79350,79351,79355,79356,79365,79366,79367,79368,79375,79377,79381,79383,79391,79392,79393,79407,79409,79411,79412,79414,79415,79416,79419,79423,79424,79425,79426,79427,79429,79430,79432,79433,79440,79442,79443,79445,79446,79448,79453,79455,79456,79457,79464,79466,79475,79478,79479,79480,79485,79487,79488,79491,79503,79505,79509,79512,79513,79516,79519,79521,79524,79527,79535,79536,79542,79546,79547,79549,79553,79554,79568,79569,79570,79572,79576,79577,79582,79583,79584,79588,79629,79630,79632,79634,79636,79637,79650,79652,79653,79654,79656,79657,79739,79740,79746,79747,79755,79756,79767,79768,79778,79779,79786,79787,79790,79792,79799,79801,79803,79804,79942,79943,79964,79965,80071,80072,80137,80138,80165,80166,80198,80199,80209,80210,80260,80261,80271,80272,80273,80275,80367,80368,80395,80396,80399,80400,80406,80407,80423,80424,80485,80486,80492,80493,80506,80508,80522,80523,80558,80559,80572,80573,80574,80575,80581,80583,80589,80590,80595,80597,80620,80622,80624,80625,80626,80627,80634,80635,80650,80651,80859,80861,80895,80896,80971,80974,81062,81063,81064,81065,81067,81068,81076,81077,81080,81081,81085,81086,81238,81239,81417,81419,81487,81488,81573,81574,81577,81578,81610,81614,81623,81625,81633,81634,81635,81636,81639,81640,81743,81744,81795,81797,81825,81826,81837,81838,81862,81863,81904,81905,82059,82060,82116,82118,82136,82139,82597,82598,82614,82616,83132,95097,95099,96140,96141,96142,96143,96196,96197,96202,96203,96207,96208,96212,96213,96230,96231,96287,96289,96291,96294,96308,96309,96311,96312,96315,96316,96317,96318,96321,96322,96326,96327,96371,96374,96393,96394,96400,96401,96405,96406,96414,96415,96418,96419,96449,96451,96460,96461,96473,96476,96477,96478,96541,96542,96543,96545,96549,96550,96564,96565,96587,96588,96596,96598,96600,96602,96603,96605,96610,96611,96612,96613,96614,96615,96623,96629,96634,96636,96639,96640,96651,96652,96656,96657,96665,96666,96667,96668,96696,96697,96698,96699,96710,96711,96715,96716,96758,96760,96762,96763,96764,96765,96767,96768,96773,96774,96775,96777,96787,96788,96791,96792,96802,96803,96808,96809,96821,96822,96826,96827,96832,96833,96863,96864,96865,96866,96868,96869,97087,97088,97089,97092,97118,97119,97151,97152,97153,97154,97170,97171,97303,97305,97325,97326,97327,97328,97331,97332,97343,97344,97353,97354,97358,97361,97367,97368,97387,97391,97409,97411,97416,97417,97420,97421,97424,97426,97439,97440,97455,97456,97463,97464,97465,97467,97477,97478,97480,97481,97532,97540,97541,97542,97548,97549,97557,97559,97561,97564,97567,97572,97573,97576,97588,97590,97608,97609,97612,97613,97645,97647,97648,97650,97654,97655,97679,97680,97683,97684,97690,97691,97701,97702,97705,97706,97716,97717,97742,97743,97966,97967,97970,97972,97995,97996,97997,97998,98011,98012,98018,98020,98025,98026,98040,98041,98100,98101,98107,98108,98118,98119,98126,98127,98132,98133,98134,98135,98144,98145,98146,98147,98154,98155,98164,98165,98167,98168,98177,98178,98179,98181,98191,98193,98204,98205,98206,98208,98209,98211,98215,98216,98217,98218,98223,98224,98232,98233,98235,98236,98238,98239,98257,98258,98306,98469,98477,98478,98488,98489,98490,98491,98492,98495,98496,98497,98498,98499,98507,98508,98526,98531,98543,98544,98552,98553,98561,98562,98564,98566,98567,98568,98569,98570,98583,98584,98598,98599,98673,98675,98676,98678,98681,98682,98691,98693,98694,98695,98700,98702,98705,98708,98710,98711,98714,98715,98719,98724,98725,98726,98730,98733,98734,98738,98740,98741,98745,98746,98753,98754,98756,98757,98758,98762,98769,98770,98772,98775,98776,98779,98781,98782,98786,98791,98793,98794,98801,98802,98803,98808,98812,98813,98816,98817,98818,98821,98835,98836,98837,98838,98892,98895,98897,98899,98911,98913,98919,98930,98933,98934,98945,98946,99081,99083,99084,99087,99088,99089,99092,99096,99097,99100,99101,99103,99106,99107,99108,99116,99117,99118,99119,99120,99121,99122,99137,99139,99140,99141,99142,99179,99180,99211,131073,139264,150231,155031,163842,164005,188278,189511,189862,190168,191323,191964,203937,203938,203939,204007,204012,204020,204021,205316,205317,205370,205371,205639,205640,205727,205729,205730,205836,205843,205846,205847,205855,205856,205857,205858,205859,205998,205999,206006,215351,220151,226392,229376,229378,230283,230284,231358,236158,238408,270070,270624,289813,292786,292787,293047,293061,293426,294914,295077,305454,334150,336784,336791,339456") && 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", "14,1,45,47,109,2552,32770,32809,32810,36905,74794,80127,80760,80767,81408") == "53622df593ac6731f868ec159e6f8c36bc4440f0" || 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", "14,1,45,47,109,2552,32770,32809,32810,36905,74794,80127,80760,80767,81408") && 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 ----

write_value("0", "/sys/class/power_supply/battery/batfet_reset_enable");
write_value("0", "/sys/devices/soc/qpnp-power-on-5/kpdpwr_reset");
ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
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.");
show_progress(0.100000, 0);
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.");
ui_print("Installing boot image...");
package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");

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

ui_print("Patching firmware images...");
ifelse(msm.boot_update("main"), (
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
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/keymaster64.mbn", "/dev/block/bootdevice/by-name/keymaster");
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/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
), "");
ifelse(msm.boot_update("backup"), (
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
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/keymaster64.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
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");
), "");
msm.boot_update("finalize");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
set_progress(1.000000);
write_value("1", "/sys/class/power_supply/battery/batfet_reset_enable");
write_value("1", "/sys/devices/soc/qpnp-power-on-5/kpdpwr_reset");
