From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Cohen, Haim" Subject: RE: [intel-sgx-kernel-dev] [PATCH 08/10] kvm: vmx: add guest's IA32_SGXLEPUBKEYHASHn runtime switch support Date: Fri, 9 Jun 2017 15:38:32 +0000 Message-ID: <667D753FABC9AE4EAB23F34C66393FC569CD9FAC@fmsmsx117.amr.corp.intel.com> References: <20170508052434.3627-1-kai.huang@linux.intel.com> <20170508052434.3627-9-kai.huang@linux.intel.com> <58dcdb2d-6894-b0a3-8d6f-2ab752fd6d22@linux.intel.com> <6ab7ec4e-e0fa-af47-11b2-f26edcb088fb@linux.intel.com> <596dc1ad-eac7-798d-72e5-665eb7f3f2e4@linux.intel.com> <0b4697b9-0976-c8ad-e26f-4ff683318486@linux.intel.com> <20170608123101.47pgsaovkgtdxaw4@intel.com> <46bdaa22-8e7d-738f-9dd0-840fe3327506@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Jarkko Sakkinen , Kai Huang , Paolo Bonzini , Radim Krcmar , kvm list , "intel-sgx-kernel-dev@lists.01.org" , "Cohen, Haim" To: Andy Lutomirski , "Huang, Kai" Return-path: Received: from mga04.intel.com ([192.55.52.120]:9613 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751796AbdFIPip (ORCPT ); Fri, 9 Jun 2017 11:38:45 -0400 In-Reply-To: Content-Language: en-US Sender: kvm-owner@vger.kernel.org List-ID: T24gNi84LzIwMTcgNzo1MyBQTSwgQW5keSBMdXRvbWlyc2tpIHdyb3RlOg0KPg0KPk9uIFRodSwg SnVuIDgsIDIwMTcgYXQgNDo0NyBQTSwgSHVhbmcsIEthaSA8a2FpLmh1YW5nQGxpbnV4LmludGVs LmNvbT4gd3JvdGU6DQo+Pg0KPj4NCj4+IE9uIDYvOS8yMDE3IDEyOjMxIEFNLCBKYXJra28gU2Fr a2luZW4gd3JvdGU6DQo+Pj4NCj4+PiBPbiBXZWQsIEp1biAwNywgMjAxNyBhdCAwODo1Mjo0MkFN ICsxMjAwLCBIdWFuZywgS2FpIHdyb3RlOg0KPj4+Pg0KPj4+Pg0KPj4+Pg0KPj4+PiBPbiA1LzE4 LzIwMTcgNzo0NSBQTSwgSHVhbmcsIEthaSB3cm90ZToNCj4+Pj4+DQo+Pj4+Pg0KPj4+Pj4NCj4+ Pj4+IE9uIDUvMTcvMjAxNyAxMjowOSBQTSwgQW5keSBMdXRvbWlyc2tpIHdyb3RlOg0KPj4+Pj4+ DQo+Pj4+Pj4gT24gTW9uLCBNYXkgMTUsIDIwMTcgYXQgNTo0OCBQTSwgSHVhbmcsIEthaQ0KPj4+ Pj4+IDxrYWkuaHVhbmdAbGludXguaW50ZWwuY29tPiB3cm90ZToNCj4+Pj4+Pj4NCj4+Pj4+Pj4N Cj4+Pj4+Pj4NCj4+Pj4+Pj4gT24gNS8xMi8yMDE3IDY6MTEgUE0sIEFuZHkgTHV0b21pcnNraSB3 cm90ZToNCj4+Pj4+Pj4+DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gT24gVGh1LCBNYXkgMTEsIDIwMTcg YXQgOTo1NiBQTSwgSHVhbmcsIEthaQ0KPj4+Pj4+Pj4gPGthaS5odWFuZ0BsaW51eC5pbnRlbC5j b20+DQo+Pj4+Pj4+PiB3cm90ZToNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gSSBh bSBub3Qgc3VyZSB3aGV0aGVyIHRoZSBjb3N0IG9mIHdyaXRpbmcgdG8gNCBNU1JzIHdvdWxkIGJl DQo+Pj4+Pj4+Pj4gKmV4dHJlbWVseSogc2xvdywgYXMgd2hlbiB2Y3B1IGlzIHNjaGVkdWxlIGlu LCBLVk0gaXMgYWxyZWFkeQ0KPj4+Pj4+Pj4+IGRvaW5nIHZtY3NfbG9hZCwgd3JpdGluZyB0byBz ZXZlcmFsIE1TUnMsIGV0Yy4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+ IEknbSBzcGVjdWxhdGluZyB0aGF0IHRoZXNlIE1TUnMgbWF5IGJlIHJhdGhlciB1bm9wdGltaXpl ZCBhbmQNCj4+Pj4+Pj4+IGhlbmNlIHVudXN1YWx5IHNsb3cuDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+ DQo+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+IEhhdmUgYSBwZXJjcHUgdmFyaWFibGUgdGhhdCBzdG9y ZXMgdGhlIGN1cnJlbnQgU0dYTEVQVUJLRVlIQVNIDQo+Pj4+Pj4+Pj4+IGFsb25nIHdpdGggd2hh dGV2ZXIgbG9jayBpcyBuZWVkZWQgKHByb2JhYmx5IGp1c3QgYSBtdXRleCkuDQo+Pj4+Pj4+Pj4+ IFVzZXJzIG9mIEVJTklUIHdpbGwgdGFrZSB0aGUgbXV0ZXgsIGNvbXBhcmUgdGhlIHBlcmNwdQ0K Pj4+Pj4+Pj4+PiB2YXJpYWJsZSB0byB0aGUgZGVzaXJlZCB2YWx1ZSwgYW5kLCBpZiBpdCdzIGRp ZmZlcmVudCwgZG8NCj4+Pj4+Pj4+Pj4gV1JNU1IgYW5kIHVwZGF0ZSB0aGUgcGVyY3B1IHZhcmlh YmxlLg0KPj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+PiBLVk0gd2lsbCBpbXBsZW1lbnQgd3JpdGVzIHRv IFNHWExFUFVCS0VZSEFTSCBieSB1cGRhdGluZyBpdHMNCj4+Pj4+Pj4+Pj4gaW4tbWVtb3J5IHN0 YXRlIGJ1dCAqbm90KiBjaGFuZ2luZyB0aGUgTVNScy4gIEtWTSB3aWxsIHRyYXANCj4+Pj4+Pj4+ Pj4gYW5kIGVtdWxhdGUgRUlOSVQgdG8gc3VwcG9ydCB0aGUgc2FtZSBoYW5kbGluZyBhcyB0aGUg aG9zdC4NCj4+Pj4+Pj4+Pj4gVGhlcmUgaXMgbm8gYWN0aW9uIHJlcXVpcmVkIGF0IGFsbCBvbiBL Vk0gZ3Vlc3QgZW50cnkgYW5kDQo+Pj4+Pj4+Pj4+IGV4aXQuDQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+ Pg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBUaGlzIGlzIGRvYWJsZSwgYnV0IFNH WCBkcml2ZXIgbmVlZHMgdG8gZG8gdGhvc2UgdGhpbmdzIGFuZA0KPj4+Pj4+Pj4+IGV4cG9zZSBp bnRlcmZhY2VzIGZvciBLVk0gdG8gdXNlLiBJbiB0ZXJtcyBvZiB0aGUgcGVyY3B1IGRhdGEsDQo+ Pj4+Pj4+Pj4gaXQgaXMgbmljZSB0byBoYXZlLCBidXQgSSBhbSBub3Qgc3VyZSB3aGV0aGVyIGl0 IGlzIG1hbmRhdG9yeSwNCj4+Pj4+Pj4+PiBhcyBJTU8gRUlOSVQgaXMgbm90IGV2ZW4gaW4gcGVy Zm9ybWFuY2UgY3JpdGljYWwgcGF0aC4gV2UgY2FuDQo+Pj4+Pj4+Pj4gc2ltcGx5IHJlYWQgb2xk IHZhbHVlIGZyb20gTVNScyBvdXQgYW5kIGNvbXBhcmUgd2hldGhlciB0aGUgb2xkDQo+Pj4+Pj4+ Pj4gZXF1YWxzIHRvIHRoZSBuZXcuDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+DQo+Pj4+ Pj4+PiBJIHRoaW5rIHRoZSBTR1ggZHJpdmVyIHNob3VsZCBwcm9iYWJseSBsaXZlIGluIGFyY2gv eDg2LCBhbmQgdGhlDQo+Pj4+Pj4+PiBpbnRlcmZhY2UgY291bGQgYmUgYSBzaW1wbGUgcGVyY3B1 IHZhcmlhYmxlIHRoYXQgaXMgZXhwb3J0ZWQNCj4+Pj4+Pj4+IChmcm9tIHRoZSBtYWluIGtlcm5l bCBpbWFnZSwgbm90IGZyb20gYSBtb2R1bGUpLg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+ Pj4+Pg0KPj4+Pj4+Pj4+PiBGV0lXLCBJIHRoaW5rIHRoYXQgS1ZNIHdpbGwsIGluIHRoZSBsb25n IHJ1biwgd2FudCB0byB0cmFwDQo+Pj4+Pj4+Pj4+IEVJTklUIGZvciBvdGhlciByZWFzb25zOiBz b21lb25lIGlzIGdvaW5nIHRvIHdhbnQgdG8gaW1wbGVtZW50DQo+Pj4+Pj4+Pj4+IHBvbGljeSBm b3Igd2hhdCBlbmNsYXZlcyBhcmUgYWxsb3dlZCB0aGF0IGFwcGxpZXMgdG8gZ3Vlc3RzIGFzDQo+ Pj4+Pj4+Pj4+IHdlbGwgYXMgdGhlIGhvc3QuDQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+ Pj4+DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBJIGFtIG5vdCB2ZXJ5IGNvbnZpbmNlZCB3aHkgIndo YXQgZW5jbGF2ZXMgYXJlIGFsbG93ZWQiIGluIGhvc3QNCj4+Pj4+Pj4+PiB3b3VsZCBhcHBseSB0 byBndWVzdC4gQ2FuIHlvdSBlbGFib3JhdGU/IEkgbWVhbiBpbiBnZW5lcmFsDQo+Pj4+Pj4+Pj4g dmlydHVhbGl6YXRpb24ganVzdCBmb2N1cyBlbXVsYXRpbmcgaGFyZHdhcmUgYmVoYXZpb3IuIElm IGENCj4+Pj4+Pj4+PiBuYXRpdmUgbWFjaGluZSBpcyBhYmxlIHRvIHJ1biBhbnkgTEUsIHRoZSB2 aXJ0dWFsIG1hY2hpbmUNCj4+Pj4+Pj4+PiBzaG91bGQgYmUgYWJsZSB0byBhcyB3ZWxsIChvZiBj b3Vyc2UsIHdpdGggZ3Vlc3Qncw0KPj4+Pj4+Pj4+IElBMzJfRkVBVFVSRV9DT05UUk9MW2JpdCAx N10gc2V0KS4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IEkgc3Ryb25n bHkgZGlzYWdyZWUuICBJIGNhbiBpbWFnaW5lIHR3byBjbGFzc2VzIG9mIHNlbnNpYmxlDQo+Pj4+ Pj4+PiBwb2xpY2llcyBmb3IgbGF1bmNoIGNvbnRyb2w6DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gMS4g QWxsb3cgZXZlcnl0aGluZy4gIFRoaXMgc2VlbXMgcXVpdGUgc2Vuc2libGUgdG8gbWUuDQo+Pj4+ Pj4+Pg0KPj4+Pj4+Pj4gMi4gQWxsb3cgc29tZSB0aGluZ3MsIGFuZCBtYWtlIHN1cmUgdGhhdCBW TXMgaGF2ZSBhdCBsZWFzdCBhcw0KPj4+Pj4+Pj4gcmVzdHJpY3RpdmUgYSBwb2xpY3kgYXMgaG9z dCByb290IGhhcy4gIEFmdGVyIGFsbCwgd2hhdCdzIHRoZQ0KPj4+Pj4+Pj4gcG9pbnQgb2YgcmVz dHJpY3RpbmcgZW5jbGF2ZXMgaW4gdGhlIGhvc3QgaWYgaG9zdCBjb2RlIGNhbg0KPj4+Pj4+Pj4g c2ltcGx5IHNwYXduIGEgbGl0dGxlIFZNIHRvIHJ1biBvdGhlcndpc2UtZGlzYWxsb3dlZCBlbmNs YXZlcz8NCj4+Pj4+Pj4NCj4+Pj4+Pj4NCj4+Pj4+Pj4NCj4+Pj4+Pj4gV2hhdCdzIHRoZSBjdXJy ZW50IFNHWCBkcml2ZXIgbGF1bmNoIGNvbnRyb2wgcG9saWN5PyBZZXMgYWxsb3cNCj4+Pj4+Pj4g ZXZlcnl0aGluZyB3b3JrcyBmb3IgS1ZNIHNvIGxldHMgc2tpcCB0aGlzLiBBcmUgd2UgZ29pbmcg dG8NCj4+Pj4+Pj4gc3VwcG9ydCBhbGxvd2luZyBzZXZlcmFsIExFcywgb3IganVzdCBhbGxvd2lu ZyBvbmUgc2luZ2xlIExFPyBJDQo+Pj4+Pj4+IGtub3cgSmFya2tvIGlzIGRvaW5nIGluLWtlcm5l bCBMRSBzdGFmZiBidXQgSSBkb24ndCBrbm93IGRldGFpbHMuDQo+Pj4+Pj4+DQo+Pj4+Pj4+IEkg YW0gdHJ5aW5nIHRvIGZpbmQgYSB3YXkgdGhhdCB3ZSBjYW4gYm90aCBub3QgYnJlYWsgaG9zdCBs YXVuY2gNCj4+Pj4+Pj4gY29udHJvbCBwb2xpY3ksIGFuZCBiZSBjb25zaXN0ZW50IHRvIEhXIGJl aGF2aW9yIChmcm9tIGd1ZXN0J3MNCj4+Pj4+Pj4gdmlldykuDQo+Pj4+Pj4+IEN1cnJlbnRseSB3 ZQ0KPj4+Pj4+PiBjYW4gY3JlYXRlIGEgS1ZNIGd1ZXN0IHdpdGggcnVudGltZSBjaGFuZ2UgdG8N Cj4+Pj4+Pj4gSUEzMl9TR1hMRVBVQktFWUhBU0huIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVk LiBJIGludHJvZHVjZWQgYW4NCj4+Pj4+Pj4gUWVtdSBwYXJhbWV0ZXIgJ2xld3InIGZvciB0aGlz IHB1cnBvc2UuDQo+Pj4+Pj4+IEFjdHVhbGx5IEkgaW50cm9kdWNlZCBiZWxvdyBRZW11IFNHWCBw YXJhbWV0ZXJzIGZvciBjcmVhdGluZyBndWVzdDoNCj4+Pj4+Pj4NCj4+Pj4+Pj4gICAgICAgICAg LXNneCBlcGM9PHNpemU+LGxlaGFzaD0nU0hBLTI1NiBoYXNoJyxsZXdyDQo+Pj4+Pj4+DQo+Pj4+ Pj4+IHdoZXJlICdlcGMnIHNwZWNpZmllcyBndWVzdCdzIEVQQyBzaXplLCBsZWhhc2ggc3BlY2lm aWVzDQo+Pj4+Pj4+IChpbml0aWFsKSB2YWx1ZSBvZg0KPj4+Pj4+PiBndWVzdCdzIElBMzJfU0dY TEVQVUJLRVlIQVNIbiwgYW5kICdsZXdyJyBzcGVjaWZpZXMgd2hldGhlciBndWVzdA0KPj4+Pj4+ PiBpcyBhbGxvd2VkIHRvIGNoYW5nZSBndWVzdCdzIElBMzJfU0dYTEVQVUJLRVlIQVNIbiBhdCBy dW50aW1lLg0KPj4+Pj4+Pg0KPj4+Pj4+PiBJZiBob3N0IG9ubHkgYWxsb3dzIG9uZSBzaW5nbGUg TEUgdG8gcnVuLCBLVk0gY2FuIGFkZCBhIHJlc3RyaWN0DQo+Pj4+Pj4+IHRoYXQgb25seSBhbGxv d3MgdG8gY3JlYXRlIEtWTSBndWVzdCB3aXRoIHJ1bnRpbWUgY2hhbmdlIHRvDQo+Pj4+Pj4+IElB MzJfU0dYTEVQVUJLRVlIQVNIbiBkaXNhYmxlZCwgc28gdGhhdCBvbmx5IGhvc3QgYWxsb3dlZA0K Pj4+Pj4+PiAoc2luZ2xlKSBoYXNoIGNhbiBiZSB1c2VkIGJ5IGd1ZXN0LiBGcm9tIGd1ZXN0J3Mg dmlldywgaXQgc2ltcGx5DQo+Pj4+Pj4+IGhhcyBJQTMyX0ZFQVRVUkVfQ09OVFJPTFtiaXQxN10g Y2xlYXJlZCBhbmQgaGFzDQo+Pj4+Pj4+IElBMzJfU0dYTEVQVUJLRVlIQVNIbiB3aXRoIGRlZmF1 bHQgdmFsdWUgdG8gYmUgaG9zdCBhbGxvd2VkDQo+Pj4+Pj4+IChzaW5nbGUpIGhhc2guDQo+Pj4+ Pj4+DQo+Pj4+Pj4+IElmIGhvc3QgYWxsb3dzIHNldmVyYWwgTEVzIChub3QgYnV0IGV2ZXJ5dGhp bmcpLCBhbmQgaWYgd2UgY3JlYXRlDQo+Pj4+Pj4+IGd1ZXN0IHdpdGggJ2xld3InLCB0aGVuIHRo ZSBiZWhhdmlvciBpcyBub3QgY29uc2lzdGVudCB3aXRoIEhXDQo+Pj4+Pj4+IGJlaGF2aW9yLCBh cyBmcm9tIGd1ZXN0J3MgaGFyZHdhcmUncyBwb2ludCBvZiB2aWV3LCB3ZSBjYW4NCj4+Pj4+Pj4g YWN0dWFsbHkgcnVuIGFueSBMRSBidXQgd2UgaGF2ZSB0byB0ZWxsIGd1ZXN0IHRoYXQgeW91IGFy ZSBvbmx5DQo+Pj4+Pj4+IGFsbG93ZWQgdG8gY2hhbmdlIElBMzJfU0dYTEVQVUJLRVlIQVNIbiB0 byBzb21lIHNwZWNpZmljIHZhbHVlcy4NCj4+Pj4+Pj4gT25lIGNvbXByb21pc2Ugc29sdXRpb24g aXMgd2UgZG9uJ3QgYWxsb3cgdG8gY3JlYXRlIGd1ZXN0IHdpdGgNCj4+Pj4+Pj4gJ2xld3InIHNw ZWNpZmllZCwgYW5kIGF0IHRoZSBtZWFudGltZSwgb25seSBhbGxvdyB0byBjcmVhdGUgZ3Vlc3QN Cj4+Pj4+Pj4gd2l0aCBob3N0IGFwcHJvdmVkIGhhc2hlcyBzcGVjaWZpZWQgaW4gJ2xlaGFzaCcu IFRoaXMgd2lsbCBtYWtlDQo+Pj4+Pj4+IGd1ZXN0J3MgYmVoYXZpb3IgY29uc2lzdGVudCB0byBI VyBiZWhhdmlvciBidXQgb25seSBhbGxvd3MgZ3Vlc3QNCj4+Pj4+Pj4gdG8gcnVuIG9uZSBMRSAo d2hpY2ggaXMgc3BlY2lmaWVkIGJ5ICdsZWhhc2gnIHdoZW4gZ3Vlc3QgaXMNCj4+Pj4+Pj4gY3Jl YXRlZCkuDQo+Pj4+Pj4NCj4+Pj4+Pg0KPj4+Pj4+IEknbSBub3Qgc3VyZSBJIGVudGlyZWx5IGFn cmVlIGZvciBhIGNvdXBsZSByZWFzb25zLg0KPj4+Pj4+DQo+Pj4+Pj4gMS4gSSB3b3VsZG4ndCBi ZSBzdXJwcmlzZWQgaWYgdGhlIGtlcm5lbCBlbmRzIHVwIGltcGxlbWVudGluZyBhDQo+Pj4+Pj4g cG9saWN5IGluIHdoaWNoIGl0IGNoZWNrcyBhbGwgZW5jbGF2ZXMgKG5vdCBqdXN0IExFcykgZm9y DQo+Pj4+Pj4gYWNjZXB0YWJpbGl0eS4gIEluIGZhY3QsIGlmIHRoZSBrZXJuZWwgc3RpY2tzIHdp dGggdGhlICJubyBMRSBhdA0KPj4+Pj4+IGFsbCBvciBqdXN0IGtlcm5lbC1pbnRlcm5hbCBMRSIs IHRoZW4gY2hlY2tpbmcgZW5jbGF2ZXMgZGlyZWN0bHkNCj4+Pj4+PiBhZ2FpbnN0IHNvbWUNCj4+ Pj4+PiBhZG1pbi0gb3IgZGlzdHJvLXByb3ZpZGVkIHNpZ25lciBsaXN0IHNlZW1zIHJlYXNvbmFi bGUuICBUaGlzIHR5cGUNCj4+Pj4+PiBvZiBwb2xpY3kgY2FuJ3QgYmUgZm9yd2FyZGVkIHRvIGEg Z3Vlc3QgYnkgcmVzdHJpY3RpbmcgYWxsb3dlZCBMRQ0KPj4+Pj4+IHNpZ25lcnMuICBCdXQgdGhp cyBpcyBtb3N0bHkgc3BlY3VsYXRpb24gc2luY2UgQUZBSUsgbm8gb25lIGhhcw0KPj4+Pj4+IHNl cmlvdXNseSBwcm9wb3NlZCBhbnkgcGFydGljdWxhciBwb2xpY3kgc3VwcG9ydCBhbmQgdGhlIHBs YW4gd2FzDQo+Pj4+Pj4gdG8gbm90IGhhdmUgdGhpcyBmb3IgdGhlIGluaXRpYWwgaW1wbGVtZW50 YXRpb24uDQo+Pj4+Pj4NCj4+Pj4+PiAyLiBXaGlsZSBtYXRjaGluZyBoYXJkd2FyZSBiZWhhdmlv ciBpcyBuaWNlIGluIHByaW5jaXBsZSwgdGhlcmUNCj4+Pj4+PiBkb2Vzbid0IHNlZW0gdG8gYmUg dXNlZnVsIGhhcmR3YXJlIGJlaGF2aW9yIHRvIG1hdGNoIGhlcmUuICBJZiB0aGUNCj4+Pj4+PiBo b3N0IGhhZCBhIGxpc3Qgb2YgZml2ZSBhbGxvd2VkIExFIHNpZ25lcnMsIGhvdyBleGFjdGx5IHdv dWxkIGl0DQo+Pj4+Pj4gcmVzdHJpY3QgdGhlIE1TUnM/ICBUaGV5J3JlIG5vdCB3cml0dGVuIGF0 b21pY2FsbHksIHNvIHlvdSBjYW4ndA0KPj4+Pj4+IGRpcmVjdGx5IHRlbGwgd2hhdCdzIGJlaW5n IHdyaXR0ZW4uDQo+Pj4+Pg0KPj4+Pj4NCj4+Pj4+IEluIHRoaXMgY2FzZSBJIGFjdHVhbGx5IHBs YW4gdG8ganVzdCBhbGxvdyBjcmVhdGluZyBndWVzdCB3aXRoDQo+Pj4+PiBndWVzdCdzIElBMzJf U0dYTEVQVUJLRVlIQVNIbiBkaXNhYmxlZCAod2l0aG91dCAnbGV3cicgc3BlY2lmaWVkKS4NCj4+ Pj4+IElmICdsZXdyJyBpcyBzcGVjaWZpZWQsIGNyZWF0aW5nIGd1ZXN0IHdpbGwgZmFpbC4gQW5k IHdlIG9ubHkgYWxsb3cNCj4+Pj4+IGNyZWF0aW5nIGd1ZXN0IHdpdGggaG9zdCBhbGxvd2VkIGhh c2ggdmFsdWVzICh3aXRoDQo+Pj4+PiAnbGVoYXNoPWhhc2gtdmFsdWUnKSwgYW5kIGlmICdoYXNo LXZhbHVlJyBzcGVjaWZpZWQgYnkgJ2xlaGFzaCcgaXMNCj4+Pj4+IG5vdCBhbGxvd2VkIGJ5IGhv c3QsIHdlIGFsc28gZmFpbCB0byBjcmVhdGUgZ3Vlc3QuDQo+Pj4+Pg0KPj4+Pj4gV2UgY2FuIG9u bHkgYWxsb3cgY3JlYXRpbmcgZ3Vlc3Qgd2l0aCAnbGV3cicgc3BlY2lmaWVkIHdoZW4gaG9zdA0K Pj4+Pj4gYWxsb3dzIGFueXRoaW5nLg0KPj4+Pj4NCj4+Pj4+IEJ1dCBpbiB0aGlzIHdheSwgd2Ug YXJlIHJlc3RyaWN0aW5nIGd1ZXN0IE9TJ3MgYWJpbGl0eSB0byBydW4gTEUsDQo+Pj4+PiBhcyBv bmx5IG9uZSBMRSwgdGhhdCBpcyBzcGVjaWZpZWQgYnkgJ2xlaGFzaCcgcGFyYW1ldGVyLCBjYW4g YmUNCj4+Pj4+IHJ1bi4gQnV0IEkgdGhpbmsgdGhpcyB3b24ndCBodXJ0IG11Y2gsIGFzIG11bHRp cGxlIGd1ZXN0cyBzdGlsbCBhcmUNCj4+Pj4+IGFibGUgdG8gcnVuIGRpZmZlcmVudCBMRXM/DQo+ Pj4+Pg0KPj4+Pj4gQWxzbywgdGhlIG9ubHkgd2F5IHRvIGZhaWwgYW4gTVNSDQo+Pj4+Pj4NCj4+ Pj4+PiB3cml0ZSBpcyB0byBzZW5kICNHUCwgYW5kIFdpbmRvd3MgKGFuZCBldmVuIExpbnV4KSBt YXkgbm90IGV4cGVjdA0KPj4+Pj4+IHRoYXQuICBMaW51eCBkb2Vzbid0IHBhbmljIGR1ZSB0byAj R1Agb24gTVNSIHdyaXRlcyB0aGVzZSBkYXlzLA0KPj4+Pj4+IGJ1dCB5b3Ugc3RpbGwgZ2V0IGEg YmlnIGZhdCB3YXJuaW5nLiAgSSB3b3VsZG4ndCBiZSBhdCBhbGwNCj4+Pj4+PiBzdXJwcmlzZWQg aWYgV2luZG93cyBCU09Ecy4NCj4+Pj4+DQo+Pj4+Pg0KPj4+Pj4gV2UgY2Fubm90IGFsbG93IHdy aXRpbmcgc29tZSBwYXJ0aWN1bGFyIHZhbHVlIHRvIE1TUnMgc3VjY2Vzc2Z1bGx5LA0KPj4+Pj4g d2hpbGUgaW5qZWN0aW5nICNHUCB3aGVuIHdyaXRpbmcgb3RoZXIgdmFsdWVzIHRvIHRoZSBzYW1l IE1TUnMuIFNvDQo+Pj4+PiAjR1AgaXMgbm90IG9wdGlvbi4NCj4+Pj4+DQo+Pj4+PiBFTkNMU1tF SU5JVF0sIG9uIHRoZSBvdGhlciBoYW5kLCByZXR1cm5zIGFuIGFjdHVhbA0KPj4+Pj4+DQo+Pj4+ Pj4gZXJyb3IgY29kZS4gIEknbSBub3Qgc3VyZSB0aGF0IGEgc2Vuc2libGUgZXJyb3IgY29kZSBl eGlzdHMNCj4+Pj4+PiAoIlNHWF9IWVBFUlZJU09SX1NBSURfTk8/IiwgcGVyaGFwcyksDQo+Pj4+ Pg0KPj4+Pj4NCj4+Pj4+IExvb2tzIG5vIHN1Y2ggZXJyb3IgY29kZSBleGlzdHMuIEFuZCB3ZSBj YW5ub3QgcmV0dXJuIHN1Y2ggZXJyb3INCj4+Pj4+IGNvZGUgdG8gZ3Vlc3QgYXMgc3VjaCBlcnJv ciBjb2RlIGlzIG9ubHkgc3VwcG9zZWQgdG8gYmUgdmFsaWQgd2hlbg0KPj4+Pj4gRU5DTFMgaXMg cnVuIGluIGh5cGVydmlzb3IuDQo+Pj4+Pg0KPj4+Pj4gYnV0IFNHWF9JTlZBTElEX0VJTklUVE9L RU4gc2VlbXMNCj4+Pj4+Pg0KPj4+Pj4+IHRvIG1lYW4sIG1vcmUgb3IgbGVzcywgInRoZSBDUFUg dGhpbmtzIHlvdSdyZSBub3QgYXV0aG9yaXplZCB0byBkbw0KPj4+Pj4+IHRoaXMiLCBzbyBmb3Jj aW5nIHRoYXQgZXJyb3IgY29kZSBjb3VsZCBiZSBlbnRpcmVseSByZWFzb25hYmxlLg0KPj4+Pj4+ DQo+Pj4+Pj4gSWYgdGhlIGhvc3QgcG9saWN5IGlzIHRvIGFsbG93IGEgbGlzdCBvZiBMRSBzaWdu ZXJzLCB5b3UgY291bGQNCj4+Pj4+PiByZXR1cm4gU0dYX0lOVkFMSURfRUlOSVRUT0tFTiBpZiB0 aGUgZ3Vlc3QgdHJpZXMgdG8gRUlOSVQgYW4gTEUNCj4+Pj4+PiB0aGF0IGlzbid0IGluIHRoZSBs aXN0Lg0KPj4+Pj4NCj4+Pj4+DQo+Pj4+PiBCdXQgdGhpcyB3b3VsZCBiZSBpbmNvbnNpc3RlbnQg d2l0aCBIVyBiZWhhdmlvci4gSWYgdGhlIGhhc2ggdmFsdWUNCj4+Pj4+IGluIGd1ZXN0J3MgSUEz Ml9TR1hMRVBVQktFWUhBU0huIGlzIG1hdGNoZWQgd2l0aCB0aGUgb25lIHBhc3NlZCBieQ0KPj4+ Pj4gRUlOSVQsIEVJTklUIGlzIG5vdCBzdXBwb3NlZCB0byByZXR1cm4gU0dYX0lOVkFMSURfRUlO SVRUT0tFTi4NCj4+Pj4+DQo+Pj4+PiBJIHRoaW5rIGZyb20gVk1NJ3MgcGVyc3BlY3RpdmUsIGVt dWxhdGluZyBIVyBiZWhhdmlvciB0byBiZQ0KPj4+Pj4gY29uc2lzdGVudCB3aXRoIHJlYWwgSFcg YmVoYXZpb3IgaXMgdmVyeSBpbXBvcnRhbnQuDQo+Pj4+Pg0KPj4+Pj4gUGFvbG8sIHdvdWxkIHlv dSBwcm92aWRlIHlvdXIgY29tbWVudHM/DQo+Pj4+DQo+Pj4+DQo+Pj4+IEhpIGFsbCwNCj4+Pj4N Cj4+Pj4gVGhpcyBoYXMgYmVlbiBxdWl0ZSBmb3IgYSB3aGlsZSBhbmQgSSdkIGxpa2UgdG8gc3Rh cnQgZGlzY3Vzc2lvbiBhZ2Fpbi4NCj4+Pj4gSmFya2tvIHRvbGQgbWUgdGhhdCBjdXJyZW50bHkg aGUgb25seSBzdXBwb3J0cyBvbmUgTEUgaW4gU0dYIGRyaXZlciwNCj4+Pj4gYnV0IEkgYW0gbm90 IHN1cmUgd2hldGhlciBoZSBpcyBnb2luZyB0byBleHRlbmQgaW4gdGhlIGZ1dHVyZSBvcg0KPj4+ PiBub3QuIEkgdGhpbmsgdGhpcyBtaWdodCBhbHNvIGRlcGVuZCBvbiByZXF1aXJlbWVudHMgZnJv bSBjdXN0b21lcnMuDQo+Pj4+DQo+Pj4+IEFuZHksDQo+Pj4+DQo+Pj4+IElmIHdlIG9ubHkgc3Vw cG9ydCBvbmUgTEUgaW4gZHJpdmVyLCB0aGVuIHdlIGNhbiBvbmx5IHN1cHBvcnQgdGhlDQo+Pj4+ IHNhbWUgTEUgZm9yIGFsbCBLVk0gZ3Vlc3RzLCBhY2NvcmRpbmcgdG8geW91ciBjb21tZW50cyB0 aGF0IGhvc3QNCj4+Pj4ga2VybmVsIGxhdW5jaCBjb250cm9sIHBvbGljeSBzaG91bGQgYWxzbyBh cHBseSB0byBLVk0gZ3Vlc3RzPyBXT3VsZCB5b3UNCj5jb21tZW50cyBtb3JlPw0KPj4+Pg0KPj4+ PiBKYXJra28sDQo+Pj4+DQo+Pj4+IENvdWxkIHlvdSBoZWxwIHRvIGNsYXJpZnkgdGhlIHdob2xl IGxhdW5jaCBjb250cm9sIHBvbGljeSBpbiBob3N0DQo+Pj4+IHNpZGUgc28gdGhhdCB3ZSBjYW4g aGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIHRvZ2V0aGVyPw0KPj4+Pg0KPj4+PiBUaGFua3Ms DQo+Pj4+IC1LYWkNCj4+Pg0KPj4+DQo+Pj4gU28uIEkgaGF2ZSBwYXNzIHRocm91Z2ggTEUuIEl0 IGNyZWF0ZXMgRUlOSVRUT0tFTiBmb3IgYW55dGhpbmcuDQo+Pj4gQ291bGRuJ3QgVk1NIGtlZXAg dmlydHVhbCB2YWx1ZXMgZm9yIE1TUnMgYW5kIGFzayBob3N0IHNpZGUgTEUgY3JlYXRlDQo+Pj4g dG9rZW4gd2hlbiBpdCBuZWVkcyB0bz8NCj4+DQo+Pg0KPj4gSGkgSmFya2tvLA0KPj4NCj4+IFRo YW5rcyBmb3IgcmVwbHlpbmcuIFZNTSBkb2Vzbid0IG5lZWQgZHJpdmVyIHRvIGdlbmVyYXRlIEVJ TklUVE9LRU4uDQo+PiBUaGUgRUlOSVRUT0tFTiBpcyBmcm9tIGd1ZXN0IHRvbywgdXBvbiBWTU0g dHJhcHMgRUlOSVQuDQo+Pg0KPj4gSSB0aGluayBBbmR5J3MgY29tbWVudHMgaXMsIGlmIGhvc3Qg U0dYIGRyaXZlciBvbmx5IGFsbG93cyBzb21lb25lJ3MNCj4+IExFIHRvIHJ1biAoZXgsIExFIGZy b20gSW50ZWwsIFJlZGhhdCwgZXRjLi4uKSwgdGhlbiBTR1ggZHJpdmVyIHNob3VsZA0KPj4gYWxz byBnb3Zlcm4gTEVzIGZyb20gS1ZNIGd1ZXN0cyBhcyB3ZWxsLCBieSBjaGVja2luZyBTSUdTVFJV Q1QgZnJvbQ0KPj4gS1ZNIGd1ZXN0ICh0aGUgU0lHU1RSVUNUIGlzIHByb3ZpZGVkIGJ5IEtWTSBi eSB0cmFwcGluZyBndWVzdCdzIEVJTklUKS4NCj4+DQo+PiBJbiBteSB1bmRlcnN0YW5kaW5nLCBh bHRob3VnaCB5b3Ugb25seSBhbGxvd3Mgb25lIExFIGluIGtlcm5lbCwgYnV0DQo+PiB5b3Ugd29u J3QgbGltaXQgd2hvJ3MgTEUgY2FuIGJlIHJ1biAoYmFzaWNhbGx5IGtlcm5lbCBjYW4gcnVuIExF DQo+PiBzaWduZWQgYnkgYW55b25lLCBidXQganVzdCBvbmUgTEUgd2hlbiBrZXJuZWwgaXMgcnVu bmluZyksIHNvIEkgZG9uJ3QNCj4+IHNlZSB0aGVyZSBpcyBhbnkgbGltaXRhdGlvbiB0byBLVk0g Z3Vlc3RzIGhlcmUuDQo+Pg0KPj4gQnV0IGl0IG1heSBzdGlsbCBiZSBiZXR0ZXIgaWYgU0dYIGRy aXZlciBjYW4gcHJvdmlkZSBmdW5jdGlvbiBsaWtlOg0KPj4NCj4+ICAgICBpbnQgc2d4X3ZhbGlk YXRlX3NpZ3N0cnVjdChzdHJ1Y3Qgc2lnc3RydWN0ICpzaWcpOw0KPj4NCj4+IGZvciBLVk0gdG8g Y2FsbCwgaW4gY2FzZSBkcml2ZXIgaXMgY2hhbmdlZCAoZXgsIHRvIG9ubHkgYWxsb3dzIExFcw0K Pj4gZnJvbSBzb21lIHBhcnRpY3VsYXIgb25lcyB0byBydW4pLCBidXQgdGhpcyBpcyBub3QgbmVj ZXNzYXJ5IG5vdy4gS1ZNDQo+PiBjaGFuZ2VzIGNhbiBiZSBkb25lIGxhdGVyIHdoZW4gZHJpdmVy IG1ha2UgdGhlIGNoYW5nZXMuDQo+Pg0KPj4gQW5keSwNCj4+DQo+PiBBbSBJIHVuZGVyc3RhbmRp bmcgY29ycmVjdGx5PyBEb2VzIHRoaXMgbWFrZSBzZW5zZSB0byB5b3U/DQo+DQo+TXkgdW5kZXJz dGFuZGluZyBpcyB0aGF0IHRoZSBrZXJuZWwgd2lsbCBub3QgKGF0IGxlYXN0IGluaXRpYWxseSkg YWxsb3cgdXNlcnMgdG8gc3VwcGx5DQo+YW4gTEUuICBUaGUga2VybmVsIHdpbGwgaGFuZGxlIGxh dW5jaGVzIGFsbCBieSBpdHNlbGYuICBIb3cgaXQgZG9lcyBzbyBpcyBhbg0KPmltcGxlbWVudGF0 aW9uIGRldGFpbCwgYW5kIGl0IHNlZW1zIHRvIG1lIHRoYXQgaXQgd2lsbCBjYXVzZSBjb21wYXRp YmlsaXR5IGlzc3VlcyBpZg0KPmd1ZXN0cyBoYXZlIHRvIHVzZSB0aGUgaG9zdCdzIExFLg0KPg0K PnNneF92YWxpZGF0ZV9zaWdzdHJ1Y3QoLi4uKSBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBhIGdv b2QgYXBwcm9hY2ggdG8gbWUuDQo+DQoNCkkgZG9uJ3QgdGhpbmsgdGhlIGtlcm5lbCBuZWVkcyB0 byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgTEUuDQpGb3IgbXkgdW5kZXJzdGFuZGluZyB0aGUgZ3Vl c3Qga2VybmVsIG1heSBpbmNsdWRlIGRpZmZlcmVudCBMRSBhbmQgd2lsbCByZXF1aXJlIGRpZmZl cmVudCBMRSBoYXNoLCBlaXRoZXIgYnkgY29uZmlndXJpbmcgJ2xlaGFzaCcgd2hlbiBsYXVuY2hp bmcgdGhlIGd1ZXN0LCBvciBieSB0aGUgZ3Vlc3Qga2VybmVsIHNldHRpbmcgdGhlIGhhc2ggdmFs dWUuDQpJIGFzc3VtZSB0aGF0IHRoZSBWTU0gc2hvdWxkIG5vdCBibG9jayB0aGlzIE1TUiB3cml0 ZXMgYW5kIGFsbG93IHRoZSBndWVzdCB0byBzZXQgdGhlIGhhc2ggdmFsdWVzIGZvciBpdHMgb3du IExFIChieSBjYWNoaW5nIHRoZSBNU1Igd3JpdGVzIGFuZCBzZXR0aW5nIHRoZSB2YWx1ZXMgb24g RUlOSVQpLg0KDQpTbyBJIGRvbid0IHNlZSB3aHkgdGhlIGhvc3Qga2VybmVsIHNob3VsZCBwcm92 aWRlIEVJTklUVE9LRU4gZm9yIHRoZSBndWVzdHMuDQpNb3Jlb3ZlciwgSSBndWVzcyB0aGF0IHRo ZSBhcHByb2FjaCBvZiBMRSBwcm92aWRpbmcgdG9rZW5zIHRvIGFueSBlbmNsYXZlIGlzIG9ubHkg dGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24sIGFuZCBkaWZmZXJlbnQgZGlzdHJpYnV0aW9ucyBt YXkgZGVjaWRlIHRvIGFkZCBzb21lIGxvZ2ljIHRvIHRoZSB0b2tlbiBnZW5lcmF0aW9uLCBzbyBp dCBtaWdodCBiZSB0aGF0IHRoZSBob3N0IExFIG9yIHRoZSBndWVzdCBMRSB3aWxsIG5vdCBwcm92 aWRlIHRva2VuIHRvIHNvbWUgZW5jbGF2ZSwgYW5kIEkgZG9uJ3QgdGhpbmsgd2UnbGwgd2FudCB0 byBvdmVycmlkZSB0aGlzIGtlcm5lbCBsb2dpYy4NCg0KPj4NCj4+IFRoYW5rcywNCj4+IC1LYWkN Cj4+DQo+Pj4NCj4+PiAvSmFya2tvDQo+Pj4NCj4+DQo=