From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id F0607A04BA; Thu, 1 Oct 2020 18:08:06 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C91221D673; Thu, 1 Oct 2020 18:08:05 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id AD2201D669 for ; Thu, 1 Oct 2020 18:08:03 +0200 (CEST) IronPort-SDR: BcfWemesXFZXG4ittBR4mPG7e1/Yb6NrysNJiboEobLDS5E0nQX9prKkGtg0NKJG3q5IR6Bdmd 2zOI9W7Wg8Hg== X-IronPort-AV: E=McAfee;i="6000,8403,9761"; a="180918504" X-IronPort-AV: E=Sophos;i="5.77,323,1596524400"; d="scan'208";a="180918504" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Oct 2020 09:07:31 -0700 IronPort-SDR: Av2hZM1LYH9UmFZNhWFZhFx+2molSVyc45YNhx5p8ZPyI62zzTxHfMD55Ds2Lg6dkgjB1qWA/P ghKp0KcOO2lw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,323,1596524400"; d="scan'208";a="514776255" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga006.fm.intel.com with ESMTP; 01 Oct 2020 09:07:28 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 1 Oct 2020 09:07:28 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 1 Oct 2020 09:07:27 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 1 Oct 2020 09:07:27 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.169) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Thu, 1 Oct 2020 09:07:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dsK2kfsTy+MtScpmrd8twhaR/BDiNRAtFAHMhv1tWPBwX/53IDgK7UpZifYn9QmmCNWy8N+t/vn7RCGye83uTaeGhK6itmjF0QtuJwLyt4nYFoYbbX+dS3HtG1TOMLRkH9bB7VRcn32z2VjCHjxCmpsvrDLYj73GrAYI/PXkC9nyA/CyxuZa+CAFKzwPkWIvI1GoO8KpW83MbHVaCSISkKoe2blwC7xwD3ajBgR4NvHz1gPfZ7/7DvGtu2jTXOp8L4zG9LkhbGpVtuEQLEwqHs/8yJVhlGPAzPEjL8lv0NhbJOYHxK4xaCF3akAN3o1qS5C9v+eLJgnbbw3EFInnJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GqeAOjR6t5Wenn1PnibV8C0TMYUNtZnypZ5JclXMwTw=; b=X+0Ol8t7faUzYvgRcKiPJZTi9S3W29gxEvC+BhqxfLQWHAIzr+/DoLwlg4Aq2Ktl1LnRZ4GVYy+iTHCzhmSXvNEJcUm4CM3ax4zya1g+fktAbabYIAr5UuaaSvG83o9/o7iQJUh1EBYearIKyDsBs8uhmDl1l8njs/9QYDOxEe8jkDQ5i3/HueRDSHYDXUV3BJ2Ej8+JUUnlNG5Zm+GM2fxxeUNXKe2lRFBI2jnwGsmZAeem3c67umrlMZuL/LhEUVfLl4dpHmUynZMVrUCQagFq3GWAxR3wzVnHYBbDrzI21yZJjEAlPQjDtUZ8B6pp5VAMNnSxlmQZbMbefje4xw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GqeAOjR6t5Wenn1PnibV8C0TMYUNtZnypZ5JclXMwTw=; b=slH5yUWz3oZ0vIM/CRbGM5ZS5BFYb+14iuGCXOVf+gnthuDczZD1rLWdjk2qkbE8cDKgxv6NEaEhgbkhFr6TV2Pv7/PxdhP+8i+ooznpEPz+VzjcavbC4aEavSlZzR/pEsdqIeN5aWPwBAv+wL2VjB4xko7yTSnrdBMKrs1JbsA= Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by BYAPR11MB3368.namprd11.prod.outlook.com (2603:10b6:a03:1b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3412.23; Thu, 1 Oct 2020 16:07:22 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508%7]) with mapi id 15.20.3412.028; Thu, 1 Oct 2020 16:07:22 +0000 From: "Chautru, Nicolas" To: Tom Rix , "dev@dpdk.org" , "akhil.goyal@nxp.com" CC: "Richardson, Bruce" , "Xu, Rosen" , "dave.burley@accelercomm.com" , "aidan.goddard@accelercomm.com" , "Yigit, Ferruh" , "Liu, Tianjiao" Thread-Topic: [dpdk-dev] [PATCH v9 05/10] baseband/acc100: add LDPC processing functions Thread-Index: AQHWlffjcnrKi0+CTkazFpcIWNfE76mBaJyAgAAg+kCAAVo5AIAABBWA Date: Thu, 1 Oct 2020 16:07:22 +0000 Message-ID: References: <1597796731-57841-12-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-1-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-6-git-send-email-nicolas.chautru@intel.com> <41639260-93fe-80fb-745c-9cf3a15db6f1@redhat.com> <972b86a3-5e8d-dc3b-e832-a67ccfdcb426@redhat.com> In-Reply-To: <972b86a3-5e8d-dc3b-e832-a67ccfdcb426@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [45.28.143.88] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 325e5d67-7b83-46a0-f447-08d8662414e1 x-ms-traffictypediagnostic: BYAPR11MB3368: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: BqhTzjA+HISBFTRdwpFXPJAzdha6O801hKLNa4RaUMLGWYaa0INJNd+yK6Y0CsryITb9IYA2bSggfo+VKk8reSBN0DvuOWc8X7igg5vgVP+8bbdFZEggvD3Zn7C+/LDAd9C3s7j4b9v5+LLxmfPBnjCwK9ndLT0G8YUD+cDlstKuAXjlGQ2lld9zahIN9lOIQNEw/hNppVZrRw7PGcf+y3z/l+6Ynih0sN8lzvg/DC+nwcIJ5Tt/g5+1DWrJgdq6HGY/xBVIW/6JLyL2NOKXgaPZK/HKpWkOeUIxd4JqgQfAnAH5y1N7v3CuO8r43mEt98R+qoo65fm0wnojQJQZt5nLIRXtZy4o06YpqwP9H2aTbpM/kxCf31HAMwFBCxUPOMocKPtWxVqewEWWExGrhIgqdcTeBQi0ZqQoQPF+6cE= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB4451.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(396003)(136003)(366004)(39860400002)(346002)(66556008)(316002)(66446008)(64756008)(52536014)(83380400001)(76116006)(107886003)(9686003)(186003)(86362001)(55016002)(66946007)(8676002)(2906002)(66476007)(8936002)(26005)(7696005)(4326008)(71200400001)(478600001)(5660300002)(6506007)(53546011)(54906003)(110136005)(33656002)(30864003)(461764006)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: bIeFNAch+HSPSJPuD46Ti8SqjrX0Q/T5ycHoL2T6zh03FqCC2MyNR9GzM6zqOSSfe9Q2L1kyDVFz84V3UuWDjIDpEESox5kXfr1axReHYWDYOGX2jqOabrD+qBfNkwta3i4DcwwULgEjJNS2pJDGgB/30WlsZU5rbUc1auqHwPOm+sChSM8HXKqdGYZH+MIkEIvW8z5HMcDLdwTj7zzItn9orezYqWqr+a3bvx+WXy5myUrP43wPApSZai6r90gN8xy4zzhiayoEmMqAM5h5w1KqfnXunUy36UleP3M0S7WcAz8FxvVxFR39wNkt8p6TTAAUHtO39PfPLTT9/W8RvQt/zu+bCJzB7IaG50bXu4iypAQT6zZi+fGi+6Xko6doczXIZSXv8XFSgoO/CmYu0Ilvg7mAjvC4P1RD7EopByiG7Dx7U4GCg1r6uEmamx4qyGfUC3eMU+GGsYW9MUkSjv1rIRKo3cCfWfOajA84vg09609suGjb3d0oOW44jpz7Y227V+ZJry5QH7+pFHE5DZXSmjX+72cyLmYyZCl2oKT2Mx5oH8AZxb8bAHujngSPB/QaJm7W4X3aGwkUQ7fspWItChNhhSygQassyPEWgsheTVMPI36k5A/1Jh3rUhaPMUpWyHh5RVUIe3Lc9emRtA== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR11MB4451.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 325e5d67-7b83-46a0-f447-08d8662414e1 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Oct 2020 16:07:22.5994 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: dk64A91aOIGs81xruiDSCtfGmbqfrJHszA9q6UyaX7KCDZW6i9AjuRVM1AjXIomXh6gMtlnk9xfQ4SCjUiW/EMD1CoUKqeH9KFpBtGj1Otg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB3368 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v9 05/10] baseband/acc100: add LDPC processing functions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgVG9tLCANCk5vdGUgdGhhdCB0aGVyZSBpcyBubyBhIHYxMCB3aGljaCBpbmNsdWRlcyBzZXZl cmFsIHN1Z2dlc3RlZCBjaGFuZ2VzIGRlZW1lZCB2YWx1YWJsZS4gDQoNCj4gRnJvbTogVG9tIFJp eCA8dHJpeEByZWRoYXQuY29tPg0KPiBPbiA5LzMwLzIwIDExOjUyIEFNLCBDaGF1dHJ1LCBOaWNv bGFzIHdyb3RlOg0KPiA+IEhpIFRvbSwNCj4gPg0KPiA+PiBGcm9tOiBUb20gUml4IDx0cml4QHJl ZGhhdC5jb20+DQo+ID4+IE9uIDkvMjgvMjAgNToyOSBQTSwgTmljb2xhcyBDaGF1dHJ1IHdyb3Rl Og0KPiA+Pj4gQWRkaW5nIExEUEMgZGVjb2RlIGFuZCBlbmNvZGUgcHJvY2Vzc2luZyBvcGVyYXRp b25zDQo+ID4+Pg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogTmljb2xhcyBDaGF1dHJ1IDxuaWNvbGFz LmNoYXV0cnVAaW50ZWwuY29tPg0KPiA+Pj4gQWNrZWQtYnk6IExpdSBUaWFuamlhbyA8VGlhbmpp YW8ubGl1QGludGVsLmNvbT4NCj4gPj4+IEFja2VkLWJ5OiBEYXZlIEJ1cmxleSA8ZGF2ZS5idXJs ZXlAYWNjZWxlcmNvbW0uY29tPg0KPiA+Pj4gLS0tDQo+ID4+PiAgZG9jL2d1aWRlcy9iYmRldnMv ZmVhdHVyZXMvYWNjMTAwLmluaSAgICB8ICAgIDggKy0NCj4gPj4+ICBkcml2ZXJzL2Jhc2ViYW5k L2FjYzEwMC9ydGVfYWNjMTAwX3BtZC5jIHwgMTYyNQ0KPiA+PiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0NCj4gPj4+ICBkcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX3Bt ZC5oIHwgICAgMyArDQo+ID4+PiAgMyBmaWxlcyBjaGFuZ2VkLCAxNjMwIGluc2VydGlvbnMoKyks IDYgZGVsZXRpb25zKC0pDQo+ID4+Pg0KPiA+Pj4gZGlmZiAtLWdpdCBhL2RvYy9ndWlkZXMvYmJk ZXZzL2ZlYXR1cmVzL2FjYzEwMC5pbmkNCj4gPj4gYi9kb2MvZ3VpZGVzL2JiZGV2cy9mZWF0dXJl cy9hY2MxMDAuaW5pDQo+ID4+PiBpbmRleCBjODlhNGQ3Li40MGM3YWRjIDEwMDY0NA0KPiA+Pj4g LS0tIGEvZG9jL2d1aWRlcy9iYmRldnMvZmVhdHVyZXMvYWNjMTAwLmluaQ0KPiA+Pj4gKysrIGIv ZG9jL2d1aWRlcy9iYmRldnMvZmVhdHVyZXMvYWNjMTAwLmluaQ0KPiA+Pj4gQEAgLTYsOSArNiw5 IEBADQo+ID4+PiAgW0ZlYXR1cmVzXQ0KPiA+Pj4gIFR1cmJvIERlY29kZXIgKDRHKSAgICAgPSBO DQo+ID4+PiAgVHVyYm8gRW5jb2RlciAoNEcpICAgICA9IE4NCj4gPj4+IC1MRFBDIERlY29kZXIg KDVHKSAgICAgID0gTg0KPiA+Pj4gLUxEUEMgRW5jb2RlciAoNUcpICAgICAgPSBODQo+ID4+PiAt TExSL0hBUlEgQ29tcHJlc3Npb24gICA9IE4NCj4gPj4+IC1FeHRlcm5hbCBERFIgQWNjZXNzICAg ID0gTg0KPiA+Pj4gK0xEUEMgRGVjb2RlciAoNUcpICAgICAgPSBZDQo+ID4+PiArTERQQyBFbmNv ZGVyICg1RykgICAgICA9IFkNCj4gPj4+ICtMTFIvSEFSUSBDb21wcmVzc2lvbiAgID0gWQ0KPiA+ Pj4gK0V4dGVybmFsIEREUiBBY2Nlc3MgICAgPSBZDQo+ID4+PiAgSFcgQWNjZWxlcmF0ZWQgICAg ICAgICA9IFkNCj4gPj4+ICBCQkRFViBBUEkgICAgICAgICAgICAgID0gWQ0KPiA+Pj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMNCj4gPj4gYi9k cml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX3BtZC5jDQo+ID4+PiBpbmRleCA3YTIx YzU3Li5iMjIzNTQ3IDEwMDY0NA0KPiA+Pj4gLS0tIGEvZHJpdmVycy9iYXNlYmFuZC9hY2MxMDAv cnRlX2FjYzEwMF9wbWQuYw0KPiA+Pj4gKysrIGIvZHJpdmVycy9iYXNlYmFuZC9hY2MxMDAvcnRl X2FjYzEwMF9wbWQuYw0KPiA+Pj4gQEAgLTE1LDYgKzE1LDkgQEANCj4gPj4+ICAjaW5jbHVkZSA8 cnRlX2hleGR1bXAuaD4NCj4gPj4+ICAjaW5jbHVkZSA8cnRlX3BjaS5oPg0KPiA+Pj4gICNpbmNs dWRlIDxydGVfYnVzX3BjaS5oPg0KPiA+Pj4gKyNpZmRlZiBSVEVfQkJERVZfT0ZGTE9BRF9DT1NU DQo+ID4+PiArI2luY2x1ZGUgPHJ0ZV9jeWNsZXMuaD4NCj4gPj4+ICsjZW5kaWYNCj4gPj4+DQo+ ID4+PiAgI2luY2x1ZGUgPHJ0ZV9iYmRldi5oPg0KPiA+Pj4gICNpbmNsdWRlIDxydGVfYmJkZXZf cG1kLmg+DQo+ID4+PiBAQCAtNDQ5LDcgKzQ1Miw2IEBADQo+ID4+PiAgCXJldHVybiAwOw0KPiA+ Pj4gIH0NCj4gPj4+DQo+ID4+PiAtDQo+ID4+PiAgLyoqDQo+ID4+PiAgICogUmVwb3J0IGEgQUND MTAwIHF1ZXVlIGluZGV4IHdoaWNoIGlzIGZyZWUNCj4gPj4+ICAgKiBSZXR1cm4gMCB0byAxNmsg Zm9yIGEgdmFsaWQgcXVldWVfaWR4IG9yIC0xIHdoZW4gbm8gcXVldWUgaXMgYXZhaWxhYmxlDQo+ ID4+PiBAQCAtNjM0LDYgKzYzNiw0NiBAQA0KPiA+Pj4gIAlzdHJ1Y3QgYWNjMTAwX2RldmljZSAq ZCA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ID4+Pg0KPiA+Pj4gIAlzdGF0aWMgY29uc3Qg c3RydWN0IHJ0ZV9iYmRldl9vcF9jYXAgYmJkZXZfY2FwYWJpbGl0aWVzW10gPSB7DQo+ID4+PiAr CQl7DQo+ID4+PiArCQkJLnR5cGUgICA9IFJURV9CQkRFVl9PUF9MRFBDX0VOQywNCj4gPj4+ICsJ CQkuY2FwLmxkcGNfZW5jID0gew0KPiA+Pj4gKwkJCQkuY2FwYWJpbGl0eV9mbGFncyA9DQo+ID4+ PiArCQkJCQlSVEVfQkJERVZfTERQQ19SQVRFX01BVENIIHwNCj4gPj4+ICsNCj4gPj4gCVJURV9C QkRFVl9MRFBDX0NSQ18yNEJfQVRUQUNIIHwNCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9MRFBD X0lOVEVSTEVBVkVSX0JZUEFTUywNCj4gPj4+ICsJCQkJLm51bV9idWZmZXJzX3NyYyA9DQo+ID4+ PiArDQo+ID4+IAlSVEVfQkJERVZfTERQQ19NQVhfQ09ERV9CTE9DS1MsDQo+ID4+PiArCQkJCS5u dW1fYnVmZmVyc19kc3QgPQ0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JCREVWX0xEUENfTUFYX0NPREVf QkxPQ0tTLA0KPiA+Pj4gKwkJCX0NCj4gPj4+ICsJCX0sDQo+ID4+PiArCQl7DQo+ID4+PiArCQkJ LnR5cGUgICA9IFJURV9CQkRFVl9PUF9MRFBDX0RFQywNCj4gPj4+ICsJCQkuY2FwLmxkcGNfZGVj ID0gew0KPiA+Pj4gKwkJCS5jYXBhYmlsaXR5X2ZsYWdzID0NCj4gPj4+ICsJCQkJUlRFX0JCREVW X0xEUENfQ1JDX1RZUEVfMjRCX0NIRUNLIHwNCj4gPj4+ICsJCQkJUlRFX0JCREVWX0xEUENfQ1JD X1RZUEVfMjRCX0RST1AgfA0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JCREVWX0xEUENfSFFfQ09NQklO RV9JTl9FTkFCTEUgfA0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9P VVRfRU5BQkxFIHwNCj4gPj4+ICsjaWZkZWYgQUNDMTAwX0VYVF9NRU0NCj4gPj4gVGhpcyBpcyB1 bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCBpbiBydGVfYWNjMTAwX3BtZC5oIGJ1dCBpdCBzZWVtcw0K PiA+Pg0KPiA+PiBsaWtlIGl0IGNvdWxkIGJlIGEgaHcgY29uZmlnLiAgUGxlYXNlIGFkZCBhIGNv bW1lbnQgaW4gdGhlICouaA0KPiA+Pg0KPiA+IEl0IGlzIG5vdCByZWFsbHkgYW4gSFcgY29uZmln LCBqdXN0IGEgcG90ZW50aWFsIGFsdGVybmF0ZSB3YXkgdG8gcnVuDQo+ID4gdGhlIGRldmljZSBu b3RhYmx5IGZvciB0cm91Ymxlc2hvb3RpbmcuDQo+ID4gSSBjYW4gYWRkIGEgY29tbWVudCB0aG91 Z2gNCj4gPg0KPiA+PiBDb3VsZCBhbHNvIGNoYW5nZSB0bw0KPiA+Pg0KPiA+PiAjaWYgQUNDMTAw X0VYVF9NRU0NCj4gPj4NCj4gPj4gYW5kIGNoYW5nZSB0aGUgI2RlZmluZSBBQ0MxMDBfRVhUX01F TSAxDQo+ID4gb2sNCj4gPg0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JCREVWX0xEUENfSU5URVJOQUxf SEFSUV9NRU1PUllfSU5fRU5BQkxFIHwNCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9MRFBDX0lO VEVSTkFMX0hBUlFfTUVNT1JZX09VVF9FTkFCTEUgfA0KPiA+Pj4gKyNlbmRpZg0KPiA+Pj4gKw0K PiA+PiAJUlRFX0JCREVWX0xEUENfSVRFUkFUSU9OX1NUT1BfRU5BQkxFIHwNCj4gPj4+ICsJCQkJ UlRFX0JCREVWX0xEUENfREVJTlRFUkxFQVZFUl9CWVBBU1MNCj4gPj4gfA0KPiA+Pj4gKwkJCQlS VEVfQkJERVZfTERQQ19ERUNPREVfQllQQVNTIHwNCj4gPj4+ICsJCQkJUlRFX0JCREVWX0xEUENf REVDX1NDQVRURVJfR0FUSEVSIHwNCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9MRFBDX0hBUlFf NkJJVF9DT01QUkVTU0lPTiB8DQo+ID4+PiArCQkJCVJURV9CQkRFVl9MRFBDX0xMUl9DT01QUkVT U0lPTiwNCj4gPj4+ICsJCQkubGxyX3NpemUgPSA4LA0KPiA+Pj4gKwkJCS5sbHJfZGVjaW1hbHMg PSAxLA0KPiA+Pj4gKwkJCS5udW1fYnVmZmVyc19zcmMgPQ0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JC REVWX0xEUENfTUFYX0NPREVfQkxPQ0tTLA0KPiA+Pj4gKwkJCS5udW1fYnVmZmVyc19oYXJkX291 dCA9DQo+ID4+PiArDQo+ID4+IAlSVEVfQkJERVZfTERQQ19NQVhfQ09ERV9CTE9DS1MsDQo+ID4+ PiArCQkJLm51bV9idWZmZXJzX3NvZnRfb3V0ID0gMCwNCj4gPj4+ICsJCQl9DQo+ID4+PiArCQl9 LA0KPiA+Pj4gIAkJUlRFX0JCREVWX0VORF9PRl9DQVBBQklMSVRJRVNfTElTVCgpDQo+ID4+PiAg CX07DQo+ID4+Pg0KPiA+Pj4gQEAgLTY2OSw5ICs3MTEsMTQgQEANCj4gPj4+ICAJZGV2X2luZm8t PmNwdV9mbGFnX3JlcXMgPSBOVUxMOw0KPiA+Pj4gIAlkZXZfaW5mby0+bWluX2FsaWdubWVudCA9 IDY0Ow0KPiA+Pj4gIAlkZXZfaW5mby0+Y2FwYWJpbGl0aWVzID0gYmJkZXZfY2FwYWJpbGl0aWVz Ow0KPiA+Pj4gKyNpZmRlZiBBQ0MxMDBfRVhUX01FTQ0KPiA+Pj4gIAlkZXZfaW5mby0+aGFycV9i dWZmZXJfc2l6ZSA9IGQtPmRkcl9zaXplOw0KPiA+Pj4gKyNlbHNlDQo+ID4+PiArCWRldl9pbmZv LT5oYXJxX2J1ZmZlcl9zaXplID0gMDsNCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICB9DQo+ID4+Pg0K PiA+Pj4gKw0KPiA+Pj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRlX2JiZGV2X29wcyBhY2MxMDBf YmJkZXZfb3BzID0gew0KPiA+Pj4gIAkuc2V0dXBfcXVldWVzID0gYWNjMTAwX3NldHVwX3F1ZXVl cywNCj4gPj4+ICAJLmNsb3NlID0gYWNjMTAwX2Rldl9jbG9zZSwNCj4gPj4+IEBAIC02OTYsNiAr NzQzLDE1NzcgQEANCj4gPj4+ICAJey5kZXZpY2VfaWQgPSAwfSwNCj4gPj4+ICB9Ow0KPiA+Pj4N Cj4gPj4+ICsvKiBSZWFkIGZsYWcgdmFsdWUgMC8xIGZyb20gYml0bWFwICovDQo+ID4+PiArc3Rh dGljIGlubGluZSBib29sDQo+ID4+PiArY2hlY2tfYml0KHVpbnQzMl90IGJpdG1hcCwgdWludDMy X3QgYml0bWFzaykNCj4gPj4+ICt7DQo+ID4+PiArCXJldHVybiBiaXRtYXAgJiBiaXRtYXNrOw0K PiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4gQWxsIHRoZSBiYmRldiBoYXZlIHRoaXMgZnVuY3Rpb24s IGl0cyBwcmV0dHkgdHJpdmFsIGJ1dCBpdCB3b3VsZCBiZSBnb29kIGlmDQo+ID4+IGNvbW1vbiBi YmRldg0KPiA+Pg0KPiA+PiBmdW5jdGlvbnMgZ290IG1vdmVkIHRvIGEgY29tbW9uIHBsYWNlLg0K PiA+IE5vdGVkIGZvciBmdXR1cmUgY2hhbmdlIGFmZmVjdGluZyBhbGwgUE1EcyBvdXRzaWRlIG9m IHRoYXQgc2VyaWUuDQo+IA0KPiBvay4NCj4gDQo+ID4NCj4gPj4+ICtzdGF0aWMgaW5saW5lIGNo YXIgKg0KPiA+Pj4gK21idWZfYXBwZW5kKHN0cnVjdCBydGVfbWJ1ZiAqbV9oZWFkLCBzdHJ1Y3Qg cnRlX21idWYgKm0sIHVpbnQxNl90DQo+ID4+IGxlbikNCj4gPj4+ICt7DQo+ID4+PiArCWlmICh1 bmxpa2VseShsZW4gPiBydGVfcGt0bWJ1Zl90YWlscm9vbShtKSkpDQo+ID4+PiArCQlyZXR1cm4g TlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsJY2hhciAqdGFpbCA9IChjaGFyICopbS0+YnVmX2FkZHIg KyBtLT5kYXRhX29mZiArIG0tPmRhdGFfbGVuOw0KPiA+Pj4gKwltLT5kYXRhX2xlbiA9ICh1aW50 MTZfdCkobS0+ZGF0YV9sZW4gKyBsZW4pOw0KPiA+Pj4gKwltX2hlYWQtPnBrdF9sZW4gID0gKG1f aGVhZC0+cGt0X2xlbiArIGxlbik7DQo+ID4+PiArCXJldHVybiB0YWlsOw0KPiA+Pj4gK30NCj4g Pj4+ICsNCj4gPj4+ICsvKiBDb21wdXRlIHZhbHVlIG9mIGswLg0KPiA+Pj4gKyAqIEJhc2VkIG9u IDNHUFAgMzguMjEyIFRhYmxlIDUuNC4yLjEtMg0KPiA+Pj4gKyAqIFN0YXJ0aW5nIHBvc2l0aW9u IG9mIGRpZmZlcmVudCByZWR1bmRhbmN5IHZlcnNpb25zLCBrMA0KPiA+Pj4gKyAqLw0KPiA+Pj4g K3N0YXRpYyBpbmxpbmUgdWludDE2X3QNCj4gPj4+ICtnZXRfazAodWludDE2X3Qgbl9jYiwgdWlu dDE2X3Qgel9jLCB1aW50OF90IGJnLCB1aW50OF90IHJ2X2luZGV4KQ0KPiA+Pj4gK3sNCj4gPj4+ ICsJaWYgKHJ2X2luZGV4ID09IDApDQo+ID4+PiArCQlyZXR1cm4gMDsNCj4gPj4+ICsJdWludDE2 X3QgbiA9IChiZyA9PSAxID8gTl9aQ18xIDogTl9aQ18yKSAqIHpfYzsNCj4gPj4+ICsJaWYgKG5f Y2IgPT0gbikgew0KPiA+Pj4gKwkJaWYgKHJ2X2luZGV4ID09IDEpDQo+ID4+PiArCQkJcmV0dXJu IChiZyA9PSAxID8gSzBfMV8xIDogSzBfMV8yKSAqIHpfYzsNCj4gPj4+ICsJCWVsc2UgaWYgKHJ2 X2luZGV4ID09IDIpDQo+ID4+PiArCQkJcmV0dXJuIChiZyA9PSAxID8gSzBfMl8xIDogSzBfMl8y KSAqIHpfYzsNCj4gPj4+ICsJCWVsc2UNCj4gPj4+ICsJCQlyZXR1cm4gKGJnID09IDEgPyBLMF8z XzEgOiBLMF8zXzIpICogel9jOw0KPiA+Pj4gKwl9DQo+ID4+PiArCS8qIExCUk0gY2FzZSAtIGlu Y2x1ZGVzIGEgZGl2aXNpb24gYnkgTiAqLw0KPiA+Pj4gKwlpZiAocnZfaW5kZXggPT0gMSkNCj4g Pj4+ICsJCXJldHVybiAoKChiZyA9PSAxID8gSzBfMV8xIDogSzBfMV8yKSAqIG5fY2IpDQo+ID4+ PiArCQkJCS8gbikgKiB6X2M7DQo+ID4+PiArCWVsc2UgaWYgKHJ2X2luZGV4ID09IDIpDQo+ID4+ PiArCQlyZXR1cm4gKCgoYmcgPT0gMSA/IEswXzJfMSA6IEswXzJfMikgKiBuX2NiKQ0KPiA+Pj4g KwkJCQkvIG4pICogel9jOw0KPiA+Pj4gKwllbHNlDQo+ID4+PiArCQlyZXR1cm4gKCgoYmcgPT0g MSA/IEswXzNfMSA6IEswXzNfMikgKiBuX2NiKQ0KPiA+Pj4gKwkJCQkvIG4pICogel9jOw0KPiA+ Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKiBGaWxsIGluIGEgZnJhbWUgY29udHJvbCB3b3JkIGZv ciBMRFBDIGVuY29kaW5nLiAqLw0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+Pj4gK2Fj YzEwMF9mY3dfbGVfZmlsbChjb25zdCBzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqb3AsDQo+ID4+ PiArCQlzdHJ1Y3QgYWNjMTAwX2Zjd19sZSAqZmN3LCBpbnQgbnVtX2NiKQ0KPiA+Pj4gK3sNCj4g Pj4+ICsJZmN3LT5xbSA9IG9wLT5sZHBjX2VuYy5xX207DQo+ID4+PiArCWZjdy0+bmZpbGxlciA9 IG9wLT5sZHBjX2VuYy5uX2ZpbGxlcjsNCj4gPj4+ICsJZmN3LT5CRyA9IChvcC0+bGRwY19lbmMu YmFzZWdyYXBoIC0gMSk7DQo+ID4+PiArCWZjdy0+WmMgPSBvcC0+bGRwY19lbmMuel9jOw0KPiA+ Pj4gKwlmY3ctPm5jYiA9IG9wLT5sZHBjX2VuYy5uX2NiOw0KPiA+Pj4gKwlmY3ctPmswID0gZ2V0 X2swKGZjdy0+bmNiLCBmY3ctPlpjLCBvcC0+bGRwY19lbmMuYmFzZWdyYXBoLA0KPiA+Pj4gKwkJ CW9wLT5sZHBjX2VuYy5ydl9pbmRleCk7DQo+ID4+PiArCWZjdy0+cm1fZSA9IG9wLT5sZHBjX2Vu Yy5jYl9wYXJhbXMuZTsNCj4gPj4+ICsJZmN3LT5jcmNfc2VsZWN0ID0gY2hlY2tfYml0KG9wLT5s ZHBjX2VuYy5vcF9mbGFncywNCj4gPj4+ICsJCQlSVEVfQkJERVZfTERQQ19DUkNfMjRCX0FUVEFD SCk7DQo+ID4+PiArCWZjdy0+YnlwYXNzX2ludGx2ID0gY2hlY2tfYml0KG9wLT5sZHBjX2VuYy5v cF9mbGFncywNCj4gPj4+ICsJCQlSVEVfQkJERVZfTERQQ19JTlRFUkxFQVZFUl9CWVBBU1MpOw0K PiA+Pj4gKwlmY3ctPm1jYl9jb3VudCA9IG51bV9jYjsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+ PiArLyogRmlsbCBpbiBhIGZyYW1lIGNvbnRyb2wgd29yZCBmb3IgTERQQyBkZWNvZGluZy4gKi8N Cj4gPj4+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPj4+ICthY2MxMDBfZmN3X2xkX2ZpbGwoY29u c3Qgc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLCBzdHJ1Y3QNCj4gPj4gYWNjMTAwX2Zjd19s ZCAqZmN3LA0KPiA+Pj4gKwkJdW5pb24gYWNjMTAwX2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5 b3V0KQ0KPiA+Pj4gK3sNCj4gPj4+ICsJdWludDE2X3QgaGFycV9vdXRfbGVuZ3RoLCBoYXJxX2lu X2xlbmd0aCwgbmNiX3AsIGswX3AsDQo+ID4+IHBhcml0eV9vZmZzZXQ7DQo+ID4+PiArCXVpbnQx Nl90IGhhcnFfaW5kZXg7DQo+ID4+PiArCXVpbnQzMl90IGw7DQo+ID4+PiArCWJvb2wgaGFycV9w cnVuID0gZmFsc2U7DQo+ID4+PiArDQo+ID4+PiArCWZjdy0+cW0gPSBvcC0+bGRwY19kZWMucV9t Ow0KPiA+Pj4gKwlmY3ctPm5maWxsZXIgPSBvcC0+bGRwY19kZWMubl9maWxsZXI7DQo+ID4+PiAr CWZjdy0+QkcgPSAob3AtPmxkcGNfZGVjLmJhc2VncmFwaCAtIDEpOw0KPiA+Pj4gKwlmY3ctPlpj ID0gb3AtPmxkcGNfZGVjLnpfYzsNCj4gPj4+ICsJZmN3LT5uY2IgPSBvcC0+bGRwY19kZWMubl9j YjsNCj4gPj4+ICsJZmN3LT5rMCA9IGdldF9rMChmY3ctPm5jYiwgZmN3LT5aYywgb3AtPmxkcGNf ZGVjLmJhc2VncmFwaCwNCj4gPj4+ICsJCQlvcC0+bGRwY19kZWMucnZfaW5kZXgpOw0KPiA+Pj4g KwlpZiAob3AtPmxkcGNfZGVjLmNvZGVfYmxvY2tfbW9kZSA9PSAxKQ0KPiA+PiAxIGlzIG1hZ2lj LCBjb25zaWRlciBhICNkZWZpbmUNCj4gPiBUaGlzIHdvdWxkIGJlIGEgY2hhbmdlZCBub3QgcmVs YXRlZCB0byB0aGF0IFBNRCwgYnV0IG5vdGVkIGFuZCBhZ3JlZWQuDQo+ID4NCj4gPj4+ICsJCWZj dy0+cm1fZSA9IG9wLT5sZHBjX2RlYy5jYl9wYXJhbXMuZTsNCj4gPj4+ICsJZWxzZQ0KPiA+Pj4g KwkJZmN3LT5ybV9lID0gKG9wLT5sZHBjX2RlYy50Yl9wYXJhbXMuciA8DQo+ID4+PiArCQkJCW9w LT5sZHBjX2RlYy50Yl9wYXJhbXMuY2FiKSA/DQo+ID4+PiArCQkJCQkJb3AtPmxkcGNfZGVjLnRi X3BhcmFtcy5lYSA6DQo+ID4+PiArCQkJCQkJb3AtPmxkcGNfZGVjLnRiX3BhcmFtcy5lYjsNCj4g Pj4+ICsNCj4gPj4+ICsJZmN3LT5oY2luX2VuID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9m bGFncywNCj4gPj4+ICsJCQlSVEVfQkJERVZfTERQQ19IUV9DT01CSU5FX0lOX0VOQUJMRSk7DQo+ ID4+PiArCWZjdy0+aGNvdXRfZW4gPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0K PiA+Pj4gKwkJCVJURV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVfT1VUX0VOQUJMRSk7DQo+ID4+PiAr CWZjdy0+Y3JjX3NlbGVjdCA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4+ PiArCQkJUlRFX0JCREVWX0xEUENfQ1JDX1RZUEVfMjRCX0NIRUNLKTsNCj4gPj4+ICsJZmN3LT5i eXBhc3NfZGVjID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPj4+ICsJCQlS VEVfQkJERVZfTERQQ19ERUNPREVfQllQQVNTKTsNCj4gPj4+ICsJZmN3LT5ieXBhc3NfaW50bHYg PSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+Pj4gKwkJCVJURV9CQkRFVl9M RFBDX0RFSU5URVJMRUFWRVJfQllQQVNTKTsNCj4gPj4+ICsJaWYgKG9wLT5sZHBjX2RlYy5xX20g PT0gMSkgew0KPiA+Pj4gKwkJZmN3LT5ieXBhc3NfaW50bHYgPSAxOw0KPiA+Pj4gKwkJZmN3LT5x bSA9IDI7DQo+ID4+PiArCX0NCj4gPj4gc2ltaWxhciBtYWdpYy4NCj4gPiBRbSBpcyBhbiBpbnRl Z2VyIG51bWJlciBkZWZpbmVkIGluIDNHUFAsIG5vdCBhIG1hZ2ljIG51bWJlci4gVGhpcw0KPiBs aXRlcmFsbHkgbWVhbnMgcW0gPSAyLg0KPiANCj4gb2sNCj4gDQo+IA0KPiA+Pj4gKwlmY3ctPmhj aW5fZGVjb21wX21vZGUgPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+Pj4g KwkJCVJURV9CQkRFVl9MRFBDX0hBUlFfNkJJVF9DT01QUkVTU0lPTik7DQo+ID4+PiArCWZjdy0+ aGNvdXRfY29tcF9tb2RlID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPj4+ ICsJCQlSVEVfQkJERVZfTERQQ19IQVJRXzZCSVRfQ09NUFJFU1NJT04pOw0KPiA+Pj4gKwlmY3ct Pmxscl9wYWNrX21vZGUgPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+Pj4g KwkJCVJURV9CQkRFVl9MRFBDX0xMUl9DT01QUkVTU0lPTik7DQo+ID4+PiArCWhhcnFfaW5kZXgg PSBvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0IC8NCj4gPj4+ICsJCQlB Q0MxMDBfSEFSUV9PRkZTRVQ7DQo+ID4+PiArI2lmZGVmIEFDQzEwMF9FWFRfTUVNDQo+ID4+PiAr CS8qIExpbWl0IGNhc2VzIHdoZW4gSEFSUSBwcnVuaW5nIGlzIHZhbGlkICovDQo+ID4+PiArCWhh cnFfcHJ1biA9ICgob3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lm9mZnNldCAlDQo+ ID4+PiArCQkJQUNDMTAwX0hBUlFfT0ZGU0VUKSA9PSAwKSAmJg0KPiA+Pj4gKwkJCShvcC0+bGRw Y19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0IDw9DQo+ID4+IFVJTlQxNl9NQVgNCj4g Pj4+ICsJCQkqIEFDQzEwMF9IQVJRX09GRlNFVCk7DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArCWlm IChmY3ctPmhjaW5fZW4gPiAwKSB7DQo+ID4+PiArCQloYXJxX2luX2xlbmd0aCA9IG9wLQ0KPiA+ Pj4gbGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1dC5sZW5ndGg7DQo+ID4+PiArCQlpZiAoZmN3 LT5oY2luX2RlY29tcF9tb2RlID4gMCkNCj4gPj4+ICsJCQloYXJxX2luX2xlbmd0aCA9IGhhcnFf aW5fbGVuZ3RoICogOCAvIDY7DQo+ID4+PiArCQloYXJxX2luX2xlbmd0aCA9IFJURV9BTElHTiho YXJxX2luX2xlbmd0aCwgNjQpOw0KPiA+Pj4gKwkJaWYgKChoYXJxX2xheW91dFtoYXJxX2luZGV4 XS5vZmZzZXQgPiAwKSAmIGhhcnFfcHJ1bikgew0KPiA+Pj4gKwkJCXJ0ZV9iYmRldl9sb2dfZGVi dWcoIkhBUlEgSU4gb2Zmc2V0IHVuZXhwZWN0ZWQNCj4gPj4gZm9yIG5vd1xuIik7DQo+ID4+PiAr CQkJZmN3LT5oY2luX3NpemUwID0gaGFycV9sYXlvdXRbaGFycV9pbmRleF0uc2l6ZTA7DQo+ID4+ PiArCQkJZmN3LT5oY2luX29mZnNldCA9IGhhcnFfbGF5b3V0W2hhcnFfaW5kZXhdLm9mZnNldDsN Cj4gPj4+ICsJCQlmY3ctPmhjaW5fc2l6ZTEgPSBoYXJxX2luX2xlbmd0aCAtDQo+ID4+PiArCQkJ CQloYXJxX2xheW91dFtoYXJxX2luZGV4XS5vZmZzZXQ7DQo+ID4+PiArCQl9IGVsc2Ugew0KPiA+ Pj4gKwkJCWZjdy0+aGNpbl9zaXplMCA9IGhhcnFfaW5fbGVuZ3RoOw0KPiA+Pj4gKwkJCWZjdy0+ aGNpbl9vZmZzZXQgPSAwOw0KPiA+Pj4gKwkJCWZjdy0+aGNpbl9zaXplMSA9IDA7DQo+ID4+PiAr CQl9DQo+ID4+PiArCX0gZWxzZSB7DQo+ID4+PiArCQlmY3ctPmhjaW5fc2l6ZTAgPSAwOw0KPiA+ Pj4gKwkJZmN3LT5oY2luX29mZnNldCA9IDA7DQo+ID4+PiArCQlmY3ctPmhjaW5fc2l6ZTEgPSAw Ow0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWZjdy0+aXRtYXggPSBvcC0+bGRwY19kZWMu aXRlcl9tYXg7DQo+ID4+PiArCWZjdy0+aXRzdG9wID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5v cF9mbGFncywNCj4gPj4+ICsJCQlSVEVfQkJERVZfTERQQ19JVEVSQVRJT05fU1RPUF9FTkFCTEUp Ow0KPiA+Pj4gKwlmY3ctPnN5bmRfcHJlY29kZXIgPSBmY3ctPml0c3RvcDsNCj4gPj4+ICsJLyoN Cj4gPj4+ICsJICogVGhlc2UgYXJlIGFsbCBpbXBsaWNpdGx5IHNldA0KPiA+Pj4gKwkgKiBmY3ct PnN5bmRfcG9zdCA9IDA7DQo+ID4+PiArCSAqIGZjdy0+c29fZW4gPSAwOw0KPiA+Pj4gKwkgKiBm Y3ctPnNvX2J5cGFzc19ybSA9IDA7DQo+ID4+PiArCSAqIGZjdy0+c29fYnlwYXNzX2ludGx2ID0g MDsNCj4gPj4+ICsJICogZmN3LT5kZWNfY29udmxsciA9IDA7DQo+ID4+PiArCSAqIGZjdy0+aGNv dXRfY29udmxsciA9IDA7DQo+ID4+PiArCSAqIGZjdy0+aGNvdXRfc2l6ZTEgPSAwOw0KPiA+Pj4g KwkgKiBmY3ctPnNvX2l0ID0gMDsNCj4gPj4+ICsJICogZmN3LT5oY291dF9vZmZzZXQgPSAwOw0K PiA+Pj4gKwkgKiBmY3ctPm5lZ3N0b3BfdGggPSAwOw0KPiA+Pj4gKwkgKiBmY3ctPm5lZ3N0b3Bf aXQgPSAwOw0KPiA+Pj4gKwkgKiBmY3ctPm5lZ3N0b3BfZW4gPSAwOw0KPiA+Pj4gKwkgKiBmY3ct PmdhaW5faSA9IDE7DQo+ID4+PiArCSAqIGZjdy0+Z2Fpbl9oID0gMTsNCj4gPj4+ICsJICovDQo+ ID4+PiArCWlmIChmY3ctPmhjb3V0X2VuID4gMCkgew0KPiA+Pj4gKwkJcGFyaXR5X29mZnNldCA9 IChvcC0+bGRwY19kZWMuYmFzZWdyYXBoID09IDEgPyAyMCA6IDgpDQo+ID4+PiArCQkJKiBvcC0+ bGRwY19kZWMuel9jIC0gb3AtPmxkcGNfZGVjLm5fZmlsbGVyOw0KPiA+Pj4gKwkJazBfcCA9IChm Y3ctPmswID4gcGFyaXR5X29mZnNldCkgPw0KPiA+Pj4gKwkJCQlmY3ctPmswIC0gb3AtPmxkcGNf ZGVjLm5fZmlsbGVyIDogZmN3LT5rMDsNCj4gPj4+ICsJCW5jYl9wID0gZmN3LT5uY2IgLSBvcC0+ bGRwY19kZWMubl9maWxsZXI7DQo+ID4+PiArCQlsID0gazBfcCArIGZjdy0+cm1fZTsNCj4gPj4+ ICsJCWhhcnFfb3V0X2xlbmd0aCA9ICh1aW50MTZfdCkgZmN3LT5oY2luX3NpemUwOw0KPiA+Pj4g KwkJaGFycV9vdXRfbGVuZ3RoID0gUlRFX01JTihSVEVfTUFYKGhhcnFfb3V0X2xlbmd0aCwgbCks DQo+ID4+IG5jYl9wKTsNCj4gPj4+ICsJCWhhcnFfb3V0X2xlbmd0aCA9IChoYXJxX291dF9sZW5n dGggKyAweDNGKSAmIDB4RkZDMDsNCj4gPj4+ICsJCWlmICgoazBfcCA+IGZjdy0+aGNpbl9zaXpl MCArDQo+ID4+IEFDQzEwMF9IQVJRX09GRlNFVF9USFJFU0hPTEQpICYmDQo+ID4+PiArCQkJCWhh cnFfcHJ1bikgew0KPiA+Pj4gKwkJCWZjdy0+aGNvdXRfc2l6ZTAgPSAodWludDE2X3QpIGZjdy0+ aGNpbl9zaXplMDsNCj4gPj4+ICsJCQlmY3ctPmhjb3V0X29mZnNldCA9IGswX3AgJiAweEZGQzA7 DQo+ID4+PiArCQkJZmN3LT5oY291dF9zaXplMSA9IGhhcnFfb3V0X2xlbmd0aCAtIGZjdy0NCj4g Pj4+IGhjb3V0X29mZnNldDsNCj4gPj4+ICsJCX0gZWxzZSB7DQo+ID4+PiArCQkJZmN3LT5oY291 dF9zaXplMCA9IGhhcnFfb3V0X2xlbmd0aDsNCj4gPj4+ICsJCQlmY3ctPmhjb3V0X3NpemUxID0g MDsNCj4gPj4+ICsJCQlmY3ctPmhjb3V0X29mZnNldCA9IDA7DQo+ID4+PiArCQl9DQo+ID4+PiAr CQloYXJxX2xheW91dFtoYXJxX2luZGV4XS5vZmZzZXQgPSBmY3ctPmhjb3V0X29mZnNldDsNCj4g Pj4+ICsJCWhhcnFfbGF5b3V0W2hhcnFfaW5kZXhdLnNpemUwID0gZmN3LT5oY291dF9zaXplMDsN Cj4gPj4+ICsJfSBlbHNlIHsNCj4gPj4+ICsJCWZjdy0+aGNvdXRfc2l6ZTAgPSAwOw0KPiA+Pj4g KwkJZmN3LT5oY291dF9zaXplMSA9IDA7DQo+ID4+PiArCQlmY3ctPmhjb3V0X29mZnNldCA9IDA7 DQo+ID4+PiArCX0NCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICogRmls bHMgZGVzY3JpcHRvciB3aXRoIGRhdGEgcG9pbnRlcnMgb2Ygb25lIGJsb2NrIHR5cGUuDQo+ID4+ PiArICoNCj4gPj4+ICsgKiBAcGFyYW0gZGVzYw0KPiA+Pj4gKyAqICAgUG9pbnRlciB0byBETUEg ZGVzY3JpcHRvci4NCj4gPj4+ICsgKiBAcGFyYW0gaW5wdXQNCj4gPj4+ICsgKiAgIFBvaW50ZXIg dG8gcG9pbnRlciB0byBpbnB1dCBkYXRhIHdoaWNoIHdpbGwgYmUgZW5jb2RlZC4gSXQgY2FuIGJl DQo+ID4+IGNoYW5nZWQNCj4gPj4+ICsgKiAgIGFuZCBwb2ludHMgdG8gbmV4dCBzZWdtZW50IGlu IHNjYXR0ZXItZ2F0aGVyIGNhc2UuDQo+ID4+PiArICogQHBhcmFtIG9mZnNldA0KPiA+Pj4gKyAq ICAgSW5wdXQgb2Zmc2V0IGluIHJ0ZV9tYnVmIHN0cnVjdHVyZS4gSXQgaXMgdXNlZCBmb3IgY2Fs Y3VsYXRpbmcgdGhlIHBvaW50DQo+ID4+PiArICogICB3aGVyZSBkYXRhIGlzIHN0YXJ0aW5nLg0K PiA+Pj4gKyAqIEBwYXJhbSBjYl9sZW4NCj4gPj4+ICsgKiAgIExlbmd0aCBvZiBjdXJyZW50bHkg cHJvY2Vzc2VkIENvZGUgQmxvY2sNCj4gPj4+ICsgKiBAcGFyYW0gc2VnX3RvdGFsX2xlZnQNCj4g Pj4+ICsgKiAgIEl0IGluZGljYXRlcyBob3cgbWFueSBieXRlcyBzdGlsbCBsZWZ0IGluIHNlZ21l bnQgKG1idWYpIGZvciBmdXJ0aGVyDQo+ID4+PiArICogICBwcm9jZXNzaW5nLg0KPiA+Pj4gKyAq IEBwYXJhbSBvcF9mbGFncw0KPiA+Pj4gKyAqICAgU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZGV2 aWNlIGNhcGFiaWxpdGllcw0KPiA+Pj4gKyAqIEBwYXJhbSBuZXh0X3RyaXBsZXQNCj4gPj4+ICsg KiAgIEluZGV4IGZvciBBQ0MxMDAgRE1BIERlc2NyaXB0b3IgdHJpcGxldA0KPiA+Pj4gKyAqDQo+ ID4+PiArICogQHJldHVybg0KPiA+Pj4gKyAqICAgUmV0dXJucyBpbmRleCBvZiBuZXh0IHRyaXBs ZXQgb24gc3VjY2Vzcywgb3RoZXIgdmFsdWUgaWYgbGVuZ3RocyBvZg0KPiA+Pj4gKyAqICAgcGt0 IGFuZCBwcm9jZXNzZWQgY2IgZG8gbm90IG1hdGNoLg0KPiA+Pj4gKyAqDQo+ID4+PiArICovDQo+ ID4+PiArc3RhdGljIGlubGluZSBpbnQNCj4gPj4+ICthY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVf aW4oc3RydWN0IGFjYzEwMF9kbWFfcmVxX2Rlc2MgKmRlc2MsDQo+ID4+PiArCQlzdHJ1Y3QgcnRl X21idWYgKippbnB1dCwgdWludDMyX3QgKm9mZnNldCwgdWludDMyX3QgY2JfbGVuLA0KPiA+Pj4g KwkJdWludDMyX3QgKnNlZ190b3RhbF9sZWZ0LCBpbnQgbmV4dF90cmlwbGV0KQ0KPiA+Pj4gK3sN Cj4gPj4+ICsJdWludDMyX3QgcGFydF9sZW47DQo+ID4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqbSA9 ICppbnB1dDsNCj4gPj4+ICsNCj4gPj4+ICsJcGFydF9sZW4gPSAoKnNlZ190b3RhbF9sZWZ0IDwg Y2JfbGVuKSA/ICpzZWdfdG90YWxfbGVmdCA6IGNiX2xlbjsNCj4gPj4+ICsJY2JfbGVuIC09IHBh cnRfbGVuOw0KPiA+Pj4gKwkqc2VnX3RvdGFsX2xlZnQgLT0gcGFydF9sZW47DQo+ID4+PiArDQo+ ID4+PiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3MgPQ0KPiA+Pj4gKwkJ CXJ0ZV9wa3RtYnVmX2lvdmFfb2Zmc2V0KG0sICpvZmZzZXQpOw0KPiA+Pj4gKwlkZXNjLT5kYXRh X3B0cnNbbmV4dF90cmlwbGV0XS5ibGVuID0gcGFydF9sZW47DQo+ID4+PiArCWRlc2MtPmRhdGFf cHRyc1tuZXh0X3RyaXBsZXRdLmJsa2lkID0gQUNDMTAwX0RNQV9CTEtJRF9JTjsNCj4gPj4+ICsJ ZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0ubGFzdCA9IDA7DQo+ID4+PiArCWRlc2MtPmRh dGFfcHRyc1tuZXh0X3RyaXBsZXRdLmRtYV9leHQgPSAwOw0KPiA+Pj4gKwkqb2Zmc2V0ICs9IHBh cnRfbGVuOw0KPiA+Pj4gKwluZXh0X3RyaXBsZXQrKzsNCj4gPj4+ICsNCj4gPj4+ICsJd2hpbGUg KGNiX2xlbiA+IDApIHsNCj4gPj4gU2luY2UgY2JfbGVuIGlzIHVuc2lnbmVkLCBhIGJldHRlciBj aGVjayB3b3VsZCBiZQ0KPiA+Pg0KPiA+PiB3aGlsZSAoY2JfbGVuICE9IDApDQo+ID4gV2h5IHdv dWxkIHRoaXMgYmUgYmV0dGVyPw0KPiANCj4gSXQgaXMgdW5zaWduZWQgaXQgd2lsbCBuZXZlciBi ZSA8IDAuDQo+IA0KPiAhPSAwIHJlZmxlY3RzIHRoYXQuDQo+IA0KDQpJIHVuZGVyc3RhbmQgdGhh dCBidXQgSSBwZXJzb25uYWx5IHNlZSBub3QgdmFsdWFibGUgZGlmZmVyZW5jZS4NCg0KPiA+DQo+ ID4+PiArCQlpZiAobmV4dF90cmlwbGV0IDwgQUNDMTAwX0RNQV9NQVhfTlVNX1BPSU5URVJTICYm DQo+ID4+PiArCQkJCW0tPm5leHQgIT0gTlVMTCkgew0KPiA+Pj4gKw0KPiA+Pj4gKwkJCW0gPSBt LT5uZXh0Ow0KPiA+Pj4gKwkJCSpzZWdfdG90YWxfbGVmdCA9IHJ0ZV9wa3RtYnVmX2RhdGFfbGVu KG0pOw0KPiA+Pj4gKwkJCXBhcnRfbGVuID0gKCpzZWdfdG90YWxfbGVmdCA8IGNiX2xlbikgPw0K PiA+Pj4gKwkJCQkJKnNlZ190b3RhbF9sZWZ0IDoNCj4gPj4+ICsJCQkJCWNiX2xlbjsNCj4gPj4+ ICsJCQlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5hZGRyZXNzID0NCj4gPj4+ICsJCQkJ CXJ0ZV9wa3RtYnVmX2lvdmFfb2Zmc2V0KG0sIDApOw0KPiA+Pj4gKwkJCWRlc2MtPmRhdGFfcHRy c1tuZXh0X3RyaXBsZXRdLmJsZW4gPSBwYXJ0X2xlbjsNCj4gPj4+ICsJCQlkZXNjLT5kYXRhX3B0 cnNbbmV4dF90cmlwbGV0XS5ibGtpZCA9DQo+ID4+PiArCQkJCQlBQ0MxMDBfRE1BX0JMS0lEX0lO Ow0KPiA+Pj4gKwkJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmxhc3QgPSAwOw0KPiA+ Pj4gKwkJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmRtYV9leHQgPSAwOw0KPiA+Pj4g KwkJCWNiX2xlbiAtPSBwYXJ0X2xlbjsNCj4gPj4+ICsJCQkqc2VnX3RvdGFsX2xlZnQgLT0gcGFy dF9sZW47DQo+ID4+IHdoZW4gKnNlY190b3RhbF9sZWZ0IGdvZXMgdG8gemVybyBoZXJlLCB0aGVy ZSB3aWxsIGJlIGEgbG90IG9mIGl0ZXJhdGlvbnMNCj4gZG9pbmcNCj4gPj4gbm90aGluZy4NCj4g Pj4NCj4gPj4gc2hvdWxkIHN0b3AgZWFybHkuDQo+ID4gTm90IHJlYWxseSwgaXQgd291bGQgcGlj ayBuZXh0IG0gYW55d2F5IGFuZCBrZWVwIGFkZGluZyBidWZmZXIgZGVzY3JpcHRvcg0KPiBwb2lu dGVyLg0KPiBvaw0KPiA+DQo+ID4NCj4gPj4+ICsJCQkvKiBJbml0aWFsaXppbmcgb2Zmc2V0IGZv ciBuZXh0IHNlZ21lbnQgKG1idWYpICovDQo+ID4+PiArCQkJKm9mZnNldCA9IHBhcnRfbGVuOw0K PiA+Pj4gKwkJCW5leHRfdHJpcGxldCsrOw0KPiA+Pj4gKwkJfSBlbHNlIHsNCj4gPj4+ICsJCQly dGVfYmJkZXZfbG9nKEVSUiwNCj4gPj4+ICsJCQkJIlNvbWUgZGF0YSBzdGlsbCBsZWZ0IGZvciBw cm9jZXNzaW5nOiAiDQo+ID4+PiArCQkJCSJkYXRhX2xlZnQ6ICV1LCBuZXh0X3RyaXBsZXQ6ICV1 LCBuZXh0X21idWY6DQo+ID4+ICVwIiwNCj4gPj4+ICsJCQkJY2JfbGVuLCBuZXh0X3RyaXBsZXQs IG0tPm5leHQpOw0KPiA+Pj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4g Kwl9DQo+ID4+PiArCS8qIFN0b3JpbmcgbmV3IG1idWYgYXMgaXQgY291bGQgYmUgY2hhbmdlZCBp biBzY2F0dGVyLWdhdGhlciBjYXNlKi8NCj4gPj4+ICsJKmlucHV0ID0gbTsNCj4gPj4+ICsNCj4g Pj4+ICsJcmV0dXJuIG5leHRfdHJpcGxldDsNCj4gPj4gY2FsbGVycywgYWZ0ZXIgY2hlY2tpbmcs IGRlYyB0aGUgcmV0dXJuLg0KPiA+Pg0KPiA+PiBNYXliZSBjaGFuZ2UgcmV0dXJuIHRvIG5leHRf dHJpcGxldC0tIGFuZCBzYXZlIHRoZSBjYWxsZXJzIGZyb20gZG9pbmcgaXQuDQo+ID4gSSBtaXNz IHlvdXIgcG9pbnQNCj4gDQo+IExvb2tpbmcgYXQgaG93IHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVu Y3Rpb24gdXNlIHRoZSByZXR1cm4sDQo+IA0KPiBhIGZhaXIgbnVtYmVyIGRlY3JlbWVudCBpdCB0 byBnZXQgdG8gdGhlIGN1cnJlbnRfdHJpcGxldC4NCj4gDQo+IFNvIG1heWJlIHJldHVybmluZyB0 aGUgY3VycmVudF90cmlwbGV0IHdvdWxkIGJlIGJldHRlci4NCj4gDQo+IFNvbWV0aGluZyB0byB0 aGluayBhYm91dCwgbm90IHJlcXVpcmVkLg0KDQpPSyBJIHNlZSwgeW91IG1lYW4gcmVmZXJpbmcg dG8gcHJldmlvdXMgZGVzY3JpcHRvciBhcyAobmV4dCAtIDEpLg0KSSBiZWxpZXZlIGl0IGlzIG1v cmUgY29uc2lzdGFudCB0aGlzIHdheSB3aGVuIG5leHRfdHJpcGxldCBpcyBsaXR0ZXJhbGx5IGFs d2F5cyB0aGUgbmV4dF90cmlwbGV0IGFuZCB1c2VkIGFzIGlzLiANCg0KPiANCj4gPj4+ICt9DQo+ ID4+PiArDQo+ID4+PiArLyogRmlsbHMgZGVzY3JpcHRvciB3aXRoIGRhdGEgcG9pbnRlcnMgb2Yg b25lIGJsb2NrIHR5cGUuDQo+ID4+PiArICogUmV0dXJucyBpbmRleCBvZiBuZXh0IHRyaXBsZXQg b24gc3VjY2Vzcywgb3RoZXIgdmFsdWUgaWYgbGVuZ3RocyBvZg0KPiA+Pj4gKyAqIG91dHB1dCBk YXRhIGFuZCBwcm9jZXNzZWQgbWJ1ZiBkbyBub3QgbWF0Y2guDQo+ID4+PiArICovDQo+ID4+PiAr c3RhdGljIGlubGluZSBpbnQNCj4gPj4+ICthY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVfb3V0KHN0 cnVjdCBhY2MxMDBfZG1hX3JlcV9kZXNjICpkZXNjLA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9tYnVm ICpvdXRwdXQsIHVpbnQzMl90IG91dF9vZmZzZXQsDQo+ID4+PiArCQl1aW50MzJfdCBvdXRwdXRf bGVuLCBpbnQgbmV4dF90cmlwbGV0LCBpbnQgYmxrX2lkKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJZGVz Yy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4+PiArCQkJcnRlX3BrdG1i dWZfaW92YV9vZmZzZXQob3V0cHV0LCBvdXRfb2Zmc2V0KTsNCj4gPj4+ICsJZGVzYy0+ZGF0YV9w dHJzW25leHRfdHJpcGxldF0uYmxlbiA9IG91dHB1dF9sZW47DQo+ID4+PiArCWRlc2MtPmRhdGFf cHRyc1tuZXh0X3RyaXBsZXRdLmJsa2lkID0gYmxrX2lkOw0KPiA+Pj4gKwlkZXNjLT5kYXRhX3B0 cnNbbmV4dF90cmlwbGV0XS5sYXN0ID0gMDsNCj4gPj4+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRf dHJpcGxldF0uZG1hX2V4dCA9IDA7DQo+ID4+PiArCW5leHRfdHJpcGxldCsrOw0KPiA+PiBDYWxs ZXJzIGNoZWNrIHJldHVybiBpcyA8IDAsIGxpa2UgYWJvdmUgYnV0IHRoZXJlIGlzIG5vIHNpbWls YXIgbG9naWMgdG8NCj4gPj4NCj4gPj4gY2hlY2sgdGhlIGJvdW5kcyBvZiBuZXh0X3RyaXBsZXQg dG8gcmV0dXJuIC1FSU5WQUwNCj4gPj4NCj4gPj4gc28gYWRkIHRoaXMgY2hlY2sgaGVyZSBvciBy ZW1vdmUgdGhlIGlzIDwgMCBjaGVja3MgYnkgdGhlIGNhbGxlcnMuDQo+ID4+DQo+ID4gZmFpciBl bm91Z2ggdGhhbmtzLg0KPiA+DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBuZXh0X3RyaXBsZXQ7 DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ID4+PiArYWNj MTAwX2RtYV9kZXNjX2xlX2ZpbGwoc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wLA0KPiA+Pj4g KwkJc3RydWN0IGFjYzEwMF9kbWFfcmVxX2Rlc2MgKmRlc2MsIHN0cnVjdCBydGVfbWJ1ZiAqKmlu cHV0LA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9tYnVmICpvdXRwdXQsIHVpbnQzMl90ICppbl9vZmZz ZXQsDQo+ID4+PiArCQl1aW50MzJfdCAqb3V0X29mZnNldCwgdWludDMyX3QgKm91dF9sZW5ndGgs DQo+ID4+PiArCQl1aW50MzJfdCAqbWJ1Zl90b3RhbF9sZWZ0LCB1aW50MzJfdCAqc2VnX3RvdGFs X2xlZnQpDQo+ID4+PiArew0KPiA+Pj4gKwlpbnQgbmV4dF90cmlwbGV0ID0gMTsgLyogRkNXIGFs cmVhZHkgZG9uZSAqLw0KPiA+Pj4gKwl1aW50MTZfdCBLLCBpbl9sZW5ndGhfaW5fYml0cywgaW5f bGVuZ3RoX2luX2J5dGVzOw0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX2JiZGV2X29wX2xkcGNfZW5jICpl bmMgPSAmb3AtPmxkcGNfZW5jOw0KPiA+Pj4gKw0KPiA+Pj4gKwlkZXNjLT53b3JkMCA9IEFDQzEw MF9ETUFfREVTQ19UWVBFOw0KPiA+Pj4gKwlkZXNjLT53b3JkMSA9IDA7IC8qKjwgVGltZXN0YW1w IGNvdWxkIGJlIGRpc2FibGVkICovDQo+ID4+PiArCWRlc2MtPndvcmQyID0gMDsNCj4gPj4+ICsJ ZGVzYy0+d29yZDMgPSAwOw0KPiA+Pj4gKwlkZXNjLT5udW1DQnMgPSAxOw0KPiA+Pj4gKw0KPiA+ Pj4gKwlLID0gKGVuYy0+YmFzZWdyYXBoID09IDEgPyAyMiA6IDEwKSAqIGVuYy0+el9jOw0KPiA+ Pj4gKwlpbl9sZW5ndGhfaW5fYml0cyA9IEsgLSBlbmMtPm5fZmlsbGVyOw0KPiA+PiBjYW4gdGhp cyBvdmVyZmxvdyA/IGVuYy0+bl9maWxsZXIgPiBLID8NCj4gPiBJIHdvdWxkIG5vdCBhZGQgc3Vj aCBjaGVja3MgaW4gdGhlIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24uIEZvciB2YWxpZCBzY2VuYXJp bw0KPiBpdCBjYW4ndC4NCj4gPiBJdCBjb3VsZCBiZSBhZGRlZCB0byB0aGUgdmFsaWRhdGVfbGRw Y19kZWNfb3AoKSB3aGljaCBpcyBvbmx5IHJ1biBpbiBkZWJ1Zw0KPiBtb2RlLg0KPiA+DQo+ID4+ PiArCWlmICgoZW5jLT5vcF9mbGFncyAmIFJURV9CQkRFVl9MRFBDX0NSQ18yNEFfQVRUQUNIKSB8 fA0KPiA+Pj4gKwkJCShlbmMtPm9wX2ZsYWdzICYNCj4gPj4gUlRFX0JCREVWX0xEUENfQ1JDXzI0 Ql9BVFRBQ0gpKQ0KPiA+Pj4gKwkJaW5fbGVuZ3RoX2luX2JpdHMgLT0gMjQ7DQo+ID4+PiArCWlu X2xlbmd0aF9pbl9ieXRlcyA9IGluX2xlbmd0aF9pbl9iaXRzID4+IDM7DQo+ID4+PiArDQo+ID4+ PiArCWlmICh1bmxpa2VseSgoKm1idWZfdG90YWxfbGVmdCA9PSAwKSB8fA0KPiA+PiBUaGlzIGNo ZWNrIGlzIGNvdmVyZWQgYnkgdGhlIG5leHQgYW5kIGNhbiBiZSByZW1vdmVkLg0KPiA+IE5vdCBu ZWNlc3NhcmFseSwgd291bGQga2VlcCBhcyBpcy4NCj4gb25seSBpZiBpbl9sZW5ndGhfaW5fYnl0 ZXMgd2FzIG5lZ2F0aXZlDQoNCnllcywgd291bGQga2VlcCBhcyBpcyBJIHRoaW5rLiANCg0KPiA+ DQo+ID4+PiArCQkJKCptYnVmX3RvdGFsX2xlZnQgPCBpbl9sZW5ndGhfaW5fYnl0ZXMpKSkgew0K PiA+Pj4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4+PiArCQkJCSJNaXNtYXRjaCBiZXR3ZWVu IG1idWYgbGVuZ3RoIGFuZA0KPiA+PiBpbmNsdWRlZCBDQiBzaXplczogbWJ1ZiBsZW4gJXUsIGNi IGxlbiAldSIsDQo+ID4+PiArCQkJCSptYnVmX3RvdGFsX2xlZnQsIGluX2xlbmd0aF9pbl9ieXRl cyk7DQo+ID4+PiArCQlyZXR1cm4gLTE7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJbmV4 dF90cmlwbGV0ID0gYWNjMTAwX2RtYV9maWxsX2Jsa190eXBlX2luKGRlc2MsIGlucHV0LCBpbl9v ZmZzZXQsDQo+ID4+PiArCQkJaW5fbGVuZ3RoX2luX2J5dGVzLA0KPiA+Pj4gKwkJCXNlZ190b3Rh bF9sZWZ0LCBuZXh0X3RyaXBsZXQpOw0KPiA+Pj4gKwlpZiAodW5saWtlbHkobmV4dF90cmlwbGV0 IDwgMCkpIHsNCj4gPj4+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+Pj4gKwkJCQkiTWlzbWF0 Y2ggYmV0d2VlbiBkYXRhIHRvIHByb2Nlc3MgYW5kDQo+ID4+IG1idWYgZGF0YSBsZW5ndGggaW4g YmJkZXZfb3A6ICVwIiwNCj4gPj4+ICsJCQkJb3ApOw0KPiA+Pj4gKwkJcmV0dXJuIC0xOw0KPiA+ Pj4gKwl9DQo+ID4+PiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXQgLSAxXS5sYXN0ID0g MTsNCj4gPj4+ICsJZGVzYy0+bTJkbGVuID0gbmV4dF90cmlwbGV0Ow0KPiA+Pj4gKwkqYw0KPiA+ PiBVcGRhdGluZyBvdXRwdXQgcG9pbnRlcnMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSB0 aGUgY2FsbCBpcyBrbm93bg0KPiB0bw0KPiA+PiBiZSBzdWNjZXNzZnVsLg0KPiA+Pg0KPiA+PiBP dGhlcndpc2UgY2FsbGVyIGlzIGxlZnQgaW4gYSBiYWQsIHVua25vd24gc3RhdGUuDQo+ID4gV2Ug YWxyZWFkeSBoYWQgdG8gdG91Y2ggdGhlbSBieSB0aGF0IHBvaW50Lg0KPiB1Z2guDQoNCnlvdSBo dXJ0IG15IGZlZWxpbmdzLiBJIHRoaW5rIGl0IGlzIG9rYXkgZ2l2ZW4gd2UgaGF2ZSB0byB3cml0 ZSBvbiB0aGUgZmx5Lg0KQXQgc3lzdGVtIGxldmVsIHRoaXMgcGlubmVkIGRvd24gbWVtb3J5IGNh bm5vdCBiZSB1c2VkIGlmIG5vIHByb2Nlc3Npbmcgd2FzIGRvbmUuDQoNCj4gPg0KPiA+Pj4gKw0K PiA+Pj4gKwkvKiBTZXQgb3V0cHV0IGxlbmd0aCAqLw0KPiA+Pj4gKwkvKiBJbnRlZ2VyIHJvdW5k IHVwIGRpdmlzaW9uIGJ5IDggKi8NCj4gPj4+ICsJKm91dF9sZW5ndGggPSAoZW5jLT5jYl9wYXJh bXMuZSArIDcpID4+IDM7DQo+ID4+PiArDQo+ID4+PiArCW5leHRfdHJpcGxldCA9IGFjYzEwMF9k bWFfZmlsbF9ibGtfdHlwZV9vdXQoZGVzYywgb3V0cHV0LA0KPiA+PiAqb3V0X29mZnNldCwNCj4g Pj4+ICsJCQkqb3V0X2xlbmd0aCwgbmV4dF90cmlwbGV0LA0KPiA+PiBBQ0MxMDBfRE1BX0JMS0lE X09VVF9FTkMpOw0KPiA+Pj4gKwlpZiAodW5saWtlbHkobmV4dF90cmlwbGV0IDwgMCkpIHsNCj4g Pj4+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+Pj4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBk YXRhIHRvIHByb2Nlc3MgYW5kDQo+ID4+IG1idWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVw IiwNCj4gPj4+ICsJCQkJb3ApOw0KPiA+Pj4gKwkJcmV0dXJuIC0xOw0KPiA+Pj4gKwl9DQo+ID4+ PiArCW9wLT5sZHBjX2VuYy5vdXRwdXQubGVuZ3RoICs9ICpvdXRfbGVuZ3RoOw0KPiA+Pj4gKwkq b3V0X29mZnNldCArPSAqb3V0X2xlbmd0aDsNCj4gPj4+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRf dHJpcGxldCAtIDFdLmxhc3QgPSAxOw0KPiA+Pj4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlw bGV0IC0gMV0uZG1hX2V4dCA9IDA7DQo+ID4+PiArCWRlc2MtPmQybWxlbiA9IG5leHRfdHJpcGxl dCAtIGRlc2MtPm0yZGxlbjsNCj4gPj4+ICsNCj4gPj4+ICsJZGVzYy0+b3BfYWRkciA9IG9wOw0K PiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gMDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3Rh dGljIGlubGluZSBpbnQNCj4gPj4+ICthY2MxMDBfZG1hX2Rlc2NfbGRfZmlsbChzdHJ1Y3QgcnRl X2JiZGV2X2RlY19vcCAqb3AsDQo+ID4+PiArCQlzdHJ1Y3QgYWNjMTAwX2RtYV9yZXFfZGVzYyAq ZGVzYywNCj4gPj4+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKmlucHV0LCBzdHJ1Y3QgcnRlX21idWYg Kmhfb3V0cHV0LA0KPiA+Pj4gKwkJdWludDMyX3QgKmluX29mZnNldCwgdWludDMyX3QgKmhfb3V0 X29mZnNldCwNCj4gPj4+ICsJCXVpbnQzMl90ICpoX291dF9sZW5ndGgsIHVpbnQzMl90ICptYnVm X3RvdGFsX2xlZnQsDQo+ID4+PiArCQl1aW50MzJfdCAqc2VnX3RvdGFsX2xlZnQsDQo+ID4+PiAr CQlzdHJ1Y3QgYWNjMTAwX2Zjd19sZCAqZmN3KQ0KPiA+Pj4gK3sNCj4gPj4+ICsJc3RydWN0IHJ0 ZV9iYmRldl9vcF9sZHBjX2RlYyAqZGVjID0gJm9wLT5sZHBjX2RlYzsNCj4gPj4+ICsJaW50IG5l eHRfdHJpcGxldCA9IDE7IC8qIEZDVyBhbHJlYWR5IGRvbmUgKi8NCj4gPj4+ICsJdWludDMyX3Qg aW5wdXRfbGVuZ3RoOw0KPiA+Pj4gKwl1aW50MTZfdCBvdXRwdXRfbGVuZ3RoLCBjcmMyNF9vdmVy bGFwID0gMDsNCj4gPj4+ICsJdWludDE2X3Qgc3lzX2NvbHMsIEssIGhfcF9zaXplLCBoX25wX3Np emU7DQo+ID4+PiArCWJvb2wgaF9jb21wID0gY2hlY2tfYml0KGRlYy0+b3BfZmxhZ3MsDQo+ID4+ PiArCQkJUlRFX0JCREVWX0xEUENfSEFSUV82QklUX0NPTVBSRVNTSU9OKTsNCj4gPj4+ICsNCj4g Pj4+ICsJZGVzYy0+d29yZDAgPSBBQ0MxMDBfRE1BX0RFU0NfVFlQRTsNCj4gPj4+ICsJZGVzYy0+ d29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBiZSBkaXNhYmxlZCAqLw0KPiA+Pj4gKwlk ZXNjLT53b3JkMiA9IDA7DQo+ID4+PiArCWRlc2MtPndvcmQzID0gMDsNCj4gPj4+ICsJZGVzYy0+ bnVtQ0JzID0gMTsNCj4gPj4gVGhpcyBzZWVtcyB0byBiZSBhIGNvbW1vbiBzZXR1cCBsb2dpYywg bWF5YmUgdXNlIGEgbWFjcm8gb3IgaW5saW5lDQo+ID4+IGZ1bmN0aW9uLg0KPiA+IGZhaXIgZW5v dWdoDQo+ID4NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3Bf ZmxhZ3MsDQo+ID4+PiArCQkJUlRFX0JCREVWX0xEUENfQ1JDX1RZUEVfMjRCX0RST1ApKQ0KPiA+ Pj4gKwkJY3JjMjRfb3ZlcmxhcCA9IDI0Ow0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDb21wdXRlIHNv bWUgTERQQyBCRyBsZW5ndGhzICovDQo+ID4+PiArCWlucHV0X2xlbmd0aCA9IGRlYy0+Y2JfcGFy YW1zLmU7DQo+ID4+PiArCWlmIChjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ Pj4gKwkJCVJURV9CQkRFVl9MRFBDX0xMUl9DT01QUkVTU0lPTikpDQo+ID4+PiArCQlpbnB1dF9s ZW5ndGggPSAoaW5wdXRfbGVuZ3RoICogMyArIDMpIC8gNDsNCj4gPj4+ICsJc3lzX2NvbHMgPSAo ZGVjLT5iYXNlZ3JhcGggPT0gMSkgPyAyMiA6IDEwOw0KPiA+Pj4gKwlLID0gc3lzX2NvbHMgKiBk ZWMtPnpfYzsNCj4gPj4+ICsJb3V0cHV0X2xlbmd0aCA9IEsgLSBkZWMtPm5fZmlsbGVyIC0gY3Jj MjRfb3ZlcmxhcDsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHVubGlrZWx5KCgqbWJ1Zl90b3RhbF9s ZWZ0ID09IDApIHx8DQo+ID4+IHNpbWlsYXIgdG8gYWJvdmUsIHRoaXMgY2hlY2sgY2FuIGJlIHJl bW92ZWQuDQo+ID4gc2FtZSBjb21tZW50DQo+ID4NCj4gPj4+ICsJCQkoKm1idWZfdG90YWxfbGVm dCA8IGlucHV0X2xlbmd0aCkpKSB7DQo+ID4+PiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPj4+ ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gbWJ1ZiBsZW5ndGggYW5kDQo+ID4+IGluY2x1ZGVkIENC IHNpemVzOiBtYnVmIGxlbiAldSwgY2IgbGVuICV1IiwNCj4gPj4+ICsJCQkJKm1idWZfdG90YWxf bGVmdCwgaW5wdXRfbGVuZ3RoKTsNCj4gPj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsJfQ0KPiA+ Pj4gKw0KPiA+Pj4gKwluZXh0X3RyaXBsZXQgPSBhY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVfaW4o ZGVzYywgaW5wdXQsDQo+ID4+PiArCQkJaW5fb2Zmc2V0LCBpbnB1dF9sZW5ndGgsDQo+ID4+PiAr CQkJc2VnX3RvdGFsX2xlZnQsIG5leHRfdHJpcGxldCk7DQo+ID4+PiArDQo+ID4+PiArCWlmICh1 bmxpa2VseShuZXh0X3RyaXBsZXQgPCAwKSkgew0KPiA+Pj4gKwkJcnRlX2JiZGV2X2xvZyhFUlIs DQo+ID4+PiArCQkJCSJNaXNtYXRjaCBiZXR3ZWVuIGRhdGEgdG8gcHJvY2VzcyBhbmQNCj4gPj4g bWJ1ZiBkYXRhIGxlbmd0aCBpbiBiYmRldl9vcDogJXAiLA0KPiA+Pj4gKwkJCQlvcCk7DQo+ID4+ PiArCQlyZXR1cm4gLTE7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGNoZWNrX2Jp dChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4+PiArDQo+ID4+IAlSVEVfQkJERVZfTERQQ19I UV9DT01CSU5FX0lOX0VOQUJMRSkpIHsNCj4gPj4+ICsJCWhfcF9zaXplID0gZmN3LT5oY2luX3Np emUwICsgZmN3LT5oY2luX3NpemUxOw0KPiA+Pj4gKwkJaWYgKGhfY29tcCkNCj4gPj4+ICsJCQlo X3Bfc2l6ZSA9IChoX3Bfc2l6ZSAqIDMgKyAzKSAvIDQ7DQo+ID4+PiArCQlkZXNjLT5kYXRhX3B0 cnNbbmV4dF90cmlwbGV0XS5hZGRyZXNzID0NCj4gPj4+ICsJCQkJZGVjLT5oYXJxX2NvbWJpbmVk X2lucHV0Lm9mZnNldDsNCj4gPj4+ICsJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmJs ZW4gPSBoX3Bfc2l6ZTsNCj4gPj4+ICsJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmJs a2lkID0NCj4gPj4gQUNDMTAwX0RNQV9CTEtJRF9JTl9IQVJROw0KPiA+Pj4gKwkJZGVzYy0+ZGF0 YV9wdHJzW25leHRfdHJpcGxldF0uZG1hX2V4dCA9IDE7DQo+ID4+PiArI2lmbmRlZiBBQ0MxMDBf RVhUX01FTQ0KPiA+Pj4gKwkJYWNjMTAwX2RtYV9maWxsX2Jsa190eXBlX291dCgNCj4gPj4+ICsJ CQkJZGVzYywNCj4gPj4+ICsJCQkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfaW5wdXQuZGF0 YSwNCj4gPj4+ICsJCQkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfaW5wdXQub2Zmc2V0LA0K PiA+Pj4gKwkJCQloX3Bfc2l6ZSwNCj4gPj4+ICsJCQkJbmV4dF90cmlwbGV0LA0KPiA+Pj4gKwkJ CQlBQ0MxMDBfRE1BX0JMS0lEX0lOX0hBUlEpOw0KPiA+Pj4gKyNlbmRpZg0KPiA+Pj4gKwkJbmV4 dF90cmlwbGV0Kys7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJZGVzYy0+ZGF0YV9wdHJz W25leHRfdHJpcGxldCAtIDFdLmxhc3QgPSAxOw0KPiA+Pj4gKwlkZXNjLT5tMmRsZW4gPSBuZXh0 X3RyaXBsZXQ7DQo+ID4+PiArCSptYnVmX3RvdGFsX2xlZnQgLT0gaW5wdXRfbGVuZ3RoOw0KPiA+ Pj4gKw0KPiA+Pj4gKwluZXh0X3RyaXBsZXQgPSBhY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVfb3V0 KGRlc2MsIGhfb3V0cHV0LA0KPiA+Pj4gKwkJCSpoX291dF9vZmZzZXQsIG91dHB1dF9sZW5ndGgg Pj4gMywgbmV4dF90cmlwbGV0LA0KPiA+Pj4gKwkJCUFDQzEwMF9ETUFfQkxLSURfT1VUX0hBUkQp Ow0KPiA+Pj4gKwlpZiAodW5saWtlbHkobmV4dF90cmlwbGV0IDwgMCkpIHsNCj4gPj4+ICsJCXJ0 ZV9iYmRldl9sb2coRVJSLA0KPiA+Pj4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRhIHRvIHBy b2Nlc3MgYW5kDQo+ID4+IG1idWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwNCj4gPj4+ ICsJCQkJb3ApOw0KPiA+Pj4gKwkJcmV0dXJuIC0xOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+ PiArCWlmIChjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+Pj4gKw0KPiA+PiAJ UlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9PVVRfRU5BQkxFKSkgew0KPiA+Pj4gKwkJLyogUHJ1 bmVkIHNpemUgb2YgdGhlIEhBUlEgKi8NCj4gPj4+ICsJCWhfcF9zaXplID0gZmN3LT5oY291dF9z aXplMCArIGZjdy0+aGNvdXRfc2l6ZTE7DQo+ID4+PiArCQkvKiBOb24tUHJ1bmVkIHNpemUgb2Yg dGhlIEhBUlEgKi8NCj4gPj4+ICsJCWhfbnBfc2l6ZSA9IGZjdy0+aGNvdXRfb2Zmc2V0ID4gMCA/ DQo+ID4+PiArCQkJCWZjdy0+aGNvdXRfb2Zmc2V0ICsgZmN3LT5oY291dF9zaXplMSA6DQo+ID4+ PiArCQkJCWhfcF9zaXplOw0KPiA+Pj4gKwkJaWYgKGhfY29tcCkgew0KPiA+Pj4gKwkJCWhfbnBf c2l6ZSA9IChoX25wX3NpemUgKiAzICsgMykgLyA0Ow0KPiA+Pj4gKwkJCWhfcF9zaXplID0gKGhf cF9zaXplICogMyArIDMpIC8gNDsNCj4gPj4gKiA0IC0xICkgLyA0DQo+ID4+DQo+ID4+IG1heSBw cm9kdWNlIGJldHRlciBhc3NlbWJseS4NCj4gPiB0aGF0IGlzIG5vdCB0aGUgc2FtZSBhcml0aG1l dGljDQo+ID8NCg0KKHggKiAzICsgMyApIC8gNCAhPSAoeCAqIDQgLSAxICkgLyA0IA0KbGV0IG1l IGtub3cgaWYgYW55IGRvdWJ0DQoNCj4gPj4+ICsJCX0NCj4gPj4+ICsJCWRlYy0+aGFycV9jb21i aW5lZF9vdXRwdXQubGVuZ3RoID0gaF9ucF9zaXplOw0KPiA+Pj4gKwkJZGVzYy0+ZGF0YV9wdHJz W25leHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4+PiArCQkJCWRlYy0+aGFycV9jb21iaW5lZF9v dXRwdXQub2Zmc2V0Ow0KPiA+Pj4gKwkJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uYmxl biA9IGhfcF9zaXplOw0KPiA+Pj4gKwkJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uYmxr aWQgPQ0KPiA+PiBBQ0MxMDBfRE1BX0JMS0lEX09VVF9IQVJROw0KPiA+Pj4gKwkJZGVzYy0+ZGF0 YV9wdHJzW25leHRfdHJpcGxldF0uZG1hX2V4dCA9IDE7DQo+ID4+PiArI2lmbmRlZiBBQ0MxMDBf RVhUX01FTQ0KPiA+Pj4gKwkJYWNjMTAwX2RtYV9maWxsX2Jsa190eXBlX291dCgNCj4gPj4+ICsJ CQkJZGVzYywNCj4gPj4+ICsJCQkJZGVjLT5oYXJxX2NvbWJpbmVkX291dHB1dC5kYXRhLA0KPiA+ Pj4gKwkJCQlkZWMtPmhhcnFfY29tYmluZWRfb3V0cHV0Lm9mZnNldCwNCj4gPj4+ICsJCQkJaF9w X3NpemUsDQo+ID4+PiArCQkJCW5leHRfdHJpcGxldCwNCj4gPj4+ICsJCQkJQUNDMTAwX0RNQV9C TEtJRF9PVVRfSEFSUSk7DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArCQluZXh0X3RyaXBsZXQrKzsN Cj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkqaF9vdXRfbGVuZ3RoID0gb3V0cHV0X2xlbmd0 aCA+PiAzOw0KPiA+Pj4gKwlkZWMtPmhhcmRfb3V0cHV0Lmxlbmd0aCArPSAqaF9vdXRfbGVuZ3Ro Ow0KPiA+Pj4gKwkqaF9vdXRfb2Zmc2V0ICs9ICpoX291dF9sZW5ndGg7DQo+ID4+PiArCWRlc2Mt PmRhdGFfcHRyc1tuZXh0X3RyaXBsZXQgLSAxXS5sYXN0ID0gMTsNCj4gPj4+ICsJZGVzYy0+ZDJt bGVuID0gbmV4dF90cmlwbGV0IC0gZGVzYy0+bTJkbGVuOw0KPiA+Pj4gKw0KPiA+Pj4gKwlkZXNj LT5vcF9hZGRyID0gb3A7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiAwOw0KPiA+Pj4gK30NCj4g Pj4+ICsNCj4gPj4+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPj4+ICthY2MxMDBfZG1hX2Rlc2Nf bGRfdXBkYXRlKHN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPj4+ICsJCXN0cnVjdCBh Y2MxMDBfZG1hX3JlcV9kZXNjICpkZXNjLA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9tYnVmICppbnB1 dCwgc3RydWN0IHJ0ZV9tYnVmICpoX291dHB1dCwNCj4gPj4+ICsJCXVpbnQzMl90ICppbl9vZmZz ZXQsIHVpbnQzMl90ICpoX291dF9vZmZzZXQsDQo+ID4+PiArCQl1aW50MzJfdCAqaF9vdXRfbGVu Z3RoLA0KPiA+Pj4gKwkJdW5pb24gYWNjMTAwX2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5b3V0 KQ0KPiA+Pj4gK3sNCj4gPj4+ICsJaW50IG5leHRfdHJpcGxldCA9IDE7IC8qIEZDVyBhbHJlYWR5 IGRvbmUgKi8NCj4gPj4+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uYWRkcmVzcyA9 DQo+ID4+PiArCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQoaW5wdXQsICppbl9vZmZzZXQpOw0K PiA+Pj4gKwluZXh0X3RyaXBsZXQrKzsNCj4gPj4gTm8gb3ZlcmZsb3cgY2hlY2tzIG9uIG5leHRf dHJpcGxldA0KPiA+Pg0KPiA+PiBUaGlzIGlzIGEgZ2VuZXJhbCBwcm9ibGVtLg0KPiA+IEkgZG9u dCBzZWUgdGhlIG92ZXJmbG93IHJpc2suDQo+IA0KPiBBIGxvdCBvZiBwbGFjZXMgaW5jcmVtZW50 cyB3aXRob3V0IGNoZWNraW5nIHRoZSBib3VuZHMuDQo+IA0KPiBUbyBtZSwgaXQgc2VlbXMgbGlr ZSB3ZSBhcmUgZ2V0dGluZyBsdWNreSB0aGF0IGRhdGFfcHRyc1tdIGlzIGJpZyBlbm91Z2guDQoN CkkgZG9udCB0aGluayBzby4gVGhleSBhcmUgYm91bmRlZCBieSBkZXNpZ24sIGFkZGl0aW9uYWx5 IHRoaXMgd291bGQgYmUgY2F1Z2h0IGluDQphbmFseXNpcyB0b29sLiANCg0KPiANCj4gPg0KPiA+ Pj4gKw0KPiA+Pj4gKwlpZiAoY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPj4+ ICsNCj4gPj4gCVJURV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVfSU5fRU5BQkxFKSkgew0KPiA+Pj4g KwkJc3RydWN0IHJ0ZV9iYmRldl9vcF9kYXRhIGhpID0gb3AtDQo+ID4+PiBsZHBjX2RlYy5oYXJx X2NvbWJpbmVkX2lucHV0Ow0KPiA+Pj4gKwkJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0u YWRkcmVzcyA9IGhpLm9mZnNldDsNCj4gPj4+ICsjaWZuZGVmIEFDQzEwMF9FWFRfTUVNDQo+ID4+ PiArCQlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5hZGRyZXNzID0NCj4gPj4+ICsJCQkJ cnRlX3BrdG1idWZfaW92YV9vZmZzZXQoaGkuZGF0YSwgaGkub2Zmc2V0KTsNCj4gPj4+ICsjZW5k aWYNCj4gPj4+ICsJCW5leHRfdHJpcGxldCsrOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiAr CWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3MgPQ0KPiA+Pj4gKwkJCXJ0ZV9w a3RtYnVmX2lvdmFfb2Zmc2V0KGhfb3V0cHV0LCAqaF9vdXRfb2Zmc2V0KTsNCj4gPj4+ICsJKmhf b3V0X2xlbmd0aCA9IGRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmJsZW47DQo+ID4+PiAr CW5leHRfdHJpcGxldCsrOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAoY2hlY2tfYml0KG9wLT5sZHBj X2RlYy5vcF9mbGFncywNCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVf T1VUX0VOQUJMRSkpIHsNCj4gPj4+ICsJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFk ZHJlc3MgPQ0KPiA+Pj4gKwkJCQlvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQub2Zm c2V0Ow0KPiA+Pj4gKwkJLyogQWRqdXN0IGJhc2VkIG9uIHByZXZpb3VzIG9wZXJhdGlvbiAqLw0K PiA+Pj4gKwkJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKnByZXZfb3AgPSBkZXNjLT5vcF9hZGRy Ow0KPiA+Pj4gKwkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lmxlbmd0aCA9DQo+ ID4+PiArCQkJCXByZXZfb3AtDQo+ID4+PiBsZHBjX2RlYy5oYXJxX2NvbWJpbmVkX291dHB1dC5s ZW5ndGg7DQo+ID4+PiArCQlpbnQxNl90IGhxX2lkeCA9IG9wLQ0KPiA+Pj4gbGRwY19kZWMuaGFy cV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0IC8NCj4gPj4+ICsJCQkJQUNDMTAwX0hBUlFfT0ZGU0VU Ow0KPiA+Pj4gKwkJaW50MTZfdCBwcmV2X2hxX2lkeCA9DQo+ID4+PiArCQkJCXByZXZfb3AtDQo+ ID4+PiBsZHBjX2RlYy5oYXJxX2NvbWJpbmVkX291dHB1dC5vZmZzZXQNCj4gPj4+ICsJCQkJLyBB Q0MxMDBfSEFSUV9PRkZTRVQ7DQo+ID4+PiArCQloYXJxX2xheW91dFtocV9pZHhdLnZhbCA9IGhh cnFfbGF5b3V0W3ByZXZfaHFfaWR4XS52YWw7DQo+ID4+PiArI2lmbmRlZiBBQ0MxMDBfRVhUX01F TQ0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9iYmRldl9vcF9kYXRhIGhvID0NCj4gPj4+ICsJCQkJb3At PmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Ow0KPiA+Pj4gKwkJZGVzYy0+ZGF0YV9wdHJz W25leHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4+PiArCQkJCXJ0ZV9wa3RtYnVmX2lvdmFfb2Zm c2V0KGhvLmRhdGEsIGhvLm9mZnNldCk7DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArCQluZXh0X3Ry aXBsZXQrKzsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlvcC0+bGRwY19kZWMuaGFyZF9v dXRwdXQubGVuZ3RoICs9ICpoX291dF9sZW5ndGg7DQo+ID4+PiArCWRlc2MtPm9wX2FkZHIgPSBv cDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArDQo+ID4+PiArLyogRW5xdWV1ZSBhIG51bWJl ciBvZiBvcGVyYXRpb25zIHRvIEhXIGFuZCB1cGRhdGUgc29mdHdhcmUgcmluZ3MNCj4gKi8NCj4g Pj4+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPj4+ICthY2MxMDBfZG1hX2VucXVldWUoc3RydWN0 IGFjYzEwMF9xdWV1ZSAqcSwgdWludDE2X3QgbiwNCj4gPj4+ICsJCXN0cnVjdCBydGVfYmJkZXZf c3RhdHMgKnF1ZXVlX3N0YXRzKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJdW5pb24gYWNjMTAwX2VucXVl dWVfcmVnX2ZtdCBlbnFfcmVxOw0KPiA+Pj4gKyNpZmRlZiBSVEVfQkJERVZfT0ZGTE9BRF9DT1NU DQo+ID4+PiArCXVpbnQ2NF90IHN0YXJ0X3RpbWUgPSAwOw0KPiA+Pj4gKwlxdWV1ZV9zdGF0cy0+ YWNjX29mZmxvYWRfY3ljbGVzID0gMDsNCj4gPj4+ICsJUlRFX1NFVF9VU0VEKHF1ZXVlX3N0YXRz KTsNCj4gPj4+ICsjZWxzZQ0KPiA+Pj4gKwlSVEVfU0VUX1VTRUQocXVldWVfc3RhdHMpOw0KPiA+ Pj4gKyNlbmRpZg0KPiA+PiBSVEVfU0VUX1VOVVNFRCguLi4gaXMgY29tbW9uIGluIHRoZSAjaWZk ZWYvI2Vsc2UNCj4gPj4NCj4gPj4gc28gaXQgc2hvdWxkIGJlIG1vdmVkIG91dC4NCj4gPiBvaw0K PiA+DQo+ID4+PiArDQo+ID4+PiArCWVucV9yZXEudmFsID0gMDsNCj4gPj4+ICsJLyogU2V0dGlu ZyBvZmZzZXQsIDEwMGIgZm9yIDI1NiBETUEgRGVzYyAqLw0KPiA+Pj4gKwllbnFfcmVxLmFkZHJf b2Zmc2V0ID0gQUNDMTAwX0RFU0NfT0ZGU0VUOw0KPiA+Pj4gKw0KPiA+PiBzaG91bGQgbiAhPSAw IGJlIGNoZWNrZWQgaGVyZSA/DQo+ID4gVGhpcyBpcyBhbGwgY2hlY2tlZCBiZWZvcmUgdGhhdCBw b2ludC4NCj4gb2sNCj4gPg0KPiA+Pj4gKwkvKiBTcGxpdCBvcHMgaW50byBiYXRjaGVzICovDQo+ ID4+PiArCWRvIHsNCj4gPj4+ICsJCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYzsNCj4gPj4+ ICsJCXVpbnQxNl90IGVucV9iYXRjaF9zaXplOw0KPiA+Pj4gKwkJdWludDY0X3Qgb2Zmc2V0Ow0K PiA+Pj4gKwkJcnRlX2lvdmFfdCByZXFfZWxlbV9hZGRyOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJZW5x X2JhdGNoX3NpemUgPSBSVEVfTUlOKG4sIE1BWF9FTlFfQkFUQ0hfU0laRSk7DQo+ID4+PiArDQo+ ID4+PiArCQkvKiBTZXQgZmxhZyBvbiBsYXN0IGRlc2NyaXB0b3IgaW4gYSBiYXRjaCAqLw0KPiA+ Pj4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ19oZWFkICsgZW5xX2JhdGNo X3NpemUgLQ0KPiA+PiAxKSAmDQo+ID4+PiArCQkJCXEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4g Pj4+ICsJCWRlc2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0Y2ggPSAxOw0KPiA+Pj4gKw0KPiA+Pj4g KwkJLyogQ2FsY3VsYXRlIHRoZSAxc3QgZGVzY3JpcHRvcidzIGFkZHJlc3MgKi8NCj4gPj4+ICsJ CW9mZnNldCA9ICgocS0+c3dfcmluZ19oZWFkICYgcS0+c3dfcmluZ193cmFwX21hc2spICoNCj4g Pj4+ICsJCQkJc2l6ZW9mKHVuaW9uIGFjYzEwMF9kbWFfZGVzYykpOw0KPiA+Pj4gKwkJcmVxX2Vs ZW1fYWRkciA9IHEtPnJpbmdfYWRkcl9waHlzICsgb2Zmc2V0Ow0KPiA+Pj4gKw0KPiA+Pj4gKwkJ LyogRmlsbCBlbnF1ZXVlIHN0cnVjdCAqLw0KPiA+Pj4gKwkJZW5xX3JlcS5udW1fZWxlbSA9IGVu cV9iYXRjaF9zaXplOw0KPiA+Pj4gKwkJLyogbG93IDYgYml0cyBhcmUgbm90IG5lZWRlZCAqLw0K PiA+Pj4gKwkJZW5xX3JlcS5yZXFfZWxlbV9hZGRyID0gKHVpbnQzMl90KShyZXFfZWxlbV9hZGRy ID4+IDYpOw0KPiA+Pj4gKw0KPiA+Pj4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ ID4+PiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgc2RvbmUiLCBkZXNjLCBzaXplb2YoKmRl c2MpKTsNCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICsJCXJ0ZV9iYmRldl9sb2dfZGVidWcoDQo+ID4+ PiArCQkJCSJFbnF1ZXVlICV1IHJlcXMgKHBoeXMgJSMiUFJJeDY0IikgdG8gcmVnDQo+ID4+ICVw IiwNCj4gPj4+ICsJCQkJZW5xX2JhdGNoX3NpemUsDQo+ID4+PiArCQkJCXJlcV9lbGVtX2FkZHIs DQo+ID4+PiArCQkJCSh2b2lkICopcS0+bW1pb19yZWdfZW5xdWV1ZSk7DQo+ID4+PiArDQo+ID4+ PiArCQlydGVfd21iKCk7DQo+ID4+PiArDQo+ID4+PiArI2lmZGVmIFJURV9CQkRFVl9PRkZMT0FE X0NPU1QNCj4gPj4+ICsJCS8qIFN0YXJ0IHRpbWUgbWVhc3VyZW1lbnQgZm9yIGVucXVldWUgZnVu Y3Rpb24gb2ZmbG9hZC4gKi8NCj4gPj4+ICsJCXN0YXJ0X3RpbWUgPSBydGVfcmR0c2NfcHJlY2lz ZSgpOw0KPiA+Pj4gKyNlbmRpZg0KPiA+Pj4gKwkJcnRlX2JiZGV2X2xvZyhERUJVRywgIkRlYnVn IDogTU1JTyBFbnF1ZXVlIik7DQo+ID4+IGxvZ2dpbmcgdGltZSB3aWxsIGJlIHRyYWNrZWQgd2l0 aCB0aGUgbW1pb193cml0ZQ0KPiA+Pg0KPiA+PiBzbyBsb2dnaW5nIHNob3VsZCBiZSBtb3ZlZCBh Ym92ZSB0aGUgc3RhcnRfdGltZSBzZXR0aW5nDQo+ID4gTm90IHJlcXVpcmVkLiBSdW5uaW5nIHdp dGggZGVidWcgdHJhY2VzIGlzIGV4cGVjdGVkIHRvIG1ha2UgcmVhbCB0aW1lDQo+IG9mZmxvYWQg bWVhc3VyZW1lbnQgaXJyZWxldmFudC4NCj4gDQo+IEkgZGlzYWdyZWUsIGlmIGxvZ2dpbmcgaGFz IGEgcGFnZWZhdWx0IG9yIHdyaXRlcyB0byBkaXNrIGV2ZW4gc29tZXRpbWVzDQo+IA0KPiB0aGVy ZSB3aWxsIGJlIGh1Z2Ugc3Bpa2UgaW4gdGhlIHRpbWUgdGhhdCB3b3VsZCBtYWtlIHRoZSBhY2N1 bXVsYXRlZA0KPiANCj4gYWNjX29mZmxvYWRfY3ljbGVzIG1lYW5pbmdsZXNzLiAgSXQgd291bGQg YmUgb2sgaWYgdGhlIHdyaXRlIHRpbWUgaXMgb2YNCj4gDQo+IHRoZSBzYW1lIG9yZGVyIG9mIG1h Z25pdHVkZSBhcyBkaXNrIGFjY2Vzcy4NCg0KSSBhbSBqdXN0IHNheWluZyB0aGF0IHdoZXRoZXIg dGhpcyBleHRyYSB0aW1lIHNob3VsZCBiZSBwYXJ0IG9mIG5vdCBvZiB0aGlzIHByb2Nlc3Npbmcg dGltZQ0KaXMgdW5kZWZpbmVkIChhbnlvbmUgY291bGQgYXJndWUgYm90aCB3YXlzKSBhbmQgbm90 IHJlbGV2YW50Lg0KDQo+IA0KPiA+Pj4gKwkJbW1pb193cml0ZShxLT5tbWlvX3JlZ19lbnF1ZXVl LCBlbnFfcmVxLnZhbCk7DQo+ID4+PiArDQo+ID4+PiArI2lmZGVmIFJURV9CQkRFVl9PRkZMT0FE X0NPU1QNCj4gPj4+ICsJCXF1ZXVlX3N0YXRzLT5hY2Nfb2ZmbG9hZF9jeWNsZXMgKz0NCj4gPj4+ ICsJCQkJcnRlX3JkdHNjX3ByZWNpc2UoKSAtIHN0YXJ0X3RpbWU7DQo+ID4+PiArI2VuZGlmDQo+ ID4+PiArDQo+ID4+PiArCQlxLT5hcV9lbnF1ZXVlZCsrOw0KPiA+Pj4gKwkJcS0+c3dfcmluZ19o ZWFkICs9IGVucV9iYXRjaF9zaXplOw0KPiA+Pj4gKwkJbiAtPSBlbnFfYmF0Y2hfc2l6ZTsNCj4g Pj4+ICsNCj4gPj4+ICsJfSB3aGlsZSAobik7DQo+ID4+PiArDQo+ID4+PiArDQo+ID4+PiArfQ0K PiA+Pj4gKw0KPiA+Pj4gKy8qIEVucXVldWUgb25lIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0Mx MDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4gPj4+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4g K2VucXVldWVfbGRwY19lbmNfbl9vcF9jYihzdHJ1Y3QgYWNjMTAwX3F1ZXVlICpxLCBzdHJ1Y3QN Cj4gPj4gcnRlX2JiZGV2X2VuY19vcCAqKm9wcywNCj4gPj4+ICsJCXVpbnQxNl90IHRvdGFsX2Vu cXVldWVkX2NicywgaW50MTZfdCBudW0pDQo+ID4+PiArew0KPiA+Pj4gKwl1bmlvbiBhY2MxMDBf ZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+Pj4gKwl1aW50MzJfdCBvdXRfbGVuZ3RoOw0KPiA+ Pj4gKwlzdHJ1Y3QgcnRlX21idWYgKm91dHB1dF9oZWFkLCAqb3V0cHV0Ow0KPiA+Pj4gKwlpbnQg aSwgbmV4dF90cmlwbGV0Ow0KPiA+Pj4gKwl1aW50MTZfdCAgaW5fbGVuZ3RoX2luX2J5dGVzOw0K PiA+Pj4gKwlzdHJ1Y3QgcnRlX2JiZGV2X29wX2xkcGNfZW5jICplbmMgPSAmb3BzWzBdLT5sZHBj X2VuYzsNCj4gPj4+ICsNCj4gPj4+ICsJdWludDE2X3QgZGVzY19pZHggPSAoKHEtPnN3X3Jpbmdf aGVhZCArIHRvdGFsX2VucXVldWVkX2NicykNCj4gPj4+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9t YXNrKTsNCj4gPj4+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArIGRlc2NfaWR4Ow0KPiA+Pj4gKwlh Y2MxMDBfZmN3X2xlX2ZpbGwob3BzWzBdLCAmZGVzYy0+cmVxLmZjd19sZSwgbnVtKTsNCj4gPj4+ ICsNCj4gPj4+ICsJLyoqIFRoaXMgY291bGQgYmUgZG9uZSBhdCBwb2xsaW5nICovDQo+ID4+PiAr CWRlc2MtPnJlcS53b3JkMCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+Pj4gKwlkZXNjLT5y ZXEud29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBiZSBkaXNhYmxlZCAqLw0KPiA+Pj4g KwlkZXNjLT5yZXEud29yZDIgPSAwOw0KPiA+Pj4gKwlkZXNjLT5yZXEud29yZDMgPSAwOw0KPiA+ Pj4gKwlkZXNjLT5yZXEubnVtQ0JzID0gbnVtOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpbl9sZW5ndGhf aW5fYnl0ZXMgPSBvcHNbMF0tPmxkcGNfZW5jLmlucHV0LmRhdGEtPmRhdGFfbGVuOw0KPiA+Pj4g KwlvdXRfbGVuZ3RoID0gKGVuYy0+Y2JfcGFyYW1zLmUgKyA3KSA+PiAzOw0KPiA+Pj4gKwlkZXNj LT5yZXEubTJkbGVuID0gMSArIG51bTsNCj4gPj4+ICsJZGVzYy0+cmVxLmQybWxlbiA9IG51bTsN Cj4gPj4+ICsJbmV4dF90cmlwbGV0ID0gMTsNCj4gPj4+ICsNCj4gPj4+ICsJZm9yIChpID0gMDsg aSA8IG51bTsgaSsrKSB7DQo+ID4+IGkgaXMgbm90IG5lZWRlZCBoZXJlLCBpdCBpcyBuZXh0X3Ry aXBsZXQgLSAxDQo+ID4gd291bGQgaW1wYWN0IHJlYWRhYmlsaXR5IGFzIHRoZXNlIHJlZmVyIHRv IGRpZmZlcmVudCBjb25jZXB0cyAoY29kZSBibG9ja3MNCj4gYW5kIGJkZXNjcykuDQo+ID4gV291 bGQga2VlcCBhcyBpcw0KPiBvaw0KPiA+DQo+ID4+PiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzW25l eHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4+PiArCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQo b3BzW2ldLQ0KPiA+Pj4gbGRwY19lbmMuaW5wdXQuZGF0YSwgMCk7DQo+ID4+PiArCQlkZXNjLT5y ZXEuZGF0YV9wdHJzW25leHRfdHJpcGxldF0uYmxlbiA9IGluX2xlbmd0aF9pbl9ieXRlczsNCj4g Pj4+ICsJCW5leHRfdHJpcGxldCsrOw0KPiA+Pj4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1tuZXh0 X3RyaXBsZXRdLmFkZHJlc3MgPQ0KPiA+Pj4gKwkJCQlydGVfcGt0bWJ1Zl9pb3ZhX29mZnNldCgN Cj4gPj4+ICsJCQkJb3BzW2ldLT5sZHBjX2VuYy5vdXRwdXQuZGF0YSwgMCk7DQo+ID4+PiArCQlk ZXNjLT5yZXEuZGF0YV9wdHJzW25leHRfdHJpcGxldF0uYmxlbiA9IG91dF9sZW5ndGg7DQo+ID4+ PiArCQluZXh0X3RyaXBsZXQrKzsNCj4gPj4+ICsJCW9wc1tpXS0+bGRwY19lbmMub3V0cHV0Lmxl bmd0aCA9IG91dF9sZW5ndGg7DQo+ID4+PiArCQlvdXRwdXRfaGVhZCA9IG91dHB1dCA9IG9wc1tp XS0+bGRwY19lbmMub3V0cHV0LmRhdGE7DQo+ID4+PiArCQltYnVmX2FwcGVuZChvdXRwdXRfaGVh ZCwgb3V0cHV0LCBvdXRfbGVuZ3RoKTsNCj4gPj4+ICsJCW91dHB1dC0+ZGF0YV9sZW4gPSBvdXRf bGVuZ3RoOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWRlc2MtPnJlcS5vcF9hZGRyID0g b3BzWzBdOw0KPiA+Pj4gKw0KPiA+Pj4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ ID4+PiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNjLT5yZXEuZmN3X2xlLA0KPiA+ Pj4gKwkJCXNpemVvZihkZXNjLT5yZXEuZmN3X2xlKSAtIDgpOw0KPiA+Pj4gKwlydGVfbWVtZHVt cChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4gPj4+ICsjZW5k aWYNCj4gPj4+ICsNCj4gPj4+ICsJLyogT25lIENCIChvbmUgb3ApIHdhcyBzdWNjZXNzZnVsbHkg cHJlcGFyZWQgdG8gZW5xdWV1ZSAqLw0KPiA+Pj4gKwlyZXR1cm4gbnVtOw0KPiA+PiBjYWxsZXIg ZG9lcyBub3QgdXNlIG51bSwgb25seSBjaGVjayBpZiA8IDANCj4gPj4NCj4gPj4gU28gY291bGQg Y2hhbmdlIHRvIHJldHVybiAwDQo+ID4gd291bGQga2VlcCBhcyBpcyBmb3IgZGVidWcNCj4gb2sN Cj4gPg0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKiBFbnF1ZXVlIG9uZSBlbmNvZGUgb3Bl cmF0aW9ucyBmb3IgQUNDMTAwIGRldmljZSBpbiBDQiBtb2RlICovDQo+ID4+PiArc3RhdGljIGlu bGluZSBpbnQNCj4gPj4+ICtlbnF1ZXVlX2xkcGNfZW5jX29uZV9vcF9jYihzdHJ1Y3QgYWNjMTAw X3F1ZXVlICpxLCBzdHJ1Y3QNCj4gPj4gcnRlX2JiZGV2X2VuY19vcCAqb3AsDQo+ID4+PiArCQl1 aW50MTZfdCB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4+IHJ0ZV9mcGdhXzVnbnJfZmVjLmMgaGFz IHRoaXMgc2FtZSBmdW5jdGlvbi4gIEl0IHdvdWxkIGJlIGdvb2QgaWYgY29tbW9uDQo+ID4+IGZ1 bmN0aW9ucyBjb3VsZCBiZSBjb2xsZWN0ZWQgYW5kIHVzZWQgdG8gc3RhYmlsaXplIHRoZSBpbnRl cm5hbCBiYmRldg0KPiA+PiBpbnRlcmZhY2UuDQo+ID4+DQo+ID4+IFRoaXMgaXMgZ2VuZXJhbCBp c3N1ZQ0KPiA+IFRoaXMgaXMgdHJ1ZSBmb3Igc29tZSBwYXJ0IG9mIHRoZSBjb2RlIGFuZCBub3Rl ZC4NCj4gPiBJbiB0aGF0IHZlcnkgY2FzZSB0aGV5IGFyZSBkaXN0aW5jdCBpbXBsZW1lbnRhdGlv biB3aXRoIEhXIHNwZWNpZmljcw0KPiA+IEJ1dCBhZ3JlZWQgdG8gbG9vayBpbnRvIHN1Y2ggcmVm YWN0b3J5IGxhdGVyIG9uLg0KPiBvaw0KPiA+DQo+ID4+PiArew0KPiA+Pj4gKwl1bmlvbiBhY2Mx MDBfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKwl1aW50 MzJfdCBpbl9vZmZzZXQsIG91dF9vZmZzZXQsIG91dF9sZW5ndGgsIG1idWZfdG90YWxfbGVmdCwN Cj4gPj4+ICsJCXNlZ190b3RhbF9sZWZ0Ow0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX21idWYgKmlucHV0 LCAqb3V0cHV0X2hlYWQsICpvdXRwdXQ7DQo+ID4+PiArDQo+ID4+PiArCXVpbnQxNl90IGRlc2Nf aWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4+PiArCQkJ JiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBk ZXNjX2lkeDsNCj4gPj4+ICsJYWNjMTAwX2Zjd19sZV9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd19s ZSwgMSk7DQo+ID4+PiArDQo+ID4+PiArCWlucHV0ID0gb3AtPmxkcGNfZW5jLmlucHV0LmRhdGE7 DQo+ID4+PiArCW91dHB1dF9oZWFkID0gb3V0cHV0ID0gb3AtPmxkcGNfZW5jLm91dHB1dC5kYXRh Ow0KPiA+Pj4gKwlpbl9vZmZzZXQgPSBvcC0+bGRwY19lbmMuaW5wdXQub2Zmc2V0Ow0KPiA+Pj4g KwlvdXRfb2Zmc2V0ID0gb3AtPmxkcGNfZW5jLm91dHB1dC5vZmZzZXQ7DQo+ID4+PiArCW91dF9s ZW5ndGggPSAwOw0KPiA+Pj4gKwltYnVmX3RvdGFsX2xlZnQgPSBvcC0+bGRwY19lbmMuaW5wdXQu bGVuZ3RoOw0KPiA+Pj4gKwlzZWdfdG90YWxfbGVmdCA9IHJ0ZV9wa3RtYnVmX2RhdGFfbGVuKG9w LT5sZHBjX2VuYy5pbnB1dC5kYXRhKQ0KPiA+Pj4gKwkJCS0gaW5fb2Zmc2V0Ow0KPiA+Pj4gKw0K PiA+Pj4gKwlyZXQgPSBhY2MxMDBfZG1hX2Rlc2NfbGVfZmlsbChvcCwgJmRlc2MtPnJlcSwgJmlu cHV0LCBvdXRwdXQsDQo+ID4+PiArCQkJJmluX29mZnNldCwgJm91dF9vZmZzZXQsICZvdXRfbGVu Z3RoLA0KPiA+PiAmbWJ1Zl90b3RhbF9sZWZ0LA0KPiA+Pj4gKwkJCSZzZWdfdG90YWxfbGVmdCk7 DQo+ID4+PiArDQo+ID4+PiArCWlmICh1bmxpa2VseShyZXQgPCAwKSkNCj4gPj4+ICsJCXJldHVy biByZXQ7DQo+ID4+PiArDQo+ID4+PiArCW1idWZfYXBwZW5kKG91dHB1dF9oZWFkLCBvdXRwdXQs IG91dF9sZW5ndGgpOw0KPiA+Pj4gKw0KPiA+Pj4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RF QlVHDQo+ID4+PiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNjLT5yZXEuZmN3X2xl LA0KPiA+Pj4gKwkJCXNpemVvZihkZXNjLT5yZXEuZmN3X2xlKSAtIDgpOw0KPiA+Pj4gKwlydGVf bWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4gPj4+ ICsNCj4gPj4+ICsJLyogQ2hlY2sgaWYgYW55IGRhdGEgbGVmdCBhZnRlciBwcm9jZXNzaW5nIG9u ZSBDQiAqLw0KPiA+Pj4gKwlpZiAobWJ1Zl90b3RhbF9sZWZ0ICE9IDApIHsNCj4gPj4+ICsJCXJ0 ZV9iYmRldl9sb2coRVJSLA0KPiA+Pj4gKwkJCQkiU29tZSBkYXRlIHN0aWxsIGxlZnQgYWZ0ZXIg cHJvY2Vzc2luZyBvbmUgQ0I6DQo+ID4+IG1idWZfdG90YWxfbGVmdCA9ICV1IiwNCj4gPj4+ICsJ CQkJbWJ1Zl90b3RhbF9sZWZ0KTsNCj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+Pj4gKwl9 DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArCS8qIE9uZSBDQiAob25lIG9wKSB3YXMgc3VjY2Vzc2Z1 bGx5IHByZXBhcmVkIHRvIGVucXVldWUgKi8NCj4gPj4+ICsJcmV0dXJuIDE7DQo+ID4+IEFub3Ro ZXIgY2FzZSB3aGVyZSBjYWxsZXIgb25seSBjaGVjayBmb3IgPCAwDQo+ID4+DQo+ID4+IENvbnNp ZGVyIGNoYW5nZXMgYWxsIHNpbWlsYXIgdG8gcmV0dXJuIDAgb24gc3VjY2Vzcy4NCj4gPiBzYW1l IGNvbW1lbnQgYXMgYWJvdmUsIHdvdWxkIGtlZXAgYXMgaXMuDQo+ID4NCj4gPj4+ICt9DQo+ID4+ PiArDQo+ID4+PiArLyoqIEVucXVldWUgb25lIGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAg ZGV2aWNlIGluIENCIG1vZGUgKi8NCj4gPj4+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gK2Vu cXVldWVfbGRwY19kZWNfb25lX29wX2NiKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsIHN0cnVjdA0K PiA+PiBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPj4+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVl dWVkX2NicywgYm9vbCBzYW1lX29wKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJaW50IHJldDsNCj4gPj4+ ICsNCj4gPj4+ICsJdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjOw0KPiA+Pj4gKwl1aW50MTZf dCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ Pj4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+Pj4gKwlkZXNjID0gcS0+cmluZ19h ZGRyICsgZGVzY19pZHg7DQo+ID4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqaW5wdXQsICpoX291dHB1 dF9oZWFkLCAqaF9vdXRwdXQ7DQo+ID4+PiArCXVpbnQzMl90IGluX29mZnNldCwgaF9vdXRfb2Zm c2V0LCBtYnVmX3RvdGFsX2xlZnQsIGhfb3V0X2xlbmd0aCA9IDA7DQo+ID4+PiArCWlucHV0ID0g b3AtPmxkcGNfZGVjLmlucHV0LmRhdGE7DQo+ID4+PiArCWhfb3V0cHV0X2hlYWQgPSBoX291dHB1 dCA9IG9wLT5sZHBjX2RlYy5oYXJkX291dHB1dC5kYXRhOw0KPiA+Pj4gKwlpbl9vZmZzZXQgPSBv cC0+bGRwY19kZWMuaW5wdXQub2Zmc2V0Ow0KPiA+Pj4gKwloX291dF9vZmZzZXQgPSBvcC0+bGRw Y19kZWMuaGFyZF9vdXRwdXQub2Zmc2V0Ow0KPiA+Pj4gKwltYnVmX3RvdGFsX2xlZnQgPSBvcC0+ bGRwY19kZWMuaW5wdXQubGVuZ3RoOw0KPiA+Pj4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RF QlVHDQo+ID4+PiArCWlmICh1bmxpa2VseShpbnB1dCA9PSBOVUxMKSkgew0KPiA+Pj4gKwkJcnRl X2JiZGV2X2xvZyhFUlIsICJJbnZhbGlkIG1idWYgcG9pbnRlciIpOw0KPiA+Pj4gKwkJcmV0dXJu IC1FRkFVTFQ7DQo+ID4+PiArCX0NCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICsJdW5pb24gYWNjMTAw X2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5b3V0ID0gcS0+ZC0+aGFycV9sYXlvdXQ7DQo+ID4+ PiArDQo+ID4+PiArCWlmIChzYW1lX29wKSB7DQo+ID4+PiArCQl1bmlvbiBhY2MxMDBfZG1hX2Rl c2MgKnByZXZfZGVzYzsNCj4gPj4+ICsJCWRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0 b3RhbF9lbnF1ZXVlZF9jYnMgLSAxKQ0KPiA+Pj4gKwkJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNr KTsNCj4gPj4+ICsJCXByZXZfZGVzYyA9IHEtPnJpbmdfYWRkciArIGRlc2NfaWR4Ow0KPiA+Pj4g KwkJdWludDhfdCAqcHJldl9wdHIgPSAodWludDhfdCAqKSBwcmV2X2Rlc2M7DQo+ID4+PiArCQl1 aW50OF90ICpuZXdfcHRyID0gKHVpbnQ4X3QgKikgZGVzYzsNCj4gPj4+ICsJCS8qIENvcHkgZmly c3QgNCB3b3JkcyBhbmQgQkRFU0NzICovDQo+ID4+PiArCQlydGVfbWVtY3B5KG5ld19wdHIsIHBy ZXZfcHRyLCAxNik7DQo+ID4+PiArCQlydGVfbWVtY3B5KG5ld19wdHIgKyAzNiwgcHJldl9wdHIg KyAzNiwgNDApOw0KPiA+PiBUaGVzZSBtYWdpYyBudW1iZXJzIHNob3VsZCBiZSAjZGVmaW5lcw0K PiA+IHllcw0KPiA+DQo+ID4+PiArCQlkZXNjLT5yZXEub3BfYWRkciA9IHByZXZfZGVzYy0+cmVx Lm9wX2FkZHI7DQo+ID4+PiArCQkvKiBDb3B5IEZDVyAqLw0KPiA+Pj4gKwkJcnRlX21lbWNweShu ZXdfcHRyICsgQUNDMTAwX0RFU0NfRkNXX09GRlNFVCwNCj4gPj4+ICsJCQkJcHJldl9wdHIgKyBB Q0MxMDBfREVTQ19GQ1dfT0ZGU0VULA0KPiA+Pj4gKwkJCQlBQ0MxMDBfRkNXX0xEX0JMRU4pOw0K PiA+Pj4gKwkJYWNjMTAwX2RtYV9kZXNjX2xkX3VwZGF0ZShvcCwgJmRlc2MtPnJlcSwgaW5wdXQs DQo+ID4+IGhfb3V0cHV0LA0KPiA+Pj4gKwkJCQkmaW5fb2Zmc2V0LCAmaF9vdXRfb2Zmc2V0LA0K PiA+Pj4gKwkJCQkmaF9vdXRfbGVuZ3RoLCBoYXJxX2xheW91dCk7DQo+ID4+PiArCX0gZWxzZSB7 DQo+ID4+PiArCQlzdHJ1Y3QgYWNjMTAwX2Zjd19sZCAqZmN3Ow0KPiA+Pj4gKwkJdWludDMyX3Qg c2VnX3RvdGFsX2xlZnQ7DQo+ID4+PiArCQlmY3cgPSAmZGVzYy0+cmVxLmZjd19sZDsNCj4gPj4+ ICsJCWFjYzEwMF9mY3dfbGRfZmlsbChvcCwgZmN3LCBoYXJxX2xheW91dCk7DQo+ID4+PiArDQo+ ID4+PiArCQkvKiBTcGVjaWFsIGhhbmRsaW5nIHdoZW4gb3ZlcnVzaW5nIG1idWYgKi8NCj4gPj4+ ICsJCWlmIChmY3ctPnJtX2UgPCBNQVhfRV9NQlVGKQ0KPiA+Pj4gKwkJCXNlZ190b3RhbF9sZWZ0 ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4oaW5wdXQpDQo+ID4+PiArCQkJCQktIGluX29mZnNldDsN Cj4gPj4+ICsJCWVsc2UNCj4gPj4+ICsJCQlzZWdfdG90YWxfbGVmdCA9IGZjdy0+cm1fZTsNCj4g Pj4+ICsNCj4gPj4+ICsJCXJldCA9IGFjYzEwMF9kbWFfZGVzY19sZF9maWxsKG9wLCAmZGVzYy0+ cmVxLCAmaW5wdXQsDQo+ID4+IGhfb3V0cHV0LA0KPiA+Pj4gKwkJCQkmaW5fb2Zmc2V0LCAmaF9v dXRfb2Zmc2V0LA0KPiA+Pj4gKwkJCQkmaF9vdXRfbGVuZ3RoLCAmbWJ1Zl90b3RhbF9sZWZ0LA0K PiA+Pj4gKwkJCQkmc2VnX3RvdGFsX2xlZnQsIGZjdyk7DQo+ID4+PiArCQlpZiAodW5saWtlbHko cmV0IDwgMCkpDQo+ID4+PiArCQkJcmV0dXJuIHJldDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+ Pj4gKwkvKiBIYXJkIG91dHB1dCAqLw0KPiA+Pj4gKwltYnVmX2FwcGVuZChoX291dHB1dF9oZWFk LCBoX291dHB1dCwgaF9vdXRfbGVuZ3RoKTsNCj4gPj4+ICsjaWZuZGVmIEFDQzEwMF9FWFRfTUVN DQo+ID4+PiArCWlmIChvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQubGVuZ3RoID4g MCkgew0KPiA+Pj4gKwkJLyogUHVzaCB0aGUgSEFSUSBvdXRwdXQgaW50byBob3N0IG1lbW9yeSAq Lw0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9tYnVmICpocV9vdXRwdXRfaGVhZCwgKmhxX291dHB1dDsN Cj4gPj4+ICsJCWhxX291dHB1dF9oZWFkID0gb3AtDQo+ID4+PiBsZHBjX2RlYy5oYXJxX2NvbWJp bmVkX291dHB1dC5kYXRhOw0KPiA+Pj4gKwkJaHFfb3V0cHV0ID0gb3AtPmxkcGNfZGVjLmhhcnFf Y29tYmluZWRfb3V0cHV0LmRhdGE7DQo+ID4+PiArCQltYnVmX2FwcGVuZChocV9vdXRwdXRfaGVh ZCwgaHFfb3V0cHV0LA0KPiA+Pj4gKwkJCQlvcC0NCj4gPj4+IGxkcGNfZGVjLmhhcnFfY29tYmlu ZWRfb3V0cHV0Lmxlbmd0aCk7DQo+ID4+PiArCX0NCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICsNCj4g Pj4+ICsjaWZkZWYgUlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+Pj4gKwlydGVfbWVtZHVtcChz dGRlcnIsICJGQ1ciLCAmZGVzYy0+cmVxLmZjd19sZCwNCj4gPj4+ICsJCQlzaXplb2YoZGVzYy0+ cmVxLmZjd19sZCkgLSA4KTsNCj4gPj4+ICsJcnRlX21lbWR1bXAoc3RkZXJyLCAiUmVxIERlc2Mu IiwgZGVzYywgc2l6ZW9mKCpkZXNjKSk7DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArDQo+ID4+PiAr CS8qIE9uZSBDQiAob25lIG9wKSB3YXMgc3VjY2Vzc2Z1bGx5IHByZXBhcmVkIHRvIGVucXVldWUg Ki8NCj4gPj4+ICsJcmV0dXJuIDE7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKw0KPiA+Pj4g Ky8qIEVucXVldWUgb25lIGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIFRC IG1vZGUgKi8NCj4gPj4+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gK2VucXVldWVfbGRwY19k ZWNfb25lX29wX3RiKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsIHN0cnVjdA0KPiA+PiBydGVfYmJk ZXZfZGVjX29wICpvcCwNCj4gPj4+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgdWlu dDhfdCBjYnNfaW5fdGIpDQo+ID4+PiArew0KPiA+Pj4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2Mg KmRlc2MgPSBOVUxMOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKwl1aW50OF90IHIsIGM7DQo+ ID4+PiArCXVpbnQzMl90IGluX29mZnNldCwgaF9vdXRfb2Zmc2V0LA0KPiA+Pj4gKwkJaF9vdXRf bGVuZ3RoLCBtYnVmX3RvdGFsX2xlZnQsIHNlZ190b3RhbF9sZWZ0Ow0KPiA+Pj4gKwlzdHJ1Y3Qg cnRlX21idWYgKmlucHV0LCAqaF9vdXRwdXRfaGVhZCwgKmhfb3V0cHV0Ow0KPiA+Pj4gKwl1aW50 MTZfdCBjdXJyZW50X2VucXVldWVkX2NicyA9IDA7DQo+ID4+PiArDQo+ID4+PiArCXVpbnQxNl90 IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4+ PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiArCWRlc2MgPSBxLT5yaW5nX2Fk ZHIgKyBkZXNjX2lkeDsNCj4gPj4+ICsJdWludDY0X3QgZmN3X29mZnNldCA9IChkZXNjX2lkeCA8 PCA4KSArIEFDQzEwMF9ERVNDX0ZDV19PRkZTRVQ7DQo+ID4+PiArCXVuaW9uIGFjYzEwMF9oYXJx X2xheW91dF9kYXRhICpoYXJxX2xheW91dCA9IHEtPmQtPmhhcnFfbGF5b3V0Ow0KPiA+Pj4gKwlh Y2MxMDBfZmN3X2xkX2ZpbGwob3AsICZkZXNjLT5yZXEuZmN3X2xkLCBoYXJxX2xheW91dCk7DQo+ ID4+PiArDQo+ID4+PiArCWlucHV0ID0gb3AtPmxkcGNfZGVjLmlucHV0LmRhdGE7DQo+ID4+PiAr CWhfb3V0cHV0X2hlYWQgPSBoX291dHB1dCA9IG9wLT5sZHBjX2RlYy5oYXJkX291dHB1dC5kYXRh Ow0KPiA+Pj4gKwlpbl9vZmZzZXQgPSBvcC0+bGRwY19kZWMuaW5wdXQub2Zmc2V0Ow0KPiA+Pj4g KwloX291dF9vZmZzZXQgPSBvcC0+bGRwY19kZWMuaGFyZF9vdXRwdXQub2Zmc2V0Ow0KPiA+Pj4g KwloX291dF9sZW5ndGggPSAwOw0KPiA+Pj4gKwltYnVmX3RvdGFsX2xlZnQgPSBvcC0+bGRwY19k ZWMuaW5wdXQubGVuZ3RoOw0KPiA+Pj4gKwljID0gb3AtPmxkcGNfZGVjLnRiX3BhcmFtcy5jOw0K PiA+Pj4gKwlyID0gb3AtPmxkcGNfZGVjLnRiX3BhcmFtcy5yOw0KPiA+Pj4gKw0KPiA+Pj4gKwl3 aGlsZSAobWJ1Zl90b3RhbF9sZWZ0ID4gMCAmJiByIDwgYykgew0KPiA+Pj4gKw0KPiA+Pj4gKwkJ c2VnX3RvdGFsX2xlZnQgPSBydGVfcGt0bWJ1Zl9kYXRhX2xlbihpbnB1dCkgLSBpbl9vZmZzZXQ7 DQo+ID4+PiArDQo+ID4+PiArCQkvKiBTZXQgdXAgRE1BIGRlc2NyaXB0b3IgKi8NCj4gPj4+ICsJ CWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfaGVhZCArDQo+ID4+IHRvdGFsX2Vu cXVldWVkX2NicykNCj4gPj4+ICsJCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiAr CQlkZXNjLT5yZXEuZGF0YV9wdHJzWzBdLmFkZHJlc3MgPSBxLT5yaW5nX2FkZHJfcGh5cyArDQo+ ID4+IGZjd19vZmZzZXQ7DQo+ID4+PiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzWzBdLmJsZW4gPSBB Q0MxMDBfRkNXX0xEX0JMRU47DQo+ID4+PiArCQlyZXQgPSBhY2MxMDBfZG1hX2Rlc2NfbGRfZmls bChvcCwgJmRlc2MtPnJlcSwgJmlucHV0LA0KPiA+Pj4gKwkJCQloX291dHB1dCwgJmluX29mZnNl dCwgJmhfb3V0X29mZnNldCwNCj4gPj4+ICsJCQkJJmhfb3V0X2xlbmd0aCwNCj4gPj4+ICsJCQkJ Jm1idWZfdG90YWxfbGVmdCwgJnNlZ190b3RhbF9sZWZ0LA0KPiA+Pj4gKwkJCQkmZGVzYy0+cmVx LmZjd19sZCk7DQo+ID4+PiArDQo+ID4+PiArCQlpZiAodW5saWtlbHkocmV0IDwgMCkpDQo+ID4+ PiArCQkJcmV0dXJuIHJldDsNCj4gPj4+ICsNCj4gPj4+ICsJCS8qIEhhcmQgb3V0cHV0ICovDQo+ ID4+PiArCQltYnVmX2FwcGVuZChoX291dHB1dF9oZWFkLCBoX291dHB1dCwgaF9vdXRfbGVuZ3Ro KTsNCj4gPj4+ICsNCj4gPj4+ICsJCS8qIFNldCB0b3RhbCBudW1iZXIgb2YgQ0JzIGluIFRCICov DQo+ID4+PiArCQlkZXNjLT5yZXEuY2JzX2luX3RiID0gY2JzX2luX3RiOw0KPiA+Pj4gKyNpZmRl ZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4+PiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJG Q1ciLCAmZGVzYy0+cmVxLmZjd190ZCwNCj4gPj4+ICsJCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3df dGQpIC0gOCk7DQo+ID4+PiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNj LCBzaXplb2YoKmRlc2MpKTsNCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICsNCj4gPj4+ICsJCWlmIChz ZWdfdG90YWxfbGVmdCA9PSAwKSB7DQo+ID4+PiArCQkJLyogR28gdG8gdGhlIG5leHQgbWJ1ZiAq Lw0KPiA+Pj4gKwkJCWlucHV0ID0gaW5wdXQtPm5leHQ7DQo+ID4+PiArCQkJaW5fb2Zmc2V0ID0g MDsNCj4gPj4+ICsJCQloX291dHB1dCA9IGhfb3V0cHV0LT5uZXh0Ow0KPiA+Pj4gKwkJCWhfb3V0 X29mZnNldCA9IDA7DQo+ID4+PiArCQl9DQo+ID4+PiArCQl0b3RhbF9lbnF1ZXVlZF9jYnMrKzsN Cj4gPj4+ICsJCWN1cnJlbnRfZW5xdWV1ZWRfY2JzKys7DQo+ID4+PiArCQlyKys7DQo+ID4+PiAr CX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHVubGlrZWx5KGRlc2MgPT0gTlVMTCkpDQo+ID4+IEhv dyBpcyB0aGlzIHBvc3NpYmxlID8gZGVzYyBoYXMgYmUgZGVyZWZlcmVuY2VkIGFscmVhZHkuDQo+ ID4gcmVsYXRlZCB0byBzdGF0aWMgY29kZSBhbmFseXNpcywgYXJndWFibHkgYSBmYWxzZSBhbGFy bQ0KPiA+DQo+ID4+PiArCQlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ID4+PiArDQo+ ID4+PiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPj4+ICsJLyogQ2hlY2sgaWYg YW55IENCcyBsZWZ0IGZvciBwcm9jZXNzaW5nICovDQo+ID4+PiArCWlmIChtYnVmX3RvdGFsX2xl ZnQgIT0gMCkgew0KPiA+Pj4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4+PiArCQkJCSJTb21l IGRhdGUgc3RpbGwgbGVmdCBmb3IgcHJvY2Vzc2luZzoNCj4gPj4gbWJ1Zl90b3RhbF9sZWZ0ID0g JXUiLA0KPiA+Pj4gKwkJCQltYnVmX3RvdGFsX2xlZnQpOw0KPiA+Pj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4+PiArCX0NCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICsJLyogU2V0IFNEb25lIG9uIGxh c3QgQ0IgZGVzY3JpcHRvciBmb3IgVEIgbW9kZSAqLw0KPiA+Pj4gKwlkZXNjLT5yZXEuc2RvbmVf ZW5hYmxlID0gMTsNCj4gPj4+ICsJZGVzYy0+cmVxLmlycV9lbmFibGUgPSBxLT5pcnFfZW5hYmxl Ow0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ID4+PiAr fQ0KPiA+Pj4gKw0KPiA+Pj4gKw0KPiA+Pj4gKy8qIENhbGN1bGF0ZXMgbnVtYmVyIG9mIENCcyBp biBwcm9jZXNzZWQgZW5jb2RlciBUQiBiYXNlZCBvbiAncicgYW5kDQo+ID4+IGlucHV0DQo+ID4+ PiArICogbGVuZ3RoLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgdWludDhfdA0K PiA+Pj4gK2dldF9udW1fY2JzX2luX3RiX2VuYyhzdHJ1Y3QgcnRlX2JiZGV2X29wX3R1cmJvX2Vu YyAqdHVyYm9fZW5jKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJdWludDhfdCBjLCBjX25lZywgciwgY3Jj MjRfYml0cyA9IDA7DQo+ID4+PiArCXVpbnQxNl90IGssIGtfbmVnLCBrX3BvczsNCj4gPj4+ICsJ dWludDhfdCBjYnNfaW5fdGIgPSAwOw0KPiA+Pj4gKwlpbnQzMl90IGxlbmd0aDsNCj4gPj4+ICsN Cj4gPj4+ICsJbGVuZ3RoID0gdHVyYm9fZW5jLT5pbnB1dC5sZW5ndGg7DQo+ID4+PiArCXIgPSB0 dXJib19lbmMtPnRiX3BhcmFtcy5yOw0KPiA+Pj4gKwljID0gdHVyYm9fZW5jLT50Yl9wYXJhbXMu YzsNCj4gPj4+ICsJY19uZWcgPSB0dXJib19lbmMtPnRiX3BhcmFtcy5jX25lZzsNCj4gPj4+ICsJ a19uZWcgPSB0dXJib19lbmMtPnRiX3BhcmFtcy5rX25lZzsNCj4gPj4+ICsJa19wb3MgPSB0dXJi b19lbmMtPnRiX3BhcmFtcy5rX3BvczsNCj4gPj4+ICsJY3JjMjRfYml0cyA9IDA7DQo+ID4+PiAr CWlmIChjaGVja19iaXQodHVyYm9fZW5jLT5vcF9mbGFncywNCj4gPj4gUlRFX0JCREVWX1RVUkJP X0NSQ18yNEJfQVRUQUNIKSkNCj4gPj4+ICsJCWNyYzI0X2JpdHMgPSAyNDsNCj4gPj4+ICsJd2hp bGUgKGxlbmd0aCA+IDAgJiYgciA8IGMpIHsNCj4gPj4+ICsJCWsgPSAociA8IGNfbmVnKSA/IGtf bmVnIDoga19wb3M7DQo+ID4+PiArCQlsZW5ndGggLT0gKGsgLSBjcmMyNF9iaXRzKSA+PiAzOw0K PiA+Pj4gKwkJcisrOw0KPiA+Pj4gKwkJY2JzX2luX3RiKys7DQo+ID4+PiArCX0NCj4gPj4+ICsN Cj4gPj4+ICsJcmV0dXJuIGNic19pbl90YjsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyog Q2FsY3VsYXRlcyBudW1iZXIgb2YgQ0JzIGluIHByb2Nlc3NlZCBkZWNvZGVyIFRCIGJhc2VkIG9u ICdyJyBhbmQNCj4gPj4gaW5wdXQNCj4gPj4+ICsgKiBsZW5ndGguDQo+ID4+PiArICovDQo+ID4+ PiArc3RhdGljIGlubGluZSB1aW50MTZfdA0KPiA+Pj4gK2dldF9udW1fY2JzX2luX3RiX2RlYyhz dHJ1Y3QgcnRlX2JiZGV2X29wX3R1cmJvX2RlYyAqdHVyYm9fZGVjKQ0KPiA+Pj4gK3sNCj4gPj4+ ICsJdWludDhfdCBjLCBjX25lZywgciA9IDA7DQo+ID4+PiArCXVpbnQxNl90IGt3LCBrLCBrX25l Zywga19wb3MsIGNic19pbl90YiA9IDA7DQo+ID4+PiArCWludDMyX3QgbGVuZ3RoOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlsZW5ndGggPSB0dXJib19kZWMtPmlucHV0Lmxlbmd0aDsNCj4gPj4+ICsJciA9 IHR1cmJvX2RlYy0+dGJfcGFyYW1zLnI7DQo+ID4+PiArCWMgPSB0dXJib19kZWMtPnRiX3BhcmFt cy5jOw0KPiA+Pj4gKwljX25lZyA9IHR1cmJvX2RlYy0+dGJfcGFyYW1zLmNfbmVnOw0KPiA+Pj4g KwlrX25lZyA9IHR1cmJvX2RlYy0+dGJfcGFyYW1zLmtfbmVnOw0KPiA+Pj4gKwlrX3BvcyA9IHR1 cmJvX2RlYy0+dGJfcGFyYW1zLmtfcG9zOw0KPiA+Pj4gKwl3aGlsZSAobGVuZ3RoID4gMCAmJiBy IDwgYykgew0KPiA+Pj4gKwkJayA9IChyIDwgY19uZWcpID8ga19uZWcgOiBrX3BvczsNCj4gPj4+ ICsJCWt3ID0gUlRFX0FMSUdOX0NFSUwoayArIDQsIDMyKSAqIDM7DQo+ID4+PiArCQlsZW5ndGgg LT0ga3c7DQo+ID4+PiArCQlyKys7DQo+ID4+PiArCQljYnNfaW5fdGIrKzsNCj4gPj4+ICsJfQ0K PiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gY2JzX2luX3RiOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4g Pj4+ICsvKiBDYWxjdWxhdGVzIG51bWJlciBvZiBDQnMgaW4gcHJvY2Vzc2VkIGRlY29kZXIgVEIg YmFzZWQgb24gJ3InIGFuZA0KPiA+PiBpbnB1dA0KPiA+Pj4gKyAqIGxlbmd0aC4NCj4gPj4+ICsg Ki8NCj4gPj4+ICtzdGF0aWMgaW5saW5lIHVpbnQxNl90DQo+ID4+PiArZ2V0X251bV9jYnNfaW5f dGJfbGRwY19kZWMoc3RydWN0IHJ0ZV9iYmRldl9vcF9sZHBjX2RlYw0KPiAqbGRwY19kZWMpDQo+ ID4+PiArew0KPiA+Pj4gKwl1aW50MTZfdCByLCBjYnNfaW5fdGIgPSAwOw0KPiA+Pj4gKwlpbnQz Ml90IGxlbmd0aCA9IGxkcGNfZGVjLT5pbnB1dC5sZW5ndGg7DQo+ID4+PiArCXIgPSBsZHBjX2Rl Yy0+dGJfcGFyYW1zLnI7DQo+ID4+PiArCXdoaWxlIChsZW5ndGggPiAwICYmIHIgPCBsZHBjX2Rl Yy0+dGJfcGFyYW1zLmMpIHsNCj4gPj4+ICsJCWxlbmd0aCAtPSAgKHIgPCBsZHBjX2RlYy0+dGJf cGFyYW1zLmNhYikgPw0KPiA+Pj4gKwkJCQlsZHBjX2RlYy0+dGJfcGFyYW1zLmVhIDoNCj4gPj4+ ICsJCQkJbGRwY19kZWMtPnRiX3BhcmFtcy5lYjsNCj4gPj4+ICsJCXIrKzsNCj4gPj4+ICsJCWNi c19pbl90YisrOw0KPiA+Pj4gKwl9DQo+ID4+PiArCXJldHVybiBjYnNfaW5fdGI7DQo+ID4+PiAr fQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qIENoZWNrIHdlIGNhbiBtdXggZW5jb2RlIG9wZXJhdGlvbnMg d2l0aCBjb21tb24gRkNXICovDQo+ID4+PiArc3RhdGljIGlubGluZSBib29sDQo+ID4+PiArY2hl Y2tfbXV4KHN0cnVjdCBydGVfYmJkZXZfZW5jX29wICoqb3BzLCB1aW50MTZfdCBudW0pIHsNCj4g Pj4+ICsJdWludDE2X3QgaTsNCj4gPj4+ICsJaWYgKG51bSA9PSAxKQ0KPiA+Pj4gKwkJcmV0dXJu IGZhbHNlOw0KPiA+PiBsaWtlbHkgc2hvdWxkIHN0cmVuZ3RoZW4gY2hlY2sgdG8gbnVtIDw9IDEN Cj4gPiBubyBpbXBhY3QsIGJ1dCBkb2VzbnQgaHVydCB0byBjaGFuZ2Ugb2suDQo+ID4NCj4gPj4+ ICsJZm9yIChpID0gMTsgaSA8IG51bTsgKytpKSB7DQo+ID4+PiArCQkvKiBPbmx5IG11eCBjb21w YXRpYmxlIGNvZGUgYmxvY2tzICovDQo+ID4+PiArCQlpZiAobWVtY21wKCh1aW50OF90ICopKCZv cHNbaV0tPmxkcGNfZW5jKSArIEVOQ19PRkZTRVQsDQo+ID4+PiArCQkJCSh1aW50OF90ICopKCZv cHNbMF0tPmxkcGNfZW5jKSArDQo+ID4+IEVOQ19PRkZTRVQsDQo+ID4+IG9wc1swXS0+bGRwY19l bmMgc2hvdWxkIGJlIGhvaXN0ZWQgb3V0IG9mIGxvb3AgYXMgaXQgaXMgaW52YXJpYW50Lg0KPiA+ IGNvbXBpbGVyIHRha2VzIGNhcmUgb2YgdGhpcyBJIGJlbGlldmUNCj4gaG9wZWZ1bGx5LCB5ZXMu DQo+ID4NCj4gPj4+ICsJCQkJQ01QX0VOQ19TSVpFKSAhPSAwKQ0KPiA+Pj4gKwkJCXJldHVybiBm YWxzZTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwlyZXR1cm4gdHJ1ZTsNCj4gPj4+ICt9DQo+ID4+PiAr DQo+ID4+PiArLyoqIEVucXVldWUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZpY2Ug aW4gQ0IgbW9kZS4gKi8NCj4gPj4+ICtzdGF0aWMgaW5saW5lIHVpbnQxNl90DQo+ID4+PiArYWNj MTAwX2VucXVldWVfbGRwY19lbmNfY2Ioc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2Rh dGEsDQo+ID4+PiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqKm9wcywgdWludDE2X3QgbnVt KQ0KPiA+Pj4gK3sNCj4gPj4+ICsJc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSA9IHFfZGF0YS0+cXVl dWVfcHJpdmF0ZTsNCj4gPj4+ICsJaW50MzJfdCBhdmFpbCA9IHEtPnN3X3JpbmdfZGVwdGggKyBx LT5zd19yaW5nX3RhaWwgLSBxLQ0KPiA+Pj4gc3dfcmluZ19oZWFkOw0KPiA+Pj4gKwl1aW50MTZf dCBpID0gMDsNCj4gPj4+ICsJdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjOw0KPiA+Pj4gKwlp bnQgcmV0LCBkZXNjX2lkeCA9IDA7DQo+ID4+PiArCWludDE2X3QgZW5xLCBsZWZ0ID0gbnVtOw0K PiA+Pj4gKw0KPiA+Pj4gKwl3aGlsZSAobGVmdCA+IDApIHsNCj4gPj4+ICsJCWlmICh1bmxpa2Vs eShhdmFpbCAtIDEgPCAwKSkNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsJCWF2YWlsLS07DQo+ ID4+PiArCQllbnEgPSBSVEVfTUlOKGxlZnQsIE1VWF81R0RMX0RFU0MpOw0KPiA+Pj4gKwkJaWYg KGNoZWNrX211eCgmb3BzW2ldLCBlbnEpKSB7DQo+ID4+PiArCQkJcmV0ID0gZW5xdWV1ZV9sZHBj X2VuY19uX29wX2NiKHEsICZvcHNbaV0sDQo+ID4+PiArCQkJCQlkZXNjX2lkeCwgZW5xKTsNCj4g Pj4+ICsJCQlpZiAocmV0IDwgMCkNCj4gPj4+ICsJCQkJYnJlYWs7DQo+ID4+PiArCQkJaSArPSBl bnE7DQo+ID4+PiArCQl9IGVsc2Ugew0KPiA+Pj4gKwkJCXJldCA9IGVucXVldWVfbGRwY19lbmNf b25lX29wX2NiKHEsIG9wc1tpXSwNCj4gPj4gZGVzY19pZHgpOw0KPiA+Pj4gKwkJCWlmIChyZXQg PCAwKQ0KPiA+Pj4gKwkJCQlicmVhazsNCj4gPj4gZmFpbHVyZSBpcyBub3QgaGFuZGxlZCB3ZWxs LCB3aGF0IGhhcHBlbnMgaWYgdGhpcyBpcyBvbmUgb2Ygc2VydmVyYWwNCj4gPiB0aGUgYWltIGlz IHRvIGZsYWcgdGhlIGVycm9yIGFuZCBtb3ZlIG9uDQo+ID4NCj4gPg0KPiA+Pj4gKwkJCWkrKzsN Cj4gPj4+ICsJCX0NCj4gPj4+ICsJCWRlc2NfaWR4Kys7DQo+ID4+PiArCQlsZWZ0ID0gbnVtIC0g aTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAodW5saWtlbHkoaSA9PSAwKSkNCj4g Pj4+ICsJCXJldHVybiAwOyAvKiBOb3RoaW5nIHRvIGVucXVldWUgKi8NCj4gPj4gdGhpcyBkb2Vz IG5vdCBsb29rIGNvcnJlY3QgZm9yIGFsbCBjYXNlcw0KPiA+IEkgbWlzcyB5b3VyIHBvaW50DQo+ IA0KPiBJIHdhcyB0aGlua2luZyB0aGlzIHdhcyBhbiBlcnJvciBoYW5kbGVyIGFuZCBuZWVkZWQg YmVlZmluZyB1cC4NCg0KdXNlciB3b3VsZCBrbm93IGlmIGl0IGNvdWxkIG5vdCBlbnF1ZXVlIGJh c2VkIG9uIHRoZSByZXR1cm4gMCB2YWx1ZS4NCkluIGNhc2UgaXQgaXMgZm9yIGEgYmFkIHJlYXNv biAobm90IGp1c3Qgbm90IGVub3VnaCBzcGFjZSkgdGhpcyB3aWxsIGJlIGxvZ2dlZA0KYXMgcGFy dCBvZiBvdGhlciBleGNlcHRpb24uIEkgdGhpbmsuDQoNCj4gDQo+IA0KPiA+Pj4gKw0KPiA+Pj4g KwkvKiBTZXQgU0RvbmUgaW4gbGFzdCBDQiBpbiBlbnF1ZXVlZCBvcHMgZm9yIENCIG1vZGUqLw0K PiA+Pj4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKyBkZXNjX2lk eCAtIDEpDQo+ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiArCWRlc2Mt PnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+Pj4gKwlkZXNjLT5yZXEuaXJxX2VuYWJsZSA9IHEt PmlycV9lbmFibGU7DQo+ID4+PiArDQo+ID4+PiArCWFjYzEwMF9kbWFfZW5xdWV1ZShxLCBkZXNj X2lkeCwgJnFfZGF0YS0+cXVldWVfc3RhdHMpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBVcGRhdGUg c3RhdHMgKi8NCj4gPj4+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBp Ow0KPiA+Pj4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAt IGk7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBpOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ ICsvKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlLiAqLw0KPiA+ Pj4gK3N0YXRpYyB1aW50MTZfdA0KPiA+Pj4gK2FjYzEwMF9lbnF1ZXVlX2xkcGNfZW5jKHN0cnVj dCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9iYmRl dl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkNCj4gPj4+ICt7DQo+ID4+PiArCWlmICh1bmxp a2VseShudW0gPT0gMCkpDQo+ID4+PiArCQlyZXR1cm4gMDsNCj4gPj4gSGFuZGxpbmcgbnVtID09 IDAgc2hvdWxkIGJlIGluIGFjYzEwMF9lbnF1ZXVlX2xkcGNfZW5jX2NiDQo+ID4gV2h5IHdvdWxk IHRoaXMgYmUgYmV0dGVyIG5vdCB0byBjYXRjaCBlYXJseSBmcm9tIHVzZXIgYXBpIGNhbGw/DQo+ IG9rLCBiZWNhdXNlIGl0IHdhcyAnc3RhdGljJyBpIHdhcyB1bnN1cmUNCj4gPg0KPiA+Pj4gKwly ZXR1cm4gYWNjMTAwX2VucXVldWVfbGRwY19lbmNfY2IocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4+ PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qIENoZWNrIHdlIGNhbiBtdXggZW5jb2RlIG9wZXJhdGlv bnMgd2l0aCBjb21tb24gRkNXICovDQo+ID4+PiArc3RhdGljIGlubGluZSBib29sDQo+ID4+PiAr Y21wX2xkcGNfZGVjX29wKHN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqb3BzKSB7DQo+ID4+PiAr CS8qIE9ubHkgbXV4IGNvbXBhdGlibGUgY29kZSBibG9ja3MgKi8NCj4gPj4+ICsJaWYgKG1lbWNt cCgodWludDhfdCAqKSgmb3BzWzBdLT5sZHBjX2RlYykgKyBERUNfT0ZGU0VULA0KPiA+Pj4gKwkJ CSh1aW50OF90ICopKCZvcHNbMV0tPmxkcGNfZGVjKSArDQo+ID4+PiArCQkJREVDX09GRlNFVCwg Q01QX0RFQ19TSVpFKSAhPSAwKSB7DQo+ID4+PiArCQlyZXR1cm4gZmFsc2U7DQo+ID4+PiArCX0g ZWxzZQ0KPiA+PiBkbyBub3QgbmVlZCB0aGUgZWxzZSwgdGhlcmUgYXJlIG5vIG90aGVyIHN0YXRl bWVudHMuDQo+ID4gZGViYXRhYmxlLiBOb3QgY29uc2lkZXJpbmcgY2hhbmdlIGV4Y2VwdCBpZiB0 aGF0IGJlY29tZXMgYSBEUERLDQo+ID4gY29kaW5nIGd1aWRlbGluZS4NCj4gZmluZS4NCj4gPj4+ ICsJCXJldHVybiB0cnVlOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsNCj4gPj4+ICsvKiBF bnF1ZXVlIGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIFRCIG1vZGUgKi8N Cj4gPj4+ICtzdGF0aWMgdWludDE2X3QNCj4gPj4+ICthY2MxMDBfZW5xdWV1ZV9sZHBjX2RlY190 YihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPj4+ICsJCXN0cnVjdCBy dGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pDQo+ID4+PiArew0KPiA+Pj4gKwlz dHJ1Y3QgYWNjMTAwX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+Pj4gKwlp bnQzMl90IGF2YWlsID0gcS0+c3dfcmluZ19kZXB0aCArIHEtPnN3X3JpbmdfdGFpbCAtIHEtDQo+ ID4+PiBzd19yaW5nX2hlYWQ7DQo+ID4+PiArCXVpbnQxNl90IGksIGVucXVldWVkX2NicyA9IDA7 DQo+ID4+PiArCXVpbnQ4X3QgY2JzX2luX3RiOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKw0K PiA+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsNCj4gPj4+ICsJCWNic19pbl90YiA9 IGdldF9udW1fY2JzX2luX3RiX2xkcGNfZGVjKCZvcHNbaV0tDQo+ID4+PiBsZHBjX2RlYyk7DQo+ ID4+PiArCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHNwYWNlIGZvciBmdXJ0aGVy IHByb2Nlc3NpbmcgKi8NCj4gPj4+ICsJCWlmICh1bmxpa2VseShhdmFpbCAtIGNic19pbl90YiA8 IDApKQ0KPiA+Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwkJYXZhaWwgLT0gY2JzX2luX3RiOw0KPiA+ Pj4gKw0KPiA+Pj4gKwkJcmV0ID0gZW5xdWV1ZV9sZHBjX2RlY19vbmVfb3BfdGIocSwgb3BzW2ld LA0KPiA+Pj4gKwkJCQllbnF1ZXVlZF9jYnMsIGNic19pbl90Yik7DQo+ID4+PiArCQlpZiAocmV0 IDwgMCkNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsJCWVucXVldWVkX2NicyArPSByZXQ7DQo+ ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJYWNjMTAwX2RtYV9lbnF1ZXVlKHEsIGVucXVldWVk X2NicywgJnFfZGF0YS0+cXVldWVfc3RhdHMpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBVcGRhdGUg c3RhdHMgKi8NCj4gPj4+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBp Ow0KPiA+Pj4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAt IGk7DQo+ID4+PiArCXJldHVybiBpOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKiBFbnF1 ZXVlIGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4g Pj4+ICtzdGF0aWMgdWludDE2X3QNCj4gPj4+ICthY2MxMDBfZW5xdWV1ZV9sZHBjX2RlY19jYihz dHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPj4+ICsJCXN0cnVjdCBydGVf YmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pDQo+ID4+PiArew0KPiA+Pj4gKwlzdHJ1 Y3QgYWNjMTAwX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+Pj4gKwlpbnQz Ml90IGF2YWlsID0gcS0+c3dfcmluZ19kZXB0aCArIHEtPnN3X3JpbmdfdGFpbCAtIHEtDQo+ID4+ PiBzd19yaW5nX2hlYWQ7DQo+ID4+PiArCXVpbnQxNl90IGk7DQo+ID4+PiArCXVuaW9uIGFjYzEw MF9kbWFfZGVzYyAqZGVzYzsNCj4gPj4+ICsJaW50IHJldDsNCj4gPj4+ICsJYm9vbCBzYW1lX29w ID0gZmFsc2U7DQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgew0KPiA+Pj4gKwkJ LyogQ2hlY2sgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzcGFjZSBmb3IgZnVydGhlciBwcm9jZXNz aW5nICovDQo+ID4+PiArCQlpZiAodW5saWtlbHkoYXZhaWwgLSAxIDwgMCkpDQo+ID4+IGNoYW5n ZSB0byAoYXZhaWwgPCAxKQ0KPiA+Pg0KPiA+PiBHZW5lcmFsbHkuDQo+ID4gb2sNCj4gPg0KPiA+ Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwkJYXZhaWwgLT0gMTsNCj4gPj4+ICsNCj4gPj4+ICsJCWlm IChpID4gMCkNCj4gPj4+ICsJCQlzYW1lX29wID0gY21wX2xkcGNfZGVjX29wKCZvcHNbaS0xXSk7 DQo+ID4+PiArCQlydGVfYmJkZXZfbG9nKElORk8sICJPcCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAl ZCAlZCAlZA0KPiA+PiAlZCAlZFxuIiwNCj4gPj4+ICsJCQlpLCBvcHNbaV0tPmxkcGNfZGVjLm9w X2ZsYWdzLCBvcHNbaV0tDQo+ID4+PiBsZHBjX2RlYy5ydl9pbmRleCwNCj4gPj4+ICsJCQlvcHNb aV0tPmxkcGNfZGVjLml0ZXJfbWF4LCBvcHNbaV0tDQo+ID4+PiBsZHBjX2RlYy5pdGVyX2NvdW50 LA0KPiA+Pj4gKwkJCW9wc1tpXS0+bGRwY19kZWMuYmFzZWdyYXBoLCBvcHNbaV0tPmxkcGNfZGVj LnpfYywNCj4gPj4+ICsJCQlvcHNbaV0tPmxkcGNfZGVjLm5fY2IsIG9wc1tpXS0+bGRwY19kZWMu cV9tLA0KPiA+Pj4gKwkJCW9wc1tpXS0+bGRwY19kZWMubl9maWxsZXIsIG9wc1tpXS0NCj4gPj4+ IGxkcGNfZGVjLmNiX3BhcmFtcy5lLA0KPiA+Pj4gKwkJCXNhbWVfb3ApOw0KPiA+Pj4gKwkJcmV0 ID0gZW5xdWV1ZV9sZHBjX2RlY19vbmVfb3BfY2IocSwgb3BzW2ldLCBpLCBzYW1lX29wKTsNCj4g Pj4+ICsJCWlmIChyZXQgPCAwKQ0KPiA+Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwl9DQo+ID4+PiAr DQo+ID4+PiArCWlmICh1bmxpa2VseShpID09IDApKQ0KPiA+Pj4gKwkJcmV0dXJuIDA7IC8qIE5v dGhpbmcgdG8gZW5xdWV1ZSAqLw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBTZXQgU0RvbmUgaW4gbGFz dCBDQiBpbiBlbnF1ZXVlZCBvcHMgZm9yIENCIG1vZGUqLw0KPiA+Pj4gKwlkZXNjID0gcS0+cmlu Z19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKyBpIC0gMSkNCj4gPj4+ICsJCQkmIHEtPnN3X3Jp bmdfd3JhcF9tYXNrKTsNCj4gPj4+ICsNCj4gPj4+ICsJZGVzYy0+cmVxLnNkb25lX2VuYWJsZSA9 IDE7DQo+ID4+PiArCWRlc2MtPnJlcS5pcnFfZW5hYmxlID0gcS0+aXJxX2VuYWJsZTsNCj4gPj4+ ICsNCj4gPj4+ICsJYWNjMTAwX2RtYV9lbnF1ZXVlKHEsIGksICZxX2RhdGEtPnF1ZXVlX3N0YXRz KTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4+PiArCXFfZGF0YS0+ cXVldWVfc3RhdHMuZW5xdWV1ZWRfY291bnQgKz0gaTsNCj4gPj4+ICsJcV9kYXRhLT5xdWV1ZV9z dGF0cy5lbnF1ZXVlX2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+Pj4gKwlyZXR1cm4gaTsNCj4g Pj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3Ig QUNDMTAwIGRldmljZS4gKi8NCj4gPj4+ICtzdGF0aWMgdWludDE2X3QNCj4gPj4+ICthY2MxMDBf ZW5xdWV1ZV9sZHBjX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4g Pj4+ICsJCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pDQo+ID4+ PiArew0KPiA+Pj4gKwlzdHJ1Y3QgYWNjMTAwX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2 YXRlOw0KPiA+Pj4gKwlpbnQzMl90IGFxX2F2YWlsID0gcS0+YXFfZGVwdGggKw0KPiA+Pj4gKwkJ CShxLT5hcV9kZXF1ZXVlZCAtIHEtPmFxX2VucXVldWVkKSAvIDEyODsNCj4gPj4+ICsNCj4gPj4+ ICsJaWYgKHVubGlrZWx5KChhcV9hdmFpbCA9PSAwKSB8fCAobnVtID09IDApKSkNCj4gPj4+ICsJ CXJldHVybiAwOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAob3BzWzBdLT5sZHBjX2RlYy5jb2RlX2Js b2NrX21vZGUgPT0gMCkNCj4gPj4+ICsJCXJldHVybiBhY2MxMDBfZW5xdWV1ZV9sZHBjX2RlY190 YihxX2RhdGEsIG9wcywgbnVtKTsNCj4gPj4+ICsJZWxzZQ0KPiA+Pj4gKwkJcmV0dXJuIGFjYzEw MF9lbnF1ZXVlX2xkcGNfZGVjX2NiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+Pj4gK30NCj4gPj4+ ICsNCj4gPj4+ICsNCj4gPj4+ICsvKiBEZXF1ZXVlIG9uZSBlbmNvZGUgb3BlcmF0aW9ucyBmcm9t IEFDQzEwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ ID4+PiArZGVxdWV1ZV9lbmNfb25lX29wX2NiKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsIHN0cnVj dA0KPiA+PiBydGVfYmJkZXZfZW5jX29wICoqcmVmX29wLA0KPiA+Pj4gKwkJdWludDE2X3QgdG90 YWxfZGVxdWV1ZWRfY2JzLCB1aW50MzJfdCAqYXFfZGVxdWV1ZWQpDQo+ID4+PiArew0KPiA+Pj4g Kwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MsIGF0b21fZGVzYzsNCj4gPj4+ICsJdW5pb24g YWNjMTAwX2RtYV9yc3BfZGVzYyByc3A7DQo+ID4+PiArCXN0cnVjdCBydGVfYmJkZXZfZW5jX29w ICpvcDsNCj4gPj4+ICsJaW50IGk7DQo+ID4+PiArDQo+ID4+PiArCWRlc2MgPSBxLT5yaW5nX2Fk ZHIgKyAoKHEtPnN3X3JpbmdfdGFpbCArIHRvdGFsX2RlcXVldWVkX2NicykNCj4gPj4+ICsJCQkm IHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPj4+ICsJYXRvbV9kZXNjLmF0b21faGRyID0gX19h dG9taWNfbG9hZF9uKCh1aW50NjRfdCAqKWRlc2MsDQo+ID4+PiArCQkJX19BVE9NSUNfUkVMQVhF RCk7DQo+ID4+PiArDQo+ID4+PiArCS8qIENoZWNrIGZkb25lIGJpdCAqLw0KPiA+Pj4gKwlpZiAo IShhdG9tX2Rlc2MucnNwLnZhbCAmIEFDQzEwMF9GRE9ORSkpDQo+ID4+PiArCQlyZXR1cm4gLTE7 DQo+ID4+PiArDQo+ID4+PiArCXJzcC52YWwgPSBhdG9tX2Rlc2MucnNwLnZhbDsNCj4gPj4+ICsJ cnRlX2JiZGV2X2xvZ19kZWJ1ZygiUmVzcC4gZGVzYyAlcDogJXgiLCBkZXNjLCByc3AudmFsKTsN Cj4gPj4+ICsNCj4gPj4+ICsJLyogRGVxdWV1ZSAqLw0KPiA+Pj4gKwlvcCA9IGRlc2MtPnJlcS5v cF9hZGRyOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDbGVhcmluZyBzdGF0dXMsIGl0IHdpbGwgYmUg c2V0IGJhc2VkIG9uIHJlc3BvbnNlICovDQo+ID4+PiArCW9wLT5zdGF0dXMgPSAwOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlvcC0+c3RhdHVzIHw9ICgocnNwLmlucHV0X2VycikNCj4gPj4+ICsJCQk/ICgx IDw8IFJURV9CQkRFVl9EQVRBX0VSUk9SKSA6IDApOw0KPiA+PiBjYW4gcmVtb3ZlIHRoZSA9IDAs IGlmIHw9IGlzIGNoYW5nZWQgdG8gPQ0KPiA+IHllcyBpbiBwcmluY2lwbGUsIGJ1dCBlYXN5IHRv IGJyZWFrIGJ5IG1pc3Rha2UsIHNvIHdvdWxkIGtlZXAuDQo+IG9rDQo+ID4+PiArCW9wLT5zdGF0 dXMgfD0gKChyc3AuZG1hX2VycikgPyAoMSA8PCBSVEVfQkJERVZfRFJWX0VSUk9SKSA6IDApOw0K PiA+Pj4gKwlvcC0+c3RhdHVzIHw9ICgocnNwLmZjd19lcnIpID8gKDEgPDwgUlRFX0JCREVWX0RS Vl9FUlJPUikgOiAwKTsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGRlc2MtPnJlcS5sYXN0X2Rlc2Nf aW5fYmF0Y2gpIHsNCj4gPj4+ICsJCSgqYXFfZGVxdWV1ZWQpKys7DQo+ID4+PiArCQlkZXNjLT5y ZXEubGFzdF9kZXNjX2luX2JhdGNoID0gMDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwlkZXNjLT5yc3Au dmFsID0gQUNDMTAwX0RNQV9ERVNDX1RZUEU7DQo+ID4+PiArCWRlc2MtPnJzcC5hZGRfaW5mb18w ID0gMDsgLypSZXNlcnZlZCBiaXRzICovDQo+ID4+PiArCWRlc2MtPnJzcC5hZGRfaW5mb18xID0g MDsgLypSZXNlcnZlZCBiaXRzICovDQo+ID4+PiArDQo+ID4+PiArCS8qIEZsYWcgdGhhdCB0aGUg bXV4aW5nIGNhdXNlIGxvc3Mgb2Ygb3BhcXVlIGRhdGEgKi8NCj4gPj4+ICsJb3AtPm9wYXF1ZV9k YXRhID0gKHZvaWQgKiktMTsNCj4gPj4gYXMgYSBwdHIsIHNob3VsZG4ndCBvcGFxdWVfZGF0YSBi ZSBwb2lzb25lZCB3aXRoICcwJyA/DQo+ID4gbW9yZSBvYnZpb3VzIHRoaXMgd2F5IEkgdGhpbmsu DQo+IA0KPiB0aGUgaWRpb20gKHB0ciA9PSBOVUxMKSB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQu DQo+IA0KPiBhcyBhIG5vbiBzdGFuZGFyZCBwb2lzb24sIGl0IGlzIGxpa2VseSB0aGF0IHNvbWVv bmUgd2lsbCB0cmlwIG92ZXIgdGhpcy4NCg0KSXQgaXMganVzdCB0aGF0IHNvIGZhciB0aGlzIG9w YXF1ZSBkYXRhIHBvaW50ZXIgY291bGQgYWxzbyBiZSB1c2VkIHRvIHBhc3MgZGlyZWN0bHkgZGF0 YSBhcyBvcHBvc2VkIHRvIGFuIGFjdHVhbCBwb2ludGVyIChpZS4gbGlrZSBhIGNvdW50ZXIpLg0K QXJndWFibHkgYSBiaXQgb2RkIGJ1dCBsaWtlIHRoaXMgcHJpb3IgdG8gdGhpcyBQTUQgaW50cm9k dWN0aW9uLg0KDQoNCj4gDQo+ID4+PiArCWZvciAoaSA9IDAgOyBpIDwgZGVzYy0+cmVxLm51bUNC czsgaSsrKQ0KPiA+Pj4gKwkJcmVmX29wW2ldID0gb3A7DQo+ID4+PiArDQo+ID4+PiArCS8qIE9u ZSBDQiAob3ApIHdhcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQgKi8NCj4gPj4+ICsJcmV0dXJuIGRl c2MtPnJlcS5udW1DQnM7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qIERlcXVldWUgb25l IGVuY29kZSBvcGVyYXRpb25zIGZyb20gQUNDMTAwIGRldmljZSBpbiBUQiBtb2RlICovDQo+ID4+ PiArc3RhdGljIGlubGluZSBpbnQNCj4gPj4+ICtkZXF1ZXVlX2VuY19vbmVfb3BfdGIoc3RydWN0 IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0DQo+ID4+IHJ0ZV9iYmRldl9lbmNfb3AgKipyZWZfb3As DQo+ID4+PiArCQl1aW50MTZfdCB0b3RhbF9kZXF1ZXVlZF9jYnMsIHVpbnQzMl90ICphcV9kZXF1 ZXVlZCkNCj4gPj4+ICt7DQo+ID4+PiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYywgKmxh c3RfZGVzYywgYXRvbV9kZXNjOw0KPiA+Pj4gKwl1bmlvbiBhY2MxMDBfZG1hX3JzcF9kZXNjIHJz cDsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wOw0KPiA+Pj4gKwl1aW50OF90 IGkgPSAwOw0KPiA+Pj4gKwl1aW50MTZfdCBjdXJyZW50X2RlcXVldWVkX2NicyA9IDAsIGNic19p bl90YjsNCj4gPj4+ICsNCj4gPj4+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmlu Z190YWlsICsgdG90YWxfZGVxdWV1ZWRfY2JzKQ0KPiA+Pj4gKwkJCSYgcS0+c3dfcmluZ193cmFw X21hc2spOw0KPiA+Pj4gKwlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2FkX24oKHVp bnQ2NF90ICopZGVzYywNCj4gPj4+ICsJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPj4+ICsNCj4g Pj4+ICsJLyogQ2hlY2sgZmRvbmUgYml0ICovDQo+ID4+PiArCWlmICghKGF0b21fZGVzYy5yc3Au dmFsICYgQUNDMTAwX0ZET05FKSkNCj4gPj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsNCj4gPj4+ ICsJLyogR2V0IG51bWJlciBvZiBDQnMgaW4gZGVxdWV1ZWQgVEIgKi8NCj4gPj4+ICsJY2JzX2lu X3RiID0gZGVzYy0+cmVxLmNic19pbl90YjsNCj4gPj4+ICsJLyogR2V0IGxhc3QgQ0IgKi8NCj4g Pj4+ICsJbGFzdF9kZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX3RhaWwNCj4gPj4+ ICsJCQkrIHRvdGFsX2RlcXVldWVkX2NicyArIGNic19pbl90YiAtIDEpDQo+ID4+PiArCQkJJiBx LT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiArCS8qIENoZWNrIGlmIGxhc3QgQ0IgaW4gVEIg aXMgcmVhZHkgdG8gZGVxdWV1ZSAoYW5kIHRodXMNCj4gPj4+ICsJICogdGhlIHdob2xlIFRCKSAt IGNoZWNraW5nIHNkb25lIGJpdC4gSWYgbm90IHJldHVybi4NCj4gPj4+ICsJICovDQo+ID4+PiAr CWF0b21fZGVzYy5hdG9tX2hkciA9IF9fYXRvbWljX2xvYWRfbigodWludDY0X3QgKilsYXN0X2Rl c2MsDQo+ID4+PiArCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4+PiArCWlmICghKGF0b21fZGVz Yy5yc3AudmFsICYgQUNDMTAwX1NET05FKSkNCj4gPj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsN Cj4gPj4+ICsJLyogRGVxdWV1ZSAqLw0KPiA+Pj4gKwlvcCA9IGRlc2MtPnJlcS5vcF9hZGRyOw0K PiA+Pj4gKw0KPiA+Pj4gKwkvKiBDbGVhcmluZyBzdGF0dXMsIGl0IHdpbGwgYmUgc2V0IGJhc2Vk IG9uIHJlc3BvbnNlICovDQo+ID4+PiArCW9wLT5zdGF0dXMgPSAwOw0KPiA+Pj4gKw0KPiA+Pj4g Kwl3aGlsZSAoaSA8IGNic19pbl90Yikgew0KPiA+Pj4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciAr ICgocS0+c3dfcmluZ190YWlsDQo+ID4+PiArCQkJCSsgdG90YWxfZGVxdWV1ZWRfY2JzKQ0KPiA+ Pj4gKwkJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPj4+ICsJCWF0b21fZGVzYy5hdG9t X2hkciA9IF9fYXRvbWljX2xvYWRfbigodWludDY0X3QgKilkZXNjLA0KPiA+Pj4gKwkJCQlfX0FU T01JQ19SRUxBWEVEKTsNCj4gPj4+ICsJCXJzcC52YWwgPSBhdG9tX2Rlc2MucnNwLnZhbDsNCj4g Pj4+ICsJCXJ0ZV9iYmRldl9sb2dfZGVidWcoIlJlc3AuIGRlc2MgJXA6ICV4IiwgZGVzYywNCj4g Pj4+ICsJCQkJcnNwLnZhbCk7DQo+ID4+PiArDQo+ID4+PiArCQlvcC0+c3RhdHVzIHw9ICgocnNw LmlucHV0X2VycikNCj4gPj4+ICsJCQkJPyAoMSA8PCBSVEVfQkJERVZfREFUQV9FUlJPUikgOiAw KTsNCj4gPj4+ICsJCW9wLT5zdGF0dXMgfD0gKChyc3AuZG1hX2VycikgPyAoMSA8PA0KPiA+PiBS VEVfQkJERVZfRFJWX0VSUk9SKSA6IDApOw0KPiA+Pj4gKwkJb3AtPnN0YXR1cyB8PSAoKHJzcC5m Y3dfZXJyKSA/ICgxIDw8IFJURV9CQkRFVl9EUlZfRVJST1IpDQo+ID4+IDogMCk7DQo+ID4+PiAr DQo+ID4+PiArCQlpZiAoZGVzYy0+cmVxLmxhc3RfZGVzY19pbl9iYXRjaCkgew0KPiA+Pj4gKwkJ CSgqYXFfZGVxdWV1ZWQpKys7DQo+ID4+PiArCQkJZGVzYy0+cmVxLmxhc3RfZGVzY19pbl9iYXRj aCA9IDA7DQo+ID4+PiArCQl9DQo+ID4+PiArCQlkZXNjLT5yc3AudmFsID0gQUNDMTAwX0RNQV9E RVNDX1RZUEU7DQo+ID4+PiArCQlkZXNjLT5yc3AuYWRkX2luZm9fMCA9IDA7DQo+ID4+PiArCQlk ZXNjLT5yc3AuYWRkX2luZm9fMSA9IDA7DQo+ID4+PiArCQl0b3RhbF9kZXF1ZXVlZF9jYnMrKzsN Cj4gPj4+ICsJCWN1cnJlbnRfZGVxdWV1ZWRfY2JzKys7DQo+ID4+PiArCQlpKys7DQo+ID4+PiAr CX0NCj4gPj4+ICsNCj4gPj4+ICsJKnJlZl9vcCA9IG9wOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1 cm4gY3VycmVudF9kZXF1ZXVlZF9jYnM7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qIERl cXVldWUgb25lIGRlY29kZSBvcGVyYXRpb24gZnJvbSBBQ0MxMDAgZGV2aWNlIGluIENCIG1vZGUg Ki8NCj4gPj4+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gK2RlcXVldWVfZGVjX29uZV9vcF9j YihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPj4+ICsJCXN0cnVjdCBh Y2MxMDBfcXVldWUgKnEsIHN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqcmVmX29wLA0KPiA+Pj4g KwkJdWludDE2X3QgZGVxdWV1ZWRfY2JzLCB1aW50MzJfdCAqYXFfZGVxdWV1ZWQpDQo+ID4+PiAr ew0KPiA+Pj4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MsIGF0b21fZGVzYzsNCj4gPj4+ ICsJdW5pb24gYWNjMTAwX2RtYV9yc3BfZGVzYyByc3A7DQo+ID4+PiArCXN0cnVjdCBydGVfYmJk ZXZfZGVjX29wICpvcDsNCj4gPj4+ICsNCj4gPj4+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArICgo cS0+c3dfcmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0KPiA+Pj4gKwkJCSYgcS0+c3dfcmluZ193 cmFwX21hc2spOw0KPiA+Pj4gKwlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2FkX24o KHVpbnQ2NF90ICopZGVzYywNCj4gPj4+ICsJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPj4+ICsN Cj4gPj4+ICsJLyogQ2hlY2sgZmRvbmUgYml0ICovDQo+ID4+PiArCWlmICghKGF0b21fZGVzYy5y c3AudmFsICYgQUNDMTAwX0ZET05FKSkNCj4gPj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsNCj4g Pj4+ICsJcnNwLnZhbCA9IGF0b21fZGVzYy5yc3AudmFsOw0KPiA+Pj4gKwlydGVfYmJkZXZfbG9n X2RlYnVnKCJSZXNwLiBkZXNjICVwOiAleCIsIGRlc2MsIHJzcC52YWwpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwkvKiBEZXF1ZXVlICovDQo+ID4+PiArCW9wID0gZGVzYy0+cmVxLm9wX2FkZHI7DQo+ID4+ PiArDQo+ID4+PiArCS8qIENsZWFyaW5nIHN0YXR1cywgaXQgd2lsbCBiZSBzZXQgYmFzZWQgb24g cmVzcG9uc2UgKi8NCj4gPj4+ICsJb3AtPnN0YXR1cyA9IDA7DQo+ID4+PiArCW9wLT5zdGF0dXMg fD0gKChyc3AuaW5wdXRfZXJyKQ0KPiA+Pj4gKwkJCT8gKDEgPDwgUlRFX0JCREVWX0RBVEFfRVJS T1IpIDogMCk7DQo+ID4+IHNpbWlsYXIgdG8gYWJvdmUsIGNhbiByZW1vdmUgdGhlID0gMA0KPiA+ Pg0KPiA+PiBUaGlzIGlzIGEgZ2VuZXJhbCBpc3N1ZS4NCj4gPiBzYW1lIGNvbW1lbnQgYWJvdmUN Cj4gPg0KPiA+Pj4gKwlvcC0+c3RhdHVzIHw9ICgocnNwLmRtYV9lcnIpID8gKDEgPDwgUlRFX0JC REVWX0RSVl9FUlJPUikgOiAwKTsNCj4gPj4+ICsJb3AtPnN0YXR1cyB8PSAoKHJzcC5mY3dfZXJy KSA/ICgxIDw8IFJURV9CQkRFVl9EUlZfRVJST1IpIDogMCk7DQo+ID4+PiArCWlmIChvcC0+c3Rh dHVzICE9IDApDQo+ID4+PiArCQlxX2RhdGEtPnF1ZXVlX3N0YXRzLmRlcXVldWVfZXJyX2NvdW50 Kys7DQo+ID4+PiArDQo+ID4+PiArCS8qIENSQyBpbnZhbGlkIGlmIGVycm9yIGV4aXN0cyAqLw0K PiA+Pj4gKwlpZiAoIW9wLT5zdGF0dXMpDQo+ID4+PiArCQlvcC0+c3RhdHVzIHw9IHJzcC5jcmNf c3RhdHVzIDw8IFJURV9CQkRFVl9DUkNfRVJST1I7DQo+ID4+PiArCW9wLT50dXJib19kZWMuaXRl cl9jb3VudCA9ICh1aW50OF90KSByc3AuaXRlcl9jbnQgLyAyOw0KPiA+Pj4gKwkvKiBDaGVjayBp ZiB0aGlzIGlzIHRoZSBsYXN0IGRlc2MgaW4gYmF0Y2ggKEF0b21pYyBRdWV1ZSkgKi8NCj4gPj4+ ICsJaWYgKGRlc2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0Y2gpIHsNCj4gPj4+ICsJCSgqYXFfZGVx dWV1ZWQpKys7DQo+ID4+PiArCQlkZXNjLT5yZXEubGFzdF9kZXNjX2luX2JhdGNoID0gMDsNCj4g Pj4+ICsJfQ0KPiA+Pj4gKwlkZXNjLT5yc3AudmFsID0gQUNDMTAwX0RNQV9ERVNDX1RZUEU7DQo+ ID4+PiArCWRlc2MtPnJzcC5hZGRfaW5mb18wID0gMDsNCj4gPj4+ICsJZGVzYy0+cnNwLmFkZF9p bmZvXzEgPSAwOw0KPiA+Pj4gKwkqcmVmX29wID0gb3A7DQo+ID4+PiArDQo+ID4+PiArCS8qIE9u ZSBDQiAob3ApIHdhcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQgKi8NCj4gPj4+ICsJcmV0dXJuIDE7 DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qIERlcXVldWUgb25lIGRlY29kZSBvcGVyYXRp b25zIGZyb20gQUNDMTAwIGRldmljZSBpbiBDQiBtb2RlICovDQo+ID4+PiArc3RhdGljIGlubGlu ZSBpbnQNCj4gPj4+ICtkZXF1ZXVlX2xkcGNfZGVjX29uZV9vcF9jYihzdHJ1Y3QgcnRlX2JiZGV2 X3F1ZXVlX2RhdGENCj4gKnFfZGF0YSwNCj4gPj4+ICsJCXN0cnVjdCBhY2MxMDBfcXVldWUgKnEs IHN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqcmVmX29wLA0KPiA+Pj4gKwkJdWludDE2X3QgZGVx dWV1ZWRfY2JzLCB1aW50MzJfdCAqYXFfZGVxdWV1ZWQpDQo+ID4+PiArew0KPiA+Pj4gKwl1bmlv biBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MsIGF0b21fZGVzYzsNCj4gPj4+ICsJdW5pb24gYWNjMTAw X2RtYV9yc3BfZGVzYyByc3A7DQo+ID4+PiArCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcDsN Cj4gPj4+ICsNCj4gPj4+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ190YWls ICsgZGVxdWV1ZWRfY2JzKQ0KPiA+Pj4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ Pj4gKwlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2FkX24oKHVpbnQ2NF90ICopZGVz YywNCj4gPj4+ICsJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogQ2hl Y2sgZmRvbmUgYml0ICovDQo+ID4+PiArCWlmICghKGF0b21fZGVzYy5yc3AudmFsICYgQUNDMTAw X0ZET05FKSkNCj4gPj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsNCj4gPj4+ICsJcnNwLnZhbCA9 IGF0b21fZGVzYy5yc3AudmFsOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBEZXF1ZXVlICovDQo+ID4+ PiArCW9wID0gZGVzYy0+cmVxLm9wX2FkZHI7DQo+ID4+PiArDQo+ID4+PiArCS8qIENsZWFyaW5n IHN0YXR1cywgaXQgd2lsbCBiZSBzZXQgYmFzZWQgb24gcmVzcG9uc2UgKi8NCj4gPj4+ICsJb3At PnN0YXR1cyA9IDA7DQo+ID4+PiArCW9wLT5zdGF0dXMgfD0gcnNwLmlucHV0X2VyciA8PCBSVEVf QkJERVZfREFUQV9FUlJPUjsNCj4gPj4+ICsJb3AtPnN0YXR1cyB8PSByc3AuZG1hX2VyciA8PCBS VEVfQkJERVZfRFJWX0VSUk9SOw0KPiA+Pj4gKwlvcC0+c3RhdHVzIHw9IHJzcC5mY3dfZXJyIDw8 IFJURV9CQkRFVl9EUlZfRVJST1I7DQo+ID4+PiArCWlmIChvcC0+c3RhdHVzICE9IDApDQo+ID4+ PiArCQlxX2RhdGEtPnF1ZXVlX3N0YXRzLmRlcXVldWVfZXJyX2NvdW50Kys7DQo+ID4+PiArDQo+ ID4+PiArCW9wLT5zdGF0dXMgfD0gcnNwLmNyY19zdGF0dXMgPDwgUlRFX0JCREVWX0NSQ19FUlJP UjsNCj4gPj4+ICsJaWYgKG9wLT5sZHBjX2RlYy5oYXJkX291dHB1dC5sZW5ndGggPiAwICYmICFy c3Auc3luZF9vaykNCj4gPj4+ICsJCW9wLT5zdGF0dXMgfD0gMSA8PCBSVEVfQkJERVZfU1lORFJP TUVfRVJST1I7DQo+ID4+PiArCW9wLT5sZHBjX2RlYy5pdGVyX2NvdW50ID0gKHVpbnQ4X3QpIHJz cC5pdGVyX2NudDsNCj4gPj4+ICsNCj4gPj4+ICsJLyogQ2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFz dCBkZXNjIGluIGJhdGNoIChBdG9taWMgUXVldWUpICovDQo+ID4+PiArCWlmIChkZXNjLT5yZXEu bGFzdF9kZXNjX2luX2JhdGNoKSB7DQo+ID4+PiArCQkoKmFxX2RlcXVldWVkKSsrOw0KPiA+Pj4g KwkJZGVzYy0+cmVxLmxhc3RfZGVzY19pbl9iYXRjaCA9IDA7DQo+ID4+PiArCX0NCj4gPj4+ICsN Cj4gPj4+ICsJZGVzYy0+cnNwLnZhbCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+Pj4gKwlk ZXNjLT5yc3AuYWRkX2luZm9fMCA9IDA7DQo+ID4+PiArCWRlc2MtPnJzcC5hZGRfaW5mb18xID0g MDsNCj4gPj4+ICsNCj4gPj4+ICsJKnJlZl9vcCA9IG9wOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBP bmUgQ0IgKG9wKSB3YXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVkICovDQo+ID4+PiArCXJldHVybiAx Ow0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKiBEZXF1ZXVlIG9uZSBkZWNvZGUgb3BlcmF0 aW9ucyBmcm9tIEFDQzEwMCBkZXZpY2UgaW4gVEIgbW9kZS4gKi8NCj4gPj4+ICtzdGF0aWMgaW5s aW5lIGludA0KPiA+Pj4gK2RlcXVldWVfZGVjX29uZV9vcF90YihzdHJ1Y3QgYWNjMTAwX3F1ZXVl ICpxLCBzdHJ1Y3QNCj4gPj4gcnRlX2JiZGV2X2RlY19vcCAqKnJlZl9vcCwNCj4gPj4+ICsJCXVp bnQxNl90IGRlcXVldWVkX2NicywgdWludDMyX3QgKmFxX2RlcXVldWVkKQ0KPiA+Pj4gK3sNCj4g Pj4gc2ltaWxhciBjYWxsIGFzIGZwZ2FfbHRlX2ZlYw0KPiA+IGRpc3RpbmN0IHRob3VnaCBhcyBI VyBzcGVjaWZpYw0KPiA+DQo+ID4+PiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYywgKmxh c3RfZGVzYywgYXRvbV9kZXNjOw0KPiA+Pj4gKwl1bmlvbiBhY2MxMDBfZG1hX3JzcF9kZXNjIHJz cDsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9wOw0KPiA+Pj4gKwl1aW50OF90 IGNic19pbl90YiA9IDEsIGNiX2lkeCA9IDA7DQo+ID4+PiArDQo+ID4+PiArCWRlc2MgPSBxLT5y aW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfdGFpbCArIGRlcXVldWVkX2NicykNCj4gPj4+ICsJCQkm IHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPj4+ICsJYXRvbV9kZXNjLmF0b21faGRyID0gX19h dG9taWNfbG9hZF9uKCh1aW50NjRfdCAqKWRlc2MsDQo+ID4+PiArCQkJX19BVE9NSUNfUkVMQVhF RCk7DQo+ID4+PiArDQo+ID4+PiArCS8qIENoZWNrIGZkb25lIGJpdCAqLw0KPiA+Pj4gKwlpZiAo IShhdG9tX2Rlc2MucnNwLnZhbCAmIEFDQzEwMF9GRE9ORSkpDQo+ID4+PiArCQlyZXR1cm4gLTE7 DQo+ID4+PiArDQo+ID4+PiArCS8qIERlcXVldWUgKi8NCj4gPj4+ICsJb3AgPSBkZXNjLT5yZXEu b3BfYWRkcjsNCj4gPj4+ICsNCj4gPj4+ICsJLyogR2V0IG51bWJlciBvZiBDQnMgaW4gZGVxdWV1 ZWQgVEIgKi8NCj4gPj4+ICsJY2JzX2luX3RiID0gZGVzYy0+cmVxLmNic19pbl90YjsNCj4gPj4+ ICsJLyogR2V0IGxhc3QgQ0IgKi8NCj4gPj4+ICsJbGFzdF9kZXNjID0gcS0+cmluZ19hZGRyICsg KChxLT5zd19yaW5nX3RhaWwNCj4gPj4+ICsJCQkrIGRlcXVldWVkX2NicyArIGNic19pbl90YiAt IDEpDQo+ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiArCS8qIENoZWNr IGlmIGxhc3QgQ0IgaW4gVEIgaXMgcmVhZHkgdG8gZGVxdWV1ZSAoYW5kIHRodXMNCj4gPj4+ICsJ ICogdGhlIHdob2xlIFRCKSAtIGNoZWNraW5nIHNkb25lIGJpdC4gSWYgbm90IHJldHVybi4NCj4g Pj4+ICsJICovDQo+ID4+PiArCWF0b21fZGVzYy5hdG9tX2hkciA9IF9fYXRvbWljX2xvYWRfbigo dWludDY0X3QgKilsYXN0X2Rlc2MsDQo+ID4+PiArCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4+ PiArCWlmICghKGF0b21fZGVzYy5yc3AudmFsICYgQUNDMTAwX1NET05FKSkNCj4gPj4+ICsJCXJl dHVybiAtMTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogQ2xlYXJpbmcgc3RhdHVzLCBpdCB3aWxsIGJl IHNldCBiYXNlZCBvbiByZXNwb25zZSAqLw0KPiA+Pj4gKwlvcC0+c3RhdHVzID0gMDsNCj4gPj4+ ICsNCj4gPj4+ICsJLyogUmVhZCByZW1haW5pbmcgQ0JzIGlmIGV4aXN0cyAqLw0KPiA+Pj4gKwl3 aGlsZSAoY2JfaWR4IDwgY2JzX2luX3RiKSB7DQo+ID4+IE90aGVyIHNpbWlsYXIgY2FsbHMgdXNl ICdpJyAsICdjYl9pZHgnIGlzIG1vcmUgbWVhbmluZ2Z1bCwgY29uc2lkZXIgY2hhbmdpbmcNCj4g dGhlDQo+ID4+IG90aGVyIGxvb3BzLg0KPiA+IE1vcmUgcmVsZXZhbnQgaGVyZSBkdWUgdG8gc3Bs aXQgb2YgVEIgaW50byBDQnMuDQo+IG9rDQo+ID4+PiArCQlkZXNjID0gcS0+cmluZ19hZGRyICsg KChxLT5zd19yaW5nX3RhaWwgKyBkZXF1ZXVlZF9jYnMpDQo+ID4+PiArCQkJCSYgcS0+c3dfcmlu Z193cmFwX21hc2spOw0KPiA+Pj4gKwkJYXRvbV9kZXNjLmF0b21faGRyID0gX19hdG9taWNfbG9h ZF9uKCh1aW50NjRfdCAqKWRlc2MsDQo+ID4+PiArCQkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ Pj4gKwkJcnNwLnZhbCA9IGF0b21fZGVzYy5yc3AudmFsOw0KPiA+Pj4gKwkJcnRlX2JiZGV2X2xv Z19kZWJ1ZygiUmVzcC4gZGVzYyAlcDogJXgiLCBkZXNjLA0KPiA+Pj4gKwkJCQlyc3AudmFsKTsN Cj4gPj4+ICsNCj4gPj4+ICsJCW9wLT5zdGF0dXMgfD0gKChyc3AuaW5wdXRfZXJyKQ0KPiA+Pj4g KwkJCQk/ICgxIDw8IFJURV9CQkRFVl9EQVRBX0VSUk9SKSA6IDApOw0KPiA+Pj4gKwkJb3AtPnN0 YXR1cyB8PSAoKHJzcC5kbWFfZXJyKSA/ICgxIDw8DQo+ID4+IFJURV9CQkRFVl9EUlZfRVJST1Ip IDogMCk7DQo+ID4+PiArCQlvcC0+c3RhdHVzIHw9ICgocnNwLmZjd19lcnIpID8gKDEgPDwgUlRF X0JCREVWX0RSVl9FUlJPUikNCj4gPj4gOiAwKTsNCj4gPj4+ICsNCj4gPj4+ICsJCS8qIENSQyBp bnZhbGlkIGlmIGVycm9yIGV4aXN0cyAqLw0KPiA+Pj4gKwkJaWYgKCFvcC0+c3RhdHVzKQ0KPiA+ Pj4gKwkJCW9wLT5zdGF0dXMgfD0gcnNwLmNyY19zdGF0dXMgPDwNCj4gPj4gUlRFX0JCREVWX0NS Q19FUlJPUjsNCj4gPj4+ICsJCW9wLT50dXJib19kZWMuaXRlcl9jb3VudCA9IFJURV9NQVgoKHVp bnQ4X3QpIHJzcC5pdGVyX2NudCwNCj4gPj4+ICsJCQkJb3AtPnR1cmJvX2RlYy5pdGVyX2NvdW50 KTsNCj4gPj4+ICsNCj4gPj4+ICsJCS8qIENoZWNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgZGVzYyBp biBiYXRjaCAoQXRvbWljIFF1ZXVlKSAqLw0KPiA+Pj4gKwkJaWYgKGRlc2MtPnJlcS5sYXN0X2Rl c2NfaW5fYmF0Y2gpIHsNCj4gPj4+ICsJCQkoKmFxX2RlcXVldWVkKSsrOw0KPiA+Pj4gKwkJCWRl c2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0Y2ggPSAwOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKwkJZGVz Yy0+cnNwLnZhbCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+Pj4gKwkJZGVzYy0+cnNwLmFk ZF9pbmZvXzAgPSAwOw0KPiA+Pj4gKwkJZGVzYy0+cnNwLmFkZF9pbmZvXzEgPSAwOw0KPiA+Pj4g KwkJZGVxdWV1ZWRfY2JzKys7DQo+ID4+PiArCQljYl9pZHgrKzsNCj4gPj4+ICsJfQ0KPiA+Pj4g Kw0KPiA+Pj4gKwkqcmVmX29wID0gb3A7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBjYl9pZHg7 DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qIERlcXVldWUgTERQQyBlbmNvZGUgb3BlcmF0 aW9ucyBmcm9tIEFDQzEwMCBkZXZpY2UuICovDQo+ID4+PiArc3RhdGljIHVpbnQxNl90DQo+ID4+ PiArYWNjMTAwX2RlcXVldWVfbGRwY19lbmMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpx X2RhdGEsDQo+ID4+PiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqKm9wcywgdWludDE2X3Qg bnVtKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSA9IHFfZGF0YS0+ cXVldWVfcHJpdmF0ZTsNCj4gPj4+ICsJdWludDMyX3QgYXZhaWwgPSBxLT5zd19yaW5nX2hlYWQg LSBxLT5zd19yaW5nX3RhaWw7DQo+ID4+PiArCXVpbnQzMl90IGFxX2RlcXVldWVkID0gMDsNCj4g Pj4+ICsJdWludDE2X3QgZGVxdWV1ZV9udW0sIGksIGRlcXVldWVkX2NicyA9IDAsIGRlcXVldWVk X2Rlc2NzID0gMDsNCj4gPj4+ICsJaW50IHJldDsNCj4gPj4+ICsNCj4gPj4+ICsjaWZkZWYgUlRF X0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+Pj4gKwlpZiAodW5saWtlbHkob3BzID09IDAgJiYgcSA9 PSBOVUxMKSkNCj4gPj4+ICsJCXJldHVybiAwOw0KPiA+Pj4gKyNlbmRpZg0KPiA+Pj4gKw0KPiA+ Pj4gKwlkZXF1ZXVlX251bSA9IChhdmFpbCA8IG51bSkgPyBhdmFpbCA6IG51bTsNCj4gPj4gU2lt aWxhciB0byBSVEVfTUlODQo+ID4+DQo+ID4+IGdlbmVyYWwgaXNzdWUNCj4gPiBvaywgd2lsbCBj aGVjaw0KPiA+DQo+ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBkZXF1ZXVlX251bTsg aSsrKSB7DQo+ID4+PiArCQlyZXQgPSBkZXF1ZXVlX2VuY19vbmVfb3BfY2IocSwgJm9wc1tkZXF1 ZXVlZF9jYnNdLA0KPiA+Pj4gKwkJCQlkZXF1ZXVlZF9kZXNjcywgJmFxX2RlcXVldWVkKTsNCj4g Pj4+ICsJCWlmIChyZXQgPCAwKQ0KPiA+Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwkJZGVxdWV1ZWRf Y2JzICs9IHJldDsNCj4gPj4+ICsJCWRlcXVldWVkX2Rlc2NzKys7DQo+ID4+PiArCQlpZiAoZGVx dWV1ZWRfY2JzID49IG51bSkNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4gY29uZGl0aW9uIHNob3Vs ZCBiZSBhZGRlZCB0byB0aGUgZm9yLWxvb3ANCj4gPiB1bnN1cmUgdGhpcyB3b3VsZCBoZWxwcyBy ZWFkYWJpbGl0eSBwZXJzb25uYWx5DQo+IA0KPiBvaw0KPiANCj4gVG9tDQo+IA0KPiA+Pj4gKwl9 DQo+ID4+PiArDQo+ID4+PiArCXEtPmFxX2RlcXVldWVkICs9IGFxX2RlcXVldWVkOw0KPiA+Pj4g KwlxLT5zd19yaW5nX3RhaWwgKz0gZGVxdWV1ZWRfZGVzY3M7DQo+ID4+PiArDQo+ID4+PiArCS8q IFVwZGF0ZSBlbnF1ZXVlIHN0YXRzICovDQo+ID4+PiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZGVx dWV1ZWRfY291bnQgKz0gZGVxdWV1ZWRfY2JzOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gZGVx dWV1ZWRfY2JzOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKiBEZXF1ZXVlIGRlY29kZSBv cGVyYXRpb25zIGZyb20gQUNDMTAwIGRldmljZS4gKi8NCj4gPj4+ICtzdGF0aWMgdWludDE2X3QN Cj4gPj4+ICthY2MxMDBfZGVxdWV1ZV9sZHBjX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2Rh dGEgKnFfZGF0YSwNCj4gPj4+ICsJCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50 MTZfdCBudW0pDQo+ID4+PiArew0KPiA+Pj4gKwlzdHJ1Y3QgYWNjMTAwX3F1ZXVlICpxID0gcV9k YXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+Pj4gKwl1aW50MTZfdCBkZXF1ZXVlX251bTsNCj4gPj4+ ICsJdWludDMyX3QgYXZhaWwgPSBxLT5zd19yaW5nX2hlYWQgLSBxLT5zd19yaW5nX3RhaWw7DQo+ ID4+PiArCXVpbnQzMl90IGFxX2RlcXVldWVkID0gMDsNCj4gPj4+ICsJdWludDE2X3QgaTsNCj4g Pj4+ICsJdWludDE2X3QgZGVxdWV1ZWRfY2JzID0gMDsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9iYmRl dl9kZWNfb3AgKm9wOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKw0KPiA+Pj4gKyNpZmRlZiBS VEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4+PiArCWlmICh1bmxpa2VseShvcHMgPT0gMCAmJiBx ID09IE5VTEwpKQ0KPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArDQo+ ID4+PiArCWRlcXVldWVfbnVtID0gKGF2YWlsIDwgbnVtKSA/IGF2YWlsIDogbnVtOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgZGVxdWV1ZV9udW07ICsraSkgew0KPiA+Pj4gKwkJ b3AgPSAocS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX3RhaWwgKyBkZXF1ZXVlZF9jYnMpDQo+ ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzaykpLT5yZXEub3BfYWRkcjsNCj4gPj4+ICsJ CWlmIChvcC0+bGRwY19kZWMuY29kZV9ibG9ja19tb2RlID09IDApDQo+ID4+IDAgc2hvdWxkIGJl IGEgI2RlZmluZQ0KPiA+IG1lbnRpb25lZCBpbiBwcmV2aW91cyByZXZpZXcuDQo+ID4NCj4gPiBU aGFua3MNCj4gPg0KPiA+PiBUb20NCj4gPj4NCj4gPj4+ICsJCQlyZXQgPSBkZXF1ZXVlX2RlY19v bmVfb3BfdGIocSwgJm9wc1tpXSwNCj4gPj4gZGVxdWV1ZWRfY2JzLA0KPiA+Pj4gKwkJCQkJJmFx X2RlcXVldWVkKTsNCj4gPj4+ICsJCWVsc2UNCj4gPj4+ICsJCQlyZXQgPSBkZXF1ZXVlX2xkcGNf ZGVjX29uZV9vcF9jYigNCj4gPj4+ICsJCQkJCXFfZGF0YSwgcSwgJm9wc1tpXSwgZGVxdWV1ZWRf Y2JzLA0KPiA+Pj4gKwkJCQkJJmFxX2RlcXVldWVkKTsNCj4gPj4+ICsNCj4gPj4+ICsJCWlmIChy ZXQgPCAwKQ0KPiA+Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwkJZGVxdWV1ZWRfY2JzICs9IHJldDsN Cj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlxLT5hcV9kZXF1ZXVlZCArPSBhcV9kZXF1ZXVl ZDsNCj4gPj4+ICsJcS0+c3dfcmluZ190YWlsICs9IGRlcXVldWVkX2NiczsNCj4gPj4+ICsNCj4g Pj4+ICsJLyogVXBkYXRlIGVucXVldWUgc3RhdHMgKi8NCj4gPj4+ICsJcV9kYXRhLT5xdWV1ZV9z dGF0cy5kZXF1ZXVlZF9jb3VudCArPSBpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gaTsNCj4g Pj4+ICt9DQo+ID4+PiArDQo+ID4+PiAgLyogSW5pdGlhbGl6YXRpb24gRnVuY3Rpb24gKi8NCj4g Pj4+ICBzdGF0aWMgdm9pZA0KPiA+Pj4gIGFjYzEwMF9iYmRldl9pbml0KHN0cnVjdCBydGVfYmJk ZXYgKmRldiwgc3RydWN0IHJ0ZV9wY2lfZHJpdmVyICpkcnYpDQo+ID4+PiBAQCAtNzAzLDYgKzIz MjEsMTAgQEANCj4gPj4+ICAJc3RydWN0IHJ0ZV9wY2lfZGV2aWNlICpwY2lfZGV2ID0gUlRFX0RF Vl9UT19QQ0koZGV2LT5kZXZpY2UpOw0KPiA+Pj4NCj4gPj4+ICAJZGV2LT5kZXZfb3BzID0gJmFj YzEwMF9iYmRldl9vcHM7DQo+ID4+PiArCWRldi0+ZW5xdWV1ZV9sZHBjX2VuY19vcHMgPSBhY2Mx MDBfZW5xdWV1ZV9sZHBjX2VuYzsNCj4gPj4+ICsJZGV2LT5lbnF1ZXVlX2xkcGNfZGVjX29wcyA9 IGFjYzEwMF9lbnF1ZXVlX2xkcGNfZGVjOw0KPiA+Pj4gKwlkZXYtPmRlcXVldWVfbGRwY19lbmNf b3BzID0gYWNjMTAwX2RlcXVldWVfbGRwY19lbmM7DQo+ID4+PiArCWRldi0+ZGVxdWV1ZV9sZHBj X2RlY19vcHMgPSBhY2MxMDBfZGVxdWV1ZV9sZHBjX2RlYzsNCj4gPj4+DQo+ID4+PiAgCSgoc3Ry dWN0IGFjYzEwMF9kZXZpY2UgKikgZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZSktPnBmX2RldmljZSA9 DQo+ID4+PiAgCQkJIXN0cmNtcChkcnYtPmRyaXZlci5uYW1lLA0KPiA+Pj4gQEAgLTgxNSw0ICsy NDM3LDMgQEAgc3RhdGljIGludCBhY2MxMDBfcGNpX3JlbW92ZShzdHJ1Y3QNCj4gPj4gcnRlX3Bj aV9kZXZpY2UgKnBjaV9kZXYpDQo+ID4+PiAgUlRFX1BNRF9SRUdJU1RFUl9QQ0lfVEFCTEUoQUND MTAwUEZfRFJJVkVSX05BTUUsDQo+ID4+IHBjaV9pZF9hY2MxMDBfcGZfbWFwKTsNCj4gPj4+ICBS VEVfUE1EX1JFR0lTVEVSX1BDSShBQ0MxMDBWRl9EUklWRVJfTkFNRSwNCj4gPj4gYWNjMTAwX3Bj aV92Zl9kcml2ZXIpOw0KPiA+Pj4gIFJURV9QTURfUkVHSVNURVJfUENJX1RBQkxFKEFDQzEwMFZG X0RSSVZFUl9OQU1FLA0KPiA+PiBwY2lfaWRfYWNjMTAwX3ZmX21hcCk7DQo+ID4+PiAtDQo+ID4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlYmFuZC9hY2MxMDAvcnRlX2FjYzEwMF9wbWQuaA0K PiA+PiBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmgNCj4gPj4+IGlu ZGV4IDBlMmI3OWMuLjc4Njg2YzEgMTAwNjQ0DQo+ID4+PiAtLS0gYS9kcml2ZXJzL2Jhc2ViYW5k L2FjYzEwMC9ydGVfYWNjMTAwX3BtZC5oDQo+ID4+PiArKysgYi9kcml2ZXJzL2Jhc2ViYW5kL2Fj YzEwMC9ydGVfYWNjMTAwX3BtZC5oDQo+ID4+PiBAQCAtODgsNiArODgsOCBAQA0KPiA+Pj4gICNk ZWZpbmUgVE1QTF9QUklfMyAgICAgIDB4MGYwZTBkMGMNCj4gPj4+ICAjZGVmaW5lIFFVRVVFX0VO QUJMRSAgICAweDgwMDAwMDAwICAvKiBCaXQgdG8gbWFyayBRdWV1ZSBhcyBFbmFibGVkDQo+ICov DQo+ID4+PiAgI2RlZmluZSBXT1JEU19JTl9BUkFNX1NJWkUgKDEyOCAqIDEwMjQgLyA0KQ0KPiA+ Pj4gKyNkZWZpbmUgQUNDMTAwX0ZET05FICAgIDB4ODAwMDAwMDANCj4gPj4+ICsjZGVmaW5lIEFD QzEwMF9TRE9ORSAgICAweDQwMDAwMDAwDQo+ID4+Pg0KPiA+Pj4gICNkZWZpbmUgQUNDMTAwX05V TV9UTVBMICAzMg0KPiA+Pj4gICNkZWZpbmUgVkZfT0ZGU0VUX1FPUyAxNiAvKiBvZmZzZXQgaW4g TWVtb3J5IFNwYWNlIHNwZWNpZmljIHRvIFFvUw0KPiA+PiBNb24gKi8NCj4gPj4+IEBAIC0zOTgs NiArNDAwLDcgQEAgc3RydWN0IF9fcnRlX3BhY2tlZCBhY2MxMDBfZG1hX3JlcV9kZXNjIHsNCj4g Pj4+ICB1bmlvbiBhY2MxMDBfZG1hX2Rlc2Mgew0KPiA+Pj4gIAlzdHJ1Y3QgYWNjMTAwX2RtYV9y ZXFfZGVzYyByZXE7DQo+ID4+PiAgCXVuaW9uIGFjYzEwMF9kbWFfcnNwX2Rlc2MgcnNwOw0KPiA+ Pj4gKwl1aW50NjRfdCBhdG9tX2hkcjsNCj4gPj4+ICB9Ow0KPiA+Pj4NCj4gPj4+DQoNCg==