From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D060C43331 for ; Thu, 5 Sep 2019 17:48:28 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 919932067B for ; Thu, 5 Sep 2019 17:48:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=alsa-project.org header.i=@alsa-project.org header.b="DH7ztVpf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 919932067B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=thundersoft.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 98A0C1676; Thu, 5 Sep 2019 19:47:35 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 98A0C1676 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1567705705; bh=N1NXKFvJOEXKOn2mhjaVt7pJqjKoZ9dDrMZsKWnHj/w=; h=Date:From:To:Cc:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From; b=DH7ztVpfbmUeO59gW5tALGMdZnDNrjDKVlKjFnieQ3TnKOqAC1U5c/mPRQ8NT4CzA OhGqUh69ACr4jJYe0Yqr/RNzJJmMJ9pLd+GlevJTVMhSAyX2B+WucXcT0AI2x30buT 4MkLzIGr35Vj3MnlXtg+t21Ce0BbIsfjZcSeZ4Pk= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 3E05FF805F5; Thu, 5 Sep 2019 19:43:18 +0200 (CEST) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 6AE90F8049B; Thu, 5 Sep 2019 07:35:29 +0200 (CEST) Received: from mail2.thundersoft.com (unknown [114.242.213.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id B7717F80227 for ; Thu, 5 Sep 2019 07:35:12 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz B7717F80227 Received: from shifu (unknown [124.89.2.42]) by mail2.thundersoft.com (Postfix) with ESMTPSA id 7A47615200FC; Thu, 5 Sep 2019 13:35:04 +0800 (CST) Date: Thu, 5 Sep 2019 13:35:04 +0800 From: "shifu0704@thundersoft.com" To: lgirdwood , broonie , perex , tiwai , linux-kernel , alsa-devel X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.9.116[cn] Mime-Version: 1.0 Message-ID: <201909051335040840918@thundersoft.com> X-Mailman-Approved-At: Thu, 05 Sep 2019 19:43:12 +0200 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Cc: =?GB2312?B?RGFuP011cnBoeQ==?= , =?GB2312?B?TmF2YWRhIEthbnlhbmEsIE11a3VuZA==?= Subject: [alsa-devel] [PATCH]Add tas2770 driver code X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" RnJvbSA1YjUzOWU3ZGJlYmViZjdlNThjMzhhNmI1NGYyMjJiYzExNmQ2M2YzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogU2hpIEZ1IDxzaGlmdTA3MDRAdGh1bmRlcnNvZnQuY29tPg0K RGF0ZTogTW9uLCAxIEp1bCAyMDE5IDExOjAwOjEzICswODAwDQpTaWduZWQtb2ZmLWJ5OiBTaGkg RnUgPHNoaWZ1MDcwNEB0aHVuZGVyc29mdC5jb20+DQpTdWJqZWN0OiBbUEFUQ0ggdjVdIGR0OiB0 YXMyNzcwOiBBZGQgdGFzMjc3MCBzbWFydCBQQSBkdCBiaW5kaW5ncy4NCg0KQWRkIHRhczI3NzAg c21hcnQgUEEgZHQgYmluZGluZ3MuDQotLS0NCiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3MvdGFzMjc3MC50eHQgfCAzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysNCiAxIGZp bGUgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGFzMjc3MC50eHQNCg0KZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90YXMyNzcwLnR4dCBiL0RvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy90YXMyNzcwLnR4dA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAuLmY3MGIzMTANCi0tLSAvZGV2L251bGwNCisrKyBiL0RvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy90YXMyNzcwLnR4dA0KQEAgLTAsMCArMSwzOCBAQA0KK1Rl eGFzIEluc3RydW1lbnRzIFRBUzI3NzAgU21hcnQgUEENCisNCitUaGUgVEFTMjc3MCBpcyBhIG1v bm8sIGRpZ2l0YWwgaW5wdXQgQ2xhc3MtRCBhdWRpbyBhbXBsaWZpZXIgb3B0aW1pemVkIGZvcg0K K2VmZmljaWVudGx5IGRyaXZpbmcgaGlnaCBwZWFrIHBvd2VyIGludG8gc21hbGwgbG91ZHNwZWFr ZXJzLg0KK0ludGVncmF0ZWQgc3BlYWtlciB2b2x0YWdlIGFuZCBjdXJyZW50IHNlbnNlIHByb3Zp ZGVzIGZvcg0KK3JlYWwgdGltZSBtb25pdG9yaW5nIG9mIGxvdWRzcGVha2VyIGJlaGF2aW9yLg0K Kw0KK1JlcXVpcmVkIHByb3BlcnRpZXM6DQorDQorIC0gY29tcGF0aWJsZTogICAtIFNob3VsZCBj b250YWluICJ0aSx0YXMyNzcwIi4NCisgLSByZWc6ICAgICAgIC0gVGhlIGkyYyBhZGRyZXNzLiBT aG91bGQgY29udGFpbiA8MHg0Yz4sIDwweDRkPiw8MHg0ZT4sIG9yIDwweDRmPi4NCisgLSAjYWRk cmVzcy1jZWxscyAgLSBTaG91bGQgYmUgPDE+Lg0KKyAtICNzaXplLWNlbGxzICAgICAtIFNob3Vs ZCBiZSA8MD4uDQorIC0gdGksYXNpLWZvcm1hdDogIC0gU2V0cyBURE0gUlggY2FwdHVyZSBlZGdl LiAwLT5SaXNpbmc7IDEtPkZhbGxpbmcuDQorIC0gdGksbGVmdC1zbG90OiAgIC0gU2V0cyBURE0g UlggbGVmdCB0aW1lIHNsb3RzLg0KKyAtIHRpLHJpZ2h0LXNsb3Q6ICAtIFNldHMgVERNIFJYIHJp Z2h0IHRpbWUgc2xvdHMuDQorIC0gdGksaW1vbi1zbG90LW5vOi0gVERNIFRYIGN1cnJlbnQgc2Vu c2UgdGltZSBzbG90Lg0KKyAtIHRpLHZtb24tc2xvdC1ubzotIFRETSBUWCB2b2x0YWdlIHNlbnNl IHRpbWUgc2xvdC4NCisNCitPcHRpb25hbCBwcm9wZXJ0aWVzOg0KKw0KKyAtIHJlc2V0LWdwaW86 IFJlc2V0IEdQSU8gbnVtYmVyIG9mIGxlZnQgZGV2aWNlLg0KKyAtIGlycS1ncGlvOiAgSVJRIEdQ SU8gbnVtYmVyIG9mIGxlZnQgZGV2aWNlLg0KKw0KK0V4YW1wbGVzOg0KKw0KKyAgICB0YXMyNzcw QDRjIHsNCisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJ0aSx0YXMyNzcwIjsNCisgICAg ICAgICAgICAgICAgcmVnID0gPDB4NGM+Ow0KKyAgICAgICAgICAgICAgICByZXNldC1ncGlvID0g PCZncGlvMTUgMSBHUElPX0FDVElWRV9MT1c+Ow0KKyAgICAgICAgICAgICAgICBpcnEtZ3BpbyA9 IDwmZ3BpbzE2IDEgR1BJT19BQ1RJVkVfTE9XPjsNCisgICAgICAgICAgICAgICAgdGksYXNpLWZv cm1hdCA9IDwwPjsNCisgICAgICAgICAgICAgICAgdGksbGVmdC1zbG90ID0gPDA+Ow0KKyAgICAg ICAgICAgICAgICB0aSxyaWdodC1zbG90ID0gPDE+Ow0KKyAgICAgICAgICAgICAgICB0aSxpbW9u LXNsb3Qtbm8gPSA8MD47DQorICAgICAgICAgICAgICAgIHRpLHZtb24tc2xvdC1ubyA9IDwyPjsN CisgICAgICAgIH07DQorDQotLSANCjIuNy40DQoNCg0KDQoNCg0KRnJvbSAxNjdhODVhYTMwYTQx NDcxY2NkZGQ5OTEyYjE5MmQ5MjgwMGE0MjEyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJv bTogVFMgU2hpIEZ1IDxzaGlmdTA3MDRAdGh1bmRlcnNvZnQuY29tPg0KRGF0ZTogTW9uLCAyNCBK dW4gMjAxOSAxODoyNjowOSArMDgwMA0KU3ViamVjdDogW1BBVENIIHY1XSBBZGQgdGFzMjc3MCBk cml2ZXIgY29kZQ0KDQpBZGQgdGFzMjc3MCBkcml2ZXIgY29kZQ0KRGF0ZTogV2VkLCAxNSBNYXkg MjAxOSAxMjowODo0MiArMDgwMA0KRnJvbTogU2hpIEZ1IDxzaGlmdTA3MDRAdGh1bmRlcnNvZnQu Y29tPg0KU2lnbmVkLW9mZi1ieTogU2hpIEZ1IDxzaGlmdTA3MDRAdGh1bmRlcnNvZnQuY29tPg0K DQpDaGFuZ2UtSWQ6IEliZDViMDRiNGMwZDAwMjFhODA1NzAyM2FhNmI0M2Y5N2JiYTM3MmIxDQot LS0NCiBzb3VuZC9zb2MvY29kZWNzL0tjb25maWcgICB8ICAgIDUgKw0KIHNvdW5kL3NvYy9jb2Rl Y3MvTWFrZWZpbGUgIHwgICAgMiArDQogc291bmQvc29jL2NvZGVjcy90YXMyNzcwLmMgfCAxMTAz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogc291bmQvc29j L2NvZGVjcy90YXMyNzcwLmggfCAgMTczICsrKysrKysNCiA0IGZpbGVzIGNoYW5nZWQsIDEyODMg aW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvY29kZWNzL3RhczI3 NzAuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvY29kZWNzL3RhczI3NzAuaA0KDQpk aWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9L Y29uZmlnDQppbmRleCA4ZjNlNzg3Li5jYzkyZGEzIDEwMDY0NA0KLS0tIGEvc291bmQvc29jL2Nv ZGVjcy9LY29uZmlnDQorKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcNCkBAIC0xMTEsNiAr MTExLDcgQEAgY29uZmlnIFNORF9TT0NfQUxMX0NPREVDUw0KICBzZWxlY3QgU05EX1NPQ19TVEFD OTc2NiBpZiBTTkRfU09DX0FDOTdfQlVTDQogIHNlbGVjdCBTTkRfU09DX1NUSV9TQVMNCiAgc2Vs ZWN0IFNORF9TT0NfVEFTMjU1MiBpZiBJMkMNCisgc2VsZWN0IFNORF9TT0NfVEFTMjc3MCBpZiBJ MkMNCiAgc2VsZWN0IFNORF9TT0NfVEFTNTA4NiBpZiBJMkMNCiAgc2VsZWN0IFNORF9TT0NfVEFT NTcxWCBpZiBJMkMNCiAgc2VsZWN0IFNORF9TT0NfVEZBOTg3OSBpZiBJMkMNCkBAIC02NTIsNiAr NjUzLDEwIEBAIGNvbmZpZyBTTkRfU09DX1RBUzI1NTINCiAgdHJpc3RhdGUgIlRleGFzIEluc3Ry dW1lbnRzIFRBUzI1NTIgTW9ubyBBdWRpbyBhbXBsaWZpZXIiDQogIGRlcGVuZHMgb24gSTJDDQog DQorY29uZmlnIFNORF9TT0NfVEFTMjc3MA0KKyB0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMg VEFTMjc3MCBzcGVha2VyIGFtcGxpZmllciINCisgZGVwZW5kcyBvbiBJMkMNCisNCiBjb25maWcg U05EX1NPQ19UQVM1MDg2DQogIHRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUQVM1MDg2IHNw ZWFrZXIgYW1wbGlmaWVyIg0KICBkZXBlbmRzIG9uIEkyQw0KZGlmZiAtLWdpdCBhL3NvdW5kL3Nv Yy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlDQppbmRleCA1MzA1 Y2M2Li4xYjU4ZDA4IDEwMDY0NA0KLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQ0KKysr IGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQ0KQEAgLTExNiw2ICsxMTYsNyBAQCBzbmQtc29j LXN0YWM5NzY2LW9ianMgOj0gc3RhYzk3NjYubw0KIHNuZC1zb2Mtc3RpLXNhcy1vYmpzIDo9IHN0 aS1zYXMubw0KIHNuZC1zb2MtdGFzNTA4Ni1vYmpzIDo9IHRhczUwODYubw0KIHNuZC1zb2MtdGFz NTcxeC1vYmpzIDo9IHRhczU3MXgubw0KK3NuZC1zb2MtdGFzMjc3MC1vYmpzIDo9ICB0YXMyNzcw Lm8NCiBzbmQtc29jLXRmYTk4Nzktb2JqcyA6PSB0ZmE5ODc5Lm8NCiBzbmQtc29jLXRsdjMyMGFp YzIzLW9ianMgOj0gdGx2MzIwYWljMjMubw0KIHNuZC1zb2MtdGx2MzIwYWljMjMtaTJjLW9ianMg Oj0gdGx2MzIwYWljMjMtaTJjLm8NCkBAIC0zMzIsNiArMzMzLDcgQEAgb2JqLSQoQ09ORklHX1NO RF9TT0NfU1RJX1NBUykgKz0gc25kLXNvYy1zdGktc2FzLm8NCiBvYmotJChDT05GSUdfU05EX1NP Q19UQVMyNTUyKSArPSBzbmQtc29jLXRhczI1NTIubw0KIG9iai0kKENPTkZJR19TTkRfU09DX1RB UzUwODYpICs9IHNuZC1zb2MtdGFzNTA4Ni5vDQogb2JqLSQoQ09ORklHX1NORF9TT0NfVEFTNTcx WCkgKz0gc25kLXNvYy10YXM1NzF4Lm8NCitvYmotJChDT05GSUdfU05EX1NPQ19UQVMyNzcwKSAr PSBzbmQtc29jLXRhczI3NzAubw0KIG9iai0kKENPTkZJR19TTkRfU09DX1RGQTk4NzkpICs9IHNu ZC1zb2MtdGZhOTg3OS5vDQogb2JqLSQoQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjMpICs9IHNu ZC1zb2MtdGx2MzIwYWljMjMubw0KIG9iai0kKENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzIzX0ky QykgKz0gc25kLXNvYy10bHYzMjBhaWMyMy1pMmMubw0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9j b2RlY3MvdGFzMjc3MC5jIGIvc291bmQvc29jL2NvZGVjcy90YXMyNzcwLmMNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi45ZmMwYzExDQotLS0gL2Rldi9udWxsDQorKysgYi9z b3VuZC9zb2MvY29kZWNzL3RhczI3NzAuYw0KQEAgLTAsMCArMSwxMTAzIEBADQorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIEFMU0EgU29DIFRleGFzIEluc3Ry dW1lbnRzIFRBUzI3NzAgMjAtVyBEaWdpdGFsIElucHV0IE1vbm8gQ2xhc3MtRA0KKyAqIEF1ZGlv IEFtcGxpZmllciB3aXRoIFNwZWFrZXIgSS9WIFNlbnNlDQorICoNCisgKiBDb3B5cmlnaHQgKEMp IDIwMTYtMjAxNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRp LmNvbS8NCisgKiBBdXRob3I6IFRyYWN5IFlpIDx0cmFjeS15aUB0aS5jb20+DQorICogU2hpIEZ1 IDxzaGlmdTA3MDRAdGh1bmRlcnNvZnQuY29tPg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCisjaW5jbHVkZSA8bGlu dXgvZXJyLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4NCisjaW5jbHVkZSA8bGludXgvcG0uaD4NCisjaW5jbHVkZSA8bGludXgvaTJjLmg+DQor I2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4NCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0K KyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCisjaW5jbHVkZSA8bGludXgv ZmlybXdhcmUuaD4NCisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQorI2luY2x1ZGUgPGxpbnV4 L29mLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4NCisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPg0KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4NCisjaW5jbHVkZSA8c291bmQvcGNtLmg+DQor I2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4NCisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5o Pg0KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4NCisNCisjaW5jbHVkZSAidGFzMjc3MC5oIg0KKw0K KyNkZWZpbmUgVEFTMjc3MF9NREVMQVkgMHhGRkZGRkZGRQ0KKyNkZWZpbmUgVEFTMjc3MF9DSEVD S19QRVJJT0QgNTAwMCAvKiA1IHNlY29uZCAqLw0KKw0KK3N0YXRpYyB2b2lkIHRhczI3NzBfaHdf cmVzZXQoc3RydWN0IHRhczI3NzBfcHJpdiAqcF90YXMyNzcwKQ0KK3sNCisgaWYgKHBfdGFzMjc3 MC0+bW5fcmVzZXRfZ3Bpbykgew0KKyBncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocF90YXMyNzcw LT5tbl9yZXNldF9ncGlvLCAwKTsNCisgbXNsZWVwKDIwKTsNCisgZ3Bpb2Rfc2V0X3ZhbHVlX2Nh bnNsZWVwKHBfdGFzMjc3MC0+bW5fcmVzZXRfZ3BpbywgMSk7DQorIH0NCisNCisgcF90YXMyNzcw LT5tbl9jdXJyZW50X2Jvb2sgPSAtMTsNCisgcF90YXMyNzcwLT5tbl9jdXJyZW50X3BhZ2UgPSAt MTsNCit9DQorDQorc3RhdGljIHZvaWQgdGFzMjc3MF9lbmFibGVfaXJxKHN0cnVjdCB0YXMyNzcw X3ByaXYgKnBfdGFzMjc3MCwgYm9vbCBlbmFibGUpDQorew0KKyBpZiAoZW5hYmxlKSB7DQorIGlm IChwX3RhczI3NzAtPm1iX2lycV9lbmFibGUpDQorIHJldHVybjsNCisNCisgaWYgKGdwaW9faXNf dmFsaWQocF90YXMyNzcwLT5tbl9pcnEpKQ0KKyBlbmFibGVfaXJxKHBfdGFzMjc3MC0+bW5faXJx KTsNCisgcF90YXMyNzcwLT5tYl9pcnFfZW5hYmxlID0gdHJ1ZTsNCisgfSBlbHNlIHsNCisgaWYg KGdwaW9faXNfdmFsaWQocF90YXMyNzcwLT5tbl9pcnEpKQ0KKyBkaXNhYmxlX2lycV9ub3N5bmMo cF90YXMyNzcwLT5tbl9pcnEpOw0KKyBwX3RhczI3NzAtPm1iX2lycV9lbmFibGUgPSBmYWxzZTsN CisgfQ0KK30NCisNCitzdGF0aWMgaW50IHRhczI3NzBfcnVudGltZV9zdXNwZW5kKHN0cnVjdCB0 YXMyNzcwX3ByaXYgKnBfdGFzMjc3MCkNCit7DQorIHBfdGFzMjc3MC0+bWJfcnVudGltZV9zdXNw ZW5kID0gdHJ1ZTsNCisNCisgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGFzMjc3MF9y dW50aW1lX3Jlc3VtZShzdHJ1Y3QgdGFzMjc3MF9wcml2ICpwX3RhczI3NzApDQorew0KKw0KKyBw X3RhczI3NzAtPm1iX3J1bnRpbWVfc3VzcGVuZCA9IGZhbHNlOw0KKw0KKyByZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCB0YXMyNzcwX3JlZ21hcF93cml0ZShzdHJ1Y3QgdGFzMjc3MF9wcml2 ICpwX3RhczI3NzAsDQorIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkNCit7 DQorIGludCBuUmVzdWx0ID0gMDsNCisgaW50IHJldHJ5X2NvdW50ID0gVEFTMjc3MF9JMkNfUkVU UllfQ09VTlQ7DQorDQorIHdoaWxlIChyZXRyeV9jb3VudC0tKSB7DQorIG5SZXN1bHQgPSBzbmRf c29jX2NvbXBvbmVudF93cml0ZShwX3RhczI3NzAtPmNvbXBvbmVudCwgcmVnLA0KKyB2YWx1ZSk7 DQorIGlmICghblJlc3VsdCkNCisgYnJlYWs7DQorIG1zbGVlcCgyMCk7DQorIH0NCisgaWYgKHJl dHJ5X2NvdW50ID09IC0xKQ0KKyByZXR1cm4gRVJST1JfSTJDX0ZBSUxFRDsNCisgZWxzZQ0KKyBy ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCB0YXMyNzcwX3JlZ21hcF9yZWFkKHN0cnVjdCB0 YXMyNzcwX3ByaXYgKnBfdGFzMjc3MCwNCisgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50 ICp2YWx1ZSkNCit7DQorIGludCBuUmVzdWx0ID0gMDsNCisgaW50IHJldHJ5X2NvdW50ID0gVEFT Mjc3MF9JMkNfUkVUUllfQ09VTlQ7DQorDQorIHdoaWxlIChyZXRyeV9jb3VudC0tKSB7DQorIG5S ZXN1bHQgPSBzbmRfc29jX2NvbXBvbmVudF9yZWFkKHBfdGFzMjc3MC0+Y29tcG9uZW50LCByZWcs DQorIHZhbHVlKTsNCisgaWYgKCFuUmVzdWx0KQ0KKyBicmVhazsNCisNCisgbXNsZWVwKDIwKTsN CisgfQ0KKyBpZiAoIXJldHJ5X2NvdW50KQ0KKyByZXR1cm4gRVJST1JfSTJDX0ZBSUxFRDsNCisN CisgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGFzMjc3MF9jb2RlY19zdXNwZW5kKHN0 cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50KQ0KK3sNCisgc3RydWN0IHRhczI3NzBf cHJpdiAqcF90YXMyNzcwID0NCisgc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9u ZW50KTsNCisNCisgbXV0ZXhfbG9jaygmcF90YXMyNzcwLT5jb2RlY19sb2NrKTsNCisgdGFzMjc3 MF9ydW50aW1lX3N1c3BlbmQocF90YXMyNzcwKTsNCisgbXV0ZXhfdW5sb2NrKCZwX3RhczI3NzAt PmNvZGVjX2xvY2spOw0KKw0KKyByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCB0YXMyNzcw X2NvZGVjX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCkNCit7DQor IHN0cnVjdCB0YXMyNzcwX3ByaXYgKnBfdGFzMjc3MCA9DQorIHNuZF9zb2NfY29tcG9uZW50X2dl dF9kcnZkYXRhKGNvbXBvbmVudCk7DQorDQorIG11dGV4X2xvY2soJnBfdGFzMjc3MC0+Y29kZWNf bG9jayk7DQorIHRhczI3NzBfcnVudGltZV9yZXN1bWUocF90YXMyNzcwKTsNCisgbXV0ZXhfdW5s b2NrKCZwX3RhczI3NzAtPmNvZGVjX2xvY2spOw0KKw0KKyByZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGNvbnN0IGNoYXIgKiBjb25zdCB0YXMyNzcwX0FTSTFfc3JjW10gPSB7DQorICJJMkMgb2Zm c2V0IiwgIkxlZnQiLCAiUmlnaHQiLCAiTGVmdFJpZ2h0RGl2MiIsDQorfTsNCisNCitzdGF0aWMg U09DX0VOVU1fU0lOR0xFX0RFQ0woDQorIHRhczI3NzBfQVNJMV9zcmNfZW51bSwgVEFTMjc3MF9U RE1fQ0ZHX1JFRzIsDQorIDQsIHRhczI3NzBfQVNJMV9zcmMpOw0KKw0KK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0YXMyNzcwX2FzaTFfbXV4ID0NCisgU09DX0RBUE1fRU5V TSgiQVNJMSBTb3VyY2UiLCB0YXMyNzcwX0FTSTFfc3JjX2VudW0pOw0KKw0KK3N0YXRpYyBpbnQg dGFzMjc3MF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHRhczI3NzBfcHJpdiAqcF90YXMyNzcwLCBp bnQgc3RhdGUpDQorew0KKyBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHBf dGFzMjc3MC0+Y29tcG9uZW50Ow0KKw0KKyBzd2l0Y2ggKHN0YXRlKSB7DQorIGNhc2UgVEFTMjc3 MF9QT1dFUl9BQ1RJVkU6DQorIHNuZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRzKGNvbXBvbmVu dCwgVEFTMjc3MF9QV1JfQ1RSTCwNCisgVEFTMjc3MF9QV1JfQ1RSTF9NQVNLLA0KKyBUQVMyNzcw X1BXUl9DVFJMX0FDVElWRSk7DQorIHBfdGFzMjc3MC0+bW5fcG93ZXJfc3RhdGUgPSBUQVMyNzcw X1BPV0VSX0FDVElWRTsNCisgdGFzMjc3MF9lbmFibGVfaXJxKHBfdGFzMjc3MCwgdHJ1ZSk7DQor IGJyZWFrOw0KKw0KKyBjYXNlIFRBUzI3NzBfUE9XRVJfTVVURToNCisgc25kX3NvY19jb21wb25l bnRfdXBkYXRlX2JpdHMoY29tcG9uZW50LCBUQVMyNzcwX1BXUl9DVFJMLA0KKyBUQVMyNzcwX1BX Ul9DVFJMX01BU0ssDQorIFRBUzI3NzBfUFdSX0NUUkxfTVVURSk7DQorIHBfdGFzMjc3MC0+bW5f cG93ZXJfc3RhdGUgPSBUQVMyNzcwX1BPV0VSX01VVEU7DQorIGJyZWFrOw0KKw0KKyBjYXNlIFRB UzI3NzBfUE9XRVJfU0hVVERPV046DQorIHNuZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRzKGNv bXBvbmVudCwgVEFTMjc3MF9QV1JfQ1RSTCwNCisgVEFTMjc3MF9QV1JfQ1RSTF9NQVNLLA0KKyBU QVMyNzcwX1BXUl9DVFJMX1NIVVRET1dOKTsNCisgdGFzMjc3MF9lbmFibGVfaXJxKHBfdGFzMjc3 MCwgZmFsc2UpOw0KKyBwX3RhczI3NzAtPm1uX3Bvd2VyX3N0YXRlID0gVEFTMjc3MF9QT1dFUl9T SFVURE9XTjsNCisgYnJlYWs7DQorDQorIGRlZmF1bHQ6DQorIGRldl9lcnIocF90YXMyNzcwLT5k ZXYsDQorICJ3cm9uZyBwb3dlciBzdGF0ZSBzZXR0aW5nICVkXG4iLCBzdGF0ZSk7DQorIHJldHVy biAtRUlOVkFMOw0KKyB9DQorDQorIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHRhczI3 NzBfZGFjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LA0KKyAgICAgc3RydWN0 IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkNCit7DQorIHN0cnVjdCBzbmRfc29j X2NvbXBvbmVudCAqY29tcG9uZW50ID0NCisgc25kX3NvY19kYXBtX3RvX2NvbXBvbmVudCh3LT5k YXBtKTsNCisgc3RydWN0IHRhczI3NzBfcHJpdiAqcF90YXMyNzcwID0NCisgc25kX3NvY19jb21w b25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsNCisgaW50IHJldDsNCisNCisgbXV0ZXhfbG9j aygmcF90YXMyNzcwLT5jb2RlY19sb2NrKTsNCisNCisgc3dpdGNoIChldmVudCkgew0KKyBjYXNl IFNORF9TT0NfREFQTV9QT1NUX1BNVToNCisgcmV0ID0gdGFzMjc3MF9zZXRfcG93ZXJfc3RhdGUo cF90YXMyNzcwLA0KKyBUQVMyNzcwX1BPV0VSX01VVEUpOw0KKyBpZiAocmV0KQ0KKyBnb3RvIGVu ZDsNCisgYnJlYWs7DQorIGNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6DQorIHJldCA9IHRhczI3 NzBfc2V0X3Bvd2VyX3N0YXRlKHBfdGFzMjc3MCwNCisgVEFTMjc3MF9QT1dFUl9TSFVURE9XTik7 DQorIGlmIChyZXQpDQorIGdvdG8gZW5kOw0KKyBicmVhazsNCisgZGVmYXVsdDoNCisgZGV2X2Vy cihwX3RhczI3NzAtPmRldiwgIk5vdCBzdXBwb3J0ZWQgZXZldnRcbiIpOw0KKyByZXQgPSAtRUlO VkFMOw0KKyB9DQorDQorZW5kOg0KKyBtdXRleF91bmxvY2soJnBfdGFzMjc3MC0+Y29kZWNfbG9j ayk7DQorIHJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250 cm9sX25ldyBpc2Vuc2Vfc3dpdGNoID0NCisgU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUQVMy NzcwX1BXUl9DVFJMLCAzLCAxLCAxKTsNCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJv bF9uZXcgdnNlbnNlX3N3aXRjaCA9DQorIFNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVEFTMjc3 MF9QV1JfQ1RSTCwgMiwgMSwgMSk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2Rh cG1fd2lkZ2V0IHRhczI3NzBfZGFwbV93aWRnZXRzW10gPSB7DQorIFNORF9TT0NfREFQTV9BSUZf SU4oIkFTSTEiLCAiQVNJMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksDQorIFNO RF9TT0NfREFQTV9NVVgoIkFTSTEgU2VsIiwgU05EX1NPQ19OT1BNLCAwLCAwLA0KKyAmdGFzMjc3 MF9hc2kxX211eCksDQorIFNORF9TT0NfREFQTV9TV0lUQ0goIklTRU5TRSIsIFRBUzI3NzBfUFdS X0NUUkwsIDMsIDEsDQorICZpc2Vuc2Vfc3dpdGNoKSwNCisgU05EX1NPQ19EQVBNX1NXSVRDSCgi VlNFTlNFIiwgVEFTMjc3MF9QV1JfQ1RSTCwgMiwgMSwNCisgJnZzZW5zZV9zd2l0Y2gpLA0KKyBT TkRfU09DX0RBUE1fREFDX0UoIkRBQyIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCwgdGFzMjc3 MF9kYWNfZXZlbnQsDQorIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVf UE1EKSwNCisgU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUIiksDQorIFNORF9TT0NfREFQTV9TSUdH RU4oIlZNT04iKSwNCisgU05EX1NPQ19EQVBNX1NJR0dFTigiSU1PTiIpDQorfTsNCisNCitzdGF0 aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB0YXMyNzcwX2F1ZGlvX21hcFtdID0g ew0KKyB7IkFTSTEgU2VsIiwgIkkyQyBvZmZzZXQiLCAiQVNJMSJ9LA0KKyB7IkFTSTEgU2VsIiwg IkxlZnQiLCAiQVNJMSJ9LA0KKyB7IkFTSTEgU2VsIiwgIlJpZ2h0IiwgIkFTSTEifSwNCisgeyJB U0kxIFNlbCIsICJMZWZ0UmlnaHREaXYyIiwgIkFTSTEifSwNCisgeyJEQUMiLCBOVUxMLCAiQVNJ MSBTZWwifSwNCisgeyJPVVQiLCBOVUxMLCAiREFDIn0sDQorIHsiSVNFTlNFIiwgIlN3aXRjaCIs ICJJTU9OIn0sDQorIHsiVlNFTlNFIiwgIlN3aXRjaCIsICJWTU9OIn0sDQorfTsNCisNCisNCitz dGF0aWMgaW50IHRhczI3NzBfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUp DQorew0KKyBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IGRhaS0+Y29tcG9u ZW50Ow0KKyBzdHJ1Y3QgdGFzMjc3MF9wcml2ICpwX3RhczI3NzAgPQ0KKyBzbmRfc29jX2NvbXBv bmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOw0KKyBpbnQgcmV0Ow0KKw0KKw0KKyBtdXRleF9s b2NrKCZwX3RhczI3NzAtPmNvZGVjX2xvY2spOw0KKyBpZiAobXV0ZSkNCisgcmV0ID0gdGFzMjc3 MF9zZXRfcG93ZXJfc3RhdGUocF90YXMyNzcwLCBUQVMyNzcwX1BPV0VSX01VVEUpOw0KKyBlbHNl DQorIHJldCA9IHRhczI3NzBfc2V0X3Bvd2VyX3N0YXRlKHBfdGFzMjc3MCwgVEFTMjc3MF9QT1dF Ul9BQ1RJVkUpOw0KKw0KKyBtdXRleF91bmxvY2soJnBfdGFzMjc3MC0+Y29kZWNfbG9jayk7DQor IHJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGFzMjc3MF9zZXRfc2xvdChzdHJ1Y3Qg c25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCwgaW50IHNsb3Rfd2lkdGgpDQorew0KKyBpbnQg cmV0Ow0KKyBzdHJ1Y3QgdGFzMjc3MF9wcml2ICpwX3RhczI3NzAgPQ0KKyBzbmRfc29jX2NvbXBv bmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOw0KKw0KKyBzd2l0Y2ggKHNsb3Rfd2lkdGgpIHsN CisgY2FzZSAxNjoNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9u ZW50LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMiwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzJfUlhT X01BU0ssDQorIFRBUzI3NzBfVERNX0NGR19SRUcyX1JYU18xNkJJVFMpOw0KKyBicmVhazsNCisN CisgY2FzZSAyNDoNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9u ZW50LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMiwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzJfUlhT X01BU0ssDQorIFRBUzI3NzBfVERNX0NGR19SRUcyX1JYU18yNEJJVFMpOw0KKyBicmVhazsNCisN CisgY2FzZSAzMjoNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9u ZW50LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMiwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzJfUlhT X01BU0ssDQorIFRBUzI3NzBfVERNX0NGR19SRUcyX1JYU18zMkJJVFMpOw0KKyBicmVhazsNCisN CisgY2FzZSAwOg0KKyAvKiBEbyBub3QgY2hhbmdlIHNsb3Qgd2lkdGggKi8NCisgcmV0ID0gMDsN CisgYnJlYWs7DQorDQorIGRlZmF1bHQ6DQorIHJldCA9IC1FSU5WQUw7DQorIH0NCisNCisgaWYg KCFyZXQpDQorIHBfdGFzMjc3MC0+bW5fc2xvdF93aWR0aCA9IHNsb3Rfd2lkdGg7DQorDQorIHJl dHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGFzMjc3MF9zZXRfYml0d2lkdGgoc3RydWN0 IHRhczI3NzBfcHJpdiAqcF90YXMyNzcwLCBpbnQgYml0d2lkdGgpDQorew0KKyBpbnQgcmV0Ow0K KyBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHBfdGFzMjc3MC0+Y29tcG9u ZW50Ow0KKw0KKyBzd2l0Y2ggKGJpdHdpZHRoKSB7DQorIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9T MTZfTEU6DQorIHJldCA9IHNuZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRzKGNvbXBvbmVudCwN CisgVEFTMjc3MF9URE1fQ0ZHX1JFRzIsDQorIFRBUzI3NzBfVERNX0NGR19SRUcyX1JYV19NQVNL LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMl9SWFdfMTZCSVRTKTsNCisgLyogSWYgbWFjaGluZSBk cml2ZXIgZGlkIG5vdCBjYWxsIHNldCBzbG90IHdpZHRoICovDQorIGlmIChwX3RhczI3NzAtPm1u X3Nsb3Rfd2lkdGggPT0gMCkNCisgdGFzMjc3MF9zZXRfc2xvdChjb21wb25lbnQsIFRBUzI3NzBf U0xPVF8xNkJJVCk7DQorIHBfdGFzMjc3MC0+bW5fdl9tb25fc2xvdF9ubyA9IHBfdGFzMjc3MC0+ bW5faV9tb25fc2xvdF9ubyArIDI7DQorIGJyZWFrOw0KKyBjYXNlIFNORFJWX1BDTV9GT1JNQVRf UzI0X0xFOg0KKyByZXQgPSBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25lbnQs DQorIFRBUzI3NzBfVERNX0NGR19SRUcyLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMl9SWFdfTUFT SywNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzJfUlhXXzI0QklUUyk7DQorIGlmIChwX3RhczI3NzAt Pm1uX3Nsb3Rfd2lkdGggPT0gMCkNCisgdGFzMjc3MF9zZXRfc2xvdChjb21wb25lbnQsIFRBUzI3 NzBfU0xPVF8zMkJJVCk7DQorIHBfdGFzMjc3MC0+bW5fdl9tb25fc2xvdF9ubyA9IHBfdGFzMjc3 MC0+bW5faV9tb25fc2xvdF9ubyArIDQ7DQorIGJyZWFrOw0KKyBjYXNlIFNORFJWX1BDTV9GT1JN QVRfUzMyX0xFOg0KKyByZXQgPSBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25l bnQsDQorIFRBUzI3NzBfVERNX0NGR19SRUcyLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMl9SWFdf TUFTSywNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzJfUlhXXzMyQklUUyk7DQorIGlmIChwX3RhczI3 NzAtPm1uX3Nsb3Rfd2lkdGggPT0gMCkNCisgdGFzMjc3MF9zZXRfc2xvdChjb21wb25lbnQsIFRB UzI3NzBfU0xPVF8zMkJJVCk7DQorIHBfdGFzMjc3MC0+bW5fdl9tb25fc2xvdF9ubyA9IHBfdGFz Mjc3MC0+bW5faV9tb25fc2xvdF9ubyArIDQ7DQorIGJyZWFrOw0KKw0KKyBkZWZhdWx0Og0KKyBy ZXR1cm4gLUVJTlZBTDsNCisgfQ0KKw0KKyBwX3RhczI3NzAtPm1uX2NoX3NpemUgPSBiaXR3aWR0 aDsNCisNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9uZW50LA0K KyBUQVMyNzcwX1RETV9DRkdfUkVHNSwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzVfVlNOU19NQVNL IHwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzVfNTBfTUFTSywNCisgVEFTMjc3MF9URE1fQ0ZHX1JF RzVfVlNOU19FTkFCTEUgfA0KKyBwX3RhczI3NzAtPm1uX3ZfbW9uX3Nsb3Rfbm8pOw0KKyBpZiAo cmV0KQ0KKyBnb3RvIGVuZDsNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMo Y29tcG9uZW50LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHNiwNCisgVEFTMjc3MF9URE1fQ0ZHX1JF RzZfSVNOU19NQVNLIHwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzZfNTBfTUFTSywNCisgVEFTMjc3 MF9URE1fQ0ZHX1JFRzZfSVNOU19FTkFCTEUgfA0KKyBwX3RhczI3NzAtPm1uX2lfbW9uX3Nsb3Rf bm8pOw0KKw0KK2VuZDoNCisgcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB0YXMyNzcw X3NldF9zYW1wbGVyYXRlKHN0cnVjdCB0YXMyNzcwX3ByaXYgKnBfdGFzMjc3MCwNCisgaW50IHNh bXBsZXJhdGUpDQorew0KKyBpbnQgcmV0Ow0KKyBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNv bXBvbmVudCA9IHBfdGFzMjc3MC0+Y29tcG9uZW50Ow0KKw0KKyBzd2l0Y2ggKHNhbXBsZXJhdGUp IHsNCisgY2FzZSA0ODAwMDoNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMo Y29tcG9uZW50LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMCwNCisgVEFTMjc3MF9URE1fQ0ZHX1JF RzBfU01QX01BU0ssDQorIFRBUzI3NzBfVERNX0NGR19SRUcwX1NNUF80OEtIWik7DQorIGlmIChy ZXQpDQorIGdvdG8gZW5kOw0KKyByZXQgPSBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhj b21wb25lbnQsDQorIFRBUzI3NzBfVERNX0NGR19SRUcwLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVH MF8zMV9NQVNLLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF8zMV80NF8xXzQ4S0haKTsNCisgaWYg KHJldCkNCisgZ290byBlbmQ7DQorIGJyZWFrOw0KKyBjYXNlIDQ0MTAwOg0KKyByZXQgPSBzbmRf c29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25lbnQsDQorIFRBUzI3NzBfVERNX0NGR19S RUcwLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF9TTVBfTUFTSywNCisgVEFTMjc3MF9URE1fQ0ZH X1JFRzBfU01QXzQ0XzFLSFopOw0KKyBpZiAocmV0KQ0KKyBnb3RvIGVuZDsNCisgcmV0ID0gc25k X3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9uZW50LA0KKyBUQVMyNzcwX1RETV9DRkdf UkVHMCwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzBfMzFfTUFTSywNCisgVEFTMjc3MF9URE1fQ0ZH X1JFRzBfMzFfNDRfMV80OEtIWik7DQorIGlmIChyZXQpDQorIGdvdG8gZW5kOw0KKyBicmVhazsN CisgY2FzZSA5NjAwMDoNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29t cG9uZW50LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMCwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzBf U01QX01BU0ssDQorIFRBUzI3NzBfVERNX0NGR19SRUcwX1NNUF80OEtIWik7DQorIGlmIChyZXQp DQorIGdvdG8gZW5kOw0KKyByZXQgPSBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21w b25lbnQsDQorIFRBUzI3NzBfVERNX0NGR19SRUcwLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF8z MV9NQVNLLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF8zMV84OF8yXzk2S0haKTsNCisgYnJlYWs7 DQorIGNhc2UgODgyMDA6DQorIHJldCA9IHNuZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRzKGNv bXBvbmVudCwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzAsDQorIFRBUzI3NzBfVERNX0NGR19SRUcw X1NNUF9NQVNLLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF9TTVBfNDRfMUtIWik7DQorIGlmIChy ZXQpDQorIGdvdG8gZW5kOw0KKyByZXQgPSBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhj b21wb25lbnQsDQorIFRBUzI3NzBfVERNX0NGR19SRUcwLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVH MF8zMV9NQVNLLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF8zMV84OF8yXzk2S0haKTsNCisgYnJl YWs7DQorIGNhc2UgMTkyMDA6DQorIHJldCA9IHNuZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRz KGNvbXBvbmVudCwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzAsDQorIFRBUzI3NzBfVERNX0NGR19S RUcwX1NNUF9NQVNLLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF9TTVBfNDhLSFopOw0KKyBpZiAo cmV0KQ0KKyBnb3RvIGVuZDsNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMo Y29tcG9uZW50LA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMCwNCisgVEFTMjc3MF9URE1fQ0ZHX1JF RzBfMzFfTUFTSywNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzBfMzFfMTc2XzRfMTkyS0haKTsNCisg aWYgKHJldCkNCisgZ290byBlbmQ7DQorIGJyZWFrOw0KKyBjYXNlIDE3NjQwOg0KKyByZXQgPSBz bmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25lbnQsDQorIFRBUzI3NzBfVERNX0NG R19SRUcwLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMF9TTVBfTUFTSywNCisgVEFTMjc3MF9URE1f Q0ZHX1JFRzBfU01QXzQ0XzFLSFopOw0KKyBpZiAocmV0KQ0KKyBnb3RvIGVuZDsNCisgcmV0ID0g c25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9uZW50LA0KKyBUQVMyNzcwX1RETV9D RkdfUkVHMCwNCisgVEFTMjc3MF9URE1fQ0ZHX1JFRzBfMzFfTUFTSywNCisgVEFTMjc3MF9URE1f Q0ZHX1JFRzBfMzFfMTc2XzRfMTkyS0haKTsNCisgYnJlYWs7DQorIGRlZmF1bHQ6DQorIHJldCA9 IC1FSU5WQUw7DQorIH0NCisNCitlbmQ6DQorIGlmICghcmV0KQ0KKyBwX3RhczI3NzAtPm1uX3Nh bXBsaW5nX3JhdGUgPSBzYW1wbGVyYXRlOw0KKyByZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMg aW50IHRhczI3NzBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFt LA0KKyAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsDQorICAgICBzdHJ1Y3Qg c25kX3NvY19kYWkgKmRhaSkNCit7DQorIHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9u ZW50ID0gZGFpLT5jb21wb25lbnQ7DQorIHN0cnVjdCB0YXMyNzcwX3ByaXYgKnBfdGFzMjc3MCA9 DQorIHNuZF9zb2NfY29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7DQorIGludCByZXQ7 DQorDQorIG11dGV4X2xvY2soJnBfdGFzMjc3MC0+Y29kZWNfbG9jayk7DQorDQorIHJldCA9IHRh czI3NzBfc2V0X2JpdHdpZHRoKHBfdGFzMjc3MCwgcGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsNCisg aWYgKHJldCA8IDApDQorIGdvdG8gZW5kOw0KKw0KKw0KKyByZXQgPSB0YXMyNzcwX3NldF9zYW1w bGVyYXRlKHBfdGFzMjc3MCwgcGFyYW1zX3JhdGUocGFyYW1zKSk7DQorDQorZW5kOg0KKyBtdXRl eF91bmxvY2soJnBfdGFzMjc3MC0+Y29kZWNfbG9jayk7DQorIHJldHVybiByZXQ7DQorfQ0KKw0K K3N0YXRpYyBpbnQgdGFzMjc3MF9zZXRfZm10KHN0cnVjdCB0YXMyNzcwX3ByaXYgKnBfdGFzMjc3 MCwgdW5zaWduZWQgaW50IGZtdCkNCit7DQorIHU4IHRkbV9yeF9zdGFydF9zbG90ID0gMCwgYXNp X2NmZ18xID0gMDsNCisgaW50IHJldDsNCisgaW50IHZhbHVlID0gMDsNCisgc3RydWN0IHNuZF9z b2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBwX3RhczI3NzAtPmNvbXBvbmVudDsNCisNCisgc3dp dGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgew0KKyBjYXNlIFNORF9TT0Nf REFJRk1UX0NCU19DRlM6DQorIGJyZWFrOw0KKyBkZWZhdWx0Og0KKyBkZXZfZXJyKHBfdGFzMjc3 MC0+ZGV2LCAiQVNJIGZvcm1hdCBtYXN0ZXIgaXMgbm90IGZvdW5kXG4iKTsNCisgcmV0ID0gLUVJ TlZBTDsNCisgcmV0dXJuIHJldDsNCisgfQ0KKw0KKyBzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJ Rk1UX0lOVl9NQVNLKSB7DQorIGNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6DQorIGFzaV9jZmdf MSB8PSBUQVMyNzcwX1RETV9DRkdfUkVHMV9SWF9SU0lORzsNCisgYnJlYWs7DQorIGNhc2UgU05E X1NPQ19EQUlGTVRfSUJfTkY6DQorIGFzaV9jZmdfMSB8PSBUQVMyNzcwX1RETV9DRkdfUkVHMV9S WF9GQUxJTkc7DQorIGJyZWFrOw0KKyBkZWZhdWx0Og0KKyBkZXZfZXJyKHBfdGFzMjc3MC0+ZGV2 LCAiQVNJIGZvcm1hdCBJbnZlcnNlIGlzIG5vdCBmb3VuZFxuIik7DQorIHJldCA9IC1FSU5WQUw7 DQorIHJldHVybiByZXQ7DQorIH0NCisNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRl X2JpdHMoY29tcG9uZW50LCBUQVMyNzcwX1RETV9DRkdfUkVHMSwNCisgVEFTMjc3MF9URE1fQ0ZH X1JFRzFfUlhfTUFTSywNCisgYXNpX2NmZ18xKTsNCisgaWYgKHJldCkNCisgcmV0dXJuIHJldDsN CisNCisgc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgew0KKyBjYXNl IChTTkRfU09DX0RBSUZNVF9JMlMpOg0KKyB0ZG1fcnhfc3RhcnRfc2xvdCA9IDE7DQorIGJyZWFr Ow0KKyBjYXNlIChTTkRfU09DX0RBSUZNVF9EU1BfQSk6DQorIGNhc2UgKFNORF9TT0NfREFJRk1U X0RTUF9CKToNCisgdGRtX3J4X3N0YXJ0X3Nsb3QgPSAxOw0KKyBicmVhazsNCisgY2FzZSAoU05E X1NPQ19EQUlGTVRfTEVGVF9KKToNCisgdGRtX3J4X3N0YXJ0X3Nsb3QgPSAwOw0KKyBicmVhazsN CisgZGVmYXVsdDoNCisgZGV2X2VycihwX3RhczI3NzAtPmRldiwNCisgIkRBSSBGb3JtYXQgaXMg bm90IGZvdW5kLCBmbXQ9MHgleFxuIiwgZm10KTsNCisgcmV0ID0gLUVJTlZBTDsNCisgcmV0dXJu IHJldDsNCisgfQ0KKw0KKyByZXQgPSBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21w b25lbnQsIFRBUzI3NzBfVERNX0NGR19SRUcxLA0KKyBUQVMyNzcwX1RETV9DRkdfUkVHMV9NQVNL LA0KKyAodGRtX3J4X3N0YXJ0X3Nsb3QgPDwgVEFTMjc3MF9URE1fQ0ZHX1JFRzFfNTFfU0hJRlQp KTsNCisgaWYgKHJldCkNCisgcmV0dXJuIHJldDsNCisgcmV0ID0gc25kX3NvY19jb21wb25lbnRf dXBkYXRlX2JpdHMoY29tcG9uZW50LCBUQVMyNzcwX1RETV9DRkdfUkVHMywNCisgVEFTMjc3MF9U RE1fQ0ZHX1JFRzNfMzBfTUFTSywNCisgKHBfdGFzMjc3MC0+bW5fbGVmdF9zbG90IDw8DQorIFRB UzI3NzBfVERNX0NGR19SRUczXzMwX1NISUZUKSk7DQorIGlmIChyZXQpDQorIHJldHVybiByZXQ7 DQorIHJldCA9IHNuZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRzKGNvbXBvbmVudCwgVEFTMjc3 MF9URE1fQ0ZHX1JFRzMsDQorIFRBUzI3NzBfVERNX0NGR19SRUczX1JYU19NQVNLLA0KKyAocF90 YXMyNzcwLT5tbl9yaWdodF9zbG90IDw8DQorIFRBUzI3NzBfVERNX0NGR19SRUczX1JYU19TSElG VCkpOw0KKyBpZiAocmV0KQ0KKyByZXR1cm4gcmV0Ow0KKw0KKyB2YWx1ZSA9IHNuZF9zb2NfY29t cG9uZW50X3JlYWQzMihjb21wb25lbnQsIFRBUzI3NzBfVERNX0NGR19SRUczKTsNCisNCisgcF90 YXMyNzcwLT5tbl9hc2lfZm9ybWF0ID0gZm10Ow0KKw0KKyByZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGludCB0YXMyNzcwX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNp Z25lZCBpbnQgZm10KQ0KK3sNCisgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQg PSBkYWktPmNvbXBvbmVudDsNCisgc3RydWN0IHRhczI3NzBfcHJpdiAqcF90YXMyNzcwID0NCisg c25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsNCisgaW50IHJldDsNCisN CisgbXV0ZXhfbG9jaygmcF90YXMyNzcwLT5jb2RlY19sb2NrKTsNCisNCisgcmV0ID0gdGFzMjc3 MF9zZXRfZm10KHBfdGFzMjc3MCwgZm10KTsNCisNCisgbXV0ZXhfdW5sb2NrKCZwX3RhczI3NzAt PmNvZGVjX2xvY2spOw0KKyByZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHRhczI3NzBf c2V0X2RhaV90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwNCisgdW5zaWduZWQgaW50 IHR4X21hc2ssDQorIHVuc2lnbmVkIGludCByeF9tYXNrLA0KKyBpbnQgc2xvdHMsIGludCBzbG90 X3dpZHRoKQ0KK3sNCisgaW50IHJldDsNCisgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21w b25lbnQgPSBkYWktPmNvbXBvbmVudDsNCisgc3RydWN0IHRhczI3NzBfcHJpdiAqcF90YXMyNzcw ID0NCisgc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsNCisNCisgbXV0 ZXhfbG9jaygmcF90YXMyNzcwLT5jb2RlY19sb2NrKTsNCisgcmV0ID0gdGFzMjc3MF9zZXRfc2xv dChjb21wb25lbnQsIHNsb3Rfd2lkdGgpOw0KKyBtdXRleF91bmxvY2soJnBfdGFzMjc3MC0+Y29k ZWNfbG9jayk7DQorDQorIHJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3Qgc25kX3Nv Y19kYWlfb3BzIHRhczI3NzBfZGFpX29wcyA9IHsNCisgLmRpZ2l0YWxfbXV0ZSA9IHRhczI3NzBf bXV0ZSwNCisgLmh3X3BhcmFtcyAgPSB0YXMyNzcwX2h3X3BhcmFtcywNCisgLnNldF9mbXQgICAg PSB0YXMyNzcwX3NldF9kYWlfZm10LA0KKyAuc2V0X3RkbV9zbG90ID0gdGFzMjc3MF9zZXRfZGFp X3RkbV9zbG90LA0KK307DQorDQorI2RlZmluZSBUQVMyNzcwX0ZPUk1BVFMgKFNORFJWX1BDTV9G TVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcDQorIFNORFJWX1BDTV9G TVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpDQorDQorI2RlZmluZSBUQVMy NzcwX1JBVEVTIChTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwIHxc DQorICAgU05EUlZfUENNX1JBVEVfOTYwMDAgfFwNCisgICAgU05EUlZfUENNX1JBVEVfMTkyMDAw XA0KKyAgKQ0KKw0KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHRhczI3NzBfZGFp X2RyaXZlcltdID0gew0KKyB7DQorIC5uYW1lID0gInRhczI3NzAgQVNJMSIsDQorIC5pZCA9IDAs DQorIC5wbGF5YmFjayA9IHsNCisgLnN0cmVhbV9uYW1lICAgID0gIkFTSTEgUGxheWJhY2siLA0K KyAuY2hhbm5lbHNfbWluICAgPSAyLA0KKyAuY2hhbm5lbHNfbWF4ICAgPSAyLA0KKyAucmF0ZXMg ICAgICA9IFRBUzI3NzBfUkFURVMsDQorIC5mb3JtYXRzICAgID0gVEFTMjc3MF9GT1JNQVRTLA0K KyB9LA0KKyAuY2FwdHVyZSA9IHsNCisgLnN0cmVhbV9uYW1lICAgID0gIkFTSTEgQ2FwdHVyZSIs DQorIC5jaGFubmVsc19taW4gICA9IDAsDQorIC5jaGFubmVsc19tYXggICA9IDIsDQorIC5yYXRl cyAgICAgICAgICA9IFRBUzI3NzBfUkFURVMsDQorIC5mb3JtYXRzICAgID0gVEFTMjc3MF9GT1JN QVRTLA0KKyB9LA0KKyAub3BzID0gJnRhczI3NzBfZGFpX29wcywNCisgLnN5bW1ldHJpY19yYXRl cyA9IDEsDQorIH0sDQorfTsNCisNCitzdGF0aWMgaW50IHRhczI3NzBfY29kZWNfcHJvYmUoc3Ry dWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpDQorew0KKyBzdHJ1Y3QgdGFzMjc3MF9w cml2ICpwX3RhczI3NzAgPQ0KKyBzbmRfc29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25l bnQpOw0KKw0KKyBwX3RhczI3NzAtPmNvbXBvbmVudCA9IGNvbXBvbmVudDsNCisNCisgcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHRhczI3NzBfY29kZWNfcmVtb3ZlKHN0cnVjdCBzbmRf c29jX2NvbXBvbmVudCAqY29tcG9uZW50KQ0KK3sNCisgcG1fcnVudGltZV9wdXQoY29tcG9uZW50 LT5kZXYpOw0KK30NCisNCitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUodGFzMjc3MF9kaWdp dGFsX3RsdiwgMTEwMCwgNTAsIDApOw0KK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRSh0YXMy NzcwX3BsYXliYWNrX3ZvbHVtZSwgLTEyNzUwLCA1MCwgMCk7DQorDQorc3RhdGljIGNvbnN0IHN0 cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRhczI3NzBfc25kX2NvbnRyb2xzW10gPSB7DQorIFNPQ19T SU5HTEVfVExWKCJBbXAgT3V0cHV0IExldmVsIiwgVEFTMjc3MF9QTEFZX0NGR19SRUcwLA0KKyAw LCAweDE0LCAwLA0KKyB0YXMyNzcwX2RpZ2l0YWxfdGx2KSwNCisgU09DX1NJTkdMRV9UTFYoIlBs YXliYWNrIFZvbHVtZSIsIFRBUzI3NzBfUExBWV9DRkdfUkVHMiwNCisgMCwgVEFTMjc3MF9QTEFZ X0NGR19SRUcyX1ZNQVgsIDEsDQorIHRhczI3NzBfcGxheWJhY2tfdm9sdW1lKSwNCit9Ow0KKw0K K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIHNvY19jb21wb25l bnRfZHJpdmVyX3RhczI3NzAgPSB7DQorIC5wcm9iZSA9IHRhczI3NzBfY29kZWNfcHJvYmUsDQor IC5yZW1vdmUgPSB0YXMyNzcwX2NvZGVjX3JlbW92ZSwNCisgLnN1c3BlbmQgPSB0YXMyNzcwX2Nv ZGVjX3N1c3BlbmQsDQorIC5yZXN1bWUgPSB0YXMyNzcwX2NvZGVjX3Jlc3VtZSwNCisgLmNvbnRy b2xzID0gdGFzMjc3MF9zbmRfY29udHJvbHMsDQorIC5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpF KHRhczI3NzBfc25kX2NvbnRyb2xzKSwNCisgLmRhcG1fd2lkZ2V0cyA9IHRhczI3NzBfZGFwbV93 aWRnZXRzLA0KKyAubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUodGFzMjc3MF9kYXBtX3dp ZGdldHMpLA0KKyAuZGFwbV9yb3V0ZXMgPSB0YXMyNzcwX2F1ZGlvX21hcCwNCisgLm51bV9kYXBt X3JvdXRlcyA9IEFSUkFZX1NJWkUodGFzMjc3MF9hdWRpb19tYXApLA0KKyAuaWRsZV9iaWFzX29u ID0gMSwNCisgLmVuZGlhbm5lc3MgPSAxLA0KKyAubm9uX2xlZ2FjeV9kYWlfbmFtaW5nID0gMSwN Cit9Ow0KKw0KK3N0YXRpYyBpbnQgdGFzMjc3MF9yZWdpc3Rlcl9jb2RlYyhzdHJ1Y3QgdGFzMjc3 MF9wcml2ICpwX3RhczI3NzApDQorew0KKyByZXR1cm4gZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2Nv bXBvbmVudChwX3RhczI3NzAtPmRldiwNCisgJnNvY19jb21wb25lbnRfZHJpdmVyX3RhczI3NzAs DQorIHRhczI3NzBfZGFpX2RyaXZlciwgQVJSQVlfU0laRSh0YXMyNzcwX2RhaV9kcml2ZXIpKTsN Cit9DQorDQorc3RhdGljIHZvaWQgdGFzMjc3MF9sb2FkX2NvbmZpZyhzdHJ1Y3QgdGFzMjc3MF9w cml2ICpwX3RhczI3NzApDQorew0KKyBpbnQgcmV0Ow0KKw0KKyB0YXMyNzcwX2h3X3Jlc2V0KHBf dGFzMjc3MCk7DQorIHRhczI3NzBfcmVnbWFwX3dyaXRlKHBfdGFzMjc3MCwgVEFTMjc3MF9TV19S U1QsDQorIFRBUzI3NzBfUlNUKTsNCisNCisgcmV0ID0gdGFzMjc3MF9zZXRfc2xvdChwX3RhczI3 NzAtPmNvbXBvbmVudCwgcF90YXMyNzcwLT5tbl9zbG90X3dpZHRoKTsNCisgaWYgKHJldCkNCisg Z290byBlcnJvcl9vdXQ7DQorDQorIHJldCA9IHRhczI3NzBfc2V0X2ZtdChwX3RhczI3NzAsIHBf dGFzMjc3MC0+bW5fYXNpX2Zvcm1hdCk7DQorIGlmIChyZXQpDQorIGdvdG8gZXJyb3Jfb3V0Ow0K Kw0KKyByZXQgPSB0YXMyNzcwX3NldF9iaXR3aWR0aChwX3RhczI3NzAsIHBfdGFzMjc3MC0+bW5f Y2hfc2l6ZSk7DQorIGlmIChyZXQpDQorIGdvdG8gZXJyb3Jfb3V0Ow0KKw0KKyByZXQgPSB0YXMy NzcwX3NldF9zYW1wbGVyYXRlKHBfdGFzMjc3MCwgcF90YXMyNzcwLT5tbl9zYW1wbGluZ19yYXRl KTsNCisgaWYgKHJldCkNCisgZ290byBlcnJvcl9vdXQ7DQorDQorIHJldCA9IHRhczI3NzBfc2V0 X3Bvd2VyX3N0YXRlKHBfdGFzMjc3MCwgcF90YXMyNzcwLT5tbl9wb3dlcl9zdGF0ZSk7DQorIGlm IChyZXQpDQorIGdvdG8gZXJyb3Jfb3V0Ow0KKw0KK2Vycm9yX291dDoNCisgcmV0dXJuOw0KK30N CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19kZWZhdWx0IHRhczI3NzBfcmVnX2RlZmF1bHRz W10gPSB7DQorIHsgVEFTMjc3MF9QQUdFLCAweDAwIH0sDQorIHsgVEFTMjc3MF9TV19SU1QsIDB4 MDAgfSwNCisgeyBUQVMyNzcwX1BXUl9DVFJMLCAweDBlIH0sDQorIHsgVEFTMjc3MF9QTEFZX0NG R19SRUcwLCAweDEwIH0sDQorIHsgVEFTMjc3MF9QTEFZX0NGR19SRUcxLCAweDAxIH0sDQorIHsg VEFTMjc3MF9QTEFZX0NGR19SRUcyLCAweDAwIH0sDQorIHsgVEFTMjc3MF9NU0NfQ0ZHX1JFRzAs IDB4MDcgfSwNCisgeyBUQVMyNzcwX1RETV9DRkdfUkVHMSwgMHgwMiB9LA0KKyB7IFRBUzI3NzBf VERNX0NGR19SRUcyLCAweDBhIH0sDQorIHsgVEFTMjc3MF9URE1fQ0ZHX1JFRzMsIDB4MTAgfSwN CisgeyBUQVMyNzcwX0lOVF9NQVNLX1JFRzAsIDB4ZmMgfSwNCisgeyBUQVMyNzcwX0lOVF9NQVNL X1JFRzEsIDB4YjEgfSwNCisgeyBUQVMyNzcwX0lOVF9DRkcsIDB4MDUgfSwNCisgeyBUQVMyNzcw X01JU0NfSVJRLCAweDgxIH0sDQorIHsgVEFTMjc3MF9DTEtfQ0dGLCAweDBjIH0sDQorDQorfTsN CisNCitzdGF0aWMgYm9vbCB0YXMyNzcwX3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IHJlZykNCit7DQorIHN3aXRjaCAocmVnKSB7DQorIGNhc2UgVEFTMjc3MF9QQUdF OiAvKiByZWdtYXAgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhpcyAqLw0KKyBjYXNlIFRBUzI3 NzBfU1dfUlNUOiAvKiBhbHdheXMgY2xlYXJzIGFmdGVyIHdyaXRlICovDQorIGNhc2UgVEFTMjc3 MF9CT19QUlZfUkVHMDovKiBoYXMgYSBzZWxmIGNsZWFyaW5nIGJpdCAqLw0KKyBjYXNlIFRBUzI3 NzBfTFZFX0lOVF9SRUcwOg0KKyBjYXNlIFRBUzI3NzBfTFZFX0lOVF9SRUcxOg0KKyBjYXNlIFRB UzI3NzBfTEFUX0lOVF9SRUcwOi8qIFN0aWNreSBpbnRlcnJ1cHQgZmxhZ3MgKi8NCisgY2FzZSBU QVMyNzcwX0xBVF9JTlRfUkVHMTovKiBTdGlja3kgaW50ZXJydXB0IGZsYWdzICovDQorIGNhc2Ug VEFTMjc3MF9WQkFUX01TQjoNCisgY2FzZSBUQVMyNzcwX1ZCQVRfTFNCOg0KKyBjYXNlIFRBUzI3 NzBfVEVNUF9NU0I6DQorIGNhc2UgVEFTMjc3MF9URU1QX0xTQjoNCisgcmV0dXJuIHRydWU7DQor IH0NCisgcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbCB0YXMyNzcwX3dyaXRlYWJs ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpDQorew0KKyBzd2l0Y2ggKHJl Zykgew0KKyBjYXNlIFRBUzI3NzBfTFZFX0lOVF9SRUcwOg0KKyBjYXNlIFRBUzI3NzBfTFZFX0lO VF9SRUcxOg0KKyBjYXNlIFRBUzI3NzBfTEFUX0lOVF9SRUcwOg0KKyBjYXNlIFRBUzI3NzBfTEFU X0lOVF9SRUcxOg0KKyBjYXNlIFRBUzI3NzBfVkJBVF9NU0I6DQorIGNhc2UgVEFTMjc3MF9WQkFU X0xTQjoNCisgY2FzZSBUQVMyNzcwX1RFTVBfTVNCOg0KKyBjYXNlIFRBUzI3NzBfVEVNUF9MU0I6 DQorIGNhc2UgVEFTMjc3MF9URE1fQ0xLX0RFVEM6DQorIGNhc2UgVEFTMjc3MF9SRVZfQU5EX0dQ SUQ6DQorIHJldHVybiBmYWxzZTsNCisgfQ0KKyByZXR1cm4gdHJ1ZTsNCit9DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2VfY2ZnIHRhczI3NzBfcmVnbWFwX3Jhbmdlc1tdID0g ew0KKyB7DQorIC5yYW5nZV9taW4gPSAwLA0KKyAucmFuZ2VfbWF4ID0gMSAqIDEyOCwNCisgLnNl bGVjdG9yX3JlZyA9IFRBUzI3NzBfUEFHRSwNCisgLnNlbGVjdG9yX21hc2sgPSAweGZmLA0KKyAu c2VsZWN0b3Jfc2hpZnQgPSAwLA0KKyAud2luZG93X3N0YXJ0ID0gMCwNCisgLndpbmRvd19sZW4g PSAxMjgsDQorIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcg dGFzMjc3MF9pMmNfcmVnbWFwID0gew0KKyAucmVnX2JpdHMgPSA4LA0KKyAudmFsX2JpdHMgPSA4 LA0KKyAud3JpdGVhYmxlX3JlZyA9IHRhczI3NzBfd3JpdGVhYmxlLA0KKyAudm9sYXRpbGVfcmVn ID0gdGFzMjc3MF92b2xhdGlsZSwNCisgLnJlZ19kZWZhdWx0cyA9IHRhczI3NzBfcmVnX2RlZmF1 bHRzLA0KKyAubnVtX3JlZ19kZWZhdWx0cyA9IEFSUkFZX1NJWkUodGFzMjc3MF9yZWdfZGVmYXVs dHMpLA0KKyAuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX1JCVFJFRSwNCisgLnJhbmdlcyA9IHRhczI3 NzBfcmVnbWFwX3JhbmdlcywNCisgLm51bV9yYW5nZXMgPSBBUlJBWV9TSVpFKHRhczI3NzBfcmVn bWFwX3JhbmdlcyksDQorIC5tYXhfcmVnaXN0ZXIgPSAxICogMTI4LA0KK307DQorDQorc3RhdGlj IGlycXJldHVybl90IHRhczI3NzBfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0K K3sNCisgc3RydWN0IHRhczI3NzBfcHJpdiAqcF90YXMyNzcwID0gKHN0cnVjdCB0YXMyNzcwX3By aXYgKilkZXZfaWQ7DQorDQorIHVuc2lnbmVkIGludCBuRGV2SW50MVN0YXR1cyA9IDAsIG5EZXZJ bnQyU3RhdHVzID0gMDsNCisgaW50IG5fY291bnRlciA9IDI7DQorIGludCBuX3Jlc3VsdDsNCisN CisgbXV0ZXhfbG9jaygmcF90YXMyNzcwLT5jb2RlY19sb2NrKTsNCisNCisgdGFzMjc3MF9lbmFi bGVfaXJxKHBfdGFzMjc3MCwgZmFsc2UpOw0KKw0KKyBpZiAocF90YXMyNzcwLT5tYl9ydW50aW1l X3N1c3BlbmQpDQorIGdvdG8gZW5kOw0KKw0KKyBpZiAocF90YXMyNzcwLT5tbl9wb3dlcl9zdGF0 ZSA9PSBUQVMyNzcwX1BPV0VSX1NIVVRET1dOKQ0KKyBnb3RvIGVuZDsNCisNCisgbl9yZXN1bHQg PSB0YXMyNzcwX3JlZ21hcF93cml0ZShwX3RhczI3NzAsIFRBUzI3NzBfSU5UX01BU0tfUkVHMCwN CisgVEFTMjc3MF9JTlRfTUFTS19SRUcwX0RJU0FCTEUpOw0KKyBpZiAobl9yZXN1bHQpDQorIGdv dG8gcmVsb2FkOw0KKyBuX3Jlc3VsdCA9IHRhczI3NzBfcmVnbWFwX3dyaXRlKHBfdGFzMjc3MCwg VEFTMjc3MF9JTlRfTUFTS19SRUcxLA0KKyBUQVMyNzcwX0lOVF9NQVNLX1JFRzFfRElTQUJMRSk7 DQorIGlmIChuX3Jlc3VsdCkNCisgZ290byByZWxvYWQ7DQorDQorIG5fcmVzdWx0ID0gdGFzMjc3 MF9yZWdtYXBfcmVhZChwX3RhczI3NzAsDQorIFRBUzI3NzBfTEFUX0lOVF9SRUcwLCAmbkRldklu dDFTdGF0dXMpOw0KKyBpZiAobl9yZXN1bHQgPj0gMCkNCisgbl9yZXN1bHQgPSB0YXMyNzcwX3Jl Z21hcF9yZWFkKHBfdGFzMjc3MCwNCisgVEFTMjc3MF9MQVRfSU5UX1JFRzEsICZuRGV2SW50MlN0 YXR1cyk7DQorIGVsc2UNCisgZ290byByZWxvYWQ7DQorDQorIGlmICgoKG5EZXZJbnQxU3RhdHVz ICYgMHgzKSAhPSAwKSB8fCAoKG5EZXZJbnQyU3RhdHVzICYgMHgwZikgIT0gMCkpIHsNCisgLyog aW4gY2FzZSBvZiBJTlRfT0MsIElOVF9PVCwgSU5UX09WTFQsIElOVF9VVkxULCBJTlRfQk8gKi8N CisNCisgaWYgKG5EZXZJbnQxU3RhdHVzICYNCisgVEFTMjc3MF9MQVRfSU5UX1JFRzBfT0NFX0ZM Rykgew0KKyBwX3RhczI3NzAtPm1uX2Vycl9jb2RlIHw9IEVSUk9SX09WRVJfQ1VSUkVOVDsNCisg ZGV2X2VycihwX3RhczI3NzAtPmRldiwgIlNQSyBvdmVyIGN1cnJlbnQhXG4iKTsNCisgfSBlbHNl IHsNCisgcF90YXMyNzcwLT5tbl9lcnJfY29kZSAmPSB+RVJST1JfT1ZFUl9DVVJSRU5UOw0KKyB9 DQorDQorIGlmIChuRGV2SW50MVN0YXR1cyAmDQorIFRBUzI3NzBfTEFUX0lOVF9SRUcwX09URV9G TEcpIHsNCisgcF90YXMyNzcwLT5tbl9lcnJfY29kZSB8PSBFUlJPUl9ESUVfT1ZFUlRFTVA7DQor IGRldl9lcnIocF90YXMyNzcwLT5kZXYsICJkaWUgb3ZlciB0ZW1wZXJhdHVyZSFcbiIpOw0KKyB9 IGVsc2Ugew0KKyBwX3RhczI3NzAtPm1uX2Vycl9jb2RlICY9IH5FUlJPUl9ESUVfT1ZFUlRFTVA7 DQorIH0NCisNCisgaWYgKG5EZXZJbnQyU3RhdHVzICYNCisgVEFTMjc3MF9MQVRfSU5UX1JFRzFf VkJBX1RPVikgew0KKyBwX3RhczI3NzAtPm1uX2Vycl9jb2RlIHw9IEVSUk9SX09WRVJfVk9MVEFH RTsNCisgZGV2X2VycihwX3RhczI3NzAtPmRldiwgIlNQSyBvdmVyIHZvbHRhZ2UhXG4iKTsNCisg fSBlbHNlIHsNCisgcF90YXMyNzcwLT5tbl9lcnJfY29kZSAmPSB+RVJST1JfT1ZFUl9WT0xUQUdF Ow0KKyB9DQorDQorIGlmIChuRGV2SW50MlN0YXR1cyAmDQorIFRBUzI3NzBfTEFUX0lOVF9SRUcx X1ZCQV9UVVYpIHsNCisgcF90YXMyNzcwLT5tbl9lcnJfY29kZSB8PSBFUlJPUl9VTkRFUl9WT0xU QUdFOw0KKyBkZXZfZXJyKHBfdGFzMjc3MC0+ZGV2LCAiU1BLIHVuZGVyIHZvbHRhZ2UhXG4iKTsN CisgfSBlbHNlIHsNCisgcF90YXMyNzcwLT5tbl9lcnJfY29kZSAmPSB+RVJST1JfVU5ERVJfVk9M VEFHRTsNCisgfQ0KKw0KKyBpZiAobkRldkludDJTdGF0dXMgJg0KKyBUQVMyNzcwX0xBVF9JTlRf UkVHMV9CT1VUX0ZMRykgew0KKyBwX3RhczI3NzAtPm1uX2Vycl9jb2RlIHw9IEVSUk9SX0JST1dO T1VUOw0KKyBkZXZfZXJyKHBfdGFzMjc3MC0+ZGV2LCAiYnJvd25vdXQhXG4iKTsNCisgfSBlbHNl IHsNCisgcF90YXMyNzcwLT5tbl9lcnJfY29kZSAmPSB+RVJST1JfQlJPV05PVVQ7DQorIH0NCisN CisgZ290byByZWxvYWQ7DQorIH0gZWxzZSB7DQorIG5fY291bnRlciA9IDI7DQorDQorIHdoaWxl IChuX2NvdW50ZXIgPiAwKSB7DQorIG5fcmVzdWx0ID0gdGFzMjc3MF9yZWdtYXBfcmVhZChwX3Rh czI3NzAsDQorIFRBUzI3NzBfUFdSX0NUUkwsICZuRGV2SW50MVN0YXR1cyk7DQorIGlmIChuX3Jl c3VsdCkNCisgZ290byByZWxvYWQ7DQorDQorIGlmICgobkRldkludDFTdGF0dXMgJg0KKyBUQVMy NzcwX1BXUl9DVFJMX01BU0spDQorICE9IFRBUzI3NzBfUFdSX0NUUkxfU0hVVERPV04pDQorIGJy ZWFrOw0KKw0KKyBuX2NvdW50ZXItLTsNCisgaWYgKG5fY291bnRlciA+IDApDQorIG1zbGVlcCgy MCk7DQorIH0NCisNCisgaWYgKChuRGV2SW50MVN0YXR1cyAmDQorIFRBUzI3NzBfUFdSX0NUUkxf TUFTSykNCisgPT0gVEFTMjc3MF9QV1JfQ1RSTF9TSFVURE9XTikgew0KKyBkZXZfZXJyKHBfdGFz Mjc3MC0+ZGV2LCAiJXMsIENyaXRpY2FsIEVSUk9SIFJFR1sweCV4XSA9IDB4JXhcbiIsDQorIF9f ZnVuY19fLA0KKyBUQVMyNzcwX1BXUl9DVFJMLA0KKyBuRGV2SW50MVN0YXR1cyk7DQorIHBfdGFz Mjc3MC0+bW5fZXJyX2NvZGUgfD0gRVJST1JfQ0xBU1NEX1BXUjsNCisgZ290byByZWxvYWQ7DQor IH0NCisgcF90YXMyNzcwLT5tbl9lcnJfY29kZSAmPSB+RVJST1JfQ0xBU1NEX1BXUjsNCisgfQ0K Kw0KKyBuX3Jlc3VsdCA9IHRhczI3NzBfcmVnbWFwX3dyaXRlKHBfdGFzMjc3MCwNCisgVEFTMjc3 MF9JTlRfTUFTS19SRUcwLCAweGZjKTsNCisgaWYgKG5fcmVzdWx0KQ0KKyBnb3RvIHJlbG9hZDsN CisNCisgbl9yZXN1bHQgPSB0YXMyNzcwX3JlZ21hcF93cml0ZShwX3RhczI3NzAsDQorIFRBUzI3 NzBfSU5UX01BU0tfUkVHMSwgMHhiMSk7DQorIGlmIChuX3Jlc3VsdCkNCisgZ290byByZWxvYWQ7 DQorDQorIGdvdG8gZW5kOw0KKw0KK3JlbG9hZDoNCisgLyogaGFyZHdhcmUgcmVzZXQgYW5kIHJl bG9hZCAqLw0KKyB0YXMyNzcwX2xvYWRfY29uZmlnKHBfdGFzMjc3MCk7DQorDQorZW5kOg0KKyBt dXRleF91bmxvY2soJnBfdGFzMjc3MC0+Y29kZWNfbG9jayk7DQorIHRhczI3NzBfZW5hYmxlX2ly cShwX3RhczI3NzAsIHRydWUpOw0KKw0KKyByZXR1cm4gSVJRX0hBTkRMRUQ7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgdGFzMjc3MF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0YXMy NzcwX3ByaXYgKnBfdGFzMjc3MCkNCit7DQorIGludCByYyA9IDA7DQorDQorIHJjID0gZndub2Rl X3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+Zndub2RlLCAidGksYXNpLWZvcm1hdCIsDQorICZwX3Rh czI3NzAtPm1uX2FzaV9mb3JtYXQpOw0KKyBpZiAocmMpIHsNCisgZGV2X2VycihwX3RhczI3NzAt PmRldiwgIkxvb2tpbmcgdXAgJXMgcHJvcGVydHkgZmFpbGVkICVkXG4iLA0KKyAidGksYXNpLWZv cm1hdCIsIHJjKTsNCisgZ290byBlbmQ7DQorIH0NCisNCisgcmMgPSBmd25vZGVfcHJvcGVydHlf cmVhZF91MzIoZGV2LT5md25vZGUsICJ0aSxsZWZ0LXNsb3QiLA0KKyAmcF90YXMyNzcwLT5tbl9s ZWZ0X3Nsb3QpOw0KKyBpZiAocmMpIHsNCisgZGV2X2VycihwX3RhczI3NzAtPmRldiwgIkxvb2tp bmcgdXAgJXMgcHJvcGVydHkgZmFpbGVkICVkXG4iLA0KKyAidGksbGVmdC1zbG90IiwgcmMpOw0K KyBnb3RvIGVuZDsNCisgfQ0KKw0KKyByYyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYt PmZ3bm9kZSwgInRpLHJpZ2h0LXNsb3QiLA0KKyAmcF90YXMyNzcwLT5tbl9yaWdodF9zbG90KTsN CisgaWYgKHJjKSB7DQorIGRldl9lcnIocF90YXMyNzcwLT5kZXYsICJMb29raW5nIHVwICVzIHBy b3BlcnR5IGZhaWxlZCAlZFxuIiwNCisgInRpLHJpZ2h0LXNsb3QiLCByYyk7DQorIGdvdG8gZW5k Ow0KKyB9DQorDQorIHJjID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+Zndub2RlLCAi dGksaW1vbi1zbG90LW5vIiwNCisgJnBfdGFzMjc3MC0+bW5faV9tb25fc2xvdF9ubyk7DQorIGlm IChyYykgew0KKyBkZXZfZXJyKHBfdGFzMjc3MC0+ZGV2LCAiTG9va2luZyB1cCAlcyBwcm9wZXJ0 eSBmYWlsZWQgJWRcbiIsDQorICJ0aSxpbW9uLXNsb3Qtbm8iLCByYyk7DQorIGdvdG8gZW5kOw0K KyB9DQorDQorIHJjID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+Zndub2RlLCAidGks dm1vbi1zbG90LW5vIiwNCisgJnBfdGFzMjc3MC0+bW5fdl9tb25fc2xvdF9ubyk7DQorIGlmIChy Yykgew0KKyBkZXZfZXJyKHBfdGFzMjc3MC0+ZGV2LCAiTG9va2luZyB1cCAlcyBwcm9wZXJ0eSBm YWlsZWQgJWRcbiIsDQorICJ0aSx2bW9uLXNsb3Qtbm8iLCByYyk7DQorIGdvdG8gZW5kOw0KKyB9 DQorDQorZW5kOg0KKyByZXR1cm4gcmM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGFzMjc3MF9pMmNf cHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwNCisgY29uc3Qgc3RydWN0IGkyY19kZXZp Y2VfaWQgKmlkKQ0KK3sNCisgc3RydWN0IHRhczI3NzBfcHJpdiAqcF90YXMyNzcwOw0KKyBpbnQg bl9yZXN1bHQ7DQorDQorIHBfdGFzMjc3MCA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsDQor IHNpemVvZihzdHJ1Y3QgdGFzMjc3MF9wcml2KSwgR0ZQX0tFUk5FTCk7DQorIGlmIChwX3RhczI3 NzAgPT0gTlVMTCkNCisgcmV0dXJuIC1FTk9NRU07DQorIHBfdGFzMjc3MC0+ZGV2ID0gJmNsaWVu dC0+ZGV2Ow0KKyBwX3RhczI3NzAtPm1uX2lycSA9IGNsaWVudC0+aXJxOw0KKw0KKyBpMmNfc2V0 X2NsaWVudGRhdGEoY2xpZW50LCBwX3RhczI3NzApOw0KKyBkZXZfc2V0X2RydmRhdGEoJmNsaWVu dC0+ZGV2LCBwX3RhczI3NzApOw0KKyBwX3RhczI3NzAtPm1uX3Bvd2VyX3N0YXRlID0gVEFTMjc3 MF9QT1dFUl9TSFVURE9XTjsNCisNCisgcF90YXMyNzcwLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9p bml0X2kyYyhjbGllbnQsICZ0YXMyNzcwX2kyY19yZWdtYXApOw0KKyBpZiAoSVNfRVJSKHBfdGFz Mjc3MC0+cmVnbWFwKSkgew0KKyBuX3Jlc3VsdCA9IFBUUl9FUlIocF90YXMyNzcwLT5yZWdtYXAp Ow0KKyBkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBt YXA6ICVkXG4iLA0KKyBuX3Jlc3VsdCk7DQorIGdvdG8gZW5kOw0KKyB9DQorDQorIGlmIChjbGll bnQtPmRldi5vZl9ub2RlKSB7DQorIG5fcmVzdWx0ID0gdGFzMjc3MF9wYXJzZV9kdCgmY2xpZW50 LT5kZXYsIHBfdGFzMjc3MCk7DQorIGlmIChuX3Jlc3VsdCkgew0KKyBkZXZfZXJyKHBfdGFzMjc3 MC0+ZGV2LCAiJXM6IEZhaWxlZCB0byBwYXJzZSBkZXZpY2V0cmVlXG4iLA0KKyBfX2Z1bmNfXyk7 DQorIGdvdG8gZW5kOw0KKyB9DQorIH0NCisNCisgcF90YXMyNzcwLT5tbl9yZXNldF9ncGlvID0g ZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocF90YXMyNzcwLT5kZXYsDQorICAicmVzZXQtZ3BpbyIs DQorICAgICAgR1BJT0RfT1VUX0hJR0gpOw0KKyBpZiAoSVNfRVJSKHBfdGFzMjc3MC0+bW5fcmVz ZXRfZ3BpbykpIHsNCisgaWYgKFBUUl9FUlIocF90YXMyNzcwLT5tbl9yZXNldF9ncGlvKSA9PSAt RVBST0JFX0RFRkVSKQ0KKyByZXR1cm4gLUVQUk9CRV9ERUZFUjsNCisgcF90YXMyNzcwLT5tbl9y ZXNldF9ncGlvID0gTlVMTDsNCisgfQ0KKw0KKyBpZiAocF90YXMyNzcwLT5tbl9pcnEgPiAwKSB7 DQorIG5fcmVzdWx0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShwX3RhczI3NzAtPmRldiwN CisgICBwX3RhczI3NzAtPm1uX2lycSwNCisgICBOVUxMLCB0YXMyNzcwX2lycV9oYW5kbGVyLA0K KyAgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULCBjbGllbnQtPm5hbWUsDQor ICAgcF90YXMyNzcwKTsNCisgaWYgKG5fcmVzdWx0KSB7DQorIGRldl9lcnIocF90YXMyNzcwLT5k ZXYsICJVbmFibGUgdG8gcmVxdWVzdCBJUlFcbiIpOw0KKyByZXR1cm4gbl9yZXN1bHQ7DQorIH0N CisgfQ0KKw0KKyBwX3RhczI3NzAtPm1uX2NoX3NpemUgPSAwOw0KKyBwX3RhczI3NzAtPm1uX3Ns b3Rfd2lkdGggPSAwOw0KKw0KKyB0YXMyNzcwX2h3X3Jlc2V0KHBfdGFzMjc3MCk7DQorIHRhczI3 NzBfcmVnbWFwX3dyaXRlKHBfdGFzMjc3MCwgVEFTMjc3MF9TV19SU1QsDQorIFRBUzI3NzBfUlNU KTsNCisNCisgbXV0ZXhfaW5pdCgmcF90YXMyNzcwLT5kZXZfbG9jayk7DQorDQorIG11dGV4X2lu aXQoJnBfdGFzMjc3MC0+Y29kZWNfbG9jayk7DQorIG5fcmVzdWx0ID0gdGFzMjc3MF9yZWdpc3Rl cl9jb2RlYyhwX3RhczI3NzApOw0KKyBpZiAobl9yZXN1bHQpDQorIGRldl9lcnIocF90YXMyNzcw LT5kZXYsICJSZWdpc3RlciBjb2RlYyBmYWlsZWQuXG4iKTsNCisNCitlbmQ6DQorIHJldHVybiBu X3Jlc3VsdDsNCit9DQorDQorc3RhdGljIGludCB0YXMyNzcwX2kyY19yZW1vdmUoc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCkNCit7DQorIHN0cnVjdCB0YXMyNzcwX3ByaXYgKnBfdGFzMjc3MCA9 IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKw0KKyBtdXRleF9kZXN0cm95KCZwX3RhczI3 NzAtPmRldl9sb2NrKTsNCisNCisgcmV0dXJuIDA7DQorfQ0KKw0KKw0KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaTJjX2RldmljZV9pZCB0YXMyNzcwX2kyY19pZFtdID0gew0KKyB7ICJ0YXMyNzcwIiwg MH0sDQorIHsgfQ0KK307DQorTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRhczI3NzBfaTJjX2lk KTsNCisNCisjaWYgZGVmaW5lZChDT05GSUdfT0YpDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgdGFzMjc3MF9vZl9tYXRjaFtdID0gew0KKyB7IC5jb21wYXRpYmxlID0gInRpLHRh czI3NzAiIH0sDQorIHt9LA0KK307DQorTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGFzMjc3MF9v Zl9tYXRjaCk7DQorI2VuZGlmDQorDQorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRhczI3NzBf aTJjX2RyaXZlciA9IHsNCisgLmRyaXZlciA9IHsNCisgLm5hbWUgICA9ICJ0YXMyNzcwIiwNCisg Lm93bmVyICA9IFRISVNfTU9EVUxFLA0KKyNpZiBkZWZpbmVkKENPTkZJR19PRikNCisgLm9mX21h dGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHRhczI3NzBfb2ZfbWF0Y2gpLA0KKyNlbmRpZg0KKyB9 LA0KKyAucHJvYmUgICAgICA9IHRhczI3NzBfaTJjX3Byb2JlLA0KKyAucmVtb3ZlICAgICA9IHRh czI3NzBfaTJjX3JlbW92ZSwNCisgLmlkX3RhYmxlICAgPSB0YXMyNzcwX2kyY19pZCwNCit9Ow0K Kw0KK21vZHVsZV9pMmNfZHJpdmVyKHRhczI3NzBfaTJjX2RyaXZlcik7DQorDQorTU9EVUxFX0FV VEhPUigiU2hpIEZ1IDxzaGlmdTA3MDRAdGh1bmRlcnNvZnQuY29tPiIpOw0KK01PRFVMRV9ERVND UklQVElPTigiVEFTMjc3MCBJMkMgU21hcnQgQW1wbGlmaWVyIGRyaXZlciIpOw0KK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsNCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RhczI3NzAu aCBiL3NvdW5kL3NvYy9jb2RlY3MvdGFzMjc3MC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMC4uZjA4ZTIwOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc291bmQvc29jL2NvZGVj cy90YXMyNzcwLmgNCkBAIC0wLDAgKzEsMTczIEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCisgKg0KKyAqIEFMU0EgU29DIFRBUzI3NzAgY29kZWMgZHJpdmVyDQorICoN CisgKiAgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3Jh dGVkIC0gaHR0cDovL3d3dy50aS5jb20vDQorICovDQorI2lmbmRlZiBfX1RBUzI3NzBfXw0KKyNk ZWZpbmUgX19UQVMyNzcwX18NCisNCisvKiBCb29rIENvbnRyb2wgUmVnaXN0ZXIgKGF2YWlsYWJs ZSBpbiBwYWdlMCBvZiBlYWNoIGJvb2spICovDQorI2RlZmluZSBUQVMyNzcwX0JPT0tDVExfUEFH RSAgICAgICAgICAgIDANCisjZGVmaW5lIFRBUzI3NzBfQk9PS0NUTF9SRUcgICAgICAgICAxMjcN CisjZGVmaW5lIFRBUzI3NzBfUkVHKHBhZ2UsIHJlZykgICAgICAgICgocGFnZSAqIDEyOCkgKyBy ZWcpDQorICAgIC8qIFBhZ2UgKi8NCisjZGVmaW5lIFRBUzI3NzBfUEFHRSAgVEFTMjc3MF9SRUco MFgwLCAweDAwKQ0KKyNkZWZpbmUgVEFTMjc3MF9QQUdFX1BBR0VfTUFTSyAgMjU1DQorICAgIC8q IFNvZnR3YXJlIFJlc2V0ICovDQorI2RlZmluZSBUQVMyNzcwX1NXX1JTVCAgVEFTMjc3MF9SRUco MFgwLCAweDAxKQ0KKyNkZWZpbmUgVEFTMjc3MF9SU1QgIEJJVCgwKQ0KKyAgICAvKiBQb3dlciBD b250cm9sICovDQorI2RlZmluZSBUQVMyNzcwX1BXUl9DVFJMICBUQVMyNzcwX1JFRygwWDAsIDB4 MDIpDQorI2RlZmluZSBUQVMyNzcwX1BXUl9DVFJMX01BU0sgIDB4Mw0KKyNkZWZpbmUgVEFTMjc3 MF9QV1JfQ1RSTF9BQ1RJVkUgIDB4MA0KKyNkZWZpbmUgVEFTMjc3MF9QV1JfQ1RSTF9NVVRFICBC SVQoMCkNCisjZGVmaW5lIFRBUzI3NzBfUFdSX0NUUkxfU0hVVERPV04gIDB4Mg0KKyAgICAvKiBQ bGF5YmFjayBDb25maWd1cmF0aW9uIFJlZzAgKi8NCisjZGVmaW5lIFRBUzI3NzBfUExBWV9DRkdf UkVHMCAgVEFTMjc3MF9SRUcoMFgwLCAweDAzKQ0KKyAgICAvKiBQbGF5YmFjayBDb25maWd1cmF0 aW9uIFJlZzEgKi8NCisjZGVmaW5lIFRBUzI3NzBfUExBWV9DRkdfUkVHMSAgVEFTMjc3MF9SRUco MFgwLCAweDA0KQ0KKyAgICAvKiBQbGF5YmFjayBDb25maWd1cmF0aW9uIFJlZzIgKi8NCisjZGVm aW5lIFRBUzI3NzBfUExBWV9DRkdfUkVHMiAgVEFTMjc3MF9SRUcoMFgwLCAweDA1KQ0KKyNkZWZp bmUgVEFTMjc3MF9QTEFZX0NGR19SRUcyX1ZNQVggMHhjOQ0KKyAgICAvKiBNaXNjIENvbmZpZ3Vy YXRpb24gUmVnMCAqLw0KKyNkZWZpbmUgVEFTMjc3MF9NU0NfQ0ZHX1JFRzAgIFRBUzI3NzBfUkVH KDBYMCwgMHgwNykNCisgICAgLyogVERNIENvbmZpZ3VyYXRpb24gUmVnMCAqLw0KKyNkZWZpbmUg VEFTMjc3MF9URE1fQ0ZHX1JFRzAgIFRBUzI3NzBfUkVHKDBYMCwgMHgwQSkNCisjZGVmaW5lIFRB UzI3NzBfVERNX0NGR19SRUcwX1NNUF9NQVNLICBCSVQoNSkNCisjZGVmaW5lIFRBUzI3NzBfVERN X0NGR19SRUcwX1NNUF80OEtIWiAgMHgwDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHMF9T TVBfNDRfMUtIWiAgQklUKDUpDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHMF8zMV9NQVNL ICAweGUNCisjZGVmaW5lIFRBUzI3NzBfVERNX0NGR19SRUcwXzMxXzQ0XzFfNDhLSFogIDB4Ng0K KyNkZWZpbmUgVEFTMjc3MF9URE1fQ0ZHX1JFRzBfMzFfODhfMl85NktIWiAgMHg4DQorI2RlZmlu ZSBUQVMyNzcwX1RETV9DRkdfUkVHMF8zMV8xNzZfNF8xOTJLSFogIDB4YQ0KKyAgICAvKiBURE0g Q29uZmlndXJhdGlvbiBSZWcxICovDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHMSAgVEFT Mjc3MF9SRUcoMFgwLCAweDBCKQ0KKyNkZWZpbmUgVEFTMjc3MF9URE1fQ0ZHX1JFRzFfTUFTSyAw eDNlDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHMV81MV9TSElGVCAgMQ0KKyNkZWZpbmUg VEFTMjc3MF9URE1fQ0ZHX1JFRzFfUlhfTUFTSyAgQklUKDApDQorI2RlZmluZSBUQVMyNzcwX1RE TV9DRkdfUkVHMV9SWF9SU0lORyAgMHgwDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHMV9S WF9GQUxJTkcgIEJJVCgwKQ0KKyAgICAvKiBURE0gQ29uZmlndXJhdGlvbiBSZWcyICovDQorI2Rl ZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHMiAgVEFTMjc3MF9SRUcoMFgwLCAweDBDKQ0KKyNkZWZp bmUgVEFTMjc3MF9URE1fQ0ZHX1JFRzJfUlhXX01BU0sgIDB4Yw0KKyNkZWZpbmUgVEFTMjc3MF9U RE1fQ0ZHX1JFRzJfUlhXXzE2QklUUyAgMHgwDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVH Ml9SWFdfMjRCSVRTICAweDgNCisjZGVmaW5lIFRBUzI3NzBfVERNX0NGR19SRUcyX1JYV18zMkJJ VFMgIDB4Yw0KKyNkZWZpbmUgVEFTMjc3MF9URE1fQ0ZHX1JFRzJfUlhTX01BU0sgICAgMHgzDQor I2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHMl9SWFNfMTZCSVRTICAweDANCisjZGVmaW5lIFRB UzI3NzBfVERNX0NGR19SRUcyX1JYU18yNEJJVFMgIEJJVCgwKQ0KKyNkZWZpbmUgVEFTMjc3MF9U RE1fQ0ZHX1JFRzJfUlhTXzMyQklUUyAgMHgyDQorICAgIC8qIFRETSBDb25maWd1cmF0aW9uIFJl ZzMgKi8NCisjZGVmaW5lIFRBUzI3NzBfVERNX0NGR19SRUczICBUQVMyNzcwX1JFRygwWDAsIDB4 MEQpDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHM19SWFNfTUFTSyAgMHhmMA0KKyNkZWZp bmUgVEFTMjc3MF9URE1fQ0ZHX1JFRzNfUlhTX1NISUZUIDB4NA0KKyNkZWZpbmUgVEFTMjc3MF9U RE1fQ0ZHX1JFRzNfMzBfTUFTSyAgMHhmDQorI2RlZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHM18z MF9TSElGVCAwDQorICAgIC8qIFRETSBDb25maWd1cmF0aW9uIFJlZzUgKi8NCisjZGVmaW5lIFRB UzI3NzBfVERNX0NGR19SRUc1ICBUQVMyNzcwX1JFRygwWDAsIDB4MEYpDQorI2RlZmluZSBUQVMy NzcwX1RETV9DRkdfUkVHNV9WU05TX01BU0sgIEJJVCg2KQ0KKyNkZWZpbmUgVEFTMjc3MF9URE1f Q0ZHX1JFRzVfVlNOU19FTkFCTEUgIEJJVCg2KQ0KKyNkZWZpbmUgVEFTMjc3MF9URE1fQ0ZHX1JF RzVfNTBfTUFTSyAgMHgzZg0KKyAgICAvKiBURE0gQ29uZmlndXJhdGlvbiBSZWc2ICovDQorI2Rl ZmluZSBUQVMyNzcwX1RETV9DRkdfUkVHNiAgVEFTMjc3MF9SRUcoMFgwLCAweDEwKQ0KKyNkZWZp bmUgVEFTMjc3MF9URE1fQ0ZHX1JFRzZfSVNOU19NQVNLICBCSVQoNikNCisjZGVmaW5lIFRBUzI3 NzBfVERNX0NGR19SRUc2X0lTTlNfRU5BQkxFICBCSVQoNikNCisjZGVmaW5lIFRBUzI3NzBfVERN X0NGR19SRUc2XzUwX01BU0sgIDB4M2YNCisgICAgLyogQnJvd24gT3V0IFByZXZlbnRpb24gUmVn MCAqLw0KKyNkZWZpbmUgVEFTMjc3MF9CT19QUlZfUkVHMCAgVEFTMjc3MF9SRUcoMFgwLCAweDFC KQ0KKyAgICAvKiBJbnRlcnJ1cHQgTUFTSyBSZWcwICovDQorI2RlZmluZSBUQVMyNzcwX0lOVF9N QVNLX1JFRzAgIFRBUzI3NzBfUkVHKDBYMCwgMHgyMCkNCisjZGVmaW5lIFRBUzI3NzBfSU5UX01B U0tfUkVHMF9ESVNBQkxFIDB4ZmYNCisgICAgLyogSW50ZXJydXB0IE1BU0sgUmVnMSAqLw0KKyNk ZWZpbmUgVEFTMjc3MF9JTlRfTUFTS19SRUcxICBUQVMyNzcwX1JFRygwWDAsIDB4MjEpDQorI2Rl ZmluZSBUQVMyNzcwX0lOVF9NQVNLX1JFRzFfRElTQUJMRSAweGZmDQorICAgIC8qIExpdmUtSW50 ZXJydXB0IFJlZzAgKi8NCisjZGVmaW5lIFRBUzI3NzBfTFZFX0lOVF9SRUcwICBUQVMyNzcwX1JF RygwWDAsIDB4MjIpDQorICAgIC8qIExpdmUtSW50ZXJydXB0IFJlZzEgKi8NCisjZGVmaW5lIFRB UzI3NzBfTFZFX0lOVF9SRUcxICBUQVMyNzcwX1JFRygwWDAsIDB4MjMpDQorICAgIC8qIExhdGNo ZWQtSW50ZXJydXB0IFJlZzAgKi8NCisjZGVmaW5lIFRBUzI3NzBfTEFUX0lOVF9SRUcwICBUQVMy NzcwX1JFRygwWDAsIDB4MjQpDQorI2RlZmluZSBUQVMyNzcwX0xBVF9JTlRfUkVHMF9PQ0VfRkxH ICBCSVQoMSkNCisjZGVmaW5lIFRBUzI3NzBfTEFUX0lOVF9SRUcwX09URV9GTEcgIEJJVCgwKQ0K KyAgICAvKiBMYXRjaGVkLUludGVycnVwdCBSZWcxICovDQorI2RlZmluZSBUQVMyNzcwX0xBVF9J TlRfUkVHMSAgVEFTMjc3MF9SRUcoMFgwLCAweDI1KQ0KKyNkZWZpbmUgVEFTMjc3MF9MQVRfSU5U X1JFRzFfVkJBX1RPViAgQklUKDMpDQorI2RlZmluZSBUQVMyNzcwX0xBVF9JTlRfUkVHMV9WQkFf VFVWICBCSVQoMikNCisjZGVmaW5lIFRBUzI3NzBfTEFUX0lOVF9SRUcxX0JPVVRfRkxHICBCSVQo MSkNCisgICAgLyogVkJBVCBNU0IgKi8NCisjZGVmaW5lIFRBUzI3NzBfVkJBVF9NU0IgIFRBUzI3 NzBfUkVHKDBYMCwgMHgyNykNCisgICAgLyogVkJBVCBMU0IgKi8NCisjZGVmaW5lIFRBUzI3NzBf VkJBVF9MU0IgIFRBUzI3NzBfUkVHKDBYMCwgMHgyOCkNCisgICAgLyogVEVNUCBNU0IgKi8NCisj ZGVmaW5lIFRBUzI3NzBfVEVNUF9NU0IgIFRBUzI3NzBfUkVHKDBYMCwgMHgyOSkNCisgICAgLyog VEVNUCBMU0IgKi8NCisjZGVmaW5lIFRBUzI3NzBfVEVNUF9MU0IgIFRBUzI3NzBfUkVHKDBYMCwg MHgyQSkNCisgICAgLyogSW50ZXJydXB0IENvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIFRBUzI3 NzBfSU5UX0NGRyAgVEFTMjc3MF9SRUcoMFgwLCAweDMwKQ0KKyAgICAvKiBNaXNjIElSUSAqLw0K KyNkZWZpbmUgVEFTMjc3MF9NSVNDX0lSUSAgVEFTMjc3MF9SRUcoMFgwLCAweDMyKQ0KKyAgICAv KiBDbG9jayBDb25maWd1cmF0aW9uICovDQorI2RlZmluZSBUQVMyNzcwX0NMS19DR0YgIFRBUzI3 NzBfUkVHKDBYMCwgMHgzQykNCisgICAgLyogVERNIENsb2NrIGRldGVjdGlvbiBtb25pdG9yICov DQorI2RlZmluZSBUQVMyNzcwX1RETV9DTEtfREVUQyAgVEFTMjc3MF9SRUcoMFgwLCAweDc3KQ0K KyAgICAvKiBSZXZpc2lvbiBhbmQgUEcgSUQgKi8NCisjZGVmaW5lIFRBUzI3NzBfUkVWX0FORF9H UElEICBUQVMyNzcwX1JFRygwWDAsIDB4N0QpDQorDQorI2RlZmluZSBUQVMyNzcwX1BPV0VSX0FD VElWRSAwDQorI2RlZmluZSBUQVMyNzcwX1BPV0VSX01VVEUgMQ0KKyNkZWZpbmUgVEFTMjc3MF9Q T1dFUl9TSFVURE9XTiAyDQorI2RlZmluZSBFUlJPUl9PVkVSX0NVUlJFTlQgIDB4MDAwMDAwMQ0K KyNkZWZpbmUgRVJST1JfRElFX09WRVJURU1QICAweDAwMDAwMDINCisjZGVmaW5lIEVSUk9SX09W RVJfVk9MVEFHRSAgMHgwMDAwMDA0DQorI2RlZmluZSBFUlJPUl9VTkRFUl9WT0xUQUdFIDB4MDAw MDAwOA0KKyNkZWZpbmUgRVJST1JfQlJPV05PVVQgICAgICAweDAwMDAwMTANCisjZGVmaW5lIEVS Uk9SX0NMQVNTRF9QV1IgICAgMHgwMDAwMDIwDQorI2RlZmluZSBUQVMyNzcwX1NMT1RfMTZCSVQg IDE2DQorI2RlZmluZSBUQVMyNzcwX1NMT1RfMzJCSVQgIDMyDQorI2RlZmluZSBUQVMyNzcwX0ky Q19SRVRSWV9DT1VOVCAgICAgIDMNCisjZGVmaW5lIEVSUk9SX0kyQ19GQUlMRUQgICAgICAgICAg ICAtMg0KKw0KK3N0cnVjdCB0YXMyNzcwX3JlZ2lzdGVyIHsNCisgaW50IGJvb2s7DQorIGludCBw YWdlOw0KKyBpbnQgcmVnOw0KK307DQorDQorc3RydWN0IHRhczI3NzBfZGFpX2NmZyB7DQorIHVu c2lnbmVkIGludCBkYWlfZm10Ow0KKyB1bnNpZ25lZCBpbnQgdGRtX2RlbGF5Ow0KK307DQorDQor c3RydWN0IHRhczI3NzBfcHJpdiB7DQorIHN0cnVjdCBkZXZpY2UgKmRldjsNCisgc3RydWN0IHJl Z21hcCAqcmVnbWFwOw0KKyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7DQorIHN0cnVjdCBz bmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50Ow0KKyBzdHJ1Y3QgbXV0ZXggZGV2X2xvY2s7DQor IHN0cnVjdCBocnRpbWVyIG10aW1lcjsNCisgaW50IG1uX2Nsa2luOw0KKyBpbnQgbW5fY2xraWQ7 DQorIGludCBtbl9wb3dlcl9zdGF0ZTsNCisgaW50IG1uX2N1cnJlbnRfYm9vazsNCisgaW50IG1u X2N1cnJlbnRfcGFnZTsNCisgaW50IG1uX2xvYWQ7DQorIGludCBtbl9hc2lfZm9ybWF0Ow0KKyBz dHJ1Y3QgZ3Bpb19kZXNjICptbl9yZXNldF9ncGlvOw0KKyBpbnQgbW5faXJxOw0KKyBib29sIG1i X2lycV9lbmFibGU7DQorIGludCBtbl9zYW1wbGluZ19yYXRlOw0KKyBpbnQgbW5fZnJhbWVfc2l6 ZTsNCisgaW50IG1uX3BsbDsNCisgaW50IG1uX2xlZnRfc2xvdDsNCisgaW50IG1uX3JpZ2h0X3Ns b3Q7DQorIGludCBtbl9jaF9zaXplOw0KKyBpbnQgbW5fc2xvdF93aWR0aDsNCisgaW50IG1uX3Zf bW9uX3Nsb3Rfbm87DQorIGludCBtbl9pX21vbl9zbG90X25vOw0KKyBib29sIG1iX3J1bnRpbWVf c3VzcGVuZDsNCisgdW5zaWduZWQgaW50IG1uX2Vycl9jb2RlOw0KKyBzdHJ1Y3QgbXV0ZXggY29k ZWNfbG9jazsNCit9Ow0KKw0KKyNlbmRpZiAvKiBfX1RBUzI3NzBfXyAqLw0KLS0gDQoyLjcuNA0K DQoNCg0KDQoNCkZyYW5rIFNoaSDKr7f2IA0KVGh1bmRlciBTb2Z0d2FyZSBUZWNobm9sb2d5IENv LiwgTHRkLiDW0L/GtLS078jtvP65ybfd09DP3rmry74gDQpNb2JpbGU6ICs4Ni0xMzAwMjk1NzY3 OCB8IEVtYWlsOiBzaGlmdTA3MDRAdGh1bmRlcnNvZnQuY29tIA0KQWRkOiAxMEYsICMxLCBEaWdp dGFsIENoaW5hIFRlY2hub2xvZ3kgUGFyaywgTm8uMjAsIFpoYW5nYmEgUmQuIDR0aCwgSGlnaC10 ZWNoIFpvbmUsIFhpJ2FuIENpdHksIFNoYWFueGkgUHJvdmluY2UsIDcxMDA3NSwgUC5SLiBDaGlu YSANCs73sLLK0Ljf0MLH+NXJsMvLxMK3MjC6xcnx1t3K/cLrv8a8vNSwMbrFwqUxMLLjo6w3MTAw NzUgDQp3d3cudGh1bmRlcnNvZnQuY29tIA0KDQoNCkNPTkZJREVOVElBTElUWS4gVGhpcyBlLW1h aWwgYW5kIGl0cyBhdHRhY2htZW50cyBhcmUgaW50ZW5kZWQgb25seSBmb3IgdGhlIHBlcnNvbiBv ciBlbnRpdHkgd2hvc2UgYWRkcmVzcyBpcyBsaXN0ZWQgYWJvdmUgYW5kIG1heSBjb250YWluIGNv bmZpZGVudGlhbCBhbmQvb3IgcHJpdmlsZWdlZCBtYXRlcmlhbC4gQW55IHJldHJhbnNtaXNzaW9u LCBkaXNzZW1pbmF0aW9uIG9yIG90aGVyIHVzZSBvZiB0aGlzIGluZm9ybWF0aW9uIGJ5IHBlcnNv bnMgb3IgZW50aXRpZXMgb3RoZXIgdGhhbiB0aGUgaW50ZW5kZWQgcmVjaXBpZW50IGlzIHByb2hp Yml0ZWQuIElmIHlvdSByZWNlaXZlZCB0aGlzIGUtbWFpbCBpbiBlcnJvciwgcGxlYXNlIGRvIG5v dCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55b25lLCBidXQgbm90aWZ5IHRoZSBzZW5kZXIg YnkgZW1haWwgaW1tZWRpYXRlbHksIGFuZCBkZWxldGUgdGhpcyBlLW1haWwgYW5kIGFueSBhdHRh Y2htZW50cyBmcm9tIHlvdXIgc3lzdGVtLiBUaGFuayB5b3UuIA0KDQqxo8PczOHKvqGjsb6159fT 08q8/rywxuS4vbz+vfbKytPD09rJz8r2tdjWt7XEuPbIy7vyyrXM5aOssqK/ycTcsPy6rLv6w9y6 zS+78szY0O3XysHPoaO9+9a5ttTEv7HqytW8/sjL0tTN4rXEuPbIy7vyyrXM5b340NC0y8Dg0MXP oiC1xMjOus7XqrKlo6y0q7Klu/LG5Mv7yrnTw6GjyOe5+8T6zvPK1cHLtMu159fT08q8/qOsx+uy u9Kqz/LIzrrOyMvNuMK21eLQqcTayN2jrLb406bBory00tTTyrz+0M7Kvc2o1qq3orz+yMujrLKi tNPE+rXEz7XNs9bQyb6z/bG+08ogvP66zcjOus64vbz+oaPQu9C7oaMgDQoNCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFsc2EtZGV2ZWwgbWFpbGluZyBs aXN0CkFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwpodHRwczovL21haWxtYW4uYWxzYS1wcm9q ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK