getprop("ro.product.device") == "s9863a1h10" || abort("E3004: This package is for \"s9863a1h10\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Qin/s9863a1h10_Natv/s9863a1h10:9/PPR1.180610.011/446:user/release-keys");
ui_print("Target: Qin/s9863a1h10_Natv/s9863a1h10:9/PPR1.180610.011/447:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Qin/s9863a1h10_Natv/s9863a1h10:9/PPR1.180610.011/446:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Qin/s9863a1h10_Natv/s9863a1h10:9/PPR1.180610.011/447:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Qin/s9863a1h10_Natv/s9863a1h10:9/PPR1.180610.011/446:user/release-keys or Qin/s9863a1h10_Natv/s9863a1h10:9/PPR1.180610.011/447:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/platform/soc/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:add6957d8487da568841cfdf17a6a9fceb8136c3:36700160:014e401de2dcd3a227f8d1f4c28340c0e7191127", "add6957d8487da568841cfdf17a6a9fceb8136c3", "014e401de2dcd3a227f8d1f4c28340c0e7191127") || abort("E3005: \"EMMC:/dev/block/platform/soc/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:add6957d8487da568841cfdf17a6a9fceb8136c3:36700160:014e401de2dcd3a227f8d1f4c28340c0e7191127\" has unexpected contents.");
apply_patch_space(36700160) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/system", "724,1,270,285,529,8349,8358,8362,8363,8708,8709,24134,24135,26064,26065,28212,28213,32768,32770,37078,37079,51636,51637,53508,53509,67685,67687,79802,79803,82749,82753,84504,84505,84708,84709,84999,85001,87868,87869,98304,98306,99001,99003,103894,103895,107534,107536,107609,107610,109340,109342,113042,113043,113046,113048,113056,113059,113077,113078,113117,113119,113372,113375,123320,123321,123504,123505,123585,123586,124922,124924,124964,124965,125041,125043,125050,125051,125057,125059,125071,125074,125116,125117,125144,125145,126360,126361,128640,128642,129339,129340,146093,146094,153845,153847,163840,163842,164977,164980,165553,165556,165633,165634,165650,165652,165702,165703,165713,165715,165728,165729,165750,165753,167263,167266,168455,168456,168482,168484,168518,168521,168565,168567,171277,171278,171328,171330,171490,171491,171497,171498,171504,171506,171516,171517,171745,171747,171805,171806,174249,174251,176392,176393,176846,176848,177273,177276,178828,178831,178880,178881,178884,178886,178894,178895,179092,179094,179103,179104,179109,179111,179120,179121,179233,179234,180505,180507,182166,182169,182344,182345,183605,183609,188868,188869,192191,192193,197240,197241,197288,197290,197387,197388,199592,199594,199620,199625,199639,199640,199646,199648,199835,199838,200308,200309,201855,201857,201882,201883,201968,201970,202131,202132,202423,202425,202437,202438,204944,204946,206151,206152,224011,224012,229376,229378,230863,230865,231208,231209,231547,231548,231555,231557,231656,231657,231703,231705,231862,231865,242091,242094,242248,242251,242816,242817,242881,242883,242890,242891,242894,242896,242917,242918,243035,243037,243405,243406,243409,243411,243417,243418,243421,243423,243440,243443,243459,243460,243500,243502,243510,243513,243605,243606,243626,243628,243988,243989,244316,244317,246519,246520,246571,246572,247353,248824,251664,251665,254478,255930,256766,256767,261959,261960,266746,266747,269148,269149,275565,275566,275595,275596,277269,277270,280778,280779,284250,284252,284271,284272,284275,284277,284408,284409,284418,284419,290300,290301,290341,290343,294912,294914,300378,300379,300755,300758,301910,301911,302486,304389,308935,308936,315336,315337,316742,318618,319058,319059,320787,320788,327827,327828,335509,335510,339648,340417,341729,341730,345439,345440,345481,345482,357911,357912,358500,358501,358574,358925,363967,363968,365697,365698,365701,365702,365970,367623,374395,374396,385048,385049,385145,385146,385154,385156,385415,385416,385428,385430,385445,385446,385529,385530,385540,385541,385570,385571,385696,385699,385883,385885,386090,386091,386100,386101,386132,386133,386139,386140,386143,386144,386146,386147,386150,386151,386685,386686,387083,387084,387141,387142,387421,387422,387486,387487,388112,388113,389914,390337,391201,391202,392208,392209,392241,392242,393633,393635,394151,394156,397106,397107,400057,400058,400060,400063,400099,400105,400848,400849,401640,401641,401660,401662,401668,401669,401699,401701,401855,401860,402530,402531,402557,402559,402581,402582,406169,406171,406344,406345,406357,406359,406366,406369,413829,413830,414236,414238,414879,414880,424307,424308,424372,424373,424403,424405,424460,424463,424478,424481,424491,424492,424495,424497,424503,424504,424524,424525,424528,424530,424571,424574,425617,425618,426441,426443,426506,426509,426519,426520,426537,426539,426550,426551,426556,426558,426569,426570,426575,426576,426581,426582,426585,426588,426601,426604,435028,435029,435033,435036,435047,435048,435246,435248,435722,435725,436436,436438,436616,436621,437015,437018,443098,443099,459345,459346,464697,464702,464797,464800,467142,467143,467146,467148,467162,467165,467225,467226,471075,471077,475314,475315,475540,475544,476617,476618,484659,484660,485279,485281,488651,488652,488756,488758,489148,489149,489250,489252,489268,489269,492043,492045,492925,492926,501972,501973,505527,505529,510875,510878,516822,516823,516827,516830,518388,518389,519321,519323,519558,519560,520393,520396,520453,520454,524288,524293,524303,524304,534291,534293,538525,538528,538538,538539,538657,538658,538666,538667,538671,538672,539618,539620,541525,541526,547765,547766,560405,560407,563029,563030,563033,563034,571969,571970,579199,579201,584562,584563,584583,584585,584782,584783,584786,584788,584794,584795,584821,584823,585026,585027,585163,585165,585334,585337,605237,605238,620675,620676,635901,635903,637801,637802,639691,639692,639807,639809,639836,639837,639843,639845,639852,639853,639918,639920,640097,640100,640252,640253,640266,640268,640277,640278,640282,640283,640994,640998,641178,641181,641199,641200,641740,641742,645912,645915,645925,645926,645929,645933,645941,645942,645948,645950,645956,645961,648732,648733,648919,648921,649418,649419,654108,654110,656240,656241,656642,656643,656692,656693,656704,656706,656715,656716,658666,658668,660083,660085,660478,660481,660482,660483,660810,660811,660821,660825,660827,660830,660833,660835,661330,661334,819200,819202,884736,884738,1032011,1048363,1048575,1048576") == "343e616e08121ba908a7480fa67fdbdbc9cf05f9" || block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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/platform/soc/soc:ap-ahb/20600000.sdio/by-name/system");
ifelse (block_image_recover("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/system", "724,1,270,285,529,8349,8358,8362,8363,8708,8709,24134,24135,26064,26065,28212,28213,32768,32770,37078,37079,51636,51637,53508,53509,67685,67687,79802,79803,82749,82753,84504,84505,84708,84709,84999,85001,87868,87869,98304,98306,99001,99003,103894,103895,107534,107536,107609,107610,109340,109342,113042,113043,113046,113048,113056,113059,113077,113078,113117,113119,113372,113375,123320,123321,123504,123505,123585,123586,124922,124924,124964,124965,125041,125043,125050,125051,125057,125059,125071,125074,125116,125117,125144,125145,126360,126361,128640,128642,129339,129340,146093,146094,153845,153847,163840,163842,164977,164980,165553,165556,165633,165634,165650,165652,165702,165703,165713,165715,165728,165729,165750,165753,167263,167266,168455,168456,168482,168484,168518,168521,168565,168567,171277,171278,171328,171330,171490,171491,171497,171498,171504,171506,171516,171517,171745,171747,171805,171806,174249,174251,176392,176393,176846,176848,177273,177276,178828,178831,178880,178881,178884,178886,178894,178895,179092,179094,179103,179104,179109,179111,179120,179121,179233,179234,180505,180507,182166,182169,182344,182345,183605,183609,188868,188869,192191,192193,197240,197241,197288,197290,197387,197388,199592,199594,199620,199625,199639,199640,199646,199648,199835,199838,200308,200309,201855,201857,201882,201883,201968,201970,202131,202132,202423,202425,202437,202438,204944,204946,206151,206152,224011,224012,229376,229378,230863,230865,231208,231209,231547,231548,231555,231557,231656,231657,231703,231705,231862,231865,242091,242094,242248,242251,242816,242817,242881,242883,242890,242891,242894,242896,242917,242918,243035,243037,243405,243406,243409,243411,243417,243418,243421,243423,243440,243443,243459,243460,243500,243502,243510,243513,243605,243606,243626,243628,243988,243989,244316,244317,246519,246520,246571,246572,247353,248824,251664,251665,254478,255930,256766,256767,261959,261960,266746,266747,269148,269149,275565,275566,275595,275596,277269,277270,280778,280779,284250,284252,284271,284272,284275,284277,284408,284409,284418,284419,290300,290301,290341,290343,294912,294914,300378,300379,300755,300758,301910,301911,302486,304389,308935,308936,315336,315337,316742,318618,319058,319059,320787,320788,327827,327828,335509,335510,339648,340417,341729,341730,345439,345440,345481,345482,357911,357912,358500,358501,358574,358925,363967,363968,365697,365698,365701,365702,365970,367623,374395,374396,385048,385049,385145,385146,385154,385156,385415,385416,385428,385430,385445,385446,385529,385530,385540,385541,385570,385571,385696,385699,385883,385885,386090,386091,386100,386101,386132,386133,386139,386140,386143,386144,386146,386147,386150,386151,386685,386686,387083,387084,387141,387142,387421,387422,387486,387487,388112,388113,389914,390337,391201,391202,392208,392209,392241,392242,393633,393635,394151,394156,397106,397107,400057,400058,400060,400063,400099,400105,400848,400849,401640,401641,401660,401662,401668,401669,401699,401701,401855,401860,402530,402531,402557,402559,402581,402582,406169,406171,406344,406345,406357,406359,406366,406369,413829,413830,414236,414238,414879,414880,424307,424308,424372,424373,424403,424405,424460,424463,424478,424481,424491,424492,424495,424497,424503,424504,424524,424525,424528,424530,424571,424574,425617,425618,426441,426443,426506,426509,426519,426520,426537,426539,426550,426551,426556,426558,426569,426570,426575,426576,426581,426582,426585,426588,426601,426604,435028,435029,435033,435036,435047,435048,435246,435248,435722,435725,436436,436438,436616,436621,437015,437018,443098,443099,459345,459346,464697,464702,464797,464800,467142,467143,467146,467148,467162,467165,467225,467226,471075,471077,475314,475315,475540,475544,476617,476618,484659,484660,485279,485281,488651,488652,488756,488758,489148,489149,489250,489252,489268,489269,492043,492045,492925,492926,501972,501973,505527,505529,510875,510878,516822,516823,516827,516830,518388,518389,519321,519323,519558,519560,520393,520396,520453,520454,524288,524293,524303,524304,534291,534293,538525,538528,538538,538539,538657,538658,538666,538667,538671,538672,539618,539620,541525,541526,547765,547766,560405,560407,563029,563030,563033,563034,571969,571970,579199,579201,584562,584563,584583,584585,584782,584783,584786,584788,584794,584795,584821,584823,585026,585027,585163,585165,585334,585337,605237,605238,620675,620676,635901,635903,637801,637802,639691,639692,639807,639809,639836,639837,639843,639845,639852,639853,639918,639920,640097,640100,640252,640253,640266,640268,640277,640278,640282,640283,640994,640998,641178,641181,641199,641200,641740,641742,645912,645915,645925,645926,645929,645933,645941,645942,645948,645950,645956,645961,648732,648733,648919,648921,649418,649419,654108,654110,656240,656241,656642,656643,656692,656693,656704,656706,656715,656716,658666,658668,660083,660085,660478,660481,660482,660483,660810,660811,660821,660825,660827,660830,660833,660835,661330,661334,819200,819202,884736,884738,1032011,1048363,1048575,1048576") && block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vendor", "154,1,28,29,31,34,71,3186,3194,3214,3216,3217,3218,3220,3222,3955,3956,3964,3965,4028,4030,4037,4038,4045,4046,4053,4054,4086,4087,5495,5496,6385,6386,8800,8801,17275,17276,19143,19144,26693,26694,28320,28321,28625,28626,29932,29933,31286,31287,31470,31471,32768,32770,33296,33298,33303,33305,33310,33311,33316,33317,33322,33323,33329,33330,33335,33336,33341,33342,33343,33344,33345,33347,33352,33353,33358,33359,33364,33365,33366,33367,33567,33568,33573,33574,33578,33579,33580,33581,33593,33595,33600,33601,33606,33607,33612,33613,33772,33773,33774,33775,34475,34476,34579,34580,35860,35861,36241,36243,38085,38086,38114,38115,40412,40413,42315,42316,50991,50992,52620,52621,53071,53072,54582,54583,56086,56087,56248,56250,56274,56275,56307,56308,56376,56377,56782,56783,56802,56804,57544,57545,57940,57941,57988,57989,58087,58447,58959,59249,98304,98306,100764,102365,102399,102400") == "65897059eb42f1041ebaedae66b01218f687cd09" || block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vendor");
ifelse (block_image_recover("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vendor", "154,1,28,29,31,34,71,3186,3194,3214,3216,3217,3218,3220,3222,3955,3956,3964,3965,4028,4030,4037,4038,4045,4046,4053,4054,4086,4087,5495,5496,6385,6386,8800,8801,17275,17276,19143,19144,26693,26694,28320,28321,28625,28626,29932,29933,31286,31287,31470,31471,32768,32770,33296,33298,33303,33305,33310,33311,33316,33317,33322,33323,33329,33330,33335,33336,33341,33342,33343,33344,33345,33347,33352,33353,33358,33359,33364,33365,33366,33367,33567,33568,33573,33574,33578,33579,33580,33581,33593,33595,33600,33601,33606,33607,33612,33613,33772,33773,33774,33775,34475,34476,34579,34580,35860,35861,36241,36243,38085,38086,38114,38115,40412,40413,42315,42316,50991,50992,52620,52621,53071,53072,54582,54583,56086,56087,56248,56250,56274,56275,56307,56308,56376,56377,56782,56783,56802,56804,57544,57545,57940,57941,57988,57989,58087,58447,58959,59249,98304,98306,100764,102365,102399,102400") && block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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;
if (range_sha1("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/product", "14,1,2,8,18,24,25,40,41,827,828,25175,25578,25599,25600") == "6c2713927227adcfd6495ef0a309eb9b7c5aa127" || block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/product", package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
check_first_block("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/product");
ifelse (block_image_recover("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/product", "14,1,2,8,18,24,25,40,41,827,828,25175,25578,25599,25600") && block_image_verify("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/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;

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

package_extract_file("META-INF/com/google/android/nvmerge", "/tmp/nvmerge");
package_extract_file("META-INF/com/google/android/nvmerge.cfg", "/tmp/nvmerge.cfg");
ui_print("Verifying current system...");
ui_print("Patching current system...");
ui_print("write u-boot-spl-16k.bin to partition /spl ....");
package_extract_file("u-boot-spl-16k.bin", "/dev/block/mmcblk0boot0");
ui_print("write u-boot-spl-16k.bin to partition /spl_bk ....");
package_extract_file("u-boot-spl-16k.bin", "/dev/block/mmcblk0boot1");
ui_print("write u-boot.bin to partition /uboot ....");
package_extract_file("u-boot.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/uboot");
ui_print("write u-boot.bin to partition /uboot_bak ....");
package_extract_file("u-boot.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/uboot_bak");
ui_print("write sml.bin to partition /sml ....");
package_extract_file("sml.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/sml");
ui_print("write sml.bin to partition /sml_bak ....");
package_extract_file("sml.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/sml_bak");
ui_print("write tos.bin to partition /tos ....");
package_extract_file("tos.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/trustos");
ui_print("write tos.bin to partition /tos_bak ....");
package_extract_file("tos.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/trustos_bak");
ui_print("write vbmeta.img to partition /vbmeta ....");
package_extract_file("vbmeta.img", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vbmeta");
ui_print("write vbmeta.img to partition /vbmeta_bak ....");
package_extract_file("vbmeta.img", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vbmeta_bak");
ui_print("write dtb.img to partition /dtb ....");
package_extract_file("dtb.img", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/dtb");
ui_print("write dtbo.img to partition /dtbo ....");
package_extract_file("dtbo.img", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/dtbo");
ui_print("write ltedsp.bin to partition /ltedsp ....");
package_extract_file("ltedsp.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_ldsp");
ui_print("write ltegdsp.bin to partition /ltegdsp ....");
package_extract_file("ltegdsp.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_gdsp");
ui_print("write ltemodem.bin to partition /ltemodem ....");
package_extract_file("ltemodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_modem");
ui_print("write pmsys.bin to partition /pmsys ....");
package_extract_file("pmsys.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/pm_sys");
ui_print("extract ltenvitem.bin to /tmp ....");
package_extract_file("ltenvitem.bin", "/tmp/ltenvitem.bin");
assert(run_programex("/tmp/nvmerge","/tmp/nvmerge.cfg","/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_fixnv1","/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/l_fixnv2","/tmp/ltenvitem.bin","0x100000"));
 if last_run_status() == "1" then 
 abort("Failed to do nvmerge!!"); 
 endif; 
ui_print("write wcnmodem.bin to partition /wcnmodem ....");
package_extract_file("wcnmodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/wcnmodem");
ui_print("write gnssmodem.bin to partition /gnssmodem ....");
package_extract_file("gnssmodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/gpsgl");
ui_print("write gnssbdmodem.bin to partition /gnssbdmodem ....");
package_extract_file("gnssbdmodem.bin", "/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/gpsbd");
ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/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.050000, 0);
block_image_update("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
ui_print("Patching product image after verification.");
show_progress(0.050000, 0);
block_image_update("/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/product", package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/platform/soc/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:add6957d8487da568841cfdf17a6a9fceb8136c3:36700160:014e401de2dcd3a227f8d1f4c28340c0e7191127",
            "-", 014e401de2dcd3a227f8d1f4c28340c0e7191127, 36700160,
            add6957d8487da568841cfdf17a6a9fceb8136c3,
            package_extract_file("patch/boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/platform/soc/soc.ap-ahb/20600000.sdio/by-name/boot:36700160:add6957d8487da568841cfdf17a6a9fceb8136c3:36700160:014e401de2dcd3a227f8d1f4c28340c0e7191127");
set_progress(1.000000);
set_progress(1.000000);
