From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v7 for-next 03/12] vpci: introduce basic handlers to trap accesses to the PCI config space Date: Fri, 20 Oct 2017 09:34:10 +0000 Message-ID: <4fb72a7cc1ec4a14b53461e5197af7f5@AMSPEX02CL03.citrite.net> References: <20171018114034.36587-1-roger.pau@citrix.com> <20171018114034.36587-4-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e5ThA-0003r2-Fo for xen-devel@lists.xenproject.org; Fri, 20 Oct 2017 09:34:24 +0000 In-Reply-To: <20171018114034.36587-4-roger.pau@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" Cc: Wei Liu , "konrad.wilk@oracle.com" , Andrew Cooper , Jan Beulich , Ian Jackson , "boris.ostrovsky@oracle.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMTggT2N0b2JlciAyMDE3IDEyOjQw DQo+IFRvOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gQ2M6IGtvbnJhZC53aWxr QG9yYWNsZS5jb207IGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tOyBSb2dlciBQYXUgTW9ubmUN Cj4gPHJvZ2VyLnBhdUBjaXRyaXguY29tPjsgSWFuIEphY2tzb24gPElhbi5KYWNrc29uQGNpdHJp eC5jb20+OyBXZWkgTGl1DQo+IDx3ZWkubGl1MkBjaXRyaXguY29tPjsgSmFuIEJldWxpY2ggPGpi ZXVsaWNoQHN1c2UuY29tPjsgQW5kcmV3IENvb3Blcg0KPiA8QW5kcmV3LkNvb3BlcjNAY2l0cml4 LmNvbT47IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+DQo+IFN1YmplY3Q6 IFtQQVRDSCB2NyBmb3ItbmV4dCAwMy8xMl0gdnBjaTogaW50cm9kdWNlIGJhc2ljIGhhbmRsZXJz IHRvIHRyYXANCj4gYWNjZXNzZXMgdG8gdGhlIFBDSSBjb25maWcgc3BhY2UNCj4gDQo+IFRoaXMg ZnVuY3Rpb25hbGl0eSBpcyBnb2luZyB0byByZXNpZGUgaW4gdnBjaS5jIChhbmQgdGhlIGNvcnJl c3BvbmRpbmcNCj4gdnBjaS5oIGhlYWRlciksIGFuZCBzaG91bGQgYmUgYXJjaC1hZ25vc3RpYy4g VGhlIGhhbmRsZXJzIGludHJvZHVjZWQNCj4gaW4gdGhpcyBwYXRjaCBzZXR1cCB0aGUgYmFzaWMg ZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBpbiBvcmRlciB0byB0cmFwDQo+IGFjY2Vzc2VzIHRvIHRo ZSBQQ0kgY29uZmlnIHNwYWNlLCBhbmQgYWxsb3cgZGVjb2RpbmcgdGhlIGFkZHJlc3MgYW5kDQo+ IGZpbmRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaGFuZGxlciB0aGF0IHNob3VsZCBoYW5kbGUgdGhl IGFjY2Vzcw0KPiAoYWx0aG91Z2ggbm8gaGFuZGxlcnMgYXJlIGltcGxlbWVudGVkKS4NCj4gDQo+ IE5vdGUgdGhhdCB0aGUgdHJhcHMgdG8gdGhlIFBDSSBJTyBwb3J0cyByZWdpc3RlcnMgKDB4Y2Y4 LzB4Y2ZjKSBhcmUNCj4gc2V0dXAgaW5zaWRlIG9mIGEgeDg2IEhWTSBmaWxlLCBzaW5jZSB0aGF0 J3Mgbm90IHNoYXJlZCB3aXRoIG90aGVyDQo+IGFyY2hlcy4NCj4gDQo+IEEgbmV3IFhFTl9YODZf RU1VX1ZQQ0kgeDg2IGRvbWFpbiBmbGFnIGlzIGFkZGVkIGluIG9yZGVyIHRvIHNpZ25hbCBYZW4N Cj4gd2hldGhlciBhIGRvbWFpbiBzaG91bGQgdXNlIHRoZSBuZXdseSBpbnRyb2R1Y2VkIHZQQ0kg aGFuZGxlcnMsIHRoaXMNCj4gaXMgb25seSBlbmFibGVkIGZvciBQVkggRG9tMCBhdCB0aGUgbW9t ZW50Lg0KPiANCj4gQSB2ZXJ5IHNpbXBsZSB1c2VyLXNwYWNlIHRlc3QgaXMgYWxzbyBwcm92aWRl ZCwgc28gdGhhdCB0aGUgYmFzaWMNCj4gZnVuY3Rpb25hbGl0eSBvZiB0aGUgdlBDSSB0cmFwcyBj YW4gYmUgYXNzZXJ0ZWQuIFRoaXMgaGFzIGJlZW4gcHJvdmVuDQo+IHF1aXRlIGhlbHBmdWwgZHVy aW5nIGRldmVsb3BtZW50LCBzaW5jZSB0aGUgbG9naWMgdG8gaGFuZGxlIHBhcnRpYWwNCj4gYWNj ZXNzZXMgb3IgYWNjZXNzZXMgdGhhdCBleHBhbmQgYWNyb3NzIG11bHRpcGxlIHJlZ2lzdGVycyBp cyBub3QNCj4gdHJpdmlhbC4NCj4gDQo+IFRoZSBoYW5kbGVycyBmb3IgdGhlIHJlZ2lzdGVycyBh cmUgYWRkZWQgdG8gYSBsaW5rZWQgbGlzdCB0aGF0J3Mga2VlcA0KPiBzb3J0ZWQgYXQgYWxsIHRp bWVzLiBCb3RoIHRoZSByZWFkIGFuZCB3cml0ZSBoYW5kbGVycyBzdXBwb3J0IGFjY2Vzc2VzDQo+ IHRoYXQgZXhwYW5kIGFjcm9zcyBtdWx0aXBsZSBlbXVsYXRlZCByZWdpc3RlcnMgYW5kIGNvbnRh aW4gZ2FwcyBub3QNCj4gZW11bGF0ZWQuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUg TW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4NCj4gQWNrZWQtYnk6IFdlaSBMaXUgPHdlaS5s aXUyQGNpdHJpeC5jb20+DQoNCmlvIHBhcnRzOg0KDQpSZXZpZXdlZC1ieTogUGF1bCBEdXJyYW50 IDxwYXVsLmR1cnJhbnRAY2l0cml4LmNvbT4NCg0KPiAtLS0NCj4gQ2M6IElhbiBKYWNrc29uIDxp YW4uamFja3NvbkBldS5jaXRyaXguY29tPg0KPiBDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4 LmNvbT4NCj4gQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4NCj4gQ2M6IEFuZHJl dyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+DQo+IENjOiBQYXVsIER1cnJhbnQg PHBhdWwuZHVycmFudEBjaXRyaXguY29tPg0KPiAtLS0NCj4gQ2hhbmdlcyBzaW5jZSB2NjoNCj4g IC0gQWxpZ24gdGhlIHZwY2kgaGFuZGxlcnMgaW4gdGhlIGxpbmtlciBzY3JpcHQuDQo+ICAtIFN3 aXRjaCBhZGQvcmVtb3ZlIHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byB0YWtlIGEgdnBjaSBwYXJhbWV0 ZXINCj4gICAgaW5zdGVhZCBvZiBhIHBjaV9kZXYuDQo+ICAtIEV4cGFuZCBjb21tZW50IG9mIG1l cmdlX3Jlc3VsdC4NCj4gIC0gUmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFIGlmIGFjY2Vzc2lu ZyBjZmMgYW5kIGNmOCBpcyBkaXNhYmxlZC4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjU6DQo+ICAt IFVzZSBhIHNwaW5sb2NrIHBlciBwY2kgZGV2aWNlLg0KPiAgLSBVc2UgdGhlIHJlY2VudGx5IGlu dHJvZHVjZWQgcGNpX3NiZGZfdCB0eXBlLg0KPiAgLSBGaXggdGVzdCBoYXJuZXNzIHRvIHVzZSB0 aGUgcmlnaHQgaGFuZGxlciB0eXBlIGFuZCB0aGUgbmV3bHkNCj4gICAgaW50cm9kdWNlZCBsb2Nr Lg0KPiAgLSBNb3ZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgdnBjaSBzZWN0aW9ucyBpbiB0aGUgbGlu a2VyIHNjcmlwdHMuDQo+ICAtIENvbnN0aWZ5IGRvbWFpbiBhbmQgcGNpX2RldiBpbiB2cGNpX3ty ZWFkL3dyaXRlfS4NCj4gIC0gRml4IHR5cG9zIGluIGNvbW1lbnRzLg0KPiAgLSBVc2UgX1hFTl9W UENJX0hfIGFzIGhlYWRlciBndWFyZC4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjQ6DQo+ICogVXNl ci1zcGFjZSB0ZXN0IGhhcm5lc3M6DQo+ICAtIERvIG5vdCByZWRpcmVjdCB0aGUgb3V0cHV0IG9m IHRoZSB0ZXN0Lg0KPiAgLSBBZGQgbWFpbi5jIGFuZCBlbXVsLmggYXMgZGVwZW5kZW5jaWVzIG9m IHRoZSBNYWtlZmlsZSB0YXJnZXQuDQo+ICAtIFVzZSB0aGUgc2FtZSBydWxlIHRvIG1vZGlmeSB0 aGUgdnBjaSBhbmQgbGlzdCBoZWFkZXJzLg0KPiAgLSBSZW1vdmUgdW5kZXJzY29yZXMgZnJvbSBs b2NhbCBtYWNybyB2YXJpYWJsZXMuDQo+ICAtIEFkZCBfY2hlY2sgc3VmZml4IHRvIHRoZSB0ZXN0 IGhhcm5lc3MgbXVsdGlyZWFkIGZ1bmN0aW9uLg0KPiAgLSBDaGFuZ2UgdGhlIHZhbHVlIHdyaXR0 ZW4gYnkgZXZlcnkgZGlmZmVyZW50IHNpemUgaW4gdGhlIG11bHRpd3JpdGUNCj4gICAgdGVzdC4N Cj4gIC0gVXNlIHsgfSB0byBpbml0aWFsaXplIHRoZSByMTYgYW5kIHIyMCBhcnJheXMgKGluc3Rl YWQgb2YgeyAwIH0pLg0KPiAgLSBQZXJmb3JtIHNvbWUgb2YgdGhlIHJlYWQgY2hlY2tzIHdpdGgg dGhlIGxvY2FsIHZhcmlhYmxlIGRpcmVjdGx5Lg0KPiAgLSBFeHBhbmQgc29tZSBjb21tZW50cy4N Cj4gIC0gSW1wbGVtZW50IGEgZHVtbXkgcndsb2NrLg0KPiAqIEh5cGVydmlzb3IgY29kZToNCj4g IC0gR3VhcmQgdGhlIGxpbmtlciBzY3JpcHQgY2hhbmdlcyB3aXRoIENPTkZJR19IQVNfUENJLg0K PiAgLSBSZW5hbWUgdnBjaV9hY2Nlc3NfY2hlY2sgdG8gdnBjaV9hY2Nlc3NfYWxsb3dlZCBhbmQg bWFrZSBpdCByZXR1cm4NCj4gICAgYm9vbC4NCj4gIC0gTWFrZSBodm1fcGNpX2RlY29kZV9hZGRy IHJldHVybiB0aGUgcmVnaXN0ZXIgYXMgcmV0dXJuIHZhbHVlLg0KPiAgLSBVc2UgfjMgaW5zdGVh ZCBvZiAweGZmZmMgdG8gcmVtb3ZlIHRoZSByZWdpc3RlciBvZmZzZXQgd2hlbg0KPiAgICBjaGVj a2luZyBhY2Nlc3NlcyB0byBJTyBwb3J0cy4NCj4gIC0gcy9oZWFkL3ByZXYgaW4gdnBjaV9hZGRf cmVnaXN0ZXIuDQo+ICAtIEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgJiBpbiB2cGNpX2FkZF9yZWdp c3Rlci4NCj4gIC0gRml4IHJlZ2lzdGVyIHJlbW92YWwuDQo+ICAtIENoYW5nZSB0aGUgQlVHcyBp biB2cGNpX3tyZWFkL3dyaXRlfV9odyBoZWxwZXJzIHRvDQo+ICAgIEFTU0VSVF9VTlJFQUNIQUJM RS4NCj4gIC0gTWFrZSBtZXJnZV9yZXN1bHQgc3RhdGljIGFuZCBjaGFuZ2UgdGhlIGNvbXB1dGF0 aW9uIG9mIHRoZSBtYXNrIHRvDQo+ICAgIGF2b2lkIHVzaW5nIGEgdWludDY0X3QuDQo+ICAtIE1v ZGlmeSB2cGNpX3JlYWQgdG8gb25seSByZWFkIGZyb20gaGFyZHdhcmUgdGhlIG5vdC1lbXVsYXRl ZCBnYXBzLg0KPiAgLSBSZW1vdmUgdGhlIHZwY2lfdmFsIHVuaW9uIGFuZCB1c2UgYSB1aW50MzJf dCBpbnN0ZWFkLg0KPiAgLSBDaGFuZ2UgaGFuZGxlciByZWFkIHR5cGUgdG8gcmV0dXJuIGEgdWlu dDMyX3QgaW5zdGVhZCBvZiBtb2RpZnlpbmcNCj4gICAgYSB2YXJpYWJsZSBwYXNzZWQgYnkgcmVm ZXJlbmNlLg0KPiAgLSBDb25zdGlmeSB0aGUgZGF0YSBvcGFxdWUgcGFyYW1ldGVyIG9mIHJlYWQg aGFuZGxlcnMuDQo+ICAtIENoYW5nZSB0aGUgc2l6ZSBwYXJhbWV0ZXIgb2YgdGhlIHZwY2lfe3Jl YWQvd3JpdGV9IGZ1bmN0aW9ucyB0bw0KPiAgICB1bnNpZ25lZCBpbnQuDQo+ICAtIFBsYWNlIHRo ZSBhcnJheSBvZiBpbml0aWFsaXphdGlvbiBoYW5kbGVycyBpbiBpbml0LnJvZGF0YSBvcg0KPiAg ICAucm9kYXRhIGRlcGVuZGluZyBvbiB3aGV0aGVyIGxhdGUtaHdkb20gaXMgZW5hYmxlZC4NCj4g IC0gUmVtb3ZlIHRoZSBwY2lfZGV2cyBsb2NrLCBhc3N1bWUgdGhlIERvbTAgaXMgd2VsbCBiZWhh dmVkIGFuZCB3b24ndA0KPiAgICByZW1vdmUgdGhlIGRldmljZSB3aGlsZSB0cnlpbmcgdG8gYWNj ZXNzIGl0Lg0KPiAgLSBDaGFuZ2UgdGhlIHJlY3Vyc2l2ZSBzcGlubG9jayBpbnRvIGEgcncgbG9j ayBmb3IgcGVyZm9ybWFuY2UNCj4gICAgcmVhc29ucy4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjM6 DQo+ICogVXNlci1zcGFjZSB0ZXN0IGhhcm5lc3M6DQo+ICAtIEZpeCBzcGFjZXMgaW4gY29udGFp bmVyX29mIG1hY3JvLg0KPiAgLSBJbXBsZW1lbnQgYSBkdW1teSBsb2NraW5nIGZ1bmN0aW9ucy4N Cj4gIC0gUmVtb3ZlICdjdXJyZW50JyBtYWNybyBtYWtlIGN1cnJlbnQgYSBwb2ludGVyIHRvIHRo ZSBzdGF0aWNhbGx5DQo+ICAgIGFsbG9jYXRlZCB2cGN1Lg0KPiAgLSBSZW1vdmUgdW5uZWVkZWQg cGFyZW50aGVzZXMgaW4gdGhlIHBjaV9jb25mX3JlYWRYIG1hY3Jvcy4NCj4gIC0gRml4IHRoZSBu YW1lIG9mIHRoZSB3cml0ZSB0ZXN0IG1hY3JvLg0KPiAgLSBSZW1vdmUgdGhlIGR1bW15IEVYUE9S VF9TWU1CT0wgbWFjcm8gKHRoaXMgd2FzIG5lZWRlZCBieSB0aGUgUkINCj4gICAgY29kZSBvbmx5 KS4NCj4gIC0gSW1wb3J0IHRoZSBtYXggbWFjcm8uDQo+ICAtIFRlc3QgYWxsIHBvc3NpYmxlIHJl YWQvd3JpdGUgc2l6ZSBjb21iaW5hdGlvbnMgd2l0aCBhbGwgcG9zc2libGUNCj4gICAgZW11bGF0 ZWQgcmVnaXN0ZXIgc2l6ZXMuDQo+ICAtIEludHJvZHVjZSBhIHRlc3QgZm9yIHJlZ2lzdGVyIHJl bW92YWwuDQo+ICogSHlwZXJ2aXNvciBjb2RlOg0KPiAgLSBVc2UgYSBzb3J0ZWQgbGlzdCBpbiBv cmRlciB0byBzdG9yZSB0aGUgY29uZmlnIHNwYWNlIGhhbmRsZXJzLg0KPiAgLSBSZW1vdmUgc29t ZSB1bm5lZWRlZCAnZWxzZScgYnJhbmNoZXMuDQo+ICAtIE1ha2UgdGhlIElPIHBvcnQgaGFuZGxl cnMgYWx3YXlzIHJldHVybiBYODZFTVVMX09LQVksIGFuZCBzZXQgdGhlDQo+ICAgIGRhdGEgdG8g YWxsIDEncyBpbiBjYXNlIG9mIHJlYWQgZmFpbHVyZSAod3JpdGUgYXJlIHNpbXBseSBpZ25vcmVk KS4NCj4gIC0gSW4gaHZtX3NlbGVjdF9pb3JlcV9zZXJ2ZXIgcmV1c2UgbG9jYWwgdmFyaWFibGVz IHdoZW4gY2FsbGluZw0KPiAgICBYRU5fRE1PUF9QQ0lfU0JERi4NCj4gIC0gU3RvcmUgdGhlIHBv aW50ZXJzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgaW4gdGhlIC5yb2RhdGENCj4g ICAgc2VjdGlvbi4NCj4gIC0gRG8gbm90IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHhlbl92 cGNpX2FkZF9oYW5kbGVycyBpbg0KPiAgICBzZXR1cF9vbmVfaHdkb21fZGV2aWNlLg0KPiAgLSBS ZW1vdmUgdGhlIHZwY2lfaW5pdCBtYWNyby4NCj4gIC0gRG8gbm90IGhpZGUgdGhlIHBvaW50ZXJz IGluc2lkZSBvZiB0aGUgdnBjaV97cmVhZC93cml0ZX1fdA0KPiAgICB0eXBlZGVmcy4NCj4gIC0g UmVuYW1lIHByaXZfZGF0YSB0byBwcml2YXRlIGluIHZwY2lfcmVnaXN0ZXIuDQo+ICAtIFNpbXBs aWZ5IGNoZWNraW5nIGZvciByZWdpc3RlciBvdmVybGFwIGluIHZwY2lfcmVnaXN0ZXJfY21wLg0K PiAgLSBDaGVjayB0aGF0IHRoZSBvZmZzZXQgYW5kIHRoZSBsZW5ndGggbWF0Y2ggYmVmb3JlIHJl bW92aW5nIGENCj4gICAgcmVnaXN0ZXIgaW4geGVuX3ZwY2lfcmVtb3ZlX3JlZ2lzdGVyLg0KPiAg LSBNYWtlIHZwY2lfcmVhZF9odyByZXR1cm4gYSB2YWx1ZSByYXRoZXIgdGhhbiBzdG9yaW5nIGl0 IGluIGENCj4gICAgcG9pbnRlciBwYXNzZWQgYnkgcGFyYW1ldGVyLg0KPiAgLSBIYW5kbGVyIGRp c3BhdGNoZXIgZnVuY3Rpb25zIHZwY2lfe3JlYWQvd3JpdGV9IG5vIGxvbmdlciByZXR1cm4gYW4N Cj4gICAgZXJyb3IgY29kZSwgZXJyb3JzIG9uIHJlYWRzL3dyaXRlcyBzaG91bGQgYmUgdHJlYXRl ZCBsaWtlIGhhcmR3YXJlDQo+ICAgICh3cml0ZXMgaWdub3JlZCwgcmVhZHMgcmV0dXJuIGFsbCAx J3Mgb3IgZ2FyYmFnZSkuDQo+ICAtIE1ha2Ugc3VyZSBwY2lkZXZzIGlzIGxvY2tlZCBiZWZvcmUg Y2FsbGluZyBwY2lfZ2V0X3BkZXZfYnlfZG9tYWluLg0KPiAgLSBVc2UgYSByZWN1cnNpdmUgc3Bp bmxvY2sgZm9yIHRoZSB2cGNpIGxvY2ssIHNvIHRoYXQgc3Bpbl9pc19sb2NrZWQNCj4gICAgY2hl Y2tzIHRoYXQgdGhlIGN1cnJlbnQgQ1BVIGlzIGhvbGRpbmcgdGhlIGxvY2suDQo+ICAtIE1ha2Ug dGhlIGNvZGUgbGVzcyBlcnJvci1jaGF0dHkgYnkgcmVtb3Zpbmcgc29tZSBvZiB0aGUgcHJpbnRr J3MuDQo+ICAtIFBhc3MgdGhlIHNsb3QgYW5kIHRoZSBmdW5jdGlvbiBhcyBzZXBhcmF0ZSBwYXJh bWV0ZXJzIHRvIHRoZQ0KPiAgICBoYW5kbGVyIGRpc3BhdGNoZXJzIChpbnN0ZWFkIG9mIHBhc3Np bmcgZGV2Zm4pLg0KPiAgLSBBbGxvdyBoYW5kbGVycyB0byBiZSByZWdpc3RlcmVkIHdpdGggZWl0 aGVyIGEgcmVhZCBvciB3cml0ZQ0KPiAgICBmdW5jdGlvbiBvbmx5LCB0aGUgbWlzc2luZyBoYW5k bGVyIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBkdW1teQ0KPiAgICBoYW5kbGVyICh3cml0ZXMgaWdu b3JlZCwgcmVhZHMgcmV0dXJuIDEncykuDQo+ICAtIEludHJvZHVjZSBQQ0lfQ0ZHX1NQQUNFXyog ZGVmaW5lcyBmcm9tIExpbnV4Lg0KPiAgLSBTaW1wbGlmeSB0aGUgaGFuZGxlciBkaXNwYXRjaGVy cyBieSByZW1vdmluZyB0aGUgcmVjdXJzaW9uLCBub3cgdGhlDQo+ICAgIGRpc3BhdGNoZXJzIGl0 ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBzb3J0ZWQgaGFuZGxlcnMgYW5kIGNhbGwgdGhlbQ0KPiAg ICBpbiBvcmRlci4NCj4gIC0gUmVtb3ZlIHRoZSBHRU5NQVNLX0JZVEVTLCBTSElGVF9SSUdIVF9C WVRFUyBhbmQgQUREX1JFU1VMVA0KPiBtYWNyb3MsDQo+ICAgIGFuZCBpbnN0ZWFkIHByb3ZpZGUg YSBtZXJnZV9yZXN1bHQgZnVuY3Rpb24gaW4gb3JkZXIgdG8gbWVyZ2UgYQ0KPiAgICByZWdpc3Rl ciBvdXRwdXQgaW50byBhIHBhcnRpYWwgcmVzdWx0Lg0KPiAgLSBSZW5hbWUgdGhlIGZpZWxkcyBv ZiB0aGUgdnBjaV92YWwgdW5pb24gdG8gdTgvdTE2L3UzMi4NCj4gIC0gUmVtb3ZlIHRoZSByZXR1 cm4gdmFsdWVzIGZyb20gdGhlIHJlYWQvd3JpdGUgaGFuZGxlcnMsIGVycm9ycw0KPiAgICBzaG91 bGQgYmUgaGFuZGxlZCBpbnRlcm5hbGx5IGFuZCBzaWduYWxlZCBhcyB3b3VsZCBiZSBkb25lIG9u DQo+ICAgIG5hdGl2ZSBoYXJkd2FyZS4NCj4gIC0gUmVtb3ZlIHRoZSB1c2FnZSBvZiB0aGUgR0VO TUFTSyBtYWNyby4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjI6DQo+ICAtIEdlbmVyYWxpemUgdGhl IFBDSSBhZGRyZXNzIGRlY29kaW5nIGFuZCB1c2UgaXQgZm9yIElPUkVRIGNvZGUgYWxzby4NCj4g DQo+IENoYW5nZXMgc2luY2UgdjE6DQo+ICAtIEFsbG93IGFjY2VzcyB0byBjcm9zcyBhIHdvcmQt Ym91bmRhcnkuDQo+ICAtIEFkZCBsb2NraW5nLg0KPiAgLSBBZGQgY2xlYW51cCB0byB4ZW5fdnBj aV9hZGRfaGFuZGxlcnMgaW4gY2FzZSBvZiBmYWlsdXJlLg0KPiAtLS0NCj4gIC5naXRpZ25vcmUg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArDQo+ICB0b29scy9saWJ4bC9saWJ4bF94ODYu YyAgICAgICAgICAgfCAgIDIgKy0NCj4gIHRvb2xzL3Rlc3RzL01ha2VmaWxlICAgICAgICAgICAg ICB8ICAgMSArDQo+ICB0b29scy90ZXN0cy92cGNpL01ha2VmaWxlICAgICAgICAgfCAgMzcgKysr Kw0KPiAgdG9vbHMvdGVzdHMvdnBjaS9lbXVsLmggICAgICAgICAgIHwgMTMzICsrKysrKysrKysr DQo+ICB0b29scy90ZXN0cy92cGNpL21haW4uYyAgICAgICAgICAgfCAzMDkgKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gIHhlbi9hcmNoL2FybS94ZW4ubGRzLlMgICAgICAgICAgICB8ICAx NCArKw0KPiAgeGVuL2FyY2gveDg2L2RvbWFpbi5jICAgICAgICAgICAgIHwgIDE4ICstDQo+ICB4 ZW4vYXJjaC94ODYvaHZtL2h2bS5jICAgICAgICAgICAgfCAgIDIgKw0KPiAgeGVuL2FyY2gveDg2 L2h2bS9pby5jICAgICAgICAgICAgIHwgMTAzICsrKysrKysrKw0KPiAgeGVuL2FyY2gveDg2L3Nl dHVwLmMgICAgICAgICAgICAgIHwgICAzICstDQo+ICB4ZW4vYXJjaC94ODYveGVuLmxkcy5TICAg ICAgICAgICAgfCAgMTQgKysNCj4gIHhlbi9kcml2ZXJzL01ha2VmaWxlICAgICAgICAgICAgICB8 ICAgMiArLQ0KPiAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvcGNpLmMgICAgIHwgIDEwICstDQo+ ICB4ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlICAgICAgICAgfCAgIDEgKw0KPiAgeGVuL2RyaXZl cnMvdnBjaS92cGNpLmMgICAgICAgICAgIHwgNDUxDQo+ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+ICB4ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oICAgICAgfCAg IDEgKw0KPiAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaCAgICAgIHwgICAzICsNCj4gIHhl bi9pbmNsdWRlL3B1YmxpYy9hcmNoLXg4Ni94ZW4uaCB8ICAgNSArLQ0KPiAgeGVuL2luY2x1ZGUv eGVuL3BjaS5oICAgICAgICAgICAgIHwgICAzICsNCj4gIHhlbi9pbmNsdWRlL3hlbi9wY2lfcmVn cy5oICAgICAgICB8ICAgOCArDQo+ICB4ZW4vaW5jbHVkZS94ZW4vdnBjaS5oICAgICAgICAgICAg fCAgNTMgKysrKysNCj4gIDIyIGZpbGVzIGNoYW5nZWQsIDExNjYgaW5zZXJ0aW9ucygrKSwgMTAg ZGVsZXRpb25zKC0pDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdHMvdnBjaS9NYWtl ZmlsZQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3RzL3ZwY2kvZW11bC5oDQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdHMvdnBjaS9tYWluLmMNCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCB4ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg eGVuL2RyaXZlcnMvdnBjaS92cGNpLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVk ZS94ZW4vdnBjaS5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUN Cj4gaW5kZXggZDY0YjAzZDA2Yy4uY2ZlNTRjNmU4ZiAxMDA2NDQNCj4gLS0tIGEvLmdpdGlnbm9y ZQ0KPiArKysgYi8uZ2l0aWdub3JlDQo+IEBAIC0yNDUsNiArMjQ1LDkgQEAgdG9vbHMvdGVzdHMv cmVncmVzc2lvbi9idWlsZC8qDQo+ICB0b29scy90ZXN0cy9yZWdyZXNzaW9uL2Rvd25sb2Fkcy8q DQo+ICB0b29scy90ZXN0cy9tZW0tc2hhcmluZy9tZW1zaHJ0b29sDQo+ICB0b29scy90ZXN0cy9t Y2UtdGVzdC90b29scy94ZW4tbWNlaW5qDQo+ICt0b29scy90ZXN0cy92cGNpL2xpc3QuaA0KPiAr dG9vbHMvdGVzdHMvdnBjaS92cGNpLltoY10NCj4gK3Rvb2xzL3Rlc3RzL3ZwY2kvdGVzdF92cGNp DQo+ICB0b29scy94Y3V0aWxzL2xzZXZ0Y2huDQo+ICB0b29scy94Y3V0aWxzL3JlYWRub3Rlcw0K PiAgdG9vbHMveGVuYmFja2VuZGQvX3BhdGhzLmgNCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhs L2xpYnhsX3g4Ni5jIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMNCj4gaW5kZXggNWY5MWZlNGY5 Mi4uOGY2YTViYzZmMiAxMDA2NDQNCj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMNCj4g KysrIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMNCj4gQEAgLTksNyArOSw3IEBAIGludCBsaWJ4 bF9fYXJjaF9kb21haW5fcHJlcGFyZV9jb25maWcobGlieGxfX2djICpnYywNCj4gIHsNCj4gICAg ICBzd2l0Y2goZF9jb25maWctPmNfaW5mby50eXBlKSB7DQo+ICAgICAgY2FzZSBMSUJYTF9ET01B SU5fVFlQRV9IVk06DQo+IC0gICAgICAgIHhjX2NvbmZpZy0+ZW11bGF0aW9uX2ZsYWdzID0gWEVO X1g4Nl9FTVVfQUxMOw0KPiArICAgICAgICB4Y19jb25maWctPmVtdWxhdGlvbl9mbGFncyA9IChY RU5fWDg2X0VNVV9BTEwgJg0KPiB+WEVOX1g4Nl9FTVVfVlBDSSk7DQo+ICAgICAgICAgIGJyZWFr Ow0KPiAgICAgIGNhc2UgTElCWExfRE9NQUlOX1RZUEVfUFZIOg0KPiAgICAgICAgICBpZiAobGli eGxfZGVmYm9vbF92YWwoZF9jb25maWctPmJfaW5mby5hcGljKSkNCj4gZGlmZiAtLWdpdCBhL3Rv b2xzL3Rlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdHMvTWFrZWZpbGUNCj4gaW5kZXggNzE2Mjk0 NTEyMS4uZjY5NDJhOTNmYiAxMDA2NDQNCj4gLS0tIGEvdG9vbHMvdGVzdHMvTWFrZWZpbGUNCj4g KysrIGIvdG9vbHMvdGVzdHMvTWFrZWZpbGUNCj4gQEAgLTEzLDYgKzEzLDcgQEAgZW5kaWYNCj4g IFNVQkRJUlMtJChDT05GSUdfWDg2KSArPSB4ODZfZW11bGF0b3INCj4gIFNVQkRJUlMteSArPSB4 ZW4tYWNjZXNzDQo+ICBTVUJESVJTLXkgKz0geGVuc3RvcmUNCj4gK1NVQkRJUlMtJChDT05GSUdf SEFTX1BDSSkgKz0gdnBjaQ0KPiANCj4gIC5QSE9OWTogYWxsIGNsZWFuIGluc3RhbGwgZGlzdGNs ZWFuIHVuaW5zdGFsbA0KPiAgYWxsIGNsZWFuIGRpc3RjbGVhbjogJTogc3ViZGlycy0lDQo+IGRp ZmYgLS1naXQgYS90b29scy90ZXN0cy92cGNpL01ha2VmaWxlIGIvdG9vbHMvdGVzdHMvdnBjaS9N YWtlZmlsZQ0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5lNDVm Y2I1Y2Q5DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdG9vbHMvdGVzdHMvdnBjaS9NYWtlZmls ZQ0KPiBAQCAtMCwwICsxLDM3IEBADQo+ICtYRU5fUk9PVD0kKENVUkRJUikvLi4vLi4vLi4NCj4g K2luY2x1ZGUgJChYRU5fUk9PVCkvdG9vbHMvUnVsZXMubWsNCj4gKw0KPiArVEFSR0VUIDo9IHRl c3RfdnBjaQ0KPiArDQo+ICsuUEhPTlk6IGFsbA0KPiArYWxsOiAkKFRBUkdFVCkNCj4gKw0KPiAr LlBIT05ZOiBydW4NCj4gK3J1bjogJChUQVJHRVQpDQo+ICsJLi8kKFRBUkdFVCkNCj4gKw0KPiAr JChUQVJHRVQpOiB2cGNpLmMgdnBjaS5oIGxpc3QuaCBtYWluLmMgZW11bC5oDQo+ICsJJChIT1NU Q0MpIC1nIC1vICRAIHZwY2kuYyBtYWluLmMNCj4gKw0KPiArLlBIT05ZOiBjbGVhbg0KPiArY2xl YW46DQo+ICsJcm0gLXJmICQoVEFSR0VUKSAqLm8gKn4gdnBjaS5oIHZwY2kuYyBsaXN0LmgNCj4g Kw0KPiArLlBIT05ZOiBkaXN0Y2xlYW4NCj4gK2Rpc3RjbGVhbjogY2xlYW4NCj4gKw0KPiArLlBI T05ZOiBpbnN0YWxsDQo+ICtpbnN0YWxsOg0KPiArDQo+ICt2cGNpLmM6ICQoWEVOX1JPT1QpL3hl bi9kcml2ZXJzL3ZwY2kvdnBjaS5jDQo+ICsJIyBUcmljayB0aGUgY29tcGlsZXIgc28gaXQgZG9l c24ndCBjb21wbGFpbiBhYm91dCBtaXNzaW5nIHN5bWJvbHMNCj4gKwlzZWQgLWUgJy8jaW5jbHVk ZS9kJyBcDQo+ICsJICAgIC1lICcxczteOyNpbmNsdWRlICJlbXVsLmgiXA0KPiArCSAgICAgICAg ICAgICB2cGNpX3JlZ2lzdGVyX2luaXRfdCAqY29uc3QgX19zdGFydF92cGNpX2FycmF5WzFdXDtc DQo+ICsJICAgICAgICAgICAgIHZwY2lfcmVnaXN0ZXJfaW5pdF90ICpjb25zdCBfX2VuZF92cGNp X2FycmF5WzFdXDtcDQo+ICsJICAgICAgICAgICAgIDsnIDwkPCA+JEANCj4gKw0KPiArbGlzdC5o OiAkKFhFTl9ST09UKS94ZW4vaW5jbHVkZS94ZW4vbGlzdC5oDQo+ICt2cGNpLmg6ICQoWEVOX1JP T1QpL3hlbi9pbmNsdWRlL3hlbi92cGNpLmgNCj4gK2xpc3QuaCB2cGNpLmg6DQo+ICsJc2VkIC1l ICcvI2luY2x1ZGUvZCcgPCQ8ID4kQA0KPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdHMvdnBjaS9l bXVsLmggYi90b29scy90ZXN0cy92cGNpL2VtdWwuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMDAwLi5lYmQ2NzY3MjNkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv dG9vbHMvdGVzdHMvdnBjaS9lbXVsLmgNCj4gQEAgLTAsMCArMSwxMzMgQEANCj4gKy8qDQo+ICsg KiBVbml0IHRlc3RzIGZvciB0aGUgZ2VuZXJpYyB2UENJIGhhbmRsZXIgY29kZS4NCj4gKyAqDQo+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgUiZEDQo+ICsgKg0KPiArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcg0KPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiArICoNCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LA0KPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YNCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gR05VDQo+ICsgKiBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsgKg0KPiArICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZQ0KPiA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfVEVTVF9WUENJXw0KPiArI2Rl ZmluZSBfVEVTVF9WUENJXw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkbGliLmg+DQo+ICsjaW5jbHVk ZSA8c3RkaW8uaD4NCj4gKyNpbmNsdWRlIDxzdGRkZWYuaD4NCj4gKyNpbmNsdWRlIDxzdGRpbnQu aD4NCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+DQo+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gKyNp bmNsdWRlIDxhc3NlcnQuaD4NCj4gKw0KPiArI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBl LCBtZW1iZXIpICh7ICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICAgICAgdHlwZW9mKCgo dHlwZSAqKTApLT5tZW1iZXIpICptcHRyID0gKHB0cik7ICAgICAgICAgICAgICBcDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KPiArICAgICAgICAodHlwZSAqKSgoY2hhciAqKW1wdHIgLSBvZmZzZXRvZih0eXBlLCBt ZW1iZXIpKTsgICAgICAgIFwNCj4gK30pDQo+ICsNCj4gKyNkZWZpbmUgc21wX3dtYigpDQo+ICsj ZGVmaW5lIHByZWZldGNoKHgpIF9fYnVpbHRpbl9wcmVmZXRjaCh4KQ0KPiArI2RlZmluZSBBU1NF UlQoeCkgYXNzZXJ0KHgpDQo+ICsjZGVmaW5lIF9fbXVzdF9jaGVjayBfX2F0dHJpYnV0ZV9fKChf X3dhcm5fdW51c2VkX3Jlc3VsdF9fKSkNCj4gKw0KPiArI2luY2x1ZGUgImxpc3QuaCINCj4gKw0K PiArc3RydWN0IGRvbWFpbiB7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgcGNpX2RldiB7DQo+ICsg ICAgc3RydWN0IHZwY2kgKnZwY2k7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgdmNwdQ0KPiArew0K PiArICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKmRvbWFpbjsNCj4gK307DQo+ICsNCj4gK2V4dGVy biBjb25zdCBzdHJ1Y3QgdmNwdSAqY3VycmVudDsNCj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNp X2RldiB0ZXN0X3BkZXY7DQo+ICsNCj4gK3R5cGVkZWYgYm9vbCBzcGlubG9ja190Ow0KPiArI2Rl ZmluZSBzcGluX2xvY2tfaW5pdChsKSAoKihsKSA9IGZhbHNlKQ0KPiArI2RlZmluZSBzcGluX2xv Y2sobCkgKCoobCkgPSB0cnVlKQ0KPiArI2RlZmluZSBzcGluX3VubG9jayhsKSAoKihsKSA9IGZh bHNlKQ0KPiArDQo+ICt0eXBlZGVmIHVuaW9uIHsNCj4gKyAgICB1aW50MzJfdCBzYmRmOw0KPiAr ICAgIHN0cnVjdCB7DQo+ICsgICAgICAgIHVuaW9uIHsNCj4gKyAgICAgICAgICAgIHVpbnQxNl90 IGJkZjsNCj4gKyAgICAgICAgICAgIHN0cnVjdCB7DQo+ICsgICAgICAgICAgICAgICAgdW5pb24g ew0KPiArICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCBmdW5jIDogMywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGV2ICA6IDU7DQo+ICsgICAgICAgICAgICAgICAgICAgIH07DQo+ICsgICAgICAgICAgICAg ICAgICAgIHVpbnQ4X3QgICAgIGV4dGZ1bmM7DQo+ICsgICAgICAgICAgICAgICAgfTsNCj4gKyAg ICAgICAgICAgICAgICB1aW50OF90ICAgICAgICAgYnVzOw0KPiArICAgICAgICAgICAgfTsNCj4g KyAgICAgICAgfTsNCj4gKyAgICAgICAgdWludDE2X3QgICAgICAgICAgICAgICAgc2VnOw0KPiAr ICAgIH07DQo+ICt9IHBjaV9zYmRmX3Q7DQo+ICsNCj4gKyNpbmNsdWRlICJ2cGNpLmgiDQo+ICsN Cj4gKyNkZWZpbmUgX19od2RvbV9pbml0DQo+ICsNCj4gKyNkZWZpbmUgaGFzX3ZwY2koZCkgdHJ1 ZQ0KPiArDQo+ICsjZGVmaW5lIHh6YWxsb2ModHlwZSkgKCh0eXBlICopY2FsbG9jKDEsIHNpemVv Zih0eXBlKSkpDQo+ICsjZGVmaW5lIHhtYWxsb2ModHlwZSkgKCh0eXBlICopbWFsbG9jKHNpemVv Zih0eXBlKSkpDQo+ICsjZGVmaW5lIHhmcmVlKHApIGZyZWUocCkNCj4gKw0KPiArI2RlZmluZSBw Y2lfZ2V0X3BkZXZfYnlfZG9tYWluKC4uLikgJnRlc3RfcGRldg0KPiArDQo+ICsvKiBEdW1teSBu YXRpdmUgaGVscGVycy4gV3JpdGVzIGFyZSBpZ25vcmVkLCByZWFkcyByZXR1cm4gMSdzLiAqLw0K PiArI2RlZmluZSBwY2lfY29uZl9yZWFkOCguLi4pICAgICAweGZmDQo+ICsjZGVmaW5lIHBjaV9j b25mX3JlYWQxNiguLi4pICAgIDB4ZmZmZg0KPiArI2RlZmluZSBwY2lfY29uZl9yZWFkMzIoLi4u KSAgICAweGZmZmZmZmZmDQo+ICsjZGVmaW5lIHBjaV9jb25mX3dyaXRlOCguLi4pDQo+ICsjZGVm aW5lIHBjaV9jb25mX3dyaXRlMTYoLi4uKQ0KPiArI2RlZmluZSBwY2lfY29uZl93cml0ZTMyKC4u LikNCj4gKw0KPiArI2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX0VYUF9TSVpFIDQwOTYNCj4gKw0KPiAr I2RlZmluZSBCVUcoKSBhc3NlcnQoMCkNCj4gKyNkZWZpbmUgQVNTRVJUX1VOUkVBQ0hBQkxFKCkg YXNzZXJ0KDApDQo+ICsNCj4gKyNkZWZpbmUgbWluKHgsIHkpICh7ICAgICAgICAgICAgICAgICAg ICBcDQo+ICsgICAgICAgIGNvbnN0IHR5cGVvZih4KSB0eCA9ICh4KTsgICAgICAgXA0KPiArICAg ICAgICBjb25zdCB0eXBlb2YoeSkgdHkgPSAoeSk7ICAgICAgIFwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgICAgICh2b2lkKSAoJnR4ID09ICZ0 eSk7ICAgICAgICAgICAgXA0KPiArICAgICAgICB0eCA8IHR5ID8gdHggOiB0eTsgICAgICAgICAg ICAgIFwNCj4gK30pDQo+ICsNCj4gKyNkZWZpbmUgbWF4KHgsIHkpICh7ICAgICAgICAgICAgICAg ICAgICBcDQo+ICsgICAgICAgIGNvbnN0IHR5cGVvZih4KSB0eCA9ICh4KTsgICAgICAgXA0KPiAr ICAgICAgICBjb25zdCB0eXBlb2YoeSkgdHkgPSAoeSk7ICAgICAgIFwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgICAgICh2b2lkKSAoJnR4ID09 ICZ0eSk7ICAgICAgICAgICAgXA0KPiArICAgICAgICB0eCA+IHR5ID8gdHggOiB0eTsgICAgICAg ICAgICAgIFwNCj4gK30pDQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICsvKg0KPiArICogTG9jYWwg dmFyaWFibGVzOg0KPiArICogbW9kZTogQw0KPiArICogYy1maWxlLXN0eWxlOiAiQlNEIg0KPiAr ICogYy1iYXNpYy1vZmZzZXQ6IDQNCj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbA0KPiArICog RW5kOg0KPiArICovDQo+IGRpZmYgLS1naXQgYS90b29scy90ZXN0cy92cGNpL21haW4uYyBiL3Rv b2xzL3Rlc3RzL3ZwY2kvbWFpbi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAuLmI5YTBhNjAwNmINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi90b29scy90ZXN0 cy92cGNpL21haW4uYw0KPiBAQCAtMCwwICsxLDMwOSBAQA0KPiArLyoNCj4gKyAqIFVuaXQgdGVz dHMgZm9yIHRoZSBnZW5lcmljIHZQQ0kgaGFuZGxlciBjb2RlLg0KPiArICoNCj4gKyAqIENvcHly aWdodCAoQykgMjAxNyBDaXRyaXggU3lzdGVtcyBSJkQNCj4gKyAqDQo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ICsg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ICsgKg0KPiArICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ICsgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZg0KPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQ0KPiBHTlUNCj4gKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4NCj4gKyAqDQo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IElmIG5vdCwgc2VlDQo+IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSAiZW11bC5oIg0KPiArDQo+ICsvKiBTaW5nbGUg dmNwdSAoY3VycmVudCksIGFuZCBzaW5nbGUgZG9tYWluIHdpdGggYSBzaW5nbGUgUENJIGRldmlj ZS4gKi8NCj4gK3N0YXRpYyBzdHJ1Y3QgdnBjaSB2cGNpOw0KPiArDQo+ICtjb25zdCBzdGF0aWMg c3RydWN0IGRvbWFpbiBkOw0KPiArDQo+ICtjb25zdCBzdHJ1Y3QgcGNpX2RldiB0ZXN0X3BkZXYg PSB7DQo+ICsgICAgLnZwY2kgPSAmdnBjaSwNCj4gK307DQo+ICsNCj4gK2NvbnN0IHN0YXRpYyBz dHJ1Y3QgdmNwdSB2ID0gew0KPiArICAgIC5kb21haW4gPSAmZA0KPiArfTsNCj4gKw0KPiArY29u c3Qgc3RydWN0IHZjcHUgKmN1cnJlbnQgPSAmdjsNCj4gKw0KPiArLyogRHVtbXkgaG9va3MsIHdy aXRlIHN0b3JlcyBkYXRhLCByZWFkIGZldGNoZXMgaXQuICovDQo+ICtzdGF0aWMgdWludDMyX3Qg dnBjaV9yZWFkOChjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsgICAg cmV0dXJuICoodWludDhfdCAqKWRhdGE7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHZwY2lf d3JpdGU4KGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0K PiArICAgICoodWludDhfdCAqKWRhdGEgPSB2YWw7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1aW50 MzJfdCB2cGNpX3JlYWQxNihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50 IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQ0KPiArew0K PiArICAgIHJldHVybiAqKHVpbnQxNl90ICopZGF0YTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgdnBjaV93cml0ZTE2KGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQg cmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbCwgdm9pZCAqZGF0 YSkNCj4gK3sNCj4gKyAgICAqKHVpbnQxNl90ICopZGF0YSA9IHZhbDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHVpbnQzMl90IHZwY2lfcmVhZDMyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1 bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRh dGEpDQo+ICt7DQo+ICsgICAgcmV0dXJuICoodWludDMyX3QgKilkYXRhOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCB2cGNpX3dyaXRlMzIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVu c2lnbmVkIGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFs LCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgICoodWludDMyX3QgKilkYXRhID0gdmFsOw0KPiAr fQ0KPiArDQo+ICsjZGVmaW5lIFZQQ0lfUkVBRChyZWcsIHNpemUsIGRhdGEpICh7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgXA0KPiArICAgIGRhdGEgPSB2cGNpX3JlYWQoKHBjaV9zYmRmX3Qp eyAuc2JkZiA9IDAgfSwgcmVnLCBzaXplKTsgICAgIFwNCj4gK30pDQo+ICsNCj4gKyNkZWZpbmUg VlBDSV9SRUFEX0NIRUNLKHJlZywgc2l6ZSwgZXhwZWN0ZWQpICh7ICAgICAgICAgICAgICAgICBc DQo+ICsgICAgdWludDMyX3QgcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICBWUENJX1JFQUQocmVnLCBzaXplLCBy ZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgYXNzZXJ0KHJk ID09IChleHBlY3RlZCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiAr fSkNCj4gKw0KPiArI2RlZmluZSBWUENJX1dSSVRFKHJlZywgc2l6ZSwgZGF0YSkgKHsgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICB2cGNpX3dyaXRlKChwY2lfc2JkZl90KXsgLnNi ZGYgPSAwIH0sIHJlZywgc2l6ZSwgZGF0YSk7ICAgICBcDQo+ICt9KQ0KPiArDQo+ICsjZGVmaW5l IFZQQ0lfV1JJVEVfQ0hFQ0socmVnLCBzaXplLCBkYXRhKSAoeyAgICAgICAgICAgICAgICAgICAg XA0KPiArICAgIFZQQ0lfV1JJVEUocmVnLCBzaXplLCBkYXRhKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0socmVnLCBzaXplLCBkYXRhKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICt9KQ0KPiArDQo+ICsjZGVmaW5lIFZQQ0lf QUREX1JFRyhmcmVhZCwgZndyaXRlLCBvZmYsIHNpemUsIHN0b3JlKSAgICAgICAgICAgICAgICAg ICAgICAgXA0KPiArICAgIGFzc2VydCghdnBjaV9hZGRfcmVnaXN0ZXIodGVzdF9wZGV2LnZwY2ks IGZyZWFkLCBmd3JpdGUsIG9mZiwgc2l6ZSwgICAgIFwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZzdG9yZSkpDQo+ICsNCj4gKyNkZWZpbmUgVlBDSV9BRERfSU5WQUxJRF9SRUco ZnJlYWQsIGZ3cml0ZSwgb2ZmLCBzaXplKSAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAg YXNzZXJ0KHZwY2lfYWRkX3JlZ2lzdGVyKHRlc3RfcGRldi52cGNpLCBmcmVhZCwgZndyaXRlLCBv ZmYsIHNpemUsIE5VTEwpKQ0KPiArDQo+ICsjZGVmaW5lIFZQQ0lfUkVNT1ZFX1JFRyhvZmYsIHNp emUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiArICAgIGFz c2VydCghdnBjaV9yZW1vdmVfcmVnaXN0ZXIodGVzdF9wZGV2LnZwY2ksIG9mZiwgc2l6ZSkpDQo+ ICsNCj4gKyNkZWZpbmUgVlBDSV9SRU1PVkVfSU5WQUxJRF9SRUcob2ZmLCBzaXplKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgYXNzZXJ0KHZwY2lfcmVtb3ZlX3Jl Z2lzdGVyKHRlc3RfcGRldi52cGNpLCBvZmYsIHNpemUpKQ0KPiArDQo+ICsvKiBSZWFkIGEgMzJi IHJlZ2lzdGVyIHVzaW5nIGFsbCBwb3NzaWJsZSBzaXplcy4gKi8NCj4gK3ZvaWQgbXVsdGlyZWFk NF9jaGVjayh1bnNpZ25lZCBpbnQgcmVnLCB1aW50MzJfdCB2YWwpDQo+ICt7DQo+ICsgICAgdW5z aWduZWQgaW50IGk7DQo+ICsNCj4gKyAgICAvKiBSZWFkIHVzaW5nIGJ5dGVzLiAqLw0KPiArICAg IGZvciAoIGkgPSAwOyBpIDwgNDsgaSsrICkNCj4gKyAgICAgICAgVlBDSV9SRUFEX0NIRUNLKHJl ZyArIGksIDEsICh2YWwgPj4gKGkgKiA4KSkgJiBVSU5UOF9NQVgpOw0KPiArDQo+ICsgICAgLyog UmVhZCB1c2luZyAyYnl0ZXMuICovDQo+ICsgICAgZm9yICggaSA9IDA7IGkgPCAyOyBpKysgKQ0K PiArICAgICAgICBWUENJX1JFQURfQ0hFQ0socmVnICsgaSAqIDIsIDIsICh2YWwgPj4gKGkgKiAy ICogOCkpICYgVUlOVDE2X01BWCk7DQo+ICsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0socmVnLCA0 LCB2YWwpOw0KPiArfQ0KPiArDQo+ICt2b2lkIG11bHRpd3JpdGU0X2NoZWNrKHVuc2lnbmVkIGlu dCByZWcpDQo+ICt7DQo+ICsgICAgdW5zaWduZWQgaW50IGk7DQo+ICsgICAgdWludDMyX3QgdmFs ID0gMHhhMmY1MTczMjsNCj4gKw0KPiArICAgIC8qIFdyaXRlIHVzaW5nIGJ5dGVzLiAqLw0KPiAr ICAgIGZvciAoIGkgPSAwOyBpIDwgNDsgaSsrICkNCj4gKyAgICAgICAgVlBDSV9XUklURV9DSEVD SyhyZWcgKyBpLCAxLCAodmFsID4+IChpICogOCkpICYgVUlOVDhfTUFYKTsNCj4gKyAgICBtdWx0 aXJlYWQ0X2NoZWNrKHJlZywgdmFsKTsNCj4gKw0KPiArICAgIC8qIENoYW5nZSB0aGUgdmFsdWUg ZWFjaCB0aW1lIHRvIGJlIHN1cmUgd3JpdGVzIHdvcmsgZmluZS4gKi8NCj4gKyAgICB2YWwgPSAw eDJiODM2ZmRhOw0KPiArICAgIC8qIFdyaXRlIHVzaW5nIDJieXRlcy4gKi8NCj4gKyAgICBmb3Ig KCBpID0gMDsgaSA8IDI7IGkrKyApDQo+ICsgICAgICAgIFZQQ0lfV1JJVEVfQ0hFQ0socmVnICsg aSAqIDIsIDIsICh2YWwgPj4gKGkgKiAyICogOCkpICYgVUlOVDE2X01BWCk7DQo+ICsgICAgbXVs dGlyZWFkNF9jaGVjayhyZWcsIHZhbCk7DQo+ICsNCj4gKyAgICB2YWwgPSAweGM0NjkzYmViOw0K PiArICAgIFZQQ0lfV1JJVEVfQ0hFQ0socmVnLCA0LCB2YWwpOw0KPiArICAgIG11bHRpcmVhZDRf Y2hlY2socmVnLCB2YWwpOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK21haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQ0KPiArew0KPiArICAgIC8qIEluZGV4IHN0b3JhZ2UgYnkgb2Zmc2V0LiAqLw0K PiArICAgIHVpbnQzMl90IHIwID0gMHhkZWFkYmVlZjsNCj4gKyAgICB1aW50OF90IHI1ID0gMHhl ZjsNCj4gKyAgICB1aW50OF90IHI2ID0gMHhiZTsNCj4gKyAgICB1aW50OF90IHI3ID0gMHhlZjsN Cj4gKyAgICB1aW50MTZfdCByMTIgPSAweDg2OTY7DQo+ICsgICAgdWludDhfdCByMTZbNF0gPSB7 IH07DQo+ICsgICAgdWludDE2X3QgcjIwWzJdID0geyB9Ow0KPiArICAgIHVpbnQzMl90IHIyNCA9 IDA7DQo+ICsgICAgdWludDhfdCByMjgsIHIzMDsNCj4gKyAgICB1bnNpZ25lZCBpbnQgaTsNCj4g KyAgICBpbnQgcmM7DQo+ICsNCj4gKyAgICBJTklUX0xJU1RfSEVBRCgmdnBjaS5oYW5kbGVycyk7 DQo+ICsgICAgc3Bpbl9sb2NrX2luaXQoJnZwY2kubG9jayk7DQo+ICsNCj4gKyAgICBWUENJX0FE RF9SRUcodnBjaV9yZWFkMzIsIHZwY2lfd3JpdGUzMiwgMCwgNCwgcjApOw0KPiArICAgIFZQQ0lf UkVBRF9DSEVDSygwLCA0LCByMCk7DQo+ICsgICAgVlBDSV9XUklURV9DSEVDSygwLCA0LCAweGJj YmNiY2JjKTsNCj4gKw0KPiArICAgIFZQQ0lfQUREX1JFRyh2cGNpX3JlYWQ4LCB2cGNpX3dyaXRl OCwgNSwgMSwgcjUpOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSyg1LCAxLCByNSk7DQo+ICsgICAg VlBDSV9XUklURV9DSEVDSyg1LCAxLCAweGJhKTsNCj4gKw0KPiArICAgIFZQQ0lfQUREX1JFRyh2 cGNpX3JlYWQ4LCB2cGNpX3dyaXRlOCwgNiwgMSwgcjYpOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVD Syg2LCAxLCByNik7DQo+ICsgICAgVlBDSV9XUklURV9DSEVDSyg2LCAxLCAweGJhKTsNCj4gKw0K PiArICAgIFZQQ0lfQUREX1JFRyh2cGNpX3JlYWQ4LCB2cGNpX3dyaXRlOCwgNywgMSwgcjcpOw0K PiArICAgIFZQQ0lfUkVBRF9DSEVDSyg3LCAxLCByNyk7DQo+ICsgICAgVlBDSV9XUklURV9DSEVD Syg3LCAxLCAweGJkKTsNCj4gKw0KPiArICAgIFZQQ0lfQUREX1JFRyh2cGNpX3JlYWQxNiwgdnBj aV93cml0ZTE2LCAxMiwgMiwgcjEyKTsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0soMTIsIDIsIHIx Mik7DQo+ICsgICAgVlBDSV9SRUFEX0NIRUNLKDEyLCA0LCAweGZmZmY4Njk2KTsNCj4gKw0KPiAr ICAgIC8qDQo+ICsgICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgbGF5 b3V0Og0KPiArICAgICAqDQo+ICsgICAgICogTm90ZSB0aGF0IHRoaXMgcmVmZXJzIHRvIHRoZSBw b3NpdGlvbiBvZiB0aGUgdmFyaWFibGVzLA0KPiArICAgICAqIGJ1dCB0aGUgdmFsdWUgaGFzIGFs cmVhZHkgY2hhbmdlZCBmcm9tIHRoZSBvbmUgZ2l2ZW4gYXQNCj4gKyAgICAgKiBpbml0aWFsaXph dGlvbiB0aW1lIGJlY2F1c2Ugd3JpdGUgdGVzdHMgaGF2ZSBiZWVuIHBlcmZvcm1lZC4NCj4gKyAg ICAgKg0KPiArICAgICAqIDMyICAgIDI0ICAgIDE2ICAgICA4ICAgICAwDQo+ICsgICAgICogICst LS0tLSstLS0tLSstLS0tLSstLS0tLSsNCj4gKyAgICAgKiAgfCAgICAgICAgICByMCAgICAgICAg ICAgfCAwDQo+ICsgICAgICogICstLS0tLSstLS0tLSstLS0tLSstLS0tLSsNCj4gKyAgICAgKiAg fCByNyAgfCAgcjYgfCAgcjUgfC8vLy8vfCAzMg0KPiArICAgICAqICArLS0tLS0rLS0tLS0rLS0t LS0rLS0tLS18DQo+ICsgICAgICogIHwvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3wgNjQNCj4gKyAg ICAgKiAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKw0KPiArICAgICAqICB8Ly8vLy8vLy8vLy98 ICAgIHIxMiAgICB8IDk2DQo+ICsgICAgICogICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsNCj4g KyAgICAgKiAgICAgICAgICAgICAuLi4NCj4gKyAgICAgKiAgLyA9IHVuaGFuZGxlZC4NCj4gKyAg ICAgKi8NCj4gKw0KPiArICAgIC8qIFRyeSB0byBhZGQgYW4gb3ZlcmxhcHBpbmcgcmVnaXN0ZXIg aGFuZGxlci4gKi8NCj4gKyAgICBWUENJX0FERF9JTlZBTElEX1JFRyh2cGNpX3JlYWQzMiwgdnBj aV93cml0ZTMyLCA0LCA0KTsNCj4gKw0KPiArICAgIC8qIFRyeSB0byBhZGQgYSBub24tYWxpZ25l ZCByZWdpc3Rlci4gKi8NCj4gKyAgICBWUENJX0FERF9JTlZBTElEX1JFRyh2cGNpX3JlYWQxNiwg dnBjaV93cml0ZTE2LCAxNSwgMik7DQo+ICsNCj4gKyAgICAvKiBUcnkgdG8gYWRkIGEgcmVnaXN0 ZXIgd2l0aCB3cm9uZyBzaXplLiAqLw0KPiArICAgIFZQQ0lfQUREX0lOVkFMSURfUkVHKHZwY2lf cmVhZDE2LCB2cGNpX3dyaXRlMTYsIDgsIDMpOw0KPiArDQo+ICsgICAgLyogVHJ5IHRvIGFkZCBh IHJlZ2lzdGVyIHdpdGggbWlzc2luZyBoYW5kbGVycy4gKi8NCj4gKyAgICBWUENJX0FERF9JTlZB TElEX1JFRyhOVUxMLCBOVUxMLCA4LCAyKTsNCj4gKw0KPiArICAgIC8qIFJlYWQvd3JpdGUgb2Yg dW5zZXQgcmVnaXN0ZXIuICovDQo+ICsgICAgVlBDSV9SRUFEX0NIRUNLKDgsIDQsIDB4ZmZmZmZm ZmYpOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSyg4LCAyLCAweGZmZmYpOw0KPiArICAgIFZQQ0lf UkVBRF9DSEVDSyg4LCAxLCAweGZmKTsNCj4gKyAgICBWUENJX1dSSVRFKDEwLCAyLCAweGJlZWYp Ow0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSygxMCwgMiwgMHhmZmZmKTsNCj4gKw0KPiArICAgIC8q IFJlYWQgb2YgbXVsdGlwbGUgcmVnaXN0ZXJzICovDQo+ICsgICAgVlBDSV9XUklURV9DSEVDSyg3 LCAxLCAweGJkKTsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0soNCwgNCwgMHhiZGJhYmFmZik7DQo+ ICsNCj4gKyAgICAvKiBQYXJ0aWFsIHJlYWQgb2YgYSByZWdpc3Rlci4gKi8NCj4gKyAgICBWUENJ X1dSSVRFX0NIRUNLKDAsIDQsIDB4MWExYjFjMWQpOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSygy LCAxLCAweDFiKTsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0soNiwgMiwgMHhiZGJhKTsNCj4gKw0K PiArICAgIC8qIFdyaXRlIG9mIG11bHRpcGxlIHJlZ2lzdGVycy4gKi8NCj4gKyAgICBWUENJX1dS SVRFX0NIRUNLKDQsIDQsIDB4YWFiYmNjZmYpOw0KPiArDQo+ICsgICAgLyogUGFydGlhbCB3cml0 ZSBvZiBhIHJlZ2lzdGVyLiAqLw0KPiArICAgIFZQQ0lfV1JJVEVfQ0hFQ0soMiwgMSwgMHhmZSk7 DQo+ICsgICAgVlBDSV9XUklURV9DSEVDSyg2LCAyLCAweGZlYmMpOw0KPiArDQo+ICsgICAgLyoN Cj4gKyAgICAgKiBUZXN0IGFsbCBwb3NzaWJsZSByZWFkL3dyaXRlIHNpemUgY29tYmluYXRpb25z Lg0KPiArICAgICAqDQo+ICsgICAgICogUGxhY2UgNCAxQiByZWdpc3RlcnMgYXQgMTI4Yml0cyAo MTZCKSwgMiAyQiByZWdpc3RlcnMgYXQgMTYwYml0cw0KPiArICAgICAqICgyMEIpIGFuZCBmaW5h bGx5IDEgNEIgcmVnaXN0ZXIgYXQgMTkyYml0cyAoMjRCKS4NCj4gKyAgICAgKg0KPiArICAgICAq IFRoZW4gcGVyZm9ybSBhbGwgcG9zc2libGUgd3JpdGUgYW5kIHJlYWQgc2l6ZXMgb24gZWFjaCBv ZiB0aGVtLg0KPiArICAgICAqDQo+ICsgICAgICogICAgICAgICAgICAgICAuLi4NCj4gKyAgICAg KiAzMiAgICAgMjQgICAgIDE2ICAgICAgOCAgICAgIDANCj4gKyAgICAgKiAgKy0tLS0tLSstLS0t LS0rLS0tLS0tKy0tLS0tLSsNCj4gKyAgICAgKiAgfHIxNlszXXxyMTZbMl18cjE2WzFdfHIxNlsw XXwgMTYNCj4gKyAgICAgKiAgKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsNCj4gKyAgICAg KiAgfCAgICByMjBbMV0gICB8ICAgIHIyMFswXSAgIHwgMjANCj4gKyAgICAgKiAgKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLXwNCj4gKyAgICAgKiAgfCAgICAgICAgICAgIHIyNCAgICAgICAg ICAgIHwgMjQNCj4gKyAgICAgKiAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsNCj4gKyAg ICAgKg0KPiArICAgICAqLw0KPiArICAgIFZQQ0lfQUREX1JFRyh2cGNpX3JlYWQ4LCB2cGNpX3dy aXRlOCwgMTYsIDEsIHIxNlswXSk7DQo+ICsgICAgVlBDSV9BRERfUkVHKHZwY2lfcmVhZDgsIHZw Y2lfd3JpdGU4LCAxNywgMSwgcjE2WzFdKTsNCj4gKyAgICBWUENJX0FERF9SRUcodnBjaV9yZWFk OCwgdnBjaV93cml0ZTgsIDE4LCAxLCByMTZbMl0pOw0KPiArICAgIFZQQ0lfQUREX1JFRyh2cGNp X3JlYWQ4LCB2cGNpX3dyaXRlOCwgMTksIDEsIHIxNlszXSk7DQo+ICsNCj4gKyAgICBWUENJX0FE RF9SRUcodnBjaV9yZWFkMTYsIHZwY2lfd3JpdGUxNiwgMjAsIDIsIHIyMFswXSk7DQo+ICsgICAg VlBDSV9BRERfUkVHKHZwY2lfcmVhZDE2LCB2cGNpX3dyaXRlMTYsIDIyLCAyLCByMjBbMV0pOw0K PiArDQo+ICsgICAgVlBDSV9BRERfUkVHKHZwY2lfcmVhZDMyLCB2cGNpX3dyaXRlMzIsIDI0LCA0 LCByMjQpOw0KPiArDQo+ICsgICAgLyogQ2hlY2sgdGhlIGluaXRpYWwgdmFsdWUgaXMgMC4gKi8N Cj4gKyAgICBtdWx0aXJlYWQ0X2NoZWNrKDE2LCAwKTsNCj4gKyAgICBtdWx0aXJlYWQ0X2NoZWNr KDIwLCAwKTsNCj4gKyAgICBtdWx0aXJlYWQ0X2NoZWNrKDI0LCAwKTsNCj4gKw0KPiArICAgIG11 bHRpd3JpdGU0X2NoZWNrKDE2KTsNCj4gKyAgICBtdWx0aXdyaXRlNF9jaGVjaygyMCk7DQo+ICsg ICAgbXVsdGl3cml0ZTRfY2hlY2soMjQpOw0KPiArDQo+ICsgICAgLyoNCj4gKyAgICAgKiBDaGVj ayBtdWx0aXBsZSBub24tY29uc2VjdXRpdmUgZ2FwcyBvbiB0aGUgc2FtZSByZWFkL3dyaXRlOg0K PiArICAgICAqDQo+ICsgICAgICogMzIgICAgIDI0ICAgICAxNiAgICAgIDggICAgICAwDQo+ICsg ICAgICogICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rDQo+ICsgICAgICogIHwvLy8vLy98 ICByMzAgfC8vLy8vL3wgIHIyOCB8IDI4DQo+ICsgICAgICogICstLS0tLS0rLS0tLS0tKy0tLS0t LSstLS0tLS0rDQo+ICsgICAgICoNCj4gKyAgICAgKi8NCj4gKyAgICBWUENJX0FERF9SRUcodnBj aV9yZWFkOCwgdnBjaV93cml0ZTgsIDI4LCAxLCByMjgpOw0KPiArICAgIFZQQ0lfQUREX1JFRyh2 cGNpX3JlYWQ4LCB2cGNpX3dyaXRlOCwgMzAsIDEsIHIzMCk7DQo+ICsgICAgVlBDSV9XUklURV9D SEVDSygyOCwgNCwgMHhmZmFjZmZkYyk7DQo+ICsNCj4gKyAgICAvKiBGaW5hbGx5IHRyeSB0byBy ZW1vdmUgYSBjb3VwbGUgb2YgcmVnaXN0ZXJzLiAqLw0KPiArICAgIFZQQ0lfUkVNT1ZFX1JFRygy OCwgMSk7DQo+ICsgICAgVlBDSV9SRU1PVkVfUkVHKDI0LCA0KTsNCj4gKyAgICBWUENJX1JFTU9W RV9SRUcoMTIsIDIpOw0KPiArDQo+ICsgICAgVlBDSV9SRU1PVkVfSU5WQUxJRF9SRUcoMjAsIDEp Ow0KPiArICAgIFZQQ0lfUkVNT1ZFX0lOVkFMSURfUkVHKDE2LCAyKTsNCj4gKyAgICBWUENJX1JF TU9WRV9JTlZBTElEX1JFRygzMCwgMik7DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArLyoNCj4gKyAqIExvY2FsIHZhcmlhYmxlczoNCj4gKyAqIG1vZGU6IEMNCj4gKyAqIGMt ZmlsZS1zdHlsZTogIkJTRCINCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0DQo+ICsgKiBpbmRlbnQt dGFicy1tb2RlOiBuaWwNCj4gKyAqIEVuZDoNCj4gKyAqLw0KPiBkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gvYXJtL3hlbi5sZHMuUyBiL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMNCj4gaW5kZXggYzliOTU0 NjQzNS4uOThiODI2ODBjNiAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gvYXJtL3hlbi5sZHMuUw0K PiArKysgYi94ZW4vYXJjaC9hcm0veGVuLmxkcy5TDQo+IEBAIC02NSw2ICs2NSwxMyBAQCBTRUNU SU9OUw0KPiAgICAgICAgIF9fcGFyYW1fc3RhcnQgPSAuOw0KPiAgICAgICAgICooLmRhdGEucGFy YW0pDQo+ICAgICAgICAgX19wYXJhbV9lbmQgPSAuOw0KPiArDQo+ICsjaWYgZGVmaW5lZChDT05G SUdfSEFTX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfTEFURV9IV0RPTSkNCj4gKyAgICAgICAuID0g QUxJR04oUE9JTlRFUl9BTElHTik7DQo+ICsgICAgICAgX19zdGFydF92cGNpX2FycmF5ID0gLjsN Cj4gKyAgICAgICAqKC5kYXRhLnZwY2kpDQo+ICsgICAgICAgX19lbmRfdnBjaV9hcnJheSA9IC47 DQo+ICsjZW5kaWYNCj4gICAgfSA6dGV4dA0KPiANCj4gICNpZiBkZWZpbmVkKEJVSUxEX0lEKQ0K PiBAQCAtMTczLDYgKzE4MCwxMyBAQCBTRUNUSU9OUw0KPiAgICAgICAgICooLmluaXRfYXJyYXkp DQo+ICAgICAgICAgKihTT1JUKC5pbml0X2FycmF5LiopKQ0KPiAgICAgICAgIF9fY3RvcnNfZW5k ID0gLjsNCj4gKw0KPiArI2lmIGRlZmluZWQoQ09ORklHX0hBU19QQ0kpICYmICFkZWZpbmVkKENP TkZJR19MQVRFX0hXRE9NKQ0KPiArICAgICAgIC4gPSBBTElHTihQT0lOVEVSX0FMSUdOKTsNCj4g KyAgICAgICBfX3N0YXJ0X3ZwY2lfYXJyYXkgPSAuOw0KPiArICAgICAgICooLmRhdGEudnBjaSkN Cj4gKyAgICAgICBfX2VuZF92cGNpX2FycmF5ID0gLjsNCj4gKyNlbmRpZg0KPiAgICB9IDp0ZXh0 DQo+ICAgIF9faW5pdF9lbmRfZWZpID0gLjsNCj4gICAgLiA9IEFMSUdOKFNUQUNLX1NJWkUpOw0K PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFp bi5jDQo+IGluZGV4IGMyOGFjMzhmYmUuLjRjMjJlMDk1MmUgMTAwNjQ0DQo+IC0tLSBhL3hlbi9h cmNoL3g4Ni9kb21haW4uYw0KPiArKysgYi94ZW4vYXJjaC94ODYvZG9tYWluLmMNCj4gQEAgLTM5 NywxMSArMzk3LDIxIEBAIHN0YXRpYyBib29sIGVtdWxhdGlvbl9mbGFnc19vayhjb25zdCBzdHJ1 Y3QgZG9tYWluDQo+ICpkLCB1aW50MzJfdCBlbWZsYWdzKQ0KPiAgICAgIGlmICggaXNfaHZtX2Rv bWFpbihkKSApDQo+ICAgICAgew0KPiAgICAgICAgICBpZiAoIGlzX2hhcmR3YXJlX2RvbWFpbihk KSAmJg0KPiAtICAgICAgICAgICAgIGVtZmxhZ3MgIT0gKFhFTl9YODZfRU1VX0xBUElDfFhFTl9Y ODZfRU1VX0lPQVBJQykgKQ0KPiAtICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiAtICAgICAg ICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oZCkgJiYgZW1mbGFncyAmJg0KPiAtICAgICAgICAg ICAgIGVtZmxhZ3MgIT0gWEVOX1g4Nl9FTVVfQUxMICYmIGVtZmxhZ3MgIT0gWEVOX1g4Nl9FTVVf TEFQSUMgKQ0KPiArICAgICAgICAgICAgIGVtZmxhZ3MgIT0gKFhFTl9YODZfRU1VX0xBUElDfFhF Tl9YODZfRU1VX0lPQVBJQ3wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fWDg2X0VN VV9WUENJKSApDQo+ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ICsgICAgICAgIGlmICgg IWlzX2hhcmR3YXJlX2RvbWFpbihkKSApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIHN3 aXRjaCAoIGVtZmxhZ3MgKQ0KPiArICAgICAgICAgICAgew0KPiArICAgICAgICAgICAgY2FzZSBY RU5fWDg2X0VNVV9BTEwgJiB+WEVOX1g4Nl9FTVVfVlBDSToNCj4gKyAgICAgICAgICAgIGNhc2Ug WEVOX1g4Nl9FTVVfTEFQSUM6DQo+ICsgICAgICAgICAgICBjYXNlIDA6DQo+ICsgICAgICAgICAg ICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICBkZWZhdWx0Og0KPiArICAgICAgICAgICAgICAg IHJldHVybiBmYWxzZTsNCj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiAgICAgIH0N Cj4gICAgICBlbHNlIGlmICggZW1mbGFncyAhPSAwICYmIGVtZmxhZ3MgIT0gWEVOX1g4Nl9FTVVf UElUICkNCj4gICAgICB7DQo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIv eGVuL2FyY2gveDg2L2h2bS9odm0uYw0KPiBpbmRleCAyMDViNGNiNjg1Li44ZWQ2NzE4YmY2IDEw MDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jDQo+ICsrKyBiL3hlbi9hcmNoL3g4 Ni9odm0vaHZtLmMNCj4gQEAgLTM2LDYgKzM2LDcgQEANCj4gICNpbmNsdWRlIDx4ZW4vcmFuZ2Vz ZXQuaD4NCj4gICNpbmNsdWRlIDx4ZW4vbW9uaXRvci5oPg0KPiAgI2luY2x1ZGUgPHhlbi93YXJu aW5nLmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZwY2kuaD4NCj4gICNpbmNsdWRlIDxhc20vc2hhZG93 Lmg+DQo+ICAjaW5jbHVkZSA8YXNtL2hhcC5oPg0KPiAgI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+ DQo+IEBAIC02MjksNiArNjMwLDcgQEAgaW50IGh2bV9kb21haW5faW5pdGlhbGlzZShzdHJ1Y3Qg ZG9tYWluICpkLCB1bnNpZ25lZA0KPiBsb25nIGRvbWNyX2ZsYWdzLA0KPiAgICAgICAgICBkLT5h cmNoLmh2bV9kb21haW4uaW9fYml0bWFwID0gaHZtX2lvX2JpdG1hcDsNCj4gDQo+ICAgICAgcmVn aXN0ZXJfZzJtX3BvcnRpb19oYW5kbGVyKGQpOw0KPiArICAgIHJlZ2lzdGVyX3ZwY2lfcG9ydGlv X2hhbmRsZXIoZCk7DQo+IA0KPiAgICAgIGh2bV9pb3JlcV9pbml0KGQpOw0KPiANCj4gZGlmZiAt LWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaW8uYyBiL3hlbi9hcmNoL3g4Ni9odm0vaW8uYw0KPiBp bmRleCA2NTc5ZTExOWZmLi42YzEyY2Y1ZDIyIDEwMDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYv aHZtL2lvLmMNCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9pby5jDQo+IEBAIC0yNSw2ICsyNSw3 IEBADQo+ICAjaW5jbHVkZSA8eGVuL3RyYWNlLmg+DQo+ICAjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+ DQo+ICAjaW5jbHVkZSA8eGVuL2h5cGVyY2FsbC5oPg0KPiArI2luY2x1ZGUgPHhlbi92cGNpLmg+ DQo+ICAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4NCj4gICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVy ZS5oPg0KPiAgI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4NCj4gQEAgLTI3OCw2ICsyNzksMTA4 IEBAIHVuc2lnbmVkIGludCBodm1fcGNpX2RlY29kZV9hZGRyKHVuc2lnbmVkIGludA0KPiBjZjgs IHVuc2lnbmVkIGludCBhZGRyLA0KPiAgICAgIHJldHVybiBDRjhfQUREUl9MTyhjZjgpIHwgKGFk ZHIgJiAzKTsNCj4gIH0NCj4gDQo+ICsvKiBEbyBzb21lIHNhbml0eSBjaGVja3MuICovDQo+ICtz dGF0aWMgYm9vbCB2cGNpX2FjY2Vzc19hbGxvd2VkKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVk IGludCBsZW4pDQo+ICt7DQo+ICsgICAgLyogQ2hlY2sgYWNjZXNzIHNpemUuICovDQo+ICsgICAg aWYgKCBsZW4gIT0gMSAmJiBsZW4gIT0gMiAmJiBsZW4gIT0gNCApDQo+ICsgICAgICAgIHJldHVy biBmYWxzZTsNCj4gKw0KPiArICAgIC8qIENoZWNrIHRoYXQgYWNjZXNzIGlzIHNpemUgYWxpZ25l ZC4gKi8NCj4gKyAgICBpZiAoIChyZWcgJiAobGVuIC0gMSkpICkNCj4gKyAgICAgICAgcmV0dXJu IGZhbHNlOw0KPiArDQo+ICsgICAgcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gKy8qIHZQQ0kg Y29uZmlnIHNwYWNlIElPIHBvcnRzIGhhbmRsZXJzICgweGNmOC8weGNmYykuICovDQo+ICtzdGF0 aWMgYm9vbCB2cGNpX3BvcnRpb19hY2NlcHQoY29uc3Qgc3RydWN0IGh2bV9pb19oYW5kbGVyICpo YW5kbGVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvcmVxX3Qg KnApDQo+ICt7DQo+ICsgICAgcmV0dXJuIChwLT5hZGRyID09IDB4Y2Y4ICYmIHAtPnNpemUgPT0g NCkgfHwgKHAtPmFkZHIgJiB+MykgPT0gMHhjZmM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg dnBjaV9wb3J0aW9fcmVhZChjb25zdCBzdHJ1Y3QgaHZtX2lvX2hhbmRsZXIgKmhhbmRsZXIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYWRkciwgdWludDMyX3Qgc2l6 ZSwgdWludDY0X3QgKmRhdGEpDQo+ICt7DQo+ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IGN1cnJl bnQtPmRvbWFpbjsNCj4gKyAgICB1bnNpZ25lZCBpbnQgcmVnOw0KPiArICAgIHBjaV9zYmRmX3Qg c2JkZjsNCj4gKyAgICB1aW50MzJfdCBjZjg7DQo+ICsNCj4gKyAgICAqZGF0YSA9IH4odWludDY0 X3QpMDsNCj4gKw0KPiArICAgIGlmICggYWRkciA9PSAweGNmOCApDQo+ICsgICAgew0KPiArICAg ICAgICBBU1NFUlQoc2l6ZSA9PSA0KTsNCj4gKyAgICAgICAgKmRhdGEgPSBkLT5hcmNoLmh2bV9k b21haW4ucGNpX2NmODsNCj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBjZjggPSBBQ0NFU1NfT05DRShkLT5hcmNoLmh2bV9kb21haW4ucGNpX2Nm OCk7DQo+ICsgICAgaWYgKCAhQ0Y4X0VOQUJMRUQoY2Y4KSApDQo+ICsgICAgICAgIHJldHVybiBY ODZFTVVMX1VOSEFORExFQUJMRTsNCj4gKw0KPiArICAgIHJlZyA9IGh2bV9wY2lfZGVjb2RlX2Fk ZHIoY2Y4LCBhZGRyLCAmc2JkZik7DQo+ICsNCj4gKyAgICBpZiAoICF2cGNpX2FjY2Vzc19hbGxv d2VkKHJlZywgc2l6ZSkgKQ0KPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOw0KPiArDQo+ ICsgICAgKmRhdGEgPSB2cGNpX3JlYWQoc2JkZiwgcmVnLCBzaXplKTsNCj4gKw0KPiArICAgIHJl dHVybiBYODZFTVVMX09LQVk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdnBjaV9wb3J0aW9f d3JpdGUoY29uc3Qgc3RydWN0IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBzaXplLCB1aW50NjRf dCBkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47 DQo+ICsgICAgdW5zaWduZWQgaW50IHJlZzsNCj4gKyAgICBwY2lfc2JkZl90IHNiZGY7DQo+ICsg ICAgdWludDMyX3QgY2Y4Ow0KPiArDQo+ICsgICAgaWYgKCBhZGRyID09IDB4Y2Y4ICkNCj4gKyAg ICB7DQo+ICsgICAgICAgIEFTU0VSVChzaXplID09IDQpOw0KPiArICAgICAgICBkLT5hcmNoLmh2 bV9kb21haW4ucGNpX2NmOCA9IGRhdGE7DQo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgY2Y4ID0gQUNDRVNTX09OQ0UoZC0+YXJjaC5odm1fZG9t YWluLnBjaV9jZjgpOw0KPiArICAgIGlmICggIUNGOF9FTkFCTEVEKGNmOCkgKQ0KPiArICAgICAg ICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7DQo+ICsNCj4gKyAgICByZWcgPSBodm1fcGNp X2RlY29kZV9hZGRyKGNmOCwgYWRkciwgJnNiZGYpOw0KPiArDQo+ICsgICAgaWYgKCAhdnBjaV9h Y2Nlc3NfYWxsb3dlZChyZWcsIHNpemUpICkNCj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsNCj4gKw0KPiArICAgIHZwY2lfd3JpdGUoc2JkZiwgcmVnLCBzaXplLCBkYXRhKTsNCj4gKw0K PiArICAgIHJldHVybiBYODZFTVVMX09LQVk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaHZtX2lvX29wcyB2cGNpX3BvcnRpb19vcHMgPSB7DQo+ICsgICAgLmFjY2VwdCA9IHZw Y2lfcG9ydGlvX2FjY2VwdCwNCj4gKyAgICAucmVhZCA9IHZwY2lfcG9ydGlvX3JlYWQsDQo+ICsg ICAgLndyaXRlID0gdnBjaV9wb3J0aW9fd3JpdGUsDQo+ICt9Ow0KPiArDQo+ICt2b2lkIHJlZ2lz dGVyX3ZwY2lfcG9ydGlvX2hhbmRsZXIoc3RydWN0IGRvbWFpbiAqZCkNCj4gK3sNCj4gKyAgICBz dHJ1Y3QgaHZtX2lvX2hhbmRsZXIgKmhhbmRsZXI7DQo+ICsNCj4gKyAgICBpZiAoICFoYXNfdnBj aShkKSApDQo+ICsgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgIGhhbmRsZXIgPSBodm1fbmV4 dF9pb19oYW5kbGVyKGQpOw0KPiArICAgIGlmICggIWhhbmRsZXIgKQ0KPiArICAgICAgICByZXR1 cm47DQo+ICsNCj4gKyAgICBoYW5kbGVyLT50eXBlID0gSU9SRVFfVFlQRV9QSU87DQo+ICsgICAg aGFuZGxlci0+b3BzID0gJnZwY2lfcG9ydGlvX29wczsNCj4gK30NCj4gKw0KPiAgLyoNCj4gICAq IExvY2FsIHZhcmlhYmxlczoNCj4gICAqIG1vZGU6IEMNCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9zZXR1cC5jIGIveGVuL2FyY2gveDg2L3NldHVwLmMNCj4gaW5kZXggMzJiYjAyZTNhNS4u NTI4Y2M0NjRiYSAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L3NldHVwLmMNCj4gKysrIGIv eGVuL2FyY2gveDg2L3NldHVwLmMNCj4gQEAgLTE1ODIsNyArMTU4Miw4IEBAIHZvaWQgX19pbml0 IG5vcmV0dXJuIF9fc3RhcnRfeGVuKHVuc2lnbmVkIGxvbmcNCj4gbWJpX3ApDQo+ICAgICAgICAg IGRvbWNyX2ZsYWdzIHw9IERPTUNSRl9odm0gfA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAo KGh2bV9mdW5jcy5oYXBfc3VwcG9ydGVkICYmICFvcHRfZG9tMF9zaGFkb3cpID8NCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICBET01DUkZfaGFwIDogMCk7DQo+IC0gICAgICAgIGNvbmZpZy5l bXVsYXRpb25fZmxhZ3MgPQ0KPiBYRU5fWDg2X0VNVV9MQVBJQ3xYRU5fWDg2X0VNVV9JT0FQSUM7 DQo+ICsgICAgICAgIGNvbmZpZy5lbXVsYXRpb25fZmxhZ3MgPQ0KPiBYRU5fWDg2X0VNVV9MQVBJ Q3xYRU5fWDg2X0VNVV9JT0FQSUN8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYRU5fWDg2X0VNVV9WUENJOw0KPiAgICAgIH0NCj4gDQo+ICAgICAgLyogQ3JlYXRlIGluaXRp YWwgZG9tYWluIDAuICovDQo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYveGVuLmxkcy5TIGIv eGVuL2FyY2gveDg2L3hlbi5sZHMuUw0KPiBpbmRleCBkNWU4ODIxZDQxLi42YzUwOTE2ZWQyIDEw MDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYveGVuLmxkcy5TDQo+ICsrKyBiL3hlbi9hcmNoL3g4 Ni94ZW4ubGRzLlMNCj4gQEAgLTEyNCw2ICsxMjQsMTMgQEAgU0VDVElPTlMNCj4gICAgICAgICBf X3BhcmFtX3N0YXJ0ID0gLjsNCj4gICAgICAgICAqKC5kYXRhLnBhcmFtKQ0KPiAgICAgICAgIF9f cGFyYW1fZW5kID0gLjsNCj4gKw0KPiArI2lmIGRlZmluZWQoQ09ORklHX0hBU19QQ0kpICYmIGRl ZmluZWQoQ09ORklHX0xBVEVfSFdET00pDQo+ICsgICAgICAgLiA9IEFMSUdOKFBPSU5URVJfQUxJ R04pOw0KPiArICAgICAgIF9fc3RhcnRfdnBjaV9hcnJheSA9IC47DQo+ICsgICAgICAgKiguZGF0 YS52cGNpKQ0KPiArICAgICAgIF9fZW5kX3ZwY2lfYXJyYXkgPSAuOw0KPiArI2VuZGlmDQo+ICAg IH0gOnRleHQNCj4gDQo+ICAjaWYgZGVmaW5lZChCVUlMRF9JRCkNCj4gQEAgLTIxMyw2ICsyMjAs MTMgQEAgU0VDVElPTlMNCj4gICAgICAgICAqKC5pbml0X2FycmF5KQ0KPiAgICAgICAgICooU09S VCguaW5pdF9hcnJheS4qKSkNCj4gICAgICAgICBfX2N0b3JzX2VuZCA9IC47DQo+ICsNCj4gKyNp ZiBkZWZpbmVkKENPTkZJR19IQVNfUENJKSAmJiAhZGVmaW5lZChDT05GSUdfTEFURV9IV0RPTSkN Cj4gKyAgICAgICAuID0gQUxJR04oUE9JTlRFUl9BTElHTik7DQo+ICsgICAgICAgX19zdGFydF92 cGNpX2FycmF5ID0gLjsNCj4gKyAgICAgICAqKC5kYXRhLnZwY2kpDQo+ICsgICAgICAgX19lbmRf dnBjaV9hcnJheSA9IC47DQo+ICsjZW5kaWYNCj4gICAgfSA6dGV4dA0KPiANCj4gICNpZmRlZiBF RkkNCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL01ha2VmaWxlIGIveGVuL2RyaXZlcnMvTWFr ZWZpbGUNCj4gaW5kZXggMTkzOTE4MDJhOC4uZDUxYzc2NjQ1MyAxMDA2NDQNCj4gLS0tIGEveGVu L2RyaXZlcnMvTWFrZWZpbGUNCj4gKysrIGIveGVuL2RyaXZlcnMvTWFrZWZpbGUNCj4gQEAgLTEs NiArMSw2IEBADQo+ICBzdWJkaXIteSArPSBjaGFyDQo+ICBzdWJkaXItJChDT05GSUdfSEFTX0NQ VUZSRVEpICs9IGNwdWZyZXENCj4gLXN1YmRpci0kKENPTkZJR19IQVNfUENJKSArPSBwY2kNCj4g K3N1YmRpci0kKENPTkZJR19IQVNfUENJKSArPSBwY2kgdnBjaQ0KPiAgc3ViZGlyLSQoQ09ORklH X0hBU19QQVNTVEhST1VHSCkgKz0gcGFzc3Rocm91Z2gNCj4gIHN1YmRpci0kKENPTkZJR19BQ1BJ KSArPSBhY3BpDQo+ICBzdWJkaXItJChDT05GSUdfVklERU8pICs9IHZpZGVvDQo+IGRpZmYgLS1n aXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL3BjaS5jDQo+IGluZGV4IDQ2OWRmYzZjM2QuLjUxOTk5M2Q1MzYgMTAwNjQ0DQo+IC0tLSBh L3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jDQo+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL3BjaS5jDQo+IEBAIC0zMSw2ICszMSw3IEBADQo+ICAjaW5jbHVkZSA8eGVuL3JhZGl4 LXRyZWUuaD4NCj4gICNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPg0KPiAgI2luY2x1ZGUgPHhlbi90 YXNrbGV0Lmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZwY2kuaD4NCj4gICNpbmNsdWRlIDx4c20veHNt Lmg+DQo+ICAjaW5jbHVkZSA8YXNtL21zaS5oPg0KPiAgI2luY2x1ZGUgImF0cy5oIg0KPiBAQCAt MTA1MiwxMCArMTA1MywxMCBAQCBzdGF0aWMgdm9pZCBfX2h3ZG9tX2luaXQNCj4gc2V0dXBfb25l X2h3ZG9tX2RldmljZShjb25zdCBzdHJ1Y3Qgc2V0dXBfaHdkb20gKmN0eHQsDQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAq cGRldikNCj4gIHsNCj4gICAgICB1OCBkZXZmbiA9IHBkZXYtPmRldmZuOw0KPiArICAgIGludCBl cnI7DQo+IA0KPiAgICAgIGRvIHsNCj4gLSAgICAgICAgaW50IGVyciA9IGN0eHQtPmhhbmRsZXIo ZGV2Zm4sIHBkZXYpOw0KPiAtDQo+ICsgICAgICAgIGVyciA9IGN0eHQtPmhhbmRsZXIoZGV2Zm4s IHBkZXYpOw0KPiAgICAgICAgICBpZiAoIGVyciApDQo+ICAgICAgICAgIHsNCj4gICAgICAgICAg ICAgIHByaW50ayhYRU5MT0dfRVJSICJzZXR1cCAlMDR4OiUwMng6JTAyeC4ldSBmb3IgZCVkIGZh aWxlZA0KPiAoJWQpXG4iLA0KPiBAQCAtMTA2Nyw2ICsxMDY4LDExIEBAIHN0YXRpYyB2b2lkIF9f aHdkb21faW5pdA0KPiBzZXR1cF9vbmVfaHdkb21fZGV2aWNlKGNvbnN0IHN0cnVjdCBzZXR1cF9o d2RvbSAqY3R4dCwNCj4gICAgICAgICAgZGV2Zm4gKz0gcGRldi0+cGhhbnRvbV9zdHJpZGU7DQo+ ICAgICAgfSB3aGlsZSAoIGRldmZuICE9IHBkZXYtPmRldmZuICYmDQo+ICAgICAgICAgICAgICAg IFBDSV9TTE9UKGRldmZuKSA9PSBQQ0lfU0xPVChwZGV2LT5kZXZmbikgKTsNCj4gKw0KPiArICAg IGVyciA9IHZwY2lfYWRkX2hhbmRsZXJzKHBkZXYpOw0KPiArICAgIGlmICggZXJyICkNCj4gKyAg ICAgICAgcHJpbnRrKFhFTkxPR19FUlIgInNldHVwIG9mIHZQQ0kgZm9yIGQlZCBmYWlsZWQ6ICVk XG4iLA0KPiArICAgICAgICAgICAgICAgY3R4dC0+ZC0+ZG9tYWluX2lkLCBlcnIpOw0KPiAgfQ0K PiANCj4gIHN0YXRpYyBpbnQgX19od2RvbV9pbml0IF9zZXR1cF9od2RvbV9wY2lfZGV2aWNlcyhz dHJ1Y3QgcGNpX3NlZyAqcHNlZywNCj4gdm9pZCAqYXJnKQ0KPiBkaWZmIC0tZ2l0IGEveGVuL2Ry aXZlcnMvdnBjaS9NYWtlZmlsZSBiL3hlbi9kcml2ZXJzL3ZwY2kvTWFrZWZpbGUNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uODQwYTkwNjQ3MA0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL3hlbi9kcml2ZXJzL3ZwY2kvTWFrZWZpbGUNCj4gQEAgLTAsMCArMSBA QA0KPiArb2JqLXkgKz0gdnBjaS5vDQo+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy92cGNpL3Zw Y2kuYyBiL3hlbi9kcml2ZXJzL3ZwY2kvdnBjaS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMDAuLjc4ODgyNWY1ZmQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi94 ZW4vZHJpdmVycy92cGNpL3ZwY2kuYw0KPiBAQCAtMCwwICsxLDQ1MSBAQA0KPiArLyoNCj4gKyAq IEdlbmVyaWMgZnVuY3Rpb25hbGl0eSBmb3IgaGFuZGxpbmcgYWNjZXNzZXMgdG8gdGhlIFBDSSBj b25maWd1cmF0aW9uIHNwYWNlDQo+ICsgKiBmcm9tIGd1ZXN0cy4NCj4gKyAqDQo+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgUiZEDQo+ICsgKg0KPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiAr ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiArICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YNCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUNCj4gR05VDQo+ICsgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuDQo+ICsgKg0KPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZQ0KPiA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPHhlbi9zY2hlZC5oPg0KPiArI2luY2x1ZGUg PHhlbi92cGNpLmg+DQo+ICsNCj4gK2V4dGVybiB2cGNpX3JlZ2lzdGVyX2luaXRfdCAqY29uc3Qg X19zdGFydF92cGNpX2FycmF5W107DQo+ICtleHRlcm4gdnBjaV9yZWdpc3Rlcl9pbml0X3QgKmNv bnN0IF9fZW5kX3ZwY2lfYXJyYXlbXTsNCj4gKyNkZWZpbmUgTlVNX1ZQQ0lfSU5JVCAoX19lbmRf dnBjaV9hcnJheSAtIF9fc3RhcnRfdnBjaV9hcnJheSkNCj4gKw0KPiArLyogSW50ZXJuYWwgc3Ry dWN0IHRvIHN0b3JlIHRoZSBlbXVsYXRlZCBQQ0kgcmVnaXN0ZXJzLiAqLw0KPiArc3RydWN0IHZw Y2lfcmVnaXN0ZXIgew0KPiArICAgIHZwY2lfcmVhZF90ICpyZWFkOw0KPiArICAgIHZwY2lfd3Jp dGVfdCAqd3JpdGU7DQo+ICsgICAgdW5zaWduZWQgaW50IHNpemU7DQo+ICsgICAgdW5zaWduZWQg aW50IG9mZnNldDsNCj4gKyAgICB2b2lkICpwcml2YXRlOw0KPiArICAgIHN0cnVjdCBsaXN0X2hl YWQgbm9kZTsNCj4gK307DQo+ICsNCj4gK2ludCBfX2h3ZG9tX2luaXQgdnBjaV9hZGRfaGFuZGxl cnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ICt7DQo+ICsgICAgdW5zaWduZWQgaW50IGk7DQo+ ICsgICAgaW50IHJjID0gMDsNCj4gKw0KPiArICAgIGlmICggIWhhc192cGNpKHBkZXYtPmRvbWFp bikgKQ0KPiArICAgICAgICByZXR1cm4gMDsNCj4gKw0KPiArICAgIHBkZXYtPnZwY2kgPSB4emFs bG9jKHN0cnVjdCB2cGNpKTsNCj4gKyAgICBpZiAoICFwZGV2LT52cGNpICkNCj4gKyAgICAgICAg cmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKyAgICBJTklUX0xJU1RfSEVBRCgmcGRldi0+dnBjaS0+ aGFuZGxlcnMpOw0KPiArICAgIHNwaW5fbG9ja19pbml0KCZwZGV2LT52cGNpLT5sb2NrKTsNCj4g Kw0KPiArICAgIGZvciAoIGkgPSAwOyBpIDwgTlVNX1ZQQ0lfSU5JVDsgaSsrICkNCj4gKyAgICB7 DQo+ICsgICAgICAgIHJjID0gX19zdGFydF92cGNpX2FycmF5W2ldKHBkZXYpOw0KPiArICAgICAg ICBpZiAoIHJjICkNCj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmICggcmMgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgd2hpbGUgKCAhbGlzdF9lbXB0eSgmcGRl di0+dnBjaS0+aGFuZGxlcnMpICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgc3RydWN0 IHZwY2lfcmVnaXN0ZXIgKnIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwZGV2LT52cGNpLT5oYW5kbGVy cywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdnBjaV9yZWdpc3RlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlKTsNCj4gKw0KPiArICAgICAgICAgICAg bGlzdF9kZWwoJnItPm5vZGUpOw0KPiArICAgICAgICAgICAgeGZyZWUocik7DQo+ICsgICAgICAg IH0NCj4gKyAgICAgICAgeGZyZWUocGRldi0+dnBjaSk7DQo+ICsgICAgICAgIHBkZXYtPnZwY2kg PSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiByYzsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCB2cGNpX3JlZ2lzdGVyX2NtcChjb25zdCBzdHJ1Y3QgdnBjaV9yZWdpc3RlciAq cjEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX3Jl Z2lzdGVyICpyMikNCj4gK3sNCj4gKyAgICAvKiBSZXR1cm4gMCBpZiByZWdpc3RlcnMgb3Zlcmxh cC4gKi8NCj4gKyAgICBpZiAoIHIxLT5vZmZzZXQgPCByMi0+b2Zmc2V0ICsgcjItPnNpemUgJiYN Cj4gKyAgICAgICAgIHIyLT5vZmZzZXQgPCByMS0+b2Zmc2V0ICsgcjEtPnNpemUgKQ0KPiArICAg ICAgICByZXR1cm4gMDsNCj4gKyAgICBpZiAoIHIxLT5vZmZzZXQgPCByMi0+b2Zmc2V0ICkNCj4g KyAgICAgICAgcmV0dXJuIC0xOw0KPiArICAgIGlmICggcjEtPm9mZnNldCA+IHIyLT5vZmZzZXQg KQ0KPiArICAgICAgICByZXR1cm4gMTsNCj4gKw0KPiArICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgp Ow0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBEdW1teSBob29rcywgd3JpdGVz IGFyZSBpZ25vcmVkLCByZWFkcyByZXR1cm4gMSdzICovDQo+ICtzdGF0aWMgdWludDMyX3QgdnBj aV9pZ25vcmVkX3JlYWQoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludA0K PiByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkN Cj4gK3sNCj4gKyAgICByZXR1cm4gfih1aW50MzJfdCkwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCB2cGNpX2lnbm9yZWRfd3JpdGUoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2ln bmVkIGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg dmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArfQ0KPiArDQo+ICtpbnQgdnBjaV9hZGRfcmVnaXN0 ZXIoc3RydWN0IHZwY2kgKnZwY2ksIHZwY2lfcmVhZF90ICpyZWFkX2hhbmRsZXIsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgdnBjaV93cml0ZV90ICp3cml0ZV9oYW5kbGVyLCB1bnNpZ25lZCBp bnQgb2Zmc2V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB2 b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCBsaXN0X2hlYWQgKnByZXY7DQo+ICsgICAg c3RydWN0IHZwY2lfcmVnaXN0ZXIgKnI7DQo+ICsNCj4gKyAgICAvKiBTb21lIHNhbml0eSBjaGVj a3MuICovDQo+ICsgICAgaWYgKCAoc2l6ZSAhPSAxICYmIHNpemUgIT0gMiAmJiBzaXplICE9IDQp IHx8DQo+ICsgICAgICAgICBvZmZzZXQgPj0gUENJX0NGR19TUEFDRV9FWFBfU0laRSB8fCAob2Zm c2V0ICYgKHNpemUgLSAxKSkgfHwNCj4gKyAgICAgICAgICghcmVhZF9oYW5kbGVyICYmICF3cml0 ZV9oYW5kbGVyKSApDQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsgICAgciA9 IHhtYWxsb2Moc3RydWN0IHZwY2lfcmVnaXN0ZXIpOw0KPiArICAgIGlmICggIXIgKQ0KPiArICAg ICAgICByZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArICAgIHItPnJlYWQgPSByZWFkX2hhbmRsZXIg PzogdnBjaV9pZ25vcmVkX3JlYWQ7DQo+ICsgICAgci0+d3JpdGUgPSB3cml0ZV9oYW5kbGVyID86 IHZwY2lfaWdub3JlZF93cml0ZTsNCj4gKyAgICByLT5zaXplID0gc2l6ZTsNCj4gKyAgICByLT5v ZmZzZXQgPSBvZmZzZXQ7DQo+ICsgICAgci0+cHJpdmF0ZSA9IGRhdGE7DQo+ICsNCj4gKyAgICBz cGluX2xvY2soJnZwY2ktPmxvY2spOw0KPiArDQo+ICsgICAgLyogVGhlIGxpc3Qgb2YgaGFuZGxl cnMgbXVzdCBiZSBrZXB0IHNvcnRlZCBhdCBhbGwgdGltZXMuICovDQo+ICsgICAgbGlzdF9mb3Jf ZWFjaCAoIHByZXYsICZ2cGNpLT5oYW5kbGVycyApDQo+ICsgICAgew0KPiArICAgICAgICBjb25z dCBzdHJ1Y3QgdnBjaV9yZWdpc3RlciAqdGhpcyA9DQo+ICsgICAgICAgICAgICBsaXN0X2VudHJ5 KHByZXYsIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyLCBub2RlKTsNCj4gKyAgICAgICAgaW50 IGNtcCA9IHZwY2lfcmVnaXN0ZXJfY21wKHIsIHRoaXMpOw0KPiArDQo+ICsgICAgICAgIGlmICgg Y21wIDwgMCApDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgaWYgKCBjbXAgPT0g MCApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZ2cGNpLT5sb2Nr KTsNCj4gKyAgICAgICAgICAgIHhmcmVlKHIpOw0KPiArICAgICAgICAgICAgcmV0dXJuIC1FRVhJ U1Q7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBsaXN0X2FkZF90YWlsKCZy LT5ub2RlLCBwcmV2KTsNCj4gKyAgICBzcGluX3VubG9jaygmdnBjaS0+bG9jayk7DQo+ICsNCj4g KyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50IHZwY2lfcmVtb3ZlX3JlZ2lzdGVyKHN0 cnVjdCB2cGNpICp2cGNpLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplKQ0KPiArew0KPiArICAgIGNvbnN0IHN0cnVjdCB2 cGNpX3JlZ2lzdGVyIHIgPSB7IC5vZmZzZXQgPSBvZmZzZXQsIC5zaXplID0gc2l6ZSB9Ow0KPiAr ICAgIHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpybTsNCj4gKw0KPiArICAgIHNwaW5fbG9jaygmdnBj aS0+bG9jayk7DQo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHJtLCAmdnBjaS0+aGFuZGxl cnMsIG5vZGUgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgaW50IGNtcCA9IHZwY2lfcmVnaXN0ZXJf Y21wKCZyLCBybSk7DQo+ICsNCj4gKyAgICAgICAgLyoNCj4gKyAgICAgICAgICogTkI6IGRvIG5v dCB1c2UgYSBzd2l0Y2ggc28gdGhhdCB3ZSBjYW4gdXNlIGJyZWFrIHRvDQo+ICsgICAgICAgICAq IGdldCBvdXQgb2YgdGhlIGxpc3QgbG9vcCBlYXJsaWVyIGlmIHJlcXVpcmVkLg0KPiArICAgICAg ICAgKi8NCj4gKyAgICAgICAgaWYgKCAhY21wICYmIHJtLT5vZmZzZXQgPT0gb2Zmc2V0ICYmIHJt LT5zaXplID09IHNpemUgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBsaXN0X2RlbCgm cm0tPm5vZGUpOw0KPiArICAgICAgICAgICAgc3Bpbl91bmxvY2soJnZwY2ktPmxvY2spOw0KPiAr ICAgICAgICAgICAgeGZyZWUocm0pOw0KPiArICAgICAgICAgICAgcmV0dXJuIDA7DQo+ICsgICAg ICAgIH0NCj4gKyAgICAgICAgaWYgKCBjbXAgPD0gMCApDQo+ICsgICAgICAgICAgICBicmVhazsN Cj4gKyAgICB9DQo+ICsgICAgc3Bpbl91bmxvY2soJnZwY2ktPmxvY2spOw0KPiArDQo+ICsgICAg cmV0dXJuIC1FTk9FTlQ7DQo+ICt9DQo+ICsNCj4gKy8qIFdyYXBwZXJzIGZvciBwZXJmb3JtaW5n IHJlYWRzL3dyaXRlcyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gKi8NCj4gK3N0YXRpYyB1 aW50MzJfdCB2cGNpX3JlYWRfaHcocGNpX3NiZGZfdCBzYmRmLCB1bnNpZ25lZCBpbnQgcmVnLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkNCj4gK3sN Cj4gKyAgICB1aW50MzJfdCBkYXRhOw0KPiArDQo+ICsgICAgc3dpdGNoICggc2l6ZSApDQo+ICsg ICAgew0KPiArICAgIGNhc2UgNDoNCj4gKyAgICAgICAgZGF0YSA9IHBjaV9jb25mX3JlYWQzMihz YmRmLnNlZywgc2JkZi5idXMsIHNiZGYuZGV2LCBzYmRmLmZ1bmMsIHJlZyk7DQo+ICsgICAgICAg IGJyZWFrOw0KPiArICAgIGNhc2UgMzoNCj4gKyAgICAgICAgLyoNCj4gKyAgICAgICAgICogVGhp cyBpcyBwb3NzaWJsZSBiZWNhdXNlIGEgNGJ5dGUgcmVhZCBjYW4gaGF2ZSAxYnl0ZSB0cmFwcGVk IGFuZA0KPiArICAgICAgICAgKiB0aGUgcmVzdCBwYXNzZWQtdGhyb3VnaC4NCj4gKyAgICAgICAg ICovDQo+ICsgICAgICAgIGlmICggcmVnICYgMSApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAg ICAgIGRhdGEgPSBwY2lfY29uZl9yZWFkOChzYmRmLnNlZywgc2JkZi5idXMsIHNiZGYuZGV2LCBz YmRmLmZ1bmMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnKTsNCj4g KyAgICAgICAgICAgIGRhdGEgfD0gcGNpX2NvbmZfcmVhZDE2KHNiZGYuc2VnLCBzYmRmLmJ1cywg c2JkZi5kZXYsIHNiZGYuZnVuYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZyArIDEpIDw8IDg7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgZWxzZQ0KPiArICAg ICAgICB7DQo+ICsgICAgICAgICAgICBkYXRhID0gcGNpX2NvbmZfcmVhZDE2KHNiZGYuc2VnLCBz YmRmLmJ1cywgc2JkZi5kZXYsIHNiZGYuZnVuYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVnKTsNCj4gKyAgICAgICAgICAgIGRhdGEgfD0gcGNpX2NvbmZfcmVhZDgo c2JkZi5zZWcsIHNiZGYuYnVzLCBzYmRmLmRldiwgc2JkZi5mdW5jLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWcgKyAyKSA8PCAxNjsNCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIDI6DQo+ICsgICAgICAgIGRhdGEgPSBwY2lfY29u Zl9yZWFkMTYoc2JkZi5zZWcsIHNiZGYuYnVzLCBzYmRmLmRldiwgc2JkZi5mdW5jLCByZWcpOw0K PiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIDE6DQo+ICsgICAgICAgIGRhdGEgPSBwY2lf Y29uZl9yZWFkOChzYmRmLnNlZywgc2JkZi5idXMsIHNiZGYuZGV2LCBzYmRmLmZ1bmMsIHJlZyk7 DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgIEFTU0VSVF9V TlJFQUNIQUJMRSgpOw0KPiArICAgICAgICBkYXRhID0gfih1aW50MzJfdCkwOw0KPiArICAgICAg ICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gZGF0YTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgdnBjaV93cml0ZV9odyhwY2lfc2JkZl90IHNiZGYsIHVuc2lnbmVkIGlu dCByZWcsIHVuc2lnbmVkIGludA0KPiBzaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBkYXRhKQ0KPiArew0KPiArICAgIHN3aXRjaCAoIHNpemUgKQ0KPiArICAgIHsN Cj4gKyAgICBjYXNlIDQ6DQo+ICsgICAgICAgIHBjaV9jb25mX3dyaXRlMzIoc2JkZi5zZWcsIHNi ZGYuYnVzLCBzYmRmLmRldiwgc2JkZi5mdW5jLCByZWcsIGRhdGEpOw0KPiArICAgICAgICBicmVh azsNCj4gKyAgICBjYXNlIDM6DQo+ICsgICAgICAgIC8qDQo+ICsgICAgICAgICAqIFRoaXMgaXMg cG9zc2libGUgYmVjYXVzZSBhIDRieXRlIHdyaXRlIGNhbiBoYXZlIDFieXRlIHRyYXBwZWQgYW5k DQo+ICsgICAgICAgICAqIHRoZSByZXN0IHBhc3NlZC10aHJvdWdoLg0KPiArICAgICAgICAgKi8N Cj4gKyAgICAgICAgaWYgKCByZWcgJiAxICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAg cGNpX2NvbmZfd3JpdGU4KHNiZGYuc2VnLCBzYmRmLmJ1cywgc2JkZi5kZXYsIHNiZGYuZnVuYywg cmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOw0KPiArICAgICAgICAg ICAgcGNpX2NvbmZfd3JpdGUxNihzYmRmLnNlZywgc2JkZi5idXMsIHNiZGYuZGV2LCBzYmRmLmZ1 bmMsIHJlZyArIDEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPj4gOCk7 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgZWxzZQ0KPiArICAgICAgICB7DQo+ICsgICAgICAg ICAgICBwY2lfY29uZl93cml0ZTE2KHNiZGYuc2VnLCBzYmRmLmJ1cywgc2JkZi5kZXYsIHNiZGYu ZnVuYywgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsNCj4gKyAg ICAgICAgICAgIHBjaV9jb25mX3dyaXRlOChzYmRmLnNlZywgc2JkZi5idXMsIHNiZGYuZGV2LCBz YmRmLmZ1bmMsIHJlZyArIDIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA+ PiAxNik7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSAyOg0K PiArICAgICAgICBwY2lfY29uZl93cml0ZTE2KHNiZGYuc2VnLCBzYmRmLmJ1cywgc2JkZi5kZXYs IHNiZGYuZnVuYywgcmVnLCBkYXRhKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSAx Og0KPiArICAgICAgICBwY2lfY29uZl93cml0ZTgoc2JkZi5zZWcsIHNiZGYuYnVzLCBzYmRmLmRl diwgc2JkZi5mdW5jLCByZWcsIGRhdGEpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBkZWZh dWx0Og0KPiArICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsNCj4gKyAgICAgICAgYnJlYWs7 DQo+ICsgICAgfQ0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogTWVyZ2UgbmV3IGRhdGEgaW50byBh IHBhcnRpYWwgcmVzdWx0Lg0KPiArICoNCj4gKyAqIENvcHkgdGhlIHZhbHVlIGZvdW5kIGluICdu ZXcnIGZyb20gWzAsIHNpemUpIGxlZnQgc2hpZnRlZCBieQ0KPiArICogJ29mZnNldCcgaW50byAn ZGF0YScuIE5vdGUgdGhhdCBib3RoICdzaXplJyBhbmQgJ29mZnNldCcgYXJlDQo+ICsgKiBpbiBi eXRlIHVuaXRzLg0KPiArICovDQo+ICtzdGF0aWMgdWludDMyX3QgbWVyZ2VfcmVzdWx0KHVpbnQz Ml90IGRhdGEsIHVpbnQzMl90IG5ldywgdW5zaWduZWQgaW50IHNpemUsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpDQo+ICt7DQo+ICsgICAgdWlu dDMyX3QgbWFzayA9IDB4ZmZmZmZmZmYgPj4gKDMyIC0gOCAqIHNpemUpOw0KPiArDQo+ICsgICAg cmV0dXJuIChkYXRhICYgfihtYXNrIDw8IChvZmZzZXQgKiA4KSkpIHwgKChuZXcgJiBtYXNrKSA8 PCAob2Zmc2V0ICogOCkpOw0KPiArfQ0KPiArDQo+ICt1aW50MzJfdCB2cGNpX3JlYWQocGNpX3Ni ZGZfdCBzYmRmLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgc2l6ZSkNCj4gK3sNCj4g KyAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpkID0gY3VycmVudC0+ZG9tYWluOw0KPiArICAgIGNv bnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2Ow0KPiArICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lz dGVyICpyOw0KPiArICAgIHVuc2lnbmVkIGludCBkYXRhX29mZnNldCA9IDA7DQo+ICsgICAgdWlu dDMyX3QgZGF0YSA9IH4odWludDMyX3QpMDsNCj4gKw0KPiArICAgIC8qIEZpbmQgdGhlIFBDSSBk ZXYgbWF0Y2hpbmcgdGhlIGFkZHJlc3MuICovDQo+ICsgICAgcGRldiA9IHBjaV9nZXRfcGRldl9i eV9kb21haW4oZCwgc2JkZi5zZWcsIHNiZGYuYnVzLCBzYmRmLmV4dGZ1bmMpOw0KPiArICAgIGlm ICggIXBkZXYgKQ0KPiArICAgICAgICByZXR1cm4gdnBjaV9yZWFkX2h3KHNiZGYsIHJlZywgc2l6 ZSk7DQo+ICsNCj4gKyAgICBzcGluX2xvY2soJnBkZXYtPnZwY2ktPmxvY2spOw0KPiArDQo+ICsg ICAgLyogUmVhZCBmcm9tIHRoZSBoYXJkd2FyZSBvciB0aGUgZW11bGF0ZWQgcmVnaXN0ZXIgaGFu ZGxlcnMuICovDQo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHIsICZwZGV2LT52cGNpLT5o YW5kbGVycywgbm9kZSApDQo+ICsgICAgew0KPiArICAgICAgICBjb25zdCBzdHJ1Y3QgdnBjaV9y ZWdpc3RlciBlbXUgPSB7DQo+ICsgICAgICAgICAgICAub2Zmc2V0ID0gcmVnICsgZGF0YV9vZmZz ZXQsDQo+ICsgICAgICAgICAgICAuc2l6ZSA9IHNpemUgLSBkYXRhX29mZnNldA0KPiArICAgICAg ICB9Ow0KPiArICAgICAgICBpbnQgY21wID0gdnBjaV9yZWdpc3Rlcl9jbXAoJmVtdSwgcik7DQo+ ICsgICAgICAgIHVpbnQzMl90IHZhbDsNCj4gKyAgICAgICAgdW5zaWduZWQgaW50IHJlYWRfc2l6 ZTsNCj4gKw0KPiArICAgICAgICBpZiAoIGNtcCA8IDAgKQ0KPiArICAgICAgICAgICAgYnJlYWs7 DQo+ICsgICAgICAgIGlmICggY21wID4gMCApDQo+ICsgICAgICAgICAgICBjb250aW51ZTsNCj4g Kw0KPiArICAgICAgICBpZiAoIGVtdS5vZmZzZXQgPCByLT5vZmZzZXQgKQ0KPiArICAgICAgICB7 DQo+ICsgICAgICAgICAgICAvKiBIZWFkaW5nIGdhcCwgcmVhZCBwYXJ0aWFsIGNvbnRlbnQgZnJv bSBoYXJkd2FyZS4gKi8NCj4gKyAgICAgICAgICAgIHJlYWRfc2l6ZSA9IHItPm9mZnNldCAtIGVt dS5vZmZzZXQ7DQo+ICsgICAgICAgICAgICB2YWwgPSB2cGNpX3JlYWRfaHcoc2JkZiwgZW11Lm9m ZnNldCwgcmVhZF9zaXplKTsNCj4gKyAgICAgICAgICAgIGRhdGEgPSBtZXJnZV9yZXN1bHQoZGF0 YSwgdmFsLCByZWFkX3NpemUsIGRhdGFfb2Zmc2V0KTsNCj4gKyAgICAgICAgICAgIGRhdGFfb2Zm c2V0ICs9IHJlYWRfc2l6ZTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIHZhbCA9IHIt PnJlYWQocGRldiwgci0+b2Zmc2V0LCByLT5wcml2YXRlKTsNCj4gKw0KPiArICAgICAgICAvKiBD aGVjayBpZiB0aGUgcmVhZCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVnaXN0ZXIuICovDQo+ICsg ICAgICAgIGlmICggci0+b2Zmc2V0IDwgZW11Lm9mZnNldCApDQo+ICsgICAgICAgICAgICB2YWwg Pj49IChlbXUub2Zmc2V0IC0gci0+b2Zmc2V0KSAqIDg7DQo+ICsNCj4gKyAgICAgICAgLyogRmlu ZCB0aGUgaW50ZXJzZWN0aW9uIHNpemUgYmV0d2VlbiB0aGUgdHdvIHNldHMuICovDQo+ICsgICAg ICAgIHJlYWRfc2l6ZSA9IG1pbihlbXUub2Zmc2V0ICsgZW11LnNpemUsIHItPm9mZnNldCArIHIt PnNpemUpIC0NCj4gKyAgICAgICAgICAgICAgICAgICAgbWF4KGVtdS5vZmZzZXQsIHItPm9mZnNl dCk7DQo+ICsgICAgICAgIC8qIE1lcmdlIHRoZSBlbXVsYXRlZCBkYXRhIGludG8gdGhlIG5hdGl2 ZSByZWFkIHZhbHVlLiAqLw0KPiArICAgICAgICBkYXRhID0gbWVyZ2VfcmVzdWx0KGRhdGEsIHZh bCwgcmVhZF9zaXplLCBkYXRhX29mZnNldCk7DQo+ICsgICAgICAgIGRhdGFfb2Zmc2V0ICs9IHJl YWRfc2l6ZTsNCj4gKyAgICAgICAgaWYgKCBkYXRhX29mZnNldCA9PSBzaXplICkNCj4gKyAgICAg ICAgICAgIGJyZWFrOw0KPiArICAgICAgICBBU1NFUlQoZGF0YV9vZmZzZXQgPCBzaXplKTsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIGRhdGFfb2Zmc2V0IDwgc2l6ZSApDQo+ICsgICAgew0K PiArICAgICAgICAvKiBUYWlsaW5nIGdhcCwgcmVhZCB0aGUgcmVtYWluaW5nLiAqLw0KPiArICAg ICAgICB1aW50MzJfdCB0bXBfZGF0YSA9IHZwY2lfcmVhZF9odyhzYmRmLCByZWcgKyBkYXRhX29m ZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAt IGRhdGFfb2Zmc2V0KTsNCj4gKw0KPiArICAgICAgICBkYXRhID0gbWVyZ2VfcmVzdWx0KGRhdGEs IHRtcF9kYXRhLCBzaXplIC0gZGF0YV9vZmZzZXQsIGRhdGFfb2Zmc2V0KTsNCj4gKyAgICB9DQo+ ICsgICAgc3Bpbl91bmxvY2soJnBkZXYtPnZwY2ktPmxvY2spOw0KPiArDQo+ICsgICAgcmV0dXJu IGRhdGEgJiAoMHhmZmZmZmZmZiA+PiAoMzIgLSA4ICogc2l6ZSkpOw0KPiArfQ0KPiArDQo+ICsv Kg0KPiArICogUGVyZm9ybSBhIG1heWJlIHBhcnRpYWwgd3JpdGUgdG8gYSByZWdpc3Rlci4NCj4g KyAqDQo+ICsgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgd29yayBmb3Igc2ltcGxlIHJlZ2lz dGVycywgaWYgWGVuIG5lZWRzIHRvDQo+ICsgKiB0cmFwIGFjY2Vzc2VzIHRvIHJ3MWMgcmVnaXN0 ZXJzIChsaWtlIHRoZSBzdGF0dXMgUENJIGhlYWRlciByZWdpc3RlcikNCj4gKyAqIHRoZSBsb2dp YyBpbiB2cGNpX3dyaXRlIHdpbGwgaGF2ZSB0byBiZSBleHBhbmRlZCBpbiBvcmRlciB0byBjb3Jy ZWN0bHkNCj4gKyAqIGRlYWwgd2l0aCB0aGVtLg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCB2cGNp X3dyaXRlX2hlbHBlcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpyLCB1bnNpZ25l ZCBpbnQgc2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBvZmZzZXQsIHVpbnQzMl90IGRhdGEpDQo+ICt7DQo+ICsgICAgQVNTRVJUKHNpemUgPD0gci0+ c2l6ZSk7DQo+ICsNCj4gKyAgICBpZiAoIHNpemUgIT0gci0+c2l6ZSApDQo+ICsgICAgew0KPiAr ICAgICAgICB1aW50MzJfdCB2YWw7DQo+ICsNCj4gKyAgICAgICAgdmFsID0gci0+cmVhZChwZGV2 LCByLT5vZmZzZXQsIHItPnByaXZhdGUpOw0KPiArICAgICAgICBkYXRhID0gbWVyZ2VfcmVzdWx0 KHZhbCwgZGF0YSwgc2l6ZSwgb2Zmc2V0KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByLT53cml0 ZShwZGV2LCByLT5vZmZzZXQsIGRhdGEgJiAoMHhmZmZmZmZmZiA+PiAoMzIgLSA4ICogci0+c2l6 ZSkpLA0KPiArICAgICAgICAgICAgIHItPnByaXZhdGUpOw0KPiArfQ0KPiArDQo+ICt2b2lkIHZw Y2lfd3JpdGUocGNpX3NiZGZfdCBzYmRmLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQg c2l6ZSwNCj4gKyAgICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhKQ0KPiArew0KPiArICAgIGNv bnN0IHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47DQo+ICsgICAgY29uc3Qgc3Ry dWN0IHBjaV9kZXYgKnBkZXY7DQo+ICsgICAgY29uc3Qgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnI7 DQo+ICsgICAgdW5zaWduZWQgaW50IGRhdGFfb2Zmc2V0ID0gMDsNCj4gKw0KPiArICAgIC8qDQo+ ICsgICAgICogRmluZCB0aGUgUENJIGRldiBtYXRjaGluZyB0aGUgYWRkcmVzcy4NCj4gKyAgICAg KiBQYXNzdGhyb3VnaCBldmVyeXRoaW5nIHRoYXQncyBub3QgdHJhcHBlZC4NCj4gKyAgICAgKi8N Cj4gKyAgICBwZGV2ID0gcGNpX2dldF9wZGV2X2J5X2RvbWFpbihkLCBzYmRmLnNlZywgc2JkZi5i dXMsIHNiZGYuZXh0ZnVuYyk7DQo+ICsgICAgaWYgKCAhcGRldiApDQo+ICsgICAgew0KPiArICAg ICAgICB2cGNpX3dyaXRlX2h3KHNiZGYsIHJlZywgc2l6ZSwgZGF0YSk7DQo+ICsgICAgICAgIHJl dHVybjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBzcGluX2xvY2soJnBkZXYtPnZwY2ktPmxvY2sp Ow0KPiArDQo+ICsgICAgLyogV3JpdGUgdGhlIHZhbHVlIHRvIHRoZSBoYXJkd2FyZSBvciBlbXVs YXRlZCByZWdpc3RlcnMuICovDQo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHIsICZwZGV2 LT52cGNpLT5oYW5kbGVycywgbm9kZSApDQo+ICsgICAgew0KPiArICAgICAgICBjb25zdCBzdHJ1 Y3QgdnBjaV9yZWdpc3RlciBlbXUgPSB7DQo+ICsgICAgICAgICAgICAub2Zmc2V0ID0gcmVnICsg ZGF0YV9vZmZzZXQsDQo+ICsgICAgICAgICAgICAuc2l6ZSA9IHNpemUgLSBkYXRhX29mZnNldA0K PiArICAgICAgICB9Ow0KPiArICAgICAgICBpbnQgY21wID0gdnBjaV9yZWdpc3Rlcl9jbXAoJmVt dSwgcik7DQo+ICsgICAgICAgIHVuc2lnbmVkIGludCB3cml0ZV9zaXplOw0KPiArDQo+ICsgICAg ICAgIGlmICggY21wIDwgMCApDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgaWYg KCBjbXAgPiAwICkNCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KPiArDQo+ICsgICAgICAgIGlm ICggZW11Lm9mZnNldCA8IHItPm9mZnNldCApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAg IC8qIEhlYWRpbmcgZ2FwLCB3cml0ZSBwYXJ0aWFsIGNvbnRlbnQgdG8gaGFyZHdhcmUuICovDQo+ ICsgICAgICAgICAgICB2cGNpX3dyaXRlX2h3KHNiZGYsIGVtdS5vZmZzZXQsIHItPm9mZnNldCAt IGVtdS5vZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPj4gKGRhdGFf b2Zmc2V0ICogOCkpOw0KPiArICAgICAgICAgICAgZGF0YV9vZmZzZXQgKz0gci0+b2Zmc2V0IC0g ZW11Lm9mZnNldDsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIC8qIEZpbmQgdGhlIGlu dGVyc2VjdGlvbiBzaXplIGJldHdlZW4gdGhlIHR3byBzZXRzLiAqLw0KPiArICAgICAgICB3cml0 ZV9zaXplID0gbWluKGVtdS5vZmZzZXQgKyBlbXUuc2l6ZSwgci0+b2Zmc2V0ICsgci0+c2l6ZSkg LQ0KPiArICAgICAgICAgICAgICAgICAgICAgbWF4KGVtdS5vZmZzZXQsIHItPm9mZnNldCk7DQo+ ICsgICAgICAgIHZwY2lfd3JpdGVfaGVscGVyKHBkZXYsIHIsIHdyaXRlX3NpemUsIHJlZyArIGRh dGFfb2Zmc2V0IC0gci0+b2Zmc2V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh ID4+IChkYXRhX29mZnNldCAqIDgpKTsNCj4gKyAgICAgICAgZGF0YV9vZmZzZXQgKz0gd3JpdGVf c2l6ZTsNCj4gKyAgICAgICAgaWYgKCBkYXRhX29mZnNldCA9PSBzaXplICkNCj4gKyAgICAgICAg ICAgIGJyZWFrOw0KPiArICAgICAgICBBU1NFUlQoZGF0YV9vZmZzZXQgPCBzaXplKTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBpZiAoIGRhdGFfb2Zmc2V0IDwgc2l6ZSApDQo+ICsgICAgICAgIC8q IFRhaWxpbmcgZ2FwLCB3cml0ZSB0aGUgcmVtYWluaW5nLiAqLw0KPiArICAgICAgICB2cGNpX3dy aXRlX2h3KHNiZGYsIHJlZyArIGRhdGFfb2Zmc2V0LCBzaXplIC0gZGF0YV9vZmZzZXQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgZGF0YSA+PiAoZGF0YV9vZmZzZXQgKiA4KSk7DQo+ICsNCj4g KyAgICBzcGluX3VubG9jaygmcGRldi0+dnBjaS0+bG9jayk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ ICsgKiBMb2NhbCB2YXJpYWJsZXM6DQo+ICsgKiBtb2RlOiBDDQo+ICsgKiBjLWZpbGUtc3R5bGU6 ICJCU0QiDQo+ICsgKiBjLWJhc2ljLW9mZnNldDogNA0KPiArICogdGFiLXdpZHRoOiA0DQo+ICsg KiBpbmRlbnQtdGFicy1tb2RlOiBuaWwNCj4gKyAqIEVuZDoNCj4gKyAqLw0KPiBkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvZG9t YWluLmgNCj4gaW5kZXggNGQwYjc3ZGMyOC4uNzJhM2RkOGU4OSAxMDA2NDQNCj4gLS0tIGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaA0KPiArKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2Rv bWFpbi5oDQo+IEBAIC00MzAsNiArNDMwLDcgQEAgc3RydWN0IGFyY2hfZG9tYWluDQo+ICAjZGVm aW5lIGhhc192cGl0KGQpICAgICAgICAoISEoKGQpLT5hcmNoLmVtdWxhdGlvbl9mbGFncyAmDQo+ IFhFTl9YODZfRU1VX1BJVCkpDQo+ICAjZGVmaW5lIGhhc19waXJxKGQpICAgICAgICAoISEoKGQp LT5hcmNoLmVtdWxhdGlvbl9mbGFncyAmIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYRU5fWDg2X0VNVV9VU0VfUElSUSkpDQo+ICsjZGVmaW5lIGhhc192cGNpKGQpICAgICAgICAo ISEoKGQpLT5hcmNoLmVtdWxhdGlvbl9mbGFncyAmDQo+IFhFTl9YODZfRU1VX1ZQQ0kpKQ0KPiAN Cj4gICNkZWZpbmUgaGFzX2FyY2hfcGRldnMoZCkgICAgKCFsaXN0X2VtcHR5KCYoZCktPmFyY2gu cGRldl9saXN0KSkNCj4gDQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9p by5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaA0KPiBpbmRleCA3MDc2NjVmYmJhLi5m ZjBiZWE1ZDUzIDEwMDY0NA0KPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pby5oDQo+ ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgNCj4gQEAgLTE2MCw2ICsxNjAsOSBA QCB1bnNpZ25lZCBpbnQgaHZtX3BjaV9kZWNvZGVfYWRkcih1bnNpZ25lZCBpbnQgY2Y4LA0KPiB1 bnNpZ25lZCBpbnQgYWRkciwNCj4gICAqLw0KPiAgdm9pZCByZWdpc3Rlcl9nMm1fcG9ydGlvX2hh bmRsZXIoc3RydWN0IGRvbWFpbiAqZCk7DQo+IA0KPiArLyogSFZNIHBvcnQgSU8gaGFuZGxlciBm b3IgdlBDSSBhY2Nlc3Nlcy4gKi8NCj4gK3ZvaWQgcmVnaXN0ZXJfdnBjaV9wb3J0aW9faGFuZGxl cihzdHJ1Y3QgZG9tYWluICpkKTsNCj4gKw0KPiAgI2VuZGlmIC8qIF9fQVNNX1g4Nl9IVk1fSU9f SF9fICovDQo+IA0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLXg4 Ni94ZW4uaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLQ0KPiB4ODYveGVuLmgNCj4gaW5kZXgg ZmY5MTgzMTBmNi4uMDZlZjQ3NzJjZCAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvcHVibGlj L2FyY2gteDg2L3hlbi5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLXg4Ni94ZW4u aA0KPiBAQCAtMjkzLDEyICsyOTMsMTUgQEAgc3RydWN0IHhlbl9hcmNoX2RvbWFpbmNvbmZpZyB7 DQo+ICAjZGVmaW5lIFhFTl9YODZfRU1VX1BJVCAgICAgICAgICAgICAoMVU8PF9YRU5fWDg2X0VN VV9QSVQpDQo+ICAjZGVmaW5lIF9YRU5fWDg2X0VNVV9VU0VfUElSUSAgICAgICA5DQo+ICAjZGVm aW5lIFhFTl9YODZfRU1VX1VTRV9QSVJRICAgICAgICAoMVU8PF9YRU5fWDg2X0VNVV9VU0VfUElS USkNCj4gKyNkZWZpbmUgX1hFTl9YODZfRU1VX1ZQQ0kgICAgICAgICAgIDEwDQo+ICsjZGVmaW5l IFhFTl9YODZfRU1VX1ZQQ0kgICAgICAgICAgICAoMVU8PF9YRU5fWDg2X0VNVV9WUENJKQ0KPiAN Cj4gICNkZWZpbmUgWEVOX1g4Nl9FTVVfQUxMICAgICAgICAgICAgIChYRU5fWDg2X0VNVV9MQVBJ QyB8DQo+IFhFTl9YODZfRU1VX0hQRVQgfCAgXA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BNIHwgWEVOX1g4Nl9FTVVfUlRDIHwgICAgICBcDQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX1g4Nl9FTVVfSU9BUElD IHwgWEVOX1g4Nl9FTVVfUElDIHwgIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYRU5fWDg2X0VNVV9WR0EgfCBYRU5fWDg2X0VNVV9JT01NVSB8ICAgXA0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BJVCB8IFhFTl9Y ODZfRU1VX1VTRV9QSVJRKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFhFTl9YODZfRU1VX1BJVCB8IFhFTl9YODZfRU1VX1VTRV9QSVJRIHxcDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX1g4Nl9FTVVfVlBDSSkNCj4gICAgICB1aW50 MzJfdCBlbXVsYXRpb25fZmxhZ3M7DQo+ICB9Ow0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL3hlbi9wY2kuaCBiL3hlbi9pbmNsdWRlL3hlbi9wY2kuaA0KPiBpbmRleCBkZDVlYzQzYTcw Li5iN2E2YWJmYzUzIDEwMDY0NA0KPiAtLS0gYS94ZW4vaW5jbHVkZS94ZW4vcGNpLmgNCj4gKysr IGIveGVuL2luY2x1ZGUveGVuL3BjaS5oDQo+IEBAIC0xMTIsNiArMTEyLDkgQEAgc3RydWN0IHBj aV9kZXYgew0KPiAgI2RlZmluZSBQVF9GQVVMVF9USFJFU0hPTEQgMTANCj4gICAgICB9IGZhdWx0 Ow0KPiAgICAgIHU2NCB2Zl9ybGVuWzZdOw0KPiArDQo+ICsgICAgLyogRGF0YSBmb3IgdlBDSS4g Ki8NCj4gKyAgICBzdHJ1Y3QgdnBjaSAqdnBjaTsNCj4gIH07DQo+IA0KPiAgI2RlZmluZSBmb3Jf ZWFjaF9wZGV2KGRvbWFpbiwgcGRldikgXA0KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVu L3BjaV9yZWdzLmggYi94ZW4vaW5jbHVkZS94ZW4vcGNpX3JlZ3MuaA0KPiBpbmRleCBlY2Q2MTI0 ZDkxLi5jYzRlZTNiODNlIDEwMDY0NA0KPiAtLS0gYS94ZW4vaW5jbHVkZS94ZW4vcGNpX3JlZ3Mu aA0KPiArKysgYi94ZW4vaW5jbHVkZS94ZW4vcGNpX3JlZ3MuaA0KPiBAQCAtMjMsNiArMjMsMTQg QEANCj4gICNkZWZpbmUgTElOVVhfUENJX1JFR1NfSA0KPiANCj4gIC8qDQo+ICsgKiBDb252ZW50 aW9uYWwgUENJIGFuZCBQQ0ktWCBNb2RlIDEgZGV2aWNlcyBoYXZlIDI1NiBieXRlcyBvZg0KPiAr ICogY29uZmlndXJhdGlvbiBzcGFjZS4gIFBDSS1YIE1vZGUgMiBhbmQgUENJZSBkZXZpY2VzIGhh dmUgNDA5NiBieXRlcyBvZg0KPiArICogY29uZmlndXJhdGlvbiBzcGFjZS4NCj4gKyAqLw0KPiAr I2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX1NJWkUJMjU2DQo+ICsjZGVmaW5lIFBDSV9DRkdfU1BBQ0Vf RVhQX1NJWkUJNDA5Ng0KPiArDQo+ICsvKg0KPiAgICogVW5kZXIgUENJLCBlYWNoIGRldmljZSBo YXMgMjU2IGJ5dGVzIG9mIGNvbmZpZ3VyYXRpb24gYWRkcmVzcyBzcGFjZSwNCj4gICAqIG9mIHdo aWNoIHRoZSBmaXJzdCA2NCBieXRlcyBhcmUgc3RhbmRhcmRpemVkIGFzIGZvbGxvd3M6DQo+ICAg Ki8NCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi92cGNpLmggYi94ZW4vaW5jbHVkZS94 ZW4vdnBjaS5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjlm Mjg2NGZiMGMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi94ZW4vaW5jbHVkZS94ZW4vdnBjaS5o DQo+IEBAIC0wLDAgKzEsNTMgQEANCj4gKyNpZm5kZWYgX1hFTl9WUENJX0hfDQo+ICsjZGVmaW5l IF9YRU5fVlBDSV9IXw0KPiArDQo+ICsjaW5jbHVkZSA8eGVuL3BjaS5oPg0KPiArI2luY2x1ZGUg PHhlbi90eXBlcy5oPg0KPiArI2luY2x1ZGUgPHhlbi9saXN0Lmg+DQo+ICsNCj4gK3R5cGVkZWYg dWludDMyX3QgdnBjaV9yZWFkX3QoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVk IGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOw0K PiArDQo+ICt0eXBlZGVmIHZvaWQgdnBjaV93cml0ZV90KGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpw ZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCB2YWwsIHZvaWQgKmRhdGEpOw0KPiArDQo+ICt0eXBlZGVmIGludCB2cGNpX3JlZ2lzdGVy X2luaXRfdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsNCj4gKw0KPiArI2RlZmluZSBSRUdJU1RFUl9W UENJX0lOSVQoeCkgICAgICAgICAgICAgICAgICAgXA0KPiArICBzdGF0aWMgdnBjaV9yZWdpc3Rl cl9pbml0X3QgKmNvbnN0IHgjI19lbnRyeSAgXA0KPiArICAgICAgICAgICAgICAgX191c2VkX3Nl Y3Rpb24oIi5kYXRhLnZwY2kiKSA9IHgNCj4gKw0KPiArLyogQWRkIHZQQ0kgaGFuZGxlcnMgdG8g ZGV2aWNlLiAqLw0KPiAraW50IF9fbXVzdF9jaGVjayB2cGNpX2FkZF9oYW5kbGVycyhzdHJ1Y3Qg cGNpX2RldiAqZGV2KTsNCj4gKw0KPiArLyogQWRkL3JlbW92ZSBhIHJlZ2lzdGVyIGhhbmRsZXIu ICovDQo+ICtpbnQgX19tdXN0X2NoZWNrIHZwY2lfYWRkX3JlZ2lzdGVyKHN0cnVjdCB2cGNpICp2 cGNpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cGNpX3JlYWRfdCAq cmVhZF9oYW5kbGVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cGNp X3dyaXRlX3QgKndyaXRlX2hhbmRsZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsNCj4gK2ludCBfX211c3Rf Y2hlY2sgdnBjaV9yZW1vdmVfcmVnaXN0ZXIoc3RydWN0IHZwY2kgKnZwY2ksIHVuc2lnbmVkIGlu dA0KPiBvZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBzaXplKTsNCj4gKw0KPiArLyogR2VuZXJpYyByZWFkL3dyaXRlIGhhbmRsZXJz IGZvciB0aGUgUENJIGNvbmZpZyBzcGFjZS4gKi8NCj4gK3VpbnQzMl90IHZwY2lfcmVhZChwY2lf c2JkZl90IHNiZGYsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBzaXplKTsNCj4gK3Zv aWQgdnBjaV93cml0ZShwY2lfc2JkZl90IHNiZGYsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVk IGludCBzaXplLA0KPiArICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdGEpOw0KPiArDQo+ICtz dHJ1Y3QgdnBjaSB7DQo+ICsgICAgLyogTGlzdCBvZiB2UENJIGhhbmRsZXJzIGZvciBhIGRldmlj ZS4gKi8NCj4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGhhbmRsZXJzOw0KPiArICAgIHNwaW5sb2Nr X3QgbG9jazsNCj4gK307DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICsvKg0KPiArICogTG9jYWwg dmFyaWFibGVzOg0KPiArICogbW9kZTogQw0KPiArICogYy1maWxlLXN0eWxlOiAiQlNEIg0KPiAr ICogYy1iYXNpYy1vZmZzZXQ6IDQNCj4gKyAqIHRhYi13aWR0aDogNA0KPiArICogaW5kZW50LXRh YnMtbW9kZTogbmlsDQo+ICsgKiBFbmQ6DQo+ICsgKi8NCj4gLS0NCj4gMi4xMy41IChBcHBsZSBH aXQtOTQpDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=