From owner-freebsd-scsi@FreeBSD.ORG Fri Dec 6 20:12:09 2013 Return-Path: Delivered-To: freebsd-scsi@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id B56D64DF; Fri, 6 Dec 2013 20:12:09 +0000 (UTC) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1blp0182.outbound.protection.outlook.com [207.46.163.182]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 20B281CCE; Fri, 6 Dec 2013 20:12:07 +0000 (UTC) Received: from BN1PR07MB247.namprd07.prod.outlook.com (10.141.64.146) by BN1PR07MB264.namprd07.prod.outlook.com (10.141.64.27) with Microsoft SMTP Server (TLS) id 15.0.825.14; Fri, 6 Dec 2013 14:37:23 +0000 Received: from BN1PR07MB247.namprd07.prod.outlook.com ([169.254.7.70]) by BN1PR07MB247.namprd07.prod.outlook.com ([169.254.7.70]) with mapi id 15.00.0837.004; Fri, 6 Dec 2013 14:37:23 +0000 From: "Desai, Kashyap" To: "freebsd-scsi@freebsd.org" Subject: LSI - MR-Fusion controller driver patch and man page Thread-Topic: LSI - MR-Fusion controller driver patch and man page Thread-Index: Ac7ykKZzGPABTpK8R3+D5UAv3TD3WQ== Date: Fri, 6 Dec 2013 14:37:21 +0000 Message-ID: <08ba2a262fba45f687cdd3225f325110@BN1PR07MB247.namprd07.prod.outlook.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.19.239.250] x-forefront-prvs: 0052308DC6 x-forefront-antispam-report: SFV:NSPM; SFS:(164054003)(199002)(189002)(81542001)(77982001)(59766001)(63696002)(79102001)(76576001)(76176001)(47446002)(76482001)(47976001)(47736001)(51856001)(85852002)(54356001)(49866001)(4396001)(76786001)(74876001)(50986001)(53806001)(54316002)(46102001)(69226001)(76796001)(77096001)(74502001)(74316001)(80022001)(33646001)(81686001)(87266001)(2656002)(56776001)(74662001)(81342001)(66066001)(87936001)(65816001)(19580395003)(81816001)(74366001)(83322001)(83072001)(74706001)(80976001)(90146001)(56816005)(85306002)(31966008)(24736002); DIR:OUT; SFP:; SCL:1; SRVR:BN1PR07MB264; H:BN1PR07MB247.namprd07.prod.outlook.com; CLIP:192.19.239.250; FPR:; RD:InfoNoRecords; A:1; MX:1; LANG:; Content-Type: multipart/mixed; boundary="_003_08ba2a262fba45f687cdd3225f325110BN1PR07MB247namprd07pro_" MIME-Version: 1.0 X-OriginatorOrg: lsi.com X-Mailman-Approved-At: Fri, 06 Dec 2013 23:40:24 +0000 X-Content-Filtered-By: Mailman/MimeDel 2.1.17 Cc: "scottl@netflix.com" , "Radford, Adam" , "Kenneth D. Merry" , "sean_bruno@yahoo.com" , "Mankani, Krishnaraddi" , "dwhite@ixsystems.com" , "Maloy, Joe" , "jpaetzel@freebsd.org" , Doug Ambrisko , "McConnell, Stephen" X-BeenThere: freebsd-scsi@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: SCSI subsystem List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Dec 2013 20:12:09 -0000 --_003_08ba2a262fba45f687cdd3225f325110BN1PR07MB247namprd07pro_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Please consider attached patch for FreeBSD upstream check-in. Please find attached patch for driver for LSI's MegaRaid Controller= s. This driver supports Thunderbolt onwards Device IDs of MR controllers. Currently it supports 0x005B and 0x005D Device IDs. NOTE : This driver will not eliminate or by pass any functionality of = driver which already support above to Device IDs to keep existing user exp= erience unchanged. =20 Driver will be always given priority over driver and only if = customer/user wants to use/migrate from to , it will hook up i= nto kernel via device.hint rules. (Attached is mrsas man page for more info= .) LSI will continue to update driver in future in timely bases. We ha= ve another set of patch in pipeline to be submitted for , but need f= irst go ahead for attached patch and later we will continue to keep = up-to-date (In sync with LSI released driver which is available at lsi's e= xternal site) Apply patch with "patch -p0 < patchname.patch" from head directory.=20 -- Few notes for user-- LSI recommends using fusion_force bit In hint settings at start of the day,= if they want to use . ( will be a default choice for MR-Fusio= n HBA), if will be changed only with fusion_force hint settings. (See mrsas= man page) Changing any default behavior is well tested for most of the con= dition. Switching from to for MR-Fusion options is designed to allow = user as one time choice, though multiple time switch from to = is possible, it is not recommended. So, user needs to decide from start of = the day, which driver they want to use for MR-Fusion card. -- Implementation details -- To support this feature, we have modify code to change default return= type from probe. Currently driver return "BUS_PROBE_DEFAULT". = driver has been be changed to return "BUS_PROBE_LOW_PRIORITY" if fusion_for= ce hint from device.hints is set. Please notice, above mentioned implementation in driver is only appli= cable in case of MR-Fusion controller detection. For any other controllers= , supported by driver, the behavior of probe return will remain same = as before. -- High level feature list of -- 1. Supports Fast Path feature of LSI controllers. 2. Supports 4K sector Drives. 3. CAM layer based interface. All VDs will be attached to CAM layer (Expect= ed storage will be visible in "camcontroll") 4. Complete support of Online Controller Reset. (OCR) 5. OCR on Fimrware fault and IO timeout case. 6. Work well with management application which is generic applica= tion provided by LSI for all other Operating system. 7. Supporst DIF enabled VDs (Same support as provided in Linux and other OS= es in FreeBSD) 8. Fast Path Load balance support. - In summary, this driver is in part with Linux based MR drivers and all ot= her features will be available to as planned activity from LSI This code is well tested by LSI Q/A team on 32 bit and 64 bit FreeBSD Relea= sed OSes. Thanks, Kashyap --_003_08ba2a262fba45f687cdd3225f325110BN1PR07MB247namprd07pro_ Content-Type: application/octet-stream; name="upstream_mrsas_fusion_force.patch" Content-Description: upstream_mrsas_fusion_force.patch Content-Disposition: attachment; filename="upstream_mrsas_fusion_force.patch"; size=315504; creation-date="Fri, 06 Dec 2013 14:34:46 GMT"; modification-date="Fri, 06 Dec 2013 19:46:04 GMT" Content-Transfer-Encoding: base64 SW5kZXg6IHN5cy9tb2R1bGVzL21yc2FzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9tb2R1 bGVzL21yc2FzL01ha2VmaWxlCShyZXZpc2lvbiAwKQorKysgc3lzL21vZHVsZXMvbXJzYXMvTWFr ZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorIyBNYWtlZmlsZSBmb3IgbXJz YXMgZHJpdmVyCisKK0tNT0Q9bXJzYXMKKy5QQVRIOiAkey5DVVJESVJ9Ly4uLy4uL2Rldi8ke0tN T0R9CitTUkNTPW1yc2FzLmMgbXJzYXNfY2FtLmMgbXJzYXNfaW9jdGwuYyBtcnNhc19mcC5jCitT UkNTKz0gIGRldmljZV9pZi5oIGJ1c19pZi5oIHBjaV9pZi5oIG9wdF9jYW0uaCBvcHRfc2NzaS5o CisKKyNDRkxBR1MrPSAtTVJTQVNfREVCVUcKKy5pbmNsdWRlIDxic2Qua21vZC5taz4KK0NGTEFH Uys9IC1mZ251ODktaW5saW5lCisKK2NsZWFuX2NzY29wZToKKwlybSAtZiBjc2NvcGUqCisKK2Nz Y29wZToJY2xlYW5fY3Njb3BlCisJL3Vzci9sb2NhbC9iaW4vY3Njb3BlIC1iICouW2NoXQorCitj bGVhbmFsbDoJY2xlYW4gY2xlYW5fY3Njb3BlCisJcm0gLWYgJ0AnIG1hY2hpbmUKKwpJbmRleDog c3lzL21vZHVsZXMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21vZHVsZXMvTWFrZWZpbGUJ KHJldmlzaW9uIDI0OTkyMCkKKysrIHN5cy9tb2R1bGVzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkp CkBAIC0yMDIsNiArMjAyLDcgQEAKIAltZCBcCiAJbWVtIFwKIAltZmkgXAorCW1yc2FzIFwKIAlt aWkgXAogCW1seCBcCiAJJHtfbWx4NH0gXApJbmRleDogc3lzL2FtZDY0L2NvbmYvR0VORVJJQwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBzeXMvYW1kNjQvY29uZi9HRU5FUklDCShyZXZpc2lvbiAyNDk5MjApCisr KyBzeXMvYW1kNjQvY29uZi9HRU5FUklDCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDcg QEAKIGRldmljZQkJYWFjcAkJIyBTQ1NJIHBhc3N0aHJvdWdoIGZvciBhYWMgKHJlcXVpcmVzIENB TSkKIGRldmljZQkJaWRhCQkjIENvbXBhcSBTbWFydCBSQUlECiBkZXZpY2UJCW1maQkJIyBMU0kg TWVnYVJBSUQgU0FTCitkZXZpY2UJCW1yc2FzCSMgTFNJIE1lZ2FSQUlEIFNBUyA2R2IvcyAxMkdi L3MKIGRldmljZQkJbWx4CQkjIE15bGV4IERBQzk2MCBmYW1pbHkKICNYWFggcG9pbnRlci9pbnQg d2FybmluZ3MKICNkZXZpY2UJCXBzdAkJIyBQcm9taXNlIFN1cGVydHJhayBTWDYwMDAKSW5kZXg6 IHN5cy9pMzg2L2NvbmYvR0VORVJJQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvaTM4Ni9jb25mL0dFTkVS SUMgICAgICAgKHJldmlzaW9uIDI0OTkyMCkKKysrIHN5cy9pMzg2L2NvbmYvR0VORVJJQyAgICAg ICAod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBACiBkZXZpY2UJCWFhY3AJCSMgU0NT SSBwYXNzdGhyb3VnaCBmb3IgYWFjIChyZXF1aXJlcyBDQU0pCiBkZXZpY2UJCWlkYQkJIyBDb21w YXEgU21hcnQgUkFJRAogZGV2aWNlCQltZmkJCSMgTFNJIE1lZ2FSQUlEIFNBUworZGV2aWNlCQlt cnNhcwkJIyBMU0kgTWVnYVJBSUQgU0FTIDZHYi9zIDEyR2IvcwogZGV2aWNlCQltbHgJCSMgTXls ZXggREFDOTYwIGZhbWlseQogZGV2aWNlCQlwc3QJCSMgUHJvbWlzZSBTdXBlcnRyYWsgU1g2MDAw CiBkZXZpY2UJCXR3ZQkJIyAzd2FyZSBBVEEgUkFJRApJbmRleDogc3lzL2NvbmYvZmlsZXMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3lzL2NvbmYvZmlsZXMJKHJldmlzaW9uIDI0OTkyMCkKKysrIHN5cy9jb25m L2ZpbGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ4LDYgKzE2NDgsMTAgQEAKIGRldi9tZmkvbWZp X3Rib2x0LmMJCW9wdGlvbmFsIG1maQogZGV2L21maS9tZmlfbGludXguYwkJb3B0aW9uYWwgbWZp IGNvbXBhdF9saW51eAogZGV2L21maS9tZmlfY2FtLmMJCW9wdGlvbmFsIG1maXAgc2NidXMKK2Rl di9tcnNhcy9tcnNhcy5jCQlvcHRpb25hbCBtcnNhcworZGV2L21yc2FzL21yc2FzX2NhbS5jCW9w dGlvbmFsIG1yc2FzCitkZXYvbXJzYXMvbXJzYXNfaW9jdGwuYwlvcHRpb25hbCBtcnNhcworZGV2 L21yc2FzL21yc2FzX2ZwLmMJb3B0aW9uYWwgbXJzYXMKIGRldi9taWkvYWNwaHkuYwkJCW9wdGlv bmFsIG1paWJ1cyB8IGFjcGh5CiBkZXYvbWlpL2FtcGh5LmMJCQlvcHRpb25hbCBtaWlidXMgfCBh bXBoeQogZGV2L21paS9hdHBoeS5jCQkJb3B0aW9uYWwgbWlpYnVzIHwgYXRwaHkKSW5kZXg6IHN5 cy9kZXYvbXJzYXMvbXJzYXNfY2FtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9tcnNhcy9tcnNh c19jYW0uYwkocmV2aXNpb24gMCkKKysrIHN5cy9kZXYvbXJzYXMvbXJzYXNfY2FtLmMJKHdvcmtp bmcgY29weSkKQEAgLTAsMCArMSwxMTA4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBM U0kgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95 CisgKiBNb2RpZmllZCBieSBEZXNhaSBLYXNoeWFwIChrYXNoeWFwLmRlc2FpQGxzaS5jb20pCisg KiBNb2RpZmllZCBieSBTYXhlbmEgU3VtaXQgKHN1bWl0LnNheGVuYUBsc2kuY29tKQorICogU3Vw cG9ydDogZnJlZWJzZHJhaWRAbHNpLmNvbQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0 aGVyIHRoZSBuYW1lIG9mIHRoZSA8T1JHQU5JWkFUSU9OPiBub3IgdGhlIG5hbWVzIG9mIGl0cwor ICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisg KiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyovCisKKyNpbmNsdWRlICJk ZXYvbXJzYXMvbXJzYXMuaCIgCisKKyNpbmNsdWRlIDxjYW0vY2FtLmg+CisjaW5jbHVkZSA8Y2Ft L2NhbV9jY2IuaD4KKyNpbmNsdWRlIDxjYW0vY2FtX3NpbS5oPgorI2luY2x1ZGUgPGNhbS9jYW1f eHB0X3NpbS5oPgorI2luY2x1ZGUgPGNhbS9jYW1fZGVidWcuaD4KKyNpbmNsdWRlIDxjYW0vY2Ft X3BlcmlwaC5oPgorI2luY2x1ZGUgPGNhbS9jYW1feHB0X3BlcmlwaC5oPgorCisjaW5jbHVkZSA8 Y2FtL3Njc2kvc2NzaV9hbGwuaD4KKyNpbmNsdWRlIDxjYW0vc2NzaS9zY3NpX21lc3NhZ2UuaD4K KyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlw ZXMKKyAqLworaW50IG1yc2FzX2NhbV9hdHRhY2goc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cisv L2ludCBtcnNhc19sZGlvX2lucSh1bmlvbiBjY2IgKmNjYik7IAoraW50IG1yc2FzX2xkaW9faW5x KHN0cnVjdCBjYW1fc2ltICpzaW0sIHVuaW9uIGNjYiAqY2NiKTsgCitpbnQgbXJzYXNfYnVzX3Nj YW4oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQgbXJzYXNfYnVzX3NjYW5fc2ltKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBjYW1fc2ltICpzaW0pOworaW50IG1yc2FzX21hcF9y ZXF1ZXN0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQp OworaW50IG1yc2FzX2J1aWxkX2xkaW8oc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1y c2FzX21wdF9jbWQgKmNtZCwKKyAgICAgICAgICAgICAgICAgICAgdW5pb24gY2NiICpjY2IpOwor aW50IG1yc2FzX2J1aWxkX2RjZGIoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2Fz X21wdF9jbWQgKmNtZCwKKyAgICAgICAgICAgICAgICAgICAgdW5pb24gY2NiICpjY2IsIHN0cnVj dCBjYW1fc2ltICpzaW0pOworaW50IG1yc2FzX3NldHVwX2lvKHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgIHVuaW9u IGNjYiAqY2NiLCB1X2ludDMyX3QgZGV2aWNlX2lkLAorICAgICAgICAgICAgICAgICAgICBNUlNB U19SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCk7Cit2b2lkIG1yc2FzX3hwdF9mcmVl emUoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX3hwdF9yZWxlYXNlKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MpOwordm9pZCBtcnNhc19jYW1fZGV0YWNoKHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MpOwordm9pZCBtcnNhc19yZWxlYXNlX21wdF9jbWQoc3RydWN0IG1yc2FzX21wdF9j bWQgKmNtZCk7IAordm9pZCBtcnNhc191bm1hcF9yZXF1ZXN0KHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQpOwordm9pZCBtcnNhc19jbWRfZG9uZShzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kKTsKK3ZvaWQgbXJz YXNfZmlyZV9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdV9pbnQzMl90IHJlcV9kZXNjX2xv LAorICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgcmVxX2Rlc2NfaGkpOwordm9pZCBtcnNh c19zZXRfcGRfbGJhKE1SU0FTX1JBSURfU0NTSV9JT19SRVFVRVNUICppb19yZXF1ZXN0LCB1X2lu dDhfdCBjZGJfbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IElPX1JFUVVFU1RfSU5G TyAqaW9faW5mbywgdW5pb24gY2NiICpjY2IsIAorICAgICAgICAgICAgICAgICAgICBNUl9GV19S QUlEX01BUF9BTEwgKmxvY2FsX21hcF9wdHIsIHVfaW50MzJfdCByZWZfdGFnLAorICAgICAgICAg ICAgICAgICAgICB1X2ludDMyX3QgbGRfYmxvY2tfc2l6ZSk7CitzdGF0aWMgdm9pZCBtcnNhc19m cmVlemVfc2ltcShzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kLCBzdHJ1Y3QgY2FtX3NpbSAqc2lt KTsKK3N0YXRpYyB2b2lkIG1yc2FzX3BvbGwoc3RydWN0IGNhbV9zaW0gKnNpbSk7CitzdGF0aWMg dm9pZCBtcnNhc19hY3Rpb24oc3RydWN0IGNhbV9zaW0gKnNpbSwgdW5pb24gY2NiICpjY2IpOwor c3RhdGljIHZvaWQgbXJzYXNfc2NzaWlvX3RpbWVvdXQodm9pZCAqZGF0YSk7CitzdGF0aWMgdm9p ZCBtcnNhc19kYXRhX2xvYWRfY2Iodm9pZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywK KyAgICAgICAgICAgICAgICAgICAgaW50IG5zZWcsIGludCBlcnJvcik7CitzdGF0aWMgaW50MzJf dCBtcnNhc19zdGFydGlvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBjYW1fc2ltICpz aW0sIAorICAgICAgICAgICAgICAgICAgICB1bmlvbiBjY2IgKmNjYik7CitzdHJ1Y3QgbXJzYXNf bXB0X2NtZCAqIG1yc2FzX2dldF9tcHRfY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOyAKK01S U0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqbXJzYXNfZ2V0X3JlcXVlc3RfZGVzYyhzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjLCAKKyAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90IGluZGV4 KTsKKworZXh0ZXJuIHVfaW50MTZfdCBNUl9UYXJnZXRJZFRvTGRHZXQodV9pbnQzMl90IGxkVGd0 SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsKK2V4dGVybiB1X2ludDMyX3QgTVJfTGRCbG9j a1NpemVHZXQodV9pbnQzMl90IGxkVGd0SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwLAorICAg IHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgbXJzYXNfaXNyKHZvaWQgKmFy Zyk7CitleHRlcm4gdm9pZCBtcnNhc19hZW5faGFuZGxlcihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj KTsKK2V4dGVybiB1X2ludDhfdCBNUl9CdWlsZFJhaWRDb250ZXh0KHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MsIAorICAgICAgICBzdHJ1Y3QgSU9fUkVRVUVTVF9JTkZPICppb19pbmZvLFJBSURfQ09O VEVYVCAqcFJBSURfQ29udGV4dCwgCisgICAgICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsK K2V4dGVybiB1X2ludDE2X3QgTVJfTGRTcGFuQXJyYXlHZXQodV9pbnQzMl90IGxkLCB1X2ludDMy X3Qgc3BhbiwgCisgICAgICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsgCitleHRlcm4gdV9p bnQxNl90IG1yc2FzX2dldF91cGRhdGVkX2Rldl9oYW5kbGUoUExEX0xPQURfQkFMQU5DRV9JTkZP IGxiSW5mbywKKyAgICAgICAgc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbyk7CitleHRl cm4gdV9pbnQ4X3QgbWVnYXNhc19nZXRfYmVzdF9hcm0oUExEX0xPQURfQkFMQU5DRV9JTkZPIGxi SW5mbywgdV9pbnQ4X3QgYXJtLAorICAgICAgIHVfaW50NjRfdCBibG9jaywgdV9pbnQzMl90IGNv dW50KTsKKworCisvKioKKyAqIG1yc2FzX2NhbV9hdHRhY2g6ICAgICAgICBNYWluIGVudHJ5IHRv IENBTSBzdWJzeXN0ZW0gCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0 YW5jZSBzb2Z0IHN0YXRlIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gbXJz YXNfYXR0YWNoKCkgZHVyaW5nIGluaXRpYWxpemF0aW9uCisgKiB0byBwZXJmb3JtIFNJTSBhbGxv Y2F0aW9ucyBhbmQgWFBUIGJ1cyByZWdpc3RyYXRpb24uICBJZiB0aGUga2VybmVsIAorICogdmVy c2lvbiBpcyA3LjQgb3IgZWFybGllciwgaXQgd291bGQgYWxzbyBpbml0aWF0ZSBhIGJ1cyBzY2Fu LgorICovCitpbnQgbXJzYXNfY2FtX2F0dGFjaChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQorewor ICAgIHN0cnVjdCBjYW1fZGV2cSAqZGV2cTsKKyAgICBpbnQgbXJzYXNfY2FtX2RlcHRoOworCisg ICAgbXJzYXNfY2FtX2RlcHRoID0gc2MtPm1heF9md19jbWRzIC0gTVJTQVNfSU5URVJOQUxfQ01E UzsKKyAgICAKKyAgICBpZiAoKGRldnEgPSBjYW1fc2ltcV9hbGxvYyhtcnNhc19jYW1fZGVwdGgp KSA9PSBOVUxMKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5v dCBhbGxvY2F0ZSBTSU0gcXVldWVcbiIpOworICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9 CisKKworICAgIC8qIAorICAgICAqIENyZWF0ZSBTSU0gZm9yIGJ1cyAwIGFuZCByZWdpc3Rlciwg YWxzbyBjcmVhdGUgcGF0aCAKKyAgICAgKi8KKyAgICBzYy0+c2ltXzAgPSBjYW1fc2ltX2FsbG9j KG1yc2FzX2FjdGlvbiwgbXJzYXNfcG9sbCwgIm1yc2FzIiwgc2MsCisgICAgICAgIGRldmljZV9n ZXRfdW5pdChzYy0+bXJzYXNfZGV2KSwgJnNjLT5zaW1fbG9jaywgbXJzYXNfY2FtX2RlcHRoLAor ICAgICAgICBtcnNhc19jYW1fZGVwdGgsIGRldnEpOworICAgIGlmIChzYy0+c2ltXzAgPT0gTlVM TCl7CisgICAgICAgIGNhbV9zaW1xX2ZyZWUoZGV2cSk7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCByZWdpc3RlciBTSU1cbiIpOworICAgICAgICByZXR1cm4o RU5YSU8pOworICAgIH0KKyAgICAvKiBJbml0aWFsaXplIHRhc2txdWV1ZSBmb3IgRXZlbnQgSGFu ZGxpbmcgKi8KKyAgICBUQVNLX0lOSVQoJnNjLT5ldl90YXNrLCAwLCAodm9pZCAqKW1yc2FzX2Fl bl9oYW5kbGVyLCBzYyk7CisgICAgc2MtPmV2X3RxID0gdGFza3F1ZXVlX2NyZWF0ZSgibXJzYXNf dGFza3EiLCBNX05PV0FJVCB8IE1fWkVSTywKKyAgICAgICAgdGFza3F1ZXVlX3RocmVhZF9lbnF1 ZXVlLCAmc2MtPmV2X3RxKTsKKworICAgIC8qIFJ1biB0aGUgdGFzayBxdWV1ZSB3aXRoIGxvd2Vz dCBwcmlvcml0eSAqLworICAgIHRhc2txdWV1ZV9zdGFydF90aHJlYWRzKCZzYy0+ZXZfdHEsIDEs IDI1NSwgIiVzIHRhc2txIiwKKyAgICAgICAgZGV2aWNlX2dldF9uYW1ldW5pdChzYy0+bXJzYXNf ZGV2KSk7CisgICAgbXR4X2xvY2soJnNjLT5zaW1fbG9jayk7CisgICAgaWYgKHhwdF9idXNfcmVn aXN0ZXIoc2MtPnNpbV8wLCBzYy0+bXJzYXNfZGV2LDApICE9IENBTV9TVUNDRVNTKQorICAgIHsK KyAgICAgICAgY2FtX3NpbV9mcmVlKHNjLT5zaW1fMCwgVFJVRSk7IC8vIHBhc3NpbmcgdHJ1ZSBm cmVlcyB0aGUgZGV2cQorICAgICAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOyAKKyAgICAg ICAgcmV0dXJuKEVOWElPKTsKKyAgICB9CisgICAgaWYgKHhwdF9jcmVhdGVfcGF0aCgmc2MtPnBh dGhfMCwgTlVMTCwgY2FtX3NpbV9wYXRoKHNjLT5zaW1fMCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDQU1f TFVOX1dJTERDQVJEKSAhPSBDQU1fUkVRX0NNUCkgeworICAgICAgICB4cHRfYnVzX2RlcmVnaXN0 ZXIoY2FtX3NpbV9wYXRoKHNjLT5zaW1fMCkpOworICAgICAgICBjYW1fc2ltX2ZyZWUoc2MtPnNp bV8wLCBUUlVFKTsgLy8gcGFzc2luZyB0cnVlIHdpbGwgZnJlZSB0aGUgZGV2cQorICAgICAgICBt dHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOyAKKyAgICAgICAgcmV0dXJuKEVOWElPKTsKKyAgICB9 CisgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKworICAgIC8qIAorICAgICAqIENyZWF0 ZSBTSU0gZm9yIGJ1cyAxIGFuZCByZWdpc3RlciwgYWxzbyBjcmVhdGUgcGF0aCAKKyAgICAgKi8K KyAgICBzYy0+c2ltXzEgPSBjYW1fc2ltX2FsbG9jKG1yc2FzX2FjdGlvbiwgbXJzYXNfcG9sbCwg Im1yc2FzIiwgc2MsCisgICAgICAgIGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSwgJnNj LT5zaW1fbG9jaywgbXJzYXNfY2FtX2RlcHRoLAorICAgICAgICBtcnNhc19jYW1fZGVwdGgsIGRl dnEpOworICAgIGlmIChzYy0+c2ltXzEgPT0gTlVMTCl7CisgICAgICAgIGNhbV9zaW1xX2ZyZWUo ZGV2cSk7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCByZWdp c3RlciBTSU1cbiIpOworICAgICAgICByZXR1cm4oRU5YSU8pOworICAgIH0KKworICAgIG10eF9s b2NrKCZzYy0+c2ltX2xvY2spOworICAgIGlmICh4cHRfYnVzX3JlZ2lzdGVyKHNjLT5zaW1fMSwg c2MtPm1yc2FzX2RldiwgMSkgIT0gQ0FNX1NVQ0NFU1MpeworICAgICAgICBjYW1fc2ltX2ZyZWUo c2MtPnNpbV8xLCBUUlVFKTsgLy8gcGFzc2luZyB0cnVlIGZyZWVzIHRoZSBkZXZxCisgICAgICAg IG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisgICAgICAgIHJldHVybihFTlhJTyk7CisgICAg fQorICAgIGlmICh4cHRfY3JlYXRlX3BhdGgoJnNjLT5wYXRoXzEsIE5VTEwsIGNhbV9zaW1fcGF0 aChzYy0+c2ltXzEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIENBTV9UQVJHRVRfV0lMRENB UkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCkgIT0gQ0FNX1JF UV9DTVApIHsKKyAgICAgICAgeHB0X2J1c19kZXJlZ2lzdGVyKGNhbV9zaW1fcGF0aChzYy0+c2lt XzEpKTsKKyAgICAgICAgY2FtX3NpbV9mcmVlKHNjLT5zaW1fMSwgVFJVRSk7CisgICAgICAgIG10 eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisgICAgICAgIHJldHVybihFTlhJTyk7CisgICAgfQor ICAgIG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisKKyNpZiAoX19GcmVlQlNEX3ZlcnNpb24g PD0gNzA0MDAwKQorICAgIGlmIChtcnNhc19idXNfc2NhbihzYykpeworICAgICAgICBkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJFcnJvciBpbiBidXMgc2Nhbi5cbiIpOworICAgICAgICBy ZXR1cm4oMSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIG1y c2FzX2NhbV9kZXRhY2g6ICAgICAgICBEZS1hbGxvY2F0ZXMgYW5kIHRlYXJkb3duIENBTSAgCisg KiBpbnB1dDogICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlIAor ICoKKyAqIERlLXJlZ2lzdGVycyBhbmQgZnJlZXMgdGhlIHBhdGhzIGFuZCBTSU1zLiAKKyAqLwor dm9pZCBtcnNhc19jYW1fZGV0YWNoKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisJaWYgKHNj LT5ldl90cSAhPSBOVUxMKQorICAgICAgICB0YXNrcXVldWVfZnJlZShzYy0+ZXZfdHEpOworICAg IG10eF9sb2NrKCZzYy0+c2ltX2xvY2spOworICAgIGlmIChzYy0+cGF0aF8wKQorICAgICAgICB4 cHRfZnJlZV9wYXRoKHNjLT5wYXRoXzApOworICAgIGlmIChzYy0+c2ltXzApIHsKKyAgICAgICAg eHB0X2J1c19kZXJlZ2lzdGVyKGNhbV9zaW1fcGF0aChzYy0+c2ltXzApKTsKKyAgICAgICAgY2Ft X3NpbV9mcmVlKHNjLT5zaW1fMCwgRkFMU0UpOworICAgIH0KKyAgICBpZiAoc2MtPnBhdGhfMSkK KyAgICAgICAgeHB0X2ZyZWVfcGF0aChzYy0+cGF0aF8xKTsKKyAgICBpZiAoc2MtPnNpbV8xKSB7 CisgICAgICAgIHhwdF9idXNfZGVyZWdpc3RlcihjYW1fc2ltX3BhdGgoc2MtPnNpbV8xKSk7Cisg ICAgICAgIGNhbV9zaW1fZnJlZShzYy0+c2ltXzEsIFRSVUUpOworICAgIH0KKyAgICBtdHhfdW5s b2NrKCZzYy0+c2ltX2xvY2spOworfQorCisvKioKKyAqIG1yc2FzX2FjdGlvbjogICAgICAgICAg ICBTSU0gY2FsbGJhY2sgZW50cnkgcG9pbnQgICAKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAg ICBwb2ludGVyIHRvIFNJTSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyIHRv IENBTSBDb250cm9sIEJsb2NrCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgQ0FNIHN1 YnN5c3RlbSByZXF1ZXN0cy4gVGhlIHR5cGUgb2YgcmVxdWVzdCBpcworICogc3RvcmVkIGluIGNj Yi0+Y2NiX2guZnVuY19jb2RlLiAgVGhlIHByZXByb2Nlc3NvciAjaWZkZWYgaXMgbmVjZXNzYXJ5 CisgKiBiZWNhdXNlIGNjYi0+Y3BpLm1heGlvIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEZyZWVCU0Qg dmVyc2lvbiA3LjQgb3IgCisgKiBlYXJsaWVyLiAgIAorICovCitzdGF0aWMgdm9pZCBtcnNhc19h Y3Rpb24oc3RydWN0IGNhbV9zaW0gKnNpbSwgdW5pb24gY2NiICpjY2IpCit7CisgICAgc3RydWN0 IG1yc2FzX3NvZnRjICpzYyA9IChzdHJ1Y3QgbXJzYXNfc29mdGMgKiljYW1fc2ltX3NvZnRjKHNp bSk7CisgICAgc3RydWN0IGNjYl9oZHIgKmNjYl9oID0gJihjY2ItPmNjYl9oKTsKKyAgICB1X2lu dDMyX3QgZGV2aWNlX2lkOworCisgICAgc3dpdGNoIChjY2ItPmNjYl9oLmZ1bmNfY29kZSkgewor ICAgICAgICBjYXNlIFhQVF9TQ1NJX0lPOgorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2Vf aWQgPSBjY2JfaC0+dGFyZ2V0X2lkOworCisgICAgICAgICAgICAvKiAKKyAgICAgICAgICAgICAq IGJ1cyAwIGlzIExELCBidXMgMSBpcyBmb3Igc3lzdGVtLVBEIAorICAgICAgICAgICAgICovIAor ICAgICAgICAgICAgaWYgKGNhbV9zaW1fYnVzKHNpbSkgPT0gMSAmJiAKKyAgICAgICAgICAgICAg ICBzYy0+cGRfbGlzdFtkZXZpY2VfaWRdLmRyaXZlU3RhdGUgIT0gTVJfUERfU1RBVEVfU1lTVEVN KSB7CisgICAgICAgICAgICAgICAgLy9jY2ItPmNjYl9oLnN0YXR1cyB8PSBDQU1fUkVRX0lOVkFM SUQ7CisgICAgICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX0RFVl9OT1RfVEhF UkU7CisgICAgICAgICAgICAgICAgeHB0X2RvbmUoY2NiKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtcnNhc19zdGFydGlvKHNjLCBzaW0s IGNjYikpeworICAgICAgICAgICAgICAgICAgICBjY2ItPmNjYl9oLnN0YXR1cyB8PSBDQU1fUkVR X0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgIHhwdF9kb25lKGNjYik7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICAgICAgY2FzZSBYUFRfQUJPUlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNjYi0+Y2NiX2gu c3RhdHVzID0gQ0FNX1VBX0FCT1JUOworICAgICAgICAgICAgeHB0X2RvbmUoY2NiKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgWFBUX1JFU0VUX0JVUzoKKyAg ICAgICAgeworICAgICAgICAgICAgeHB0X2RvbmUoY2NiKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICAgIGNhc2UgWFBUX0dFVF9UUkFOX1NFVFRJTkdTOgorICAgICAgICB7 CisgICAgICAgICAgICBjY2ItPmN0cy5wcm90b2NvbCA9IFBST1RPX1NDU0k7CisgICAgICAgICAg ICBjY2ItPmN0cy5wcm90b2NvbF92ZXJzaW9uID0gU0NTSV9SRVZfMjsKKyAgICAgICAgICAgIGNj Yi0+Y3RzLnRyYW5zcG9ydCA9IFhQT1JUX1NQSTsKKyAgICAgICAgICAgIGNjYi0+Y3RzLnRyYW5z cG9ydF92ZXJzaW9uID0gMjsgIAorICAgICAgICAgICAgY2NiLT5jdHMueHBvcnRfc3BlY2lmaWMu c3BpLnZhbGlkID0gQ1RTX1NQSV9WQUxJRF9ESVNDOworICAgICAgICAgICAgY2NiLT5jdHMueHBv cnRfc3BlY2lmaWMuc3BpLmZsYWdzID0gQ1RTX1NQSV9GTEFHU19ESVNDX0VOQjsKKyAgICAgICAg ICAgIGNjYi0+Y3RzLnByb3RvX3NwZWNpZmljLnNjc2kudmFsaWQgPSBDVFNfU0NTSV9WQUxJRF9U UTsKKyAgICAgICAgICAgIGNjYi0+Y3RzLnByb3RvX3NwZWNpZmljLnNjc2kuZmxhZ3MgPSBDVFNf U0NTSV9GTEFHU19UQUdfRU5COworICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1f UkVRX0NNUDsKKyAgICAgICAgICAgIHhwdF9kb25lKGNjYik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgICAgICBjYXNlIFhQVF9TRVRfVFJBTl9TRVRUSU5HUzoKKyAgICAgICAg eworICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fRlVOQ19OT1RBVkFJTDsgCisg ICAgICAgICAgICB4cHRfZG9uZShjY2IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgY2FzZSBYUFRfQ0FMQ19HRU9NRVRSWToKKyAgICAgICAgeworICAgICAgICAgICAg Y2FtX2NhbGNfZ2VvbWV0cnkoJmNjYi0+Y2NnLCAxKTsgICAKKyAgICAgICAgICAgIHhwdF9kb25l KGNjYik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFhQVF9Q QVRIX0lOUToKKyAgICAgICAgeworICAgICAgICAgICAgY2NiLT5jcGkudmVyc2lvbl9udW0gPSAx OworICAgICAgICAgICAgY2NiLT5jcGkuaGJhX2lucXVpcnkgPSAwOworICAgICAgICAgICAgY2Ni LT5jcGkudGFyZ2V0X3NwcnQgPSAwOworICAgICAgICAgICAgY2NiLT5jcGkuaGJhX21pc2MgPSAw OworICAgICAgICAgICAgY2NiLT5jcGkuaGJhX2VuZ19jbnQgPSAwOworICAgICAgICAgICAgY2Ni LT5jcGkubWF4X2x1biA9IE1SU0FTX1NDU0lfTUFYX0xVTlM7CisgICAgICAgICAgICBjY2ItPmNw aS51bml0X251bWJlciA9IGNhbV9zaW1fdW5pdChzaW0pOworICAgICAgICAgICAgY2NiLT5jcGku YnVzX2lkID0gY2FtX3NpbV9idXMoc2ltKTsKKyAgICAgICAgICAgIGNjYi0+Y3BpLmluaXRpYXRv cl9pZCA9IE1SU0FTX1NDU0lfSU5JVElBVE9SX0lEOyAKKyAgICAgICAgICAgIGNjYi0+Y3BpLmJh c2VfdHJhbnNmZXJfc3BlZWQgPSAxNTAwMDA7IAorICAgICAgICAgICAgc3RybmNweShjY2ItPmNw aS5zaW1fdmlkLCAiRnJlZUJTRCIsIFNJTV9JRExFTik7CisgICAgICAgICAgICBzdHJuY3B5KGNj Yi0+Y3BpLmhiYV92aWQsICJMU0kiLCBIQkFfSURMRU4pOworICAgICAgICAgICAgc3RybmNweShj Y2ItPmNwaS5kZXZfbmFtZSwgY2FtX3NpbV9uYW1lKHNpbSksIERFVl9JRExFTik7CisgICAgICAg ICAgICBjY2ItPmNwaS50cmFuc3BvcnQgPSBYUE9SVF9TUEk7CisgICAgICAgICAgICBjY2ItPmNw aS50cmFuc3BvcnRfdmVyc2lvbiA9IDI7CisgICAgICAgICAgICBjY2ItPmNwaS5wcm90b2NvbCA9 IFBST1RPX1NDU0k7CisgICAgICAgICAgICBjY2ItPmNwaS5wcm90b2NvbF92ZXJzaW9uID0gU0NT SV9SRVZfMjsKKyAgICAgICAgICAgIGlmIChjY2ItPmNwaS5idXNfaWQgPT0gMCkKKyAgICAgICAg ICAgICAgICBjY2ItPmNwaS5tYXhfdGFyZ2V0ID0gTVJTQVNfTUFYX0xELTE7CisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgY2NiLT5jcGkubWF4X3RhcmdldCA9IE1SU0FTX01BWF9Q RC0xOworI2lmIChfX0ZyZWVCU0RfdmVyc2lvbiA+IDcwNDAwMCkKKyAgICAgICAgICAgIGNjYi0+ Y3BpLm1heGlvID0gTVJTQVNfTUFYX0lPX1NJWkU7CisjZW5kaWYKKyAgICAgICAgICAgIGNjYi0+ Y2NiX2guc3RhdHVzID0gQ0FNX1JFUV9DTVA7CisgICAgICAgICAgICB4cHRfZG9uZShjY2IpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg eworICAgICAgICAgICAgY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0lOVkFMSUQ7CisgICAg ICAgICAgICB4cHRfZG9uZShjY2IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9Cit9CisKKy8qKgorICogbXJzYXNfc2NzaWlvX3RpbWVvdXQgICAgICAgICBDYWxsYmFjayBm dW5jdGlvbiBmb3IgSU8gdGltZWQgb3V0CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAg IG1wdCBjb21tYW5kIGNvbnRleHQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSBh ZnRlciB0aW1lb3V0IHZhbHVlCisgKiBwcm92aWRlZCBieSBjY2IgaGVhZGVyIGZyb20gQ0FNIGxh eWVyLCBpZiB0aW1lciBleHBpcmVzLgorICogRHJpdmVyIHdpbGwgcnVuIHRpbWVyIGZvciBhbGwg RENETSBhbmQgTERJTyBjb21taW5nIGZyb20gQ0FNIGxheWVyLgorICogVGhpcyBmdW5jdGlvbiBp cyBjYWxsYmFjayBmdW5jdGlvbiBmb3IgSU8gdGltZW91dCBhbmQgaXQgcnVucyBpbgorICogbm8t c2xlZXAgY29udGV4dC4gU2V0IGRvX3RpbWVkb3V0X3Jlc2V0IGluIEFkYXB0ZXIgY29udGV4dCBz byB0aGF0CisgKiBpdCB3aWxsIGV4ZWN1dGUgT0NSL0tpbGwgYWRwdGVyIGZyb20gb2NyX3RocmVh ZCBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZAorbXJzYXNfc2NzaWlvX3RpbWVvdXQodm9pZCAq ZGF0YSkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kOworICAgIHN0cnVjdCBtcnNh c19zb2Z0YyAqc2M7CisKKyAgICBjbWQgPSAoc3RydWN0IG1yc2FzX21wdF9jbWQgKilkYXRhOwor ICAgIHNjID0gY21kLT5zYzsKKworICAgIGlmIChjbWQtPmNjYl9wdHIgPT0gTlVMTCkgeworICAg ICAgICBwcmludGYoImNvbW1hbmQgdGltZW91dCB3aXRoIE5VTEwgY2NiXG4iKTsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIC8qIEJlbG93IGNhbGxvdXQgaXMgZHVtbXkgZW50cnkgc28g dGhhdCBpdCB3aWxsIGJlCisgICAgICogY2FuY2VsbGVkIGZyb20gbXJzYXNfY21kX2RvbmUoKS4g Tm93IENvbnRyb2xsZXIgd2lsbAorICAgICAqIGdvIHRvIE9DUi9LaWxsIEFkYXB0ZXIgYmFzZWQg b24gT0NSIGVuYWJsZS9kaXNhYmxlCisgICAgICogcHJvcGVydHkgb2YgQ29udHJvbGxlciBmcm9t IG9jcl90aHJlYWQgY29udGV4dC4KKyAgICAgKi8KKyAgICBjYWxsb3V0X3Jlc2V0KCZjbWQtPmNt X2NhbGxvdXQsICg2MDAwMDAgKiBoeikgLyAxMDAwLAorICAgIG1yc2FzX3Njc2lpb190aW1lb3V0 LCBjbWQpOworICAgIHNjLT5kb190aW1lZG91dF9yZXNldCA9IDE7CisgICAgaWYoc2MtPm9jcl90 aHJlYWRfYWN0aXZlKQorICAgICAgICB3YWtldXAoJnNjLT5vY3JfY2hhbik7Cit9CisKKy8qKgor ICogbXJzYXNfc3RhcnRpbzogICAgICAgICAgIFNDU0kgSU8gZW50cnkgcG9pbnQgICAKKyAqIGlu cHV0OiAgICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUgCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciB0byBDQU0gQ29udHJvbCBCbG9jaworICoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFNDU0kgSU8gZW50cnkgcG9pbnQgYW5kIGl0IGluaXRp YXRlcyBJTyBwcm9jZXNzaW5nLiAKKyAqIEl0IGNvcGllcyB0aGUgSU8gYW5kIGRlcGVuZGluZyBp ZiB0aGUgSU8gaXMgcmVhZC93cml0ZSBvciBpbnF1aXJ5LCBpdCB3b3VsZCAKKyAqIGNhbGwgbXJz YXNfYnVpbGRfbGRpbygpIG9yIG1yc2FzX2J1aWxkX2RjZGIoKSwgcmVzcGVjdGl2ZWx5LiAgSXQg cmV0dXJucworICogMCBpZiB0aGUgY29tbWFuZCBpcyBzZW50IHRvIGZpcm13YXJlIHN1Y2Nlc3Nm dWxseSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgMS4KKyAqLworc3RhdGljIGludDMyX3QgbXJzYXNf c3RhcnRpbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgY2FtX3NpbSAqc2ltLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gY2NiICpjY2IpCit7CisgICAgc3RydWN0 IG1yc2FzX21wdF9jbWQgKmNtZDsKKyAgICBzdHJ1Y3QgY2NiX2hkciAqY2NiX2ggPSAmKGNjYi0+ Y2NiX2gpOworICAgIHN0cnVjdCBjY2Jfc2NzaWlvICpjc2lvID0gJihjY2ItPmNzaW8pOworICAg IE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqcmVxX2Rlc2M7CisKKyAgICBpZiAoKGNz aW8tPmNkYl9pby5jZGJfYnl0ZXNbMF0pID09IFNZTkNIUk9OSVpFX0NBQ0hFKXsKKyAgICAgICAg Y2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0NNUDsKKyAgICAgICAgeHB0X2RvbmUoY2NiKTsK KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGNjYl9oLT5zdGF0dXMgfD0gQ0FNX1NJ TV9RVUVVRUQ7CisgICAgY21kID0gbXJzYXNfZ2V0X21wdF9jbWQoc2MpOworCisgICAgaWYgKCFj bWQpIHsKKyAgICAgICAgY2NiX2gtPnN0YXR1cyB8PSBDQU1fUkVRVUVVRV9SRVE7CisgICAgICAg IHhwdF9kb25lKGNjYik7CisgICAgICAgIHJldHVybigwKTsgIAorICAgIH0KKworICAgIGlmICgo Y2NiX2gtPmZsYWdzICYgQ0FNX0RJUl9NQVNLKSAhPSBDQU1fRElSX05PTkUpIHsKKyAgICAgICAg aWYoY2NiX2gtPmZsYWdzICYgQ0FNX0RJUl9JTikKKyAgICAgICAgICAgIGNtZC0+ZmxhZ3MgfD0g TVJTQVNfRElSX0lOOworICAgICAgICBpZihjY2JfaC0+ZmxhZ3MgJiBDQU1fRElSX09VVCkKKyAg ICAgICAgICAgIGNtZC0+ZmxhZ3MgfD0gTVJTQVNfRElSX09VVDsKKyAgICB9IAorICAgIGVsc2Ug CisgICAgICAgIGNtZC0+ZmxhZ3MgPSBNUlNBU19ESVJfTk9ORTsgLyogbm8gZGF0YSAqLworCisv KgorICogICAgICAqIFhYWCBXZSBkb24ndCB5ZXQgc3VwcG9ydCBwaHlzaWNhbCBhZGRyZXNzZXMg aGVyZS4KKyAqLyAKKyAgICBzd2l0Y2ggKChjY2ItPmNjYl9oLmZsYWdzICYgQ0FNX0RBVEFfTUFT SykpIHsKKyAgICBjYXNlIENBTV9EQVRBX1BBRERSOgorICAgIGNhc2UgQ0FNX0RBVEFfU0dfUEFE RFI6CisgICAgICAgICBwcmludGYoIiVzOiBwaHlzaWNhbCBhZGRyZXNzZXMgbm90IHN1cHBvcnRl ZFxuIiwKKyAgICAgICAgICAgICAgIF9fZnVuY19fKTsKKyAgICAgICAgIG1yc2FzX3JlbGVhc2Vf bXB0X2NtZChjbWQpOworICAgICAgICAgY2NiX2gtPnN0YXR1cyA9IENBTV9SRVFfSU5WQUxJRDsK KyAgICAgICAgIGNjYl9oLT5zdGF0dXMgJj0gfkNBTV9TSU1fUVVFVUVEOworICAgICAgICAgZ290 byBkb25lOworICAgIGNhc2UgQ0FNX0RBVEFfU0c6CisgICAgICAgICBwcmludGYoIiVzOiBzY2F0 dGVyIGdhdGhlciBpcyBub3Qgc3VwcG9ydGVkXG4iLAorICAgICAgICAgICAgICAgX19mdW5jX18p OworICAgICAgICAgbXJzYXNfcmVsZWFzZV9tcHRfY21kKGNtZCk7CisgICAgICAgICBjY2JfaC0+ c3RhdHVzID0gQ0FNX1JFUV9JTlZBTElEOworICAgICAgICAgZ290byBkb25lOworCWNhc2UgQ0FN X0RBVEFfVkFERFI6CisgICAgICAgICBpZiAoY3Npby0+ZHhmZXJfbGVuID4gTVJTQVNfTUFYX0lP X1NJWkUpIHsKKyAgICAgICAgICAgICAgbXJzYXNfcmVsZWFzZV9tcHRfY21kKGNtZCk7CisgICAg ICAgICAgICAgIGNjYl9oLT5zdGF0dXMgPSBDQU1fUkVRX1RPT19CSUc7CisgICAgICAgICAgICAg IGdvdG8gZG9uZTsKKyAgICAgICAgICB9CisgICAgICAgICAgY21kLT5sZW5ndGggPSBjc2lvLT5k eGZlcl9sZW47CisgICAgICAgICAgaWYgKGNtZC0+bGVuZ3RoKSAKKyAgICAgICAgICAgICAgY21k LT5kYXRhID0gY3Npby0+ZGF0YV9wdHI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICAgIGNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX1JFUV9JTlZBTElEOworICAgICAgICBnb3Rv IGRvbmU7CisgICAgfQorCisKKyAgICAvKiBzYXZlIGNjYiBwdHIgKi8KKyAgICBjbWQtPmNjYl9w dHIgPSBjY2I7CisKKyAgICByZXFfZGVzYyA9IG1yc2FzX2dldF9yZXF1ZXN0X2Rlc2Moc2MsIChj bWQtPmluZGV4KS0xKTsKKyAgICBpZiAoIXJlcV9kZXNjKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBnZXQgcmVxdWVzdF9kZXNjcmlwdG9yLlxuIik7Cisg ICAgICAgIHJldHVybiAoRkFJTCk7CisgICAgfQorICAgIG1lbXNldChyZXFfZGVzYywgMCwgc2l6 ZW9mKE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTikpOworICAgIGNtZC0+cmVxdWVzdF9k ZXNjID0gcmVxX2Rlc2M7CisKKyAgICBpZiAoY2NiX2gtPmZsYWdzICYgQ0FNX0NEQl9QT0lOVEVS KQorICAgICAgICBiY29weShjc2lvLT5jZGJfaW8uY2RiX3B0ciwgY21kLT5pb19yZXF1ZXN0LT5D REIuQ0RCMzIsIGNzaW8tPmNkYl9sZW4pOworICAgIGVsc2UKKyAgICAgICAgYmNvcHkoY3Npby0+ Y2RiX2lvLmNkYl9ieXRlcywgY21kLT5pb19yZXF1ZXN0LT5DREIuQ0RCMzIsIGNzaW8tPmNkYl9s ZW4pOworICAgIG10eF9sb2NrKCZzYy0+cmFpZG1hcF9sb2NrKTsKKworICAgIGlmIChtcnNhc19s ZGlvX2lucShzaW0sIGNjYikpIHsKKyAgICAgICAgaWYgKG1yc2FzX2J1aWxkX2xkaW8oc2MsIGNt ZCwgY2NiKSl7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJCdWls ZCBMRElPIGZhaWxlZC5cbiIpOworCSAgICBtdHhfdW5sb2NrKCZzYy0+cmFpZG1hcF9sb2NrKTsK KyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfSAgICAKKyAgICB9CisgICAgZWxzZSB7 IAorICAgICAgICBpZiAobXJzYXNfYnVpbGRfZGNkYihzYywgY21kLCBjY2IsIHNpbSkpIHsKKyAg ICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkJ1aWxkIERDREIgZmFpbGVk LlxuIik7CisJICAgIG10eF91bmxvY2soJnNjLT5yYWlkbWFwX2xvY2spOworICAgICAgICAgICAg cmV0dXJuKDEpOworICAgICAgICB9CisgICAgfQorICAgIG10eF91bmxvY2soJnNjLT5yYWlkbWFw X2xvY2spOworCisgICAgaWYgKGNtZC0+ZmxhZ3MgPT0gTVJTQVNfRElSX0lOKSAvL2Zyb20gZGV2 aWNlCisgICAgICAgIGNtZC0+aW9fcmVxdWVzdC0+Q29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05U Uk9MX1JFQUQ7CisgICAgZWxzZSBpZiAoY21kLT5mbGFncyA9PSBNUlNBU19ESVJfT1VUKSAgLy90 byBkZXZpY2UKKyAgICAgICAgY21kLT5pb19yZXF1ZXN0LT5Db250cm9sIHw9IE1QSTJfU0NTSUlP X0NPTlRST0xfV1JJVEU7CisKKyAgICBjbWQtPmlvX3JlcXVlc3QtPlNHTEZsYWdzID0gTVBJMl9T R0VfRkxBR1NfNjRfQklUX0FERFJFU1NJTkc7CisgICAgY21kLT5pb19yZXF1ZXN0LT5TR0xPZmZz ZXQwID0gb2Zmc2V0b2YoTVJTQVNfUkFJRF9TQ1NJX0lPX1JFUVVFU1QsIFNHTCkvNDsKKyAgICBj bWQtPmlvX3JlcXVlc3QtPlNlbnNlQnVmZmVyTG93QWRkcmVzcyA9IGNtZC0+c2Vuc2VfcGh5c19h ZGRyOworICAgIGNtZC0+aW9fcmVxdWVzdC0+U2Vuc2VCdWZmZXJMZW5ndGggPSBNUlNBU19TQ1NJ X1NFTlNFX0JVRkZFUlNJWkU7CisKKyAgICByZXFfZGVzYyA9IGNtZC0+cmVxdWVzdF9kZXNjOwor ICAgIHJlcV9kZXNjLT5TQ1NJSU8uU01JRCA9IGNtZC0+aW5kZXg7CisKKyAgICAvKgorICAgICAq IFN0YXJ0IHRpbWVyIGZvciBJTyB0aW1lb3V0LiBEZWZhdWx0IHRpbWVvdXQgdmFsdWUgaXMgOTAg c2Vjb25kLgorICAgICAqLworICAgIGNhbGxvdXRfcmVzZXQoJmNtZC0+Y21fY2FsbG91dCwgKHNj LT5tcnNhc19pb190aW1lb3V0ICogaHopIC8gMTAwMCwKKyAgICAgICAgbXJzYXNfc2NzaWlvX3Rp bWVvdXQsIGNtZCk7CisgICAgYXRvbWljX2luYygmc2MtPmZ3X291dHN0YW5kaW5nKTsKKworICAg IGlmKGF0b21pY19yZWFkKCZzYy0+Zndfb3V0c3RhbmRpbmcpID4gc2MtPmlvX2NtZHNfaGlnaHdh dGVyKQorICAgICAgICBzYy0+aW9fY21kc19oaWdod2F0ZXIrKzsKKworICAgIG1yc2FzX2ZpcmVf Y21kKHNjLCByZXFfZGVzYy0+YWRkci51LmxvdywgcmVxX2Rlc2MtPmFkZHIudS5oaWdoKTsKKyAg ICByZXR1cm4oMCk7CisKK2RvbmU6CisgICAgeHB0X2RvbmUoY2NiKTsKKyAgICByZXR1cm4oMCk7 Cit9CisKKy8qKgorICogbXJzYXNfbGRpb19pbnE6ICAgICAgICAgICBEZXRlcm1pbmVzIGlmIElP IGlzIHJlYWQvd3JpdGUgb3IgaW5xdWlyeSAgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAg ICAgICAgcG9pbnRlciB0byBDQU0gQ29udHJvbCBCbG9jaworICoKKyAqIFRoaXMgZnVuY3Rpb24g ZGV0ZXJtaW5lcyBpZiB0aGUgSU8gaXMgcmVhZC93cml0ZSBvciBpbnF1aXJ5LiAgSXQgcmV0dXJu cyBhCisgKiAxIGlmIHRoZSBJTyBpcyByZWFkL3dyaXRlIGFuZCAwIGlmIGl0IGlzIGlucXVpcnku CisgKi8KK2ludCBtcnNhc19sZGlvX2lucShzdHJ1Y3QgY2FtX3NpbSAqc2ltLCB1bmlvbiBjY2Ig KmNjYikgCit7CisgICAgc3RydWN0IGNjYl9zY3NpaW8gKmNzaW8gPSAmKGNjYi0+Y3Npbyk7CisK KyAgICBpZiAoY2FtX3NpbV9idXMoc2ltKSA9PSAxKQorICAgICAgICByZXR1cm4oMCk7CisKKyAg ICBzd2l0Y2ggKGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMF0pIHsKKyAgICAgICAgY2FzZSBSRUFE XzEwOgorICAgICAgICBjYXNlIFdSSVRFXzEwOgorICAgICAgICBjYXNlIFJFQURfMTI6CisgICAg ICAgIGNhc2UgV1JJVEVfMTI6CisgICAgICAgIGNhc2UgUkVBRF82OgorICAgICAgICBjYXNlIFdS SVRFXzY6CisgICAgICAgIGNhc2UgUkVBRF8xNjoKKyAgICAgICAgY2FzZSBXUklURV8xNjoKKyAg ICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgfQorfQorCisvKioKKyAqIG1yc2FzX2dldF9tcHRfY21kOiAgICAgICAgICAgIEdl dCBhIGNtZCBmcm9tIGZyZWUgY29tbWFuZCBwb29sICAKKyAqIGlucHV0OiAgICAgICAgICAgICAg ICAgICAgICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZSAKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIHJlbW92ZXMgYW4gTVBUIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBmcmVlIGxpc3QgYW5k IAorICogaW5pdGlhbGl6ZXMgaXQuCisgKi8KK3N0cnVjdCBtcnNhc19tcHRfY21kKiBtcnNhc19n ZXRfbXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKSAKK3sKKyAgICBzdHJ1Y3QgbXJzYXNf bXB0X2NtZCAqY21kID0gTlVMTDsKKworICAgIG10eF9sb2NrKCZzYy0+bXB0X2NtZF9wb29sX2xv Y2spOworICAgIGlmICghVEFJTFFfRU1QVFkoJnNjLT5tcnNhc19tcHRfY21kX2xpc3RfaGVhZCkp eworICAgICAgICBjbWQgPSBUQUlMUV9GSVJTVCgmc2MtPm1yc2FzX21wdF9jbWRfbGlzdF9oZWFk KTsKKyAgICAgICAgVEFJTFFfUkVNT1ZFKCZzYy0+bXJzYXNfbXB0X2NtZF9saXN0X2hlYWQsIGNt ZCwgbmV4dCk7CisgICAgfQorICAgIG1lbXNldCgodWludDhfdCAqKWNtZC0+aW9fcmVxdWVzdCwg MCwgTVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSk7CisgICAgY21kLT5kYXRh ID0gTlVMTDsKKyAgICBjbWQtPmxlbmd0aCA9IDA7CisgICAgY21kLT5mbGFncyA9IDA7CisgICAg Y21kLT5lcnJvcl9jb2RlID0gMDsKKyAgICBjbWQtPmxvYWRfYmFsYW5jZSA9IDA7CisgICAgY21k LT5jY2JfcHRyID0gTlVMTDsKKyAgICBtdHhfdW5sb2NrKCZzYy0+bXB0X2NtZF9wb29sX2xvY2sp OworCisgICAgcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBtcnNhc19yZWxlYXNlX21wdF9jbWQ6 ICAgICAgUmV0dXJuIGEgY21kIHRvIGZyZWUgY29tbWFuZCBwb29sICAKKyAqIGlucHV0OiAgICAg ICAgICAgICAgICAgICAgICBDb21tYW5kIHBhY2tldCBmb3IgcmV0dXJuIHRvIGZyZWUgY29tbWFu ZCBwb29sIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBNUFQgY29tbWFuZCB0byB0 aGUgZnJlZSBjb21tYW5kIGxpc3QuCisgKi8KK3ZvaWQgbXJzYXNfcmVsZWFzZV9tcHRfY21kKHN0 cnVjdCBtcnNhc19tcHRfY21kICpjbWQpIAoreworICAgIHN0cnVjdCBtcnNhc19zb2Z0YyAqc2Mg PSBjbWQtPnNjOworCisgICAgbXR4X2xvY2soJnNjLT5tcHRfY21kX3Bvb2xfbG9jayk7CisgICAg Y21kLT5zeW5jX2NtZF9pZHggPSAodV9pbnQzMl90KU1SU0FTX1VMT05HX01BWDsKKyAgICBUQUlM UV9JTlNFUlRfVEFJTCgmKHNjLT5tcnNhc19tcHRfY21kX2xpc3RfaGVhZCksIGNtZCwgbmV4dCk7 CisgICAgbXR4X3VubG9jaygmc2MtPm1wdF9jbWRfcG9vbF9sb2NrKTsKKworICAgIHJldHVybjsg Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X3JlcXVlc3RfZGVzYzogICAgIEdldCByZXF1ZXN0IGRl c2NyaXB0b3IgZnJvbSBhcnJheSAgCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgQWRh cHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U01JRCBpbmRleCAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRo ZSByZXF1ZXN0IGRlc2NyaXB0b3IuCisgKi8KK01SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklP TiAqCittcnNhc19nZXRfcmVxdWVzdF9kZXNjKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHVfaW50 MTZfdCBpbmRleCkKK3sKKyAgICB1X2ludDhfdCAqcDsKKworICAgIGlmIChpbmRleCA+PSBzYy0+ bWF4X2Z3X2NtZHMpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSW52 YWxpZCBTTUlEICgweCV4KXJlcXVlc3QgZm9yIGRlc2NcbiIsIGluZGV4KTsKKyAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgfQorICAgIHAgPSBzYy0+cmVxX2Rlc2MgKyBzaXplb2YoTVJTQVNfUkVR VUVTVF9ERVNDUklQVE9SX1VOSU9OKSAqIGluZGV4OworCisgICAgcmV0dXJuIChNUlNBU19SRVFV RVNUX0RFU0NSSVBUT1JfVU5JT04gKilwOworfQorCisvKioKKyAqIG1yc2FzX2J1aWxkX2xkaW86 ICAgICAgIEJ1aWxkcyBhbiBMRElPIGNvbW1hbmQgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAg ICBQb2ludGVyIHRvIGNvbW1hbmQgcGFja2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBQ b2ludGVyIHRvIENDQiAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyB0aGUgTERJTyBjb21t YW5kIHBhY2tldC4gIEl0IHJldHVybnMgMCBpZiB0aGUgCisgKiBjb21tYW5kIGlzIGJ1aWx0IHN1 Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYSAxLiAKKyAqLworaW50IG1yc2FzX2J1 aWxkX2xkaW8oc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21wdF9jbWQgKmNt ZCwKKyAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBjY2IgKmNjYikKK3sKKyAgICBzdHJ1Y3Qg Y2NiX2hkciAqY2NiX2ggPSAmKGNjYi0+Y2NiX2gpOworICAgIHN0cnVjdCBjY2Jfc2NzaWlvICpj c2lvID0gJihjY2ItPmNzaW8pOworICAgIHVfaW50MzJfdCBkZXZpY2VfaWQ7CisgICAgTVJTQVNf UkFJRF9TQ1NJX0lPX1JFUVVFU1QgKmlvX3JlcXVlc3Q7CisKKyAgICBkZXZpY2VfaWQgPSBjY2Jf aC0+dGFyZ2V0X2lkOworCisgICAgaW9fcmVxdWVzdCA9IGNtZC0+aW9fcmVxdWVzdDsKKyAgICBp b19yZXF1ZXN0LT5SYWlkQ29udGV4dC5WaXJ0dWFsRGlza1RndElkID0gZGV2aWNlX2lkOworICAg IGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LnN0YXR1cyA9IDA7CisgICAgaW9fcmVxdWVzdC0+UmFp ZENvbnRleHQuZXhTdGF0dXMgPSAwOworCisgICAgLyoganVzdCB0aGUgY2RiIGxlbiwgb3RoZXIg ZmxhZ3MgemVybywgYW5kIE9SZWQtaW4gbGF0ZXIgZm9yIEZQICovIAorICAgIGlvX3JlcXVlc3Qt PklvRmxhZ3MgPSBjc2lvLT5jZGJfbGVuOworCisgICAgaWYgKG1yc2FzX3NldHVwX2lvKHNjLCBj bWQsIGNjYiwgZGV2aWNlX2lkLCBpb19yZXF1ZXN0KSAhPSBTVUNDRVNTKQorICAgICAgICBkZXZp Y2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJCdWlsZCBsZGlvIG9yIGZwaW8gZXJyb3JcbiIpOyAK KyAgICAgICAgCisgICAgaW9fcmVxdWVzdC0+RGF0YUxlbmd0aCA9IGNtZC0+bGVuZ3RoOworCisg ICAgaWYgKG1yc2FzX21hcF9yZXF1ZXN0KHNjLCBjbWQpID09IFNVQ0NFU1MpIHsKKyAgICAgICAg aWYgKGNtZC0+c2dlX2NvdW50ID4gTVJTQVNfTUFYX1NHTCkgeworICAgICAgICAgICAgZGV2aWNl X3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiRXJyb3I6IHNnZV9jb3VudCAoMHgleCkgZXhjZWVkcyIg CisgICAgICAgICAgICAgICAgIm1heCAoMHgleCkgYWxsb3dlZFxuIiwgY21kLT5zZ2VfY291bnQs IHNjLT5tYXhfbnVtX3NnZSk7CisgICAgICAgICAgICByZXR1cm4gKEZBSUwpOworICAgICAgICB9 CisgICAgICAgIGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0Lm51bVNHRSA9IGNtZC0+c2dlX2NvdW50 OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAiRGF0YSBtYXAvbG9hZCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuKEZBSUwpOworICAg IH0gCisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIG1yc2FzX3NldHVwX2lvOiAgICAgICAg ICAgICBTZXQgdXAgZGF0YSBpbmNsdWRpbmcgRmFzdCBQYXRoIEkvTyAgCisgKiBpbnB1dDogICAg ICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHBhY2tldAorICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gQ0NCIAorICoKKyAqIFRoaXMgZnVuY3Rp b24gYnVpbGRzIHRoZSBEQ0RCIGlucXVpcnkgY29tbWFuZC4gIEl0IHJldHVybnMgMCBpZiB0aGUg CisgKiBjb21tYW5kIGlzIGJ1aWx0IHN1Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIGl0IHJldHVybnMg YSAxLiAKKyAqLworaW50IG1yc2FzX3NldHVwX2lvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0 cnVjdCBtcnNhc19tcHRfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgIHVuaW9uIGNjYiAq Y2NiLCB1X2ludDMyX3QgZGV2aWNlX2lkLAorICAgICAgICAgICAgICAgICAgICBNUlNBU19SQUlE X1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCkKK3sKKyAgICBzdHJ1Y3QgY2NiX2hkciAqY2Ni X2ggPSAmKGNjYi0+Y2NiX2gpOworICAgIHN0cnVjdCBjY2Jfc2NzaWlvICpjc2lvID0gJihjY2It PmNzaW8pOworICAgIHN0cnVjdCBJT19SRVFVRVNUX0lORk8gaW9faW5mbzsKKyAgICBNUl9GV19S QUlEX01BUF9BTEwgKm1hcF9wdHI7CisgICAgdV9pbnQ4X3QgZnBfcG9zc2libGU7CisgICAgdV9p bnQzMl90IHN0YXJ0X2xiYV9oaSwgc3RhcnRfbGJhX2xvLCBsZF9ibG9ja19zaXplOworICAgIHVf aW50MzJfdCBkYXRhbGVuZ3RoID0gMDsKKyAgICAgCisgICAgc3RhcnRfbGJhX2xvID0gMDsKKyAg ICBzdGFydF9sYmFfaGkgPSAwOworICAgIGZwX3Bvc3NpYmxlID0gMDsKKyAgICAgCisgICAgLyoK KyAgICAgKiBSRUFEXzYgKDB4MDgpIG9yIFdSSVRFXzYgKDB4MEEpIGNkYgorICAgICAqLworICAg IGlmIChjc2lvLT5jZGJfbGVuID09IDYpIHsKKyAgICAgICAgZGF0YWxlbmd0aCA9ICh1X2ludDMy X3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1s0XTsKKyAgICAgICAgc3RhcnRfbGJhX2xvID0gKCh1 X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMV0gPDwgMTYpIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMl0gPDwgOCkg fAorICAgICAgICAgICAgICAgICAgICAgICAgKHVfaW50MzJfdCkgY3Npby0+Y2RiX2lvLmNkYl9i eXRlc1szXTsKKyAgICAgICAgc3RhcnRfbGJhX2xvICY9IDB4MUZGRkZGOworICAgIH0KKyAgICAv KgorICAgICAqIFJFQURfMTAgKDB4MjgpIG9yIFdSSVRFXzYgKDB4MkEpIGNkYgorICAgICAqLwor ICAgIGVsc2UgaWYgKGNzaW8tPmNkYl9sZW4gPT0gMTApIHsKKyAgICAgICAgZGF0YWxlbmd0aCA9 ICh1X2ludDMyX3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1s4XSB8CisgICAgICAgICAgICAgICAg ICAgICAgICgodV9pbnQzMl90KWNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbN10gPDwgOCk7CisgICAg ICAgIHN0YXJ0X2xiYV9sbyA9ICgodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzJd IDw8IDI0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodV9pbnQzMl90KSBjc2lvLT5jZGJf aW8uY2RiX2J5dGVzWzNdIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAodV9pbnQz Ml90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzRdIDw8IDggfAorICAgICAgICAgICAgICAgICAg ICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbNV0pOworICAgIH0KKyAg ICAvKgorICAgICAqIFJFQURfMTIgKDB4QTgpIG9yIFdSSVRFXzEyICgweEFBKSBjZGIKKyAgICAg Ki8KKyAgICBlbHNlIGlmIChjc2lvLT5jZGJfbGVuID09IDEyKSB7CisgICAgICAgIGRhdGFsZW5n dGggPSAodV9pbnQzMl90KWNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbNl0gPDwgMjQgfAorICAgICAg ICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCljc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzddIDw8 IDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodV9pbnQzMl90KWNzaW8tPmNkYl9pby5j ZGJfYnl0ZXNbOF0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdClj c2lvLT5jZGJfaW8uY2RiX2J5dGVzWzldKTsKKyAgICAgICAgc3RhcnRfbGJhX2xvID0gKCh1X2lu dDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbMl0gPDwgMjQpIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbM10gPDwgMTYpIHwK KyAgICAgICAgICAgICAgICAgICAgICAgICh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0 ZXNbNF0gPDwgOCB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCkgY3Npby0+ Y2RiX2lvLmNkYl9ieXRlc1s1XSk7CisgICAgfQorICAgIC8qCisgICAgICogUkVBRF8xNiAoMHg4 OCkgb3IgV1JJVEVfMTYgKDB4eDhBKSBjZGIKKyAgICAgKi8KKyAgICBlbHNlIGlmIChjc2lvLT5j ZGJfbGVuID09IDE2KSB7CisgICAgICAgIGRhdGFsZW5ndGggPSAodV9pbnQzMl90KWNzaW8tPmNk Yl9pby5jZGJfYnl0ZXNbMTBdIDw8IDI0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgKCh1X2lu dDMyX3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1sxMV0gPDwgMTYpIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgKCh1X2ludDMyX3QpY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1sxMl0gPDwgOCkgfAor ICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCljc2lvLT5jZGJfaW8uY2RiX2J5dGVz WzEzXSk7CisgICAgICAgIHN0YXJ0X2xiYV9sbyA9ICgodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8u Y2RiX2J5dGVzWzZdIDw8IDI0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodV9pbnQzMl90 KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzddIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICAg ICAgICAodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzhdIDw8IDggfAorICAgICAg ICAgICAgICAgICAgICAgICAgKCh1X2ludDMyX3QpIGNzaW8tPmNkYl9pby5jZGJfYnl0ZXNbOV0p OworICAgICAgICBzdGFydF9sYmFfaGkgPSAoKHVfaW50MzJfdCkgY3Npby0+Y2RiX2lvLmNkYl9i eXRlc1syXSA8PCAyNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAoKHVfaW50MzJfdCkgY3Np by0+Y2RiX2lvLmNkYl9ieXRlc1szXSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAg KHVfaW50MzJfdCkgY3Npby0+Y2RiX2lvLmNkYl9ieXRlc1s0XSA8PCA4IHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICgodV9pbnQzMl90KSBjc2lvLT5jZGJfaW8uY2RiX2J5dGVzWzVdKTsKKyAg ICB9CisKKyAgICBtZW1zZXQoJmlvX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgSU9fUkVRVUVTVF9J TkZPKSk7CisgICAgaW9faW5mby5sZFN0YXJ0QmxvY2sgPSAoKHVfaW50NjRfdClzdGFydF9sYmFf aGkgPDwgMzIpIHwgc3RhcnRfbGJhX2xvOworICAgIGlvX2luZm8ubnVtQmxvY2tzID0gZGF0YWxl bmd0aDsKKyAgICBpb19pbmZvLmxkVGd0SWQgPSBkZXZpY2VfaWQ7CisKKyAgICBpZiAoY2NiX2gt PmZsYWdzID09IENBTV9ESVJfSU4pCisgICAgICAgIGlvX2luZm8uaXNSZWFkID0gMTsKKworICAg IG1hcF9wdHIgPSBzYy0+cmFpZG1hcF9tZW1bKHNjLT5tYXBfaWQgJiAxKV07CisgICAgbGRfYmxv Y2tfc2l6ZSA9IE1SX0xkQmxvY2tTaXplR2V0KGRldmljZV9pZCwgbWFwX3B0ciwgc2MpOworCisg ICAgaWYgKChNUl9UYXJnZXRJZFRvTGRHZXQoZGV2aWNlX2lkLCBtYXBfcHRyKSA+PSBNQVhfTE9H SUNBTF9EUklWRVMpIHx8IAorICAgICAgICAgICAgKCFzYy0+ZmFzdF9wYXRoX2lvKSkgeworICAg ICAgICBpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC5yZWdMb2NrRmxhZ3MgPSAwOworICAgICAgICBm cF9wb3NzaWJsZSA9IDA7CisgICAgfSAKKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgaWYgKE1S X0J1aWxkUmFpZENvbnRleHQoc2MsICZpb19pbmZvLCAmaW9fcmVxdWVzdC0+UmFpZENvbnRleHQs IG1hcF9wdHIpKQorICAgICAgICAgICAgZnBfcG9zc2libGUgPSBpb19pbmZvLmZwT2tGb3JJbzsK KyAgICB9CisKKyAgICBpZiAoZnBfcG9zc2libGUpIHsKKyAgICAgICAgbXJzYXNfc2V0X3BkX2xi YShpb19yZXF1ZXN0LCBjc2lvLT5jZGJfbGVuLCAmaW9faW5mbywgY2NiLCBtYXBfcHRyLCAKKyAg ICAgICAgICAgIHN0YXJ0X2xiYV9sbywgbGRfYmxvY2tfc2l6ZSk7CisgICAgICAgIGlvX3JlcXVl c3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q7CisgICAgICAgIGNt ZC0+cmVxdWVzdF9kZXNjLT5TQ1NJSU8uUmVxdWVzdEZsYWdzID0KKyAgICAgICAgICAgICAgICAg ICAgICAgIChNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZCisgICAgICAgICAg ICAgICAgICAgICAgICAgPDwgTVJTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOwor ICAgICAgICBpZiAoKHNjLT5sb2FkX2JhbGFuY2VfaW5mb1tkZXZpY2VfaWRdLmxvYWRCYWxhbmNl RmxhZykgJiYgKGlvX2luZm8uaXNSZWFkKSkgeworICAgICAgICAgICAgaW9faW5mby5kZXZIYW5k bGUgPSBtcnNhc19nZXRfdXBkYXRlZF9kZXZfaGFuZGxlKCZzYy0+bG9hZF9iYWxhbmNlX2luZm9b ZGV2aWNlX2lkXSwgCisgICAgICAgICAgICAgICAgJmlvX2luZm8pOworICAgICAgICAgICAgY21k LT5sb2FkX2JhbGFuY2UgPSBNUlNBU19MT0FEX0JBTEFOQ0VfRkxBRzsKKyAgICAgICAgfSAKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgY21kLT5sb2FkX2JhbGFuY2UgPSAwOworICAgICAgICBj bWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLkRldkhhbmRsZSA9IGlvX2luZm8uZGV2SGFuZGxlOwor ICAgICAgICBpb19yZXF1ZXN0LT5EZXZIYW5kbGUgPSBpb19pbmZvLmRldkhhbmRsZTsKKyAgICB9 IAorICAgIGVsc2UgeworICAgICAgICAvKiBOb3QgRlAgSU8gKi8KKyAgICAgICAgaW9fcmVxdWVz dC0+UmFpZENvbnRleHQudGltZW91dFZhbHVlID0gbWFwX3B0ci0+cmFpZE1hcC5mcFBkSW9UaW1l b3V0U2VjOworICAgICAgICBjbWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9 CisgICAgICAgICAgICAoTVJTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX0xEX0lPIDw8IE1SU0FTX1JF UV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUKTsKKyAgICAgICAgaW9fcmVxdWVzdC0+RnVuY3Rp b24gPSBNUlNBU19NUEkyX0ZVTkNUSU9OX0xEX0lPX1JFUVVFU1Q7CisgICAgICAgIGlvX3JlcXVl c3QtPkRldkhhbmRsZSA9IGRldmljZV9pZDsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisv KioKKyAqIG1yc2FzX2J1aWxkX2RjZGI6ICAgICAgIEJ1aWxkcyBhbiBEQ0RCIGNvbW1hbmQgIAor ICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisg KiAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgcGFja2V0CisgKiAg ICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIENDQiAKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGJ1aWxkcyB0aGUgRENEQiBpbnF1aXJ5IGNvbW1hbmQuICBJdCByZXR1cm5zIDAgaWYgdGhl IAorICogY29tbWFuZCBpcyBidWlsdCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBpdCByZXR1cm5z IGEgMS4gCisgKi8KK2ludCBtcnNhc19idWlsZF9kY2RiKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2Ms IHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgICAgdW5pb24g Y2NiICpjY2IsIHN0cnVjdCBjYW1fc2ltICpzaW0pCit7CisgICAgc3RydWN0IGNjYl9oZHIgKmNj Yl9oID0gJihjY2ItPmNjYl9oKTsKKyAgICB1X2ludDMyX3QgZGV2aWNlX2lkOworICAgIE1SX0ZX X1JBSURfTUFQX0FMTCAqbWFwX3B0cjsKKyAgICBNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAq aW9fcmVxdWVzdDsKKworICAgIGlvX3JlcXVlc3QgPSBjbWQtPmlvX3JlcXVlc3Q7CisgICAgZGV2 aWNlX2lkID0gY2NiX2gtPnRhcmdldF9pZDsKKyAgICBtYXBfcHRyID0gc2MtPnJhaWRtYXBfbWVt WyhzYy0+bWFwX2lkICYgMSldOworCisgICAgLyogQ2hlY2sgaWYgdGhpcyBpcyBmb3Igc3lzdGVt IFBEICovIAorICAgIGlmIChjYW1fc2ltX2J1cyhzaW0pID09IDEgJiYgCisgICAgICAgICAgICBz Yy0+cGRfbGlzdFtkZXZpY2VfaWRdLmRyaXZlU3RhdGUgPT0gTVJfUERfU1RBVEVfU1lTVEVNKSB7 CisgICAgICAgIGlvX3JlcXVlc3QtPkZ1bmN0aW9uID0gMDsKKyAgICAgICAgaW9fcmVxdWVzdC0+ RGV2SGFuZGxlID0gbWFwX3B0ci0+cmFpZE1hcC5kZXZIbmRsSW5mb1tkZXZpY2VfaWRdLmN1ckRl dkhkbDsKKyAgICAgICAgaW9fcmVxdWVzdC0+UmFpZENvbnRleHQudGltZW91dFZhbHVlID0gbWFw X3B0ci0+cmFpZE1hcC5mcFBkSW9UaW1lb3V0U2VjOworICAgICAgICBpb19yZXF1ZXN0LT5SYWlk Q29udGV4dC5yZWdMb2NrRmxhZ3MgPSAwOworICAgICAgICBpb19yZXF1ZXN0LT5SYWlkQ29udGV4 dC5yZWdMb2NrUm93TEJBID0gMDsKKyAgICAgICAgaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVn TG9ja0xlbmd0aCA9IDA7CisgICAgICAgIGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LlJBSURGbGFn cyA9IE1SX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVfU1lTVEVNX1BEIDw8IAorICAgICAgICAgICAg TVJfUkFJRF9DVFhfUkFJRF9GTEFHU19JT19TVUJfVFlQRV9TSElGVDsKKyAgICAgICAgY21kLT5y ZXF1ZXN0X2Rlc2MtPlNDU0lJTy5SZXF1ZXN0RmxhZ3MgPSAKKyAgICAgICAgICAgIChNUEkyX1JF UV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZIDw8IAorICAgICAgICAgICAgTVJTQVNfUkVR X0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOworICAgICAgICBjbWQtPnJlcXVlc3RfZGVzYy0+ U0NTSUlPLkRldkhhbmRsZSA9IAorICAgICAgICAgICAgbWFwX3B0ci0+cmFpZE1hcC5kZXZIbmRs SW5mb1tkZXZpY2VfaWRdLmN1ckRldkhkbDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlv X3JlcXVlc3QtPkZ1bmN0aW9uICA9IE1SU0FTX01QSTJfRlVOQ1RJT05fTERfSU9fUkVRVUVTVDsK KyAgICAgICAgaW9fcmVxdWVzdC0+RGV2SGFuZGxlID0gZGV2aWNlX2lkOworICAgICAgICBjbWQt PnJlcXVlc3RfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9CisgICAgICAgICAgICAoTVBJMl9S RVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTyA8PCBNUlNBU19SRVFfREVTQ1JJUFRfRkxBR1NfVFlQ RV9TSElGVCk7CisgICAgfQorCQorICAgIGlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LlZpcnR1YWxE aXNrVGd0SWQgPSBkZXZpY2VfaWQ7CisgICAgaW9fcmVxdWVzdC0+TFVOWzFdID0gY2NiX2gtPnRh cmdldF9sdW4gJiAweEY7CisgICAgaW9fcmVxdWVzdC0+RGF0YUxlbmd0aCA9IGNtZC0+bGVuZ3Ro OworCisgICAgaWYgKG1yc2FzX21hcF9yZXF1ZXN0KHNjLCBjbWQpID09IFNVQ0NFU1MpIHsKKyAg ICAgICAgaWYgKGNtZC0+c2dlX2NvdW50ID4gc2MtPm1heF9udW1fc2dlKSB7CisgICAgICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJFcnJvcjogc2dlX2NvdW50ICgweCV4KSBl eGNlZWRzIiAKKyAgICAgICAgICAgICAgICAibWF4ICgweCV4KSBhbGxvd2VkXG4iLCBjbWQtPnNn ZV9jb3VudCwgc2MtPm1heF9udW1fc2dlKTsKKyAgICAgICAgICAgIHJldHVybiAoMSk7CisgICAg ICAgIH0KKyAgICAgICAgaW9fcmVxdWVzdC0+UmFpZENvbnRleHQubnVtU0dFID0gY21kLT5zZ2Vf Y291bnQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJEYXRhIG1hcC9sb2FkIGZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4oMSk7Cisg ICAgfSAKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qKgorICogbXJzYXNfbWFwX3JlcXVlc3Q6ICAg ICAgICAgICBNYXAgYW5kIGxvYWQgZGF0YSAgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAg ICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHBhY2tldAorICoKKyAqIEZvciBkYXRhIGZyb20g T1MsIG1hcCBhbmQgbG9hZCB0aGUgZGF0YSBidWZmZXIgaW50byBidXMgc3BhY2UuICBUaGUKKyAq IFNHIGxpc3QgaXMgYnVpbHQgaW4gdGhlIGNhbGxiYWNrLiAgSWYgdGhlICBidXMgZG1hbWFwIGxv YWQgaXMgbm90CisgKiBzdWNjZXNzZnVsLCBjbWQtPmVycm9yX2NvZGUgd2lsbCBjb250YWluIHRo ZSAgZXJyb3IgY29kZSBhbmQgYSAxIGlzIAorICogcmV0dXJuZWQuCisgKi8KK2ludCBtcnNhc19t YXBfcmVxdWVzdChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAq Y21kKQoreworICAgIHVfaW50MzJfdCByZXRjb2RlID0gMDsKKyAgICBzdHJ1Y3QgY2FtX3NpbSAq c2ltOworICAgIGludCBmbGFnID0gQlVTX0RNQV9OT1dBSVQ7CisKKyAgICBzaW0gPSB4cHRfcGF0 aF9zaW0oY21kLT5jY2JfcHRyLT5jY2JfaC5wYXRoKTsKKworICAgIGlmIChjbWQtPmRhdGEgIT0g TlVMTCkgeworICAgICAgICBtdHhfbG9jaygmc2MtPmlvX2xvY2spOworICAgICAgICAvKiBNYXAg ZGF0YSBidWZmZXIgaW50byBidXMgc3BhY2UgKi8KKyAgICAgICAgcmV0Y29kZSA9IGJ1c19kbWFt YXBfbG9hZChzYy0+ZGF0YV90YWcsIGNtZC0+ZGF0YV9kbWFtYXAsIGNtZC0+ZGF0YSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC0+bGVuZ3RoLCBtcnNhc19kYXRhX2xvYWRfY2Is IGNtZCwgZmxhZyk7CisgICAgICAgIG10eF91bmxvY2soJnNjLT5pb19sb2NrKTsKKwlpZiAocmV0 Y29kZSkKKwkgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiYnVzX2RtYW1hcF9sb2Fk KCk6IHJldGNvZGUgPSAlZFxuIiwgcmV0Y29kZSk7CisgICAgICAgIGlmIChyZXRjb2RlID09IEVJ TlBST0dSRVNTKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJy ZXF1ZXN0IGxvYWQgaW4gcHJvZ3Jlc3NcbiIpOworICAgICAgICAgICAgbXJzYXNfZnJlZXplX3Np bXEoY21kLCBzaW0pOworICAgICAgICB9IAorICAgIH0KKyAgICBpZiAoY21kLT5lcnJvcl9jb2Rl KQorICAgICAgICByZXR1cm4oMSk7CisgICAgcmV0dXJuKHJldGNvZGUpOworfQorCisvKioKKyAq IG1yc2FzX3VubWFwX3JlcXVlc3Q6ICAgICAgIFVubWFwIGFuZCB1bmxvYWQgZGF0YSAgIAorICog aW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgcGFja2V0Cisg KgorICogVGhpcyBmdW5jdGlvbiB1bm1hcHMgYW5kIHVubG9hZHMgZGF0YSBmcm9tIE9TLgorICov Cit2b2lkIG1yc2FzX3VubWFwX3JlcXVlc3Qoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0 IG1yc2FzX21wdF9jbWQgKmNtZCkKK3sKKyAgICBpZiAoY21kLT5kYXRhICE9IE5VTEwpIHsKKyAg ICAgICAgaWYgKGNtZC0+ZmxhZ3MgJiBNUlNBU19ESVJfSU4pCisgICAgICAgICAgICBidXNfZG1h bWFwX3N5bmMoc2MtPmRhdGFfdGFnLCBjbWQtPmRhdGFfZG1hbWFwLCBCVVNfRE1BU1lOQ19QT1NU UkVBRCk7CisgICAgICAgIGlmIChjbWQtPmZsYWdzICYgTVJTQVNfRElSX09VVCkKKyAgICAgICAg ICAgIGJ1c19kbWFtYXBfc3luYyhzYy0+ZGF0YV90YWcsIGNtZC0+ZGF0YV9kbWFtYXAsIEJVU19E TUFTWU5DX1BPU1RXUklURSk7CisgICAgICAgIG10eF9sb2NrKCZzYy0+aW9fbG9jayk7CisgICAg ICAgIGJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kYXRhX3RhZywgY21kLT5kYXRhX2RtYW1hcCk7Cisg ICAgICAgIG10eF91bmxvY2soJnNjLT5pb19sb2NrKTsKKyAgICB9Cit9CisKKy8qKgorICogbXJz YXNfZGF0YV9sb2FkX2NiOiAgICAgICAgQ2FsbGJhY2sgZW50cnkgcG9pbnQgICAKKyAqIGlucHV0 OiAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBwYWNrZXQgYXMgYXJndW1l bnQgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHNlZ21lbnQKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzZWdtZW50cworICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgRXJyb3IgCisgKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sg ZnVuY3Rpb24gb2YgdGhlIGJ1cyBkbWEgbWFwIGxvYWQuICBJdCBidWlsZHMgCisgKiB0aGUgU0cg bGlzdC4gIAorICovCitzdGF0aWMgdm9pZAorbXJzYXNfZGF0YV9sb2FkX2NiKHZvaWQgKmFyZywg YnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VnLCBpbnQgZXJyb3IpCit7CisgICAgc3Ry dWN0IG1yc2FzX21wdF9jbWQgKmNtZCA9IChzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqKWFyZzsKKyAg ICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjID0gY21kLT5zYzsKKyAgICBNUlNBU19SQUlEX1NDU0lf SU9fUkVRVUVTVCAqaW9fcmVxdWVzdDsKKyAgICBwTXBpMjVJZWVlU2dlQ2hhaW42NF90IHNnbF9w dHI7CisgICAgaW50IGk9MCwgc2dfcHJvY2Vzc2VkPTA7CisKKyAgICBpZiAoZXJyb3IpCisgICAg eworICAgICAgICBjbWQtPmVycm9yX2NvZGUgPSBlcnJvcjsKKyAgICAgICAgZGV2aWNlX3ByaW50 ZihzYy0+bXJzYXNfZGV2LCAibXJzYXNfZGF0YV9sb2FkX2NiOiBlcnJvcj0lZFxuIiwgZXJyb3Ip OworICAgICAgICBpZiAoZXJyb3IgPT0gRUZCSUcpIHsKKyAgICAgICAgICAgIGNtZC0+Y2NiX3B0 ci0+Y2NiX2guc3RhdHVzID0gQ0FNX1JFUV9UT09fQklHOworICAgICAgICAgICAgcmV0dXJuOwor ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNtZC0+ZmxhZ3MgJiBNUlNBU19ESVJfSU4pCisg ICAgICAgIGJ1c19kbWFtYXBfc3luYyhjbWQtPnNjLT5kYXRhX3RhZywgY21kLT5kYXRhX2RtYW1h cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQVNZ TkNfUFJFUkVBRCk7CisgICAgaWYgKGNtZC0+ZmxhZ3MgJiBNUlNBU19ESVJfT1VUKQorICAgICAg ICBidXNfZG1hbWFwX3N5bmMoY21kLT5zYy0+ZGF0YV90YWcsIGNtZC0+ZGF0YV9kbWFtYXAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFTWU5DX1BS RVdSSVRFKTsKKyAgICBpZiAobnNlZyA+IHNjLT5tYXhfbnVtX3NnZSkgeworICAgICAgICBkZXZp Y2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJTR0UgY291bnQgaXMgdG9vIGxhcmdlIG9yIDAuXG4i KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlvX3JlcXVlc3QgPSBjbWQtPmlvX3Jl cXVlc3Q7CisgICAgc2dsX3B0ciA9IChwTXBpMjVJZWVlU2dlQ2hhaW42NF90KSZpb19yZXF1ZXN0 LT5TR0w7CisKKyAgICBpZiAobnNlZyAhPSAwKSB7CisgICAgICAgIGZvciAoaT0wOyBpIDwgbnNl ZzsgaSsrKSB7CisgICAgICAgICAgICBzZ2xfcHRyLT5BZGRyZXNzID0gc2Vnc1tpXS5kc19hZGRy OworICAgICAgICAgICAgc2dsX3B0ci0+TGVuZ3RoID0gc2Vnc1tpXS5kc19sZW47CisgICAgICAg ICAgICBzZ2xfcHRyLT5GbGFncyA9IDA7CisJICAgIHNnbF9wdHIrKzsKKwkgICAgc2dfcHJvY2Vz c2VkID0gaSArIDE7CisJICAgIC8qIAorICAgICAgICAgICAgICogUHJlcGFyZSBjaGFpbiBlbGVt ZW50IAorICAgICAgICAgICAgICovCisJICAgIGlmICgoc2dfcHJvY2Vzc2VkID09IChzYy0+bWF4 X3NnZV9pbl9tYWluX21zZyAtIDEpKSAmJgorCQkobnNlZyA+IHNjLT5tYXhfc2dlX2luX21haW5f bXNnKSkgeworICAgICAgICAgICAgICAgIHBNcGkyNUllZWVTZ2VDaGFpbjY0X3Qgc2dfY2hhaW47 CisJICAgICAgICBjbWQtPmlvX3JlcXVlc3QtPkNoYWluT2Zmc2V0ID0gc2MtPmNoYWluX29mZnNl dF9pb19yZXF1ZXN0OworCSAgICAgICAgc2dfY2hhaW4gPSBzZ2xfcHRyOworCSAgICAgICAgc2df Y2hhaW4tPkZsYWdzID0gCisgICAgICAgICAgICAgICAgICAgIChJRUVFX1NHRV9GTEFHU19DSEFJ Tl9FTEVNRU5UIHwgTVBJMl9JRUVFX1NHRV9GTEFHU19JT0NQTEJOVEFfQUREUik7CisJICAgICAg ICBzZ19jaGFpbi0+TGVuZ3RoID0gKHNpemVvZihNUEkyX1NHRV9JT19VTklPTikgKiAobnNlZyAt IHNnX3Byb2Nlc3NlZCkpOworCSAgICAgICAgc2dfY2hhaW4tPkFkZHJlc3MgPSBjbWQtPmNoYWlu X2ZyYW1lX3BoeXNfYWRkcjsKKwkgICAgICAgIHNnbF9wdHIgPSAocE1waTI1SWVlZVNnZUNoYWlu NjRfdCljbWQtPmNoYWluX2ZyYW1lOworCSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY21k LT5zZ2VfY291bnQgPSBuc2VnOworfQorCisvKioKKyAqIG1yc2FzX2ZyZWV6ZV9zaW1xOiAgICAg ICAgRnJlZXplIFNJTSBxdWV1ZSAgIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICBQb2lu dGVyIHRvIGNvbW1hbmQgcGFja2V0ICAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9p bnRlciB0byBTSU0KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWV6ZXMgdGhlIHNpbSBxdWV1ZS4K KyAqLworc3RhdGljIHZvaWQgbXJzYXNfZnJlZXplX3NpbXEoc3RydWN0IG1yc2FzX21wdF9jbWQg KmNtZCwgc3RydWN0IGNhbV9zaW0gKnNpbSkKK3sKKyAgICB1bmlvbiBjY2IgICAqY2NiID0gKHVu aW9uIGNjYiAqKShjbWQtPmNjYl9wdHIpOworCisgICAgeHB0X2ZyZWV6ZV9zaW1xKHNpbSwgMSk7 CisgICAgY2NiLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX1JFTEVBU0VfU0lNUTsKKyAgICBjY2ItPmNj Yl9oLnN0YXR1cyB8PSBDQU1fUkVRVUVVRV9SRVE7Cit9CisKK3ZvaWQgbXJzYXNfeHB0X2ZyZWV6 ZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKSB7CisgICAgeHB0X2ZyZWV6ZV9zaW1xKHNjLT5zaW1f MCwgMSk7CisgICAgeHB0X2ZyZWV6ZV9zaW1xKHNjLT5zaW1fMSwgMSk7Cit9CisgICAgICAgICAg ICAKK3ZvaWQgbXJzYXNfeHB0X3JlbGVhc2Uoc3RydWN0IG1yc2FzX3NvZnRjICpzYykgeworICAg IHhwdF9yZWxlYXNlX3NpbXEoc2MtPnNpbV8wLCAxKTsKKyAgICB4cHRfcmVsZWFzZV9zaW1xKHNj LT5zaW1fMSwgMSk7Cit9CisKKy8qKgorICogbXJzYXNfY21kX2RvbmU6ICAgICAgICAgICBQZXJm b3JtIHJlbWFpbmluZyBjb21tYW5kIGNvbXBsZXRpb24gCisgKiBpbnB1dDogICAgICAgICAgICAg ICAgICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZSAgCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBwYWNrZXQgCisgKgorICogVGhpcyBmdW5jdGlv biBjYWxscyB1bW1hcCByZXF1ZXN0IGFuZCByZWxlYXNlcyB0aGUgTVBUIGNvbW1hbmQuIAorICov Cit2b2lkIG1yc2FzX2NtZF9kb25lKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNh c19tcHRfY21kICpjbWQpCit7CisgICAgY2FsbG91dF9zdG9wKCZjbWQtPmNtX2NhbGxvdXQpOwor ICAgIG1yc2FzX3VubWFwX3JlcXVlc3Qoc2MsIGNtZCk7CisgICAgbXR4X2xvY2soJnNjLT5zaW1f bG9jayk7CisgICAgeHB0X2RvbmUoY21kLT5jY2JfcHRyKTsKKyAgICBjbWQtPmNjYl9wdHIgPSBO VUxMOworICAgIG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7CisgICAgbXJzYXNfcmVsZWFzZV9t cHRfY21kKGNtZCk7Cit9CisKKy8qKgorICogbXJzYXNfcG9sbDogICAgICAgICAgICAgICBQb2xs aW5nIGVudHJ5IHBvaW50IAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRv IFNJTSAgCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgYSBzdHViIGZ1bmN0aW9uLgorICovCitz dGF0aWMgdm9pZCBtcnNhc19wb2xsKHN0cnVjdCBjYW1fc2ltICpzaW0pCit7CisgICAgc3RydWN0 IG1yc2FzX3NvZnRjICpzYyA9IChzdHJ1Y3QgbXJzYXNfc29mdGMgKiljYW1fc2ltX3NvZnRjKHNp bSk7CisgICAgbXJzYXNfaXNyKCh2b2lkICopIHNjKTsKK30KKworLyoKKyAqIG1yc2FzX2J1c19z Y2FuOiAgICAgICAgICAgUGVyZm9ybSBidXMgc2NhbiAKKyAqIGlucHV0OiAgICAgICAgICAgICAg ICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlICAKKyAqCisgKiBUaGlzIG1yc2FzX2J1 c19zY2FuIGZ1bmN0aW9uIGlzIG5lZWRlZCBmb3IgRnJlZUJTRCA3LnguICBBbHNvLCBpdCBzaG91 bGQKKyAqIG5vdCBiZSBjYWxsZWQgaW4gRnJlZUJTRCA4LnggYW5kIGxhdGVyIHZlcnNpb25zLCB3 aGVyZSB0aGUgYnVzIHNjYW4gaXMgCisgKiBhdXRvbWF0aWMuIAorICovIAoraW50IG1yc2FzX2J1 c19zY2FuKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgdW5pb24gY2NiICpjY2JfMDsK KyAgICB1bmlvbiBjY2IgKmNjYl8xOworCisgICAgbXR4X2xvY2soJnNjLT5zaW1fbG9jayk7Cisg ICAgaWYgKChjY2JfMCA9IHhwdF9hbGxvY19jY2IoKSkgPT0gTlVMTCkgeworICAgICAgICBtdHhf dW5sb2NrKCZzYy0+c2ltX2xvY2spOworICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisK KyAgICBpZiAoKGNjYl8xID0geHB0X2FsbG9jX2NjYigpKSA9PSBOVUxMKSB7CisJeHB0X2ZyZWVf Y2NiKGNjYl8wKTsKKyAgICAgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICAgICAg cmV0dXJuKEVOT01FTSk7CisgICAgfSAKKworICAgIGlmICh4cHRfY3JlYXRlX3BhdGgoJmNjYl8w LT5jY2JfaC5wYXRoLCB4cHRfcGVyaXBoLCBjYW1fc2ltX3BhdGgoc2MtPnNpbV8wKSwKKyAgICAg ICAgICAgIENBTV9UQVJHRVRfV0lMRENBUkQsIENBTV9MVU5fV0lMRENBUkQpICE9IENBTV9SRVFf Q01QKXsKKyAgICAgICAgeHB0X2ZyZWVfY2NiKGNjYl8wKTsKKyAgICAgICAgeHB0X2ZyZWVfY2Ni KGNjYl8xKTsKKyAgICAgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICAgICAgcmV0 dXJuKEVJTyk7CisgICAgfQorCisgICAgaWYgKHhwdF9jcmVhdGVfcGF0aCgmY2NiXzEtPmNjYl9o LnBhdGgsIHhwdF9wZXJpcGgsIGNhbV9zaW1fcGF0aChzYy0+c2ltXzEpLAorICAgICAgICAgICAg Q0FNX1RBUkdFVF9XSUxEQ0FSRCwgQ0FNX0xVTl9XSUxEQ0FSRCkgIT0gQ0FNX1JFUV9DTVApewor ICAgICAgICB4cHRfZnJlZV9jY2IoY2NiXzApOworICAgICAgICB4cHRfZnJlZV9jY2IoY2NiXzEp OworICAgICAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOworICAgICAgICByZXR1cm4oRUlP KTsKKyAgICB9CisKKyAgICB4cHRfcmVzY2FuKGNjYl8wKTsKKyAgICB4cHRfcmVzY2FuKGNjYl8x KTsKKyAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOworCisgICAgcmV0dXJuKDApOworfQor CisvKgorICogbXJzYXNfYnVzX3NjYW5fc2ltOgkJUGVyZm9ybSBidXMgc2NhbiBwZXIgU0lNCisg KiBpbnB1dDoJCQkJCUFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZSAgCisgKiAJCQkJCQkJVGhp cyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIEV2ZW50IGhhbmRsZXIgCisgKiAJCQkJCQkJ b24gTEQgY3JlYXRpb24vZGVsZXRpb24sIEpCT0Qgb24vb2ZmLgorICovIAoraW50IG1yc2FzX2J1 c19zY2FuX3NpbShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgY2FtX3NpbSAqc2ltKQor eworICAgIHVuaW9uIGNjYiAqY2NiOworCisgICAgbXR4X2xvY2soJnNjLT5zaW1fbG9jayk7Cisg ICAgaWYgKChjY2IgPSB4cHRfYWxsb2NfY2NiKCkpID09IE5VTEwpIHsKKyAgICAgICAgbXR4X3Vu bG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorICAg IGlmICh4cHRfY3JlYXRlX3BhdGgoJmNjYi0+Y2NiX2gucGF0aCwgeHB0X3BlcmlwaCwgY2FtX3Np bV9wYXRoKHNpbSksCisgICAgICAgICAgICBDQU1fVEFSR0VUX1dJTERDQVJELCBDQU1fTFVOX1dJ TERDQVJEKSAhPSBDQU1fUkVRX0NNUCl7CisgICAgICAgIHhwdF9mcmVlX2NjYihjY2IpOworICAg ICAgICBtdHhfdW5sb2NrKCZzYy0+c2ltX2xvY2spOworICAgICAgICByZXR1cm4oRUlPKTsKKyAg ICB9CisgICAgeHB0X3Jlc2NhbihjY2IpOworICAgIG10eF91bmxvY2soJnNjLT5zaW1fbG9jayk7 CisKKyAgICByZXR1cm4oMCk7Cit9CkluZGV4OiBzeXMvZGV2L21yc2FzL21yc2FzX2ZwLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3lzL2Rldi9tcnNhcy9tcnNhc19mcC5jCShyZXZpc2lvbiAwKQorKysgc3lz L2Rldi9tcnNhcy9tcnNhc19mcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkwIEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBMU0kgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95CisgKiBTdXBwb3J0OiBmcmVlYnNkcmFpZEBsc2ku Y29tCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxP UkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF CisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQg aW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1 dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBv ZmZpY2lhbCBwb2xpY2llcyxlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVl QlNEIFByb2plY3QuCisgKgorICogU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkZmJzZEBsc2ku Y29tPgorICogTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxw aXRhcywgQ0EgOTUwMzUKKyAqICAgIEFUVE46IE1lZ2FSYWlkIEZyZWVCU0QKKyAqCisgKi8KKwor I2luY2x1ZGUgPGRldi9tcnNhcy9tcnNhcy5oPgorCisjaW5jbHVkZSA8Y2FtL2NhbS5oPgorI2lu Y2x1ZGUgPGNhbS9jYW1fY2NiLmg+CisjaW5jbHVkZSA8Y2FtL2NhbV9zaW0uaD4KKyNpbmNsdWRl IDxjYW0vY2FtX3hwdF9zaW0uaD4KKyNpbmNsdWRlIDxjYW0vY2FtX2RlYnVnLmg+CisjaW5jbHVk ZSA8Y2FtL2NhbV9wZXJpcGguaD4KKyNpbmNsdWRlIDxjYW0vY2FtX3hwdF9wZXJpcGguaD4KKwor CisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcworICovCit1X2ludDhfdCBNUl9WYWxpZGF0ZU1h cEluZm8oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit1X2ludDhfdCBtcnNhc19nZXRfYmVzdF9h cm0oUExEX0xPQURfQkFMQU5DRV9JTkZPIGxiSW5mbywgdV9pbnQ4X3QgYXJtLCAKKyAgICAgICB1 X2ludDY0X3QgYmxvY2ssIHVfaW50MzJfdCBjb3VudCk7Cit1X2ludDhfdCBNUl9CdWlsZFJhaWRD b250ZXh0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIAorICAgICAgICBzdHJ1Y3QgSU9fUkVRVUVT VF9JTkZPICppb19pbmZvLAorICAgICAgICBSQUlEX0NPTlRFWFQgKnBSQUlEX0NvbnRleHQsIE1S X0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsKK3VfaW50OF90IE1SX0dldFBoeVBhcmFtcyhzdHJ1Y3Qg bXJzYXNfc29mdGMgKnNjLCB1X2ludDMyX3QgbGQsIAorICAgICAgICB1X2ludDY0X3Qgc3RyaXBS b3csIHVfaW50MTZfdCBzdHJpcFJlZiwgdV9pbnQ2NF90ICpwZEJsb2NrLAorICAgICAgICB1X2lu dDE2X3QgKnBEZXZIYW5kbGUsICBSQUlEX0NPTlRFWFQgKnBSQUlEX0NvbnRleHQsIAorICAgICAg ICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7Cit1X2ludDE2X3QgTVJfVGFyZ2V0SWRUb0xkR2V0 KHVfaW50MzJfdCBsZFRndElkLCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7Cit1X2ludDMyX3Qg TVJfTGRCbG9ja1NpemVHZXQodV9pbnQzMl90IGxkVGd0SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAq bWFwKTsKK3VfaW50MTZfdCBNUl9HZXRMRFRndElkKHVfaW50MzJfdCBsZCwgTVJfRldfUkFJRF9N QVBfQUxMICptYXApOwordV9pbnQxNl90IG1yc2FzX2dldF91cGRhdGVkX2Rldl9oYW5kbGUoUExE X0xPQURfQkFMQU5DRV9JTkZPIGxiSW5mbywgCisgICAgICAgIHN0cnVjdCBJT19SRVFVRVNUX0lO Rk8gKmlvX2luZm8pOwordV9pbnQzMl90IG1lZ2FfbW9kNjQodV9pbnQ2NF90IGRpdmlkZW5kLCB1 X2ludDMyX3QgZGl2aXNvcik7Cit1X2ludDMyX3QgTVJfR2V0U3BhbkJsb2NrKHVfaW50MzJfdCBs ZCwgdV9pbnQ2NF90IHJvdywgdV9pbnQ2NF90ICpzcGFuX2JsaywgCisgICAgICAgIE1SX0ZXX1JB SURfTUFQX0FMTCAqbWFwLCBpbnQgKmRpdl9lcnJvcik7Cit1X2ludDY0X3QgbWVnYV9kaXY2NF8z Mih1X2ludDY0X3QgZGl2aWRlbmQsIHVfaW50MzJfdCBkaXZpc29yKTsKK3ZvaWQgbXJzYXNfdXBk YXRlX2xvYWRfYmFsYW5jZV9wYXJhbXMoTVJfRldfUkFJRF9NQVBfQUxMICptYXAsIAorICAgICAg ICBQTERfTE9BRF9CQUxBTkNFX0lORk8gbGJJbmZvKTsKK3ZvaWQgbXJzYXNfc2V0X3BkX2xiYShN UlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCwgCisgICAgICAgIHVfaW50OF90 IGNkYl9sZW4sIHN0cnVjdCBJT19SRVFVRVNUX0lORk8gKmlvX2luZm8sIHVuaW9uIGNjYiAqY2Ni LAorICAgICAgICBNUl9GV19SQUlEX01BUF9BTEwgKmxvY2FsX21hcF9wdHIsIHVfaW50MzJfdCBy ZWZfdGFnLAorICAgICAgICB1X2ludDMyX3QgbGRfYmxvY2tfc2l6ZSk7CitzdGF0aWMgdV9pbnQx Nl90IE1SX0xkU3BhbkFycmF5R2V0KHVfaW50MzJfdCBsZCwgdV9pbnQzMl90IHNwYW4sIAorICAg ICAgICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7CitzdGF0aWMgdV9pbnQxNl90IE1SX1BkRGV2 SGFuZGxlR2V0KHVfaW50MzJfdCBwZCwgTVJfRldfUkFJRF9NQVBfQUxMICptYXApOworc3RhdGlj IHVfaW50MTZfdCBNUl9BclBkR2V0KHVfaW50MzJfdCBhciwgdV9pbnQzMl90IGFybSwgCisgICAg ICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsKK3N0YXRpYyBNUl9MRF9TUEFOICpNUl9MZFNw YW5QdHJHZXQodV9pbnQzMl90IGxkLCB1X2ludDMyX3Qgc3BhbiwgCisgICAgICAgIE1SX0ZXX1JB SURfTUFQX0FMTCAqbWFwKTsKK3N0YXRpYyB1X2ludDhfdCBNUl9MZERhdGFBcm1HZXQodV9pbnQz Ml90IGxkLCB1X2ludDMyX3QgYXJtSWR4LCAKKyAgICAgICAgTVJfRldfUkFJRF9NQVBfQUxMICpt YXApOworc3RhdGljIE1SX1NQQU5fQkxPQ0tfSU5GTyAqTVJfTGRTcGFuSW5mb0dldCh1X2ludDMy X3QgbGQsIAorICAgICAgICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7CitNUl9MRF9SQUlEICpN Ul9MZFJhaWRHZXQodV9pbnQzMl90IGxkLCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7CisKKwor LyoKKyAqIFJlbGF0ZWQgRGVmaW5lcworICovCisKK3R5cGVkZWYgdV9pbnQ2NF90ICBSRUdJT05f S0VZOwordHlwZWRlZiB1X2ludDMyX3QgIFJFR0lPTl9MRU47CisKKyNkZWZpbmUgTVJfTERfU1RB VEVfT1BUSU1BTCAzCisjZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgVFJVRSAxCisKKworLyoKKyAq IFJlbGF0ZWQgTWFjcm9zCisgKi8KKworI2RlZmluZSBBQlNfRElGRihhLGIpICAgKCAoKGEpID4g KGIpKSA/ICgoYSkgLSAoYikpIDogKChiKSAtIChhKSkgKQorCisjZGVmaW5lIHN3YXAzMih4KSBc CisgICgodW5zaWduZWQgaW50KSggXAorICAgICgoKHVuc2lnbmVkIGludCkoeCkgJiAodW5zaWdu ZWQgaW50KTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgXAorICAgICgoKHVuc2lnbmVkIGludCkoeCkg JiAodW5zaWduZWQgaW50KTB4MDAwMGZmMDBVTCkgPDwgIDgpIHwgXAorICAgICgoKHVuc2lnbmVk IGludCkoeCkgJiAodW5zaWduZWQgaW50KTB4MDBmZjAwMDBVTCkgPj4gIDgpIHwgXAorICAgICgo KHVuc2lnbmVkIGludCkoeCkgJiAodW5zaWduZWQgaW50KTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkp CisKKworLyoKKyAqIEluLWxpbmUgZnVuY3Rpb25zIGZvciBtb2QgYW5kIGRpdmlkZSBvZiA2NC1i aXQgZGl2aWRlbmQgYW5kIDMyLWJpdCBkaXZpc29yLgorICogQXNzdW1lcyBhIGNoZWNrIGZvciBh IGRpdmlzb3Igb2YgemVybyBpcyBub3QgcG9zc2libGUuIAorICogCisgKiBAcGFyYW0gZGl2aWRl bmQgICA6IERpdmlkZW5kCisgKiBAcGFyYW0gZGl2aXNvciAgICA6IERpdmlzb3IKKyAqIEByZXR1 cm4gcmVtYWluZGVyCisgKi8KKworI2RlZmluZSBtZWdhX21vZDY0KGRpdmlkZW5kLCBkaXZpc29y KSAoeyBcCitpbnQgcmVtYWluZGVyOyBcCityZW1haW5kZXIgPSAoKHVfaW50NjRfdCkgKGRpdmlk ZW5kKSkgJSAodV9pbnQzMl90KSAoZGl2aXNvcik7IFwKK3JlbWFpbmRlcjt9KQorCisjZGVmaW5l IG1lZ2FfZGl2NjRfMzIoZGl2aWRlbmQsIGRpdmlzb3IpICh7IFwKK2ludCBxdW90aWVudDsgXAor cXVvdGllbnQgPSAoKHVfaW50NjRfdCkgKGRpdmlkZW5kKSkgLyAodV9pbnQzMl90KSAoZGl2aXNv cik7IFwKK3F1b3RpZW50O30pCisKKworLyoKKyAqIFZhcmlvdXMgUkFJRCBtYXAgYWNjZXNzIGZ1 bmN0aW9ucy4gIFRoZXNlIGZ1bmN0aW9ucyBhY2Nlc3MgdGhlIHZhcmlvdXMKKyAqIHBhcnRzIG9m IHRoZSBSQUlEIG1hcCBhbmQgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgcGFyYW1ldGVycy4gCisg Ki8KKworTVJfTERfUkFJRCAqTVJfTGRSYWlkR2V0KHVfaW50MzJfdCBsZCwgTVJfRldfUkFJRF9N QVBfQUxMICptYXApCit7CisgICAgcmV0dXJuICgmbWFwLT5yYWlkTWFwLmxkU3Bhbk1hcFtsZF0u bGRSYWlkKTsKK30KKwordV9pbnQxNl90IE1SX0dldExEVGd0SWQodV9pbnQzMl90IGxkLCBNUl9G V19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKyAgICByZXR1cm4gKG1hcC0+cmFpZE1hcC5sZFNwYW5N YXBbbGRdLmxkUmFpZC50YXJnZXRJZCk7Cit9CisKK3N0YXRpYyB1X2ludDE2X3QgTVJfTGRTcGFu QXJyYXlHZXQodV9pbnQzMl90IGxkLCB1X2ludDMyX3Qgc3BhbiwgTVJfRldfUkFJRF9NQVBfQUxM ICptYXApCit7CisgICAgcmV0dXJuIG1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLnNwYW5CbG9j a1tzcGFuXS5zcGFuLmFycmF5UmVmOworfQorCitzdGF0aWMgdV9pbnQ4X3QgTVJfTGREYXRhQXJt R2V0KHVfaW50MzJfdCBsZCwgdV9pbnQzMl90IGFybUlkeCwgTVJfRldfUkFJRF9NQVBfQUxMICpt YXApCit7CisgICAgcmV0dXJuIG1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLmRhdGFBcm1NYXBb YXJtSWR4XTsKK30KKworc3RhdGljIHVfaW50MTZfdCBNUl9QZERldkhhbmRsZUdldCh1X2ludDMy X3QgcGQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQoreworICAgIHJldHVybiBtYXAtPnJhaWRN YXAuZGV2SG5kbEluZm9bcGRdLmN1ckRldkhkbDsKK30KKworc3RhdGljIHVfaW50MTZfdCBNUl9B clBkR2V0KHVfaW50MzJfdCBhciwgdV9pbnQzMl90IGFybSwgTVJfRldfUkFJRF9NQVBfQUxMICpt YXApCit7CisgICAgcmV0dXJuIG1hcC0+cmFpZE1hcC5hck1hcEluZm9bYXJdLnBkW2FybV07Cit9 CisKK3N0YXRpYyBNUl9MRF9TUEFOICpNUl9MZFNwYW5QdHJHZXQodV9pbnQzMl90IGxkLCB1X2lu dDMyX3Qgc3BhbiwgTVJfRldfUkFJRF9NQVBfQUxMICptYXApCit7CisgICAgcmV0dXJuICZtYXAt PnJhaWRNYXAubGRTcGFuTWFwW2xkXS5zcGFuQmxvY2tbc3Bhbl0uc3BhbjsKK30KKworc3RhdGlj IE1SX1NQQU5fQkxPQ0tfSU5GTyAqTVJfTGRTcGFuSW5mb0dldCh1X2ludDMyX3QgbGQsIE1SX0ZX X1JBSURfTUFQX0FMTCAqbWFwKQoreworICAgIHJldHVybiAmbWFwLT5yYWlkTWFwLmxkU3Bhbk1h cFtsZF0uc3BhbkJsb2NrWzBdOworfQorCit1X2ludDE2X3QgTVJfVGFyZ2V0SWRUb0xkR2V0KHVf aW50MzJfdCBsZFRndElkLCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKyAgICByZXR1cm4g bWFwLT5yYWlkTWFwLmxkVGd0SWRUb0xkW2xkVGd0SWRdOworfQorCit1X2ludDMyX3QgTVJfTGRC bG9ja1NpemVHZXQodV9pbnQzMl90IGxkVGd0SWQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQor eworICAgIE1SX0xEX1JBSUQgKnJhaWQ7CisgICAgdV9pbnQzMl90IGxkLCBsZEJsb2NrU2l6ZSA9 IE1SU0FTX1NDU0lCTE9DS1NJWkU7CisKKyAgICBsZCA9IE1SX1RhcmdldElkVG9MZEdldChsZFRn dElkLCBtYXApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiBsb2dpY2FsIGRyaXZlIHdhcyBy ZW1vdmVkLgorICAgICAqLworICAgIGlmIChsZCA+PSBNQVhfTE9HSUNBTF9EUklWRVMpCisgICAg ICAgIHJldHVybiBsZEJsb2NrU2l6ZTsKKworICAgIHJhaWQgPSBNUl9MZFJhaWRHZXQobGQsIG1h cCk7CisgICAgbGRCbG9ja1NpemUgPSByYWlkLT5sb2dpY2FsQmxvY2tMZW5ndGg7CisgICAgaWYg KCFsZEJsb2NrU2l6ZSkKKyAgICAgICAgbGRCbG9ja1NpemUgPSBNUlNBU19TQ1NJQkxPQ0tTSVpF OworCisgICAgcmV0dXJuIGxkQmxvY2tTaXplOworfQorCisvKioKKyAqIE1SX1ZhbGlkYXRlTWFw SW5mbzogICAgICAgIFZhbGlkYXRlIFJBSUQgbWFwCisgKiBpbnB1dDogICAgICAgICAgICAgICAg ICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNo ZWNrcyBhbmQgdmFsaWRhdGVzIHRoZSBsb2FkZWQgUkFJRCBtYXAuIEl0IHJldHVybnMgMCBpZiAK KyAqIHN1Y2Nlc3NmdWwsIGFuZCAxIG90aGVyd2lzZS4KKyAqLwordV9pbnQ4X3QgTVJfVmFsaWRh dGVNYXBJbmZvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgdWludDMyX3QgdG90YWxf bWFwX3N6OworICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwID0gc2MtPnJhaWRtYXBfbWVtWyhz Yy0+bWFwX2lkICYgMSldOworICAgIE1SX0ZXX1JBSURfTUFQICpwRndSYWlkTWFwID0gJm1hcC0+ cmFpZE1hcDsKKworICAgIHRvdGFsX21hcF9zeiA9IChzaXplb2YoTVJfRldfUkFJRF9NQVApIC0g c2l6ZW9mKE1SX0xEX1NQQU5fTUFQKSArCisgICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKE1S X0xEX1NQQU5fTUFQKSAqIHBGd1JhaWRNYXAtPmxkQ291bnQpKTsKKworICAgIGlmIChwRndSYWlk TWFwLT50b3RhbFNpemUgIT0gdG90YWxfbWFwX3N6KSB7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIm1hcCBzaXplICV4IG5vdCBtYXRjaGluZyBsZCBjb3VudFxuIiwgdG90 YWxfbWFwX3N6KTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAic3BhbiBt YXA9ICV4XG4iLCAodW5zaWduZWQgaW50KXNpemVvZihNUl9MRF9TUEFOX01BUCkpOworICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJwRndSYWlkTWFwLT50b3RhbFNpemU9JXhc biIsIHBGd1JhaWRNYXAtPnRvdGFsU2l6ZSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAg ICBtcnNhc191cGRhdGVfbG9hZF9iYWxhbmNlX3BhcmFtcyhtYXAsIHNjLT5sb2FkX2JhbGFuY2Vf aW5mbyk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoqCisqIE1SX0J1aWxkUmFpZENvbnRleHQ6 ICAgICAgICAgICBTZXQgdXAgRmFzdCBwYXRoIFJBSUQgY29udGV4dAorKgorKiBUaGlzIGZ1bmN0 aW9uIHdpbGwgaW5pdGlhdGUgY29tbWFuZCBwcm9jZXNzaW5nLiAgVGhlIHN0YXJ0L2VuZCByb3cg CisqIGFuZCBzdHJpcCBpbmZvcm1hdGlvbiBpcyBjYWxjdWxhdGVkIHRoZW4gdGhlIGxvY2sgaXMg YWNxdWlyZWQuCisqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiByZWdpb24gbG9jayB3 YXMgYWNxdWlyZWQgT1IgcmV0dXJuIAorKiBudW0gc3RyaXBzLgorKi8KK3VfaW50OF90IAorTVJf QnVpbGRSYWlkQ29udGV4dChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgSU9fUkVRVUVT VF9JTkZPICppb19pbmZvLAorICAgICAgICAgICAgICAgICAgICBSQUlEX0NPTlRFWFQgKnBSQUlE X0NvbnRleHQsIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQoreworICAgIE1SX0xEX1JBSUQgKnJh aWQ7CisgICAgdV9pbnQzMl90IGxkLCBzdHJpcFNpemUsIHN0cmlwZV9tYXNrOworICAgIHVfaW50 NjRfdCBlbmRMYmEsIGVuZFN0cmlwLCBlbmRSb3csIHN0YXJ0X3Jvdywgc3RhcnRfc3RyaXA7Cisg ICAgUkVHSU9OX0tFWSByZWdTdGFydDsKKyAgICBSRUdJT05fTEVOIHJlZ1NpemU7CisgICAgdV9p bnQ4X3QgbnVtX3N0cmlwcywgbnVtUm93czsKKyAgICB1X2ludDE2X3QgcmVmX2luX3N0YXJ0X3N0 cmlwZSwgcmVmX2luX2VuZF9zdHJpcGU7CisgICAgdV9pbnQ2NF90IGxkU3RhcnRCbG9jazsKKyAg ICB1X2ludDMyX3QgbnVtQmxvY2tzLCBsZFRndElkOworICAgIHVfaW50OF90IGlzUmVhZCwgc3Ry aXBJZHg7CisgICAgdV9pbnQ4X3QgcmV0dmFsID0gMDsKKworICAgIGxkU3RhcnRCbG9jayA9IGlv X2luZm8tPmxkU3RhcnRCbG9jazsKKyAgICBudW1CbG9ja3MgPSBpb19pbmZvLT5udW1CbG9ja3M7 CisgICAgbGRUZ3RJZCA9IGlvX2luZm8tPmxkVGd0SWQ7CisgICAgaXNSZWFkID0gaW9faW5mby0+ aXNSZWFkOworCisgICAgbGQgPSBNUl9UYXJnZXRJZFRvTGRHZXQobGRUZ3RJZCwgbWFwKTsKKyAg ICByYWlkID0gTVJfTGRSYWlkR2V0KGxkLCBtYXApOworCisgICAgc3RyaXBTaXplID0gMSA8PCBy YWlkLT5zdHJpcGVTaGlmdDsKKyAgICBzdHJpcGVfbWFzayA9IHN0cmlwU2l6ZS0xOworICAgIC8q CisgICAgICogY2FsY3VsYXRlIHN0YXJ0aW5nIHJvdyBhbmQgc3RyaXBlLCBhbmQgbnVtYmVyIG9m IHN0cmlwcyBhbmQgcm93cworICAgICAqLworICAgIHN0YXJ0X3N0cmlwID0gbGRTdGFydEJsb2Nr ID4+IHJhaWQtPnN0cmlwZVNoaWZ0OworICAgIHJlZl9pbl9zdGFydF9zdHJpcGUgPSAodV9pbnQx Nl90KShsZFN0YXJ0QmxvY2sgJiBzdHJpcGVfbWFzayk7CisgICAgZW5kTGJhID0gbGRTdGFydEJs b2NrICsgbnVtQmxvY2tzIC0gMTsKKyAgICByZWZfaW5fZW5kX3N0cmlwZSA9ICh1X2ludDE2X3Qp KGVuZExiYSAmIHN0cmlwZV9tYXNrKTsKKyAgICBlbmRTdHJpcCA9IGVuZExiYSA+PiByYWlkLT5z dHJpcGVTaGlmdDsKKyAgICBudW1fc3RyaXBzID0gKHVfaW50OF90KShlbmRTdHJpcCAtIHN0YXJ0 X3N0cmlwICsgMSk7ICAgICAvLyBFbmQgc3RyaXAKKyAgICBpZiAocmFpZC0+cm93RGF0YVNpemUg PT0gMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIHN0YXJ0X3JvdyA9IG1lZ2FfZGl2NjRf MzIoc3RhcnRfc3RyaXAsIHJhaWQtPnJvd0RhdGFTaXplKTsvLyBTdGFydCBSb3cKKyAgICBlbmRS b3cgPSBtZWdhX2RpdjY0XzMyKGVuZFN0cmlwLCByYWlkLT5yb3dEYXRhU2l6ZSk7CisgICAgbnVt Um93cyA9ICh1X2ludDhfdCkoZW5kUm93IC0gc3RhcnRfcm93ICsgMSk7ICAgLy8gZ2V0IHRoZSBy b3cgY291bnQKKworICAgIC8qCisgICAgICogQ2FsY3VsYXRlIHJlZ2lvbiBpbmZvLiAgKEFzc3Vt ZSByZWdpb24gYXQgc3RhcnQgb2YgZmlyc3Qgcm93LCBhbmQgCisgICAgICogYXNzdW1lIHRoaXMg SU8gbmVlZHMgdGhlIGZ1bGwgcm93IC0gd2lsbCBhZGp1c3QgaWYgbm90IHRydWUuKQorICAgICAq LworICAgIHJlZ1N0YXJ0ID0gc3RhcnRfcm93IDw8IHJhaWQtPnN0cmlwZVNoaWZ0OyAgCisgICAg cmVnU2l6ZSA9IHN0cmlwU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgLyogQ2hl Y2sgaWYgd2UgY2FuIHNlbmQgdGhpcyBJL08gdmlhIEZhc3RQYXRoICovCisgICAgaWYgKHJhaWQt PmNhcGFiaWxpdHkuZnBDYXBhYmxlKSB7CisgICAgICAgIGlmIChpc1JlYWQpCisgICAgICAgICAg ICBpb19pbmZvLT5mcE9rRm9ySW8gPSAocmFpZC0+Y2FwYWJpbGl0eS5mcFJlYWRDYXBhYmxlICYm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudW1fc3Ry aXBzID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJhaWQtPmNhcGFiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZwUmVhZEFjcm9zc1N0cmlwZSkpOworICAgICAgICBlbHNlCisgICAgICAg ICAgICBpb19pbmZvLT5mcE9rRm9ySW8gPSAocmFpZC0+Y2FwYWJpbGl0eS5mcFdyaXRlQ2FwYWJs ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobnVt X3N0cmlwcyA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByYWlkLT5jYXBhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcFdyaXRlQWNyb3NzU3RyaXBlKSk7CisgICAgfSAKKyAgICBlbHNl CisgICAgICAgIGlvX2luZm8tPmZwT2tGb3JJbyA9IEZBTFNFOworCisgICAgaWYgKG51bVJvd3Mg PT0gMSkgeworICAgICAgICBpZiAobnVtX3N0cmlwcyA9PSAxKSB7ICAKKyAgICAgICAgICAgIC8q IHNpbmdsZS1zdHJpcCBJT3MgY2FuIGFsd2F5cyBsb2NrIG9ubHkgdGhlIGRhdGEgbmVlZGVkLAor ICAgICAgICAgICAgICAgbXVsdGktc3RyaXAgSU9zIGFsd2F5cyBuZWVkIHRvIGZ1bGwgc3RyaXBl IGxvY2tlZCAqLyAKKyAgICAgICAgICAgIHJlZ1N0YXJ0ICs9IHJlZl9pbl9zdGFydF9zdHJpcGU7 CisgICAgICAgICAgICByZWdTaXplID0gbnVtQmxvY2tzOworICAgICAgICB9ICAKKyAgICB9IAor ICAgIGVsc2UgeworICAgICAgICAvKiBpZiB0aGUgc3RhcnQgc3RyaXAgaXMgdGhlIGxhc3QgaW4g dGhlIHN0YXJ0IHJvdyAqLworICAgICAgICBpZiAoc3RhcnRfc3RyaXAgPT0gKHN0YXJ0X3JvdyAr IDEpICogcmFpZC0+cm93RGF0YVNpemUgLSAxKSB7ICAKKyAgICAgICAgICAgIHJlZ1N0YXJ0ICs9 IHJlZl9pbl9zdGFydF9zdHJpcGU7CisgICAgICAgICAgICAvKiBpbml0aWFsaXplIGNvdW50IHRv IHNlY3RvcnMgZnJvbSBzdGFydFJlZiB0byBlbmQgb2Ygc3RyaXAgKi8KKyAgICAgICAgICAgIHJl Z1NpemUgPSBzdHJpcFNpemUgLSByZWZfaW5fc3RhcnRfc3RyaXBlOworICAgICAgICB9CisKKyAg ICAgICAgaWYgKG51bVJvd3MgPiAyKQorICAgICAgICAgICAgcmVnU2l6ZSArPSAobnVtUm93cy0y KSA8PCByYWlkLT5zdHJpcGVTaGlmdDsgLy8gYWRkIGNvbXBsZXRlIHJvd3MgCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBtaWRk bGUgb2YgdHJhbnNmZXIKKyAgICAgICAgLyogSWYgSU8gZW5kcyB3aXRoaW4gZmlyc3Qgc3RyaXAg b2YgbGFzdCByb3cgKi8KKyAgICAgICAgaWYgKGVuZFN0cmlwID09IGVuZFJvdypyYWlkLT5yb3dE YXRhU2l6ZSkgICAgIAorICAgICAgICAgICAgcmVnU2l6ZSArPSByZWZfaW5fZW5kX3N0cmlwZSsx OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWdTaXplICs9IHN0cmlwU2l6ZTsKKyAgICB9 CisgICAgcFJBSURfQ29udGV4dC0+dGltZW91dFZhbHVlID0gbWFwLT5yYWlkTWFwLmZwUGRJb1Rp bWVvdXRTZWM7CisgICAgcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdzID0gKGlzUmVhZCk/IFJF R0lPTl9UWVBFX1NIQVJFRF9SRUFEIDogcmFpZC0+cmVnVHlwZVJlcU9uV3JpdGU7CisgICAgcFJB SURfQ29udGV4dC0+VmlydHVhbERpc2tUZ3RJZCA9IHJhaWQtPnRhcmdldElkOworICAgIHBSQUlE X0NvbnRleHQtPnJlZ0xvY2tSb3dMQkEgPSByZWdTdGFydDsKKyAgICBwUkFJRF9Db250ZXh0LT5y ZWdMb2NrTGVuZ3RoID0gcmVnU2l6ZTsKKyAgICBwUkFJRF9Db250ZXh0LT5jb25maWdTZXFOdW0g PSByYWlkLT5zZXFOdW07CisKKyAgICAvKgorICAgICAqIEdldCBQaHkgUGFyYW1zIG9ubHkgaWYg RlAgY2FwYWJsZSwgb3IgZWxzZSBsZWF2ZSBpdCB0byBNUiBmaXJtd2FyZSAKKyAgICAgKiB0byBk byB0aGUgY2FsY3VsYXRpb24uCisgICAgICovCisgICAgaWYgKGlvX2luZm8tPmZwT2tGb3JJbykg eworICAgICAgICByZXR2YWwgPSBNUl9HZXRQaHlQYXJhbXMoc2MsIGxkLCBzdGFydF9zdHJpcCwg cmVmX2luX3N0YXJ0X3N0cmlwZSwgCisgICAgICAgICAgICAgICAgICZpb19pbmZvLT5wZEJsb2Nr LCAmaW9faW5mby0+ZGV2SGFuZGxlLCBwUkFJRF9Db250ZXh0LCBtYXApOworICAgICAgICAvKiBJ ZiBJTyBvbiBhbiBpbnZhbGlkIFBkLCB0aGVuIEZQIGlzIG5vdCBwb3NzaWJsZSAqLworICAgICAg ICBpZiAoaW9faW5mby0+ZGV2SGFuZGxlID09IE1SX1BEX0lOVkFMSUQpIAorICAgICAgICAgICAg aW9faW5mby0+ZnBPa0ZvcklvID0gRkFMU0U7CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAg fSAKKyAgICBlbHNlIGlmIChpc1JlYWQpIHsKKyAgICAgICAgZm9yIChzdHJpcElkeD0wOyBzdHJp cElkeDxudW1fc3RyaXBzOyBzdHJpcElkeCsrKSB7CisgICAgICAgICAgICBpZiAoIU1SX0dldFBo eVBhcmFtcyhzYywgbGQsIHN0YXJ0X3N0cmlwICsgc3RyaXBJZHgsIAorICAgICAgICAgICAgICAg ICAgICByZWZfaW5fc3RhcnRfc3RyaXBlLCAmaW9faW5mby0+cGRCbG9jaywgCisgICAgICAgICAg ICAgICAgICAgICZpb19pbmZvLT5kZXZIYW5kbGUsIHBSQUlEX0NvbnRleHQsIG1hcCkpCisgICAg ICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRS VUU7Cit9CisKKy8qKgorICogbXJzYXNfdXBkYXRlX2xvYWRfYmFsYW5jZV9wYXJhbXM6ICBVcGRh dGUgbG9hZCBiYWxhbmNlIHBhcm1hcyAgCisgKiBJbnB1dHM6ICAgICAgICAgICAgICAgICAgICAg ICAgIG1hcCBwb2ludGVyIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2Fk IGJhbGFuY2UgaW5mbyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9faW5m byBwb2ludGVyCisgKgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBsb2FkIGJhbGFuY2Ug cGFyYW1ldGVycyBmb3IgdGhlIExEIGNvbmZpZworICogb2YgYSB0d28gZHJpdmUgb3B0aW1hbCBS QUlELTEuICAKKyAqLwordm9pZCBtcnNhc191cGRhdGVfbG9hZF9iYWxhbmNlX3BhcmFtcyhNUl9G V19SQUlEX01BUF9BTEwgKm1hcCwgCisgICAgICAgIFBMRF9MT0FEX0JBTEFOQ0VfSU5GTyBsYklu Zm8pCit7CisgICAgaW50IGxkQ291bnQ7CisgICAgdV9pbnQxNl90IGxkOworICAgIHVfaW50MzJf dCBwZCwgYXJSZWY7CisgICAgTVJfTERfUkFJRCAqcmFpZDsKKworICAgIGZvciAobGRDb3VudCA9 IDA7IGxkQ291bnQgPCBNQVhfTE9HSUNBTF9EUklWRVM7IGxkQ291bnQrKykKKyAgICB7CisgICAg ICAgIGxkID0gTVJfVGFyZ2V0SWRUb0xkR2V0KGxkQ291bnQsIG1hcCk7CisgICAgICAgIGlmIChs ZCA+PSBNQVhfTE9HSUNBTF9EUklWRVMpIHsKKyAgICAgICAgICAgIGxiSW5mb1tsZENvdW50XS5s b2FkQmFsYW5jZUZsYWcgPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor ICAgICAgICByYWlkID0gTVJfTGRSYWlkR2V0KGxkLCBtYXApOworCisgICAgICAgIC8qIFR3byBk cml2ZSBPcHRpbWFsIFJBSUQgMSAqLworICAgICAgICBpZiAoKHJhaWQtPmxldmVsID09IDEpICYm IChyYWlkLT5yb3dTaXplID09IDIpICYmIAorICAgICAgICAgICAgICAgIChyYWlkLT5zcGFuRGVw dGggPT0gMSkKKyAgICAgICAgICAgICAgICAmJiByYWlkLT5sZFN0YXRlID09IE1SX0xEX1NUQVRF X09QVElNQUwpIHsKKyAgICAgICAgICAgIGxiSW5mb1tsZENvdW50XS5sb2FkQmFsYW5jZUZsYWcg PSAxOworCisgICAgICAgICAgICAvKiBHZXQgdGhlIGFycmF5IG9uIHdoaWNoIHRoaXMgc3BhbiBp cyBwcmVzZW50ICovCisgICAgICAgICAgICBhclJlZiA9IE1SX0xkU3BhbkFycmF5R2V0KGxkLCAw LCBtYXApOyAgICAKKworICAgICAgICAgICAgLyogR2V0IHRoZSBQRCAqLworICAgICAgICAgICAg cGQgPSBNUl9BclBkR2V0KGFyUmVmLCAwLCBtYXApOyAgICAgIAorICAgICAgICAgICAgLyogR2V0 IGRldiBoYW5kbGUgZnJvbSBQRCAqLworICAgICAgICAgICAgbGJJbmZvW2xkQ291bnRdLnJhaWQx RGV2SGFuZGxlWzBdID0gTVJfUGREZXZIYW5kbGVHZXQocGQsIG1hcCk7ICAgICAgIAorICAgICAg ICAgICAgcGQgPSBNUl9BclBkR2V0KGFyUmVmLCAxLCBtYXApOyAgICAgCisgICAgICAgICAgICBs YkluZm9bbGRDb3VudF0ucmFpZDFEZXZIYW5kbGVbMV0gPSBNUl9QZERldkhhbmRsZUdldChwZCwg bWFwKTsgICAgICAgIAorICAgICAgICB9IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBsYklu Zm9bbGRDb3VudF0ubG9hZEJhbGFuY2VGbGFnID0gMDsKKyAgICB9Cit9CisKKworLyoqCisgKiBt cnNhc19zZXRfcGRfbGJhOiAgICBTZXRzIFBEIExCQQorICogaW5wdXQ6ICAgICAgICAgICAgICAg aW9fcmVxdWVzdCBwb2ludGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBDREIgbGVuZ3RoCisg KiAgICAgICAgICAgICAgICAgICAgICBpb19pbmZvIHBvaW50ZXIKKyAqICAgICAgICAgICAgICAg ICAgICAgIFBvaW50ZXIgdG8gQ0NCCisgKiAgICAgICAgICAgICAgICAgICAgICBMb2NhbCBSQUlE IG1hcCBwb2ludGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBTdGFydCBibG9jayBvZiBJTwor ICogICAgICAgICAgICAgICAgICAgICAgQmxvY2sgU2l6ZQorICoKKyAqIFVzZWQgdG8gc2V0IHRo ZSBQRCBsb2dpY2FsIGJsb2NrIGFkZHJlc3MgaW4gQ0RCIGZvciBGUCBJT3MuCisgKi8KK3ZvaWQg bXJzYXNfc2V0X3BkX2xiYShNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCwg dV9pbnQ4X3QgY2RiX2xlbiwKKyAgICBzdHJ1Y3QgSU9fUkVRVUVTVF9JTkZPICppb19pbmZvLCB1 bmlvbiBjY2IgKmNjYiwKKyAgICBNUl9GV19SQUlEX01BUF9BTEwgKmxvY2FsX21hcF9wdHIsIHVf aW50MzJfdCByZWZfdGFnLAorICAgIHVfaW50MzJfdCBsZF9ibG9ja19zaXplKQoreworICAgIE1S X0xEX1JBSUQgKnJhaWQ7CisgICAgdV9pbnQzMl90IGxkOworICAgIHVfaW50NjRfdCBzdGFydF9i bGsgPSBpb19pbmZvLT5wZEJsb2NrOworICAgIHVfaW50OF90ICpjZGIgPSBpb19yZXF1ZXN0LT5D REIuQ0RCMzI7CisgICAgdV9pbnQzMl90IG51bV9ibG9ja3MgPSBpb19pbmZvLT5udW1CbG9ja3M7 CisgICAgdV9pbnQ4X3Qgb3Bjb2RlID0gMCwgZmxhZ3ZhbHMgPSAwLCBncm91cG51bSA9IDAsIGNv bnRyb2wgPSAwOworICAgIHN0cnVjdCBjY2JfaGRyICpjY2JfaCA9ICYoY2NiLT5jY2JfaCk7CisK KyAgICAvKiBDaGVjayBpZiBUMTAgUEkgKERJRikgaXMgZW5hYmxlZCBmb3IgdGhpcyBMRCAqLwor ICAgIGxkID0gTVJfVGFyZ2V0SWRUb0xkR2V0KGlvX2luZm8tPmxkVGd0SWQsIGxvY2FsX21hcF9w dHIpOworICAgIHJhaWQgPSBNUl9MZFJhaWRHZXQobGQsIGxvY2FsX21hcF9wdHIpOworICAgIGlm IChyYWlkLT5jYXBhYmlsaXR5LmxkUGlNb2RlID09IE1SX1BST1RfSU5GT19UWVBFX0NPTlRST0xM RVIpIHsKKyAgICAgICAgbWVtc2V0KGNkYiwgMCwgc2l6ZW9mKGlvX3JlcXVlc3QtPkNEQi5DREIz MikpOworICAgICAgICBjZGJbMF0gPSAgTVJTQVNfU0NTSV9WQVJJQUJMRV9MRU5HVEhfQ01EOwor ICAgICAgICBjZGJbN10gPSAgTVJTQVNfU0NTSV9BRERMX0NEQl9MRU47CisKKyAgICAgICAgaWYg KGNjYl9oLT5mbGFncyA9PSBDQU1fRElSX09VVCkKKyAgICAgICAgICAgIGNkYls5XSA9IE1SU0FT X1NDU0lfU0VSVklDRV9BQ1RJT05fUkVBRDMyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj ZGJbOV0gPSBNUlNBU19TQ1NJX1NFUlZJQ0VfQUNUSU9OX1dSSVRFMzI7CisgICAgICAgIGNkYlsx MF0gPSBNUlNBU19SRF9XUl9QUk9URUNUX0NIRUNLX0FMTDsKKworICAgICAgICAvKiBMQkEgKi8K KyAgICAgICAgY2RiWzEyXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA1NikgJiAweGZmKTsK KyAgICAgICAgY2RiWzEzXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA0OCkgJiAweGZmKTsK KyAgICAgICAgY2RiWzE0XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA0MCkgJiAweGZmKTsK KyAgICAgICAgY2RiWzE1XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAzMikgJiAweGZmKTsK KyAgICAgICAgY2RiWzE2XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmKTsK KyAgICAgICAgY2RiWzE3XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmKTsK KyAgICAgICAgY2RiWzE4XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOwor ICAgICAgICBjZGJbMTldID0gKHVfaW50OF90KShzdGFydF9ibGsgJiAweGZmKTsKKworICAgICAg ICAvKiBMb2dpY2FsIGJsb2NrIHJlZmVyZW5jZSB0YWcgKi8KKyAgICAgICAgaW9fcmVxdWVzdC0+ Q0RCLkVFRFAzMi5QcmltYXJ5UmVmZXJlbmNlVGFnID0gc3dhcDMyKHJlZl90YWcpOworICAgICAg ICBpb19yZXF1ZXN0LT5DREIuRUVEUDMyLlByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2sgPSAweGZm ZmY7CisgICAgICAgIGlvX3JlcXVlc3QtPklvRmxhZ3MgPSAzMjsgLyogU3BlY2lmeSAzMi1ieXRl IGNkYiAqLworCisgICAgICAgIC8qIFRyYW5zZmVyIGxlbmd0aCAqLworICAgICAgICBjZGJbMjhd ID0gKHVfaW50OF90KSgobnVtX2Jsb2NrcyA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgY2RiWzI5 XSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGNkYlsz MF0gPSAodV9pbnQ4X3QpKChudW1fYmxvY2tzID4+IDgpICYgMHhmZik7CisgICAgICAgIGNkYlsz MV0gPSAodV9pbnQ4X3QpKG51bV9ibG9ja3MgJiAweGZmKTsKKworICAgICAgICAvKiBzZXQgU0NT SSBJTyBFRURQIEZsYWdzICovCisgICAgICAgIGlmIChjY2JfaC0+ZmxhZ3MgPT0gQ0FNX0RJUl9P VVQpIHsKKyAgICAgICAgICAgIGlvX3JlcXVlc3QtPkVFRFBGbGFncyA9CisgICAgICAgICAgICAg ICAgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19QUklfUkVGVEFHICB8CisgICAgICAgICAgICAg ICAgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFRlRBRyB8CisgICAgICAgICAgICAgICAg TVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFTU9WRV9PUCB8CisgICAgICAgICAgICAgICAg TVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0FQUFRBRyB8CisgICAgICAgICAgICAgICAgTVBJ Ml9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0dVQVJEOworICAgICAgICB9IAorICAgICAgICBlbHNl IHsKKyAgICAgICAgICAgICAgICBpb19yZXF1ZXN0LT5FRURQRmxhZ3MgPQorICAgICAgICAgICAg ICAgICAgICAgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19QUklfUkVGVEFHIHwKKyAgICAgICAg ICAgICAgICAgICAgIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTlNFUlRfT1A7CisgICAgICAgIH0K KyAgICAgICAgaW9fcmVxdWVzdC0+Q29udHJvbCB8PSAoMHg0IDw8IDI2KTsKKyAgICAgICAgaW9f cmVxdWVzdC0+RUVEUEJsb2NrU2l6ZSA9IGxkX2Jsb2NrX3NpemU7CisgICAgfSAKKyAgICBlbHNl IHsKKyAgICAgICAgLyogU29tZSBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCAxNi8xMiBieXRlIENEQidz LCBjb252ZXJ0IHRvIDEwICovCisgICAgICAgIGlmICgoKGNkYl9sZW4gPT0gMTIpIHx8IChjZGJf bGVuID09IDE2KSkgJiYgCisgICAgICAgICAgICAgICAgICAgIChzdGFydF9ibGsgPD0gMHhmZmZm ZmZmZikpIHsKKyAgICAgICAgICAgIGlmIChjZGJfbGVuID09IDE2KSB7CisgICAgICAgICAgICAg ICAgb3Bjb2RlID0gY2RiWzBdID09IFJFQURfMTYgPyBSRUFEXzEwIDogV1JJVEVfMTA7CisgICAg ICAgICAgICAgICAgZmxhZ3ZhbHMgPSBjZGJbMV07CisgICAgICAgICAgICAgICAgZ3JvdXBudW0g PSBjZGJbMTRdOworICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBjZGJbMTVdOworICAgICAgICAg ICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG9wY29kZSA9IGNkYlsw XSA9PSBSRUFEXzEyID8gUkVBRF8xMCA6IFdSSVRFXzEwOworICAgICAgICAgICAgICAgIGZsYWd2 YWxzID0gY2RiWzFdOworICAgICAgICAgICAgICAgIGdyb3VwbnVtID0gY2RiWzEwXTsKKyAgICAg ICAgICAgICAgICBjb250cm9sID0gY2RiWzExXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgbWVtc2V0KGNkYiwgMCwgc2l6ZW9mKGlvX3JlcXVlc3QtPkNEQi5DREIzMikpOworCisgICAg ICAgICAgICBjZGJbMF0gPSBvcGNvZGU7CisgICAgICAgICAgICBjZGJbMV0gPSBmbGFndmFsczsK KyAgICAgICAgICAgIGNkYls2XSA9IGdyb3VwbnVtOworICAgICAgICAgICAgY2RiWzldID0gY29u dHJvbDsKKworICAgICAgICAgICAgLyogVHJhbnNmZXIgbGVuZ3RoICovCisgICAgICAgICAgICBj ZGJbOF0gPSAodV9pbnQ4X3QpKG51bV9ibG9ja3MgJiAweGZmKTsKKyAgICAgICAgICAgIGNkYls3 XSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKworICAgICAgICAgICAg aW9fcmVxdWVzdC0+SW9GbGFncyA9IDEwOyAvKiBTcGVjaWZ5IDEwLWJ5dGUgY2RiICovCisgICAg ICAgICAgICBjZGJfbGVuID0gMTA7CisgICAgICAgIH0gZWxzZSBpZiAoKGNkYl9sZW4gPCAxNikg JiYgKHN0YXJ0X2JsayA+IDB4ZmZmZmZmZmYpKSB7CisgICAgICAgICAgICAvKiBDb252ZXJ0IHRv IDE2IGJ5dGUgQ0RCIGZvciBsYXJnZSBMQkEncyAqLworICAgICAgICAgICAgc3dpdGNoIChjZGJf bGVuKSB7CisgICAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICAgICBvcGNv ZGUgPSBjZGJbMF0gPT0gUkVBRF82ID8gUkVBRF8xNiA6IFdSSVRFXzE2OworICAgICAgICAgICAg ICAgICAgICBjb250cm9sID0gY2RiWzVdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBjZGJb MF0gPT0gUkVBRF8xMCA/IFJFQURfMTYgOiBXUklURV8xNjsKKyAgICAgICAgICAgICAgICAgICAg ZmxhZ3ZhbHMgPSBjZGJbMV07CisgICAgICAgICAgICAgICAgICAgIGdyb3VwbnVtID0gY2RiWzZd OworICAgICAgICAgICAgICAgICAgICBjb250cm9sID0gY2RiWzldOworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgICAgICAg ICBvcGNvZGUgPSBjZGJbMF0gPT0gUkVBRF8xMiA/IFJFQURfMTYgOiBXUklURV8xNjsKKyAgICAg ICAgICAgICAgICAgICAgZmxhZ3ZhbHMgPSBjZGJbMV07CisgICAgICAgICAgICAgICAgICAgIGdy b3VwbnVtID0gY2RiWzEwXTsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGNkYlsxMV07 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBtZW1zZXQoY2RiLCAwLCBzaXplb2YoaW9fcmVxdWVzdC0+Q0RCLkNEQjMyKSk7CisKKyAgICAg ICAgICAgIGNkYlswXSA9IG9wY29kZTsKKyAgICAgICAgICAgIGNkYlsxXSA9IGZsYWd2YWxzOwor ICAgICAgICAgICAgY2RiWzE0XSA9IGdyb3VwbnVtOworICAgICAgICAgICAgY2RiWzE1XSA9IGNv bnRyb2w7CisKKyAgICAgICAgICAgIC8qIFRyYW5zZmVyIGxlbmd0aCAqLworICAgICAgICAgICAg Y2RiWzEzXSA9ICh1X2ludDhfdCkobnVtX2Jsb2NrcyAmIDB4ZmYpOworICAgICAgICAgICAgY2Ri WzEyXSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgICAg IGNkYlsxMV0gPSAodV9pbnQ4X3QpKChudW1fYmxvY2tzID4+IDE2KSAmIDB4ZmYpOworICAgICAg ICAgICAgY2RiWzEwXSA9ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gMjQpICYgMHhmZik7CisK KyAgICAgICAgICAgIGlvX3JlcXVlc3QtPklvRmxhZ3MgPSAxNjsgLyogU3BlY2lmeSAxNi1ieXRl IGNkYiAqLworICAgICAgICAgICAgY2RiX2xlbiA9IDE2OworICAgICAgICB9IGVsc2UgaWYgKChj ZGJfbGVuID09IDYpICYmIChzdGFydF9ibGsgPiAweDFmZmZmZikpIHsKKyAgICAgICAgICAgIC8q IGNvbnZlcnQgdG8gMTAgYnl0ZSBDREIgKi8KKwkgICAgb3Bjb2RlID0gY2RiWzBdID09IFJFQURf NiA/IFJFQURfMTAgOiBXUklURV8xMDsKKwkgICAgY29udHJvbCA9IGNkYls1XTsKKwkJCisJICAg IG1lbXNldChjZGIsIDAsIHNpemVvZihjZGIpKTsKKwkgICAgY2RiWzBdID0gb3Bjb2RlOworCSAg ICBjZGJbOV0gPSBjb250cm9sOworCisJICAgIC8qIFNldCB0cmFuc2ZlciBsZW5ndGggKi8KKwkg ICAgY2RiWzhdID0gKHVfaW50OF90KShudW1fYmxvY2tzICYgMHhmZik7CisJICAgIGNkYls3XSA9 ICh1X2ludDhfdCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKworCSAgICAvKiBTcGVjaWZ5 IDEwLWJ5dGUgY2RiICovCisJICAgIGNkYl9sZW4gPSAxMDsKKwl9CisKKyAgICAgICAgLyogRmFs bCB0aHJvdWdoIG5vcm1hbCBjYXNlLCBqdXN0IGxvYWQgTEJBIGhlcmUgKi8KKyAgICAgICAgc3dp dGNoIChjZGJfbGVuKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgdV9pbnQ4X3QgdmFsID0gY2RiWzFdICYgMHhFMDsKKyAgICAg ICAgICAgICAgICBjZGJbM10gPSAodV9pbnQ4X3QpKHN0YXJ0X2JsayAmIDB4ZmYpOworICAgICAg ICAgICAgICAgIGNkYlsyXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOwor ICAgICAgICAgICAgICAgIGNkYlsxXSA9IHZhbCB8ICgodV9pbnQ4X3QpKHN0YXJ0X2JsayA+PiAx NikgJiAweDFmKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgY2RiWzVdID0gKHVfaW50OF90KShzdGFy dF9ibGsgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJbNF0gPSAodV9pbnQ4X3QpKChzdGFy dF9ibGsgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJbM10gPSAodV9pbnQ4X3Qp KChzdGFydF9ibGsgPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgY2RiWzJdID0gKHVf aW50OF90KSgoc3RhcnRfYmxrID4+IDI0KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICBjZGJbNV0gPSAodV9pbnQ4 X3QpKHN0YXJ0X2JsayAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGNkYls0XSA9ICh1X2ludDhf dCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGNkYlszXSA9ICh1 X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJb Ml0gPSAodV9pbnQ4X3QpKChzdGFydF9ibGsgPj4gMjQpICYgMHhmZik7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgICAgIGNkYls5XSA9 ICh1X2ludDhfdCkoc3RhcnRfYmxrICYgMHhmZik7CisgICAgICAgICAgICAgICAgY2RiWzhdID0g KHVfaW50OF90KSgoc3RhcnRfYmxrID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgY2Ri WzddID0gKHVfaW50OF90KSgoc3RhcnRfYmxrID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAg ICAgIGNkYls2XSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmKTsKKyAgICAg ICAgICAgICAgICBjZGJbNV0gPSAodV9pbnQ4X3QpKChzdGFydF9ibGsgPj4gMzIpICYgMHhmZik7 CisgICAgICAgICAgICAgICAgY2RiWzRdID0gKHVfaW50OF90KSgoc3RhcnRfYmxrID4+IDQwKSAm IDB4ZmYpOworICAgICAgICAgICAgICAgIGNkYlszXSA9ICh1X2ludDhfdCkoKHN0YXJ0X2JsayA+ PiA0OCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBjZGJbMl0gPSAodV9pbnQ4X3QpKChzdGFy dF9ibGsgPj4gNTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X2Jlc3RfYXJtICAgICAgICAgRGV0ZXJtaW5l IHRoZSBiZXN0IHNwaW5kbGUgYXJtICAKKyAqIElucHV0czogICAgICAgICAgICAgICAgICAgIExv YWQgYmFsYW5jZSBpbmZvIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBhbmQgcmV0 dXJucyB0aGUgYmVzdCBhcm0gYnkgbG9va2luZyBhdCB0aGUKKyAqIHBhcmFtZXRlcnMgb2YgdGhl IGxhc3QgUEQgYWNjZXNzLgorICovCit1X2ludDhfdCBtcnNhc19nZXRfYmVzdF9hcm0oUExEX0xP QURfQkFMQU5DRV9JTkZPIGxiSW5mbywgdV9pbnQ4X3QgYXJtLCAKKyAgICAgICAgdV9pbnQ2NF90 IGJsb2NrLCB1X2ludDMyX3QgY291bnQpCit7CisgICAgdV9pbnQxNl90ICAgICBwZW5kMCwgcGVu ZDE7CisgICAgdV9pbnQ2NF90ICAgICBkaWZmMCwgZGlmZjE7CisgICAgdV9pbnQ4X3QgICAgICBi ZXN0QXJtOworCisgICAgLyogZ2V0IHRoZSBwZW5kaW5nIGNtZHMgZm9yIHRoZSBkYXRhIGFuZCBt aXJyb3IgYXJtcyAqLworICAgIHBlbmQwID0gYXRvbWljX3JlYWQoJmxiSW5mby0+c2NzaV9wZW5k aW5nX2NtZHNbMF0pOworICAgIHBlbmQxID0gYXRvbWljX3JlYWQoJmxiSW5mby0+c2NzaV9wZW5k aW5nX2NtZHNbMV0pOworCisgICAgLyogRGV0ZXJtaW5lIHRoZSBkaXNrIHdob3NlIGhlYWQgaXMg bmVhcmVyIHRvIHRoZSByZXEuIGJsb2NrICovCisgICAgZGlmZjAgPSBBQlNfRElGRihibG9jaywg bGJJbmZvLT5sYXN0X2FjY2Vzc2VkX2Jsb2NrWzBdKTsKKyAgICBkaWZmMSA9IEFCU19ESUZGKGJs b2NrLCBsYkluZm8tPmxhc3RfYWNjZXNzZWRfYmxvY2tbMV0pOworICAgIGJlc3RBcm0gPSAoZGlm ZjAgPD0gZGlmZjEgPyAwIDogMSk7CisKKyAgICBpZiAoKGJlc3RBcm0gPT0gYXJtICYmIHBlbmQw ID4gcGVuZDEgKyAxNikgfHwgKGJlc3RBcm0gIT0gYXJtICYmIHBlbmQxID4gcGVuZDAgKyAxNikp CisgICAgICAgIGJlc3RBcm0gXj0gMTsKKworICAgIC8qIFVwZGF0ZSB0aGUgbGFzdCBhY2Nlc3Nl ZCBibG9jayBvbiB0aGUgY29ycmVjdCBwZCAqLworICAgIGxiSW5mby0+bGFzdF9hY2Nlc3NlZF9i bG9ja1tiZXN0QXJtXSA9IGJsb2NrICsgY291bnQgLSAxOworCisgICAgcmV0dXJuIGJlc3RBcm07 Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X3VwZGF0ZWRfZGV2X2hhbmRsZSAgICBHZXQgdGhlIHVw ZGF0ZSBkZXYgaGFuZGxlICAKKyAqIElucHV0czogICAgICAgICAgICAgICAgICAgICAgICAgTG9h ZCBiYWxhbmNlIGluZm8gCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2lu Zm8gcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBhbmQgcmV0dXJucyB0 aGUgdXBkYXRlZCBkZXYgaGFuZGxlLgorICovCit1X2ludDE2X3QgbXJzYXNfZ2V0X3VwZGF0ZWRf ZGV2X2hhbmRsZShQTERfTE9BRF9CQUxBTkNFX0lORk8gbGJJbmZvLCAKKyAgICAgICAgc3RydWN0 IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbykKK3sKKyAgICB1X2ludDhfdCBhcm0sIG9sZF9hcm07 CisgICAgdV9pbnQxNl90IGRldkhhbmRsZTsKKworICAgIG9sZF9hcm0gPSBsYkluZm8tPnJhaWQx RGV2SGFuZGxlWzBdID09IGlvX2luZm8tPmRldkhhbmRsZSA/IDAgOiAxOworCisgICAgLyogZ2V0 IGJlc3QgbmV3IGFybSAqLworICAgIGFybSAgPSBtcnNhc19nZXRfYmVzdF9hcm0obGJJbmZvLCBv bGRfYXJtLCBpb19pbmZvLT5sZFN0YXJ0QmxvY2ssIGlvX2luZm8tPm51bUJsb2Nrcyk7CisgICAg ZGV2SGFuZGxlID0gbGJJbmZvLT5yYWlkMURldkhhbmRsZVthcm1dOworICAgIGF0b21pY19pbmMo JmxiSW5mby0+c2NzaV9wZW5kaW5nX2NtZHNbYXJtXSk7CisKKyAgICByZXR1cm4gZGV2SGFuZGxl OworfQorCisvKioKKyAqIE1SX0dldFBoeVBhcmFtcyAgICAgQ2FsY3VsYXRlcyBhcm0sIHNwYW4s IGFuZCBibG9jaworICogSW5wdXRzOiAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQg c3RhdGUgCisgKiAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWwgZHJpdmUgbnVtYmVyIChMRCkg CisgKiAgICAgICAgICAgICAgICAgICAgIFN0cmlwZSBudW1iZXIgKHN0cmlwUm93KQorICogICAg ICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgaW4gc3RyaXBlIChzdHJpcFJlZikKKyAqIE91dHB1 dHM6ICAgICAgICAgICAgU3BhbiBudW1iZXIKKyAqICAgICAgICAgICAgICAgICAgICAgQWJzb2x1 dGUgQmxvY2sgbnVtYmVyIGluIHRoZSBwaHlzaWNhbCBkaXNrIAorICoKKyAqIFRoaXMgcm91dGlu ZSBjYWxjdWxhdGVzIHRoZSBhcm0sIHNwYW4gYW5kIGJsb2NrIGZvciB0aGUgc3BlY2lmaWVkIHN0 cmlwZQorICogYW5kIHJlZmVyZW5jZSBpbiBzdHJpcGUuCisgKi8KK3VfaW50OF90IE1SX0dldFBo eVBhcmFtcyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCB1X2ludDMyX3QgbGQsIAorICAgICAgICAg ICAgdV9pbnQ2NF90IHN0cmlwUm93LAorICAgICAgICAgICAgdV9pbnQxNl90IHN0cmlwUmVmLCB1 X2ludDY0X3QgKnBkQmxvY2ssIHVfaW50MTZfdCAqcERldkhhbmRsZSwKKyAgICAgICAgICAgIFJB SURfQ09OVEVYVCAqcFJBSURfQ29udGV4dCwgTVJfRldfUkFJRF9NQVBfQUxMICptYXApCit7Cisg ICAgTVJfTERfUkFJRCAgKnJhaWQgPSBNUl9MZFJhaWRHZXQobGQsIG1hcCk7CisgICAgdV9pbnQz Ml90IHBkLCBhclJlZjsKKyAgICB1X2ludDhfdCBwaHlzQXJtLCBzcGFuOworICAgIHVfaW50NjRf dCByb3c7CisgICAgdV9pbnQ4X3QgcmV0dmFsID0gVFJVRTsKKyAgICBpbnQgZXJyb3JfY29kZSA9 IDA7CisgICAgdV9pbnQzMl90IHJvd01vZCwgYXJtUSwgYXJtLCBsb2dBcm07CisKKyAgICByb3cg PSAgbWVnYV9kaXY2NF8zMihzdHJpcFJvdywgcmFpZC0+cm93RGF0YVNpemUpOworCisgICAgaWYg KHJhaWQtPmxldmVsID09IDYpIHsKKyAgICAgICAgbG9nQXJtID0gbWVnYV9tb2Q2NChzdHJpcFJv dywgcmFpZC0+cm93RGF0YVNpemUpOyAvLyBsb2dpY2FsIGFybSB3aXRoaW4gcm93CisgICAgICAg IGlmIChyYWlkLT5yb3dTaXplID09IDApCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg ICAgIHJvd01vZCA9IG1lZ2FfbW9kNjQocm93LCByYWlkLT5yb3dTaXplKTsgIC8vIGdldCBsb2dp Y2FsIHJvdyBtb2QKKyAgICAgICAgYXJtUSA9IHJhaWQtPnJvd1NpemUtMS1yb3dNb2Q7ICAvLyBp bmRleCBvZiBRIGRyaXZlCisgICAgICAgIGFybSA9IGFybVErMStsb2dBcm07ICAgIC8vIGRhdGEg YWx3YXlzIGxvZ2ljYWxseSBmb2xsb3dzIFEKKyAgICAgICAgaWYgKGFybSA+PSByYWlkLT5yb3dT aXplKSAgICAgICAgIC8vIGhhbmRsZSB3cmFwIGNvbmRpdGlvbgorICAgICAgICAgICAgYXJtIC09 IHJhaWQtPnJvd1NpemU7CisgICAgICAgIHBoeXNBcm0gPSAodV9pbnQ4X3QpYXJtOworICAgIH0g CisgICAgZWxzZSB7CisgICAgICAgIGlmIChyYWlkLT5tb2RGYWN0b3IgPT0gMCkKKyAgICAgICAg ICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcGh5c0FybSA9IE1SX0xkRGF0YUFybUdldChsZCwg bWVnYV9tb2Q2NChzdHJpcFJvdywgcmFpZC0+bW9kRmFjdG9yKSwgbWFwKTsKKyAgICB9CisKKyAg ICBpZiAocmFpZC0+c3BhbkRlcHRoID09IDEpIHsKKyAgICAgICAgc3BhbiA9IDA7CisgICAgICAg ICpwZEJsb2NrID0gcm93IDw8IHJhaWQtPnN0cmlwZVNoaWZ0OworICAgIH0gCisgICAgZWxzZSB7 CisgICAgICAgIHNwYW4gPSAodV9pbnQ4X3QpTVJfR2V0U3BhbkJsb2NrKGxkLCByb3csIHBkQmxv Y2ssIG1hcCwgJmVycm9yX2NvZGUpOworICAgICAgICBpZiAoZXJyb3JfY29kZSA9PSAxKQorICAg ICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIC8qICBHZXQgdGhlIGFycmF5IG9u IHdoaWNoIHRoaXMgc3BhbiBpcyBwcmVzZW50ICovCisgICAgYXJSZWYgPSBNUl9MZFNwYW5BcnJh eUdldChsZCwgc3BhbiwgbWFwKTsgCisKKyAgICBwZCA9IE1SX0FyUGRHZXQoYXJSZWYsIHBoeXNB cm0sIG1hcCk7ICAgICAvLyBHZXQgdGhlIFBkLgorCisgICAgaWYgKHBkICE9IE1SX1BEX0lOVkFM SUQpCisgICAgICAgICpwRGV2SGFuZGxlID0gTVJfUGREZXZIYW5kbGVHZXQocGQsIG1hcCk7ICAv LyBHZXQgZGV2IGhhbmRsZSBmcm9tIFBkLgorICAgIGVsc2UgeworICAgICAgICAqcERldkhhbmRs ZSA9IE1SX1BEX0lOVkFMSUQ7IC8vIHNldCBkZXYgaGFuZGxlIGFzIGludmFsaWQuCisgICAgICAg IGlmICgocmFpZC0+bGV2ZWwgPj0gNSkgJiYKKyAgICAgICAgICAgICgoc2MtPmRldmljZV9pZCAh PSBNUlNBU19JTlZBREVSKSB8fAorICAgICAgICAgICAgKHNjLT5kZXZpY2VfaWQgPT0gTVJTQVNf SU5WQURFUiAmJgorICAgICAgICAgICAgIHJhaWQtPnJlZ1R5cGVSZXFPblJlYWQgIT0gUkVHSU9O X1RZUEVfVU5VU0VEKSkpCisgICAgICAgICAgICAgcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdz ID0gUkVHSU9OX1RZUEVfRVhDTFVTSVZFOworICAgICAgICBlbHNlIGlmIChyYWlkLT5sZXZlbCA9 PSAxKSB7CisgICAgICAgICAgICBwZCA9IE1SX0FyUGRHZXQoYXJSZWYsIHBoeXNBcm0gKyAxLCBt YXApOyAvLyBHZXQgQWx0ZXJuYXRlIFBkLgorICAgICAgICAgICAgaWYgKHBkICE9IE1SX1BEX0lO VkFMSUQpCisgICAgICAgICAgICAgICAgKnBEZXZIYW5kbGUgPSBNUl9QZERldkhhbmRsZUdldChw ZCwgbWFwKTsvL0dldCBkZXYgaGFuZGxlIGZyb20gUGQuCisgICAgICAgIH0KKyAgICB9CisKKyAg ICAqcGRCbG9jayArPSBzdHJpcFJlZiArIE1SX0xkU3BhblB0ckdldChsZCwgc3BhbiwgbWFwKS0+ c3RhcnRCbGs7CisgICAgcFJBSURfQ29udGV4dC0+c3BhbkFybSA9IChzcGFuIDw8IFJBSURfQ1RY X1NQQU5BUk1fU1BBTl9TSElGVCkgfCBwaHlzQXJtOworICAgIHJldHVybiByZXR2YWw7Cit9CisK Ky8qKgorICogTVJfR2V0U3BhbkJsb2NrICAgICBDYWxjdWxhdGVzIHNwYW4gYmxvY2sKKyAqIElu cHV0czogICAgICAgICAgICAgTEQgCisgKiAgICAgICAgICAgICAgICAgICAgIHJvdworICogICAg ICAgICAgICAgICAgICAgICBQRCBzcGFuIGJsb2NrCisgKiAgICAgICAgICAgICAgICAgICAgIFJB SUQgbWFwIHBvaW50ZXIKKyAqIE91dHB1dHM6ICAgICAgICAgICAgU3BhbiBudW1iZXIKKyAqICAg ICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZSAKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FsY3Vs YXRlcyB0aGUgc3BhbiBmcm9tIHRoZSBzcGFuIGJsb2NrIGluZm8uICAKKyAqLwordV9pbnQzMl90 IE1SX0dldFNwYW5CbG9jayh1X2ludDMyX3QgbGQsIHVfaW50NjRfdCByb3csIHVfaW50NjRfdCAq c3Bhbl9ibGssIAorICAgICAgICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCwgaW50ICpkaXZfZXJy b3IpCit7CisgICAgTVJfU1BBTl9CTE9DS19JTkZPICpwU3BhbkJsb2NrID0gTVJfTGRTcGFuSW5m b0dldChsZCwgbWFwKTsKKyAgICBNUl9RVUFEX0VMRU1FTlQgKnF1YWQ7CisgICAgTVJfTERfUkFJ RCAqcmFpZCA9IE1SX0xkUmFpZEdldChsZCwgbWFwKTsKKyAgICB1X2ludDMyX3Qgc3BhbiwgajsK KyAgICB1X2ludDY0X3QgYmxrLCBkZWJ1Z0JsazsKKworICAgIGZvciAoc3Bhbj0wOyBzcGFuIDwg cmFpZC0+c3BhbkRlcHRoOyBzcGFuKyssIHBTcGFuQmxvY2srKykgeworICAgICAgICBmb3IgKGo9 MDsgaiA8IHBTcGFuQmxvY2stPmJsb2NrX3NwYW5faW5mby5ub0VsZW1lbnRzOyBqKyspIHsKKyAg ICAgICAgICAgIHF1YWQgPSAmcFNwYW5CbG9jay0+YmxvY2tfc3Bhbl9pbmZvLnF1YWRbal07Cisg ICAgICAgICAgICBpZiAocXVhZC0+ZGlmZiA9PSAwKSB7CisgICAgICAgICAgICAgICAgKmRpdl9l cnJvciA9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwYW47CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAocXVhZC0+bG9nU3RhcnQgPD0gcm93ICAmJiAgcm93IDw9IHF1YWQtPmxv Z0VuZCAgJiYgIAorICAgICAgICAgICAgICAgICAgICAobWVnYV9tb2Q2NChyb3ctcXVhZC0+bG9n U3RhcnQsIHF1YWQtPmRpZmYpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwYW5fYmxr ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgYmxrID0gIG1lZ2FfZGl2NjRfMzIoKHJv dy1xdWFkLT5sb2dTdGFydCksIHF1YWQtPmRpZmYpOworICAgICAgICAgICAgICAgICAgICBkZWJ1 Z0JsayA9IGJsazsKKyAgICAgICAgICAgICAgICAgICAgYmxrID0gKGJsayArIHF1YWQtPm9mZnNl dEluU3BhbikgPDwgcmFpZC0+c3RyaXBlU2hpZnQ7CisgICAgICAgICAgICAgICAgICAgICpzcGFu X2JsayA9IGJsazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNw YW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNwYW47Cit9 CisKSW5kZXg6IHN5cy9kZXYvbXJzYXMvbXJzYXNfaW9jdGwuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv ZGV2L21yc2FzL21yc2FzX2lvY3RsLmMJKHJldmlzaW9uIDApCisrKyBzeXMvZGV2L21yc2FzL21y c2FzX2lvY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTMsIExTSSBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEF1 dGhvcjogTWFyaWFuIENob3kKKyAqIFN1cHBvcnQ6IGZyZWVic2RyYWlkQGxzaS5jb20KKyAqCisg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPE9SR0FOSVpBVElP Tj4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlS SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29m dHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQg c2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBv bGljaWVzLGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgdGhlIEZyZWVCU0QgUHJvamVj dC4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRmYnNkQGxzaS5jb20+CisgKiBN YWlsIHRvOiBMU0kgQ29ycG9yYXRpb24sIDE2MjEgQmFyYmVyIExhbmUsIE1pbHBpdGFzLCBDQSA5 NTAzNQorICogICAgQVRUTjogTWVnYVJhaWQgRnJlZUJTRAorICoKKyAqLworCisKKyNpbmNsdWRl IDxkZXYvbXJzYXMvbXJzYXMuaD4KKyNpbmNsdWRlIDxkZXYvbXJzYXMvbXJzYXNfaW9jdGwuaD4K KworCisvKiAKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMgCisgKi8KK2ludCBtcnNhc19hbGxvY19t ZmlfY21kcyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2ludCBtcnNhc19wYXNzdGhydShzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjLCB2b2lkICphcmcpOwordm9pZCBtcnNhc19mcmVlX2lvY19jbWQo c3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX2ZyZWVfZnJhbWUoc3RydWN0IG1y c2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7Cit2b2lkIG1yc2FzX2R1 bXBfZGNtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSog ZGNtZCk7Cit2b2lkIG1yc2FzX2R1bXBfaW9jdGwoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3Ry dWN0IG1yc2FzX2lvY3BhY2tldCAqdXNlcl9pb2MpOwordm9pZCAqIG1yc2FzX2FsbG9jX2ZyYW1l KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpOworc3Rh dGljIGludCBtcnNhc19jcmVhdGVfZnJhbWVfcG9vbChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsK K3N0YXRpYyB2b2lkIG1yc2FzX2FsbG9jX2NiKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3Qg KnNlZ3MsCisgICAgICAgIGludCBuc2VncywgaW50IGVycm9yKTsKKworZXh0ZXJuIHN0cnVjdCBt cnNhc19tZmlfY21kKiBtcnNhc19nZXRfbWZpX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsK K2V4dGVybiB2b2lkIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAq Y21kKTsKK2V4dGVybiBpbnQgbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQoc3RydWN0IG1yc2FzX3Nv ZnRjICpzYywKKyAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKTsKKworCisvKioKKyAqIG1y c2FzX2R1bXBfaW9jdGw6ICAgICAgIFByaW50IGRlYnVnIG91dHB1dCBmb3IgRENNRHMgCisgKiBp bnB1dDogICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqICAg ICAgICAgICAgICAgICAgICAgICAgIERDTUQgZnJhbWUgc3RydWN0dXJlCisgKgorICogVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBtcnNhc19wYXNzdGhydSgpIHRvIHByaW50IG91dCBkZWJ1 ZyBpbmZvcm1hdGlvbgorICogaW4gdGhlIGhhbmRsaW5nIGFuZCByb3V0aW5nIG9mIERDTUQgY29t bWFuZHMuCisgKi8KK3ZvaWQgbXJzYXNfZHVtcF9kY21kKCBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj LCBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSogZGNtZCApCit7CisgICAgaW50IGk7CisKKyAgICBk ZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21kLT5jbWQ6ICAgICAgICAgICAweCUwMmho eFxuIiwgZGNtZC0+Y21kKTsKKyAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21k LT5jbWRfc3RhdHVzOiAgICAweCUwMmhoeFxuIiwgZGNtZC0+Y21kX3N0YXR1cyk7CisgICAgZGV2 aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+c2dlX2NvdW50OiAgICAgMHglMDJoaHhc biIsIGRjbWQtPnNnZV9jb3VudCk7CisgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi ZGNtZC0+Y29udGV4dDogICAgICAgMHglMDh4XG4iLCBkY21kLT5jb250ZXh0KTsKKyAgICBkZXZp Y2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21kLT5mbGFnczogICAgICAgICAweCUwNGh4XG4i LCBkY21kLT5mbGFncyk7CisgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+ dGltZW91dDogICAgICAgMHglMDRoeFxuIiwgZGNtZC0+dGltZW91dCk7CisgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+ZGF0YV94ZmVyX2xlbjogMHglMDh4XG4iLCBkY21k LT5kYXRhX3hmZXJfbGVuKTsKKyAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJkY21k LT5vcGNvZGU6ICAgICAgICAweCUwOHhcbiIsIGRjbWQtPm9wY29kZSk7CisgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiZGNtZC0+bWJveC53WzBdOiAgICAgMHglMDh4XG4iLCBkY21k LT5tYm94LndbMF0pOworICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgImRjbWQtPm1i b3gud1sxXTogICAgIDB4JTA4eFxuIiwgZGNtZC0+bWJveC53WzFdKTsKKyAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICJkY21kLT5tYm94LndbMl06ICAgICAweCUwOHhcbiIsIGRjbWQt Pm1ib3gud1syXSk7CisgICAgZm9yIChpPTA7IGk8IE1JTihNQVhfSU9DVExfU0dFLCBkY21kLT5z Z2VfY291bnQpOyBpKyspIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi c2dsWyUwMmRdXG4iLCBpKTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi ICAgIHNnZTMyWyUwMmRdLnBoeXNfYWRkcjogMHglMDh4XG4iLCAgCisgICAgICAgICAgICBpLCBk Y21kLT5zZ2wuc2dlMzJbaV0ucGh5c19hZGRyKTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+ bXJzYXNfZGV2LCAiICAgIHNnZTMyWyUwMmRdLmxlbmd0aDogICAgMHglMDh4XG4iLCAKKyAgICAg ICAgICAgIGksIGRjbWQtPnNnbC5zZ2UzMltpXS5sZW5ndGgpOworICAgICAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICIgICAgc2dlNjRbJTAyZF0ucGh5c19hZGRyOiAweCUwOGxseFxu IiwKKyAgICAgICAgICAgIGksIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBkY21kLT5zZ2wuc2dl NjRbaV0ucGh5c19hZGRyKTsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi ICAgIHNnZTY0WyUwMmRdLmxlbmd0aDogICAgMHglMDh4XG4iLCAKKyAgICAgICAgICAgIGksIGRj bWQtPnNnbC5zZ2U2NFtpXS5sZW5ndGgpOworICAgIH0KK30KKworLyoqCisgKiBtcnNhc19kdW1w X2lvY3RsOiAgICAgICBQcmludCBkZWJ1ZyBvdXRwdXQgZm9yIGlvY3RsIAorICogaW5wdXQ6ICAg ICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAg ICAgICAgICAgICAgICBpb2NwYWNrZXQgc3RydWN0dXJlIAorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGZyb20gbXJzYXNfcGFzc3RocnUoKSB0byBwcmludCBvdXQgZGVidWcgaW5mb3Jt YXRpb24KKyAqIGluIHRoZSBoYW5kbGluZyBhbmQgcm91dGluZyBvZiBpb2N0bCBjb21tYW5kcy4K KyAqLwordm9pZCBtcnNhc19kdW1wX2lvY3RsKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVj dCBtcnNhc19pb2NwYWNrZXQgKnVzZXJfaW9jKQoreworICAgIHVuaW9uIG1yc2FzX2ZyYW1lICpp bl9jbWQgPSAodW5pb24gbXJzYXNfZnJhbWUgKikgJih1c2VyX2lvYy0+ZnJhbWUucmF3KTsKKyAg ICBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSogZGNtZCA9IChzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFt ZSAqKSAmKGluX2NtZC0+ZGNtZCk7CisgICAgaW50IGk7CisgCisgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAKKyAgICAgICAgIj09PT09PSBJbiAlcygpID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iLCBfX2Z1bmNfXyk7CisgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAiaG9zdF9ubzogICAgMHglMDRoeFxuIiwgdXNlcl9pb2MtPmhvc3Rfbm8p OworICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIiBfX3BhZDE6ICAgIDB4JTA0aHhc biIsIHVzZXJfaW9jLT5fX3BhZDEpOworICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rldiwg InNnbF9vZmY6ICAgIDB4JTA4eFxuIiwgIHVzZXJfaW9jLT5zZ2xfb2ZmKTsKKyAgICBkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJzZ2VfY291bnQ6ICAweCUwOHhcbiIsICB1c2VyX2lvYy0+ c2dlX2NvdW50KTsKKyAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJzZW5zZV9vZmY6 ICAweCUwOHhcbiIsICB1c2VyX2lvYy0+c2Vuc2Vfb2ZmKTsKKyAgICBkZXZpY2VfcHJpbnRmKHNj LT5tcnNhc19kZXYsICJzZW5zZV9sZW46ICAweCUwOHhcbiIsICB1c2VyX2lvYy0+c2Vuc2VfbGVu KTsKKworICAgIG1yc2FzX2R1bXBfZGNtZChzYywgZGNtZCk7CisKKyAgICBmb3IgKGk9MDsgaTwg TUlOKE1BWF9JT0NUTF9TR0UsIHVzZXJfaW9jLT5zZ2VfY291bnQpOyBpKyspIHsKKyAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAic2dlWyUwMmRdXG4iLCBpKTsKKyAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAKKyAgICAgICAgICAgICIgICAgaW92X2Jhc2U6 ICVwXG4iLCB1c2VyX2lvYy0+c2dsW2ldLmlvdl9iYXNlKTsKKyAgICAgICAgZGV2aWNlX3ByaW50 ZihzYy0+bXJzYXNfZGV2LCAiICAgIGlvdl9sZW46ICAlcFxuIiwgCisgICAgICAgICAgICAodm9p ZCopdXNlcl9pb2MtPnNnbFtpXS5pb3ZfbGVuKTsKKyAgICB9CisgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAKKyAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Cit9CisKKy8qKgorICogbXJz YXNfcGFzc3RocnU6ICAgICAgICBIYW5kbGUgcGFzcy10aHJvdWdoIGNvbW1hbmRzIAorICogaW5w dXQ6ICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqICAgICAg ICAgICAgICAgICAgICAgICAgYXJndW1lbnQgcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGZyb20gbXJzYXNfaW9jdGwoKSB0byBoYW5kbGUgcGFzcy10aHJvdWdoIGFuZCAK KyAqIGlvY3RsIGNvbW1hbmRzIHRvIEZpcm13YXJlLiAgCisgKi8KK2ludCBtcnNhc19wYXNzdGhy dSggc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdm9pZCAqYXJnICkKK3sKKyAgICBzdHJ1Y3QgbXJz YXNfaW9jcGFja2V0ICp1c2VyX2lvYyA9IChzdHJ1Y3QgbXJzYXNfaW9jcGFja2V0ICopYXJnOwor ICAgIHVuaW9uICBtcnNhc19mcmFtZSAqaW5fY21kID0gKHVuaW9uIG1yc2FzX2ZyYW1lICopICYo dXNlcl9pb2MtPmZyYW1lLnJhdyk7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCA9IE5V TEw7CisgICAgYnVzX2RtYV90YWdfdCBpb2N0bF9kYXRhX3RhZ1tNQVhfSU9DVExfU0dFXTsKKyAg ICBidXNfZG1hbWFwX3QgaW9jdGxfZGF0YV9kbWFtYXBbTUFYX0lPQ1RMX1NHRV07CisgICAgdm9p ZCAqaW9jdGxfZGF0YV9tZW1bTUFYX0lPQ1RMX1NHRV07ICAvLyBpb2N0bCBkYXRhIHZpcnR1YWwg YWRkcgorICAgIGJ1c19hZGRyX3QgaW9jdGxfZGF0YV9waHlzX2FkZHJbTUFYX0lPQ1RMX1NHRV07 IC8vIGlvY3RsIGRhdGEgcGh5cyBhZGRyCisgICAgYnVzX2RtYV90YWdfdCBpb2N0bF9zZW5zZV90 YWcgPSAwOworICAgIGJ1c19kbWFtYXBfdCBpb2N0bF9zZW5zZV9kbWFtYXAgPSAwOworICAgIHZv aWQgKmlvY3RsX3NlbnNlX21lbSA9IDA7ICAKKyAgICBidXNfYWRkcl90IGlvY3RsX3NlbnNlX3Bo eXNfYWRkciA9IDA7IAorICAgIGludCBpLCBhZGFwdGVyLCBpb2N0bF9kYXRhX3NpemUsIGlvY3Rs X3NlbnNlX3NpemUsIHJldD0wOworICAgIHN0cnVjdCBtcnNhc19zZ2UzMiAqa2Vybl9zZ2UzMjsK KyAgICB1bnNpZ25lZCBsb25nICpzZW5zZV9wdHI7CisKKyAgICAvKiBGb3IgZGVidWcgLSB1bmNv bW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGZvciBkZWJ1ZyBvdXRwdXQgKi8KKyAgICAvL21yc2Fz X2R1bXBfaW9jdGwoc2MsIHVzZXJfaW9jKTsgCisKKyAgICAvKiAKKyAgICAgKiBDaGVjayBmb3Ig Tk9QIGZyb20gTWVnYUNsaS4uLiBNZWdhQ2xpIGNhbiBpc3N1ZSBhIERDTUQgb2YgMC4gIEluIHRo aXMgCisgICAgICogY2FzZSBkbyBub3RoaW5nIGFuZCByZXR1cm4gMCB0byBpdCBhcyBzdGF0dXMu CisgICAgICovCisgICAgaWYgKGluX2NtZC0+ZGNtZC5vcGNvZGUgPT0gMCkgeworICAgICAgICBk ZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJJbiAlcygpIEdvdCBhIE5PUFxuIiwgX19mdW5j X18pOworICAgICAgICB1c2VyX2lvYy0+ZnJhbWUuaGRyLmNtZF9zdGF0dXMgPSBNRklfU1RBVF9P SzsKKyAgICAgICAgcmV0dXJuICgwKTsKKyAgICB9CisKKyAgICAvKiBWYWxpZGF0ZSBob3N0X25v ICovCisgICAgYWRhcHRlciA9IHVzZXJfaW9jLT5ob3N0X25vOworICAgIGlmIChhZGFwdGVyICE9 IGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSkgeworICAgICAgICBkZXZpY2VfcHJpbnRm KHNjLT5tcnNhc19kZXYsICJJbiAlcygpIElPQ1RMIG5vdCBmb3IgbWUhXG4iLCBfX2Z1bmNfXyk7 CisgICAgICAgIHJldHVybihFTk9FTlQpOworICAgIH0KKworICAgIC8qIFZhbGlkYXRlIFNHTCBs ZW5ndGggKi8KKyAgICBpZiAodXNlcl9pb2MtPnNnZV9jb3VudCA+IE1BWF9JT0NUTF9TR0UpIHsg CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkluICVzKCkgU0dMIGlzIHRv byBsb25nICglZCA+IDgpLlxuIiwgCisgICAgICAgICAgICBfX2Z1bmNfXywgdXNlcl9pb2MtPnNn ZV9jb3VudCk7CisgICAgICAgIHJldHVybihFTk9FTlQpOworICAgIH0KKworICAgIC8qIEdldCBh IGNvbW1hbmQgKi8KKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisgICAgaWYgKCFj bWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiRmFpbGVkIHRvIGdl dCBhIGZyZWUgY21kIGZvciBJT0NUTFxuIik7CisgICAgICAgIHJldHVybihFTk9NRU0pOworICAg IH0KKworICAgIC8qCisgICAgICogVXNlcidzIElPQ1RMIHBhY2tldCBoYXMgMiBmcmFtZXMgKG1h eGltdW0pLiBDb3B5IHRob3NlIHR3bworICAgICAqIGZyYW1lcyBpbnRvIG91ciBjbWQncyBmcmFt ZXMuIGNtZC0+ZnJhbWUncyBjb250ZXh0IHdpbGwgZ2V0CisgICAgICogb3ZlcndyaXR0ZW4gd2hl biB3ZSBjb3B5IGZyb20gdXNlcidzIGZyYW1lcy4gU28gc2V0IHRoYXQgdmFsdWUKKyAgICAgKiBh bG9uZSBzZXBhcmF0ZWx5CisgICAgICovCisgICAgbWVtY3B5KGNtZC0+ZnJhbWUsIHVzZXJfaW9j LT5mcmFtZS5yYXcsIDIgKiBNRUdBTUZJX0ZSQU1FX1NJWkUpOworICAgIGNtZC0+ZnJhbWUtPmhk ci5jb250ZXh0ID0gY21kLT5pbmRleDsKKyAgICBjbWQtPmZyYW1lLT5oZHIucGFkXzAgPSAwOwor ICAgIGNtZC0+ZnJhbWUtPmhkci5mbGFncyAmPSB+KE1GSV9GUkFNRV9JRUVFIHwgTUZJX0ZSQU1F X1NHTDY0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRklfRlJBTUVfU0VOU0U2 NCk7CisKKyAgICAvKgorICAgICAqIFRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSBiZXR3ZWVuIGFw cGxpY2F0aW9ucyBhbmQgdGhlIGZ3IHVzZXMKKyAgICAgKiBNRkkgZnJhbWVzLiBFLmcsIFJBSUQg Y29uZmlndXJhdGlvbiBjaGFuZ2VzLCBMRCBwcm9wZXJ0eSBjaGFuZ2VzCisgICAgICogZXRjIGFy ZSBhY2NvbXBsaXNoZXMgdGhyb3VnaCBkaWZmZXJlbnQga2luZHMgb2YgTUZJIGZyYW1lcy4gVGhl CisgICAgICogZHJpdmVyIG5lZWRzIHRvIGNhcmUgb25seSBhYm91dCBzdWJzdGl0dXRpbmcgdXNl ciBidWZmZXJzIHdpdGgKKyAgICAgKiBrZXJuZWwgYnVmZmVycyBpbiBTR0xzLiBUaGUgbG9jYXRp b24gb2YgU0dMIGlzIGVtYmVkZGVkIGluIHRoZQorICAgICAqIHN0cnVjdCBpb2NwYWNrZXQgaXRz ZWxmLgorICAgICAqLworICAgIGtlcm5fc2dlMzIgPSAoc3RydWN0IG1yc2FzX3NnZTMyICopCisg ICAgICAgICgodW5zaWduZWQgbG9uZyljbWQtPmZyYW1lICsgdXNlcl9pb2MtPnNnbF9vZmYpOwor CisgICAgLyoKKyAgICAgKiBGb3IgZWFjaCB1c2VyIGJ1ZmZlciwgY3JlYXRlIGEgbWlycm9yIGJ1 ZmZlciBhbmQgY29weSBpbgorICAgICAqLworICAgIGZvciAoaT0wOyBpIDwgdXNlcl9pb2MtPnNn ZV9jb3VudDsgaSsrKSB7CisgICAgICAgIGlmICghdXNlcl9pb2MtPnNnbFtpXS5pb3ZfbGVuKQor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlvY3RsX2RhdGFfc2l6ZSA9IHVzZXJfaW9j LT5zZ2xbaV0uaW92X2xlbjsKKyAgICAgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1y c2FzX3BhcmVudF90YWcsICAgLy8gcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEsIDAsICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQsIGJvdW5kYXJ5CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2Fk ZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIsICAg ICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVM TCwgICAgICAgICAgICAgLy8gZmlsdGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW9jdGxfZGF0YV9zaXplLCAgICAgICAgLy8gbWF4c2l6ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBtc2VnbWVu dHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jdGxfZGF0YV9zaXplLCAgICAg ICAgLy8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfRE1B X0FMTE9DTk9XLCAgICAgICAvLyBmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmaW9jdGxfZGF0YV90YWdbaV0pKSB7CisgICAgICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgaW9jdGwgZGF0 YSB0YWdcbiIpOworICAgICAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgICAgICB9CisgICAg ICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKGlvY3RsX2RhdGFfdGFnW2ldLCAodm9pZCAqKikmaW9j dGxfZGF0YV9tZW1baV0sCisgICAgICAgICAgICAgICAgKEJVU19ETUFfTk9XQUlUIHwgQlVTX0RN QV9aRVJPKSwgJmlvY3RsX2RhdGFfZG1hbWFwW2ldKSkgeworICAgICAgICAgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGlvY3RsIGRhdGEgbWVtXG4iKTsK KyAgICAgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnVz X2RtYW1hcF9sb2FkKGlvY3RsX2RhdGFfdGFnW2ldLCBpb2N0bF9kYXRhX2RtYW1hcFtpXSwKKyAg ICAgICAgICAgICAgICBpb2N0bF9kYXRhX21lbVtpXSwgaW9jdGxfZGF0YV9zaXplLCBtcnNhc19h bGxvY19jYiwKKyAgICAgICAgICAgICAgICAmaW9jdGxfZGF0YV9waHlzX2FkZHJbaV0sIEJVU19E TUFfTk9XQUlUKSkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi Q2Fubm90IGxvYWQgaW9jdGwgZGF0YSBtZW1cbiIpOworICAgICAgICAgICAgcmV0dXJuIChFTk9N RU0pOworICAgICAgICB9CisKKyAgICAgICAgLyogU2F2ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBh bmQgbGVuZ3RoICovCisgICAgICAgIGtlcm5fc2dlMzJbaV0ucGh5c19hZGRyID0gKHVfaW50MzJf dClpb2N0bF9kYXRhX3BoeXNfYWRkcltpXTsKKyAgICAgICAga2Vybl9zZ2UzMltpXS5sZW5ndGgg PSB1c2VyX2lvYy0+c2dsW2ldLmlvdl9sZW47CisKKyAgICAgICAgLyogQ29weSBpbiBkYXRhIGZy b20gdXNlciBzcGFjZSAqLworICAgICAgICByZXQgPSBjb3B5aW4odXNlcl9pb2MtPnNnbFtpXS5p b3ZfYmFzZSwgaW9jdGxfZGF0YV9tZW1baV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgdXNl cl9pb2MtPnNnbFtpXS5pb3ZfbGVuKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSU9DVEwgY29weWluIGZhaWxlZCFcbiIpOwor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpb2N0bF9zZW5z ZV9zaXplID0gdXNlcl9pb2MtPnNlbnNlX2xlbjsKKyAgICBpZiAodXNlcl9pb2MtPnNlbnNlX2xl bikgeworICAgICAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50X3Rh ZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAg ICAgICAgICAgICAgICAgLy8gYWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsLy8gbG93YWRkcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBoaWdoYWRk cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAg ICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b2N0bF9zZW5zZV9zaXplLCAgICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgIC8vIG1zZWdtZW50cworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpb2N0bF9zZW5zZV9zaXplLCAgICAgICAvLyBtYXhzZWdz aXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAg ICAgIC8vIGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws ICAgICAgICAgICAgIC8vIGxvY2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZpb2N0bF9zZW5zZV90YWcpKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRm KHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgaW9jdGwgc2Vuc2UgdGFnXG4iKTsKKyAg ICAgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnVzX2Rt YW1lbV9hbGxvYyhpb2N0bF9zZW5zZV90YWcsICh2b2lkICoqKSZpb2N0bF9zZW5zZV9tZW0sCisg ICAgICAgICAgICAgICAgKEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPKSwgJmlvY3RsX3Nl bnNlX2RtYW1hcCkpIHsKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rldiwg IkNhbm5vdCBhbGxvY2F0ZSBpb2N0bCBkYXRhIG1lbVxuIik7CisgICAgICAgICAgICByZXR1cm4g KEVOT01FTSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChpb2N0bF9z ZW5zZV90YWcsIGlvY3RsX3NlbnNlX2RtYW1hcCwKKyAgICAgICAgICAgICAgICBpb2N0bF9zZW5z ZV9tZW0sIGlvY3RsX3NlbnNlX3NpemUsIG1yc2FzX2FsbG9jX2NiLAorICAgICAgICAgICAgICAg ICZpb2N0bF9zZW5zZV9waHlzX2FkZHIsIEJVU19ETUFfTk9XQUlUKSkgeworICAgICAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGxvYWQgaW9jdGwgc2Vuc2UgbWVt XG4iKTsKKyAgICAgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBz ZW5zZV9wdHIgPSAKKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25n KWNtZC0+ZnJhbWUgKyB1c2VyX2lvYy0+c2Vuc2Vfb2ZmKTsKKyAgICAgICAgICAgIHNlbnNlX3B0 ciA9IGlvY3RsX3NlbnNlX21lbTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCB0aGUgc3lu Y19jbWQgZmxhZyBzbyB0aGF0IHRoZSBJU1Iga25vd3Mgbm90IHRvIGNvbXBsZXRlIHRoaXMKKyAg ICAgKiBjbWQgdG8gdGhlIFNDU0kgbWlkLWxheWVyCisgICAgICovCisgICAgY21kLT5zeW5jX2Nt ZCA9IDE7CisgICAgbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQoc2MsIGNtZCk7CisgICAgY21kLT5z eW5jX2NtZCA9IDA7CisKKyAgICAvKgorICAgICAqIGNvcHkgb3V0IHRoZSBrZXJuZWwgYnVmZmVy cyB0byB1c2VyIGJ1ZmZlcnMKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNlcl9pb2Mt PnNnZV9jb3VudDsgaSsrKSB7CisgICAgICAgIHJldCA9IGNvcHlvdXQoaW9jdGxfZGF0YV9tZW1b aV0sIHVzZXJfaW9jLT5zZ2xbaV0uaW92X2Jhc2UsIAorICAgICAgICAgICAgdXNlcl9pb2MtPnNn bFtpXS5pb3ZfbGVuKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiSU9DVEwgY29weW91dCBmYWlsZWQhXG4iKTsKKyAgICAgICAg ICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb3B5IG91 dCB0aGUgc2Vuc2UKKyAgICAgKi8KKyAgICBpZiAodXNlcl9pb2MtPnNlbnNlX2xlbikgeworICAg ICAgICAvKgorICAgICAgICAgKiBzZW5zZV9idWZmIHBvaW50cyB0byB0aGUgbG9jYXRpb24gdGhh dCBoYXMgdGhlIHVzZXIKKyAgICAgICAgICogc2Vuc2UgYnVmZmVyIGFkZHJlc3MKKyAgICAgICAg ICovCisgICAgICAgIHNlbnNlX3B0ciA9ICh1bnNpZ25lZCBsb25nICopICgodW5zaWduZWQgbG9u Zyl1c2VyX2lvYy0+ZnJhbWUucmF3ICsKKyAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lvYy0+ c2Vuc2Vfb2ZmKTsKKyAgICAgICAgcmV0ID0gY29weW91dChpb2N0bF9zZW5zZV9tZW0sICh1bnNp Z25lZCBsb25nKikqc2Vuc2VfcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lvYy0+ c2Vuc2VfbGVuKTsgCisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIklPQ1RMIHNlbnNlIGNvcHlvdXQgZmFpbGVkIVxuIik7CisgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogUmV0 dXJuIGNvbW1hbmQgc3RhdHVzIHRvIHVzZXIgc3BhY2UKKyAgICAgKi8KKyAgICBtZW1jcHkoJnVz ZXJfaW9jLT5mcmFtZS5oZHIuY21kX3N0YXR1cywgJmNtZC0+ZnJhbWUtPmhkci5jbWRfc3RhdHVz LCAKKyAgICAgICAgICAgIHNpemVvZih1X2ludDhfdCkpOworCitvdXQ6CisgICAgLyogCisgICAg ICogUmVsZWFzZSBzZW5zZSBidWZmZXIgCisgICAgICovCisgICAgaWYgKGlvY3RsX3NlbnNlX3Bo eXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoaW9jdGxfc2Vuc2VfdGFnLCBpb2N0 bF9zZW5zZV9kbWFtYXApOworICAgIGlmIChpb2N0bF9zZW5zZV9tZW0pCisgICAgICAgIGJ1c19k bWFtZW1fZnJlZShpb2N0bF9zZW5zZV90YWcsIGlvY3RsX3NlbnNlX21lbSwgaW9jdGxfc2Vuc2Vf ZG1hbWFwKTsKKyAgICBpZiAoaW9jdGxfc2Vuc2VfdGFnKQorICAgICAgICBidXNfZG1hX3RhZ19k ZXN0cm95KGlvY3RsX3NlbnNlX3RhZyk7CisKKyAgICAvKiAKKyAgICAgKiBSZWxlYXNlIGRhdGEg YnVmZmVycyAKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNlcl9pb2MtPnNnZV9jb3Vu dDsgaSsrKSB7CisgICAgICAgIGlmIChpb2N0bF9kYXRhX3BoeXNfYWRkcltpXSkKKyAgICAgICAg ICAgIGJ1c19kbWFtYXBfdW5sb2FkKGlvY3RsX2RhdGFfdGFnW2ldLCBpb2N0bF9kYXRhX2RtYW1h cFtpXSk7CisgICAgICAgIGlmIChpb2N0bF9kYXRhX21lbVtpXSAhPSBOVUxMKQorICAgICAgICAg ICAgYnVzX2RtYW1lbV9mcmVlKGlvY3RsX2RhdGFfdGFnW2ldLCBpb2N0bF9kYXRhX21lbVtpXSwg CisgICAgICAgICAgICAgICAgaW9jdGxfZGF0YV9kbWFtYXBbaV0pOworICAgICAgICBpZiAoaW9j dGxfZGF0YV90YWdbaV0gIT0gTlVMTCkKKyAgICAgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3ko aW9jdGxfZGF0YV90YWdbaV0pOworICAgIH0KKworICAgIC8qIEZyZWUgY29tbWFuZCAqLworICAg IG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworCisgICAgcmV0dXJuKHJldCk7Cit9CisKKy8q KgorICogbXJzYXNfYWxsb2NfbWZpX2NtZHM6ICBBbGxvY2F0ZXMgdGhlIGNvbW1hbmQgcGFja2V0 cworICogaW5wdXQ6ICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUK KyAqCisgKiBFYWNoIElPQ1RMIG9yIHBhc3N0aHJ1IGNvbW1hbmQgdGhhdCBpcyBpc3N1ZWQgdG8g dGhlIEZXIGFyZSB3cmFwcGVkIGluIGEKKyAqIGxvY2FsIGRhdGEgc3RydWN0dXJlIGNhbGxlZCBt cnNhc19tZmlfY21kLiAgVGhlIGZyYW1lIGVtYmVkZGVkIGluIHRoaXMgCisgKiBtcnNhc19tZmkg aXMgaXNzdWVkIHRvIEZXLiBUaGUgYXJyYXkgaXMgdXNlZCBvbmx5IHRvIGxvb2sgdXAgdGhlIAor ICogbXJzYXNfbWZpX2NtZCBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGZyZWUgY29tbWFuZHMgYXJl IG1haW50YWluZWQgaW4gYQorICogbGlua2VkIGxpc3QuCisgKi8KK2ludCBtcnNhc19hbGxvY19t ZmlfY21kcyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBpLCBqOworICAgIHVf aW50MzJfdCBtYXhfY21kOworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisKKyAgICBt YXhfY21kID0gTVJTQVNfTUFYX01GSV9DTURTOworCisgICAgLyoKKyAgICAgKiBzYy0+bWZpX2Nt ZF9saXN0IGlzIGFuIGFycmF5IG9mIHN0cnVjdCBtcnNhc19tZmlfY21kIHBvaW50ZXJzLiBBbGxv Y2F0ZSB0aGUKKyAgICAgKiBkeW5hbWljIGFycmF5IGZpcnN0IGFuZCB0aGVuIGFsbG9jYXRlIGlu ZGl2aWR1YWwgY29tbWFuZHMuCisgICAgICovCisgICAgc2MtPm1maV9jbWRfbGlzdCA9IG1hbGxv YyhzaXplb2Yoc3RydWN0IG1yc2FzX21maV9jbWQqKSptYXhfY21kLCBNX01SU0FTLCBNX05PV0FJ VCk7CisgICAgaWYgKCFzYy0+bWZpX2NtZF9saXN0KSB7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIG1maV9jbWQgY21kX2xpc3Qu XG4iKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorICAgIG1lbXNldChzYy0+bWZp X2NtZF9saXN0LCAwLCBzaXplb2Yoc3RydWN0IG1yc2FzX21maV9jbWQgKikqbWF4X2NtZCk7Cisg ICAgZm9yIChpID0gMDsgaSA8IG1heF9jbWQ7IGkrKykgeworICAgICAgICBzYy0+bWZpX2NtZF9s aXN0W2ldID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXJzYXNfbWZpX2NtZCksIAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTV9NUlNBUywgTV9OT1dBSVQpOworICAgICAgICBpZiAo IXNjLT5tZmlfY21kX2xpc3RbaV0pIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBq KyspCisgICAgICAgICAgICAgICAgZnJlZShzYy0+bWZpX2NtZF9saXN0W2pdLE1fTVJTQVMpOwor ICAgICAgICAgICAgZnJlZShzYy0+bWZpX2NtZF9saXN0LCBNX01SU0FTKTsKKyAgICAgICAgICAg IHNjLT5tZmlfY21kX2xpc3QgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuKEVOT01FTSk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7Cisg ICAgICAgIGNtZCA9IHNjLT5tZmlfY21kX2xpc3RbaV07CisgICAgICAgIG1lbXNldChjbWQsIDAs IHNpemVvZihzdHJ1Y3QgbXJzYXNfbWZpX2NtZCkpOworICAgICAgICBjbWQtPmluZGV4ID0gaTsK KyAgICAgICAgY21kLT5jY2JfcHRyID0gTlVMTDsKKyAgICAgICAgY21kLT5zYyA9IHNjOyAKKyAg ICAgICAgVEFJTFFfSU5TRVJUX1RBSUwoJihzYy0+bXJzYXNfbWZpX2NtZF9saXN0X2hlYWQpLCBj bWQsIG5leHQpOworICAgIH0KKworICAgIC8qIGNyZWF0ZSBhIGZyYW1lIHBvb2wgYW5kIGFzc2ln biBvbmUgZnJhbWUgdG8gZWFjaCBjb21tYW5kICovCisgICAgaWYgKG1yc2FzX2NyZWF0ZV9mcmFt ZV9wb29sKHNjKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5u b3QgYWxsb2NhdGUgRE1BIGZyYW1lIHBvb2wuXG4iKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IE1SU0FTX01BWF9NRklfQ01EUzsgaSsrKSB7IC8vIEZyZWUgdGhlIGZyYW1lcworICAgICAgICAg ICAgY21kID0gc2MtPm1maV9jbWRfbGlzdFtpXTsKKyAgICAgICAgICAgIG1yc2FzX2ZyZWVfZnJh bWUoc2MsIGNtZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjLT5tZmljbWRfZnJhbWVfdGFn ICE9IE5VTEwpCisgICAgICAgICAgICBidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5tZmljbWRfZnJh bWVfdGFnKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorCisgICAgcmV0dXJuKDAp OworfQorCisvKioKKyAqIG1yc2FzX2NyZWF0ZV9mcmFtZV9wb29sIC0gICBDcmVhdGVzIERNQSBw b29sIGZvciBjbWQgZnJhbWVzCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgQWRhcHRl ciBzb2Z0IHN0YXRlCisgKgorICogRWFjaCBjb21tYW5kIHBhY2tldCBoYXMgYW4gZW1iZWRkZWQg RE1BIG1lbW9yeSBidWZmZXIgdGhhdCBpcyB1c2VkIGZvcgorICogZmlsbGluZyBNRkkgZnJhbWUg YW5kIHRoZSBTRyBsaXN0IHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgZnJhbWUuIFRoaXMK KyAqIGZ1bmN0aW9uIGNyZWF0ZXMgdGhvc2UgRE1BIG1lbW9yeSBidWZmZXJzIGZvciBlYWNoIGNv bW1hbmQgcGFja2V0IGJ5IHVzaW5nCisgKiBQQ0kgcG9vbCBmYWNpbGl0eS4gcGFkXzAgaXMgaW5p dGlhbGl6ZWQgdG8gMCB0byBwcmV2ZW50IGNvcnJ1cHRpbmcgdmFsdWUgCisgKiBvZiBjb250ZXh0 IGFuZCBjb3VsZCBjYXVzZSBGVyBjcmFzaC4KKyAqLworc3RhdGljIGludCBtcnNhc19jcmVhdGVf ZnJhbWVfcG9vbChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBpOworICAgIHN0 cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisKKyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBz Yy0+bXJzYXNfcGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxLCAwLCAgICAgICAgICAgICAgICAgICAvLyBhbGdubW50LCBib3VuZGFyeQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBo aWdoYWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAg ICAgIC8vIGZpbHRlciwgZmlsdGVyYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVJT QVNfTUZJX0ZSQU1FX1NJWkUsICAgLy8gbWF4c2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEsICAgICAgICAgICAgICAgICAgICAgIC8vIG1zZWdtZW50cworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1SU0FTX01GSV9GUkFNRV9TSVpFLCAgIC8vIG1heHNlZ3NpemUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCVVNfRE1BX0FMTE9DTk9XLCAgICAgICAvLyBmbGFncwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAgICAgIC8vIGxv Y2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjLT5tZmljbWRf ZnJhbWVfdGFnKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5u b3QgY3JlYXRlIE1GSSBmcmFtZSB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7Cisg ICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE1SU0FTX01BWF9NRklfQ01EUzsgaSsrKSB7Cisg ICAgICAgIGNtZCA9IHNjLT5tZmlfY21kX2xpc3RbaV07CisgICAgICAgIGNtZC0+ZnJhbWUgPSBt cnNhc19hbGxvY19mcmFtZShzYywgY21kKTsKKyAgICAgICAgaWYgKGNtZC0+ZnJhbWUgPT0gTlVM TCkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFs bG9jIE1GSSBmcmFtZSBtZW1vcnlcbiIpOworICAgICAgICAgICAgcmV0dXJuIChFTk9NRU0pOwor ICAgICAgICB9IAorICAgICAgICBtZW1zZXQoY21kLT5mcmFtZSwgMCwgTVJTQVNfTUZJX0ZSQU1F X1NJWkUpOyAKKyAgICAgICAgY21kLT5mcmFtZS0+aW8uY29udGV4dCA9IGNtZC0+aW5kZXg7Cisg ICAgICAgIGNtZC0+ZnJhbWUtPmlvLnBhZF8wID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4oMCk7 Cit9CisKKy8qKgorICogbXJzYXNfYWxsb2NfZnJhbWUgLSAgIEFsbG9jYXRlcyBNRkkgRnJhbWVz CisgKiBpbnB1dDogICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogQ3Jl YXRlIGJ1cyBETUEgbWVtb3J5IHRhZyBhbmQgZG1hbWFwIGFuZCBsb2FkIG1lbW9yeSBmb3IgTUZJ IGZyYW1lcy4gCisgKiBSZXR1cm5zIHZpcnR1YWwgbWVtb3J5IHBvaW50ZXIgdG8gYWxsb2NhdGVk IHJlZ2lvbi4gCisgKi8KK3ZvaWQgKm1yc2FzX2FsbG9jX2ZyYW1lKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgdV9pbnQzMl90IGZyYW1l X3NpemUgPSBNUlNBU19NRklfRlJBTUVfU0laRTsKKworICAgIGlmIChidXNfZG1hbWVtX2FsbG9j KHNjLT5tZmljbWRfZnJhbWVfdGFnLCAodm9pZCAqKikmY21kLT5mcmFtZV9tZW0sCisgICAgICAg ICAgICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAmY21kLT5mcmFtZV9kbWFtYXApKSB7CisgICAg ICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBNRkkgZnJhbWUg bWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICB9CisgICAgaWYgKGJ1c19k bWFtYXBfbG9hZChzYy0+bWZpY21kX2ZyYW1lX3RhZywgY21kLT5mcmFtZV9kbWFtYXAsCisgICAg ICAgICAgICAgICAgICAgICAgICBjbWQtPmZyYW1lX21lbSwgZnJhbWVfc2l6ZSwgbXJzYXNfYWxs b2NfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5mcmFtZV9waHlzX2FkZHIsIEJV U19ETUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJD YW5ub3QgbG9hZCBJTyByZXF1ZXN0IG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAoTlVMTCk7 CisgICAgfQorICAKKyAgICByZXR1cm4oY21kLT5mcmFtZV9tZW0pOworfQorCisvKgorICogbXJz YXNfYWxsb2NfY2I6ICBDYWxsYmFjayBmdW5jdGlvbiBvZiBidXNfZG1hbWFwX2xvYWQoKQorICog aW5wdXQ6ICAgICAgICAgICBjYWxsYmFjayBhcmd1bWVudCwKKyAqICAgICAgICAgICAgICAgICAg bWFjaGluZSBkZXBlbmRlbnQgdHlwZSB0aGF0IGRlc2NyaWJlcyBETUEgc2VnbWVudHMsCisgKiAg ICAgICAgICAgICAgICAgIG51bWJlciBvZiBzZWdtZW50cywKKyAqICAgICAgICAgICAgICAgICAg ZXJyb3IgY29kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciB0aGUgZHJpdmVyIHRvIHJl Y2VpdmUgbWFwcGluZyBpbmZvcm1hdGlvbiByZXN1bHRhbnQKKyAqIG9mIHRoZSBidXNfZG1hbWFw X2xvYWQoKS4gVGhlIGluZm9ybWF0aW9uIGlzIGFjdHVhbGx5IG5vdCBiZWluZyB1c2VkLCAKKyAq IGJ1dCB0aGUgYWRkcmVzcyBpcyBzYXZlZCBhbnl3YXkuIAorICovCitzdGF0aWMgdm9pZCBtcnNh c19hbGxvY19jYih2b2lkICphcmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLAorICAgICAgICBp bnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKyAgICBidXNfYWRkcl90ICphZGRyOworCisgICAgYWRk ciA9IGFyZzsKKyAgICAqYWRkciA9IHNlZ3NbMF0uZHNfYWRkcjsKK30KKworLyoqCisgKiBtcnNh c19mcmVlX2ZyYW1lczogICAgRnJlZXMgbWVtb3J5IGZvciAgTUZJIGZyYW1lcworICogaW5wdXQ6 ICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIERlYWxsb2NhdGVzIE1G SSBmcmFtZXMgbWVtb3J5LiAgQ2FsbGVkIGZyb20gbXJzYXNfZnJlZV9tZW0oKSBkdXJpbmcgCisg KiBkZXRhY2ggYW5kIGVycm9yIGNhc2UgZHVyaW5nIGNyZWF0aW9uIG9mIGZyYW1lIHBvb2wuCisg Ki8KK3ZvaWQgbXJzYXNfZnJlZV9mcmFtZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3Qg bXJzYXNfbWZpX2NtZCAqY21kKQoreworICAgIGlmIChjbWQtPmZyYW1lX3BoeXNfYWRkcikKKyAg ICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPm1maWNtZF9mcmFtZV90YWcsIGNtZC0+ZnJhbWVf ZG1hbWFwKTsKKyAgICBpZiAoY21kLT5mcmFtZV9tZW0gIT0gTlVMTCkKKyAgICAgICAgYnVzX2Rt YW1lbV9mcmVlKHNjLT5tZmljbWRfZnJhbWVfdGFnLCBjbWQtPmZyYW1lX21lbSwgY21kLT5mcmFt ZV9kbWFtYXApOworfQpJbmRleDogc3lzL2Rldi9tcnNhcy9tcnNhc19pb2N0bC5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy9kZXYvbXJzYXMvbXJzYXNfaW9jdGwuaAkocmV2aXNpb24gMCkKKysrIHN5cy9k ZXYvbXJzYXMvbXJzYXNfaW9jdGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBMU0kgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95CisgKiBTdXBwb3J0OiBmcmVlYnNkcmFpZEBsc2ku Y29tCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxP UkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF CisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQg aW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1 dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBv ZmZpY2lhbCBwb2xpY2llcyxlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVl QlNEIFByb2plY3QuCisgKgorICogU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkZmJzZEBsc2ku Y29tPgorICogTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxw aXRhcywgQ0EgOTUwMzUKKyAqICAgIEFUVE46IE1lZ2FSYWlkIEZyZWVCU0QKKyAqCisgKi8KKwor I2lmbmRlZiBNUlNBU19JT0NUTF9ICisjZGVmaW5lIE1SU0FTX0lPQ1RMX0gKKworI2lmbmRlZiBf SU9XUgorI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KKyNlbmRpZiAgLyogIV9JT1dSICovCisKKy8q CisgKiBXZSBuZWVkIHRvIHVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlIG1maSBkcml2ZXIgdW50 aWwgTWVnYUNsaSBhZGRzIAorICogc3VwcG9ydCBmb3IgdGhpcyAobXJzYXMpIGRyaXZlcjoKKyAq ICAgIE0gaXMgZm9yIE1lZ2FSQUlELiAoVGhpcyBpcyB0eXBpY2FsbHkgdGhlIHZlbmRvciBvciBw cm9kdWN0IGluaXRpYWwpCisgKiAgICAxIGFyYml0cmFyeS4gKFRoaXMgbWF5IGJlIHVzZWQgdG8g c2VnbWVudCBraW5kcyBvZiBjb21tYW5kcy4gIAorICogICAgKDEtOSBzdGF0dXMsIDEwLTIwIHBv bGljeSwgZXRjLikKKyAqICAgIHN0cnVjdCBtcnNhc19pb2NwYWNrZXQgKHNpemVvZigpIHRoaXMg cGFyYW1ldGVyIHdpbGwgYmUgdXNlZC4pCisgKiBUaGVzZSB0aHJlZSB2YWx1ZXMgYXJlIGVuY29k ZWQgaW50byBhIHNvbWV3aGF0IHVuaXF1ZSwgMzItYml0IHZhbHVlLgorICovCisKKyNkZWZpbmUg TVJTQVNfSU9DX0ZJUk1XQVJFX1BBU1NfVEhST1VHSCAgIF9JT1dSKCdNJywgMSwgc3RydWN0IG1y c2FzX2lvY3BhY2tldCkKKworI2RlZmluZSBNUlNBU19JT0NfU0NBTl9CVVMgICAgICAgICAgICAg ICAgX0lPKCdNJywgIDEwKQorCisjZGVmaW5lIE1BWF9JT0NUTF9TR0UgICAgICAgICAgICAgICAg ICAgMTYKKyNkZWZpbmUgTUZJX0ZSQU1FX0RJUl9SRUFEICAgICAgICAgICAgICAweDAwMTAKKyNk ZWZpbmUgTUZJX0NNRF9MRF9TQ1NJX0lPICAgICAgICAgICAgICAweDAzCisKKyNkZWZpbmUgSU5R VUlSWV9DTUQgICAgIDB4MTIKKyNkZWZpbmUgSU5RVUlSWV9DTURMRU4gIDYKKyNkZWZpbmUgSU5R VUlSWV9SRVBMWV9MRU4gOTYKKyNkZWZpbmUgSU5RVUlSWV9WRU5ET1IgIDggICAgICAgLyogT2Zm c2V0IGluIHJlcGx5IGRhdGEgdG8gdmVuZG9yIG5hbWUgKi8KKyNkZWZpbmUgU0NTSV9TRU5TRV9C VUZGRVJTSVpFICA5NgorCisjZGVmaW5lIE1FR0FNRklfUkFXX0ZSQU1FX1NJWkUgMTI4CisKKwor I3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfaW9jcGFja2V0IHsKKyAgICB1X2ludDE2X3Qg aG9zdF9ubzsKKyAgICB1X2ludDE2X3QgX19wYWQxOworICAgIHVfaW50MzJfdCBzZ2xfb2ZmOwor ICAgIHVfaW50MzJfdCBzZ2VfY291bnQ7CisgICAgdV9pbnQzMl90IHNlbnNlX29mZjsKKyAgICB1 X2ludDMyX3Qgc2Vuc2VfbGVuOworICAgIHVuaW9uIHsKKyAgICAgICAgdV9pbnQ4X3QgcmF3W01F R0FNRklfUkFXX0ZSQU1FX1NJWkVdOworICAgICAgICBzdHJ1Y3QgbXJzYXNfaGVhZGVyIGhkcjsK KyAgICB9IGZyYW1lOworICAgIHN0cnVjdCBpb3ZlYyBzZ2xbTUFYX0lPQ1RMX1NHRV07Cit9Owor I3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIE1SU0FTX0lPQ1RMX0ggKi8KSW5kZXg6IHN5cy9k ZXYvbXJzYXMvbXJzYXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L21yc2FzL21yc2FzLmMJKHJl dmlzaW9uIDApCisrKyBzeXMvZGV2L21yc2FzL21yc2FzLmMJKHdvcmtpbmcgY29weSkKQEAgLTAs MCArMSwzNjU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBMU0kgQ29ycC4KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IE1hcmlhbiBDaG95CisgKiBNb2RpZmllZCBi eSBEZXNhaSBLYXNoeWFwIChrYXNoeWFwLmRlc2FpQGxzaS5jb20pCisgKiBNb2RpZmllZCBieSBT YXhlbmEgU3VtaXQgKHN1bWl0LnNheGVuYUBsc2kuY29tKQorICogU3VwcG9ydDogZnJlZWJzZHJh aWRAbHNpLmNvbQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m IHRoZSA8T1JHQU5JWkFUSU9OPiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0 b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg KiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisg KiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI QUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29u dGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9m IHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGlu ZworICogb2ZmaWNpYWwgcG9saWNpZXMsZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0 aGUgRnJlZUJTRCBQcm9qZWN0LgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG86IDxtZWdhcmFpZGZi c2RAbHNpLmNvbT4KKyAqIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFu ZSwgTWlscGl0YXMsIENBIDk1MDM1CisgKiAgICBBVFROOiBNZWdhUmFpZCBGcmVlQlNECisgKgor ICovCisKKworI2luY2x1ZGUgPGRldi9tcnNhcy9tcnNhcy5oPgorI2luY2x1ZGUgPGRldi9tcnNh cy9tcnNhc19pb2N0bC5oPgorCisjaW5jbHVkZSA8Y2FtL2NhbS5oPgorI2luY2x1ZGUgPGNhbS9j YW1fY2NiLmg+CisKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CisjaW5jbHVkZSA8c3lzL2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+ CisKKworLyogCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzIAorICovCitzdGF0aWMgZF9vcGVuX3Qg ICAgIG1yc2FzX29wZW47CitzdGF0aWMgZF9jbG9zZV90ICAgIG1yc2FzX2Nsb3NlOworc3RhdGlj IGRfcmVhZF90ICAgICBtcnNhc19yZWFkOworc3RhdGljIGRfd3JpdGVfdCAgICBtcnNhc193cml0 ZTsKK3N0YXRpYyBkX2lvY3RsX3QgICAgbXJzYXNfaW9jdGw7CisKK3N0YXRpYyBzdHJ1Y3QgbXJz YXNfaWRlbnQgKm1yc2FzX2ZpbmRfaWRlbnQoZGV2aWNlX3QpOworc3RhdGljIHZvaWQgbXJzYXNf c2h1dGRvd25fY3RscihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCB1X2ludDMyX3Qgb3Bjb2RlKTsK K3N0YXRpYyB2b2lkIG1yc2FzX2ZsdXNoX2NhY2hlKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOwor c3RhdGljIHZvaWQgbXJzYXNfcmVzZXRfcmVwbHlfZGVzYyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj KTsKK3N0YXRpYyB2b2lkIG1yc2FzX29jcl90aHJlYWQodm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQg bXJzYXNfZ2V0X21hcF9pbmZvKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworc3RhdGljIGludCBt cnNhc19nZXRfbGRfbWFwX2luZm8oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50 IG1yc2FzX3N5bmNfbWFwX2luZm8oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50 IG1yc2FzX2dldF9wZF9saXN0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworc3RhdGljIGludCBt cnNhc19nZXRfbGRfbGlzdChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgbXJz YXNfc2V0dXBfaXJxKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworc3RhdGljIGludCBtcnNhc19h bGxvY19tZW0oc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50IG1yc2FzX2luaXRf Zncoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50IG1yc2FzX3NldHVwX3JhaWRt YXAoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitzdGF0aWMgaW50IG1yc2FzX2NvbXBsZXRlX2Nt ZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgbXJzYXNfY2xlYXJfaW50cihz dHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgbXJzYXNfZ2V0X2N0cmxfaW5mbyhz dHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG1yc2FzX2N0cmxfaW5mbyAqY3RybF9pbmZvKTsKK3N0YXRpYyBpbnQgbXJzYXNfaXNzdWVfYmxv Y2tlZF9hYm9ydF9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kX3RvX2Fib3J0KTsKK3VfaW50MzJfdCBt cnNhc19yZWFkX3JlZyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBpbnQgb2Zmc2V0KTsKK3VfaW50 OF90IG1yc2FzX2J1aWxkX21wdG1maV9wYXNzdGhydShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqbWZpX2NtZCk7 CitpbnQgbXJzYXNfdHJhbnNpdGlvbl90b19yZWFkeShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBp bnQgb2NyKTsKK2ludCBtcnNhc19pbml0X2FkYXB0ZXIoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7 CitpbnQgbXJzYXNfYWxsb2NfbXB0X2NtZHMoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQg bXJzYXNfYWxsb2NfaW9jX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2ludCBtcnNhc19h bGxvY19jdGxyX2luZm9fY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworaW50IG1yc2FzX2lv Y19pbml0KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworaW50IG1yc2FzX2J1c19zY2FuKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MpOworaW50IG1yc2FzX2lzc3VlX2RjbWQoc3RydWN0IG1yc2FzX3Nv ZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7CitpbnQgbXJzYXNfaXNzdWVfcG9s bGVkKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpOwor aW50IG1yc2FzX3Jlc2V0X2N0cmwoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQgbXJzYXNf d2FpdF9mb3Jfb3V0c3RhbmRpbmcoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7CitpbnQgbXJzYXNf aXNzdWVfYmxvY2tlZF9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7CitpbnQgbXJzYXNfYWxsb2Nf dG1wX2RjbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX3RtcF9kY21kICp0 Y21kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpOwordm9pZCBtcnNhc19y ZWxlYXNlX21maV9jbWQoc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7IAordm9pZCBtcnNhc193 YWtldXAoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7 Cit2b2lkIG1yc2FzX2NvbXBsZXRlX2FlbihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3Qg bXJzYXNfbWZpX2NtZCAqY21kKTsKK3ZvaWQgbXJzYXNfY29tcGxldGVfYWJvcnQoc3RydWN0IG1y c2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCk7Cit2b2lkIG1yc2FzX2Rp c2FibGVfaW50cihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3ZvaWQgbXJzYXNfZW5hYmxlX2lu dHIoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX2ZyZWVfaW9jX2NtZChzdHJ1 Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3ZvaWQgbXJzYXNfZnJlZV9tZW0oc3RydWN0IG1yc2FzX3Nv ZnRjICpzYyk7Cit2b2lkIG1yc2FzX2ZyZWVfdG1wX2RjbWQoc3RydWN0IG1yc2FzX3RtcF9kY21k ICp0bXApOwordm9pZCBtcnNhc19pc3Iodm9pZCAqYXJnKTsKK3ZvaWQgbXJzYXNfdGVhcmRvd25f aW50cihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK3ZvaWQgbXJzYXNfYWRkcl9jYih2b2lkICph cmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcik7IAordm9p ZCBtcnNhc19raWxsX2hiYSAoc3RydWN0IG1yc2FzX3NvZnRjICpzYyk7Cit2b2lkIG1yc2FzX2Fl bl9oYW5kbGVyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOwordm9pZCBtcnNhc193cml0ZV9yZWco c3RydWN0IG1yc2FzX3NvZnRjICpzYywgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdV9pbnQzMl90IHZhbHVlKTsKK3ZvaWQgbXJzYXNfZmlyZV9jbWQoc3RydWN0IG1yc2Fz X3NvZnRjICpzYywgdV9pbnQzMl90IHJlcV9kZXNjX2xvLCAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdV9pbnQzMl90IHJlcV9kZXNjX2hpKTsKK3ZvaWQgbXJzYXNfZnJlZV9jdGxyX2luZm9f Y21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOwordm9pZCBtcnNhc19jb21wbGV0ZV9tcHRtZmlf cGFzc3RocnUoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQsIHVfaW50OF90IHN0YXR1cyk7Cit2b2lkIG1y c2FzX21hcF9tcHRfY21kX3N0YXR1cyhzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqY21kLCB1X2ludDhf dCBzdGF0dXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDhfdCBleHRTdGF0dXMp Oworc3RydWN0IG1yc2FzX21maV9jbWQqIG1yc2FzX2dldF9tZmlfY21kKHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MpOworTVJTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OICogbXJzYXNfYnVpbGRf bXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKTsKKworZXh0ZXJuIGludCBtcnNhc19jYW1fYXR0 YWNoKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgbXJzYXNfY2FtX2RldGFj aChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIG1yc2FzX2NtZF9kb25lKHN0 cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWQpOworZXh0ZXJu IHZvaWQgbXJzYXNfZnJlZV9mcmFtZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJz YXNfbWZpX2NtZCAqY21kKTsKK2V4dGVybiBpbnQgbXJzYXNfYWxsb2NfbWZpX2NtZHMoc3RydWN0 IG1yc2FzX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBtcnNhc19yZWxlYXNlX21wdF9jbWQoc3Ry dWN0IG1yc2FzX21wdF9jbWQgKmNtZCk7IAorZXh0ZXJuIHN0cnVjdCBtcnNhc19tcHRfY21kICpt cnNhc19nZXRfbXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2V4dGVybiBpbnQgbXJz YXNfcGFzc3RocnUoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdm9pZCAqYXJnKTsKK2V4dGVybiB1 aW50OF90IE1SX1ZhbGlkYXRlTWFwSW5mbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKTsKK2V4dGVy biB1X2ludDE2X3QgTVJfR2V0TERUZ3RJZCh1X2ludDMyX3QgbGQsIE1SX0ZXX1JBSURfTUFQX0FM TCAqbWFwKTsKK2V4dGVybiBNUl9MRF9SQUlEICpNUl9MZFJhaWRHZXQodV9pbnQzMl90IGxkLCBN Ul9GV19SQUlEX01BUF9BTEwgKm1hcCk7CitleHRlcm4gdm9pZCBtcnNhc194cHRfZnJlZXplKHN0 cnVjdCBtcnNhc19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgbXJzYXNfeHB0X3JlbGVhc2Uoc3Ry dWN0IG1yc2FzX3NvZnRjICpzYyk7CitleHRlcm4gTVJTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VO SU9OICptcnNhc19nZXRfcmVxdWVzdF9kZXNjKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90IGluZGV4KTsKK2V4dGVybiBpbnQgbXJzYXNf YnVzX3NjYW5fc2ltKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBjYW1fc2ltICpzaW0p Oworc3RhdGljIGludCBtcnNhc19hbGxvY19ldnRfbG9nX2luZm9fY21kKHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MpOworc3RhdGljIHZvaWQgbXJzYXNfZnJlZV9ldnRfbG9nX2luZm9fY21kKHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MpOworU1lTQ1RMX05PREUoX2h3LCBPSURfQVVUTywgbXJzYXMsIENU TEZMQUdfUkQsIDAsICJNUlNBUyBEcml2ZXIgUGFyYW1ldGVycyIpOworCisKKy8qKgorICogUENJ IGRldmljZSBzdHJ1Y3QgYW5kIHRhYmxlCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBtcnNhc19p ZGVudCB7CisgICAgdWludDE2X3QgICAgdmVuZG9yOworICAgIHVpbnQxNl90ICAgIGRldmljZTsK KyAgICB1aW50MTZfdCAgICBzdWJ2ZW5kb3I7CisgICAgdWludDE2X3QgICAgc3ViZGV2aWNlOwor ICAgIGNvbnN0IGNoYXIgICpkZXNjOworfSBNUlNBU19DVExSX0lEOworCitNUlNBU19DVExSX0lE IGRldmljZV90YWJsZVtdID0geworICAgIHsweDEwMDAsIE1SU0FTX1RCT0xULCAweGZmZmYsIDB4 ZmZmZiwgIkxTSSBUaHVuZGVyYm9sdCBTQVMgQ29udHJvbGxlciJ9LAorICAgIHswLCAwLCAwLCAw LCBOVUxMfQorfTsKKworLyoqCisgKiBDaGFyYWN0ZXIgZGV2aWNlIGVudHJ5IHBvaW50cyAKKyAq CisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2RldnN3IG1yc2FzX2NkZXZzdyA9IHsKKyAgICAuZF92ZXJz aW9uID0gICAgRF9WRVJTSU9OLAorICAgIC5kX29wZW4gPSAgIG1yc2FzX29wZW4sCisgICAgLmRf Y2xvc2UgPSAgbXJzYXNfY2xvc2UsCisgICAgLmRfcmVhZCA9ICAgbXJzYXNfcmVhZCwKKyAgICAu ZF93cml0ZSA9ICBtcnNhc193cml0ZSwKKyAgICAuZF9pb2N0bCA9ICBtcnNhc19pb2N0bCwKKyAg ICAuZF9uYW1lID0gICAibXJzYXMiLAorfTsKKworTUFMTE9DX0RFRklORShNX01SU0FTLCAibXJz YXNidWYiLCAiQnVmZmVycyBmb3IgdGhlIE1SU0FTIGRyaXZlciIpOworCisvKioKKyAqIEluIHRo ZSBjZGV2c3cgcm91dGluZXMsIHdlIGZpbmQgb3VyIHNvZnRjIGJ5IHVzaW5nIHRoZSBzaV9kcnYx IG1lbWJlcgorICogb2Ygc3RydWN0IGNkZXYuICBXZSBzZXQgdGhpcyB2YXJpYWJsZSB0byBwb2lu dCB0byBvdXIgc29mdGMgaW4gb3VyCisgKiBhdHRhY2ggcm91dGluZSB3aGVuIHdlIGNyZWF0ZSB0 aGUgL2RldiBlbnRyeS4KKyAqLworaW50CittcnNhc19vcGVuKHN0cnVjdCBjZGV2ICpkZXYsIGlu dCBvZmxhZ3MsIGludCBkZXZ0eXBlLCBkX3RocmVhZF90ICp0ZCkKK3sKKyAgICBzdHJ1Y3QgbXJz YXNfc29mdGMgKnNjOworCisgICAgc2MgPSBkZXYtPnNpX2RydjE7CisgICAgcmV0dXJuICgwKTsK K30KKworaW50CittcnNhc19jbG9zZShzdHJ1Y3QgY2RldiAqZGV2LCBpbnQgZmZsYWcsIGludCBk ZXZ0eXBlLCBkX3RocmVhZF90ICp0ZCkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjOwor CisgICAgc2MgPSBkZXYtPnNpX2RydjE7CisgICAgcmV0dXJuICgwKTsKK30KKworaW50CittcnNh c19yZWFkKHN0cnVjdCBjZGV2ICpkZXYsIHN0cnVjdCB1aW8gKnVpbywgaW50IGlvZmxhZykKK3sK KyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjOworCisgICAgc2MgPSBkZXYtPnNpX2RydjE7Cisg ICAgcmV0dXJuICgwKTsKK30KK2ludAorbXJzYXNfd3JpdGUoc3RydWN0IGNkZXYgKmRldiwgc3Ry dWN0IHVpbyAqdWlvLCBpbnQgaW9mbGFnKQoreworICAgIHN0cnVjdCBtcnNhc19zb2Z0YyAqc2M7 CisKKyAgICBzYyA9IGRldi0+c2lfZHJ2MTsKKyAgICByZXR1cm4gKDApOworfQorCisvKiogCisg KiBSZWdpc3RlciBSZWFkL1dyaXRlIEZ1bmN0aW9ucyAKKyAqCisgKi8KK3ZvaWQKK21yc2FzX3dy aXRlX3JlZyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAg ICAgICAgdV9pbnQzMl90IHZhbHVlKQoreworICAgIGJ1c19zcGFjZV90YWdfdCAgICAgICAgIGJ1 c190YWcgPSBzYy0+YnVzX3RhZzsKKyAgICBidXNfc3BhY2VfaGFuZGxlX3QgICAgICBidXNfaGFu ZGxlID0gc2MtPmJ1c19oYW5kbGU7CisKKyAgICBidXNfc3BhY2Vfd3JpdGVfNChidXNfdGFnLCBi dXNfaGFuZGxlLCBvZmZzZXQsIHZhbHVlKTsKK30KKwordV9pbnQzMl90CittcnNhc19yZWFkX3Jl ZyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBpbnQgb2Zmc2V0KQoreworICAgIGJ1c19zcGFjZV90 YWdfdCBidXNfdGFnID0gc2MtPmJ1c190YWc7CisgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJ1c19o YW5kbGUgPSBzYy0+YnVzX2hhbmRsZTsKKworICAgIHJldHVybigodV9pbnQzMl90KWJ1c19zcGFj ZV9yZWFkXzQoYnVzX3RhZywgYnVzX2hhbmRsZSwgb2Zmc2V0KSk7Cit9CisKKworLyoqIAorICog SW50ZXJydXB0IERpc2FibGUvRW5hYmxlL0NsZWFyIEZ1bmN0aW9ucyAKKyAqCisgKi8KK3ZvaWQg bXJzYXNfZGlzYWJsZV9pbnRyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgdV9pbnQz Ml90IG1hc2sgPSAweEZGRkZGRkZGOworICAgIHVfaW50MzJfdCBzdGF0dXM7CisKKyAgICBtcnNh c193cml0ZV9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIG91dGJvdW5kX2ludHJfbWFz ayksIG1hc2spOworICAgIC8qIER1bW15IHJlYWQgdG8gZm9yY2UgcGNpIGZsdXNoICovCisgICAg c3RhdHVzID0gbXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIG91dGJv dW5kX2ludHJfbWFzaykpOworfQorCit2b2lkIG1yc2FzX2VuYWJsZV9pbnRyKHN0cnVjdCBtcnNh c19zb2Z0YyAqc2MpCit7CisgICAgdV9pbnQzMl90IG1hc2sgPSBNRklfRlVTSU9OX0VOQUJMRV9J TlRFUlJVUFRfTUFTSzsKKyAgICB1X2ludDMyX3Qgc3RhdHVzOworCisgICAgbXJzYXNfd3JpdGVf cmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9pbnRyX3N0YXR1cyksIH4w KTsKKyAgICBzdGF0dXMgPSBtcnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3Nl dCwgb3V0Ym91bmRfaW50cl9zdGF0dXMpKTsKKworICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zm c2V0b2YobXJzYXNfcmVnX3NldCwgb3V0Ym91bmRfaW50cl9tYXNrKSwgfm1hc2spOworICAgIHN0 YXR1cyA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3Vu ZF9pbnRyX21hc2spKTsKK30KKworc3RhdGljIGludCBtcnNhc19jbGVhcl9pbnRyKHN0cnVjdCBt cnNhc19zb2Z0YyAqc2MpCit7CisgICAgdV9pbnQzMl90IHN0YXR1cywgZndfc3RhdHVzLCBmd19z dGF0ZTsKKworICAgIC8qIFJlYWQgcmVjZWl2ZWQgaW50ZXJydXB0ICovCisgICAgc3RhdHVzID0g bXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIG91dGJvdW5kX2ludHJf c3RhdHVzKSk7CisKKyAgICAvKiBJZiBGVyBzdGF0ZSBjaGFuZ2UgaW50ZXJydXB0IGlzIHJlY2Vp dmVkLCB3cml0ZSB0byBpdCBhZ2FpbiB0byBjbGVhciAqLworICAgIGlmIChzdGF0dXMgJiBNUlNB U19GV19TVEFURV9DSE5HX0lOVEVSUlVQVCkgeworICAgICAgICBmd19zdGF0dXMgPSBtcnNhc19y ZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKTsKKyAgICAgICAgZndfc3RhdGUg PSBmd19zdGF0dXMgJiBNRklfU1RBVEVfTUFTSzsKKyAgICAgICAgaWYgKGZ3X3N0YXRlID09IE1G SV9TVEFURV9GQVVMVCkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAiRlcgaXMgaW4gRkFVTFQgc3RhdGUhXG4iKTsKKyAgICAgICAgICAgIGlmKHNjLT5vY3JfdGhy ZWFkX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICB3YWtldXAoJnNjLT5vY3JfY2hhbik7CisgICAg ICAgIH0KKyAgICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0 LCBvdXRib3VuZF9pbnRyX3N0YXR1cyksIHN0YXR1cyk7CisgICAgICAgIG1yc2FzX3JlYWRfcmVn KHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9pbnRyX3N0YXR1cykpOworICAg ICAgICByZXR1cm4oMSk7CisgICAgfQorCisgICAgLyogTm90IG91ciBpbnRlcnJ1cHQsIHNvIGp1 c3QgcmV0dXJuICovCisgICAgaWYgKCEoc3RhdHVzICYgTUZJX0ZVU0lPTl9FTkFCTEVfSU5URVJS VVBUX01BU0spKSAKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgLyogV2UgZ290IGEgcmVwbHkg aW50ZXJydXB0ICovCisgICAgcmV0dXJuKDEpOworfQorCisvKiogCisgKiBQQ0kgU3VwcG9ydCBG dW5jdGlvbnMgCisgKgorICovCitzdGF0aWMgc3RydWN0IG1yc2FzX2lkZW50ICogbXJzYXNfZmlu ZF9pZGVudChkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IG1yc2FzX2lkZW50ICpwY2lfZGV2 aWNlOworCisgICAgZm9yIChwY2lfZGV2aWNlPWRldmljZV90YWJsZTsgcGNpX2RldmljZS0+dmVu ZG9yICE9IDA7IHBjaV9kZXZpY2UrKykgCisgICAgeworICAgICAgICBpZiAoKHBjaV9kZXZpY2Ut PnZlbmRvciA9PSBwY2lfZ2V0X3ZlbmRvcihkZXYpKSAmJgorICAgICAgICAgICAgKHBjaV9kZXZp Y2UtPmRldmljZSA9PSBwY2lfZ2V0X2RldmljZShkZXYpKSAmJgorICAgICAgICAgICAgKChwY2lf ZGV2aWNlLT5zdWJ2ZW5kb3IgPT0gcGNpX2dldF9zdWJ2ZW5kb3IoZGV2KSkgfHwKKyAgICAgICAg ICAgIChwY2lfZGV2aWNlLT5zdWJ2ZW5kb3IgPT0gMHhmZmZmKSkgJiYKKyAgICAgICAgICAgICgo cGNpX2RldmljZS0+c3ViZGV2aWNlID09IHBjaV9nZXRfc3ViZGV2aWNlKGRldikpIHx8CisgICAg ICAgICAgICAocGNpX2RldmljZS0+c3ViZGV2aWNlID09IDB4ZmZmZikpKQorICAgICAgICByZXR1 cm4gKHBjaV9kZXZpY2UpOworICAgIH0KKyAgICByZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMg aW50IG1yc2FzX3Byb2JlKGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfaWRlbnQg KmlkOworCXVuc2lnbmVkIGludCBmb3JjZSA9IDAsIGl2YXI7CisKKyAgICBpZiAoKGlkID0gbXJz YXNfZmluZF9pZGVudChkZXYpKSAhPSBOVUxMKSB7CisJCWlmIChpZC0+ZGV2aWNlID09IDB4MDA1 YiB8fCBpZC0+ZGV2aWNlID09IDB4MDA1ZCkgeworICAgICAgICAgICAgcmVzb3VyY2VfaW50X3Zh bHVlKCJtcnNhcyIsIDAsICJmdXNpb25fZm9yY2UiLCAmaXZhcik7CisKKwkJCWlmIChpdmFyID09 IDAgfHwgaXZhciA9PSAxKQorCQkgICAgICAgICAgICBmb3JjZSA9IGl2YXI7ICAKKworICAgICAg ICAgICAgZGV2aWNlX3NldF9kZXNjKGRldiwgaWQtPmRlc2MpOworICAgICAgICAgICAgaWYgKGZv cmNlKQorICAgICAgICAgICAgCXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworICAgICAgICAg ICAgICAgIC8vcmV0dXJuIChCVVNfUFJPQkVfU1BFQ0lGSUMpOyAgLy9naXZlIHByaW9yaXR5IHRv IE1GSSBkcml2ZXIKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgcmV0dXJuIChC VVNfUFJPQkVfTE9XX1BSSU9SSVRZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIAorICAgICAg ICAgICAgZGV2aWNlX3NldF9kZXNjKGRldiwgaWQtPmRlc2MpOworICAgICAgICAgICAgcmV0dXJu IChCVVNfUFJPQkVfREVGQVVMVCk7CisgICAgfQorICAgIHJldHVybiAoRU5YSU8pOworCit9Cisv KioKKyAqIG1yc2FzX3NldHVwX3N5c2N0bDogIHNldHVwIHN5c2N0bCB2YWx1ZXMgZm9yIG1yc2Fz CisgKiBpbnB1dDogICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAq CisgKiBTZXR1cCBzeXNjdGwgZW50cmllcyBmb3IgbXJzYXMgZHJpdmVyLgorICovCitzdGF0aWMg dm9pZAorbXJzYXNfc2V0dXBfc3lzY3RsKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAg c3RydWN0IHN5c2N0bF9jdHhfbGlzdCAgKnN5c2N0bF9jdHggPSBOVUxMOworICAgIHN0cnVjdCBz eXNjdGxfb2lkICAgICAgICpzeXNjdGxfdHJlZSA9IE5VTEw7CisgICAgY2hhciB0bXBzdHJbODBd LCB0bXBzdHIyWzgwXTsKKworICAgIC8qCisgICAgICogU2V0dXAgdGhlIHN5c2N0bCB2YXJpYWJs ZSBzbyB0aGUgdXNlciBjYW4gY2hhbmdlIHRoZSBkZWJ1ZyBsZXZlbAorICAgICAqIG9uIHRoZSBm bHkuCisgICAgICovCisgICAgc25wcmludGYodG1wc3RyLCBzaXplb2YodG1wc3RyKSwgIk1SU0FT IGNvbnRyb2xsZXIgJWQiLAorICAgIGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSk7Cisg ICAgc25wcmludGYodG1wc3RyMiwgc2l6ZW9mKHRtcHN0cjIpLCAiJWQiLCBkZXZpY2VfZ2V0X3Vu aXQoc2MtPm1yc2FzX2RldikpOworCisgICAgc3lzY3RsX2N0eCA9IGRldmljZV9nZXRfc3lzY3Rs X2N0eChzYy0+bXJzYXNfZGV2KTsKKyAgICBpZiAoc3lzY3RsX2N0eCAhPSBOVUxMKQorICAgICAg ICBzeXNjdGxfdHJlZSA9IGRldmljZV9nZXRfc3lzY3RsX3RyZWUoc2MtPm1yc2FzX2Rldik7CisK KyAgICBpZiAoc3lzY3RsX3RyZWUgPT0gTlVMTCkgeworICAgICAgICBzeXNjdGxfY3R4X2luaXQo JnNjLT5zeXNjdGxfY3R4KTsKKyAgICAgICAgc2MtPnN5c2N0bF90cmVlID0gU1lTQ1RMX0FERF9O T0RFKCZzYy0+c3lzY3RsX2N0eCwKKyAgICAgICAgICAgIFNZU0NUTF9TVEFUSUNfQ0hJTERSRU4o X2h3X21yc2FzKSwgT0lEX0FVVE8sIHRtcHN0cjIsCisgICAgICAgICAgICBDVExGTEFHX1JELCAw LCB0bXBzdHIpOworICAgICAgICBpZiAoc2MtPnN5c2N0bF90cmVlID09IE5VTEwpCisgICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICBzeXNjdGxfY3R4ID0gJnNjLT5zeXNjdGxfY3R4OworICAg ICAgICBzeXNjdGxfdHJlZSA9IHNjLT5zeXNjdGxfdHJlZTsKKyAgICB9CisgICAgU1lTQ1RMX0FE RF9VSU5UKHN5c2N0bF9jdHgsIFNZU0NUTF9DSElMRFJFTihzeXNjdGxfdHJlZSksCisgICAgICAg IE9JRF9BVVRPLCAiZGlzYWJsZV9vY3IiLCBDVExGTEFHX1JXLCAmc2MtPmRpc2FibGVPbmxpbmVD dHJsUmVzZXQsIDAsCisgICAgICAgICJEaXNhYmxlIHRoZSB1c2Ugb2YgT0NSIik7CisKKyAgICBT WVNDVExfQUREX1NUUklORyhzeXNjdGxfY3R4LCBTWVNDVExfQ0hJTERSRU4oc3lzY3RsX3RyZWUp LAorICAgICAgICBPSURfQVVUTywgImRyaXZlcl92ZXJzaW9uIiwgQ1RMRkxBR19SRCwgTVJTQVNf VkVSU0lPTiwKKyAgICAgICAgc3RybGVuKE1SU0FTX1ZFUlNJT04pLCAiZHJpdmVyIHZlcnNpb24i KTsKKworICAgIFNZU0NUTF9BRERfSU5UKHN5c2N0bF9jdHgsIFNZU0NUTF9DSElMRFJFTihzeXNj dGxfdHJlZSksCisgICAgICAgIE9JRF9BVVRPLCAicmVzZXRfY291bnQiLCBDVExGTEFHX1JELAor ICAgICAgICAmc2MtPnJlc2V0X2NvdW50LCAwLCAibnVtYmVyIG9mIG9jciBmcm9tIHN0YXJ0IG9m IHRoZSBkYXkiKTsKKworICAgIFNZU0NUTF9BRERfSU5UKHN5c2N0bF9jdHgsIFNZU0NUTF9DSElM RFJFTihzeXNjdGxfdHJlZSksCisgICAgICAgIE9JRF9BVVRPLCAiZndfb3V0c3RhbmRpbmciLCBD VExGTEFHX1JELAorICAgICAgICAmc2MtPmZ3X291dHN0YW5kaW5nLCAwLCAiRlcgb3V0c3RhbmRp bmcgY29tbWFuZHMiKTsKKworICAgICBTWVNDVExfQUREX0lOVChzeXNjdGxfY3R4LCBTWVNDVExf Q0hJTERSRU4oc3lzY3RsX3RyZWUpLAorICAgICAgICBPSURfQVVUTywgImlvX2NtZHNfaGlnaHdh dGVyIiwgQ1RMRkxBR19SRCwKKyAgICAgICAgJnNjLT5pb19jbWRzX2hpZ2h3YXRlciwgMCwgIk1h eCBGVyBvdXRzdGFuZGluZyBjb21tYW5kcyIpOworCisgICAgU1lTQ1RMX0FERF9VSU5UKHN5c2N0 bF9jdHgsIFNZU0NUTF9DSElMRFJFTihzeXNjdGxfdHJlZSksCisgICAgICAgIE9JRF9BVVRPLCAi bXJzYXNfZGVidWciLCBDVExGTEFHX1JXLCAmc2MtPm1yc2FzX2RlYnVnLCAwLAorICAgICAgICAi RHJpdmVyIGRlYnVnIGxldmVsIik7CisKKyAgICBTWVNDVExfQUREX1VJTlQoc3lzY3RsX2N0eCwg U1lTQ1RMX0NISUxEUkVOKHN5c2N0bF90cmVlKSwKKyAgICAgICAgT0lEX0FVVE8sICJtcnNhc19p b190aW1lb3V0IiwgQ1RMRkxBR19SVywgJnNjLT5tcnNhc19pb190aW1lb3V0LAorICAgICAgICAw LCAiRHJpdmVyIElPIHRpbWVvdXQgdmFsdWUgaW4gbWlsaS1zZWNvbmQuIik7CisKKyAgICBTWVND VExfQUREX1VJTlQoc3lzY3RsX2N0eCwgU1lTQ1RMX0NISUxEUkVOKHN5c2N0bF90cmVlKSwKKyAg ICAgICAgT0lEX0FVVE8sICJtcnNhc19md19mYXVsdF9jaGVja19kZWxheSIsIENUTEZMQUdfUlcs CisgICAgICAgICZzYy0+bXJzYXNfZndfZmF1bHRfY2hlY2tfZGVsYXksCisgICAgICAgIDAsICJG VyBmYXVsdCBjaGVjayB0aHJlYWQgZGVsYXkgaW4gc2Vjb25kcy4gPGRlZmF1bHQgaXMgMSBzZWM+ Iik7CisKKyAgICBTWVNDVExfQUREX0lOVChzeXNjdGxfY3R4LCBTWVNDVExfQ0hJTERSRU4oc3lz Y3RsX3RyZWUpLAorICAgICAgICBPSURfQVVUTywgInJlc2V0X2luX3Byb2dyZXNzIiwgQ1RMRkxB R19SRCwKKyAgICAgICAgJnNjLT5yZXNldF9pbl9wcm9ncmVzcywgMCwgIm9jciBpbiBwcm9ncmVz cyBzdGF0dXMiKTsKKworfQorCisvKioKKyAqIG1yc2FzX2dldF90dW5hYmxlczogIGdldCB0dW5h YmxlIHBhcmFtZXRlcnMuCisgKiBpbnB1dDogICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNl IHNvZnQgc3RhdGUKKyAqCisgKiBHZXQgdHVuYWJsZSBwYXJhbWV0ZXJzLiBUaGlzIHdpbGwgaGVs cCB0byBkZWJ1ZyBkcml2ZXIgYXQgYm9vdCB0aW1lLgorICovCitzdGF0aWMgdm9pZAorbXJzYXNf Z2V0X3R1bmFibGVzKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgY2hhciB0bXBzdHJb ODBdOworCisgICAgLyogWFhYIGRlZmF1bHQgdG8gc29tZSBkZWJ1Z2dpbmcgZm9yIG5vdyAqLwor ICAgIHNjLT5tcnNhc19kZWJ1ZyA9IE1SU0FTX0ZBVUxUOworICAgIHNjLT5tcnNhc19pb190aW1l b3V0ID0gTVJTQVNfSU9fVElNRU9VVDsKKyAgICBzYy0+bXJzYXNfZndfZmF1bHRfY2hlY2tfZGVs YXkgPSAxOworICAgIHNjLT5yZXNldF9jb3VudCA9IDA7CisgICAgc2MtPnJlc2V0X2luX3Byb2dy ZXNzID0gMDsKKworICAgIC8qCisgICAgICogR3JhYiB0aGUgZ2xvYmFsIHZhcmlhYmxlcy4KKyAg ICAgKi8KKyAgICBUVU5BQkxFX0lOVF9GRVRDSCgiaHcubXJzYXMuZGVidWdfbGV2ZWwiLCAmc2Mt Pm1yc2FzX2RlYnVnKTsKKworICAgIC8qIEdyYWIgdGhlIHVuaXQtaW5zdGFuY2UgdmFyaWFibGVz ICovCisgICAgc25wcmludGYodG1wc3RyLCBzaXplb2YodG1wc3RyKSwgImRldi5tcnNhcy4lZC5k ZWJ1Z19sZXZlbCIsCisgICAgICAgIGRldmljZV9nZXRfdW5pdChzYy0+bXJzYXNfZGV2KSk7Cisg ICAgVFVOQUJMRV9JTlRfRkVUQ0godG1wc3RyLCAmc2MtPm1yc2FzX2RlYnVnKTsKK30KKworLyoq CisgKiBtcnNhc19hbGxvY19ldnRfbG9nX2luZm8gY21kOglBbGxvY2F0ZXMgbWVtb3J5IHRvIGdl dCBldmVudCBsb2cgaW5mb3JtYXRpb24uCisgKiAJCQkJCQkJCSAgCVVzZWQgdG8gZ2V0IHNlcXVl bmNlIG51bWJlciBhdCBkcml2ZXIgbG9hZCB0aW1lLgorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICAgICAgIAkgIAlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBBbGxvY2F0ZXMgRE1BYWJsZSBt ZW1vcnkgZm9yIHRoZSBldmVudCBsb2cgaW5mbyBpbnRlcm5hbCBjb21tYW5kLgorICovCitpbnQg bXJzYXNfYWxsb2NfZXZ0X2xvZ19pbmZvX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQorewor ICAgIGludCBlbF9pbmZvX3NpemU7CisKKyAgICAvKiBBbGxvY2F0ZSBnZXQgZXZlbnQgbG9nIGlu Zm8gY29tbWFuZCAqLworICAgIGVsX2luZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXJzYXNfZXZ0 X2xvZ19pbmZvKTsKKyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50 X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAgICAg ICAgICAgICAgICAgICAvLyBhbGdubW50LCBib3VuZGFyeQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBoaWdoYWRkcgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAgICAgIC8vIGZpbHRlciwg ZmlsdGVyYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxfaW5mb19zaXplLCAgICAg ICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAg ICAgICAgICAgICAgLy8gbXNlZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxf aW5mb19zaXplLCAgICAgICAgICAvLyBtYXhzZWdzaXplCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+ZWxfaW5mb190YWcpKSB7CisgICAgICAg IGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSBldmVudCBsb2cg aW5mbyB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorICAgIGlmIChi dXNfZG1hbWVtX2FsbG9jKHNjLT5lbF9pbmZvX3RhZywgKHZvaWQgKiopJnNjLT5lbF9pbmZvX21l bSwKKyAgICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAmc2MtPmVsX2luZm9fZG1hbWFwKSkgewor ICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgZXZl bnQgbG9nIGluZm8gY21kIG1lbVxuIik7CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9 CisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+ZWxfaW5mb190YWcsIHNjLT5lbF9pbmZvX2Rt YW1hcCwKKyAgICAgICAgICAgIHNjLT5lbF9pbmZvX21lbSwgZWxfaW5mb19zaXplLCBtcnNhc19h ZGRyX2NiLAorICAgICAgICAgICAgJnNjLT5lbF9pbmZvX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dB SVQpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2Fk IGV2ZW50IGxvZyBpbmZvIGNtZCBtZW1cbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7Cisg ICAgfQorCisgICAgbWVtc2V0KHNjLT5lbF9pbmZvX21lbSwgMCwgZWxfaW5mb19zaXplKTsKKyAg ICByZXR1cm4gKDApOworfQorCisvKioKKyAqIG1yc2FzX2ZyZWVfZXZ0X2luZm9fY21kOiAJRnJl ZSBtZW1vcnkgZm9yIEV2ZW50IGxvZyBpbmZvIGNvbW1hbmQgCisgKiBpbnB1dDogICAgICAgICAg ICAgICAgICAgIAlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBEZWFsbG9jYXRlcyBtZW1vcnkg Zm9yIHRoZSBldmVudCBsb2cgaW5mbyBpbnRlcm5hbCBjb21tYW5kLgorICovCit2b2lkIG1yc2Fz X2ZyZWVfZXZ0X2xvZ19pbmZvX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGlm IChzYy0+ZWxfaW5mb19waHlzX2FkZHIpCisgICAgICAgIGJ1c19kbWFtYXBfdW5sb2FkKHNjLT5l bF9pbmZvX3RhZywgc2MtPmVsX2luZm9fZG1hbWFwKTsKKyAgICBpZiAoc2MtPmVsX2luZm9fbWVt ICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFtZW1fZnJlZShzYy0+ZWxfaW5mb190YWcsIHNjLT5l bF9pbmZvX21lbSwgc2MtPmVsX2luZm9fZG1hbWFwKTsKKyAgICBpZiAoc2MtPmVsX2luZm9fdGFn ICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmVsX2luZm9fdGFnKTsK K30KKworLyoqCisgKiAgbXJzYXNfZ2V0X3NlcV9udW06CUdldCBsYXRlc3QgZXZlbnQgc2VxdWVu Y2UgbnVtYmVyCisgKiAgQHNjOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICBAZWxpOgkJCQlG aXJtd2FyZSBldmVudCBsb2cgc2VxdWVuY2UgbnVtYmVyIGluZm9ybWF0aW9uLgorICoJCQkJCQlG aXJtd2FyZSBtYWludGFpbnMgYSBsb2cgb2YgYWxsIGV2ZW50cyBpbiBhIG5vbi12b2xhdGlsZSBh cmVhLgorICoJCQkJCQlEcml2ZXIgZ2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgdXNpbmcgRENNRAor ICoJCQkJCQkiTVJfRENNRF9DVFJMX0VWRU5UX0dFVF9JTkZPIiBhdCBkcml2ZXIgbG9hZCB0aW1l LgorICovCisKK3N0YXRpYyBpbnQKK21yc2FzX2dldF9zZXFfbnVtKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MsCisJCSAgICBzdHJ1Y3QgbXJzYXNfZXZ0X2xvZ19pbmZvICplbGkpCit7CisJc3RydWN0 IG1yc2FzX21maV9jbWQgKmNtZDsKKwlzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKwor CWNtZCA9ICBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisKKwlpZiAoIWNtZCkgeworCQlkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJGYWlsZWQgdG8gZ2V0IGEgZnJlZSBjbWRcbiIpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwlpZiAo bXJzYXNfYWxsb2NfZXZ0X2xvZ19pbmZvX2NtZChzYykgIT0gU1VDQ0VTUykgeworCQlkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgZXZ0IGxvZyBpbmZvIGNtZFxu Iik7CisJCW1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9 CisJCisJbWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7CisKKwlkY21kLT5j bWQgPSBNRklfQ01EX0RDTUQ7CisJZGNtZC0+Y21kX3N0YXR1cyA9IDB4MDsKKwlkY21kLT5zZ2Vf Y291bnQgPSAxOworCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCWRjbWQtPnRp bWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKKwlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6 ZW9mKHN0cnVjdCBtcnNhc19ldnRfbG9nX2luZm8pOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURf Q1RSTF9FVkVOVF9HRVRfSU5GTzsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gc2Mt PmVsX2luZm9fcGh5c19hZGRyOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yo c3RydWN0IG1yc2FzX2V2dF9sb2dfaW5mbyk7CisKKwltcnNhc19pc3N1ZV9ibG9ja2VkX2NtZChz YywgY21kKTsKKworCS8qCisgCSAqIENvcHkgdGhlIGRhdGEgYmFjayBpbnRvIGNhbGxlcnMgYnVm ZmVyCisgCSAqLworCW1lbWNweShlbGksIHNjLT5lbF9pbmZvX21lbSwgc2l6ZW9mKHN0cnVjdCBt cnNhc19ldnRfbG9nX2luZm8pKTsKKwltcnNhc19mcmVlX2V2dF9sb2dfaW5mb19jbWQoc2MpOwor CW1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisg KiAgbXJzYXNfcmVnaXN0ZXJfYWVuOgkJUmVnaXN0ZXIgZm9yIGFzeW5jaHJvbm91cyBldmVudCBu b3RpZmljYXRpb24KKyAqICBAc2M6CQkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICBAc2VxX251 bToJCQkJU3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyCisgKiAgQGNsYXNzX2xvY2FsZToJCQlDbGFz cyBvZiB0aGUgZXZlbnQKKyAqICAJCQkJCQlUaGlzIGZ1bmN0aW9uIHN1YnNjcmliZXMgZm9yIGV2 ZW50cyBiZXlvbmQgdGhlIEBzZXFfbnVtIAorICogIAkJCQkJCWFuZCB0eXBlIEBjbGFzc19sb2Nh bGUuCisgKiAKKyAqICovCitzdGF0aWMgaW50CittcnNhc19yZWdpc3Rlcl9hZW4oc3RydWN0IG1y c2FzX3NvZnRjICpzYywgdV9pbnQzMl90IHNlcV9udW0sCisJCSAgICAgdV9pbnQzMl90IGNsYXNz X2xvY2FsZV93b3JkKQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBtcnNhc19tZmlfY21kICpj bWQ7CisJc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJdW5pb24gbXJzYXNfZXZ0X2Ns YXNzX2xvY2FsZSBjdXJyX2FlbjsKKwl1bmlvbiBtcnNhc19ldnRfY2xhc3NfbG9jYWxlIHByZXZf YWVuOworCisvKgorICogIElmIHRoZXJlIGFuIEFFTiBwZW5kaW5nIGFscmVhZHkgKGFlbl9jbWQp LCBjaGVjayBpZiB0aGUKKyAqICBjbGFzc19sb2NhbGUgb2YgdGhhdCBwZW5kaW5nIEFFTiBpcyBp bmNsdXNpdmUgb2YgdGhlIG5ldworICogIEFFTiByZXF1ZXN0IHdlIGN1cnJlbnRseSBoYXZlLiBJ ZiBpdCBpcywgdGhlbiB3ZSBkb24ndCBoYXZlCisgKiAgdG8gZG8gYW55dGhpbmcuIEluIG90aGVy IHdvcmRzLCB3aGljaGV2ZXIgZXZlbnRzIHRoZSBjdXJyZW50CisgKiAgQUVOIHJlcXVlc3QgaXMg c3Vic2NyaWJpbmcgdG8sIGhhdmUgYWxyZWFkeSBiZWVuIHN1YnNjcmliZWQKKyAqICB0by4KKyAq ICBJZiB0aGUgb2xkX2NtZCBpcyBfbm90XyBpbmNsdXNpdmUsIHRoZW4gd2UgaGF2ZSB0byBhYm9y dAorICogIHRoYXQgY29tbWFuZCwgZm9ybSBhIGNsYXNzX2xvY2FsZSB0aGF0IGlzIHN1cGVyc2V0 IG9mIGJvdGgKKyAqICBvbGQgYW5kIGN1cnJlbnQgYW5kIHJlLWlzc3VlIHRvIHRoZSBGVworICog Ki8KKworCWN1cnJfYWVuLndvcmQgPSBjbGFzc19sb2NhbGVfd29yZDsKKworCWlmIChzYy0+YWVu X2NtZCkgeworCisJCXByZXZfYWVuLndvcmQgPSBzYy0+YWVuX2NtZC0+ZnJhbWUtPmRjbWQubWJv eC53WzFdOworCisvKgorICogQSBjbGFzcyB3aG9zZSBlbnVtIHZhbHVlIGlzIHNtYWxsZXIgaXMg aW5jbHVzaXZlIG9mIGFsbAorICogaGlnaGVyIHZhbHVlcy4gSWYgYSBQUk9HUkVTUyAoPSAtMSkg d2FzIHByZXZpb3VzbHkKKyAqIHJlZ2lzdGVyZWQsIHRoZW4gYSBuZXcgcmVnaXN0cmF0aW9uIHJl cXVlc3RzIGZvciBoaWdoZXIKKyAqIGNsYXNzZXMgbmVlZCBub3QgYmUgc2VudCB0byBGVy4gVGhl eSBhcmUgYXV0b21hdGljYWxseQorICogaW5jbHVkZWQuCisgKiBMb2NhbGUgbnVtYmVycyBkb24n dCBoYXZlIHN1Y2ggaGllcmFyY2h5LiBUaGV5IGFyZSBiaXRtYXAgdmFsdWVzCisgKi8KKwkJaWYg KChwcmV2X2Flbi5tZW1iZXJzLmNsYXNzIDw9IGN1cnJfYWVuLm1lbWJlcnMuY2xhc3MpICYmCisJ ICAgIAkhKChwcmV2X2Flbi5tZW1iZXJzLmxvY2FsZSAmIGN1cnJfYWVuLm1lbWJlcnMubG9jYWxl KSBeCisJICAgICAgCWN1cnJfYWVuLm1lbWJlcnMubG9jYWxlKSkgeworCQkJLyoKKyAgCQkJICog UHJldmlvdXNseSBpc3N1ZWQgZXZlbnQgcmVnaXN0cmF0aW9uIGluY2x1ZGVzCisgIAkJCSAqIGN1 cnJlbnQgcmVxdWVzdC4gTm90aGluZyB0byBkby4KKyAgCQkJICovCisJCQlyZXR1cm4gMDsKKwkJ fSBlbHNlIHsKKwkJCWN1cnJfYWVuLm1lbWJlcnMubG9jYWxlIHw9IHByZXZfYWVuLm1lbWJlcnMu bG9jYWxlOworCisJCQlpZiAocHJldl9hZW4ubWVtYmVycy5jbGFzcyA8IGN1cnJfYWVuLm1lbWJl cnMuY2xhc3MpCisJCQkJY3Vycl9hZW4ubWVtYmVycy5jbGFzcyA9IHByZXZfYWVuLm1lbWJlcnMu Y2xhc3M7CisKKwkJCXNjLT5hZW5fY21kLT5hYm9ydF9hZW4gPSAxOworCQkJcmV0X3ZhbCA9IG1y c2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKHNjLAorCQkJCSAgc2MtPmFlbl9jbWQpOworCisJ CQlpZiAocmV0X3ZhbCkgeworCQkJCXByaW50ZigibXJzYXM6IEZhaWxlZCB0byBhYm9ydCAiCisJ CQkJCSAgICJwcmV2aW91cyBBRU4gY29tbWFuZFxuIik7CisJCQkJcmV0dXJuIHJldF92YWw7CisJ CQl9CisJCX0KKwl9CisKKwljbWQgPSAgbXJzYXNfZ2V0X21maV9jbWQoc2MpOworCisJaWYgKCFj bWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJ bWVtc2V0KHNjLT5ldnRfZGV0YWlsX21lbSwgMCwgc2l6ZW9mKHN0cnVjdCBtcnNhc19ldnRfZGV0 YWlsKSk7CisKKy8qCisgKiBQcmVwYXJlIERDTUQgZm9yIGFlbiByZWdpc3RyYXRpb24KKyAqLwor CW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+Y21kID0g TUZJX0NNRF9EQ01EOworCWRjbWQtPmNtZF9zdGF0dXMgPSAweDA7CisJZGNtZC0+c2dlX2NvdW50 ID0gMTsKKwlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKwlkY21kLT50aW1lb3V0 ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihz dHJ1Y3QgbXJzYXNfZXZ0X2RldGFpbCk7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VW RU5UX1dBSVQ7CisJZGNtZC0+bWJveC53WzBdID0gc2VxX251bTsKKyAgICBzYy0+bGFzdF9zZXFf bnVtID0gc2VxX251bTsKKwlkY21kLT5tYm94LndbMV0gPSBjdXJyX2Flbi53b3JkOworCWRjbWQt PnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSAodV9pbnQzMl90KSBzYy0+ZXZ0X2RldGFpbF9waHlz X2FkZHI7CisJZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbXJzYXNf ZXZ0X2RldGFpbCk7CisKKwlpZiAoc2MtPmFlbl9jbWQgIT0gTlVMTCkgeworCQltcnNhc19yZWxl YXNlX21maV9jbWQoY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKyAgCSAqIFN0b3JlIHJl ZmVyZW5jZSB0byB0aGUgY21kIHVzZWQgdG8gcmVnaXN0ZXIgZm9yIEFFTi4gV2hlbiBhbgorICAJ ICogYXBwbGljYXRpb24gd2FudHMgdXMgdG8gcmVnaXN0ZXIgZm9yIEFFTiwgd2UgaGF2ZSB0byBh Ym9ydCB0aGlzCisgICAJICogY21kIGFuZCByZS1yZWdpc3RlciB3aXRoIGEgbmV3IEVWRU5UIExP Q0FMRSBzdXBwbGllZCBieSB0aGF0IGFwcAorICAJICovCisJc2MtPmFlbl9jbWQgPSBjbWQ7CisK KwkvKgorICAJICBJc3N1ZSB0aGUgYWVuIHJlZ2lzdHJhdGlvbiBmcmFtZQorICAJKi8KKyAgCWlm IChtcnNhc19pc3N1ZV9kY21kKHNjLCBjbWQpKXsKKyAgICAgICAJZGV2aWNlX3ByaW50ZihzYy0+ bXJzYXNfZGV2LCAiQ2Fubm90IGlzc3VlIEFFTiBEQ01EIGNvbW1hbmQuXG4iKTsKKyAgICAgICAJ cmV0dXJuKDEpOworICAgCX0KKworCXJldHVybiAwOworfQorLyoqCisgKiBtcnNhc19zdGFydF9h ZW4gLSAgU3Vic2NyaWJlcyB0byBBRU4gZHVyaW5nIGRyaXZlciBsb2FkIHRpbWUKKyAqIEBpbnN0 YW5jZTogICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICovCitzdGF0aWMgaW50IG1yc2Fz X3N0YXJ0X2FlbihzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworCXN0cnVjdCBtcnNhc19ldnRf bG9nX2luZm8gZWxpOworCXVuaW9uIG1yc2FzX2V2dF9jbGFzc19sb2NhbGUgY2xhc3NfbG9jYWxl OworCisKKwkvKiBHZXQgdGhlIGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgZnJvbSBGVyovCisJCQkK KwltZW1zZXQoJmVsaSwgMCwgc2l6ZW9mKGVsaSkpOworCisJaWYgKG1yc2FzX2dldF9zZXFfbnVt KHNjLCAmZWxpKSkKKwkJcmV0dXJuIC0xOworCisJLyogUmVnaXN0ZXIgQUVOIHdpdGggRlcgZm9y IGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgcGx1cyAxKi8KKwljbGFzc19sb2NhbGUubWVtYmVycy5y ZXNlcnZlZCA9IDA7CisJY2xhc3NfbG9jYWxlLm1lbWJlcnMubG9jYWxlID0gTVJfRVZUX0xPQ0FM RV9BTEw7CisJY2xhc3NfbG9jYWxlLm1lbWJlcnMuY2xhc3MgPSBNUl9FVlRfQ0xBU1NfREVCVUc7 CisKKwlyZXR1cm4gbXJzYXNfcmVnaXN0ZXJfYWVuKHNjLCBlbGkubmV3ZXN0X3NlcV9udW0gKyAx LAorCQkJCWNsYXNzX2xvY2FsZS53b3JkKTsKK30KKworLyoqCisgKiBtcnNhc19hdHRhY2g6ICAg ICAgICAgICAgUENJIGVudHJ5IHBvaW50CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgZGV2 aWNlIHN0cnVjdCBwb2ludGVyIAorICogCisgKiBQZXJmb3JtcyBzZXR1cCBvZiBQQ0kgYW5kIHJl Z2lzdGVycywgaW5pdGlhbGl6ZXMgbXV0ZXhlcyBhbmQKKyAqIGxpbmtlZCBsaXN0cywgcmVnaXN0 ZXJzIGludGVycnVwdHMgYW5kIENBTSwgYW5kIGluaXRpYWxpemVzICAgCisgKiB0aGUgYWRhcHRl ci9jb250cm9sbGVyIHRvIGl0cyBwcm9wZXIgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNf YXR0YWNoKGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHVpbnQzMl90IGNtZCwgYmFyLCBlcnJvcjsKKyAgICBz dGF0aWMgdV9pbnQ4X3QgZmlyc3RfY3RybCA9IDE7CisKKyAgICAvKiBMb29rIHVwIG91ciBzb2Z0 YyBhbmQgaW5pdGlhbGl6ZSBpdHMgZmllbGRzLiAqLworICAgIHNjLT5tcnNhc19kZXYgPSBkZXY7 CisgICAgc2MtPmRldmljZV9pZCA9IHBjaV9nZXRfZGV2aWNlKGRldik7CisJCisJaWYgKHNjLT5k ZXZpY2VfaWQgPT0gMHgwMDViIHx8IHNjLT5kZXZpY2VfaWQgPT0gMHgwMDVkKSB7CisJCXByaW50 ZigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjXG4iKTsKKwkJcHJpbnRmKCI8bXJzYXM+IERyaXZlciBoYXMgZGV0ZWN0ZWQgTVItRnVzaW9u IENvbnRyb2xsZXIuIgorCQkJIklmIHlvdSB3aXNoIHRvIHN3aXRjaCB0byA8bWZpPiBkcml2ZXIg Zm9yIE1SLUZ1c2lvbiwiCisJCQkicmVhZCBtYW51YWwgb2YgbXJzYXMuIE9uY2UgeW91IGNob3Nl IHRvIHVzZSA8bXJzYXM+IERyaXZlciIKKwkJCSJmb3IgTVItRnVzaW9uIENvbnRyb2xsZXJzLCB5 b3Ugc2hvdWxkIG5vdCBzd2l0Y2ggdG8gPG1maT4uIgorCQkJIkxTSSByZWNvbW1lbmQgdG8gdXNl IDxtcnNhcz4gZHJpdmVyIGZvciBNUi1GdXNpb24uIgorCQkJIlVzZSA8bXJzYXM+IGlmIHlvdSBh cmUgbm90IHN1cmUgYWJvdXQgY2hvaWNlLiIpOworCQlwcmludGYoIlF1aWNrIGhlbHAgdG8gdXNl IDxtZmk+IGZvciBNUi1GdXN0aW9uIENhcmQ6IFxuIgorCQkJIiBSZW1vdmUgaGludC5tcnNhcy4w LmZ1c2lvbl9mb3JjZT0xIGZyb20gL2Jvb3QvZGV2aWNlLmhpbnRzLiBcbiIpOworCQlwcmludGYo IiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj I1xuIik7CisJfSAKKworCWlmIChmaXJzdF9jdHJsKSB7CisJCXByaW50ZigiTFNJIE1lZ2FSQUlE IFNBUyBGcmVlQlNEIG1yc2FzIgorCQkJCQkiIGRyaXZlciB2ZXJzaW9uOiAlc1xuIiwgTVJTQVNf VkVSU0lPTik7CisJCWZpcnN0X2N0cmwgPSAwOworCX0gCisgICAgbXJzYXNfZ2V0X3R1bmFibGVz KHNjKTsKKworICAgIC8qIAorICAgICAqIFNldCB1cCBQQ0kgYW5kIHJlZ2lzdGVycyAKKyAgICAg Ki8KKyAgICBjbWQgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIpOworICAg IGlmICggKGNtZCAmIFBDSU1fQ01EX1BPUlRFTikgPT0gMCkgeworICAgICAgICByZXR1cm4gKEVO WElPKTsKKyAgICB9CisgICAgLyogRm9yY2UgdGhlIGJ1c21hc3RlciBlbmFibGUgYml0IG9uLiAq LworICAgIGNtZCB8PSBQQ0lNX0NNRF9CVVNNQVNURVJFTjsKKyAgICBwY2lfd3JpdGVfY29uZmln KGRldiwgUENJUl9DT01NQU5ELCBjbWQsIDIpOworCisgICAgLy9iYXIgPSBwY2lfcmVhZF9jb25m aWcoZGV2LCBNUlNBU19QQ0lfQkFSMCwgNCk7CisgICAgYmFyID0gcGNpX3JlYWRfY29uZmlnKGRl diwgTVJTQVNfUENJX0JBUjEsIDQpOworCisgICAgc2MtPnJlZ19yZXNfaWQgPSBNUlNBU19QQ0lf QkFSMTsgLyogQkFSMSBvZmZzZXQgKi8KKyAgICBpZiAoKHNjLT5yZWdfcmVzID0gYnVzX2FsbG9j X3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYoc2MtPnJlZ19yZXNfaWQpLCAwLCB+MCwgMSwgUkZfQUNUSVZFKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPT0gTlVMTCkgeworICAgICAgICBkZXZpY2VfcHJpbnRm KGRldiwgIkNhbm5vdCBhbGxvY2F0ZSBQQ0kgcmVnaXN0ZXJzXG4iKTsKKyAgICAgICAgZ290byBh dHRhY2hfZmFpbDsKKyAgICB9CisgICAgc2MtPmJ1c190YWcgPSBybWFuX2dldF9idXN0YWcoc2Mt PnJlZ19yZXMpOworICAgIHNjLT5idXNfaGFuZGxlID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5y ZWdfcmVzKTsKKworICAgIC8qIEludGlhbGl6ZSBtdXRleGVzICovCisgICAgbXR4X2luaXQoJnNj LT5zaW1fbG9jaywgICJtcnNhc19zaW1fbG9jayIsIE5VTEwsIE1UWF9ERUYpOworICAgIG10eF9p bml0KCZzYy0+cGNpX2xvY2ssICAibXJzYXNfcGNpX2xvY2siLCBOVUxMLCBNVFhfREVGKTsKKyAg ICBtdHhfaW5pdCgmc2MtPmlvX2xvY2ssICAibXJzYXNfaW9fbG9jayIsIE5VTEwsIE1UWF9ERUYp OworICAgIG10eF9pbml0KCZzYy0+YWVuX2xvY2ssICAibXJzYXNfYWVuX2xvY2siLCBOVUxMLCBN VFhfREVGKTsKKyAgICBtdHhfaW5pdCgmc2MtPmlvY3RsX2xvY2ssICAibXJzYXNfaW9jdGxfbG9j ayIsIE5VTEwsIE1UWF9TUElOKTsKKyAgICBtdHhfaW5pdCgmc2MtPm1wdF9jbWRfcG9vbF9sb2Nr LCAibXJzYXNfbXB0X2NtZF9wb29sX2xvY2siLCBOVUxMLCBNVFhfREVGKTsKKyAgICBtdHhfaW5p dCgmc2MtPm1maV9jbWRfcG9vbF9sb2NrLCAibXJzYXNfbWZpX2NtZF9wb29sX2xvY2siLCBOVUxM LCBNVFhfREVGKTsKKyAgICBtdHhfaW5pdCgmc2MtPnJhaWRtYXBfbG9jaywgIm1yc2FzX3JhaWRt YXBfbG9jayIsIE5VTEwsIE1UWF9ERUYpOworCisgICAgLyogSW50aWFsaXplIGxpbmtlZCBsaXN0 ICovCisgICAgVEFJTFFfSU5JVCgmc2MtPm1yc2FzX21wdF9jbWRfbGlzdF9oZWFkKTsKKyAgICBU QUlMUV9JTklUKCZzYy0+bXJzYXNfbWZpX2NtZF9saXN0X2hlYWQpOworCisgICAgYXRvbWljX3Nl dCgmc2MtPmZ3X291dHN0YW5kaW5nLDApOworCisgICAgc2MtPmlvX2NtZHNfaGlnaHdhdGVyID0g MDsKKworICAgIC8qIENyZWF0ZSBhIC9kZXYgZW50cnkgZm9yIHRoaXMgZGV2aWNlLiAqLworICAg IHNjLT5tcnNhc19jZGV2ID0gbWFrZV9kZXYoJm1yc2FzX2NkZXZzdywgZGV2aWNlX2dldF91bml0 KGRldiksIFVJRF9ST09ULAorICAgICAgICBHSURfT1BFUkFUT1IsIChTX0lSVVNSIHwgU19JV1VT UiB8IFNfSVJHUlAgfCBTX0lXR1JQKSwgIm1yc2FzJXUiLAorICAgICAgICBkZXZpY2VfZ2V0X3Vu aXQoZGV2KSk7CisgICAgaWYgKHNjLT5tcnNhc19jZGV2KQorICAgIAlzYy0+bXJzYXNfY2Rldi0+ c2lfZHJ2MSA9IHNjOworCisgICAgc2MtPmFkcHJlY292ZXJ5ID0gTVJTQVNfSEJBX09QRVJBVElP TkFMOworCisgICAgLyogSW5pdGlhbGl6ZSBGaXJtd2FyZSAqLworICAgIGlmIChtcnNhc19pbml0 X2Z3KHNjKSAhPSBTVUNDRVNTKSB7CisgICAgICAgIGdvdG8gYXR0YWNoX2ZhaWxfZnc7CisgICAg fQorCisgICAgLyogQWxsb2NhdGUgYW5kIHNldCB1cCBSQUlEIG1hcCAqLworICAgIGlmIChtcnNh c19zZXR1cF9yYWlkbWFwKHNjKSAhPSBTVUNDRVNTKSB7CisgICAgICAgIGdvdG8gYXR0YWNoX2Zh aWxfcmFpZG1hcDsKKyAgICB9CisKKyAgICAvKiBSZWdpc3RlciBTQ1NJIG1pZC1sYXllciAqLwor ICAgIGlmICgobXJzYXNfY2FtX2F0dGFjaChzYykgIT0gU1VDQ0VTUykpIHsKKyAgICAgICAgZ290 byBhdHRhY2hfZmFpbF9jYW07CisgICAgfQorCisgICAgLyogUmVnaXN0ZXIgSVJRcyAqLworICAg IGlmIChtcnNhc19zZXR1cF9pcnEoc2MpICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgZ290byBhdHRh Y2hfZmFpbF9pcnE7CisgICAgfQorCisgICAgLyogRW5hYmxlIEludGVycnVwdHMgKi8KKyAgICBt cnNhc19lbmFibGVfaW50cihzYyk7CisKKyAgICBlcnJvciA9IG1yc2FzX2twcm9jX2NyZWF0ZSht cnNhc19vY3JfdGhyZWFkLCBzYywKKyAgICAgICAgJnNjLT5vY3JfdGhyZWFkLCAwLCAwLCAibXJz YXNfb2NyJWQiLAorICAgICAgICBkZXZpY2VfZ2V0X3VuaXQoc2MtPm1yc2FzX2RldikpOworICAg IGlmIChlcnJvcikgeworICAgICAgICBwcmludGYoIkVycm9yICVkIHN0YXJ0aW5nIHJlc2NhbiB0 aHJlYWRcbiIsIGVycm9yKTsKKyAgICAgICAgZ290byBhdHRhY2hfZmFpbF9pcnE7CisgICAgfQor CisgICAgbXJzYXNfc2V0dXBfc3lzY3RsKHNjKTsKKyAgICAgICAgCisJLyogSW5pdGlhdGUgQUVO IChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKSovCisKKwlpZiAobXJzYXNfc3RhcnRf YWVuKHNjKSkgeworCQlwcmludGYoIkVycm9yOiBzdGFydCBhZW4gZmFpbGVkXG4iKTsKKwkJZ290 byBmYWlsX3N0YXJ0X2FlbjsKKwl9CisKKyAgICByZXR1cm4gKDApOworCitmYWlsX3N0YXJ0X2Fl bjoKK2F0dGFjaF9mYWlsX2lycToKKyAgICBtcnNhc190ZWFyZG93bl9pbnRyKHNjKTsKK2F0dGFj aF9mYWlsX2NhbToKKyAgICBtcnNhc19jYW1fZGV0YWNoKHNjKTsKK2F0dGFjaF9mYWlsX2Z3Ogor YXR0YWNoX2ZhaWxfcmFpZG1hcDoKKyAgICBtcnNhc19mcmVlX21lbShzYyk7CisgICAgbXR4X2Rl c3Ryb3koJnNjLT5zaW1fbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNjLT5hZW5fbG9jayk7Cisg ICAgbXR4X2Rlc3Ryb3koJnNjLT5wY2lfbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNjLT5pb19s b2NrKTsKKyAgICBtdHhfZGVzdHJveSgmc2MtPmlvY3RsX2xvY2spOworICAgIG10eF9kZXN0cm95 KCZzYy0+bXB0X2NtZF9wb29sX2xvY2spOworICAgIG10eF9kZXN0cm95KCZzYy0+bWZpX2NtZF9w b29sX2xvY2spOworICAgIG10eF9kZXN0cm95KCZzYy0+cmFpZG1hcF9sb2NrKTsKK2F0dGFjaF9m YWlsOgorICAgIGRlc3Ryb3lfZGV2KHNjLT5tcnNhc19jZGV2KTsKKyAgICBpZiAoc2MtPnJlZ19y ZXMpeworICAgICAgICBidXNfcmVsZWFzZV9yZXNvdXJjZShzYy0+bXJzYXNfZGV2LCBTWVNfUkVT X01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2MtPnJlZ19yZXNfaWQsIHNj LT5yZWdfcmVzKTsKKyAgICB9CisgICAgcmV0dXJuIChFTlhJTyk7Cit9CisKKy8qKgorICogbXJz YXNfZGV0YWNoOiAgICAgICAgICAgIERlLWFsbG9jYXRlcyBhbmQgdGVhcmRvd24gcmVzb3VyY2Vz CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdCBwb2ludGVyIAorICog CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZGV2aWNlIGRpc2Nvbm5l Y3QgYW5kIGRldGFjaC4gIEl0CisgKiBwZXJmb3JtcyBtZW1vcnkgZGUtYWxsb2NhdGlvbnMsIHNo dXRkb3duIG9mIHRoZSBjb250cm9sbGVyIGFuZCB2YXJpb3VzIAorICogdGVhcmRvd24gYW5kIGRl c3Ryb3kgcmVzb3VyY2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW50IG1yc2FzX2RldGFjaChk ZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IG1yc2FzX3NvZnRjICpzYzsKKyAgICBpbnQgaSA9 IDA7CisKKyAgICBzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBzYy0+cmVtb3ZlX2lu X3Byb2dyZXNzID0gMTsKKyAgICBpZihzYy0+b2NyX3RocmVhZF9hY3RpdmUpCisgICAgICAgIHdh a2V1cCgmc2MtPm9jcl9jaGFuKTsKKyAgICB3aGlsZShzYy0+cmVzZXRfaW5fcHJvZ3Jlc3Mpewor ICAgICAgICBpKys7CisgICAgICAgIGlmICghKGkgJSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJW QUwpKSB7CisgICAgICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX0lORk8sCisgICAgICAg ICAgICAgICAgIlslMmRdd2FpdGluZyBmb3Igb2NyIHRvIGJlIGZpbmlzaGVkXG4iLGkpOworICAg ICAgICB9CisgICAgICAgIHBhdXNlKCJtcl9zaHV0ZG93biIsIGh6KTsKKyAgICB9CisgICAgaSA9 IDA7CisgICAgd2hpbGUoc2MtPm9jcl90aHJlYWRfYWN0aXZlKXsKKyAgICAgICAgaSsrOworICAg ICAgICBpZiAoIShpICUgTVJTQVNfUkVTRVRfTk9USUNFX0lOVEVSVkFMKSkgeworICAgICAgICAg ICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19JTkZPLAorICAgICAgICAgICAgICAgICJbJTJkXXdh aXRpbmcgZm9yICIKKyAgICAgICAgICAgICAgICAibXJzYXNfb2NyIHRocmVhZCB0byBxdWl0IG9j ciAlZFxuIixpLAorICAgICAgICAgICAgICAgICBzYy0+b2NyX3RocmVhZF9hY3RpdmUpOworICAg ICAgICB9CisgICAgICAgIHBhdXNlKCJtcl9zaHV0ZG93biIsIGh6KTsKKyAgICB9CisKKyAgICBt cnNhc19mbHVzaF9jYWNoZShzYyk7CisgICAgbXJzYXNfc2h1dGRvd25fY3RscihzYywgTVJfRENN RF9DVFJMX1NIVVRET1dOKTsKKyAgICBtcnNhc19kaXNhYmxlX2ludHIoc2MpOworICAgIG1yc2Fz X2NhbV9kZXRhY2goc2MpOworICAgIG1yc2FzX3RlYXJkb3duX2ludHIoc2MpOworICAgIG1yc2Fz X2ZyZWVfbWVtKHNjKTsKKyAgICBtdHhfZGVzdHJveSgmc2MtPnNpbV9sb2NrKTsKKyAgICBtdHhf ZGVzdHJveSgmc2MtPmFlbl9sb2NrKTsKKyAgICBtdHhfZGVzdHJveSgmc2MtPnBjaV9sb2NrKTsK KyAgICBtdHhfZGVzdHJveSgmc2MtPmlvX2xvY2spOworICAgIG10eF9kZXN0cm95KCZzYy0+aW9j dGxfbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNjLT5tcHRfY21kX3Bvb2xfbG9jayk7CisgICAg bXR4X2Rlc3Ryb3koJnNjLT5tZmlfY21kX3Bvb2xfbG9jayk7CisgICAgbXR4X2Rlc3Ryb3koJnNj LT5yYWlkbWFwX2xvY2spOworICAgIGlmIChzYy0+cmVnX3Jlcyl7CisgICAgICAgIGJ1c19yZWxl YXNlX3Jlc291cmNlKHNjLT5tcnNhc19kZXYsCisgICAgICAgICAgICAgICAgIFNZU19SRVNfTUVN T1JZLCBzYy0+cmVnX3Jlc19pZCwgc2MtPnJlZ19yZXMpOworICAgIH0KKyAgICBkZXN0cm95X2Rl dihzYy0+bXJzYXNfY2Rldik7CisgICAgaWYgKHNjLT5zeXNjdGxfdHJlZSAhPSBOVUxMKQorICAg ICAgICBzeXNjdGxfY3R4X2ZyZWUoJnNjLT5zeXNjdGxfY3R4KTsKKyAgICByZXR1cm4gKDApOwor fQorCisvKioKKyAqIG1yc2FzX2ZyZWVfbWVtOiAgICAgICAgICBGcmVlcyBhbGxvY2F0ZWQgbWVt b3J5IAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBz dGF0ZQorICogCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG1yc2FzX2RldGFjaCgp IHRvIGZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAqIG1lbW9yeS4gIAorICovCit2b2lkIG1y c2FzX2ZyZWVfbWVtKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaW50IGk7CisgICAg dV9pbnQzMl90IG1heF9jbWQ7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKm1maV9jbWQ7Cisg ICAgc3RydWN0IG1yc2FzX21wdF9jbWQgKm1wdF9jbWQ7CisgICAgCisJLyoKKyAgICAgKiBGcmVl IFJBSUQgbWFwIG1lbW9yeQorICAgICAqLworICAgIGZvciAoaT0wOyBpIDwgMjsgaSsrKQorICAg IHsKKyAgICAgICAgaWYgKHNjLT5yYWlkbWFwX3BoeXNfYWRkcltpXSkKKyAgICAgICAgICAgIGJ1 c19kbWFtYXBfdW5sb2FkKHNjLT5yYWlkbWFwX3RhZ1tpXSwgc2MtPnJhaWRtYXBfZG1hbWFwW2ld KTsKKyAgICAgICAgaWYgKHNjLT5yYWlkbWFwX21lbVtpXSAhPSBOVUxMKQorICAgICAgICAgICAg YnVzX2RtYW1lbV9mcmVlKHNjLT5yYWlkbWFwX3RhZ1tpXSwgc2MtPnJhaWRtYXBfbWVtW2ldLCBz Yy0+cmFpZG1hcF9kbWFtYXBbaV0pOworICAgICAgICBpZiAoc2MtPnJhaWRtYXBfdGFnW2ldICE9 IE5VTEwpCisgICAgICAgICAgICBidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5yYWlkbWFwX3RhZ1tp XSk7CisgICAgfQorCisgICAgLyogCisgICAgICogRnJlZSB2ZXJzaW9uIGJ1ZmZlciBtZW1yb3kg CisgICAgICovCisgICAgaWYgKHNjLT52ZXJidWZfcGh5c19hZGRyKQorICAgICAgICBidXNfZG1h bWFwX3VubG9hZChzYy0+dmVyYnVmX3RhZywgc2MtPnZlcmJ1Zl9kbWFtYXApOworICAgIGlmIChz Yy0+dmVyYnVmX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPnZlcmJ1 Zl90YWcsIHNjLT52ZXJidWZfbWVtLCBzYy0+dmVyYnVmX2RtYW1hcCk7CisgICAgaWYgKHNjLT52 ZXJidWZfdGFnICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPnZlcmJ1 Zl90YWcpOworCQorCisgICAgLyogCisgICAgICogRnJlZSBzZW5zZSBidWZmZXIgbWVtb3J5IAor ICAgICAqLworICAgIGlmIChzYy0+c2Vuc2VfcGh5c19hZGRyKQorICAgICAgICBidXNfZG1hbWFw X3VubG9hZChzYy0+c2Vuc2VfdGFnLCBzYy0+c2Vuc2VfZG1hbWFwKTsKKyAgICBpZiAoc2MtPnNl bnNlX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPnNlbnNlX3RhZywg c2MtPnNlbnNlX21lbSwgc2MtPnNlbnNlX2RtYW1hcCk7CisgICAgaWYgKHNjLT5zZW5zZV90YWcg IT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYV90YWdfZGVzdHJveShzYy0+c2Vuc2VfdGFnKTsKKwor ICAgIC8qIAorICAgICAqIEZyZWUgY2hhaW4gZnJhbWUgbWVtb3J5IAorICAgICAqLworICAgIGlm IChzYy0+Y2hhaW5fZnJhbWVfcGh5c19hZGRyKQorICAgICAgICBidXNfZG1hbWFwX3VubG9hZChz Yy0+Y2hhaW5fZnJhbWVfdGFnLCBzYy0+Y2hhaW5fZnJhbWVfZG1hbWFwKTsKKyAgICBpZiAoc2Mt PmNoYWluX2ZyYW1lX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPmNo YWluX2ZyYW1lX3RhZywgc2MtPmNoYWluX2ZyYW1lX21lbSwgc2MtPmNoYWluX2ZyYW1lX2RtYW1h cCk7CisgICAgaWYgKHNjLT5jaGFpbl9mcmFtZV90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2Rt YV90YWdfZGVzdHJveShzYy0+Y2hhaW5fZnJhbWVfdGFnKTsKKworICAgIC8qIAorICAgICAqIEZy ZWUgSU8gUmVxdWVzdCBtZW1vcnkgCisgICAgICovCisgICAgaWYgKHNjLT5pb19yZXF1ZXN0X3Bo eXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmlvX3JlcXVlc3RfdGFnLCBz Yy0+aW9fcmVxdWVzdF9kbWFtYXApOworICAgIGlmIChzYy0+aW9fcmVxdWVzdF9tZW0gIT0gTlVM TCkKKyAgICAgICAgYnVzX2RtYW1lbV9mcmVlKHNjLT5pb19yZXF1ZXN0X3RhZywgc2MtPmlvX3Jl cXVlc3RfbWVtLCBzYy0+aW9fcmVxdWVzdF9kbWFtYXApOworICAgIGlmIChzYy0+aW9fcmVxdWVz dF90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYV90YWdfZGVzdHJveShzYy0+aW9fcmVxdWVz dF90YWcpOworCisgICAgLyogCisgICAgICogRnJlZSBSZXBseSBEZXNjcmlwdG9yIG1lbW9yeSAK KyAgICAgKi8KKyAgICBpZiAoc2MtPnJlcGx5X2Rlc2NfcGh5c19hZGRyKQorICAgICAgICBidXNf ZG1hbWFwX3VubG9hZChzYy0+cmVwbHlfZGVzY190YWcsIHNjLT5yZXBseV9kZXNjX2RtYW1hcCk7 CisgICAgaWYgKHNjLT5yZXBseV9kZXNjX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVt X2ZyZWUoc2MtPnJlcGx5X2Rlc2NfdGFnLCBzYy0+cmVwbHlfZGVzY19tZW0sIHNjLT5yZXBseV9k ZXNjX2RtYW1hcCk7CisgICAgaWYgKHNjLT5yZXBseV9kZXNjX3RhZyAhPSBOVUxMKQorICAgICAg ICBidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5yZXBseV9kZXNjX3RhZyk7CisKKyAgICAvKiAKKyAg ICAgKiBGcmVlIGV2ZW50IGRldGFpbCBtZW1vcnkgCisgICAgICovCisgICAgaWYgKHNjLT5ldnRf ZGV0YWlsX3BoeXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmV2dF9kZXRh aWxfdGFnLCBzYy0+ZXZ0X2RldGFpbF9kbWFtYXApOworICAgIGlmIChzYy0+ZXZ0X2RldGFpbF9t ZW0gIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYW1lbV9mcmVlKHNjLT5ldnRfZGV0YWlsX3RhZywg c2MtPmV2dF9kZXRhaWxfbWVtLCBzYy0+ZXZ0X2RldGFpbF9kbWFtYXApOworICAgIGlmIChzYy0+ ZXZ0X2RldGFpbF90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ ZXZ0X2RldGFpbF90YWcpOworCisgICAgLyogCisgICAgICogRnJlZSBNRkkgZnJhbWVzIAorICAg ICAqLworCWlmIChzYy0+bWZpX2NtZF9saXN0KSB7CisgICAgCWZvciAoaSA9IDA7IGkgPCBNUlNB U19NQVhfTUZJX0NNRFM7IGkrKykgeworICAgICAgICAJbWZpX2NtZCA9IHNjLT5tZmlfY21kX2xp c3RbaV07CisgICAgICAgIAltcnNhc19mcmVlX2ZyYW1lKHNjLCBtZmlfY21kKTsKKwkJfQorICAg IH0KKyAgICBpZiAoc2MtPm1maWNtZF9mcmFtZV90YWcgIT0gTlVMTCkKKyAgICAgICAgYnVzX2Rt YV90YWdfZGVzdHJveShzYy0+bWZpY21kX2ZyYW1lX3RhZyk7CisKKyAgICAvKiAKKyAgICAgKiBG cmVlIE1QVCBpbnRlcm5hbCBjb21tYW5kIGxpc3QgCisgICAgICovCisgICAgbWF4X2NtZCA9IHNj LT5tYXhfZndfY21kczsKKwlpZiAoc2MtPm1wdF9jbWRfbGlzdCkgeworICAgIAlmb3IgKGkgPSAw OyBpIDwgbWF4X2NtZDsgaSsrKSB7CisgICAgICAgIAltcHRfY21kID0gc2MtPm1wdF9jbWRfbGlz dFtpXTsKKyAgICAgICAgCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZGF0YV90YWcsIG1wdF9jbWQt PmRhdGFfZG1hbWFwKTsgCisgICAgICAgIAlmcmVlKHNjLT5tcHRfY21kX2xpc3RbaV0sIE1fTVJT QVMpOworICAgIAl9CisgICAgCWZyZWUoc2MtPm1wdF9jbWRfbGlzdCwgTV9NUlNBUyk7CisgICAg CXNjLT5tcHRfY21kX2xpc3QgPSBOVUxMOworCX0KKworICAgIC8qCisgICAgICogRnJlZSBNRkkg aW50ZXJuYWwgY29tbWFuZCBsaXN0IAorICAgICAqLworCQorCWlmIChzYy0+bWZpX2NtZF9saXN0 KSB7CisgICAgCWZvciAoaSA9IDA7IGkgPCBNUlNBU19NQVhfTUZJX0NNRFM7IGkrKykgeworICAg ICAgICAJZnJlZShzYy0+bWZpX2NtZF9saXN0W2ldLCBNX01SU0FTKTsKKyAgICAJfQorICAgIAlm cmVlKHNjLT5tZmlfY21kX2xpc3QsIE1fTVJTQVMpOworICAgIAlzYy0+bWZpX2NtZF9saXN0ID0g TlVMTDsKKwl9CisKKyAgICAvKiAKKyAgICAgKiBGcmVlIHJlcXVlc3QgZGVzY3JpcHRvciBtZW1v cnkgCisgICAgICovCisgICAgZnJlZShzYy0+cmVxX2Rlc2MsIE1fTVJTQVMpOworICAgIHNjLT5y ZXFfZGVzYyA9IE5VTEw7CisKKyAgICAvKiAKKyAgICAgKiBEZXN0cm95IHBhcmVudCB0YWcgCisg ICAgICovCisgICAgaWYgKHNjLT5tcnNhc19wYXJlbnRfdGFnICE9IE5VTEwpCisgICAgICAgIGJ1 c19kbWFfdGFnX2Rlc3Ryb3koc2MtPm1yc2FzX3BhcmVudF90YWcpOworfQorCisvKioKKyAqIG1y c2FzX3RlYXJkb3duX2ludHI6ICAgICAgICBUZWFyZG93biBpbnRlcnJ1cHQgCisgKiBpbnB1dDog ICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBzb2Z0IHN0YXRlCisgKgorICog VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBtcnNhc19kZXRhY2goKSB0byB0ZWFyZG93biBh bmQgcmVsZWFzZQorICogYnVzIGludGVycnVwdCByZXNvdXJzZS4KKyAqLwordm9pZCBtcnNhc190 ZWFyZG93bl9pbnRyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaWYgKHNjLT5pbnRy X2hhbmRsZSkKKyAgICAgICAgYnVzX3RlYXJkb3duX2ludHIoc2MtPm1yc2FzX2Rldiwgc2MtPm1y c2FzX2lycSwgc2MtPmludHJfaGFuZGxlKTsKKyAgICBpZiAoc2MtPm1yc2FzX2lycSAhPSBOVUxM KQorICAgICAgICBidXNfcmVsZWFzZV9yZXNvdXJjZShzYy0+bXJzYXNfZGV2LCBTWVNfUkVTX0lS USwgc2MtPmlycV9pZCwgc2MtPm1yc2FzX2lycSk7CisgICAgc2MtPmludHJfaGFuZGxlID0gTlVM TDsKK30KKworLyoqCisgKiBtcnNhc19zdXNwZW5kOiAgICAgICAgICBTdXNwZW5kIGVudHJ5IHBv aW50CisgKiBpbnB1dDogICAgICAgICAgICAgICAgICBEZXZpY2Ugc3RydWN0IHBvaW50ZXIgCisg KiAKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gc3VzcGVu ZCBmcm9tIHRoZSBPUy4gICAKKyAqLworc3RhdGljIGludCBtcnNhc19zdXNwZW5kKGRldmljZV90 IGRldikKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjOworCisgICAgc2MgPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldik7CisgICAgcmV0dXJuICgwKTsKK30KKworLyoqCisgKiBtcnNhc19yZXN1 bWU6ICAgICAgICAgICBSZXN1bWUgZW50cnkgcG9pbnQgCisgKiBpbnB1dDogICAgICAgICAgICAg ICAgICBEZXZpY2Ugc3RydWN0IHBvaW50ZXIgCisgKiAKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhl IGVudHJ5IHBvaW50IGZvciBzeXN0ZW0gcmVzdW1lIGZyb20gdGhlIE9TLiAgIAorICovCitzdGF0 aWMgaW50IG1yc2FzX3Jlc3VtZShkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IG1yc2FzX3Nv ZnRjICpzYzsKKworICAgIHNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHJldHVybiAo MCk7Cit9CisKKy8qKgorICogbXJzYXNfaW9jdGw6ICAgICAgIElPQ3RsIGNvbW1hbmRzIGVudHJ5 IHBvaW50LiAKKyAqIAorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIElP Q3RscyBmcm9tIHRoZSBPUy4gIEl0IGNhbGxzIHRoZSAKKyAqIGFwcHJvcHJpYXRlIGZ1bmN0aW9u IGZvciBwcm9jZXNzaW5nIGRlcGVuZGluZyBvbiB0aGUgY29tbWFuZCByZWNlaXZlZC4KKyAqLwor c3RhdGljIGludAorbXJzYXNfaW9jdGwoc3RydWN0IGNkZXYgKmRldiwgdV9sb25nIGNtZCwgY2Fk ZHJfdCBhcmcsIGludCBmbGFnLCBkX3RocmVhZF90ICp0ZCkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNf c29mdGMgKnNjOworICAgIGludCByZXQgPSAwLCBpID0gMDsgCisKKyAgICBzYyA9IChzdHJ1Y3Qg bXJzYXNfc29mdGMgKikoZGV2LT5zaV9kcnYxKTsKKyAgICAKKyAgICBpZiAoc2MtPnJlbW92ZV9p bl9wcm9ncmVzcykgeworICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX0lORk8sCisgICAg ICAgICAgICAiRHJpdmVyIHJlbW92ZSBvciBzaHV0ZG93biBjYWxsZWQuXG4iKTsKKyAgICAgICAg cmV0dXJuIEVOT0VOVDsKKyAgICB9CisgICAKKyAgICBtdHhfbG9ja19zcGluKCZzYy0+aW9jdGxf bG9jayk7CisgICAgaWYgKCFzYy0+cmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKyAgICAgICAgbXR4X3Vu bG9ja19zcGluKCZzYy0+aW9jdGxfbG9jayk7CisgICAgICAgIGdvdG8gZG9faW9jdGw7CisgICAg fQorCisgICAgLyogUmVsZWFzZSBpb2NsdF9sb2NrLCBhbmQgd2FpdCBmb3IgT0NSCisgICAgICog dG8gYmUgZmluaXNoZWQgKi8KKyAgICBtdHhfdW5sb2NrX3NwaW4oJnNjLT5pb2N0bF9sb2NrKTsK KyAgICB3aGlsZShzYy0+cmVzZXRfaW5fcHJvZ3Jlc3MpeworICAgICAgICBpKys7CisgICAgICAg IGlmICghKGkgJSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7CisgICAgICAgICAgICBt cnNhc19kcHJpbnQoc2MsIE1SU0FTX0lORk8sCisgICAgICAgICAgICAgICAgIlslMmRdd2FpdGlu ZyBmb3IgIgorICAgICAgICAgICAgICAgICJPQ1IgdG8gYmUgZmluaXNoZWQgJWRcbiIsaSwKKyAg ICAgICAgICAgICAgICAgc2MtPm9jcl90aHJlYWRfYWN0aXZlKTsKKyAgICAgICAgfQorICAgICAg ICBwYXVzZSgibXJfaW9jdGwiLCBoeik7CisgICAgfQorCitkb19pb2N0bDoKKyAgICBzd2l0Y2gg KGNtZCkgeworICAgICAgICBjYXNlIE1SU0FTX0lPQ19GSVJNV0FSRV9QQVNTX1RIUk9VR0g6Cisg ICAgICAgICAgICByZXQgPSBtcnNhc19wYXNzdGhydShzYywgKHZvaWQgKilhcmcpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVJTQVNfSU9DX1NDQU5fQlVTOgorICAgICAgICAg ICAgcmV0ID0gbXJzYXNfYnVzX3NjYW4oc2MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQor IAorICAgIHJldHVybiAocmV0KTsKK30KKworLyoqCisgKiBtcnNhc19zZXR1cF9pcnE6ICAgU2V0 IHVwIGludGVycnVwdC4gCisgKiBpbnB1dDogICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBz b2Z0IHN0YXRlCisgKiAKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCBpbnRlcnJ1cHRzIGFzIGEg YnVzIHJlc291cmNlLCB3aXRoIGZsYWdzIGluZGljYXRpbmcKKyAqIHJlc291cmNlIHBlcm1pdHRp bmcgY29udGVtcG9yYW5lb3VzIHNoYXJpbmcgYW5kIGZvciByZXNvdXJjZSB0byBhY3RpdmF0ZSAK KyAqIGF0b21pY2FsbHkuCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfc2V0dXBfaXJxKHN0cnVjdCBt cnNhc19zb2Z0YyAqc2MpCit7CisgICAgc2MtPmlycV9pZCA9IDA7CisgICAgc2MtPm1yc2FzX2ly cSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoc2MtPm1yc2FzX2RldiwgU1lTX1JFU19JUlEsCisg ICAgICAgICAgICAgICAgICAgICAgICAmc2MtPmlycV9pZCwgUkZfU0hBUkVBQkxFIHwgUkZfQUNU SVZFKTsKKyAgICBpZiAoc2MtPm1yc2FzX2lycSA9PSBOVUxMKXsKKyAgICAgICAgZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGludGVycnVwdFxuIik7CisgICAg ICAgIHJldHVybiAoRkFJTCk7CisgICAgfQorICAgIGlmIChidXNfc2V0dXBfaW50cihzYy0+bXJz YXNfZGV2LCBzYy0+bXJzYXNfaXJxLCBJTlRSX01QU0FGRXxJTlRSX1RZUEVfQ0FNLAorICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCBtcnNhc19pc3IsIHNjLCAmc2MtPmludHJfaGFuZGxlKSkg eworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3Qgc2V0IHVwIGlu dGVycnVwdFxuIik7CisgICAgICAgIHJldHVybiAoRkFJTCk7CisgICAgfQorCisgICAgcmV0dXJu ICgwKTsKK30KKworLyoKKyAqIG1yc2FzX2lzcjogICAgICAgIElTUiBlbnRyeSBwb2ludCAKKyAq IGlucHV0OiAgICAgICAgICAgIGFyZ3VtZW50IHBvaW50ZXIgCisgKgorICogVGhpcyBmdW5jdGlv biBpcyB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBlbnRyeSBwb2ludC4gIFRoZXJlCisg KiBhcmUgdHdvIHR5cGVzIG9mIGludGVycnVwdHMsIHN0YXRlIGNoYW5nZSBpbnRlcnJ1cHQgYW5k IHJlc3BvbnNlCisgKiBpbnRlcnJ1cHQuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbm90IG91cnMsIHdl IGp1c3QgcmV0dXJuLgorICovCit2b2lkIG1yc2FzX2lzcih2b2lkICphcmcpCit7CisgICAgc3Ry dWN0IG1yc2FzX3NvZnRjICpzYyA9IChzdHJ1Y3QgbXJzYXNfc29mdGMgKilhcmc7CisgICAgaW50 IHN0YXR1czsKKworICAgIC8qIENsZWFyIEZXIHN0YXRlIGNoYW5nZSBpbnRlcnJ1cHQgKi8KKyAg ICBzdGF0dXMgPSBtcnNhc19jbGVhcl9pbnRyKHNjKTsKKworICAgIC8qIE5vdCBvdXIgaW50ZXJy dXB0ICovCisgICAgaWYgKCFzdGF0dXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvKiBJ ZiB3ZSBhcmUgcmVzZXR0aW5nLCBiYWlsICovCisgICAgaWYgKHRlc3RfYml0KE1SU0FTX0ZVU0lP Tl9JTl9SRVNFVCwgJnNjLT5yZXNldF9mbGFncykpIHsKKyAgICAgICAgcHJpbnRmKCIgRW50ZXJl ZCBpbnRvIElTUiB3aGVuIE9DUiBpcyBnb2luZyBhY3RpdmUuIFxuIik7CisgICAgICAgIG1yc2Fz X2NsZWFyX2ludHIoc2MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIFByb2Nlc3Mg Zm9yIHJlcGx5IHJlcXVlc3QgYW5kIGNsZWFyIHJlc3BvbnNlIGludGVycnVwdCAqLworICAgIGlm IChtcnNhc19jb21wbGV0ZV9jbWQoc2MpICE9IFNVQ0NFU1MpIAorICAgICAgICBtcnNhc19jbGVh cl9pbnRyKHNjKTsKKworICAgIHJldHVybjsKK30KKworLyoKKyAqIG1yc2FzX2NvbXBsZXRlX2Nt ZDogICAgICAgIFByb2Nlc3MgcmVwbHkgcmVxdWVzdCAgCisgKiBpbnB1dDogICAgICAgICAgICAg ICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCBmcm9tIG1yc2FzX2lzcigpIHRvIHByb2Nlc3MgcmVwbHkgcmVxdWVzdCBhbmQg CisgKiBjbGVhciByZXNwb25zZSBpbnRlcnJ1cHQuIFByb2Nlc3Npbmcgb2YgdGhlIHJlcGx5IHJl cXVlc3QgZW50YWlscworICogd2Fsa2luZyB0aHJvdWdoIHRoZSByZXBseSBkZXNjcmlwdG9yIGFy cmF5IGZvciB0aGUgY29tbWFuZCByZXF1ZXN0ICAKKyAqIHBlbmRlZCBmcm9tIEZpcm13YXJlLiAg V2UgbG9vayBhdCB0aGUgRnVuY3Rpb24gZmllbGQgdG8gZGV0ZXJtaW5lCisgKiB0aGUgY29tbWFu ZCB0eXBlIGFuZCBwZXJmb3JtIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uICBCZWZvcmUgd2UKKyAq IHJldHVybiwgd2UgY2xlYXIgdGhlIHJlc3BvbnNlIGludGVycnVwdC4KKyAqLworc3RhdGljIGlu dCBtcnNhc19jb21wbGV0ZV9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBNcGky UmVwbHlEZXNjcmlwdG9yc1VuaW9uX3QgKmRlc2M7CisgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1Nf UkVQTFlfREVTQ1JJUFRPUiAqcmVwbHlfZGVzYzsKKyAgICBNUlNBU19SQUlEX1NDU0lfSU9fUkVR VUVTVCAgKnNjc2lfaW9fcmVxOworICAgIHN0cnVjdCBtcnNhc19tcHRfY21kICpjbWRfbXB0Owor ICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWRfbWZpOworICAgIHVfaW50OF90IGFybSwgcmVw bHlfZGVzY3JpcHRfdHlwZTsKKyAgICB1X2ludDE2X3Qgc21pZCwgbnVtX2NvbXBsZXRlZDsKKyAg ICB1X2ludDhfdCBzdGF0dXMsIGV4dFN0YXR1czsKKyAgICB1bmlvbiBkZXNjX3ZhbHVlIGRlc2Nf dmFsOworICAgIFBMRF9MT0FEX0JBTEFOQ0VfSU5GTyBsYmluZm87CisgICAgdV9pbnQzMl90IGRl dmljZV9pZDsKKworCisgICAgLyogSWYgd2UgaGF2ZSBhIGhhcmR3YXJlIGVycm9yLCBub3QgbmVl ZCB0byBjb250aW51ZSAqLworICAgIGlmIChzYy0+YWRwcmVjb3ZlcnkgPT0gTVJTQVNfSFdfQ1JJ VElDQUxfRVJST1IpCisgICAgICAgIHJldHVybiAoRE9ORSk7CisKKyAgICBkZXNjID0gc2MtPnJl cGx5X2Rlc2NfbWVtOworICAgIGRlc2MgKz0gc2MtPmxhc3RfcmVwbHlfaWR4OworCisgICAgcmVw bHlfZGVzYyA9IChNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICopZGVzYzsK KworICAgIGRlc2NfdmFsLndvcmQgPSBkZXNjLT5Xb3JkczsKKyAgICBudW1fY29tcGxldGVkID0g MDsKKworICAgIHJlcGx5X2Rlc2NyaXB0X3R5cGUgPSByZXBseV9kZXNjLT5SZXBseUZsYWdzICYg TVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLOworCisgICAgLyogRmluZCBvdXIgcmVw bHkgZGVzY3JpcHRvciBmb3IgdGhlIGNvbW1hbmQgYW5kIHByb2Nlc3MgKi8KKyAgICB3aGlsZSgo ZGVzY192YWwudS5sb3cgIT0gMHhGRkZGRkZGRikgJiYgKGRlc2NfdmFsLnUuaGlnaCAhPSAweEZG RkZGRkZGKSkgCisgICAgeworICAgICAgICBzbWlkID0gcmVwbHlfZGVzYy0+U01JRDsKKyAgICAg ICAgY21kX21wdCA9IHNjLT5tcHRfY21kX2xpc3Rbc21pZCAtMV07CisgICAgICAgIHNjc2lfaW9f cmVxID0gKE1SU0FTX1JBSURfU0NTSV9JT19SRVFVRVNUICopY21kX21wdC0+aW9fcmVxdWVzdDsK KworICAgICAgICBzdGF0dXMgPSBzY3NpX2lvX3JlcS0+UmFpZENvbnRleHQuc3RhdHVzOworICAg ICAgICBleHRTdGF0dXMgPSBzY3NpX2lvX3JlcS0+UmFpZENvbnRleHQuZXhTdGF0dXM7CisgICAg ICAgCisgICAgICAgIHN3aXRjaCAoc2NzaV9pb19yZXEtPkZ1bmN0aW9uKQorICAgICAgICB7Cisg ICAgICAgICAgICBjYXNlIE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUIDogIC8qRmFzdCBQ YXRoIElPLiovCisgICAgICAgICAgICAgICAgZGV2aWNlX2lkID0gY21kX21wdC0+Y2NiX3B0ci0+ Y2NiX2gudGFyZ2V0X2lkOworICAgICAgICAgICAgICAgIGxiaW5mbyA9ICZzYy0+bG9hZF9iYWxh bmNlX2luZm9bZGV2aWNlX2lkXTsKKyAgICAgICAgICAgICAgICBpZiAoY21kX21wdC0+bG9hZF9i YWxhbmNlID09IE1SU0FTX0xPQURfQkFMQU5DRV9GTEFHKSB7CisgICAgICAgICAgICAgICAgICAg IGFybSA9IGxiaW5mby0+cmFpZDFEZXZIYW5kbGVbMF0gPT0gc2NzaV9pb19yZXEtPkRldkhhbmRs ZSA/IDAgOiAxOworICAgICAgICAgICAgICAgICAgICBhdG9taWNfZGVjKCZsYmluZm8tPnNjc2lf cGVuZGluZ19jbWRzW2FybV0pOworICAgICAgICAgICAgICAgICAgICBjbWRfbXB0LT5sb2FkX2Jh bGFuY2UgJj0gfk1SU0FTX0xPQURfQkFMQU5DRV9GTEFHOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAvL0ZhbGwgdGhydSBhbmQgY29tcGxldGUgSU8KKyAgICAgICAgICAgIGNh c2UgTVJTQVNfTVBJMl9GVU5DVElPTl9MRF9JT19SRVFVRVNUOgorICAgICAgICAgICAgICAgIG1y c2FzX21hcF9tcHRfY21kX3N0YXR1cyhjbWRfbXB0LCBzdGF0dXMsIGV4dFN0YXR1cyk7CisgICAg ICAgICAgICAgICAgbXJzYXNfY21kX2RvbmUoc2MsIGNtZF9tcHQpOworICAgICAgICAgICAgICAg IHNjc2lfaW9fcmVxLT5SYWlkQ29udGV4dC5zdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIHNj c2lfaW9fcmVxLT5SYWlkQ29udGV4dC5leFN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgYXRv bWljX2RlYygmc2MtPmZ3X291dHN0YW5kaW5nKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgTVJTQVNfTVBJMl9GVU5DVElPTl9QQVNTVEhSVV9JT19SRVFVRVNUOiAv Kk1GSSBjb21tYW5kICovCisgICAgICAgICAgICAgICAgY21kX21maSA9IHNjLT5tZmlfY21kX2xp c3RbY21kX21wdC0+c3luY19jbWRfaWR4XTsKKyAgICAgICAgICAgICAgICBtcnNhc19jb21wbGV0 ZV9tcHRtZmlfcGFzc3RocnUoc2MsIGNtZF9tZmksIHN0YXR1cyk7CisgICAgICAgICAgICAgICAg Y21kX21wdC0+ZmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbXB0X2Nt ZChjbWRfbXB0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg IHNjLT5sYXN0X3JlcGx5X2lkeCsrOworICAgICAgICBpZiAoc2MtPmxhc3RfcmVwbHlfaWR4ID49 IHNjLT5yZXBseV9xX2RlcHRoKSAKKyAgICAgICAgICAgIHNjLT5sYXN0X3JlcGx5X2lkeCA9IDA7 CisKKyAgICAgICAgZGVzYy0+V29yZHMgPSB+KCh1aW50NjRfdCkweDAwKTsgLyogc2V0IGl0IGJh Y2sgdG8gYWxsIDB4RkZGRkZGRkZzICovCisgICAgICAgIG51bV9jb21wbGV0ZWQrKzsKKworICAg ICAgICAvKiBHZXQgdGhlIG5leHQgcmVwbHkgZGVzY3JpcHRvciAqLworICAgICAgICBpZiAoIXNj LT5sYXN0X3JlcGx5X2lkeCkKKyAgICAgICAgICAgIGRlc2MgPSBzYy0+cmVwbHlfZGVzY19tZW07 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlc2MrKzsKKworICAgICAgICByZXBseV9kZXNj ID0gKE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgKilkZXNjOworICAgICAg ICBkZXNjX3ZhbC53b3JkID0gZGVzYy0+V29yZHM7CisKKyAgICAgICAgcmVwbHlfZGVzY3JpcHRf dHlwZSA9IHJlcGx5X2Rlc2MtPlJlcGx5RmxhZ3MgJiBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19U WVBFX01BU0s7CisKKyAgICAgICAgaWYocmVwbHlfZGVzY3JpcHRfdHlwZSA9PSBNUEkyX1JQWV9E RVNDUklQVF9GTEFHU19VTlVTRUQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAv KiBObyBtYXRjaCwganVzdCByZXR1cm4gKi8KKyAgICBpZiAobnVtX2NvbXBsZXRlZCA9PSAwKQor ICAgICAgICByZXR1cm4gKERPTkUpOworCisgICAgLyogQ2xlYXIgcmVzcG9uc2UgaW50ZXJydXB0 ICovCisgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCByZXBs eV9wb3N0X2hvc3RfaW5kZXgpLHNjLT5sYXN0X3JlcGx5X2lkeCk7IAorCisgICAgcmV0dXJuKDAp OworfQorCisvKgorICogbXJzYXNfbWFwX21wdF9jbWRfc3RhdHVzOiAgQWxsb2NhdGUgRE1BYWJs ZSBtZW1vcnkuCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNl IHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG1yc2FzX2Nv bXBsZXRlX2NtZCgpLCBmb3IgTEQgSU8gYW5kIEZhc3RQYXRoIElPLgorICogSXQgY2hlY2tzIHRo ZSBjb21tYW5kIHN0YXR1cyBhbmQgbWFwcyB0aGUgYXBwcm9wcmlhdGUgQ0FNIHN0YXR1cyBmb3Ig dGhlIENDQi4gICAKKyAqLwordm9pZCBtcnNhc19tYXBfbXB0X2NtZF9zdGF0dXMoc3RydWN0IG1y c2FzX21wdF9jbWQgKmNtZCwgdV9pbnQ4X3Qgc3RhdHVzLCB1X2ludDhfdCBleHRTdGF0dXMpCit7 CisgICAgc3RydWN0IG1yc2FzX3NvZnRjICpzYyA9IGNtZC0+c2M7CisgICAgdV9pbnQ4X3QgKnNl bnNlX2RhdGE7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgICAgICBjYXNlIE1GSV9TVEFU X09LOgorICAgICAgICAgICAgY21kLT5jY2JfcHRyLT5jY2JfaC5zdGF0dXMgPSBDQU1fUkVRX0NN UDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1GSV9TVEFUX1NDU0lfSU9fRkFJ TEVEOgorICAgICAgICBjYXNlIE1GSV9TVEFUX1NDU0lfRE9ORV9XSVRIX0VSUk9SOgorICAgICAg ICAgICAgY21kLT5jY2JfcHRyLT5jY2JfaC5zdGF0dXMgPSBDQU1fU0NTSV9TVEFUVVNfRVJST1I7 CisgICAgICAgICAgICBzZW5zZV9kYXRhID0gKHVfaW50OF90ICopJmNtZC0+Y2NiX3B0ci0+Y3Np by5zZW5zZV9kYXRhOworICAgICAgICAgICAgaWYgKHNlbnNlX2RhdGEpIHsKKyAgICAgICAgICAg ICAgICAvKiBGb3Igbm93IGp1c3QgY29weSAxOCBieXRlcyBiYWNrICovCisgICAgICAgICAgICAg ICAgbWVtY3B5KHNlbnNlX2RhdGEsIGNtZC0+c2Vuc2UsIDE4KTsKKyAgICAgICAgICAgICAgICBj bWQtPmNjYl9wdHItPmNzaW8uc2Vuc2VfbGVuID0gMTg7CisgICAgICAgICAgICAgICAgY21kLT5j Y2JfcHRyLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX0FVVE9TTlNfVkFMSUQ7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNRklfU1RBVF9MRF9PRkZMSU5FOgor ICAgICAgICBjYXNlIE1GSV9TVEFUX0RFVklDRV9OT1RfRk9VTkQ6CisgICAgICAgICAgICBpZiAo Y21kLT5jY2JfcHRyLT5jY2JfaC50YXJnZXRfbHVuKSAKKyAgICAgICAgICAgICAgICBjbWQtPmNj Yl9wdHItPmNjYl9oLnN0YXR1cyB8PSBDQU1fTFVOX0lOVkFMSUQ7CisgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgY21kLT5jY2JfcHRyLT5jY2JfaC5zdGF0dXMgfD0gQ0FNX0RFVl9O T1RfVEhFUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkZXIGNtZCBjb21wbGV0ZSBzdGF0dXMg JXhcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICBjbWQtPmNjYl9wdHItPmNjYl9oLnN0YXR1cyA9 IENBTV9SRVFfQ01QX0VSUjsKKyAgICAgICAgICAgIGNtZC0+Y2NiX3B0ci0+Y3Npby5zY3NpX3N0 YXR1cyA9IHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisvKgorICogbXJzYXNfYWxs b2NfbWVtOiAgQWxsb2NhdGUgRE1BYWJsZSBtZW1vcnkuCisgKiBpbnB1dDogICAgICAgICAgICBB ZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMg dGhlIHBhcmVudCBETUEgdGFnIGFuZCBhbGxvY2F0ZXMgRE1BYWJsZSBtZW1vcnkuCisgKiBETUEg dGFnIGRlc2NyaWJlcyBjb25zdHJhaW50cyBvZiBETUEgbWFwcGluZy4gTWVtb3J5IGFsbG9jYXRl ZCBpcyBtYXBwZWQKKyAqIGludG8gS2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gQ2FsbGJhY2sgYXJn dW1lbnQgaXMgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MuIAorICovCitzdGF0aWMgaW50IG1yc2Fz X2FsbG9jX21lbShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIHVfaW50MzJfdCB2ZXJi dWZfc2l6ZSwgaW9fcmVxX3NpemUsIHJlcGx5X2Rlc2Nfc2l6ZSwgc2Vuc2Vfc2l6ZSwKKyAgICAg ICAgICAgICAgY2hhaW5fZnJhbWVfc2l6ZSwgZXZ0X2RldGFpbF9zaXplOworCisgICAgLyoKKyAg ICAgKiBBbGxvY2F0ZSBwYXJlbnQgRE1BIHRhZworICAgICAqLyAKKyAgICBpZiAoYnVzX2RtYV90 YWdfY3JlYXRlKE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAvKiBhbGlnbm1lbnQgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGJvdW5kYXJ5ICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgIC8qIGxvd2Fk ZHIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAgICAg IC8qIGhpZ2hhZGRyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAg ICAgICAgICAgICAvKiBmaWx0ZXIsIGZpbHRlcmFyZyAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgTVJTQVNfTUFYX0lPX1NJWkUsLyogbWF4c2l6ZSAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICAgTVJTQVNfTUFYX1NHTCwgLyogbnNlZ21lbnRzICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBNUlNBU19NQVhfSU9fU0laRSwvKiBtYXhzZWdzaXplICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLyogbG9ja2Z1 bmMsIGxvY2thcmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+bXJzYXNfcGFy ZW50X3RhZyAgIC8qIHRhZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgeworICAg ICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgcGFy ZW50IERNQSB0YWdcbiIpOworICAgICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisKKyAg ICAvKgorICAgICAqIEFsbG9jYXRlIGZvciB2ZXJzaW9uIGJ1ZmZlcgorICAgICAqLyAKKyAgICB2 ZXJidWZfc2l6ZSA9IE1SU0FTX01BWF9OQU1FX0xFTkdUSCooc2l6ZW9mKGJ1c19hZGRyX3QpKTsK KyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5tcnNhc19wYXJlbnRfdGFnLCAgIC8vIHBh cmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAgICAgICAgICAgICAgICAg Ly8gYWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFD RV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJV U19TUEFDRV9NQVhBRERSLCAgICAgIC8vIGhpZ2hhZGRyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmVyYnVmX3NpemUsICAgICAgICAgICAvLyBtYXhzaXplCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBtc2Vn bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJ1Zl9zaXplLCAgICAgICAgICAg Ly8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05P VywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws ICAgICAgICAgICAgIC8vIGxvY2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAmc2MtPnZlcmJ1Zl90YWcpKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5t cnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgdmVyYnVmIERNQSB0YWdcbiIpOworICAgICAgICAg ICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+ dmVyYnVmX3RhZywgKHZvaWQgKiopJnNjLT52ZXJidWZfbWVtLAorICAgICAgICBCVVNfRE1BX05P V0FJVCwgJnNjLT52ZXJidWZfZG1hbWFwKSkgeworICAgICAgICAgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHZlcmJ1ZiBtZW1vcnlcbiIpOworICAgICAg ICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBiemVybyhzYy0+dmVyYnVmX21lbSwg dmVyYnVmX3NpemUpOworICAgIGlmIChidXNfZG1hbWFwX2xvYWQoc2MtPnZlcmJ1Zl90YWcsIHNj LT52ZXJidWZfZG1hbWFwLCBzYy0+dmVyYnVmX21lbSwKKyAgICAgICAgdmVyYnVmX3NpemUsIG1y c2FzX2FkZHJfY2IsICZzYy0+dmVyYnVmX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dBSVQpKXsKKyAg ICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIHZlcmJ1 ZiBETUEgbWFwXG4iKTsKKyAgICAgICAgICAgIHJldHVybihFTk9NRU0pOworICAgIH0KKworICAg IC8qCisgICAgICogQWxsb2NhdGUgSU8gUmVxdWVzdCBGcmFtZXMKKyAgICAgKi8gCisgICAgaW9f cmVxX3NpemUgPSBzYy0+aW9fZnJhbWVzX2FsbG9jX3N6OyAKKyAgICBpZiAoYnVzX2RtYV90YWdf Y3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNiwgMCwgICAgICAgICAgICAgICAgICAgLy8gYWxnbm1udCwgYm91bmRh cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwv LyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIs ICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM LCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlvX3JlcV9zaXplLCAgICAgICAgICAgIC8vIG1heHNpemUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBtc2VnbWVudHMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpb19yZXFfc2l6ZSwgICAgICAgICAgICAvLyBtYXhzZWdz aXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAg Ly8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAg ICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz Yy0+aW9fcmVxdWVzdF90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rl diwgIkNhbm5vdCBjcmVhdGUgSU8gcmVxdWVzdCB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVO T01FTSk7CisgICAgfQorICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKHNjLT5pb19yZXF1ZXN0X3Rh ZywgKHZvaWQgKiopJnNjLT5pb19yZXF1ZXN0X21lbSwKKyAgICAgICAgICAgICAgICAgICAgQlVT X0RNQV9OT1dBSVQsICZzYy0+aW9fcmVxdWVzdF9kbWFtYXApKSB7CisgICAgICAgIGRldmljZV9w cmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBJTyByZXF1ZXN0IG1lbW9yeVxuIik7 CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9CisgICAgYnplcm8oc2MtPmlvX3JlcXVl c3RfbWVtLCBpb19yZXFfc2l6ZSk7CisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+aW9fcmVx dWVzdF90YWcsIHNjLT5pb19yZXF1ZXN0X2RtYW1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAg IHNjLT5pb19yZXF1ZXN0X21lbSwgaW9fcmVxX3NpemUsIG1yc2FzX2FkZHJfY2IsCisgICAgICAg ICAgICAgICAgICAgICAgICAmc2MtPmlvX3JlcXVlc3RfcGh5c19hZGRyLCBCVVNfRE1BX05PV0FJ VCkpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGxvYWQg SU8gcmVxdWVzdCBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgfQor CisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBDaGFpbiBGcmFtZXMKKyAgICAgKi8KKyAgICBjaGFp bl9mcmFtZV9zaXplID0gc2MtPmNoYWluX2ZyYW1lc19hbGxvY19zejsKKyAgICBpZiAoYnVzX2Rt YV90YWdfY3JlYXRlKCBzYy0+bXJzYXNfcGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICA0LCAwLCAgICAgICAgICAgICAgICAgICAvLyBhbGdubW50LCBi b3VuZGFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMy QklULC8vIGxvd2FkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFY QUREUiwgICAgICAvLyBoaWdoYWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws IE5VTEwsICAgICAgICAgICAgIC8vIGZpbHRlciwgZmlsdGVyYXJnCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhaW5fZnJhbWVfc2l6ZSwgICAgICAgLy8gbWF4c2l6ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgIC8vIG1zZWdtZW50cwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWluX2ZyYW1lX3NpemUsICAgICAgIC8vIG1h eHNlZ3NpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfRE1BX0FMTE9DTk9XLCAg ICAgICAvLyBmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAg ICAgICAgICAgIC8vIGxvY2tmdW5jLCBsb2NrYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnNjLT5jaGFpbl9mcmFtZV90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1y c2FzX2RldiwgIkNhbm5vdCBjcmVhdGUgY2hhaW4gZnJhbWUgdGFnXG4iKTsKKyAgICAgICAgcmV0 dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+Y2hhaW5f ZnJhbWVfdGFnLCAodm9pZCAqKikmc2MtPmNoYWluX2ZyYW1lX21lbSwKKyAgICAgICAgICAgICAg ICAgICAgQlVTX0RNQV9OT1dBSVQsICZzYy0+Y2hhaW5fZnJhbWVfZG1hbWFwKSkgeworICAgICAg ICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2MgY2hhaW4gZnJhbWUg bWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBiemVybyhz Yy0+Y2hhaW5fZnJhbWVfbWVtLCBjaGFpbl9mcmFtZV9zaXplKTsKKyAgICBpZiAoYnVzX2RtYW1h cF9sb2FkKHNjLT5jaGFpbl9mcmFtZV90YWcsIHNjLT5jaGFpbl9mcmFtZV9kbWFtYXAsCisgICAg ICAgICAgICAgICAgICAgICAgICBzYy0+Y2hhaW5fZnJhbWVfbWVtLCBjaGFpbl9mcmFtZV9zaXpl LCBtcnNhc19hZGRyX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgJnNjLT5jaGFpbl9mcmFt ZV9waHlzX2FkZHIsIEJVU19ETUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNj LT5tcnNhc19kZXYsICJDYW5ub3QgbG9hZCBjaGFpbiBmcmFtZSBtZW1vcnlcbiIpOworICAgICAg ICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBSZXBs eSBEZXNjcmlwdG9yIEFycmF5CisgICAgICovIAorICAgIHJlcGx5X2Rlc2Nfc2l6ZSA9IHNjLT5y ZXBseV9hbGxvY19zejsgCisgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1yc2FzX3Bh cmVudF90YWcsICAgLy8gcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIDAs ICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQsIGJvdW5kYXJ5CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsLy8gbG93YWRkcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAgICAgIC8vIGhpZ2hhZGRyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8gZmls dGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseV9kZXNjX3Np emUsICAgICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAg ICAgICAgICAgICAgICAgICAgLy8gbXNlZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVwbHlfZGVzY19zaXplLCAgICAgICAgLy8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAgICAgIC8vIGZsYWdzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8gbG9ja2Z1bmMsIGxv Y2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2MtPnJlcGx5X2Rlc2NfdGFnKSkg eworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgY3JlYXRlIHJl cGx5IGRlc2NyaXB0b3IgdGFnXG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0K KyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+cmVwbHlfZGVzY190YWcsICh2b2lkICoqKSZz Yy0+cmVwbHlfZGVzY19tZW0sCisgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAm c2MtPnJlcGx5X2Rlc2NfZG1hbWFwKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJDYW5ub3QgYWxsb2MgcmVwbHkgZGVzY3JpcHRvciBtZW1vcnlcbiIpOworICAgICAg ICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorICAgIGlmIChidXNfZG1hbWFwX2xvYWQoc2MtPnJl cGx5X2Rlc2NfdGFnLCBzYy0+cmVwbHlfZGVzY19kbWFtYXAsCisgICAgICAgICAgICAgICAgICAg ICAgICBzYy0+cmVwbHlfZGVzY19tZW0sIHJlcGx5X2Rlc2Nfc2l6ZSwgbXJzYXNfYWRkcl9jYiwK KyAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+cmVwbHlfZGVzY19waHlzX2FkZHIsIEJVU19E TUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5u b3QgbG9hZCByZXBseSBkZXNjcmlwdG9yIG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAoRU5P TUVNKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFsbG9jYXRlIFNlbnNlIEJ1ZmZlciBBcnJh eS4gIEtlZXAgaW4gbG93ZXIgNEdCIAorICAgICAqLworICAgIHNlbnNlX3NpemUgPSBzYy0+bWF4 X2Z3X2NtZHMgKiBNUlNBU19TRU5TRV9MRU47CisgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZShz Yy0+bXJzYXNfcGFyZW50X3RhZywgICAgLy8gcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNjQsIDAsICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQsIGJvdW5kYXJ5CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsLy8gbG93YWRk cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAgICAgIC8v IGhpZ2hhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAg ICAgICAgLy8gZmlsdGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZW5zZV9zaXplLCAgICAgICAgICAgICAvLyBtYXhzaXplCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgLy8gbnNlZ21lbnRzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2Vuc2Vfc2l6ZSwgICAgICAgICAgICAgLy8gbWF4c2Vnc2l6ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAgICAgIC8vIGZsYWdz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8g bG9ja2Z1bmMsIGxvY2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2MtPnNlbnNl X3RhZykpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFs bG9jYXRlIHNlbnNlIGJ1ZiB0YWdcbiIpOworICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAg fQorICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKHNjLT5zZW5zZV90YWcsICh2b2lkICoqKSZzYy0+ c2Vuc2VfbWVtLAorICAgICAgICAgICAgQlVTX0RNQV9OT1dBSVQsICZzYy0+c2Vuc2VfZG1hbWFw KSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2Nh dGUgc2Vuc2UgYnVmIG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9 CisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+c2Vuc2VfdGFnLCBzYy0+c2Vuc2VfZG1hbWFw LAorICAgICAgICAgICAgc2MtPnNlbnNlX21lbSwgc2Vuc2Vfc2l6ZSwgbXJzYXNfYWRkcl9jYiwg JnNjLT5zZW5zZV9waHlzX2FkZHIsCisgICAgICAgICAgICBCVVNfRE1BX05PV0FJVCkpeworICAg ICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgbG9hZCBzZW5zZSBidWYg bWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKworICAgIC8qCisg ICAgICogQWxsb2NhdGUgZm9yIEV2ZW50IGRldGFpbCBzdHJ1Y3R1cmUKKyAgICAgKi8gCisgICAg ZXZ0X2RldGFpbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBtcnNhc19ldnRfZGV0YWlsKTsgCisgICAg aWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1yc2FzX3BhcmVudF90YWcsICAgLy8gcGFyZW50 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAgICAgICAgICAgICAgICAgLy8g YWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0Vf TUFYQUREUl8zMkJJVCwvLyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVT X1NQQUNFX01BWEFERFIsICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV2dF9kZXRhaWxfc2l6ZSwgICAgICAgIC8vIG1heHNpemUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBt c2VnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnRfZGV0YWlsX3NpemUsICAg ICAgICAvLyBtYXhzZWdzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9B TExPQ05PVywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZzYy0+ZXZ0X2RldGFpbF90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBjcmVhdGUgRXZlbnQgZGV0YWlsIHRhZ1xuIik7Cisg ICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9CisgICAgaWYgKGJ1c19kbWFtZW1fYWxsb2Mo c2MtPmV2dF9kZXRhaWxfdGFnLCAodm9pZCAqKikmc2MtPmV2dF9kZXRhaWxfbWVtLAorICAgICAg ICAgICAgICAgICAgICBCVVNfRE1BX05PV0FJVCwgJnNjLT5ldnRfZGV0YWlsX2RtYW1hcCkpIHsK KyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jIEV2ZW50 IGRldGFpbCBidWZmZXIgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAg IH0KKyAgICBiemVybyhzYy0+ZXZ0X2RldGFpbF9tZW0sIGV2dF9kZXRhaWxfc2l6ZSk7CisgICAg aWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+ZXZ0X2RldGFpbF90YWcsIHNjLT5ldnRfZGV0YWlsX2Rt YW1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjLT5ldnRfZGV0YWlsX21lbSwgZXZ0X2Rl dGFpbF9zaXplLCBtcnNhc19hZGRyX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgJnNjLT5l dnRfZGV0YWlsX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dBSVQpKSB7CisgICAgICAgIGRldmljZV9w cmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIEV2ZW50IGRldGFpbCBidWZmZXIgbWVt b3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKworCisgICAvKgorICAg ICogQ3JlYXRlIGEgZG1hIHRhZyBmb3IgZGF0YSBidWZmZXJzOyBzaXplIHdpbGwgYmUgdGhlIG1h eGltdW0KKyAgICAqIHBvc3NpYmxlIEkvTyBzaXplICgyODBrQikuCisgICAgKi8KKyAgICBpZiAo YnVzX2RtYV90YWdfY3JlYXRlKHNjLT5tcnNhc19wYXJlbnRfdGFnLCAgIC8vIHBhcmVudCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgLy8gYWxpZ25tZW50IAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLy8gYm91bmRhcnkg CisgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBs b3dhZGRyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIsICAg ICAgLy8gaGlnaGFkZHIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAg ICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZyAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1SU0FTX01BWF9JT19TSVpFLCAgICAgIC8vIG1heHNpemUgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBNUlNBU19NQVhfU0dMLCAgICAgICAgICAvLyBuc2VnbWVudHMgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBNUlNBU19NQVhfSU9fU0laRSwgICAgICAvLyBtYXhzZWdzaXpl IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAgLy8g ZmxhZ3MgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNkbWFfbG9ja19tdXRleCwgICAg ICAvLyBsb2NrZnVuYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzYy0+aW9fbG9jaywg ICAgICAgICAgIC8vIGxvY2tmdW5jYXJnIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNj LT5kYXRhX3RhZykpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fu bm90IGNyZWF0ZSBkYXRhIGRtYSB0YWdcbiIpOworICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAg ICB9CisKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBtcnNhc19hZGRyX2NiOiAgIENhbGxi YWNrIGZ1bmN0aW9uIG9mIGJ1c19kbWFtYXBfbG9hZCgpCisgKiBpbnB1dDogICAgICAgICAgIGNh bGxiYWNrIGFyZ3VtZW50LCAKKyAqICAgICAgICAgICAgICAgICAgbWFjaGluZSBkZXBlbmRlbnQg dHlwZSB0aGF0IGRlc2NyaWJlcyBETUEgc2VnbWVudHMsCisgKiAgICAgICAgICAgICAgICAgIG51 bWJlciBvZiBzZWdtZW50cywKKyAqICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZS4gIAorICoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHRoZSBkcml2ZXIgdG8gcmVjZWl2ZSBtYXBwaW5nIGlu Zm9ybWF0aW9uIHJlc3VsdGFudAorICogb2YgdGhlIGJ1c19kbWFtYXBfbG9hZCgpLiBUaGUgaW5m b3JtYXRpb24gaXMgYWN0dWFsbHkgbm90IGJlaW5nIHVzZWQsCisgKiBidXQgdGhlIGFkZHJlc3Mg aXMgc2F2ZWQgYW55d2F5LgorICovCit2b2lkCittcnNhc19hZGRyX2NiKHZvaWQgKmFyZywgYnVz X2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQoreworICAgIGJ1c19h ZGRyX3QgKmFkZHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGFkZHIg PSBhcmc7CisgICAgKmFkZHIgPSBzZWdzWzBdLmRzX2FkZHI7Cit9CisKKy8qCisgKiBtcnNhc19z ZXR1cF9yYWlkbWFwOiAgU2V0IHVwIFJBSUQgbWFwLgorICogaW5wdXQ6ICAgICAgICAgICAgICAg IEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIEFsbG9jYXRlIERNQSBtZW1vcnkg Zm9yIHRoZSBSQUlEIG1hcHMgYW5kIHBlcmZvcm0gc2V0dXAuCisgKi8KK3N0YXRpYyBpbnQgbXJz YXNfc2V0dXBfcmFpZG1hcChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreyAgICAgICAKKyAgICBz Yy0+bWFwX3N6ID0gc2l6ZW9mKE1SX0ZXX1JBSURfTUFQKSArCisgICAgICAgICAgICAgICAgKHNp emVvZihNUl9MRF9TUEFOX01BUCkgKiAoTUFYX0xPR0lDQUxfRFJJVkVTIC0gMSkpOworCisgICAg Zm9yIChpbnQgaT0wOyBpIDwgMjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJ1c19kbWFfdGFn X2NyZWF0ZShzYy0+bXJzYXNfcGFyZW50X3RhZywgICAgLy8gcGFyZW50CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgNCwgMCwgICAgICAgICAgICAgICAgICAgLy8gYWxnbm1udCwgYm91bmRh cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwv LyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFIs ICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM LCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNjLT5tYXBfc3osICAgICAgICAgICAgIC8vIG1heHNpemUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBuc2VnbWVudHMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzYy0+bWFwX3N6LCAgICAgICAgICAgICAvLyBtYXhzZWdz aXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9BTExPQ05PVywgICAgICAg Ly8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAgICAgICAg ICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz Yy0+cmFpZG1hcF90YWdbaV0pKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJDYW5ub3QgYWxsb2NhdGUgcmFpZCBtYXAgdGFnLlxuIik7CisgICAgICAgICAgICBy ZXR1cm4gKEVOT01FTSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1c19kbWFtZW1fYWxsb2Mo c2MtPnJhaWRtYXBfdGFnW2ldLCAodm9pZCAqKikmc2MtPnJhaWRtYXBfbWVtW2ldLAorICAgICAg ICAgICAgICAgIEJVU19ETUFfTk9XQUlULCAmc2MtPnJhaWRtYXBfZG1hbWFwW2ldKSkgeworICAg ICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHJh aWRtYXAgbWVtb3J5LlxuIik7CisgICAgICAgICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChzYy0+cmFpZG1hcF90YWdbaV0sIHNjLT5y YWlkbWFwX2RtYW1hcFtpXSwKKyAgICAgICAgICAgICAgICBzYy0+cmFpZG1hcF9tZW1baV0sIHNj LT5tYXBfc3osIG1yc2FzX2FkZHJfY2IsICZzYy0+cmFpZG1hcF9waHlzX2FkZHJbaV0sCisgICAg ICAgICAgICAgICAgQlVTX0RNQV9OT1dBSVQpKXsKKyAgICAgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIHJhaWRtYXAgbWVtb3J5LlxuIik7CisgICAgICAg ICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzYy0+cmFpZG1h cF9tZW1baV0pIHsKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNh bm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJhaWQgbWFwLlxuIik7CisgICAgICAgICAgICByZXR1 cm4gKEVOT01FTSk7CisgICAgICAgIH0KKyAgICB9CisgCisgICAgaWYgKCFtcnNhc19nZXRfbWFw X2luZm8oc2MpKQorICAgICAgICBtcnNhc19zeW5jX21hcF9pbmZvKHNjKTsKKworICAgIHJldHVy biAoMCk7Cit9CisKKy8qKgorICogbXJzYXNfaW5pdF9mdzogICAgICBJbml0aWFsaXplIEZpcm13 YXJlICAgCisgKiBpbnB1dDogICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAq IENhbGxzIHRyYW5zaXRpb25fdG9fcmVhZHkoKSB0byBtYWtlIHN1cmUgRmlybXdhcmUgaXMgaW4g b3BlcmF0aW9uYWwgCisgKiBzdGF0ZSBhbmQgY2FsbHMgbXJzYXNfaW5pdF9hZGFwdGVyKCkgdG8g c2VuZCBJT0NfSU5JVCBjb21tYW5kIHRvCisgKiBGaXJtd2FyZS4gIEl0IGlzc3VlcyBpbnRlcm5h bCBjb21tYW5kcyB0byBnZXQgdGhlIGNvbnRyb2xsZXIgaW5mbworICogYWZ0ZXIgdGhlIElPQ19J TklUIGNvbW1hbmQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgYnkgRmlybXdhcmUuICAKKyAqIE5vdGU6 ICBjb2RlIHJlbGF0aW5nIHRvIGdldF9wZGxpc3QsIGdldF9sZF9saXN0IGFuZCBtYXhfc2VjdG9y cyAKKyAqIGFyZSBjdXJyZW50bHkgbm90IGJlaW5nIHVzZWQsIGl0IGlzIGxlZnQgaGVyZSBhcyBw bGFjZWhvbGRlci4gCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfaW5pdF9mdyhzdHJ1Y3QgbXJzYXNf c29mdGMgKnNjKQoreworICAgIHVfaW50MzJfdCBtYXhfc2VjdG9yc18xOworICAgIHVfaW50MzJf dCBtYXhfc2VjdG9yc18yOworICAgIHVfaW50MzJfdCB0bXBfc2VjdG9yczsKKyAgICBzdHJ1Y3Qg bXJzYXNfY3RybF9pbmZvICpjdHJsX2luZm87CisKKyAgICBpbnQgcmV0LCBvY3IgPSAwOworICAg ICAgCisgICAgLyogTWFrZSBzdXJlIEZpcm13YXJlIGlzIHJlYWR5ICovCisgICAgcmV0ID0gbXJz YXNfdHJhbnNpdGlvbl90b19yZWFkeShzYywgb2NyKTsKKyAgICBpZiAocmV0ICE9IFNVQ0NFU1Mp IHsKKyAgICAgICAgcmV0dXJuKHJldCk7CisJfQorCisgICAgLyogR2V0IG9wZXJhdGlvbmFsIHBh cmFtcywgc2dlIGZsYWdzLCBzZW5kIGluaXQgY21kIHRvIGN0bHIgKi8KKyAgICBpZiAobXJzYXNf aW5pdF9hZGFwdGVyKHNjKSAhPSBTVUNDRVNTKXsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+ bXJzYXNfZGV2LCAiQWRhcHRlciBpbml0aWFsaXplIEZhaWwuXG4iKTsKKyAgICAgICAgcmV0dXJu KDEpOworICAgIH0gCisKKyAgICAvKiBBbGxvY2F0ZSBpbnRlcm5hbCBjb21tYW5kcyBmb3IgcGFz cy10aHJ1ICovCisgICAgaWYgKG1yc2FzX2FsbG9jX21maV9jbWRzKHNjKSAhPSBTVUNDRVNTKXsK KyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQWxsb2NhdGUgTUZJIGNtZCBm YWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0gCisgICAgICAgCisgICAgLyog Rm9yIHBhc3MtdGhydSwgZ2V0IFBEL0xEIGxpc3QgYW5kIGNvbnRyb2xsZXIgaW5mbyAqLworICAg IG1lbXNldChzYy0+cGRfbGlzdCwgMCwgTVJTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBtcnNh c19wZF9saXN0KSk7CisgICAgbXJzYXNfZ2V0X3BkX2xpc3Qoc2MpOworCisgICAgbWVtc2V0KHNj LT5sZF9pZHMsIDB4ZmYsIE1SU0FTX01BWF9MRCk7CisgICAgbXJzYXNfZ2V0X2xkX2xpc3Qoc2Mp OworCisgICAgY3RybF9pbmZvID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXJzYXNfY3RybF9pbmZv KSwgTV9NUlNBUywgTV9OT1dBSVQpOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSBtYXgg YWxsb3dlZCBzZWN0b3JzIHBlciBJTzogVGhlIGNvbnRyb2xsZXIgaW5mbyBoYXMgdHdvCisgICAg ICogbGltaXRzIG9uIG1heCBzZWN0b3JzLiBEcml2ZXIgc2hvdWxkIHVzZSB0aGUgbWluaW11bSBv ZiB0aGVzZSB0d28uCisgICAgICoKKyAgICAgKiAxIDw8IHN0cmlwZV9zel9vcHMubWluID0gbWF4 IHNlY3RvcnMgcGVyIHN0cmlwCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgb2xkZXIgZmlybXdh cmVzICggPCBGVyB2ZXIgMzApIGRpZG4ndCByZXBvcnQgaW5mb3JtYXRpb24KKyAgICAgKiB0byBj YWxjdWxhdGUgbWF4X3NlY3RvcnNfMS4gU28gdGhlIG51bWJlciBlbmRlZCB1cCBhcyB6ZXJvIGFs d2F5cy4KKyAgICAgKi8KKworICAgIHRtcF9zZWN0b3JzID0gMDsKKyAgICBpZiAoY3RybF9pbmZv ICYmICFtcnNhc19nZXRfY3RybF9pbmZvKHNjLCBjdHJsX2luZm8pKSB7CisgICAgICAgIG1heF9z ZWN0b3JzXzEgPSAoMSA8PCBjdHJsX2luZm8tPnN0cmlwZV9zel9vcHMubWluKSAqCisgICAgICAg ICAgICAgICAgICAgIGN0cmxfaW5mby0+bWF4X3N0cmlwc19wZXJfaW87CisgICAgICAgIG1heF9z ZWN0b3JzXzIgPSBjdHJsX2luZm8tPm1heF9yZXF1ZXN0X3NpemU7CisgICAgICAgIHRtcF9zZWN0 b3JzID0gbWluKG1heF9zZWN0b3JzXzEgLCBtYXhfc2VjdG9yc18yKTsKKyAgICAgICAgc2MtPmRp c2FibGVPbmxpbmVDdHJsUmVzZXQgPSAKKyAgICAgICAgICAgIGN0cmxfaW5mby0+cHJvcGVydGll cy5Pbk9mZlByb3BlcnRpZXMuZGlzYWJsZU9ubGluZUN0cmxSZXNldDsKKyAgICB9CisgICAgc2Mt Pm1heF9zZWN0b3JzX3Blcl9yZXEgPSBzYy0+bWF4X251bV9zZ2UgKiBNUlNBU19QQUdFX1NJWkUg LyA1MTI7CisKKyAgICBpZiAodG1wX3NlY3RvcnMgJiYgKHNjLT5tYXhfc2VjdG9yc19wZXJfcmVx ID4gdG1wX3NlY3RvcnMpKQorICAgICAgICBzYy0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IHRtcF9z ZWN0b3JzOworCisgICAgaWYgKGN0cmxfaW5mbykKKyAgICAgICAgZnJlZShjdHJsX2luZm8sIE1f TVJTQVMpOworICAgCisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIG1yc2FzX2luaXRfYWRh cHRlcjogICAgIEluaXRpYWxpemVzIHRoZSBhZGFwdGVyL2NvbnRyb2xsZXIgCisgKiBpbnB1dDog ICAgICAgICAgICAgICAgICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBQcmVwYXJlcyBmb3Ig dGhlIGlzc3Vpbmcgb2YgdGhlIElPQyBJbml0IGNtZCB0byBGVyBmb3IgaW5pdGlhbGl6aW5nIHRo ZSAKKyAqIFJPQy9jb250cm9sbGVyLiAgVGhlIEZXIHJlZ2lzdGVyIGlzIHJlYWQgdG8gZGV0ZXJt aW5lZCB0aGUgbnVtYmVyIG9mIAorICogY29tbWFuZHMgdGhhdCBpcyBzdXBwb3J0ZWQuICBBbGwg bWVtb3J5IGFsbG9jYXRpb25zIGZvciBJTyBpcyBiYXNlZCBvbgorICogbWF4X2NtZC4gIEFwcHJv cHJpYXRlIGNhbGN1bGF0aW9ucyBhcmUgcGVyZm9ybWVkIGluIHRoaXMgZnVuY3Rpb24uIAorICov CitpbnQgbXJzYXNfaW5pdF9hZGFwdGVyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAg dWludDMyX3Qgc3RhdHVzOworICAgIHVfaW50MzJfdCBtYXhfY21kOworICAgIGludCByZXQ7CisK KyAgICAvKiBSZWFkIEZXIHN0YXR1cyByZWdpc3RlciAqLworICAgIHN0YXR1cyA9IG1yc2FzX3Jl YWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9zY3JhdGNoX3BhZCkp OworCisgICAgLyogR2V0IG9wZXJhdGlvbmFsIHBhcmFtcyBmcm9tIHN0YXR1cyByZWdpc3RlciAq LworICAgIHNjLT5tYXhfZndfY21kcyA9IHN0YXR1cyAmIE1SU0FTX0ZXU1RBVEVfTUFYQ01EX01B U0s7CisKKyAgICAvKiBEZWNyZW1lbnQgdGhlIG1heCBzdXBwb3J0ZWQgYnkgMSwgdG8gY29ycmVs YXRlIHdpdGggRlcgKi8KKyAgICBzYy0+bWF4X2Z3X2NtZHMgPSBzYy0+bWF4X2Z3X2NtZHMtMTsK KyAgICBtYXhfY21kID0gc2MtPm1heF9md19jbWRzOworCisgICAgLyogRGV0ZXJtaW5lIGFsbG9j YXRpb24gc2l6ZSBvZiBjb21tYW5kIGZyYW1lcyAqLworICAgIHNjLT5yZXBseV9xX2RlcHRoID0g KChtYXhfY21kICsxICsxNSkvMTYqMTYpOworICAgIHNjLT5yZXF1ZXN0X2FsbG9jX3N6ID0gc2l6 ZW9mKE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTikgKiBtYXhfY21kOworICAgIHNjLT5y ZXBseV9hbGxvY19zeiA9IHNpemVvZihNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OKSAqIChz Yy0+cmVwbHlfcV9kZXB0aCk7CisgICAgc2MtPmlvX2ZyYW1lc19hbGxvY19zeiA9IE1SU0FTX01Q STJfUkFJRF9ERUZBVUxUX0lPX0ZSQU1FX1NJWkUgKyAoTVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRf SU9fRlJBTUVfU0laRSAqIChtYXhfY21kICsgMSkpOworICAgIHNjLT5jaGFpbl9mcmFtZXNfYWxs b2Nfc3ogPSAxMDI0ICogbWF4X2NtZDsKKyAgICBzYy0+bWF4X3NnZV9pbl9tYWluX21zZyA9IChN UlNBU19NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFIC0gCisgICAgICAgIG9mZnNldG9m KE1SU0FTX1JBSURfU0NTSV9JT19SRVFVRVNULCBTR0wpKS8xNjsKKworICAgIHNjLT5tYXhfc2dl X2luX2NoYWluID0gTVJTQVNfTUFYX1NaX0NIQUlOX0ZSQU1FIC8gc2l6ZW9mKE1QSTJfU0dFX0lP X1VOSU9OKTsKKyAgICBzYy0+bWF4X251bV9zZ2UgPSBzYy0+bWF4X3NnZV9pbl9tYWluX21zZyAr IHNjLT5tYXhfc2dlX2luX2NoYWluIC0gMjsKKworICAgIC8qIFVzZWQgZm9yIHBhc3MgdGhydSBN RkkgZnJhbWUgKERDTUQpICovCisgICAgc2MtPmNoYWluX29mZnNldF9tZmlfcHRocnUgPSBvZmZz ZXRvZihNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCwgU0dMKS8xNjsKKworICAgIHNjLT5jaGFp bl9vZmZzZXRfaW9fcmVxdWVzdCA9IChNUlNBU19NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9T SVpFIC0gCisgICAgICAgIHNpemVvZihNUEkyX1NHRV9JT19VTklPTikpLzE2OworCisgICAgc2Mt Pmxhc3RfcmVwbHlfaWR4ID0gMDsKKworICAgIHJldCA9IG1yc2FzX2FsbG9jX21lbShzYyk7Cisg ICAgaWYgKHJldCAhPSBTVUNDRVNTKQorICAgICAgICByZXR1cm4ocmV0KTsKKworICAgIHJldCA9 IG1yc2FzX2FsbG9jX21wdF9jbWRzKHNjKTsKKyAgICBpZiAocmV0ICE9IFNVQ0NFU1MpCisgICAg ICAgIHJldHVybihyZXQpOworCisgICAgcmV0ID0gbXJzYXNfaW9jX2luaXQoc2MpOworICAgIGlm IChyZXQgIT0gU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuKHJldCk7CisgICAgCisgICAgcmV0dXJu KDApOworfQorCisvKioKKyAqIG1yc2FzX2FsbG9jX2lvY19jbWQ6ICAgQWxsb2NhdGVzIG1lbW9y eSBmb3IgSU9DIEluaXQgY29tbWFuZCAKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgQWRhcHRl ciBzb2Z0IHN0YXRlCisgKgorICogQWxsb2NhdGVzIGZvciB0aGUgSU9DIEluaXQgY21kIHRvIEZX IHRvIGluaXRpYWxpemUgdGhlIFJPQy9jb250cm9sbGVyLgorICovCitpbnQgbXJzYXNfYWxsb2Nf aW9jX2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBpb2NfaW5pdF9zaXpl OworCisgICAgLyogQWxsb2NhdGUgSU9DIElOSVQgY29tbWFuZCAqLworICAgIGlvY19pbml0X3Np emUgPSAxMDI0ICsgc2l6ZW9mKE1QSTJfSU9DX0lOSVRfUkVRVUVTVCk7IAorICAgIGlmIChidXNf ZG1hX3RhZ19jcmVhdGUoIHNjLT5tcnNhc19wYXJlbnRfdGFnLCAgIC8vIHBhcmVudAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEsIDAsICAgICAgICAgICAgICAgICAgIC8vIGFsZ25tbnQs IGJvdW5kYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NQQUNFX01BWEFERFJf MzJCSVQsLy8gbG93YWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9N QVhBRERSLCAgICAgIC8vIGhpZ2hhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgTlVMTCwgICAgICAgICAgICAgLy8gZmlsdGVyLCBmaWx0ZXJhcmcKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpb2NfaW5pdF9zaXplLCAgICAgICAgICAvLyBtYXhzaXplCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgLy8gbXNlZ21lbnRz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2luaXRfc2l6ZSwgICAgICAgICAgLy8g bWF4c2Vnc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1cs ICAgICAgIC8vIGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwg ICAgICAgICAgICAgLy8gbG9ja2Z1bmMsIGxvY2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmc2MtPmlvY19pbml0X3RhZykpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJz YXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGlvYyBpbml0IHRhZ1xuIik7CisgICAgICAgIHJldHVy biAoRU5PTUVNKTsKKyAgICB9CisgICAgaWYgKGJ1c19kbWFtZW1fYWxsb2Moc2MtPmlvY19pbml0 X3RhZywgKHZvaWQgKiopJnNjLT5pb2NfaW5pdF9tZW0sCisgICAgICAgICAgICBCVVNfRE1BX05P V0FJVCwgJnNjLT5pb2NfaW5pdF9kbWFtYXApKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2Mt Pm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSBpb2MgaW5pdCBjbWQgbWVtXG4iKTsKKyAgICAg ICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBiemVybyhzYy0+aW9jX2luaXRfbWVtLCBp b2NfaW5pdF9zaXplKTsKKyAgICBpZiAoYnVzX2RtYW1hcF9sb2FkKHNjLT5pb2NfaW5pdF90YWcs IHNjLT5pb2NfaW5pdF9kbWFtYXAsIAorICAgICAgICAgICAgc2MtPmlvY19pbml0X21lbSwgaW9j X2luaXRfc2l6ZSwgbXJzYXNfYWRkcl9jYiwKKyAgICAgICAgICAgICZzYy0+aW9jX2luaXRfcGh5 c19tZW0sIEJVU19ETUFfTk9XQUlUKSkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNh c19kZXYsICJDYW5ub3QgbG9hZCBpb2MgaW5pdCBjbWQgbWVtXG4iKTsKKyAgICAgICAgcmV0dXJu IChFTk9NRU0pOworICAgIH0KKworICAgIHJldHVybiAoMCk7Cit9CisKKy8qKgorICogbXJzYXNf ZnJlZV9pb2NfY21kOiAgIEFsbG9jYXRlcyBtZW1vcnkgZm9yIElPQyBJbml0IGNvbW1hbmQgCisg KiBpbnB1dDogICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogRGVhbGxv Y2F0ZXMgbWVtb3J5IG9mIHRoZSBJT0MgSW5pdCBjbWQuCisgKi8KK3ZvaWQgbXJzYXNfZnJlZV9p b2NfY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaWYgKHNjLT5pb2NfaW5pdF9w aHlzX21lbSkKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmlvY19pbml0X3RhZywgc2Mt PmlvY19pbml0X2RtYW1hcCk7CisgICAgaWYgKHNjLT5pb2NfaW5pdF9tZW0gIT0gTlVMTCkKKyAg ICAgICAgYnVzX2RtYW1lbV9mcmVlKHNjLT5pb2NfaW5pdF90YWcsIHNjLT5pb2NfaW5pdF9tZW0s IHNjLT5pb2NfaW5pdF9kbWFtYXApOworICAgIGlmIChzYy0+aW9jX2luaXRfdGFnICE9IE5VTEwp CisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmlvY19pbml0X3RhZyk7Cit9CisKKy8q KgorICogbXJzYXNfaW9jX2luaXQ6ICAgICBTZW5kcyBJT0MgSW5pdCBjb21tYW5kIHRvIEZXCisg KiBpbnB1dDogICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIElzc3VlcyB0 aGUgSU9DIEluaXQgY21kIHRvIEZXIHRvIGluaXRpYWxpemUgdGhlIFJPQy9jb250cm9sbGVyLgor ICovCitpbnQgbXJzYXNfaW9jX2luaXQoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBz dHJ1Y3QgbXJzYXNfaW5pdF9mcmFtZSAqaW5pdF9mcmFtZTsKKyAgICBwTXBpMklPQ0luaXRSZXF1 ZXN0X3QgICBJT0NJbml0TXNnOworICAgIE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiBy ZXFfZGVzYzsKKyAgICB1X2ludDhfdCBtYXhfd2FpdCA9IE1SU0FTX0lPQ19JTklUX1dBSVRfVElN RTsKKyAgICBidXNfYWRkcl90IHBoeXNfYWRkcjsKKyAgICBpbnQgaSwgcmV0Y29kZSA9IDA7CisK KyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBJT0MgSU5JVCBjb21tYW5kICovCisgICAg aWYgKG1yc2FzX2FsbG9jX2lvY19jbWQoc2MpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2Mt Pm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSBJT0MgY29tbWFuZC5cbiIpOyAKKyAgICAgICAg cmV0dXJuKDEpOworICAgIH0KKworICAgIElPQ0luaXRNc2cgPSAocE1waTJJT0NJbml0UmVxdWVz dF90KSgoKGNoYXIgKilzYy0+aW9jX2luaXRfbWVtKSArMTAyNCk7CisgICAgSU9DSW5pdE1zZy0+ RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0lPQ19JTklUOworICAgIElPQ0luaXRNc2ctPldob0lu aXQgPSBNUEkyX1dIT0lOSVRfSE9TVF9EUklWRVI7CisgICAgSU9DSW5pdE1zZy0+TXNnVmVyc2lv biA9IE1QSTJfVkVSU0lPTjsKKyAgICBJT0NJbml0TXNnLT5IZWFkZXJWZXJzaW9uID0gTVBJMl9I RUFERVJfVkVSU0lPTjsKKyAgICBJT0NJbml0TXNnLT5TeXN0ZW1SZXF1ZXN0RnJhbWVTaXplID0g TVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAvIDQ7CisgICAgSU9DSW5pdE1z Zy0+UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGggPSBzYy0+cmVwbHlfcV9kZXB0aDsKKyAg ICBJT0NJbml0TXNnLT5SZXBseURlc2NyaXB0b3JQb3N0UXVldWVBZGRyZXNzID0gc2MtPnJlcGx5 X2Rlc2NfcGh5c19hZGRyOworICAgIElPQ0luaXRNc2ctPlN5c3RlbVJlcXVlc3RGcmFtZUJhc2VB ZGRyZXNzID0gc2MtPmlvX3JlcXVlc3RfcGh5c19hZGRyOworCisgICAgaW5pdF9mcmFtZSA9IChz dHJ1Y3QgbXJzYXNfaW5pdF9mcmFtZSAqKXNjLT5pb2NfaW5pdF9tZW07CisgICAgaW5pdF9mcmFt ZS0+Y21kID0gTUZJX0NNRF9JTklUOworICAgIGluaXRfZnJhbWUtPmNtZF9zdGF0dXMgPSAweEZG OworICAgIGluaXRfZnJhbWUtPmZsYWdzIHw9IE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlf UVVFVUU7CisKKyAgICBpZiAoc2MtPnZlcmJ1Zl9tZW0pIHsKKyAgICAgICAgc25wcmludGYoKGNo YXIgKilzYy0+dmVyYnVmX21lbSwgc3RybGVuKE1SU0FTX1ZFUlNJT04pKzIsIiVzXG4iLAorICAg ICAgICAgICAgICAgIE1SU0FTX1ZFUlNJT04pOworICAgICAgICBpbml0X2ZyYW1lLT5kcml2ZXJf dmVyX2xvID0gKGJ1c19hZGRyX3Qpc2MtPnZlcmJ1Zl9waHlzX2FkZHI7CisgICAgICAgIGluaXRf ZnJhbWUtPmRyaXZlcl92ZXJfaGkgPSAwOworICAgIH0KKworICAgIHBoeXNfYWRkciA9IChidXNf YWRkcl90KXNjLT5pb2NfaW5pdF9waHlzX21lbSArIDEwMjQ7CisgICAgaW5pdF9mcmFtZS0+cXVl dWVfaW5mb19uZXdfcGh5c19hZGRyX2xvID0gcGh5c19hZGRyOworICAgIGluaXRfZnJhbWUtPmRh dGFfeGZlcl9sZW4gPSBzaXplb2YoTXBpMklPQ0luaXRSZXF1ZXN0X3QpOworCisgICAgcmVxX2Rl c2MuYWRkci5Xb3JkcyA9IChidXNfYWRkcl90KXNjLT5pb2NfaW5pdF9waHlzX21lbTsKKyAgICBy ZXFfZGVzYy5NRkFJby5SZXF1ZXN0RmxhZ3MgPSAKKyAgICAgICAgKE1SU0FTX1JFUV9ERVNDUklQ VF9GTEFHU19NRkEgPDwgTVJTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOworCisg ICAgbXJzYXNfZGlzYWJsZV9pbnRyKHNjKTsKKyAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09D UiwgIklzc3VpbmcgSU9DIElOSVQgY29tbWFuZCB0byBGVy5cbiIpOworICAgIC8vZGV2aWNlX3By aW50ZihzYy0+bXJzYXNfZGV2LCAiSXNzdWluZyBJT0MgSU5JVCBjb21tYW5kIHRvIEZXLlxuIik7 ZGVsPworICAgIG1yc2FzX2ZpcmVfY21kKHNjLCByZXFfZGVzYy5hZGRyLnUubG93LCByZXFfZGVz Yy5hZGRyLnUuaGlnaCk7CisKKyAgICAvKgorICAgICAqIFBvbGwgcmVzcG9uc2UgdGltZXIgdG8g d2FpdCBmb3IgRmlybXdhcmUgcmVzcG9uc2UuICBXaGlsZSB0aGlzCisgICAgICogdGltZXIgd2l0 aCB0aGUgREVMQVkgY2FsbCBjb3VsZCBibG9jayBDUFUsIHRoZSB0aW1lIGludGVydmFsIGZvcgor ICAgICAqIHRoaXMgaXMgb25seSAxIG1pbGxpc2Vjb25kLgorICAgICAqLworICAgIGlmIChpbml0 X2ZyYW1lLT5jbWRfc3RhdHVzID09IDB4RkYpIHsKKyAgICAgICAgZm9yIChpPTA7IGkgPCAobWF4 X3dhaXQgKiAxMDAwKTsgaSsrKXsKKyAgICAgICAgICAgIGlmIChpbml0X2ZyYW1lLT5jbWRfc3Rh dHVzID09IDB4RkYpCisgICAgICAgICAgICAgICAgREVMQVkoMTAwMCk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisgICAgfQorCisgICAgaWYg KGluaXRfZnJhbWUtPmNtZF9zdGF0dXMgPT0gMCkKKyAgICAgICAgIG1yc2FzX2RwcmludChzYywg TVJTQVNfT0NSLAorICAgICAgICAgICAgICAgIklPQyBJTklUIHJlc3BvbnNlIHJlY2VpdmVkIGZy b20gRlcuXG4iKTsKKyAgICAgICAgIC8vZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSU9D IElOSVQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBGVy5cbiIpO2RlbD8KKyAgICBlbHNlIAorICAg IHsKKyAgICAgICAgaWYgKGluaXRfZnJhbWUtPmNtZF9zdGF0dXMgPT0gMHhGRikgCisgICAgICAg ICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJJT0MgSW5pdCB0aW1lZCBvdXQgYWZ0 ZXIgJWQgc2Vjb25kcy5cbiIsIG1heF93YWl0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiSU9DIEluaXQgZmFpbGVkLCBzdGF0dXMgPSAw eCV4XG4iLCBpbml0X2ZyYW1lLT5jbWRfc3RhdHVzKTsKKyAgICAgICAgcmV0Y29kZSA9IDE7Cisg ICAgfQorCisgICAgbXJzYXNfZnJlZV9pb2NfY21kKHNjKTsKKyAgICByZXR1cm4gKHJldGNvZGUp OworfQorCisvKioKKyAqIG1yc2FzX2FsbG9jX21wdF9jbWRzOiAgQWxsb2NhdGVzIHRoZSBjb21t YW5kIHBhY2tldHMKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgQWRhcHRlciBpbnN0YW5jZSBz b2Z0IHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIGludGVybmFsIGNv bW1hbmRzIGZvciBJT3MuIEVhY2ggY29tbWFuZCB0aGF0IGlzCisgKiBpc3N1ZWQgdG8gRlcgaXMg d3JhcHBlZCBpbiBhIGxvY2FsIGRhdGEgc3RydWN0dXJlIGNhbGxlZCBtcnNhc19tcHRfY21kLgor ICogQW4gYXJyYXkgaXMgYWxsb2NhdGVkIHdpdGggbXJzYXNfbXB0X2NtZCBjb250ZXh0LiAgVGhl IGZyZWUgY29tbWFuZHMgYXJlIAorICogbWFpbnRhaW5lZCBpbiBhIGxpbmtlZCBsaXN0IChjbWQg cG9vbCkuIFNNSUQgdmFsdWUgcmFuZ2UgaXMgZnJvbSAxIHRvCisgKiBtYXhfZndfY21kcy4KKyAq LworaW50IG1yc2FzX2FsbG9jX21wdF9jbWRzKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7Cisg ICAgaW50IGksIGo7CisgICAgdV9pbnQzMl90IG1heF9jbWQ7CisgICAgc3RydWN0IG1yc2FzX21w dF9jbWQgKmNtZDsKKyAgICBwTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90IHJlcGx5X2Rlc2M7 CisgICAgdV9pbnQzMl90IG9mZnNldCwgY2hhaW5fb2Zmc2V0LCBzZW5zZV9vZmZzZXQ7CisgICAg YnVzX2FkZHJfdCBpb19yZXFfYmFzZV9waHlzLCBjaGFpbl9mcmFtZV9iYXNlX3BoeXMsIHNlbnNl X2Jhc2VfcGh5czsKKyAgICB1X2ludDhfdCAqaW9fcmVxX2Jhc2UsICpjaGFpbl9mcmFtZV9iYXNl LCAqc2Vuc2VfYmFzZTsKKworICAgIG1heF9jbWQgPSBzYy0+bWF4X2Z3X2NtZHM7CisKKyAgICBz Yy0+cmVxX2Rlc2MgPSBtYWxsb2Moc2MtPnJlcXVlc3RfYWxsb2Nfc3osIE1fTVJTQVMsIE1fTk9X QUlUKTsKKyAgICBpZiAoIXNjLT5yZXFfZGVzYykgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNj LT5tcnNhc19kZXYsICJPdXQgb2YgbWVtb3J5LCBjYW5ub3QgYWxsb2MgcmVxIGRlc2NcbiIpOwor ICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisgICAgbWVtc2V0KHNjLT5yZXFfZGVzYywg MCwgc2MtPnJlcXVlc3RfYWxsb2Nfc3opOworCisgICAgLyoKKyAgICAgKiBzYy0+bXB0X2NtZF9s aXN0IGlzIGFuIGFycmF5IG9mIHN0cnVjdCBtcnNhc19tcHRfY21kIHBvaW50ZXJzLiBBbGxvY2F0 ZSB0aGUKKyAgICAgKiBkeW5hbWljIGFycmF5IGZpcnN0IGFuZCB0aGVuIGFsbG9jYXRlIGluZGl2 aWR1YWwgY29tbWFuZHMuCisgICAgICovCisgICAgc2MtPm1wdF9jbWRfbGlzdCA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IG1yc2FzX21wdF9jbWQqKSptYXhfY21kLCBNX01SU0FTLCBNX05PV0FJVCk7 CisgICAgaWYgKCFzYy0+bXB0X2NtZF9saXN0KSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2Mt Pm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIG1wdF9jbWRfbGlzdC5cbiIpOwor ICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICB9CisgICAgbWVtc2V0KHNjLT5tcHRfY21kX2xp c3QsIDAsIHNpemVvZihzdHJ1Y3QgbXJzYXNfbXB0X2NtZCAqKSptYXhfY21kKTsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisgICAgICAgIHNjLT5tcHRfY21kX2xpc3RbaV0g PSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtcnNhc19tcHRfY21kKSwgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNX01SU0FTLCBNX05PV0FJVCk7CisgICAgICAgIGlmICghc2MtPm1w dF9jbWRfbGlzdFtpXSkgeworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykKKyAg ICAgICAgICAgICAgICBmcmVlKHNjLT5tcHRfY21kX2xpc3Rbal0sTV9NUlNBUyk7CisgICAgICAg ICAgICBmcmVlKHNjLT5tcHRfY21kX2xpc3QsIE1fTVJTQVMpOworICAgICAgICAgICAgc2MtPm1w dF9jbWRfbGlzdCA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4oRU5PTUVNKTsKKyAgICAgICAg fQorICAgIH0KKworICAgIGlvX3JlcV9iYXNlID0gKHVfaW50OF90KilzYy0+aW9fcmVxdWVzdF9t ZW0gKyBNUlNBU19NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFOworICAgIGlvX3JlcV9i YXNlX3BoeXMgPSAoYnVzX2FkZHJfdClzYy0+aW9fcmVxdWVzdF9waHlzX2FkZHIgKyBNUlNBU19N UEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFOyAKKyAgICBjaGFpbl9mcmFtZV9iYXNlID0g KHVfaW50OF90KilzYy0+Y2hhaW5fZnJhbWVfbWVtOworICAgIGNoYWluX2ZyYW1lX2Jhc2VfcGh5 cyA9IChidXNfYWRkcl90KXNjLT5jaGFpbl9mcmFtZV9waHlzX2FkZHI7CisgICAgc2Vuc2VfYmFz ZSA9ICh1X2ludDhfdCopc2MtPnNlbnNlX21lbTsKKyAgICBzZW5zZV9iYXNlX3BoeXMgPSAoYnVz X2FkZHJfdClzYy0+c2Vuc2VfcGh5c19hZGRyOworICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfY21k OyBpKyspIHsKKyAgICAgICAgY21kID0gc2MtPm1wdF9jbWRfbGlzdFtpXTsKKyAgICAgICAgb2Zm c2V0ID0gTVJTQVNfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAqIGk7CisJY2hhaW5f b2Zmc2V0ID0gMTAyNCAqIGk7CisgICAgICAgIHNlbnNlX29mZnNldCA9IE1SU0FTX1NFTlNFX0xF TiAqIGk7CisgICAgICAgIG1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbXJzYXNfbXB0X2Nt ZCkpOworICAgICAgICBjbWQtPmluZGV4ID0gaSArIDE7CisgICAgICAgIGNtZC0+Y2NiX3B0ciA9 IE5VTEw7CisgICAgICAgIGNhbGxvdXRfaW5pdCgmY21kLT5jbV9jYWxsb3V0LCAwKTsKKyAgICAg ICAgY21kLT5zeW5jX2NtZF9pZHggPSAodV9pbnQzMl90KU1SU0FTX1VMT05HX01BWDsKKyAgICAg ICAgY21kLT5zYyA9IHNjOyAKKyAgICAgICAgY21kLT5pb19yZXF1ZXN0ID0gKE1SU0FTX1JBSURf U0NTSV9JT19SRVFVRVNUICopIChpb19yZXFfYmFzZSArIG9mZnNldCk7CisgICAgICAgIG1lbXNl dChjbWQtPmlvX3JlcXVlc3QsIDAsIHNpemVvZihNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCkp OworICAgICAgICBjbWQtPmlvX3JlcXVlc3RfcGh5c19hZGRyID0gaW9fcmVxX2Jhc2VfcGh5cyAr IG9mZnNldDsKKwljbWQtPmNoYWluX2ZyYW1lID0gKE1QSTJfU0dFX0lPX1VOSU9OICopIChjaGFp bl9mcmFtZV9iYXNlICsgY2hhaW5fb2Zmc2V0KTsKKwljbWQtPmNoYWluX2ZyYW1lX3BoeXNfYWRk ciA9IGNoYWluX2ZyYW1lX2Jhc2VfcGh5cyArIGNoYWluX29mZnNldDsKKyAgICAgICAgY21kLT5z ZW5zZSA9IHNlbnNlX2Jhc2UgKyBzZW5zZV9vZmZzZXQ7CisgICAgICAgIGNtZC0+c2Vuc2VfcGh5 c19hZGRyID0gc2Vuc2VfYmFzZV9waHlzICsgc2Vuc2Vfb2Zmc2V0OworICAgICAgICBpZiAoYnVz X2RtYW1hcF9jcmVhdGUoc2MtPmRhdGFfdGFnLCAwLCAmY21kLT5kYXRhX2RtYW1hcCkpIHsKKyAg ICAgICAgICAgIHJldHVybihGQUlMKTsKKyAgICAgICAgfQorICAgICAgICBUQUlMUV9JTlNFUlRf VEFJTCgmKHNjLT5tcnNhc19tcHRfY21kX2xpc3RfaGVhZCksIGNtZCwgbmV4dCk7CisgICAgfQor ICAgIAorICAgIC8qIEluaXRpYWxpemUgcmVwbHkgZGVzY3JpcHRvciBhcnJheSB0byAweEZGRkZG RkZGICovCisgICAgcmVwbHlfZGVzYyA9IHNjLT5yZXBseV9kZXNjX21lbTsKKyAgICBmb3IgKGkg PSAwOyBpIDwgc2MtPnJlcGx5X3FfZGVwdGg7IGkrKywgcmVwbHlfZGVzYysrKSB7CisgICAgICAg IHJlcGx5X2Rlc2MtPldvcmRzID0gTVJTQVNfVUxPTkdfTUFYOworICAgIH0KKyAgICByZXR1cm4o MCk7Cit9CisKKy8qKgorICogbXJzYXNfZmlyZV9jbWQ6ICAgICBTZW5kcyBjb21tYW5kIHRvIEZX CisgKiBpbnB1dDogICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAgICAgICAg ICAgICAgICAgICByZXF1ZXN0IGRlc2NyaXB0b3IgYWRkcmVzcyBsb3cKKyAqICAgICAgICAgICAg ICAgICAgICAgcmVxdWVzdCBkZXNjcmlwdG9yIGFkZHJlc3MgaGlnaAorICoKKyAqIFRoaXMgZnVu Y3Rpb25zIGZpcmVzIHRoZSBjb21tYW5kIHRvIEZpcm13YXJlIGJ5IHdyaXRpbmcgdG8gdGhlIAor ICogaW5ib3VuZF9sb3dfcXVldWVfcG9ydCBhbmQgaW5ib3VuZF9oaWdoX3F1ZXVlX3BvcnQuCisg Ki8KK3ZvaWQgbXJzYXNfZmlyZV9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgdV9pbnQzMl90 IHJlcV9kZXNjX2xvLCAKKyAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgcmVxX2Rlc2NfaGkp Cit7IAorICAgIG10eF9sb2NrKCZzYy0+cGNpX2xvY2spOworICAgIG1yc2FzX3dyaXRlX3JlZyhz Yywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgaW5ib3VuZF9sb3dfcXVldWVfcG9ydCksIAorICAg ICAgICAgICAgICAgICAgICByZXFfZGVzY19sbyk7IAorICAgIG1yc2FzX3dyaXRlX3JlZyhzYywg b2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgaW5ib3VuZF9oaWdoX3F1ZXVlX3BvcnQpLCAKKyAgICAg ICAgICAgICAgICAgICAgcmVxX2Rlc2NfaGkpOyAKKyAgICBtdHhfdW5sb2NrKCZzYy0+cGNpX2xv Y2spOworfQorCisvKioKKyAqIG1yc2FzX3RyYW5zaXRpb25fdG9fcmVhZHk6ICBNb3ZlIEZXIHRv IFJlYWR5IHN0YXRlIAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgaW5z dGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIER1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24sIEZXIHBh c3NlcyBjYW4gcG90ZW50aWFsbHkgYmUgaW4gYW55IG9uZSBvZgorICogc2V2ZXJhbCBwb3NzaWJs ZSBzdGF0ZXMuIElmIHRoZSBGVyBpbiBvcGVyYXRpb25hbCwgd2FpdGluZy1mb3ItaGFuZHNoYWtl CisgKiBzdGF0ZXMsIGRyaXZlciBtdXN0IHRha2Ugc3RlcHMgdG8gYnJpbmcgaXQgdG8gcmVhZHkg c3RhdGUuIE90aGVyd2lzZSwgaXQKKyAqIGhhcyB0byB3YWl0IGZvciB0aGUgcmVhZHkgc3RhdGUu CisgKi8KK2ludCBtcnNhc190cmFuc2l0aW9uX3RvX3JlYWR5KHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIGludCBvY3IpCit7CisgICAgaW50IGk7CisgICAgdV9pbnQ4X3QgbWF4X3dhaXQ7CisgICAg dV9pbnQzMl90IHZhbCwgZndfc3RhdGU7CisgICAgdV9pbnQzMl90IGN1cl9zdGF0ZTsKKyAgICB1 X2ludDMyX3QgYWJzX3N0YXRlLCBjdXJyX2Fic19zdGF0ZTsKKworICAgIHZhbCA9IG1yc2FzX3Jl YWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBvdXRib3VuZF9zY3JhdGNoX3BhZCkp OworICAgIGZ3X3N0YXRlID0gdmFsICYgTUZJX1NUQVRFX01BU0s7CisgICAgbWF4X3dhaXQgPSBN UlNBU19SRVNFVF9XQUlUX1RJTUU7CisKKyAgICBpZiAoZndfc3RhdGUgIT0gTUZJX1NUQVRFX1JF QURZKQorICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJXYWl0aW5nIGZvciBG VyB0byBjb21lIHRvIHJlYWR5IHN0YXRlXG4iKTsKKworICAgIHdoaWxlIChmd19zdGF0ZSAhPSBN RklfU1RBVEVfUkVBRFkpIHsKKwlhYnNfc3RhdGUgPSBtcnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0 b2YobXJzYXNfcmVnX3NldCwgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKTsKKwlzd2l0Y2ggKGZ3X3N0 YXRlKSB7CisJICAgIGNhc2UgTUZJX1NUQVRFX0ZBVUxUOgorCQlkZXZpY2VfcHJpbnRmKHNjLT5t cnNhc19kZXYsICJGVyBpcyBpbiBGQVVMVCBzdGF0ZSEhXG4iKTsKKwkJaWYgKG9jcikgeworCQkg ICAgY3VyX3N0YXRlID0gTUZJX1NUQVRFX0ZBVUxUOworCSAgCSAgICBicmVhazsKKwkJfSAKKyAg ICAgICAgZWxzZQorCQkJcmV0dXJuIC1FTk9ERVY7CisJICAgIGNhc2UgTUZJX1NUQVRFX1dBSVRf SEFORFNIQUtFOgorCQkvKiBTZXQgdGhlIENMUiBiaXQgaW4gaW5ib3VuZCBkb29yYmVsbCAqLwor ICAgICAgICAgICAgICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3Nl dCwgZG9vcmJlbGwpLAorCQkgICAgICAgIE1GSV9JTklUX0NMRUFSX0hBTkRTSEFLRXxNRklfSU5J VF9IT1RQTFVHKTsKKwkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX1dBSVRfSEFORFNIQUtFOworCQli cmVhazsKKwkgICAgY2FzZSBNRklfU1RBVEVfQk9PVF9NRVNTQUdFX1BFTkRJTkc6CisgICAgICAg ICAgICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBkb29y YmVsbCksCisJCSAgICAgICAgTUZJX0lOSVRfSE9UUExVRyk7CisJCWN1cl9zdGF0ZSA9IE1GSV9T VEFURV9CT09UX01FU1NBR0VfUEVORElORzsKKwkJYnJlYWs7CisJICAgIGNhc2UgTUZJX1NUQVRF X09QRVJBVElPTkFMOgorCQkvKiBCcmluZyBpdCB0byBSRUFEWSBzdGF0ZTsgYXNzdW1pbmcgbWF4 IHdhaXQgMTAgc2VjcyAqLworCQltcnNhc19kaXNhYmxlX2ludHIoc2MpOworICAgICAgICAgICAg ICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgZG9vcmJlbGwp LCBNRklfUkVTRVRfRkxBR1MpOworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgbWF4X3dh aXQgKiAxMDAwOyBpKyspIHsKKwkgICAgICAgICAgICBpZiAobXJzYXNfcmVhZF9yZWcoc2MsIG9m ZnNldG9mKG1yc2FzX3JlZ19zZXQsIGRvb3JiZWxsKSkgJiAxKQorICAgICAgICAgICAgICAgICAg ICAgICAgREVMQVkoMTAwMCk7CisJCSAgICBlbHNlCisJCSAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgfQorCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfT1BFUkFUSU9OQUw7CisJICAgICAg ICBicmVhazsKKwkgICAgY2FzZSBNRklfU1RBVEVfVU5ERUZJTkVEOgorCSAgICAgICAgLyogVGhp cyBzdGF0ZSBzaG91bGQgbm90IGxhc3QgZm9yIG1vcmUgdGhhbiAyIHNlY29uZHMgKi8KKwkgICAg ICAgIGN1cl9zdGF0ZSA9IE1GSV9TVEFURV9VTkRFRklORUQ7CisJICAgICAgICBicmVhazsKKwkg ICAgY2FzZSBNRklfU1RBVEVfQkJfSU5JVDoKKwkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0JCX0lO SVQ7CisJCWJyZWFrOworCSAgICBjYXNlIE1GSV9TVEFURV9GV19JTklUOgorCQljdXJfc3RhdGUg PSBNRklfU1RBVEVfRldfSU5JVDsKKwkJYnJlYWs7CisJICAgIGNhc2UgTUZJX1NUQVRFX0ZXX0lO SVRfMjoKKwkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0ZXX0lOSVRfMjsKKwkJYnJlYWs7CisJICAg IGNhc2UgTUZJX1NUQVRFX0RFVklDRV9TQ0FOOgorCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfREVW SUNFX1NDQU47CisJCWJyZWFrOworCSAgICBjYXNlIE1GSV9TVEFURV9GTFVTSF9DQUNIRToKKwkJ Y3VyX3N0YXRlID0gTUZJX1NUQVRFX0ZMVVNIX0NBQ0hFOworCQlicmVhazsKKwkgICAgZGVmYXVs dDoKKwkJZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiVW5rbm93biBzdGF0ZSAweCV4XG4i LCBmd19zdGF0ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogVGhlIGN1cl9z dGF0ZSBzaG91bGQgbm90IGxhc3QgZm9yIG1vcmUgdGhhbiBtYXhfd2FpdCBzZWNzCisJICovCisJ Zm9yIChpID0gMDsgaSA8IChtYXhfd2FpdCAqIDEwMDApOyBpKyspIHsKKyAgICAgICAgICAgIGZ3 X3N0YXRlID0gKG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCAKKyAg ICAgICAgICAgICAgICAgICAgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKSYgTUZJX1NUQVRFX01BU0sp OworCSAgICBjdXJyX2Fic19zdGF0ZSA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNh c19yZWdfc2V0LAorICAgICAgICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpOwor ICAgICAgICAgICAgaWYgKGFic19zdGF0ZSA9PSBjdXJyX2Fic19zdGF0ZSkKKyAgICAgICAgICAg ICAgICBERUxBWSgxMDAwKTsKKwkgICAgZWxzZQorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFJl dHVybiBlcnJvciBpZiBmd19zdGF0ZSBoYXNuJ3QgY2hhbmdlZCBhZnRlciBtYXhfd2FpdAorCSAq LworCWlmIChjdXJyX2Fic19zdGF0ZSA9PSBhYnNfc3RhdGUpIHsKKyAgICAgICAgICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkZXIHN0YXRlIFslZF0gaGFzbid0IGNoYW5nZWQgIgor CQkgICAgICAgImluICVkIHNlY3NcbiIsIGZ3X3N0YXRlLCBtYXhfd2FpdCk7CisJICAgIHJldHVy biAtRU5PREVWOworCX0KKyAgICB9CisgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsICJG VyBub3cgaW4gUmVhZHkgc3RhdGVcbiIpOworICAgIC8vZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNf ZGV2LCAiRlcgbm93IGluIFJlYWR5IHN0YXRlXG4iKTtkZWw/CisgICAgcmV0dXJuIDA7Cit9CisK Ky8qKgorICogbXJzYXNfZ2V0X21maV9jbWQ6ICAgICAgR2V0IGEgY21kIGZyb20gZnJlZSBjb21t YW5kIHBvb2wKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQor ICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbiBNRkkgY29tbWFuZCBmcm9tIHRoZSBjb21t YW5kIGxpc3QuCisgKi8KK3N0cnVjdCBtcnNhc19tZmlfY21kKiBtcnNhc19nZXRfbWZpX2NtZChz dHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQg PSBOVUxMOworICAgICAgICAKKyAgICBtdHhfbG9jaygmc2MtPm1maV9jbWRfcG9vbF9sb2NrKTsK KyAgICBpZiAoIVRBSUxRX0VNUFRZKCZzYy0+bXJzYXNfbWZpX2NtZF9saXN0X2hlYWQpKXsKKyAg ICAgICAgY21kID0gVEFJTFFfRklSU1QoJnNjLT5tcnNhc19tZmlfY21kX2xpc3RfaGVhZCk7Cisg ICAgICAgIFRBSUxRX1JFTU9WRSgmc2MtPm1yc2FzX21maV9jbWRfbGlzdF9oZWFkLCBjbWQsIG5l eHQpOworICAgIH0KKyAgICBtdHhfdW5sb2NrKCZzYy0+bWZpX2NtZF9wb29sX2xvY2spOworICAg IAorICAgIHJldHVybiBjbWQ7Cit9CisKKy8qKgorICogbXJzYXNfb2NyX3RocmVhZCAgICAgICAg ICAgICBUaHJlYWQgdG8gaGFuZGxlIE9DUi9LaWxsIEFkYXB0ZXIuCisgKiBpbnB1dDogICAgICAg ICAgICAgICBBZGFwdGVyIENvbnRleHQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNr IEZXIHN0YXR1cyByZWdpc3RlciBhbmQgZmxhZworICogZG9fdGltZW91dF9yZXNldCBmbGFnLiBJ dCB3aWxsIGRvIE9DUi9LaWxsIGFkYXB0ZXIgaWYKKyAqIEZXIGlzIGluIGZhdWx0IHN0YXRlIG9y IElPIHRpbWVkIG91dCBoYXMgdHJpZ2dlciByZXNldC4KKyAqLworc3RhdGljIHZvaWQKK21yc2Fz X29jcl90aHJlYWQodm9pZCAqYXJnKQoreworICAgIHN0cnVjdCBtcnNhc19zb2Z0YyAqc2M7Cisg ICAgdV9pbnQzMl90ICBmd19zdGF0dXMsIGZ3X3N0YXRlOworICAgICAgICAgICAgICAgICAgICAg IAorICAgIHNjID0gKHN0cnVjdCBtcnNhc19zb2Z0YyAqKWFyZzsKKworICAgIG1yc2FzX2Rwcmlu dChzYywgTVJTQVNfVFJBQ0UsICIlc1xuIiwgX19mdW5jX18pOworICAgICAgICAgCisgICAgc2Mt Pm9jcl90aHJlYWRfYWN0aXZlID0gMTsKKyAgICBtdHhfbG9jaygmc2MtPnNpbV9sb2NrKTsKKyAg ICBmb3IgKDs7KSB7CisgICAgICAgIC8qIFNsZWVwIGZvciAxIHNlY29uZCBhbmQgY2hlY2sgdGhl IHF1ZXVlIHN0YXR1cyovCisgICAgICAgIG1zbGVlcCgmc2MtPm9jcl9jaGFuLCAmc2MtPnNpbV9s b2NrLCBQUklCSU8sCisgICAgICAgICAgICAgICAibXJzYXNfb2NyIiwgc2MtPm1yc2FzX2Z3X2Zh dWx0X2NoZWNrX2RlbGF5ICogaHopOworICAgICAgICBpZiAoc2MtPnJlbW92ZV9pbl9wcm9ncmVz cykgeworICAgICAgICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsIAorCQkJCSJFeGl0 IGR1ZSB0byBzaHV0ZG93biBmcm9tICVzXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICBmd19zdGF0dXMgPSBtcnNhc19yZWFkX3JlZyhzYywgCisJ CQkJb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKTsKKyAgICAg ICAgZndfc3RhdGUgPSBmd19zdGF0dXMgJiBNRklfU1RBVEVfTUFTSzsKKyAgICAgICAgaWYgKGZ3 X3N0YXRlID09IE1GSV9TVEFURV9GQVVMVCB8fCBzYy0+ZG9fdGltZWRvdXRfcmVzZXQpIHsKKyAg ICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIk9DUiBzdGFydGVkIGR1ZSB0 byAlcyFcbiIsCisgICAgICAgICAgICAgICAgIHNjLT5kb190aW1lZG91dF9yZXNldD8iSU8gVGlt ZW91dCI6CisgICAgICAgICAgICAgICAgICJGVyBmYXVsdCBkZXRlY3RlZCIpOworICAgICAgICAg ICAgbXR4X2xvY2tfc3Bpbigmc2MtPmlvY3RsX2xvY2spOworICAgICAgICAgICAgc2MtPnJlc2V0 X2luX3Byb2dyZXNzID0gMTsKKyAgICAgICAgICAgIHNjLT5yZXNldF9jb3VudCsrOworICAgICAg ICAgICAgbXR4X3VubG9ja19zcGluKCZzYy0+aW9jdGxfbG9jayk7CisgICAgICAgICAgICBtcnNh c194cHRfZnJlZXplKHNjKTsKKyAgICAgICAgICAgIG1yc2FzX3Jlc2V0X2N0cmwoc2MpOworICAg ICAgICAgICAgbXJzYXNfeHB0X3JlbGVhc2Uoc2MpOworICAgICAgICAgICAgc2MtPnJlc2V0X2lu X3Byb2dyZXNzID0gMDsKKyAgICAgICAgICAgIHNjLT5kb190aW1lZG91dF9yZXNldCA9IDA7Cisg ICAgICAgIH0KKyAgICB9CisgICAgbXR4X3VubG9jaygmc2MtPnNpbV9sb2NrKTsKKyAgICBzYy0+ b2NyX3RocmVhZF9hY3RpdmUgPSAwOworICAgIG1yc2FzX2twcm9jX2V4aXQoMCk7Cit9CisKKy8q KgorICogbXJzYXNfcmVzZXRfcmVwbHlfZGVzYyAgICAgICBSZXNldCBSZXBseSBkZXNjcmlwdG9y IGFzIHBhcnQgb2YgT0NSLgorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVy IENvbnRleHQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHJlcGx5IGRlc2NyaXB0 b3Igc28gdGhhdCBwb3N0IE9DUgorICogZHJpdmVyIGFuZCBGVyB3aWxsIGxvc3Qgb2xkIGhpc3Rv cnkuCisgKi8KK3ZvaWQgIG1yc2FzX3Jlc2V0X3JlcGx5X2Rlc2Moc3RydWN0IG1yc2FzX3NvZnRj ICpzYykKK3sKKyAgICBpbnQgaTsKKyAgICBwTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90IHJl cGx5X2Rlc2M7CisKKyAgICBzYy0+bGFzdF9yZXBseV9pZHggPSAwOworICAgIHJlcGx5X2Rlc2Mg PSBzYy0+cmVwbHlfZGVzY19tZW07CisgICAgZm9yIChpID0gMDsgaSA8IHNjLT5yZXBseV9xX2Rl cHRoOyBpKyssIHJlcGx5X2Rlc2MrKykgeworICAgICAgICByZXBseV9kZXNjLT5Xb3JkcyA9IE1S U0FTX1VMT05HX01BWDsKKyAgICB9Cit9CisKKy8qKgorICogbXJzYXNfcmVzZXRfY3RybCAgICAg Q29yZSBmdW5jdGlvbiB0byBPQ1IvS2lsbCBhZGFwdGVyLgorICogaW5wdXQ6ICAgICAgICAgICAg ICAgQWRhcHRlciBDb250ZXh0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBydW4gZnJvbSB0 aHJlYWQgY29udGV4dCBzbyB0aGF0IGl0IGNhbiBzbGVlcC4KKyAqIDEuIERvIG5vdCBoYW5kbGUg T0NSIGlmIEZXIGlzIGluIEhXIGNyaXRpY2FsIGVycm9yLgorICogMi4gV2FpdCBmb3Igb3V0c3Rh bmRpbmcgY29tbWFuZCB0byBjb21wbGV0ZSBmb3IgMTgwIHNlY29uZHMuCisgKiAzLiBJZiAjMiBk b2VzIG5vdCBmaW5kIGFueSBvdXRzdGFuZGluZyBjb21tYW5kIENvbnRyb2xsZXIgaXMgaW4gd29y a2luZworICogc3RhdGUsIHNvIHNraXAgT0NSLgorICogT3RoZXJ3aXNlLCBkbyBPQ1Iva2lsbCBB ZGFwdGVyIGJhc2VkIG9uIGZsYWcgZGlzYWJsZU9ubGluZUN0cmxSZXNldC4KKyAqIDQuIFN0YXJ0 IG9mIHRoZSBPQ1IsIHJldHVybiBhbGwgU0NTSSBjb21tYW5kIGJhY2sgdG8gQ0FNIGxheWVyIHdo aWNoIGhhcworICogY2NiX3B0ci4KKyAqIDUuIFBvc3QgT0NSLCBSZS1maXJlIE1hbmFnbWVudCBj b21tYW5kIGFuZCBtb3ZlIENvbnRyb2xsZXIgdG8gT3BlcmF0aW9uCisgKiBzdGF0ZS4KKyAqLwor aW50IG1yc2FzX3Jlc2V0X2N0cmwoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBpbnQg cmV0dmFsID0gU1VDQ0VTUywgaSwgaiwgcmV0cnkgPSAwOworICAgIHVfaW50MzJfdCAgICAgICBo b3N0X2RpYWcsIGFic19zdGF0ZSwgc3RhdHVzX3JlZywgcmVzZXRfYWRhcHRlcjsKKyAgICB1bmlv biBjY2IgICAqY2NiOworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICptZmlfY21kOworICAgIHN0 cnVjdCBtcnNhc19tcHRfY21kICptcHRfY21kOworICAgIE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRP Ul9VTklPTiAqcmVxX2Rlc2M7CisKKyAgICBpZiAoc2MtPmFkcHJlY292ZXJ5ID09IE1SU0FTX0hX X0NSSVRJQ0FMX0VSUk9SKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwK KyAgICAgICAgICAgICAgICAgICAgICAgICJtcnNhczogSGFyZHdhcmUgY3JpdGljYWwgZXJyb3Is IHJldHVybmluZyBGQUlMLlxuIik7CisgICAgICAgIHJldHVybiBGQUlMOworICAgIH0KKworICAg IHNldF9iaXQoTVJTQVNfRlVTSU9OX0lOX1JFU0VULCAmc2MtPnJlc2V0X2ZsYWdzKTsKKyAgICBz Yy0+YWRwcmVjb3ZlcnkgPSBNUlNBU19BRFBSRVNFVF9TTV9JTkZBVUxUOworICAgIG1yc2FzX2Rp c2FibGVfaW50cihzYyk7CisgICAgREVMQVkoMTAwMCAqIDEwMDApOworCisgICAgLyogRmlyc3Qg dHJ5IHdhaXRpbmcgZm9yIGNvbW1hbmRzIHRvIGNvbXBsZXRlICovCisgICAgaWYgKG1yc2FzX3dh aXRfZm9yX291dHN0YW5kaW5nKHNjKSkgeworICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FT X09DUiwKKyAgICAgICAgICAgICAgICAgICAgICJyZXNldHRpbmcgYWRhcHRlciBmcm9tICVzLlxu IiwKKyAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CisgICAgICAgIC8qIE5vdyByZXR1 cm4gY29tbWFuZHMgYmFjayB0byB0aGUgQ0FNIGxheWVyICovCisgICAgICAgIGZvciAoaSA9IDAg OyBpIDwgc2MtPm1heF9md19jbWRzOyBpKyspIHsKKyAgICAgICAgICAgIG1wdF9jbWQgPSBzYy0+ bXB0X2NtZF9saXN0W2ldOworICAgICAgICAgICAgaWYgKG1wdF9jbWQtPmNjYl9wdHIpIHsKKyAg ICAgICAgICAgICAgICBjY2IgPSAodW5pb24gY2NiICopKG1wdF9jbWQtPmNjYl9wdHIpOworICAg ICAgICAgICAgICAgIGNjYi0+Y2NiX2guc3RhdHVzID0gQ0FNX1NDU0lfQlVTX1JFU0VUOworICAg ICAgICAgICAgICAgIG1yc2FzX2NtZF9kb25lKHNjLCBtcHRfY21kKTsKKyAgICAgICAgICAgICAg ICBhdG9taWNfZGVjKCZzYy0+Zndfb3V0c3RhbmRpbmcpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAKKyAgICAgICAgc3RhdHVzX3JlZyA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRv ZihtcnNhc19yZWdfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpOworICAgICAgICBhYnNf c3RhdGUgPSBzdGF0dXNfcmVnICYgTUZJX1NUQVRFX01BU0s7CisgICAgICAgIHJlc2V0X2FkYXB0 ZXIgPSBzdGF0dXNfcmVnICYgTUZJX1JFU0VUX0FEQVBURVI7CisgICAgICAgIGlmIChzYy0+ZGlz YWJsZU9ubGluZUN0cmxSZXNldCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGFic19zdGF0 ZSA9PSBNRklfU1RBVEVfRkFVTFQgJiYgIXJlc2V0X2FkYXB0ZXIpKSB7CisgICAgICAgICAgICAv KiBSZXNldCBub3Qgc3VwcG9ydGVkLCBraWxsIGFkYXB0ZXIgKi8KKyAgICAgICAgICAgIG1yc2Fz X2RwcmludChzYywgTVJTQVNfT0NSLCJSZXNldCBub3Qgc3VwcG9ydGVkLCBraWxsaW5nIGFkYXB0 ZXIuXG4iKTsKKyAgICAgICAgICAgIG1yc2FzX2tpbGxfaGJhKHNjKTsKKyAgICAgICAgICAgIHNj LT5hZHByZWNvdmVyeSA9IE1SU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworICAgICAgICAgICAgcmV0 dmFsID0gRkFJTDsKKyAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAg IC8qIE5vdyB0cnkgdG8gcmVzZXQgdGhlIGNoaXAgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IE1SU0FTX0ZVU0lPTl9NQVhfUkVTRVRfVFJJRVM7IGkrKykgeworICAgICAgICAgICAgbXJzYXNf d3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBmdXNpb25fc2VxX29mZnNldCks CisgICAgICAgICAgICAgICAgTVBJMl9XUlNFUV9GTFVTSF9LRVlfVkFMVUUpOworICAgICAgICAg ICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBmdXNpb25fc2Vx X29mZnNldCksCisgICAgICAgICAgICAgICAgTVBJMl9XUlNFUV8xU1RfS0VZX1ZBTFVFKTsKKyAg ICAgICAgICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwgZnVz aW9uX3NlcV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIE1QSTJfV1JTRVFfMk5EX0tFWV9WQUxV RSk7CisgICAgICAgICAgICBtcnNhc193cml0ZV9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19z ZXQsIGZ1c2lvbl9zZXFfb2Zmc2V0KSwKKyAgICAgICAgICAgICAgICBNUEkyX1dSU0VRXzNSRF9L RVlfVkFMVUUpOworICAgICAgICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNh c19yZWdfc2V0LCBmdXNpb25fc2VxX29mZnNldCksCisgICAgICAgICAgICAgICAgTVBJMl9XUlNF UV80VEhfS0VZX1ZBTFVFKTsKKyAgICAgICAgICAgIG1yc2FzX3dyaXRlX3JlZyhzYywgb2Zmc2V0 b2YobXJzYXNfcmVnX3NldCwgZnVzaW9uX3NlcV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIE1Q STJfV1JTRVFfNVRIX0tFWV9WQUxVRSk7CisgICAgICAgICAgICBtcnNhc193cml0ZV9yZWcoc2Ms IG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIGZ1c2lvbl9zZXFfb2Zmc2V0KSwKKyAgICAgICAgICAg ICAgICBNUEkyX1dSU0VRXzZUSF9LRVlfVkFMVUUpOworCisgICAgICAgICAgICAvKiBDaGVjayB0 aGF0IHRoZSBkaWFnIHdyaXRlIGVuYWJsZSAoRFJXRSkgYml0IGlzIG9uICovCisgICAgICAgICAg ICBob3N0X2RpYWcgPSBtcnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVzaW9uX2hvc3RfZGlhZykpOworICAgICAgICAgICAgcmV0cnkgPSAwOworICAgICAgICAgICAg d2hpbGUgKCEoaG9zdF9kaWFnICYgSE9TVF9ESUFHX1dSSVRFX0VOQUJMRSkpIHsKKyAgICAgICAg ICAgICAgICBERUxBWSgxMDAgKiAxMDAwKTsKKyAgICAgICAgICAgICAgICBob3N0X2RpYWcgPSBt cnNhc19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVzaW9uX2hvc3RfZGlh ZykpOworICAgICAgICAgICAgICAgIGlmIChyZXRyeSsrID09IDEwMCkgeworICAgICAgICAgICAg ICAgICAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09DUiwKKyAgICAgICAgICAgICAgICAgICAg Ikhvc3QgZGlhZyB1bmxvY2sgZmFpbGVkIVxuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKGhv c3RfZGlhZyAmIEhPU1RfRElBR19XUklURV9FTkFCTEUpKQorICAgICAgICAgICAgICAgIGNvbnRp bnVlOworCisgICAgICAgICAgICAvKiBTZW5kIGNoaXAgcmVzZXQgY29tbWFuZCAqLworICAgICAg ICAgICAgbXJzYXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBmdXNpb25f aG9zdF9kaWFnKSwKKyAgICAgICAgICAgICAgIGhvc3RfZGlhZyB8IEhPU1RfRElBR19SRVNFVF9B REFQVEVSKTsKKyAgICAgICAgICAgIERFTEFZKDMwMDAgKiAxMDAwKTsKKworICAgICAgICAgICAg LyogTWFrZSBzdXJlIHJlc2V0IGFkYXB0ZXIgYml0IGlzIGNsZWFyZWQgKi8KKyAgICAgICAgICAg IGhvc3RfZGlhZyA9IG1yc2FzX3JlYWRfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm dXNpb25faG9zdF9kaWFnKSk7CisgICAgICAgICAgICByZXRyeSA9IDA7CisgICAgICAgICAgICB3 aGlsZSAoaG9zdF9kaWFnICYgSE9TVF9ESUFHX1JFU0VUX0FEQVBURVIpIHsKKyAgICAgICAgICAg ICAgICBERUxBWSgxMDAgKiAxMDAwKTsKKyAgICAgICAgICAgICAgICBob3N0X2RpYWcgPSBtcnNh c19yZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVzaW9uX2hvc3RfZGlhZykp OworICAgICAgICAgICAgICAgIGlmIChyZXRyeSsrID09IDEwMDApIHsKKyAgICAgICAgICAgICAg ICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkRpYWcgcmVzZXQgYWRhcHRlciBuZXZlciBjbGVhcmVkIVxuIik7 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChob3N0X2RpYWcgJiBIT1NUX0RJQUdfUkVTRVRfQURBUFRF UikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYWJzX3N0YXRlID0g bXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpICYgTUZJX1NUQVRF X01BU0s7CisgICAgICAgICAgICByZXRyeSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlICgoYWJz X3N0YXRlIDw9IE1GSV9TVEFURV9GV19JTklUKSAmJiAocmV0cnkrKyA8IDEwMDApKSB7CisgICAg ICAgICAgICAgICAgREVMQVkoMTAwICogMTAwMCk7CisgICAgICAgICAgICAgICAgYWJzX3N0YXRl ID0gbXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Ym91bmRfc2NyYXRjaF9wYWQpKSAmIE1GSV9T VEFURV9NQVNLOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFic19zdGF0ZSA8PSBN RklfU1RBVEVfRldfSU5JVCkgeworICAgICAgICAgICAgICAgIG1yc2FzX2RwcmludChzYywgTVJT QVNfT0NSLCAiZmlybXdhcmUgc3RhdGUgPCBNRklfU1RBVEVfRldfSU5JVCwiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgc3RhdGUgPSAweCV4XG4iLCBhYnNfc3RhdGUpOworICAg ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBX YWl0IGZvciBGVyB0byBiZWNvbWUgcmVhZHkgKi8KKyAgICAgICAgICAgIGlmIChtcnNhc190cmFu c2l0aW9uX3RvX3JlYWR5KHNjLCAxKSkgeworICAgICAgICAgICAgICAgIG1yc2FzX2RwcmludChz YywgTVJTQVNfT0NSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1yc2FzOiBGYWlsZWQg dG8gdHJhbnNpdGlvbiBjb250cm9sbGVyIHRvIHJlYWR5LlxuIik7CisgICAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1yc2FzX3Jlc2V0X3JlcGx5 X2Rlc2Moc2MpOworICAgICAgICAgICAgaWYgKG1yc2FzX2lvY19pbml0KHNjKSkgeworICAgICAg ICAgICAgICAgIG1yc2FzX2RwcmludChzYywgTVJTQVNfT0NSLCAibXJzYXNfaW9jX2luaXQoKSBm YWlsZWQhXG4iKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgY2xlYXJfYml0KE1SU0FTX0ZVU0lPTl9JTl9SRVNFVCwgJnNjLT5yZXNldF9m bGFncyk7CisgICAgICAgICAgICBtcnNhc19lbmFibGVfaW50cihzYyk7CisgICAgICAgICAgICBz Yy0+YWRwcmVjb3ZlcnkgPSBNUlNBU19IQkFfT1BFUkFUSU9OQUw7CisKKyAgICAgICAgICAgIC8q IFJlLWZpcmUgbWFuYWdlbWVudCBjb21tYW5kcyAqLworICAgICAgICAgICAgZm9yIChqID0gMCA7 IGogPCBzYy0+bWF4X2Z3X2NtZHM7IGorKykgeworICAgICAgICAgICAgICAgIG1wdF9jbWQgPSBz Yy0+bXB0X2NtZF9saXN0W2pdOworICAgICAgICAgICAgICAgIGlmIChtcHRfY21kLT5zeW5jX2Nt ZF9pZHggIT0gKHVfaW50MzJfdClNUlNBU19VTE9OR19NQVgpIHsKKyAgICAgICAgICAgICAgICAg ICAgbWZpX2NtZCA9IHNjLT5tZmlfY21kX2xpc3RbbXB0X2NtZC0+c3luY19jbWRfaWR4XTsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKG1maV9jbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVJfRENNRF9MRF9NQVBfR0VU X0lORk8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZCht ZmlfY21kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbXB0X2NtZCht cHRfY21kKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICAgICAg ICAgICAgICByZXFfZGVzYyA9IG1yc2FzX2dldF9yZXF1ZXN0X2Rlc2Moc2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWZpX2NtZC0+Y21kX2lkLmNvbnRleHQuc21pZCAtIDEpOworICAg ICAgICAgICAgICAgICAgICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlJlLWZpcmUgY29tbWFuZCBEQ01EIG9wY29kZSAweCV4IGlu ZGV4ICVkXG4gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZpX2NtZC0+ZnJhbWUt PmRjbWQub3Bjb2RlLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVxX2Rlc2Mp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgYnVp bGQgTVBUIGNtZC5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1yc2FzX2ZpcmVfY21kKHNjLCByZXFfZGVzYy0+YWRkci51Lmxv dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVxX2Rlc2MtPmFkZHIudS5oaWdoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogUmVzZXQgbG9hZCBiYWxh bmNlIGluZm8gKi8KKyAgICAgICAgICAgIG1lbXNldChzYy0+bG9hZF9iYWxhbmNlX2luZm8sIDAs IAorICAgICAgICAgICAgICAgICAgIHNpemVvZihMRF9MT0FEX0JBTEFOQ0VfSU5GTykgKiBNQVhf TE9HSUNBTF9EUklWRVMpOyAKKworICAgICAgICAgICAgaWYgKCFtcnNhc19nZXRfbWFwX2luZm8o c2MpKQorICAgICAgICAgICAgICAgIG1yc2FzX3N5bmNfbWFwX2luZm8oc2MpOworCisgICAgICAg ICAgICAvKiBBZGFwdGVyIHJlc2V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KKyAgICAgICAg ICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIlJlc2V0IHN1Y2Nlc3NmdWxcbiIpOwor ICAgICAgICAgICAgcmV0dmFsID0gU1VDQ0VTUzsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisgICAgICAgIC8qIFJlc2V0IGZhaWxlZCwga2lsbCB0aGUgYWRhcHRlciAqLworICAg ICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJSZXNldCBmYWlsZWQsIGtpbGxpbmcg YWRhcHRlci5cbiIpOworICAgICAgICBtcnNhc19raWxsX2hiYShzYyk7CisgICAgICAgIHJldHZh bCA9IEZBSUw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2xlYXJfYml0KE1SU0FTX0ZVU0lPTl9J Tl9SRVNFVCwgJnNjLT5yZXNldF9mbGFncyk7CisgICAgICAgIG1yc2FzX2VuYWJsZV9pbnRyKHNj KTsKKyAgICAgICAgc2MtPmFkcHJlY292ZXJ5ID0gTVJTQVNfSEJBX09QRVJBVElPTkFMOworICAg IH0KK291dDoKKyAgICBjbGVhcl9iaXQoTVJTQVNfRlVTSU9OX0lOX1JFU0VULCAmc2MtPnJlc2V0 X2ZsYWdzKTsKKyAgICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09DUiwKKyAgICAgICAgICAgICJS ZXNldCBFeGl0IHdpdGggJWQuXG4iLCByZXR2YWwpOworICAgIHJldHVybiByZXR2YWw7Cit9CisK Ky8qKgorICogbXJzYXNfa2lsbF9oYmEgICAgICAgS2lsbCBIQkEgd2hlbiBPQ1IgaXMgbm90IHN1 cHBvcnRlZC4KKyAqIGlucHV0OiAgICAgICAgICAgICAgIEFkYXB0ZXIgQ29udGV4dC4KKyAqCisg KiBUaGlzIGZ1bmN0aW9uIHdpbGwga2lsbCBIQkEgd2hlbiBPQ1IgaXMgbm90IHN1cHBvcnRlZC4K KyAqLwordm9pZCBtcnNhc19raWxsX2hiYSAoc3RydWN0IG1yc2FzX3NvZnRjICpzYykKK3sKKyAg ICBtcnNhc19kcHJpbnQoc2MsIE1SU0FTX09DUiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisgICAgbXJz YXNfd3JpdGVfcmVnKHNjLCBvZmZzZXRvZihtcnNhc19yZWdfc2V0LCBkb29yYmVsbCksCisgICAg ICAgICAgICAgICAgICAgICAgICBNRklfU1RPUF9BRFApOworICAgIC8qIEZsdXNoICovCisgICAg bXJzYXNfcmVhZF9yZWcoc2MsIG9mZnNldG9mKG1yc2FzX3JlZ19zZXQsIGRvb3JiZWxsKSk7Cit9 CisKKy8qKgorICogbXJzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcgICAgICAgICAgIFdhaXQgZm9y IG91dHN0YW5kaW5nIGNvbW1hbmRzCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQWRhcHRlciBDb250ZXh0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IGZv ciAxODAgc2Vjb25kcyBmb3Igb3V0c3RhbmRpbmcKKyAqIGNvbW1hbmRzIHRvIGJlIGNvbXBsZXRl ZC4KKyAqLworaW50IG1yc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MpCit7CisgICAgaW50IGksIG91dHN0YW5kaW5nLCByZXR2YWwgPSAwOworICAgIHVfaW50 MzJfdCBmd19zdGF0ZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBNUlNBU19SRVNFVF9XQUlUX1RJ TUU7IGkrKykgeworICAgICAgICBpZiAoc2MtPnJlbW92ZV9pbl9wcm9ncmVzcykgeworICAgICAg ICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1IsCisgICAgICAgICAgICAgICAgIkRyaXZl ciByZW1vdmUgb3Igc2h1dGRvd24gY2FsbGVkLlxuIik7CisgICAgICAgICAgICByZXR2YWwgPSAx OworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgLyogQ2hlY2sgaWYg ZmlybXdhcmUgaXMgaW4gZmF1bHQgc3RhdGUgKi8KKyAgICAgICAgZndfc3RhdGUgPSBtcnNhc19y ZWFkX3JlZyhzYywgb2Zmc2V0b2YobXJzYXNfcmVnX3NldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZCkpICYgTUZJX1NUQVRFX01BU0s7Cisg ICAgICAgIGlmIChmd19zdGF0ZSA9PSBNRklfU1RBVEVfRkFVTFQpIHsKKyAgICAgICAgICAgIG1y c2FzX2RwcmludChzYywgTVJTQVNfT0NSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJGb3Vu ZCBGVyBpbiBGQVVMVCBzdGF0ZSwgd2lsbCByZXNldCBhZGFwdGVyLlxuIik7CisgICAgICAgICAg ICByZXR2YWwgPSAxOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAg b3V0c3RhbmRpbmcgPSBhdG9taWNfcmVhZCgmc2MtPmZ3X291dHN0YW5kaW5nKTsKKyAgICAgICAg aWYgKCFvdXRzdGFuZGluZykKKyAgICAgICAgICAgIGdvdG8gb3V0OworCisgICAgICAgIGlmICgh KGkgJSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7CisgICAgICAgICAgICBtcnNhc19k cHJpbnQoc2MsIE1SU0FTX09DUiwgIlslMmRdd2FpdGluZyBmb3IgJWQgIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY29tbWFuZHMgdG8gY29tcGxldGVcbiIsaSxvdXRzdGFuZGlu Zyk7CisgICAgICAgICAgICBtcnNhc19jb21wbGV0ZV9jbWQoc2MpOworICAgICAgICB9CisgICAg ICAgIERFTEFZKDEwMDAgKiAxMDAwKTsKKyAgICB9CisKKyAgICBpZiAoYXRvbWljX3JlYWQoJnNj LT5md19vdXRzdGFuZGluZykpIHsKKyAgICAgICAgbXJzYXNfZHByaW50KHNjLCBNUlNBU19PQ1Is CisgICAgICAgICAgICAgICAgICAgICAgICAiIHBlbmRpbmcgY29tbWFuZHMgcmVtYWluIGFmdGVy IHdhaXRpbmcsIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB3aWxsIHJlc2V0IGFkYXB0ZXIu XG4iKTsKKyAgICAgICAgcmV0dmFsID0gMTsKKyAgICB9CitvdXQ6CisgICAgcmV0dXJuIHJldHZh bDsKK30KKworLyoqCisgKiBtcnNhc19yZWxlYXNlX21maV9jbWQ6IFJldHVybiBhIGNtZCB0byBm cmVlIGNvbW1hbmQgcG9vbAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICBDb21tYW5kIHBhY2tl dCBmb3IgcmV0dXJuIHRvIGZyZWUgY21kIHBvb2wgCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1 cm5zIHRoZSBNRkkgY29tbWFuZCB0byB0aGUgY29tbWFuZCBsaXN0LgorICovCit2b2lkIG1yc2Fz X3JlbGVhc2VfbWZpX2NtZChzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQoreworICAgIHN0cnVj dCBtcnNhc19zb2Z0YyAqc2MgPSBjbWQtPnNjOworCisgICAgbXR4X2xvY2soJnNjLT5tZmlfY21k X3Bvb2xfbG9jayk7CisgICAgY21kLT5jY2JfcHRyID0gTlVMTDsKKyAgICBjbWQtPmNtZF9pZC5m cmFtZV9jb3VudCA9IDA7CisgICAgVEFJTFFfSU5TRVJUX1RBSUwoJihzYy0+bXJzYXNfbWZpX2Nt ZF9saXN0X2hlYWQpLCBjbWQsIG5leHQpOworICAgIG10eF91bmxvY2soJnNjLT5tZmlfY21kX3Bv b2xfbG9jayk7CisKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X2NvbnRyb2xs ZXJfaW5mbyAtICAgICAgICBSZXR1cm5zIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKKyAqIGlu cHV0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIgaW5mb3JtYXRpb24g c3RydWN0dXJlCisgKgorICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRvIGdl dCB0aGUgRlcncyBjb250cm9sbGVyIHN0cnVjdHVyZS4KKyAqIFRoaXMgaW5mb3JtYXRpb24gaXMg bWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgdGhlIG1heGltdW0gSU8gdHJhbnNmZXIgcGVyCisgKiBj b21tYW5kIHN1cHBvcnRlZCBieSB0aGUgRlcuCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfZ2V0X2N0 cmxfaW5mbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCAKKyAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgbXJzYXNfY3RybF9pbmZvICpjdHJsX2luZm8pCit7CisgICAgaW50IHJldGNvZGUgPSAw OworICAgIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisgICAgc3RydWN0IG1yc2FzX2RjbWRf ZnJhbWUgKmRjbWQ7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisKKyAgICBp ZiAoIWNtZCkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJGYWlsZWQg dG8gZ2V0IGEgZnJlZSBjbWRcbiIpOworICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9Cisg ICAgZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisgICAgaWYgKG1yc2FzX2FsbG9jX2N0bHJf aW5mb19jbWQoc2MpICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJz YXNfZGV2LCAiQ2Fubm90IGFsbG9jYXRlIGdldCBjdGxyIGluZm8gY21kXG4iKTsKKyAgICAgICAg bXJzYXNfcmVsZWFzZV9tZmlfY21kKGNtZCk7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAg IH0KKyAgICBtZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworICAgIGRj bWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAg ICBkY21kLT5zZ2VfY291bnQgPSAxOworICAgIGRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9S RUFEOworICAgIGRjbWQtPnRpbWVvdXQgPSAwOworICAgIGRjbWQtPnBhZF8wID0gMDsKKyAgICBk Y21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtcnNhc19jdHJsX2luZm8pOworICAg IGRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9HRVRfSU5GTzsKKyAgICBkY21kLT5zZ2wuc2dl MzJbMF0ucGh5c19hZGRyID0gc2MtPmN0bHJfaW5mb19waHlzX2FkZHI7CisgICAgZGNtZC0+c2ds LnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbXJzYXNfY3RybF9pbmZvKTsKKworICAg IGlmICghbXJzYXNfaXNzdWVfcG9sbGVkKHNjLCBjbWQpKSAKKyAgICAgICAgbWVtY3B5KGN0cmxf aW5mbywgc2MtPmN0bHJfaW5mb19tZW0sIHNpemVvZihzdHJ1Y3QgbXJzYXNfY3RybF9pbmZvKSk7 CisgICAgZWxzZSAKKyAgICAgICAgcmV0Y29kZSA9IDE7CisKKyAgICBtcnNhc19mcmVlX2N0bHJf aW5mb19jbWQoc2MpOworICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworICAgIHJldHVy bihyZXRjb2RlKTsKK30KKworLyoqCisgKiBtcnNhc19hbGxvY19jdGxyX2luZm9fY21kOiAgQWxs b2NhdGVzIG1lbW9yeSBmb3IgY29udHJvbGxlciBpbmZvIGNvbW1hbmQKKyAqIGlucHV0OiAgICAg ICAgICAgICAgICAgICAgICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBBbGxvY2F0ZXMgRE1B YWJsZSBtZW1vcnkgZm9yIHRoZSBjb250cm9sbGVyIGluZm8gaW50ZXJuYWwgY29tbWFuZC4KKyAq LworaW50IG1yc2FzX2FsbG9jX2N0bHJfaW5mb19jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYykK K3sKKyAgICBpbnQgY3Rscl9pbmZvX3NpemU7CisKKyAgICAvKiBBbGxvY2F0ZSBnZXQgY29udHJv bGxlciBpbmZvIGNvbW1hbmQgKi8KKyAgICBjdGxyX2luZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg bXJzYXNfY3RybF9pbmZvKTsKKyAgICBpZiAoYnVzX2RtYV90YWdfY3JlYXRlKCBzYy0+bXJzYXNf cGFyZW50X3RhZywgICAvLyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAw LCAgICAgICAgICAgICAgICAgICAvLyBhbGdubW50LCBib3VuZGFyeQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULC8vIGxvd2FkZHIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0VfTUFYQUREUiwgICAgICAvLyBoaWdoYWRkcgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICAgICAgICAgICAgIC8vIGZp bHRlciwgZmlsdGVyYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Rscl9pbmZvX3Np emUsICAgICAgICAgIC8vIG1heHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAg ICAgICAgICAgICAgICAgICAgICAvLyBtc2VnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdGxyX2luZm9fc2l6ZSwgICAgICAgICAgLy8gbWF4c2Vnc2l6ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csICAgICAgIC8vIGZsYWdzCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgICAgICAgICAgICAgLy8gbG9ja2Z1bmMs IGxvY2thcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2MtPmN0bHJfaW5mb190YWcp KSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0 ZSBjdGxyIGluZm8gdGFnXG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAg ICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+Y3Rscl9pbmZvX3RhZywgKHZvaWQgKiopJnNjLT5j dGxyX2luZm9fbWVtLAorICAgICAgICAgICAgQlVTX0RNQV9OT1dBSVQsICZzYy0+Y3Rscl9pbmZv X2RtYW1hcCkpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90 IGFsbG9jYXRlIGN0bHIgaW5mbyBjbWQgbWVtXG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0p OworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1hcF9sb2FkKHNjLT5jdGxyX2luZm9fdGFnLCBzYy0+ Y3Rscl9pbmZvX2RtYW1hcCwKKyAgICAgICAgICAgIHNjLT5jdGxyX2luZm9fbWVtLCBjdGxyX2lu Zm9fc2l6ZSwgbXJzYXNfYWRkcl9jYiwKKyAgICAgICAgICAgICZzYy0+Y3Rscl9pbmZvX3BoeXNf YWRkciwgQlVTX0RNQV9OT1dBSVQpKSB7CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2Fz X2RldiwgIkNhbm5vdCBsb2FkIGN0bHIgaW5mbyBjbWQgbWVtXG4iKTsKKyAgICAgICAgcmV0dXJu IChFTk9NRU0pOworICAgIH0KKworICAgIG1lbXNldChzYy0+Y3Rscl9pbmZvX21lbSwgMCwgY3Rs cl9pbmZvX3NpemUpOworICAgIHJldHVybiAoMCk7Cit9CisKKy8qKgorICogbXJzYXNfZnJlZV9j dGxyX2luZm9fY21kOiBGcmVlIG1lbW9yeSBmb3IgY29udHJvbGxlciBpbmZvIGNvbW1hbmQgCisg KiBpbnB1dDogICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIERl YWxsb2NhdGVzIG1lbW9yeSBvZiB0aGUgZ2V0IGNvbnRyb2xsZXIgaW5mbyBjbWQuCisgKi8KK3Zv aWQgbXJzYXNfZnJlZV9jdGxyX2luZm9fY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7Cisg ICAgaWYgKHNjLT5jdGxyX2luZm9fcGh5c19hZGRyKQorICAgICAgICBidXNfZG1hbWFwX3VubG9h ZChzYy0+Y3Rscl9pbmZvX3RhZywgc2MtPmN0bHJfaW5mb19kbWFtYXApOworICAgIGlmIChzYy0+ Y3Rscl9pbmZvX21lbSAhPSBOVUxMKQorICAgICAgICBidXNfZG1hbWVtX2ZyZWUoc2MtPmN0bHJf aW5mb190YWcsIHNjLT5jdGxyX2luZm9fbWVtLCBzYy0+Y3Rscl9pbmZvX2RtYW1hcCk7CisgICAg aWYgKHNjLT5jdGxyX2luZm9fdGFnICE9IE5VTEwpCisgICAgICAgIGJ1c19kbWFfdGFnX2Rlc3Ry b3koc2MtPmN0bHJfaW5mb190YWcpOworfQorCisvKioKKyAqIG1yc2FzX2lzc3VlX3BvbGxlZDog ICAgICAgIElzc3VlcyBhIHBvbGxpbmcgY29tbWFuZAorICogaW5wdXRzOiAgICAgICAgICAgICAg ICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBD b21tYW5kIHBhY2tldCB0byBiZSBpc3N1ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBw b3N0aW5nIG9mIGludGVybmFsIGNvbW1hbmRzIHRvIEZpcm13YXJlLiAgTUZJIAorICogcmVxdWly ZXMgdGhlIGNtZF9zdGF0dXMgdG8gYmUgc2V0IHRvIDB4RkYgYmVmb3JlIHBvc3RpbmcuICBUaGUg bWF4aW11bgorICogd2FpdCB0aW1lIG9mIHRoZSBwb2xsIHJlc3BvbnNlIHRpbWVyIGlzIDE4MCBz ZWNvbmRzLgorICovCitpbnQgbXJzYXNfaXNzdWVfcG9sbGVkKHN0cnVjdCBtcnNhc19zb2Z0YyAq c2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgc3RydWN0IG1yc2FzX2hlYWRl ciAqZnJhbWVfaGRyID0gJmNtZC0+ZnJhbWUtPmhkcjsKKyAgICB1X2ludDhfdCBtYXhfd2FpdCA9 IE1SU0FTX0lOVEVSTkFMX0NNRF9XQUlUX1RJTUU7CisgICAgaW50IGksIHJldGNvZGUgPSAwOwor CisgICAgZnJhbWVfaGRyLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAgICBmcmFtZV9oZHItPmZsYWdz IHw9IE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlfUVVFVUU7CisKKyAgICAvKiBJc3N1ZSB0 aGUgZnJhbWUgdXNpbmcgaW5ib3VuZCBxdWV1ZSBwb3J0ICovCisgICAgaWYgKG1yc2FzX2lzc3Vl X2RjbWQoc2MsIGNtZCkpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi Q2Fubm90IGlzc3VlIERDTUQgaW50ZXJuYWwgY29tbWFuZC5cbiIpOworICAgICAgICByZXR1cm4o MSk7CisgICAgfQorCisgICAgLyogCisgICAgICogUG9sbCByZXNwb25zZSB0aW1lciB0byB3YWl0 IGZvciBGaXJtd2FyZSByZXNwb25zZS4gIFdoaWxlIHRoaXMgICAKKyAgICAgKiB0aW1lciB3aXRo IHRoZSBERUxBWSBjYWxsIGNvdWxkIGJsb2NrIENQVSwgdGhlIHRpbWUgaW50ZXJ2YWwgZm9yIAor ICAgICAqIHRoaXMgaXMgb25seSAxIG1pbGxpc2Vjb25kLiAKKyAgICAgKi8KKyAgICBpZiAoZnJh bWVfaGRyLT5jbWRfc3RhdHVzID09IDB4RkYpIHsKKyAgICAgICAgZm9yIChpPTA7IGkgPCAobWF4 X3dhaXQgKiAxMDAwKTsgaSsrKXsKKyAgICAgICAgICAgIGlmIChmcmFtZV9oZHItPmNtZF9zdGF0 dXMgPT0gMHhGRikKKyAgICAgICAgICAgICAgICBERUxBWSgxMDAwKTsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKyAgICB9CisgICAgaWYgKGZy YW1lX2hkci0+Y21kX3N0YXR1cyAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGZyYW1lX2hkci0+ Y21kX3N0YXR1cyA9PSAweEZGKQorICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNf ZGV2LCAiRENNRCB0aW1lZCBvdXQgYWZ0ZXIgJWQgc2Vjb25kcy5cbiIsIG1heF93YWl0KTsgCisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkRD TUQgZmFpbGVkLCBzdGF0dXMgPSAweCV4XG4iLCBmcmFtZV9oZHItPmNtZF9zdGF0dXMpOworICAg ICAgICByZXRjb2RlID0gMTsKKyAgICB9CisgICAgcmV0dXJuKHJldGNvZGUpOworfQorCisvKioK KyAqIG1yc2FzX2lzc3VlX2RjbWQgLSAgICAgSXNzdWVzIGEgTUZJIFBhc3MgdGhydSBjbWQKKyAq IGlucHV0OiAgICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAgICAgICAgICAg ICAgICAgICAgICAgIG1maSBjbWQgcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGJ5IG1yc2FzX2lzc3VlZF9ibG9ja2VkX2NtZCgpIGFuZAorICogbXJzYXNfaXNzdWVkX3Bv bGxlZCgpLCB0byBidWlsZCB0aGUgTVBUIGNvbW1hbmQgYW5kIHRoZW4gZmlyZSB0aGUgCisgKiBj b21tYW5kIHRvIEZpcm13YXJlLiAKKyAqLworaW50CittcnNhc19pc3N1ZV9kY21kKHN0cnVjdCBt cnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgTVJTQVNf UkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OICpyZXFfZGVzYzsKKworICAgIHJlcV9kZXNjID0gbXJz YXNfYnVpbGRfbXB0X2NtZChzYywgY21kKTsKKyAgICBpZiAoIXJlcV9kZXNjKSB7CisgICAgICAg IGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBidWlsZCBNUFQgY21kLlxuIik7 CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisKKyAgICBtcnNhc19maXJlX2NtZChzYywgcmVx X2Rlc2MtPmFkZHIudS5sb3csIHJlcV9kZXNjLT5hZGRyLnUuaGlnaCk7CisKKyAgICByZXR1cm4o MCk7Cit9CisKKy8qKgorICogbXJzYXNfYnVpbGRfbXB0X2NtZCAtIENhbGxzIGhlbHBlciBmdW5j dGlvbiB0byBidWlsZCBQYXNzdGhydSBjbWQKKyAqIGlucHV0OiAgICAgICAgICAgICAgICBBZGFw dGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICBtZmkgY21kIHRvIGJ1aWxk CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgbXJzYXNfaXNzdWVfY21kKCkgdG8g YnVpbGQgdGhlIE1QVC1NRkkKKyAqIHBhc3N0aHJ1IGNvbW1hbmQgYW5kIHByZXBhcmVzIHRoZSBN UFQgY29tbWFuZCB0byBzZW5kIHRvIEZpcm13YXJlLgorICovCitNUlNBU19SRVFVRVNUX0RFU0NS SVBUT1JfVU5JT04gKgorbXJzYXNfYnVpbGRfbXB0X2NtZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNj LCBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQoreworICAgIE1SU0FTX1JFUVVFU1RfREVTQ1JJ UFRPUl9VTklPTiAqcmVxX2Rlc2M7CisgICAgdV9pbnQxNl90IGluZGV4OworCisgICAgaWYgKG1y c2FzX2J1aWxkX21wdG1maV9wYXNzdGhydShzYywgY21kKSkgeworICAgICAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYnVpbGQgTVBULU1GSSBwYXNzdGhydSBjbWQuXG4i KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaW5kZXggPSBjbWQtPmNtZF9p ZC5jb250ZXh0LnNtaWQ7CisKKyAgICByZXFfZGVzYyA9IG1yc2FzX2dldF9yZXF1ZXN0X2Rlc2Mo c2MsIGluZGV4LTEpOworICAgIGlmKCFyZXFfZGVzYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisK KyAgICByZXFfZGVzYy0+YWRkci5Xb3JkcyA9IDA7CisgICAgcmVxX2Rlc2MtPlNDU0lJTy5SZXF1 ZXN0RmxhZ3MgPSAoTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTyA8PCBNUlNBU19SRVFf REVTQ1JJUFRfRkxBR1NfVFlQRV9TSElGVCk7CisKKyAgICByZXFfZGVzYy0+U0NTSUlPLlNNSUQg PSBpbmRleDsKKworICAgIHJldHVybihyZXFfZGVzYyk7Cit9CisKKy8qKgorICogbXJzYXNfYnVp bGRfbXB0bWZpX3Bhc3N0aHJ1IC0gQnVpbGRzIGEgTVBUIE1GSSBQYXNzdGhydSBjb21tYW5kIAor ICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmkgY21kIHBvaW50ZXIgCisgKgorICogVGhl IE1QVCBjb21tYW5kIGFuZCB0aGUgaW9fcmVxdWVzdCBhcmUgc2V0dXAgYXMgYSBwYXNzdGhydSBj b21tYW5kLiAKKyAqIFRoZSBTR0UgY2hhaW4gYWRkcmVzcyBpcyBzZXQgdG8gZnJhbWVfcGh5c19h ZGRyIG9mIHRoZSBNRkkgY29tbWFuZC4gCisgKi8KK3VfaW50OF90CittcnNhc19idWlsZF9tcHRt ZmlfcGFzc3RocnUoc3RydWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQg Km1maV9jbWQpCit7CisgICAgTVBJMjVfSUVFRV9TR0VfQ0hBSU42NCAqbXBpMjVfaWVlZV9jaGFp bjsKKyAgICBQVFJfTVJTQVNfUkFJRF9TQ1NJX0lPX1JFUVVFU1QgaW9fcmVxOworICAgIHN0cnVj dCBtcnNhc19tcHRfY21kICptcHRfY21kOworICAgIHN0cnVjdCBtcnNhc19oZWFkZXIgKmZyYW1l X2hkciA9ICZtZmlfY21kLT5mcmFtZS0+aGRyOworCisgICAgbXB0X2NtZCA9IG1yc2FzX2dldF9t cHRfY21kKHNjKTsKKyAgICBpZiAoIW1wdF9jbWQpCisgICAgICAgIHJldHVybigxKTsKKworICAg IC8qIFNhdmUgdGhlIHNtaWQuIFRvIGJlIHVzZWQgZm9yIHJldHVybmluZyB0aGUgY21kICovCisg ICAgbWZpX2NtZC0+Y21kX2lkLmNvbnRleHQuc21pZCA9IG1wdF9jbWQtPmluZGV4OworCisgICAg bXB0X2NtZC0+c3luY19jbWRfaWR4ID0gbWZpX2NtZC0+aW5kZXg7CisKKyAgICAvKgorICAgICAq IEZvciBjbWRzIHdoZXJlIHRoZSBmbGFnIGlzIHNldCwgc3RvcmUgdGhlIGZsYWcgYW5kIGNoZWNr CisgICAgICogb24gY29tcGxldGlvbi4gRm9yIGNtZHMgd2l0aCB0aGlzIGZsYWcsIGRvbid0IGNh bGwKKyAgICAgKiBtcnNhc19jb21wbGV0ZV9jbWQuCisgICAgICovCisKKyAgICBpZiAoZnJhbWVf aGRyLT5mbGFncyAmIE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlfUVVFVUUpCisgICAgICAg IG1wdF9jbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRTsKKwor ICAgIGlvX3JlcSA9IG1wdF9jbWQtPmlvX3JlcXVlc3Q7CisKKyAgICBtcGkyNV9pZWVlX2NoYWlu ID0gKE1QSTI1X0lFRUVfU0dFX0NIQUlONjQgKikmaW9fcmVxLT5TR0wuSWVlZUNoYWluOworCisg ICAgaW9fcmVxLT5GdW5jdGlvbiAgICA9IE1SU0FTX01QSTJfRlVOQ1RJT05fUEFTU1RIUlVfSU9f UkVRVUVTVDsKKyAgICBpb19yZXEtPlNHTE9mZnNldDAgID0gb2Zmc2V0b2YoTVJTQVNfUkFJRF9T Q1NJX0lPX1JFUVVFU1QsIFNHTCkgLyA0OworICAgIGlvX3JlcS0+Q2hhaW5PZmZzZXQgPSBzYy0+ Y2hhaW5fb2Zmc2V0X21maV9wdGhydTsKKworICAgIG1waTI1X2llZWVfY2hhaW4tPkFkZHJlc3Mg PSBtZmlfY21kLT5mcmFtZV9waHlzX2FkZHI7CisKKyAgICBtcGkyNV9pZWVlX2NoYWluLT5GbGFn cz0gSUVFRV9TR0VfRkxBR1NfQ0hBSU5fRUxFTUVOVCB8CisgICAgICAgICAgICAgIE1QSTJfSUVF RV9TR0VfRkxBR1NfSU9DUExCTlRBX0FERFI7CisKKyAgICBtcGkyNV9pZWVlX2NoYWluLT5MZW5n dGggPSBNUlNBU19NQVhfU1pfQ0hBSU5fRlJBTUU7CisKKyAgICByZXR1cm4oMCk7Cit9CisKKy8q KgorICogbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQgLSBTeW5jaHJvbm91cyB3cmFwcGVyIGFyb3Vu ZCByZWd1bGFyIEZXIGNtZHMKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgQWRhcHRlciBz b2Z0IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmQgdG8gYmUgaXNz dWVkCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBhbiBldmVudCBmb3IgdGhlIGNvbW1h bmQgdG8gYmUgcmV0dXJuZWQgCisgKiBmcm9tIHRoZSBJU1IuIE1heCB3YWl0IHRpbWUgaXMgTVJT QVNfSU5URVJOQUxfQ01EX1dBSVRfVElNRSBzZWNzLgorICogVXNlZCBmb3IgaXNzdWluZyBpbnRl cm5hbCBhbmQgaW9jdGwgY29tbWFuZHMuCisgKi8KK2ludCBtcnNhc19pc3N1ZV9ibG9ja2VkX2Nt ZChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQorewor ICAgIHVfaW50OF90IG1heF93YWl0ID0gTVJTQVNfSU5URVJOQUxfQ01EX1dBSVRfVElNRTsKKyAg ICB1bnNpZ25lZCBsb25nIHRvdGFsX3RpbWUgPSAwOworICAgIGludCByZXRjb2RlID0gMDsKKwor ICAgIC8qIEluaXRpYWxpemUgY21kX3N0YXR1cyAqLworICAgIGNtZC0+Y21kX3N0YXR1cyA9IEVD T05OUkVGVVNFRDsKKworICAgIC8qIEJ1aWxkIE1QVC1NRkkgY29tbWFuZCBmb3IgaXNzdWUgdG8g RlcgKi8KKyAgICBpZiAobXJzYXNfaXNzdWVfZGNtZChzYywgY21kKSl7CisgICAgICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBpc3N1ZSBEQ01EIGludGVybmFsIGNvbW1h bmQuXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworICAgIHNjLT5jaGFuID0gKHZv aWQqKSZjbWQ7CisKKyAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGZvciBkZWJ1ZyBvbmx5Li4uICov CisgICAgLy9kZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsIkRDTUQgaXNzdWVkIHRvIEZXLCBh Ym91dCB0byBzbGVlcC13YWl0Li4uXG4iKTsKKyAgICAvL2RldmljZV9wcmludGYoc2MtPm1yc2Fz X2Rldiwic2MtPmNoYW4gPSAlcFxuIiwgc2MtPmNoYW4pOworCisgICAgd2hpbGUgKDEpIHsKKyAg ICAgICBpZiAoY21kLT5jbWRfc3RhdHVzID09IEVDT05OUkVGVVNFRCl7CisgICAgICAgICAgIHRz bGVlcCgodm9pZCAqKSZzYy0+Y2hhbiwgMCwgIm1yc2FzX3NsZWVwIiwgaHopOworICAgICAgIH0K KyAgICAgICBlbHNlCisgICAgICAgICAgIGJyZWFrOworICAgICAgIHRvdGFsX3RpbWUrKzsKKyAg ICAgICBpZiAodG90YWxfdGltZSA+PSBtYXhfd2FpdCkgeworICAgICAgICAgICBkZXZpY2VfcHJp bnRmKHNjLT5tcnNhc19kZXYsICJJbnRlcm5hbCBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAlZCBz ZWNvbmRzLlxuIiwgbWF4X3dhaXQpOworICAgICAgICAgICByZXRjb2RlID0gMTsKKyAgICAgICAg ICAgYnJlYWs7CisgICAgICAgfSAKKyAgICB9IAorICAgIHJldHVybihyZXRjb2RlKTsKK30KKwor LyoqCisgKiBtcnNhc19jb21wbGV0ZV9tcHRtZmlfcGFzc3RocnUgLSBDb21wbGV0ZXMgYSBjb21t YW5kCisgKiBpbnB1dDogICAgICAgICAgICAgICAgICAgICAgICAgICBzYzogQWRhcHRlciBzb2Z0 IHN0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6IENvbW1hbmQg dG8gYmUgY29tcGxldGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0 dXM6IGNtZCBjb21wbGV0aW9uIHN0YXR1cyAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCBmcm9tIG1yc2FzX2NvbXBsZXRlX2NtZCgpIGFmdGVyIGFuIGludGVycnVwdCAKKyAqIGlzIHJl Y2VpdmVkIGZyb20gRmlybXdhcmUsIGFuZCBpb19yZXF1ZXN0LT5GdW5jdGlvbiBpcyAKKyAqIE1S U0FTX01QSTJfRlVOQ1RJT05fUEFTU1RIUlVfSU9fUkVRVUVTVC4KKyAqLwordm9pZAorbXJzYXNf Y29tcGxldGVfbXB0bWZpX3Bhc3N0aHJ1KHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0cnVjdCBt cnNhc19tZmlfY21kICpjbWQsCisgICAgICAgICAgICAgICAgICAgICB1X2ludDhfdCBzdGF0dXMp Cit7CisgICAgc3RydWN0IG1yc2FzX2hlYWRlciAqaGRyID0gJmNtZC0+ZnJhbWUtPmhkcjsKKyAg ICB1X2ludDhfdCBjbWRfc3RhdHVzID0gY21kLT5mcmFtZS0+aGRyLmNtZF9zdGF0dXM7CisKKyAg ICAvKiBSZXNldCB0aGUgcmV0cnkgY291bnRlciBmb3IgZnV0dXJlIHJlLXRyaWVzICovIAorICAg IGNtZC0+cmV0cnlfZm9yX2Z3X3Jlc2V0ID0gMDsKKworICAgIGlmIChjbWQtPmNjYl9wdHIpCisg ICAgICAgIGNtZC0+Y2NiX3B0ciA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKGhkci0+Y21kKSB7Cisg ICAgICAgIGNhc2UgTUZJX0NNRF9JTlZBTElEOgorICAgICAgICAgICAgZGV2aWNlX3ByaW50Zihz Yy0+bXJzYXNfZGV2LCAiTUZJX0NNRF9JTlZBTElEIGNvbW1hbmQuXG4iKTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIE1GSV9DTURfUERfU0NTSV9JTzoKKyAgICAgICAgY2FzZSBN RklfQ01EX0xEX1NDU0lfSU86CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTUZJX0NN RF9QRF9TQ1NJX0lPIGFuZCBNRklfQ01EX0xEX1NDU0lfSU8gY291bGQgaGF2ZSBiZWVuCisgICAg ICAgICAgICAgKiBpc3N1ZWQgZWl0aGVyIHRocm91Z2ggYW4gSU8gcGF0aCBvciBhbiBJT0NUTCBw YXRoLiBJZiBpdAorICAgICAgICAgICAgICogd2FzIHZpYSBJT0NUTCwgd2Ugd2lsbCBzZW5kIGl0 IHRvIGludGVybmFsIGNvbXBsZXRpb24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlm IChjbWQtPnN5bmNfY21kKSB7CisgICAgICAgICAgICAgICAgY21kLT5zeW5jX2NtZCA9IDA7Cisg ICAgICAgICAgICAgICAgbXJzYXNfd2FrZXVwKHNjLCBjbWQpOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE1GSV9DTURfU01QOgorICAgICAgICBj YXNlIE1GSV9DTURfU1RQOgorICAgICAgICBjYXNlIE1GSV9DTURfRENNRDoKKyAgICAgICAgICAg IC8qIENoZWNrIGZvciBMRCBtYXAgdXBkYXRlICovCisgICAgICAgICAgICBpZiAoKGNtZC0+ZnJh bWUtPmRjbWQub3Bjb2RlID09IE1SX0RDTURfTERfTUFQX0dFVF9JTkZPKSAmJiAKKyAgICAgICAg ICAgICAgICAoY21kLT5mcmFtZS0+ZGNtZC5tYm94LmJbMV0gPT0gMSkpIHsKKwkJbXR4X2xvY2so JnNjLT5yYWlkbWFwX2xvY2spOworICAgICAgICAgICAgICAgIGlmIChjbWRfc3RhdHVzICE9IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtZF9zdGF0dXMgIT0gTUZJX1NUQVRfTk9UX0ZP VU5EKQorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAibWFwIHN5bmMgZmFpbGVkLCBzdGF0dXM9JXhcbiIsY21kX3N0YXR1cyk7CisgICAgICAgICAg ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbXJzYXNfcmVsZWFzZV9t ZmlfY21kKGNtZCk7CisJCSAgICAgICAgbXR4X3VubG9jaygmc2MtPnJhaWRtYXBfbG9jayk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAg ICAgc2MtPm1hcF9pZCsrOworICAgICAgICAgICAgICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChj bWQpOworICAgICAgICAgICAgICAgIGlmIChNUl9WYWxpZGF0ZU1hcEluZm8oc2MpKQorICAgICAg ICAgICAgICAgICAgICBzYy0+ZmFzdF9wYXRoX2lvID0gMDsKKyAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgIHNjLT5mYXN0X3BhdGhfaW8gPSAxOworICAgICAgICAgICAg ICAgIG1yc2FzX3N5bmNfbWFwX2luZm8oc2MpOworICAgICAgICAgICAgICAgIG10eF91bmxvY2so JnNjLT5yYWlkbWFwX2xvY2spOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorI2lmIDAgLy9jdXJyZW50bHkgbm90IHN1cHBvcnRpbmcgZXZlbnQgaGFuZGxpbmcsIHNvIGNv bW1lbnRpbmcgb3V0CisgICAgICAgICAgICBpZiAoY21kLT5mcmFtZS0+ZGNtZC5vcGNvZGUgPT0g TVJfRENNRF9DVFJMX0VWRU5UX0dFVF9JTkZPIHx8CisgICAgICAgICAgICAgICAgICAgIGNtZC0+ ZnJhbWUtPmRjbWQub3Bjb2RlID09IE1SX0RDTURfQ1RSTF9FVkVOVF9HRVQpIHsKKyAgICAgICAg ICAgICAgICBtcnNhc19wb2xsX3dhaXRfYWVuID0gMDsKKyAgICAgICAgICAgIH0KKyNlbmRpZgor ICAgICAgICAgICAgLyogU2VlIGlmIGdvdCBhbiBldmVudCBub3RpZmljYXRpb24gKi8KKyAgICAg ICAgICAgIGlmIChjbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PSBNUl9EQ01EX0NUUkxfRVZFTlRf V0FJVCkKKyAgICAgICAgICAgICAgICBtcnNhc19jb21wbGV0ZV9hZW4oc2MsIGNtZCk7CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbXJzYXNfd2FrZXVwKHNjLCBjbWQpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUZJX0NNRF9BQk9SVDoKKyAgICAgICAgICAg IC8qIENvbW1hbmQgaXNzdWVkIHRvIGFib3J0IGFub3RoZXIgY21kIHJldHVybiAqLworICAgICAg ICAgICAgbXJzYXNfY29tcGxldGVfYWJvcnQoc2MsIGNtZCk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2Rl diwiVW5rbm93biBjb21tYW5kIGNvbXBsZXRlZCEgWzB4JVhdXG4iLCBoZHItPmNtZCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICogbXJzYXNfd2FrZXVwIC0gICAgICAg ICBDb21wbGV0ZXMgYW4gaW50ZXJuYWwgY29tbWFuZAorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZCB0 byBiZSBjb21wbGV0ZWQKKyAqCisgKiBJbiBtcnNhc19pc3N1ZV9ibG9ja2VkX2NtZCgpLCBhZnRl ciBhIGNvbW1hbmQgaXMgaXNzdWVkIHRvIEZpcm13YXJlLCAKKyAqIGEgd2FpdCB0aW1lciBpcyBz dGFydGVkLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSAgCisgKiBtcnNhc19jb21wbGV0 ZV9tcHRtZmlfcGFzc3RocnUoKSBhcyBpdCBjb21wbGV0ZXMgdGhlIGNvbW1hbmQsCisgKiB0byB3 YWtlIHVwIGZyb20gdGhlIGNvbW1hbmQgd2FpdC4KKyAqLwordm9pZCBtcnNhc193YWtldXAoc3Ry dWN0IG1yc2FzX3NvZnRjICpzYywgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZCkKK3sKKyAgICBj bWQtPmNtZF9zdGF0dXMgPSBjbWQtPmZyYW1lLT5pby5jbWRfc3RhdHVzOworCisgICAgaWYgKGNt ZC0+Y21kX3N0YXR1cyA9PSBFQ09OTlJFRlVTRUQpIAorICAgICAgICBjbWQtPmNtZF9zdGF0dXMg PSAwOworCisgICAgLyogRm9yIGRlYnVnIG9ubHkgLi4uICovIAorICAgIC8vZGV2aWNlX3ByaW50 ZihzYy0+bXJzYXNfZGV2LCJEQ01EIHJlYydkIGZvciB3YWtldXAsIHNjLT5jaGFuPSVwXG4iLCBz Yy0+Y2hhbik7CisKKyAgICBzYy0+Y2hhbiA9ICh2b2lkKikmY21kOworICAgIHdha2V1cF9vbmUo KHZvaWQgKikmc2MtPmNoYW4pOworICAgIHJldHVybjsKK30KKworLyoqCisgKiBtcnNhc19zaHV0 ZG93bl9jdGxyOiAgICAgICBJbnN0cnVjdHMgRlcgdG8gc2h1dGRvd24gdGhlIGNvbnRyb2xsZXIK KyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgU2h1dGRvd24vSGliZXJuYXRlCisgKgorICogVGhpcyBm dW5jdGlvbiBpc3N1ZXMgYSBEQ01EIGludGVybmFsIGNvbW1hbmQgdG8gRmlybXdhcmUgdG8gaW5p dGlhdGUKKyAqIHNodXRkb3duIG9mIHRoZSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCBt cnNhc19zaHV0ZG93bl9jdGxyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHVfaW50MzJfdCBvcGNv ZGUpCit7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZDsKKyAgICBzdHJ1Y3QgbXJzYXNf ZGNtZF9mcmFtZSAqZGNtZDsKKworICAgIGlmIChzYy0+YWRwcmVjb3ZlcnkgPT0gTVJTQVNfSFdf Q1JJVElDQUxfRVJST1IpCisgICAgICAgIHJldHVybjsKKworICAgIGNtZCA9IG1yc2FzX2dldF9t ZmlfY21kKHNjKTsKKyAgICBpZiAoIWNtZCkgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5t cnNhc19kZXYsIkNhbm5vdCBhbGxvY2F0ZSBmb3Igc2h1dGRvd24gY21kLlxuIik7CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKwlpZiAoc2MtPmFlbl9jbWQpCQkKKyAgICAgICAgbXJzYXNfaXNz dWVfYmxvY2tlZF9hYm9ydF9jbWQoc2MsIHNjLT5hZW5fY21kKTsKKyAgICAKKwlpZiAoc2MtPm1h cF91cGRhdGVfY21kKQorICAgICAgICBtcnNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZChzYywg c2MtPm1hcF91cGRhdGVfY21kKTsKKworICAgIGRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKyAg ICBtZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworICAgIGRjbWQtPmNt ZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHgwOworICAgIGRjbWQt PnNnZV9jb3VudCA9IDA7CisgICAgZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7Cisg ICAgZGNtZC0+dGltZW91dCA9IDA7CisgICAgZGNtZC0+cGFkXzAgPSAwOworICAgIGRjbWQtPmRh dGFfeGZlcl9sZW4gPSAwOworICAgIGRjbWQtPm9wY29kZSA9IG9wY29kZTsKKworICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwiUHJlcGFyaW5nIHRvIHNodXQgZG93biBjb250cm9sbGVy LlxuIik7CisKKyAgICBtcnNhc19pc3N1ZV9ibG9ja2VkX2NtZChzYywgY21kKTsKKyAgICBtcnNh c19yZWxlYXNlX21maV9jbWQoY21kKTsKKworICAgIHJldHVybjsKK30KKworLyoqCisgKiBtcnNh c19mbHVzaF9jYWNoZTogICAgICAgICBSZXF1ZXN0cyBGVyB0byBmbHVzaCBhbGwgaXRzIGNhY2hl cyAKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgaXNzdWVzIGEgRENNRCBpbnRlcm5hbCBjb21tYW5kIHRvIEZp cm13YXJlIHRvIGluaXRpYXRlCisgKiBmbHVzaGluZyBvZiBhbGwgY2FjaGVzLgorICovCitzdGF0 aWMgdm9pZCBtcnNhc19mbHVzaF9jYWNoZShzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAg IHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQ7CisgICAgc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUg KmRjbWQ7CisKKyAgICBpZiAoc2MtPmFkcHJlY292ZXJ5ID09IE1SU0FTX0hXX0NSSVRJQ0FMX0VS Uk9SKQorICAgICAgICByZXR1cm47CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7 CisgICAgaWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCJD YW5ub3QgYWxsb2NhdGUgZm9yIGZsdXNoIGNhY2hlIGNtZC5cbiIpOworICAgICAgICByZXR1cm47 CisgICAgfQorCisgICAgZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworICAgIG1lbXNldChkY21k LT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisgICAgZGNtZC0+Y21kID0gTUZJX0NNRF9E Q01EOworICAgIGRjbWQtPmNtZF9zdGF0dXMgPSAweDA7CisgICAgZGNtZC0+c2dlX2NvdW50ID0g MDsKKyAgICBkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfTk9ORTsKKyAgICBkY21kLT50aW1l b3V0ID0gMDsKKyAgICBkY21kLT5wYWRfMCA9IDA7CisgICAgZGNtZC0+ZGF0YV94ZmVyX2xlbiA9 IDA7CisgICAgZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0NBQ0hFX0ZMVVNIOworICAgIGRj bWQtPm1ib3guYlswXSA9IE1SX0ZMVVNIX0NUUkxfQ0FDSEUgfCBNUl9GTFVTSF9ESVNLX0NBQ0hF OworCisgICAgbXJzYXNfaXNzdWVfYmxvY2tlZF9jbWQoc2MsIGNtZCk7CisgICAgbXJzYXNfcmVs ZWFzZV9tZmlfY21kKGNtZCk7CisKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogbXJzYXNfZ2V0 X21hcF9pbmZvOiAgICAgICAgTG9hZCBhbmQgdmFsaWRhdGUgUkFJRCBtYXAgCisgKiBpbnB1dDog ICAgICAgICAgICAgICAgICAgICBBZGFwdGVyIGluc3RhbmNlIHNvZnQgc3RhdGUKKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGNhbGxzIG1yc2FzX2dldF9sZF9tYXBfaW5mbygpIGFuZCBNUl9WYWxpZGF0 ZU1hcEluZm8oKQorICogdG8gbG9hZCBhbmQgdmFsaWRhdGUgUkFJRCBtYXAuICBJdCByZXR1cm5z IDAgaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlci0KKyAqIHdpc2UuIAorICovCitzdGF0aWMgaW50IG1y c2FzX2dldF9tYXBfaW5mbyhzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreyAKKyAgIHVpbnQ4X3Qg IHJldGNvZGUgPSAwOworCisgICAgc2MtPmZhc3RfcGF0aF9pbyA9IDA7CisgICAgaWYgKCFtcnNh c19nZXRfbGRfbWFwX2luZm8oc2MpKSB7CisgICAgICAgIHJldGNvZGUgPSBNUl9WYWxpZGF0ZU1h cEluZm8oc2MpOworICAgICAgICBpZiAocmV0Y29kZSA9PSAwKSB7IAorICAgICAgICAgICAgc2Mt PmZhc3RfcGF0aF9pbyA9IDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg IH0KKyAgICByZXR1cm4gMTsKK30KKworLyoqCisgKiBtcnNhc19nZXRfbGRfbWFwX2luZm86ICAg ICAgR2V0IEZXJ3MgbGRfbWFwIHN0cnVjdHVyZQorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAg ICAgIEFkYXB0ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5h bCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBz dHJ1Y3R1cmUuICAKKyAqLworc3RhdGljIGludCBtcnNhc19nZXRfbGRfbWFwX2luZm8oc3RydWN0 IG1yc2FzX3NvZnRjICpzYykKK3sKKyAgICBpbnQgcmV0Y29kZSA9IDA7CisgICAgc3RydWN0IG1y c2FzX21maV9jbWQgKmNtZDsKKyAgICBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKyAg ICBNUl9GV19SQUlEX01BUF9BTEwgKm1hcDsKKyAgICBidXNfYWRkcl90IG1hcF9waHlzX2FkZHIg PSAwOworCisgICAgY21kID0gbXJzYXNfZ2V0X21maV9jbWQoc2MpOworICAgIGlmICghY21kKSB7 CisgICAgICAgIGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBmb3Ig bGQgbWFwIGluZm8gY21kLlxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGRj bWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKworICAgIG1hcCA9IHNjLT5yYWlkbWFwX21lbVsoc2Mt Pm1hcF9pZCAmIDEpXTsKKyAgICBtYXBfcGh5c19hZGRyID0gc2MtPnJhaWRtYXBfcGh5c19hZGRy WyhzYy0+bWFwX2lkICYgMSldOworICAgIGlmICghbWFwKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkZhaWxlZCB0byBhbGxvYyBtZW0gZm9yIGxkIG1hcCBpbmZvLlxu Iik7CisgICAgICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworICAgICAgICByZXR1cm4g KEVOT01FTSk7CisgICAgfQorICAgIG1lbXNldChtYXAsIDAsIHNpemVvZigqbWFwKSk7CisgICAg bWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7CisKKyAgICBkY21kLT5jbWQg PSBNRklfQ01EX0RDTUQ7CisgICAgZGNtZC0+Y21kX3N0YXR1cyA9IDB4RkY7CisgICAgZGNtZC0+ c2dlX2NvdW50ID0gMTsKKyAgICBkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKyAg ICBkY21kLT50aW1lb3V0ID0gMDsKKyAgICBkY21kLT5wYWRfMCA9IDA7CisgICAgZGNtZC0+ZGF0 YV94ZmVyX2xlbiA9IHNjLT5tYXBfc3o7CisgICAgZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9MRF9N QVBfR0VUX0lORk87CisgICAgZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IG1hcF9waHlz X2FkZHI7CisgICAgZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNjLT5tYXBfc3o7CisgICAg aWYgKCFtcnNhc19pc3N1ZV9wb2xsZWQoc2MsIGNtZCkpCisgICAgICAgIHJldGNvZGUgPSAwOwor ICAgIGVsc2UgIAorICAgIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi RmFpbCB0byBzZW5kIGdldCBMRCBtYXAgaW5mbyBjbWQuXG4iKTsKKyAgICAgICAgcmV0Y29kZSA9 IDE7CisgICAgfQorICAgIG1yc2FzX3JlbGVhc2VfbWZpX2NtZChjbWQpOworICAgIHJldHVybihy ZXRjb2RlKTsKK30KKworLyoqCisgKiBtcnNhc19zeW5jX21hcF9pbmZvOiAgICAgICAgR2V0IEZX J3MgbGRfbWFwIHN0cnVjdHVyZQorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgIEFkYXB0 ZXIgaW5zdGFuY2Ugc29mdCBzdGF0ZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5k IChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBzdHJ1Y3R1cmUu ICAKKyAqLworc3RhdGljIGludCBtcnNhc19zeW5jX21hcF9pbmZvKHN0cnVjdCBtcnNhc19zb2Z0 YyAqc2MpCit7CisgICAgaW50IHJldGNvZGUgPSAwLCBpOworICAgIHN0cnVjdCBtcnNhc19tZmlf Y21kICpjbWQ7CisgICAgc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisgICAgdWludDMy X3Qgc2l6ZV9zeW5jX2luZm8sIG51bV9sZHM7CisgICAgTVJfTERfVEFSR0VUX1NZTkMgKnRhcmdl dF9tYXAgPSBOVUxMOworICAgIE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwOworICAgIE1SX0xEX1JB SUQgICpyYWlkOworICAgIE1SX0xEX1RBUkdFVF9TWU5DICpsZF9zeW5jOworICAgIGJ1c19hZGRy X3QgbWFwX3BoeXNfYWRkciA9IDA7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7 CisgICAgaWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAi Q2Fubm90IGFsbG9jIGZvciBzeW5jIG1hcCBpbmZvIGNtZFxuIik7CisgICAgICAgIHJldHVybiAx OworICAgIH0KKworICAgIG1hcCA9IHNjLT5yYWlkbWFwX21lbVtzYy0+bWFwX2lkICYgMV07Cisg ICAgbnVtX2xkcyA9IG1hcC0+cmFpZE1hcC5sZENvdW50OworICAgIAorICAgIGRjbWQgPSAmY21k LT5mcmFtZS0+ZGNtZDsKKyAgICBzaXplX3N5bmNfaW5mbyA9IHNpemVvZihNUl9MRF9UQVJHRVRf U1lOQykgKiBudW1fbGRzOworICAgIG1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJ WkUpOworCisgICAgdGFyZ2V0X21hcCA9IChNUl9MRF9UQVJHRVRfU1lOQyAqKXNjLT5yYWlkbWFw X21lbVsoc2MtPm1hcF9pZCAtIDEpICYgMV07CisgICAgbWVtc2V0KHRhcmdldF9tYXAsIDAsIHNp emVvZihNUl9GV19SQUlEX01BUF9BTEwpKTsKKworICAgIG1hcF9waHlzX2FkZHIgPSBzYy0+cmFp ZG1hcF9waHlzX2FkZHJbKHNjLT5tYXBfaWQgLSAxKSAmIDFdOworCisgICAgbGRfc3luYyA9IChN Ul9MRF9UQVJHRVRfU1lOQyAqKXRhcmdldF9tYXA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVt X2xkczsgaSsrLCBsZF9zeW5jKyspIHsKKyAgICAgICAgcmFpZCA9IE1SX0xkUmFpZEdldChpLCBt YXApOworICAgICAgICBsZF9zeW5jLT50YXJnZXRJZCA9IE1SX0dldExEVGd0SWQoaSwgbWFwKTsK KyAgICAgICAgbGRfc3luYy0+c2VxTnVtID0gcmFpZC0+c2VxTnVtOworICAgIH0KKworICAgIGRj bWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAg ICBkY21kLT5zZ2VfY291bnQgPSAxOworICAgIGRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9X UklURTsKKyAgICBkY21kLT50aW1lb3V0ID0gMDsKKyAgICBkY21kLT5wYWRfMCA9IDA7CisgICAg ZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNjLT5tYXBfc3o7CisgICAgZGNtZC0+bWJveC5iWzBdID0g bnVtX2xkczsKKyAgICBkY21kLT5tYm94LmJbMV0gPSBNUlNBU19EQ01EX01CT1hfUEVORF9GTEFH OworICAgIGRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfTUFQX0dFVF9JTkZPOworICAgIGRjbWQt PnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBtYXBfcGh5c19hZGRyOworICAgIGRjbWQtPnNnbC5z Z2UzMlswXS5sZW5ndGggPSBzYy0+bWFwX3N6OworCisgICAgc2MtPm1hcF91cGRhdGVfY21kID0g Y21kOworICAgIGlmIChtcnNhc19pc3N1ZV9kY21kKHNjLCBjbWQpKSB7CisgICAgICAgIGRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkZhaWwgdG8gc2VuZCBzeW5jIG1hcCBpbmZvIGNvbW1h bmQuXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICByZXR1cm4ocmV0Y29kZSk7 Cit9CisKKy8qKgorICogbXJzYXNfZ2V0X3BkX2xpc3Q6ICAgICAgICAgICBSZXR1cm5zIEZXJ3Mg UEQgbGlzdCBzdHJ1Y3R1cmUKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRl ciBzb2Z0IHN0YXRlCisgKgorICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRv IGdldCB0aGUgRlcncyBjb250cm9sbGVyIFBECisgKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgaW5m b3JtYXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgYWJvdXQgCisgKiBzeXN0ZW0gc3Vw cG9ydGVkIGJ5IEZpcm13YXJlLgorICovCitzdGF0aWMgaW50IG1yc2FzX2dldF9wZF9saXN0KHN0 cnVjdCBtcnNhc19zb2Z0YyAqc2MpCit7CisgICAgaW50IHJldGNvZGUgPSAwLCBwZF9pbmRleCA9 IDAsIHBkX2NvdW50PTAsIHBkX2xpc3Rfc2l6ZTsKKyAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAq Y21kOworICAgIHN0cnVjdCBtcnNhc19kY21kX2ZyYW1lICpkY21kOworICAgIHN0cnVjdCBNUl9Q RF9MSVNUICpwZF9saXN0X21lbTsKKyAgICBzdHJ1Y3QgTVJfUERfQUREUkVTUyAqcGRfYWRkcjsK KyAgICBidXNfYWRkcl90IHBkX2xpc3RfcGh5c19hZGRyID0gMDsKKyAgICBzdHJ1Y3QgbXJzYXNf dG1wX2RjbWQgKnRjbWQ7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChzYyk7CisgICAg aWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fubm90 IGFsbG9jIGZvciBnZXQgUEQgbGlzdCBjbWRcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9 CisKKyAgICBkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKyAgICB0Y21kID0gbWFsbG9jKHNp emVvZihzdHJ1Y3QgbXJzYXNfdG1wX2RjbWQpLCBNX01SU0FTLCBNX05PV0FJVCk7CisgICAgcGRf bGlzdF9zaXplID0gTVJTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKKyAg ICBpZiAobXJzYXNfYWxsb2NfdG1wX2RjbWQoc2MsIHRjbWQsIHBkX2xpc3Rfc2l6ZSkgIT0gU1VD Q0VTUykgeworICAgICAgICBkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxs b2MgZG1hbWFwIGZvciBnZXQgUEQgbGlzdCBjbWRcbiIpOworICAgICAgICBtcnNhc19yZWxlYXNl X21maV9jbWQoY21kKTsKKyAgICAgICAgcmV0dXJuKEVOT01FTSk7CisgICAgfQorICAgIGVsc2Ug eworICAgICAgICBwZF9saXN0X21lbSA9IHRjbWQtPnRtcF9kY21kX21lbTsKKyAgICAgICAgcGRf bGlzdF9waHlzX2FkZHIgPSB0Y21kLT50bXBfZGNtZF9waHlzX2FkZHI7CisgICAgfQorICAgIG1l bXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisgICAgZGNtZC0+bWJveC5i WzBdID0gTVJfUERfUVVFUllfVFlQRV9FWFBPU0VEX1RPX0hPU1Q7CisgICAgZGNtZC0+bWJveC5i WzFdID0gMDsKKyAgICBkY21kLT5jbWQgPSBNRklfQ01EX0RDTUQ7CisgICAgZGNtZC0+Y21kX3N0 YXR1cyA9IDB4RkY7CisgICAgZGNtZC0+c2dlX2NvdW50ID0gMTsKKyAgICBkY21kLT5mbGFncyA9 IE1GSV9GUkFNRV9ESVJfUkVBRDsKKyAgICBkY21kLT50aW1lb3V0ID0gMDsKKyAgICBkY21kLT5w YWRfMCA9IDA7CisgICAgZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IE1SU0FTX01BWF9QRCAqIHNpemVv ZihzdHJ1Y3QgTVJfUERfTElTVCk7CisgICAgZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9QRF9MSVNU X1FVRVJZOworICAgIGRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBwZF9saXN0X3BoeXNf YWRkcjsKKyAgICBkY21kLT5zZ2wuc2dlMzJbMF0ubGVuZ3RoID0gTVJTQVNfTUFYX1BEICogc2l6 ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKKworICAgIGlmICghbXJzYXNfaXNzdWVfcG9sbGVkKHNj LCBjbWQpKSAKKyAgICAgICAgcmV0Y29kZSA9IDA7CisgICAgZWxzZSAKKyAgICAgICAgcmV0Y29k ZSA9IDE7CisKKyAgICAvKiBHZXQgdGhlIGluc3RhbmNlIFBEIGxpc3QgKi8KKyAgICBwZF9jb3Vu dCA9IE1SU0FTX01BWF9QRDsKKyAgICBwZF9hZGRyID0gcGRfbGlzdF9tZW0tPmFkZHI7CisgICAg aWYgKHJldGNvZGUgPT0gMCAmJiBwZF9saXN0X21lbS0+Y291bnQgPCBwZF9jb3VudCkgeworICAg ICAgICBtZW1zZXQoc2MtPnBkX2xpc3QsIDAsIE1SU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3Qg bXJzYXNfcGRfbGlzdCkpOworICAgICAgICBmb3IgKHBkX2luZGV4ID0gMDsgcGRfaW5kZXggPCBw ZF9saXN0X21lbS0+Y291bnQ7IHBkX2luZGV4KyspIHsKKyAgICAgICAgICAgIHNjLT5wZF9saXN0 W3BkX2FkZHItPmRldmljZUlkXS50aWQgPSBwZF9hZGRyLT5kZXZpY2VJZDsKKyAgICAgICAgICAg IHNjLT5wZF9saXN0W3BkX2FkZHItPmRldmljZUlkXS5kcml2ZVR5cGUgPSBwZF9hZGRyLT5zY3Np RGV2VHlwZTsKKyAgICAgICAgICAgIHNjLT5wZF9saXN0W3BkX2FkZHItPmRldmljZUlkXS5kcml2 ZVN0YXRlID0gTVJfUERfU1RBVEVfU1lTVEVNOworICAgICAgICAgICAgcGRfYWRkcisrOworICAg ICAgICB9CisgICAgfQorCisgICAgbXJzYXNfZnJlZV90bXBfZGNtZCh0Y21kKTsKKyAgICBtcnNh c19yZWxlYXNlX21maV9jbWQoY21kKTsKKyAgICBmcmVlKHRjbWQsIE1fTVJTQVMpOworICAgIHJl dHVybihyZXRjb2RlKTsKK30KKworLyoqCisgKiBtcnNhc19nZXRfbGRfbGlzdDogICAgICAgICAg IFJldHVybnMgRlcncyBMRCBsaXN0IHN0cnVjdHVyZQorICogaW5wdXQ6ICAgICAgICAgICAgICAg ICAgICAgICBBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29t bWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgUEQKKyAqIGxpc3Qgc3RydWN0 dXJlLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCBhYm91dAor ICogc3VwcG9ydGVkIGJ5IHRoZSBGVy4KKyAqLworc3RhdGljIGludCBtcnNhc19nZXRfbGRfbGlz dChzdHJ1Y3QgbXJzYXNfc29mdGMgKnNjKQoreworICAgIGludCBsZF9saXN0X3NpemUsIHJldGNv ZGUgPSAwLCBsZF9pbmRleCA9IDAsIGlkcyA9IDA7CisgICAgc3RydWN0IG1yc2FzX21maV9jbWQg KmNtZDsKKyAgICBzdHJ1Y3QgbXJzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKyAgICBzdHJ1Y3QgTVJf TERfTElTVCAqbGRfbGlzdF9tZW07CisgICAgYnVzX2FkZHJfdCBsZF9saXN0X3BoeXNfYWRkciA9 IDA7CisgICAgc3RydWN0IG1yc2FzX3RtcF9kY21kICp0Y21kOworCisgICAgY21kID0gbXJzYXNf Z2V0X21maV9jbWQoc2MpOworICAgIGlmICghY21kKSB7CisgICAgICAgIGRldmljZV9wcmludGYo c2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvYyBmb3IgZ2V0IExEIGxpc3QgY21kXG4iKTsKKyAg ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOwor CisgICAgdGNtZCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1yc2FzX3RtcF9kY21kKSwgTV9NUlNB UywgTV9OT1dBSVQpOworICAgIGxkX2xpc3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElT VCk7CisgICAgaWYgKG1yc2FzX2FsbG9jX3RtcF9kY21kKHNjLCB0Y21kLCBsZF9saXN0X3NpemUp ICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiQ2Fu bm90IGFsbG9jIGRtYW1hcCBmb3IgZ2V0IExEIGxpc3QgY21kXG4iKTsKKyAgICAgICAgbXJzYXNf cmVsZWFzZV9tZmlfY21kKGNtZCk7CisgICAgICAgIHJldHVybihFTk9NRU0pOworICAgIH0KKyAg ICBlbHNlIHsKKyAgICAgICAgbGRfbGlzdF9tZW0gPSB0Y21kLT50bXBfZGNtZF9tZW07CisgICAg ICAgIGxkX2xpc3RfcGh5c19hZGRyID0gdGNtZC0+dG1wX2RjbWRfcGh5c19hZGRyOworICAgIH0K KyAgICBtZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworICAgIGRjbWQt PmNtZCA9IE1GSV9DTURfRENNRDsKKyAgICBkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKyAgICBk Y21kLT5zZ2VfY291bnQgPSAxOworICAgIGRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFE OworICAgIGRjbWQtPnRpbWVvdXQgPSAwOworICAgIGRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXpl b2Yoc3RydWN0IE1SX0xEX0xJU1QpOworICAgIGRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfR0VU X0xJU1Q7CisgICAgZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGxkX2xpc3RfcGh5c19h ZGRyOworICAgIGRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IE1SX0xE X0xJU1QpOworICAgIGRjbWQtPnBhZF8wICA9IDA7CisKKyAgICBpZiAoIW1yc2FzX2lzc3VlX3Bv bGxlZChzYywgY21kKSkgCisgICAgICAgIHJldGNvZGUgPSAwOworICAgIGVsc2UgCisgICAgICAg IHJldGNvZGUgPSAxOworCisgICAgIC8qIEdldCB0aGUgaW5zdGFuY2UgTEQgbGlzdCAqLyAKKyAg ICAgaWYgKChyZXRjb2RlID09IDApICYmIChsZF9saXN0X21lbS0+bGRDb3VudCA8PSAoTUFYX0xP R0lDQUxfRFJJVkVTKSkpeworICAgICAgICBzYy0+Q3VyTGRDb3VudCA9IGxkX2xpc3RfbWVtLT5s ZENvdW50OworICAgICAgICBtZW1zZXQoc2MtPmxkX2lkcywgMHhmZiwgTVJTQVNfTUFYX0xEKTsK KyAgICAgICAgZm9yIChsZF9pbmRleCA9IDA7IGxkX2luZGV4IDwgbGRfbGlzdF9tZW0tPmxkQ291 bnQ7IGxkX2luZGV4KyspIHsKKyAgICAgICAgICAgIGlmIChsZF9saXN0X21lbS0+bGRMaXN0W2xk X2luZGV4XS5zdGF0ZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWRzID0gbGRfbGlzdF9tZW0t PmxkTGlzdFtsZF9pbmRleF0ucmVmLmxkX2NvbnRleHQudGFyZ2V0SWQ7CisgICAgICAgICAgICAg ICAgc2MtPmxkX2lkc1tpZHNdID0gbGRfbGlzdF9tZW0tPmxkTGlzdFtsZF9pbmRleF0ucmVmLmxk X2NvbnRleHQudGFyZ2V0SWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IAorCisg ICAgbXJzYXNfZnJlZV90bXBfZGNtZCh0Y21kKTsKKyAgICBtcnNhc19yZWxlYXNlX21maV9jbWQo Y21kKTsKKyAgICBmcmVlKHRjbWQsIE1fTVJTQVMpOworICAgIHJldHVybihyZXRjb2RlKTsKK30K KworLyoqCisgKiBtcnNhc19hbGxvY190bXBfZGNtZDogICAgICAgQWxsb2NhdGVzIG1lbW9yeSBm b3IgdGVtcG9yYXJ5IGNvbW1hbmQKKyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgICBBZGFw dGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wIGNvbW1h bmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplIG9mIGFsbG9jdGlvbgorICoK KyAqIEFsbG9jYXRlcyBETUFhYmxlIG1lbW9yeSBmb3IgYSB0ZW1wb3JhcnkgaW50ZXJuYWwgY29t bWFuZC4gVGhlIGFsbG9jYXRlZAorICogbWVtb3J5IGlzIGluaXRpYWxpemVkIHRvIGFsbCB6ZXJv cyB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBvZiB0aGUgZG1hIAorICogbWFwcGVkIG1lbW9yeS4K KyAqLworaW50IG1yc2FzX2FsbG9jX3RtcF9kY21kKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2MsIHN0 cnVjdCBtcnNhc190bXBfZGNtZCAqdGNtZCwgCisgICAgICAgICAgaW50IHNpemUpCit7CisgICAg aWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSggc2MtPm1yc2FzX3BhcmVudF90YWcsICAgLy8gcGFyZW50 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgICAgICAgICAgICAgICAgICAgLy8g YWxnbm1udCwgYm91bmRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVVNfU1BBQ0Vf TUFYQUREUl8zMkJJVCwvLyBsb3dhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVT X1NQQUNFX01BWEFERFIsICAgICAgLy8gaGlnaGFkZHIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBOVUxMLCAgICAgICAgICAgICAvLyBmaWx0ZXIsIGZpbHRlcmFyZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemUsICAgICAgICAgICAgICAgICAgIC8vIG1heHNpemUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvLyBt c2VnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLCAgICAgICAgICAgICAg ICAgICAvLyBtYXhzZWdzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX0RNQV9B TExPQ05PVywgICAgICAgLy8gZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBOVUxMLCAgICAgICAgICAgICAvLyBsb2NrZnVuYywgbG9ja2FyZworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0Y21kLT50bXBfZGNtZF90YWcpKSB7CisgICAgICAgIGRldmljZV9wcmlu dGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSB0bXAgZGNtZCB0YWdcbiIpOworICAg ICAgICByZXR1cm4gKEVOT01FTSk7CisgICAgfQorICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKHRj bWQtPnRtcF9kY21kX3RhZywgKHZvaWQgKiopJnRjbWQtPnRtcF9kY21kX21lbSwKKyAgICAgICAg ICAgIEJVU19ETUFfTk9XQUlULCAmdGNtZC0+dG1wX2RjbWRfZG1hbWFwKSkgeworICAgICAgICBk ZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJDYW5ub3QgYWxsb2NhdGUgdG1wIGRjbWQgbWVt XG4iKTsKKyAgICAgICAgcmV0dXJuIChFTk9NRU0pOworICAgIH0KKyAgICBpZiAoYnVzX2RtYW1h cF9sb2FkKHRjbWQtPnRtcF9kY21kX3RhZywgdGNtZC0+dG1wX2RjbWRfZG1hbWFwLAorICAgICAg ICAgICAgdGNtZC0+dG1wX2RjbWRfbWVtLCBzaXplLCBtcnNhc19hZGRyX2NiLAorICAgICAgICAg ICAgJnRjbWQtPnRtcF9kY21kX3BoeXNfYWRkciwgQlVTX0RNQV9OT1dBSVQpKSB7CisgICAgICAg IGRldmljZV9wcmludGYoc2MtPm1yc2FzX2RldiwgIkNhbm5vdCBsb2FkIHRtcCBkY21kIG1lbVxu Iik7CisgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKyAgICB9CisKKyAgICBtZW1zZXQodGNtZC0+ dG1wX2RjbWRfbWVtLCAwLCBzaXplKTsKKyAgICByZXR1cm4gKDApOworfQorCisvKioKKyAqIG1y c2FzX2ZyZWVfdG1wX2RjbWQ6ICAgICAgRnJlZSBtZW1vcnkgZm9yIHRlbXBvcmFyeSBjb21tYW5k IAorICogaW5wdXQ6ICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZGNtZCBwb2ludGVyIAor ICoKKyAqIERlYWxsb2NhdGVzIG1lbW9yeSBvZiB0aGUgdGVtcG9yYXJ5IGNvbW1hbmQgZm9yIHVz ZSBpbiB0aGUgY29uc3RydWN0aW9uCisgKiBvZiB0aGUgaW50ZXJuYWwgRENNRC4KKyAqLwordm9p ZCBtcnNhc19mcmVlX3RtcF9kY21kKHN0cnVjdCBtcnNhc190bXBfZGNtZCAqdG1wKQoreworICAg IGlmICh0bXAtPnRtcF9kY21kX3BoeXNfYWRkcikKKyAgICAgICAgYnVzX2RtYW1hcF91bmxvYWQo dG1wLT50bXBfZGNtZF90YWcsIHRtcC0+dG1wX2RjbWRfZG1hbWFwKTsKKyAgICBpZiAodG1wLT50 bXBfZGNtZF9tZW0gIT0gTlVMTCkKKyAgICAgICAgYnVzX2RtYW1lbV9mcmVlKHRtcC0+dG1wX2Rj bWRfdGFnLCB0bXAtPnRtcF9kY21kX21lbSwgdG1wLT50bXBfZGNtZF9kbWFtYXApOworICAgIGlm ICh0bXAtPnRtcF9kY21kX3RhZyAhPSBOVUxMKQorICAgICAgICBidXNfZG1hX3RhZ19kZXN0cm95 KHRtcC0+dG1wX2RjbWRfdGFnKTsKK30KKworLyoqCisgKiBtcnNhc19pc3N1ZV9ibG9ja2VkX2Fi b3J0X2NtZDogICAgICAgQWJvcnRzIHByZXZpb3VzbHkgaXNzdWVkIGNtZAorICogaW5wdXQ6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzbHkgaXNzdWVkIGNtZCB0byBi ZSBhYm9ydGVkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFib3J0IHByZXZpb3Vz bHkgaXNzdWVkIGNvbW1hbmRzLCBzdWNoIGFzIEFFTiBhbmQgCisgKiBSQUlEIG1hcCBzeW5jIG1h cCBjb21tYW5kcy4gIFRoZSBhYm9ydCBjb21tYW5kIGlzIHNlbnQgYXMgYSBEQ01EIGludGVybmFs IAorICogY29tbWFuZCBhbmQgc3Vic2VxdWVudGx5IHRoZSBkcml2ZXIgd2lsbCB3YWl0IGZvciBh IHJldHVybiBzdGF0dXMuICBUaGUgCisgKiBtYXggd2FpdCB0aW1lIGlzIE1SU0FTX0lOVEVSTkFM X0NNRF9XQUlUX1RJTUUgc2Vjb25kcy4gCisgKi8KK3N0YXRpYyBpbnQgbXJzYXNfaXNzdWVfYmxv Y2tlZF9hYm9ydF9jbWQoc3RydWN0IG1yc2FzX3NvZnRjICpzYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1yc2FzX21maV9jbWQgKmNtZF90b19hYm9y dCkKK3sKKyAgICBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kOworICAgIHN0cnVjdCBtcnNhc19h Ym9ydF9mcmFtZSAqYWJvcnRfZnI7CisgICAgdV9pbnQ4X3QgcmV0Y29kZSA9IDA7CisgICAgdW5z aWduZWQgbG9uZyB0b3RhbF90aW1lID0gMDsKKyAgICB1X2ludDhfdCBtYXhfd2FpdCA9IE1SU0FT X0lOVEVSTkFMX0NNRF9XQUlUX1RJTUU7CisKKyAgICBjbWQgPSBtcnNhc19nZXRfbWZpX2NtZChz Yyk7CisgICAgaWYgKCFjbWQpIHsKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2 LCAiQ2Fubm90IGFsbG9jIGZvciBhYm9ydCBjbWRcbiIpOworICAgICAgICByZXR1cm4oMSk7Cisg ICAgfQorCisgICAgYWJvcnRfZnIgPSAmY21kLT5mcmFtZS0+YWJvcnQ7CisKKyAgICAvKiBQcmVw YXJlIGFuZCBpc3N1ZSB0aGUgYWJvcnQgZnJhbWUgKi8KKyAgICBhYm9ydF9mci0+Y21kID0gTUZJ X0NNRF9BQk9SVDsKKyAgICBhYm9ydF9mci0+Y21kX3N0YXR1cyA9IDB4RkY7CisgICAgYWJvcnRf ZnItPmZsYWdzID0gMDsKKyAgICBhYm9ydF9mci0+YWJvcnRfY29udGV4dCA9IGNtZF90b19hYm9y dC0+aW5kZXg7CisgICAgYWJvcnRfZnItPmFib3J0X21maV9waHlzX2FkZHJfbG8gPSBjbWRfdG9f YWJvcnQtPmZyYW1lX3BoeXNfYWRkcjsKKyAgICBhYm9ydF9mci0+YWJvcnRfbWZpX3BoeXNfYWRk cl9oaSA9IDA7CisKKyAgICBjbWQtPnN5bmNfY21kID0gMTsKKyAgICBjbWQtPmNtZF9zdGF0dXMg PSAweEZGOworCisgICAgaWYgKG1yc2FzX2lzc3VlX2RjbWQoc2MsIGNtZCkpIHsKKyAgICAgICAg ZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiRmFpbCB0byBzZW5kIGFib3J0IGNvbW1hbmQu XG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIHRoaXMg Y21kIHRvIGNvbXBsZXRlICovCisgICAgc2MtPmNoYW4gPSAodm9pZCopJmNtZDsKKyAgICB3aGls ZSAoMSkgeworICAgICAgIGlmIChjbWQtPmNtZF9zdGF0dXMgPT0gMHhGRil7CisgICAgICAgICAg IHRzbGVlcCgodm9pZCAqKSZzYy0+Y2hhbiwgMCwgIm1yc2FzX3NsZWVwIiwgaHopOworICAgICAg IH0KKyAgICAgICBlbHNlCisgICAgICAgICAgIGJyZWFrOworICAgICAgIHRvdGFsX3RpbWUrKzsK KyAgICAgICBpZiAodG90YWxfdGltZSA+PSBtYXhfd2FpdCkgeworICAgICAgICAgICBkZXZpY2Vf cHJpbnRmKHNjLT5tcnNhc19kZXYsICJBYm9ydCBjbWQgdGltZWQgb3V0IGFmdGVyICVkIHNlYy5c biIsIG1heF93YWl0KTsKKyAgICAgICAgICAgcmV0Y29kZSA9IDE7CisgICAgICAgICAgIGJyZWFr OworICAgICAgIH0gCisgICAgfQorCisgICAgY21kLT5zeW5jX2NtZCA9IDA7CisgICAgbXJzYXNf cmVsZWFzZV9tZmlfY21kKGNtZCk7CisgICAgcmV0dXJuKHJldGNvZGUpOworfQorCisvKioKKyAq IG1yc2FzX2NvbXBsZXRlX2Fib3J0OiAgICAgIENvbXBsZXRlcyBhYm9ydGluZyBhIGNvbW1hbmQK KyAqIGlucHV0OiAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgc29mdCBzdGF0ZQorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ21kIHRoYXQgd2FzIGlzc3VlZCB0byBhYm9ydCBhbm90 aGVyIGNtZAorICoKKyAqIFRoZSBtcnNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZCgpIGZ1bmN0 aW9uIHdhaXRzIGZvciB0aGUgY29tbWFuZCBzdGF0dXMKKyAqIHRvIGNoYW5nZSBhZnRlciBzZW5k aW5nIHRoZSBjb21tYW5kLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSAKKyAqIG1yc2Fz X2NvbXBsZXRlX21wdG1maV9wYXNzdGhydSgpIHRvIHdha2UgdXAgdGhlIHNsZWVwIHRocmVhZCBh c3NvY2lhdGVkLgorICovCit2b2lkIG1yc2FzX2NvbXBsZXRlX2Fib3J0KHN0cnVjdCBtcnNhc19z b2Z0YyAqc2MsIHN0cnVjdCBtcnNhc19tZmlfY21kICpjbWQpCit7CisgICAgaWYgKGNtZC0+c3lu Y19jbWQpIHsKKyAgICAgICAgY21kLT5zeW5jX2NtZCA9IDA7CisgICAgICAgIGNtZC0+Y21kX3N0 YXR1cyA9IDA7CisgICAgICAgIHNjLT5jaGFuID0gKHZvaWQqKSZjbWQ7CisgICAgICAgIHdha2V1 cF9vbmUoKHZvaWQgKikmc2MtPmNoYW4pOworICAgIH0KKyAgICByZXR1cm47Cit9CisKKy8qKgor ICogbXJzYXNfYWVuX2hhbmRsZXI6CQlDYWxsYmFjayBmdW5jdGlvbiBmb3IgQUVOIHByb2Nlc3Np bmcgZnJvbSB0aHJlYWQgY29udGV4dC4KKyAqIGlucHV0OgkJCQkJQWRhcHRlciBzb2Z0IHN0YXRl CisgKgorICovCit2b2lkIG1yc2FzX2Flbl9oYW5kbGVyKHN0cnVjdCBtcnNhc19zb2Z0YyAqc2Mp Cit7CisJdW5pb24gbXJzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjbGFzc19sb2NhbGU7CisJaW50ICAg ICBkb3NjYW4gPSAwOworCXVfaW50MzJfdCBzZXFfbnVtOworCWludCBlcnJvcjsKKworCWlmICgh c2MpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCAiaW52YWxpZCBpbnN0YW5jZSFc biIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNjLT5ldnRfZGV0YWlsX21lbSkgeworICAgICAg ICAgICAgICAgIG1yc2FzX2RwcmludChzYywgTVJTQVNfQUVOLCAiTFNJIERlYnVnOiBFdmVudCBk ZXRhaWwgY29kZS0gJXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzYy0+ZXZ0X2RldGFp bF9tZW0tPmNvZGUpOworCQlzd2l0Y2ggKHNjLT5ldnRfZGV0YWlsX21lbS0+Y29kZSkgeworCQkJ Y2FzZSBNUl9FVlRfUERfSU5TRVJURUQ6CisJCQkJbXJzYXNfZ2V0X3BkX2xpc3Qoc2MpOworCQkJ CW1yc2FzX2J1c19zY2FuX3NpbShzYywgc2MtPnNpbV8xKTsKKwkJCQlkb3NjYW4gPSAwOworCQkJ CWJyZWFrOworCQkJY2FzZSBNUl9FVlRfUERfUkVNT1ZFRDoKKwkJCQltcnNhc19nZXRfcGRfbGlz dChzYyk7CisJCQkJbXJzYXNfYnVzX3NjYW5fc2ltKHNjLCBzYy0+c2ltXzEpOworCQkJCWRvc2Nh biA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIE1SX0VWVF9MRF9PRkZMSU5FOgorCQkJY2FzZSBN Ul9FVlRfQ0ZHX0NMRUFSRUQ6CisJCQljYXNlIE1SX0VWVF9MRF9ERUxFVEVEOgorCQkJCW1yc2Fz X2J1c19zY2FuX3NpbShzYywgc2MtPnNpbV8wKTsKKwkJCQlkb3NjYW4gPSAwOworCQkJCWJyZWFr OwkJCisJCQljYXNlIE1SX0VWVF9MRF9DUkVBVEVEOgorCQkJCW1yc2FzX2dldF9sZF9saXN0KHNj KTsKKwkJCQltcnNhc19idXNfc2Nhbl9zaW0oc2MsIHNjLT5zaW1fMCk7CisJCQkJZG9zY2FuID0g MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTVJfRVZUX0NUUkxfSE9TVF9CVVNfU0NBTl9SRVFVRVNU RUQ6CisJCQljYXNlIE1SX0VWVF9GT1JFSUdOX0NGR19JTVBPUlRFRDogCisJCQljYXNlIE1SX0VW VF9MRF9TVEFURV9DSEFOR0U6CisJCQkJZG9zY2FuID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZG9zY2FuID0gMDsKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWRldmlj ZV9wcmludGYoc2MtPm1yc2FzX2RldiwgImludmFsaWQgZXZ0X2RldGFpbFxuIik7CisJCXJldHVy bjsKKwl9CisJaWYgKGRvc2NhbikgeworCQltcnNhc19nZXRfcGRfbGlzdChzYyk7CisgICAgICAg IG1yc2FzX2RwcmludChzYywgTVJTQVNfQUVOLCAic2Nhbm5pbmcgLi4uc2ltIDFcbiIpOworCQlt cnNhc19idXNfc2Nhbl9zaW0oc2MsIHNjLT5zaW1fMSk7CisJCW1yc2FzX2dldF9sZF9saXN0KHNj KTsKKwkJbXJzYXNfZHByaW50KHNjLCBNUlNBU19BRU4sICJzY2FubmluZyAuLi5zaW0gMFxuIik7 CisJCW1yc2FzX2J1c19zY2FuX3NpbShzYywgc2MtPnNpbV8wKTsKKwl9CisKKwlzZXFfbnVtID0g c2MtPmV2dF9kZXRhaWxfbWVtLT5zZXFfbnVtICsgMTsKKworCS8vIFJlZ2lzdGVyIEFFTiB3aXRo IEZXIGZvciBsYXRlc3Qgc2VxdWVuY2UgbnVtYmVyIHBsdXMgMQorCWNsYXNzX2xvY2FsZS5tZW1i ZXJzLnJlc2VydmVkID0gMDsKKwljbGFzc19sb2NhbGUubWVtYmVycy5sb2NhbGUgPSBNUl9FVlRf TE9DQUxFX0FMTDsKKwljbGFzc19sb2NhbGUubWVtYmVycy5jbGFzcyA9IE1SX0VWVF9DTEFTU19E RUJVRzsKKwkKKwlpZiAoc2MtPmFlbl9jbWQgIT0gTlVMTCApCisJCXJldHVybiA7IAorCisJbXR4 X2xvY2soJnNjLT5hZW5fbG9jayk7CisJZXJyb3IgPSBtcnNhc19yZWdpc3Rlcl9hZW4oc2MsIHNl cV9udW0sCisJCQkJCWNsYXNzX2xvY2FsZS53b3JkKTsKKwltdHhfdW5sb2NrKCZzYy0+YWVuX2xv Y2spOworCisJaWYgKGVycm9yKQorCQlkZXZpY2VfcHJpbnRmKHNjLT5tcnNhc19kZXYsICJyZWdp c3RlciBhZW4gZmFpbGVkIGVycm9yICV4XG4iLCBlcnJvcik7CisKK30KKworCisvKioKKyAqIG1y c2FzX2NvbXBsZXRlX2FlbjogICAgICAgIAlDb21wbGV0ZXMgQUVOIGNvbW1hbmQKKyAqIGlucHV0 OiAgICAgICAgICAgICAgICAgICAgIAlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAlDbWQgdGhhdCB3YXMgaXNzdWVkIHRvIGFib3J0IGFub3RoZXIgY21k CisgKgorICogCQkJCVRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZnJvbSBJU1IgYW5kIHdp bGwgY29udGludWUgCisgKiAJCQkJZXZlbnQgcHJvY2Vzc2luZyBmcm9tIHRocmVhZCBjb250ZXh0 IGJ5IGVucXVldWluZyB0YXNrCisgKiAJCQkJaW4gZXZfdHEgKGNhbGxiYWNrIGZ1bmN0aW9uICJt cnNhc19hZW5faGFuZGxlciIpLgorICovCit2b2lkIG1yc2FzX2NvbXBsZXRlX2FlbihzdHJ1Y3Qg bXJzYXNfc29mdGMgKnNjLCBzdHJ1Y3QgbXJzYXNfbWZpX2NtZCAqY21kKQoreworCS8qCisJKiBE b24ndCBzaWduYWwgYXBwIGlmIGl0IGlzIGp1c3QgYW4gYWJvcnRlZCBwcmV2aW91c2x5IHJlZ2lz dGVyZWQgYWVuCisJKi8KKwlpZiAoKCFjbWQtPmFib3J0X2FlbikgJiYgKHNjLT5yZW1vdmVfaW5f cHJvZ3Jlc3MgPT0gMCkpIHsKKwkJLyogVE8gRE8gKD8pICovCisJfQorCWVsc2UKKwkJY21kLT5h Ym9ydF9hZW4gPSAwOworCisJc2MtPmFlbl9jbWQgPSBOVUxMOworCW1yc2FzX3JlbGVhc2VfbWZp X2NtZChjbWQpOworCisJaWYgKCFzYy0+cmVtb3ZlX2luX3Byb2dyZXNzKQorCQl0YXNrcXVldWVf ZW5xdWV1ZShzYy0+ZXZfdHEsICZzYy0+ZXZfdGFzayk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRp YyBkZXZpY2VfbWV0aG9kX3QgbXJzYXNfbWV0aG9kc1tdID0geworICAgIERFVk1FVEhPRChkZXZp Y2VfcHJvYmUsICAgICBtcnNhc19wcm9iZSksCisgICAgREVWTUVUSE9EKGRldmljZV9hdHRhY2gs ICAgIG1yc2FzX2F0dGFjaCksCisgICAgREVWTUVUSE9EKGRldmljZV9kZXRhY2gsICAgIG1yc2Fz X2RldGFjaCksCisgICAgREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLCAgIG1yc2FzX3N1c3BlbmQp LAorICAgIERFVk1FVEhPRChkZXZpY2VfcmVzdW1lLCAgICBtcnNhc19yZXN1bWUpLAorICAgIERF Vk1FVEhPRChidXNfcHJpbnRfY2hpbGQsICBidXNfZ2VuZXJpY19wcmludF9jaGlsZCksCisgICAg REVWTUVUSE9EKGJ1c19kcml2ZXJfYWRkZWQsIGJ1c19nZW5lcmljX2RyaXZlcl9hZGRlZCksCisg ICAgeyAwLCAwIH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBtcnNhc19kcml2ZXIgPSB7CisgICAg Im1yc2FzIiwKKyAgICBtcnNhc19tZXRob2RzLAorICAgIHNpemVvZihzdHJ1Y3QgbXJzYXNfc29m dGMpCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCAgICAgICBtcnNhc19kZXZjbGFzczsKK0RSSVZF Ul9NT0RVTEUobXJzYXMsIHBjaSwgbXJzYXNfZHJpdmVyLCBtcnNhc19kZXZjbGFzcywgMCwgMCk7 CitNT0RVTEVfREVQRU5EKG1yc2FzLCBjYW0sIDEsMSwxKTsKKwpJbmRleDogc3lzL2Rldi9tcnNh cy9tcnNhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvbXJzYXMvbXJzYXMuaAkocmV2aXNpb24g MCkKKysrIHN5cy9kZXYvbXJzYXMvbXJzYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIz MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIExTSSBDb3JwLgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqIEF1dGhvcjogTWFyaWFuIENob3kKKyAqIE1vZGlmaWVkIGJ5IERlc2Fp IEthc2h5YXAgKGthc2h5YXAuZGVzYWlAbHNpLmNvbSkKKyAqIE1vZGlmaWVkIGJ5IFNheGVuYSBT dW1pdCAoc3VtaXQuc2F4ZW5hQGxzaS5jb20pCisgKiBTdXBwb3J0OiBmcmVlYnNkcmFpZEBsc2ku Y29tCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxP UkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF CisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQg aW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1 dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBv ZmZpY2lhbCBwb2xpY2llcyxlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVl QlNEIFByb2plY3QuCisgKgorICogU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkZmJzZEBsc2ku Y29tPgorICogTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxw aXRhcywgQ0EgOTUwMzUKKyAqICAgIEFUVE46IE1lZ2FSYWlkIEZyZWVCU0QKKyAqCisgKi8KKwor I2lmbmRlZiBNUlNBU19ICisjZGVmaW5lIE1SU0FTX0gKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5o PiAgICAgICAgLyogZGVmaW5lcyB1c2VkIGluIGtlcm5lbC5oICovCisjaW5jbHVkZSA8c3lzL21v ZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+Cisj aW5jbHVkZSA8c3lzL2Vycm5vLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPiAgICAgICAvKiB0 eXBlcyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLworI2luY2x1ZGUgPHN5cy9jb25m Lmg+ICAgICAgICAgLyogY2RldnN3IHN0cnVjdCAqLworI2luY2x1ZGUgPHN5cy91aW8uaD4gICAg ICAgICAgLyogdWlvIHN0cnVjdCAqLworI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRl IDxzeXMvYnVzLmg+ICAgICAgICAgIC8qIHN0cnVjdHMsIHByb3RvdHlwZXMgZm9yIHBjaSBidXMg c3R1ZmYgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4u aD4KKyNpbmNsdWRlIDxtYWNoaW5lL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hdG9t aWMuaD4KKworI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+ICAgLyogRm9yIHBjaV9nZXQgbWFj cm9zISAqLworI2luY2x1ZGUgPGRldi9wY2kvcGNpcmVnLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNp bmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRl IDxzeXMvc2VsaW5mby5oPgorCisvKgorICogRGV2aWNlIElEcyBhbmQgUENJCisgKi8KKyNkZWZp bmUgTVJTQVNfVEJPTFQgICAgICAgICAgMHgwMDViCisjZGVmaW5lIE1SU0FTX0lOVkFERVIgICAg ICAgIDB4MDA1ZCAKKyNkZWZpbmUgTVJTQVNfUENJX0JBUjAgICAgICAgMHgxMAorI2RlZmluZSBN UlNBU19QQ0lfQkFSMSAgICAgICAweDE0CisjZGVmaW5lIE1SU0FTX1BDSV9CQVIyICAgICAgIDB4 MUMKKworLyoKKyAqIEZpcm13YXJlIFN0YXRlIERlZmluZXMgCisgKi8KKyNkZWZpbmUgTVJTQVNf RldTVEFURV9NQVhDTURfTUFTSyAgICAweDAwMDBGRkZGIAorI2RlZmluZSBNUlNBU19GV1NUQVRF X1NHRV9NQVNLICAgICAgIDB4MDBGRjAwMDAgCisjZGVmaW5lIE1SU0FTX0ZXX1NUQVRFX0NITkdf SU5URVJSVVBUIDEgCisKKy8qCisgKiBNZXNzYWdlIEZyYW1lIERlZmluZXMKKyAqLworI2RlZmlu ZSBNUlNBU19TRU5TRV9MRU4gICA5NiAKKyNkZWZpbmUgTVJTQVNfRlVTSU9OX01BWF9SRVNFVF9U UklFUyAgICAgICAgICAgICAgICAzCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIERlZmluZXMgCisg Ki8KKyNkZWZpbmUgQllURV9BTElHTk1FTlQgICAgICAgIDEgCisjZGVmaW5lIE1SU0FTX01BWF9O QU1FX0xFTkdUSCAzMiAgCisjZGVmaW5lIE1SU0FTX1ZFUlNJT04gIjUuNTA3LjAyLjAwLWZic2Qi ICAgICAgICAKKyNkZWZpbmUgTVJTQVNfVUxPTkdfTUFYICAgICAweEZGRkZGRkZGRkZGRkZGRkYK KyNkZWZpbmUgTVJTQVNfREVGQVVMVF9USU1FT1VUIDB4MTQgLy90ZW1wIAorI2RlZmluZSBET05F IDAKKyNkZWZpbmUgTVJTQVNfUEFHRV9TSVpFICAgICAgIDQwOTYKKyNkZWZpbmUgTVJTQVNfUkVT RVRfTk9USUNFX0lOVEVSVkFMIDUKKyNkZWZpbmUgTVJTQVNfSU9fVElNRU9VVCAxODAwMDAgICAg ICAvKiAxODAgc2Vjb25kIHRpbWVvdXQgKi8KKyNkZWZpbmUgTVJTQVNfTERJT19RVUVVRV9ERVBU SCAgIDcwICAvKiA3MCBwZXJjZW50IGFzIGRlZmF1bHQgKi8KKworLyogCisgQm9vbGVhbiB0eXBl cyAKKyovCitlbnVtIGVyciB7IFNVQ0NFU1MsIEZBSUwgfTsKKworTUFMTE9DX0RFQ0xBUkUoTV9N UlNBUyk7CitTWVNDVExfREVDTChfaHdfbXJzYXMpOworCisjZGVmaW5lIE1SU0FTX0lORk8gICAg ICAoMSA8PCAwKQorI2RlZmluZSBNUlNBU19UUkFDRSAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTVJT QVNfRkFVTFQgICAgICgxIDw8IDIpCisjZGVmaW5lIE1SU0FTX09DUiAgICAgICAgICAgICAgICgx IDw8IDMpCisjZGVmaW5lIE1SU0FTX1RPVVQgICAgICBNUlNBU19PQ1IKKyNkZWZpbmUgTVJTQVNf QUVOICAgICAgICgxIDw8IDQpCisKKyNkZWZpbmUgbXJzYXNfZHByaW50KHNjLCBsZXZlbCwgbXNn LCBhcmdzLi4uKSAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGlmIChzYy0+bXJzYXNfZGVidWcgJiBsZXZlbCkgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgZGV2aWNlX3ByaW50ZihzYy0+bXJzYXNfZGV2LCBtc2cs ICMjYXJncyk7ICBcCit9IHdoaWxlICgwKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBS YWlkIENvbnRleHQgc3RydWN0dXJlIHdoaWNoIGRlc2NyaWJlcyBNZWdhUkFJRCBzcGVjaWZpYyBJ TyBQYXJhbWVudGVycworICogVGhpcyByZXNpZGVzIGF0IG9mZnNldCAweDYwIHdoZXJlIHRoZSBT R0wgbm9ybWFsbHkgc3RhcnRzIGluIE1QVCBJTyBGcmFtZXMKKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCit0eXBlZGVmIHN0cnVjdCBfUkFJRF9DT05URVhUIHsKKyAgICB1X2ludDhfdCAgICAgIFR5 cGU6NDsgICAgICAgICAgICAgLy8gMHgwMAorICAgIHVfaW50OF90ICAgICAgbnNlZzo0OyAgICAg ICAgICAgICAvLyAweDAwCisgICAgdV9pbnQ4X3QgICAgICByZXN2ZDA7ICAgICAgICAgICAgIC8v IDB4MDEKKyAgICB1X2ludDE2X3QgICAgIHRpbWVvdXRWYWx1ZTsgICAgICAgLy8gMHgwMiAtMHgw MworICAgIHVfaW50OF90ICAgICAgcmVnTG9ja0ZsYWdzOyAgICAgICAvLyAweDA0CisgICAgdV9p bnQ4X3QgICAgICByZXN2ZDE7ICAgICAgICAgICAgIC8vIDB4MDUKKyAgICB1X2ludDE2X3QgICAg IFZpcnR1YWxEaXNrVGd0SWQ7ICAgLy8gMHgwNiAtMHgwNworICAgIHVfaW50NjRfdCAgICAgcmVn TG9ja1Jvd0xCQTsgICAgICAvLyAweDA4IC0gMHgwRgorICAgIHVfaW50MzJfdCAgICAgcmVnTG9j a0xlbmd0aDsgICAgICAvLyAweDEwIC0gMHgxMworICAgIHVfaW50MTZfdCAgICAgbmV4dExNSWQ7 ICAgICAgICAgICAvLyAweDE0IC0gMHgxNQorICAgIHVfaW50OF90ICAgICAgZXhTdGF0dXM7ICAg ICAgICAgICAvLyAweDE2CisgICAgdV9pbnQ4X3QgICAgICBzdGF0dXM7ICAgICAgICAgICAgIC8v IDB4MTcgc3RhdHVzCisgICAgdV9pbnQ4X3QgICAgICBSQUlERmxhZ3M7ICAvLyAweDE4IHJlc3Zk Wzc6Nl0saW9TdWJUeXBlWzU6NF0scmVzdmRbMzoxXSxwcmVmZXJyZWRDcHVbMF0KKyAgICB1X2lu dDhfdCAgICAgIG51bVNHRTsgICAgICAgIC8vIDB4MTkgbnVtU2dlOyBub3QgaW5jbHVkaW5nIGNo YWluIGVudHJpZXMgCisgICAgdV9pbnQxNl90ICAgICBjb25maWdTZXFOdW07ICAgLy8gMHgxQSAt MHgxQgorICAgIHVfaW50OF90ICAgICAgc3BhbkFybTsgICAgICAgICAgICAvLyAweDFDIHNwYW5b Nzo1XSwgYXJtWzQ6MF0gCisgICAgdV9pbnQ4X3QgICAgICByZXN2ZDJbM107ICAgICAgICAgIC8v IDB4MUQtMHgxZiAKK30gUkFJRF9DT05URVhUOworCisKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBN UEkyIERlZmluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9J T0NfSU5JVCAgICAgICAgICAgICAgKDB4MDIpIC8qIElPQyBJbml0ICovCisjZGVmaW5lIE1QSTJf V0hPSU5JVF9IT1NUX0RSSVZFUiAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1ZFUlNJ T05fTUFKT1IgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9WRVJTSU9OX01J Tk9SICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9N QVNLICAgICAgICAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9TSElG VCAgICAgICAgICAgICg4KQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfTUFTSyAgICAgICAg ICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfU0hJRlQgICAgICAgICAg ICAoMCkKKyNkZWZpbmUgTVBJMl9WRVJTSU9OICgoTVBJMl9WRVJTSU9OX01BSk9SIDw8IE1QSTJf VkVSU0lPTl9NQUpPUl9TSElGVCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgTVBJMl9WRVJT SU9OX01JTk9SKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAo MHgxMCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVYgICAgICAgICAgICAgKDB4MDAp CisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9NQVNLICAgICAgICgweEZGMDApCisj ZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9TSElGVCAgICAgICg4KQorI2RlZmluZSBN UEkyX0hFQURFUl9WRVJTSU9OX0RFVl9NQVNLICAgICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEky X0hFQURFUl9WRVJTSU9OX0RFVl9TSElGVCAgICAgICAoMCkKKyNkZWZpbmUgTVBJMl9IRUFERVJf VkVSU0lPTiAoKE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCA8PCA4KSB8IE1QSTJfSEVBREVSX1ZF UlNJT05fREVWKQorI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX0lPQ1BMQk5UQV9BRERSICAg ICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTkNfUFJJX1JFRlRBRyAg ICAoMHg4MDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfUkVGVEFHICAg ICAgKDB4MDQwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFTU9WRV9P UCAgICgweDAwMDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19BUFBUQUcg ICAgICAoMHgwMjAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfR1VBUkQg ICAgICAgKDB4MDEwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOU0VSVF9PUCAg ICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUICAg ICAgICAgICAoMHgwMCkgLyogU0NTSSBJTyAqLworI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9G TEFHU19ISUdIX1BSSU9SSVRZICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZM QUdTX1NDU0lfSU8gICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfNjRfQklU X0FERFJFU1NJTkcgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1dS SVRFICAgICAgICAgICAgICAgKDB4MDEwMDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRS T0xfUkVBRCAgICAgICAgICAgICAgICAoMHgwMjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SRVFfREVT Q1JJUFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX1JQWV9ERVND UklQVF9GTEFHU19VTlVTRUQgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NS SVBUX0ZMQUdTX1NDU0lfSU9fU1VDQ0VTUyAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJ UFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1dSU0VRX0ZMVVNI X0tFWV9WQUxVRSAgICAgICAgICAgICAgKDB4MCkKKyNkZWZpbmUgTVBJMl9XUklURV9TRVFVRU5D RV9PRkZTRVQgICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1dSU0VRXzFT VF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4RikKKyNkZWZpbmUgTVBJMl9XUlNFUV8yTkRf S0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweDQpCisjZGVmaW5lIE1QSTJfV1JTRVFfM1JEX0tF WV9WQUxVRSAgICAgICAgICAgICAgICAoMHhCKQorI2RlZmluZSBNUEkyX1dSU0VRXzRUSF9LRVlf VkFMVUUgICAgICAgICAgICAgICAgKDB4MikKKyNkZWZpbmUgTVBJMl9XUlNFUV81VEhfS0VZX1ZB TFVFICAgICAgICAgICAgICAgICgweDcpCisjZGVmaW5lIE1QSTJfV1JTRVFfNlRIX0tFWV9WQUxV RSAgICAgICAgICAgICAgICAoMHhEKQorCisjaWZuZGVmIE1QSTJfUE9JTlRFUgorI2RlZmluZSBN UEkyX1BPSU5URVIgICAgICoKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIE1QSTIgU3RydWN0dXJlcworICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTI1X0lFRUVfU0dFX0NI QUlONjQKK3sKKyAgICB1X2ludDY0X3QgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworICAg IHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICB1X2ludDE2X3QgICAg ICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAg ICAgICAgTmV4dENoYWluT2Zmc2V0OworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAg IEZsYWdzOworfSBNUEkyNV9JRUVFX1NHRV9DSEFJTjY0LCBNUEkyX1BPSU5URVIgUFRSX01QSTI1 X0lFRUVfU0dFX0NIQUlONjQsCisgICAgTXBpMjVJZWVlU2dlQ2hhaW42NF90LCBNUEkyX1BPSU5U RVIgcE1waTI1SWVlZVNnZUNoYWluNjRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1NJ TVBMRV9VTklPTgoreworICAgIHVfaW50MzJfdCAgICAgICAgICAgIEZsYWdzTGVuZ3RoOworICAg IHVuaW9uCisgICAgeworICAgICAgICB1X2ludDMyX3QgICAgICAgIEFkZHJlc3MzMjsKKyAgICAg ICAgdV9pbnQ2NF90ICAgICAgICBBZGRyZXNzNjQ7CisgICAgfSB1OworfSBNUEkyX1NHRV9TSU1Q TEVfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfU0lNUExFX1VOSU9OLAorICAgIE1w aTJTR0VTaW1wbGVVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VTaW1wbGVVbmlvbl90Owor Cit0eXBlZGVmIHN0cnVjdAoreworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIENE QlsyMF07ICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgdV9pbnQzMl90ICAgICAg ICAgICAgICAgICAgICAgUHJpbWFyeVJlZmVyZW5jZVRhZzsgICAgICAgIC8qIDB4MTQgKi8KKyAg ICB1X2ludDE2X3QgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5QXBwbGljYXRpb25UYWc7ICAg ICAgLyogMHgxOCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlB cHBsaWNhdGlvblRhZ01hc2s7ICAvKiAweDFBICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAg ICAgICAgICAgVHJhbnNmZXJMZW5ndGg7ICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9T Q1NJX0lPX0NEQl9FRURQMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX0NEQl9FRURQ MzIsCisgICAgTXBpMlNjc2lJb0NkYkVlZHAzMl90LCBNUEkyX1BPSU5URVIgcE1waTJTY3NpSW9D ZGJFZWRwMzJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX0NIQUlOX1VOSU9OCit7Cisg ICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOworICAgIHVfaW50OF90ICAg ICAgICAgICAgICAgICAgICAgIE5leHRDaGFpbk9mZnNldDsKKyAgICB1X2ludDhfdCAgICAgICAg ICAgICAgICAgICAgICBGbGFnczsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgdV9pbnQzMl90 ICAgICAgICAgICAgICAgICBBZGRyZXNzMzI7CisgICAgICAgIHVfaW50NjRfdCAgICAgICAgICAg ICAgICAgQWRkcmVzczY0OworICAgIH0gdTsKK30gTVBJMl9TR0VfQ0hBSU5fVU5JT04sIE1QSTJf UE9JTlRFUiBQVFJfTVBJMl9TR0VfQ0hBSU5fVU5JT04sCisgICAgTXBpMlNHRUNoYWluVW5pb25f dCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFQ2hhaW5Vbmlvbl90OworCit0eXBlZGVmIHN0cnVjdCBf TVBJMl9JRUVFX1NHRV9TSU1QTEUzMgoreworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAg ICAgIEFkZHJlc3M7CisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgICAgRmxhZ3NMZW5n dGg7Cit9IE1QSTJfSUVFRV9TR0VfU0lNUExFMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JRUVF X1NHRV9TSU1QTEUzMiwKKyAgICBNcGkySWVlZVNnZVNpbXBsZTMyX3QsIE1QSTJfUE9JTlRFUiBw TXBpMkllZWVTZ2VTaW1wbGUzMl90OwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSUVFRV9TR0VfU0lN UExFNjQKK3sKKyAgICB1X2ludDY0X3QgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworICAg IHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICB1X2ludDE2X3QgICAg ICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAg ICAgICAgUmVzZXJ2ZWQyOworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIEZsYWdz OworfSBNUEkyX0lFRUVfU0dFX1NJTVBMRTY0LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSUVFRV9T R0VfU0lNUExFNjQsCisgICAgTXBpMkllZWVTZ2VTaW1wbGU2NF90LCBNUEkyX1BPSU5URVIgcE1w aTJJZWVlU2dlU2ltcGxlNjRfdDsKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9JRUVFX1NHRV9TSU1Q TEVfVU5JT04KK3sKKyAgICBNUEkyX0lFRUVfU0dFX1NJTVBMRTMyICBTaW1wbGUzMjsKKyAgICBN UEkyX0lFRUVfU0dFX1NJTVBMRTY0ICBTaW1wbGU2NDsKK30gTVBJMl9JRUVFX1NHRV9TSU1QTEVf VU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JRUVFX1NHRV9TSU1QTEVfVU5JT04sCisgICAg TXBpMkllZWVTZ2VTaW1wbGVVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlU2ltcGxl VW5pb25fdDsKKwordHlwZWRlZiBNUEkyX0lFRUVfU0dFX1NJTVBMRTMyICBNUEkyX0lFRUVfU0dF X0NIQUlOMzI7Cit0eXBlZGVmIE1QSTJfSUVFRV9TR0VfU0lNUExFNjQgIE1QSTJfSUVFRV9TR0Vf Q0hBSU42NDsKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9JRUVFX1NHRV9DSEFJTl9VTklPTgorewor ICAgIE1QSTJfSUVFRV9TR0VfQ0hBSU4zMiAgIENoYWluMzI7CisgICAgTVBJMl9JRUVFX1NHRV9D SEFJTjY0ICAgQ2hhaW42NDsKK30gTVBJMl9JRUVFX1NHRV9DSEFJTl9VTklPTiwgTVBJMl9QT0lO VEVSIFBUUl9NUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OLAorICAgIE1waTJJZWVlU2dlQ2hhaW5V bmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlQ2hhaW5Vbmlvbl90OworCit0eXBlZGVm IHVuaW9uIF9NUEkyX1NHRV9JT19VTklPTgoreworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAg ICAgICBNcGlTaW1wbGU7CisgICAgTVBJMl9TR0VfQ0hBSU5fVU5JT04gICAgICAgIE1waUNoYWlu OworICAgIE1QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OICBJZWVlU2ltcGxlOworICAgIE1QSTJf SUVFRV9TR0VfQ0hBSU5fVU5JT04gICBJZWVlQ2hhaW47Cit9IE1QSTJfU0dFX0lPX1VOSU9OLCBN UEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX0lPX1VOSU9OLAorICAgIE1waTJTR0VJT1VuaW9uX3Qs IE1QSTJfUE9JTlRFUiBwTXBpMlNHRUlPVW5pb25fdDsKKwordHlwZWRlZiB1bmlvbgoreworICAg IHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIENEQjMyWzMyXTsKKyAgICBNUEkyX1NDU0lf SU9fQ0RCX0VFRFAzMiBFRURQMzI7CisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgU0dFOwor fSBNUEkyX1NDU0lfSU9fQ0RCX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9JT19D REJfVU5JT04sCisgICAgTXBpMlNjc2lJb0NkYl90LCBNUEkyX1BPSU5URVIgcE1waTJTY3NpSW9D ZGJfdDsKKworLyoKKyAqIFJBSUQgU0NTSSBJTyBSZXF1ZXN0IE1lc3NhZ2UKKyAqIFRvdGFsIFNH RSBjb3VudCB3aWxsIGJlIG9uZSBsZXNzIHRoYW4gIF9NUEkyX1NDU0lfSU9fUkVRVUVTVAorICov Cit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVAoreworICAgIHVfaW50 MTZfdCAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgICAg LyogMHgwMCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0 OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAg ICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAg IHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAg ICAgICAgLyogMHgwNCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFJlc2Vy dmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIHVfaW50OF90ICAgICAg ICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAq LworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMHgwOCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAg IFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIHVfaW50MTZf dCAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyog MHgwQSAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTG93 QWRkcmVzczsgICAgICAgICAgLyogMHgwQyAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAg ICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIHVf aW50OF90ICAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTGVuZ3RoOyAgICAgICAgICAg ICAgLyogMHgxMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVk NDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMyAqLworICAgIHVfaW50OF90ICAgICAgICAg ICAgICAgICAgICAgIFNHTE9mZnNldDA7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLwor ICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDE7ICAgICAgICAgICAg ICAgICAgICAgLyogMHgxNSAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAgIFNH TE9mZnNldDI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIHVfaW50OF90ICAg ICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgx NyAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFNraXBDb3VudDsgICAgICAg ICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAg ICAgIERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIHVfaW50 MzJfdCAgICAgICAgICAgICAgICAgICAgIEJpZGlyZWN0aW9uYWxEYXRhTGVuZ3RoOyAgICAgICAg LyogMHgyMCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIElvRmxhZ3M7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAg ICAgICAgICAgIEVFRFBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNiAqLworICAg IHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIEVFRFBCbG9ja1NpemU7ICAgICAgICAgICAg ICAgICAgLyogMHgyOCAqLworICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFNlY29u ZGFyeVJlZmVyZW5jZVRhZzsgICAgICAgICAgLyogMHgyQyAqLworICAgIHVfaW50MTZfdCAgICAg ICAgICAgICAgICAgICAgIFNlY29uZGFyeUFwcGxpY2F0aW9uVGFnOyAgICAgICAgLyogMHgzMCAq LworICAgIHVfaW50MTZfdCAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uVGFnVHJhbnNs YXRpb25NYXNrOyAgLyogMHgzMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICAg IExVTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzNCAqLworICAgIHVfaW50MzJf dCAgICAgICAgICAgICAgICAgICAgIENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgICAgLyog MHgzQyAqLworICAgIE1QSTJfU0NTSV9JT19DREJfVU5JT04gIENEQjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMHg0MCAqLworICAgIFJBSURfQ09OVEVYVCAgICAgICAgICAgIFJhaWRD b250ZXh0OyAgICAgICAgICAgICAgICAgICAgLyogMHg2MCAqLworICAgIE1QSTJfU0dFX0lPX1VO SU9OICAgICAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHg4MCAqLworfSBN UlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUlNBU19SQUlEX1ND U0lfSU9fUkVRVUVTVCwKKyAgICBNUlNBU1JhaWRTQ1NJSU9SZXF1ZXN0X3QsIE1QSTJfUE9JTlRF UiBwTVJTQVNSYWlkU0NTSUlPUmVxdWVzdF90OworCisvKgorICogTVBUIFJBSUQgTUZBIElPIERl c2NyaXB0b3IuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9NUlNBU19SQUlEX01GQV9JT19ERVNDUklQ VE9SIHsKKyAgICB1X2ludDMyX3QgICAgIFJlcXVlc3RGbGFncyAgICA6IDg7CisgICAgdV9pbnQz Ml90ICAgICBNZXNzYWdlQWRkcmVzczEgOiAyNDsgLyogYml0cyAzMTo4Ki8KKyAgICB1X2ludDMy X3QgICAgIE1lc3NhZ2VBZGRyZXNzMjsgICAgICAvKiBiaXRzIDYxOjMyICovCit9IE1SU0FTX1JB SURfTUZBX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiwqUE1SU0FTX1JBSURfTUZBX0lPX1JFUVVFU1Rf REVTQ1JJUFRPUjsKKworLyogRGVmYXVsdCBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYg c3RydWN0IF9NUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SCit7CisgICAgdV9pbnQ4X3Qg ICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAg dV9pbnQ4X3QgICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAx ICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAg ICAvKiAweDAyICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAg ICAgICAgICAgICAvKiAweDA0ICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIERlc2NyaXB0 b3JUeXBlRGVwZW5kZW50OyAgICAvKiAweDA2ICovCit9IE1QSTJfREVGQVVMVF9SRVFVRVNUX0RF U0NSSVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVND UklQVE9SLAorICAgIE1waTJEZWZhdWx0UmVxdWVzdERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVS IHBNcGkyRGVmYXVsdFJlcXVlc3REZXNjcmlwdG9yX3Q7CisgICAgCisvKiBIaWdoIFByaW9yaXR5 IFJlcXVlc3QgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSElHSF9QUklPUklU WV9SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICB1X2ludDhfdCAgICAgICAgICAgICAgUmVxdWVz dEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICB1X2ludDhfdCAgICAgICAgICAg ICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICB1X2ludDE2X3Qg ICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICB1 X2ludDE2X3QgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQg Ki8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAg IC8qIDB4MDYgKi8KK30gTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAg ICBNUEkyX1BPSU5URVIgUFRSX01QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1Is CisgICAgTXBpMkhpZ2hQcmlvcml0eVJlcXVlc3REZXNjcmlwdG9yX3QsCisgICAgTVBJMl9QT0lO VEVSIHBNcGkySGlnaFByaW9yaXR5UmVxdWVzdERlc2NyaXB0b3JfdDsKKyAgICAKKy8qIFNDU0kg SU8gUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX0lPX1JF UVVFU1RfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAgICAgICAgICBSZXF1ZXN0Rmxh Z3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBN U0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIHVfaW50MTZfdCAgICAg ICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIHVfaW50 MTZfdCAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwor ICAgIHVfaW50MTZfdCAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyog MHgwNiAqLworfSBNUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SLAorICAgIE1QSTJfUE9J TlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgICBNcGkyU0NTSUlP UmVxdWVzdERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSUlPUmVxdWVzdERlc2Ny aXB0b3JfdDsKKworLyogU0NTSSBUYXJnZXQgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVm IHN0cnVjdCBfTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICB1X2lu dDhfdCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8K KyAgICB1X2ludDhfdCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8q IDB4MDEgKi8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAg ICAgICAgIC8qIDB4MDIgKi8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgTE1JRDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICB1X2ludDE2X3QgICAgICAgICAgICAgSW9J bmRleDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9TQ1NJX1RBUkdFVF9S RVFVRVNUX0RFU0NSSVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfVEFSR0VU X1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgICBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9y X3QsCisgICAgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9yX3Q7 CisKKy8qIFJBSUQgQWNjZWxlcmF0b3IgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0 cnVjdCBfTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90 ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAg IHVfaW50OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgw MSAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAg ICAgLyogMHgwMiAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAg ICAgICAgICAgICAgLyogMHgwNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBSZXNlcnZl ZDsgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1JBSURfQUNDRUxfUkVRVUVT VF9ERVNDUklQVE9SLAorICAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDQ0VMX1JFUVVF U1RfREVTQ1JJUFRPUiwKKyAgICBNcGkyUkFJREFjY2VsZXJhdG9yUmVxdWVzdERlc2NyaXB0b3Jf dCwKKyAgICBNUEkyX1BPSU5URVIgcE1waTJSQUlEQWNjZWxlcmF0b3JSZXF1ZXN0RGVzY3JpcHRv cl90OworCisvKiB1bmlvbiBvZiBSZXF1ZXN0IERlc2NyaXB0b3JzICovCit0eXBlZGVmIHVuaW9u IF9NUlNBU19SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04KK3sKKyAgICBNUEkyX0RFRkFVTFRfUkVR VUVTVF9ERVNDUklQVE9SICAgICAgICAgICAgIERlZmF1bHQ7CisgICAgTVBJMl9ISUdIX1BSSU9S SVRZX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICBIaWdoUHJpb3JpdHk7CisgICAgTVBJMl9TQ1NJ X0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICAgICBTQ1NJSU87CisgICAgTVBJMl9TQ1NJ X1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBTQ1NJVGFyZ2V0OworICAgIE1QSTJf UkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICAgUkFJREFjY2VsZXJhdG9yOwor ICAgIE1SU0FTX1JBSURfTUZBX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgTUZBSW87Cisg ICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQzMl90IGxvdzsK KyAgICAgICAgICAgIHVfaW50MzJfdCBoaWdoOworICAgICAgICB9IHU7CisgICAgICAgIHVfaW50 NjRfdCBXb3JkczsKKyAgICB9IGFkZHI7Cit9IE1SU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklP TjsKKworLyogRGVmYXVsdCBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJ Ml9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IKK3sKKyAgICB1X2ludDhfdCAgICAgICAgICAgICAg UmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICB1X2ludDhfdCAgICAg ICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICB1X2lu dDE2X3QgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxOyAgIC8qIDB4MDIgKi8K KyAgICB1X2ludDMyX3QgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQyOyAgIC8q IDB4MDQgKi8KK30gTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQ VFJfTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsCisgICAgTXBpMkRlZmF1bHRSZXBseURl c2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90Owor CisvKiBBZGRyZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0FE RFJFU1NfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAgICAgICAgICBSZXBs eUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50OF90ICAgICAgICAg ICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIHVfaW50MTZf dCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAg IHVfaW50MzJfdCAgICAgICAgICAgICBSZXBseUZyYW1lQWRkcmVzczsgICAgICAgICAgLyogMHgw NCAqLworfSBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9N UEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgICBNcGkyQWRkcmVzc1JlcGx5RGVzY3Jp cHRvcl90LCBNUEkyX1BPSU5URVIgcE1waTJBZGRyZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKy8q IFNDU0kgSU8gU3VjY2VzcyBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJ Ml9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAg ICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50 OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwor ICAgIHVfaW50MTZfdCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyog MHgwMiAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBUYXNrVGFnOyAgICAgICAgICAgICAg ICAgICAgLyogMHgwNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBSZXNlcnZlZDE7ICAg ICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9E RVNDUklQVE9SLAorICAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQ TFlfREVTQ1JJUFRPUiwKKyAgICBNcGkyU0NTSUlPU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90LAor ICAgIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lJT1N1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdDsKKwor LyogVGFyZ2V0QXNzaXN0IFN1Y2Nlc3MgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1 Y3QgX01QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVf aW50OF90ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAq LworICAgIHVfaW50OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAg LyogMHgwMSAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAg ICAgICAgICAgLyogMHgwMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBTZXF1ZW5jZU51 bWJlcjsgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBS ZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIHVfaW50MTZfdCAgICAg ICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1RB UkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBU Ul9NUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgICAgTXBpMlRh cmdldEFzc2lzdFN1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKKyAgICBNUEkyX1BPSU5URVIgcE1w aTJUYXJnZXRBc3Npc3RTdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKy8qIFRhcmdldCBDb21t YW5kIEJ1ZmZlciBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UQVJH RVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIHVfaW50OF90ICAgICAg ICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIHVfaW50 OF90ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwor ICAgIHVfaW50OF90ICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyog MHgwMiAqLworICAgIHVfaW50OF90ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAg ICAgICAgLyogMHgwMyAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBJbml0aWF0b3JEZXZI YW5kbGU7ICAgICAgICAgLyogMHgwNCAqLworICAgIHVfaW50MTZfdCAgICAgICAgICAgICBJb0lu ZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1RBUkdFVF9DT01NQU5E X0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SLAorICAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UQVJH RVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUiwKKyAgICBNcGkyVGFyZ2V0Q29tbWFu ZEJ1ZmZlclJlcGx5RGVzY3JpcHRvcl90LAorICAgIE1QSTJfUE9JTlRFUiBwTXBpMlRhcmdldENv bW1hbmRCdWZmZXJSZXBseURlc2NyaXB0b3JfdDsKKworLyogUkFJRCBBY2NlbGVyYXRvciBTdWNj ZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNDRUxF UkFUT1JfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SCit7CisgICAgdV9pbnQ4X3QgICAgICAgICAg ICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgdV9pbnQ4X3Qg ICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAg dV9pbnQxNl90ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAy ICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAg ICAvKiAweDA0ICovCit9IE1QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NS SVBUT1IsCisgICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VT U19SRVBMWV9ERVNDUklQVE9SLAorICAgIE1waTJSQUlEQWNjZWxlcmF0b3JTdWNjZXNzUmVwbHlE ZXNjcmlwdG9yX3QsCisgICAgTVBJMl9QT0lOVEVSIHBNcGkyUkFJREFjY2VsZXJhdG9yU3VjY2Vz c1JlcGx5RGVzY3JpcHRvcl90OworCisvKiB1bmlvbiBvZiBSZXBseSBEZXNjcmlwdG9ycyAqLwor dHlwZWRlZiB1bmlvbiBfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTgoreworICAgIE1QSTJf REVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgIERlZmF1bHQ7CisgICAg TVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgQWRkcmVzc1Jl cGx5OworICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAg IFNDU0lJT1N1Y2Nlc3M7CisgICAgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVND UklQVE9SICAgICAgVGFyZ2V0QXNzaXN0U3VjY2VzczsKKyAgICBNUEkyX1RBUkdFVF9DT01NQU5E X0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SICAgICBUYXJnZXRDb21tYW5kQnVmZmVyOworICAgIE1Q STJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgIFJBSURBY2NlbGVy YXRvclN1Y2Nlc3M7CisgICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgV29yZHM7Cit9IE1QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04sIE1Q STJfUE9JTlRFUiBQVFJfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiwKKyAgICBNcGkyUmVw bHlEZXNjcmlwdG9yc1VuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJlcGx5RGVzY3JpcHRvcnNV bmlvbl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHZh bDsKK30gYXRvbWljX3Q7CisKKyNkZWZpbmUgYXRvbWljX3JlYWQodikgIGF0b21pY19sb2FkX2Fj cV9pbnQoJih2KS0+dmFsKQorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkgYXRvbWljX3N0b3JlX3Jl bF9pbnQoJih2KS0+dmFsLCBpKQorI2RlZmluZSBhdG9taWNfZGVjKHYpICAgYXRvbWljX2ZldGNo YWRkX2ludCgmKHYpLT52YWwsIC0xKQorI2RlZmluZSBhdG9taWNfaW5jKHYpICAgYXRvbWljX2Zl dGNoYWRkX2ludCgmKHYpLT52YWwsIDEpCisKKy8qIElPQ0luaXQgUmVxdWVzdCBtZXNzYWdlICov Cit0eXBlZGVmIHN0cnVjdCBfTVBJMl9JT0NfSU5JVF9SRVFVRVNUCit7CisgICAgdV9pbnQ4X3Qg ICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAw eDAwICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAg ICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAg ICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgdV9p bnQ4X3QgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAg ICAvKiAweDAzICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQy OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgdV9pbnQ4X3QgICAgICAgICAg ICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisg ICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAg ICAgICAgICAvKiAweDA3ICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgVlBf SUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgdV9pbnQ4X3QgICAg ICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5 ICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAg ICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAg ICAgTXNnVmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgdV9pbnQx Nl90ICAgICAgICAgICAgICAgICAgICAgSGVhZGVyVmVyc2lvbjsgICAgICAgICAgICAgICAgICAv KiAweDBFICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAg ICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAg ICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAg dV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAg ICAgICAvKiAweDE2ICovCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgSG9zdE1T SXhWZWN0b3JzOyAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgdV9pbnQxNl90ICAgICAg ICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICov CisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lU2l6 ZTsgICAgICAgICAvKiAweDFBICovCisgICAgdV9pbnQxNl90ICAgICAgICAgICAgICAgICAgICAg UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7ICAvKiAweDFDICovCisgICAgdV9pbnQxNl90 ICAgICAgICAgICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVEZXB0aDsgICAgICAgICAgICAvKiAw eDFFICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgICAgU2Vuc2VCdWZmZXJBZGRy ZXNzSGlnaDsgICAgICAgICAvKiAweDIwICovCisgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAg ICAgICAgU3lzdGVtUmVwbHlBZGRyZXNzSGlnaDsgICAgICAgICAvKiAweDI0ICovCisgICAgdV9p bnQ2NF90ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lQmFzZUFkZHJlc3M7 ICAvKiAweDI4ICovCisgICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNj cmlwdG9yUG9zdFF1ZXVlQWRkcmVzczsvKiAweDMwICovCisgICAgdV9pbnQ2NF90ICAgICAgICAg ICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVBZGRyZXNzOyAgICAgICAgICAvKiAweDM4ICovCisg ICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1wOyAgICAgICAgICAgICAg ICAgICAgICAvKiAweDQwICovCit9IE1QSTJfSU9DX0lOSVRfUkVRVUVTVCwgTVBJMl9QT0lOVEVS IFBUUl9NUEkyX0lPQ19JTklUX1JFUVVFU1QsCisgICAgTXBpMklPQ0luaXRSZXF1ZXN0X3QsIE1Q STJfUE9JTlRFUiBwTXBpMklPQ0luaXRSZXF1ZXN0X3Q7CisKKy8qCisgKiBNUiBwcml2YXRlIGRl ZmluZXMKKyAqLworI2RlZmluZSBNUl9QRF9JTlZBTElEIDB4RkZGRgorI2RlZmluZSBNQVhfU1BB Tl9ERVBUSCA4CisjZGVmaW5lIE1BWF9SQUlETUFQX1NQQU5fREVQVEggKE1BWF9TUEFOX0RFUFRI KQorI2RlZmluZSBNQVhfUk9XX1NJWkUgMzIKKyNkZWZpbmUgTUFYX1JBSURNQVBfUk9XX1NJWkUg KE1BWF9ST1dfU0laRSkKKyNkZWZpbmUgTUFYX0xPR0lDQUxfRFJJVkVTIDY0CisjZGVmaW5lIE1B WF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTIChNQVhfTE9HSUNBTF9EUklWRVMpCisjZGVmaW5lIE1B WF9SQUlETUFQX1ZJRVdTIChNQVhfTE9HSUNBTF9EUklWRVMpCisjZGVmaW5lIE1BWF9BUlJBWVMg MTI4CisjZGVmaW5lIE1BWF9SQUlETUFQX0FSUkFZUyAoTUFYX0FSUkFZUykKKyNkZWZpbmUgTUFY X1BIWVNJQ0FMX0RFVklDRVMgMjU2CisjZGVmaW5lIE1BWF9SQUlETUFQX1BIWVNJQ0FMX0RFVklD RVMgKE1BWF9QSFlTSUNBTF9ERVZJQ0VTKQorI2RlZmluZSBNUl9EQ01EX0xEX01BUF9HRVRfSU5G TyAgICAweDAzMDBlMTAxICAgLy8gZ2V0IHRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIG9mIHRoaXMg TEQKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAKKyAqIFJBSUQgbWFwIHJlbGF0ZWQgc3RydWN0dXJlcyAKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKyAKK3R5cGVkZWYgc3RydWN0IF9NUl9ERVZfSEFORExFX0lORk8geworICAg IHVfaW50MTZfdCAgY3VyRGV2SGRsOyAgIC8vIHRoZSBkZXZpY2UgaGFuZGxlIGN1cnJlbnRseSB1 c2VkIGJ5IGZ3IHRvIGlzc3VlIHRoZSBjb21tYW5kLgorICAgIHVfaW50OF90ICAgdmFsaWRIYW5k bGVzOyAgICAgIC8vIGJpdG1hcCBvZiB2YWxpZCBkZXZpY2UgaGFuZGxlcy4KKyAgICB1X2ludDhf dCAgIHJlc2VydmVkOworICAgIHVfaW50MTZfdCAgZGV2SGFuZGxlWzJdOyAgICAgIC8vIDB4MDQg ZGV2IGhhbmRsZXMgZm9yIGFsbCB0aGUgcGF0aHMuCit9IE1SX0RFVl9IQU5ETEVfSU5GTzsgICAg CisgCit0eXBlZGVmIHN0cnVjdCBfTVJfQVJSQVlfSU5GTyB7CisgICAgdV9pbnQxNl90ICAgICAg cGRbTUFYX1JBSURNQVBfUk9XX1NJWkVdOworfSBNUl9BUlJBWV9JTkZPOyAgICAgICAgICAgICAg ICAgICAgICAgLy8gMHg0MCwgVG90YWwgU2l6ZQorIAordHlwZWRlZiBzdHJ1Y3QgX01SX1FVQURf RUxFTUVOVCB7CisgICAgdV9pbnQ2NF90ICAgICBsb2dTdGFydDsgICAgICAgICAgICAgICAgICAg Ly8gMHgwMAorICAgIHVfaW50NjRfdCAgICAgbG9nRW5kOyAgICAgICAgICAgICAgICAgICAgIC8v IDB4MDgKKyAgICB1X2ludDY0X3QgICAgIG9mZnNldEluU3BhbjsgICAgICAgICAgICAgICAvLyAw eDEwCisgICAgdV9pbnQzMl90ICAgICBkaWZmOyAgICAgICAgICAgICAgICAgICAgICAgLy8gMHgx OAorICAgIHVfaW50MzJfdCAgICAgcmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8vIDB4MUMK K30gTVJfUVVBRF9FTEVNRU5UOyAgICAgICAgICAgICAgICAgICAgICAvLyAweDIwLCBUb3RhbCBz aXplCisgCit0eXBlZGVmIHN0cnVjdCBfTVJfU1BBTl9JTkZPIHsKKyAgICB1X2ludDMyX3QgICAg ICAgICAgICAgbm9FbGVtZW50czsgICAgICAgICAgICAgLy8gMHgwMAorICAgIHVfaW50MzJfdCAg ICAgICAgICAgICByZXNlcnZlZDE7ICAgICAgICAgICAgICAvLyAweDA0CisgICAgTVJfUVVBRF9F TEVNRU5UIHF1YWRbTUFYX1JBSURNQVBfU1BBTl9ERVBUSF07ICAgLy8gMHgwOAorfSBNUl9TUEFO X0lORk87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDEwOCwgVG90YWwgc2l6ZQor ICAgIAordHlwZWRlZiBzdHJ1Y3QgX01SX0xEX1NQQU5fIHsgICAgICAgICAgIC8vIFNQQU4gc3Ry dWN0dXJlCisgICAgdV9pbnQ2NF90ICAgICAgc3RhcnRCbGs7ICAgICAgICAgICAgICAgICAgLy8g MHgwMCwgc3RhcnRpbmcgYmxvY2sgbnVtYmVyIGluIGFycmF5CisgICAgdV9pbnQ2NF90ICAgICAg bnVtQmxrczsgICAgICAgICAgICAgICAgICAgLy8gMHgwOCwgbnVtYmVyIG9mIGJsb2NrcworICAg IHVfaW50MTZfdCAgICAgIGFycmF5UmVmOyAgICAgICAgICAgICAgICAgIC8vIDB4MTAsIGFycmF5 IHJlZmVyZW5jZQorICAgIHVfaW50OF90ICAgICAgIHJlc2VydmVkWzZdOyAgICAgICAgICAgICAg IC8vIDB4MTIKK30gTVJfTERfU1BBTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDE4 LCBUb3RhbCBTaXplCisKK3R5cGVkZWYgc3RydWN0IF9NUl9TUEFOX0JMT0NLX0lORk8geworICAg IHVfaW50NjRfdCAgICAgICAgICBudW1fcm93czsgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHJv d3Mvc3BhbgorICAgIE1SX0xEX1NQQU4gICBzcGFuOyAgICAgICAgICAgICAgICAgLy8gMHgwOAor ICAgIE1SX1NQQU5fSU5GTyBibG9ja19zcGFuX2luZm87ICAgICAgLy8gMHgyMAorfSBNUl9TUEFO X0JMT0NLX0lORk87CisKK3R5cGVkZWYgc3RydWN0IF9NUl9MRF9SQUlEIHsKKyAgICBzdHJ1Y3Qg eworICAgICAgICB1X2ludDMyX3QgICAgIGZwQ2FwYWJsZSAgICAgICAgICAgOjE7CisgICAgICAg IHVfaW50MzJfdCAgICAgcmVzZXJ2ZWQ1ICAgICAgICAgICA6MzsKKyAgICAgICAgdV9pbnQzMl90 ICAgICBsZFBpTW9kZSAgICAgICAgICAgIDo0OworICAgICAgICB1X2ludDMyX3QgICAgIHBkUGlN b2RlICAgICAgICAgICAgOjQ7IC8vIEV2ZXJ5IFBkIGhhcyB0byBiZSBzYW1lLgorICAgICAgICB1 X2ludDMyX3QgICAgIGVuY3J5cHRpb25UeXBlICAgICAgOjg7IC8vIEZERSBvciBjdGxyIGVuY3J5 cHRpb24gKE1SX0xEX0VOQ1JZUFRJT05fVFlQRSkKKyAgICAgICAgdV9pbnQzMl90ICAgICBmcFdy aXRlQ2FwYWJsZSAgICAgIDoxOworICAgICAgICB1X2ludDMyX3QgICAgIGZwUmVhZENhcGFibGUg ICAgICAgOjE7CisgICAgICAgIHVfaW50MzJfdCAgICAgZnBXcml0ZUFjcm9zc1N0cmlwZSA6MTsK KyAgICAgICAgdV9pbnQzMl90ICAgICBmcFJlYWRBY3Jvc3NTdHJpcGUgIDoxOworICAgICAgICB1 X2ludDMyX3QgICAgIGZwTm9uUldDYXBhYmxlICAgICAgOjE7IC8vIFRSVUUgaWYgc3VwcG9ydGlu ZyBOb24gUlcgSU8KKyAgICAgICAgdV9pbnQzMl90ICAgICByZXNlcnZlZDQgICAgICAgICAgIDo3 OworICAgIH0gY2FwYWJpbGl0eTsgICAgICAgICAgICAgICAgICAgLy8gMHgwMAorICAgIHVfaW50 MzJfdCAgICAgcmVzZXJ2ZWQ2OworICAgIHVfaW50NjRfdCAgICAgc2l6ZTsgICAgICAgICAgICAg Ly8gMHgwOCwgTEQgc2l6ZSBpbiBibG9ja3MKKworICAgIHVfaW50OF90ICAgICAgc3BhbkRlcHRo OyAgICAgICAgLy8gMHgxMCwgVG90YWwgTnVtYmVyIG9mIFNwYW5zCisgICAgdV9pbnQ4X3QgICAg ICBsZXZlbDsgICAgICAgICAgICAvLyAweDExLCBSQUlEIGxldmVsCisgICAgdV9pbnQ4X3QgICAg ICBzdHJpcGVTaGlmdDsgICAgICAvLyAweDEyLCBzaGlmdC1jb3VudCB0byBnZXQgc3RyaXBlIHNp emUgKDA9NTEyLCAxPTFLLCA3PTY0SywgZXRjLikKKyAgICB1X2ludDhfdCAgICAgIHJvd1NpemU7 ICAgICAgICAgIC8vIDB4MTMsIG51bWJlciBvZiBkaXNrcyBpbiBhIHJvdworCisgICAgdV9pbnQ4 X3QgICAgICByb3dEYXRhU2l6ZTsgICAgICAvLyAweDE0LCBudW1iZXIgb2YgZGF0YSBkaXNrcyBp biBhIHJvdworICAgIHVfaW50OF90ICAgICAgd3JpdGVNb2RlOyAgICAgICAgLy8gMHgxNSwgV1JJ VEVfVEhST1VHSCBvciBXUklURV9CQUNLCisgICAgdV9pbnQ4X3QgICAgICBQUkw7ICAgICAgICAg ICAgICAvLyAweDE2LCBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gUkFJRDEgYW5kIFJBSUQxRQor ICAgIHVfaW50OF90ICAgICAgU1JMOyAgICAgICAgICAgICAgLy8gMHgxNworCisgICAgdV9pbnQx Nl90ICAgICB0YXJnZXRJZDsgICAgICAgICAgICAgICAvLyAweDE4LCBsZCBUYXJnZXQgSWQuCisg ICAgdV9pbnQ4X3QgICAgICBsZFN0YXRlOyAgICAgICAgICAvLyAweDFhLCBzdGF0ZSBvZiBsZCwg c3RhdGUgY29ycmVzcG9uZHMgdG8gTVJfTERfU1RBVEUKKyAgICB1X2ludDhfdCAgICAgIHJlZ1R5 cGVSZXFPbldyaXRlOy8vIDB4MWIsIFByZSBjYWxjdWxhdGUgcmVnaW9uIHR5cGUgcmVxdWVzdHMg YmFzZWQgb24gTUZDIGV0Yy4uCisgICAgdV9pbnQ4X3QgICAgICBtb2RGYWN0b3I7ICAgICAgICAv LyAweDFjLCBzYW1lIGFzIHJvd1NpemUsCisgICAgdV9pbnQ4X3QgICAgICByZWdUeXBlUmVxT25S ZWFkOyAvLyAweDFkLCByZWdpb24gbG9jayB0eXBlIHVzZWQgZm9yIHJlYWQsIHZhbGlkIG9ubHkg aWYgcmVnVHlwZU9uUmVhZElzVmFsaWQ9MQorICAgIHVfaW50MTZfdCAgICAgc2VxTnVtOyAgICAg ICAgICAgICAgICAgLy8gMHgxZSwgTEQgc2VxdWVuY2UgbnVtYmVyCisKKyAgICBzdHJ1Y3Qgewor ICAgICAgICB1X2ludDMyX3QgbGRTeW5jUmVxdWlyZWQ6MTsgICAgICAgLy8gVGhpcyBMRCByZXF1 aXJlcyBzeW5jIGNvbW1hbmQgYmVmb3JlIGNvbXBsZXRpbmcKKyAgICAgICAgdV9pbnQzMl90IHJl Z1R5cGVSZXFPblJlYWRMc1ZhbGlkOjE7IC8vIFF1YWxpZmllciBmb3IgcmVnVHlwZU9uUmVhZAor ICAgICAgICB1X2ludDMyX3QgcmVzZXJ2ZWQ6MzA7CisgICAgfSBmbGFnczsgICAgICAgICAgICAg ICAgICAgICAgICAvLyAweDIwCisKKyAgICB1X2ludDhfdCAgICAgIExVTls4XTsgICAgICAgICAg IC8vIDB4MjQsIDggYnl0ZSBMVU4gZmllbGQgdXNlZCBmb3IgU0NTSQorICAgIHVfaW50OF90ICAg ICAgZnBJb1RpbWVvdXRGb3JMZDsgLy8gMHgyQywgdGltZW91dCB2YWx1ZSBmb3IgRlAgSU9zCisg ICAgdV9pbnQ4X3QgICAgICByZXNlcnZlZDJbM107ICAgICAvLyAweDJECisgICAgdV9pbnQzMl90 ICAgICBsb2dpY2FsQmxvY2tMZW5ndGg7IC8vIDB4MzAgTG9naWNhbCBibG9jayBzaXplIGZvciB0 aGUgTEQKKyAgICBzdHJ1Y3QgeworICAgICAgICB1X2ludDMyX3QgTGRQaUV4cDo0OyAgICAgICAg Ly8gMHgzNCwgUF9JX0VYUE9ORU5UIGZvciBSZWFkQ2FwIDE2CisgICAgICAgIHVfaW50MzJfdCBM ZExvZ2ljYWxCbG9ja0V4cDo0OyAvLyAweDM0LCBMT0dJQ0FMIEJMT0NLUyBQRVIgUEhZUyBCTE9D SworICAgICAgICB1X2ludDMyX3QgcmVzZXJ2ZWQxOjI0OyAgICAgLy8gMHgzNAorICAgIH0gZXhw b25lbnQ7CisgICAgdV9pbnQ4X3QgICAgICByZXNlcnZlZDNbMHg4MC0weDM4XTsgLy8gMHgzOCAK K30gTVJfTERfUkFJRDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4ODAsIFRvdGFsIFNpemUK KwordHlwZWRlZiBzdHJ1Y3QgX01SX0xEX1NQQU5fTUFQIHsKKyAgICBNUl9MRF9SQUlEICBsZFJh aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAweDAwCisgICAgdV9pbnQ4X3QgICAgZGF0 YUFybU1hcFtNQVhfUkFJRE1BUF9ST1dfU0laRV07ICAvLyAweDgwLCBuZWVkZWQgZm9yIEdFVF9B Uk0oKSAtIFIwLzEvNSBvbmx5LgorICAgIE1SX1NQQU5fQkxPQ0tfSU5GTyAgc3BhbkJsb2NrW01B WF9SQUlETUFQX1NQQU5fREVQVEhdOyAgLy8gMHhBMAorfSBNUl9MRF9TUEFOX01BUDsgICAgICAg ICAgICAgICAgLy8gMHg5RTAKKwordHlwZWRlZiBzdHJ1Y3QgX01SX0ZXX1JBSURfTUFQIHsKKyAg ICB1X2ludDMyX3QgIHRvdGFsU2l6ZTsgICAgLy8gdG90YWwgc2l6ZSBvZiB0aGlzIHN0cnVjdHVy ZSwgaW5jbHVkaW5nIHRoaXMgZmllbGQuCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeyAg ICAgIC8vIFNpbXBsZSBtZXRob2Qgb2YgdmVyc2lvbiBjaGVja2luZyB2YXJpYWJsZXMKKyAgICAg ICAgICAgIHVfaW50MzJfdCAgICAgICAgIG1heExkOworICAgICAgICAgICAgdV9pbnQzMl90ICAg ICAgICAgbWF4U3BhbkRlcHRoOworICAgICAgICAgICAgdV9pbnQzMl90ICAgICAgICAgbWF4Um93 U2l6ZTsKKyAgICAgICAgICAgIHVfaW50MzJfdCAgICAgICAgIG1heFBkQ291bnQ7CisgICAgICAg ICAgICB1X2ludDMyX3QgICAgICAgICBtYXhBcnJheXM7CisgICAgICAgIH0gdmFsaWRhdGlvbklu Zm87CisgICAgICAgIHVfaW50MzJfdCAgICAgICAgICAgICB2ZXJzaW9uWzVdOworICAgICAgICB1 X2ludDMyX3QgICAgICAgICAgICAgcmVzZXJ2ZWQxWzVdOworICAgIH0gcmFpZF9kZXNjOworICAg IHVfaW50MzJfdCAgICAgICAgIGxkQ291bnQ7ICAgICAgICAgICAgICAgICAvLyBjb3VudCBvZiBs ZHMuCisgICAgdV9pbnQzMl90ICAgICAgICAgUmVzZXJ2ZWQxOworICAgIHVfaW50OF90ICAgICAg ICAgIGxkVGd0SWRUb0xkW01BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTK01BWF9SQUlETUFQX1ZJ RVdTXTsgLy8gMHgyMAorICAgIC8vIFRoaXMgZG9lc24ndCBjb3JyZXNwb25kIHRvCisgICAgLy8g RlcgTGQgVGd0IElkIHRvIExELCBidXQgd2lsbCBwdXJnZS4gRm9yIGV4YW1wbGU6IGlmIHRndCBJ ZCBpcyA0CisgICAgLy8gYW5kIEZXIExEIGlzIDIsIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSBMRCwg Rlcgd2lsbCBwb3B1bGF0ZSB0aGUKKyAgICAvLyBhcnJheSBsaWtlIHRoaXMuIFsweEZGLCAweEZG LCAweEZGLCAweEZGLCAweDAsLi4uLi5dLiBUaGlzIGlzIHRvCisgICAgLy8gaGVscCByZWR1Y2Ug dGhlIGVudGlyZSBzdHJjdHVyZSBzaXplIGlmIHRoZXJlIGFyZSBmZXcgTERzIG9yCisgICAgLy8g ZHJpdmVyIGlzIGxvb2tpbmcgaW5mbyBmb3IgMSBMRCBvbmx5LgorICAgIHVfaW50OF90ICAgICAg ICAgIGZwUGRJb1RpbWVvdXRTZWM7ICAgICAgICAvLyB0aW1lb3V0IHZhbHVlIHVzZWQgYnkgZHJp dmVyIGluIEZQIElPcworICAgIHVfaW50OF90ICAgICAgICAgICByZXNlcnZlZDJbN107CisgICAg TVJfQVJSQVlfSU5GTyAgICAgIGFyTWFwSW5mb1tNQVhfUkFJRE1BUF9BUlJBWVNdOyAgICAgICAg ICAgICAgLy8gMHgwMGE4CisgICAgTVJfREVWX0hBTkRMRV9JTkZPIGRldkhuZGxJbmZvW01BWF9S QUlETUFQX1BIWVNJQ0FMX0RFVklDRVNdOyAgLy8gMHgyMGE4CisgICAgTVJfTERfU1BBTl9NQVAg ICAgIGxkU3Bhbk1hcFsxXTsgLy8gMHgyOGE4LVswLU1BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVT K01BWF9SQUlETUFQX1ZJRVdTKzFdOworfSBNUl9GV19SQUlEX01BUDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gMHgzMjg4LCBUb3RhbCBTaXplCisKK3R5cGVkZWYgc3RydWN0IF9MRF9M T0FEX0JBTEFOQ0VfSU5GTworeworICAgIHVfaW50OF90ICAgICAgbG9hZEJhbGFuY2VGbGFnOwor ICAgIHVfaW50OF90ICAgICAgcmVzZXJ2ZWQxOworICAgIHVfaW50MTZfdCAgICAgcmFpZDFEZXZI YW5kbGVbMl07CisgICAgYXRvbWljX3QgICAgIHNjc2lfcGVuZGluZ19jbWRzWzJdOworICAgIHVf aW50NjRfdCAgICAgbGFzdF9hY2Nlc3NlZF9ibG9ja1syXTsKK30gTERfTE9BRF9CQUxBTkNFX0lO Rk8sICpQTERfTE9BRF9CQUxBTkNFX0lORk87CisKKyNwcmFnbWEgcGFjaygxKQordHlwZWRlZiBz dHJ1Y3QgX01SX0ZXX1JBSURfTUFQX0FMTCB7CisgICAgTVJfRldfUkFJRF9NQVAgcmFpZE1hcDsK KyAgICBNUl9MRF9TUEFOX01BUCBsZFNwYW5NYXBbTUFYX0xPR0lDQUxfRFJJVkVTIC0gMV07Cit9 IE1SX0ZXX1JBSURfTUFQX0FMTDsKKyNwcmFnbWEgcGFjaygpCisKK3N0cnVjdCBJT19SRVFVRVNU X0lORk8geworICAgIHVfaW50NjRfdCBsZFN0YXJ0QmxvY2s7CisgICAgdV9pbnQzMl90IG51bUJs b2NrczsKKyAgICB1X2ludDE2X3QgbGRUZ3RJZDsKKyAgICB1X2ludDhfdCBpc1JlYWQ7CisgICAg dV9pbnQxNl90IGRldkhhbmRsZTsKKyAgICB1X2ludDY0X3QgcGRCbG9jazsKKyAgICB1X2ludDhf dCBmcE9rRm9ySW87Cit9OworCit0eXBlZGVmIHN0cnVjdCBfTVJfTERfVEFSR0VUX1NZTkMgewor ICAgIHVfaW50OF90ICB0YXJnZXRJZDsKKyAgICB1X2ludDhfdCAgcmVzZXJ2ZWQ7CisgICAgdV9p bnQxNl90IHNlcU51bTsKK30gTVJfTERfVEFSR0VUX1NZTkM7CisKKyNkZWZpbmUgSUVFRV9TR0Vf RkxBR1NfQUREUl9NQVNLICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIElFRUVfU0dFX0ZMQUdT X1NZU1RFTV9BRERSICAgICAgICAgICgweDAwKQorI2RlZmluZSBJRUVFX1NHRV9GTEFHU19JT0NE RFJfQUREUiAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgSUVFRV9TR0VfRkxBR1NfSU9DUExCX0FE RFIgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIElFRUVfU0dFX0ZMQUdTX0lPQ1BMQk5UQV9BRERS ICAgICAgICgweDAzKQorI2RlZmluZSBJRUVFX1NHRV9GTEFHU19DSEFJTl9FTEVNRU5UICAgICAg ICAoMHg4MCkKKyNkZWZpbmUgSUVFRV9TR0VfRkxBR1NfRU5EX09GX0xJU1QgICAgICAgICAgKDB4 NDApCisKK3VuaW9uIGRlc2NfdmFsdWUgeworICAgIHVfaW50NjRfdCB3b3JkOworICAgIHN0cnVj dCB7CisgICAgICAgIHVfaW50MzJfdCBsb3c7CisgICAgICAgIHVfaW50MzJfdCBoaWdoOworICAg IH0gdTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqIAorICogVGVtcG9yYXJ5IGNvbW1hbmQgCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCitzdHJ1Y3QgbXJzYXNfdG1wX2RjbWQgeworICAgIGJ1c19kbWFfdGFnX3QgICAgICB0 bXBfZGNtZF90YWc7ICAgIC8vIHRhZyBmb3IgdG1wIERNQ0QgY21kICAKKyAgICBidXNfZG1hbWFw X3QgICAgICAgdG1wX2RjbWRfZG1hbWFwOyAvLyBkbWFtYXAgZm9yIHRtcCBEQ01EIGNtZCAKKyAg ICB2b2lkICAgICAgICAgICAgICAgKnRtcF9kY21kX21lbTsgICAvLyB2aXJ0dWFsIGFkZHIgb2Yg dG1wIERDTUQgY21kIAorICAgIGJ1c19hZGRyX3QgICAgICAgICB0bXBfZGNtZF9waHlzX2FkZHI7 IC8vcGh5c2ljYWwgYWRkciBvZiB0bXAgRENNRCAKK307CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogUmVn aXN0ZXIgc2V0LCBpbmNsdWRlZCBsZWdhY3kgY29udHJvbGxlcnMgMTA2OCBhbmQgMTA3OCwgCisg KiBzdHJ1Y3R1cmUgZXh0ZW5kZWQgZm9yIDEwNzggcmVnaXN0ZXJzCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisj cHJhZ21hIHBhY2soMSkKK3R5cGVkZWYgc3RydWN0IF9tcnNhc19yZWdpc3Rlcl9zZXQgeworICAg IHVfaW50MzJfdCAgICAgZG9vcmJlbGw7ICAgICAgICAgICAgICAgICAgICAgICAvKjAwMDBoKi8K KyAgICB1X2ludDMyX3QgICAgIGZ1c2lvbl9zZXFfb2Zmc2V0OyAgICAgICAgICAgICAgLyowMDA0 aCovCisgICAgdV9pbnQzMl90ICAgICBmdXNpb25faG9zdF9kaWFnOyAgICAgICAgICAgICAgIC8q MDAwOGgqLworICAgIHVfaW50MzJfdCAgICAgcmVzZXJ2ZWRfMDE7ICAgICAgICAgICAgICAgICAg ICAvKjAwMENoKi8KKworICAgIHVfaW50MzJfdCAgICAgaW5ib3VuZF9tc2dfMDsgICAgICAgICAg ICAgICAgICAvKjAwMTBoKi8KKyAgICB1X2ludDMyX3QgICAgIGluYm91bmRfbXNnXzE7ICAgICAg ICAgICAgICAgICAgLyowMDE0aCovCisgICAgdV9pbnQzMl90ICAgICBvdXRib3VuZF9tc2dfMDsg ICAgICAgICAgICAgICAgIC8qMDAxOGgqLworICAgIHVfaW50MzJfdCAgICAgb3V0Ym91bmRfbXNn XzE7ICAgICAgICAgICAgICAgICAvKjAwMUNoKi8KKworICAgIHVfaW50MzJfdCAgICAgaW5ib3Vu ZF9kb29yYmVsbDsgICAgICAgICAgICAgICAvKjAwMjBoKi8KKyAgICB1X2ludDMyX3QgICAgIGlu Ym91bmRfaW50cl9zdGF0dXM7ICAgICAgICAgICAgLyowMDI0aCovCisgICAgdV9pbnQzMl90ICAg ICBpbmJvdW5kX2ludHJfbWFzazsgICAgICAgICAgICAgIC8qMDAyOGgqLworCisgICAgdV9pbnQz Ml90ICAgICBvdXRib3VuZF9kb29yYmVsbDsgICAgICAgICAgICAgIC8qMDAyQ2gqLworICAgIHVf aW50MzJfdCAgICAgb3V0Ym91bmRfaW50cl9zdGF0dXM7ICAgICAgICAgICAvKjAwMzBoKi8KKyAg ICB1X2ludDMyX3QgICAgIG91dGJvdW5kX2ludHJfbWFzazsgICAgICAgICAgICAgLyowMDM0aCov CisKKyAgICB1X2ludDMyX3QgICAgIHJlc2VydmVkXzFbMl07ICAgICAgICAgICAgICAgICAgLyow MDM4aCovCisKKyAgICB1X2ludDMyX3QgICAgIGluYm91bmRfcXVldWVfcG9ydDsgICAgICAgICAg ICAgLyowMDQwaCovCisgICAgdV9pbnQzMl90ICAgICBvdXRib3VuZF9xdWV1ZV9wb3J0OyAgICAg ICAgICAgIC8qMDA0NGgqLworCisgICAgdV9pbnQzMl90ICAgICByZXNlcnZlZF8yWzldOyAgICAg ICAgICAgICAgICAgIC8qMDA0OGgqLworICAgIHVfaW50MzJfdCAgICAgcmVwbHlfcG9zdF9ob3N0 X2luZGV4OyAgICAgICAgICAvKjAwNkNoKi8KKyAgICB1X2ludDMyX3QgICAgIHJlc2VydmVkXzJf MlsxMl07ICAgICAgICAgICAgICAgLyowMDcwaCovCisKKyAgICB1X2ludDMyX3QgICAgIG91dGJv dW5kX2Rvb3JiZWxsX2NsZWFyOyAgICAgICAgLyowMEEwaCovCisKKyAgICB1X2ludDMyX3QgICAg IHJlc2VydmVkXzNbM107ICAgICAgICAgICAgICAgICAgLyowMEE0aCovCisKKyAgICB1X2ludDMy X3QgICAgIG91dGJvdW5kX3NjcmF0Y2hfcGFkIDsgICAgICAgICAgLyowMEIwaCovCisgICAgdV9p bnQzMl90ICAgICBvdXRib3VuZF9zY3JhdGNoX3BhZF8yOyAgICAgICAgIC8qMDBCNGgqLworCisg ICAgdV9pbnQzMl90ICAgICByZXNlcnZlZF80WzJdOyAgICAgICAgICAgICAgICAgIC8qMDBCOGgq LworCisgICAgdV9pbnQzMl90ICAgICBpbmJvdW5kX2xvd19xdWV1ZV9wb3J0IDsgICAgICAgIC8q MDBDMGgqLworCisgICAgdV9pbnQzMl90ICAgICBpbmJvdW5kX2hpZ2hfcXVldWVfcG9ydCA7ICAg ICAgIC8qMDBDNGgqLworCisgICAgdV9pbnQzMl90ICAgICByZXNlcnZlZF81OyAgICAgICAgICAg ICAgICAgICAgIC8qMDBDOGgqLworICAgIHVfaW50MzJfdCAgICAgICAgIHJlc182WzExXTsgICAg ICAgICAgICAgICAgICAvKkNDaCovCisgICAgdV9pbnQzMl90ICAgICAgICAgaG9zdF9kaWFnOwor ICAgIHVfaW50MzJfdCAgICAgICAgIHNlcV9vZmZzZXQ7CisgICAgdV9pbnQzMl90ICAgICBpbmRl eF9yZWdpc3RlcnNbODA3XTsgICAgICAgICAgIC8qMDBDQ2gqLworCit9IG1yc2FzX3JlZ19zZXQ7 CisjcHJhZ21hIHBhY2soKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlybXdhcmUgSW50ZXJmYWNlIERl ZmluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKiBNRkkgc3RhbmRzIGZvciBNZWdhUkFJRCBTQVMgRlcgSW50 ZXJmYWNlLiBUaGlzIGlzIGp1c3QgYSBtb25pa2VyCisgKiBmb3IgcHJvdG9jb2wgYmV0d2VlbiB0 aGUgc29mdHdhcmUgYW5kIGZpcm13YXJlLiBDb21tYW5kcyBhcmUKKyAqIGlzc3VlZCB1c2luZyAi bWVzc2FnZSBmcmFtZXMiLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGVyBwb3N0cyBpdHMgc3RhdGUg aW4gdXBwZXIgNCBiaXRzIG9mIG91dGJvdW5kX21zZ18wIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUg TUZJX1NUQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZp bmUgTUZJX1NUQVRFX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNk ZWZpbmUgTUZJX1NUQVRFX0JCX0lOSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAK KyNkZWZpbmUgTUZJX1NUQVRFX0ZXX0lOSVQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAw MDAKKyNkZWZpbmUgTUZJX1NUQVRFX1dBSVRfSEFORFNIQUtFICAgICAgICAgICAgICAgIDB4NjAw MDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0ZXX0lOSVRfMiAgICAgICAgICAgICAgICAgICAgIDB4 NzAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0RFVklDRV9TQ0FOICAgICAgICAgICAgICAgICAg IDB4ODAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0JPT1RfTUVTU0FHRV9QRU5ESU5HICAgICAg ICAgIDB4OTAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0ZMVVNIX0NBQ0hFICAgICAgICAgICAg ICAgICAgIDB4QTAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX1JFQURZICAgICAgICAgICAgICAg ICAgICAgICAgIDB4QjAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX09QRVJBVElPTkFMICAgICAg ICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0ZBVUxUICAgICAgICAg ICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgTUZJX1JFU0VUX1JFUVVJUkVEICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUZJX1JFU0VUX0FEQVBURVIg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUVHQU1GSV9GUkFNRV9T SVpFICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIE1SU0FTX01GSV9GUkFNRV9TSVpF ICAgICAgICAgICAgICAgICAgICAxMDI0IAorI2RlZmluZSBNUlNBU19NRklfU0VOU0VfU0laRSAg ICAgICAgICAgICAgICAgICAgMTI4IAorCisvKgorICogRHVyaW5nIEZXIGluaXQsIGNsZWFyIHBl bmRpbmcgY21kcyAmIHJlc2V0IHN0YXRlIHVzaW5nIGluYm91bmRfbXNnXzAKKyAqCisgKiBBQk9S VCAgICAgICAgOiBBYm9ydCBhbGwgcGVuZGluZyBjbWRzCisgKiBSRUFEWSAgICAgICAgOiBNb3Zl IGZyb20gT1BFUkFUSU9OQUwgdG8gUkVBRFkgc3RhdGU7IGRpc2NhcmQgcXVldWUgaW5mbworICog TUZJTU9ERSAgICAgIDogRGlzY2FyZCAocG9zc2libGUpIGxvdyBNRkEgcG9zdGVkIGluIDY0LWJp dCBtb2RlICg/PykKKyAqIENMUl9IQU5EU0hBS0U6IEZXIGlzIHdhaXRpbmcgZm9yIEhBTkRTSEFL RSBmcm9tIEJJT1Mgb3IgRHJpdmVyCisgKiBIT1RQTFVHICAgICAgOiBSZXN1bWUgZnJvbSBIb3Rw bHVnCisgKiBNRklfU1RPUF9BRFAgOiBTZW5kIHNpZ25hbCB0byBGVyB0byBzdG9wIHByb2Nlc3Np bmcKKyAqLworCisjZGVmaW5lIFdSSVRFX1NFUVVFTkNFX09GRlNFVCAgICAgICAgICAgKDB4MDAw MDAwMEZDKSAvLyBJMjAKKyNkZWZpbmUgSE9TVF9ESUFHTk9TVElDX09GRlNFVCAgICAgICAgICAo MHgwMDAwMDBGOCkgIC8vIEkyMAorI2RlZmluZSBESUFHX1dSSVRFX0VOQUJMRSAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDAwMDAwODApCisjZGVmaW5lIERJQUdfUkVTRVRfQURBUFRFUiAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKworI2RlZmluZSBNRklfQURQX1JFU0VUICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBNRklfSU5JVF9BQk9S VCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNRklfSU5JVF9S RUFEWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNRklfSU5J VF9NRklNT0RFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNRklf SU5JVF9DTEVBUl9IQU5EU0hBS0UgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBN RklfSU5JVF9IT1RQTFVHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmlu ZSBNRklfU1RPUF9BRFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2Rl ZmluZSBNRklfUkVTRVRfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgTUZJX0lOSVRfUkVB RFl8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1G SV9JTklUX01GSU1PREV8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1GSV9JTklUX0FCT1JUCisKKy8qCisgKiBNRkkgZnJhbWUgZmxhZ3MgCisgKi8K KyNkZWZpbmUgTUZJX0ZSQU1FX1BPU1RfSU5fUkVQTFlfUVVFVUUgICAgICAgICAgIDB4MDAwMAor I2RlZmluZSBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFICAgICAgMHgwMDAxCisj ZGVmaW5lIE1GSV9GUkFNRV9TR0wzMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNk ZWZpbmUgTUZJX0ZSQU1FX1NHTDY0ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2Rl ZmluZSBNRklfRlJBTUVfU0VOU0UzMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVm aW5lIE1GSV9GUkFNRV9TRU5TRTY0ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZp bmUgTUZJX0ZSQU1FX0RJUl9OT05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmlu ZSBNRklfRlJBTUVfRElSX1dSSVRFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5l IE1GSV9GUkFNRV9ESVJfUkVBRCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUg TUZJX0ZSQU1FX0RJUl9CT1RIICAgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBN RklfRlJBTUVfSUVFRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisKKy8qCisgKiBE ZWZpbml0aW9uIGZvciBjbWRfc3RhdHVzCisgKi8KKyNkZWZpbmUgTUZJX0NNRF9TVEFUVVNfUE9M TF9NT0RFICAgICAgICAgICAgICAgIDB4RkYKKworLyoKKyAqIE1GSSBjb21tYW5kIG9wY29kZXMK KyAqLworI2RlZmluZSBNRklfQ01EX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MAorI2RlZmluZSBNRklfQ01EX0xEX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQor I2RlZmluZSBNRklfQ01EX0xEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2Rl ZmluZSBNRklfQ01EX0xEX1NDU0lfSU8gICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmlu ZSBNRklfQ01EX1BEX1NDU0lfSU8gICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBN RklfQ01EX0RDTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBNRklf Q01EX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBNRklfQ01E X1NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBNRklfQ01EX1NU UCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBNRklfQ01EX0lOVkFM SUQgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZgorCisjZGVmaW5lIE1SX0RDTURfQ1RSTF9H RVRfSU5GTyAgICAgICAgICAgICAgICAgICAweDAxMDEwMDAwCisjZGVmaW5lIE1SX0RDTURfTERf R0VUX0xJU1QgICAgICAgICAgICAgICAgICAgICAweDAzMDEwMDAwCisjZGVmaW5lIE1SX0RDTURf Q1RSTF9DQUNIRV9GTFVTSCAgICAgICAgICAgICAgICAweDAxMTAxMDAwCisjZGVmaW5lIE1SX0ZM VVNIX0NUUkxfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIE1SX0ZMVVNI X0RJU0tfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTVJfRENNRF9D VFJMX1NIVVRET1dOICAgICAgICAgICAgICAgICAgIDB4MDEwNTAwMDAKKyNkZWZpbmUgTVJfRENN RF9ISUJFUk5BVEVfU0hVVERPV04gICAgICAgICAgICAgIDB4MDEwNjAwMDAKKyNkZWZpbmUgTVJf RU5BQkxFX0RSSVZFX1NQSU5ET1dOICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBNUl9E Q01EX0NUUkxfRVZFTlRfR0VUX0lORk8gICAgICAgICAgICAgMHgwMTA0MDEwMAorI2RlZmluZSBN Ul9EQ01EX0NUUkxfRVZFTlRfR0VUICAgICAgICAgICAgICAgICAgMHgwMTA0MDMwMAorI2RlZmlu ZSBNUl9EQ01EX0NUUkxfRVZFTlRfV0FJVCAgICAgICAgICAgICAgICAgMHgwMTA0MDUwMAorI2Rl ZmluZSBNUl9EQ01EX0xEX0dFVF9QUk9QRVJUSUVTICAgICAgICAgICAgICAgMHgwMzAzMDAwMAor CisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUiAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAw MDAwCisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUl9SRVNFVF9BTEwgICAgICAgICAgICAgICAweDA4 MDEwMTAwCisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUl9SRVNFVF9MRCAgICAgICAgICAgICAgICAw eDA4MDEwMjAwCisjZGVmaW5lIE1SX0RDTURfUERfTElTVF9RVUVSWSAgICAgICAgICAgICAgICAg ICAweDAyMDEwMTAwCisKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYICAgICAgICAgICAg ICAgICAgIDB4MDEwMGUyMDAKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYX0lOSVRfREFU QV9HRVQgICAgIDB4MDEwMGUyMDEKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYX1FVRVVF X0RBVEEgICAgICAgIDB4MDEwMGUyMDIKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01JU0NfQ1BYX1VO UkVHSVNURVIgICAgICAgIDB4MDEwMGUyMDMKKyNkZWZpbmUgTUFYX01SX1JPV19TSVpFICAgICAg ICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1SX0NQWF9ESVJfV1JJVEUgICAgICAgICAg ICAgICAgICAgICAgICAxCisjZGVmaW5lIE1SX0NQWF9ESVJfUkVBRCAgICAgICAgICAgICAgICAg ICAgICAgICAwCisjZGVmaW5lIE1SX0NQWF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAg ICAxCisKKyNkZWZpbmUgTVJfRENNRF9DVFJMX0lPX01FVFJJQ1NfR0VUICAgICAgICAgICAgIDB4 MDExNzAyMDAgICAvLyBnZXQgSU8gbWV0cmljcworCisjZGVmaW5lIE1SX0VWVF9DRkdfQ0xFQVJF RCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKworI2RlZmluZSBNUl9FVlRfTERfU1RBVEVf Q0hBTkdFICAgICAgICAgICAgICAgICAgMHgwMDUxCisjZGVmaW5lIE1SX0VWVF9QRF9JTlNFUlRF RCAgICAgICAgICAgICAgICAgICAgICAweDAwNWIKKyNkZWZpbmUgTVJfRVZUX1BEX1JFTU9WRUQg ICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MAorI2RlZmluZSBNUl9FVlRfTERfQ1JFQVRFRCAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDhhCisjZGVmaW5lIE1SX0VWVF9MRF9ERUxFVEVEICAg ICAgICAgICAgICAgICAgICAgICAweDAwOGIKKyNkZWZpbmUgTVJfRVZUX0ZPUkVJR05fQ0ZHX0lN UE9SVEVEICAgICAgICAgICAgIDB4MDBkYgorI2RlZmluZSBNUl9FVlRfTERfT0ZGTElORSAgICAg ICAgICAgICAgICAgICAgICAgMHgwMGZjCisjZGVmaW5lIE1SX0VWVF9DVFJMX0hPU1RfQlVTX1ND QU5fUkVRVUVTVEVEICAgICAweDAxNTIKKyNkZWZpbmUgTVJfRVZUX0NUUkxfUEVSRl9DT0xMRUNU SU9OICAgICAgICAgICAgIDB4MDE3ZQorCisvKgorICogTUZJIGNvbW1hbmQgY29tcGxldGlvbiBj b2RlcworICovCitlbnVtIE1GSV9TVEFUIHsKKyAgICBNRklfU1RBVF9PSyA9IDB4MDAsCisgICAg TUZJX1NUQVRfSU5WQUxJRF9DTUQgPSAweDAxLAorICAgIE1GSV9TVEFUX0lOVkFMSURfRENNRCA9 IDB4MDIsCisgICAgTUZJX1NUQVRfSU5WQUxJRF9QQVJBTUVURVIgPSAweDAzLAorICAgIE1GSV9T VEFUX0lOVkFMSURfU0VRVUVOQ0VfTlVNQkVSID0gMHgwNCwKKyAgICBNRklfU1RBVF9BQk9SVF9O T1RfUE9TU0lCTEUgPSAweDA1LAorICAgIE1GSV9TVEFUX0FQUF9IT1NUX0NPREVfTk9UX0ZPVU5E ID0gMHgwNiwKKyAgICBNRklfU1RBVF9BUFBfSU5fVVNFID0gMHgwNywKKyAgICBNRklfU1RBVF9B UFBfTk9UX0lOSVRJQUxJWkVEID0gMHgwOCwKKyAgICBNRklfU1RBVF9BUlJBWV9JTkRFWF9JTlZB TElEID0gMHgwOSwKKyAgICBNRklfU1RBVF9BUlJBWV9ST1dfTk9UX0VNUFRZID0gMHgwYSwKKyAg ICBNRklfU1RBVF9DT05GSUdfUkVTT1VSQ0VfQ09ORkxJQ1QgPSAweDBiLAorICAgIE1GSV9TVEFU X0RFVklDRV9OT1RfRk9VTkQgPSAweDBjLAorICAgIE1GSV9TVEFUX0RSSVZFX1RPT19TTUFMTCA9 IDB4MGQsCisgICAgTUZJX1NUQVRfRkxBU0hfQUxMT0NfRkFJTCA9IDB4MGUsCisgICAgTUZJX1NU QVRfRkxBU0hfQlVTWSA9IDB4MGYsCisgICAgTUZJX1NUQVRfRkxBU0hfRVJST1IgPSAweDEwLAor ICAgIE1GSV9TVEFUX0ZMQVNIX0lNQUdFX0JBRCA9IDB4MTEsCisgICAgTUZJX1NUQVRfRkxBU0hf SU1BR0VfSU5DT01QTEVURSA9IDB4MTIsCisgICAgTUZJX1NUQVRfRkxBU0hfTk9UX09QRU4gPSAw eDEzLAorICAgIE1GSV9TVEFUX0ZMQVNIX05PVF9TVEFSVEVEID0gMHgxNCwKKyAgICBNRklfU1RB VF9GTFVTSF9GQUlMRUQgPSAweDE1LAorICAgIE1GSV9TVEFUX0hPU1RfQ09ERV9OT1RfRk9VTlQg PSAweDE2LAorICAgIE1GSV9TVEFUX0xEX0NDX0lOX1BST0dSRVNTID0gMHgxNywKKyAgICBNRklf U1RBVF9MRF9JTklUX0lOX1BST0dSRVNTID0gMHgxOCwKKyAgICBNRklfU1RBVF9MRF9MQkFfT1VU X09GX1JBTkdFID0gMHgxOSwKKyAgICBNRklfU1RBVF9MRF9NQVhfQ09ORklHVVJFRCA9IDB4MWEs CisgICAgTUZJX1NUQVRfTERfTk9UX09QVElNQUwgPSAweDFiLAorICAgIE1GSV9TVEFUX0xEX1JC TERfSU5fUFJPR1JFU1MgPSAweDFjLAorICAgIE1GSV9TVEFUX0xEX1JFQ09OX0lOX1BST0dSRVNT ID0gMHgxZCwKKyAgICBNRklfU1RBVF9MRF9XUk9OR19SQUlEX0xFVkVMID0gMHgxZSwKKyAgICBN RklfU1RBVF9NQVhfU1BBUkVTX0VYQ0VFREVEID0gMHgxZiwKKyAgICBNRklfU1RBVF9NRU1PUllf Tk9UX0FWQUlMQUJMRSA9IDB4MjAsCisgICAgTUZJX1NUQVRfTUZDX0hXX0VSUk9SID0gMHgyMSwK KyAgICBNRklfU1RBVF9OT19IV19QUkVTRU5UID0gMHgyMiwKKyAgICBNRklfU1RBVF9OT1RfRk9V TkQgPSAweDIzLAorICAgIE1GSV9TVEFUX05PVF9JTl9FTkNMID0gMHgyNCwKKyAgICBNRklfU1RB VF9QRF9DTEVBUl9JTl9QUk9HUkVTUyA9IDB4MjUsCisgICAgTUZJX1NUQVRfUERfVFlQRV9XUk9O RyA9IDB4MjYsCisgICAgTUZJX1NUQVRfUFJfRElTQUJMRUQgPSAweDI3LAorICAgIE1GSV9TVEFU X1JPV19JTkRFWF9JTlZBTElEID0gMHgyOCwKKyAgICBNRklfU1RBVF9TQVNfQ09ORklHX0lOVkFM SURfQUNUSU9OID0gMHgyOSwKKyAgICBNRklfU1RBVF9TQVNfQ09ORklHX0lOVkFMSURfREFUQSA9 IDB4MmEsCisgICAgTUZJX1NUQVRfU0FTX0NPTkZJR19JTlZBTElEX1BBR0UgPSAweDJiLAorICAg IE1GSV9TVEFUX1NBU19DT05GSUdfSU5WQUxJRF9UWVBFID0gMHgyYywKKyAgICBNRklfU1RBVF9T Q1NJX0RPTkVfV0lUSF9FUlJPUiA9IDB4MmQsCisgICAgTUZJX1NUQVRfU0NTSV9JT19GQUlMRUQg PSAweDJlLAorICAgIE1GSV9TVEFUX1NDU0lfUkVTRVJWQVRJT05fQ09ORkxJQ1QgPSAweDJmLAor ICAgIE1GSV9TVEFUX1NIVVRET1dOX0ZBSUxFRCA9IDB4MzAsCisgICAgTUZJX1NUQVRfVElNRV9O T1RfU0VUID0gMHgzMSwKKyAgICBNRklfU1RBVF9XUk9OR19TVEFURSA9IDB4MzIsCisgICAgTUZJ X1NUQVRfTERfT0ZGTElORSA9IDB4MzMsCisgICAgTUZJX1NUQVRfUEVFUl9OT1RJRklDQVRJT05f UkVKRUNURUQgPSAweDM0LAorICAgIE1GSV9TVEFUX1BFRVJfTk9USUZJQ0FUSU9OX0ZBSUxFRCA9 IDB4MzUsCisgICAgTUZJX1NUQVRfUkVTRVJWQVRJT05fSU5fUFJPR1JFU1MgPSAweDM2LAorICAg IE1GSV9TVEFUX0kyQ19FUlJPUlNfREVURUNURUQgPSAweDM3LAorICAgIE1GSV9TVEFUX1BDSV9F UlJPUlNfREVURUNURUQgPSAweDM4LAorICAgIE1GSV9TVEFUX0NPTkZJR19TRVFfTUlTTUFUQ0gg PSAweDY3LAorCisgICAgTUZJX1NUQVRfSU5WQUxJRF9TVEFUVVMgPSAweEZGCit9OworCisvKgor ICogTnVtYmVyIG9mIG1haWxib3ggYnl0ZXMgaW4gRENNRCBtZXNzYWdlIGZyYW1lCisgKi8KKyNk ZWZpbmUgTUZJX01CT1hfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKK2VudW0g TVJfRVZUX0NMQVNTIHsKKworICAgICAgICBNUl9FVlRfQ0xBU1NfREVCVUcgPSAtMiwKKyAgICAg ICAgTVJfRVZUX0NMQVNTX1BST0dSRVNTID0gLTEsCisgICAgICAgIE1SX0VWVF9DTEFTU19JTkZP ID0gMCwKKyAgICAgICAgTVJfRVZUX0NMQVNTX1dBUk5JTkcgPSAxLAorICAgICAgICBNUl9FVlRf Q0xBU1NfQ1JJVElDQUwgPSAyLAorICAgICAgICBNUl9FVlRfQ0xBU1NfRkFUQUwgPSAzLAorICAg ICAgICBNUl9FVlRfQ0xBU1NfREVBRCA9IDQsCisKK307CisKK2VudW0gTVJfRVZUX0xPQ0FMRSB7 CisKKyAgICAgICAgTVJfRVZUX0xPQ0FMRV9MRCA9IDB4MDAwMSwKKyAgICAgICAgTVJfRVZUX0xP Q0FMRV9QRCA9IDB4MDAwMiwKKyAgICAgICAgTVJfRVZUX0xPQ0FMRV9FTkNMID0gMHgwMDA0LAor ICAgICAgICBNUl9FVlRfTE9DQUxFX0JCVSA9IDB4MDAwOCwKKyAgICAgICAgTVJfRVZUX0xPQ0FM RV9TQVMgPSAweDAwMTAsCisgICAgICAgIE1SX0VWVF9MT0NBTEVfQ1RSTCA9IDB4MDAyMCwKKyAg ICAgICAgTVJfRVZUX0xPQ0FMRV9DT05GSUcgPSAweDAwNDAsCisgICAgICAgIE1SX0VWVF9MT0NB TEVfQ0xVU1RFUiA9IDB4MDA4MCwKKyAgICAgICAgTVJfRVZUX0xPQ0FMRV9BTEwgPSAweGZmZmYs CisKK307CisKK2VudW0gTVJfRVZUX0FSR1MgeworCisgICAgICAgIE1SX0VWVF9BUkdTX05PTkUs CisgICAgICAgIE1SX0VWVF9BUkdTX0NEQl9TRU5TRSwKKyAgICAgICAgTVJfRVZUX0FSR1NfTEQs CisgICAgICAgIE1SX0VWVF9BUkdTX0xEX0NPVU5ULAorICAgICAgICBNUl9FVlRfQVJHU19MRF9M QkEsCisgICAgICAgIE1SX0VWVF9BUkdTX0xEX09XTkVSLAorICAgICAgICBNUl9FVlRfQVJHU19M RF9MQkFfUERfTEJBLAorICAgICAgICBNUl9FVlRfQVJHU19MRF9QUk9HLAorICAgICAgICBNUl9F VlRfQVJHU19MRF9TVEFURSwKKyAgICAgICAgTVJfRVZUX0FSR1NfTERfU1RSSVAsCisgICAgICAg IE1SX0VWVF9BUkdTX1BELAorICAgICAgICBNUl9FVlRfQVJHU19QRF9FUlIsCisgICAgICAgIE1S X0VWVF9BUkdTX1BEX0xCQSwKKyAgICAgICAgTVJfRVZUX0FSR1NfUERfTEJBX0xELAorICAgICAg ICBNUl9FVlRfQVJHU19QRF9QUk9HLAorICAgICAgICBNUl9FVlRfQVJHU19QRF9TVEFURSwKKyAg ICAgICAgTVJfRVZUX0FSR1NfUENJLAorICAgICAgICBNUl9FVlRfQVJHU19SQVRFLAorICAgICAg ICBNUl9FVlRfQVJHU19TVFIsCisgICAgICAgIE1SX0VWVF9BUkdTX1RJTUUsCisgICAgICAgIE1S X0VWVF9BUkdTX0VDQywKKyAgICAgICAgTVJfRVZUX0FSR1NfTERfUFJPUCwKKyAgICAgICAgTVJf RVZUX0FSR1NfUERfU1BBUkUsCisgICAgICAgIE1SX0VWVF9BUkdTX1BEX0lOREVYLAorICAgICAg ICBNUl9FVlRfQVJHU19ESUFHX1BBU1MsCisgICAgICAgIE1SX0VWVF9BUkdTX0RJQUdfRkFJTCwK KyAgICAgICAgTVJfRVZUX0FSR1NfUERfTEJBX0xCQSwKKyAgICAgICAgTVJfRVZUX0FSR1NfUE9S VF9QSFksCisgICAgICAgIE1SX0VWVF9BUkdTX1BEX01JU1NJTkcsCisgICAgICAgIE1SX0VWVF9B UkdTX1BEX0FERFJFU1MsCisgICAgICAgIE1SX0VWVF9BUkdTX0JJVE1BUCwKKyAgICAgICAgTVJf RVZUX0FSR1NfQ09OTkVDVE9SLAorICAgICAgICBNUl9FVlRfQVJHU19QRF9QRCwKKyAgICAgICAg TVJfRVZUX0FSR1NfUERfRlJVLAorICAgICAgICBNUl9FVlRfQVJHU19QRF9QQVRISU5GTywKKwkJ TVJfRVZUX0FSR1NfUERfUE9XRVJfU1RBVEUsCisgICAgICAgIE1SX0VWVF9BUkdTX0dFTkVSSUMs Cit9OworCisKKy8qCisgKiBUaHVuZGVyYm9sdCAoYW5kIGxhdGVyKSBEZWZpbmVzIAorICovCisj ZGVmaW5lIE1SU0FTX01BWF9TWl9DSEFJTl9GUkFNRSAgICAgICAgICAgICAgICAgIDEwMjQKKyNk ZWZpbmUgTUZJX0ZVU0lPTl9FTkFCTEVfSU5URVJSVVBUX01BU0sgKDB4MDAwMDAwMDkpCisjZGVm aW5lIE1SU0FTX01QSTJfUkFJRF9ERUZBVUxUX0lPX0ZSQU1FX1NJWkUgICAgIDI1NgorI2RlZmlu ZSBNUlNBU19NUEkyX0ZVTkNUSU9OX1BBU1NUSFJVX0lPX1JFUVVFU1QgICAweEYwCisjZGVmaW5l IE1SU0FTX01QSTJfRlVOQ1RJT05fTERfSU9fUkVRVUVTVCAgICAgICAgIDB4RjEKKyNkZWZpbmUg TVJTQVNfTE9BRF9CQUxBTkNFX0ZMQUcgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIE1S U0FTX0RDTURfTUJPWF9QRU5EX0ZMQUcgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBIT1NU X0RJQUdfV1JJVEVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgSE9T VF9ESUFHX1JFU0VUX0FEQVBURVIgICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgTVJT QVNfVEJPTFRfTUFYX1JFU0VUX1RSSUVTICAgICAgICAgICAgICAzCisjZGVmaW5lIE1SU0FTX01B WF9NRklfQ01EUyAgICAgICAgICAgICAgICAgICAgICAgMzIKKworLyoKKyAqIEludmFkZXIgRGVm aW5lcyAKKyAqLworI2RlZmluZSBNUEkyX1RZUEVfQ1VEQSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MgorI2RlZmluZSBNUEkyNV9TQVNfREVWSUNFMF9GTEFHU19FTkFCTEVEX0ZBU1Rf UEFUSCAgIDB4NDAwMAorI2RlZmluZSBNUl9STF9GTEFHU19HUkFOVF9ERVNUSU5BVElPTl9DUFUw ICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTVJfUkxfRkxBR1NfR1JBTlRfREVTVElOQVRJT05fQ1BV MSAgICAgICAgICAweDEwCisjZGVmaW5lIE1SX1JMX0ZMQUdTX0dSQU5UX0RFU1RJTkFUSU9OX0NV REEgICAgICAgICAgMHg4MAorI2RlZmluZSBNUl9STF9GTEFHU19TRVFfTlVNX0VOQUJMRSAgICAg ICAgICAgICAgICAgIDB4OAorCisvKiAKKyAqIFQxMCBQSSBkZWZpbmVzIAorICovCisjZGVmaW5l IE1SX1BST1RfSU5GT19UWVBFX0NPTlRST0xMRVIgICAgICAgICAgICAgIDB4OAorI2RlZmluZSBN UlNBU19TQ1NJX1ZBUklBQkxFX0xFTkdUSF9DTUQgICAgICAgICAgICAweDdmCisjZGVmaW5lIE1S U0FTX1NDU0lfU0VSVklDRV9BQ1RJT05fUkVBRDMyICAgICAgICAgIDB4OQorI2RlZmluZSBNUlNB U19TQ1NJX1NFUlZJQ0VfQUNUSU9OX1dSSVRFMzIgICAgICAgICAweEIKKyNkZWZpbmUgTVJTQVNf U0NTSV9BRERMX0NEQl9MRU4gICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBNUlNBU19S RF9XUl9QUk9URUNUX0NIRUNLX0FMTCAgICAgICAgICAgICAweDIwCisjZGVmaW5lIE1SU0FTX1JE X1dSX1BST1RFQ1RfQ0hFQ0tfTk9ORSAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgTVJTQVNfU0NT SUJMT0NLU0laRSAgICAgICAgICAgICAgICAgICAgICAgNTEyCisKKy8qCisgKiBSYWlkIGNvbnRl eHQgZmxhZ3MKKyAqLworI2RlZmluZSBNUl9SQUlEX0NUWF9SQUlEX0ZMQUdTX0lPX1NVQl9UWVBF X1NISUZUICAgMHg0CisjZGVmaW5lIE1SX1JBSURfQ1RYX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVf TUFTSyAgICAweDMwCit0eXBlZGVmIGVudW0gTVJfUkFJRF9GTEFHU19JT19TVUJfVFlQRSB7Cisg ICAgICAgIE1SX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVfTk9ORSA9IDAsCisgICAgICAgIE1SX1JB SURfRkxBR1NfSU9fU1VCX1RZUEVfU1lTVEVNX1BEID0gMSwKK30gTVJfUkFJRF9GTEFHU19JT19T VUJfVFlQRTsKKworLyoKKyAqIFJlcXVlc3QgZGVzY3JpcHRvciB0eXBlcworICovCisjZGVmaW5l IE1SU0FTX1JFUV9ERVNDUklQVF9GTEFHU19MRF9JTyAgICAgICAgICAgMHg3CisjZGVmaW5lIE1S U0FTX1JFUV9ERVNDUklQVF9GTEFHU19NRkEgICAgICAgICAgICAgMHgxCisjZGVmaW5lIE1SU0FT X1JFUV9ERVNDUklQVF9GTEFHU19OT19MT0NLICAgICAgICAgMHgyCisjZGVmaW5lIE1SU0FTX1JF UV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUICAgICAgMQorI2RlZmluZSBNUlNBU19GUF9DTURf TEVOICAgICAgMTYKKyNkZWZpbmUgTVJTQVNfRlVTSU9OX0lOX1JFU0VUIDAKKworI2RlZmluZSBS QUlEX0NUWF9TUEFOQVJNX0FSTV9TSElGVCAgICAgICgwKQorI2RlZmluZSBSQUlEX0NUWF9TUEFO QVJNX0FSTV9NQVNLICAgICAgICgweDFmKQorI2RlZmluZSBSQUlEX0NUWF9TUEFOQVJNX1NQQU5f U0hJRlQgICAgICg1KQorI2RlZmluZSBSQUlEX0NUWF9TUEFOQVJNX1NQQU5fTUFTSyAgICAgICgw eEUwKQorCisvKiAgICAKKyAqIERlZmluZSByZWdpb24gbG9jayB0eXBlcworICovCit0eXBlZGVm IGVudW0gICAgX1JFR0lPTl9UWVBFIHsKKyAgICBSRUdJT05fVFlQRV9VTlVTRUQgICAgICAgPSAw LCAgICAvLyBsb2NrIGlzIGN1cnJlbnRseSBub3QgYWN0aXZlCisgICAgUkVHSU9OX1RZUEVfU0hB UkVEX1JFQUQgID0gMSwgICAgLy8gc2hhcmVkIGxvY2sgKGZvciByZWFkcykKKyAgICBSRUdJT05f VFlQRV9TSEFSRURfV1JJVEUgPSAyLAorICAgIFJFR0lPTl9UWVBFX0VYQ0xVU0lWRSAgICA9IDMs ICAgIC8vIGV4Y2x1c2l2ZSBsb2NrIChmb3Igd3JpdGVzKQorfSBSRUdJT05fVFlQRTsKKworLyog CisgKiBNUiBwcml2YXRlIGRlZmluZXMgCisgKi8KKyNkZWZpbmUgTVJfUERfSU5WQUxJRCAweEZG RkYKKyNkZWZpbmUgTUFYX1NQQU5fREVQVEggOAorI2RlZmluZSBNQVhfUkFJRE1BUF9TUEFOX0RF UFRIIChNQVhfU1BBTl9ERVBUSCkKKyNkZWZpbmUgTUFYX1JPV19TSVpFIDMyCisjZGVmaW5lIE1B WF9SQUlETUFQX1JPV19TSVpFIChNQVhfUk9XX1NJWkUpCisjZGVmaW5lIE1BWF9MT0dJQ0FMX0RS SVZFUyA2NAorI2RlZmluZSBNQVhfUkFJRE1BUF9MT0dJQ0FMX0RSSVZFUyAoTUFYX0xPR0lDQUxf RFJJVkVTKQorI2RlZmluZSBNQVhfUkFJRE1BUF9WSUVXUyAoTUFYX0xPR0lDQUxfRFJJVkVTKQor I2RlZmluZSBNQVhfQVJSQVlTIDEyOAorI2RlZmluZSBNQVhfUkFJRE1BUF9BUlJBWVMgKE1BWF9B UlJBWVMpCisjZGVmaW5lIE1BWF9QSFlTSUNBTF9ERVZJQ0VTIDI1NgorI2RlZmluZSBNQVhfUkFJ RE1BUF9QSFlTSUNBTF9ERVZJQ0VTIChNQVhfUEhZU0lDQUxfREVWSUNFUykKKyNkZWZpbmUgTVJf RENNRF9MRF9NQVBfR0VUX0lORk8gMHgwMzAwZTEwMSAKKworLyoKKyAqIFNDU0ktQ0FNIFJlbGF0 ZWQgRGVmaW5lcyAKKyAqLworI2RlZmluZSBNUlNBU19TQ1NJX01BWF9MVU5TICAgICAwICAgLy96 ZXJvIGZvciBub3cgCQorI2RlZmluZSBNUlNBU19TQ1NJX0lOSVRJQVRPUl9JRCAyNTUKKyNkZWZp bmUgTVJTQVNfU0NTSV9NQVhfQ01EUyAgICAgOAorI2RlZmluZSBNUlNBU19TQ1NJX01BWF9DREJf TEVOICAxNgorI2RlZmluZSBNUlNBU19TQ1NJX1NFTlNFX0JVRkZFUlNJWkUgOTYKKyNkZWZpbmUg TVJTQVNfTUFYX1NHTCAgICAgICAgICAgNzAKKyNkZWZpbmUgTVJTQVNfTUFYX0lPX1NJWkUgICAg ICAgKDI1NiAqIDEwMjQpCisjZGVmaW5lIE1SU0FTX0lOVEVSTkFMX0NNRFMgICAgIDMyCisKKy8q IFJlcXVlc3QgdHlwZXMgKi8KKyNkZWZpbmUgTVJTQVNfUkVRX1RZUEVfSU5URVJOQUxfQ01EICAg ICAweDAKKyNkZWZpbmUgTVJTQVNfUkVRX1RZUEVfQUVOX0ZFVENIICAgICAgICAweDEKKyNkZWZp bmUgTVJTQVNfUkVRX1RZUEVfUEFTU1RIUlUgICAgICAgICAweDIKKyNkZWZpbmUgTVJTQVNfUkVR X1RZUEVfR0VUU0VUX1BBUkFNICAgICAweDMKKyNkZWZpbmUgTVJTQVNfUkVRX1RZUEVfU0NTSV9J TyAgICAgICAgICAweDQKKworLyogUmVxdWVzdCBzdGF0ZXMgKi8KKyNkZWZpbmUgTVJTQVNfUkVR X1NUQVRFX0ZSRUUgICAgICAgICAgICAwCisjZGVmaW5lIE1SU0FTX1JFUV9TVEFURV9CVVNZICAg ICAgICAgICAgMQorI2RlZmluZSBNUlNBU19SRVFfU1RBVEVfVFJBTiAgICAgICAgICAgIDIKKyNk ZWZpbmUgTVJTQVNfUkVRX1NUQVRFX0NPTVBMRVRFICAgICAgICAzCisKK2VudW0gbXJzYXNfcmVx X2ZsYWdzIHsKKyAgICBNUlNBU19ESVJfVU5LTk9XTiA9IDB4MSwKKyAgICBNUlNBU19ESVJfSU4g PSAweDIsCisgICAgTVJTQVNfRElSX09VVCA9IDB4NCwKKyAgICBNUlNBU19ESVJfTk9ORSA9IDB4 OCwKK307CisKKy8qIAorICogQWRhcHRlciBSZXNldCBTdGF0ZXMgCisgKi8KK2VudW0geworICAg IE1SU0FTX0hCQV9PUEVSQVRJT05BTCAgICAgICAgICAgICAgICAgPSAwLAorICAgIE1SU0FTX0FE UFJFU0VUX1NNX0lORkFVTFQgICAgICAgICAgICAgPSAxLAorICAgIE1SU0FTX0FEUFJFU0VUX1NN X0ZXX1JFU0VUX1NVQ0NFU1MgICAgPSAyLAorICAgIE1SU0FTX0FEUFJFU0VUX1NNX09QRVJBVElP TkFMICAgICAgICAgPSAzLAorICAgIE1SU0FTX0hXX0NSSVRJQ0FMX0VSUk9SICAgICAgICAgICAg ICAgPSA0LAorICAgIE1SU0FTX0FEUFJFU0VUX0lOUFJPR19TSUdOICAgICAgICAgICAgPSAweERF QURERUFELAorfTsKKworLyogCisgKiBNUFQgQ29tbWFuZCBTdHJ1Y3R1cmUgCisgKi8KK3N0cnVj dCBtcnNhc19tcHRfY21kIHsKKyAgICBNUlNBU19SQUlEX1NDU0lfSU9fUkVRVUVTVCAgKmlvX3Jl cXVlc3Q7CisgICAgYnVzX2FkZHJfdCAgICAgIGlvX3JlcXVlc3RfcGh5c19hZGRyOworICAgIE1Q STJfU0dFX0lPX1VOSU9OICpjaGFpbl9mcmFtZTsKKyAgICBidXNfYWRkcl90ICAgICAgY2hhaW5f ZnJhbWVfcGh5c19hZGRyOworICAgIHVfaW50MzJfdCAgICAgICBzZ2VfY291bnQ7CisgICAgdV9p bnQ4X3QgICAgICAgICpzZW5zZTsKKyAgICBidXNfYWRkcl90ICAgICAgc2Vuc2VfcGh5c19hZGRy OworICAgIHVfaW50OF90ICAgICAgICByZXRyeV9mb3JfZndfcmVzZXQ7CisgICAgTVJTQVNfUkVR VUVTVF9ERVNDUklQVE9SX1VOSU9OICpyZXF1ZXN0X2Rlc2M7CisgICAgdV9pbnQzMl90ICAgICAg IHN5bmNfY21kX2lkeDsgLy9Gb3IgZ2V0dGluZyBNRkkgY21kIGZyb20gbGlzdCB3aGVuIGNvbXBs ZXRlCisgICAgdV9pbnQzMl90ICAgICAgIGluZGV4OworICAgIHVfaW50OF90ICAgICAgICBmbGFn czsKKyAgICB1X2ludDhfdCAgICAgICAgbG9hZF9iYWxhbmNlOworICAgIGJ1c19zaXplX3QgICAg ICBsZW5ndGg7ICAgICAgIC8vIHJlcXVlc3QgbGVuZ3RoIAorICAgIHVfaW50MzJfdCAgICAgICBl cnJvcl9jb2RlOyAgIC8vIGVycm9yIGR1cmluZyByZXF1ZXN0IGRtYW1hcCBsb2FkICAKKyAgICBi dXNfZG1hbWFwX3QgICAgZGF0YV9kbWFtYXA7ICAgICAgICAKKyAgICB2b2lkICAgICAgICAgICAg KmRhdGE7CisgICAgdW5pb24gY2NiICAgICAgICpjY2JfcHRyOyAgICAgLy8gcG9pbnRlciB0byBj Y2IgCisgICAgc3RydWN0IGNhbGxvdXQgIGNtX2NhbGxvdXQ7CisgICAgc3RydWN0IG1yc2FzX3Nv ZnRjICAqc2M7CisgICAgVEFJTFFfRU5UUlkobXJzYXNfbXB0X2NtZCkgIG5leHQ7Cit9OworCisv KiAKKyAqIE1GSSBDb21tYW5kIFN0cnVjdHVyZSAKKyAqLworc3RydWN0IG1yc2FzX21maV9jbWQg eworICAgIHVuaW9uIG1yc2FzX2ZyYW1lICAgKmZyYW1lOworICAgIGJ1c19kbWFtYXBfdCAgICAg ICAgZnJhbWVfZG1hbWFwOyAgIC8vIG1maSBmcmFtZSBkbWFtYXAgCisgICAgdm9pZCAgICAgICAg ICAgICAgICAqZnJhbWVfbWVtOyAgICAgLy8gbWZpIGZyYW1lIHZpcnR1YWwgYWRkciAKKyAgICBi dXNfYWRkcl90ICAgICAgICAgIGZyYW1lX3BoeXNfYWRkcjsgLy8gbWZpIGZyYW1lIHBoeXNpY2Fs IGFkZHIgCisgICAgdV9pbnQ4X3QgICAgICAgICAgICAqc2Vuc2U7CisgICAgYnVzX2RtYW1hcF90 ICAgICAgICBzZW5zZV9kbWFtYXA7ICAgLy8gbWZpIHNlbnNlIGRtYW1hcCAKKyAgICB2b2lkICAg ICAgICAgICAgICAgICpzZW5zZV9tZW07ICAgICAvLyBtZmkgc2Vuc2UgdmlydHVhbCBhZGRyIAor ICAgIGJ1c19hZGRyX3QgICAgICAgICAgc2Vuc2VfcGh5c19hZGRyOworICAgIHVfaW50MzJfdCAg ICAgICAgICAgaW5kZXg7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICBzeW5jX2NtZDsKKyAgICB1 X2ludDhfdCAgICAgICAgICAgIGNtZF9zdGF0dXM7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICBh Ym9ydF9hZW47CisgICAgdV9pbnQ4X3QgICAgICAgICAgICByZXRyeV9mb3JfZndfcmVzZXQ7Cisg ICAgc3RydWN0IG1yc2FzX3NvZnRjICAqc2M7CisgICAgdW5pb24gY2NiICAgICAgICAgICAqY2Ni X3B0cjsgCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQx Nl90IHNtaWQ7CisgICAgICAgICAgICB1X2ludDE2X3QgcmVzdmQ7CisgICAgICAgIH0gY29udGV4 dDsKKyAgICAgICAgdV9pbnQzMl90IGZyYW1lX2NvdW50OworICAgIH0gY21kX2lkOyAKKyAgICBU QUlMUV9FTlRSWShtcnNhc19tZmlfY21kKSAgbmV4dDsKK307CisKKworLyoKKyAqIGRlZmluZSBj b25zdGFudHMgZm9yIGRldmljZSBsaXN0IHF1ZXJ5IG9wdGlvbnMKKyAqLworZW51bSBNUl9QRF9R VUVSWV9UWVBFIHsKKyAgICBNUl9QRF9RVUVSWV9UWVBFX0FMTCAgICAgICAgICAgICAgICA9IDAs CisgICAgTVJfUERfUVVFUllfVFlQRV9TVEFURSAgICAgICAgICAgICAgPSAxLAorICAgIE1SX1BE X1FVRVJZX1RZUEVfUE9XRVJfU1RBVEUgICAgICAgID0gMiwKKyAgICBNUl9QRF9RVUVSWV9UWVBF X01FRElBX1RZUEUgICAgICAgICA9IDMsCisgICAgTVJfUERfUVVFUllfVFlQRV9TUEVFRCAgICAg ICAgICAgICAgPSA0LAorICAgIE1SX1BEX1FVRVJZX1RZUEVfRVhQT1NFRF9UT19IT1NUICAgID0g NSwKK307CisKKyNkZWZpbmUgTVJfRVZUX0NGR19DTEVBUkVEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE1SX0VWVF9MRF9TVEFURV9DSEFOR0UgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDA1MQorI2RlZmluZSBNUl9FVlRfUERfSU5TRVJURUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwNWIKKyNkZWZpbmUgTVJfRVZUX1BEX1JFTU9WRUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwCisjZGVmaW5lIE1SX0VWVF9MRF9D UkVBVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4YQorI2RlZmluZSBNUl9F VlRfTERfREVMRVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwOGIKKyNkZWZp bmUgTVJfRVZUX0ZPUkVJR05fQ0ZHX0lNUE9SVEVEICAgICAgICAgICAgICAgICAgICAgMHgwMGRi CisjZGVmaW5lIE1SX0VWVF9MRF9PRkZMSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDBmYworI2RlZmluZSBNUl9FVlRfQ1RSTF9IT1NUX0JVU19TQ0FOX1JFUVVFU1RFRCAgICAg ICAgICAgICAweDAxNTIKKworZW51bSBNUl9QRF9TVEFURSB7CisgICAgTVJfUERfU1RBVEVfVU5D T05GSUdVUkVEX0dPT0QgICA9IDB4MDAsCisgICAgTVJfUERfU1RBVEVfVU5DT05GSUdVUkVEX0JB RCAgICA9IDB4MDEsCisgICAgTVJfUERfU1RBVEVfSE9UX1NQQVJFICAgICAgICAgICA9IDB4MDIs CisgICAgTVJfUERfU1RBVEVfT0ZGTElORSAgICAgICAgICAgICA9IDB4MTAsCisgICAgTVJfUERf U1RBVEVfRkFJTEVEICAgICAgICAgICAgICA9IDB4MTEsCisgICAgTVJfUERfU1RBVEVfUkVCVUlM RCAgICAgICAgICAgICA9IDB4MTQsCisgICAgTVJfUERfU1RBVEVfT05MSU5FICAgICAgICAgICAg ICA9IDB4MTgsCisgICAgTVJfUERfU1RBVEVfQ09QWUJBQ0sgICAgICAgICAgICA9IDB4MjAsCisg ICAgTVJfUERfU1RBVEVfU1lTVEVNICAgICAgICAgICAgICA9IDB4NDAsCisgfTsKKworIC8qCisg KiBkZWZpbmVzIHRoZSBwaHlzaWNhbCBkcml2ZSBhZGRyZXNzIHN0cnVjdHVyZQorICovCisjcHJh Z21hIHBhY2soMSkKK3N0cnVjdCBNUl9QRF9BRERSRVNTIHsKKyAgICB1X2ludDE2X3QgICAgIGRl dmljZUlkOworICAgIHVfaW50MTZfdCAgICAgZW5jbERldmljZUlkOworCisgICAgdW5pb24gewor ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQ4X3QgIGVuY2xJbmRleDsKKyAgICAg ICAgICAgIHVfaW50OF90ICBzbG90TnVtYmVyOworICAgICAgICB9IG1yUGRBZGRyZXNzOworICAg ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdV9pbnQ4X3QgIGVuY2xQb3NpdGlvbjsKKyAgICAg ICAgICAgIHVfaW50OF90ICBlbmNsQ29ubmVjdG9ySW5kZXg7CisgICAgICAgIH0gbXJFbmNsQWRk cmVzczsKKyAgICB9IHUxOworICAgIHVfaW50OF90ICAgICAgc2NzaURldlR5cGU7CisgICAgdW5p b24geworICAgICAgICB1X2ludDhfdCAgICAgIGNvbm5lY3RlZFBvcnRCaXRtYXA7CisgICAgICAg IHVfaW50OF90ICAgICAgY29ubmVjdGVkUG9ydE51bWJlcnM7CisgICAgfSB1MjsKKyAgICB1X2lu dDY0X3QgICAgIHNhc0FkZHJbMl07Cit9OworI3ByYWdtYSBwYWNrKCkKKworLyoKKyAqIGRlZmlu ZXMgdGhlIHBoeXNpY2FsIGRyaXZlIGxpc3Qgc3RydWN0dXJlCisgKi8KKyNwcmFnbWEgcGFjaygx KQorc3RydWN0IE1SX1BEX0xJU1QgeworICAgIHVfaW50MzJfdCAgICAgICAgICAgICBzaXplOwor ICAgIHVfaW50MzJfdCAgICAgICAgICAgICBjb3VudDsKKyAgICBzdHJ1Y3QgTVJfUERfQUREUkVT UyAgIGFkZHJbMV07Cit9OworI3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitzdHJ1 Y3QgbXJzYXNfcGRfbGlzdCB7CisgICAgdV9pbnQxNl90ICAgICAgICAgICAgIHRpZDsKKyAgICB1 X2ludDhfdCAgICAgICAgICAgICBkcml2ZVR5cGU7CisgICAgdV9pbnQ4X3QgICAgICAgICAgICAg ZHJpdmVTdGF0ZTsKK307CisjcHJhZ21hIHBhY2soKQorCisgLyoKKyAqIGRlZmluZXMgdGhlIGxv Z2ljYWwgZHJpdmUgcmVmZXJlbmNlIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHVuaW9uICBfTVJf TERfUkVGIHsgICAgICAgIC8vIExEIHJlZmVyZW5jZSBzdHJ1Y3R1cmUKKyAgICBzdHJ1Y3Qgewor ICAgICAgICB1X2ludDhfdCAgICAgIHRhcmdldElkOyAgICAgLy8gTEQgdGFyZ2V0IGlkICgwIHRv IE1BWF9UQVJHRVRfSUQpCisgICAgICAgIHVfaW50OF90ICAgICAgcmVzZXJ2ZWQ7ICAgICAvLyBy ZXNlcnZlZCB0byBtYWtlIGluIGxpbmUgd2l0aCBNUl9QRF9SRUYKKyAgICAgICAgdV9pbnQxNl90 ICAgICBzZXFOdW07ICAgICAgIC8vIFNlcXVlbmNlIE51bWJlcgorICAgIH0gbGRfY29udGV4dDsK KyAgICB1X2ludDMyX3QgICAgIHJlZjsgICAgICAgICAgICAgIC8vIHNob3J0aGFuZCByZWZlcmVu Y2UgdG8gZnVsbCAzMi1iaXRzCit9IE1SX0xEX1JFRjsgICAgICAgICAgICAgICAgICAgICAgICAv LyA0IGJ5dGVzCisKKworLyoKKyAqIGRlZmluZXMgdGhlIGxvZ2ljYWwgZHJpdmUgbGlzdCBzdHJ1 Y3R1cmUKKyAqLworI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgTVJfTERfTElTVCB7CisgICAgdV9p bnQzMl90ICAgICBsZENvdW50OyAgICAgICAgICAvLyBudW1iZXIgb2YgTERzCisgICAgdV9pbnQz Ml90ICAgICByZXNlcnZlZDsgICAgICAgICAvLyBwYWQgdG8gOC1ieXRlIGJvdW5kYXJ5CisgICAg c3RydWN0IHsKKyAgICAgICAgTVJfTERfUkVGICAgcmVmOyAgICAgICAgICAgIC8vIExEIHJlZmVy ZW5jZQorICAgICAgICB1X2ludDhfdCAgICBzdGF0ZTsgICAgICAgICAgLy8gY3VycmVudCBMRCBz dGF0ZSAoTVJfTERfU1RBVEUpCisgICAgICAgIHVfaW50OF90ICAgIHJlc2VydmVkWzNdOyAgICAv LyBwYWQgdG8gOC1ieXRlIGJvdW5kYXJ5CisgICAgICAgIHVfaW50NjRfdCAgIHNpemU7ICAgICAg ICAgICAvLyBMRCBzaXplCisgICAgfSBsZExpc3RbTUFYX0xPR0lDQUxfRFJJVkVTXTsKK307IAor I3ByYWdtYSBwYWNrKCkKKworLyoKKyAqIFNBUyBjb250cm9sbGVyIHByb3BlcnRpZXMKKyAqLwor I3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfY3RybF9wcm9wIHsKKyAgICB1X2ludDE2X3Qg c2VxX251bTsKKyAgICB1X2ludDE2X3QgcHJlZF9mYWlsX3BvbGxfaW50ZXJ2YWw7CisgICAgdV9p bnQxNl90IGludHJfdGhyb3R0bGVfY291bnQ7CisgICAgdV9pbnQxNl90IGludHJfdGhyb3R0bGVf dGltZW91dHM7CisgICAgdV9pbnQ4X3QgcmVidWlsZF9yYXRlOworICAgIHVfaW50OF90IHBhdHJv bF9yZWFkX3JhdGU7CisgICAgdV9pbnQ4X3QgYmdpX3JhdGU7CisgICAgdV9pbnQ4X3QgY2NfcmF0 ZTsKKyAgICB1X2ludDhfdCByZWNvbl9yYXRlOworICAgIHVfaW50OF90IGNhY2hlX2ZsdXNoX2lu dGVydmFsOworICAgIHVfaW50OF90IHNwaW51cF9kcnZfY291bnQ7CisgICAgdV9pbnQ4X3Qgc3Bp bnVwX2RlbGF5OworICAgIHVfaW50OF90IGNsdXN0ZXJfZW5hYmxlOworICAgIHVfaW50OF90IGNv ZXJjaW9uX21vZGU7CisgICAgdV9pbnQ4X3QgYWxhcm1fZW5hYmxlOworICAgIHVfaW50OF90IGRp c2FibGVfYXV0b19yZWJ1aWxkOworICAgIHVfaW50OF90IGRpc2FibGVfYmF0dGVyeV93YXJuOwor ICAgIHVfaW50OF90IGVjY19idWNrZXRfc2l6ZTsKKyAgICB1X2ludDE2X3QgZWNjX2J1Y2tldF9s ZWFrX3JhdGU7CisgICAgdV9pbnQ4X3QgcmVzdG9yZV9ob3RzcGFyZV9vbl9pbnNlcnRpb247Cisg ICAgdV9pbnQ4X3QgZXhwb3NlX2VuY2xfZGV2aWNlczsKKyAgICB1X2ludDhfdCBtYWludGFpblBk RmFpbEhpc3Rvcnk7CisgICAgdV9pbnQ4X3QgZGlzYWxsb3dIb3N0UmVxdWVzdFJlb3JkZXJpbmc7 CisgICAgdV9pbnQ4X3QgYWJvcnRDQ09uRXJyb3I7ICAvLyBzZXQgVFJVRSB0byBhYm9ydCBDQyBv biBkZXRlY3RpbmcgYW4gaW5jb25zaXN0ZW5jeQorICAgIHVfaW50OF90IGxvYWRCYWxhbmNlTW9k ZTsgICAgIC8vIGxvYWQgYmFsYW5jZSBtb2RlIChNUl9MT0FEX0JBTEFOQ0VfTU9ERSkKKyAgICB1 X2ludDhfdCBkaXNhYmxlQXV0b0RldGVjdEJhY2twbGFuZTsgIC8vIDAgLSB1c2UgYXV0byBkZXRl Y3QgbG9naWMgb2YgYmFja3BsYW5lcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGxpa2UgU0dQSU8sIGkyYyBTRVAgdXNpbmcgaC93IG1lY2hhbnNpbSAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgR1BJTyBwaW5z LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSAtIGRpc2Fi bGUgYXV0byBkZXRlY3QgU0dQSU8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyAyIC0gZGlzYWJsZSBpMmMgU0VQIGF1dG8gZGV0ZWN0CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIC0gZGlzYWJsZSBib3RoIGF1dG8gZGV0 ZWN0CisgICAgdV9pbnQ4X3Qgc25hcFZEU3BhY2U7ICAvLyAlIG9mIHNvdXJjZSBMRCB0byBiZSBy ZXNlcnZlZCBmb3IgYSBWRHMgc25hcHNob3QgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIHNuYXBzaG90IHJlcG9zaXRvcnksIGZvciBtZXRhZGF0YSBhbmQgdXNlciBkYXRhLgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMT01JSwgMj0xMCUsIDM9MTUlIGFuZCBzbyBvbi4K KyAgICAvKgorICAgICAqIEFkZCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGNvbnRyb2xsZWQgYnkg YSBiaXQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUuCisgICAgICovCisgICAgc3RydWN0IHsK KyAgICAgICAgdV9pbnQzMl90ICAgICBjb3B5QmFja0Rpc2FibGVkICAgICAgICAgICAgOiAxOyAg Ly8gc2V0IFRSVUUgdG8gZGlzYWJsZSBjb3B5QmFjayAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDA9Y29wYmFjayBlbmFibGVkKQor ICAgICAgICB1X2ludDMyX3QgICAgIFNNQVJUZXJFbmFibGVkICAgICAgICAgICAgICA6IDE7Cisg ICAgICAgIHVfaW50MzJfdCAgICAgcHJDb3JyZWN0VW5jb25maWd1cmVkQXJlYXMgIDogMTsKKyAg ICAgICAgdV9pbnQzMl90ICAgICB1c2VGZGVPbmx5ICAgICAgICAgICAgICAgICAgOiAxOworICAg ICAgICB1X2ludDMyX3QgICAgIGRpc2FibGVOQ1EgICAgICAgICAgICAgICAgICA6IDE7CisgICAg ICAgIHVfaW50MzJfdCAgICAgU1NEU01BUlRlckVuYWJsZWQgICAgICAgICAgIDogMTsKKyAgICAg ICAgdV9pbnQzMl90ICAgICBTU0RQYXRyb2xSZWFkRW5hYmxlZCAgICAgICAgOiAxOworICAgICAg ICB1X2ludDMyX3QgICAgIGVuYWJsZVNwaW5Eb3duVW5jb25maWd1cmVkICA6IDE7CisgICAgICAg IHVfaW50MzJfdCAgICAgYXV0b0VuaGFuY2VkSW1wb3J0ICAgICAgICAgIDogMTsKKyAgICAgICAg dV9pbnQzMl90ICAgICBlbmFibGVTZWNyZXRLZXlDb250cm9sICAgICAgOiAxOworICAgICAgICB1 X2ludDMyX3QgICAgIGRpc2FibGVPbmxpbmVDdHJsUmVzZXQgICAgICA6IDE7CisgICAgICAgIHVf aW50MzJfdCAgICAgYWxsb3dCb290V2l0aFBpbm5lZENhY2hlICAgIDogMTsKKyAgICAgICAgdV9p bnQzMl90ICAgICBkaXNhYmxlU3BpbkRvd25IUyAgICAgICAgICAgOiAxOworICAgICAgICB1X2lu dDMyX3QgICAgIGVuYWJsZUpCT0QgICAgICAgICAgICAgICAgICA6IDE7CisgICAgICAgIHVfaW50 MzJfdCAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgIDoxODsKKyAgICB9IE9uT2ZmUHJv cGVydGllczsKKyAgICB1X2ludDhfdCAgICAgIGF1dG9TbmFwVkRTcGFjZTsgIC8vICUgb2Ygc291 cmNlIExEIHRvIGJlIHJlc2VydmVkIGZvciBhdXRvIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gc25hcHNob3QgaW4gc25hcHNob3QgcmVwb3NpdG9yeSwgZm9yIAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWV0YWRhdGEgYW5kIHVzZXIgZGF0 YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE9NSUsIDI9MTAlLCAz PTE1JSBhbmQgc28gb24uCisgICAgdV9pbnQ4X3QgICAgICB2aWV3U3BhY2U7ICAgICAgICAvLyBz bmFwc2hvdCB3cml0ZWFibGUgVklFV3MgY2FwYWNpdHkgYXMgYSAlIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gb2Ygc291cmNlIExEIGNhcGFjaXR5LiAwPVJFQUQgb25s eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE9NSUsIDI9MTAlLCAz PTE1JSBhbmQgc28gb24KKyAgICB1X2ludDE2X3QgICAgIHNwaW5Eb3duVGltZTsgICAgIC8vICMg b2YgaWRsZSBtaW51dGVzIGJlZm9yZSBkZXZpY2UgaXMgc3B1biAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGRvd24gKDA9dXNlIEZXIGRlZmF1bHRzKS4KKyAgICB1X2lu dDhfdCAgICAgIHJlc2VydmVkWzI0XTsKKworfTsgCisjcHJhZ21hIHBhY2soKQorCisKKy8qCisg KiBTQVMgY29udHJvbGxlciBpbmZvcm1hdGlvbgorICovCisvLyNwcmFnbWEgcGFjaygxKQorc3Ry dWN0IG1yc2FzX2N0cmxfaW5mbyB7CisgICAgLyogCisgICAgICogUENJIGRldmljZSBpbmZvcm1h dGlvbiAKKyAgICAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICB1X2ludDE2X3QgdmVuZG9yX2lk OworICAgICAgICB1X2ludDE2X3QgZGV2aWNlX2lkOworICAgICAgICB1X2ludDE2X3Qgc3ViX3Zl bmRvcl9pZDsKKyAgICAgICAgdV9pbnQxNl90IHN1Yl9kZXZpY2VfaWQ7CisgICAgICAgIHVfaW50 OF90IHJlc2VydmVkWzI0XTsKKyAgICB9IF9fcGFja2VkIHBjaTsKKyAgICAvKiAKKyAgICAgKiBI b3N0IGludGVyZmFjZSBpbmZvcm1hdGlvbiAKKyAgICAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAg ICB1X2ludDhfdCBQQ0lYOjE7CisgICAgICAgIHVfaW50OF90IFBDSUU6MTsKKyAgICAgICAgdV9p bnQ4X3QgaVNDU0k6MTsKKyAgICAgICAgdV9pbnQ4X3QgU0FTXzNHOjE7CisgICAgICAgIHVfaW50 OF90IHJlc2VydmVkXzA6NDsKKyAgICAgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMVs2XTsKKyAgICAg ICAgdV9pbnQ4X3QgcG9ydF9jb3VudDsKKyAgICAgICAgdV9pbnQ2NF90IHBvcnRfYWRkcls4XTsK KyAgICB9IF9fcGFja2VkIGhvc3RfaW50ZXJmYWNlOworICAgIC8qCisgICAgICogRGV2aWNlIChi YWNrZW5kKSBpbnRlcmZhY2UgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBzdHJ1Y3QgeworICAg ICAgICB1X2ludDhfdCBTUEk6MTsKKyAgICAgICAgdV9pbnQ4X3QgU0FTXzNHOjE7CisgICAgICAg IHVfaW50OF90IFNBVEFfMV81RzoxOworICAgICAgICB1X2ludDhfdCBTQVRBXzNHOjE7CisgICAg ICAgIHVfaW50OF90IHJlc2VydmVkXzA6NDsKKyAgICAgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMVs2 XTsKKyAgICAgICAgdV9pbnQ4X3QgcG9ydF9jb3VudDsKKyAgICAgICAgdV9pbnQ2NF90IHBvcnRf YWRkcls4XTsKKyAgICB9IF9fcGFja2VkIGRldmljZV9pbnRlcmZhY2U7CisKKyAgICAvKgorICAg ICAqIExpc3Qgb2YgY29tcG9uZW50cyByZXNpZGluZyBpbiBmbGFzaC4gQWxsIHN0ciBhcmUgbnVs bCB0ZXJtaW5hdGVkCisgICAgICovCisgICAgdV9pbnQzMl90IGltYWdlX2NoZWNrX3dvcmQ7Cisg ICAgdV9pbnQzMl90IGltYWdlX2NvbXBvbmVudF9jb3VudDsKKworICAgIHN0cnVjdCB7CisgICAg ICAgIGNoYXIgbmFtZVs4XTsKKyAgICAgICAgY2hhciB2ZXJzaW9uWzMyXTsKKyAgICAgICAgY2hh ciBidWlsZF9kYXRlWzE2XTsKKyAgICAgICAgY2hhciBidWlsdF90aW1lWzE2XTsKKyAgICB9IF9f cGFja2VkIGltYWdlX2NvbXBvbmVudFs4XTsKKyAgICAvKgorICAgICAqIExpc3Qgb2YgZmxhc2gg Y29tcG9uZW50cyB0aGF0IGhhdmUgYmVlbiBmbGFzaGVkIG9uIHRoZSBjYXJkLCBidXQKKyAgICAg KiBhcmUgbm90IGluIHVzZSwgcGVuZGluZyByZXNldCBvZiB0aGUgYWRhcHRlci4gVGhpcyBsaXN0 IHdpbGwgYmUKKyAgICAgKiBlbXB0eSBpZiBhIGZsYXNoIG9wZXJhdGlvbiBoYXMgbm90IG9jY3Vy cmVkLiBBbGwgc3RpbmdzIGFyZSBudWxsCisgICAgICogdGVybWluYXRlZAorICAgICAqLworICAg IHVfaW50MzJfdCBwZW5kaW5nX2ltYWdlX2NvbXBvbmVudF9jb3VudDsKKworICAgIHN0cnVjdCB7 CisgICAgICAgIGNoYXIgbmFtZVs4XTsKKyAgICAgICAgY2hhciB2ZXJzaW9uWzMyXTsKKyAgICAg ICAgY2hhciBidWlsZF9kYXRlWzE2XTsKKyAgICAgICAgY2hhciBidWlsZF90aW1lWzE2XTsKKyAg ICB9IF9fcGFja2VkIHBlbmRpbmdfaW1hZ2VfY29tcG9uZW50WzhdOworCisgICAgdV9pbnQ4X3Qg bWF4X2FybXM7CisgICAgdV9pbnQ4X3QgbWF4X3NwYW5zOworICAgIHVfaW50OF90IG1heF9hcnJh eXM7CisgICAgdV9pbnQ4X3QgbWF4X2xkczsKKyAgICBjaGFyIHByb2R1Y3RfbmFtZVs4MF07Cisg ICAgY2hhciBzZXJpYWxfbm9bMzJdOworCisgICAgLyoKKyAgICAgKiBPdGhlciBwaHlzaWNhbC9j b250cm9sbGVyL29wZXJhdGlvbiBpbmZvcm1hdGlvbi4gSW5kaWNhdGVzIHRoZQorICAgICAqIHBy ZXNlbmNlIG9mIHRoZSBoYXJkd2FyZQorICAgICAqLworICAgIHN0cnVjdCB7CisgICAgICAgIHVf aW50MzJfdCBiYnU6MTsKKyAgICAgICAgdV9pbnQzMl90IGFsYXJtOjE7CisgICAgICAgIHVfaW50 MzJfdCBudnJhbToxOworICAgICAgICB1X2ludDMyX3QgdWFydDoxOworICAgICAgICB1X2ludDMy X3QgcmVzZXJ2ZWQ6Mjg7CisgICAgfSBfX3BhY2tlZCBod19wcmVzZW50OworCisgICAgdV9pbnQz Ml90IGN1cnJlbnRfZndfdGltZTsKKworICAgIC8qCisgICAgICogTWF4aW11bSBkYXRhIHRyYW5z ZmVyIHNpemVzCisgICAgICovCisgICAgdV9pbnQxNl90IG1heF9jb25jdXJyZW50X2NtZHM7Cisg ICAgdV9pbnQxNl90IG1heF9zZ2VfY291bnQ7CisgICAgdV9pbnQzMl90IG1heF9yZXF1ZXN0X3Np emU7CisKKyAgICAvKgorICAgICAqIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGRldmljZSBjb3VudHMK KyAgICAgKi8KKyAgICB1X2ludDE2X3QgbGRfcHJlc2VudF9jb3VudDsKKyAgICB1X2ludDE2X3Qg bGRfZGVncmFkZWRfY291bnQ7CisgICAgdV9pbnQxNl90IGxkX29mZmxpbmVfY291bnQ7CisKKyAg ICB1X2ludDE2X3QgcGRfcHJlc2VudF9jb3VudDsKKyAgICB1X2ludDE2X3QgcGRfZGlza19wcmVz ZW50X2NvdW50OworICAgIHVfaW50MTZfdCBwZF9kaXNrX3ByZWRfZmFpbHVyZV9jb3VudDsKKyAg ICB1X2ludDE2X3QgcGRfZGlza19mYWlsZWRfY291bnQ7CisKKyAgICAvKgorICAgICAqIE1lbW9y eSBzaXplIGluZm9ybWF0aW9uCisgICAgICovCisgICAgdV9pbnQxNl90IG52cmFtX3NpemU7Cisg ICAgdV9pbnQxNl90IG1lbW9yeV9zaXplOworICAgIHVfaW50MTZfdCBmbGFzaF9zaXplOworCisg ICAgLyoKKyAgICAgKiBFcnJvciBjb3VudGVycworICAgICAqLworICAgIHVfaW50MTZfdCBtZW1f Y29ycmVjdGFibGVfZXJyb3JfY291bnQ7CisgICAgdV9pbnQxNl90IG1lbV91bmNvcnJlY3RhYmxl X2Vycm9yX2NvdW50OworCisgICAgLyoKKyAgICAgKiBDbHVzdGVyIGluZm9ybWF0aW9uCisgICAg ICovCisgICAgdV9pbnQ4X3QgY2x1c3Rlcl9wZXJtaXR0ZWQ7CisgICAgdV9pbnQ4X3QgY2x1c3Rl cl9hY3RpdmU7CisKKyAgICAvKgorICAgICAqIEFkZGl0aW9uYWwgbWF4IGRhdGEgdHJhbnNmZXIg c2l6ZXMKKyAgICAgKi8KKyAgICB1X2ludDE2X3QgbWF4X3N0cmlwc19wZXJfaW87CisKKyAgICAv KgorICAgICAqIENvbnRyb2xsZXIgY2FwYWJpbGl0aWVzIHN0cnVjdHVyZXMKKyAgICAgKi8KKyAg ICBzdHJ1Y3QgeworICAgICAgICB1X2ludDMyX3QgcmFpZF9sZXZlbF8wOjE7CisgICAgICAgIHVf aW50MzJfdCByYWlkX2xldmVsXzE6MTsKKyAgICAgICAgdV9pbnQzMl90IHJhaWRfbGV2ZWxfNTox OworICAgICAgICB1X2ludDMyX3QgcmFpZF9sZXZlbF8xRToxOworICAgICAgICB1X2ludDMyX3Qg cmFpZF9sZXZlbF82OjE7CisgICAgICAgIHVfaW50MzJfdCByZXNlcnZlZDoyNzsKKyAgICB9IF9f cGFja2VkIHJhaWRfbGV2ZWxzOworCisgICAgc3RydWN0IHsKKyAgICAgICAgdV9pbnQzMl90IHJi bGRfcmF0ZToxOworICAgICAgICB1X2ludDMyX3QgY2NfcmF0ZToxOworICAgICAgICB1X2ludDMy X3QgYmdpX3JhdGU6MTsKKyAgICAgICAgdV9pbnQzMl90IHJlY29uX3JhdGU6MTsKKyAgICAgICAg dV9pbnQzMl90IHBhdHJvbF9yYXRlOjE7CisgICAgICAgIHVfaW50MzJfdCBhbGFybV9jb250cm9s OjE7CisgICAgICAgIHVfaW50MzJfdCBjbHVzdGVyX3N1cHBvcnRlZDoxOworICAgICAgICB1X2lu dDMyX3QgYmJ1OjE7CisgICAgICAgIHVfaW50MzJfdCBzcGFubmluZ19hbGxvd2VkOjE7CisgICAg ICAgIHVfaW50MzJfdCBkZWRpY2F0ZWRfaG90c3BhcmVzOjE7CisgICAgICAgIHVfaW50MzJfdCBy ZXZlcnRpYmxlX2hvdHNwYXJlczoxOworICAgICAgICB1X2ludDMyX3QgZm9yZWlnbl9jb25maWdf aW1wb3J0OjE7CisgICAgICAgIHVfaW50MzJfdCBzZWxmX2RpYWdub3N0aWM6MTsKKyAgICAgICAg dV9pbnQzMl90IG1peGVkX3JlZHVuZGFuY3lfYXJyOjE7CisgICAgICAgIHVfaW50MzJfdCBnbG9i YWxfaG90X3NwYXJlczoxOworICAgICAgICB1X2ludDMyX3QgcmVzZXJ2ZWQ6MTc7CisgICAgfSBf X3BhY2tlZCBhZGFwdGVyX29wZXJhdGlvbnM7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1X2lu dDMyX3QgcmVhZF9wb2xpY3k6MTsKKyAgICAgICAgdV9pbnQzMl90IHdyaXRlX3BvbGljeToxOwor ICAgICAgICB1X2ludDMyX3QgaW9fcG9saWN5OjE7CisgICAgICAgIHVfaW50MzJfdCBhY2Nlc3Nf cG9saWN5OjE7CisgICAgICAgIHVfaW50MzJfdCBkaXNrX2NhY2hlX3BvbGljeToxOworICAgICAg ICB1X2ludDMyX3QgcmVzZXJ2ZWQ6Mjc7CisgICAgfSBfX3BhY2tlZCBsZF9vcGVyYXRpb25zOwor CisgICAgc3RydWN0IHsKKyAgICAgICAgdV9pbnQ4X3QgbWluOworICAgICAgICB1X2ludDhfdCBt YXg7CisgICAgICAgIHVfaW50OF90IHJlc2VydmVkWzJdOworICAgIH0gX19wYWNrZWQgc3RyaXBl X3N6X29wczsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVfaW50MzJfdCBmb3JjZV9vbmxpbmU6 MTsKKyAgICAgICAgdV9pbnQzMl90IGZvcmNlX29mZmxpbmU6MTsKKyAgICAgICAgdV9pbnQzMl90 IGZvcmNlX3JlYnVpbGQ6MTsKKyAgICAgICAgdV9pbnQzMl90IHJlc2VydmVkOjI5OworICAgIH0g X19wYWNrZWQgcGRfb3BlcmF0aW9uczsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVfaW50MzJf dCBjdHJsX3N1cHBvcnRzX3NhczoxOworICAgICAgICB1X2ludDMyX3QgY3RybF9zdXBwb3J0c19z YXRhOjE7CisgICAgICAgIHVfaW50MzJfdCBhbGxvd19taXhfaW5fZW5jbDoxOworICAgICAgICB1 X2ludDMyX3QgYWxsb3dfbWl4X2luX2xkOjE7CisgICAgICAgIHVfaW50MzJfdCBhbGxvd19zYXRh X2luX2NsdXN0ZXI6MTsKKyAgICAgICAgdV9pbnQzMl90IHJlc2VydmVkOjI3OworICAgIH0gX19w YWNrZWQgcGRfbWl4X3N1cHBvcnQ7CisKKyAgICAvKgorICAgICAqIERlZmluZSBFQ0Mgc2luZ2xl LWJpdC1lcnJvciBidWNrZXQgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICB1X2ludDhfdCBlY2Nf YnVja2V0X2NvdW50OworICAgIHVfaW50OF90IHJlc2VydmVkXzJbMTFdOworCisgICAgLyoKKyAg ICAgKiBJbmNsdWRlIHRoZSBjb250cm9sbGVyIHByb3BlcnRpZXMgKGNoYW5nZWFibGUgaXRlbXMp CisgICAgICovCisgICAgc3RydWN0IG1yc2FzX2N0cmxfcHJvcCBwcm9wZXJ0aWVzOworCisgICAg LyoKKyAgICAgKiBEZWZpbmUgRlcgcGtnIHZlcnNpb24gKHNldCBpbiBlbnZ0IHYnYmxlcyBvbiBP RU0gYmFzaXMpCisgICAgICovCisgICAgY2hhciBwYWNrYWdlX3ZlcnNpb25bMHg2MF07CisKKyAg ICB1X2ludDhfdCBwYWRbMHg4MDAgLSAweDZhMF07Cit9IF9fcGFja2VkOyAKKworLyogCisgKiBM ZCBhbmQgUEQgTWF4IFN1cHBvcnQgRGVmaW5lcyAKKyAqLworI2RlZmluZSBNUlNBU19NQVhfUEQg ICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgTVJTQVNfTUFYX0xEICAgICAgICAg ICAgICAgICAgICAgICAgNjQKKworLyoKKyAqIFdoZW4gU0NTSSBtaWQtbGF5ZXIgY2FsbHMgZHJp dmVyJ3MgcmVzZXQgcm91dGluZSwgZHJpdmVyIHdhaXRzIGZvcgorICogTVJTQVNfUkVTRVRfV0FJ VF9USU1FIHNlY29uZHMgZm9yIGFsbCBvdXRzdGFuZGluZyBJTyB0byBjb21wbGV0ZS4gTm90ZQor ICogdGhhdCB0aGUgZHJpdmVyIGNhbm5vdCBfYWN0dWFsbHlfIGFib3J0IG9yIHJlc2V0IHBlbmRp bmcgY29tbWFuZHMuIFdoaWxlCisgKiBpdCBpcyB3YWl0aW5nIGZvciB0aGUgY29tbWFuZHMgdG8g Y29tcGxldGUsIGl0IHByaW50cyBhIGRpYWdub3N0aWMgbWVzc2FnZQorICogZXZlcnkgTVJTQVNf UkVTRVRfTk9USUNFX0lOVEVSVkFMIHNlY29uZHMKKyAqLworI2RlZmluZSBNUlNBU19SRVNFVF9X QUlUX1RJTUUgICAgICAgICAgICAgICAgIDE4MAorI2RlZmluZSBNUlNBU19JTlRFUk5BTF9DTURf V0FJVF9USU1FICAgICAgICAgIDE4MAorI2RlZmluZSBNUlNBU19JT0NfSU5JVF9XQUlUX1RJTUUg ICAgICAgICAgICAgIDYwIAorI2RlZmluZSBNUlNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwgICAg ICAgICAgIDUKKyNkZWZpbmUgTVJTQVNfSU9DVExfQ01EICAgICAgICAgICAgICAgICAgICAgICAw CisjZGVmaW5lIE1SU0FTX0RFRkFVTFRfQ01EX1RJTUVPVVQgICAgICAgICAgICAgOTAKKyNkZWZp bmUgTVJTQVNfVEhST1RUTEVfUVVFVUVfREVQVEggICAgICAgICAgICAxNgorCisvKiAKKyAqIEZX IHJlcG9ydHMgdGhlIG1heGltdW0gb2YgbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgaXQgY2FuIGFj Y2VwdCAobWF4aW11bQorICogY29tbWFuZHMgdGhhdCBjYW4gYmUgb3V0c3RhbmRpbmcpIGF0IGFu eSB0aW1lLiBUaGUgZHJpdmVyIG11c3QgcmVwb3J0IGEKKyAqIGxvd2VyIG51bWJlciB0byB0aGUg bWlkIGxheWVyIGJlY2F1c2UgaXQgY2FuIGlzc3VlIGEgZmV3IGludGVybmFsIGNvbW1hbmRzCisg KiBpdHNlbGYgKEUuZywgQUVOLCBhYm9ydCBjbWQsIElPQ1RMcyBldGMpLiBUaGUgbnVtYmVyIG9m IGNvbW1hbmRzIGl0IG5lZWRzCisgKiBpcyBzaG93biBiZWxvdworICovCisjZGVmaW5lIE1SU0FT X0lOVF9DTURTICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgTVJTQVNfU0tJTk5Z X0lOVF9DTURTICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1SU0FTX01BWF9NU0lYX1FVRVVF UyAgICAgICAgICAgICAgICAgMTYKKworLyoKKyAqIEZXIGNhbiBhY2NlcHQgYm90aCAzMiBhbmQg NjQgYml0IFNHTHMuIFdlIHdhbnQgdG8gYWxsb2NhdGUgMzIvNjQgYml0CisgKiBTR0xzIGJhc2Vk IG9uIHRoZSBzaXplIG9mIGJ1c19hZGRyX3QKKyAqLworI2RlZmluZSBJU19ETUE2NCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKGJ1c19hZGRyX3QpID09IDgpCisKKyNkZWZp bmUgTUZJX1hTQ0FMRV9PTVIwX0NIQU5HRV9JTlRFUlJVUFQgICAgIDB4MDAwMDAwMDEgIC8vIE1G SSBzdGF0ZSBjaGFuZ2UgaW50ZXJydXB0IAorI2RlZmluZSBNRklfSU5UUl9GTEFHX1JFUExZX01F U1NBR0UgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNRklfSU5UUl9GTEFHX0ZJUk1XQVJF X1NUQVRFX0NIQU5HRSAgMHgwMDAwMDAwMgorI2RlZmluZSBNRklfRzJfT1VUQk9VTkRfRE9PUkJF TExfQ0hBTkdFX0lOVEVSUlVQVCAweDAwMDAwMDA0IC8vTUZJIHN0YXRlIGNoYW5nZSBpbnRlcnJ1 cHQKKworI2RlZmluZSBNRklfT0JfSU5UUl9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAgMHgw MDAwMDAwMgorI2RlZmluZSBNRklfUE9MTF9USU1FT1VUX1NFQ1MgICAgICAgICAgICAgICAgICAg NjAKKworI2RlZmluZSBNRklfUkVQTFlfMTA3OF9NRVNTQUdFX0lOVEVSUlVQVCAgICAgICAgMHg4 MDAwMDAwMAorI2RlZmluZSBNRklfUkVQTFlfR0VOMl9NRVNTQUdFX0lOVEVSUlVQVCAgICAgICAg MHgwMDAwMDAwMQorI2RlZmluZSBNRklfR0VOMl9FTkFCTEVfSU5URVJSVVBUX01BU0sgICAgICAg ICAgMHgwMDAwMDAwMQorI2RlZmluZSBNRklfUkVQTFlfU0tJTk5ZX01FU1NBR0VfSU5URVJSVVBU ICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBNRklfU0tJTk5ZX0VOQUJMRV9JTlRFUlJVUFRfTUFT SyAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1GSV8xMDY4X1BDU1JfT0ZGU0VUICAgICAg ICAgICAgICAgICAgICAweDg0CisjZGVmaW5lIE1GSV8xMDY4X0ZXX0hBTkRTSEFLRV9PRkZTRVQg ICAgICAgICAgICAweDY0CisjZGVmaW5lIE1GSV8xMDY4X0ZXX1JFQURZICAgICAgICAgICAgICAg ICAgICAgICAweEREREQwMDAwCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX3NnZTMy IHsKKyAgICB1X2ludDMyX3QgcGh5c19hZGRyOworICAgIHVfaW50MzJfdCBsZW5ndGg7Cit9Owor I3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfc2dlNjQgewor ICAgIHVfaW50NjRfdCBwaHlzX2FkZHI7CisgICAgdV9pbnQzMl90IGxlbmd0aDsKK307CisjcHJh Z21hIHBhY2soKQorCisjcHJhZ21hIHBhY2soKQordW5pb24gbXJzYXNfc2dsIHsKKyAgICBzdHJ1 Y3QgbXJzYXNfc2dlMzIgc2dlMzJbMV07CisgICAgc3RydWN0IG1yc2FzX3NnZTY0IHNnZTY0WzFd OworfTsKKyNwcmFnbWEgcGFjaygpCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX2hl YWRlciB7CisgICAgdV9pbnQ4X3QgY21kOyAgICAgICAgICAgICAgICAgLyowMGUgKi8KKyAgICB1 X2ludDhfdCBzZW5zZV9sZW47ICAgICAgICAgICAvKjAxaCAqLworICAgIHVfaW50OF90IGNtZF9z dGF0dXM7ICAgICAgICAgIC8qMDJoICovCisgICAgdV9pbnQ4X3Qgc2NzaV9zdGF0dXM7ICAgICAg ICAgLyowM2ggKi8KKworICAgIHVfaW50OF90IHRhcmdldF9pZDsgICAgICAgICAgIC8qMDRoICov CisgICAgdV9pbnQ4X3QgbHVuOyAgICAgICAgICAgICAgICAgLyowNWggKi8KKyAgICB1X2ludDhf dCBjZGJfbGVuOyAgICAgICAgICAgICAvKjA2aCAqLworICAgIHVfaW50OF90IHNnZV9jb3VudDsg ICAgICAgICAgIC8qMDdoICovCisKKyAgICB1X2ludDMyX3QgY29udGV4dDsgICAgICAgICAgICAv KjA4aCAqLworICAgIHVfaW50MzJfdCBwYWRfMDsgICAgICAgICAgICAgIC8qMENoICovCisKKyAg ICB1X2ludDE2X3QgZmxhZ3M7ICAgICAgICAgICAgICAvKjEwaCAqLworICAgIHVfaW50MTZfdCB0 aW1lb3V0OyAgICAgICAgICAgIC8qMTJoICovCisgICAgdV9pbnQzMl90IGRhdGFfeGZlcmxlbjsg ICAgICAgLyoxNGggKi8KK307CisjcHJhZ21hIHBhY2soKQorCisjcHJhZ21hIHBhY2soMSkKK3N0 cnVjdCBtcnNhc19pbml0X2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAgICAgICAg ICAvKjAwaCAqLworICAgIHVfaW50OF90IHJlc2VydmVkXzA7ICAgICAgICAgIC8qMDFoICovCisg ICAgdV9pbnQ4X3QgY21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKworICAgIHVfaW50OF90 IHJlc2VydmVkXzE7ICAgICAgICAgIC8qMDNoICovCisgICAgdV9pbnQzMl90IHJlc2VydmVkXzI7 ICAgICAgICAgLyowNGggKi8KKworICAgIHVfaW50MzJfdCBjb250ZXh0OyAgICAgICAgICAgIC8q MDhoICovCisgICAgdV9pbnQzMl90IHBhZF8wOyAgICAgICAgICAgICAgLyowQ2ggKi8KKworICAg IHVfaW50MTZfdCBmbGFnczsgICAgICAgICAgICAgIC8qMTBoICovCisgICAgdV9pbnQxNl90IHJl c2VydmVkXzM7ICAgICAgICAgLyoxMmggKi8KKyAgICB1X2ludDMyX3QgZGF0YV94ZmVyX2xlbjsg ICAgICAvKjE0aCAqLworCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fbmV3X3BoeXNfYWRkcl9s bzsgIC8qMThoICovCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fbmV3X3BoeXNfYWRkcl9oaTsg IC8qMUNoICovCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fb2xkX3BoeXNfYWRkcl9sbzsgIC8q MjBoICovCisgICAgdV9pbnQzMl90IHF1ZXVlX2luZm9fb2xkX3BoeXNfYWRkcl9oaTsgIC8qMjRo ICovCisgICAgdV9pbnQzMl90IGRyaXZlcl92ZXJfbG87ICAgICAgLyoyOGggKi8KKyAgICB1X2lu dDMyX3QgZHJpdmVyX3Zlcl9oaTsgICAgICAvKjJDaCAqLworICAgIHVfaW50MzJfdCByZXNlcnZl ZF80WzRdOyAgICAgIC8qMzBoICovCit9OworI3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNr KDEpCitzdHJ1Y3QgbXJzYXNfaW9fZnJhbWUgeworICAgIHVfaW50OF90IGNtZDsgICAgICAgICAg ICAgICAgIC8qMDBoICovCisgICAgdV9pbnQ4X3Qgc2Vuc2VfbGVuOyAgICAgICAgICAgLyowMWgg Ki8KKyAgICB1X2ludDhfdCBjbWRfc3RhdHVzOyAgICAgICAgICAvKjAyaCAqLworICAgIHVfaW50 OF90IHNjc2lfc3RhdHVzOyAgICAgICAgIC8qMDNoICovCisKKyAgICB1X2ludDhfdCB0YXJnZXRf aWQ7ICAgICAgICAgICAvKjA0aCAqLworICAgIHVfaW50OF90IGFjY2Vzc19ieXRlOyAgICAgICAg IC8qMDVoICovCisgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMDsgICAgICAgICAgLyowNmggKi8KKyAg ICB1X2ludDhfdCBzZ2VfY291bnQ7ICAgICAgICAgICAvKjA3aCAqLworCisgICAgdV9pbnQzMl90 IGNvbnRleHQ7ICAgICAgICAgICAgLyowOGggKi8KKyAgICB1X2ludDMyX3QgcGFkXzA7ICAgICAg ICAgICAgICAvKjBDaCAqLworCisgICAgdV9pbnQxNl90IGZsYWdzOyAgICAgICAgICAgICAgLyox MGggKi8KKyAgICB1X2ludDE2X3QgdGltZW91dDsgICAgICAgICAgICAvKjEyaCAqLworICAgIHVf aW50MzJfdCBsYmFfY291bnQ7ICAgICAgICAgIC8qMTRoICovCisKKyAgICB1X2ludDMyX3Qgc2Vu c2VfYnVmX3BoeXNfYWRkcl9sbzsgICAgIC8qMThoICovCisgICAgdV9pbnQzMl90IHNlbnNlX2J1 Zl9waHlzX2FkZHJfaGk7ICAgICAvKjFDaCAqLworCisgICAgdV9pbnQzMl90IHN0YXJ0X2xiYV9s bzsgICAgICAgLyoyMGggKi8KKyAgICB1X2ludDMyX3Qgc3RhcnRfbGJhX2hpOyAgICAgICAvKjI0 aCAqLworCisgICAgdW5pb24gbXJzYXNfc2dsIHNnbDsgIC8qMjhoICovCit9OworI3ByYWdtYSBw YWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitzdHJ1Y3QgbXJzYXNfcHRocnVfZnJhbWUgeworICAg IHVfaW50OF90IGNtZDsgICAgICAgICAgICAgICAgIC8qMDBoICovCisgICAgdV9pbnQ4X3Qgc2Vu c2VfbGVuOyAgICAgICAgICAgLyowMWggKi8KKyAgICB1X2ludDhfdCBjbWRfc3RhdHVzOyAgICAg ICAgICAvKjAyaCAqLworICAgIHVfaW50OF90IHNjc2lfc3RhdHVzOyAgICAgICAgIC8qMDNoICov CisKKyAgICB1X2ludDhfdCB0YXJnZXRfaWQ7ICAgICAgICAgICAvKjA0aCAqLworICAgIHVfaW50 OF90IGx1bjsgICAgICAgICAgICAgICAgIC8qMDVoICovCisgICAgdV9pbnQ4X3QgY2RiX2xlbjsg ICAgICAgICAgICAgLyowNmggKi8KKyAgICB1X2ludDhfdCBzZ2VfY291bnQ7ICAgICAgICAgICAv KjA3aCAqLworCisgICAgdV9pbnQzMl90IGNvbnRleHQ7ICAgICAgICAgICAgLyowOGggKi8KKyAg ICB1X2ludDMyX3QgcGFkXzA7ICAgICAgICAgICAgICAvKjBDaCAqLworCisgICAgdV9pbnQxNl90 IGZsYWdzOyAgICAgICAgICAgICAgLyoxMGggKi8KKyAgICB1X2ludDE2X3QgdGltZW91dDsgICAg ICAgICAgICAvKjEyaCAqLworICAgIHVfaW50MzJfdCBkYXRhX3hmZXJfbGVuOyAgICAgIC8qMTRo ICovCisKKyAgICB1X2ludDMyX3Qgc2Vuc2VfYnVmX3BoeXNfYWRkcl9sbzsgICAgIC8qMThoICov CisgICAgdV9pbnQzMl90IHNlbnNlX2J1Zl9waHlzX2FkZHJfaGk7ICAgICAvKjFDaCAqLworCisg ICAgdV9pbnQ4X3QgY2RiWzE2XTsgICAgICAgICAgICAgLyoyMGggKi8KKyAgICB1bmlvbiBtcnNh c19zZ2wgc2dsOyAgLyozMGggKi8KK307CisjcHJhZ21hIHBhY2soKQorCisjcHJhZ21hIHBhY2so MSkKK3N0cnVjdCBtcnNhc19kY21kX2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAg ICAgICAgICAvKjAwaCAqLworICAgIHVfaW50OF90IHJlc2VydmVkXzA7ICAgICAgICAgIC8qMDFo ICovCisgICAgdV9pbnQ4X3QgY21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKyAgICB1X2lu dDhfdCByZXNlcnZlZF8xWzRdOyAgICAgICAvKjAzaCAqLworICAgIHVfaW50OF90IHNnZV9jb3Vu dDsgICAgICAgICAgIC8qMDdoICovCisKKyAgICB1X2ludDMyX3QgY29udGV4dDsgICAgICAgICAg ICAvKjA4aCAqLworICAgIHVfaW50MzJfdCBwYWRfMDsgICAgICAgICAgICAgIC8qMENoICovCisK KyAgICB1X2ludDE2X3QgZmxhZ3M7ICAgICAgICAgICAgICAvKjEwaCAqLworICAgIHVfaW50MTZf dCB0aW1lb3V0OyAgICAgICAgICAgIC8qMTJoICovCisKKyAgICB1X2ludDMyX3QgZGF0YV94ZmVy X2xlbjsgICAgICAvKjE0aCAqLworICAgIHVfaW50MzJfdCBvcGNvZGU7ICAgICAgICAgICAgIC8q MThoICovCisKKyAgICB1bmlvbiB7ICAgICAgICAgICAgICAgICAvKjFDaCAqLworICAgICAgICB1 X2ludDhfdCBiWzEyXTsKKyAgICAgICAgdV9pbnQxNl90IHNbNl07CisgICAgICAgIHVfaW50MzJf dCB3WzNdOworICAgIH0gbWJveDsKKworICAgIHVuaW9uIG1yc2FzX3NnbCBzZ2w7ICAvKjI4aCAq LworfTsKKyNwcmFnbWEgcGFjaygpCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX2Fi b3J0X2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAgICAgICAgICAvKjAwaCAqLwor ICAgIHVfaW50OF90IHJlc2VydmVkXzA7ICAgICAgICAgIC8qMDFoICovCisgICAgdV9pbnQ4X3Qg Y21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKworICAgIHVfaW50OF90IHJlc2VydmVkXzE7 ICAgICAgICAgIC8qMDNoICovCisgICAgdV9pbnQzMl90IHJlc2VydmVkXzI7ICAgICAgICAgLyow NGggKi8KKworICAgIHVfaW50MzJfdCBjb250ZXh0OyAgICAgICAgICAgIC8qMDhoICovCisgICAg dV9pbnQzMl90IHBhZF8wOyAgICAgICAgICAgICAgLyowQ2ggKi8KKworICAgIHVfaW50MTZfdCBm bGFnczsgICAgICAgICAgICAgIC8qMTBoICovCisgICAgdV9pbnQxNl90IHJlc2VydmVkXzM7ICAg ICAgICAgLyoxMmggKi8KKyAgICB1X2ludDMyX3QgcmVzZXJ2ZWRfNDsgICAgICAgICAvKjE0aCAq LworCisgICAgdV9pbnQzMl90IGFib3J0X2NvbnRleHQ7ICAgICAgLyoxOGggKi8KKyAgICB1X2lu dDMyX3QgcGFkXzE7ICAgICAgICAgICAgICAvKjFDaCAqLworCisgICAgdV9pbnQzMl90IGFib3J0 X21maV9waHlzX2FkZHJfbG87ICAgICAvKjIwaCAqLworICAgIHVfaW50MzJfdCBhYm9ydF9tZmlf cGh5c19hZGRyX2hpOyAgICAgLyoyNGggKi8KKworICAgIHVfaW50MzJfdCByZXNlcnZlZF81WzZd OyAgICAgIC8qMjhoICovCit9OworI3ByYWdtYSBwYWNrKCkKKworI3ByYWdtYSBwYWNrKDEpCitz dHJ1Y3QgbXJzYXNfc21wX2ZyYW1lIHsKKyAgICB1X2ludDhfdCBjbWQ7ICAgICAgICAgICAgICAg ICAvKjAwaCAqLworICAgIHVfaW50OF90IHJlc2VydmVkXzE7ICAgICAgICAgIC8qMDFoICovCisg ICAgdV9pbnQ4X3QgY21kX3N0YXR1czsgICAgICAgICAgLyowMmggKi8KKyAgICB1X2ludDhfdCBj b25uZWN0aW9uX3N0YXR1czsgICAvKjAzaCAqLworCisgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMlsz XTsgICAgICAgLyowNGggKi8KKyAgICB1X2ludDhfdCBzZ2VfY291bnQ7ICAgICAgICAgICAvKjA3 aCAqLworCisgICAgdV9pbnQzMl90IGNvbnRleHQ7ICAgICAgICAgICAgLyowOGggKi8KKyAgICB1 X2ludDMyX3QgcGFkXzA7ICAgICAgICAgICAgICAvKjBDaCAqLworCisgICAgdV9pbnQxNl90IGZs YWdzOyAgICAgICAgICAgICAgLyoxMGggKi8KKyAgICB1X2ludDE2X3QgdGltZW91dDsgICAgICAg ICAgICAvKjEyaCAqLworCisgICAgdV9pbnQzMl90IGRhdGFfeGZlcl9sZW47ICAgICAgLyoxNGgg Ki8KKyAgICB1X2ludDY0X3Qgc2FzX2FkZHI7ICAgICAgICAgICAvKjE4aCAqLworCisgICAgdW5p b24geworICAgICAgICBzdHJ1Y3QgbXJzYXNfc2dlMzIgc2dlMzJbMl07ICAvKiBbMF06IHJlc3Ag WzFdOiByZXEgKi8KKyAgICAgICAgc3RydWN0IG1yc2FzX3NnZTY0IHNnZTY0WzJdOyAgLyogWzBd OiByZXNwIFsxXTogcmVxICovCisgICAgfSBzZ2w7Cit9OworI3ByYWdtYSBwYWNrKCkKKworCisj cHJhZ21hIHBhY2soMSkKK3N0cnVjdCBtcnNhc19zdHBfZnJhbWUgeworICAgIHVfaW50OF90IGNt ZDsgICAgICAgICAgICAgICAgIC8qMDBoICovCisgICAgdV9pbnQ4X3QgcmVzZXJ2ZWRfMTsgICAg ICAgICAgLyowMWggKi8KKyAgICB1X2ludDhfdCBjbWRfc3RhdHVzOyAgICAgICAgICAvKjAyaCAq LworICAgIHVfaW50OF90IHJlc2VydmVkXzI7ICAgICAgICAgIC8qMDNoICovCisKKyAgICB1X2lu dDhfdCB0YXJnZXRfaWQ7ICAgICAgICAgICAvKjA0aCAqLworICAgIHVfaW50OF90IHJlc2VydmVk XzNbMl07ICAgICAgIC8qMDVoICovCisgICAgdV9pbnQ4X3Qgc2dlX2NvdW50OyAgICAgICAgICAg LyowN2ggKi8KKworICAgIHVfaW50MzJfdCBjb250ZXh0OyAgICAgICAgICAgIC8qMDhoICovCisg ICAgdV9pbnQzMl90IHBhZF8wOyAgICAgICAgICAgICAgLyowQ2ggKi8KKworICAgIHVfaW50MTZf dCBmbGFnczsgICAgICAgICAgICAgIC8qMTBoICovCisgICAgdV9pbnQxNl90IHRpbWVvdXQ7ICAg ICAgICAgICAgLyoxMmggKi8KKworICAgIHVfaW50MzJfdCBkYXRhX3hmZXJfbGVuOyAgICAgIC8q MTRoICovCisKKyAgICB1X2ludDE2X3QgZmlzWzEwXTsgICAgICAgICAgICAvKjE4aCAqLworICAg IHVfaW50MzJfdCBzdHBfZmxhZ3M7CisKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBtcnNh c19zZ2UzMiBzZ2UzMlsyXTsgIC8qIFswXTogcmVzcCBbMV06IGRhdGEgKi8KKyAgICAgICAgc3Ry dWN0IG1yc2FzX3NnZTY0IHNnZTY0WzJdOyAgLyogWzBdOiByZXNwIFsxXTogZGF0YSAqLworICAg IH0gc2dsOworfTsKKyNwcmFnbWEgcGFjaygpCisKK3VuaW9uIG1yc2FzX2ZyYW1lIHsKKyAgICBz dHJ1Y3QgbXJzYXNfaGVhZGVyIGhkcjsKKyAgICBzdHJ1Y3QgbXJzYXNfaW5pdF9mcmFtZSBpbml0 OworICAgIHN0cnVjdCBtcnNhc19pb19mcmFtZSBpbzsKKyAgICBzdHJ1Y3QgbXJzYXNfcHRocnVf ZnJhbWUgcHRocnU7CisgICAgc3RydWN0IG1yc2FzX2RjbWRfZnJhbWUgZGNtZDsKKyAgICBzdHJ1 Y3QgbXJzYXNfYWJvcnRfZnJhbWUgYWJvcnQ7CisgICAgc3RydWN0IG1yc2FzX3NtcF9mcmFtZSBz bXA7CisgICAgc3RydWN0IG1yc2FzX3N0cF9mcmFtZSBzdHA7CisgICAgdV9pbnQ4X3QgcmF3X2J5 dGVzWzY0XTsKK307CisKKyNwcmFnbWEgcGFjaygxKQordW5pb24gbXJzYXNfZXZ0X2NsYXNzX2xv Y2FsZSB7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICB1X2ludDE2X3QgbG9j YWxlOworICAgICAgICAgICAgICAgIHVfaW50OF90IHJlc2VydmVkOworICAgICAgICAgICAgICAg IGludDhfdCBjbGFzczsKKyAgICAgICAgfSBfX3BhY2tlZCBtZW1iZXJzOworICAgICAgICAKKyAg ICAgICAgdV9pbnQzMl90IHdvcmQ7CisgICAgICAgICAgICAgICAgCit9IF9fcGFja2VkOworCisj cHJhZ21hIHBhY2soKQorCisKKyNwcmFnbWEgcGFjaygxKQorc3RydWN0IG1yc2FzX2V2dF9sb2df aW5mbyB7CisgICAgICAgIHVfaW50MzJfdCBuZXdlc3Rfc2VxX251bTsKKyAgICAgICAgdV9pbnQz Ml90IG9sZGVzdF9zZXFfbnVtOworICAgICAgICB1X2ludDMyX3QgY2xlYXJfc2VxX251bTsKKyAg ICAgICAgdV9pbnQzMl90IHNodXRkb3duX3NlcV9udW07CisgICAgICAgIHVfaW50MzJfdCBib290 X3NlcV9udW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK30gX19wYWNr ZWQ7CisKKyNwcmFnbWEgcGFjaygpCisKK3N0cnVjdCBtcnNhc19wcm9ncmVzcyB7CisKKwl1X2lu dDE2X3QgcHJvZ3Jlc3M7CisJdV9pbnQxNl90IGVsYXBzZWRfc2Vjb25kczsKKworfSBfX3BhY2tl ZDsKKworc3RydWN0IG1yc2FzX2V2dGFyZ19sZCB7CisKKwl1X2ludDE2X3QgdGFyZ2V0X2lkOwor CXVfaW50OF90IGxkX2luZGV4OworCXVfaW50OF90IHJlc2VydmVkOworCit9IF9fcGFja2VkOwor CitzdHJ1Y3QgbXJzYXNfZXZ0YXJnX3BkIHsKKwl1X2ludDE2X3QgZGV2aWNlX2lkOworCXVfaW50 OF90IGVuY2xfaW5kZXg7CisJdV9pbnQ4X3Qgc2xvdF9udW1iZXI7CisKK30gX19wYWNrZWQ7CisK K3N0cnVjdCBtcnNhc19ldnRfZGV0YWlsIHsKKworCXVfaW50MzJfdCBzZXFfbnVtOworCXVfaW50 MzJfdCB0aW1lX3N0YW1wOworCXVfaW50MzJfdCBjb2RlOworCXVuaW9uIG1yc2FzX2V2dF9jbGFz c19sb2NhbGUgY2w7CisJdV9pbnQ4X3QgYXJnX3R5cGU7CisJdV9pbnQ4X3QgcmVzZXJ2ZWQxWzE1 XTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfcGQgcGQ7 CisJCQl1X2ludDhfdCBjZGJfbGVuZ3RoOworCQkJdV9pbnQ4X3Qgc2Vuc2VfbGVuZ3RoOworCQkJ dV9pbnQ4X3QgcmVzZXJ2ZWRbMl07CisJCQl1X2ludDhfdCBjZGJbMTZdOworCQkJdV9pbnQ4X3Qg c2Vuc2VbNjRdOworCQl9IF9fcGFja2VkIGNkYlNlbnNlOworCisJCXN0cnVjdCBtcnNhc19ldnRh cmdfbGQgbGQ7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfbGQgbGQ7CisJ CQl1X2ludDY0X3QgY291bnQ7CisJCX0gX19wYWNrZWQgbGRfY291bnQ7CisKKwkJc3RydWN0IHsK KwkJCXVfaW50NjRfdCBsYmE7CisJCQlzdHJ1Y3QgbXJzYXNfZXZ0YXJnX2xkIGxkOworCQl9IF9f cGFja2VkIGxkX2xiYTsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBs ZDsKKwkJCXVfaW50MzJfdCBwcmV2T3duZXI7CisJCQl1X2ludDMyX3QgbmV3T3duZXI7CisJCX0g X19wYWNrZWQgbGRfb3duZXI7CisKKwkJc3RydWN0IHsKKwkJCXVfaW50NjRfdCBsZF9sYmE7CisJ CQl1X2ludDY0X3QgcGRfbGJhOworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBsZDsKKwkJCXN0 cnVjdCBtcnNhc19ldnRhcmdfcGQgcGQ7CisJCX0gX19wYWNrZWQgbGRfbGJhX3BkX2xiYTsKKwor CQlzdHJ1Y3QgeworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBsZDsKKwkJCXN0cnVjdCBtcnNh c19wcm9ncmVzcyBwcm9nOworCQl9IF9fcGFja2VkIGxkX3Byb2c7CisKKwkJc3RydWN0IHsKKwkJ CXN0cnVjdCBtcnNhc19ldnRhcmdfbGQgbGQ7CisJCQl1X2ludDMyX3QgcHJldl9zdGF0ZTsKKwkJ CXVfaW50MzJfdCBuZXdfc3RhdGU7CisJCX0gX19wYWNrZWQgbGRfc3RhdGU7CisKKwkJc3RydWN0 IHsKKwkJCXVfaW50NjRfdCBzdHJpcDsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfbGQgbGQ7CisJ CX0gX19wYWNrZWQgbGRfc3RyaXA7CisKKwkJc3RydWN0IG1yc2FzX2V2dGFyZ19wZCBwZDsKKwor CQlzdHJ1Y3QgeworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19wZCBwZDsKKwkJCXVfaW50MzJfdCBl cnI7CisJCX0gX19wYWNrZWQgcGRfZXJyOworCisJCXN0cnVjdCB7CisJCQl1X2ludDY0X3QgbGJh OworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19wZCBwZDsKKwkJfSBfX3BhY2tlZCBwZF9sYmE7CisK KwkJc3RydWN0IHsKKwkJCXVfaW50NjRfdCBsYmE7CisJCQlzdHJ1Y3QgbXJzYXNfZXZ0YXJnX3Bk IHBkOworCQkJc3RydWN0IG1yc2FzX2V2dGFyZ19sZCBsZDsKKwkJfSBfX3BhY2tlZCBwZF9sYmFf bGQ7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtcnNhc19ldnRhcmdfcGQgcGQ7CisJCQlzdHJ1 Y3QgbXJzYXNfcHJvZ3Jlc3MgcHJvZzsKKwkJfSBfX3BhY2tlZCBwZF9wcm9nOworCisJCXN0cnVj dCB7CisJCQlzdHJ1Y3QgbXJzYXNfZXZ0YXJnX3BkIHBkOworCQkJdV9pbnQzMl90IHByZXZTdGF0 ZTsKKwkJCXVfaW50MzJfdCBuZXdTdGF0ZTsKKwkJfSBfX3BhY2tlZCBwZF9zdGF0ZTsKKworCQlz dHJ1Y3QgeworCQkJdV9pbnQxNl90IHZlbmRvcklkOworCQkJdV9pbnQxNl90IGRldmljZUlkOwor CQkJdV9pbnQxNl90IHN1YlZlbmRvcklkOworCQkJdV9pbnQxNl90IHN1YkRldmljZUlkOworCQl9 IF9fcGFja2VkIHBjaTsKKworCQl1X2ludDMyX3QgcmF0ZTsKKwkJY2hhciBzdHJbOTZdOworCisJ CXN0cnVjdCB7CisJCQl1X2ludDMyX3QgcnRjOworCQkJdV9pbnQzMl90IGVsYXBzZWRTZWNvbmRz OworCQl9IF9fcGFja2VkIHRpbWU7CisKKwkJc3RydWN0IHsKKwkJCXVfaW50MzJfdCBlY2FyOwor CQkJdV9pbnQzMl90IGVsb2c7CisJCQljaGFyIHN0cls2NF07CisJCX0gX19wYWNrZWQgZWNjOwor CisJCXVfaW50OF90IGJbOTZdOworCQl1X2ludDE2X3Qgc1s0OF07CisJCXVfaW50MzJfdCB3WzI0 XTsKKwkJdV9pbnQ2NF90IGRbMTJdOworCX0gYXJnczsKKworCWNoYXIgZGVzY3JpcHRpb25bMTI4 XTsKKworfSBfX3BhY2tlZDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcGVyLWluc3RhbmNlIGRhdGEK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KK3N0cnVjdCBtcnNhc19zb2Z0YyB7CisgICAgZGV2aWNlX3QgICAgICAg ICAgIG1yc2FzX2RldjsgICAgICAgICAvLyBidXMgZGV2aWNlCisgICAgc3RydWN0IGNkZXYgICAg ICAgICptcnNhc19jZGV2OyAgICAgICAvLyBjb250cm9sbGVyIGRldmljZQorICAgIHVpbnQxNl90 ICAgICAgICAgICBkZXZpY2VfaWQ7ICAgICAgICAgLy8gcGNpIGRldmljZQorICAgIHN0cnVjdCBy ZXNvdXJjZSAgICAqcmVnX3JlczsgICAgICAgICAgLy8gcmVnaXN0ZXIgaW50ZXJmYWNlIHdpbmRv dworICAgIGludCAgICAgICAgICAgICAgICByZWdfcmVzX2lkOyAgICAgICAgLy8gcmVnaXN0ZXIg cmVzb3VyY2UgaWQKKyAgICBidXNfc3BhY2VfdGFnX3QgICAgYnVzX3RhZzsgICAgICAgICAgIC8v IGJ1cyBzcGFjZSB0YWcKKyAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnVzX2hhbmRsZTsgICAgICAg IC8vIGJ1cyBzcGFjZSBoYW5kbGUKKyAgICBidXNfZG1hX3RhZ190ICAgICAgbXJzYXNfcGFyZW50 X3RhZzsgIC8vIGJ1cyBkbWEgcGFyZW50IHRhZworICAgIGJ1c19kbWFfdGFnX3QgICAgICB2ZXJi dWZfdGFnOyAgICAgICAgLy8gdmVyYnVmIHRhZworICAgIGJ1c19kbWFtYXBfdCAgICAgICB2ZXJi dWZfZG1hbWFwOyAgICAgLy8gdmVyYnVmIGRtYW1hcAorICAgIHZvaWQgICAgICAgICAgICAgICAq dmVyYnVmX21lbTsgICAgICAgIC8vIHZlcmJ1ZiBtZW0KKyAgICBidXNfYWRkcl90ICAgICAgICAg dmVyYnVmX3BoeXNfYWRkcjsgICAvLyB2ZXJidWYgcGh5c2ljYWwgYWRkcgorICAgIGJ1c19kbWFf dGFnX3QgICAgICBzZW5zZV90YWc7ICAgICAgICAgLy8gYnVzIGRtYSB2ZXJidWYgdGFnCisgICAg YnVzX2RtYW1hcF90ICAgICAgIHNlbnNlX2RtYW1hcDsgICAgICAvLyBidXMgZG1hIHZlcmJ1ZiBk bWFtYXAKKyAgICB2b2lkICAgICAgICAgICAgICAgKnNlbnNlX21lbTsgICAgICAgIC8vIHBvaW50 ZXIgdG8gc2Vuc2UgYnVmCisgICAgYnVzX2FkZHJfdCAgICAgICAgIHNlbnNlX3BoeXNfYWRkcjsg ICAgLy8gYnVzIGRtYSB2ZXJidWYgbWVtCisgICAgYnVzX2RtYV90YWdfdCAgICAgIGlvX3JlcXVl c3RfdGFnOyAgICAvLyBidXMgZG1hIGlvIHJlcXVlc3QgdGFnCisgICAgYnVzX2RtYW1hcF90ICAg ICAgIGlvX3JlcXVlc3RfZG1hbWFwOyAvLyBidXMgZG1hIGlvIHJlcXVlc3QgZG1hbWFwCisgICAg dm9pZCAgICAgICAgICAgICAgICppb19yZXF1ZXN0X21lbTsgICAvLyBidXMgZG1hIGlvIHJlcXVl c3QgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIGlvX3JlcXVlc3RfcGh5c19hZGRyOyAvLyBp byByZXF1ZXN0IHBoeXNpY2FsIGFkZHJlc3MKKyAgICBidXNfZG1hX3RhZ190ICAgICAgY2hhaW5f ZnJhbWVfdGFnOyAgICAvLyBidXMgZG1hIGNoYWluIGZyYW1lIHRhZworICAgIGJ1c19kbWFtYXBf dCAgICAgICBjaGFpbl9mcmFtZV9kbWFtYXA7IC8vIGJ1cyBkbWEgY2hhaW4gZnJhbWUgZG1hbWFw CisgICAgdm9pZCAgICAgICAgICAgICAgICpjaGFpbl9mcmFtZV9tZW07ICAgLy8gYnVzIGRtYSBj aGFpbiBmcmFtZSBtZW0KKyAgICBidXNfYWRkcl90ICAgICAgICAgY2hhaW5fZnJhbWVfcGh5c19h ZGRyOyAvLyBjaGFpbiBmcmFtZSBwaHlzIGFkZHJlc3MKKyAgICBidXNfZG1hX3RhZ190ICAgICAg cmVwbHlfZGVzY190YWc7ICAgIC8vIGJ1cyBkbWEgaW8gcmVxdWVzdCB0YWcKKyAgICBidXNfZG1h bWFwX3QgICAgICAgcmVwbHlfZGVzY19kbWFtYXA7IC8vIGJ1cyBkbWEgaW8gcmVxdWVzdCBkbWFt YXAKKyAgICB2b2lkICAgICAgICAgICAgICAgKnJlcGx5X2Rlc2NfbWVtOyAgICAvLyBidXMgZG1h IGlvIHJlcXVlc3QgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIHJlcGx5X2Rlc2NfcGh5c19h ZGRyOyAvLyBidXMgZG1hIGlvIHJlcXVlc3QgbWVtCisgICAgYnVzX2RtYV90YWdfdCAgICAgIGlv Y19pbml0X3RhZzsgICAgLy8gYnVzIGRtYSBpbyByZXF1ZXN0IHRhZworICAgIGJ1c19kbWFtYXBf dCAgICAgICBpb2NfaW5pdF9kbWFtYXA7IC8vIGJ1cyBkbWEgaW8gcmVxdWVzdCBkbWFtYXAKKyAg ICB2b2lkICAgICAgICAgICAgICAgKmlvY19pbml0X21lbTsgICAvLyBidXMgZG1hIGlvIHJlcXVl c3QgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIGlvY19pbml0X3BoeXNfbWVtOyAvLyBpbyBy ZXF1ZXN0IHBoeXNpY2FsIGFkZHJlc3MKKyAgICBidXNfZG1hX3RhZ190ICAgICAgZGF0YV90YWc7 ICAgICAgICAgIC8vIGJ1cyBkbWEgZGF0YSBmcm9tIE9TIHRhZworICAgIHN0cnVjdCBjYW1fc2lt ICAgICAqc2ltXzA7ICAgICAgICAgICAgLy8gU0lNIHBvaW50ZXIKKyAgICBzdHJ1Y3QgY2FtX3Np bSAgICAgKnNpbV8xOyAgICAgICAgICAgIC8vIFNJTSBwb2ludGVyCisgICAgc3RydWN0IGNhbV9w YXRoICAgICpwYXRoXzA7ICAgICAgICAgICAvLyBsZGlvIHBhdGggcG9pbnRlciB0byBDQU0KKyAg ICBzdHJ1Y3QgY2FtX3BhdGggICAgKnBhdGhfMTsgICAgICAgICAgIC8vIHN5c3BkIHBhdGggcG9p bnRlciB0byBDQU0KKyAgICBzdHJ1Y3QgbXR4IHNpbV9sb2NrOyAgICAgICAgICAgICAgICAgIC8v IHNpbSBsb2NrCisgICAgc3RydWN0IG10eCBwY2lfbG9jazsgICAgICAgICAgICAgICAgICAvLyBz ZXJpYWxpemUgcGNpIGFjY2VzcworICAgIHN0cnVjdCBtdHggaW9fbG9jazsgICAgICAgICAgICAg ICAgICAgLy8gSU8gbG9jaworICAgIHN0cnVjdCBtdHggaW9jdGxfbG9jazsgICAgICAgICAgICAg ICAgLy8gSU9DVEwgbG9jaworICAgIHN0cnVjdCBtdHggbXB0X2NtZF9wb29sX2xvY2s7ICAgICAg ICAgLy8gbG9jayBmb3IgY21kIHBvb2wgbGlua2VkIGxpc3QKKyAgICBzdHJ1Y3QgbXR4IG1maV9j bWRfcG9vbF9sb2NrOyAgICAgICAgIC8vIGxvY2sgZm9yIGNtZCBwb29sIGxpbmtlZCBsaXN0Cisg ICAgc3RydWN0IG10eCByYWlkbWFwX2xvY2s7ICAgICAgICAgICAgICAvLyBsb2NrIGZvciByYWlk IG1hcCBhY2Nlc3MvdXBkYXRlCisgICAgc3RydWN0IG10eCBhZW5fbG9jazsgICAgICAgICAgICAg ICAgICAvLyBhZW4gbG9jaworICAgIHVpbnQzMl90ICAgICAgICAgICBtYXhfZndfY21kczsgICAg ICAgLy8gTWF4IGNvbW1hbmRzIGZyb20gRlcKKyAgICB1aW50MzJfdCAgICAgICAgICAgbWF4X251 bV9zZ2U7ICAgICAgIC8vIE1heCBudW1iZXIgb2YgU0dFcworICAgIHN0cnVjdCByZXNvdXJjZSAg ICAqbXJzYXNfaXJxOyAgICAgICAgLy8gaW50ZXJydXB0IGludGVyZmFjZSB3aW5kb3cKKyAgICB2 b2lkICAgICAgICAgICAgICAgKmludHJfaGFuZGxlOyAgICAgIC8vIGhhbmRsZQorICAgIGludCAg ICAgICAgICAgICAgICBpcnFfaWQ7ICAgICAgICAgICAgLy8gaW50ciByZXNvdXJjZSBpZAorICAg IHN0cnVjdCBtcnNhc19tcHRfY21kICAgKiptcHRfY21kX2xpc3Q7CisgICAgc3RydWN0IG1yc2Fz X21maV9jbWQgICAqKm1maV9jbWRfbGlzdDsKKyAgICBUQUlMUV9IRUFEKCwgbXJzYXNfbXB0X2Nt ZCkgbXJzYXNfbXB0X2NtZF9saXN0X2hlYWQ7CisgICAgVEFJTFFfSEVBRCgsIG1yc2FzX21maV9j bWQpIG1yc2FzX21maV9jbWRfbGlzdF9oZWFkOworICAgIGJ1c19hZGRyX3QgICAgICAgICByZXFf ZnJhbWVzX2Rlc2NfcGh5czsKKyAgICB1X2ludDhfdCAgICAgICAgICAgKnJlcV9mcmFtZXNfZGVz YzsKKyAgICB1X2ludDhfdCAgICAgICAgICAgKnJlcV9kZXNjOworICAgIGJ1c19hZGRyX3QgICAg ICAgICBpb19yZXF1ZXN0X2ZyYW1lc19waHlzOworICAgIHVfaW50OF90ICAgICAgICAgICAqaW9f cmVxdWVzdF9mcmFtZXM7CisgICAgYnVzX2FkZHJfdCAgICAgICAgIHJlcGx5X2ZyYW1lc19kZXNj X3BoeXM7CisgICAgdV9pbnQxNl90ICAgICAgICAgIGxhc3RfcmVwbHlfaWR4OworICAgIHVfaW50 MzJfdCAgICAgICAgICByZXBseV9xX2RlcHRoOworICAgIHVfaW50MzJfdCAgICAgICAgICByZXF1 ZXN0X2FsbG9jX3N6OworICAgIHVfaW50MzJfdCAgICAgICAgICByZXBseV9hbGxvY19zejsKKyAg ICB1X2ludDMyX3QgICAgICAgICAgaW9fZnJhbWVzX2FsbG9jX3N6OworICAgIHVfaW50MzJfdCAg ICAgICAgICBjaGFpbl9mcmFtZXNfYWxsb2Nfc3o7CisgICAgdV9pbnQxNl90ICAgICAgICAgIG1h eF9zZ2VfaW5fbWFpbl9tc2c7CisgICAgdV9pbnQxNl90ICAgICAgICAgIG1heF9zZ2VfaW5fY2hh aW47CisgICAgdV9pbnQ4X3QgICAgICAgICAgIGNoYWluX29mZnNldF9pb19yZXF1ZXN0OworICAg IHVfaW50OF90ICAgICAgICAgICBjaGFpbl9vZmZzZXRfbWZpX3B0aHJ1OworICAgIHVfaW50MzJf dCAgICAgICAgICBtYXBfc3o7CisgICAgdV9pbnQ2NF90ICAgICAgICAgIG1hcF9pZDsKKyAgICBz dHJ1Y3QgbXJzYXNfbWZpX2NtZCAqbWFwX3VwZGF0ZV9jbWQ7CisgICAgc3RydWN0IG1yc2FzX21m aV9jbWQgKmFlbl9jbWQ7CQorICAgIHVfaW50OF90ICAgICAgICAgICBmYXN0X3BhdGhfaW87Cisg ICAgdm9pZCogICAgICAgICAgICAgIGNoYW47CisgICAgdm9pZCogICAgICAgICAgICAgIG9jcl9j aGFuOworICAgIHVfaW50OF90ICAgICAgICAgICBhZHByZWNvdmVyeTsKKyAgICB1X2ludDhfdCAg ICAgICAgICAgcmVtb3ZlX2luX3Byb2dyZXNzOworICAgIHVfaW50OF90ICAgICAgICAgICBvY3Jf dGhyZWFkX2FjdGl2ZTsKKyAgICB1X2ludDhfdCAgICAgICAgICAgZG9fdGltZWRvdXRfcmVzZXQ7 CisgICAgdV9pbnQzMl90ICAgICAgICAgIHJlc2V0X2luX3Byb2dyZXNzOworICAgIHVfaW50MzJf dCAgICAgICAgICByZXNldF9jb3VudDsKKyAgICBidXNfZG1hX3RhZ190ICAgICAgcmFpZG1hcF90 YWdbMl07ICAgIC8vIGJ1cyBkbWEgdGFnIGZvciBSQUlEIG1hcAorICAgIGJ1c19kbWFtYXBfdCAg ICAgICByYWlkbWFwX2RtYW1hcFsyXTsgLy8gYnVzIGRtYSBkbWFtYXAgUkFJRCBtYXAKKyAgICB2 b2lkICAgICAgICAgICAgICAgKnJhaWRtYXBfbWVtWzJdOyAgIC8vIGJ1cyBkbWEgbWVtIFJBSUQg bWFwCisgICAgYnVzX2FkZHJfdCAgICAgICAgIHJhaWRtYXBfcGh5c19hZGRyWzJdOyAvLyBSQUlE IG1hcCBwaHlzaWNhbCBhZGRyZXNzCisgICAgYnVzX2RtYV90YWdfdCAgICAgIG1maWNtZF9mcmFt ZV90YWc7ICAgICAgLy8gdGFnIGZvciBtZmkgZnJhbWUKKyAgICBidXNfZG1hX3RhZ190ICAgICAg bWZpY21kX3NlbnNlX3RhZzsgICAgICAvLyB0YWcgZm9yIG1maSBzZW5zZQorICAgIGJ1c19kbWFf dGFnX3QgICAgICBldnRfZGV0YWlsX3RhZzsgICAgICAgIC8vIGV2ZW50IGRldGFpbCB0YWcKKyAg ICBidXNfZG1hbWFwX3QgICAgICAgZXZ0X2RldGFpbF9kbWFtYXA7ICAgICAvLyBldmVudCBkZXRh aWwgZG1hbWFwCisgICAgc3RydWN0IG1yc2FzX2V2dF9kZXRhaWwgICAqZXZ0X2RldGFpbF9tZW07 ICAgICAgICAvLyBldmVudCBkZXRhaWwgbWVtCisgICAgYnVzX2FkZHJfdCAgICAgICAgIGV2dF9k ZXRhaWxfcGh5c19hZGRyOyAgIC8vIGV2ZW50IGRldGFpbCBwaHlzaWNhbCBhZGRyCisgICAgYnVz X2RtYV90YWdfdCAgICAgIGN0bHJfaW5mb190YWc7ICAgIC8vIHRhZyBmb3IgZ2V0IGN0bHIgaW5m byBjbWQKKyAgICBidXNfZG1hbWFwX3QgICAgICAgY3Rscl9pbmZvX2RtYW1hcDsgLy8gZ2V0IGN0 bHIgaW5mbyBjbWQgZG1hbWFwCisgICAgdm9pZCAgICAgICAgICAgICAgICpjdGxyX2luZm9fbWVt OyAgIC8vIGdldCBjdGxyIGluZm8gY21kIHZpcnR1YWwgYWRkcgorICAgIGJ1c19hZGRyX3QgICAg ICAgICBjdGxyX2luZm9fcGh5c19hZGRyOyAvL2dldCBjdGxyIGluZm8gY21kIHBoeXNpY2FsIGFk ZHIKKyAgICB1X2ludDMyX3QgICAgICAgICAgbWF4X3NlY3RvcnNfcGVyX3JlcTsKKyAgICB1X2lu dDhfdCAgICAgICAgICAgZGlzYWJsZU9ubGluZUN0cmxSZXNldDsKKyAgICBhdG9taWNfdCAgICAg ICAgICAgZndfb3V0c3RhbmRpbmc7CisgICAgdV9pbnQzMl90ICAgICAgICAgIG1yc2FzX2RlYnVn OworICAgIHVfaW50MzJfdCAgICAgICAgICBtcnNhc19pb190aW1lb3V0OworICAgIHVfaW50MzJf dCAgICAgICAgICBtcnNhc19md19mYXVsdF9jaGVja19kZWxheTsgCisgICAgdV9pbnQzMl90ICAg ICAgICAgIGlvX2NtZHNfaGlnaHdhdGVyOyAKKyAgICB1X2ludDMyX3QgICAgICAgICAgbXJzYXNf bGRpb19kZXB0aDsKKyAgICBzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICAgc3lzY3RsX2N0eDsKKyAg ICBzdHJ1Y3Qgc3lzY3RsX29pZCAgICAgICAgKnN5c2N0bF90cmVlOworICAgIHN0cnVjdCBwcm9j ICAgICAgICAgICAgICAqb2NyX3RocmVhZDsKKyAgICB1X2ludDMyX3QJbGFzdF9zZXFfbnVtOwor ICAgIGJ1c19kbWFfdGFnX3QgICAgICBlbF9pbmZvX3RhZzsgICAgLy8gdGFnIGZvciBnZXQgZXZl bnQgbG9nIGluZm8gY21kCisgICAgYnVzX2RtYW1hcF90ICAgICAgIGVsX2luZm9fZG1hbWFwOyAv LyBnZXQgZXZlbnQgbG9nIGluZm8gY21kIGRtYW1hcAorICAgIHZvaWQgICAgICAgICAgICAgICAq ZWxfaW5mb19tZW07ICAgLy8gZ2V0IGV2ZW50IGxvZyBpbmZvIGNtZCB2aXJ0dWFsIGFkZHIKKyAg ICBidXNfYWRkcl90ICAgICAgICAgZWxfaW5mb19waHlzX2FkZHI7IC8vZ2V0IGV2ZW50IGxvZyBp bmZvIGNtZCBwaHlzaWNhbCBhZGRyCisgICAgc3RydWN0IG1yc2FzX3BkX2xpc3QgcGRfbGlzdFtN UlNBU19NQVhfUERdOworICAgIHVfaW50OF90ICAgICAgICAgICBsZF9pZHNbTVJTQVNfTUFYX0xE XTsKKyAgICBzdHJ1Y3QgdGFza3F1ZXVlICAgICpldl90cTsJLy90YXNrcXVldWUgZm9yIGV2ZW50 cworICAgIHN0cnVjdCB0YXNrICAgICAJZXZfdGFzazsKKyAgICB1X2ludDMyX3QgICAgICAgICAg Q3VyTGRDb3VudDsKKyAgICB1X2ludDY0X3QgICAgICAgICAgcmVzZXRfZmxhZ3M7CisgICAgTERf TE9BRF9CQUxBTkNFX0lORk8gbG9hZF9iYWxhbmNlX2luZm9bTUFYX0xPR0lDQUxfRFJJVkVTXTsK K307CisKKy8qIENvbXBhdGliaWxpdHkgc2hpbXMgZm9yIGRpZmZlcmVudCBPUyB2ZXJzaW9ucyAq LworI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMQorI2RlZmluZSBtcnNhc19rcHJvY19j cmVhdGUoZnVuYywgZmFyZywgcHJvY19wdHIsIGZsYWdzLCBzdGFja3BncywgZm10c3RyLCBhcmcp IFwKKyAgICBrcHJvY19jcmVhdGUoZnVuYywgZmFyZywgcHJvY19wdHIsIGZsYWdzLCBzdGFja3Bn cywgZm10c3RyLCBhcmcpCisjZGVmaW5lIG1yc2FzX2twcm9jX2V4aXQoYXJnKSAgIGtwcm9jX2V4 aXQoYXJnKQorI2Vsc2UKKyNkZWZpbmUgbXJzYXNfa3Byb2NfY3JlYXRlKGZ1bmMsIGZhcmcsIHBy b2NfcHRyLCBmbGFncywgc3RhY2twZ3MsIGZtdHN0ciwgYXJnKSBcCisgICAga3RocmVhZF9jcmVh dGUoZnVuYywgZmFyZywgcHJvY19wdHIsIGZsYWdzLCBzdGFja3BncywgZm10c3RyLCBhcmcpCisj ZGVmaW5lIG1yc2FzX2twcm9jX2V4aXQoYXJnKSAgIGt0aHJlYWRfZXhpdChhcmcpCisjZW5kaWYK Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZWFyX2JpdChpbnQgYiwgdm9sYXRpbGUgdm9pZCAq cCkKK3sKKyAgICBhdG9taWNfY2xlYXJfaW50KCgodm9sYXRpbGUgaW50ICopcCkgKyAoYiA+PiA1 KSwgMSA8PCAoYiAmIDB4MWYpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK3NldF9iaXQo aW50IGIsIHZvbGF0aWxlIHZvaWQgKnApCit7CisgICAgYXRvbWljX3NldF9pbnQoKCh2b2xhdGls ZSBpbnQgKilwKSArIChiID4+IDUpLCAxIDw8IChiICYgMHgxZikpOworfQorCitzdGF0aWMgX19p bmxpbmUgaW50Cit0ZXN0X2JpdChpbnQgYiwgdm9sYXRpbGUgdm9pZCAqcCkKK3sKKyAgICByZXR1 cm4gKCh2b2xhdGlsZSBpbnQgKilwKVtiID4+IDVdICYgKDEgPDwgKGIgJiAweDFmKSk7Cit9CisK KyNlbmRpZiAgLyogTVJTQVNfSCAqLwpJbmRleDogc3lzL2Rldi9tZmkvbWZpX3BjaS5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHN5cy9kZXYvbWZpL21maV9wY2kuYwkocmV2aXNpb24gMjQ5OTIwKQorKysgc3lz L2Rldi9tZmkvbWZpX3BjaS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCwyNCBAQAog bWZpX3BjaV9wcm9iZShkZXZpY2VfdCBkZXYpCiB7CiAJc3RydWN0IG1maV9pZGVudCAqaWQ7CisJ dW5zaWduZWQgaW50IG1yc2FzX2ZvcmNlID0gMCwgaXZhcjsKIAogCWlmICgoaWQgPSBtZmlfZmlu ZF9pZGVudChkZXYpKSAhPSBOVUxMKSB7Ci0JCWRldmljZV9zZXRfZGVzYyhkZXYsIGlkLT5kZXNj KTsKLQkJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7CisJCWlmIChpZC0+ZGV2aWNlID09IDB4 MDA1YiB8fCBpZC0+ZGV2aWNlID09IDB4MDA1ZCkgeworICAgICAgICAgICAgcmVzb3VyY2VfaW50 X3ZhbHVlKCJtcnNhcyIsIDAsICJmdXNpb25fZm9yY2UiLCAmaXZhcik7CisKKwkJCWlmIChpdmFy ID09IDAgfHwgaXZhciA9PSAxKQorCQkgICAgICAgICAgICBtcnNhc19mb3JjZSA9IGl2YXI7ICAK KworICAgICAgICAgICAgZGV2aWNlX3NldF9kZXNjKGRldiwgaWQtPmRlc2MpOworICAgICAgICAg ICAgaWYgKG1yc2FzX2ZvcmNlKQorICAgICAgICAgICAgICAgIHJldHVybiAoQlVTX1BST0JFX0xP V19QUklPUklUWSk7IC8vIGdpdmUgcHJpb3JpdHkgdG8gbXJzYXMKKyAgICAgICAgICAgIGVsc2Ug CisgICAgICAgICAgICAJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSAKKyAgICAgICAgICAgIGRldmljZV9zZXRfZGVzYyhkZXYsIGlkLT5kZXNjKTsK KyAgICAgICAgICAgIHJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOwogCX0KIAlyZXR1cm4gKEVO WElPKTsKIH0K --_003_08ba2a262fba45f687cdd3225f325110BN1PR07MB247namprd07pro_--