From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: Re: [PATCH v2 9/9] drm/i915: Add render decompression support Date: Tue, 28 Feb 2017 13:00:17 -0800 Message-ID: <20170228210014.GA7989@mail.bwidawsk.net> References: <20170104184232.23048-10-ville.syrjala@linux.intel.com> <20170105151454.12862-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jason Ekstrand Cc: Vandana Kannan , intel-gfx@lists.freedesktop.org, Maling list - DRI developers , Chad Versace , Paulo Zanoni List-Id: dri-devel@lists.freedesktop.org T24gMTctMDItMjggMTI6MTg6MzksIEphc29uIEVrc3RyYW5kIHdyb3RlOgo+T24gVGh1LCBKYW4g NSwgMjAxNyBhdCA3OjE0IEFNLCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+IHdyb3Rl Ogo+Cj4+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5j b20+Cj4+Cj4+IFNLTCsgZGlzcGxheSBlbmdpbmUgY2FuIHNjYW4gb3V0IGNlcnRhaW4ga2luZHMg b2YgY29tcHJlc3NlZCBzdXJmYWNlcwo+PiBwcm9kdWNlZCBieSB0aGUgcmVuZGVyIGVuZ2luZS4g VGhpcyBpbnZvbHZlZCB0ZWxsaW5nIHRoZSBkaXNwbGF5IGVuZ2luZQo+PiB0aGUgbG9jYXRpb24g b2YgdGhlIGNvbG9yIGNvbnRyb2wgc3VyZmFlIChDQ1MpIHdoaWNoIGRlc2NyaWJlcwo+PiB3aGlj aCBwYXJ0cyBvZiB0aGUgbWFpbiBzdXJmYWNlIGFyZSBjb21wcmVzc2VkIGFuZCB3aGljaCBhcmUg bm90LiBUaGUKPj4gbG9jYXRpb24gb2YgQ0NTIGlzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZSBhcyBq dXN0IGFub3RoZXIgcGxhbmUgd2l0aCBpdHMKPj4gb3duIG9mZnNldC4KPj4KPj4gQWRkIHRoZSBy ZXF1aXJlZCBzdHVmZiB0byB2YWxpZGF0ZSB0aGUgdXNlciBwcm92aWRlZCBBVVggcGxhbmUgbWV0 YWRhdGEKPj4gYW5kIGNvbnZlcnQgdGhlIHVzZXIgcHJvdmlkZWQgbGluZWFyIG9mZnNldCBpbnRv IHNvbWV0aGluZyB0aGUgaGFyZHdhcmUKPj4gY2FuIGNvbnN1bWUuCj4+Cj4+IER1ZSB0byBoYXJk d2FyZSBsaW1pdGF0aW9ucyB3ZSByZXF1aXJlIHRoYXQgdGhlIG1haW4gc3VyZmFjZSBhbmQKPj4g dGhlIEFVWCBzdXJmYWNlIChDQ1MpIGJlIHBhcnQgb2YgdGhlIHNhbWUgYm8uIFRoZSBoYXJkd2Fy ZSBhbHNvCj4+IG1ha2VzIGxpZmUgaGFyZCBieSBub3QgYWxsb3dpbmcgeW91IHRvIHByb3ZpZGUg c2VwYXJhdGUgeC95IG9mZnNldHMKPj4gZm9yIHRoZSBtYWluIGFuZCBBVVggc3VyZmFjZXMgKGV4 Y3BldCB3aXRoIE5WMTIpLCBzbyBmaW5kaW5nIHN1aXRhYmxlCj4+IG9mZnNldHMgZm9yIGJvdGgg cmVxdWlyZXMgYSBiaXQgb2Ygd29yay4gQXNzdW1pbmcgd2Ugc3RpbGwgd2FudCBrZWVwCj4+IHBs YXlpbmcgdHJpY2tzIHdpdGggdGhlIG9mZnNldHMuIEkndmUganVzdCBnb25lIHdpdGggYSBkdW1i ICJzZWFyY2gKPj4gYmFja3dhcmQgZm9yIHN1aXRhYmxlIG9mZnNldHMiIGFwcHJvYWNoLCB3aGlj aCBpcyBmYXIgZnJvbSBvcHRpbWFsLAo+PiBidXQgaXQgd29ya3MuCj4+Cj4+IEFsc28gbm90IGFs bCBwbGFuZXMgd2lsbCBiZSBjYXBhYmxlIG9mIHNjYW5uaW5nIG91dCBjb21wcmVzc2VkIHN1cmZh Y2VzLAo+PiBhbmQgZWcuIDkwLzI3MCBkZWdyZWUgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBp biBjb21iaW5hdGlvbiB3aXRoCj4+IGRlY29tcHJlc3Npb24gZWl0aGVyLgo+Pgo+PiBUaGlzIHBh dGNoIG1heSBjb250YWluIHdvcmsgZnJvbSBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIHBlb3BsZToK Pj4gKiBWYW5kYW5hIEthbm5hbiA8dmFuZGFuYS5rYW5uYW5AaW50ZWwuY29tPgo+PiAqIERhbmll bCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KPj4gKiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdz ay5uZXQ+Cj4+Cj4+IHYyOiBEZWFsIHdpdGggZGlzcGxheSB3b3JrYXJvdW5kcyAwMzkwLCAwNTMx LCAxMTI1IChQYXVsbykKPj4KPj4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50 ZWwuY29tPgo+PiBDYzogVmFuZGFuYSBLYW5uYW4gPHZhbmRhbmEua2FubmFuQGludGVsLmNvbT4K Pj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KPj4gQ2M6IEJlbiBXaWRhd3Nr eSA8YmVuQGJ3aWRhd3NrLm5ldD4KPj4gQ2M6IEphc29uIEVrc3RyYW5kIDxqYXNvbkBqbGVrc3Ry YW5kLm5ldD4KPj4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxh QGxpbnV4LmludGVsLmNvbT4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oICAgICAgfCAgMjMgKysrKwo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jIHwgMjM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiArKy0tLQo+PiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgIDI5ICsrKystCj4+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyAgfCAgIDUgKwo+PiAgNCBmaWxlcyBjaGFuZ2Vk LCAyNzQgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV8KPj4gcmVnLmgKPj4gaW5kZXggMDA5NzBhYTc3YWZhLi42ODQ5YmE5M2YxZDkgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+PiBAQCAtNjIwOSw2ICs2MjA5LDI4IEBAIGVudW0gewo+ PiAgICAgICAgICAgICAgICAgICAgICAgICBfSUQoaWQsIF9QU19FQ0NfU1RBVF8xQSwgX1BTX0VD Q19TVEFUXzJBKSwgICBcCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIF9JRChpZCwgX1BTX0VD Q19TVEFUXzFCLCBfUFNfRUNDX1NUQVRfMkIpKQo+Pgo+PiArI2RlZmluZSBQTEFORV9BVVhfRElT VF8xX0EgICAgICAgICAgICAgMHg3MDFjMAo+PiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8yX0Eg ICAgICAgICAgICAgMHg3MDJjMAo+PiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8xX0IgICAgICAg ICAgICAgMHg3MTFjMAo+PiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8yX0IgICAgICAgICAgICAg MHg3MTJjMAo+PiArI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMShwaXBlKSBcCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIF9QSVBFKHBpcGUsIFBMQU5FX0FVWF9ESVNUXzFfQSwgUExBTkVfQVVY X0RJU1RfMV9CKQo+PiArI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMihwaXBlKSBcCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIF9QSVBFKHBpcGUsIFBMQU5FX0FVWF9ESVNUXzJfQSwgUExBTkVf QVVYX0RJU1RfMl9CKQo+PiArI2RlZmluZSBQTEFORV9BVVhfRElTVChwaXBlLCBwbGFuZSkgICAg IFwKPj4gKyAgICAgICBfTU1JT19QTEFORShwbGFuZSwgX1BMQU5FX0FVWF9ESVNUXzEocGlwZSks Cj4+IF9QTEFORV9BVVhfRElTVF8yKHBpcGUpKQo+PiArCj4+ICsjZGVmaW5lIFBMQU5FX0FVWF9P RkZTRVRfMV9BICAgICAgICAgICAweDcwMWM0Cj4+ICsjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVRf Ml9BICAgICAgICAgICAweDcwMmM0Cj4+ICsjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVRfMV9CICAg ICAgICAgICAweDcxMWM0Cj4+ICsjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVRfMl9CICAgICAgICAg ICAweDcxMmM0Cj4+ICsjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VUXzEocGlwZSkgICAgICAgXAo+ PiArICAgICAgICAgICAgICAgX1BJUEUocGlwZSwgUExBTkVfQVVYX09GRlNFVF8xX0EsIFBMQU5F X0FVWF9PRkZTRVRfMV9CKQo+PiArI2RlZmluZSBfUExBTkVfQVVYX09GRlNFVF8yKHBpcGUpICAg ICAgIFwKPj4gKyAgICAgICAgICAgICAgIF9QSVBFKHBpcGUsIFBMQU5FX0FVWF9PRkZTRVRfMl9B LCBQTEFORV9BVVhfT0ZGU0VUXzJfQikKPj4gKyNkZWZpbmUgUExBTkVfQVVYX09GRlNFVChwaXBl LCBwbGFuZSkgICBcCj4+ICsgICAgICAgX01NSU9fUExBTkUocGxhbmUsIF9QTEFORV9BVVhfT0ZG U0VUXzEocGlwZSksCj4+IF9QTEFORV9BVVhfT0ZGU0VUXzIocGlwZSkpCj4+ICsKPj4gIC8qIGxl Z2FjeSBwYWxldHRlICovCj4+ICAjZGVmaW5lIF9MR0NfUEFMRVRURV9BICAgICAgICAgICAweDRh MDAwCj4+ICAjZGVmaW5lIF9MR0NfUEFMRVRURV9CICAgICAgICAgICAweDRhODAwCj4+IEBAIC02 NDMzLDYgKzY0NTUsNyBAQCBlbnVtIHsKPj4gICMgZGVmaW5lIENISUNLRU4zX0RHTUdfRE9ORV9G SVhfRElTQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAyKQo+Pgo+PiAgI2RlZmluZSBDSElDS0VO X1BBUjFfMSAgICAgICAgIF9NTUlPKDB4NDIwODApCj4+ICsjZGVmaW5lICBTS0xfUkNfSEFTSF9P VVRTSURFICAgKDEgPDwgMTUpCj4+ICAjZGVmaW5lICBEUEFfTUFTS19WQkxBTktfU1JEICAgKDEg PDwgMTUpCj4+ICAjZGVmaW5lICBGT1JDRV9BUkJfSURMRV9QTEFORVMgKDEgPDwgMTQpCj4+ICAj ZGVmaW5lICBTS0xfRURQX1BTUl9GSVhfUkRXUkFQICAgICAgICAoMSA8PCAzKQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4+IGluZGV4IDM4ZGU5ZGYwZWM2MC4uMjIzNmFi ZWJkOGJjIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4+IEBAIC0y MDY0LDExICsyMDY0LDE5IEBAIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0Cj4+ IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKPj4gICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIDEyODsKPj4gICAgICAgICAgICAgICAgIGVsc2UKPj4gICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIDUxMjsKPj4gKyAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0NDUzoKPj4gKyAgICAgICAgICAgICAgIGlmIChwbGFuZSA9PSAxKQo+PiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gNjQ7Cj4+ICsgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91 Z2ggKi8KPj4gICAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+PiAgICAgICAg ICAgICAgICAgaWYgKElTX0dFTjIoZGV2X3ByaXYpIHx8IEhBU18xMjhfQllURV9ZX1RJTElORyhk ZXZfcHJpdikpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMjg7Cj4+ICAgICAg ICAgICAgICAgICBlbHNlCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA1MTI7Cj4+ ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+PiArICAgICAgICAg ICAgICAgaWYgKHBsYW5lID09IDEpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA2 NDsKPj4KPgo+SSd2ZSBzYWlkIGl0IGJlZm9yZSBidXQgcmVhZGluZyB0aHJvdWdoIEJlbidzIHBh dGNoZXMgYWdhaW4gbWFrZSBtZSB3YW50IHRvCj5iZSBwZXNraWVyIGFib3V0IGl0LiAgSSB3b3Vs ZCByZWFsbHkgbGlrZSB0aGUgVUFCSSB0byB0cmVhdCB0aGUgQ0NTIGFzIGlmCj5pdCdzIFktdGls ZWQgd2l0aCBhIHRpbGUgc2l6ZSBvZiAxMjhCIHggMzIgcm93cy4gIFdoeT8gIEJlY2F1c2UgdGhp cyBpcwo+d2hhdCBhbGwgdGhlIGRvY3Mgc2F5IGl0IGlzLiAgRnJvbSB0aGUgZGlzcGxheSBkb2Nz IGZvciAiQ29sb3IgQ29udHJvbAo+U3VyZmFjZSI6Cj4KPiJUaGUgQ29sb3IgQ29udHJvbCBTdXJm YWNlIChDQ1MpIGNvbnRhaW5zIHRoZSBjb21wcmVzc2lvbiBzdGF0dXMgb2YgdGhlCj5jYWNoZS1s aW5lIHBhaXJzLiBUaGUKPmNvbXByZXNzaW9uIHN0YXRlIG9mIHRoZSBjYWNoZS1saW5lIHBhaXIg aXMgc3BlY2lmaWVkIGJ5IDIgYml0cyBpbiB0aGUgQ0NTLgo+RWFjaCBDQ1MgY2FjaGUtbGluZSBy ZXByZXNlbnRzCj5hbiBhcmVhIG9uIHRoZSBtYWluIHN1cmZhY2Ugb2YgMTYgeDE2IHNldHMgb2Yg MTI4IGJ5dGUgWS10aWxlZAo+Y2FjaGUtbGluZS1wYWlycy4gQ0NTIGlzIGFsd2F5cyBZIHRpbGVk LiIKPgo+VGhpcyBjb250YWlucyA5NSUgb2YgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBrbm93 IHRoZSByZWxhdGlvbiBiZXR3ZWVuCj50aGUgQ0NTIGFuZCB0aGUgbWFpbiBzdXJmYWNlLiAgVGhl IG90aGVyIDUlICh3aGljaCBpcyBiYWRseSBkb2N1bWVudGVkKSBpcwo+dGhhdCBjYWNoZSBsaW5l IHBhaXJzIGFyZSBob3Jpem9udGFsbHkgYWRqYWNlbnQuICBUaGlzIGdpdmVzIGEgcmVsYXRpb25z aGlwCj5vZiBvbmUgY2FjaGUgbGluZSBpbiB0aGUgQ0NTIG1hcHMgdG8gMzJ4NjQgY2FjaGUgbGlu ZXMgaW4gdGhlIG1haW4gc3VyZmFjZS4KPgo+QnV0IGl0J3Mgbm90IGFjdHVhbGx5IFktdGlsZWQ/ ICBPZiBjb3Vyc2Ugbm90LiAgSSd2ZSB3b3JrZWQgb3V0IHRoZSBleGFjdAo+dGlsaW5nIGFuZCBp dCBsb29rcyBzb21ldGhpbmcgbGlrZSBZIGJ1dCBpc24ndCBxdWl0ZSB0aGUgc2FtZS4gIEhvd2V2 ZXIsCj50aGlzIGlzbid0IHVuaXF1ZSB0byBDQ1MuICBTdGVuY2lsIChXLXRpbGVkKSwgSGlaLCBh bmQgZ2VuNy04Cj5zaW5nbGUtc2FtcGxlZCBNQ1MgYWxzbyBlYWNoIGhhdmUgdGhlaXIgb3duIHRp bGluZyAoSGFzd2VsbCBNQ1MgaXMKPmVzcGVjaWFsbHkgZXhvdGljKSBidXQgdGhlIGRvY3MgY2Fs bCBhbGwgb2YgdGhlbSBZLXRpbGVkIGFuZCBJIHRoaW5rIHRoZQo+aGFyZHdhcmUgaW50ZXJuYWxs eSB0cmVhdHMgdGhlbSBhcyBZLXRpbGVkIHdpdGggdGhlIGNhY2hlIGxpbmVzIHNodWZmbGVkCj5h cm91bmQgYSBiaXQuCj4KPkdpdmVuIHRoZSBmYWN0IHRoYXQgdGhleSBzZWVtIHRvIGxpa2UgdG8g Y2hhbmdlIHRoZSBNQ1MvQ0NTIHRpbGluZyBhcm91bmQKPm9uIGV2ZXJ5IGhhcmR3YXJlIGdlbmVy YXRpb24sIEknbSByZWx1Y3RhbnQgdG8gYmFzZSBVQUJJIG9uIHRoZSBmYWN0IHRoYXQKPnRoZSBD Q1MgYXBwZWFycyB0byBoYXZlIDY0eDY0ICJwaXhlbHMiIHBlciB0aWxlIHdpdGggZWFjaCAicGl4 ZWwiCj5jb3JyZXNwb25kaW5nIHRvIDE2eDggcGl4ZWxzIGluIHRoZSBjb2xvciBzdXJmYWNlLiAg VGhhdCdzIG5vdCB3aGF0IHdlIGhhZAo+b24gYW55IHByZXZpb3VzIGdlbiBhbmQgbWF5IGNoYW5n ZSBvbiBnZW4xMCBmb3Igbm8gYXBhcmVudCByZWFzb24uICBJJ2QKPm11Y2ggcmF0aGVyIGJhc2Ug aXQgb24gWS10aWxpbmcgYW5kIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gY2FjaGUgbGluZXMKPndo aWNoLCBldmVuIGlmIHRoZXkgY2hhbmdlIHRoZSBleGFjdCBzd2l6emxlIG9uIGdlbjEwLCB3aWxs IHByb2JhYmx5IHJlbWFpbgo+dGhlIHNhbWUuICAoRm9yIHRoZSBnZW43LTggYW5hbG9ndWUgb2Yg Q0NTLCB0aGV5IGNoYW5nZWQgdGhlIHRpbGluZyBldmVyeQo+Z2VuZXJhdGlvbiBidXQgdGhlIHJl bGF0aW9uc2hpcCBvZiBvbmUgTUNTIGNhY2hlIGxpbmUgbWFwcyB0byAzMngxMjggY29sb3IKPmNh Y2hlIGxpbmVzIHJlbWFpbmVkIHRoZSBzYW1lKS4KPgo+T2ssIEkndmUgc2FpZCBteSBwZWljZS4g IElmIHdlIGhhdmUgdG8gZGl2aWRlIGJ5IDIgaW4gdXNlcnNwYWNlLCB3ZSB3b24ndAo+ZGllLCBi dXQgSSdkIGxpa2UgdG8gZ2V0IHRoZSBVQUJJIHJpZ2h0IGJlZm9yZSB3ZSBjaGlzc2VsIGl0IGlu IHN0b25lLgo+Cj4tLUphc29uCj4KPgo+PiArICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdo ICovCj4+ICAgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4+ICAgICAgICAg ICAgICAgICAvKgo+PiAgICAgICAgICAgICAgICAgICogQnNwZWMgc2VlbXMgdG8gc3VnZ2VzdCB0 aGF0IHRoZSBZZiB0aWxlIHdpZHRoIHdvdWxkCj4+IEBAIC0yMTU2LDcgKzIxNjQsNyBAQCBzdGF0 aWMgdW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0Cj4+IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLAo+PiAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4+Cj4+ICAgICAgICAgLyogQVVYX0RJU1QgbmVlZHMg b25seSA0SyBhbGlnbm1lbnQgKi8KPj4gLSAgICAgICBpZiAoZmItPmZvcm1hdC0+Zm9ybWF0ID09 IERSTV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9PSAxKQo+PiArICAgICAgIGlmIChwbGFuZSA9PSAx KQo+PiAgICAgICAgICAgICAgICAgcmV0dXJuIDQwOTY7Cj4+Cj4+ICAgICAgICAgc3dpdGNoIChm Yi0+bW9kaWZpZXIpIHsKPj4gQEAgLTIxNjYsNiArMjE3NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBp bnQgaW50ZWxfc3VyZl9hbGlnbm1lbnQoY29uc3QKPj4gc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsCj4+ICAgICAgICAgICAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+PiAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjU2ICogMTAyNDsKPj4gICAgICAgICAgICAg ICAgIHJldHVybiAwOwo+PiArICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NT Ogo+PiArICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPj4gICAgICAg ICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+PiAgICAgICAgIGNhc2UgSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEOgo+PiAgICAgICAgICAgICAgICAgcmV0dXJuIDEgKiAxMDI0ICogMTAy NDsKPj4gQEAgLTI0NzIsNiArMjQ4Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfZmJf bW9kaWZpZXJfdG9fdGlsaW5nKHVpbnQ2NF90Cj4+IGZiX21vZGlmaWVyKQo+PiAgICAgICAgIGNh c2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Cj4+ICAgICAgICAgICAgICAgICByZXR1cm4gSTkx NV9USUxJTkdfWDsKPj4gICAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+PiAr ICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+PiAgICAgICAgICAgICAg ICAgcmV0dXJuIEk5MTVfVElMSU5HX1k7Cj4+ICAgICAgICAgZGVmYXVsdDoKPj4gICAgICAgICAg ICAgICAgIHJldHVybiBJOTE1X1RJTElOR19OT05FOwo+PiBAQCAtMjUzNiw2ICsyNTQ3LDM1IEBA IGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+PiAqZGV2X3ByaXYs Cj4+Cj4+ICAgICAgICAgICAgICAgICBpbnRlbF9mYl9vZmZzZXRfdG9feHkoJngsICZ5LCBmYiwg aSk7Cj4+Cj4+ICsgICAgICAgICAgICAgICBpZiAoKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9DQ1MgfHwKPj4gKyAgICAgICAgICAgICAgICAgICAgZmItPm1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpICYmIGkgPT0KPj4gMSkgewo+PiArICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbWFpbl94LCBtYWluX3k7Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGludCBjY3NfeCwgY2NzX3k7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgLyoKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogRWFjaCBieXRlIG9mIENDUyBjb3Jy ZXNwb25kcyB0byBhIDE2eDggYXJlYSBvZgo+PiB0aGUgbWFpbiBzdXJmYWNlLCBhbmQKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICogZWFjaCBDQ1MgdGlsZSBpcyA2NHg2NCBieXRlcy4KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICovCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNj c194ID0gKHggKiAxNikgJSAoNjQgKiAxNik7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNj c195ID0gKHkgKiA4KSAlICg2NCAqIDgpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBtYWlu X3ggPSBpbnRlbF9mYi0+bm9ybWFsWzBdLnggJSAoNjQgKiAxNik7Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIG1haW5feSA9IGludGVsX2ZiLT5ub3JtYWxbMF0ueSAlICg2NCAqIDgpOwo+PiAr Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC8qCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAqIENDUyBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kgb2Zmc2V0IHJlZ2lzdGVyLAo+PiBzbyB0 aGUgaW50cmEgQ0NTIHRpbGUKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogeC95IG9mZnNl dHMgbXVzdCBtYXRjaCBiZXR3ZWVuIENDUyBhbmQgdGhlIG1haW4KPj4gc3VyZmFjZS4KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICovCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICht YWluX3ggIT0gY2NzX3ggfHwgbWFpbl95ICE9IGNjc195KSB7Cj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiQmFkIENDUyB4L3kgKG1haW4gJWQsJWQgY2Nz Cj4+ICVkLCVkKSBmdWxsIChtYWluICVkLCVkIGNjcyAlZCwlZClcbiIsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3gsIG1haW5feSwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjc194LCBjY3NfeSwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVsX2Zi LT5ub3JtYWxbMF0ueCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludGVsX2ZiLT5ub3JtYWxbMF0ueSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHgsIHkpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4+ICsg ICAgICAgICAgICAgICB9Cj4+ICsKPj4gICAgICAgICAgICAgICAgIC8qCj4+ICAgICAgICAgICAg ICAgICAgKiBUaGUgZmVuY2UgKGlmIHVzZWQpIGlzIGFsaWduZWQgdG8gdGhlIHN0YXJ0IG9mIHRo ZQo+PiBvYmplY3QKPj4gICAgICAgICAgICAgICAgICAqIHNvIGhhdmluZyB0aGUgZnJhbWVidWZm ZXIgd3JhcCBhcm91bmQgYWNyb3NzIHRoZSBlZGdlCj4+IG9mIHRoZQo+PiBAQCAtMjg3Myw2ICsy OTEzLDkgQEAgc3RhdGljIGludCBza2xfbWF4X3BsYW5lX3dpZHRoKGNvbnN0IHN0cnVjdAo+PiBk cm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwo+PiAgICAgICAgICAgICAgICAgfQo+PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4+ICsgICAgICAgY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+PiArICAgICAgICAgICAgICAgLyogRklY TUUgQVVYIHBsYW5lPyAqLwo+PiAgICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6 Cj4+ICAgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4+ICAgICAgICAgICAg ICAgICBzd2l0Y2ggKGNwcCkgewo+PiBAQCAtMjg5NSw2ICsyOTM4LDQyIEBAIHN0YXRpYyBpbnQg c2tsX21heF9wbGFuZV93aWR0aChjb25zdCBzdHJ1Y3QKPj4gZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IHBsYW5lLAo+PiAgICAgICAgIHJldHVybiAyMDQ4Owo+PiAgfQo+Pgo+PiArc3RhdGljIGJv b2wgc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZQo+PiAqcGxhbmVfc3RhdGUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbWFpbl94LCBpbnQgbWFpbl95LCB1MzIKPj4gbWFpbl9vZmZzZXQpCj4+ICt7 Cj4+ICsgICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0 ZS0+YmFzZS5mYjsKPj4gKyAgICAgICBpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+YXV4Lng7Cj4+ ICsgICAgICAgaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmF1eC55Owo+PiArICAgICAgIHUzMiBh dXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQ7Cj4+ICsgICAgICAgdTMyIGFsaWdu bWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCAxKTsKPj4gKwo+PiArICAgICAgIHdoaWxl IChhdXhfb2Zmc2V0ID49IG1haW5fb2Zmc2V0ICYmIGF1eF95IDw9IG1haW5feSkgewo+PiArICAg ICAgICAgICAgICAgaW50IHgsIHk7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIGlmIChhdXhfeCA9 PSBtYWluX3ggJiYgYXV4X3kgPT0gbWFpbl95KQo+PiArICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKPj4gKwo+PiArICAgICAgICAgICAgICAgaWYgKGF1eF9vZmZzZXQgPT0gMCkKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIHggPSBh dXhfeCAvIDE2Owo+PiArICAgICAgICAgICAgICAgeSA9IGF1eF95IC8gODsKPj4gKyAgICAgICAg ICAgICAgIGF1eF9vZmZzZXQgPSBpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoJngsICZ5LCBwbGFu ZV9zdGF0ZSwKPj4gMSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXV4X29mZnNldCwKPj4gYXV4X29mZnNldCAtIGFsaWdubWVudCk7Cj4+ ICsgICAgICAgICAgICAgICBhdXhfeCA9IHggKiAxNiArIGF1eF94ICUgMTY7Cj4+ICsgICAgICAg ICAgICAgICBhdXhfeSA9IHkgKiA4ICsgYXV4X3kgJSA4Owo+PiArICAgICAgIH0KPj4gKwo+PiAr ICAgICAgIGlmIChhdXhfeCAhPSBtYWluX3ggfHwgYXV4X3kgIT0gbWFpbl95KQo+PiArICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+PiArCj4+ICsgICAgICAgcGxhbmVfc3RhdGUtPmF1eC5v ZmZzZXQgPSBhdXhfb2Zmc2V0Owo+PiArICAgICAgIHBsYW5lX3N0YXRlLT5hdXgueCA9IGF1eF94 Owo+PiArICAgICAgIHBsYW5lX3N0YXRlLT5hdXgueSA9IGF1eF95Owo+PiArCj4+ICsgICAgICAg cmV0dXJuIHRydWU7Cj4+ICt9Cj4+ICsKPj4gIHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3Vy ZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiAgewo+PiAgICAg ICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2Uu ZmI7Cj4+IEBAIC0yOTM3LDcgKzMwMTYsNyBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1 cmZhY2Uoc3RydWN0Cj4+IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4KPj4gICAg ICAgICAgICAgICAgIHdoaWxlICgoeCArIHcpICogY3BwID4gZmItPnBpdGNoZXNbMF0pIHsKPj4g ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAwKSB7Cj4+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFi bGUKPj4gZGlzcGxheSBzdXJmYWNlIG9mZnNldFxuIik7Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUKPj4gZGlz cGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gWC10aWxpbmdcbiIpOwo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiAgICAgICAgICAgICAgICAgICAg ICAgICB9Cj4+Cj4+IEBAIC0yOTQ2LDYgKzMwMjUsMjYgQEAgc3RhdGljIGludCBza2xfY2hlY2tf bWFpbl9zdXJmYWNlKHN0cnVjdAo+PiBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ ICAgICAgICAgICAgICAgICB9Cj4+ICAgICAgICAgfQo+Pgo+PiArICAgICAgIC8qCj4+ICsgICAg ICAgICogQ0NTIEFVWCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXRzLCB3 ZSBtdXN0IG1ha2UKPj4gc3VyZQo+PiArICAgICAgICAqIHRoZXkgbWF0Y2ggd2l0aCB0aGUgbWFp biBzdXJmYWNlIHgveSBvZmZzZXRzLgo+PiArICAgICAgICAqLwo+PiArICAgICAgIGlmIChmYi0+ bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4+ICsgICAgICAgICAg IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKSB7Cj4+ICsgICAg ICAgICAgICAgICB3aGlsZSAoIXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9z dGF0ZSwgeCwgeSwKPj4gb2Zmc2V0KSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAo b2Zmc2V0ID09IDApCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW50ZWxfYWRqdXN0X3RpbGVf b2Zmc2V0KCZ4LCAmeSwKPj4gcGxhbmVfc3RhdGUsIDAsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIG9mZnNldCAtCj4+ IGFsaWdubWVudCk7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgICAg IGlmICh4ICE9IHBsYW5lX3N0YXRlLT5hdXgueCB8fCB5ICE9IHBsYW5lX3N0YXRlLT5hdXgueSkg ewo+PiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmlu ZCBzdWl0YWJsZSBkaXNwbGF5Cj4+IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOwo+PiAr ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICAgICAgICAg IH0KPj4gKyAgICAgICB9Cj4+ICsKPj4gICAgICAgICBwbGFuZV9zdGF0ZS0+bWFpbi5vZmZzZXQg PSBvZmZzZXQ7Cj4+ICAgICAgICAgcGxhbmVfc3RhdGUtPm1haW4ueCA9IHg7Cj4+ICAgICAgICAg cGxhbmVfc3RhdGUtPm1haW4ueSA9IHk7Cj4+IEBAIC0yOTgyLDYgKzMwODEsNDcgQEAgc3RhdGlj IGludCBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShzdHJ1Y3QKPj4gaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQo+PiAgICAgICAgIHJldHVybiAwOwo+PiAgfQo+Pgo+PiArc3RhdGlj IGludCBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZQo+ PiAqcGxhbmVfc3RhdGUpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT4KPj4gYmFzZS5wbGFuZSk7Cj4+ICsgICAg ICAgc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKHBsYW5lX3N0YXRlLT5i YXNlLmNydGMpOwo+PiArICAgICAgIGludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54 MSA+PiAxNjsKPj4gKyAgICAgICBpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueTEg Pj4gMTY7Cj4+ICsgICAgICAgaW50IHggPSBzcmNfeCAvIDE2Owo+PiArICAgICAgIGludCB5ID0g c3JjX3kgLyA4Owo+PiArICAgICAgIHUzMiBvZmZzZXQ7Cj4+ICsKPj4gKyAgICAgICBzd2l0Y2gg KHBsYW5lLT5pZCkgewo+PiArICAgICAgIGNhc2UgUExBTkVfUFJJTUFSWToKPj4gKyAgICAgICBj YXNlIFBMQU5FX1NQUklURTA6Cj4+ICsgICAgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICBk ZWZhdWx0Ogo+PiArICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydCBvbmx5 IG9uIHBsYW5lIDEgYW5kIDJcbiIpOwo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgaWYgKGNydGMtPnBpcGUgPT0gUElQRV9DKSB7 Cj4+ICsgICAgICAgICAgICAgICBEUk1fREVCVUdfS01TKCJObyBSQyBzdXBwb3J0IG9uIHBpcGUg Q1xuIik7Cj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICB9Cj4+ ICsKPj4gKyAgICAgICBpZiAocGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24gJiYKPj4gKyAgICAg ICAgICAgcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24gJiB+KERSTV9ST1RBVEVfMCB8IERSTV9S T1RBVEVfMTgwKSkKPj4gewo+PiArICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiUkMgc3Vw cG9ydCBvbmx5IHdpdGggMC8xODAgZGVncmVlIHJvdGF0aW9uCj4+ICV4XG4iLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbik7Cj4+ICsg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAg ICBpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCAxKTsKPj4gKyAgICAg ICBvZmZzZXQgPSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUs IDEpOwo+PiArCj4+ICsgICAgICAgcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSBvZmZzZXQ7Cj4+ ICsgICAgICAgcGxhbmVfc3RhdGUtPmF1eC54ID0geCAqIDE2ICsgc3JjX3ggJSAxNjsKPj4gKyAg ICAgICBwbGFuZV9zdGF0ZS0+YXV4LnkgPSB5ICogOCArIHNyY195ICUgODsKPj4gKwo+PiArICAg ICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uo c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gIHsKPj4gICAgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ PiBAQCAtMzAwMiw2ICszMTQyLDExIEBAIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1 Y3QKPj4gaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiAgICAgICAgICAgICAgICAg cmV0ID0gc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+PiAgICAgICAg ICAgICAgICAgaWYgKHJldCkKPj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK Pj4gKyAgICAgICB9IGVsc2UgaWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9DQ1MgfHwKPj4gKyAgICAgICAgICAgICAgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRURfQ0NTKSB7Cj4+ICsgICAgICAgICAgICAgICByZXQgPSBza2xfY2hl Y2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPj4gKyAgICAgICAgICAgICAgIGlmIChy ZXQpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ICAgICAgICAgfSBl bHNlIHsKPj4gICAgICAgICAgICAgICAgIHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0gfjB4ZmZm Owo+PiAgICAgICAgICAgICAgICAgcGxhbmVfc3RhdGUtPmF1eC54ID0gMDsKPj4gQEAgLTMzNTcs OCArMzUwMiwxMiBAQCB1MzIgc2tsX3BsYW5lX2N0bF90aWxpbmcodWludDY0X3QgZmJfbW9kaWZp ZXIpCj4+ICAgICAgICAgICAgICAgICByZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1g7Cj4+ICAgICAg ICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKPj4gICAgICAgICAgICAgICAgIHJldHVy biBQTEFORV9DVExfVElMRURfWTsKPj4gKyAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0NDUzoKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBM QU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKPj4gICAgICAgICBjYXNlIEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRDoKPj4gICAgICAgICAgICAgICAgIHJldHVybiBQTEFORV9DVExfVElMRURf WUY7Cj4+ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+PiArICAg ICAgICAgICAgICAgcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRiB8IFBMQU5FX0NUTF9ERUNPTVBS RVNTSU9OXwo+PiBFTkFCTEU7Cj4+ICAgICAgICAgZGVmYXVsdDoKPj4gICAgICAgICAgICAgICAg IE1JU1NJTkdfQ0FTRShmYl9tb2RpZmllcik7Cj4+ICAgICAgICAgfQo+PiBAQCAtMzQwMSw2ICsz NTUwLDcgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QK Pj4gZHJtX3BsYW5lICpwbGFuZSwKPj4gICAgICAgICB1MzIgcGxhbmVfY3RsOwo+PiAgICAgICAg IHVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+PiAg ICAgICAgIHUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAwLCByb3RhdGlvbik7Cj4+ ICsgICAgICAgdTMyIGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAxLCByb3RhdGlv bik7Cj4+ICAgICAgICAgdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5tYWluLm9mZnNldDsK Pj4gICAgICAgICBpbnQgc2NhbGVyX2lkID0gcGxhbmVfc3RhdGUtPnNjYWxlcl9pZDsKPj4gICAg ICAgICBpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+bWFpbi54Owo+PiBAQCAtMzQzNiw2ICszNTg2 LDEwIEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0Cj4+ IGRybV9wbGFuZSAqcGxhbmUsCj4+ICAgICAgICAgSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlw ZSwgcGxhbmVfaWQpLCAoc3JjX3kgPDwgMTYpIHwgc3JjX3gpOwo+PiAgICAgICAgIEk5MTVfV1JJ VEUoUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lX2lkKSwgc3RyaWRlKTsKPj4gICAgICAgICBJOTE1 X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpLCAoc3JjX2ggPDwgMTYpIHwgc3JjX3cp Owo+PiArICAgICAgIEk5MTVfV1JJVEUoUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmVfaWQpLAo+ PiArICAgICAgICAgICAgICAgICAgKHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0IC0gc3VyZl9hZGRy KSB8IGF1eF9zdHJpZGUpOwo+PiArICAgICAgIEk5MTVfV1JJVEUoUExBTkVfQVVYX09GRlNFVChw aXBlLCBwbGFuZV9pZCksCj4+ICsgICAgICAgICAgICAgICAgICAocGxhbmVfc3RhdGUtPmF1eC55 IDw8IDE2KSB8IHBsYW5lX3N0YXRlLT5hdXgueCk7Cj4+Cj4+ICAgICAgICAgaWYgKHNjYWxlcl9p ZCA+PSAwKSB7Cj4+ICAgICAgICAgICAgICAgICB1aW50MzJfdCBwc19jdHJsID0gMDsKPj4gQEAg LTk4MDcsMTAgKzk5NjEsMTYgQEAgc2t5bGFrZV9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcoc3Ry dWN0Cj4+IGludGVsX2NydGMgKmNydGMsCj4+ICAgICAgICAgICAgICAgICBmYi0+bW9kaWZpZXIg PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKPj4gICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAg ICAgICAgIGNhc2UgUExBTkVfQ1RMX1RJTEVEX1k6Cj4+IC0gICAgICAgICAgICAgICBmYi0+bW9k aWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKPj4gKyAgICAgICAgICAgICAgIGlmICh2 YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIGZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKPj4gKyAg ICAgICAgICAgICAgIGVsc2UKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZmItPm1vZGlmaWVy ID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7Cj4+ICAgICAgICAgICAgICAgICBicmVhazsKPj4g ICAgICAgICBjYXNlIFBMQU5FX0NUTF9USUxFRF9ZRjoKPj4gLSAgICAgICAgICAgICAgIGZiLT5t b2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKPj4gKyAgICAgICAgICAgICAgIGlm ICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7Cj4+ ICsgICAgICAgICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGZiLT5tb2Rp ZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKPj4gICAgICAgICAgICAgICAgIGJyZWFr Owo+PiAgICAgICAgIGRlZmF1bHQ6Cj4+ICAgICAgICAgICAgICAgICBNSVNTSU5HX0NBU0UodGls aW5nKTsKPj4gQEAgLTEyMDE0LDcgKzEyMTc0LDcgQEAgc3RhdGljIHZvaWQgc2tsX2RvX21taW9f ZmxpcChzdHJ1Y3QgaW50ZWxfY3J0Ywo+PiAqaW50ZWxfY3J0YywKPj4gICAgICAgICB1MzIgY3Rs LCBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAwLCByb3RhdGlvbik7Cj4+Cj4+ICAgICAg ICAgY3RsID0gSTkxNV9SRUFEKFBMQU5FX0NUTChwaXBlLCAwKSk7Cj4+IC0gICAgICAgY3RsICY9 IH5QTEFORV9DVExfVElMRURfTUFTSzsKPj4gKyAgICAgICBjdGwgJj0gfihQTEFORV9DVExfVElM RURfTUFTSyB8IFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRSk7Cj4+ICAgICAgICAgc3dp dGNoIChmYi0+bW9kaWZpZXIpIHsKPj4gICAgICAgICBjYXNlIERSTV9GT1JNQVRfTU9EX05PTkU6 Cj4+ICAgICAgICAgICAgICAgICBicmVhazsKPj4gQEAgLTEyMDI0LDkgKzEyMTg0LDE1IEBAIHN0 YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2NydGMKPj4gKmludGVsX2Ny dGMsCj4+ICAgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKPj4gICAgICAgICAg ICAgICAgIGN0bCB8PSBQTEFORV9DVExfVElMRURfWTsKPj4gICAgICAgICAgICAgICAgIGJyZWFr Owo+PiArICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+PiArICAgICAg ICAgICAgICAgY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9ZIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJ T05fRU5BQkxFOwo+PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICAgICAgICAgY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4+ICAgICAgICAgICAgICAgICBjdGwgfD0gUExBTkVfQ1RM X1RJTEVEX1lGOwo+PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+PiArICAgICAgICAgICAgICAgY3RsIHw9IFBMQU5F X0NUTF9USUxFRF9ZRiB8IFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OXwo+PiBFTkFCTEU7Cj4+ICsg ICAgICAgICAgICAgICBicmVhazsKPj4gICAgICAgICBkZWZhdWx0Ogo+PiAgICAgICAgICAgICAg ICAgTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Cj4+ICAgICAgICAgfQo+PiBAQCAtMTU5MjUs OSArMTYwOTEsMTAgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdAo+ PiBkcm1fZGV2aWNlICpkZXYsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+PiAgewo+PiAgICAgICAgIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPj4gKyAgICAgICBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9ICZpbnRlbF9mYi0+YmFzZTsKPj4gICAgICAgICB1bnNp Z25lZCBpbnQgdGlsaW5nID0gaTkxNV9nZW1fb2JqZWN0X2dldF90aWxpbmcob2JqKTsKPj4gLSAg ICAgICBpbnQgcmV0Owo+PiAtICAgICAgIHUzMiBwaXRjaF9saW1pdCwgc3RyaWRlX2FsaWdubWVu dDsKPj4gKyAgICAgICBpbnQgcmV0LCBpOwo+PiArICAgICAgIHUzMiBwaXRjaF9saW1pdDsKPj4g ICAgICAgICBzdHJ1Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBmb3JtYXRfbmFtZTsKPj4KPj4gICAg ICAgICBXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7Cj4+IEBA IC0xNTk1Myw2ICsxNjEyMCwxOSBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQo c3RydWN0Cj4+IGRybV9kZXZpY2UgKmRldiwKPj4KPj4gICAgICAgICAvKiBQYXNzZWQgaW4gbW9k aWZpZXIgc2FuaXR5IGNoZWNraW5nLiAqLwo+PiAgICAgICAgIHN3aXRjaCAobW9kZV9jbWQtPm1v ZGlmaWVyWzBdKSB7Cj4+ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6 Cj4+ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+PiArICAgICAg ICAgICAgICAgc3dpdGNoIChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0KSB7Cj4+ICsgICAgICAgICAg ICAgICBjYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4+ICsgICAgICAgICAgICAgICBjYXNlIERS TV9GT1JNQVRfQUJHUjg4ODg6Cj4+ICsgICAgICAgICAgICAgICBjYXNlIERSTV9GT1JNQVRfWFJH Qjg4ODg6Cj4+ICsgICAgICAgICAgICAgICBjYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgICAgZGVmYXVsdDoK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydGVkIG9u bHkgd2l0aCBSR0I4ODg4Cj4+IGZvcm1hdHNcbiIpOwo+PiArICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAg IC8qIGZhbGwgdGhyb3VnaCAqLwo+PiAgICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQ6Cj4+ICAgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4+ICAgICAgICAg ICAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkpIHsKPj4gQEAgLTE2MDU5LDIyICsx NjIzOSw0NiBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0Cj4+IGRy bV9kZXZpY2UgKmRldiwKPj4gICAgICAgICBpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0gMCkK Pj4gICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pgo+PiAtICAgICAgIGRybV9oZWxw ZXJfbW9kZV9maWxsX2ZiX3N0cnVjdChkZXYsICZpbnRlbF9mYi0+YmFzZSwgbW9kZV9jbWQpOwo+ PiArICAgICAgIGRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdChkZXYsIGZiLCBtb2RlX2Nt ZCk7Cj4+Cj4+IC0gICAgICAgc3RyaWRlX2FsaWdubWVudCA9IGludGVsX2ZiX3N0cmlkZV9hbGln bm1lbnQoJmludGVsX2ZiLT5iYXNlLCAwKTsKPj4gLSAgICAgICBpZiAobW9kZV9jbWQtPnBpdGNo ZXNbMF0gJiAoc3RyaWRlX2FsaWdubWVudCAtIDEpKSB7Cj4+IC0gICAgICAgICAgICAgICBEUk1f REVCVUdfS01TKCJwaXRjaCAoJWQpIG11c3QgYmUgYXQgbGVhc3QgJXUgYnl0ZQo+PiBhbGlnbmVk XG4iLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2NtZC0+cGl0Y2hlc1sw XSwgc3RyaWRlX2FsaWdubWVudCk7Cj4+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7 Cj4+ICsgICAgICAgICAgICAgICB1MzIgc3RyaWRlX2FsaWdubWVudDsKPj4gKwo+PiArICAgICAg ICAgICAgICAgaWYgKG1vZGVfY21kLT5oYW5kbGVzW2ldICE9IG1vZGVfY21kLT5oYW5kbGVzWzBd KSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMoImJhZCBwbGFuZSAl ZCBoYW5kbGVcbiIsIGkpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgICAgICAgc3RyaWRlX2Fs aWdubWVudCA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoZmIsIGkpOwo+PiArCj4+ICsgICAg ICAgICAgICAgICAvKgo+PiArICAgICAgICAgICAgICAgICogRGlzcGxheSBXQSAjMDUzMTogc2ts LGJ4dCxrYmwsZ2xrCj4+ICsgICAgICAgICAgICAgICAgKgo+PiArICAgICAgICAgICAgICAgICog UmVuZGVyIGRlY29tcHJlc3Npb24gYW5kIHBsYW5lIHdpZHRoID4gMzg0MAo+PiArICAgICAgICAg ICAgICAgICogY29tYmluZWQgd2l0aCBob3Jpem9udGFsIHBhbm5pbmcgcmVxdWlyZXMgdGhlCj4+ ICsgICAgICAgICAgICAgICAgKiBwbGFuZSBzdHJpZGUgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBX ZSdsbCBqdXN0Cj4+ICsgICAgICAgICAgICAgICAgKiByZXF1aXJlIHRoZSBlbnRpcmUgZmIgdG8g YWNjb21tb2RhdGUgdGhhdCB0byBhdm9pZAo+PiArICAgICAgICAgICAgICAgICogcG90ZW50aWFs IHJ1bnRpbWUgZXJyb3JzIGF0IHBsYW5lIGNvbmZpZ3VyYXRpb24gdGltZS4KPj4KPgo+Tm90ZSB0 byBCZW46IFVzZXJzcGFjZSBuZWVkcyB0byBrbm93IGFib3V0IHRoaXMgdG9vLiAgSW4gdGhpcyBj YXNlLCBJCj5iZWxpZXZlICJtdWx0aXBsZSBvZiA0IiBtZWFucyAibXVsdGlwbGUgb2YgNCB0aWxl cyIuICBZb3UndmUgbmV2ZXIgaGl0IHRoaXMKPmJlY2F1c2UgdGhlIHN0YW5kYXJkIDE5MjB4MTA4 MCBpcyA2MCB0aWxlcyB3aWRlIHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YgNC4KPgo+CgpJJ20gbW9y ZSBsaWtlbHkgbm90IGhpdHRpbmcgaXQgYmVjYXVzZSB0aGUgd2lkdGggbXVzdCBiZSA+IDM4NDAu IE9rYXksIEknbGwKbW9kaWZ5IG15IHBhdGNoIC0gSSBzdXBwb3NlIEkgY2FuIHRlc3QgdGhpcyB3 aXRoIERhbmllbCdzIFdlc3RvbiBicmFuY2gsCm90aGVyd2lzZSBJJ20gbm90IHN1cmUgaG93IEkn ZCBoaXQgaXQuCgo+PiArICAgICAgICAgICAgICAgICovCj4+ICsgICAgICAgICAgICAgICBpZiAo SVNfR0VOOShkZXZfcHJpdikgJiYgaSA9PSAwICYmIGZiLT53aWR0aCA+IDM4NDAgJiYKPj4gKyAg ICAgICAgICAgICAgICAgICAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0NDUyB8fAo+PiArICAgICAgICAgICAgICAgICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEX0NDUykpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZV9h bGlnbm1lbnQgKj0gNDsKPj4gKwo+PiArICAgICAgICAgICAgICAgaWYgKGZiLT5waXRjaGVzW2ld ICYgKHN0cmlkZV9hbGlnbm1lbnQgLSAxKSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBE Uk1fREVCVUdfS01TKCJwbGFuZSAlZCBwaXRjaCAoJWQpIG11c3QgYmUgYXQKPj4gbGVhc3QgJXUg Ynl0ZSBhbGlnbmVkXG4iLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGksIGZiLT5waXRjaGVzW2ldLCBzdHJpZGVfYWxpZ25tZW50KTsKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICAgICAgICAg fQo+Pgo+PiAgICAgICAgIGludGVsX2ZiLT5vYmogPSBvYmo7Cj4+Cj4+IC0gICAgICAgcmV0ID0g aW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2LCAmaW50ZWxfZmItPmJhc2UpOwo+PiArICAgICAg IHJldCA9IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwgZmIpOwo+PiAgICAgICAgIGlmIChy ZXQpCj4+ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pgo+PiAtICAgICAgIHJldCA9IGRy bV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJmludGVsX2ZiLT5iYXNlLCAmaW50ZWxfZmJfZnVuY3Mp Owo+PiArICAgICAgIHJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgZmIsICZpbnRlbF9m Yl9mdW5jcyk7Cj4+ICAgICAgICAgaWYgKHJldCkgewo+PiAgICAgICAgICAgICAgICAgRFJNX0VS Uk9SKCJmcmFtZWJ1ZmZlciBpbml0IGZhaWxlZCAlZFxuIiwgcmV0KTsKPj4gICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfCj4+IHBtLmMKPj4gaW5kZXggMjQ5 NjIzZDQ1YmUwLi4yNTc4MmNkMTc0YzAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ PiBAQCAtNjIsNiArNjIsMjAgQEAgc3RhdGljIHZvaWQgZ2VuOV9pbml0X2Nsb2NrX2dhdGluZyhz dHJ1Y3QKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICAgICAgICAgSTkxNV9XUklU RShDSElDS0VOX1BBUjFfMSwKPj4gICAgICAgICAgICAgICAgICAgIEk5MTVfUkVBRChDSElDS0VO X1BBUjFfMSkgfCBTS0xfRURQX1BTUl9GSVhfUkRXUkFQKTsKPj4KPj4gKyAgICAgICAvKgo+PiAr ICAgICAgICAqIERpc3BsYXkgV0EjMDM5MDogc2tsLGJ4dCxrYmwsZ2xrCj4+ICsgICAgICAgICoK Pj4gKyAgICAgICAgKiBNdXN0IG1hdGNoIFNhbXBsZXIsIFBpeGVsIEJhY2sgRW5kLCBhbmQgTWVk aWEKPj4gKyAgICAgICAgKiAoMHhFMTk0IGJpdCA4LCAweDcwMTQgYml0IDEzLCAweDREREMgYml0 cyAyNyBhbmQgMzEpLgo+PiArICAgICAgICAqCj4+ICsgICAgICAgICogSW5jbHVkaW5nIGJpdHMg b3V0c2lkZSB0aGUgcGFnZSBpbiB0aGUgaGFzaCB3b3VsZAo+PiArICAgICAgICAqIHJlcXVpcmUg MiAob3IgND8pIE1pQiBhbGlnbm1lbnQgb2YgcmVzb3VyY2VzLiBKdXN0Cj4+ICsgICAgICAgICog YXNzdW1lIHRoZSBkZWZhdWwgaGFzaGluZyBtb2RlIHdoaWNoIG9ubHkgdXNlcyBiaXRzCj4+ICsg ICAgICAgICogd2l0aGluIHRoZSBwYWdlLgo+PiArICAgICAgICAqLwo+PiArICAgICAgIEk5MTVf V1JJVEUoQ0hJQ0tFTl9QQVIxXzEsCj4+ICsgICAgICAgICAgICAgICAgICBJOTE1X1JFQUQoQ0hJ Q0tFTl9QQVIxXzEpICYgflNLTF9SQ19IQVNIX09VVFNJREUpOwo+PiArCj4+ICAgICAgICAgSTkx NV9XUklURShHRU44X0NPTkZJRzAsCj4+ICAgICAgICAgICAgICAgICAgICBJOTE1X1JFQUQoR0VO OF9DT05GSUcwKSB8IEdFTjlfREVGQVVMVF9GSVhFUyk7Cj4+Cj4+IEBAIC0zMzE0LDcgKzMzMjgs OSBAQCBza2xfZGRiX21pbl9hbGxvYyhjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlCj4+ICpw c3RhdGUsCj4+Cj4+ICAgICAgICAgLyogRm9yIE5vbiBZLXRpbGUgcmV0dXJuIDgtYmxvY2tzICov Cj4+ICAgICAgICAgaWYgKGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAm Jgo+PiAtICAgICAgICAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE KQo+PiArICAgICAgICAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE ICYmCj4+ICsgICAgICAgICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9DQ1MgJiYKPj4gKyAgICAgICAgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1MpCj4+ICAgICAgICAgICAgICAgICByZXR1cm4gODsKPj4KPj4gICAgICAgICBz cmNfdyA9IGRybV9yZWN0X3dpZHRoKCZpbnRlbF9wc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPj4g QEAgLTM1OTAsNyArMzYwNiw5IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29u c3Qgc3RydWN0Cj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiAgICAgICAgIH0KPj4K Pj4gICAgICAgICB5X3RpbGVkID0gZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEIHx8Cj4+IC0gICAgICAgICAgICAgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRUQ7Cj4+ICsgICAgICAgICAgICAgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRUQgfHwKPj4gKyAgICAgICAgICAgICAgICAgZmItPm1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+PiArICAgICAgICAgICAgICAgICBmYi0+ bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKPj4gICAgICAgICB4X3Rp bGVkID0gZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwo+Pgo+PiAgICAg ICAgIC8qIERpc3BsYXkgV0EgIzExNDE6IGtibC4gKi8KPj4gQEAgLTM2NzUsNiArMzY5MywxMyBA QCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdAo+PiBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPj4gICAgICAgICByZXNfbGluZXMgPSBESVZfUk9VTkRfVVAo c2VsZWN0ZWRfcmVzdWx0LnZhbCwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGxhbmVfYmxvY2tzX3Blcl9saW5lLnZhbCk7Cj4+Cj4+ICsgICAgICAgLyogRGlzcGxheSBXQSAj MTEyNTogc2tsLGJ4dCxrYmwsZ2xrICovCj4+ICsgICAgICAgaWYgKGxldmVsID09IDAgJiYKPj4g KyAgICAgICAgICAgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1Mg fHwKPj4gKyAgICAgICAgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTKSkKPj4gKyAgICAgICAgICAgICAgIHJlc19ibG9ja3MgKz0gZml4ZWRfMTZfMTZfdG9f dTMyX3JvdW5kX3VwKHlfdGlsZV9taW5pbXVtKTsKPj4gKwo+PiArICAgICAgIC8qIERpc3BsYXkg V0EgIzExMjY6IHNrbCxieHQsa2JsLGdsayAqLwo+PiAgICAgICAgIGlmIChsZXZlbCA+PSAxICYm IGxldmVsIDw9IDcpIHsKPj4gICAgICAgICAgICAgICAgIGlmICh5X3RpbGVkKSB7Cj4+ICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc19ibG9ja3MgKz0gZml4ZWRfMTZfMTZfdG9fdTMyX3JvdW5k X3VwKHlfCj4+IHRpbGVfbWluaW11bSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9zcHJpdGUuYwo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0 ZS5jCj4+IGluZGV4IDcwMzFiYzczM2Q5Ny4uMDYzYTk5NDgxNWQwIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+PiBAQCAtMjEwLDYgKzIxMCw3IEBAIHNrbF91cGRhdGVf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+PiAgICAgICAgIHUzMiBzdXJmX2Fk ZHIgPSBwbGFuZV9zdGF0ZS0+bWFpbi5vZmZzZXQ7Cj4+ICAgICAgICAgdW5zaWduZWQgaW50IHJv dGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4+ICAgICAgICAgdTMyIHN0cmlk ZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsKPj4gKyAgICAgICB1MzIgYXV4 X3N0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDEsIHJvdGF0aW9uKTsKPj4gICAgICAgICBp bnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0LngxOwo+PiAgICAgICAgIGludCBjcnRj X3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5kc3QueTE7Cj4+ICAgICAgICAgdWludDMyX3QgY3J0Y193 ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5iYXNlLmRzdCk7Cj4+IEBAIC0yNDgsNiAr MjQ5LDEwIEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ PiAgICAgICAgIEk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwgKHkgPDwg MTYpIHwgeCk7Cj4+ICAgICAgICAgSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmVf aWQpLCBzdHJpZGUpOwo+PiAgICAgICAgIEk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFu ZV9pZCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4+ICsgICAgICAgSTkxNV9XUklURShQTEFO RV9BVVhfRElTVChwaXBlLCBwbGFuZV9pZCksCj4+ICsgICAgICAgICAgICAgICAgICAocGxhbmVf c3RhdGUtPmF1eC5vZmZzZXQgLSBzdXJmX2FkZHIpIHwgYXV4X3N0cmlkZSk7Cj4+ICsgICAgICAg STkxNV9XUklURShQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKPj4gKyAgICAgICAg ICAgICAgICAgIChwbGFuZV9zdGF0ZS0+YXV4LnkgPDwgMTYpIHwgcGxhbmVfc3RhdGUtPmF1eC54 KTsKPj4KPj4gICAgICAgICAvKiBwcm9ncmFtIHBsYW5lIHNjYWxlciAqLwo+PiAgICAgICAgIGlm IChwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkID49IDApIHsKPj4gLS0KPj4gMi4xMC4yCj4+Cj4+Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=