From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 96604A0548; Sat, 24 Sep 2022 00:21:16 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3FC6540156; Sat, 24 Sep 2022 00:21:16 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 87DC8400D4 for ; Sat, 24 Sep 2022 00:21:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663971674; x=1695507674; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=E/l6u1BKsj0/o56mpLDUcyczwDX7HFIi8OMr9Q2byd4=; b=f8Ux57nlc9rKmimRhyAC1+sLcpvE8WT2bvFm1POGgwFbgYWQisJLe5xF tI6weUhWrW09o0qz1T8Y51TcIf+ZbIpDSgTrjkVTjUUrOnfoFribBXVCh IaVLwp/nJHVmYEYIzdudL0TBtbb7eCML55fg2xBGkjOdAzEm/opbzFliK tBQg0GHF8D1rgUxPVc7JWv7buAC+eAIgXaHgMXmBrK0zk+NNpk3eYgTzM qq3mwJgDpodfPmPhzxT+J4IN3MQTh5XMJfpcj6jtaDzk+oNxVINUG2l/K aBE8E4ywhL/hiW9Wt3BNoWgUCK2I0W3yFk17sDhGxBeKU4VdGLNO7WZXx w==; X-IronPort-AV: E=McAfee;i="6500,9779,10479"; a="300690635" X-IronPort-AV: E=Sophos;i="5.93,340,1654585200"; d="scan'208";a="300690635" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2022 15:21:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,340,1654585200"; d="scan'208";a="949190049" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga005.fm.intel.com with ESMTP; 23 Sep 2022 15:21:13 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 15:21:13 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Fri, 23 Sep 2022 15:21:13 -0700 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.44) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Fri, 23 Sep 2022 15:21:12 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SiKzjkLYUhYKhWkrqR7miI8VVvfSs7BNHlZGpC0i1O7x8Z2Lj/r4QggNG64wOYKFAfFir7clD9WSkTJGZHeeMc26fnc3u3llap/s3xwMA2rKg0m4BoY6Nu+KoMcWRAKuq8lrCjtZJ8Hzu8Qn1QyBkHK/ziyFbPQaWvWweskl08nlxSsWKhM18Hi9UD+YZ5ZXFL9upfucrFr4M6ZZLwomDH/LNJhjRF5uqtvxF/qy1JZ4tjb/0d+M1hQlt2cqJDRfUGrtLnxlpaLFK6gu+7D2If9lxvWgzrUnoXk58lkQM3k7ZB4zS99KjsGhTN+qLwMwKyISLlkrMS7bebvCSp/Jxg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E/l6u1BKsj0/o56mpLDUcyczwDX7HFIi8OMr9Q2byd4=; b=O0GTAwWXeTkwZHeNswj48/3eSFspFuw1rXS0wxDzSomw7Iy4NcE230zAe3e/MH/FHSUQ2b7eW79ITLz5oE0XKhxJSxaBGFIpXG71IwvmCcgCUBT+zqoWye9fB0msy/XKoObKwBzW+mlgv2rIZLdid8YHAgy5v7IJJvt3O3B7YcmhAAObc8D4AZDCIasD+GDqkuy2Gtry0vL6NEPxPeblkn+xBQ8Tx0JFTRaTBcrk3UrTmFdxbpfQkrZ0TU7e1jamuz1cxWWUuPAhL6/ru/UUR0Otzow3CBtGY8iTv7RcUcL7/tAd0FtUrEkctg3CtycAGcHkXwyPMu3sHPaMMOlN8g== 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 Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by SA2PR11MB5209.namprd11.prod.outlook.com (2603:10b6:806:110::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep 2022 22:21:10 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf%7]) with mapi id 15.20.5654.020; Fri, 23 Sep 2022 22:21:10 +0000 From: "Chautru, Nicolas" To: Maxime Coquelin , "dev@dpdk.org" , "thomas@monjalon.net" CC: "trix@redhat.com" , "mdr@ashroe.eu" , "Richardson, Bruce" , "hemant.agrawal@nxp.com" , "david.marchand@redhat.com" , "stephen@networkplumber.org" , "Vargas, Hernan" Subject: RE: [PATCH v4 09/14] baseband/acc: add LTE processing functions Thread-Topic: [PATCH v4 09/14] baseband/acc: add LTE processing functions Thread-Index: AQHYzho1NwR2a2H9i0G5t+ooX9EHbK3suWiAgADdlOA= Date: Fri, 23 Sep 2022 22:21:10 +0000 Message-ID: References: <1663806460-45162-1-git-send-email-nicolas.chautru@intel.com> <1663806460-45162-10-git-send-email-nicolas.chautru@intel.com> <3f35e2e1-97fe-284d-7886-854802d0fe0a@redhat.com> In-Reply-To: <3f35e2e1-97fe-284d-7886-854802d0fe0a@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.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BY5PR11MB4451:EE_|SA2PR11MB5209:EE_ x-ms-office365-filtering-correlation-id: a2fffad9-8ed7-4be7-0fa1-08da9db1eaf6 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5TUXOMXjE26sSG1dGBuDD0bqt3ClYx7R2DlKrvIQKfanvC2l/gIb7SZpHXc2/OOZ+YF/meqbhSGPKTEuUDITTBXWdk9+TQWkvyQT4t+1o6G4CcaB+z/alrCrsaM8ZLh5hOa3zcmUQJJK4YpMewjkQgLOcK1eWOPOgMYeuBM1oCYRWxzILEM3pikSkd2HYao9OurFUEKTj9qZyIClLxnjaFRwVR1m20kBKzYc894YcZyLMX+CfHMeT5FzLMV/6LuthYeVx7RMcWjaCfnfAhalqPaJWNqw6BRi167xmlWTONzay4a0x8+Ygc5lq1b/3Hc9ofu3qt8hSZCV++2TIUd3UBxNLSRH8mXMTkrKogkGe+WkHRznUWkMaGJzFbGSo1whF85K36SGQ/bHTcCuZebiuAsjZ8WJB1pkvS5CaPowQfGgOIhmd6TM934iG+Hmw5yfS6LZDo2jFcfDyKl3sEE8ZtbarTIpKnb7kDFNikz9C0V1JDuwYnDhU6wZvztJSeawkCL8Q+MfyBlXl+D7wgO9Bzeit41WxitxJq2uIJmPvZspXBIMiQTx4yVcIYkih1/Vp/KejGu3MdBs3LcH1AESNYHlMpXqGzY1YxkIXiKdghaVSeSixl7o9U2ajMOc+oIAihYSmBuBmwXw2a+/fRb6XWSfM0dp7xTZIycUmmQyK84jfLvppq2sTdXvTkr2OPpyxhRc+w2lXzDy0GthQgYErDXfgyO6QuJ3yArxsb6/wOS7BEPxMdM7pvt0SeqHIVla+vTXxqwZBRk+eiu76656dvPFgGqPnysenhSFcRjHmbw= 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:(13230022)(136003)(366004)(39860400002)(346002)(376002)(396003)(451199015)(38070700005)(71200400001)(110136005)(316002)(54906003)(122000001)(38100700002)(82960400001)(2906002)(76116006)(5660300002)(30864003)(186003)(86362001)(478600001)(55016003)(66556008)(66476007)(66446008)(64756008)(66946007)(8676002)(4326008)(83380400001)(52536014)(7696005)(8936002)(53546011)(6506007)(9686003)(26005)(33656002)(107886003)(41300700001)(461764006)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?a0xWZ0k1K0xPZEhaclRMeHFZZENpSzd2WVp6KzREM0x5bUNMUHFIejYxOFk3?= =?utf-8?B?RG9KS0NMU3BnNzAzUGV6TkFmdkRDeHUxQTlIekJVS0t0TU4xazlvQzV0QUdi?= =?utf-8?B?N2ROc2xzYzBVWWhBdENTZ1dRenQ5SEpONDd5VURISGs3SWFmVVpsLzNJZ2RV?= =?utf-8?B?YUpCNExrWTdVdXRtcjhBWGp3ZzQ1UmMvQWQva3ROamxuMmJ5dnZLZjViVkxO?= =?utf-8?B?NE5wZFhCbUtlUlk2S3ZWcndGL3RUQ1h2NnlYb2FGbjZ2Nm0xeG5xbWFQcUxI?= =?utf-8?B?ZkpSNXJFRjQ4c1h3NU1YY204NlkzUGtPVk9nRTZwN1lmMHlaeXBHNVFycGZm?= =?utf-8?B?RVdBVkdNOUo2ZmFQdmZKbzFWL1hUSmxUTlJEM2pseFJNdWRkbXpBaTVLbFlj?= =?utf-8?B?akxSNmNkQTE4Mm5TUGFpQkRHUi9ySjZ2c0JYTlNrWWRYb3pNZjZGaDV6U0o5?= =?utf-8?B?OFdtQmhwTVpKSDI2SW43UHBQNmFVcGtITU0yMko2NFJudEcwMWhkNVl3TUVk?= =?utf-8?B?S1F5dHlVdDZBY3d1WmNDNTB1TWQ1aFJ4b0dmK3V1L1FhSGxDcXRiMHlVS3Vr?= =?utf-8?B?T0pNUVg0MWtWZStXejlQYk5ZU1JnclN5MnRRbEp1eGJ1RGtrM2dMcnBaVVhW?= =?utf-8?B?empoWUJIVEt5SDZ2WVcyM1JmTWxudXAvWE53WmloVUE5SUcwUTFTb1E0aFF0?= =?utf-8?B?Uis3c0hIdVFxWG5sZUFmZ3ZRVUY4RGFWbGQrNHg2cFdmSlEyeStlYmwreUJ2?= =?utf-8?B?dDMyN3I1U1VsTFA1VHQzczN0K1NLSUZISWk4ZWZ0ekMrc1RsNE9pK0ZvWk9i?= =?utf-8?B?bUpuRFlsQUJ4V3dQekJMTXFZOE4zVmYzdWJINEd0RHVZaW1vMlUyWlBzM2g5?= =?utf-8?B?c1RLMmlYREdhNHQvVWpqR0piY0ZhdHIySVRraUVJeWMvdDlFR29pN2wyaVNk?= =?utf-8?B?REdwNVlxS2ZFNnQ4WUYyK0dNajlsNDVUZEc3UWdNYVZET3hSbFc5aWV0Mkl4?= =?utf-8?B?SnRkdXgvQWt3aDh4Ym0xUURKQ1RQcm9mQWUrblY4dEFtZUlJdWhLS3NreDJQ?= =?utf-8?B?OExFd29zOHlkQVBpdEJhUmVQMGpxY28yNlk4VEJqcis1Njc2dWFWM3grUk1w?= =?utf-8?B?NTQzWmlJeStsOUNNTkUzSGI0RFZoNlBDNzVPNzExbkdENVNwZm9QdkdyTUE5?= =?utf-8?B?ZjZicDZJZ3ZPV2VxSlJSMFBHK2JOWW93aVF4ODVRbmVQZkxjd0FSQUtjNTMv?= =?utf-8?B?aXJ3T3MrMXlhZFVRSEJZUy81NWoyMVU1dm9GVnlzcVBjZzVHK3dKVnVUNjFy?= =?utf-8?B?ZlZLTTFOTlFlZHN0eGZBM0hocjFGZ0VPR3ExTHAzRjlWZHlJaGsvNHpSRzVQ?= =?utf-8?B?QjVraUpLQ0xQZ2IybzFJWFBsZlZldTlNcHh6cGVyY0poMGRoYkFNcEF1eGJq?= =?utf-8?B?ZXpiZ2ZkbUN3Nyt2M2VTZUFsdVk3ZU5KWllncUNXMzl4aDE2SFpoNUhicmta?= =?utf-8?B?T0tQSmZhdWMzaDAzRnA1bm9jWGtXNlpTOHVjZk5SNzcwa0I1UmZLT3dQSFRQ?= =?utf-8?B?QnU5OVhlc2pwY2l1R3I4SGlabDJZNXF4bEppTXQ5b0VUVFZyb2pWZHVZeUNK?= =?utf-8?B?TXFqK1ZCVkJTNDJXcHlmUW1xS2RUSmxmWmgyQXRwdU52NzVoZGJmK25JRWNy?= =?utf-8?B?cEhuOXBaMlJ5NlRtR05UdW5OZzdHRWdkUkEvS2hXL1QrUXZsM2l1UDBTUlcy?= =?utf-8?B?SGZoSFU3QnFKVVJack13cWJqMHF0Ykw2M3lZQUpMQU42ei91cWI4VEpuT1gw?= =?utf-8?B?WFNQZVVCdW50aHFtYTVVNzBMSEt1MEQ3SURsNUlocEEyZndxeTgzY2IxRkJJ?= =?utf-8?B?RFpEM2kxMmc2czlrVHZqQ0VWUlBzQm5kU09FUlZCM1pPS2tiMUZTMTVVWHRO?= =?utf-8?B?a1hxaWluWUExNm56QXZjWUdXNFdLUFNzZGZGeThWeDdKR0lzRHRHRk5wZE1X?= =?utf-8?B?WDA3UnViMlZGSmUzZ1BBaDZXaTBpNFZqNVNrQ0M5ZXJkbUpnSFJvdThZMEZJ?= =?utf-8?B?MSt2NXFNZ1Qzd1NwRmZZNFdZUXd3U1VEZnJINU1JbFpMS2loRVdFWHdYTXhm?= =?utf-8?Q?ABBkrSeiNznf7x716ZmyW/TCl?= 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: a2fffad9-8ed7-4be7-0fa1-08da9db1eaf6 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2022 22:21:10.2956 (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: 7AfgTlqQef9zBL+8AuIumNZuJ7RE4qb3xhqa5/uYczcvQyHdbUmoUOcBv23N5bP4q9Q6hyrvgQi1Eh/iNrYbF2dEgZpmFGFCIPjcoNauwu8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5209 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgTWF4aW1lLCANCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNYXhp bWUgQ29xdWVsaW4gPG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPg0KPiBTZW50OiBGcmlkYXks IFNlcHRlbWJlciAyMywgMjAyMiAyOjAwIEFNDQo+IFRvOiBDaGF1dHJ1LCBOaWNvbGFzIDxuaWNv bGFzLmNoYXV0cnVAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnOw0KPiB0aG9tYXNAbW9uamFsb24u bmV0DQo+IENjOiB0cml4QHJlZGhhdC5jb207IG1kckBhc2hyb2UuZXU7IFJpY2hhcmRzb24sIEJy dWNlDQo+IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IGhlbWFudC5hZ3Jhd2FsQG54cC5j b207DQo+IGRhdmlkLm1hcmNoYW5kQHJlZGhhdC5jb207IHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIu b3JnOyBWYXJnYXMsIEhlcm5hbg0KPiA8aGVybmFuLnZhcmdhc0BpbnRlbC5jb20+DQo+IFN1Ympl Y3Q6IFJlOiBbUEFUQ0ggdjQgMDkvMTRdIGJhc2ViYW5kL2FjYzogYWRkIExURSBwcm9jZXNzaW5n IGZ1bmN0aW9ucw0KPiANCj4gDQo+IA0KPiBPbiA5LzIyLzIyIDAyOjI3LCBOaWMgQ2hhdXRydSB3 cm90ZToNCj4gPiBBZGQgZnVuY3Rpb25zIGFuZCBjYXBhYmlsaXR5IGZvciA0RyBGRUMNCj4gPg0K PiA+IFNpZ25lZC1vZmYtYnk6IE5pYyBDaGF1dHJ1IDxuaWNvbGFzLmNoYXV0cnVAaW50ZWwuY29t Pg0KPiA+IC0tLQ0KPiA+ICAgZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYyB8 IDg5NA0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+ID4gICAxIGZpbGUg Y2hhbmdlZCwgODc0IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjL3J0ZV9hY2MyMDBfcG1kLmMNCj4gPiBiL2Ry aXZlcnMvYmFzZWJhbmQvYWNjL3J0ZV9hY2MyMDBfcG1kLmMNCj4gPiBpbmRleCAxYzU5NTU5Li4z NWVhMGZlIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjL3J0ZV9hY2MyMDBf cG1kLmMNCj4gPiArKysgYi9kcml2ZXJzL2Jhc2ViYW5kL2FjYy9ydGVfYWNjMjAwX3BtZC5jDQo+ ID4gQEAgLTY0MSw2ICs2NDEsNDYgQEANCj4gPiAgIAlpbnQgaTsNCj4gPiAgIAlzdGF0aWMgY29u c3Qgc3RydWN0IHJ0ZV9iYmRldl9vcF9jYXAgYmJkZXZfY2FwYWJpbGl0aWVzW10gPSB7DQo+ID4g ICAJCXsNCj4gPiArCQkJLnR5cGUgPSBSVEVfQkJERVZfT1BfVFVSQk9fREVDLA0KPiA+ICsJCQku Y2FwLnR1cmJvX2RlYyA9IHsNCj4gPiArCQkJCS5jYXBhYmlsaXR5X2ZsYWdzID0NCj4gPiArDQo+ IAlSVEVfQkJERVZfVFVSQk9fU1VCQkxPQ0tfREVJTlRFUkxFQVZFIHwNCj4gPiArCQkJCQlSVEVf QkJERVZfVFVSQk9fQ1JDX1RZUEVfMjRCIHwNCj4gPiArCQkJCQlSVEVfQkJERVZfVFVSQk9fRVFV QUxJWkVSIHwNCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fU09GVF9PVVRfU0FUVVJBVEUgfA0K PiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19IQUxGX0lURVJBVElPTl9FVkVOIHwNCj4gPiArDQo+ IAlSVEVfQkJERVZfVFVSQk9fQ09OVElOVUVfQ1JDX01BVENIIHwNCj4gPiArCQkJCQlSVEVfQkJE RVZfVFVSQk9fU09GVF9PVVRQVVQgfA0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19FQVJMWV9U RVJNSU5BVElPTiB8DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX05FR19MTFJfMV9CSVRfSU4g fA0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19ORUdfTExSXzFfQklUX1NPRlRfT1VUIHwNCj4g PiArCQkJCQlSVEVfQkJERVZfVFVSQk9fTUFQX0RFQyB8DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RV UkJPX0RFQ19UQl9DUkNfMjRCX0tFRVAgfA0KPiA+ICsNCj4gCVJURV9CQkRFVl9UVVJCT19ERUNf U0NBVFRFUl9HQVRIRVIsDQo+ID4gKwkJCQkubWF4X2xscl9tb2R1bHVzID0gSU5UOF9NQVgsDQo+ ID4gKwkJCQkubnVtX2J1ZmZlcnNfc3JjID0NCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fTUFY X0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkJLm51bV9idWZmZXJzX2hhcmRfb3V0ID0NCj4gPiArDQo+ IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkJLm51bV9idWZmZXJz X3NvZnRfb3V0ID0NCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0K PiA+ICsJCQl9DQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4gKwkJCS50eXBlID0gUlRFX0JCREVW X09QX1RVUkJPX0VOQywNCj4gPiArCQkJLmNhcC50dXJib19lbmMgPSB7DQo+ID4gKwkJCQkuY2Fw YWJpbGl0eV9mbGFncyA9DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJPX0NSQ18yNEJfQVRUQUNI IHwNCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fUlZfSU5ERVhfQllQQVNTIHwNCj4gPiArCQkJ CQlSVEVfQkJERVZfVFVSQk9fUkFURV9NQVRDSCB8DQo+ID4gKw0KPiAJUlRFX0JCREVWX1RVUkJP X0VOQ19TQ0FUVEVSX0dBVEhFUiwNCj4gPiArCQkJCS5udW1fYnVmZmVyc19zcmMgPQ0KPiA+ICsN Cj4gCVJURV9CQkRFVl9UVVJCT19NQVhfQ09ERV9CTE9DS1MsDQo+ID4gKwkJCQkubnVtX2J1ZmZl cnNfZHN0ID0NCj4gPiArDQo+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+ ICsJCQl9DQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4gICAJCQkudHlwZSAgID0gUlRFX0JCREVW X09QX0xEUENfRU5DLA0KPiA+ICAgCQkJLmNhcC5sZHBjX2VuYyA9IHsNCj4gPiAgIAkJCQkuY2Fw YWJpbGl0eV9mbGFncyA9DQo+ID4gQEAgLTY5MSwxNSArNzMxLDE3IEBADQo+ID4NCj4gPiAgIAkv KiBFeHBvc2VkIG51bWJlciBvZiBxdWV1ZXMgKi8NCj4gPiAgIAlkZXZfaW5mby0+bnVtX3F1ZXVl c1tSVEVfQkJERVZfT1BfTk9ORV0gPSAwOw0KPiA+IC0JZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRF X0JCREVWX09QX1RVUkJPX0RFQ10gPSAwOw0KPiA+IC0JZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRF X0JCREVWX09QX1RVUkJPX0VOQ10gPSAwOw0KPiA+ICsJZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRF X0JCREVWX09QX1RVUkJPX0RFQ10gPSBkLQ0KPiA+YWNjX2NvbmYucV91bF80Zy5udW1fYXFzX3Bl cl9ncm91cHMgKg0KPiA+ICsJCQlkLT5hY2NfY29uZi5xX3VsXzRnLm51bV9xZ3JvdXBzOw0KPiA+ ICsJZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRFX0JCREVWX09QX1RVUkJPX0VOQ10gPSBkLQ0KPiA+ YWNjX2NvbmYucV9kbF80Zy5udW1fYXFzX3Blcl9ncm91cHMgKg0KPiA+ICsJCQlkLT5hY2NfY29u Zi5xX2RsXzRnLm51bV9xZ3JvdXBzOw0KPiA+ICAgCWRldl9pbmZvLT5udW1fcXVldWVzW1JURV9C QkRFVl9PUF9MRFBDX0RFQ10gPSBkLQ0KPiA+YWNjX2NvbmYucV91bF81Zy5udW1fYXFzX3Blcl9n cm91cHMgKg0KPiA+ICAgCQkJZC0+YWNjX2NvbmYucV91bF81Zy5udW1fcWdyb3VwczsNCj4gPiAg IAlkZXZfaW5mby0+bnVtX3F1ZXVlc1tSVEVfQkJERVZfT1BfTERQQ19FTkNdID0gZC0NCj4gPmFj Y19jb25mLnFfZGxfNWcubnVtX2Fxc19wZXJfZ3JvdXBzICoNCj4gPiAgIAkJCWQtPmFjY19jb25m LnFfZGxfNWcubnVtX3Fncm91cHM7DQo+ID4gICAJZGV2X2luZm8tPm51bV9xdWV1ZXNbUlRFX0JC REVWX09QX0ZGVF0gPSAwOw0KPiA+IC0JZGV2X2luZm8tPnF1ZXVlX3ByaW9yaXR5W1JURV9CQkRF Vl9PUF9UVVJCT19ERUNdID0gMDsNCj4gPiAtCWRldl9pbmZvLT5xdWV1ZV9wcmlvcml0eVtSVEVf QkJERVZfT1BfVFVSQk9fRU5DXSA9IDA7DQo+ID4gKwlkZXZfaW5mby0+cXVldWVfcHJpb3JpdHlb UlRFX0JCREVWX09QX1RVUkJPX0RFQ10gPSBkLQ0KPiA+YWNjX2NvbmYucV91bF80Zy5udW1fcWdy b3VwczsNCj4gPiArCWRldl9pbmZvLT5xdWV1ZV9wcmlvcml0eVtSVEVfQkJERVZfT1BfVFVSQk9f RU5DXSA9DQo+ID4gK2QtPmFjY19jb25mLnFfZGxfNGcubnVtX3Fncm91cHM7DQo+ID4gICAJZGV2 X2luZm8tPnF1ZXVlX3ByaW9yaXR5W1JURV9CQkRFVl9PUF9MRFBDX0RFQ10gPSBkLQ0KPiA+YWNj X2NvbmYucV91bF81Zy5udW1fcWdyb3VwczsNCj4gPiAgIAlkZXZfaW5mby0+cXVldWVfcHJpb3Jp dHlbUlRFX0JCREVWX09QX0xEUENfRU5DXSA9IGQtDQo+ID5hY2NfY29uZi5xX2RsXzVnLm51bV9x Z3JvdXBzOw0KPiA+ICAgCWRldl9pbmZvLT5xdWV1ZV9wcmlvcml0eVtSVEVfQkJERVZfT1BfRkZU XSA9IDA7IEBAIC03NDQsNg0KPiArNzg2LDcwDQo+ID4gQEANCj4gPiAgIAl7LmRldmljZV9pZCA9 IDB9LA0KPiA+ICAgfTsNCj4gPg0KPiA+ICsvKiBGaWxsIGluIGEgZnJhbWUgY29udHJvbCB3b3Jk IGZvciB0dXJibyBkZWNvZGluZy4gKi8gc3RhdGljIGlubGluZQ0KPiA+ICt2b2lkIGFjYzIwMF9m Y3dfdGRfZmlsbChjb25zdCBzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3AsIHN0cnVjdA0KPiA+ ICthY2NfZmN3X3RkICpmY3cpIHsNCj4gPiArCWZjdy0+ZmN3X3ZlciA9IDE7DQo+ID4gKwlmY3ct Pm51bV9tYXBzID0gQUNDX0ZDV19URF9BVVRPTUFQOw0KPiA+ICsJZmN3LT5ieXBhc3Nfc2JfZGVp bnQgPSAhY2hlY2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRF Vl9UVVJCT19TVUJCTE9DS19ERUlOVEVSTEVBVkUpOw0KPiA+ICsJaWYgKG9wLT50dXJib19kZWMu Y29kZV9ibG9ja19tb2RlID09DQo+IFJURV9CQkRFVl9UUkFOU1BPUlRfQkxPQ0spIHsNCj4gPiAr CQkvKiBGSVhNRSBmb3IgVEIgYmxvY2sgKi8NCj4gPiArCQlmY3ctPmtfcG9zID0gb3AtPnR1cmJv X2RlYy50Yl9wYXJhbXMua19wb3M7DQo+ID4gKwkJZmN3LT5rX25lZyA9IG9wLT50dXJib19kZWMu dGJfcGFyYW1zLmtfbmVnOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmY3ctPmtfcG9zID0gb3At PnR1cmJvX2RlYy5jYl9wYXJhbXMuazsNCj4gPiArCQlmY3ctPmtfbmVnID0gb3AtPnR1cmJvX2Rl Yy5jYl9wYXJhbXMuazsNCj4gPiArCX0NCj4gPiArCWZjdy0+YyA9IDE7DQo+ID4gKwlmY3ctPmNf bmVnID0gMTsNCj4gPiArCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4g UlRFX0JCREVWX1RVUkJPX1NPRlRfT1VUUFVUKSkgew0KPiA+ICsJCWZjdy0+c29mdF9vdXRwdXRf ZW4gPSAxOw0KPiA+ICsJCWZjdy0+c3dfc29mdF9vdXRfZGlzID0gMDsNCj4gPiArCQlmY3ctPnN3 X2V0X2NvbnQgPSBjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArDQo+IAlS VEVfQkJERVZfVFVSQk9fQ09OVElOVUVfQ1JDX01BVENIKTsNCj4gPiArCQlmY3ctPnN3X3NvZnRf b3V0X3NhdHVyYXRpb24gPSBjaGVja19iaXQob3AtDQo+ID50dXJib19kZWMub3BfZmxhZ3MsDQo+ ID4gKwkJCQlSVEVfQkJERVZfVFVSQk9fU09GVF9PVVRfU0FUVVJBVEUpOw0KPiA+ICsJCWlmIChj aGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQkJCVJURV9CQkRFVl9UVVJC T19FUVVBTElaRVIpKSB7DQo+ID4gKwkJCWZjdy0+YnlwYXNzX3RlcSA9IDA7DQo+ID4gKwkJCWZj dy0+ZWEgPSBvcC0+dHVyYm9fZGVjLmNiX3BhcmFtcy5lOw0KPiA+ICsJCQlmY3ctPmViID0gb3At PnR1cmJvX2RlYy5jYl9wYXJhbXMuZTsNCj4gPiArCQkJaWYgKG9wLT50dXJib19kZWMucnZfaW5k ZXggPT0gMCkNCj4gPiArCQkJCWZjdy0+azBfc3RhcnRfY29sID0gQUNDX0ZDV19URF9SVklEWF8w Ow0KPiA+ICsJCQllbHNlIGlmIChvcC0+dHVyYm9fZGVjLnJ2X2luZGV4ID09IDEpDQo+ID4gKwkJ CQlmY3ctPmswX3N0YXJ0X2NvbCA9IEFDQ19GQ1dfVERfUlZJRFhfMTsNCj4gPiArCQkJZWxzZSBp ZiAob3AtPnR1cmJvX2RlYy5ydl9pbmRleCA9PSAyKQ0KPiA+ICsJCQkJZmN3LT5rMF9zdGFydF9j b2wgPSBBQ0NfRkNXX1REX1JWSURYXzI7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCWZjdy0+azBf c3RhcnRfY29sID0gQUNDX0ZDV19URF9SVklEWF8zOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJ CWZjdy0+YnlwYXNzX3RlcSA9IDE7DQo+ID4gKwkJCWZjdy0+ZWIgPSA2NDsgLyogYXZvaWQgdW5k ZWZpbmVkIHZhbHVlICovDQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmY3ctPnNv ZnRfb3V0cHV0X2VuID0gMDsNCj4gPiArCQlmY3ctPnN3X3NvZnRfb3V0X2RpcyA9IDE7DQo+ID4g KwkJZmN3LT5ieXBhc3NfdGVxID0gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmY3ctPmNvZGVf YmxvY2tfbW9kZSA9IDE7IC8qIEZJWE1FICovDQo+ID4gKwlmY3ctPnR1cmJvX2NyY190eXBlID0g Y2hlY2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9UVVJC T19DUkNfVFlQRV8yNEIpOw0KPiA+ICsNCj4gPiArCWZjdy0+ZXh0X3RkX2NvbGRfcmVnX2VuID0g MTsNCj4gPiArCWZjdy0+cmF3X2RlY29kZXJfaW5wdXRfb24gPSAwOw0KPiA+ICsJZmN3LT5tYXhf aXRlciA9IFJURV9NQVgoKHVpbnQ4X3QpIG9wLT50dXJib19kZWMuaXRlcl9tYXgsIDIpOw0KPiA+ ICsJZmN3LT5taW5faXRlciA9IDI7DQo+ID4gKwlmY3ctPmhhbGZfaXRlcl9vbiA9ICFjaGVja19i aXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX1RVUkJPX0hBTEZf SVRFUkFUSU9OX0VWRU4pOw0KPiA+ICsNCj4gPiArCWZjdy0+ZWFybHlfc3RvcF9lbiA9IGNoZWNr X2JpdChvcC0+dHVyYm9fZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVfQkJERVZfVFVSQk9fRUFS TFlfVEVSTUlOQVRJT04pICYgIWZjdy0NCj4gPnNvZnRfb3V0cHV0X2VuOw0KPiA+ICsJZmN3LT5l eHRfc2NhbGUgPSAweEY7DQo+ID4gK30NCj4gPiArDQo+ID4gICAvKiBGaWxsIGluIGEgZnJhbWUg Y29udHJvbCB3b3JkIGZvciBMRFBDIGRlY29kaW5nLiAqLw0KPiA+ICAgc3RhdGljIGlubGluZSB2 b2lkDQo+ID4gICBhY2MyMDBfZmN3X2xkX2ZpbGwoc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9w LCBzdHJ1Y3QgYWNjX2Zjd19sZA0KPiA+ICpmY3csIEBAIC04NzAsNiArOTc2LDg5IEBADQo+ID4g ICB9DQo+ID4NCj4gPiAgIHN0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2FjYzIwMF9kbWFfZGVzY190 ZV9maWxsKHN0cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcCwNCj4gPiArCQlzdHJ1Y3QgYWNjX2Rt YV9yZXFfZGVzYyAqZGVzYywgc3RydWN0IHJ0ZV9tYnVmICoqaW5wdXQsDQo+ID4gKwkJc3RydWN0 IHJ0ZV9tYnVmICpvdXRwdXQsIHVpbnQzMl90ICppbl9vZmZzZXQsDQo+ID4gKwkJdWludDMyX3Qg Km91dF9vZmZzZXQsIHVpbnQzMl90ICpvdXRfbGVuZ3RoLA0KPiA+ICsJCXVpbnQzMl90ICptYnVm X3RvdGFsX2xlZnQsIHVpbnQzMl90ICpzZWdfdG90YWxfbGVmdCwgdWludDhfdCByKQ0KPiB7DQo+ ID4gKwlpbnQgbmV4dF90cmlwbGV0ID0gMTsgLyogRkNXIGFscmVhZHkgZG9uZSAqLw0KPiA+ICsJ dWludDMyX3QgZSwgZWEsIGViLCBsZW5ndGg7DQo+ID4gKwl1aW50MTZfdCBrLCBrX25lZywga19w b3M7DQo+ID4gKwl1aW50OF90IGNhYiwgY19uZWc7DQo+ID4gKw0KPiA+ICsJZGVzYy0+d29yZDAg PSBBQ0NfRE1BX0RFU0NfVFlQRTsNCj4gPiArCWRlc2MtPndvcmQxID0gMDsgLyoqPCBUaW1lc3Rh bXAgY291bGQgYmUgZGlzYWJsZWQgKi8NCj4gPiArCWRlc2MtPndvcmQyID0gMDsNCj4gPiArCWRl c2MtPndvcmQzID0gMDsNCj4gPiArCWRlc2MtPm51bUNCcyA9IDE7DQo+ID4gKw0KPiA+ICsJaWYg KG9wLT50dXJib19lbmMuY29kZV9ibG9ja19tb2RlID09DQo+IFJURV9CQkRFVl9UUkFOU1BPUlRf QkxPQ0spIHsNCj4gPiArCQllYSA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmVhOw0KPiA+ICsJ CWViID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuZWI7DQo+ID4gKwkJY2FiID0gb3AtPnR1cmJv X2VuYy50Yl9wYXJhbXMuY2FiOw0KPiA+ICsJCWtfbmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJh bXMua19uZWc7DQo+ID4gKwkJa19wb3MgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5rX3BvczsN Cj4gPiArCQljX25lZyA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmNfbmVnOw0KPiA+ICsJCWUg PSAociA8IGNhYikgPyBlYSA6IGViOw0KPiA+ICsJCWsgPSAociA8IGNfbmVnKSA/IGtfbmVnIDog a19wb3M7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWUgPSBvcC0+dHVyYm9fZW5jLmNiX3BhcmFt cy5lOw0KPiA+ICsJCWsgPSBvcC0+dHVyYm9fZW5jLmNiX3BhcmFtcy5rOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2VuYy5vcF9mbGFncywNCj4gUlRFX0JC REVWX1RVUkJPX0NSQ18yNEJfQVRUQUNIKSkNCj4gPiArCQlsZW5ndGggPSAoayAtIDI0KSA+PiAz Ow0KPiA+ICsJZWxzZQ0KPiA+ICsJCWxlbmd0aCA9IGsgPj4gMzsNCj4gPiArDQo+ID4gKwlpZiAo dW5saWtlbHkoKCptYnVmX3RvdGFsX2xlZnQgPT0gMCkgfHwgKCptYnVmX3RvdGFsX2xlZnQgPCBs ZW5ndGgpKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNo IGJldHdlZW4gbWJ1ZiBsZW5ndGggYW5kIGluY2x1ZGVkDQo+IENCIHNpemVzOiBtYnVmIGxlbiAl dSwgY2IgbGVuICV1IiwNCj4gPiArCQkJCSptYnVmX3RvdGFsX2xlZnQsIGxlbmd0aCk7DQo+ID4g KwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5leHRfdHJpcGxldCA9IGFjY19k bWFfZmlsbF9ibGtfdHlwZV9pbihkZXNjLCBpbnB1dCwgaW5fb2Zmc2V0LA0KPiA+ICsJCQlsZW5n dGgsIHNlZ190b3RhbF9sZWZ0LCBuZXh0X3RyaXBsZXQsDQo+ID4gKwkJCWNoZWNrX2JpdChvcC0+ dHVyYm9fZW5jLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVfQkJERVZfVFVSQk9fRU5DX1NDQVRURVJf R0FUSEVSKSk7DQo+ID4gKwlpZiAodW5saWtlbHkobmV4dF90cmlwbGV0IDwgMCkpIHsNCj4gPiAr CQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPiArCQkJCSJNaXNtYXRjaCBiZXR3ZWVuIGRhdGEgdG8g cHJvY2VzcyBhbmQgbWJ1Zg0KPiBkYXRhIGxlbmd0aCBpbiBiYmRldl9vcDogJXAiLA0KPiA+ICsJ CQkJb3ApOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiArCWRlc2MtPmRhdGFfcHRy c1tuZXh0X3RyaXBsZXQgLSAxXS5sYXN0ID0gMTsNCj4gPiArCWRlc2MtPm0yZGxlbiA9IG5leHRf dHJpcGxldDsNCj4gPiArCSptYnVmX3RvdGFsX2xlZnQgLT0gbGVuZ3RoOw0KPiA+ICsNCj4gPiAr CS8qIFNldCBvdXRwdXQgbGVuZ3RoICovDQo+ID4gKwlpZiAoY2hlY2tfYml0KG9wLT50dXJib19l bmMub3BfZmxhZ3MsDQo+IFJURV9CQkRFVl9UVVJCT19SQVRFX01BVENIKSkNCj4gPiArCQkvKiBJ bnRlZ2VyIHJvdW5kIHVwIGRpdmlzaW9uIGJ5IDggKi8NCj4gPiArCQkqb3V0X2xlbmd0aCA9IChl ICsgNykgPj4gMzsNCj4gPiArCWVsc2UNCj4gPiArCQkqb3V0X2xlbmd0aCA9IChrID4+IDMpICog MyArIDI7DQo+ID4gKw0KPiA+ICsJbmV4dF90cmlwbGV0ID0gYWNjX2RtYV9maWxsX2Jsa190eXBl KGRlc2MsIG91dHB1dCwgKm91dF9vZmZzZXQsDQo+ID4gKwkJCSpvdXRfbGVuZ3RoLCBuZXh0X3Ry aXBsZXQsDQo+IEFDQ19ETUFfQkxLSURfT1VUX0VOQyk7DQo+ID4gKwlpZiAodW5saWtlbHkobmV4 dF90cmlwbGV0IDwgMCkpIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPiArCQkJCSJN aXNtYXRjaCBiZXR3ZWVuIGRhdGEgdG8gcHJvY2VzcyBhbmQgbWJ1Zg0KPiBkYXRhIGxlbmd0aCBp biBiYmRldl9vcDogJXAiLA0KPiA+ICsJCQkJb3ApOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiAr CX0NCj4gPiArCW9wLT50dXJib19lbmMub3V0cHV0Lmxlbmd0aCArPSAqb3V0X2xlbmd0aDsNCj4g PiArCSpvdXRfb2Zmc2V0ICs9ICpvdXRfbGVuZ3RoOw0KPiA+ICsJZGVzYy0+ZGF0YV9wdHJzW25l eHRfdHJpcGxldCAtIDFdLmxhc3QgPSAxOw0KPiA+ICsJZGVzYy0+ZDJtbGVuID0gbmV4dF90cmlw bGV0IC0gZGVzYy0+bTJkbGVuOw0KPiA+ICsNCj4gPiArCWRlc2MtPm9wX2FkZHIgPSBvcDsNCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBp bnQNCj4gPiAgIGFjYzIwMF9kbWFfZGVzY19sZV9maWxsKHN0cnVjdCBydGVfYmJkZXZfZW5jX29w ICpvcCwNCj4gPiAgIAkJc3RydWN0IGFjY19kbWFfcmVxX2Rlc2MgKmRlc2MsIHN0cnVjdCBydGVf bWJ1ZiAqKmlucHV0LA0KPiA+ICAgCQlzdHJ1Y3QgcnRlX21idWYgKm91dHB1dCwgdWludDMyX3Qg KmluX29mZnNldCwgQEAgLTkyOSw2DQo+ICsxMTE4LDEyMg0KPiA+IEBADQo+ID4gICB9DQo+ID4N Cj4gPiAgIHN0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2FjYzIwMF9kbWFfZGVzY190ZF9maWxsKHN0 cnVjdCBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiArCQlzdHJ1Y3QgYWNjX2RtYV9yZXFfZGVz YyAqZGVzYywgc3RydWN0IHJ0ZV9tYnVmICoqaW5wdXQsDQo+ID4gKwkJc3RydWN0IHJ0ZV9tYnVm ICpoX291dHB1dCwgc3RydWN0IHJ0ZV9tYnVmICpzX291dHB1dCwNCj4gPiArCQl1aW50MzJfdCAq aW5fb2Zmc2V0LCB1aW50MzJfdCAqaF9vdXRfb2Zmc2V0LA0KPiA+ICsJCXVpbnQzMl90ICpzX291 dF9vZmZzZXQsIHVpbnQzMl90ICpoX291dF9sZW5ndGgsDQo+ID4gKwkJdWludDMyX3QgKnNfb3V0 X2xlbmd0aCwgdWludDMyX3QgKm1idWZfdG90YWxfbGVmdCwNCj4gPiArCQl1aW50MzJfdCAqc2Vn X3RvdGFsX2xlZnQsIHVpbnQ4X3Qgcikgew0KPiA+ICsJaW50IG5leHRfdHJpcGxldCA9IDE7IC8q IEZDVyBhbHJlYWR5IGRvbmUgKi8NCj4gPiArCXVpbnQxNl90IGs7DQo+ID4gKwl1aW50MTZfdCBj cmMyNF9vdmVybGFwID0gMDsNCj4gPiArCXVpbnQzMl90IGUsIGt3Ow0KPiA+ICsNCj4gPiArCWRl c2MtPndvcmQwID0gQUNDX0RNQV9ERVNDX1RZUEU7DQo+ID4gKwlkZXNjLT53b3JkMSA9IDA7IC8q KjwgVGltZXN0YW1wIGNvdWxkIGJlIGRpc2FibGVkICovDQo+ID4gKwlkZXNjLT53b3JkMiA9IDA7 DQo+ID4gKwlkZXNjLT53b3JkMyA9IDA7DQo+ID4gKwlkZXNjLT5udW1DQnMgPSAxOw0KPiA+ICsN Cj4gPiArCWlmIChvcC0+dHVyYm9fZGVjLmNvZGVfYmxvY2tfbW9kZSA9PQ0KPiBSVEVfQkJERVZf VFJBTlNQT1JUX0JMT0NLKSB7DQo+ID4gKwkJayA9IChyIDwgb3AtPnR1cmJvX2RlYy50Yl9wYXJh bXMuY19uZWcpDQo+ID4gKwkJCT8gb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMua19uZWcNCj4gPiAr CQkJOiBvcC0+dHVyYm9fZGVjLnRiX3BhcmFtcy5rX3BvczsNCj4gPiArCQllID0gKHIgPCBvcC0+ dHVyYm9fZGVjLnRiX3BhcmFtcy5jYWIpDQo+ID4gKwkJCT8gb3AtPnR1cmJvX2RlYy50Yl9wYXJh bXMuZWENCj4gPiArCQkJOiBvcC0+dHVyYm9fZGVjLnRiX3BhcmFtcy5lYjsNCj4gPiArCX0gZWxz ZSB7DQo+ID4gKwkJayA9IG9wLT50dXJib19kZWMuY2JfcGFyYW1zLms7DQo+ID4gKwkJZSA9IG9w LT50dXJib19kZWMuY2JfcGFyYW1zLmU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKChvcC0+ dHVyYm9fZGVjLmNvZGVfYmxvY2tfbW9kZSA9PQ0KPiBSVEVfQkJERVZfVFJBTlNQT1JUX0JMT0NL KQ0KPiA+ICsJCSYmICFjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQlS VEVfQkJERVZfVFVSQk9fREVDX1RCX0NSQ18yNEJfS0VFUCkpDQo+ID4gKwkJY3JjMjRfb3Zlcmxh cCA9IDI0Ow0KPiA+ICsNCj4gPiArCS8qIENhbGN1bGF0ZXMgY2lyY3VsYXIgYnVmZmVyIHNpemUu DQo+ID4gKwkgKiBBY2NvcmRpbmcgdG8gM2dwcCAzNi4yMTIgc2VjdGlvbiA1LjEuNC4yDQo+ID4g KwkgKiAgIEt3ID0gMyAqIEtwaSwNCj4gPiArCSAqIHdoZXJlOg0KPiA+ICsJICogICBLcGkgPSBu Q29sICogblJvdw0KPiA+ICsJICogd2hlcmUgbkNvbCBpcyAzMiBhbmQgblJvdyBjYW4gYmUgY2Fs Y3VsYXRlZCBmcm9tOg0KPiA+ICsJICogICBEID08IG5Db2wgKiBuUm93DQo+ID4gKwkgKiB3aGVy ZSBEIGlzIHRoZSBzaXplIG9mIGVhY2ggb3V0cHV0IGZyb20gdHVyYm8gZW5jb2RlciBibG9jayAo ayArIDQpLg0KPiA+ICsJICovDQo+ID4gKwlrdyA9IFJURV9BTElHTl9DRUlMKGsgKyA0LCAzMikg KiAzOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseSgoKm1idWZfdG90YWxfbGVmdCA9PSAwKSB8 fCAoKm1idWZfdG90YWxfbGVmdCA8IGt3KSkpIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVSUiwN Cj4gPiArCQkJCSJNaXNtYXRjaCBiZXR3ZWVuIG1idWYgbGVuZ3RoIGFuZCBpbmNsdWRlZA0KPiBD QiBzaXplczogbWJ1ZiBsZW4gJXUsIGNiIGxlbiAldSIsDQo+ID4gKwkJCQkqbWJ1Zl90b3RhbF9s ZWZ0LCBrdyk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5leHRf dHJpcGxldCA9IGFjY19kbWFfZmlsbF9ibGtfdHlwZV9pbihkZXNjLCBpbnB1dCwgaW5fb2Zmc2V0 LCBrdywNCj4gPiArCQkJc2VnX3RvdGFsX2xlZnQsIG5leHRfdHJpcGxldCwNCj4gPiArCQkJY2hl Y2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9UVVJCT19E RUNfU0NBVFRFUl9HQVRIRVIpKTsNCj4gPiArCWlmICh1bmxpa2VseShuZXh0X3RyaXBsZXQgPCAw KSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNoIGJldHdl ZW4gZGF0YSB0byBwcm9jZXNzIGFuZCBtYnVmDQo+IGRhdGEgbGVuZ3RoIGluIGJiZGV2X29wOiAl cCIsDQo+ID4gKwkJCQlvcCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsJZGVz Yy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldCAtIDFdLmxhc3QgPSAxOw0KPiA+ICsJZGVzYy0+bTJk bGVuID0gbmV4dF90cmlwbGV0Ow0KPiA+ICsJKm1idWZfdG90YWxfbGVmdCAtPSBrdzsNCj4gPiAr CSpoX291dF9sZW5ndGggPSAoKGsgLSBjcmMyNF9vdmVybGFwKSA+PiAzKTsNCj4gPiArCW5leHRf dHJpcGxldCA9IGFjY19kbWFfZmlsbF9ibGtfdHlwZSgNCj4gPiArCQkJZGVzYywgaF9vdXRwdXQs ICpoX291dF9vZmZzZXQsDQo+ID4gKwkJCSpoX291dF9sZW5ndGgsIG5leHRfdHJpcGxldCwNCj4g QUNDX0RNQV9CTEtJRF9PVVRfSEFSRCk7DQo+ID4gKwlpZiAodW5saWtlbHkobmV4dF90cmlwbGV0 IDwgMCkpIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPiArCQkJCSJNaXNtYXRjaCBi ZXR3ZWVuIGRhdGEgdG8gcHJvY2VzcyBhbmQgbWJ1Zg0KPiBkYXRhIGxlbmd0aCBpbiBiYmRldl9v cDogJXAiLA0KPiA+ICsJCQkJb3ApOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlvcC0+dHVyYm9fZGVjLmhhcmRfb3V0cHV0Lmxlbmd0aCArPSAqaF9vdXRfbGVuZ3Ro Ow0KPiA+ICsJKmhfb3V0X29mZnNldCArPSAqaF9vdXRfbGVuZ3RoOw0KPiA+ICsNCj4gPiArCS8q IFNvZnQgb3V0cHV0ICovDQo+ID4gKwlpZiAoY2hlY2tfYml0KG9wLT50dXJib19kZWMub3BfZmxh Z3MsDQo+IFJURV9CQkRFVl9UVVJCT19TT0ZUX09VVFBVVCkpIHsNCj4gPiArCQlpZiAob3AtPnR1 cmJvX2RlYy5zb2Z0X291dHB1dC5kYXRhID09IDApIHsNCj4gPiArCQkJcnRlX2JiZGV2X2xvZyhF UlIsICJTb2Z0IG91dHB1dCBpcyBub3QgZGVmaW5lZCIpOw0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ ID4gKwkJfQ0KPiA+ICsJCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4g PiArCQkJCVJURV9CQkRFVl9UVVJCT19FUVVBTElaRVIpKQ0KPiA+ICsJCQkqc19vdXRfbGVuZ3Ro ID0gZTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCSpzX291dF9sZW5ndGggPSAoayAqIDMpICsgMTI7 DQo+ID4gKw0KPiA+ICsJCW5leHRfdHJpcGxldCA9IGFjY19kbWFfZmlsbF9ibGtfdHlwZShkZXNj LCBzX291dHB1dCwNCj4gPiArCQkJCSpzX291dF9vZmZzZXQsICpzX291dF9sZW5ndGgsIG5leHRf dHJpcGxldCwNCj4gPiArCQkJCUFDQ19ETUFfQkxLSURfT1VUX1NPRlQpOw0KPiA+ICsJCWlmICh1 bmxpa2VseShuZXh0X3RyaXBsZXQgPCAwKSkgew0KPiA+ICsJCQlydGVfYmJkZXZfbG9nKEVSUiwN Cj4gPiArCQkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRhIHRvIHByb2Nlc3MNCj4gYW5kIG1idWYg ZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwNCj4gPiArCQkJCQlvcCk7DQo+ID4gKwkJCXJl dHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCW9wLT50dXJib19kZWMuc29mdF9vdXRw dXQubGVuZ3RoICs9ICpzX291dF9sZW5ndGg7DQo+ID4gKwkJKnNfb3V0X29mZnNldCArPSAqc19v dXRfbGVuZ3RoOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3Ry aXBsZXQgLSAxXS5sYXN0ID0gMTsNCj4gPiArCWRlc2MtPmQybWxlbiA9IG5leHRfdHJpcGxldCAt IGRlc2MtPm0yZGxlbjsNCj4gPiArDQo+ID4gKwlkZXNjLT5vcF9hZGRyID0gb3A7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ ID4gICBhY2MyMDBfZG1hX2Rlc2NfbGRfZmlsbChzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3As DQo+ID4gICAJCXN0cnVjdCBhY2NfZG1hX3JlcV9kZXNjICpkZXNjLA0KPiA+ICAgCQlzdHJ1Y3Qg cnRlX21idWYgKippbnB1dCwgc3RydWN0IHJ0ZV9tYnVmICpoX291dHB1dCwgQEAgLQ0KPiAxMTAw LDYNCj4gPiArMTQwNSw1MSBAQA0KPiA+ICAgCWRlc2MtPm9wX2FkZHIgPSBvcDsNCj4gPiAgIH0N Cj4gPg0KPiA+ICsvKiBFbnF1ZXVlIG9uZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRl dmljZSBpbiBDQiBtb2RlICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IGVucXVldWVfZW5jX29u ZV9vcF9jYihzdHJ1Y3QgYWNjX3F1ZXVlICpxLCBzdHJ1Y3QNCj4gPiArcnRlX2JiZGV2X2VuY19v cCAqb3AsDQo+ID4gKwkJdWludDE2X3QgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICt7DQo+ID4g Kwl1bmlvbiBhY2NfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+ICsJaW50IHJldDsNCj4gPiAr CXVpbnQzMl90IGluX29mZnNldCwgb3V0X29mZnNldCwgb3V0X2xlbmd0aCwgbWJ1Zl90b3RhbF9s ZWZ0LA0KPiA+ICsJCXNlZ190b3RhbF9sZWZ0Ow0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICppbnB1 dCwgKm91dHB1dF9oZWFkLCAqb3V0cHV0Ow0KPiA+ICsNCj4gPiArCXVpbnQxNl90IGRlc2NfaWR4 ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4gKwkJCSYgcS0+ c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArIGRlc2NfaWR4 Ow0KPiA+ICsJYWNjX2Zjd190ZV9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd190ZSk7DQo+ID4gKw0K PiA+ICsJaW5wdXQgPSBvcC0+dHVyYm9fZW5jLmlucHV0LmRhdGE7DQo+ID4gKwlvdXRwdXRfaGVh ZCA9IG91dHB1dCA9IG9wLT50dXJib19lbmMub3V0cHV0LmRhdGE7DQo+ID4gKwlpbl9vZmZzZXQg PSBvcC0+dHVyYm9fZW5jLmlucHV0Lm9mZnNldDsNCj4gPiArCW91dF9vZmZzZXQgPSBvcC0+dHVy Ym9fZW5jLm91dHB1dC5vZmZzZXQ7DQo+ID4gKwlvdXRfbGVuZ3RoID0gMDsNCj4gPiArCW1idWZf dG90YWxfbGVmdCA9IG9wLT50dXJib19lbmMuaW5wdXQubGVuZ3RoOw0KPiA+ICsJc2VnX3RvdGFs X2xlZnQgPSBydGVfcGt0bWJ1Zl9kYXRhX2xlbihvcC0+dHVyYm9fZW5jLmlucHV0LmRhdGEpDQo+ ID4gKwkJCS0gaW5fb2Zmc2V0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGFjYzIwMF9kbWFfZGVzY190 ZV9maWxsKG9wLCAmZGVzYy0+cmVxLCAmaW5wdXQsIG91dHB1dCwNCj4gPiArCQkJJmluX29mZnNl dCwgJm91dF9vZmZzZXQsICZvdXRfbGVuZ3RoLA0KPiAmbWJ1Zl90b3RhbF9sZWZ0LA0KPiA+ICsJ CQkmc2VnX3RvdGFsX2xlZnQsIDApOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseShyZXQgPCAw KSkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCW1idWZfYXBwZW5kKG91dHB1dF9o ZWFkLCBvdXRwdXQsIG91dF9sZW5ndGgpOw0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVf QkJERVZfREVCVUcNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNjLT5yZXEu ZmN3X3RlLA0KPiA+ICsJCQlzaXplb2YoZGVzYy0+cmVxLmZjd190ZSkgLSA4KTsNCj4gPiArCXJ0 ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOw0KPiA+ ICsJaWYgKGNoZWNrX21idWZfdG90YWxfbGVmdChtYnVmX3RvdGFsX2xlZnQpICE9IDApDQo+ID4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyNlbmRpZg0KPiA+ICsJLyogT25lIENCIChvbmUgb3Ap IHdhcyBzdWNjZXNzZnVsbHkgcHJlcGFyZWQgdG8gZW5xdWV1ZSAqLw0KPiA+ICsJcmV0dXJuIDE7 DQo+ID4gK30NCj4gPiArDQo+ID4gICAvKiBFbnF1ZXVlIG9uZSBlbmNvZGUgb3BlcmF0aW9ucyBm b3IgQUNDMjAwIGRldmljZSBpbiBDQiBtb2RlDQo+ID4gICAgKiBtdWx0aXBsZXhlZCBvbiB0aGUg c2FtZSBkZXNjcmlwdG9yDQo+ID4gICAgKi8NCj4gPiBAQCAtMTI2Miw2ICsxNjEyLDg0IEBADQo+ ID4gICAJcmV0dXJuIDE7DQo+ID4gICB9DQo+ID4NCj4gPiArDQo+ID4gKy8qIEVucXVldWUgb25l IGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIFRCIG1vZGUuICovDQo+ID4g K3N0YXRpYyBpbmxpbmUgaW50IGVucXVldWVfZW5jX29uZV9vcF90YihzdHJ1Y3QgYWNjX3F1ZXVl ICpxLCBzdHJ1Y3QNCj4gPiArcnRlX2JiZGV2X2VuY19vcCAqb3AsDQo+ID4gKwkJdWludDE2X3Qg dG90YWxfZW5xdWV1ZWRfY2JzLCB1aW50OF90IGNic19pbl90Yikgew0KPiA+ICsJdW5pb24gYWNj X2RtYV9kZXNjICpkZXNjID0gTlVMTDsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1aW50OF90IHIs IGM7DQo+ID4gKwl1aW50MzJfdCBpbl9vZmZzZXQsIG91dF9vZmZzZXQsIG91dF9sZW5ndGgsIG1i dWZfdG90YWxfbGVmdCwNCj4gPiArCQlzZWdfdG90YWxfbGVmdDsNCj4gPiArCXN0cnVjdCBydGVf bWJ1ZiAqaW5wdXQsICpvdXRwdXRfaGVhZCwgKm91dHB1dDsNCj4gPiArCXVpbnQxNl90IGN1cnJl bnRfZW5xdWV1ZWRfY2JzID0gMDsNCj4gPiArDQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9ICgo cS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jp bmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4g PiArCXVpbnQ2NF90IGZjd19vZmZzZXQgPSAoZGVzY19pZHggPDwgOCkgKyBBQ0NfREVTQ19GQ1df T0ZGU0VUOw0KPiA+ICsJYWNjX2Zjd190ZV9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd190ZSk7DQo+ ID4gKw0KPiA+ICsJaW5wdXQgPSBvcC0+dHVyYm9fZW5jLmlucHV0LmRhdGE7DQo+ID4gKwlvdXRw dXRfaGVhZCA9IG91dHB1dCA9IG9wLT50dXJib19lbmMub3V0cHV0LmRhdGE7DQo+ID4gKwlpbl9v ZmZzZXQgPSBvcC0+dHVyYm9fZW5jLmlucHV0Lm9mZnNldDsNCj4gPiArCW91dF9vZmZzZXQgPSBv cC0+dHVyYm9fZW5jLm91dHB1dC5vZmZzZXQ7DQo+ID4gKwlvdXRfbGVuZ3RoID0gMDsNCj4gPiAr CW1idWZfdG90YWxfbGVmdCA9IG9wLT50dXJib19lbmMuaW5wdXQubGVuZ3RoOw0KPiA+ICsNCj4g PiArCWMgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5jOw0KPiA+ICsJciA9IG9wLT50dXJib19l bmMudGJfcGFyYW1zLnI7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKG1idWZfdG90YWxfbGVmdCA+IDAg JiYgciA8IGMpIHsNCj4gPiArCQlzZWdfdG90YWxfbGVmdCA9IHJ0ZV9wa3RtYnVmX2RhdGFfbGVu KGlucHV0KSAtIGluX29mZnNldDsNCj4gPiArCQkvKiBTZXQgdXAgRE1BIGRlc2NyaXB0b3IgKi8N Cj4gPiArCQlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKw0KPiB0b3Rh bF9lbnF1ZXVlZF9jYnMpDQo+ID4gKwkJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiAr CQlkZXNjLT5yZXEuZGF0YV9wdHJzWzBdLmFkZHJlc3MgPSBxLT5yaW5nX2FkZHJfaW92YSArDQo+ IGZjd19vZmZzZXQ7DQo+ID4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1swXS5ibGVuID0gQUNDX0ZD V19URV9CTEVOOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBhY2MyMDBfZG1hX2Rlc2NfdGVfZmlsbChv cCwgJmRlc2MtPnJlcSwgJmlucHV0LA0KPiBvdXRwdXQsDQo+ID4gKwkJCQkmaW5fb2Zmc2V0LCAm b3V0X29mZnNldCwgJm91dF9sZW5ndGgsDQo+ID4gKwkJCQkmbWJ1Zl90b3RhbF9sZWZ0LCAmc2Vn X3RvdGFsX2xlZnQsIHIpOw0KPiA+ICsJCWlmICh1bmxpa2VseShyZXQgPCAwKSkNCj4gPiArCQkJ cmV0dXJuIHJldDsNCj4gPiArCQltYnVmX2FwcGVuZChvdXRwdXRfaGVhZCwgb3V0cHV0LCBvdXRf bGVuZ3RoKTsNCj4gPiArDQo+ID4gKwkJLyogU2V0IHRvdGFsIG51bWJlciBvZiBDQnMgaW4gVEIg Ki8NCj4gPiArCQlkZXNjLT5yZXEuY2JzX2luX3RiID0gY2JzX2luX3RiOw0KPiA+ICsjaWZkZWYg UlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+ICsJCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIs ICZkZXNjLT5yZXEuZmN3X3RlLA0KPiA+ICsJCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3dfdGUpIC0g OCk7DQo+ID4gKwkJcnRlX21lbWR1bXAoc3RkZXJyLCAiUmVxIERlc2MuIiwgZGVzYywgc2l6ZW9m KCpkZXNjKSk7ICNlbmRpZg0KPiA+ICsNCj4gPiArCQlpZiAoc2VnX3RvdGFsX2xlZnQgPT0gMCkg ew0KPiA+ICsJCQkvKiBHbyB0byB0aGUgbmV4dCBtYnVmICovDQo+ID4gKwkJCWlucHV0ID0gaW5w dXQtPm5leHQ7DQo+ID4gKwkJCWluX29mZnNldCA9IDA7DQo+ID4gKwkJCW91dHB1dCA9IG91dHB1 dC0+bmV4dDsNCj4gPiArCQkJb3V0X29mZnNldCA9IDA7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiAr CQl0b3RhbF9lbnF1ZXVlZF9jYnMrKzsNCj4gPiArCQljdXJyZW50X2VucXVldWVkX2NicysrOw0K PiA+ICsJCXIrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVW X0RFQlVHDQo+ID4gKwlpZiAoY2hlY2tfbWJ1Zl90b3RhbF9sZWZ0KG1idWZfdG90YWxfbGVmdCkg IT0gMCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsJ LyogU2V0IFNEb25lIG9uIGxhc3QgQ0IgZGVzY3JpcHRvciBmb3IgVEIgbW9kZS4gKi8NCj4gPiAr CWRlc2MtPnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+ICsJZGVzYy0+cmVxLmlycV9lbmFibGUg PSBxLT5pcnFfZW5hYmxlOw0KPiA+ICsNCj4gPiArCXJldHVybiBjdXJyZW50X2VucXVldWVkX2Ni czsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIC8qIEVucXVldWUgb25lIGVuY29kZSBvcGVyYXRpb25z IGZvciBBQ0MyMDAgZGV2aWNlIGluIFRCIG1vZGUuDQo+ID4gICAgKiByZXR1cm5zIHRoZSBudW1i ZXIgb2YgZGVzY3MgdXNlZA0KPiA+ICAgICovDQo+ID4gQEAgLTEzMjgsNiArMTc1Niw2OSBAQA0K PiA+DQo+ID4gICAvKiogRW5xdWV1ZSBvbmUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBk ZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+ICAgc3RhdGljIGlubGluZSBpbnQNCj4gPiArZW5xdWV1 ZV9kZWNfb25lX29wX2NiKHN0cnVjdCBhY2NfcXVldWUgKnEsIHN0cnVjdCBydGVfYmJkZXZfZGVj X29wDQo+ICpvcCwNCj4gPiArCQl1aW50MTZfdCB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4gK3sN Cj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVzYyA9IE5VTEw7DQo+ID4gKwlpbnQgcmV0Ow0K PiA+ICsJdWludDMyX3QgaW5fb2Zmc2V0LCBoX291dF9vZmZzZXQsIHNfb3V0X29mZnNldCwgc19v dXRfbGVuZ3RoLA0KPiA+ICsJCWhfb3V0X2xlbmd0aCwgbWJ1Zl90b3RhbF9sZWZ0LCBzZWdfdG90 YWxfbGVmdDsNCj4gPiArCXN0cnVjdCBydGVfbWJ1ZiAqaW5wdXQsICpoX291dHB1dF9oZWFkLCAq aF9vdXRwdXQsDQo+ID4gKwkJKnNfb3V0cHV0X2hlYWQsICpzX291dHB1dDsNCj4gPiArDQo+ID4g Kwl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRf Y2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2MgPSBxLT5y aW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiArCWFjYzIwMF9mY3dfdGRfZmlsbChvcCwgJmRlc2Mt PnJlcS5mY3dfdGQpOw0KPiA+ICsNCj4gPiArCWlucHV0ID0gb3AtPnR1cmJvX2RlYy5pbnB1dC5k YXRhOw0KPiA+ICsJaF9vdXRwdXRfaGVhZCA9IGhfb3V0cHV0ID0gb3AtPnR1cmJvX2RlYy5oYXJk X291dHB1dC5kYXRhOw0KPiA+ICsJc19vdXRwdXRfaGVhZCA9IHNfb3V0cHV0ID0gb3AtPnR1cmJv X2RlYy5zb2Z0X291dHB1dC5kYXRhOw0KPiA+ICsJaW5fb2Zmc2V0ID0gb3AtPnR1cmJvX2RlYy5p bnB1dC5vZmZzZXQ7DQo+ID4gKwloX291dF9vZmZzZXQgPSBvcC0+dHVyYm9fZGVjLmhhcmRfb3V0 cHV0Lm9mZnNldDsNCj4gPiArCXNfb3V0X29mZnNldCA9IG9wLT50dXJib19kZWMuc29mdF9vdXRw dXQub2Zmc2V0Ow0KPiA+ICsJaF9vdXRfbGVuZ3RoID0gc19vdXRfbGVuZ3RoID0gMDsNCj4gPiAr CW1idWZfdG90YWxfbGVmdCA9IG9wLT50dXJib19kZWMuaW5wdXQubGVuZ3RoOw0KPiA+ICsJc2Vn X3RvdGFsX2xlZnQgPSBydGVfcGt0bWJ1Zl9kYXRhX2xlbihpbnB1dCkgLSBpbl9vZmZzZXQ7DQo+ ID4gKw0KPiA+ICsjaWZkZWYgUlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+ICsJaWYgKHVubGlr ZWx5KGlucHV0ID09IE5VTEwpKSB7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsICJJbnZhbGlk IG1idWYgcG9pbnRlciIpOw0KPiA+ICsJCXJldHVybiAtRUZBVUxUOw0KPiA+ICsJfQ0KPiA+ICsj ZW5kaWYNCj4gDQo+IEl0IG1ha2VzIHNlbnNlIHRvIGhhdmUgdGhpcyBjaGVjayBwcmVzZW50IHVu Y29uZGl0aW9ubmFsbHkuDQo+IEFsc28sIHB1dHRpbmcgaXQgaGVyZSBpcyB1c2VsZXNzIHNpbmNl IHJ0ZV9wa3RtYnVmX2RhdGFfbGVuKCkgZGVyZWZlcmVuY2UgaXQganVzdA0KPiBiZWZvcmUuIFNv IGlmIE5VTEwsIGl0IHdpbGwgY3Jhc2ggYmVmb3JlIGJlaW5nIGNoZWNrZWQuDQoNCldlIHdvdWxk IG5vdCB3YW50IHRvIGRvIGNvbXByZWhlbnNpdmUgY2hlY2sgb24gaW5wdXQgcGFyYW1ldGVyIGlu IHByb2R1Y3Rpb24uIA0KV2UgaGFkIGJlZW4gZXhwZWN0aW5nIHRoaXMga2luZCBvZiBjaGVjayB0 byBvbmx5IGhhcHBlbiBpbiBkZWJ1ZyBtb2RlIGZvciB1c2VyIHRvIHRyb3VibGVzaG9vdCB0aGVp ciBjb2RlIG1vcmUgZWFzaWx5LiANCkkgY2FuIHRha2Ugb3V0IGZvciBub3cgYnV0IHdvdWxkIGJl IGdvb2QgdG8gcmV2aWV3IGZ1cnRoZXIgdGhlIHVzZWNhc2Ugb2YgZGVidWcgYnVpbGQuDQoNCj4g DQo+ID4gKw0KPiA+ICsJLyogU2V0IHVwIERNQSBkZXNjcmlwdG9yICovDQo+ID4gKwlkZXNjID0g cS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsNCj4gPiArCXJldCA9IGFjYzIw MF9kbWFfZGVzY190ZF9maWxsKG9wLCAmZGVzYy0+cmVxLCAmaW5wdXQsIGhfb3V0cHV0LA0KPiA+ ICsJCQlzX291dHB1dCwgJmluX29mZnNldCwgJmhfb3V0X29mZnNldCwgJnNfb3V0X29mZnNldCwN Cj4gPiArCQkJJmhfb3V0X2xlbmd0aCwgJnNfb3V0X2xlbmd0aCwgJm1idWZfdG90YWxfbGVmdCwN Cj4gPiArCQkJJnNlZ190b3RhbF9sZWZ0LCAwKTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHko cmV0IDwgMCkpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkvKiBIYXJkIG91dHB1 dCAqLw0KPiA+ICsJbWJ1Zl9hcHBlbmQoaF9vdXRwdXRfaGVhZCwgaF9vdXRwdXQsIGhfb3V0X2xl bmd0aCk7DQo+ID4gKw0KPiA+ICsJLyogU29mdCBvdXRwdXQgKi8NCj4gPiArCWlmIChjaGVja19i aXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gUlRFX0JCREVWX1RVUkJPX1NPRlRfT1VUUFVU KSkNCj4gPiArCQltYnVmX2FwcGVuZChzX291dHB1dF9oZWFkLCBzX291dHB1dCwgc19vdXRfbGVu Z3RoKTsNCj4gPiArDQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwly dGVfbWVtZHVtcChzdGRlcnIsICJGQ1ciLCAmZGVzYy0+cmVxLmZjd190ZCwNCj4gPiArCQkJc2l6 ZW9mKGRlc2MtPnJlcS5mY3dfdGQpKTsNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBE ZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOyAjZW5kaWYNCj4gPiArDQo+ID4gKwkvKiBPbmUg Q0IgKG9uZSBvcCkgd2FzIHN1Y2Nlc3NmdWxseSBwcmVwYXJlZCB0byBlbnF1ZXVlICovDQo+ID4g KwlyZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqIEVucXVldWUgb25lIGRlY29kZSBv cGVyYXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4gPiArc3RhdGljIGlu bGluZSBpbnQNCj4gPiAgIGVucXVldWVfbGRwY19kZWNfb25lX29wX2NiKHN0cnVjdCBhY2NfcXVl dWUgKnEsIHN0cnVjdA0KPiBydGVfYmJkZXZfZGVjX29wICpvcCwNCj4gPiAgIAkJdWludDE2X3Qg dG90YWxfZW5xdWV1ZWRfY2JzLCBib29sIHNhbWVfb3ApDQo+ID4gICB7DQo+ID4gQEAgLTE1MjUs MTAgKzIwMTYsMTQ3IEBADQo+ID4gICAJcmV0dXJuIGN1cnJlbnRfZW5xdWV1ZWRfY2JzOw0KPiA+ ICAgfQ0KPiA+DQo+ID4gLS8qKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAg ZGV2aWNlIGluIENCIG1vZGUuICovDQo+ID4gLXN0YXRpYyBpbmxpbmUgdWludDE2X3QgLWFjYzIw MF9lbnF1ZXVlX2xkcGNfZW5jX2NiKHN0cnVjdA0KPiA+IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpx X2RhdGEsDQo+ID4gLQkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51 bSkNCj4gPiArLyogRW5xdWV1ZSBvbmUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZp Y2UgaW4gVEIgbW9kZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCBlbnF1ZXVlX2RlY19vbmVf b3BfdGIoc3RydWN0IGFjY19xdWV1ZSAqcSwgc3RydWN0DQo+ID4gK3J0ZV9iYmRldl9kZWNfb3Ag Km9wLA0KPiA+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgdWludDhfdCBjYnNfaW5f dGIpIHsNCj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVzYyA9IE5VTEw7DQo+ID4gKwlpbnQg cmV0Ow0KPiA+ICsJdWludDhfdCByLCBjOw0KPiA+ICsJdWludDMyX3QgaW5fb2Zmc2V0LCBoX291 dF9vZmZzZXQsIHNfb3V0X29mZnNldCwgc19vdXRfbGVuZ3RoLA0KPiA+ICsJCWhfb3V0X2xlbmd0 aCwgbWJ1Zl90b3RhbF9sZWZ0LCBzZWdfdG90YWxfbGVmdDsNCj4gPiArCXN0cnVjdCBydGVfbWJ1 ZiAqaW5wdXQsICpoX291dHB1dF9oZWFkLCAqaF9vdXRwdXQsDQo+ID4gKwkJKnNfb3V0cHV0X2hl YWQsICpzX291dHB1dDsNCj4gPiArCXVpbnQxNl90IGN1cnJlbnRfZW5xdWV1ZWRfY2JzID0gMDsN Cj4gPiArDQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90 YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiAr CWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiArCXVpbnQ2NF90IGZjd19vZmZz ZXQgPSAoZGVzY19pZHggPDwgOCkgKyBBQ0NfREVTQ19GQ1dfT0ZGU0VUOw0KPiA+ICsJYWNjMjAw X2Zjd190ZF9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd190ZCk7DQo+ID4gKw0KPiA+ICsJaW5wdXQg PSBvcC0+dHVyYm9fZGVjLmlucHV0LmRhdGE7DQo+IA0KPiBIZXJlIHlvdSBtYXkgd2FudCB0byBj aGVjayBpZiBub3QgTlVMTCwgYXQgbGVhc3QgZm9yIGNvbnNpc3RlbmN5IHdpdGgNCj4gZW5xdWV1 ZV9kZWNfb25lX29wX2NiKCkNCg0KTm90ZWQgYWJvdmUgdGhpcyBpcyB0YWtlbiBvdXQuDQoNCj4g DQo+ID4gKwloX291dHB1dF9oZWFkID0gaF9vdXRwdXQgPSBvcC0+dHVyYm9fZGVjLmhhcmRfb3V0 cHV0LmRhdGE7DQo+ID4gKwlzX291dHB1dF9oZWFkID0gc19vdXRwdXQgPSBvcC0+dHVyYm9fZGVj LnNvZnRfb3V0cHV0LmRhdGE7DQo+ID4gKwlpbl9vZmZzZXQgPSBvcC0+dHVyYm9fZGVjLmlucHV0 Lm9mZnNldDsNCj4gPiArCWhfb3V0X29mZnNldCA9IG9wLT50dXJib19kZWMuaGFyZF9vdXRwdXQu b2Zmc2V0Ow0KPiA+ICsJc19vdXRfb2Zmc2V0ID0gb3AtPnR1cmJvX2RlYy5zb2Z0X291dHB1dC5v ZmZzZXQ7DQo+ID4gKwloX291dF9sZW5ndGggPSBzX291dF9sZW5ndGggPSAwOw0KPiA+ICsJbWJ1 Zl90b3RhbF9sZWZ0ID0gb3AtPnR1cmJvX2RlYy5pbnB1dC5sZW5ndGg7DQo+ID4gKwljID0gb3At PnR1cmJvX2RlYy50Yl9wYXJhbXMuYzsNCj4gPiArCXIgPSBvcC0+dHVyYm9fZGVjLnRiX3BhcmFt cy5yOw0KPiA+ICsNCj4gPiArCXdoaWxlIChtYnVmX3RvdGFsX2xlZnQgPiAwICYmIHIgPCBjKSB7 DQo+ID4gKw0KPiA+ICsJCXNlZ190b3RhbF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4oaW5w dXQpIC0gaW5fb2Zmc2V0Ow0KPiA+ICsNCj4gPiArCQkvKiBTZXQgdXAgRE1BIGRlc2NyaXB0b3Ig Ki8NCj4gPiArCQlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKw0KPiB0 b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4gKwkJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4g PiArCQlkZXNjLT5yZXEuZGF0YV9wdHJzWzBdLmFkZHJlc3MgPSBxLT5yaW5nX2FkZHJfaW92YSAr DQo+IGZjd19vZmZzZXQ7DQo+ID4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1swXS5ibGVuID0gQUND X0ZDV19URF9CTEVOOw0KPiA+ICsJCXJldCA9IGFjYzIwMF9kbWFfZGVzY190ZF9maWxsKG9wLCAm ZGVzYy0+cmVxLCAmaW5wdXQsDQo+ID4gKwkJCQloX291dHB1dCwgc19vdXRwdXQsICZpbl9vZmZz ZXQsDQo+ICZoX291dF9vZmZzZXQsDQo+ID4gKwkJCQkmc19vdXRfb2Zmc2V0LCAmaF9vdXRfbGVu Z3RoLA0KPiAmc19vdXRfbGVuZ3RoLA0KPiA+ICsJCQkJJm1idWZfdG90YWxfbGVmdCwgJnNlZ190 b3RhbF9sZWZ0LCByKTsNCj4gPiArDQo+ID4gKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQ0KPiA+ ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCQkvKiBIYXJkIG91dHB1dCAqLw0KPiA+ICsJ CW1idWZfYXBwZW5kKGhfb3V0cHV0X2hlYWQsIGhfb3V0cHV0LCBoX291dF9sZW5ndGgpOw0KPiA+ ICsNCj4gPiArCQkvKiBTb2Z0IG91dHB1dCAqLw0KPiA+ICsJCWlmIChjaGVja19iaXQob3AtPnR1 cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQkJCVJURV9CQkRFVl9UVVJCT19TT0ZUX09VVFBVVCkp DQo+ID4gKwkJCW1idWZfYXBwZW5kKHNfb3V0cHV0X2hlYWQsIHNfb3V0cHV0LA0KPiBzX291dF9s ZW5ndGgpOw0KPiA+ICsNCj4gPiArCQkvKiBTZXQgdG90YWwgbnVtYmVyIG9mIENCcyBpbiBUQiAq Lw0KPiA+ICsJCWRlc2MtPnJlcS5jYnNfaW5fdGIgPSBjYnNfaW5fdGI7DQo+ID4gKyNpZmRlZiBS VEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4gKwkJcnRlX21lbWR1bXAoc3RkZXJyLCAiRkNXIiwg JmRlc2MtPnJlcS5mY3dfdGQsDQo+ID4gKwkJCQlzaXplb2YoZGVzYy0+cmVxLmZjd190ZCkgLSA4 KTsNCj4gPiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXplb2Yo KmRlc2MpKTsgI2VuZGlmDQo+ID4gKw0KPiA+ICsJCWlmIChzZWdfdG90YWxfbGVmdCA9PSAwKSB7 DQo+ID4gKwkJCS8qIEdvIHRvIHRoZSBuZXh0IG1idWYgKi8NCj4gPiArCQkJaW5wdXQgPSBpbnB1 dC0+bmV4dDsNCj4gPiArCQkJaW5fb2Zmc2V0ID0gMDsNCj4gPiArCQkJaF9vdXRwdXQgPSBoX291 dHB1dC0+bmV4dDsNCj4gPiArCQkJaF9vdXRfb2Zmc2V0ID0gMDsNCj4gPiArDQo+ID4gKwkJCWlm IChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywNCj4gPiArCQkJCQlSVEVfQkJERVZf VFVSQk9fU09GVF9PVVRQVVQpKQ0KPiB7DQo+ID4gKwkJCQlzX291dHB1dCA9IHNfb3V0cHV0LT5u ZXh0Ow0KPiA+ICsJCQkJc19vdXRfb2Zmc2V0ID0gMDsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4g PiArDQo+ID4gKwkJdG90YWxfZW5xdWV1ZWRfY2JzKys7DQo+ID4gKwkJY3VycmVudF9lbnF1ZXVl ZF9jYnMrKzsNCj4gPiArCQlyKys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsjaWZkZWYgUlRFX0xJ QlJURV9CQkRFVl9ERUJVRw0KPiA+ICsJaWYgKGNoZWNrX21idWZfdG90YWxfbGVmdChtYnVmX3Rv dGFsX2xlZnQpICE9IDApDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyNlbmRpZg0KPiAN Cj4gSWYgaXQgY2FuIGhhcHBlbiwgdGhlbiBpdCBzaG91bGQgYWx3YXkgYmUgcHJlc2VudC4NCg0K U2FtZSBjb21tZW50IGFzIGFib3ZlLCBub3QgbWVhbnQgZm9yIHByb2R1Y3Rpb24gY29kZS4NCg0K PiANCj4gPiArCS8qIFNldCBTRG9uZSBvbiBsYXN0IENCIGRlc2NyaXB0b3IgZm9yIFRCIG1vZGUg Ki8NCj4gPiArCWRlc2MtPnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+ICsJZGVzYy0+cmVxLmly cV9lbmFibGUgPSBxLT5pcnFfZW5hYmxlOw0KPiA+ICsNCj4gPiArCXJldHVybiBjdXJyZW50X2Vu cXVldWVkX2NiczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRW5xdWV1ZSBlbmNvZGUgb3BlcmF0 aW9ucyBmb3IgQUNDMjAwIGRldmljZSBpbiBDQiBtb2RlLiAqLyBzdGF0aWMNCj4gPiArdWludDE2 X3QgYWNjMjAwX2VucXVldWVfZW5jX2NiKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9k YXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICoqb3BzLCB1aW50MTZfdCBudW0p IHsNCj4gPiArCXN0cnVjdCBhY2NfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ ID4gKwlpbnQzMl90IGF2YWlsID0gYWNjX3JpbmdfYXZhaWxfZW5xKHEpOw0KPiA+ICsJdWludDE2 X3QgaTsNCj4gPiArCXVuaW9uIGFjY19kbWFfZGVzYyAqZGVzYzsNCj4gPiArCWludCByZXQ7DQo+ ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7DQo+ID4gKwkJLyogQ2hlY2sg aWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzcGFjZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nICovDQo+ ID4gKwkJaWYgKHVubGlrZWx5KGF2YWlsIC0gMSA8IDApKSB7DQo+ID4gKwkJCWFjY19lbnF1ZXVl X3JpbmdfZnVsbChxX2RhdGEpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwkJYXZh aWwgLT0gMTsNCj4gPiArDQo+ID4gKwkJcmV0ID0gZW5xdWV1ZV9lbmNfb25lX29wX2NiKHEsIG9w c1tpXSwgaSk7DQo+ID4gKwkJaWYgKHJldCA8IDApIHsNCj4gPiArCQkJYWNjX2VucXVldWVfaW52 YWxpZChxX2RhdGEpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJaWYgKHVubGlrZWx5KGkgPT0gMCkpDQo+ID4gKwkJcmV0dXJuIDA7IC8qIE5vdGhpbmcg dG8gZW5xdWV1ZSAqLw0KPiA+ICsNCj4gPiArCS8qIFNldCBTRG9uZSBpbiBsYXN0IENCIGluIGVu cXVldWVkIG9wcyBmb3IgQ0IgbW9kZSovDQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgKChx LT5zd19yaW5nX2hlYWQgKyBpIC0gMSkNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7 DQo+ID4gKwlkZXNjLT5yZXEuc2RvbmVfZW5hYmxlID0gMTsNCj4gPiArCWRlc2MtPnJlcS5pcnFf ZW5hYmxlID0gcS0+aXJxX2VuYWJsZTsNCj4gPiArDQo+ID4gKwlhY2NfZG1hX2VucXVldWUocSwg aSwgJnFfZGF0YS0+cXVldWVfc3RhdHMpOw0KPiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBzdGF0cyAq Lw0KPiA+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBpOw0KPiA+ICsJ cV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlX2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+ICsJ cmV0dXJuIGk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRp b25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIENCIG1vZGUuICovIHN0YXRpYw0KPiA+ICtpbmxpbmUg dWludDE2X3QgYWNjMjAwX2VucXVldWVfbGRwY19lbmNfY2Ioc3RydWN0DQo+ID4gK3J0ZV9iYmRl dl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipv cHMsIHVpbnQxNl90IG51bSkNCj4gPiAgIHsNCj4gPiAgIAlzdHJ1Y3QgYWNjX3F1ZXVlICpxID0g cV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+ICAgCWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19h dmFpbF9lbnEocSk7IEBAIC0xNTgzLDYgKzIyMTEsNDUgQEANCj4gPiAgIAlyZXR1cm4gaTsNCj4g PiAgIH0NCj4gPg0KPiA+ICsvKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRpb25zIGZvciBBQ0MyMDAg ZGV2aWNlIGluIFRCIG1vZGUuICovIHN0YXRpYw0KPiA+ICt1aW50MTZfdCBhY2MyMDBfZW5xdWV1 ZV9lbmNfdGIoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3Ry dWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+ICsJc3RydWN0 IGFjY19xdWV1ZSAqcSA9IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPiArCWludDMyX3QgYXZh aWwgPSBhY2NfcmluZ19hdmFpbF9lbnEocSk7DQo+ID4gKwl1aW50MTZfdCBpLCBlbnF1ZXVlZF9j YnMgPSAwOw0KPiA+ICsJdWludDhfdCBjYnNfaW5fdGI7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsN Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgew0KPiA+ICsJCWNic19pbl90YiA9IGdl dF9udW1fY2JzX2luX3RiX2VuYygmb3BzW2ldLT50dXJib19lbmMpOw0KPiA+ICsJCS8qIENoZWNr IGlmIHRoZXJlIGFyZSBhdmFpbGFibGUgc3BhY2UgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLw0K PiA+ICsJCWlmICh1bmxpa2VseSgoYXZhaWwgLSBjYnNfaW5fdGIgPCAwKSB8fCAoY2JzX2luX3Ri ID09IDApKSkgew0KPiA+ICsJCQlhY2NfZW5xdWV1ZV9yaW5nX2Z1bGwocV9kYXRhKTsNCj4gPiAr CQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsJCWF2YWlsIC09IGNic19pbl90YjsNCj4gPiArDQo+ ID4gKwkJcmV0ID0gZW5xdWV1ZV9lbmNfb25lX29wX3RiKHEsIG9wc1tpXSwgZW5xdWV1ZWRfY2Jz LA0KPiBjYnNfaW5fdGIpOw0KPiA+ICsJCWlmIChyZXQgPD0gMCkgew0KPiA+ICsJCQlhY2NfZW5x dWV1ZV9pbnZhbGlkKHFfZGF0YSk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCQll bnF1ZXVlZF9jYnMgKz0gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsJaWYgKHVubGlrZWx5KGVucXVldWVk X2NicyA9PSAwKSkNCj4gPiArCQlyZXR1cm4gMDsgLyogTm90aGluZyB0byBlbnF1ZXVlICovDQo+ ID4gKw0KPiA+ICsJYWNjX2RtYV9lbnF1ZXVlKHEsIGVucXVldWVkX2NicywgJnFfZGF0YS0+cXVl dWVfc3RhdHMpOw0KPiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBzdGF0cyAqLw0KPiA+ICsJcV9kYXRh LT5xdWV1ZV9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBpOw0KPiA+ICsJcV9kYXRhLT5xdWV1ZV9z dGF0cy5lbnF1ZXVlX2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+ICsNCj4gPiArCXJldHVybiBp Ow0KPiA+ICt9DQo+IA0KPiANCj4gVGhpcyBmdW5jdGlvbiBpcyBzdHJpY3RseSBpZGVudGljYWwg dG8gYWNjMTAwX2VucXVldWVfZW5jX3RiKCksIGl0IHNob3VsZCBiZQ0KPiBzaGFyZWQuDQoNCkFj dHVhbGx5IHRoZXNlIGFuZC9vciB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMgaGF2ZSBkaWZmZXJl bmNlcy4gKG9yIHdpbGwgYmUgZGlmZmVyZW50IG9uY2UgQUNDMTAwIFBNRHMgY2hhbmdlZCBhcmUg YXBwbGllZCkuDQoNCj4gDQo+ID4gKw0KPiA+ICAgLyogRW5xdWV1ZSBMRFBDIGVuY29kZSBvcGVy YXRpb25zIGZvciBBQ0MyMDAgZGV2aWNlIGluIFRCIG1vZGUuICovDQo+ID4gICBzdGF0aWMgdWlu dDE2X3QNCj4gPiAgIGFjYzIwMF9lbnF1ZXVlX2xkcGNfZW5jX3RiKHN0cnVjdCBydGVfYmJkZXZf cXVldWVfZGF0YSAqcV9kYXRhLCBAQA0KPiA+IC0xNjIzLDE4ICsyMjkwLDE4IEBADQo+ID4gICAJ cmV0dXJuIGk7DQo+ID4gICB9DQo+ID4NCj4gPiAtLyogQ2hlY2sgcm9vbSBpbiBBUSBmb3IgdGhl IGVucXVldWVzIGJhdGNoZXMgaW50byBRbWdyICovIC1zdGF0aWMNCj4gPiBpbnQzMl90IC1hY2My MDBfYXFfYXZhaWwoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsIHVpbnQxNl90 DQo+ID4gbnVtX29wcykNCj4gPiArLyogRW5xdWV1ZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUND MjAwIGRldmljZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4gK2FjYzIwMF9lbnF1ZXVlX2VuYyhz dHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2Ji ZGV2X2VuY19vcCAqKm9wcywgdWludDE2X3QgbnVtKQ0KPiA+ICAgew0KPiA+IC0Jc3RydWN0IGFj Y19xdWV1ZSAqcSA9IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPiAtCWludDMyX3QgYXFfYXZh aWwgPSBxLT5hcV9kZXB0aCAtDQo+ID4gLQkJCSgocS0+YXFfZW5xdWV1ZWQgLSBxLT5hcV9kZXF1 ZXVlZCArDQo+ID4gLQkJCUFDQ19NQVhfUVVFVUVfREVQVEgpICUNCj4gQUNDX01BWF9RVUVVRV9E RVBUSCkNCj4gPiAtCQkJLSAobnVtX29wcyA+PiA3KTsNCj4gPiAtCWlmIChhcV9hdmFpbCA8PSAw KQ0KPiA+IC0JCWFjY19lbnF1ZXVlX3F1ZXVlX2Z1bGwocV9kYXRhKTsNCj4gPiAtCXJldHVybiBh cV9hdmFpbDsNCj4gPiArCWludDMyX3QgYXFfYXZhaWwgPSBhY2NfYXFfYXZhaWwocV9kYXRhLCBu dW0pOw0KPiA+ICsJaWYgKHVubGlrZWx5KChhcV9hdmFpbCA8PSAwKSB8fCAobnVtID09IDApKSkN Cj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWlmIChvcHNbMF0tPnR1cmJvX2VuYy5jb2RlX2Jsb2Nr X21vZGUgPT0NCj4gUlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykNCj4gPiArCQlyZXR1cm4gYWNj MjAwX2VucXVldWVfZW5jX3RiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+ICsJZWxzZQ0KPiA+ICsJ CXJldHVybiBhY2MyMDBfZW5xdWV1ZV9lbmNfY2IocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4gICB9 DQo+ID4NCj4gPiAgIC8qIEVucXVldWUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZp Y2UuICovIEBAIC0xNjUyLDYNCj4gPiArMjMxOSw0NyBAQA0KPiA+ICAgCQlyZXR1cm4gYWNjMjAw X2VucXVldWVfbGRwY19lbmNfY2IocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4gICB9DQo+ID4NCj4g PiArDQo+ID4gKy8qIEVucXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2Ug aW4gQ0IgbW9kZSAqLyBzdGF0aWMNCj4gPiArdWludDE2X3QgYWNjMjAwX2VucXVldWVfZGVjX2Ni KHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVf YmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pIHsNCj4gPiArCXN0cnVjdCBhY2NfcXVl dWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlpbnQzMl90IGF2YWlsID0gYWNj X3JpbmdfYXZhaWxfZW5xKHEpOw0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXVuaW9uIGFjY19k bWFfZGVzYyAqZGVzYzsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsg aSA8IG51bTsgKytpKSB7DQo+ID4gKwkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBz cGFjZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nICovDQo+ID4gKwkJaWYgKHVubGlrZWx5KGF2YWls IC0gMSA8IDApKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlhdmFpbCAtPSAxOw0KPiA+ICsNCj4g PiArCQlyZXQgPSBlbnF1ZXVlX2RlY19vbmVfb3BfY2IocSwgb3BzW2ldLCBpKTsNCj4gPiArCQlp ZiAocmV0IDwgMCkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVu bGlrZWx5KGkgPT0gMCkpDQo+ID4gKwkJcmV0dXJuIDA7IC8qIE5vdGhpbmcgdG8gZW5xdWV1ZSAq Lw0KPiA+ICsNCj4gPiArCS8qIFNldCBTRG9uZSBpbiBsYXN0IENCIGluIGVucXVldWVkIG9wcyBm b3IgQ0IgbW9kZSovDQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hl YWQgKyBpIC0gMSkNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwlkZXNj LT5yZXEuc2RvbmVfZW5hYmxlID0gMTsNCj4gPiArCWRlc2MtPnJlcS5pcnFfZW5hYmxlID0gcS0+ aXJxX2VuYWJsZTsNCj4gPiArDQo+ID4gKwlhY2NfZG1hX2VucXVldWUocSwgaSwgJnFfZGF0YS0+ cXVldWVfc3RhdHMpOw0KPiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBzdGF0cyAqLw0KPiA+ICsJcV9k YXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBpOw0KPiA+ICsJcV9kYXRhLT5xdWV1 ZV9zdGF0cy5lbnF1ZXVlX2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+ICsNCj4gPiArCXJldHVy biBpOw0KPiA+ICt9DQo+IA0KPiBUaGlzIGZ1bmN0aW9uIGlzIHN0cmljdGx5IGlkZW50aWNhbCB0 byBhY2MxMDBfZW5xdWV1ZV9kZWNfY2IoKSwgaXQgc2hvdWxkIGJlDQo+IHNoYXJlZC4NCg0KU2Ft ZSBjb21tZW50IGFzIGFib3ZlDQoNCj4gDQo+ID4gKw0KPiA+ICAgLyogRW5xdWV1ZSBkZWNvZGUg b3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmljZSBpbiBUQiBtb2RlICovDQo+ID4gICBzdGF0aWMg dWludDE2X3QNCj4gPiAgIGFjYzIwMF9lbnF1ZXVlX2xkcGNfZGVjX3RiKHN0cnVjdCBydGVfYmJk ZXZfcXVldWVfZGF0YSAqcV9kYXRhLCBAQA0KPiA+IC0xNzQwLDEyICsyNDQ4LDY0IEBADQo+ID4g ICAJcmV0dXJuIGk7DQo+ID4gICB9DQo+ID4NCj4gPiArDQo+ID4gKy8qIEVucXVldWUgZGVjb2Rl IG9wZXJhdGlvbnMgZm9yIEFDQzIwMCBkZXZpY2UgaW4gVEIgbW9kZSAqLyBzdGF0aWMNCj4gPiAr dWludDE2X3QgYWNjMjAwX2VucXVldWVfZGVjX3RiKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0 YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZf dCBudW0pIHsNCj4gPiArCXN0cnVjdCBhY2NfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZh dGU7DQo+ID4gKwlpbnQzMl90IGF2YWlsID0gYWNjX3JpbmdfYXZhaWxfZW5xKHEpOw0KPiA+ICsJ dWludDE2X3QgaSwgZW5xdWV1ZWRfY2JzID0gMDsNCj4gPiArCXVpbnQ4X3QgY2JzX2luX3RiOw0K PiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsN Cj4gPiArCQljYnNfaW5fdGIgPSBnZXRfbnVtX2Nic19pbl90Yl9kZWMoJm9wc1tpXS0+dHVyYm9f ZGVjKTsNCj4gPiArCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHNwYWNlIGZvciBm dXJ0aGVyIHByb2Nlc3NpbmcgKi8NCj4gPiArCQlpZiAodW5saWtlbHkoKGF2YWlsIC0gY2JzX2lu X3RiIDwgMCkgfHwgKGNic19pbl90YiA9PSAwKSkpIHsNCj4gPiArCQkJYWNjX2VucXVldWVfcmlu Z19mdWxsKHFfZGF0YSk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCQlhdmFpbCAt PSBjYnNfaW5fdGI7DQo+ID4gKw0KPiA+ICsJCXJldCA9IGVucXVldWVfZGVjX29uZV9vcF90Yihx LCBvcHNbaV0sIGVucXVldWVkX2NicywNCj4gY2JzX2luX3RiKTsNCj4gPiArCQlpZiAocmV0IDw9 IDApIHsNCj4gPiArCQkJYWNjX2VucXVldWVfaW52YWxpZChxX2RhdGEpOw0KPiA+ICsJCQlicmVh azsNCj4gPiArCQl9DQo+ID4gKwkJZW5xdWV1ZWRfY2JzICs9IHJldDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlhY2NfZG1hX2VucXVldWUocSwgZW5xdWV1ZWRfY2JzLCAmcV9kYXRhLT5xdWV1ZV9z dGF0cyk7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1 ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9IGk7DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRz LmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAtIGk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk7DQo+ ID4gK30NCj4gDQo+IFRoaXMgZnVuY3Rpb24gaXMgc3RyaWN0bHkgaWRlbnRpY2FsIHRvIGFjYzEw MF9lbnF1ZXVlX2RlY190YigpLCBpdCBzaG91bGQgYmUNCj4gc2hhcmVkLg0KPiANCj4gPiArLyog RW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMjAwIGRldmljZS4gKi8gc3RhdGljIHVp bnQxNl90DQo+ID4gK2FjYzIwMF9lbnF1ZXVlX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2Rh dGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqKm9wcywgdWludDE2 X3QgbnVtKSB7DQo+ID4gKwlpbnQzMl90IGFxX2F2YWlsID0gYWNjX2FxX2F2YWlsKHFfZGF0YSwg bnVtKTsNCj4gPiArCWlmICh1bmxpa2VseSgoYXFfYXZhaWwgPD0gMCkgfHwgKG51bSA9PSAwKSkp DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwlpZiAob3BzWzBdLT50dXJib19kZWMuY29kZV9ibG9j a19tb2RlID09DQo+IFJURV9CQkRFVl9UUkFOU1BPUlRfQkxPQ0spDQo+ID4gKwkJcmV0dXJuIGFj YzIwMF9lbnF1ZXVlX2RlY190YihxX2RhdGEsIG9wcywgbnVtKTsNCj4gPiArCWVsc2UNCj4gPiAr CQlyZXR1cm4gYWNjMjAwX2VucXVldWVfZGVjX2NiKHFfZGF0YSwgb3BzLCBudW0pOyB9DQo+IA0K PiBEaXR0bw0KPiANCj4gPiAgIC8qIEVucXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzIw MCBkZXZpY2UuICovDQo+ID4gICBzdGF0aWMgdWludDE2X3QNCj4gPiAgIGFjYzIwMF9lbnF1ZXVl X2xkcGNfZGVjKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICAgCQlz dHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqKm9wcywgdWludDE2X3QgbnVtKQ0KPiA+ICAgew0KPiA+ IC0JaW50MzJfdCBhcV9hdmFpbCA9IGFjYzIwMF9hcV9hdmFpbChxX2RhdGEsIG51bSk7DQo+ID4g KwlpbnQzMl90IGFxX2F2YWlsID0gYWNjX2FxX2F2YWlsKHFfZGF0YSwgbnVtKTsNCj4gPiAgIAlp ZiAodW5saWtlbHkoKGFxX2F2YWlsIDw9IDApIHx8IChudW0gPT0gMCkpKQ0KPiA+ICAgCQlyZXR1 cm4gMDsNCj4gPiAgIAlpZiAob3BzWzBdLT5sZHBjX2RlYy5jb2RlX2Jsb2NrX21vZGUgPT0NCj4g UlRFX0JCREVWX1RSQU5TUE9SVF9CTE9DSykNCj4gPiBAQCAtMjA5Myw2ICsyODUzLDUxIEBADQo+ ID4gICAJcmV0dXJuIGNiX2lkeDsNCj4gPiAgIH0NCj4gPg0KPiA+ICsvKiBEZXF1ZXVlIGVuY29k ZSBvcGVyYXRpb25zIGZyb20gQUNDMjAwIGRldmljZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4g K2FjYzIwMF9kZXF1ZXVlX2VuYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwN Cj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqKm9wcywgdWludDE2X3QgbnVtKSB7DQo+ ID4gKwlzdHJ1Y3QgYWNjX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+ICsJ dWludDMyX3QgYXZhaWwgPSBhY2NfcmluZ19hdmFpbF9kZXEocSk7DQo+ID4gKwl1aW50MzJfdCBh cV9kZXF1ZXVlZCA9IDA7DQo+ID4gKwl1aW50MTZfdCBpLCBkZXF1ZXVlZF9vcHMgPSAwLCBkZXF1 ZXVlZF9kZXNjcyA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJc3RydWN0IHJ0ZV9iYmRldl9l bmNfb3AgKm9wOw0KPiA+ICsJaWYgKGF2YWlsID09IDApDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4g KwlvcCA9IChxLT5yaW5nX2FkZHIgKyAocS0+c3dfcmluZ190YWlsICYNCj4gPiArCQkJcS0+c3df cmluZ193cmFwX21hc2spKS0+cmVxLm9wX2FkZHI7DQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JC REVWX0RFQlVHDQo+ID4gKwlpZiAodW5saWtlbHkob3BzID09IE5VTEwgfHwgcSA9PSBOVUxMIHx8 IG9wID09IE5VTEwpKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsjZW5kaWYNCj4gDQo+IHEgaXMg ZGVyZWZlcmVuY2VkIGJlZm9yZSBpdCBpcyBjaGVja2VkLg0KDQpUaGFua3MuIFRha2luZyBvdXQu IA0KDQo+IA0KPiA+ICsJaW50IGNibSA9IG9wLT50dXJib19lbmMuY29kZV9ibG9ja19tb2RlOw0K PiANCj4gRG9udCBtaXggZGVjbGFyYXRpb25zICYgY29kZS4NCg0KT0sNCg0KPiANCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBudW07IGkrKykgew0KPiA+ICsJCWlmIChjYm0gPT0gUlRFX0JCREVWX1RS QU5TUE9SVF9CTE9DSykNCj4gPiArCQkJcmV0ID0gZGVxdWV1ZV9lbmNfb25lX29wX3RiKHEsDQo+ ICZvcHNbZGVxdWV1ZWRfb3BzXSwNCj4gPiArCQkJCQkmZGVxdWV1ZWRfb3BzLCAmYXFfZGVxdWV1 ZWQsDQo+ID4gKwkJCQkJJmRlcXVldWVkX2Rlc2NzKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJl dCA9IGRlcXVldWVfZW5jX29uZV9vcF9jYihxLA0KPiAmb3BzW2RlcXVldWVkX29wc10sDQo+ID4g KwkJCQkJJmRlcXVldWVkX29wcywgJmFxX2RlcXVldWVkLA0KPiA+ICsJCQkJCSZkZXF1ZXVlZF9k ZXNjcyk7DQo+ID4gKwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWlmIChk ZXF1ZXVlZF9vcHMgPj0gbnVtKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlxLT5hcV9kZXF1ZXVlZCArPSBhcV9kZXF1ZXVlZDsNCj4gPiArCXEtPnN3X3JpbmdfdGFpbCAr PSBkZXF1ZXVlZF9kZXNjczsNCj4gPiArDQo+ID4gKwkvKiBVcGRhdGUgZW5xdWV1ZSBzdGF0cyAq Lw0KPiA+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5kZXF1ZXVlZF9jb3VudCArPSBkZXF1ZXVlZF9v cHM7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGRlcXVldWVkX29wczsNCj4gPiArfQ0KPiA+ICsNCj4g PiAgIC8qIERlcXVldWUgTERQQyBlbmNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzIwMCBkZXZpY2Uu ICovDQo+ID4gICBzdGF0aWMgdWludDE2X3QNCj4gPiAgIGFjYzIwMF9kZXF1ZXVlX2xkcGNfZW5j KHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLCBAQA0KPiA+IC0yMTQwLDYgKzI5 NDUsNTEgQEANCj4gPg0KPiA+ICAgLyogRGVxdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmcm9tIEFD QzIwMCBkZXZpY2UuICovDQo+ID4gICBzdGF0aWMgdWludDE2X3QNCj4gPiArYWNjMjAwX2RlcXVl dWVfZGVjKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVj dCBydGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pIHsNCj4gPiArCXN0cnVjdCBh Y2NfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwl1aW50MTZfdCBkZXF1 ZXVlX251bTsNCj4gPiArCXVpbnQzMl90IGF2YWlsID0gYWNjX3JpbmdfYXZhaWxfZGVxKHEpOw0K PiA+ICsJdWludDMyX3QgYXFfZGVxdWV1ZWQgPSAwOw0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiAr CXVpbnQxNl90IGRlcXVldWVkX2NicyA9IDA7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19v cCAqb3A7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVfQkJE RVZfREVCVUcNCj4gPiArCWlmICh1bmxpa2VseShvcHMgPT0gMCAmJiBxID09IE5VTEwpKQ0KPiA+ ICsJCXJldHVybiAwOw0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKwlkZXF1ZXVlX251bSA9IChh dmFpbCA8IG51bSkgPyBhdmFpbCA6IG51bTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwg ZGVxdWV1ZV9udW07ICsraSkgew0KPiA+ICsJCW9wID0gKHEtPnJpbmdfYWRkciArICgocS0+c3df cmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNr KSktPnJlcS5vcF9hZGRyOw0KPiA+ICsJCWlmIChvcC0+dHVyYm9fZGVjLmNvZGVfYmxvY2tfbW9k ZSA9PQ0KPiBSVEVfQkJERVZfVFJBTlNQT1JUX0JMT0NLKQ0KPiA+ICsJCQlyZXQgPSBkZXF1ZXVl X2RlY19vbmVfb3BfdGIocSwgJm9wc1tpXSwNCj4gZGVxdWV1ZWRfY2JzLA0KPiA+ICsJCQkJCSZh cV9kZXF1ZXVlZCk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlyZXQgPSBkZXF1ZXVlX2RlY19vbmVf b3BfY2IocV9kYXRhLCBxLCAmb3BzW2ldLA0KPiA+ICsJCQkJCWRlcXVldWVkX2NicywgJmFxX2Rl cXVldWVkKTsNCj4gPiArDQo+ID4gKwkJaWYgKHJldCA8PSAwKQ0KPiA+ICsJCQlicmVhazsNCj4g PiArCQlkZXF1ZXVlZF9jYnMgKz0gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXEtPmFxX2Rl cXVldWVkICs9IGFxX2RlcXVldWVkOw0KPiA+ICsJcS0+c3dfcmluZ190YWlsICs9IGRlcXVldWVk X2NiczsNCj4gPiArDQo+ID4gKwkvKiBVcGRhdGUgZW5xdWV1ZSBzdGF0cyAqLw0KPiA+ICsJcV9k YXRhLT5xdWV1ZV9zdGF0cy5kZXF1ZXVlZF9jb3VudCArPSBpOw0KPiA+ICsNCj4gPiArCXJldHVy biBpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBEZXF1ZXVlIGRlY29kZSBvcGVyYXRpb25zIGZy b20gQUNDMjAwIGRldmljZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4gICBhY2MyMDBfZGVxdWV1 ZV9sZHBjX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiAgIAkJ c3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkNCj4gPiAgIHsNCj4g PiBAQCAtMjE5MSw2ICszMDQxLDEwIEBADQo+ID4gICAJc3RydWN0IHJ0ZV9wY2lfZGV2aWNlICpw Y2lfZGV2ID0gUlRFX0RFVl9UT19QQ0koZGV2LT5kZXZpY2UpOw0KPiA+DQo+ID4gICAJZGV2LT5k ZXZfb3BzID0gJmFjYzIwMF9iYmRldl9vcHM7DQo+ID4gKwlkZXYtPmVucXVldWVfZW5jX29wcyA9 IGFjYzIwMF9lbnF1ZXVlX2VuYzsNCj4gPiArCWRldi0+ZW5xdWV1ZV9kZWNfb3BzID0gYWNjMjAw X2VucXVldWVfZGVjOw0KPiA+ICsJZGV2LT5kZXF1ZXVlX2VuY19vcHMgPSBhY2MyMDBfZGVxdWV1 ZV9lbmM7DQo+ID4gKwlkZXYtPmRlcXVldWVfZGVjX29wcyA9IGFjYzIwMF9kZXF1ZXVlX2RlYzsN Cj4gPiAgIAlkZXYtPmVucXVldWVfbGRwY19lbmNfb3BzID0gYWNjMjAwX2VucXVldWVfbGRwY19l bmM7DQo+ID4gICAJZGV2LT5lbnF1ZXVlX2xkcGNfZGVjX29wcyA9IGFjYzIwMF9lbnF1ZXVlX2xk cGNfZGVjOw0KPiA+ICAgCWRldi0+ZGVxdWV1ZV9sZHBjX2VuY19vcHMgPSBhY2MyMDBfZGVxdWV1 ZV9sZHBjX2VuYzsNCj4gDQo+IE92ZXJhbGwsIHRoZXJlIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUg c3RyaWNseSBpZGVudGljYWwgdG8gQUNDMTAwLCB0aGV5IHNob3VsZCBiZQ0KPiBzaGFyZWQgYW5k IG5vdCBkdXBsaWNhdGVkLg0KPiANCj4gSWYgYXQgc29tZSBwb2ludCB0aGV5IG5lZWQgdG8gZGl2 ZXJnZSwgbGV0J3MgaGF2ZSBkZXZpY2Ugc3BlY2lmaWMgb25lcywgYnV0IG9ubHkNCj4gd2hlbiBp dCBiZWNvbWVzIG5lZWRlZC4NCg0KQWN0dWFsbHkgdGhlIG9uZXMgdGhhdCBhcmUgbm90IGluIGFj Y19jb21tb24uaCBlbmQgdXAgaGF2aW5nIGRpZmZlcmVuY2VzIG5vdGFibHkgZHVlIHRvIFNXIG1p dGlnYXRpb25zL3dvcmthcm91bmQgc3BlY2lmaWMgdG8gQUNDMTAwLiANCg0KPiANCj4gTWF4aW1l DQoNCg==