From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v5 02/11] vpci: introduce basic handlers to trap accesses to the PCI config space Date: Tue, 22 Aug 2017 12:05:34 +0000 Message-ID: <013c462daa0d4aa58c197bf05995f1d3@AMSPEX02CL03.citrite.net> References: <20170814142850.39133-1-roger.pau@citrix.com> <20170814142850.39133-3-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dk7wH-0003RM-6i for xen-devel@lists.xenproject.org; Tue, 22 Aug 2017 12:05:45 +0000 In-Reply-To: <20170814142850.39133-3-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 , Andrew Cooper , Jan Beulich , Ian Jackson , "boris.ostrovsky@oracle.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMTQgQXVndXN0IDIwMTcgMTU6MjkN Cj4gVG86IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBDYzogYm9yaXMub3N0cm92 c2t5QG9yYWNsZS5jb207IGtvbnJhZC53aWxrQG9yYWNsZS5jb207IFJvZ2VyIFBhdSBNb25uZQ0K PiA8cm9nZXIucGF1QGNpdHJpeC5jb20+OyBJYW4gSmFja3NvbiA8SWFuLkphY2tzb25AY2l0cml4 LmNvbT47IFdlaSBMaXUNCj4gPHdlaS5saXUyQGNpdHJpeC5jb20+OyBKYW4gQmV1bGljaCA8amJl dWxpY2hAc3VzZS5jb20+OyBBbmRyZXcgQ29vcGVyDQo+IDxBbmRyZXcuQ29vcGVyM0BjaXRyaXgu Y29tPjsgUGF1bCBEdXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT4NCj4gU3ViamVjdDog W1BBVENIIHY1IDAyLzExXSB2cGNpOiBpbnRyb2R1Y2UgYmFzaWMgaGFuZGxlcnMgdG8gdHJhcCBh Y2Nlc3NlcyB0bw0KPiB0aGUgUENJIGNvbmZpZyBzcGFjZQ0KPiANCj4gVGhpcyBmdW5jdGlvbmFs aXR5IGlzIGdvaW5nIHRvIHJlc2lkZSBpbiB2cGNpLmMgKGFuZCB0aGUgY29ycmVzcG9uZGluZw0K PiB2cGNpLmggaGVhZGVyKSwgYW5kIHNob3VsZCBiZSBhcmNoLWFnbm9zdGljLiBUaGUgaGFuZGxl cnMgaW50cm9kdWNlZA0KPiBpbiB0aGlzIHBhdGNoIHNldHVwIHRoZSBiYXNpYyBmdW5jdGlvbmFs aXR5IHJlcXVpcmVkIGluIG9yZGVyIHRvIHRyYXANCj4gYWNjZXNzZXMgdG8gdGhlIFBDSSBjb25m aWcgc3BhY2UsIGFuZCBhbGxvdyBkZWNvZGluZyB0aGUgYWRkcmVzcyBhbmQNCj4gZmluZGluZyB0 aGUgY29ycmVzcG9uZGluZyBoYW5kbGVyIHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgYWNjZXNzDQo+ IChhbHRob3VnaCBubyBoYW5kbGVycyBhcmUgaW1wbGVtZW50ZWQpLg0KPiANCj4gTm90ZSB0aGF0 IHRoZSB0cmFwcyB0byB0aGUgUENJIElPIHBvcnRzIHJlZ2lzdGVycyAoMHhjZjgvMHhjZmMpIGFy ZQ0KPiBzZXR1cCBpbnNpZGUgb2YgYSB4ODYgSFZNIGZpbGUsIHNpbmNlIHRoYXQncyBub3Qgc2hh cmVkIHdpdGggb3RoZXINCj4gYXJjaGVzLg0KPiANCj4gQSBuZXcgWEVOX1g4Nl9FTVVfVlBDSSB4 ODYgZG9tYWluIGZsYWcgaXMgYWRkZWQgaW4gb3JkZXIgdG8gc2lnbmFsIFhlbg0KPiB3aGV0aGVy IGEgZG9tYWluIHNob3VsZCB1c2UgdGhlIG5ld2x5IGludHJvZHVjZWQgdlBDSSBoYW5kbGVycywg dGhpcw0KPiBpcyBvbmx5IGVuYWJsZWQgZm9yIFBWSCBEb20wIGF0IHRoZSBtb21lbnQuDQo+IA0K PiBBIHZlcnkgc2ltcGxlIHVzZXItc3BhY2UgdGVzdCBpcyBhbHNvIHByb3ZpZGVkLCBzbyB0aGF0 IHRoZSBiYXNpYw0KPiBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2UENJIHRyYXBzIGNhbiBiZSBhc3Nl cnRlZC4gVGhpcyBoYXMgYmVlbiBwcm92ZW4NCj4gcXVpdGUgaGVscGZ1bCBkdXJpbmcgZGV2ZWxv cG1lbnQsIHNpbmNlIHRoZSBsb2dpYyB0byBoYW5kbGUgcGFydGlhbA0KPiBhY2Nlc3NlcyBvciBh Y2Nlc3NlcyB0aGF0IGV4cGFuZCBhY3Jvc3MgbXVsdGlwbGUgcmVnaXN0ZXJzIGlzIG5vdA0KPiB0 cml2aWFsLg0KPiANCj4gVGhlIGhhbmRsZXJzIGZvciB0aGUgcmVnaXN0ZXJzIGFyZSBhZGRlZCB0 byBhIGxpbmtlZCBsaXN0IHRoYXQncyBrZWVwDQo+IHNvcnRlZCBhdCBhbGwgdGltZXMuIEJvdGgg dGhlIHJlYWQgYW5kIHdyaXRlIGhhbmRsZXJzIHN1cHBvcnQgYWNjZXNzZXMNCj4gdGhhdCBleHBh bmQgYWNyb3NzIG11bHRpcGxlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgY29udGFpbiBnYXBzIG5v dA0KPiBlbXVsYXRlZC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJv Z2VyLnBhdUBjaXRyaXguY29tPg0KPiAtLS0NCj4gQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3Nv bkBldS5jaXRyaXguY29tPg0KPiBDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4NCj4g Q2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4NCj4gQ2M6IEFuZHJldyBDb29wZXIg PGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+DQo+IENjOiBQYXVsIER1cnJhbnQgPHBhdWwuZHVy cmFudEBjaXRyaXguY29tPg0KPiAtLS0NCj4gQ2hhbmdlcyBzaW5jZSB2NDoNCj4gKiBVc2VyLXNw YWNlIHRlc3QgaGFybmVzczoNCj4gIC0gRG8gbm90IHJlZGlyZWN0IHRoZSBvdXRwdXQgb2YgdGhl IHRlc3QuDQo+ICAtIEFkZCBtYWluLmMgYW5kIGVtdWwuaCBhcyBkZXBlbmRlbmNpZXMgb2YgdGhl IE1ha2VmaWxlIHRhcmdldC4NCj4gIC0gVXNlIHRoZSBzYW1lIHJ1bGUgdG8gbW9kaWZ5IHRoZSB2 cGNpIGFuZCBsaXN0IGhlYWRlcnMuDQo+ICAtIFJlbW92ZSB1bmRlcnNjb3JlcyBmcm9tIGxvY2Fs IG1hY3JvIHZhcmlhYmxlcy4NCj4gIC0gQWRkIF9jaGVjayBzdWZmaXggdG8gdGhlIHRlc3QgaGFy bmVzcyBtdWx0aXJlYWQgZnVuY3Rpb24uDQo+ICAtIENoYW5nZSB0aGUgdmFsdWUgd3JpdHRlbiBi eSBldmVyeSBkaWZmZXJlbnQgc2l6ZSBpbiB0aGUgbXVsdGl3cml0ZQ0KPiAgICB0ZXN0Lg0KPiAg LSBVc2UgeyB9IHRvIGluaXRpYWxpemUgdGhlIHIxNiBhbmQgcjIwIGFycmF5cyAoaW5zdGVhZCBv ZiB7IDAgfSkuDQo+ICAtIFBlcmZvcm0gc29tZSBvZiB0aGUgcmVhZCBjaGVja3Mgd2l0aCB0aGUg bG9jYWwgdmFyaWFibGUgZGlyZWN0bHkuDQo+ICAtIEV4cGFuZCBzb21lIGNvbW1lbnRzLg0KPiAg LSBJbXBsZW1lbnQgYSBkdW1teSByd2xvY2suDQo+ICogSHlwZXJ2aXNvciBjb2RlOg0KPiAgLSBH dWFyZCB0aGUgbGlua2VyIHNjcmlwdCBjaGFuZ2VzIHdpdGggQ09ORklHX0hBU19QQ0kuDQo+ICAt IFJlbmFtZSB2cGNpX2FjY2Vzc19jaGVjayB0byB2cGNpX2FjY2Vzc19hbGxvd2VkIGFuZCBtYWtl IGl0IHJldHVybg0KPiAgICBib29sLg0KPiAgLSBNYWtlIGh2bV9wY2lfZGVjb2RlX2FkZHIgcmV0 dXJuIHRoZSByZWdpc3RlciBhcyByZXR1cm4gdmFsdWUuDQo+ICAtIFVzZSB+MyBpbnN0ZWFkIG9m IDB4ZmZmYyB0byByZW1vdmUgdGhlIHJlZ2lzdGVyIG9mZnNldCB3aGVuDQo+ICAgIGNoZWNraW5n IGFjY2Vzc2VzIHRvIElPIHBvcnRzLg0KPiAgLSBzL2hlYWQvcHJldiBpbiB2cGNpX2FkZF9yZWdp c3Rlci4NCj4gIC0gQWRkIHBhcmVudGhlc2VzIGFyb3VuZCAmIGluIHZwY2lfYWRkX3JlZ2lzdGVy Lg0KPiAgLSBGaXggcmVnaXN0ZXIgcmVtb3ZhbC4NCj4gIC0gQ2hhbmdlIHRoZSBCVUdzIGluIHZw Y2lfe3JlYWQvd3JpdGV9X2h3IGhlbHBlcnMgdG8NCj4gICAgQVNTRVJUX1VOUkVBQ0hBQkxFLg0K PiAgLSBNYWtlIG1lcmdlX3Jlc3VsdCBzdGF0aWMgYW5kIGNoYW5nZSB0aGUgY29tcHV0YXRpb24g b2YgdGhlIG1hc2sgdG8NCj4gICAgYXZvaWQgdXNpbmcgYSB1aW50NjRfdC4NCj4gIC0gTW9kaWZ5 IHZwY2lfcmVhZCB0byBvbmx5IHJlYWQgZnJvbSBoYXJkd2FyZSB0aGUgbm90LWVtdWxhdGVkIGdh cHMuDQo+ICAtIFJlbW92ZSB0aGUgdnBjaV92YWwgdW5pb24gYW5kIHVzZSBhIHVpbnQzMl90IGlu c3RlYWQuDQo+ICAtIENoYW5nZSBoYW5kbGVyIHJlYWQgdHlwZSB0byByZXR1cm4gYSB1aW50MzJf dCBpbnN0ZWFkIG9mIG1vZGlmeWluZw0KPiAgICBhIHZhcmlhYmxlIHBhc3NlZCBieSByZWZlcmVu Y2UuDQo+ICAtIENvbnN0aWZ5IHRoZSBkYXRhIG9wYXF1ZSBwYXJhbWV0ZXIgb2YgcmVhZCBoYW5k bGVycy4NCj4gIC0gQ2hhbmdlIHRoZSBzaXplIHBhcmFtZXRlciBvZiB0aGUgdnBjaV97cmVhZC93 cml0ZX0gZnVuY3Rpb25zIHRvDQo+ICAgIHVuc2lnbmVkIGludC4NCj4gIC0gUGxhY2UgdGhlIGFy cmF5IG9mIGluaXRpYWxpemF0aW9uIGhhbmRsZXJzIGluIGluaXQucm9kYXRhIG9yDQo+ICAgIC5y b2RhdGEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgbGF0ZS1od2RvbSBpcyBlbmFibGVkLg0KPiAgLSBS ZW1vdmUgdGhlIHBjaV9kZXZzIGxvY2ssIGFzc3VtZSB0aGUgRG9tMCBpcyB3ZWxsIGJlaGF2ZWQg YW5kIHdvbid0DQo+ICAgIHJlbW92ZSB0aGUgZGV2aWNlIHdoaWxlIHRyeWluZyB0byBhY2Nlc3Mg aXQuDQo+ICAtIENoYW5nZSB0aGUgcmVjdXJzaXZlIHNwaW5sb2NrIGludG8gYSBydyBsb2NrIGZv ciBwZXJmb3JtYW5jZQ0KPiAgICByZWFzb25zLg0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MzoNCj4g KiBVc2VyLXNwYWNlIHRlc3QgaGFybmVzczoNCj4gIC0gRml4IHNwYWNlcyBpbiBjb250YWluZXJf b2YgbWFjcm8uDQo+ICAtIEltcGxlbWVudCBhIGR1bW15IGxvY2tpbmcgZnVuY3Rpb25zLg0KPiAg LSBSZW1vdmUgJ2N1cnJlbnQnIG1hY3JvIG1ha2UgY3VycmVudCBhIHBvaW50ZXIgdG8gdGhlIHN0 YXRpY2FsbHkNCj4gICAgYWxsb2NhdGVkIHZwY3UuDQo+ICAtIFJlbW92ZSB1bm5lZWRlZCBwYXJl bnRoZXNlcyBpbiB0aGUgcGNpX2NvbmZfcmVhZFggbWFjcm9zLg0KPiAgLSBGaXggdGhlIG5hbWUg b2YgdGhlIHdyaXRlIHRlc3QgbWFjcm8uDQo+ICAtIFJlbW92ZSB0aGUgZHVtbXkgRVhQT1JUX1NZ TUJPTCBtYWNybyAodGhpcyB3YXMgbmVlZGVkIGJ5IHRoZSBSQg0KPiAgICBjb2RlIG9ubHkpLg0K PiAgLSBJbXBvcnQgdGhlIG1heCBtYWNyby4NCj4gIC0gVGVzdCBhbGwgcG9zc2libGUgcmVhZC93 cml0ZSBzaXplIGNvbWJpbmF0aW9ucyB3aXRoIGFsbCBwb3NzaWJsZQ0KPiAgICBlbXVsYXRlZCBy ZWdpc3RlciBzaXplcy4NCj4gIC0gSW50cm9kdWNlIGEgdGVzdCBmb3IgcmVnaXN0ZXIgcmVtb3Zh bC4NCj4gKiBIeXBlcnZpc29yIGNvZGU6DQo+ICAtIFVzZSBhIHNvcnRlZCBsaXN0IGluIG9yZGVy IHRvIHN0b3JlIHRoZSBjb25maWcgc3BhY2UgaGFuZGxlcnMuDQo+ICAtIFJlbW92ZSBzb21lIHVu bmVlZGVkICdlbHNlJyBicmFuY2hlcy4NCj4gIC0gTWFrZSB0aGUgSU8gcG9ydCBoYW5kbGVycyBh bHdheXMgcmV0dXJuIFg4NkVNVUxfT0tBWSwgYW5kIHNldCB0aGUNCj4gICAgZGF0YSB0byBhbGwg MSdzIGluIGNhc2Ugb2YgcmVhZCBmYWlsdXJlICh3cml0ZSBhcmUgc2ltcGx5IGlnbm9yZWQpLg0K PiAgLSBJbiBodm1fc2VsZWN0X2lvcmVxX3NlcnZlciByZXVzZSBsb2NhbCB2YXJpYWJsZXMgd2hl biBjYWxsaW5nDQo+ICAgIFhFTl9ETU9QX1BDSV9TQkRGLg0KPiAgLSBTdG9yZSB0aGUgcG9pbnRl cnMgdG8gdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBpbiB0aGUgLnJvZGF0YQ0KPiAgICBz ZWN0aW9uLg0KPiAgLSBEbyBub3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgeGVuX3ZwY2lf YWRkX2hhbmRsZXJzIGluDQo+ICAgIHNldHVwX29uZV9od2RvbV9kZXZpY2UuDQo+ICAtIFJlbW92 ZSB0aGUgdnBjaV9pbml0IG1hY3JvLg0KPiAgLSBEbyBub3QgaGlkZSB0aGUgcG9pbnRlcnMgaW5z aWRlIG9mIHRoZSB2cGNpX3tyZWFkL3dyaXRlfV90DQo+ICAgIHR5cGVkZWZzLg0KPiAgLSBSZW5h bWUgcHJpdl9kYXRhIHRvIHByaXZhdGUgaW4gdnBjaV9yZWdpc3Rlci4NCj4gIC0gU2ltcGxpZnkg Y2hlY2tpbmcgZm9yIHJlZ2lzdGVyIG92ZXJsYXAgaW4gdnBjaV9yZWdpc3Rlcl9jbXAuDQo+ICAt IENoZWNrIHRoYXQgdGhlIG9mZnNldCBhbmQgdGhlIGxlbmd0aCBtYXRjaCBiZWZvcmUgcmVtb3Zp bmcgYQ0KPiAgICByZWdpc3RlciBpbiB4ZW5fdnBjaV9yZW1vdmVfcmVnaXN0ZXIuDQo+ICAtIE1h a2UgdnBjaV9yZWFkX2h3IHJldHVybiBhIHZhbHVlIHJhdGhlciB0aGFuIHN0b3JpbmcgaXQgaW4g YQ0KPiAgICBwb2ludGVyIHBhc3NlZCBieSBwYXJhbWV0ZXIuDQo+ICAtIEhhbmRsZXIgZGlzcGF0 Y2hlciBmdW5jdGlvbnMgdnBjaV97cmVhZC93cml0ZX0gbm8gbG9uZ2VyIHJldHVybiBhbg0KPiAg ICBlcnJvciBjb2RlLCBlcnJvcnMgb24gcmVhZHMvd3JpdGVzIHNob3VsZCBiZSB0cmVhdGVkIGxp a2UgaGFyZHdhcmUNCj4gICAgKHdyaXRlcyBpZ25vcmVkLCByZWFkcyByZXR1cm4gYWxsIDEncyBv ciBnYXJiYWdlKS4NCj4gIC0gTWFrZSBzdXJlIHBjaWRldnMgaXMgbG9ja2VkIGJlZm9yZSBjYWxs aW5nIHBjaV9nZXRfcGRldl9ieV9kb21haW4uDQo+ICAtIFVzZSBhIHJlY3Vyc2l2ZSBzcGlubG9j ayBmb3IgdGhlIHZwY2kgbG9jaywgc28gdGhhdCBzcGluX2lzX2xvY2tlZA0KPiAgICBjaGVja3Mg dGhhdCB0aGUgY3VycmVudCBDUFUgaXMgaG9sZGluZyB0aGUgbG9jay4NCj4gIC0gTWFrZSB0aGUg Y29kZSBsZXNzIGVycm9yLWNoYXR0eSBieSByZW1vdmluZyBzb21lIG9mIHRoZSBwcmludGsncy4N Cj4gIC0gUGFzcyB0aGUgc2xvdCBhbmQgdGhlIGZ1bmN0aW9uIGFzIHNlcGFyYXRlIHBhcmFtZXRl cnMgdG8gdGhlDQo+ICAgIGhhbmRsZXIgZGlzcGF0Y2hlcnMgKGluc3RlYWQgb2YgcGFzc2luZyBk ZXZmbikuDQo+ICAtIEFsbG93IGhhbmRsZXJzIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBlaXRoZXIg YSByZWFkIG9yIHdyaXRlDQo+ICAgIGZ1bmN0aW9uIG9ubHksIHRoZSBtaXNzaW5nIGhhbmRsZXIg d2lsbCBiZSByZXBsYWNlZCBieSBhIGR1bW15DQo+ICAgIGhhbmRsZXIgKHdyaXRlcyBpZ25vcmVk LCByZWFkcyByZXR1cm4gMSdzKS4NCj4gIC0gSW50cm9kdWNlIFBDSV9DRkdfU1BBQ0VfKiBkZWZp bmVzIGZyb20gTGludXguDQo+ICAtIFNpbXBsaWZ5IHRoZSBoYW5kbGVyIGRpc3BhdGNoZXJzIGJ5 IHJlbW92aW5nIHRoZSByZWN1cnNpb24sIG5vdyB0aGUNCj4gICAgZGlzcGF0Y2hlcnMgaXRlcmF0 ZSBvdmVyIHRoZSBsaXN0IG9mIHNvcnRlZCBoYW5kbGVycyBhbmQgY2FsbCB0aGVtDQo+ICAgIGlu IG9yZGVyLg0KPiAgLSBSZW1vdmUgdGhlIEdFTk1BU0tfQllURVMsIFNISUZUX1JJR0hUX0JZVEVT IGFuZCBBRERfUkVTVUxUDQo+IG1hY3JvcywNCj4gICAgYW5kIGluc3RlYWQgcHJvdmlkZSBhIG1l cmdlX3Jlc3VsdCBmdW5jdGlvbiBpbiBvcmRlciB0byBtZXJnZSBhDQo+ICAgIHJlZ2lzdGVyIG91 dHB1dCBpbnRvIGEgcGFydGlhbCByZXN1bHQuDQo+ICAtIFJlbmFtZSB0aGUgZmllbGRzIG9mIHRo ZSB2cGNpX3ZhbCB1bmlvbiB0byB1OC91MTYvdTMyLg0KPiAgLSBSZW1vdmUgdGhlIHJldHVybiB2 YWx1ZXMgZnJvbSB0aGUgcmVhZC93cml0ZSBoYW5kbGVycywgZXJyb3JzDQo+ICAgIHNob3VsZCBi ZSBoYW5kbGVkIGludGVybmFsbHkgYW5kIHNpZ25hbGVkIGFzIHdvdWxkIGJlIGRvbmUgb24NCj4g ICAgbmF0aXZlIGhhcmR3YXJlLg0KPiAgLSBSZW1vdmUgdGhlIHVzYWdlIG9mIHRoZSBHRU5NQVNL IG1hY3JvLg0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MjoNCj4gIC0gR2VuZXJhbGl6ZSB0aGUgUENJ IGFkZHJlc3MgZGVjb2RpbmcgYW5kIHVzZSBpdCBmb3IgSU9SRVEgY29kZSBhbHNvLg0KPiANCj4g Q2hhbmdlcyBzaW5jZSB2MToNCj4gIC0gQWxsb3cgYWNjZXNzIHRvIGNyb3NzIGEgd29yZC1ib3Vu ZGFyeS4NCj4gIC0gQWRkIGxvY2tpbmcuDQo+ICAtIEFkZCBjbGVhbnVwIHRvIHhlbl92cGNpX2Fk ZF9oYW5kbGVycyBpbiBjYXNlIG9mIGZhaWx1cmUuDQo+IC0tLQ0KPiAgLmdpdGlnbm9yZSAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAzICsNCj4gIHRvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jICAg ICAgICAgICB8ICAgMiArLQ0KPiAgdG9vbHMvdGVzdHMvTWFrZWZpbGUgICAgICAgICAgICAgIHwg ICAxICsNCj4gIHRvb2xzL3Rlc3RzL3ZwY2kvTWFrZWZpbGUgICAgICAgICB8ICAzNyArKysrDQo+ ICB0b29scy90ZXN0cy92cGNpL2VtdWwuaCAgICAgICAgICAgfCAxMjggKysrKysrKysrKysNCj4g IHRvb2xzL3Rlc3RzL3ZwY2kvbWFpbi5jICAgICAgICAgICB8IDMxNCArKysrKysrKysrKysrKysr KysrKysrKysrKysNCj4gIHhlbi9hcmNoL2FybS94ZW4ubGRzLlMgICAgICAgICAgICB8ICAxMCAr DQo+ICB4ZW4vYXJjaC94ODYvZG9tYWluLmMgICAgICAgICAgICAgfCAgMTggKy0NCj4gIHhlbi9h cmNoL3g4Ni9odm0vaHZtLmMgICAgICAgICAgICB8ICAgMiArDQo+ICB4ZW4vYXJjaC94ODYvaHZt L2lvLmMgICAgICAgICAgICAgfCAxMTggKysrKysrKysrLQ0KPiAgeGVuL2FyY2gveDg2L3NldHVw LmMgICAgICAgICAgICAgIHwgICAzICstDQo+ICB4ZW4vYXJjaC94ODYveGVuLmxkcy5TICAgICAg ICAgICAgfCAgMTAgKw0KPiAgeGVuL2RyaXZlcnMvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAy ICstDQo+ICB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYyAgICAgfCAgIDkgKy0NCj4gIHhl bi9kcml2ZXJzL3ZwY2kvTWFrZWZpbGUgICAgICAgICB8ICAgMSArDQo+ICB4ZW4vZHJpdmVycy92 cGNpL3ZwY2kuYyAgICAgICAgICAgfCA0NDMNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCj4gIHhlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmggICAgICB8ICAgMSAr DQo+ICB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaCAgfCAgIDMgKw0KPiAgeGVuL2lu Y2x1ZGUvYXNtLXg4Ni9odm0vaW8uaCAgICAgIHwgICAzICsNCj4gIHhlbi9pbmNsdWRlL3B1Ymxp Yy9hcmNoLXg4Ni94ZW4uaCB8ICAgNSArLQ0KPiAgeGVuL2luY2x1ZGUveGVuL3BjaS5oICAgICAg ICAgICAgIHwgICAzICsNCj4gIHhlbi9pbmNsdWRlL3hlbi9wY2lfcmVncy5oICAgICAgICB8ICAg OCArDQo+ICB4ZW4vaW5jbHVkZS94ZW4vdnBjaS5oICAgICAgICAgICAgfCAgODAgKysrKysrKw0K PiAgMjMgZmlsZXMgY2hhbmdlZCwgMTE5NCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkN Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0cy92cGNpL01ha2VmaWxlDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdHMvdnBjaS9lbXVsLmgNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCB0b29scy90ZXN0cy92cGNpL21haW4uYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9k cml2ZXJzL3ZwY2kvTWFrZWZpbGUNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vZHJpdmVycy92 cGNpL3ZwY2kuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3hlbi92cGNpLmgN Cj4NCltzbmlwXQ0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9odm0uYyBiL3hlbi9h cmNoL3g4Ni9odm0vaHZtLmMNCj4gaW5kZXggNmNiOTAzZGVmNS4uY2M3M2RmOGRjNyAxMDA2NDQN Cj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9odm0uYw0KPiArKysgYi94ZW4vYXJjaC94ODYvaHZt L2h2bS5jDQo+IEBAIC0zNiw2ICszNiw3IEBADQo+ICAjaW5jbHVkZSA8eGVuL3Jhbmdlc2V0Lmg+ DQo+ICAjaW5jbHVkZSA8eGVuL21vbml0b3IuaD4NCj4gICNpbmNsdWRlIDx4ZW4vd2FybmluZy5o Pg0KPiArI2luY2x1ZGUgPHhlbi92cGNpLmg+DQo+ICAjaW5jbHVkZSA8YXNtL3NoYWRvdy5oPg0K PiAgI2luY2x1ZGUgPGFzbS9oYXAuaD4NCj4gICNpbmNsdWRlIDxhc20vY3VycmVudC5oPg0KPiBA QCAtNjI5LDYgKzYzMCw3IEBAIGludCBodm1fZG9tYWluX2luaXRpYWxpc2Uoc3RydWN0IGRvbWFp biAqZCwgdW5zaWduZWQNCj4gbG9uZyBkb21jcl9mbGFncywNCj4gICAgICAgICAgZC0+YXJjaC5o dm1fZG9tYWluLmlvX2JpdG1hcCA9IGh2bV9pb19iaXRtYXA7DQo+IA0KPiAgICAgIHJlZ2lzdGVy X2cybV9wb3J0aW9faGFuZGxlcihkKTsNCj4gKyAgICByZWdpc3Rlcl92cGNpX3BvcnRpb19oYW5k bGVyKGQpOw0KPiANCj4gICAgICBodm1faW9yZXFfaW5pdChkKTsNCj4gDQo+IGRpZmYgLS1naXQg YS94ZW4vYXJjaC94ODYvaHZtL2lvLmMgYi94ZW4vYXJjaC94ODYvaHZtL2lvLmMNCj4gaW5kZXgg MDc0Y2JhODlkYS4uYzNiNjhlYjI1NyAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9p by5jDQo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaW8uYw0KPiBAQCAtMjUsNiArMjUsNyBAQA0K PiAgI2luY2x1ZGUgPHhlbi90cmFjZS5oPg0KPiAgI2luY2x1ZGUgPHhlbi9ldmVudC5oPg0KPiAg I2luY2x1ZGUgPHhlbi9oeXBlcmNhbGwuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0KPiAg I2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+DQo+ICAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4N Cj4gICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+DQo+IEBAIC0yNjAsNyArMjYxLDcgQEAgdW5z aWduZWQgaW50IGh2bV9wY2lfZGVjb2RlX2FkZHIodW5zaWduZWQgaW50IGNmOCwNCj4gdW5zaWdu ZWQgaW50IGFkZHIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgKmJ1cywgdW5zaWduZWQgaW50ICpzbG90LA0KPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpmdW5jKQ0KPiAgew0KPiAtICAgIHVuc2lnbmVkIGxv bmcgYmRmOw0KPiArICAgIHVuc2lnbmVkIGludCBiZGY7DQoNClNob3VsZG4ndCB0aGlzIGJlIGZv bGRlZCBpbnRvIHRoZSBwcmV2aW91cyBwYXRjaCB3aGVyZSB5b3UgaW50cm9kdWNlIHRoaXMgZnVu Y3Rpb24/DQoNCj4gDQo+ICAgICAgQVNTRVJUKENGOF9FTkFCTEVEKGNmOCkpOw0KPiANCj4gQEAg LTI3NSw2ICsyNzYsMTIxIEBAIHVuc2lnbmVkIGludCBodm1fcGNpX2RlY29kZV9hZGRyKHVuc2ln bmVkIGludA0KPiBjZjgsIHVuc2lnbmVkIGludCBhZGRyLA0KPiAgICAgIHJldHVybiBDRjhfQURE Ul9MTyhjZjgpIHwgKGFkZHIgJiAzKTsNCj4gIH0NCj4gDQo+ICsvKiBEbyBzb21lIHNhbml0eSBj aGVja3MuICovDQo+ICtzdGF0aWMgYm9vbCB2cGNpX2FjY2Vzc19hbGxvd2VkKHVuc2lnbmVkIGlu dCByZWcsIHVuc2lnbmVkIGludCBsZW4pDQo+ICt7DQo+ICsgICAgLyogQ2hlY2sgYWNjZXNzIHNp emUuICovDQo+ICsgICAgaWYgKCBsZW4gIT0gMSAmJiBsZW4gIT0gMiAmJiBsZW4gIT0gNCApDQo+ ICsgICAgICAgIHJldHVybiBmYWxzZTsNCj4gKw0KPiArICAgIC8qIENoZWNrIHRoYXQgYWNjZXNz IGlzIHNpemUgYWxpZ25lZC4gKi8NCj4gKyAgICBpZiAoIChyZWcgJiAobGVuIC0gMSkpICkNCj4g KyAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgICAgcmV0dXJuIHRydWU7DQo+ICt9DQo+ ICsNCj4gKy8qIHZQQ0kgY29uZmlnIHNwYWNlIElPIHBvcnRzIGhhbmRsZXJzICgweGNmOC8weGNm YykuICovDQo+ICtzdGF0aWMgYm9vbCB2cGNpX3BvcnRpb19hY2NlcHQoY29uc3Qgc3RydWN0IGh2 bV9pb19oYW5kbGVyICpoYW5kbGVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGlvcmVxX3QgKnApDQo+ICt7DQo+ICsgICAgcmV0dXJuIChwLT5hZGRyID09IDB4Y2Y4 ICYmIHAtPnNpemUgPT0gNCkgfHwgKHAtPmFkZHIgJiB+MykgPT0gMHhjZmM7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgdnBjaV9wb3J0aW9fcmVhZChjb25zdCBzdHJ1Y3QgaHZtX2lvX2hhbmRs ZXIgKmhhbmRsZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYWRk ciwgdWludDMyX3Qgc2l6ZSwgdWludDY0X3QgKmRhdGEpDQo+ICt7DQo+ICsgICAgc3RydWN0IGRv bWFpbiAqZCA9IGN1cnJlbnQtPmRvbWFpbjsNCj4gKyAgICB1bnNpZ25lZCBpbnQgYnVzLCBzbG90 LCBmdW5jLCByZWc7DQo+ICsNCj4gKyAgICAqZGF0YSA9IH4odWludDY0X3QpMDsNCj4gKw0KPiAr ICAgIHZwY2lfcmxvY2soZCk7DQo+ICsgICAgaWYgKCBhZGRyID09IDB4Y2Y4ICkNCj4gKyAgICB7 DQo+ICsgICAgICAgIEFTU0VSVChzaXplID09IDQpOw0KPiArICAgICAgICAqZGF0YSA9IGQtPmFy Y2guaHZtX2RvbWFpbi5wY2lfY2Y4Ow0KPiArICAgICAgICB2cGNpX3J1bmxvY2soZCk7DQo+ICsg ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7DQo+ICsgICAgfQ0KPiArICAgIGlmICggIUNGOF9F TkFCTEVEKGQtPmFyY2guaHZtX2RvbWFpbi5wY2lfY2Y4KSApDQo+ICsgICAgew0KPiArICAgICAg ICB2cGNpX3J1bmxvY2soZCk7DQo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgcmVnID0gaHZtX3BjaV9kZWNvZGVfYWRkcihkLT5hcmNoLmh2bV9k b21haW4ucGNpX2NmOCwgYWRkciwgJmJ1cywNCj4gJnNsb3QsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZnVuYyk7DQo+ICsNCj4gKyAgICBpZiAoICF2cGNpX2FjY2Vzc19hbGxv d2VkKHJlZywgc2l6ZSkgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgdnBjaV9ydW5sb2NrKGQpOw0K PiArICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOw0KPiArICAgIH0NCj4gKw0KPiArICAgICpk YXRhID0gdnBjaV9yZWFkKDAsIGJ1cywgc2xvdCwgZnVuYywgcmVnLCBzaXplKTsNCj4gKyAgICB2 cGNpX3J1bmxvY2soZCk7DQo+ICsNCj4gKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IHZwY2lfcG9ydGlvX3dyaXRlKGNvbnN0IHN0cnVjdCBodm1faW9f aGFuZGxlciAqaGFuZGxlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0 X3QgYWRkciwgdWludDMyX3Qgc2l6ZSwgdWludDY0X3QgZGF0YSkNCj4gK3sNCj4gKyAgICBzdHJ1 Y3QgZG9tYWluICpkID0gY3VycmVudC0+ZG9tYWluOw0KPiArICAgIHVuc2lnbmVkIGludCBidXMs IHNsb3QsIGZ1bmMsIHJlZzsNCj4gKw0KPiArICAgIHZwY2lfd2xvY2soZCk7DQo+ICsgICAgaWYg KCBhZGRyID09IDB4Y2Y4ICkNCj4gKyAgICB7DQo+ICsgICAgICAgIEFTU0VSVChzaXplID09IDQp Ow0KPiArICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGNpX2NmOCA9IGRhdGE7DQo+ICsgICAg ICAgIHZwY2lfd3VubG9jayhkKTsNCj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsNCj4g KyAgICB9DQo+ICsgICAgaWYgKCAhQ0Y4X0VOQUJMRUQoZC0+YXJjaC5odm1fZG9tYWluLnBjaV9j ZjgpICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHZwY2lfd3VubG9jayhkKTsNCj4gKyAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZWcgPSBodm1fcGNp X2RlY29kZV9hZGRyKGQtPmFyY2guaHZtX2RvbWFpbi5wY2lfY2Y4LCBhZGRyLCAmYnVzLA0KPiAm c2xvdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jKTsNCj4gKw0KPiAr ICAgIGlmICggIXZwY2lfYWNjZXNzX2FsbG93ZWQocmVnLCBzaXplKSApDQo+ICsgICAgew0KPiAr ICAgICAgICB2cGNpX3d1bmxvY2soZCk7DQo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgdnBjaV93cml0ZSgwLCBidXMsIHNsb3QsIGZ1bmMsIHJl Zywgc2l6ZSwgZGF0YSk7DQo+ICsgICAgdnBjaV93dW5sb2NrKGQpOw0KPiArDQo+ICsgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBodm1f aW9fb3BzIHZwY2lfcG9ydGlvX29wcyA9IHsNCj4gKyAgICAuYWNjZXB0ID0gdnBjaV9wb3J0aW9f YWNjZXB0LA0KPiArICAgIC5yZWFkID0gdnBjaV9wb3J0aW9fcmVhZCwNCj4gKyAgICAud3JpdGUg PSB2cGNpX3BvcnRpb193cml0ZSwNCj4gK307DQo+ICsNCj4gK3ZvaWQgcmVnaXN0ZXJfdnBjaV9w b3J0aW9faGFuZGxlcihzdHJ1Y3QgZG9tYWluICpkKQ0KPiArew0KPiArICAgIHN0cnVjdCBodm1f aW9faGFuZGxlciAqaGFuZGxlcjsNCj4gKw0KPiArICAgIGlmICggIWhhc192cGNpKGQpICkNCj4g KyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgaGFuZGxlciA9IGh2bV9uZXh0X2lvX2hhbmRs ZXIoZCk7DQo+ICsgICAgaWYgKCAhaGFuZGxlciApDQo+ICsgICAgICAgIHJldHVybjsNCj4gKw0K PiArICAgIHJ3bG9ja19pbml0KCZkLT5hcmNoLmh2bV9kb21haW4udnBjaV9sb2NrKTsNCj4gKyAg ICBoYW5kbGVyLT50eXBlID0gSU9SRVFfVFlQRV9QSU87DQo+ICsgICAgaGFuZGxlci0+b3BzID0g JnZwY2lfcG9ydGlvX29wczsNCj4gK30NCj4gKw0KPiAgLyoNCj4gICAqIExvY2FsIHZhcmlhYmxl czoNCj4gICAqIG1vZGU6IEMNCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jIGIv eGVuL2FyY2gveDg2L3NldHVwLmMNCj4gaW5kZXggZGI1ZGY2OTU2ZC4uNWIyYzBlM2ZjMyAxMDA2 NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L3NldHVwLmMNCj4gKysrIGIveGVuL2FyY2gveDg2L3Nl dHVwLmMNCj4gQEAgLTE1NjYsNyArMTU2Niw4IEBAIHZvaWQgX19pbml0IG5vcmV0dXJuIF9fc3Rh cnRfeGVuKHVuc2lnbmVkIGxvbmcNCj4gbWJpX3ApDQo+ICAgICAgICAgIGRvbWNyX2ZsYWdzIHw9 IERPTUNSRl9odm0gfA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAoKGh2bV9mdW5jcy5oYXBf c3VwcG9ydGVkICYmICFvcHRfZG9tMF9zaGFkb3cpID8NCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICBET01DUkZfaGFwIDogMCk7DQo+IC0gICAgICAgIGNvbmZpZy5lbXVsYXRpb25fZmxhZ3Mg PQ0KPiBYRU5fWDg2X0VNVV9MQVBJQ3xYRU5fWDg2X0VNVV9JT0FQSUM7DQo+ICsgICAgICAgIGNv bmZpZy5lbXVsYXRpb25fZmxhZ3MgPQ0KPiBYRU5fWDg2X0VNVV9MQVBJQ3xYRU5fWDg2X0VNVV9J T0FQSUN8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fWDg2X0VNVV9W UENJOw0KPiAgICAgIH0NCj4gDQo+ICAgICAgLyogQ3JlYXRlIGluaXRpYWwgZG9tYWluIDAuICov DQo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYveGVuLmxkcy5TIGIveGVuL2FyY2gveDg2L3hl bi5sZHMuUw0KPiBpbmRleCBmZjA4YmJlNDJhLi5hZjFiMzBjYjJiIDEwMDY0NA0KPiAtLS0gYS94 ZW4vYXJjaC94ODYveGVuLmxkcy5TDQo+ICsrKyBiL3hlbi9hcmNoL3g4Ni94ZW4ubGRzLlMNCj4g QEAgLTc2LDYgKzc2LDExIEBAIFNFQ1RJT05TDQo+IA0KPiAgICBfXzJNX3JvZGF0YV9zdGFydCA9 IC47ICAgICAgIC8qIFN0YXJ0IG9mIDJNIHN1cGVycGFnZXMsIG1hcHBlZCBSTy4gKi8NCj4gICAg LnJvZGF0YSA6IHsNCj4gKyNpZiBkZWZpbmVkKENPTkZJR19IQVNfUENJKSAmJiBkZWZpbmVkKENP TkZJR19MQVRFX0hXRE9NKQ0KPiArICAgICAgIF9fc3RhcnRfdnBjaV9hcnJheSA9IC47DQo+ICsg ICAgICAgKigucm9kYXRhLnZwY2kpDQo+ICsgICAgICAgX19lbmRfdnBjaV9hcnJheSA9IC47DQo+ ICsjZW5kaWYNCj4gICAgICAgICBfc3JvZGF0YSA9IC47DQo+ICAgICAgICAgLyogQnVnIGZyYW1l cyB0YWJsZSAqLw0KPiAgICAgICAgIF9fc3RhcnRfYnVnX2ZyYW1lcyA9IC47DQo+IEBAIC0xNjcs NiArMTcyLDExIEBAIFNFQ1RJT05TDQo+ICAgICAgICAgX2Vpbml0dGV4dCA9IC47DQo+ICAgIH0g OnRleHQNCj4gICAgLmluaXQuZGF0YSA6IHsNCj4gKyNpZiBkZWZpbmVkKENPTkZJR19IQVNfUENJ KSAmJiAhZGVmaW5lZChDT05GSUdfTEFURV9IV0RPTSkNCj4gKyAgICAgICBfX3N0YXJ0X3ZwY2lf YXJyYXkgPSAuOw0KPiArICAgICAgICooLmluaXQucm9kYXRhLnZwY2kpDQo+ICsgICAgICAgX19l bmRfdnBjaV9hcnJheSA9IC47DQo+ICsjZW5kaWYNCj4gICAgICAgICAqKC5pbml0LnJvZGF0YSkN Cj4gICAgICAgICAqKC5pbml0LnJvZGF0YS5yZWwpDQo+ICAgICAgICAgKiguaW5pdC5yb2RhdGEu c3RyKikNCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL01ha2VmaWxlIGIveGVuL2RyaXZlcnMv TWFrZWZpbGUNCj4gaW5kZXggMTkzOTE4MDJhOC4uZDUxYzc2NjQ1MyAxMDA2NDQNCj4gLS0tIGEv eGVuL2RyaXZlcnMvTWFrZWZpbGUNCj4gKysrIGIveGVuL2RyaXZlcnMvTWFrZWZpbGUNCj4gQEAg LTEsNiArMSw2IEBADQo+ICBzdWJkaXIteSArPSBjaGFyDQo+ICBzdWJkaXItJChDT05GSUdfSEFT X0NQVUZSRVEpICs9IGNwdWZyZXENCj4gLXN1YmRpci0kKENPTkZJR19IQVNfUENJKSArPSBwY2kN Cj4gK3N1YmRpci0kKENPTkZJR19IQVNfUENJKSArPSBwY2kgdnBjaQ0KPiAgc3ViZGlyLSQoQ09O RklHX0hBU19QQVNTVEhST1VHSCkgKz0gcGFzc3Rocm91Z2gNCj4gIHN1YmRpci0kKENPTkZJR19B Q1BJKSArPSBhY3BpDQo+ICBzdWJkaXItJChDT05GSUdfVklERU8pICs9IHZpZGVvDQo+IGRpZmYg LS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL3BjaS5jDQo+IGluZGV4IDI3YmRiNzE2M2MuLjU0MzI2Y2YwYjggMTAwNjQ0DQo+IC0t LSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jDQo+ICsrKyBiL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL3BjaS5jDQo+IEBAIC0zMCw2ICszMCw3IEBADQo+ICAjaW5jbHVkZSA8eGVuL3Jh ZGl4LXRyZWUuaD4NCj4gICNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPg0KPiAgI2luY2x1ZGUgPHhl bi90YXNrbGV0Lmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZwY2kuaD4NCj4gICNpbmNsdWRlIDx4c20v eHNtLmg+DQo+ICAjaW5jbHVkZSA8YXNtL21zaS5oPg0KPiAgI2luY2x1ZGUgImF0cy5oIg0KPiBA QCAtMTAzMCw5ICsxMDMxLDEwIEBAIHN0YXRpYyB2b2lkIF9faHdkb21faW5pdA0KPiBzZXR1cF9v bmVfaHdkb21fZGV2aWNlKGNvbnN0IHN0cnVjdCBzZXR1cF9od2RvbSAqY3R4dCwNCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2 ICpwZGV2KQ0KPiAgew0KPiAgICAgIHU4IGRldmZuID0gcGRldi0+ZGV2Zm47DQo+ICsgICAgaW50 IGVycjsNCj4gDQo+ICAgICAgZG8gew0KPiAtICAgICAgICBpbnQgZXJyID0gY3R4dC0+aGFuZGxl cihkZXZmbiwgcGRldik7DQo+ICsgICAgICAgIGVyciA9IGN0eHQtPmhhbmRsZXIoZGV2Zm4sIHBk ZXYpOw0KPiANCj4gICAgICAgICAgaWYgKCBlcnIgKQ0KPiAgICAgICAgICB7DQo+IEBAIC0xMDQ1 LDYgKzEwNDcsMTEgQEAgc3RhdGljIHZvaWQgX19od2RvbV9pbml0DQo+IHNldHVwX29uZV9od2Rv bV9kZXZpY2UoY29uc3Qgc3RydWN0IHNldHVwX2h3ZG9tICpjdHh0LA0KPiAgICAgICAgICBkZXZm biArPSBwZGV2LT5waGFudG9tX3N0cmlkZTsNCj4gICAgICB9IHdoaWxlICggZGV2Zm4gIT0gcGRl di0+ZGV2Zm4gJiYNCj4gICAgICAgICAgICAgICAgUENJX1NMT1QoZGV2Zm4pID09IFBDSV9TTE9U KHBkZXYtPmRldmZuKSApOw0KPiArDQo+ICsgICAgZXJyID0gdnBjaV9hZGRfaGFuZGxlcnMocGRl dik7DQo+ICsgICAgaWYgKCBlcnIgKQ0KPiArICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAic2V0 dXAgb2YgdlBDSSBmb3IgZCVkIGZhaWxlZDogJWRcbiIsDQo+ICsgICAgICAgICAgICAgICBjdHh0 LT5kLT5kb21haW5faWQsIGVycik7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBfX2h3ZG9tX2lu aXQgX3NldHVwX2h3ZG9tX3BjaV9kZXZpY2VzKHN0cnVjdCBwY2lfc2VnICpwc2VnLA0KPiB2b2lk ICphcmcpDQo+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlIGIveGVuL2Ry aXZlcnMvdnBjaS9NYWtlZmlsZQ0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwLi44NDBhOTA2NDcwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIveGVuL2RyaXZlcnMv dnBjaS9NYWtlZmlsZQ0KPiBAQCAtMCwwICsxIEBADQo+ICtvYmoteSArPSB2cGNpLm8NCj4gZGlm ZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3ZwY2kvdnBjaS5jIGIveGVuL2RyaXZlcnMvdnBjaS92cGNp LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uZjYzZGU5N2U4 OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL3hlbi9kcml2ZXJzL3ZwY2kvdnBjaS5jDQo+IEBA IC0wLDAgKzEsNDQzIEBADQo+ICsvKg0KPiArICogR2VuZXJpYyBmdW5jdGlvbmFsaXR5IGZvciBo YW5kbGluZyBhY2Nlc3NlcyB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UNCj4gKyAqIGZy b20gZ3Vlc3RzLg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNyBDaXRyaXggU3lzdGVt cyBSJkQNCj4gKyAqDQo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2Us IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u DQo+ICsgKg0KPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KPiBHTlUNCj4g KyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gKyAqDQo+ICsg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMNCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlDQo+ IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVk ZSA8eGVuL3NjaGVkLmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZwY2kuaD4NCj4gKw0KPiArZXh0ZXJu IHZwY2lfcmVnaXN0ZXJfaW5pdF90ICpjb25zdCBfX3N0YXJ0X3ZwY2lfYXJyYXlbXTsNCj4gK2V4 dGVybiB2cGNpX3JlZ2lzdGVyX2luaXRfdCAqY29uc3QgX19lbmRfdnBjaV9hcnJheVtdOw0KPiAr I2RlZmluZSBOVU1fVlBDSV9JTklUIChfX2VuZF92cGNpX2FycmF5IC0gX19zdGFydF92cGNpX2Fy cmF5KQ0KPiArDQo+ICsvKiBJbnRlcm5hbCBzdHJ1Y3QgdG8gc3RvcmUgdGhlIGVtdWxhdGVkIFBD SSByZWdpc3RlcnMuICovDQo+ICtzdHJ1Y3QgdnBjaV9yZWdpc3RlciB7DQo+ICsgICAgdnBjaV9y ZWFkX3QgKnJlYWQ7DQo+ICsgICAgdnBjaV93cml0ZV90ICp3cml0ZTsNCj4gKyAgICB1bnNpZ25l ZCBpbnQgc2l6ZTsNCj4gKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0Ow0KPiArICAgIHZvaWQgKnBy aXZhdGU7DQo+ICsgICAgc3RydWN0IGxpc3RfaGVhZCBub2RlOw0KPiArfTsNCj4gKw0KPiAraW50 IF9faHdkb21faW5pdCB2cGNpX2FkZF9oYW5kbGVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4g K3sNCj4gKyAgICB1bnNpZ25lZCBpbnQgaTsNCj4gKyAgICBpbnQgcmMgPSAwOw0KPiArDQo+ICsg ICAgaWYgKCAhaGFzX3ZwY2kocGRldi0+ZG9tYWluKSApDQo+ICsgICAgICAgIHJldHVybiAwOw0K PiArDQo+ICsgICAgcGRldi0+dnBjaSA9IHh6YWxsb2Moc3RydWN0IHZwY2kpOw0KPiArICAgIGlm ICggIXBkZXYtPnZwY2kgKQ0KPiArICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArICAg IElOSVRfTElTVF9IRUFEKCZwZGV2LT52cGNpLT5oYW5kbGVycyk7DQo+ICsNCj4gKyAgICBmb3Ig KCBpID0gMDsgaSA8IE5VTV9WUENJX0lOSVQ7IGkrKyApDQo+ICsgICAgew0KPiArICAgICAgICBy YyA9IF9fc3RhcnRfdnBjaV9hcnJheVtpXShwZGV2KTsNCj4gKyAgICAgICAgaWYgKCByYyApDQo+ ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIHJjICkNCj4g KyAgICB7DQo+ICsgICAgICAgIHdoaWxlICggIWxpc3RfZW1wdHkoJnBkZXYtPnZwY2ktPmhhbmRs ZXJzKSApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIHN0cnVjdCB2cGNpX3JlZ2lzdGVy ICpyID0gbGlzdF9maXJzdF9lbnRyeSgmcGRldi0+dnBjaS0+aGFuZGxlcnMsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZw Y2lfcmVnaXN0ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbm9kZSk7DQo+ICsNCj4gKyAgICAgICAgICAgIGxpc3RfZGVsKCZyLT5u b2RlKTsNCj4gKyAgICAgICAgICAgIHhmcmVlKHIpOw0KPiArICAgICAgICB9DQo+ICsgICAgICAg IHhmcmVlKHBkZXYtPnZwY2kpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiByYzsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCB2cGNpX3JlZ2lzdGVyX2NtcChjb25zdCBzdHJ1Y3QgdnBj aV9yZWdpc3RlciAqcjEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCB2cGNpX3JlZ2lzdGVyICpyMikNCj4gK3sNCj4gKyAgICAvKiBSZXR1cm4gMCBpZiByZWdp c3RlcnMgb3ZlcmxhcC4gKi8NCj4gKyAgICBpZiAoIHIxLT5vZmZzZXQgPCByMi0+b2Zmc2V0ICsg cjItPnNpemUgJiYNCj4gKyAgICAgICAgIHIyLT5vZmZzZXQgPCByMS0+b2Zmc2V0ICsgcjEtPnNp emUgKQ0KPiArICAgICAgICByZXR1cm4gMDsNCj4gKyAgICBpZiAoIHIxLT5vZmZzZXQgPCByMi0+ b2Zmc2V0ICkNCj4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiArICAgIGlmICggcjEtPm9mZnNldCA+ IHIyLT5vZmZzZXQgKQ0KPiArICAgICAgICByZXR1cm4gMTsNCj4gKw0KPiArICAgIEFTU0VSVF9V TlJFQUNIQUJMRSgpOw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBEdW1teSBo b29rcywgd3JpdGVzIGFyZSBpZ25vcmVkLCByZWFkcyByZXR1cm4gMSdzICovDQo+ICtzdGF0aWMg dWludDMyX3QgdnBjaV9pZ25vcmVkX3JlYWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVk IGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p ZCAqZGF0YSkNCj4gK3sNCj4gKyAgICByZXR1cm4gfih1aW50MzJfdCkwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCB2cGNpX2lnbm9yZWRfd3JpdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVu c2lnbmVkIGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArfQ0KPiArDQo+ICtpbnQgdnBjaV9hZGRfcmVn aXN0ZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZwY2lfcmVhZF90DQo+ICpyZWFkX2hh bmRsZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgdnBjaV93cml0ZV90ICp3cml0ZV9oYW5k bGVyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBzaXplLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCBsaXN0X2hlYWQg KnByZXY7DQo+ICsgICAgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnI7DQo+ICsNCj4gKyAgICAvKiBT b21lIHNhbml0eSBjaGVja3MuICovDQo+ICsgICAgaWYgKCAoc2l6ZSAhPSAxICYmIHNpemUgIT0g MiAmJiBzaXplICE9IDQpIHx8DQo+ICsgICAgICAgICBvZmZzZXQgPj0gUENJX0NGR19TUEFDRV9F WFBfU0laRSB8fCAob2Zmc2V0ICYgKHNpemUgLSAxKSkgfHwNCj4gKyAgICAgICAgICghcmVhZF9o YW5kbGVyICYmICF3cml0ZV9oYW5kbGVyKSApDQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiArDQo+ICsgICAgciA9IHhtYWxsb2Moc3RydWN0IHZwY2lfcmVnaXN0ZXIpOw0KPiArICAgIGlm ICggIXIgKQ0KPiArICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArICAgIHItPnJlYWQg PSByZWFkX2hhbmRsZXIgPzogdnBjaV9pZ25vcmVkX3JlYWQ7DQo+ICsgICAgci0+d3JpdGUgPSB3 cml0ZV9oYW5kbGVyID86IHZwY2lfaWdub3JlZF93cml0ZTsNCj4gKyAgICByLT5zaXplID0gc2l6 ZTsNCj4gKyAgICByLT5vZmZzZXQgPSBvZmZzZXQ7DQo+ICsgICAgci0+cHJpdmF0ZSA9IGRhdGE7 DQo+ICsNCj4gKyAgICB2cGNpX3dsb2NrKHBkZXYtPmRvbWFpbik7DQo+ICsNCj4gKyAgICAvKiBU aGUgbGlzdCBvZiBoYW5kbGVycyBtdXN0IGJlIGtlZXAgc29ydGVkIGF0IGFsbCB0aW1lcy4gKi8N Cj4gKyAgICBsaXN0X2Zvcl9lYWNoICggcHJldiwgJnBkZXYtPnZwY2ktPmhhbmRsZXJzICkNCj4g KyAgICB7DQo+ICsgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyICp0aGlzID0NCj4g KyAgICAgICAgICAgIGxpc3RfZW50cnkocHJldiwgY29uc3Qgc3RydWN0IHZwY2lfcmVnaXN0ZXIs IG5vZGUpOw0KPiArICAgICAgICBpbnQgY21wID0gdnBjaV9yZWdpc3Rlcl9jbXAociwgdGhpcyk7 DQo+ICsNCj4gKyAgICAgICAgaWYgKCBjbXAgPCAwICkNCj4gKyAgICAgICAgICAgIGJyZWFrOw0K PiArICAgICAgICBpZiAoIGNtcCA9PSAwICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAg dnBjaV93dW5sb2NrKHBkZXYtPmRvbWFpbik7DQo+ICsgICAgICAgICAgICB4ZnJlZShyKTsNCj4g KyAgICAgICAgICAgIHJldHVybiAtRUVYSVNUOw0KPiArICAgICAgICB9DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgbGlzdF9hZGRfdGFpbCgmci0+bm9kZSwgcHJldik7DQo+ICsgICAgdnBjaV93dW5s b2NrKHBkZXYtPmRvbWFpbik7DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr aW50IHZwY2lfcmVtb3ZlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNp Z25lZCBpbnQgb2Zmc2V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBzaXplKQ0KPiArew0KPiArICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyIHIgPSB7IC5v ZmZzZXQgPSBvZmZzZXQsIC5zaXplID0gc2l6ZSB9Ow0KPiArICAgIHN0cnVjdCB2cGNpX3JlZ2lz dGVyICpybTsNCj4gKw0KPiArICAgIHZwY2lfd2xvY2socGRldi0+ZG9tYWluKTsNCj4gKyAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5ICggcm0sICZwZGV2LT52cGNpLT5oYW5kbGVycywgbm9kZSApDQo+ ICsgICAgew0KPiArICAgICAgICBpbnQgY21wID0gdnBjaV9yZWdpc3Rlcl9jbXAoJnIsIHJtKTsN Cj4gKw0KPiArICAgICAgICAvKg0KPiArICAgICAgICAgKiBOQjogZG8gbm90IHVzZSBhIHN3aXRj aCBzbyB0aGF0IHdlIGNhbiB1c2UgYnJlYWsgdG8NCj4gKyAgICAgICAgICogZ2V0IG91dCBvZiB0 aGUgbGlzdCBsb29wIGVhcmxpZXIgaWYgcmVxdWlyZWQuDQo+ICsgICAgICAgICAqLw0KPiArICAg ICAgICBpZiAoICFjbXAgJiYgcm0tPm9mZnNldCA9PSBvZmZzZXQgJiYgcm0tPnNpemUgPT0gc2l6 ZSApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIGxpc3RfZGVsKCZybS0+bm9kZSk7DQo+ ICsgICAgICAgICAgICB2cGNpX3d1bmxvY2socGRldi0+ZG9tYWluKTsNCj4gKyAgICAgICAgICAg IHhmcmVlKHJtKTsNCj4gKyAgICAgICAgICAgIHJldHVybiAwOw0KPiArICAgICAgICB9DQo+ICsg ICAgICAgIGlmICggY21wIDw9IDAgKQ0KPiArICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgfQ0K PiArICAgIHZwY2lfd3VubG9jayhwZGV2LT5kb21haW4pOw0KPiArDQo+ICsgICAgcmV0dXJuIC1F Tk9FTlQ7DQo+ICt9DQo+ICsNCj4gKy8qIFdyYXBwZXJzIGZvciBwZXJmb3JtaW5nIHJlYWRzL3dy aXRlcyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gKi8NCj4gK3N0YXRpYyB1aW50MzJfdCB2 cGNpX3JlYWRfaHcodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3QsIHVuc2lnbmVkIGludCBm dW5jLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1 bnNpZ25lZCBpbnQgc2l6ZSkNCj4gK3sNCj4gKyAgICB1aW50MzJfdCBkYXRhOw0KPiArDQo+ICsg ICAgc3dpdGNoICggc2l6ZSApDQo+ICsgICAgew0KPiArICAgIGNhc2UgNDoNCj4gKyAgICAgICAg ZGF0YSA9IHBjaV9jb25mX3JlYWQzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywgcmVnKTsNCj4gKyAg ICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSAzOg0KPiArICAgICAgICAvKg0KPiArICAgICAgICAg KiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgYSA0Ynl0ZSByZWFkIGNhbiBoYXZlIDFieXRlIHRy YXBwZWQgYW5kDQo+ICsgICAgICAgICAqIHRoZSByZXN0IHBhc3NlZC10aHJvdWdoLg0KPiArICAg ICAgICAgKi8NCj4gKyAgICAgICAgaWYgKCByZWcgJiAxICkNCj4gKyAgICAgICAgew0KPiArICAg ICAgICAgICAgZGF0YSA9IHBjaV9jb25mX3JlYWQ4KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcp Ow0KPiArICAgICAgICAgICAgZGF0YSB8PSBwY2lfY29uZl9yZWFkMTYoc2VnLCBidXMsIHNsb3Qs IGZ1bmMsIHJlZyArIDEpIDw8IDg7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgZWxzZQ0KPiAr ICAgICAgICB7DQo+ICsgICAgICAgICAgICBkYXRhID0gcGNpX2NvbmZfcmVhZDE2KHNlZywgYnVz LCBzbG90LCBmdW5jLCByZWcpOw0KPiArICAgICAgICAgICAgZGF0YSB8PSBwY2lfY29uZl9yZWFk OChzZWcsIGJ1cywgc2xvdCwgZnVuYywgcmVnICsgMikgPDwgMTY7DQo+ICsgICAgICAgIH0NCj4g KyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSAyOg0KPiArICAgICAgICBkYXRhID0gcGNpX2Nv bmZfcmVhZDE2KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcpOw0KPiArICAgICAgICBicmVhazsN Cj4gKyAgICBjYXNlIDE6DQo+ICsgICAgICAgIGRhdGEgPSBwY2lfY29uZl9yZWFkOChzZWcsIGJ1 cywgc2xvdCwgZnVuYywgcmVnKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgZGVmYXVsdDoN Cj4gKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7DQo+ICsgICAgICAgIGRhdGEgPSB+KHVp bnQzMl90KTA7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVy biBkYXRhOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB2cGNpX3dyaXRlX2h3KHVuc2lnbmVk IGludCBzZWcsIHVuc2lnbmVkIGludCBidXMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBzbG90LCB1bnNpZ25lZCBpbnQgZnVuYywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHNpemUsIHVpbnQzMl90 IGRhdGEpDQo+ICt7DQo+ICsgICAgc3dpdGNoICggc2l6ZSApDQo+ICsgICAgew0KPiArICAgIGNh c2UgNDoNCj4gKyAgICAgICAgcGNpX2NvbmZfd3JpdGUzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywg cmVnLCBkYXRhKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSAzOg0KPiArICAgICAg ICAvKg0KPiArICAgICAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgYSA0Ynl0ZSB3cml0 ZSBjYW4gaGF2ZSAxYnl0ZSB0cmFwcGVkIGFuZA0KPiArICAgICAgICAgKiB0aGUgcmVzdCBwYXNz ZWQtdGhyb3VnaC4NCj4gKyAgICAgICAgICovDQo+ICsgICAgICAgIGlmICggcmVnICYgMSApDQo+ ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlOChzZWcsIGJ1cywgc2xv dCwgZnVuYywgcmVnLCBkYXRhKTsNCj4gKyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlMTYoc2Vn LCBidXMsIHNsb3QsIGZ1bmMsIHJlZyArIDEsIGRhdGEgPj4gOCk7DQo+ICsgICAgICAgIH0NCj4g KyAgICAgICAgZWxzZQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBwY2lfY29uZl93cml0 ZTE2KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcsIGRhdGEpOw0KPiArICAgICAgICAgICAgcGNp X2NvbmZfd3JpdGU4KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcgKyAyLCBkYXRhID4+IDE2KTsN Cj4gKyAgICAgICAgfQ0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIDI6DQo+ICsgICAg ICAgIHBjaV9jb25mX3dyaXRlMTYoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIHJlZywgZGF0YSk7DQo+ ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgMToNCj4gKyAgICAgICAgcGNpX2NvbmZfd3Jp dGU4KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcsIGRhdGEpOw0KPiArICAgICAgICBicmVhazsN Cj4gKyAgICBkZWZhdWx0Og0KPiArICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsNCj4gKyAg ICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogTWVyZ2UgbmV3 IGRhdGEgaW50byBhIHBhcnRpYWwgcmVzdWx0Lg0KPiArICoNCj4gKyAqIFplcm8gdGhlIGJ5dGVz IG9mICdkYXRhJyBmcm9tIFtvZmZzZXQsIG9mZnNldCArIHNpemUpLCBhbmQNCj4gKyAqIG1lcmdl IHRoZSB2YWx1ZSBmb3VuZCBpbiAnbmV3JyBmcm9tIFswLCBvZmZzZXQpIGxlZnQgc2hpZnRlZA0K PiArICogYnkgJ29mZnNldCcuDQo+ICsgKi8NCj4gK3N0YXRpYyB1aW50MzJfdCBtZXJnZV9yZXN1 bHQodWludDMyX3QgZGF0YSwgdWludDMyX3QgbmV3LCB1bnNpZ25lZCBpbnQgc2l6ZSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCkNCj4gK3sNCj4g KyAgICB1aW50MzJfdCBtYXNrID0gMHhmZmZmZmZmZiA+PiAoMzIgLSA4ICogc2l6ZSk7DQo+ICsN Cj4gKyAgICByZXR1cm4gKGRhdGEgJiB+KG1hc2sgPDwgKG9mZnNldCAqIDgpKSkgfCAoKG5ldyAm IG1hc2spIDw8IChvZmZzZXQgKiA4KSk7DQo+ICt9DQo+ICsNCj4gK3VpbnQzMl90IHZwY2lfcmVh ZCh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgc2xvdCwN Cj4gKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZnVuYywgdW5zaWduZWQgaW50IHJl ZywgdW5zaWduZWQgaW50IHNpemUpDQo+ICt7DQo+ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IGN1 cnJlbnQtPmRvbWFpbjsNCj4gKyAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldjsNCj4gKyAgICBjb25z dCBzdHJ1Y3QgdnBjaV9yZWdpc3RlciAqcjsNCj4gKyAgICB1bnNpZ25lZCBpbnQgZGF0YV9vZmZz ZXQgPSAwOw0KPiArICAgIHVpbnQzMl90IGRhdGEgPSB+KHVpbnQzMl90KTA7DQo+ICsNCj4gKyAg ICBBU1NFUlQodnBjaV9ybG9ja2VkKGQpKTsNCj4gKw0KPiArICAgIC8qIEZpbmQgdGhlIFBDSSBk ZXYgbWF0Y2hpbmcgdGhlIGFkZHJlc3MuICovDQo+ICsgICAgcGRldiA9IHBjaV9nZXRfcGRldl9i eV9kb21haW4oZCwgc2VnLCBidXMsIFBDSV9ERVZGTihzbG90LCBmdW5jKSk7DQo+ICsgICAgaWYg KCAhcGRldiApDQo+ICsgICAgICAgIHJldHVybiB2cGNpX3JlYWRfaHcoc2VnLCBidXMsIHNsb3Qs IGZ1bmMsIHJlZywgc2l6ZSk7DQo+ICsNCj4gKyAgICAvKiBSZWFkIGZyb20gdGhlIGhhcmR3YXJl IG9yIHRoZSBlbXVsYXRlZCByZWdpc3RlciBoYW5kbGVycy4gKi8NCj4gKyAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5ICggciwgJnBkZXYtPnZwY2ktPmhhbmRsZXJzLCBub2RlICkNCj4gKyAgICB7DQo+ ICsgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyIGVtdSA9IHsNCj4gKyAgICAgICAg ICAgIC5vZmZzZXQgPSByZWcgKyBkYXRhX29mZnNldCwNCj4gKyAgICAgICAgICAgIC5zaXplID0g c2l6ZSAtIGRhdGFfb2Zmc2V0DQo+ICsgICAgICAgIH07DQo+ICsgICAgICAgIGludCBjbXAgPSB2 cGNpX3JlZ2lzdGVyX2NtcCgmZW11LCByKTsNCj4gKyAgICAgICAgdWludDMyX3QgdmFsOw0KPiAr ICAgICAgICB1bnNpZ25lZCBpbnQgcmVhZF9zaXplOw0KPiArDQo+ICsgICAgICAgIGlmICggY21w IDwgMCApDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgaWYgKCBjbXAgPiAwICkN Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KPiArDQo+ICsgICAgICAgIGlmICggZW11Lm9mZnNl dCA8IHItPm9mZnNldCApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIC8qIEhlYWRpbmcg Z2FwLCByZWFkIHBhcnRpYWwgY29udGVudCBmcm9tIGhhcmR3YXJlLiAqLw0KPiArICAgICAgICAg ICAgcmVhZF9zaXplID0gci0+b2Zmc2V0IC0gZW11Lm9mZnNldDsNCj4gKyAgICAgICAgICAgIHZh bCA9IHZwY2lfcmVhZF9odyhzZWcsIGJ1cywgc2xvdCwgZnVuYywgZW11Lm9mZnNldCwgcmVhZF9z aXplKTsNCj4gKyAgICAgICAgICAgIGRhdGEgPSBtZXJnZV9yZXN1bHQoZGF0YSwgdmFsLCByZWFk X3NpemUsIGRhdGFfb2Zmc2V0KTsNCj4gKyAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IHJlYWRf c2l6ZTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIHZhbCA9IHItPnJlYWQocGRldiwg ci0+b2Zmc2V0LCByLT5wcml2YXRlKTsNCj4gKw0KPiArICAgICAgICAvKiBDaGVjayBpZiB0aGUg cmVhZCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVnaXN0ZXIuICovDQo+ICsgICAgICAgIGlmICgg ci0+b2Zmc2V0IDwgZW11Lm9mZnNldCApDQo+ICsgICAgICAgICAgICB2YWwgPj49IChlbXUub2Zm c2V0IC0gci0+b2Zmc2V0KSAqIDg7DQo+ICsNCj4gKyAgICAgICAgLyogRmluZCB0aGUgaW50ZXJz ZWN0aW9uIHNpemUgYmV0d2VlbiB0aGUgdHdvIHNldHMuICovDQo+ICsgICAgICAgIHJlYWRfc2l6 ZSA9IG1pbihlbXUub2Zmc2V0ICsgZW11LnNpemUsIHItPm9mZnNldCArIHItPnNpemUpIC0NCj4g KyAgICAgICAgICAgICAgICAgICAgbWF4KGVtdS5vZmZzZXQsIHItPm9mZnNldCk7DQo+ICsgICAg ICAgIC8qIE1lcmdlIHRoZSBlbXVsYXRlZCBkYXRhIGludG8gdGhlIG5hdGl2ZSByZWFkIHZhbHVl LiAqLw0KPiArICAgICAgICBkYXRhID0gbWVyZ2VfcmVzdWx0KGRhdGEsIHZhbCwgcmVhZF9zaXpl LCBkYXRhX29mZnNldCk7DQo+ICsgICAgICAgIGRhdGFfb2Zmc2V0ICs9IHJlYWRfc2l6ZTsNCj4g KyAgICAgICAgaWYgKCBkYXRhX29mZnNldCA9PSBzaXplICkNCj4gKyAgICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICBBU1NFUlQoZGF0YV9vZmZzZXQgPCBzaXplKTsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBpZiAoIGRhdGFfb2Zmc2V0IDwgc2l6ZSApDQo+ICsgICAgew0KPiArICAgICAgICAv KiBUYWlsaW5nIGdhcCwgcmVhZCB0aGUgcmVtYWluaW5nLiAqLw0KPiArICAgICAgICB1aW50MzJf dCB0bXBfZGF0YSA9IHZwY2lfcmVhZF9odyhzZWcsIGJ1cywgc2xvdCwgZnVuYywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnICsgZGF0YV9vZmZzZXQsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgLSBkYXRhX29m ZnNldCk7DQo+ICsNCj4gKyAgICAgICAgZGF0YSA9IG1lcmdlX3Jlc3VsdChkYXRhLCB0bXBfZGF0 YSwgc2l6ZSAtIGRhdGFfb2Zmc2V0LCBkYXRhX29mZnNldCk7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgcmV0dXJuIGRhdGEgJiAoMHhmZmZmZmZmZiA+PiAoMzIgLSA4ICogc2l6ZSkpOw0KPiArfQ0K PiArDQo+ICsvKg0KPiArICogUGVyZm9ybSBhIG1heWJlIHBhcnRpYWwgd3JpdGUgdG8gYSByZWdp c3Rlci4NCj4gKyAqDQo+ICsgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgd29yayBmb3Igc2lt cGxlIHJlZ2lzdGVycywgaWYgWGVuIG5lZWRzIHRvDQo+ICsgKiB0cmFwIGFjY2Vzc2VzIHRvIHJ3 MWMgcmVnaXN0ZXJzIChsaWtlIHRoZSBzdGF0dXMgUENJIGhlYWRlciByZWdpc3RlcikNCj4gKyAq IHRoZSBsb2dpYyBpbiB2cGNpX3dyaXRlIHdpbGwgaGF2ZSB0byBiZSBleHBhbmRlZCBpbiBvcmRl ciB0byBjb3JyZWN0bHkNCj4gKyAqIGRlYWwgd2l0aCB0aGVtLg0KPiArICovDQo+ICtzdGF0aWMg dm9pZCB2cGNpX3dyaXRlX2hlbHBlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpyLCB1bnNp Z25lZCBpbnQgc2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBvZmZzZXQsIHVpbnQzMl90IGRhdGEpDQo+ICt7DQo+ICsgICAgQVNTRVJUKHNpemUgPD0g ci0+c2l6ZSk7DQo+ICsNCj4gKyAgICBpZiAoIHNpemUgIT0gci0+c2l6ZSApDQo+ICsgICAgew0K PiArICAgICAgICB1aW50MzJfdCB2YWw7DQo+ICsNCj4gKyAgICAgICAgdmFsID0gci0+cmVhZChw ZGV2LCByLT5vZmZzZXQsIHItPnByaXZhdGUpOw0KPiArICAgICAgICBkYXRhID0gbWVyZ2VfcmVz dWx0KHZhbCwgZGF0YSwgc2l6ZSwgb2Zmc2V0KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByLT53 cml0ZShwZGV2LCByLT5vZmZzZXQsIGRhdGEgJiAoMHhmZmZmZmZmZiA+PiAoMzIgLSA4ICogci0+ c2l6ZSkpLA0KPiArICAgICAgICAgICAgIHItPnByaXZhdGUpOw0KPiArfQ0KPiArDQo+ICt2b2lk IHZwY2lfd3JpdGUodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQg aW50IHNsb3QsDQo+ICsgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZ1bmMsIHVuc2lnbmVk IGludCByZWcsIHVuc2lnbmVkIGludCBzaXplLA0KPiArICAgICAgICAgICAgICAgIHVpbnQzMl90 IGRhdGEpDQo+ICt7DQo+ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IGN1cnJlbnQtPmRvbWFpbjsN Cj4gKyAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldjsNCj4gKyAgICBjb25zdCBzdHJ1Y3QgdnBjaV9y ZWdpc3RlciAqcjsNCj4gKyAgICB1bnNpZ25lZCBpbnQgZGF0YV9vZmZzZXQgPSAwOw0KPiArDQo+ ICsgICAgQVNTRVJUKHZwY2lfd2xvY2tlZChkKSk7DQo+ICsNCj4gKyAgICAvKg0KPiArICAgICAq IEZpbmQgdGhlIFBDSSBkZXYgbWF0Y2hpbmcgdGhlIGFkZHJlc3MuDQo+ICsgICAgICogUGFzc3Ro cm91Z2ggZXZlcnl0aGluZyB0aGF0J3Mgbm90IHRyYXBwZWQuDQo+ICsgICAgICovDQo+ICsgICAg cGRldiA9IHBjaV9nZXRfcGRldl9ieV9kb21haW4oZCwgc2VnLCBidXMsIFBDSV9ERVZGTihzbG90 LCBmdW5jKSk7DQo+ICsgICAgaWYgKCAhcGRldiApDQo+ICsgICAgew0KPiArICAgICAgICB2cGNp X3dyaXRlX2h3KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcsIHNpemUsIGRhdGEpOw0KPiArICAg ICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLyogV3JpdGUgdGhlIHZhbHVlIHRv IHRoZSBoYXJkd2FyZSBvciBlbXVsYXRlZCByZWdpc3RlcnMuICovDQo+ICsgICAgbGlzdF9mb3Jf ZWFjaF9lbnRyeSAoIHIsICZwZGV2LT52cGNpLT5oYW5kbGVycywgbm9kZSApDQo+ICsgICAgew0K PiArICAgICAgICBjb25zdCBzdHJ1Y3QgdnBjaV9yZWdpc3RlciBlbXUgPSB7DQo+ICsgICAgICAg ICAgICAub2Zmc2V0ID0gcmVnICsgZGF0YV9vZmZzZXQsDQo+ICsgICAgICAgICAgICAuc2l6ZSA9 IHNpemUgLSBkYXRhX29mZnNldA0KPiArICAgICAgICB9Ow0KPiArICAgICAgICBpbnQgY21wID0g dnBjaV9yZWdpc3Rlcl9jbXAoJmVtdSwgcik7DQo+ICsgICAgICAgIHVuc2lnbmVkIGludCB3cml0 ZV9zaXplOw0KPiArDQo+ICsgICAgICAgIGlmICggY21wIDwgMCApDQo+ICsgICAgICAgICAgICBi cmVhazsNCj4gKyAgICAgICAgaWYgKCBjbXAgPiAwICkNCj4gKyAgICAgICAgICAgIGNvbnRpbnVl Ow0KPiArDQo+ICsgICAgICAgIGlmICggZW11Lm9mZnNldCA8IHItPm9mZnNldCApDQo+ICsgICAg ICAgIHsNCj4gKyAgICAgICAgICAgIC8qIEhlYWRpbmcgZ2FwLCB3cml0ZSBwYXJ0aWFsIGNvbnRl bnQgdG8gaGFyZHdhcmUuICovDQo+ICsgICAgICAgICAgICB2cGNpX3dyaXRlX2h3KHNlZywgYnVz LCBzbG90LCBmdW5jLCBlbXUub2Zmc2V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBy LT5vZmZzZXQgLSBlbXUub2Zmc2V0LCBkYXRhID4+IChkYXRhX29mZnNldCAqIDgpKTsNCj4gKyAg ICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IHItPm9mZnNldCAtIGVtdS5vZmZzZXQ7DQo+ICsgICAg ICAgIH0NCj4gKw0KPiArICAgICAgICAvKiBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gc2l6ZSBiZXR3 ZWVuIHRoZSB0d28gc2V0cy4gKi8NCj4gKyAgICAgICAgd3JpdGVfc2l6ZSA9IG1pbihlbXUub2Zm c2V0ICsgZW11LnNpemUsIHItPm9mZnNldCArIHItPnNpemUpIC0NCj4gKyAgICAgICAgICAgICAg ICAgICAgIG1heChlbXUub2Zmc2V0LCByLT5vZmZzZXQpOw0KPiArICAgICAgICB2cGNpX3dyaXRl X2hlbHBlcihwZGV2LCByLCB3cml0ZV9zaXplLCByZWcgKyBkYXRhX29mZnNldCAtIHItPm9mZnNl dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA+PiAoZGF0YV9vZmZzZXQgKiA4 KSk7DQo+ICsgICAgICAgIGRhdGFfb2Zmc2V0ICs9IHdyaXRlX3NpemU7DQo+ICsgICAgICAgIGlm ICggZGF0YV9vZmZzZXQgPT0gc2l6ZSApDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAg ICAgQVNTRVJUKGRhdGFfb2Zmc2V0IDwgc2l6ZSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYg KCBkYXRhX29mZnNldCA8IHNpemUgKQ0KPiArICAgICAgICAvKiBUYWlsaW5nIGdhcCwgd3JpdGUg dGhlIHJlbWFpbmluZy4gKi8NCj4gKyAgICAgICAgdnBjaV93cml0ZV9odyhzZWcsIGJ1cywgc2xv dCwgZnVuYywgcmVnICsgZGF0YV9vZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgc2l6 ZSAtIGRhdGFfb2Zmc2V0LCBkYXRhID4+IChkYXRhX29mZnNldCAqIDgpKTsNCj4gK30NCj4gKw0K PiArLyoNCj4gKyAqIExvY2FsIHZhcmlhYmxlczoNCj4gKyAqIG1vZGU6IEMNCj4gKyAqIGMtZmls ZS1zdHlsZTogIkJTRCINCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0DQo+ICsgKiB0YWItd2lkdGg6 IDQNCj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbA0KPiArICogRW5kOg0KPiArICovDQo+IGRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oIGIveGVuL2luY2x1ZGUvYXNt LXg4Ni9kb21haW4uaA0KPiBpbmRleCBjMTA1MjJiN2Y1Li5lYzE0MzQzYjI3IDEwMDY0NA0KPiAt LS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvZG9tYWluLmgNCj4gQEAgLTQyNyw2ICs0MjcsNyBAQCBzdHJ1Y3QgYXJjaF9kb21haW4N Cj4gICNkZWZpbmUgaGFzX3ZwaXQoZCkgICAgICAgICghISgoZCktPmFyY2guZW11bGF0aW9uX2Zs YWdzICYNCj4gWEVOX1g4Nl9FTVVfUElUKSkNCj4gICNkZWZpbmUgaGFzX3BpcnEoZCkgICAgICAg ICghISgoZCktPmFyY2guZW11bGF0aW9uX2ZsYWdzICYgXA0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFhFTl9YODZfRU1VX1VTRV9QSVJRKSkNCj4gKyNkZWZpbmUgaGFzX3ZwY2koZCkg ICAgICAgICghISgoZCktPmFyY2guZW11bGF0aW9uX2ZsYWdzICYNCj4gWEVOX1g4Nl9FTVVfVlBD SSkpDQo+IA0KPiAgI2RlZmluZSBoYXNfYXJjaF9wZGV2cyhkKSAgICAoIWxpc3RfZW1wdHkoJihk KS0+YXJjaC5wZGV2X2xpc3QpKQ0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14 ODYvaHZtL2RvbWFpbi5oIGIveGVuL2luY2x1ZGUvYXNtLQ0KPiB4ODYvaHZtL2RvbWFpbi5oDQo+ IGluZGV4IGQyODk5YzliYjIuLjNhNTRkNTA2MDYgMTAwNjQ0DQo+IC0tLSBhL3hlbi9pbmNsdWRl L2FzbS14ODYvaHZtL2RvbWFpbi5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2Rv bWFpbi5oDQo+IEBAIC0xODQsNiArMTg0LDkgQEAgc3RydWN0IGh2bV9kb21haW4gew0KPiAgICAg IC8qIExpc3Qgb2YgZ3Vlc3QgdG8gbWFjaGluZSBJTyBwb3J0cyBtYXBwaW5nLiAqLw0KPiAgICAg IHN0cnVjdCBsaXN0X2hlYWQgZzJtX2lvcG9ydF9saXN0Ow0KPiANCj4gKyAgICAvKiBMb2NrIGZv ciB0aGUgUENJIGVtdWxhdGlvbiBsYXllciAodlBDSSkuICovDQo+ICsgICAgcndsb2NrX3QgdnBj aV9sb2NrOw0KPiArDQo+ICAgICAgLyogTGlzdCBvZiBwZXJtYW5lbnRseSB3cml0ZS1tYXBwZWQg cGFnZXMuICovDQo+ICAgICAgc3RydWN0IHsNCj4gICAgICAgICAgc3BpbmxvY2tfdCBsb2NrOw0K PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaCBiL3hlbi9pbmNsdWRl L2FzbS14ODYvaHZtL2lvLmgNCj4gaW5kZXggNTE2NTliNmM3Zi4uMDEzMjJhMmUyMSAxMDA2NDQN Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaA0KPiArKysgYi94ZW4vaW5jbHVk ZS9hc20teDg2L2h2bS9pby5oDQo+IEBAIC0xNjAsNiArMTYwLDkgQEAgdW5zaWduZWQgaW50IGh2 bV9wY2lfZGVjb2RlX2FkZHIodW5zaWduZWQgaW50IGNmOCwNCj4gdW5zaWduZWQgaW50IGFkZHIs DQo+ICAgKi8NCj4gIHZvaWQgcmVnaXN0ZXJfZzJtX3BvcnRpb19oYW5kbGVyKHN0cnVjdCBkb21h aW4gKmQpOw0KPiANCj4gKy8qIEhWTSBwb3J0IElPIGhhbmRsZXIgZm9yIFBDSSBhY2Nlc3Nlcy4g Ki8NCj4gK3ZvaWQgcmVnaXN0ZXJfdnBjaV9wb3J0aW9faGFuZGxlcihzdHJ1Y3QgZG9tYWluICpk KTsNCj4gKw0KPiAgI2VuZGlmIC8qIF9fQVNNX1g4Nl9IVk1fSU9fSF9fICovDQo+IA0KPiANCj4g ZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLXg4Ni94ZW4uaCBiL3hlbi9pbmNs dWRlL3B1YmxpYy9hcmNoLQ0KPiB4ODYveGVuLmgNCj4gaW5kZXggZjIxMzMyZTg5Ny4uODZhMWEw OWE4ZCAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvcHVibGljL2FyY2gteDg2L3hlbi5oDQo+ ICsrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLXg4Ni94ZW4uaA0KPiBAQCAtMjk1LDEyICsy OTUsMTUgQEAgc3RydWN0IHhlbl9hcmNoX2RvbWFpbmNvbmZpZyB7DQo+ICAjZGVmaW5lIFhFTl9Y ODZfRU1VX1BJVCAgICAgICAgICAgICAoMVU8PF9YRU5fWDg2X0VNVV9QSVQpDQo+ICAjZGVmaW5l IF9YRU5fWDg2X0VNVV9VU0VfUElSUSAgICAgICA5DQo+ICAjZGVmaW5lIFhFTl9YODZfRU1VX1VT RV9QSVJRICAgICAgICAoMVU8PF9YRU5fWDg2X0VNVV9VU0VfUElSUSkNCj4gKyNkZWZpbmUgX1hF Tl9YODZfRU1VX1ZQQ0kgICAgICAgICAgIDEwDQo+ICsjZGVmaW5lIFhFTl9YODZfRU1VX1ZQQ0kg ICAgICAgICAgICAoMVU8PF9YRU5fWDg2X0VNVV9WUENJKQ0KPiANCj4gICNkZWZpbmUgWEVOX1g4 Nl9FTVVfQUxMICAgICAgICAgICAgIChYRU5fWDg2X0VNVV9MQVBJQyB8DQo+IFhFTl9YODZfRU1V X0hQRVQgfCAgXA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9Y ODZfRU1VX1BNIHwgWEVOX1g4Nl9FTVVfUlRDIHwgICAgICBcDQo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgWEVOX1g4Nl9FTVVfSU9BUElDIHwgWEVOX1g4Nl9FTVVfUElD IHwgIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fWDg2X0VN VV9WR0EgfCBYRU5fWDg2X0VNVV9JT01NVSB8ICAgXA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BJVCB8IFhFTl9YODZfRU1VX1VTRV9QSVJRKQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BJVCB8 IFhFTl9YODZfRU1VX1VTRV9QSVJRIHxcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgWEVOX1g4Nl9FTVVfVlBDSSkNCj4gICAgICB1aW50MzJfdCBlbXVsYXRpb25fZmxh Z3M7DQo+ICB9Ow0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9wY2kuaCBiL3hl bi9pbmNsdWRlL3hlbi9wY2kuaA0KPiBpbmRleCBlYTZhNjZiMjQ4Li5hZDVkM2NhMDMxIDEwMDY0 NA0KPiAtLS0gYS94ZW4vaW5jbHVkZS94ZW4vcGNpLmgNCj4gKysrIGIveGVuL2luY2x1ZGUveGVu L3BjaS5oDQo+IEBAIC04OCw2ICs4OCw5IEBAIHN0cnVjdCBwY2lfZGV2IHsNCj4gICNkZWZpbmUg UFRfRkFVTFRfVEhSRVNIT0xEIDEwDQo+ICAgICAgfSBmYXVsdDsNCj4gICAgICB1NjQgdmZfcmxl bls2XTsNCj4gKw0KPiArICAgIC8qIERhdGEgZm9yIHZQQ0kuICovDQo+ICsgICAgc3RydWN0IHZw Y2kgKnZwY2k7DQo+ICB9Ow0KPiANCj4gICNkZWZpbmUgZm9yX2VhY2hfcGRldihkb21haW4sIHBk ZXYpIFwNCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9wY2lfcmVncy5oIGIveGVuL2lu Y2x1ZGUveGVuL3BjaV9yZWdzLmgNCj4gaW5kZXggZWNkNjEyNGQ5MS4uY2M0ZWUzYjgzZSAxMDA2 NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUveGVuL3BjaV9yZWdzLmgNCj4gKysrIGIveGVuL2luY2x1 ZGUveGVuL3BjaV9yZWdzLmgNCj4gQEAgLTIzLDYgKzIzLDE0IEBADQo+ICAjZGVmaW5lIExJTlVY X1BDSV9SRUdTX0gNCj4gDQo+ICAvKg0KPiArICogQ29udmVudGlvbmFsIFBDSSBhbmQgUENJLVgg TW9kZSAxIGRldmljZXMgaGF2ZSAyNTYgYnl0ZXMgb2YNCj4gKyAqIGNvbmZpZ3VyYXRpb24gc3Bh Y2UuICBQQ0ktWCBNb2RlIDIgYW5kIFBDSWUgZGV2aWNlcyBoYXZlIDQwOTYgYnl0ZXMgb2YNCj4g KyAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuDQo+ICsgKi8NCj4gKyNkZWZpbmUgUENJX0NGR19TUEFD RV9TSVpFCTI1Ng0KPiArI2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX0VYUF9TSVpFCTQwOTYNCj4gKw0K PiArLyoNCj4gICAqIFVuZGVyIFBDSSwgZWFjaCBkZXZpY2UgaGFzIDI1NiBieXRlcyBvZiBjb25m aWd1cmF0aW9uIGFkZHJlc3Mgc3BhY2UsDQo+ICAgKiBvZiB3aGljaCB0aGUgZmlyc3QgNjQgYnl0 ZXMgYXJlIHN0YW5kYXJkaXplZCBhcyBmb2xsb3dzOg0KPiAgICovDQo+IGRpZmYgLS1naXQgYS94 ZW4vaW5jbHVkZS94ZW4vdnBjaS5oIGIveGVuL2luY2x1ZGUveGVuL3ZwY2kuaA0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4xMmY3Mjg3ZDdiDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIveGVuL2luY2x1ZGUveGVuL3ZwY2kuaA0KPiBAQCAtMCwwICsxLDgwIEBA DQo+ICsjaWZuZGVmIF9WUENJXw0KPiArI2RlZmluZSBfVlBDSV8NCj4gKw0KPiArI2luY2x1ZGUg PHhlbi9wY2kuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4NCj4gKyNpbmNsdWRlIDx4ZW4v bGlzdC5oPg0KPiArDQo+ICsvKg0KPiArICogSGVscGVycyBmb3IgbG9ja2luZy91bmxvY2tpbmcu DQo+ICsgKg0KPiArICogTkI6IHRoZSByZWN1cnNpdmUgdmFyaWFudHMgYXJlIHVzZWQgc28gdGhh dCBzcGluX2lzX2xvY2tlZA0KPiArICogcmV0dXJucyB3aGV0aGVyIHRoZSBsb2NrIGlzIGhvbGQg YnkgdGhlIGN1cnJlbnQgQ1BVIChpbnN0ZWFkDQo+ICsgKiBvZiBqdXN0IHJldHVybmluZyB3aGV0 aGVyIHRoZSBsb2NrIGlzIGhvbGQgYnkgYW55IENQVSkuDQo+ICsgKi8NCg0KVGhlIGNvbW1lbnQg ZG9lc24ndCBzZWVtIHRvIG1hdGNoIHRoZSB1c2Ugb2YgcmVhZC13cml0ZSBsb2NrcyBiZWxvdy4N Cg0KPiArI2RlZmluZSB2cGNpX3Jsb2NrKGQpIHJlYWRfbG9jaygmKGQpLT5hcmNoLmh2bV9kb21h aW4udnBjaV9sb2NrKQ0KPiArI2RlZmluZSB2cGNpX3dsb2NrKGQpIHdyaXRlX2xvY2soJihkKS0+ YXJjaC5odm1fZG9tYWluLnZwY2lfbG9jaykNCj4gKyNkZWZpbmUgdnBjaV9ydW5sb2NrKGQpIHJl YWRfdW5sb2NrKCYoZCktPmFyY2guaHZtX2RvbWFpbi52cGNpX2xvY2spDQo+ICsjZGVmaW5lIHZw Y2lfd3VubG9jayhkKSB3cml0ZV91bmxvY2soJihkKS0+YXJjaC5odm1fZG9tYWluLnZwY2lfbG9j aykNCj4gKyNkZWZpbmUgdnBjaV9ybG9ja2VkKGQpIHJ3X2lzX2xvY2tlZCgmKGQpLT5hcmNoLmh2 bV9kb21haW4udnBjaV9sb2NrKQ0KPiArI2RlZmluZSB2cGNpX3dsb2NrZWQoZCkgcndfaXNfd3Jp dGVfbG9ja2VkKCYoZCktDQo+ID5hcmNoLmh2bV9kb21haW4udnBjaV9sb2NrKQ0KPiArDQo+ICsv Kg0KPiArICogVGhlIHZQQ0kgaGFuZGxlcnMgd2lsbCBuZXZlciBiZSBjYWxsZWQgY29uY3VycmVu dGx5IGZvciB0aGUgc2FtZSBkb21haW4sDQo+IGl0DQo+ICsgKiBpcyBndWFyYW50ZWVkIHRoYXQg dGhlIHZwY2kgZG9tYWluIGxvY2sgd2lsbCBhbHdheXMgYmUgbG9ja2VkIHdoZW4gY2FsbGluZw0K PiArICogYW55IGhhbmRsZXIuDQo+ICsgKi8NCj4gK3R5cGVkZWYgdWludDMyX3QgdnBjaV9yZWFk X3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCByZWcsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEpOw0KPiArDQo+ICt0eXBlZGVmIHZv aWQgdnBjaV93cml0ZV90KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWwsIHZvaWQgKmRhdGEpOw0K PiArDQo+ICt0eXBlZGVmIGludCB2cGNpX3JlZ2lzdGVyX2luaXRfdChzdHJ1Y3QgcGNpX2RldiAq ZGV2KTsNCj4gKw0KPiArI2lmZGVmIENPTkZJR19MQVRFX0hXRE9NDQo+ICsjZGVmaW5lIFZQQ0lf U0VDVElPTiAiLnJvZGF0YS52cGNpIg0KPiArI2Vsc2UNCj4gKyNkZWZpbmUgVlBDSV9TRUNUSU9O ICIuaW5pdC5yb2RhdGEudnBjaSINCj4gKyNlbmRpZg0KPiArDQo+ICsjZGVmaW5lIFJFR0lTVEVS X1ZQQ0lfSU5JVCh4KSAgICAgICAgICAgICAgICAgICBcDQo+ICsgIHN0YXRpYyB2cGNpX3JlZ2lz dGVyX2luaXRfdCAqY29uc3QgeCMjX2VudHJ5ICBcDQo+ICsgICAgICAgICAgICAgICBfX3VzZWRf c2VjdGlvbihWUENJX1NFQ1RJT04pID0geA0KPiArDQo+ICsvKiBBZGQgdlBDSSBoYW5kbGVycyB0 byBkZXZpY2UuICovDQo+ICtpbnQgX19tdXN0X2NoZWNrIHZwY2lfYWRkX2hhbmRsZXJzKHN0cnVj dCBwY2lfZGV2ICpkZXYpOw0KPiArDQo+ICsvKiBBZGQvcmVtb3ZlIGEgcmVnaXN0ZXIgaGFuZGxl ci4gKi8NCj4gK2ludCBfX211c3RfY2hlY2sgdnBjaV9hZGRfcmVnaXN0ZXIoY29uc3Qgc3RydWN0 IHBjaV9kZXYgKnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZw Y2lfcmVhZF90ICpyZWFkX2hhbmRsZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZwY2lfd3JpdGVfdCAqd3JpdGVfaGFuZGxlciwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOw0KPiAr aW50IF9fbXVzdF9jaGVjayB2cGNpX3JlbW92ZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgcGNpX2Rl diAqcGRldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IG9mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHNpemUpOw0KPiArDQo+ICsvKiBHZW5lcmljIHJlYWQvd3JpdGUgaGFuZGxl cnMgZm9yIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiAqLw0KPiArdWludDMyX3QgdnBjaV9yZWFkKHVu c2lnbmVkIGludCBzZWcsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBzbG90LA0KPiAr ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmdW5jLCB1bnNpZ25lZCBpbnQgcmVnLCB1 bnNpZ25lZCBpbnQgc2l6ZSk7DQo+ICt2b2lkIHZwY2lfd3JpdGUodW5zaWduZWQgaW50IHNlZywg dW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IHNsb3QsDQo+ICsgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGZ1bmMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBzaXplLA0K PiArICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdGEpOw0KPiArDQo+ICtzdHJ1Y3QgdnBjaSB7 DQo+ICsgICAgLyogTGlzdCBvZiB2UENJIGhhbmRsZXJzIGZvciBhIGRldmljZS4gKi8NCj4gKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGhhbmRsZXJzOw0KPiArfTsNCj4gKw0KPiArI2VuZGlmDQo+ICsN Cj4gKy8qDQo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6DQo+ICsgKiBtb2RlOiBDDQo+ICsgKiBjLWZp bGUtc3R5bGU6ICJCU0QiDQo+ICsgKiBjLWJhc2ljLW9mZnNldDogNA0KPiArICogdGFiLXdpZHRo OiA0DQo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwNCj4gKyAqIEVuZDoNCj4gKyAqLw0KPiAt LQ0KPiAyLjExLjAgKEFwcGxlIEdpdC04MSkNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==