From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D626C10F11 for ; Tue, 23 Apr 2019 01:57:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0A24020859 for ; Tue, 23 Apr 2019 01:57:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729592AbfDWB5G (ORCPT ); Mon, 22 Apr 2019 21:57:06 -0400 Received: from mga05.intel.com ([192.55.52.43]:26582 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727588AbfDWB5G (ORCPT ); Mon, 22 Apr 2019 21:57:06 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Apr 2019 18:57:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,384,1549958400"; d="scan'208";a="339871049" Received: from pgsmsx108.gar.corp.intel.com ([10.221.44.103]) by fmsmga006.fm.intel.com with ESMTP; 22 Apr 2019 18:57:03 -0700 Received: from pgsmsx112.gar.corp.intel.com ([169.254.3.40]) by PGSMSX108.gar.corp.intel.com ([169.254.8.246]) with mapi id 14.03.0415.000; Tue, 23 Apr 2019 09:57:02 +0800 From: "Huang, Kai" To: "Christopherson, Sean J" CC: "kvm@vger.kernel.org" , "tglx@linutronix.de" , "guangrong.xiao@gmail.com" , "hpa@zytor.com" , "pbonzini@redhat.com" , "bp@alien8.de" , "thomas.lendacky@amd.com" , "rkrcmar@redhat.com" , "brijesh.singh@amd.com" , "junaids@google.com" Subject: Re: [PATCH] kvm: x86: Fix several SPTE mask calculation errors caused by MKTME Thread-Topic: [PATCH] kvm: x86: Fix several SPTE mask calculation errors caused by MKTME Thread-Index: AQHU9DW//hMP+P/kLkeZpj3T4GKBXaZH5WGAgACbvQA= Date: Tue, 23 Apr 2019 01:57:01 +0000 Message-ID: <1555984614.2776.58.camel@intel.com> References: <20190416091948.4420-1-kai.huang@linux.intel.com> <20190422163929.GB1236@linux.intel.com> In-Reply-To: <20190422163929.GB1236@linux.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.255.88.189] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org T24gTW9uLCAyMDE5LTA0LTIyIGF0IDA5OjM5IC0wNzAwLCBTZWFuIENocmlzdG9waGVyc29uIHdy b3RlOg0KPiBPbiBUdWUsIEFwciAxNiwgMjAxOSBhdCAwOToxOTo0OFBNICsxMjAwLCBLYWkgSHVh bmcgd3JvdGU6DQo+ID4gV2l0aCBib3RoIEludGVsIE1LVE1FIGFuZCBBTUQgU01FL1NFViwgcGh5 c2ljYWwgYWRkcmVzcyBiaXRzIGFyZSByZWR1Y2VkDQo+ID4gZHVlIHRvIHNldmVyYWwgaGlnaCBi aXRzIG9mIHBoeXNpY2FsIGFkZHJlc3MgYXJlIHJlcHVycG9zZWQgZm9yIG1lbW9yeQ0KPiA+IGVu Y3J5cHRpb24uIFRvIGhvbm9yIHN1Y2ggYmVoYXZpb3IgdGhvc2UgcmVwdXJwb3NlZCBiaXRzIGFy ZSByZWR1Y2VkIGZyb20NCj4gPiBjcHVpbmZvX3g4Ni0+eDg2X3BoeXNfYml0cyBmb3IgYm90aCBJ bnRlbCBNS1RNRSBhbmQgQU1EIFNNRS9TRVYsIHRodXMNCj4gPiBib290X2NwdV9kYXRhLng4Nl9w aHlzX2JpdHMgZG9lc24ndCBob2xkIHBoeXNpY2FsIGFkZHJlc3MgYml0cyByZXBvcnRlZA0KPiA+ IGJ5IENQVUlEIGFueW1vcmUuDQo+IA0KPiBUaGlzIG5lZ2xlY3RzIHRvIG1lbnRpb24gdGhlIG1v c3QgcmVsZXZhbnQgdGlkYml0IG9mIGluZm9ybWF0aW9uIGluIHRlcm1zDQo+IG9mIGp1c3RpZmlj YXRpb24gZm9yIHRoaXMgcGF0Y2g6IHRoZSBudW1iZXIgb2YgYml0cyBzdG9sZW4gZm9yIE1LVE1F IGlzDQo+IHByb2dyYW1tZWQgYnkgQklPUywgaS5lLiBiaXRzIG1heSBiZSByZXB1cnBvc2VkIGZv ciBNS1RNRSByZWdhcmRsZXNzIG9mDQo+IGtlcm5lbCBzdXBwb3J0Lg0KDQpJIGNhbiBhZGQgQklP UyBwYXJ0LiBCdXQgdGhlIGtleSBpc3N1ZSBpcyBrZXJuZWwgYWRqdXN0cyBib290X2NwdV9kYXRh Lng4Nl9waHlzX2JpdHMsIGlzbid0IGl0Pw0KDQpJZiBrZXJuZWwgZG9lc24ndCBhZGp1c3QgYm9v dF9jcHVfZGF0YS54ODZfcGh5c19iaXRzIHRoZW4gdGhpcyBwYXRjaCB0aGVvcmV0aWNhbGx5IGlz IG5vdCBuZWVkZWQ/DQoNCj4gDQo+ID4gS1ZNIHVzZXMgYm9vdF9jcHVfZGF0YS54ODZfcGh5c19i aXRzIHRvIGNhbGN1bGF0ZSBzZXZlcmFsIFNQVEUgbWFza3MNCj4gPiBiYXNlZCBvbiBhc3N1bXB0 aW9uIHRoYXQ6IDEpIGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cyBlcXVhbHMgdG8NCj4gPiBw aHlzaWNhbCBhZGRyZXNzIGJpdHMgcmVwb3J0ZWQgYnkgQ1BVSUQgLS0gdGhpcyBpcyB1c2VkIHRv IGNoZWNrIENQVSBoYXMNCj4gPiByZXNlcnZlZCBiaXRzIHdoZW4gS1ZNIGNhbGN1bGF0ZXMgc2hh ZG93X21taW9fe3ZhbHVlfG1hc2t9OyBhbmQgd2hldGhlcg0KPiA+IHNoYWRvd19ub25wcmVzZW50 X29yX3JzdmRfbWFzayBzaG91bGQgYmUgc2V0dXAgKEtWTSBhc3N1bWVzIEwxVEYgaXMgbm90DQo+ ID4gcHJlc2VudCBpZiBDUFUgaGFzIDUyIHBoeXNpY2FsIGFkZHJlc3MgYml0cyk7IDIpIGlmIGl0 IGlzIHNtYWxsZXIgdGhhbg0KPiA+IDUyLCBiaXRzIFt4ODZfcGh5c19iaXRzLCA1MV0gYXJlIHJl c2VydmVkIGJpdHMuDQo+ID4gDQo+ID4gV2l0aCBJbnRlbCBNS1RNRSBvciBBTUQgU01FL1NFViBh Ym92ZSBhc3N1bXB0aW9uIGlzIG5vdCB2YWxpZCBhbnkgbW9yZSwNCj4gPiBlc3BlY2lhbGx5IHdo ZW4gY2FsY3VsYXRpbmcgcmVzZXJ2ZWQgYml0cyB3aXRoIEludGVsIE1LVE1FLCBzaW5jZSBJbnRl bA0KPiA+IE1LVE1FIHRyZWF0cyB0aGUgcmVkdWNlZCBiaXRzIGFzICdrZXlJRCcsIHRodXMgdGhl eSBhcmUgbm90IHJlZHVjZWQNCj4gPiBiaXRzLCB0aGVyZWZvcmUgYm9vdF9jcHVfZGF0YS54ODZf cGh5c19iaXRzIGNhbm5vdCBiZSB1c2VkIHRvIGNhbGN1YWx0ZQ0KPiA+IHJlc2VydmVkIGJpdHMg YW55bW9yZSwgYWx0aG91Z2ggd2UgY2FuIHN0aWxsIHVzZSBpdCBmb3IgQU1EIFNNRS9TRVYNCj4g PiBzaW5jZSBTTUUvU0VWIHRyZWF0cyB0aGUgcmVkdWNlZCBiaXRzIGRpZmZlcmVudGx5IC0tIHRo ZXkgYXJlIHRyZWF0ZWQgYXMNCj4gPiByZXNlcnZlZCBiaXRzLCB0aGUgc2FtZSBhcyBvdGhlciBy ZXNlcnZlZCBiaXRzIGluIHBhZ2UgdGFibGUgZW50aXR5IFsxXS4NCj4gPiANCj4gPiBGaXggYnkg aW50cm9kdWNpbmcgYSBuZXcgJ3NoYWRvd19maXJzdF9yc3ZkX2JpdCcgdmFyaWFibGUgaW4ga3Zt IHg4NiBNTVUNCj4gPiBjb2RlIHRvIHN0b3JlIHRoZSBhY3R1YWwgcG9zaXRpb24gb2YgcmVzZXJ2 ZWQgYml0cyAtLSBmb3IgSW50ZWwgTUtUTUUsDQo+ID4gaXQgZXF1YWxzIHRvIHBoeXNpY2FsIGFk ZHJlc3MgcmVwb3J0ZWQgYnkgQ1BVSUQsIGFuZCBmb3IgQU1EIFNNRS9TRVYsIGl0DQo+ID4gaXMg Ym9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzLiBBbmQgaW4gcmVzZXJ2ZWQgYml0cyByZWxhdGVk IGNhbGN1bGF0aW9uDQo+ID4gaXQgaXMgdXNlZCBpbnN0ZWFkIG9mIGJvb3RfY3B1X2RhdGEueDg2 X3BoeXNfYml0cy4gU29tZSBvdGhlciBjb2RlDQo+ID4gY2hhbmdlcyB0b28gdG8gbWFrZSBjb2Rl IG1vcmUgcmVhc29uYWJsZSwgaWUsIGt2bV9zZXRfbW1pb19zcHRlX21hc2sgaXMNCj4gPiBtb3Zl ZCB0byB4ODYva3ZtL21tdS5jIGZyb20geDg2L2t2bS94ODYuYyB0byB1c2Ugc2hhZG93X2ZpcnN0 X3JzdmRfYml0Ow0KPiA+IHNoYWRvd19ub25wcmVzZW50X29yX3JzdmRfbWFzayBjYWxjdWxhdGlv biBsb2dpYyBpcyBzbGlnaHRseSBjaGFuZ2VkLA0KPiA+IGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQg b25seSBJbnRlbCBDUFUgaXMgaW1wYWN0ZWQgYnkgTDFURiwgc28gdGhhdCBLVk0NCj4gPiBjYW4g dXNlIHNoYWRvd19maXJzdF9yc3ZkX2JpdCB0byBjaGVjayB3aGV0aGVyIEtWTSBzaG91bGQgc2V0 DQo+ID4gc2hhZG93X25vbnByZXNlbnRfb3JfcnN2ZF9tYXNrIG9yIG5vdC4NCj4gPiANCj4gPiBO b3RlIHRoYXQgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgcmVwb3J0ZWQgdG8gZ3Vlc3Qg c2hvdWxkIHJlbWFpbg0KPiA+IHVuY2hhbmdlZCAtLSBLVk0gc2hvdWxkIHJlcG9ydCBwaHlzaWNh bCBhZGRyZXNzIHJlcG9ydGVkIGJ5IENQVUlEIHRvDQo+ID4gZ3Vlc3QsIGJ1dCBub3QgYm9vdF9j cHVfZGF0YS54ODZfcGh5c19iaXRzLiBCZWNhdXNlIGZvciBJbnRlbCBNS1RNRSwNCj4gPiB0aGVy ZSdzIG5vIGhhcm0gaWYgZ3Vlc3Qgc2V0cyB1cCAna2V5SUQnIGJpdHMgaW4gZ3Vlc3QgcGFnZSB0 YWJsZSAoc2luY2UNCj4gPiBNS1RNRSBvbmx5IHdvcmtzIGF0IHBoeXNpY2FsIGFkZHJlc3MgbGV2 ZWwpLCBhbmQgS1ZNIGRvZXNuJ3QgZXZlbiBleHBvc2UNCj4gPiBNS1RNRSB0byBndWVzdC4gQXJn dWFibHksIGZvciBBTUQgU01FL1NFViwgZ3Vlc3QgaXMgYXdhcmUgb2YgU0VWIHRodXMgaXQNCj4g PiBzaG91bGQgYWRqdXN0IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cyB3aGVuIGl0IGRldGVj dHMgU0VWLCB0aGVyZWZvcmUNCj4gPiBLVk0gc2hvdWxkIHN0aWxsIHJlcG9ydHMgcGh5c2NpYWwg YWRkcmVzcyByZXBvcnRlZCBieSBDUFVJRCB0byBndWVzdC4NCj4gPiANCj4gPiBbMV0gU2VjdGlv biA3LjEwLjEgRGV0ZXJtaW5pbmcgU3VwcG9ydCBmb3IgU2VjdXJlIE1lbW9yeSBFbmNyeXB0aW9u LA0KPiA+ICAgICBBTUQgQXJjaGl0ZWN0dXJlIFByb2dyYW1tZXIncyBNYW51YWwgVm9sdW1lIDI6 IFN5c3RlbSBQcm9ncmFtbWluZykuDQo+ID4gU2lnbmVkLW9mZi1ieTogS2FpIEh1YW5nIDxrYWku aHVhbmdAbGludXguaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBhcmNoL3g4Ni9rdm0vbW11LmMg fCAxNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0NCj4gPiAgYXJjaC94ODYva3ZtL21tdS5oIHwgICAxICsNCj4gPiAgYXJjaC94ODYva3ZtL3g4 Ni5jIHwgIDI5IC0tLS0tLS0tLS0NCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAxMjUgaW5zZXJ0aW9u cygrKSwgNTcgZGVsZXRpb25zKC0pDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2 bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYw0KPiA+IGluZGV4IGUxMDk2MmRmYzIwMy4uM2Fk ZDcyODM5ODBlIDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYw0KPiA+ICsrKyBi L2FyY2gveDg2L2t2bS9tbXUuYw0KPiA+IEBAIC0yNjEsNiArMjYxLDIyIEBAIHN0YXRpYyBjb25z dCB1NjQgc2hhZG93X25vbnByZXNlbnRfb3JfcnN2ZF9tYXNrX2xlbiA9IDU7DQo+ID4gICAqLw0K PiA+ICBzdGF0aWMgdTY0IF9fcmVhZF9tb3N0bHkgc2hhZG93X25vbnByZXNlbnRfb3JfcnN2ZF9s b3dlcl9nZm5fbWFzazsNCj4gPiAgDQo+ID4gKy8qDQo+ID4gKyAqIFRoZSBwb3NpdGlvbiBvZiBm aXJzdCByZXNlcnZlZCBiaXQuIElmIGl0IGVxdWFscyB0byA1MiwgdGhlbiBDUFUgZG9lc24ndA0K PiA+ICsgKiBoYXZlIGFueSByZXNlcnZlZCBiaXRzLCBvdGhlcndpc2UgYml0cyBbc2hhZG93X2Zp cnN0X3JzdmRfYml0LCA1MV0gYXJlDQo+ID4gKyAqIHJlc2VydmVkIGJpdHMuDQo+ID4gKyAqDQo+ ID4gKyAqIGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cyBjYW5ub3QgYmUgdXNlZCB0byBkZXRl cm1pbmUgdGhlIHBvc2l0aW9uIG9mDQo+ID4gKyAqIHJlc2VydmVkIGJpdHMgYW55bW9yZSwgc2lu Y2UgYm90aCBJbnRlbCBNS1RNRSBhbmQgQU1EIFNNRS9TRVYgcmVkdWNlDQo+ID4gKyAqIHBoeXNp Y2FsIGFkZHJlc3MgYml0cywgYW5kIHRoZSByZWR1Y2VkIGJpdHMgYXJlIHRha2VuIGF3YXkgZnJv bQ0KPiA+ICsgKiBib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMgdG8gcmVmbGVjdCBzdWNoIGZh Y3QuIEJ1dCBJbnRlbCBNS1RNRSBhbmQgQU1EDQo+ID4gKyAqIFNNRS9TRVYgdHJlYXQgdGhvc2Ug cmVkdWNlZCBiaXRzIGRpZmZlcmVudGx5IC0tIEludGVsIE1LVE1FIHRyZWF0cyB0aGVtDQo+ID4g KyAqIGFzICdrZXlJRCcgdGh1cyBub3QgcmVzZXJ2ZWQgYml0cywgYnV0IEFNRCBTTUUvU0VWIHRy ZWF0cyB0aGVtIGFzIHJlc2VydmVkDQo+ID4gKyAqIGJpdHMsIHRodXMgcGh5c2ljYWwgYWRkcmVz cyBiaXRzIHJlcG9ydGVkIGJ5IENQVUlEIGNhbm5vdCBiZSB1c2VkIHRvDQo+ID4gKyAqIGRldGVy bWluZSByZXNlcnZlZCBiaXRzIHBvc2l0aW9uIGVpdGhlci4NCj4gPiArICovDQo+IA0KPiBObyBu ZWVkIHRvIHJlaGFzaCB0aGUganVzdGlmaWNhdGlvbiBmb3IgdGhlIHZhcmlhYmxlLCBpdCdzIHN1 ZmZpY2llbnQgdG8NCj4gc3RhdGUgKndoYXQqIHRoZSB2YXJpYWJsZSB0cmFja3MuICBBbmQgdGhl IHdob2xlIGZpcnN0IHBhcmFncmFwaCBjYW4gYmUNCj4gZHJvcHBlZCBpZiB0aGUgdmFyaWFibGUg aXMgcmVuYW1lZC4NCj4gDQo+ID4gK3N0YXRpYyB1NjQgX19yZWFkX21vc3RseSBzaGFkb3dfZmly c3RfcnN2ZF9iaXQ7DQo+IA0KPiBIbW0sICdmaXJzdCcgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0 IHNpbmNlIEVQVCBoYXMgcmVzZXJ2ZWQgYXR0cmlidXRlIGJpdHMNCj4gb24gbm9uLWxlYWYgZW50 cmllcy4gIEFuZCAnZmlyc3QnIGlzIHZhZ3VlLCBlLmcuIGl0IGNvdWxkIGJlIGludGVycHJldGVk IGFzDQo+IHRoZSBNU0Igb3IgTFNCLg0KPiANCj4gSW4gdGhlIGVuZCwgd2UncmUgc3RpbGwgdHJh Y2tpbmcgdGhlIG51bWJlciBvZiBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIHNvDQo+IG1heWJlIHNv bWV0aGluZyBsaWtlICdzaGFkb3dfcGh5c19iaXRzJz8NCj4gDQo+IEUuZy4gcHV0dGluZyBpdCB0 b2dldGhlcjoNCj4gDQo+IC8qDQo+ICAqIFRoZSBudW1iZXIgb2Ygbm9uLXJlc2VydmVkIHBoeXNp Y2FsIGFkZHJlc3MgYml0cyBpcnJlc3BlY3RpdmUgb2YgZmVhdHVyZXMNCj4gICogdGhhdCByZXB1 cnBvc2Ugc29mdHdhcmUtYWNjZXNzaWJsZSBiaXRzLCBlLmcuIE1LVE1FLg0KPiAgKi8NCj4gc3Rh dGljIHU2NCBfX3JlYWRfbW9zdGx5IHNoYWRvd19waHlzX2JpdHM7DQoNCkZpbmUgdG8gbWUuIFdp bGwgZG8gd2hhdCB5b3Ugc3VnZ2VzdGVkLg0KDQo+IA0KPiA+ICsNCj4gPiAgDQo+ID4gIHN0YXRp YyB2b2lkIG1tdV9zcHRlX3NldCh1NjQgKnNwdGVwLCB1NjQgc3B0ZSk7DQo+ID4gIHN0YXRpYyB1 bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZQ0KPiA+IEBAIC0zMDMsNiArMzE5LDM0IEBAIHZvaWQga3Zt X21tdV9zZXRfbW1pb19zcHRlX21hc2sodTY0IG1taW9fbWFzaywgdTY0IG1taW9fdmFsdWUpDQo+ ID4gIH0NCj4gPiAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9zZXRfbW1pb19zcHRlX21hc2sp Ow0KPiA+ICANCj4gPiArdm9pZCBrdm1fc2V0X21taW9fc3B0ZV9tYXNrKHZvaWQpDQo+IA0KPiBN b3ZpbmcgdGhpcyB0byBtbXUuYyBtYWtlcyBzZW5zZSwgYnV0IGNhbGxpbmcgaXQgZnJvbSBrdm1f YXJjaF9pbml0KCkgaXMNCj4gc2lsbHkuICBUaGUgY3VycmVudCBjYWxsIHNpdGUgaXMgaW1tZWRp YXRlbHkgYWZ0ZXIga3ZtX21tdV9tb2R1bGVfaW5pdCgpLA0KPiBJIGRvbid0IHNlZSBhbnkgcmVh c29uIG5vdCB0byBqdXN0IG1vdmUgdGhlIGNhbGwgdGhlcmUuDQoNCkkgZG9uJ3Qga25vdyB3aGV0 aGVyIGNhbGxpbmcga3ZtX3NldF9tbWlvX3NwdGVfbWFzaygpIGZyb20ga3ZtX2FyY2hfaW5pdCgp IGlzIHNpbGx5IGJ1dCBtYXliZQ0KdGhlcmUncyBoaXN0cm95IC0tIEtWTSBjYWxscyBrdm1fbW11 X3NldF9tYXNrX3B0ZXMoKSBmcm9tIGt2bV9hcmNoX2luaXQoKSB0b28sIHdoaWNoIG1heSBhbHNv IGJlDQpzaWxseSBhY2NvcmRpbmcgdG8geW91ciBqdWRnZW1lbnQuIEkgaGF2ZSBubyBwcm9ibGVt IGNhbGxpbmcga3ZtX3NldF9tbWlvX3NwdGVfbWFzaygpIGZyb20NCmt2bV9tbXVfbW9kdWxlX2lu aXQoKSwgYnV0IElNSE8gdGhpcyBsb2dpYyBpcyBpcnJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIGFu ZCBpdCdzIGJldHRlciB0byBoYXZlIGENCnNlcGFyYXRlIHBhdGNoIGZvciB0aGlzIHB1cnBvc2Ug aWYgbmVjZXNzYXJ5Pw0KDQoNCj4gPiArew0KPiA+ICsJdTY0IG1hc2s7DQo+ID4gKw0KPiA+ICsJ LyoNCj4gPiArCSAqIFNldCB0aGUgcmVzZXJ2ZWQgYml0cyBhbmQgdGhlIHByZXNlbnQgYml0IG9m IGFuIHBhZ2luZy1zdHJ1Y3R1cmUNCj4gPiArCSAqIGVudHJ5IHRvIGdlbmVyYXRlIHBhZ2UgZmF1 bHQgd2l0aCBQRkVSLlJTViA9IDEuDQo+ID4gKwkgKi8NCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJ ICogTWFzayB0aGUgdXBwZXJtb3N0IHBoeXNpY2FsIGFkZHJlc3MgYml0LCB3aGljaCB3b3VsZCBi ZSByZXNlcnZlZCBhcw0KPiA+ICsJICogbG9uZyBhcyB0aGUgc3VwcG9ydGVkIHBoeXNpY2FsIGFk ZHJlc3Mgd2lkdGggaXMgbGVzcyB0aGFuIDUyLg0KPiA+ICsJICovDQo+ID4gKwltYXNrID0gMXVs bCA8PCA1MTsNCj4gPiArDQo+ID4gKwkvKiBTZXQgdGhlIHByZXNlbnQgYml0LiAqLw0KPiA+ICsJ bWFzayB8PSAxdWxsOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBJZiByZXNlcnZlZCBiaXQg aXMgbm90IHN1cHBvcnRlZCwgY2xlYXIgdGhlIHByZXNlbnQgYml0IHRvIGRpc2FibGUNCj4gPiAr CSAqIG1taW8gcGFnZSBmYXVsdC4NCj4gPiArCSAqLw0KPiA+ICsJaWYgKElTX0VOQUJMRUQoQ09O RklHX1g4Nl82NCkgJiYgc2hhZG93X2ZpcnN0X3JzdmRfYml0ID09IDUyKQ0KPiA+ICsJCW1hc2sg Jj0gfjF1bGw7DQo+ID4gKw0KPiA+ICsJa3ZtX21tdV9zZXRfbW1pb19zcHRlX21hc2sobWFzaywg bWFzayk7DQo+ID4gK30NCj4gPiArDQo+ID4gIHN0YXRpYyBpbmxpbmUgYm9vbCBzcF9hZF9kaXNh YmxlZChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkNCj4gPiAgew0KPiA+ICAJcmV0dXJuIHNwLT5y b2xlLmFkX2Rpc2FibGVkOw0KPiA+IEBAIC0zODQsMTIgKzQyOCwyMSBAQCBzdGF0aWMgdm9pZCBt YXJrX21taW9fc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZXAsIHU2NCBnZm4s DQo+ID4gIAl1NjQgZ2VuID0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktPmdlbmVyYXRpb24gJiBN TUlPX1NQVEVfR0VOX01BU0s7DQo+ID4gIAl1NjQgbWFzayA9IGdlbmVyYXRpb25fbW1pb19zcHRl X21hc2soZ2VuKTsNCj4gPiAgCXU2NCBncGEgPSBnZm4gPDwgUEFHRV9TSElGVDsNCj4gPiArCXU2 NCBoaWdoX2dwYV9vZmZzZXQ7DQo+ID4gIA0KPiA+ICAJYWNjZXNzICY9IEFDQ19XUklURV9NQVNL IHwgQUNDX1VTRVJfTUFTSzsNCj4gPiAgCW1hc2sgfD0gc2hhZG93X21taW9fdmFsdWUgfCBhY2Nl c3M7DQo+ID4gIAltYXNrIHw9IGdwYSB8IHNoYWRvd19ub25wcmVzZW50X29yX3JzdmRfbWFzazsN Cj4gPiArCS8qDQo+ID4gKwkgKiBXaXRoIEludGVsIE1LVE1FLCB0aGUgYml0cyBmcm9tIGJvb3Rf Y3B1X2RhdGEueDg2X3BoeXNfYml0cyB0bw0KPiA+ICsJICogc2hhZG93X2ZpcnN0X3JzdmRfYml0 IC0gMSBhcmUgYWN0dWFsbHkga2V5SUQgYml0cyBidXQgbm90DQo+ID4gKwkgKiByZXNlcnZlZCBi aXRzLiBXZSBuZWVkIHRvIHB1dCBoaWdoIEdQQSBiaXRzIHRvIGFjdHVhbCByZXNlcnZlZA0KPiA+ ICsJICogYml0cyB0byBtaXRpZ2F0ZSBMMVRGIGF0dGFjay4NCj4gPiArCSAqLw0KPiA+ICsJaGln aF9ncGFfb2Zmc2V0ID0gc2hhZG93X25vbnByZXNlbnRfb3JfcnN2ZF9tYXNrX2xlbiArDQo+ID4g KwkJc2hhZG93X2ZpcnN0X3JzdmRfYml0IC0gYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzOw0K PiA+ICAJbWFzayB8PSAoZ3BhICYgc2hhZG93X25vbnByZXNlbnRfb3JfcnN2ZF9tYXNrKQ0KPiA+ IC0JCTw8IHNoYWRvd19ub25wcmVzZW50X29yX3JzdmRfbWFza19sZW47DQo+ID4gKwkJPDwgaGln aF9ncGFfb2Zmc2V0Ow0KPiA+ICANCj4gPiAgCXBhZ2VfaGVhZGVyKF9fcGEoc3B0ZXApKS0+bW1p b19jYWNoZWQgPSB0cnVlOw0KPiA+ICANCj4gPiBAQCAtNDA1LDggKzQ1OCwxMSBAQCBzdGF0aWMg Ym9vbCBpc19tbWlvX3NwdGUodTY0IHNwdGUpDQo+ID4gIHN0YXRpYyBnZm5fdCBnZXRfbW1pb19z cHRlX2dmbih1NjQgc3B0ZSkNCj4gPiAgew0KPiA+ICAJdTY0IGdwYSA9IHNwdGUgJiBzaGFkb3df bm9ucHJlc2VudF9vcl9yc3ZkX2xvd2VyX2dmbl9tYXNrOw0KPiA+ICsJLyogU2VlIGNvbW1lbnRz IGluIG1hcmtfbW1pb19zcHRlICovDQo+ID4gKwl1NjQgaGlnaF9ncGFfb2Zmc2V0ID0gc2hhZG93 X25vbnByZXNlbnRfb3JfcnN2ZF9tYXNrX2xlbiArDQo+ID4gKwkJc2hhZG93X2ZpcnN0X3JzdmRf Yml0IC0gYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzOw0KPiANCj4gVGhlIGV4YWN0IHNoaWZ0 IG5lZWRlZCBpcyBjb25zdGFudCBhZnRlciBpbml0LCB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0 bw0KPiBkeW5hbWljYWxseSBjYWxjdWxhdGUgaXQgZm9yIGV2ZXJ5IE1NSU8gU1BURS4NCg0KSSBj YW4gYWRkIG9uZSBtb3JlIHN0YXRpYyB2YXJpYWJsZSBzdWNoIGFzICdzaGFkb3dfaGlnaF9nZm5f b2Zmc2V0JyBhbmQgY2FsY3VsYXRlIGl0IGluDQprdm1fbW11X3Jlc2V0X2FsbF9wdGVfbWFza3Mg KGlmIG5lY2Vzc2FyeSwgYXMgeW91IG1lbnRpb25lZCBiZWxvdyk/IElzIHRoaXMgZ29vZCB0byB5 b3U/DQoNCj4gDQo+ID4gLQlncGEgfD0gKHNwdGUgPj4gc2hhZG93X25vbnByZXNlbnRfb3JfcnN2 ZF9tYXNrX2xlbikNCj4gPiArCWdwYSB8PSAoc3B0ZSA+PiBoaWdoX2dwYV9vZmZzZXQpDQo+ID4g IAkgICAgICAgJiBzaGFkb3dfbm9ucHJlc2VudF9vcl9yc3ZkX21hc2s7DQo+ID4gIA0KPiA+ICAJ cmV0dXJuIGdwYSA+PiBQQUdFX1NISUZUOw0KPiA+IEBAIC00NzAsOSArNTI2LDIyIEBAIHZvaWQg a3ZtX21tdV9zZXRfbWFza19wdGVzKHU2NCB1c2VyX21hc2ssIHU2NCBhY2Nlc3NlZF9tYXNrLA0K PiA+ICB9DQo+ID4gIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9tbXVfc2V0X21hc2tfcHRlcyk7DQo+ ID4gIA0KPiA+ICtzdGF0aWMgdTgga3ZtX2dldF9jcHVpZF9waHlzX2JpdHModm9pZCkNCj4gPiAr ew0KPiA+ICsJdTMyIGVheCwgZWJ4LCBlY3gsIGVkeDsNCj4gPiArDQo+ID4gKwlpZiAoYm9vdF9j cHVfZGF0YS5leHRlbmRlZF9jcHVpZF9sZXZlbCA8IDB4ODAwMDAwMDgpDQo+ID4gKwkJcmV0dXJu IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0czsNCj4gPiArDQo+ID4gKwljcHVpZCgweDgwMDAw MDA4LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZWF4ICYg MHhmZjsNCj4gDQo+IGNwdWlkX2VheCgpIHdpbGwgZG8gbW9zdCBvZiB0aGUgd29yayBmb3IgeW91 Lg0KDQpTdXJlIHdpbGwgZG8uIHRoYW5rcy4NCg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3Rh dGljIHZvaWQga3ZtX21tdV9yZXNldF9hbGxfcHRlX21hc2tzKHZvaWQpDQo+ID4gIHsNCj4gPiAg CXU4IGxvd19waHlzX2JpdHM7DQo+ID4gKwlib29sIG5lZWRfbDF0ZjsNCj4gPiAgDQo+ID4gIAlz aGFkb3dfdXNlcl9tYXNrID0gMDsNCj4gPiAgCXNoYWRvd19hY2Nlc3NlZF9tYXNrID0gMDsNCj4g PiBAQCAtNDg0LDEzICs1NTMsNDAgQEAgc3RhdGljIHZvaWQga3ZtX21tdV9yZXNldF9hbGxfcHRl X21hc2tzKHZvaWQpDQo+ID4gIAlzaGFkb3dfYWNjX3RyYWNrX21hc2sgPSAwOw0KPiA+ICANCj4g PiAgCS8qDQo+ID4gLQkgKiBJZiB0aGUgQ1BVIGhhcyA0NiBvciBsZXNzIHBoeXNpY2FsIGFkZHJl c3MgYml0cywgdGhlbiBzZXQgYW4NCj4gPiAtCSAqIGFwcHJvcHJpYXRlIG1hc2sgdG8gZ3VhcmQg YWdhaW5zdCBMMVRGIGF0dGFja3MuIE90aGVyd2lzZSwgaXQgaXMNCj4gPiArCSAqIENhbGN1YWx0 ZSB0aGUgZmlyc3QgcmVzZXJ2ZWQgYml0IHBvc2l0aW9uLiBBbHRob3VnaCBib3RoIEludGVsDQo+ ID4gKwkgKiBNS1RNRSBhbmQgQU1EIFNNRS9TRVYgcmVkdWNlIHBoeXNpY2FsIGFkZHJlc3MgYml0 cyBmb3IgbWVtb3J5DQo+ID4gKwkgKiBlbmNyeXB0aW9uIChhbmQgYm9vdF9jcHVfZGF0YS54ODZf cGh5c19iaXRzIGlzIHJlZHVjZWQgdG8gcmVmbGVjdA0KPiA+ICsJICogc3VjaCBmYWN0KSwgdGhl eSB0cmVhdCB0aG9zZSByZWR1Y2VkIGJpdHMgZGlmZmVyZW50bHkgLS0gSW50ZWwNCj4gPiArCSAq IE1LVE1FIHRyZWF0cyB0aG9zZSBhcyAna2V5SUQnIHRodXMgbm90IHJlc2VydmVkIGJpdHMsIGJ1 dCBBTUQNCj4gPiArCSAqIFNNRS9TRVYgc3RpbGwgdHJlYXRzIHRob3NlIGJpdHMgYXMgcmVzZXJ2 ZWQgYml0cywgc28gZm9yIEFNRA0KPiA+ICsJICogc2hhZG93X2ZpcnN0X3JzdmRfYml0IGlzIGJv b3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cywgYnV0IGZvcg0KPiA+ICsJICogSW50ZWwgKGFuZCBv dGhlciB4ODYgdmVuZG9ycyB0aGF0IGRvbid0IHN1cHBvcnQgbWVtb3J5IGVuY3J5cHRpb24NCj4g PiArCSAqIGF0IGFsbCksIHNoYWRvd19maXJzdF9yc3ZkX2JpdCBpcyBwaHlzaWNhbCBhZGRyZXNz IGJpdHMgcmVwb3J0ZWQNCj4gPiArCSAqIGJ5IENQVUlELg0KPiA+ICsJICovDQo+ID4gKwlpZiAo Ym9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKQ0KPiANCj4gQ2hlY2tp bmcgZm9yIGEgc3BlY2lmaWMgdmVuZG9yIHNob3VsZCBvbmx5IGJlIGRvbmUgYXMgYSBsYXN0IHJl c29ydCwgZS5nLg0KPiBJIGJlbGlldmUgdGhpcyB3aWxsIGJyZWFrIEh5Z29uIENQVXMgdy8gU01F L1NFVi4gIA0KDQpUaGlzIGNhbiBiZSBlYXNpbHkgYWRqdXN0ZWQgaW4gdGhlIGZ1dHVyZS4gSSBj YW4gYWRkIEh5Z29uIGNoZWNrIHRvIHRoaXMgcGF0Y2guDQoNCj4gRS5nLiB0aGUgZXhpc2l0aW5n DQo+ICJpcyBBTUQiIGNoZWNrIGluIG1tdS5jIGxvb2tzIGF0IHNoYWRvd194X21hc2ssIG5vdCBh biBDUFVJRCB2ZW5kb3IuDQoNCnNoYWRvd194X21hc2sgaGFzbid0IGJlZW4gY2FsY3VsYXRlZCBo ZXJlLiBJdCBpcyBjYWxjdWFsdGVkIGxhdGVyIGluIGt2bV9tbXVfc2V0X21hc2tfcHRlcygpIHdo aWNoDQppcyBjYWxsZWQgZnJvbSBrdm1fYXJjaF9pbml0KCkgYWZ0ZXIga3ZtX3g4Nl9vcHMgaXMg c2V0dXAuDQoNCkFuZCBkb2VzIHRoaXMganVzdGlmeSAidXNpbmcgQ1BVIHZlbmRvciBjaGVjayBz aG91bGQgYmUgYXMgbGFzdCByZXNvcnQiPyBUaGVyZSBhcmUgb3RoZXIga2VybmVsIGNvZGUNCiBj aGVja3MgQ1BVIHZlbmRvcnMgdG9vLg0KDQoNCj4ge01LfVRNRSBwcm92aWRlcyBhIENQVUlEIGZl YXR1cmUgYml0IGFuZCBNU1JzIHRvIHF1ZXJ5IHN1cHBvcnQsIGFuZCB0aGlzDQo+IGNvZGUgb25s eSBydW5zIGF0IG1vZHVsZSBpbml0IHNvIHRoZSBvdmVyaGVhZCBvZiBhIFJETVNSIGlzIG5lZ2xp Z2libGUuIA0KDQpZZXMgY2FuIGNoZWNrIGFnYWluc3QgQ1BVSUQgZmVhdHVyZSBiaXQgYnV0IG5v dCBzdXJlIHdoeSBpdCBpcyBiZXR0ZXIgdGhhbiBDUFUgdmVuZG9yLg0KDQo+IA0KPiA+ICsJCXNo YWRvd19maXJzdF9yc3ZkX2JpdCA9IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0czsNCj4gPiAr CWVsc2UNCj4gPiArCQlzaGFkb3dfZmlyc3RfcnN2ZF9iaXQgPSBrdm1fZ2V0X2NwdWlkX3BoeXNf Yml0cygpOw0KPiANCj4gSWYgeW91IHJlbmFtZSB0aGUgaGVscGVyIHRvIGJlIGxlc3Mgc3BlY2lm aWMgYW5kIGFjdHVhbGx5IGNoZWNrIGZvciBNS1RNRQ0KPiBzdXBwb3J0IHRoZW4gdGhlIE1LVE1F IGNvbW1lbnQgZG9lc24ndCBuZWVkIHRvIGJlIGFzIHZlcmJvc2UsIGUuZy46IA0KPiANCj4gc3Rh dGljIHU4IGt2bV9nZXRfc2hhZG93X3BoeXNfYml0cyh2b2lkKQ0KPiB7DQo+IAlpZiAoITxoYXMg TUtUTUU+IHx8DQo+IAkgICAgV0FSTl9PTl9PTkNFKGJvb3RfY3B1X2RhdGEuZXh0ZW5kZWRfY3B1 aWRfbGV2ZWwgPCAweDgwMDAwMDA4KSkNCj4gCQlyZXR1cm4gYm9vdF9jcHVfZGF0YS54ODZfcGh5 c19iaXRzOw0KDQpXaHkgZG8gd2UgbmVlZCBXQVJOX09OX09OQ0UgaGVyZT8NCg0KSSBkb24ndCBo YXZlIHByb2JsZW0gdXNpbmcgYXMgeW91IHN1Z2dlc3RlZCwgYnV0IEkgZG9uJ3QgZ2V0IHdoeSBj aGVja2luZyBhZ2FpbnN0IENQVSB2ZW5kb3IgaXMNCmxhc3QgcmVzb3J0Pw0KDQo+IA0KPiAJLyoN Cj4gCSAqIE1LVE1FIHN0ZWFscyBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgZm9yIGtleSBJRHMsIGJ1 dCB0aGUga2V5IElEIGJpdHMNCj4gCSAqIGFyZSBub3QgdHJlYXRlZCBhcyByZXNlcnZlZC4gIHg4 Nl9waHlzX2JpdHMgaXMgYWRqdXN0ZWQgdG8gYWNjb3VudA0KPiAJICogZm9yIHRoZSBzdG9sZW4g Yml0cywgdXNlIENQVUlELk1BWF9QQV9XSURUSCBkaXJlY3RseSB3aGljaCByZXBvcnRzDQo+IAkg KiB0aGUgbnVtYmVyIG9mIHNvZnR3YXJlLWF2YWlsYWJsZSBiaXRzIGlycmVzcGVjdGl2ZSBvZiBN S1RNRS4NCj4gCSAqLw0KPiAJcmV0dXJuIGNwdWlkX2VheCgweDgwMDAwMDA4KSAmIDB4ZmY7DQo+ IH0NCj4gDQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIE9ubHkgSW50ZWwgaXMgaW1wYWN0ZWQg YnkgTDFURiwgdGhlcmVmb3JlIGZvciBBTUQgYW5kIG90aGVyIHg4Ng0KPiA+ICsJICogdmVuZG9y cyBMMVRGIG1pdGlnYXRpb24gaXMgbm90IG5lZWRlZC4NCj4gPiArCSAqDQo+ID4gKwkgKiBGb3Ig SW50ZWwgQ1BVLCBpZiBpdCBoYXMgNDYgb3IgbGVzcyBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIHRo ZW4gc2V0DQo+ID4gKwkgKiBhbiBhcHByb3ByaWF0ZSBtYXNrIHRvIGd1YXJkIGFnYWluc3QgTDFU RiBhdHRhY2tzLiBPdGhlcndpc2UsIGl0IGlzDQo+ID4gIAkgKiBhc3N1bWVkIHRoYXQgdGhlIENQ VSBpcyBub3QgdnVsbmVyYWJsZSB0byBMMVRGLg0KPiA+ICAJICovDQo+ID4gKwlpZiAoKGJvb3Rf Y3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSAmJg0KPiANCj4gQWdhaW4s IGNoZWNraW5nIHZlbmRvcnMgaXMgYmFkLiAgTm90IGVtcGxveWluZyBhIG1pdGlnYXRpb24gdGVj aG5pcXVlIGR1ZQ0KPiB0byBhbiBhc3N1bXB0aW9uIGFib3V0IHdoYXQgcHJvY2Vzc29ycyBhcmUg YWZmZWN0ZWQgYnkgYSB2dWxuZXJhYmlsaXR5IGlzDQo+IGV2ZW4gd29yc2UuICANCg0KV2h5LCBp c24ndCBpdCBhIGZhY3QgdGhhdCBMMVRGIG9ubHkgaW1wYWN0cyBJbnRlbCBDUFVzPyBXaGF0J3Mg dGhlIGJlbmVmaXQgb2YgZW1wbG95aW5nIGEgbWl0aWdhdGlvbg0KdG8gQ1BVcyB0aGF0IGRvbid0 IGhhdmUgTDFURiBpc3N1ZT8gU3VjaCBtaXRpZ2F0aW9uIG9ubHkgbWFrZXMgcGVyZm9ybWFuY2Ug d29yc2UsIGV2ZW4gbm90DQpub3RpY2FibGUuIEZvciBleGFtcGxlLCB3aHkgbm90IGVtcGxveWlu ZyBzdWNoIG1pdGlnYXRpb24gcmVnYXJkbGVzcyB0byBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgYXQN CmFsbD8NCg0KPiBUaGUgZXhpc3RpbmcgY29kZSBtYWtlcyB0aGUgYXNzdW1wdGlvbiByZWdhcmRp bmcgcHJvY2Vzc29ycw0KPiB3aXRoID40NiBiaXRzIG9mIGFkZHJlc3Mgc3BhY2UgYmVjYXVzZSBh KSBubyBzdWNoIHByb2Nlc3NvciBleGlzdGVkIGJlZm9yZQ0KPiB0aGUgZGlzY292ZXJ5IG9mIEwx VEYsIGFuZCBpdCdzIHJlYXNvbmFibGUgdG8gYXNzdW1lIGhhcmR3YXJlIHZlbmRvcnMNCj4gd29u J3Qgc2hpcCBmdXR1cmUgcHJvY2Vzc29ycyB3aXRoIHN1Y2ggYW4gb2J2aW91cyB2dWxuZXJhYmls aXR5LCBhbmQgYikNCj4gaGFyZGNvZGluZyB0aGUgbnVtYmVyIG9mIHJlc2VydmVkIGJpdHMgdG8g c2V0IHNpbXBsaWZpZXMgdGhlIGNvZGUuDQoNClllcywgYnV0IHdlIGNhbm5vdCBzaW1wbHkgdXNl ICdzaGFkb3dfcGh5c19iaXRzJyB0byBjaGVjayBhZ2FpbnN0IDQ2IGFueW1vcmUsIHJpZ2h0Pw0K DQpGb3IgZXhhbXBsZSwgaWYgQU1EIGhhcyA1MiBwaHlzIGJpdHMsIGJ1dCBpdCByZWR1Y2VzIDUg b3IgbW9yZSBiaXRzLCB0aGVuIGN1cnJlbnQgS1ZNIGNvZGUgd291bGQNCmVtcGxveSBsMXRmIG1p dGlnYXRpb24sIGJ1dCBhY3R1YWxseSBpdCByZWFsbHkgc2hvdWxkbid0Pw0KDQo+IA0KPiA+ICsJ CQkoc2hhZG93X2ZpcnN0X3JzdmRfYml0IDwNCj4gPiArCQkJCTUyIC0gc2hhZG93X25vbnByZXNl bnRfb3JfcnN2ZF9tYXNrX2xlbikpDQo+ID4gKwkJbmVlZF9sMXRmID0gdHJ1ZTsNCj4gPiArCWVs c2UNCj4gPiArCQluZWVkX2wxdGYgPSBmYWxzZTsNCj4gPiArDQo+ID4gIAlsb3dfcGh5c19iaXRz ID0gYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzOw0KPiA+IC0JaWYgKGJvb3RfY3B1X2RhdGEu eDg2X3BoeXNfYml0cyA8DQo+ID4gLQkgICAgNTIgLSBzaGFkb3dfbm9ucHJlc2VudF9vcl9yc3Zk X21hc2tfbGVuKSB7DQo+ID4gKwlzaGFkb3dfbm9ucHJlc2VudF9vcl9yc3ZkX21hc2sgPSAwOw0K PiA+ICsJaWYgKG5lZWRfbDF0Zikgew0KPiA+ICAJCXNoYWRvd19ub25wcmVzZW50X29yX3JzdmRf bWFzayA9DQo+ID4gIAkJCXJzdmRfYml0cyhib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMgLQ0K PiA+ICAJCQkJICBzaGFkb3dfbm9ucHJlc2VudF9vcl9yc3ZkX21hc2tfbGVuLA0KPiANCj4gVGhp cyBpcyBicm9rZW4sIHRoZSByZXNlcnZlZCBiaXRzIG1hc2sgaXMgYmVpbmcgY2FsY3VsYXRlZCB3 aXRoIHRoZSB3cm9uZw0KPiBudW1iZXIgb2YgcGh5c2ljYWwgYml0cy4gIEkgdGhpbmsgZml4aW5n IHRoaXMgd291bGQgZWxpbWluYXRlIHRoZSBuZWVkIGZvcg0KPiB0aGUgaGlnaF9ncGFfb2Zmc2V0 IHNoZW5hbmlnYW5zLg0KDQpZb3UgYXJlIHJpZ2h0LiBzaG91bGQgdXNlICdzaGFkb3dfcGh5c19i aXRzJyBpbnN0ZWFkLiBUaGFua3MuIExldCBtZSB0aGluayB3aGV0aGVyIGhpZ2hfZ3BhX29mZnNl dA0KY2FuIGJlIGF2b2lkZWQuDQoNCj4gDQo+ID4gQEAgLTQzMjYsNyArNDQyMiw3IEBAIHN0YXRp YyBpbmxpbmUgYm9vbCBpc19sYXN0X2dwdGUoc3RydWN0IGt2bV9tbXUgKm1tdSwNCj4gPiAgc3Rh dGljIHZvaWQNCj4gPiAgX19yZXNldF9yc3Zkc19iaXRzX21hc2soc3RydWN0IGt2bV92Y3B1ICp2 Y3B1LA0KPiA+ICAJCQlzdHJ1Y3QgcnN2ZF9iaXRzX3ZhbGlkYXRlICpyc3ZkX2NoZWNrLA0KPiA+ IC0JCQlpbnQgbWF4cGh5YWRkciwgaW50IGxldmVsLCBib29sIG54LCBib29sIGdicGFnZXMsDQo+ ID4gKwkJCWludCBmaXJzdF9yc3ZkX2JpdCwgaW50IGxldmVsLCBib29sIG54LCBib29sIGdicGFn ZXMsDQo+ID4gIAkJCWJvb2wgcHNlLCBib29sIGFtZCkNCj4gDQo+IFNpbWlsYXIgdG8gdGhlIGVh cmxpZXIgY29tbWVudCByZWdhcmRpbmcgJ2ZpcnN0JywgaXQncyBwcm9iYWJseSBsZXNzDQo+IGNv bmZ1c2luZyBvdmVyYWxsIHRvIGp1c3QgbGVhdmUgdGhpcyBhcyAnbWF4cGh5YWRkcicuDQoNCkJv dGggd29yayBmb3IgbWUuIEJ1dCBtYXliZSAnbm9uX3JzdmRfbWF4cGh5YWRkcicgaXMgYmV0dGVy PyANCg0KVGhhbmtzLA0KLUthaQ==