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 876CCA034E; Wed, 19 Jan 2022 03:18:56 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 470A940687; Wed, 19 Jan 2022 03:18:56 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id 7A3994013F for ; Wed, 19 Jan 2022 03:18:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642558735; x=1674094735; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=2rIEj/Eoqas276B8sVdzz6GmII8gNVhm9oDwTBvnTRg=; b=VzeLr1ItKnhfpnRHOlTcG4IIjaZfFp49qcYpqXbLo1lchkVfnU6/MXxz VXtOujg/8O5VOBWr3UWx2oMIRXtQMSr6ECTop26lOU9N182wn03DdBrjb +UMFpBIKrRDimfTNKXq1mtPwvBV2d6QEgE/HZnlEuk3jr3Pe2lQ+kHvMh q3g1sDBu5U1DHUEW3PTAr9FrQZ3VmlDc7GziAf1Q4nsgF5Qo4xeBYxJ15 Aqxog8JdxFt8rGAi4hEvvrBsZAewkUpkUw7/gO8Pc6VVmHvXd7vD8kPZq exlCQQpzhsLRE9cRWDvUmo53Hhd11VEuCenJEe1wNiGTIisDAMHSlNWAA g==; X-IronPort-AV: E=McAfee;i="6200,9189,10231"; a="243785152" X-IronPort-AV: E=Sophos;i="5.88,298,1635231600"; d="scan'208";a="243785152" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Jan 2022 18:18:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,298,1635231600"; d="scan'208";a="532053676" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga008.jf.intel.com with ESMTP; 18 Jan 2022 18:18:50 -0800 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 18 Jan 2022 18:18:49 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Tue, 18 Jan 2022 18:18:49 -0800 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.48) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Tue, 18 Jan 2022 18:18:49 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hVccBknUFTW4lHVIZYK5QoM7NcWTRRuz2Reh2jEdwonhthYKX+A6Ymf1v1SB3JHUTcQoGYBPh68cF0LvO2ShleXJBaZ7Jb/tnpFsXQKfvVOGQ4EjhOFl/mqjn1v2FR+3dqvYYyFqFlcGAtST/cTy6bLMu1cXRaaH4oxkpDGRaSjDUVPn6UVjKQ8BlGI926xTQs2JaKZlpjK76KRHW8aFN8bUqzk6eqIoIAqFrEk4XURsZ/U0IIOUSyuZORGHq9joaE15x691KbHZLinVj4kGHVQl6/SxCNzJ3y1PiW3u5Ukdrjtj6B0VCqODwFwOy2F1qymXm+dMT0ZcfDM2tUYsYA== 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=2rIEj/Eoqas276B8sVdzz6GmII8gNVhm9oDwTBvnTRg=; b=F6vSG8vMyyUm6w4T/OfEQSBo4zNR5qa5fTWly9oHDvqyIYaPpWGNUkPA/VIXiuqRsBhqBTm07J+iF/P4sSpzGyTwKl5xU7E2tCqMRymeOvvov9P4MY/kdXdF2m81YIq0YtrGuBspA40I6V8bUeaiJDsIS8GmOttuQGCCutbvfVX1ZvHBvCgfsf0Uuc8YBjniqz6ohXXTjkgMmovyepWnOS93xn4lWv36O7b5fwicxnMDTuxFfHtBYxzi9udc3wTQpGolOD87EMJb54xATTkHjOS6WmmIa4YDdKo77aD9p08m6nwh+MHQ1EKNNpe7Q9cv4R9sKCw44CWIAJAq97lVzQ== 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 SN6PR11MB3504.namprd11.prod.outlook.com (2603:10b6:805:d0::17) by BL1PR11MB5272.namprd11.prod.outlook.com (2603:10b6:208:30a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.7; Wed, 19 Jan 2022 02:18:45 +0000 Received: from SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::40a4:d129:6047:5515]) by SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::40a4:d129:6047:5515%5]) with mapi id 15.20.4888.014; Wed, 19 Jan 2022 02:18:45 +0000 From: "Xia, Chenbo" To: "Hu, Jiayu" , "dev@dpdk.org" CC: "maxime.coquelin@redhat.com" , "i.maximets@ovn.org" , "Richardson, Bruce" , "Van Haaren, Harry" , "Pai G, Sunil" , "Mcnamara, John" , "Ding, Xuan" , "Jiang, Cheng1" , "liangma@liangbit.com" Subject: RE: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Topic: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Index: AQHX/YRN15fPMJSUO0G2iLHLXO4VhqxfD5/AgAe+pACAACdxEA== Date: Wed, 19 Jan 2022 02:18:45 +0000 Message-ID: References: <20211122105437.3534231-1-jiayu.hu@intel.com> <20211230215505.329674-1-jiayu.hu@intel.com> <20211230215505.329674-2-jiayu.hu@intel.com> <337c9259fe3d4419bf921bd984c34572@intel.com> In-Reply-To: <337c9259fe3d4419bf921bd984c34572@intel.com> Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ed8d5bae-984a-4428-a979-08d9daf2056b x-ms-traffictypediagnostic: BL1PR11MB5272:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5et3PTRPKaMmhJZxi18KeTpWKgVmPnw6OjtFlDgwQrzs8sAEKIK/K90wZgczdnfLKj47EQkOgUPXJ4y9aKne4O5EKllvgGU3K4E5Xwynk6H+WA2Ef1hDHjbhFSuk7MUONLtxPBuGEZBZypzL9nyusFB50NFE5SbqLsJjO56HCM+LTuv7Lq9i8dDtEzEBtn4ER0/zZgdh1rwQ5qLjLOfiOFtZ6hhhElz7VsFVKFt+FHGdiMhWYyfQQ0lPwNoPrQijQp94UkKz5H2Y2gDkMRIF/oGAkJXv99mSWv15YyG5sVTOn9M/09UYMqiAorwWX1CyB9PHtU/yxP3R+3MXXKp5Sesjp/jFRYDYJWdQJPhLzrXkl8zYsGMl68jUkK4OCWFoXHiDp3oZZct/v4W9QSNrhq0orwQtzYEPsVKgUZyNxkSohb2NMwLtKzgPpfPD7QbQMRtGkT9iZua+m6Q5MDyj5xM+1uHwzqazdAcJmX1FtAdW/LthLS9H5QtPLiCWho8B/yXCM5rpatw+eZaAzr7f0M558TI35Jbo8GhSJPKU2GAYOOM/qLOv+dMJ1wO2q4GFOcwJSk89hp56cq3Jst0gT/v13BnK0O0BX6HYO/O55tDBz9/iebu4oRNMiF8pGV+Bndd0cDMsLF6lW32C6jXtnTT3vgyjE2h9b6PZR8rufo4tXWw+Hj6uMnYLG2kYe1bqvl3bi4OAsumuFsbaXcOwLZKwCHRSZC9ejeMWT+h0JAY= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB3504.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(122000001)(71200400001)(33656002)(4326008)(55016003)(86362001)(66946007)(38100700002)(9686003)(508600001)(76116006)(38070700005)(110136005)(2906002)(66476007)(7696005)(54906003)(186003)(66556008)(64756008)(316002)(66446008)(30864003)(82960400001)(53546011)(26005)(5660300002)(83380400001)(52536014)(6506007)(8676002)(8936002)(21314003)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Y3IybW1lMFNKb0hZNEtmM2NpdzEwM1Q0dVhvMXpMZkQyYzFrbmdnQmFGM0pE?= =?utf-8?B?bGZRakhyZVBtYXJJVGRoc0ZQTlZoY3NYeG9LY2NtSlg3bENhMUdEdFVFeXZH?= =?utf-8?B?aXR2K1FIUnYvUFljRlpxZXhlTmpQWUVaajlyTmRxVFRRU2dsVG5ZeXllT1pN?= =?utf-8?B?ZXdrWXA3VENRTTY3YjI0MDhaMUJXSExOajRqZHRDQXR0Qm90T01GRGM1WG5j?= =?utf-8?B?Q0FIb2V2OTBhSy9TS3dTK1ZEbXUxeXowaEFTclhSUHNMZjFVcTR4bE5BMVAr?= =?utf-8?B?MnFYWnZ2MW5yQUlnTTFxZE91SjZzczEvYlpKOXFCVy90L2ZBWk5mL2w3ZnJy?= =?utf-8?B?bjFuNytFUmRQdCt0Y3BaSXVESXRzV21NYWp1NnRmcTNLdVpPbWFMeEhIbGtw?= =?utf-8?B?a3ppd25CbVE2TGRIUDR6N0NZRnZBcTFsYzEyTk05WDQrVGl3Yk5RNXgxOTZv?= =?utf-8?B?NDRKTEhqeUx6QUlVbEhhZ0NnektuZUlHUENUZUlmcEdSTm9tWnl3ZWtieTRI?= =?utf-8?B?SllTWHVyRVoxbk1vMk81dklkRnJjV0t5TmtOZVkyTmF6WWhubitIN0R2OWdm?= =?utf-8?B?WWNGNzVBMGdnYnVJNXlMMHN4bTJ6WHh4QURsakVEaytnZ29Bd2Rhc2dYV0xi?= =?utf-8?B?aEJHZy9QNUdrNzVPUC9iOHA0RTNUdEZKOWk3V2RFMVlnWHNYVEYxZ3lReVNC?= =?utf-8?B?SEp6S1BmbzViZyswR21xQXpwUlEraEhVTkhGRkV0NFN4VVVrZmwrblUyQWM2?= =?utf-8?B?QWZRa1NGYVFBWjdxOW9sSVNSZS9sMnM5eUI5TmJHbzhhaXRlUUFkZkk0akhH?= =?utf-8?B?NjZSdDZnSXFHUmp0d2R2UWVsdnBnTDAxWVF3cGFhUmJsMVNIN2Fid2gxbm9M?= =?utf-8?B?ZXBoRGtUQWx4WTVLWWRvU3JuRDFTc0NoNGc0elVmcHRuREM2ZGVpMUFYOU5J?= =?utf-8?B?b0dweE4xQklWb3VvbEs5M2VBMzRsejhWZHA2d0RnNjBPK3RXeFJCUWh5R1BF?= =?utf-8?B?bXJuWTBqeEJqNXhPR04vMmJwTFI1bDIrS2NVd3NabXJLbWJkVDFxaEcxRmxR?= =?utf-8?B?My8xdXk5VVZKS2x3Q1Fnc2NseEJtVEpMeVJnWmpSRVhkTktBWVowUVpjQmRU?= =?utf-8?B?ZWVUQkVVak1ycWhUSEtoeVNDN2plYlFqRnhlSllMN3VWT1hlRjEyL2J5bm96?= =?utf-8?B?cDJLcjdFN09JQkdJUHVOVUd2ZmZhQzkxNVM3MWc5Z0Y2dUowZElJT0p4S2JQ?= =?utf-8?B?SFZuMnNHWTdLMzFIS2MwM1g3WmZ0NEp2VjFYNHVxOHNROGRPeGdiN1dCbndt?= =?utf-8?B?OGhJYUNReE01YlVKYVYvRUNEaGhnSVBBSTd6VmFHYXJPK21KUExBMFRhVkhK?= =?utf-8?B?b2hFOHBjSUJNa0hVZ3ZsK2JHNGNyWWVURTZockZjZ0JMcHlZVmo2VW1qTitk?= =?utf-8?B?OE1BQ2cram5ZeXFsd0ZJclN1aEJ5WTNZR0J6emNldDdCSzFmOFdJUTQvNW9z?= =?utf-8?B?MXByVnJXVlMzQkVWNnN2dDYyUlcvM05EUWwvSVdoUHF2cXM3RFFGQktEaXR2?= =?utf-8?B?eG9uR3FBL0xiWExqL1dDSlBmNmUzanZwc3IraTdWNGs0MzA2ZWFtS0JjS002?= =?utf-8?B?dFJoRGNETUxVcS9Ock5hQk1KaFV0aXhWaGdVc1d2MTZYdXQ1VEtvZUFlNW5I?= =?utf-8?B?NHp6V2tGaUl4ZUNveVpoaWtJZlR3b0VHS1drdEViaWd3VFh2aTZ4L0Y2UXFl?= =?utf-8?B?KzNQZkhsR1Jta2VnRERnQzFaTTU2aDUyV01jK0IrSDk0Z3F0VG5CMHdyQ0I2?= =?utf-8?B?Vk5FYXdOdEVIVVp1RDhRNHJYQkhGYUROTFdTakFKcHpkcVdrd3VKOWVHVDFV?= =?utf-8?B?M0YvdDB6NXIwT1E2TzhPdFhzTlJlQmRSWlFIWTNwRGxJUHBSNHptWmRRNEVX?= =?utf-8?B?ZmNta2wzWDJqWDBRMXRVcE5vQjhnTkZ5Ulc3S3JTMDZ4cHBFazJjWTRFQWsv?= =?utf-8?B?QW0xTTFUTFkwOTRTckpER1JWTnZ1U2dUdWNKekZEcStmaVJQMHBOdDMxL0FS?= =?utf-8?B?YUZKRlhZTWx0aHIrNUhrbjZ0L3NQQUFoRzVEbkpBbXlPeHVvM29URmYxQzdl?= =?utf-8?B?b2V0eVRaVUxyZ1BhTHgzaUc2MWgxUmRjMlg1VXFiSVprOTdhaGZ5cGtYR0cy?= =?utf-8?B?eXc9PQ==?= 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: SN6PR11MB3504.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed8d5bae-984a-4428-a979-08d9daf2056b X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jan 2022 02:18:45.5419 (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: J+YH2lVq3lqzthitb13CcxJCbnNKjnh7BmKw7TlmyuMvWas+Axcdor0WGKEUkh8kHCNcFCoO8xN+jANEONTMtQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5272 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 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIdSwgSmlheXUgPGppYXl1Lmh1 QGludGVsLmNvbT4NCj4gU2VudDogTW9uZGF5LCBKYW51YXJ5IDE3LCAyMDIyIDE6NDAgUE0NCj4g VG86IFhpYSwgQ2hlbmJvIDxjaGVuYm8ueGlhQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBD YzogbWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb207IGkubWF4aW1ldHNAb3ZuLm9yZzsgUmljaGFy ZHNvbiwgQnJ1Y2UNCj4gPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgVmFuIEhhYXJlbiwg SGFycnkgPGhhcnJ5LnZhbi5oYWFyZW5AaW50ZWwuY29tPjsNCj4gUGFpIEcsIFN1bmlsIDxzdW5p bC5wYWkuZ0BpbnRlbC5jb20+OyBNY25hbWFyYSwgSm9obiA8am9obi5tY25hbWFyYUBpbnRlbC5j b20+Ow0KPiBEaW5nLCBYdWFuIDx4dWFuLmRpbmdAaW50ZWwuY29tPjsgSmlhbmcsIENoZW5nMSA8 Y2hlbmcxLmppYW5nQGludGVsLmNvbT47DQo+IGxpYW5nbWFAbGlhbmdiaXQuY29tDQo+IFN1Ympl Y3Q6IFJFOiBbUEFUQ0ggdjEgMS8xXSB2aG9zdDogaW50ZWdyYXRlIGRtYWRldiBpbiBhc3luY2hy b25vdXMgZGF0YXBhdGgNCj4gDQo+IEhpIENoZW5ibywNCj4gDQo+IFBsZWFzZSBzZWUgcmVwbGll cyBpbmxpbmUuDQo+IA0KPiBUaGFua3MsDQo+IEppYXl1DQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogWGlhLCBDaGVuYm8gPGNoZW5iby54aWFAaW50ZWwuY29t Pg0KPiA+ID4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Zob3N0L21haW4uYyBiL2V4YW1wbGVzL3Zo b3N0L21haW4uYw0KPiA+ID4gaW5kZXggMzNkMDIzYWEzOS4uNDQwNzM0OTliYyAxMDA2NDQNCj4g PiA+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L21haW4uYw0KPiA+ID4gKysrIGIvZXhhbXBsZXMvdmhv c3QvbWFpbi5jDQo+ID4gPiBAQCAtMjQsOCArMjQsOSBAQA0KPiA+ID4gICNpbmNsdWRlIDxydGVf aXAuaD4NCj4gPiA+ICAjaW5jbHVkZSA8cnRlX3RjcC5oPg0KPiA+ID4gICNpbmNsdWRlIDxydGVf cGF1c2UuaD4NCj4gPiA+ICsjaW5jbHVkZSA8cnRlX2RtYWRldi5oPg0KPiA+ID4gKyNpbmNsdWRl IDxydGVfdmhvc3RfYXN5bmMuaD4NCj4gPiA+DQo+ID4gPiAtI2luY2x1ZGUgImlvYXQuaCINCj4g PiA+ICAjaW5jbHVkZSAibWFpbi5oIg0KPiA+ID4NCj4gPiA+ICAjaWZuZGVmIE1BWF9RVUVVRVMN Cj4gPiA+IEBAIC01Niw2ICs1NywxNCBAQA0KPiA+ID4gICNkZWZpbmUgUlRFX1RFU1RfVFhfREVT Q19ERUZBVUxUIDUxMg0KPiA+ID4NCj4gPiA+ICAjZGVmaW5lIElOVkFMSURfUE9SVF9JRCAweEZG DQo+ID4gPiArI2RlZmluZSBJTlZBTElEX0RNQV9JRCAtMQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZp bmUgTUFYX1ZIT1NUX0RFVklDRSAxMDI0DQo+ID4gPiArI2RlZmluZSBETUFfUklOR19TSVpFIDQw OTYNCj4gPiA+ICsNCj4gPiA+ICtzdHJ1Y3QgZG1hX2Zvcl92aG9zdCBkbWFfYmluZFtNQVhfVkhP U1RfREVWSUNFXTsNCj4gPiA+ICtzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2RtYV9pbmZvDQo+ID4g ZG1hX2NvbmZpZ1tSVEVfRE1BREVWX0RFRkFVTFRfTUFYXTsNCj4gPiA+ICtzdGF0aWMgaW50IGRt YV9jb3VudDsNCj4gPiA+DQo+ID4gPiAgLyogbWFzayBvZiBlbmFibGVkIHBvcnRzICovDQo+ID4g PiAgc3RhdGljIHVpbnQzMl90IGVuYWJsZWRfcG9ydF9tYXNrID0gMDsNCj4gPiA+IEBAIC05Niw4 ICsxMDUsNiBAQCBzdGF0aWMgaW50IGJ1aWx0aW5fbmV0X2RyaXZlcjsNCj4gPiA+DQo+ID4gPiAg c3RhdGljIGludCBhc3luY192aG9zdF9kcml2ZXI7DQo+ID4gPg0KPiA+ID4gLXN0YXRpYyBjaGFy ICpkbWFfdHlwZTsNCj4gPiA+IC0NCj4gPiA+ICAvKiBTcGVjaWZ5IHRpbWVvdXQgKGluIHVzZWNv bmRzKSBiZXR3ZWVuIHJldHJpZXMgb24gUlguICovDQo+ID4gPiAgc3RhdGljIHVpbnQzMl90IGJ1 cnN0X3J4X2RlbGF5X3RpbWUgPSBCVVJTVF9SWF9XQUlUX1VTOw0KPiA+ID4gIC8qIFNwZWNpZnkg dGhlIG51bWJlciBvZiByZXRyaWVzIG9uIFJYLiAqLw0KPiA+ID4gQEAgLTE5NiwxMyArMjAzLDEz NCBAQCBzdHJ1Y3Qgdmhvc3RfYnVmZnRhYmxlDQo+ID4gKnZob3N0X3R4YnVmZltSVEVfTUFYX0xD T1JFICoNCj4gPiA+IE1BWF9WSE9TVF9ERVZJQ0VdOw0KPiA+ID4gICNkZWZpbmUgTUJVRl9UQUJM RV9EUkFJTl9UU0MoKHJ0ZV9nZXRfdHNjX2h6KCkgKyBVU19QRVJfUyAtIDEpIFwNCj4gPiA+ICAg LyBVU19QRVJfUyAqIEJVUlNUX1RYX0RSQUlOX1VTKQ0KPiA+ID4NCj4gPiA+ICtzdGF0aWMgaW5s aW5lIGJvb2wNCj4gPiA+ICtpc19kbWFfY29uZmlndXJlZChpbnQxNl90IGRldl9pZCkNCj4gPiA+ ICt7DQo+ID4gPiAraW50IGk7DQo+ID4gPiArDQo+ID4gPiArZm9yIChpID0gMDsgaSA8IGRtYV9j b3VudDsgaSsrKSB7DQo+ID4gPiAraWYgKGRtYV9jb25maWdbaV0uZGV2X2lkID09IGRldl9pZCkg ew0KPiA+ID4gK3JldHVybiB0cnVlOw0KPiA+ID4gK30NCj4gPiA+ICt9DQo+ID4gPiArcmV0dXJu IGZhbHNlOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICBzdGF0aWMgaW5saW5lIGludA0KPiA+ ID4gIG9wZW5fZG1hKGNvbnN0IGNoYXIgKnZhbHVlKQ0KPiA+ID4gIHsNCj4gPiA+IC1pZiAoZG1h X3R5cGUgIT0gTlVMTCAmJiBzdHJuY21wKGRtYV90eXBlLCAiaW9hdCIsIDQpID09IDApDQo+ID4g PiAtcmV0dXJuIG9wZW5faW9hdCh2YWx1ZSk7DQo+ID4gPiArc3RydWN0IGRtYV9mb3Jfdmhvc3Qg KmRtYV9pbmZvID0gZG1hX2JpbmQ7DQo+ID4gPiArY2hhciAqaW5wdXQgPSBzdHJuZHVwKHZhbHVl LCBzdHJsZW4odmFsdWUpICsgMSk7DQo+ID4gPiArY2hhciAqYWRkcnMgPSBpbnB1dDsNCj4gPiA+ ICtjaGFyICpwdHJzWzJdOw0KPiA+ID4gK2NoYXIgKnN0YXJ0LCAqZW5kLCAqc3Vic3RyOw0KPiA+ ID4gK2ludDY0X3QgdmlkLCB2cmluZ19pZDsNCj4gPiA+ICsNCj4gPiA+ICtzdHJ1Y3QgcnRlX2Rt YV9pbmZvIGluZm87DQo+ID4gPiArc3RydWN0IHJ0ZV9kbWFfY29uZiBkZXZfY29uZmlnID0geyAu bmJfdmNoYW5zID0gMSB9Ow0KPiA+ID4gK3N0cnVjdCBydGVfZG1hX3ZjaGFuX2NvbmYgcWNvbmYg PSB7DQo+ID4gPiArLmRpcmVjdGlvbiA9IFJURV9ETUFfRElSX01FTV9UT19NRU0sDQo+ID4gPiAr Lm5iX2Rlc2MgPSBETUFfUklOR19TSVpFDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtpbnQg ZGV2X2lkOw0KPiA+ID4gK2ludCByZXQgPSAwOw0KPiA+ID4gK3VpbnQxNl90IGkgPSAwOw0KPiA+ ID4gK2NoYXIgKmRtYV9hcmdbTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gPiAraW50IGFyZ3NfbnI7 DQo+ID4gPiArDQo+ID4gPiArd2hpbGUgKGlzYmxhbmsoKmFkZHJzKSkNCj4gPiA+ICthZGRycysr Ow0KPiA+ID4gK2lmICgqYWRkcnMgPT0gJ1wwJykgew0KPiA+ID4gK3JldCA9IC0xOw0KPiA+ID4g K2dvdG8gb3V0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKiBwcm9jZXNzIERNQSBkZXZp Y2VzIHdpdGhpbiBicmFja2V0LiAqLw0KPiA+ID4gK2FkZHJzKys7DQo+ID4gPiArc3Vic3RyID0g c3RydG9rKGFkZHJzLCAiO10iKTsNCj4gPiA+ICtpZiAoIXN1YnN0cikgew0KPiA+ID4gK3JldCA9 IC0xOw0KPiA+ID4gK2dvdG8gb3V0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICthcmdzX25y ID0gcnRlX3N0cnNwbGl0KHN1YnN0ciwgc3RybGVuKHN1YnN0ciksDQo+ID4gPiArZG1hX2FyZywg TUFYX1ZIT1NUX0RFVklDRSwgJywnKTsNCj4gPiA+ICtpZiAoYXJnc19uciA8PSAwKSB7DQo+ID4g PiArcmV0ID0gLTE7DQo+ID4gPiArZ290byBvdXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4g K3doaWxlIChpIDwgYXJnc19ucikgew0KPiA+ID4gK2NoYXIgKmFyZ190ZW1wID0gZG1hX2FyZ1tp XTsNCj4gPiA+ICt1aW50OF90IHN1Yl9ucjsNCj4gPiA+ICsNCj4gPiA+ICtzdWJfbnIgPSBydGVf c3Ryc3BsaXQoYXJnX3RlbXAsIHN0cmxlbihhcmdfdGVtcCksIHB0cnMsIDIsICdAJyk7DQo+ID4g PiAraWYgKHN1Yl9uciAhPSAyKSB7DQo+ID4gPiArcmV0ID0gLTE7DQo+ID4gPiArZ290byBvdXQ7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXJ0ID0gc3Ryc3RyKHB0cnNbMF0sICJ0eGQi KTsNCj4gPiA+ICtpZiAoc3RhcnQgPT0gTlVMTCkgew0KPiA+ID4gK3JldCA9IC0xOw0KPiA+ID4g K2dvdG8gb3V0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGFydCArPSAzOw0KPiA+ID4g K3ZpZCA9IHN0cnRvbChzdGFydCwgJmVuZCwgMCk7DQo+ID4gPiAraWYgKGVuZCA9PSBzdGFydCkg ew0KPiA+ID4gK3JldCA9IC0xOw0KPiA+ID4gK2dvdG8gb3V0Ow0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICt2cmluZ19pZCA9IDAgKyBWSVJUSU9fUlhROw0KPiA+DQo+ID4gTm8gbmVlZCB0byBp bnRyb2R1Y2UgdnJpbmdfaWQsIGl0J3MgYWx3YXlzIFZJUlRJT19SWFENCj4gDQo+IEkgd2lsbCBy ZW1vdmUgaXQgbGF0ZXIuDQo+IA0KPiA+DQo+ID4gPiArDQo+ID4gPiArZGV2X2lkID0gcnRlX2Rt YV9nZXRfZGV2X2lkX2J5X25hbWUocHRyc1sxXSk7DQo+ID4gPiAraWYgKGRldl9pZCA8IDApIHsN Cj4gPiA+ICtSVEVfTE9HKEVSUiwgVkhPU1RfQ09ORklHLCAiRmFpbCB0byBmaW5kDQo+ID4gRE1B ICVzLlxuIiwNCj4gPiA+IHB0cnNbMV0pOw0KPiA+ID4gK3JldCA9IC0xOw0KPiA+ID4gK2dvdG8g b3V0Ow0KPiA+ID4gK30gZWxzZSBpZiAoaXNfZG1hX2NvbmZpZ3VyZWQoZGV2X2lkKSkgew0KPiA+ ID4gK2dvdG8gZG9uZTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4NCj4gPiBQbGVhc2UgY2FsbCBy dGVfZG1hX2luZm9fZ2V0IGJlZm9yZSBjb25maWd1cmUgdG8gbWFrZSBzdXJlDQo+ID4gaW5mby5t YXhfdmNoYW5zID49MQ0KPiANCj4gRG8geW91IHN1Z2dlc3QgdG8gdXNlICJydGVfZG1hX2luZm9f Z2V0KCkgYW5kIGluZm8ubWF4X3ZjaGFucz0wIiB0byBpbmRpY2F0ZQ0KPiB0aGUgZGV2aWNlIGlz IG5vdCBjb25maWd1cmVkLCByYXRoZXIgdGhhbiB1c2luZyBpc19kbWFfY29uZmlndXJlKCk/DQoN Ck5vLCBJIG1lYW4gd2hlbiB5b3UgY29uZmlndXJlIHRoZSBkbWFkZXYgd2l0aCBvbmUgdmNoYW4s IG1ha2Ugc3VyZSBpdCBkb2VzIGhhdmUNCmF0IGxlYXN0IG9uZSB2Y2hhbmwsIGV2ZW4gdGhlICd2 Y2hhbiA9PSAwJyBjYXNlIGNhbiBoYXJkbHkgaGFwcGVuLiANCg0KSnVzdCBsaWtlIHRoZSBmdW5j dGlvbiBjYWxsIHNlcXVlbmNlIGluIHRlc3RfZG1hZGV2X2luc3RhbmNlLCB0ZXN0X2RtYWRldi5j Lg0KDQo+IA0KPiA+DQo+ID4gPiAraWYgKHJ0ZV9kbWFfY29uZmlndXJlKGRldl9pZCwgJmRldl9j b25maWcpICE9IDApIHsNCj4gPiA+ICtSVEVfTE9HKEVSUiwgVkhPU1RfQ09ORklHLCAiRmFpbCB0 byBjb25maWd1cmUNCj4gPiBETUEgJWQuXG4iLA0KPiA+ID4gZGV2X2lkKTsNCj4gPiA+ICtyZXQg PSAtMTsNCj4gPiA+ICtnb3RvIG91dDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiAraWYgKHJ0 ZV9kbWFfdmNoYW5fc2V0dXAoZGV2X2lkLCAwLCAmcWNvbmYpICE9IDApIHsNCj4gPiA+ICtSVEVf TE9HKEVSUiwgVkhPU1RfQ09ORklHLCAiRmFpbCB0byBzZXQgdXANCj4gPiBETUEgJWQuXG4iLA0K PiA+ID4gZGV2X2lkKTsNCj4gPiA+ICtyZXQgPSAtMTsNCj4gPiA+ICtnb3RvIG91dDsNCj4gPiA+ ICt9DQo+ID4gPg0KPiA+ID4gLXJldHVybiAtMTsNCj4gPiA+ICtydGVfZG1hX2luZm9fZ2V0KGRl dl9pZCwgJmluZm8pOw0KPiA+ID4gK2lmIChpbmZvLm5iX3ZjaGFucyAhPSAxKSB7DQo+ID4gPiAr UlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkRNQSAlZCBoYXMgbm8NCj4gPiBxdWV1ZXMuXG4i LA0KPiA+ID4gZGV2X2lkKTsNCj4gPg0KPiA+IFRoZW4gdGhlIGFib3ZlIG1lYW5zIHRoZSBudW1i ZXIgb2YgdmNoYW4gaXMgbm90IGNvbmZpZ3VyZWQuDQo+ID4NCj4gPiA+ICtyZXQgPSAtMTsNCj4g PiA+ICtnb3RvIG91dDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiAraWYgKHJ0ZV9kbWFfc3Rh cnQoZGV2X2lkKSAhPSAwKSB7DQo+ID4gPiArUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkZh aWwgdG8gc3RhcnQNCj4gPiBETUEgJXUuXG4iLA0KPiA+ID4gZGV2X2lkKTsNCj4gPiA+ICtyZXQg PSAtMTsNCj4gPiA+ICtnb3RvIG91dDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArZG1hX2Nv bmZpZ1tkbWFfY291bnRdLmRldl9pZCA9IGRldl9pZDsNCj4gPiA+ICtkbWFfY29uZmlnW2RtYV9j b3VudF0ubWF4X3ZjaGFucyA9IDE7DQo+ID4gPiArZG1hX2NvbmZpZ1tkbWFfY291bnQrK10ubWF4 X2Rlc2MgPSBETUFfUklOR19TSVpFOw0KPiA+ID4gKw0KPiA+ID4gK2RvbmU6DQo+ID4gPiArKGRt YV9pbmZvICsgdmlkKS0+ZG1hc1t2cmluZ19pZF0uZGV2X2lkID0gZGV2X2lkOw0KPiA+ID4gK2kr KzsNCj4gPiA+ICt9DQo+ID4gPiArb3V0Og0KPiA+ID4gK2ZyZWUoaW5wdXQpOw0KPiA+ID4gK3Jl dHVybiByZXQ7DQo+ID4gPiAgfQ0KPiA+ID4NCj4gPiA+ICAvKg0KPiA+ID4gQEAgLTUwMCw4ICs2 MjgsNiBAQCBlbnVtIHsNCj4gPiA+ICBPUFRfQ0xJRU5UX05VTSwNCj4gPiA+ICAjZGVmaW5lIE9Q VF9CVUlMVElOX05FVF9EUklWRVIgICJidWlsdGluLW5ldC1kcml2ZXIiDQo+ID4gPiAgT1BUX0JV SUxUSU5fTkVUX0RSSVZFUl9OVU0sDQo+ID4gPiAtI2RlZmluZSBPUFRfRE1BX1RZUEUgICAgICAg ICAgICAiZG1hLXR5cGUiDQo+ID4gPiAtT1BUX0RNQV9UWVBFX05VTSwNCj4gPiA+ICAjZGVmaW5l IE9QVF9ETUFTICAgICAgICAgICAgICAgICJkbWFzIg0KPiA+ID4gIE9QVF9ETUFTX05VTSwNCj4g PiA+ICB9Ow0KPiA+ID4gQEAgLTUzOSw4ICs2NjUsNiBAQCB1c192aG9zdF9wYXJzZV9hcmdzKGlu dCBhcmdjLCBjaGFyICoqYXJndikNCj4gPiA+ICBOVUxMLCBPUFRfQ0xJRU5UX05VTX0sDQo+ID4g PiAge09QVF9CVUlMVElOX05FVF9EUklWRVIsIG5vX2FyZ3VtZW50LA0KPiA+ID4gIE5VTEwsIE9Q VF9CVUlMVElOX05FVF9EUklWRVJfTlVNfSwNCj4gPiA+IC17T1BUX0RNQV9UWVBFLCByZXF1aXJl ZF9hcmd1bWVudCwNCj4gPiA+IC1OVUxMLCBPUFRfRE1BX1RZUEVfTlVNfSwNCj4gPiA+ICB7T1BU X0RNQVMsIHJlcXVpcmVkX2FyZ3VtZW50LA0KPiA+ID4gIE5VTEwsIE9QVF9ETUFTX05VTX0sDQo+ ID4gPiAge05VTEwsIDAsIDAsIDB9LA0KPiA+ID4gQEAgLTY2MSwxMCArNzg1LDYgQEAgdXNfdmhv c3RfcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQo+ID4gPiAgfQ0KPiA+ID4gIGJy ZWFrOw0KPiA+ID4NCj4gPiA+IC1jYXNlIE9QVF9ETUFfVFlQRV9OVU06DQo+ID4gPiAtZG1hX3R5 cGUgPSBvcHRhcmc7DQo+ID4gPiAtYnJlYWs7DQo+ID4gPiAtDQo+ID4gPiAgY2FzZSBPUFRfRE1B U19OVU06DQo+ID4gPiAgaWYgKG9wZW5fZG1hKG9wdGFyZykgPT0gLTEpIHsNCj4gPiA+ICBSVEVf TE9HKElORk8sIFZIT1NUX0NPTkZJRywNCj4gPiA+IEBAIC04NDEsOSArOTYxLDEwIEBAIGNvbXBs ZXRlX2FzeW5jX3BrdHMoc3RydWN0IHZob3N0X2RldiAqdmRldikNCj4gPiA+ICB7DQo+ID4gPiAg c3RydWN0IHJ0ZV9tYnVmICpwX2NwbFtNQVhfUEtUX0JVUlNUXTsNCj4gPiA+ICB1aW50MTZfdCBj b21wbGV0ZV9jb3VudDsNCj4gPiA+ICtpbnQxNl90IGRtYV9pZCA9IGRtYV9iaW5kW3ZkZXYtPnZp ZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+ID4gPg0KPiA+ID4gIGNvbXBsZXRlX2NvdW50 ID0gcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQodmRldi0+dmlkLA0KPiA+ID4gLVZJ UlRJT19SWFEsIHBfY3BsLA0KPiA+IE1BWF9QS1RfQlVSU1QpOw0KPiA+ID4gK1ZJUlRJT19SWFEs IHBfY3BsLCBNQVhfUEtUX0JVUlNULA0KPiA+IGRtYV9pZCwgMCk7DQo+ID4gPiAgaWYgKGNvbXBs ZXRlX2NvdW50KSB7DQo+ID4gPiAgZnJlZV9wa3RzKHBfY3BsLCBjb21wbGV0ZV9jb3VudCk7DQo+ ID4gPiAgX19hdG9taWNfc3ViX2ZldGNoKCZ2ZGV2LT5wa3RzX2luZmxpZ2h0LCBjb21wbGV0ZV9j b3VudCwNCj4gPiA+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ID4gQEAgLTg4MywxMSArMTAwNCwx MiBAQCBkcmFpbl92aG9zdChzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiA+ID4NCj4gPiA+ICBp ZiAoYnVpbHRpbl9uZXRfZHJpdmVyKSB7DQo+ID4gPiAgcmV0ID0gdnNfZW5xdWV1ZV9wa3RzKHZk ZXYsIFZJUlRJT19SWFEsIG0sIG5yX3htaXQpOw0KPiA+ID4gLX0gZWxzZSBpZiAoYXN5bmNfdmhv c3RfZHJpdmVyKSB7DQo+ID4gPiArfSBlbHNlIGlmIChkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNb VklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCkgew0KPiA+ID4gIHVpbnQxNl90IGVucXVldWVfZmFp bCA9IDA7DQo+ID4gPiAraW50MTZfdCBkbWFfaWQgPSBkbWFfYmluZFt2ZGV2LQ0KPiA+ID52aWRd LmRtYXNbVklSVElPX1JYUV0uZGV2X2lkOw0KPiA+ID4NCj4gPiA+ICBjb21wbGV0ZV9hc3luY19w a3RzKHZkZXYpOw0KPiA+ID4gLXJldCA9IHJ0ZV92aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdCh2 ZGV2LT52aWQsDQo+ID4gVklSVElPX1JYUSwgbSwNCj4gPiA+IG5yX3htaXQpOw0KPiA+ID4gK3Jl dCA9IHJ0ZV92aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdCh2ZGV2LT52aWQsDQo+ID4gVklSVElP X1JYUSwgbSwNCj4gPiA+IG5yX3htaXQsIGRtYV9pZCwgMCk7DQo+ID4gPiAgX19hdG9taWNfYWRk X2ZldGNoKCZ2ZGV2LT5wa3RzX2luZmxpZ2h0LCByZXQsDQo+ID4gX19BVE9NSUNfU0VRX0NTVCk7 DQo+ID4gPg0KPiA+ID4gIGVucXVldWVfZmFpbCA9IG5yX3htaXQgLSByZXQ7DQo+ID4gPiBAQCAt OTA1LDcgKzEwMjcsNyBAQCBkcmFpbl92aG9zdChzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiA+ ID4gIF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiAtaWYgKCFhc3lu Y192aG9zdF9kcml2ZXIpDQo+ID4gPiAraWYgKCFkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNbVklS VElPX1JYUV0uYXN5bmNfZW5hYmxlZCkNCj4gPiA+ICBmcmVlX3BrdHMobSwgbnJfeG1pdCk7DQo+ ID4gPiAgfQ0KPiA+ID4NCj4gPiA+IEBAIC0xMjExLDEyICsxMzMzLDEzIEBAIGRyYWluX2V0aF9y eChzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiA+ID4gIGlmIChidWlsdGluX25ldF9kcml2ZXIp IHsNCj4gPiA+ICBlbnF1ZXVlX2NvdW50ID0gdnNfZW5xdWV1ZV9wa3RzKHZkZXYsIFZJUlRJT19S WFEsDQo+ID4gPiAgcGt0cywgcnhfY291bnQpOw0KPiA+ID4gLX0gZWxzZSBpZiAoYXN5bmNfdmhv c3RfZHJpdmVyKSB7DQo+ID4gPiArfSBlbHNlIGlmIChkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNb VklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCkgew0KPiA+ID4gIHVpbnQxNl90IGVucXVldWVfZmFp bCA9IDA7DQo+ID4gPiAraW50MTZfdCBkbWFfaWQgPSBkbWFfYmluZFt2ZGV2LQ0KPiA+ID52aWRd LmRtYXNbVklSVElPX1JYUV0uZGV2X2lkOw0KPiA+ID4NCj4gPiA+ICBjb21wbGV0ZV9hc3luY19w a3RzKHZkZXYpOw0KPiA+ID4gIGVucXVldWVfY291bnQgPSBydGVfdmhvc3Rfc3VibWl0X2VucXVl dWVfYnVyc3QodmRldi0NCj4gPiA+dmlkLA0KPiA+ID4gLVZJUlRJT19SWFEsIHBrdHMsIHJ4X2Nv dW50KTsNCj4gPiA+ICtWSVJUSU9fUlhRLCBwa3RzLCByeF9jb3VudCwgZG1hX2lkLA0KPiA+IDAp Ow0KPiA+ID4gIF9fYXRvbWljX2FkZF9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgZW5xdWV1 ZV9jb3VudCwNCj4gPiA+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ID4NCj4gPiA+ICBlbnF1ZXVl X2ZhaWwgPSByeF9jb3VudCAtIGVucXVldWVfY291bnQ7DQo+ID4gPiBAQCAtMTIzNSw3ICsxMzU4 LDcgQEAgZHJhaW5fZXRoX3J4KHN0cnVjdCB2aG9zdF9kZXYgKnZkZXYpDQo+ID4gPiAgX19BVE9N SUNfU0VRX0NTVCk7DQo+ID4gPiAgfQ0KPiA+ID4NCj4gPiA+IC1pZiAoIWFzeW5jX3Zob3N0X2Ry aXZlcikNCj4gPiA+ICtpZiAoIWRtYV9iaW5kW3ZkZXYtPnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5h c3luY19lbmFibGVkKQ0KPiA+ID4gIGZyZWVfcGt0cyhwa3RzLCByeF9jb3VudCk7DQo+ID4gPiAg fQ0KPiA+ID4NCj4gPiA+IEBAIC0xMzg3LDE4ICsxNTEwLDIwIEBAIGRlc3Ryb3lfZGV2aWNlKGlu dCB2aWQpDQo+ID4gPiAgIiglZCkgZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBkYXRhIGNv cmVcbiIsDQo+ID4gPiAgdmRldi0+dmlkKTsNCj4gPiA+DQo+ID4gPiAtaWYgKGFzeW5jX3Zob3N0 X2RyaXZlcikgew0KPiA+ID4gK2lmIChkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5 bmNfZW5hYmxlZCkgew0KPiA+ID4gIHVpbnQxNl90IG5fcGt0ID0gMDsNCj4gPiA+ICtpbnQxNl90 IGRtYV9pZCA9IGRtYV9iaW5kW3ZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+ID4gPiAg c3RydWN0IHJ0ZV9tYnVmICptX2NwbFt2ZGV2LT5wa3RzX2luZmxpZ2h0XTsNCj4gPiA+DQo+ID4g PiAgd2hpbGUgKHZkZXYtPnBrdHNfaW5mbGlnaHQpIHsNCj4gPiA+ICBuX3BrdCA9IHJ0ZV92aG9z dF9jbGVhcl9xdWV1ZV90aHJlYWRfdW5zYWZlKHZpZCwNCj4gPiBWSVJUSU9fUlhRLA0KPiA+ID4g LW1fY3BsLCB2ZGV2LT5wa3RzX2luZmxpZ2h0KTsNCj4gPiA+ICttX2NwbCwgdmRldi0+cGt0c19p bmZsaWdodCwNCj4gPiBkbWFfaWQsIDApOw0KPiA+ID4gIGZyZWVfcGt0cyhtX2NwbCwgbl9wa3Qp Ow0KPiA+ID4gIF9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgbl9wa3Qs DQo+ID4gPiBfX0FUT01JQ19TRVFfQ1NUKTsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gIHJ0ZV92 aG9zdF9hc3luY19jaGFubmVsX3VucmVnaXN0ZXIodmlkLCBWSVJUSU9fUlhRKTsNCj4gPiA+ICtk bWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCA9IGZhbHNlOw0KPiA+ ID4gIH0NCj4gPiA+DQo+ID4gPiAgcnRlX2ZyZWUodmRldik7DQo+ID4gPiBAQCAtMTQ2OCwyMCAr MTU5MywxNCBAQCBuZXdfZGV2aWNlKGludCB2aWQpDQo+ID4gPiAgIiglZCkgZGV2aWNlIGhhcyBi ZWVuIGFkZGVkIHRvIGRhdGEgY29yZSAlZFxuIiwNCj4gPiA+ICB2aWQsIHZkZXYtPmNvcmVpZCk7 DQo+ID4gPg0KPiA+ID4gLWlmIChhc3luY192aG9zdF9kcml2ZXIpIHsNCj4gPiA+IC1zdHJ1Y3Qg cnRlX3Zob3N0X2FzeW5jX2NvbmZpZyBjb25maWcgPSB7MH07DQo+ID4gPiAtc3RydWN0IHJ0ZV92 aG9zdF9hc3luY19jaGFubmVsX29wcyBjaGFubmVsX29wczsNCj4gPiA+IC0NCj4gPiA+IC1pZiAo ZG1hX3R5cGUgIT0gTlVMTCAmJiBzdHJuY21wKGRtYV90eXBlLCAiaW9hdCIsIDQpID09IDApIHsN Cj4gPiA+IC1jaGFubmVsX29wcy50cmFuc2Zlcl9kYXRhID0gaW9hdF90cmFuc2Zlcl9kYXRhX2Ni Ow0KPiA+ID4gLWNoYW5uZWxfb3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPQ0KPiA+ID4gLWlv YXRfY2hlY2tfY29tcGxldGVkX2NvcGllc19jYjsNCj4gPiA+IC0NCj4gPiA+IC1jb25maWcuZmVh dHVyZXMgPSBSVEVfVkhPU1RfQVNZTkNfSU5PUkRFUjsNCj4gPiA+ICtpZiAoZG1hX2JpbmRbdmlk XS5kbWFzW1ZJUlRJT19SWFFdLmRldl9pZCAhPSBJTlZBTElEX0RNQV9JRCkgew0KPiA+ID4gK2lu dCByZXQ7DQo+ID4gPg0KPiA+ID4gLXJldHVybiBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdp c3Rlcih2aWQsDQo+ID4gVklSVElPX1JYUSwNCj4gPiA+IC1jb25maWcsICZjaGFubmVsX29wcyk7 DQo+ID4gPiArcmV0ID0gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBWSVJU SU9fUlhRKTsNCj4gPiA+ICtpZiAocmV0ID09IDApIHsNCj4gPiA+ICtkbWFfYmluZFt2aWRdLmRt YXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCA9DQo+ID4gdHJ1ZTsNCj4gPiA+ICB9DQo+ID4g PiArcmV0dXJuIHJldDsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gIHJldHVybiAwOw0KPiA+ID4g QEAgLTE1MDIsMTQgKzE2MjEsMTUgQEAgdnJpbmdfc3RhdGVfY2hhbmdlZChpbnQgdmlkLCB1aW50 MTZfdA0KPiA+IHF1ZXVlX2lkLCBpbnQNCj4gPiA+IGVuYWJsZSkNCj4gPiA+ICBpZiAocXVldWVf aWQgIT0gVklSVElPX1JYUSkNCj4gPiA+ICByZXR1cm4gMDsNCj4gPiA+DQo+ID4gPiAtaWYgKGFz eW5jX3Zob3N0X2RyaXZlcikgew0KPiA+ID4gK2lmIChkbWFfYmluZFt2aWRdLmRtYXNbcXVldWVf aWRdLmFzeW5jX2VuYWJsZWQpIHsNCj4gPiA+ICBpZiAoIWVuYWJsZSkgew0KPiA+ID4gIHVpbnQx Nl90IG5fcGt0ID0gMDsNCj4gPiA+ICtpbnQxNl90IGRtYV9pZCA9DQo+ID4gZG1hX2JpbmRbdmlk XS5kbWFzW1ZJUlRJT19SWFFdLmRldl9pZDsNCj4gPiA+ICBzdHJ1Y3QgcnRlX21idWYgKm1fY3Bs W3ZkZXYtPnBrdHNfaW5mbGlnaHRdOw0KPiA+ID4NCj4gPiA+ICB3aGlsZSAodmRldi0+cGt0c19p bmZsaWdodCkgew0KPiA+ID4gIG5fcGt0ID0NCj4gPiBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhy ZWFkX3Vuc2FmZSh2aWQsDQo+ID4gPiBxdWV1ZV9pZCwNCj4gPiA+IC1tX2NwbCwgdmRldi0NCj4g PiA+cGt0c19pbmZsaWdodCk7DQo+ID4gPiArbV9jcGwsIHZkZXYtDQo+ID4gPnBrdHNfaW5mbGln aHQsIGRtYV9pZCwNCj4gPiA+IDApOw0KPiA+ID4gIGZyZWVfcGt0cyhtX2NwbCwgbl9wa3QpOw0K PiA+ID4gIF9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwNCj4gPiBuX3Br dCwNCj4gPiA+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ID4gIH0NCj4gPiA+IEBAIC0xNjU3LDYg KzE3NzcsMjUgQEAgY3JlYXRlX21idWZfcG9vbCh1aW50MTZfdCBucl9wb3J0LCB1aW50MzJfdA0K PiA+ID4gbnJfc3dpdGNoX2NvcmUsIHVpbnQzMl90IG1idWZfc2l6ZSwNCj4gPiA+ICBydGVfZXhp dChFWElUX0ZBSUxVUkUsICJDYW5ub3QgY3JlYXRlIG1idWYgcG9vbFxuIik7DQo+ID4gPiAgfQ0K PiA+ID4NCj4gPiA+ICtzdGF0aWMgdm9pZA0KPiA+ID4gK2luaXRfZG1hKHZvaWQpDQo+ID4gPiAr ew0KPiA+ID4gK2ludCBpOw0KPiA+ID4gKw0KPiA+ID4gK2ZvciAoaSA9IDA7IGkgPCBNQVhfVkhP U1RfREVWSUNFOyBpKyspIHsNCj4gPiA+ICtpbnQgajsNCj4gPiA+ICsNCj4gPiA+ICtmb3IgKGog PSAwOyBqIDwgUlRFX01BWF9RVUVVRVNfUEVSX1BPUlQgKiAyOyBqKyspIHsNCj4gPiA+ICtkbWFf YmluZFtpXS5kbWFzW2pdLmRldl9pZCA9IElOVkFMSURfRE1BX0lEOw0KPiA+ID4gK2RtYV9iaW5k W2ldLmRtYXNbal0uYXN5bmNfZW5hYmxlZCA9IGZhbHNlOw0KPiA+ID4gK30NCj4gPiA+ICt9DQo+ ID4gPiArDQo+ID4gPiArZm9yIChpID0gMDsgaSA8IFJURV9ETUFERVZfREVGQVVMVF9NQVg7IGkr Kykgew0KPiA+ID4gK2RtYV9jb25maWdbaV0uZGV2X2lkID0gSU5WQUxJRF9ETUFfSUQ7DQo+ID4g PiArfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICAvKg0KPiA+ID4gICAqIE1haW4gZnVuY3Rp b24sIGRvZXMgaW5pdGlhbGlzYXRpb24gYW5kIGNhbGxzIHRoZSBwZXItbGNvcmUgZnVuY3Rpb25z Lg0KPiA+ID4gICAqLw0KPiA+ID4gQEAgLTE2NzksNiArMTgxOCw5IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkNCj4gPiA+ICBhcmdjIC09IHJldDsNCj4gPiA+ICBhcmd2ICs9IHJldDsN Cj4gPiA+DQo+ID4gPiArLyogaW5pdGlhbGl6ZSBkbWEgc3RydWN0dXJlcyAqLw0KPiA+ID4gK2lu aXRfZG1hKCk7DQo+ID4gPiArDQo+ID4gPiAgLyogcGFyc2UgYXBwIGFyZ3VtZW50cyAqLw0KPiA+ ID4gIHJldCA9IHVzX3Zob3N0X3BhcnNlX2FyZ3MoYXJnYywgYXJndik7DQo+ID4gPiAgaWYgKHJl dCA8IDApDQo+ID4gPiBAQCAtMTc1NCw2ICsxODk2LDIwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkNCj4gPiA+ICBpZiAoY2xpZW50X21vZGUpDQo+ID4gPiAgZmxhZ3MgfD0gUlRFX1ZI T1NUX1VTRVJfQ0xJRU5UOw0KPiA+ID4NCj4gPiA+ICtpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7 DQo+ID4gPiAraWYgKHJ0ZV92aG9zdF9hc3luY19kbWFfY29uZmlndXJlKGRtYV9jb25maWcsIGRt YV9jb3VudCkNCj4gPiA8IDApIHsNCj4gPiA+ICtSVEVfTE9HKEVSUiwgVkhPU1RfUE9SVCwgIkZh aWxlZCB0byBjb25maWd1cmUNCj4gPiBETUEgaW4NCj4gPiA+IHZob3N0LlxuIik7DQo+ID4gPiAr Zm9yIChpID0gMDsgaSA8IGRtYV9jb3VudDsgaSsrKSB7DQo+ID4gPiAraWYgKGRtYV9jb25maWdb aV0uZGV2X2lkICE9IElOVkFMSURfRE1BX0lEKQ0KPiA+IHsNCj4gPiA+ICtydGVfZG1hX3N0b3Ao ZG1hX2NvbmZpZ1tpXS5kZXZfaWQpOw0KPiA+ID4gK2RtYV9jb25maWdbaV0uZGV2X2lkID0NCj4g PiBJTlZBTElEX0RNQV9JRDsNCj4gPiA+ICt9DQo+ID4gPiArfQ0KPiA+ID4gK2RtYV9jb3VudCA9 IDA7DQo+ID4gPiArYXN5bmNfdmhvc3RfZHJpdmVyID0gZmFsc2U7DQo+ID4gPiArfQ0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICAvKiBSZWdpc3RlciB2aG9zdCB1c2VyIGRyaXZlciB0byBoYW5k bGUgdmhvc3QgbWVzc2FnZXMuICovDQo+ID4gPiAgZm9yIChpID0gMDsgaSA8IG5iX3NvY2tldHM7 IGkrKykgew0KPiA+ID4gIGNoYXIgKmZpbGUgPSBzb2NrZXRfZmlsZXMgKyBpICogUEFUSF9NQVg7 DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3QvbWFpbi5oIGIvZXhhbXBsZXMvdmhv c3QvbWFpbi5oDQo+ID4gPiBpbmRleCBlN2IxYWM2MGE2Li5iNGE0NTNlNzdlIDEwMDY0NA0KPiA+ ID4gLS0tIGEvZXhhbXBsZXMvdmhvc3QvbWFpbi5oDQo+ID4gPiArKysgYi9leGFtcGxlcy92aG9z dC9tYWluLmgNCj4gPiA+IEBAIC04LDYgKzgsNyBAQA0KPiA+ID4gICNpbmNsdWRlIDxzeXMvcXVl dWUuaD4NCj4gPiA+DQo+ID4gPiAgI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiA+ID4gKyNpbmNs dWRlIDxydGVfcGNpLmg+DQo+ID4gPg0KPiA+ID4gIC8qIE1hY3JvcyBmb3IgcHJpbnRpbmcgdXNp bmcgUlRFX0xPRyAqLw0KPiA+ID4gICNkZWZpbmUgUlRFX0xPR1RZUEVfVkhPU1RfQ09ORklHIFJU RV9MT0dUWVBFX1VTRVIxDQo+ID4gPiBAQCAtNzksNiArODAsMTYgQEAgc3RydWN0IGxjb3JlX2lu Zm8gew0KPiA+ID4gIHN0cnVjdCB2aG9zdF9kZXZfdGFpbHFfbGlzdCB2ZGV2X2xpc3Q7DQo+ID4g PiAgfTsNCj4gPiA+DQo+ID4gPiArc3RydWN0IGRtYV9pbmZvIHsNCj4gPiA+ICtzdHJ1Y3QgcnRl X3BjaV9hZGRyIGFkZHI7DQo+ID4gPiAraW50MTZfdCBkZXZfaWQ7DQo+ID4gPiArYm9vbCBhc3lu Y19lbmFibGVkOw0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RydWN0IGRtYV9mb3Jfdmhv c3Qgew0KPiA+ID4gK3N0cnVjdCBkbWFfaW5mbyBkbWFzW1JURV9NQVhfUVVFVUVTX1BFUl9QT1JU ICogMl07DQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICAvKiB3ZSBpbXBsZW1lbnQgbm9uLWV4 dHJhIHZpcnRpbyBuZXQgZmVhdHVyZXMgKi8NCj4gPiA+ICAjZGVmaW5lIFZJUlRJT19ORVRfRkVB VFVSRVMwDQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1 aWxkIGIvZXhhbXBsZXMvdmhvc3QvbWVzb24uYnVpbGQNCj4gPiA+IGluZGV4IDNlZmQ1ZTY1NDAu Ljg3YTYzN2Y4M2YgMTAwNjQ0DQo+ID4gPiAtLS0gYS9leGFtcGxlcy92aG9zdC9tZXNvbi5idWls ZA0KPiA+ID4gKysrIGIvZXhhbXBsZXMvdmhvc3QvbWVzb24uYnVpbGQNCj4gPiA+IEBAIC0xMiwx MyArMTIsOSBAQCBpZiBub3QgaXNfbGludXgNCj4gPiA+ICBlbmRpZg0KPiA+ID4NCj4gPiA+ICBk ZXBzICs9ICd2aG9zdCcNCj4gPiA+ICtkZXBzICs9ICdkbWFkZXYnDQo+ID4gPiAgYWxsb3dfZXhw ZXJpbWVudGFsX2FwaXMgPSB0cnVlDQo+ID4gPiAgc291cmNlcyA9IGZpbGVzKA0KPiA+ID4gICAg ICAgICAgJ21haW4uYycsDQo+ID4gPiAgICAgICAgICAndmlydGlvX25ldC5jJywNCj4gPiA+ICAp DQo+ID4gPiAtDQo+ID4gPiAtaWYgZHBka19jb25mLmhhcygnUlRFX1JBV19JT0FUJykNCj4gPiA+ IC0gICAgZGVwcyArPSAncmF3X2lvYXQnDQo+ID4gPiAtICAgIHNvdXJjZXMgKz0gZmlsZXMoJ2lv YXQuYycpDQo+ID4gPiAtZW5kaWYNCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvbWVzb24u YnVpbGQgYi9saWIvdmhvc3QvbWVzb24uYnVpbGQNCj4gPiA+IGluZGV4IGNkYjM3YTQ4MTQuLjgx MDczMjk0MDAgMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIvdmhvc3QvbWVzb24uYnVpbGQNCj4gPiA+ ICsrKyBiL2xpYi92aG9zdC9tZXNvbi5idWlsZA0KPiA+ID4gQEAgLTMzLDcgKzMzLDggQEAgaGVh ZGVycyA9IGZpbGVzKA0KPiA+ID4gICAgICAgICAgJ3J0ZV92aG9zdF9hc3luYy5oJywNCj4gPiA+ ICAgICAgICAgICdydGVfdmhvc3RfY3J5cHRvLmgnLA0KPiA+ID4gICkNCj4gPiA+ICsNCj4gPiA+ ICBkcml2ZXJfc2RrX2hlYWRlcnMgPSBmaWxlcygNCj4gPiA+ICAgICAgICAgICd2ZHBhX2RyaXZl ci5oJywNCj4gPiA+ICApDQo+ID4gPiAtZGVwcyArPSBbJ2V0aGRldicsICdjcnlwdG9kZXYnLCAn aGFzaCcsICdwY2knXQ0KPiA+ID4gK2RlcHMgKz0gWydldGhkZXYnLCAnY3J5cHRvZGV2JywgJ2hh c2gnLCAncGNpJywgJ2RtYWRldiddDQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3J0ZV92 aG9zdF9hc3luYy5oIGIvbGliL3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ID4gPiBpbmRleCBh ODdlYTZiYTM3Li4yM2E3YTJkOGIzIDEwMDY0NA0KPiA+ID4gLS0tIGEvbGliL3Zob3N0L3J0ZV92 aG9zdF9hc3luYy5oDQo+ID4gPiArKysgYi9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmgNCj4g PiA+IEBAIC0yNyw3MCArMjcsMTIgQEAgc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciB7DQo+ID4g PiAgfTsNCj4gPiA+DQo+ID4gPiAgLyoqDQo+ID4gPiAtICogZG1hIHRyYW5zZmVyIHN0YXR1cw0K PiA+ID4gKyAqIERNQSBkZXZpY2UgaW5mb3JtYXRpb24NCj4gPiA+ICAgKi8NCj4gPiA+IC1zdHJ1 Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyB7DQo+ID4gPiAtLyoqIEFuIGFycmF5IG9mIGFwcGxp Y2F0aW9uIHNwZWNpZmljIGRhdGEgZm9yIHNvdXJjZSBtZW1vcnkgKi8NCj4gPiA+IC11aW50cHRy X3QgKnNyY19vcGFxdWVfZGF0YTsNCj4gPiA+IC0vKiogQW4gYXJyYXkgb2YgYXBwbGljYXRpb24g c3BlY2lmaWMgZGF0YSBmb3IgZGVzdGluYXRpb24gbWVtb3J5ICovDQo+ID4gPiAtdWludHB0cl90 ICpkc3Rfb3BhcXVlX2RhdGE7DQo+ID4gPiAtfTsNCj4gPiA+IC0NCj4gPiA+IC0vKioNCj4gPiA+ IC0gKiBkbWEgb3BlcmF0aW9uIGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBieSBhcHBsaWNh dGlvbnMNCj4gPiA+IC0gKi8NCj4gPiA+IC1zdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxf b3BzIHsNCj4gPiA+IC0vKioNCj4gPiA+IC0gKiBpbnN0cnVjdCBhc3luYyBlbmdpbmVzIHRvIHBl cmZvcm0gY29waWVzIGZvciBhIGJhdGNoIG9mIHBhY2tldHMNCj4gPiA+IC0gKg0KPiA+ID4gLSAq IEBwYXJhbSB2aWQNCj4gPiA+IC0gKiAgaWQgb2Ygdmhvc3QgZGV2aWNlIHRvIHBlcmZvcm0gZGF0 YSBjb3BpZXMNCj4gPiA+IC0gKiBAcGFyYW0gcXVldWVfaWQNCj4gPiA+IC0gKiAgcXVldWUgaWQg dG8gcGVyZm9ybSBkYXRhIGNvcGllcw0KPiA+ID4gLSAqIEBwYXJhbSBpb3ZfaXRlcg0KPiA+ID4g LSAqICBhbiBhcnJheSBvZiBJT1YgaXRlcmF0b3JzDQo+ID4gPiAtICogQHBhcmFtIG9wYXF1ZV9k YXRhDQo+ID4gPiAtICogIG9wYXF1ZSBkYXRhIHBhaXIgc2VuZGluZyB0byBETUEgZW5naW5lDQo+ ID4gPiAtICogQHBhcmFtIGNvdW50DQo+ID4gPiAtICogIG51bWJlciBvZiBlbGVtZW50cyBpbiB0 aGUgImRlc2NzIiBhcnJheQ0KPiA+ID4gLSAqIEByZXR1cm4NCj4gPiA+IC0gKiAgbnVtYmVyIG9m IElPViBpdGVyYXRvcnMgcHJvY2Vzc2VkLCBuZWdhdGl2ZSB2YWx1ZSBtZWFucyBlcnJvcg0KPiA+ ID4gLSAqLw0KPiA+ID4gLWludDMyX3QgKCp0cmFuc2Zlcl9kYXRhKShpbnQgdmlkLCB1aW50MTZf dCBxdWV1ZV9pZCwNCj4gPiA+IC1zdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICppb3ZfaXRlciwN Cj4gPiA+IC1zdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2RhdGEsDQo+ID4g PiAtdWludDE2X3QgY291bnQpOw0KPiA+ID4gLS8qKg0KPiA+ID4gLSAqIGNoZWNrIGNvcHktY29t cGxldGVkIHBhY2tldHMgZnJvbSB0aGUgYXN5bmMgZW5naW5lDQo+ID4gPiAtICogQHBhcmFtIHZp ZA0KPiA+ID4gLSAqICBpZCBvZiB2aG9zdCBkZXZpY2UgdG8gY2hlY2sgY29weSBjb21wbGV0aW9u DQo+ID4gPiAtICogQHBhcmFtIHF1ZXVlX2lkDQo+ID4gPiAtICogIHF1ZXVlIGlkIHRvIGNoZWNr IGNvcHkgY29tcGxldGlvbg0KPiA+ID4gLSAqIEBwYXJhbSBvcGFxdWVfZGF0YQ0KPiA+ID4gLSAq ICBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgb3BhcXVlIGRhdGEgcGFpciBmcm9tIERNQSBlbmdpbmUN Cj4gPiA+IC0gKiBAcGFyYW0gbWF4X3BhY2tldHMNCj4gPiA+IC0gKiAgbWF4IG51bWJlciBvZiBw YWNrZXRzIGNvdWxkIGJlIGNvbXBsZXRlZA0KPiA+ID4gLSAqIEByZXR1cm4NCj4gPiA+IC0gKiAg bnVtYmVyIG9mIGFzeW5jIGRlc2NzIGNvbXBsZXRlZCwgbmVnYXRpdmUgdmFsdWUgbWVhbnMgZXJy b3INCj4gPiA+IC0gKi8NCj4gPiA+IC1pbnQzMl90ICgqY2hlY2tfY29tcGxldGVkX2NvcGllcyko aW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gPiAtc3RydWN0IHJ0ZV92aG9zdF9hc3lu Y19zdGF0dXMgKm9wYXF1ZV9kYXRhLA0KPiA+ID4gLXVpbnQxNl90IG1heF9wYWNrZXRzKTsNCj4g PiA+IC19Ow0KPiA+ID4gLQ0KPiA+ID4gLS8qKg0KPiA+ID4gLSAqICBhc3luYyBjaGFubmVsIGZl YXR1cmVzDQo+ID4gPiAtICovDQo+ID4gPiAtZW51bSB7DQo+ID4gPiAtUlRFX1ZIT1NUX0FTWU5D X0lOT1JERVIgPSAxVSA8PCAwLA0KPiA+ID4gLX07DQo+ID4gPiAtDQo+ID4gPiAtLyoqDQo+ID4g PiAtICogIGFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlvbg0KPiA+ID4gLSAqLw0KPiA+ID4gLXN0 cnVjdCBydGVfdmhvc3RfYXN5bmNfY29uZmlnIHsNCj4gPiA+IC11aW50MzJfdCBmZWF0dXJlczsN Cj4gPiA+IC11aW50MzJfdCByc3ZkWzJdOw0KPiA+ID4gK3N0cnVjdCBydGVfdmhvc3RfYXN5bmNf ZG1hX2luZm8gew0KPiA+ID4gK2ludDE2X3QgZGV2X2lkOy8qIERNQSBkZXZpY2UgSUQgKi8NCj4g PiA+ICt1aW50MTZfdCBtYXhfdmNoYW5zOy8qIG1heCBudW1iZXIgb2YgdmNoYW4gKi8NCj4gPiA+ ICt1aW50MTZfdCBtYXhfZGVzYzsvKiBtYXggZGVzYyBudW1iZXIgb2YgdmNoYW4gKi8NCj4gPiA+ ICB9Ow0KPiA+ID4NCj4gPiA+ICAvKioNCj4gPiA+IEBAIC0xMDAsMTcgKzQyLDExIEBAIHN0cnVj dCBydGVfdmhvc3RfYXN5bmNfY29uZmlnIHsNCj4gPiA+ICAgKiAgdmhvc3QgZGV2aWNlIGlkIGFz eW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNoZWQgdG8NCj4gPiA+ICAgKiBAcGFyYW0gcXVldWVfaWQN Cj4gPiA+ICAgKiAgdmhvc3QgcXVldWUgaWQgYXN5bmMgY2hhbm5lbCB0byBiZSBhdHRhY2hlZCB0 bw0KPiA+ID4gLSAqIEBwYXJhbSBjb25maWcNCj4gPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBjb25m aWd1cmF0aW9uIHN0cnVjdHVyZQ0KPiA+ID4gLSAqIEBwYXJhbSBvcHMNCj4gPiA+IC0gKiAgQXN5 bmMgY2hhbm5lbCBvcGVyYXRpb24gY2FsbGJhY2tzDQo+ID4gPiAgICogQHJldHVybg0KPiA+ID4g ICAqICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmVzDQo+ID4gPiAgICovDQo+ID4gPiAgX19y dGVfZXhwZXJpbWVudGFsDQo+ID4gPiAtaW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lz dGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ID4gLXN0cnVjdCBydGVfdmhvc3Rf YXN5bmNfY29uZmlnIGNvbmZpZywNCj4gPiA+IC1zdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5u ZWxfb3BzICpvcHMpOw0KPiA+ID4gK2ludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rl cihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCk7DQo+ID4gPg0KPiA+ID4gIC8qKg0KPiA+ID4g ICAqIFVucmVnaXN0ZXIgYW4gYXN5bmMgY2hhbm5lbCBmb3IgYSB2aG9zdCBxdWV1ZQ0KPiA+ID4g QEAgLTEzNiwxNyArNzIsMTEgQEAgaW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3VucmVnaXN0 ZXIoaW50IHZpZCwNCj4gPiB1aW50MTZfdA0KPiA+ID4gcXVldWVfaWQpOw0KPiA+ID4gICAqICB2 aG9zdCBkZXZpY2UgaWQgYXN5bmMgY2hhbm5lbCB0byBiZSBhdHRhY2hlZCB0bw0KPiA+ID4gICAq IEBwYXJhbSBxdWV1ZV9pZA0KPiA+ID4gICAqICB2aG9zdCBxdWV1ZSBpZCBhc3luYyBjaGFubmVs IHRvIGJlIGF0dGFjaGVkIHRvDQo+ID4gPiAtICogQHBhcmFtIGNvbmZpZw0KPiA+ID4gLSAqICBB c3luYyBjaGFubmVsIGNvbmZpZ3VyYXRpb24NCj4gPiA+IC0gKiBAcGFyYW0gb3BzDQo+ID4gPiAt ICogIEFzeW5jIGNoYW5uZWwgb3BlcmF0aW9uIGNhbGxiYWNrcw0KPiA+ID4gICAqIEByZXR1cm4N Cj4gPiA+ICAgKiAgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlcw0KPiA+ID4gICAqLw0KPiA+ ID4gIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4gLWludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5l bF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+ID4gcXVldWVfaWQs DQo+ID4gPiAtc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiA+ID4gLXN0 cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgKm9wcyk7DQo+ID4gPiAraW50IHJ0ZV92 aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50IHZpZCwgdWludDE2 X3QNCj4gPiA+IHF1ZXVlX2lkKTsNCj4gPiA+DQo+ID4gPiAgLyoqDQo+ID4gPiAgICogVW5yZWdp c3RlciBhbiBhc3luYyBjaGFubmVsIGZvciBhIHZob3N0IHF1ZXVlIHdpdGhvdXQgcGVyZm9ybWlu ZyBhbnkNCj4gPiA+IEBAIC0xNzksMTIgKzEwOSwxNyBAQCBpbnQNCj4gPiBydGVfdmhvc3RfYXN5 bmNfY2hhbm5lbF91bnJlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50DQo+ID4gPiB2aWQsDQo+ID4g PiAgICogIGFycmF5IG9mIHBhY2tldHMgdG8gYmUgZW5xdWV1ZWQNCj4gPiA+ICAgKiBAcGFyYW0g Y291bnQNCj4gPiA+ICAgKiAgcGFja2V0cyBudW0gdG8gYmUgZW5xdWV1ZWQNCj4gPiA+ICsgKiBA cGFyYW0gZG1hX2lkDQo+ID4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEgZGV2aWNl DQo+ID4gPiArICogQHBhcmFtIHZjaGFuDQo+ID4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHZp cnR1YWwgRE1BIGNoYW5uZWwNCj4gPiA+ICAgKiBAcmV0dXJuDQo+ID4gPiAgICogIG51bSBvZiBw YWNrZXRzIGVucXVldWVkDQo+ID4gPiAgICovDQo+ID4gPiAgX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gPiAgdWludDE2X3QgcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KGludCB2aWQsIHVp bnQxNl90IHF1ZXVlX2lkLA0KPiA+ID4gLXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90 IGNvdW50KTsNCj4gPiA+ICtzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCwg aW50MTZfdCBkbWFfaWQsDQo+ID4gPiArdWludDE2X3QgdmNoYW4pOw0KPiA+DQo+ID4gQWxsIGRt YV9pZCBpbiB0aGUgQVBJIHNob3VsZCBiZSB1aW50MTZfdC4gT3RoZXJ3aXNlIHlvdSBuZWVkIHRv IGNoZWNrIGlmDQo+IHZhbGlkLg0KPiANCj4gWWVzLCB5b3UgYXJlIHJpZ2h0LiBBbHRob3VnaCBk bWFfaWQgaXMgZGVmaW5lZCBhcyBpbnQxNl90IGFuZCBETUEgbGlicmFyeQ0KPiBjaGVja3MNCj4g aWYgaXQgaXMgdmFsaWQsIHZob3N0IGRvZXNuJ3QgaGFuZGxlIERNQSBmYWlsdXJlIGFuZCB3ZSBu ZWVkIHRvIG1ha2Ugc3VyZQ0KPiBkbWFfaWQNCj4gaXMgdmFsaWQgYmVmb3JlIHVzaW5nIGl0LiBB bmQgZXZlbiBpZiB2aG9zdCBoYW5kbGVzIERNQSBlcnJvciwgYSBiZXR0ZXIgcGxhY2UNCj4gdG8g Y2hlY2sNCj4gaW52YWxpZCBkbWFfaWQgaXMgYmVmb3JlIHBhc3NpbmcgaXQgdG8gRE1BIGxpYnJh cnkgdG9vLiBJIHdpbGwgYWRkIHRoZSBjaGVjaw0KPiBsYXRlci4NCj4gDQo+ID4NCj4gPiA+DQo+ ID4gPiAgLyoqDQo+ID4gPiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgYXN5bmMgY29tcGxldGlv biBzdGF0dXMgZm9yIGEgc3BlY2lmaWMgdmhvc3QNCj4gPiA+IEBAIC0xOTksMTIgKzEzNCwxNyBA QCB1aW50MTZfdCBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVyc3QoaW50DQo+ID4gdmlkLA0K PiA+ID4gdWludDE2X3QgcXVldWVfaWQsDQo+ID4gPiAgICogIGJsYW5rIGFycmF5IHRvIGdldCBy ZXR1cm4gcGFja2V0IHBvaW50ZXINCj4gPiA+ICAgKiBAcGFyYW0gY291bnQNCj4gPiA+ICAgKiAg c2l6ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+ID4gPiArICogQHBhcmFtIGRtYV9pZA0KPiA+ID4g KyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmljZQ0KPiA+ID4gKyAqIEBwYXJhbSB2 Y2hhbg0KPiA+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB2aXJ0dWFsIERNQSBjaGFubmVsDQo+ ID4gPiAgICogQHJldHVybg0KPiA+ID4gICAqICBudW0gb2YgcGFja2V0cyByZXR1cm5lZA0KPiA+ ID4gICAqLw0KPiA+ID4gIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4gIHVpbnQxNl90IHJ0ZV92 aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0K PiA+ID4gLXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50KTsNCj4gPiA+ICtz dHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCwgaW50MTZfdCBkbWFfaWQsDQo+ ID4gPiArdWludDE2X3QgdmNoYW4pOw0KPiA+ID4NCj4gPiA+ICAvKioNCj4gPiA+ICAgKiBUaGlz IGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBpbi1mbGlnaHQgcGFja2V0cyBmb3IgdGhl IHZob3N0DQo+ID4gPiBAQCAtMjM1LDExICsxNzUsMzIgQEAgaW50IHJ0ZV92aG9zdF9hc3luY19n ZXRfaW5mbGlnaHQoaW50IHZpZCwgdWludDE2X3QNCj4gPiA+IHF1ZXVlX2lkKTsNCj4gPiA+ICAg KiAgQmxhbmsgYXJyYXkgdG8gZ2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiA+ID4gICAqIEBw YXJhbSBjb3VudA0KPiA+ID4gICAqICBTaXplIG9mIHRoZSBwYWNrZXQgYXJyYXkNCj4gPiA+ICsg KiBAcGFyYW0gZG1hX2lkDQo+ID4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEgZGV2 aWNlDQo+ID4gPiArICogQHBhcmFtIHZjaGFuDQo+ID4gPiArICogIHRoZSBpZGVudGlmaWVyIG9m IHZpcnR1YWwgRE1BIGNoYW5uZWwNCj4gPiA+ICAgKiBAcmV0dXJuDQo+ID4gPiAgICogIE51bWJl ciBvZiBwYWNrZXRzIHJldHVybmVkDQo+ID4gPiAgICovDQo+ID4gPiAgX19ydGVfZXhwZXJpbWVu dGFsDQo+ID4gPiAgdWludDE2X3QgcnRlX3Zob3N0X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNhZmUo aW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gPiAtc3RydWN0IHJ0ZV9tYnVmICoqcGt0 cywgdWludDE2X3QgY291bnQpOw0KPiA+ID4gK3N0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQx Nl90IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gPiA+ICt1aW50MTZfdCB2Y2hhbik7DQo+ID4g PiArLyoqDQo+ID4gPiArICogVGhlIERNQSB2Q2hhbm5lbHMgdXNlZCBpbiBhc3luY2hyb25vdXMg ZGF0YSBwYXRoIG11c3QgYmUNCj4gPiBjb25maWd1cmVkDQo+ID4gPiArICogZmlyc3QuIFNvIHRo aXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyBETUENCj4gPiA+ ICsgKiBhY2NlbGVyYXRpb24gZm9yIHZyaW5nLiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBhc3lu Y2hyb25vdXMgZGF0YSBwYXRoDQo+ID4gPiArICogY2Fubm90IGJlIGVuYWJsZWQgZm9yIGFueSB2 cmluZyBmdXJ0aGVyLg0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFtIGRtYXMNCj4gPiA+ICsg KiAgRE1BIGluZm9ybWF0aW9uDQo+ID4gPiArICogQHBhcmFtIGNvdW50DQo+ID4gPiArICogIEVs ZW1lbnQgbnVtYmVyIG9mICdkbWFzJw0KPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ICsgKiAgMCBv biBzdWNjZXNzLCBhbmQgLTEgb24gZmFpbHVyZQ0KPiA+ID4gKyAqLw0KPiA+ID4gK19fcnRlX2V4 cGVyaW1lbnRhbA0KPiA+ID4gK2ludCBydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShzdHJ1 Y3QgcnRlX3Zob3N0X2FzeW5jX2RtYV9pbmZvDQo+ID4gKmRtYXMsDQo+ID4gPiArdWludDE2X3Qg Y291bnQpOw0KPiA+DQo+ID4gSSB0aGluayBiYXNlZCBvbiBjdXJyZW50IGRlc2lnbiwgdmhvc3Qg Y2FuIHVzZSBldmVyeSB2Y2hhbiBpZiB1c2VyIGFwcCBsZXQNCj4gaXQuDQo+ID4gU28gdGhlIG1h eF9kZXNjIGFuZCBtYXhfdmNoYW5zIGNhbiBqdXN0IGJlIGdvdCBmcm9tIGRtYWRldiBBUElzPyBU aGVuDQo+ID4gdGhlcmUncw0KPiA+IG5vIG5lZWQgdG8gaW50cm9kdWNlIHRoZSBuZXcgQUJJIHN0 cnVjdCBydGVfdmhvc3RfYXN5bmNfZG1hX2luZm8uDQo+IA0KPiBZZXMsIG5vIG5lZWQgdG8gaW50 cm9kdWNlIHN0cnVjdCBydGVfdmhvc3RfYXN5bmNfZG1hX2luZm8uIFdlIGNhbiBlaXRoZXIgdXNl DQo+IHN0cnVjdCBydGVfZG1hX2luZm8gd2hpY2ggaXMgc3VnZ2VzdGVkIGJ5IE1heGltZSwgb3Ig cXVlcnkgZnJvbSBkbWEgbGlicmFyeQ0KPiB2aWEgZGV2aWNlIGlkLiBTaW5jZSBkbWEgZGV2aWNl IGNvbmZpZ3VyYXRpb24gaXMgbGVmdCB0byBhcHBsaWNhdGlvbnMsIEkNCj4gcHJlZmVyIHRvDQo+ IHVzZSBydGVfZG1hX2luZm8gZGlyZWN0bHkuIEhvdyBkbyB5b3UgdGhpbms/DQoNCklmIHlvdSBv bmx5IHVzZSBydGVfZG1hX2luZm8gYXMgaW5wdXQgcGFyYW0sIHlvdSB3aWxsIGFsc28gbmVlZCB0 byBjYWxsIGRtYWRldg0KQVBJIHRvIGdldCBkbWFkZXYgSUQgaW4gcnRlX3Zob3N0X2FzeW5jX2Rt YV9jb25maWd1cmUgKE9yIHlvdSBhZGQgYm90aCBydGVfZG1hX2luZm8NCmFuZCBkbWFkZXYgSUQp LiBTbyBJIHN1Z2dlc3QgdG8gb25seSB1c2UgZG1hZGV2IElEIGFzIGlucHV0Lg0KDQo+IA0KPiA+ DQo+ID4gQW5kIGFib3V0IG1heF9kZXNjLCBJIHNlZSB0aGUgZG1hZGV2IGxpYiwgeW91IGNhbiBn ZXQgdmNoYW4ncyBtYXhfZGVzYw0KPiA+IGJ1dCB5b3UNCj4gPiBtYXkgdXNlIGEgbmJfZGVzYyAo PD0gbWF4X2Rlc2MpIHRvIGNvbmZpZ3VyZSB2Y2hhbmwuIEFuZCBJSVVDLCB2aG9zdCB3YW50cw0K PiA+IHRvDQo+ID4ga25vdyB0aGUgbmJfZGVzYyBpbnN0ZWFkIG9mIG1heF9kZXNjPw0KPiANCj4g VHJ1ZSwgbmJfZGVzYyBpcyBiZXR0ZXIgdGhhbiBtYXhfZGVzYy4gQnV0IGRtYSBsaWJyYXJ5IGRv ZXNu4oCZdCBwcm92aWRlDQo+IGZ1bmN0aW9uDQo+IHRvIHF1ZXJ5IG5iX2Rlc2MgZm9yIGV2ZXJ5 IHZjaGFubmVsLiBBbmQgcnRlX2RtYV9pbmZvIGNhbm5vdCBiZSB1c2VkIGluDQo+IHJ0ZV92aG9z dF9hc3luY19kbWFfY29uZmlndXJlKCksIGlmIHZob3N0IHVzZXMgbmJfZGVzYy4gU28gdGhlIG9u bHkgd2F5IGlzDQo+IHRvIHJlcXVpcmUgdXNlcnMgdG8gcHJvdmlkZSBuYl9kZXNjIGZvciBldmVy eSB2Y2hhbm5lbCwgYW5kIGl0IHdpbGwgaW50cm9kdWNlDQo+IGEgbmV3IHN0cnVjdC4gSXMgaXQg cmVhbGx5IG5lZWRlZD8NCj4gDQoNClNpbmNlIG5vdyBkbWFkZXYgbGliIGRvZXMgbm90IHByb3Zp ZGUgYSB3YXkgdG8gcXVlcnkgcmVhbCBuYl9kZXNjIGZvciBhIHZjaGFubCwNCnNvIEkgdGhpbmsg d2UgY2FuIGp1c3QgdXNlIG1heF9kZXNjLg0KDQpCdXQgaWRlYWxseSwgaWYgZG1hZGV2IGxpYiBw cm92aWRlcyBzdWNoIGEgd2F5LCB0aGUgY29uZmlndXJlZCBuYl9kZXNjIGFuZCBuYl92Y2hhbmwN CnNob3VsZCBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB2aG9zdCBsaWIuDQoNCkBCcnVjZSwgc2hvdWxk IHlvdSBhZGQgc3VjaCBhIHdheSBpbiBkbWFkZXYgbGliPyBBcyB1c2VycyBub3cgZG8gbm90IGtu b3cgdGhlIHJlYWwNCmNvbmZpZ3VyZWQgbmJfZGVzYyBvZiB2Y2hhbmwuDQoNCj4gPg0KPiA+ID4N Cj4gPiA+ICAjZW5kaWYgLyogX1JURV9WSE9TVF9BU1lOQ19IXyAqLw0KPiA+ID4gZGlmZiAtLWdp dCBhL2xpYi92aG9zdC92ZXJzaW9uLm1hcCBiL2xpYi92aG9zdC92ZXJzaW9uLm1hcA0KPiA+ID4g aW5kZXggYTdlZjdmMTk3Ni4uMTIwMmJhOWMxYSAxMDA2NDQNCj4gPiA+IC0tLSBhL2xpYi92aG9z dC92ZXJzaW9uLm1hcA0KPiA+ID4gKysrIGIvbGliL3Zob3N0L3ZlcnNpb24ubWFwDQo+ID4gPiBA QCAtODQsNiArODQsOSBAQCBFWFBFUklNRU5UQUwgew0KPiA+ID4NCj4gPiA+ICAjIGFkZGVkIGlu IDIxLjExDQo+ID4gPiAgcnRlX3Zob3N0X2dldF9tb25pdG9yX2FkZHI7DQo+ID4gPiArDQo+ID4g PiArIyBhZGRlZCBpbiAyMi4wMw0KPiA+ID4gK3J0ZV92aG9zdF9hc3luY19kbWFfY29uZmlndXJl Ow0KPiA+ID4gIH07DQo+ID4gPg0KPiA+ID4gIElOVEVSTkFMIHsNCj4gPiA+IGRpZmYgLS1naXQg YS9saWIvdmhvc3Qvdmhvc3QuYyBiL2xpYi92aG9zdC92aG9zdC5jDQo+ID4gPiBpbmRleCAxM2E5 YmI5ZGQxLi4zMmYzN2Y0ODUxIDEwMDY0NA0KPiA+ID4gLS0tIGEvbGliL3Zob3N0L3Zob3N0LmMN Cj4gPiA+ICsrKyBiL2xpYi92aG9zdC92aG9zdC5jDQo+ID4gPiBAQCAtMzQ0LDYgKzM0NCw3IEBA IHZob3N0X2ZyZWVfYXN5bmNfbWVtKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQ0KPiA+ID4g IHJldHVybjsNCj4gPiA+DQo+ID4gPiAgcnRlX2ZyZWUodnEtPmFzeW5jLT5wa3RzX2luZm8pOw0K PiA+ID4gK3J0ZV9mcmVlKHZxLT5hc3luYy0+cGt0c19jbXBsX2ZsYWcpOw0KPiA+ID4NCj4gPiA+ ICBydGVfZnJlZSh2cS0+YXN5bmMtPmJ1ZmZlcnNfcGFja2VkKTsNCj4gPiA+ICB2cS0+YXN5bmMt PmJ1ZmZlcnNfcGFja2VkID0gTlVMTDsNCj4gPiA+IEBAIC0xNjI2LDggKzE2MjcsNyBAQCBydGVf dmhvc3RfZXh0ZXJuX2NhbGxiYWNrX3JlZ2lzdGVyKGludCB2aWQsDQo+ID4gPiAgfQ0KPiA+ID4N Cj4gPiA+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQNCj4gPiA+IC1hc3luY19jaGFu bmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ID4gLXN0cnVjdCBy dGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgKm9wcykNCj4gPiA+ICthc3luY19jaGFubmVsX3Jl Z2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiA+ID4gIHsNCj4gPiA+ICBzdHJ1 Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+ID4gIHN0cnVjdCB2aG9z dF92aXJ0cXVldWUgKnZxID0gZGV2LT52aXJ0cXVldWVbcXVldWVfaWRdOw0KPiA+ID4gQEAgLTE2 NTYsNiArMTY1NiwxNCBAQCBhc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90 DQo+ID4gcXVldWVfaWQsDQo+ID4gPiAgZ290byBvdXRfZnJlZV9hc3luYzsNCj4gPiA+ICB9DQo+ ID4gPg0KPiA+ID4gK2FzeW5jLT5wa3RzX2NtcGxfZmxhZyA9IHJ0ZV96bWFsbG9jX3NvY2tldChO VUxMLCB2cS0+c2l6ZSAqDQo+ID4gc2l6ZW9mKGJvb2wpLA0KPiA+ID4gK1JURV9DQUNIRV9MSU5F X1NJWkUsIG5vZGUpOw0KPiA+ID4gK2lmICghYXN5bmMtPnBrdHNfY21wbF9mbGFnKSB7DQo+ID4g PiArVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJmYWlsZWQgdG8gYWxsb2NhdGUgYXN5bmMNCj4gPiBw a3RzX2NtcGxfZmxhZw0KPiA+ID4gKHZpZCAlZCwgcWlkOiAlZClcbiIsDQo+ID4gPiArdmlkLCBx dWV1ZV9pZCk7DQo+ID4NCj4gPiBxaWQ6ICV1DQo+ID4NCj4gPiA+ICtnb3RvIG91dF9mcmVlX2Fz eW5jOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICBpZiAodnFfaXNfcGFja2VkKGRldikpIHsN Cj4gPiA+ICBhc3luYy0+YnVmZmVyc19wYWNrZWQgPSBydGVfbWFsbG9jX3NvY2tldChOVUxMLA0K PiA+ID4gIHZxLT5zaXplICogc2l6ZW9mKHN0cnVjdA0KPiA+IHZyaW5nX3VzZWRfZWxlbV9wYWNr ZWQpLA0KPiA+ID4gQEAgLTE2NzYsOSArMTY4NCw2IEBAIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIo aW50IHZpZCwgdWludDE2X3QNCj4gPiBxdWV1ZV9pZCwNCj4gPiA+ICB9DQo+ID4gPiAgfQ0KPiA+ ID4NCj4gPiA+IC1hc3luYy0+b3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPSBvcHMtDQo+ID4g PmNoZWNrX2NvbXBsZXRlZF9jb3BpZXM7DQo+ID4gPiAtYXN5bmMtPm9wcy50cmFuc2Zlcl9kYXRh ID0gb3BzLT50cmFuc2Zlcl9kYXRhOw0KPiA+ID4gLQ0KPiA+ID4gIHZxLT5hc3luYyA9IGFzeW5j Ow0KPiA+ID4NCj4gPiA+ICByZXR1cm4gMDsNCj4gPiA+IEBAIC0xNjkxLDE1ICsxNjk2LDEzIEBA IGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3QNCj4gPiBxdWV1ZV9pZCwN Cj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gIGludA0KPiA+ID4gLXJ0ZV92aG9zdF9hc3luY19jaGFu bmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ID4gLXN0cnVjdCBy dGVfdmhvc3RfYXN5bmNfY29uZmlnIGNvbmZpZywNCj4gPiA+IC1zdHJ1Y3QgcnRlX3Zob3N0X2Fz eW5jX2NoYW5uZWxfb3BzICpvcHMpDQo+ID4gPiArcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVn aXN0ZXIoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQpDQo+ID4gPiAgew0KPiA+ID4gIHN0cnVj dCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ID4gIHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBn ZXRfZGV2aWNlKHZpZCk7DQo+ID4gPiAgaW50IHJldDsNCj4gPiA+DQo+ID4gPiAtaWYgKGRldiA9 PSBOVUxMIHx8IG9wcyA9PSBOVUxMKQ0KPiA+ID4gK2lmIChkZXYgPT0gTlVMTCkNCj4gPiA+ICBy ZXR1cm4gLTE7DQo+ID4gPg0KPiA+ID4gIGlmIChxdWV1ZV9pZCA+PSBWSE9TVF9NQVhfVlJJTkcp DQo+ID4gPiBAQCAtMTcxMCwzMyArMTcxMywyMCBAQCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9y ZWdpc3RlcihpbnQgdmlkLA0KPiA+IHVpbnQxNl90DQo+ID4gPiBxdWV1ZV9pZCwNCj4gPiA+ICBp ZiAodW5saWtlbHkodnEgPT0gTlVMTCB8fCAhZGV2LT5hc3luY19jb3B5KSkNCj4gPiA+ICByZXR1 cm4gLTE7DQo+ID4gPg0KPiA+ID4gLWlmICh1bmxpa2VseSghKGNvbmZpZy5mZWF0dXJlcyAmIFJU RV9WSE9TVF9BU1lOQ19JTk9SREVSKSkpIHsNCj4gPiA+IC1WSE9TVF9MT0dfQ09ORklHKEVSUiwN Cj4gPiA+IC0iYXN5bmMgY29weSBpcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1pbm9yZGVyIG1vZGUg Ig0KPiA+ID4gLSIodmlkICVkLCBxaWQ6ICVkKVxuIiwgdmlkLCBxdWV1ZV9pZCk7DQo+ID4gPiAt cmV0dXJuIC0xOw0KPiA+ID4gLX0NCj4gPiA+IC0NCj4gPiA+IC1pZiAodW5saWtlbHkob3BzLT5j aGVja19jb21wbGV0ZWRfY29waWVzID09IE5VTEwgfHwNCj4gPiA+IC1vcHMtPnRyYW5zZmVyX2Rh dGEgPT0gTlVMTCkpDQo+ID4gPiAtcmV0dXJuIC0xOw0KPiA+ID4gLQ0KPiA+ID4gIHJ0ZV9zcGlu bG9ja19sb2NrKCZ2cS0+YWNjZXNzX2xvY2spOw0KPiA+ID4gLXJldCA9IGFzeW5jX2NoYW5uZWxf cmVnaXN0ZXIodmlkLCBxdWV1ZV9pZCwgb3BzKTsNCj4gPiA+ICtyZXQgPSBhc3luY19jaGFubmVs X3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQpOw0KPiA+ID4gIHJ0ZV9zcGlubG9ja191bmxvY2soJnZx LT5hY2Nlc3NfbG9jayk7DQo+ID4gPg0KPiA+ID4gIHJldHVybiByZXQ7DQo+ID4gPiAgfQ0KPiA+ ID4NCj4gPiA+ICBpbnQNCj4gPiA+IC1ydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90 aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+ID4gcXVldWVfaWQsDQo+ID4gPiAtc3Ry dWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiA+ID4gLXN0cnVjdCBydGVfdmhv c3RfYXN5bmNfY2hhbm5lbF9vcHMgKm9wcykNCj4gPiA+ICtydGVfdmhvc3RfYXN5bmNfY2hhbm5l bF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+ID4gcXVldWVfaWQp DQo+ID4gPiAgew0KPiA+ID4gIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ID4gIHN0 cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4gPg0KPiA+ID4gLWlm IChkZXYgPT0gTlVMTCB8fCBvcHMgPT0gTlVMTCkNCj4gPiA+ICtpZiAoZGV2ID09IE5VTEwpDQo+ ID4gPiAgcmV0dXJuIC0xOw0KPiA+ID4NCj4gPiA+ICBpZiAocXVldWVfaWQgPj0gVkhPU1RfTUFY X1ZSSU5HKQ0KPiA+ID4gQEAgLTE3NDcsMTggKzE3MzcsNyBAQA0KPiA+IHJ0ZV92aG9zdF9hc3lu Y19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50IHZpZCwNCj4gPiA+IHVpbnQxNl90 IHF1ZXVlX2lkLA0KPiA+ID4gIGlmICh1bmxpa2VseSh2cSA9PSBOVUxMIHx8ICFkZXYtPmFzeW5j X2NvcHkpKQ0KPiA+ID4gIHJldHVybiAtMTsNCj4gPiA+DQo+ID4gPiAtaWYgKHVubGlrZWx5KCEo Y29uZmlnLmZlYXR1cmVzICYgUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVIpKSkgew0KPiA+ID4gLVZI T1NUX0xPR19DT05GSUcoRVJSLA0KPiA+ID4gLSJhc3luYyBjb3B5IGlzIG5vdCBzdXBwb3J0ZWQg b24gbm9uLWlub3JkZXIgbW9kZSAiDQo+ID4gPiAtIih2aWQgJWQsIHFpZDogJWQpXG4iLCB2aWQs IHF1ZXVlX2lkKTsNCj4gPiA+IC1yZXR1cm4gLTE7DQo+ID4gPiAtfQ0KPiA+ID4gLQ0KPiA+ID4g LWlmICh1bmxpa2VseShvcHMtPmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPT0gTlVMTCB8fA0KPiA+ ID4gLW9wcy0+dHJhbnNmZXJfZGF0YSA9PSBOVUxMKSkNCj4gPiA+IC1yZXR1cm4gLTE7DQo+ID4g PiAtDQo+ID4gPiAtcmV0dXJuIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBxdWV1ZV9pZCwg b3BzKTsNCj4gPiA+ICtyZXR1cm4gYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcih2aWQsIHF1ZXVlX2lk KTsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gIGludA0KPiA+ID4gQEAgLTE4MzUsNiArMTgxNCw4 MyBAQA0KPiA+IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3VucmVnaXN0ZXJfdGhyZWFkX3Vuc2Fm ZShpbnQNCj4gPiA+IHZpZCwgdWludDE2X3QgcXVldWVfaWQpDQo+ID4gPiAgcmV0dXJuIDA7DQo+ ID4gPiAgfQ0KPiA+ID4NCj4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ ID4gPiArdmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKHZvaWQpDQo+ID4gPiArew0KPiA+ID4gK3Vp bnQxNl90IGk7DQo+ID4gPiArDQo+ID4gPiArZm9yIChpID0gMDsgaSA8IFJURV9ETUFERVZfREVG QVVMVF9NQVg7IGkrKykgew0KPiA+ID4gK3N0cnVjdCBhc3luY19kbWFfaW5mbyAqZG1hID0gJmRt YV9jb3B5X3RyYWNrW2ldOw0KPiA+ID4gK2ludDE2X3QgajsNCj4gPiA+ICsNCj4gPiA+ICtpZiAo ZG1hLT5tYXhfdmNoYW5zID09IDApIHsNCj4gPiA+ICtjb250aW51ZTsNCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArZm9yIChqID0gMDsgaiA8IGRtYS0+bWF4X3ZjaGFuczsgaisrKSB7DQo+ID4g PiArcnRlX2ZyZWUoZG1hLT52Y2hhbnNbal0ubWV0YWRhdGEpOw0KPiA+ID4gK30NCj4gPiA+ICty dGVfZnJlZShkbWEtPnZjaGFucyk7DQo+ID4gPiArZG1hLT52Y2hhbnMgPSBOVUxMOw0KPiA+ID4g K2RtYS0+bWF4X3ZjaGFucyA9IDA7DQo+ID4gPiArfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ ICtpbnQNCj4gPiA+ICtydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgcnRlX3Zo b3N0X2FzeW5jX2RtYV9pbmZvICpkbWFzLA0KPiA+IHVpbnQxNl90DQo+ID4gPiBjb3VudCkNCj4g PiA+ICt7DQo+ID4gPiArdWludDE2X3QgaTsNCj4gPiA+ICsNCj4gPiA+ICtpZiAoIWRtYXMpIHsN Cj4gPiA+ICtWSE9TVF9MT0dfQ09ORklHKEVSUiwgIkludmFsaWQgRE1BIGNvbmZpZ3VyYXRpb24N Cj4gPiBwYXJhbWV0ZXIuXG4iKTsNCj4gPiA+ICtyZXR1cm4gLTE7DQo+ID4gPiArfQ0KPiA+ID4g Kw0KPiA+ID4gK2ZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQo+ID4gPiArc3RydWN0IGFz eW5jX2RtYV92Y2hhbl9pbmZvICp2Y2hhbnM7DQo+ID4gPiAraW50MTZfdCBkZXZfaWQ7DQo+ID4g PiArdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gPiA+ICt1aW50MTZfdCBtYXhfZGVzYzsNCj4gPiA+ ICt1aW50MTZfdCBqOw0KPiA+ID4gKw0KPiA+ID4gK2Rldl9pZCA9IGRtYXNbaV0uZGV2X2lkOw0K PiA+ID4gK21heF92Y2hhbnMgPSBkbWFzW2ldLm1heF92Y2hhbnM7DQo+ID4gPiArbWF4X2Rlc2Mg PSBkbWFzW2ldLm1heF9kZXNjOw0KPiA+ID4gKw0KPiA+ID4gK2lmICghcnRlX2lzX3Bvd2VyX29m XzIobWF4X2Rlc2MpKSB7DQo+ID4gPiArbWF4X2Rlc2MgPSBydGVfYWxpZ24zMnBvdzIobWF4X2Rl c2MpOw0KPiA+ID4gK30NCj4gPg0KPiA+IEkgdGhpbmsgd2hlbiBhbGlnbmluZyB0byBwb3dlciBv ZiAyLCBpdCBzaG91bGQgZXhjZWVkIG5vdCBtYXhfZGVzYz8NCj4gDQo+IEFsaWduZWQgbWF4X2Rl c2MgaXMgdXNlZCB0byBhbGxvY2F0ZSBjb250ZXh0IHRyYWNraW5nIGFycmF5LiBXZSBvbmx5IG5l ZWQNCj4gdG8gZ3VhcmFudGVlIHRoZSBzaXplIG9mIHRoZSBhcnJheSBmb3IgZXZlcnkgdmNoYW5u ZWwgaXMgPj0gbWF4X2Rlc2MuIFNvIGl0J3MNCj4gT0sgdG8gaGF2ZSBncmVhdGVyIGFycmF5IHNp emUgdGhhbiBtYXhfZGVzYy4NCj4gDQo+ID4gQW5kIGJhc2VkIG9uIGFib3ZlIGNvbW1lbnQsIGlm IHRoaXMgbWF4X2Rlc2MgaXMgbmJfZGVzYyBjb25maWd1cmVkIGZvcg0KPiA+IHZjaGFubCwgeW91 IHNob3VsZCBqdXN0IG1ha2Ugc3VyZSB0aGUgbmJfZGVzYyBiZSBwb3dlci1vZi0yLg0KPiA+DQo+ ID4gPiArDQo+ID4gPiArdmNoYW5zID0gcnRlX3ptYWxsb2MoTlVMTCwgc2l6ZW9mKHN0cnVjdA0K PiA+IGFzeW5jX2RtYV92Y2hhbl9pbmZvKSAqDQo+ID4gPiBtYXhfdmNoYW5zLA0KPiA+ID4gK1JU RV9DQUNIRV9MSU5FX1NJWkUpOw0KPiA+ID4gK2lmICh2Y2hhbnMgPT0gTlVMTCkgew0KPiA+ID4g K1ZIT1NUX0xPR19DT05GSUcoRVJSLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZjaGFucw0KPiA+IGZv ciBkbWEtDQo+ID4gPiAlZC4iDQo+ID4gPiArIiBDYW5ub3QgZW5hYmxlIGFzeW5jIGRhdGEtcGF0 aC5cbiIsDQo+ID4gZGV2X2lkKTsNCj4gPiA+ICt2aG9zdF9mcmVlX2FzeW5jX2RtYV9tZW0oKTsN Cj4gPiA+ICtyZXR1cm4gLTE7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK2ZvciAoaiA9IDA7 IGogPCBtYXhfdmNoYW5zOyBqKyspIHsNCj4gPiA+ICt2Y2hhbnNbal0ubWV0YWRhdGEgPSBydGVf em1hbGxvYyhOVUxMLCBzaXplb2YoYm9vbCAqKQ0KPiA+ICoNCj4gPiA+IG1heF9kZXNjLA0KPiA+ ID4gK1JURV9DQUNIRV9MSU5FX1NJWkUpOw0KPiA+ID4gK2lmICghdmNoYW5zW2pdLm1ldGFkYXRh KSB7DQo+ID4gPiArVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUNCj4g PiBtZXRhZGF0YSBmb3INCj4gPiA+ICINCj4gPiA+ICsiZG1hLSVkIHZjaGFuLSV1XG4iLA0KPiA+ IGRldl9pZCwgaik7DQo+ID4gPiArdmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ID4gPiAr cmV0dXJuIC0xOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICt2Y2hhbnNbal0ucmluZ19zaXpl ID0gbWF4X2Rlc2M7DQo+ID4gPiArdmNoYW5zW2pdLnJpbmdfbWFzayA9IG1heF9kZXNjIC0gMTsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArZG1hX2NvcHlfdHJhY2tbZGV2X2lkXS52Y2hhbnMg PSB2Y2hhbnM7DQo+ID4gPiArZG1hX2NvcHlfdHJhY2tbZGV2X2lkXS5tYXhfdmNoYW5zID0gbWF4 X3ZjaGFuczsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArcmV0dXJuIDA7DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gIGludA0KPiA+ID4gIHJ0ZV92aG9zdF9hc3luY19nZXRfaW5mbGlnaHQo aW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQpDQo+ID4gPiAgew0KPiA+ID4gZGlmZiAtLWdpdCBh L2xpYi92aG9zdC92aG9zdC5oIGIvbGliL3Zob3N0L3Zob3N0LmgNCj4gPiA+IGluZGV4IDcwODVl MDg4NWMuLmQ5YmRhMzRlMTEgMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIvdmhvc3Qvdmhvc3QuaA0K PiA+ID4gKysrIGIvbGliL3Zob3N0L3Zob3N0LmgNCj4gPiA+IEBAIC0xOSw2ICsxOSw3IEBADQo+ ID4gPiAgI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiA+ID4gICNpbmNsdWRlIDxydGVfcndsb2Nr Lmg+DQo+ID4gPiAgI2luY2x1ZGUgPHJ0ZV9tYWxsb2MuaD4NCj4gPiA+ICsjaW5jbHVkZSA8cnRl X2RtYWRldi5oPg0KPiA+ID4NCj4gPiA+ICAjaW5jbHVkZSAicnRlX3Zob3N0LmgiDQo+ID4gPiAg I2luY2x1ZGUgInJ0ZV92ZHBhLmgiDQo+ID4gPiBAQCAtNTAsNiArNTEsNyBAQA0KPiA+ID4NCj4g PiA+ICAjZGVmaW5lIFZIT1NUX01BWF9BU1lOQ19JVCAoTUFYX1BLVF9CVVJTVCkNCj4gPiA+ICAj ZGVmaW5lIFZIT1NUX01BWF9BU1lOQ19WRUMgMjA0OA0KPiA+ID4gKyNkZWZpbmUgVkhPU1RfQVNZ TkNfRE1BX0JBVENISU5HX1NJWkUgMzINCj4gPiA+DQo+ID4gPiAgI2RlZmluZSBQQUNLRURfREVT Q19FTlFVRVVFX1VTRURfRkxBRyh3KVwNCj4gPiA+ICAoKHcpID8gKFZSSU5HX0RFU0NfRl9BVkFJ TCB8IFZSSU5HX0RFU0NfRl9VU0VEIHwNCj4gPiBWUklOR19ERVNDX0ZfV1JJVEUpIDogXA0KPiA+ ID4gQEAgLTExOSw2ICsxMjEsNDEgQEAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbV9wYWNrZWQgew0K PiA+ID4gIHVpbnQzMl90IGNvdW50Ow0KPiA+ID4gIH07DQo+ID4gPg0KPiA+ID4gK3N0cnVjdCBh c3luY19kbWFfdmNoYW5faW5mbyB7DQo+ID4gPiArLyogY2lyY3VsYXIgYXJyYXkgdG8gdHJhY2sg Y29weSBtZXRhZGF0YSAqLw0KPiA+ID4gK2Jvb2wgKiptZXRhZGF0YTsNCj4gPg0KPiA+IElmIHRo ZSBtZXRhZGF0YSB3aWxsIG9ubHkgYmUgZmxhZ3MsIG1heWJlIGp1c3QgdXNlIHNvbWUNCj4gPiBu YW1lIGNhbGxlZCBYWFhfZmxhZw0KPiANCj4gU3VyZSwgSSB3aWxsIHJlbmFtZSBpdC4NCj4gDQo+ ID4NCj4gPiA+ICsNCj4gPiA+ICsvKiBtYXggZWxlbWVudHMgaW4gJ21ldGFkYXRhJyAqLw0KPiA+ ID4gK3VpbnQxNl90IHJpbmdfc2l6ZTsNCj4gPiA+ICsvKiByaW5nIGluZGV4IG1hc2sgZm9yICdt ZXRhZGF0YScgKi8NCj4gPiA+ICt1aW50MTZfdCByaW5nX21hc2s7DQo+ID4gPiArDQo+ID4gPiAr LyogYmF0Y2hpbmcgY29waWVzIGJlZm9yZSBhIERNQSBkb29yYmVsbCAqLw0KPiA+ID4gK3VpbnQx Nl90IG5yX2JhdGNoaW5nOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIERNQSB2aXJ0 dWFsIGNoYW5uZWwgbG9jay4gQWx0aG91Z2ggaXQgaXMgYWJsZSB0byBiaW5kIERNQQ0KPiA+ID4g KyAqIHZpcnR1YWwgY2hhbm5lbHMgdG8gZGF0YSBwbGFuZSB0aHJlYWRzLCB2aG9zdCBjb250cm9s IHBsYW5lDQo+ID4gPiArICogdGhyZWFkIGNvdWxkIGNhbGwgZGF0YSBwbGFuZSBmdW5jdGlvbnMg dG9vLCB0aHVzIGNhdXNpbmcNCj4gPiA+ICsgKiBETUEgZGV2aWNlIGNvbnRlbnRpb24uDQo+ID4g PiArICoNCj4gPiA+ICsgKiBGb3IgZXhhbXBsZSwgaW4gVk0gZXhpdCBjYXNlLCB2aG9zdCBjb250 cm9sIHBsYW5lIHRocmVhZCBuZWVkcw0KPiA+ID4gKyAqIHRvIGNsZWFyIGluLWZsaWdodCBwYWNr ZXRzIGJlZm9yZSBkaXNhYmxlIHZyaW5nLCBidXQgdGhlcmUgY291bGQNCj4gPiA+ICsgKiBiZSBh bm90dGhlciBkYXRhIHBsYW5lIHRocmVhZCBpcyBlbnF1ZXVpbmcgcGFja2V0cyB0byB0aGUgc2Ft ZQ0KPiA+ID4gKyAqIHZyaW5nIHdpdGggdGhlIHNhbWUgRE1BIHZpcnR1YWwgY2hhbm5lbC4gQnV0 IGRtYWRldiBQTUQNCj4gPiBmdW5jdGlvbnMNCj4gPiA+ICsgKiBhcmUgbG9jay1mcmVlLCBzbyB0 aGUgY29udHJvbCBwbGFuZSBhbmQgZGF0YSBwbGFuZSB0aHJlYWRzDQo+ID4gPiArICogY291bGQg b3BlcmF0ZSB0aGUgc2FtZSBETUEgdmlydHVhbCBjaGFubmVsIGF0IHRoZSBzYW1lIHRpbWUuDQo+ ID4gPiArICovDQo+ID4gPiArcnRlX3NwaW5sb2NrX3QgZG1hX2xvY2s7DQo+ID4gPiArfTsNCj4g PiA+ICsNCj4gPiA+ICtzdHJ1Y3QgYXN5bmNfZG1hX2luZm8gew0KPiA+ID4gK3VpbnQxNl90IG1h eF92Y2hhbnM7DQo+ID4gPiArc3RydWN0IGFzeW5jX2RtYV92Y2hhbl9pbmZvICp2Y2hhbnM7DQo+ ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtleHRlcm4gc3RydWN0IGFzeW5jX2RtYV9pbmZvDQo+ ID4gZG1hX2NvcHlfdHJhY2tbUlRFX0RNQURFVl9ERUZBVUxUX01BWF07DQo+ID4gPiArDQo+ID4g PiAgLyoqDQo+ID4gPiAgICogaW5mbGlnaHQgYXN5bmMgcGFja2V0IGluZm9ybWF0aW9uDQo+ID4g PiAgICovDQo+ID4gPiBAQCAtMTI5LDkgKzE2Niw2IEBAIHN0cnVjdCBhc3luY19pbmZsaWdodF9p bmZvIHsNCj4gPiA+ICB9Ow0KPiA+ID4NCj4gPiA+ICBzdHJ1Y3Qgdmhvc3RfYXN5bmMgew0KPiA+ ID4gLS8qIG9wZXJhdGlvbiBjYWxsYmFja3MgZm9yIERNQSAqLw0KPiA+ID4gLXN0cnVjdCBydGVf dmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgb3BzOw0KPiA+ID4gLQ0KPiA+ID4gIHN0cnVjdCBydGVf dmhvc3RfaW92X2l0ZXIgaW92X2l0ZXJbVkhPU1RfTUFYX0FTWU5DX0lUXTsNCj4gPiA+ICBzdHJ1 Y3QgcnRlX3Zob3N0X2lvdmVjIGlvdmVjW1ZIT1NUX01BWF9BU1lOQ19WRUNdOw0KPiA+ID4gIHVp bnQxNl90IGl0ZXJfaWR4Ow0KPiA+ID4gQEAgLTEzOSw2ICsxNzMsMTkgQEAgc3RydWN0IHZob3N0 X2FzeW5jIHsNCj4gPiA+DQo+ID4gPiAgLyogZGF0YSB0cmFuc2ZlciBzdGF0dXMgKi8NCj4gPiA+ ICBzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyAqcGt0c19pbmZvOw0KPiA+ID4gKy8qKg0KPiA+ ID4gKyAqIHBhY2tldCByZW9yZGVyIGFycmF5LiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgRE1BDQo+ ID4gPiArICogZGV2aWNlIGNvbXBsZXRlcyBhbGwgY29waWVzIGZvciB0aGUgcGFja2V0Lg0KPiA+ ID4gKyAqDQo+ID4gPiArICogTm90ZSB0aGF0IHRoaXMgYXJyYXkgY291bGQgYmUgd3JpdHRlbiBi eSBtdWx0aXBsZQ0KPiA+ID4gKyAqIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4gRm9yIGV4YW1w bGUsIHR3byB0aHJlYWRzDQo+ID4gPiArICogZW5xdWV1ZSBwYWNrZXRzIHRvIHRoZSBzYW1lIHZp cnRxdWV1ZSB3aXRoIHRoZWlyDQo+ID4gPiArICogb3duIERNQSBkZXZpY2VzLiBIb3dldmVyLCBz aW5jZSBvZmZsb2FkaW5nIGlzDQo+ID4gPiArICogcGVyLXBhY2tldCBiYXNpcywgZWFjaCBwYWNr ZXQgZmxhZyB3aWxsIG9ubHkgYmUNCj4gPiA+ICsgKiB3cml0dGVuIGJ5IG9uZSB0aHJlYWQuIEFu ZCBzaW5nbGUgYnl0ZSB3cml0ZSBpcw0KPiA+ID4gKyAqIGF0b21pYywgc28gbm8gbG9jayBpcyBu ZWVkZWQuDQo+ID4gPiArICovDQo+ID4gPiArYm9vbCAqcGt0c19jbXBsX2ZsYWc7DQo+ID4gPiAg dWludDE2X3QgcGt0c19pZHg7DQo+ID4gPiAgdWludDE2X3QgcGt0c19pbmZsaWdodF9uOw0KPiA+ ID4gIHVuaW9uIHsNCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvdmlydGlvX25ldC5jIGIv bGliL3Zob3N0L3ZpcnRpb19uZXQuYw0KPiA+ID4gaW5kZXggYjNkOTU0YWFiNC4uOWY4MWZjOTcz MyAxMDA2NDQNCj4gPiA+IC0tLSBhL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMNCj4gPiA+ICsrKyBi L2xpYi92aG9zdC92aXJ0aW9fbmV0LmMNCj4gPiA+IEBAIC0xMSw2ICsxMSw3IEBADQo+ID4gPiAg I2luY2x1ZGUgPHJ0ZV9uZXQuaD4NCj4gPiA+ICAjaW5jbHVkZSA8cnRlX2V0aGVyLmg+DQo+ID4g PiAgI2luY2x1ZGUgPHJ0ZV9pcC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxydGVfZG1hZGV2Lmg+DQo+ ID4gPiAgI2luY2x1ZGUgPHJ0ZV92aG9zdC5oPg0KPiA+ID4gICNpbmNsdWRlIDxydGVfdGNwLmg+ DQo+ID4gPiAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4NCj4gPiA+IEBAIC0yNSw2ICsyNiw5IEBADQo+ ID4gPg0KPiA+ID4gICNkZWZpbmUgTUFYX0JBVENIX0xFTiAyNTYNCj4gPiA+DQo+ID4gPiArLyog RE1BIGRldmljZSBjb3B5IG9wZXJhdGlvbiB0cmFja2luZyBhcnJheS4gKi8NCj4gPiA+ICtzdHJ1 Y3QgYXN5bmNfZG1hX2luZm8gZG1hX2NvcHlfdHJhY2tbUlRFX0RNQURFVl9ERUZBVUxUX01BWF07 DQo+ID4gPiArDQo+ID4gPiAgc3RhdGljICBfX3J0ZV9hbHdheXNfaW5saW5lIGJvb2wNCj4gPiA+ ICByeHZxX2lzX21lcmdlYWJsZShzdHJ1Y3QgdmlydGlvX25ldCAqZGV2KQ0KPiA+ID4gIHsNCj4g PiA+IEBAIC00Myw2ICs0NywxMDggQEAgaXNfdmFsaWRfdmlydF9xdWV1ZV9pZHgodWludDMyX3Qg aWR4LCBpbnQgaXNfdHgsDQo+ID4gdWludDMyX3QNCj4gPiA+IG5yX3ZyaW5nKQ0KPiA+ID4gIHJl dHVybiAoaXNfdHggXiAoaWR4ICYgMSkpID09IDAgJiYgaWR4IDwgbnJfdnJpbmc7DQo+ID4gPiAg fQ0KPiA+ID4NCj4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50MTZfdA0KPiA+ ID4gK3Zob3N0X2FzeW5jX2RtYV90cmFuc2ZlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwg aW50MTZfdCBkbWFfaWQsDQo+ID4gPiArdWludDE2X3QgdmNoYW4sIHVpbnQxNl90IGhlYWRfaWR4 LA0KPiA+ID4gK3N0cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgKnBrdHMsIHVpbnQxNl90IG5yX3Br dHMpDQo+ID4gPiArew0KPiA+ID4gK3N0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAqZG1hX2lu Zm8gPQ0KPiA+ID4gJmRtYV9jb3B5X3RyYWNrW2RtYV9pZF0udmNoYW5zW3ZjaGFuXTsNCj4gPiA+ ICt1aW50MTZfdCByaW5nX21hc2sgPSBkbWFfaW5mby0+cmluZ19tYXNrOw0KPiA+ID4gK3VpbnQx Nl90IHBrdF9pZHg7DQo+ID4gPiArDQo+ID4gPiArcnRlX3NwaW5sb2NrX2xvY2soJmRtYV9pbmZv LT5kbWFfbG9jayk7DQo+ID4gPiArDQo+ID4gPiArZm9yIChwa3RfaWR4ID0gMDsgcGt0X2lkeCA8 IG5yX3BrdHM7IHBrdF9pZHgrKykgew0KPiA+ID4gK3N0cnVjdCBydGVfdmhvc3RfaW92ZWMgKmlv diA9IHBrdHNbcGt0X2lkeF0uaW92Ow0KPiA+ID4gK2ludCBjb3B5X2lkeCA9IDA7DQo+ID4gPiAr dWludDE2X3QgbnJfc2VncyA9IHBrdHNbcGt0X2lkeF0ubnJfc2VnczsNCj4gPiA+ICt1aW50MTZf dCBpOw0KPiA+ID4gKw0KPiA+ID4gK2lmIChydGVfZG1hX2J1cnN0X2NhcGFjaXR5KGRtYV9pZCwg dmNoYW4pIDwgbnJfc2Vncykgew0KPiA+ID4gK2dvdG8gb3V0Ow0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtmb3IgKGkgPSAwOyBpIDwgbnJfc2VnczsgaSsrKSB7DQo+ID4gPiArLyoqDQo+ID4g PiArICogV2UgaGF2ZSBjaGVja2VkIHRoZSBhdmFpbGFibGUgc3BhY2UgYmVmb3JlDQo+ID4gc3Vi bWl0IGNvcGllcw0KPiA+ID4gdG8gRE1BDQo+ID4gPiArICogdkNoYW5uZWwsIHNvIHdlIGRvbid0 IGhhbmRsZSBlcnJvciBoZXJlLg0KPiA+ID4gKyAqLw0KPiA+ID4gK2NvcHlfaWR4ID0gcnRlX2Rt YV9jb3B5KGRtYV9pZCwgdmNoYW4sDQo+ID4gPiAocnRlX2lvdmFfdClpb3ZbaV0uc3JjX2FkZHIs DQo+ID4gPiArKHJ0ZV9pb3ZhX3QpaW92W2ldLmRzdF9hZGRyLCBpb3ZbaV0ubGVuLA0KPiA+ID4g K1JURV9ETUFfT1BfRkxBR19MTEMpOw0KPiA+DQo+ID4gVGhpcyBhc3N1bWVzIHJ0ZV9kbWFfY29w eSB3aWxsIGFsd2F5cyBzdWNjZWVkIGlmIHRoZXJlJ3MgYXZhaWxhYmxlIHNwYWNlLg0KPiA+DQo+ ID4gQnV0IHRoZSBBUEkgZG94eWdlbiBzYXlzOg0KPiA+DQo+ID4gKiBAcmV0dXJuDQo+ID4gICog ICAtIDAuLlVJTlQxNl9NQVg6IGluZGV4IG9mIGVucXVldWVkIGpvYi4NCj4gPiAgKiAgIC0gLUVO T1NQQzogaWYgbm8gc3BhY2UgbGVmdCB0byBlbnF1ZXVlLg0KPiA+ICAqICAgLSBvdGhlciB2YWx1 ZXMgPCAwIG9uIGZhaWx1cmUuDQo+ID4NCj4gPiBTbyBpdCBzaG91bGQgY29uc2lkZXIgb3RoZXIg dmVuZG9yLXNwZWNpZmljIGVycm9ycy4NCj4gDQo+IEVycm9yIGhhbmRsaW5nIGlzIG5vdCBmcmVl IGhlcmUuIFNwZWNpZmljYWxseSwgU1cgZmFsbGJhY2sgaXMgYSB3YXkgdG8gaGFuZGxlDQo+IGZh aWxlZA0KPiBjb3B5IG9wZXJhdGlvbnMuIEJ1dCBpdCByZXF1aXJlcyB2aG9zdCB0byB0cmFjayBW QSBmb3IgZXZlcnkgc291cmNlIGFuZA0KPiBkZXN0aW5hdGlvbg0KPiBidWZmZXIgZm9yIGV2ZXJ5 IGNvcHkuIERNQSBsaWJyYXJ5IHVzZXMgSU9WQSwgc28gdmhvc3Qgb25seSBwcmVwYXJlcyBJT1ZB IGZvcg0KPiBjb3BpZXMgb2YNCj4gZXZlcnkgcGFja2V0IGluIGFzeW5jIGRhdGEtcGF0aC4gSW4g dGhlIGNhc2Ugb2YgSU9WQSBhcyBQQSwgdGhlIHByZXBhcmVkIElPVkFzDQo+IGNhbm5vdA0KPiBi ZSB1c2VkIGFzIFNXIGZhbGxiYWNrLCB3aGljaCBtZWFucyB2aG9zdCBuZWVkcyB0byBzdG9yZSBW QSBmb3IgZXZlcnkgY29weSBvZg0KPiBldmVyeQ0KPiBwYWNrZXQgdG9vLCBldmVuIGlmIHRoZXJl IG5vIGVycm9ycyB3aWxsIGhhcHBlbiBvciBJT1ZBIGlzIFZBLg0KPiANCj4gSSBhbSB0aGlua2lu ZyB0aGF0IHRoZSBvbmx5IHVzYWJsZSBETUEgZW5naW5lcyBpbiB2aG9zdCBhcmUgQ0JETUEgYW5k IERTQSwgaXMNCj4gaXQgd29ydGgNCj4gdGhlIGNvc3QgZm9yICJmdXR1cmUgSFciPyBJZiB0aGVy ZSB3aWxsIGJlIG90aGVyIHZlbmRvcidzIEhXIGluIGZ1dHVyZSwgaXMgaXQNCj4gT0sgdG8gYWRk IHRoZQ0KPiBzdXBwb3J0IGxhdGVyPyBPciBpcyB0aGVyZSBhbnkgd2F5IHRvIGdldCBWQSBmcm9t IElPVkE/DQoNCkxldCdzIGludmVzdGlnYXRlIGhvdyBtdWNoIHBlcmZvcm1hbmNlIGRyb3AgdGhl IGVycm9yIGhhbmRsaW5nIHdpbGwgYnJpbmcgYW5kIHNlZS4uLg0KDQpUaGFua3MsDQpDaGVuYm8N Cg0KPiANCj4gVGhhbmtzLA0KPiBKaWF5dQ0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IENoZW5ibw0K PiA+DQo+ID4NCj4gDQoNCg==