From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH 9/9] drm/i915: Add render decompression support Date: Wed, 04 Jan 2017 17:14:04 -0200 Message-ID: <1483557244.2499.14.camel@intel.com> References: <20170104184232.23048-1-ville.syrjala@linux.intel.com> <20170104184232.23048-10-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170104184232.23048-10-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org Cc: Ben Widawsky , Vandana Kannan , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RW0gUXVhLCAyMDE3LTAxLTA0IMOgcyAyMDo0MiArMDIwMCwgdmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20KZXNjcmV2ZXU6Cj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxh QGxpbnV4LmludGVsLmNvbT4KPiAKPiBTS0wrIGRpc3BsYXkgZW5naW5lIGNhbiBzY2FuIG91dCBj ZXJ0YWluIGtpbmRzIG9mIGNvbXByZXNzZWQgc3VyZmFjZXMKPiBwcm9kdWNlZCBieSB0aGUgcmVu ZGVyIGVuZ2luZS4gVGhpcyBpbnZvbHZlZCB0ZWxsaW5nIHRoZSBkaXNwbGF5Cj4gZW5naW5lCj4g dGhlIGxvY2F0aW9uIG9mIHRoZSBjb2xvciBjb250cm9sIHN1cmZhZSAoQ0NTKSB3aGljaCBkZXNj cmliZXMKPiB3aGljaCBwYXJ0cyBvZiB0aGUgbWFpbiBzdXJmYWNlIGFyZSBjb21wcmVzc2VkIGFu ZCB3aGljaCBhcmUgbm90LiBUaGUKPiBsb2NhdGlvbiBvZiBDQ1MgaXMgcHJvdmlkZWQgYnkgdXNl cnNwYWNlIGFzIGp1c3QgYW5vdGhlciBwbGFuZSB3aXRoCj4gaXRzCj4gb3duIG9mZnNldC4KPiAK PiBBZGQgdGhlIHJlcXVpcmVkIHN0dWZmIHRvIHZhbGlkYXRlIHRoZSB1c2VyIHByb3ZpZGVkIEFV WCBwbGFuZQo+IG1ldGFkYXRhCj4gYW5kIGNvbnZlcnQgdGhlIHVzZXIgcHJvdmlkZWQgbGluZWFy IG9mZnNldCBpbnRvIHNvbWV0aGluZyB0aGUKPiBoYXJkd2FyZQo+IGNhbiBjb25zdW1lLgo+IAo+ IER1ZSB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucyB3ZSByZXF1aXJlIHRoYXQgdGhlIG1haW4gc3Vy ZmFjZSBhbmQKPiB0aGUgQVVYIHN1cmZhY2UgKENDUykgYmUgcGFydCBvZiB0aGUgc2FtZSBiby4g VGhlIGhhcmR3YXJlIGFsc28KPiBtYWtlcyBsaWZlIGhhcmQgYnkgbm90IGFsbG93aW5nIHlvdSB0 byBwcm92aWRlIHNlcGFyYXRlIHgveSBvZmZzZXRzCj4gZm9yIHRoZSBtYWluIGFuZCBBVVggc3Vy ZmFjZXMgKGV4Y3BldCB3aXRoIE5WMTIpLCBzbyBmaW5kaW5nIHN1aXRhYmxlCj4gb2Zmc2V0cyBm b3IgYm90aCByZXF1aXJlcyBhIGJpdCBvZiB3b3JrLiBBc3N1bWluZyB3ZSBzdGlsbCB3YW50IGtl ZXAKPiBwbGF5aW5nIHRyaWNrcyB3aXRoIHRoZSBvZmZzZXRzLiBJJ3ZlIGp1c3QgZ29uZSB3aXRo IGEgZHVtYiAic2VhcmNoCj4gYmFja3dhcmQgZm9yIHN1aXRhYmxlIG9mZnNldHMiIGFwcHJvYWNo LCB3aGljaCBpcyBmYXIgZnJvbSBvcHRpbWFsLAo+IGJ1dCBpdCB3b3Jrcy4KPiAKPiBBbHNvIG5v dCBhbGwgcGxhbmVzIHdpbGwgYmUgY2FwYWJsZSBvZiBzY2FubmluZyBvdXQgY29tcHJlc3NlZAo+ IHN1cmZhY2VzLAo+IGFuZCBlZy4gOTAvMjcwIGRlZ3JlZSByb3RhdGlvbiBpcyBub3Qgc3VwcG9y dGVkIGluIGNvbWJpbmF0aW9uIHdpdGgKPiBkZWNvbXByZXNzaW9uIGVpdGhlci4KPiAKPiBUaGlz IHBhdGNoIG1heSBjb250YWluIHdvcmsgZnJvbSBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIHBlb3Bs ZToKPiAqIFZhbmRhbmEgS2FubmFuIDx2YW5kYW5hLmthbm5hbkBpbnRlbC5jb20+Cj4gKiBEYW5p ZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+Cj4gKiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdz ay5uZXQ+CgpBcyBJIG1lbnRpb25lZCB0byBCZW4gaW4gdGhlIG90aGVyIGVtYWlsLCB0aGVyZSBh cmUgc29tZSBwb2ludHMgb2YKQlNwZWMgdGhhdCBzYXkgImlmIHJlbmRlciBkZWNvbXByZXNzaW9u IGlzIGVuYWJsZWQsIHRvIHRoaXMiLCB3aGljaCB3ZQpsYXJnZWx5IGlnbm9yZWQgc28gZmFyLiBJ IGhvcGUgdGhleSBhcmUgYWxsIG1hcmtlZCBhcyB3b3JrYXJvdW5kcy4gRnJvbQphIHF1aWNrIGxv b2ssIGl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBhdCBsZWFzdCBEaXNwbGF5IFdBcyAjMDM5MCwgIzA1 MzEKYW5kICMxMTI1LCBhbmQgbWF5YmUgc29tZSBvdGhlciBub24tZGlzcGxheSBXQXMgKHBsZWFz ZSB0YWtlIGEgbG9vayBhdAp0aGUgQlNwZWMgbGlzdCkuIEknbGwgYXNzdW1lIHRoZXkgd2VyZSBu b3QgaW1wbGVtZW50ZWQgeWV0IHNpbmNlIEkKZG9uJ3Qgc2VlIFdBIGNvbW1lbnRzIG9uIHRoZSBw YXRjaGVzLiBJIHRoaW5rIHdlIG5lZWQgdGhlbSwgb3RoZXJ3aXNlCndlIG1heSBpbnRyb2R1Y2Ug bW9yZSBTS0wgZmxpY2tlcmluZyBwcm9ibGVtcy4KClRoYW5rcywKUGF1bG8KCj4gCj4gQ2M6IFZh bmRhbmEgS2FubmFuIDx2YW5kYW5hLmthbm5hbkBpbnRlbC5jb20+Cj4gQ2M6IERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4KPiBDYzogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0 Pgo+IENjOiBKYXNvbiBFa3N0cmFuZCA8amFzb25Aamxla3N0cmFuZC5uZXQ+Cj4gU2lnbmVkLW9m Zi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiAt LS0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmjCoMKgwqDCoMKgwqB8wqDCoDIy ICsrKysKPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8IDIxOQo+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jwqDCoMKgwqDCoMKgfMKgwqDCoDggKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3Nwcml0ZS5jwqDCoHzCoMKgwqA1ICsKPiDCoDQgZmlsZXMgY2hhbmdlZCwgMjQw IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCj4gaW5kZXggMDA5NzBhYTc3YWZhLi4wNWUxOGU3NDI3NzYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKPiBAQCAtNjIwOSw2ICs2MjA5LDI4IEBAIGVudW0gewo+IMKgCQkJX0lEKGlk LCBfUFNfRUNDX1NUQVRfMUEsCj4gX1BTX0VDQ19TVEFUXzJBKSzCoMKgwqBcCj4gwqAJCQlfSUQo aWQsIF9QU19FQ0NfU1RBVF8xQiwgX1BTX0VDQ19TVEFUXzJCKSkKPiDCoAo+ICsjZGVmaW5lIFBM QU5FX0FVWF9ESVNUXzFfQQkJMHg3MDFjMAo+ICsjZGVmaW5lIFBMQU5FX0FVWF9ESVNUXzJfQQkJ MHg3MDJjMAo+ICsjZGVmaW5lIFBMQU5FX0FVWF9ESVNUXzFfQgkJMHg3MTFjMAo+ICsjZGVmaW5l IFBMQU5FX0FVWF9ESVNUXzJfQgkJMHg3MTJjMAo+ICsjZGVmaW5lIF9QTEFORV9BVVhfRElTVF8x KHBpcGUpIFwKPiArCQkJX1BJUEUocGlwZSwgUExBTkVfQVVYX0RJU1RfMV9BLAo+IFBMQU5FX0FV WF9ESVNUXzFfQikKPiArI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMihwaXBlKSBcCj4gKwkJCV9Q SVBFKHBpcGUsIFBMQU5FX0FVWF9ESVNUXzJfQSwKPiBQTEFORV9BVVhfRElTVF8yX0IpCj4gKyNk ZWZpbmUgUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmUpwqDCoMKgwqDCoFwKPiArCV9NTUlPX1BM QU5FKHBsYW5lLCBfUExBTkVfQVVYX0RJU1RfMShwaXBlKSwKPiBfUExBTkVfQVVYX0RJU1RfMihw aXBlKSkKPiArCj4gKyNkZWZpbmUgUExBTkVfQVVYX09GRlNFVF8xX0EJCTB4NzAxYzQKPiArI2Rl ZmluZSBQTEFORV9BVVhfT0ZGU0VUXzJfQQkJMHg3MDJjNAo+ICsjZGVmaW5lIFBMQU5FX0FVWF9P RkZTRVRfMV9CCQkweDcxMWM0Cj4gKyNkZWZpbmUgUExBTkVfQVVYX09GRlNFVF8yX0IJCTB4NzEy YzQKPiArI2RlZmluZSBfUExBTkVfQVVYX09GRlNFVF8xKHBpcGUpwqDCoMKgwqDCoMKgwqBcCj4g KwkJX1BJUEUocGlwZSwgUExBTkVfQVVYX09GRlNFVF8xX0EsCj4gUExBTkVfQVVYX09GRlNFVF8x X0IpCj4gKyNkZWZpbmUgX1BMQU5FX0FVWF9PRkZTRVRfMihwaXBlKcKgwqDCoMKgwqDCoMKgXAo+ ICsJCV9QSVBFKHBpcGUsIFBMQU5FX0FVWF9PRkZTRVRfMl9BLAo+IFBMQU5FX0FVWF9PRkZTRVRf Ml9CKQo+ICsjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmUpwqDCoMKgXAo+ICsJ X01NSU9fUExBTkUocGxhbmUsIF9QTEFORV9BVVhfT0ZGU0VUXzEocGlwZSksCj4gX1BMQU5FX0FV WF9PRkZTRVRfMihwaXBlKSkKPiArCj4gwqAvKiBsZWdhY3kgcGFsZXR0ZSAqLwo+IMKgI2RlZmlu ZSBfTEdDX1BBTEVUVEVfQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDRhMDAwCj4gwqAjZGVmaW5l IF9MR0NfUEFMRVRURV9CwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4NGE4MDAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCAzOGRlOWRmMGVjNjAuLmI1NDczMzJlZWRh MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtMjA2NCwxMSAr MjA2NCwxOSBAQCBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdAo+IGRybV9mcmFt ZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKPiDCoAkJCXJldHVybiAxMjg7Cj4gwqAJCWVsc2UKPiDC oAkJCXJldHVybiA1MTI7Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiAr CQlpZiAocGxhbmUgPT0gMSkKPiArCQkJcmV0dXJuIDY0Owo+ICsJCS8qIGZhbGwgdGhyb3VnaCAq Lwo+IMKgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gwqAJCWlmIChJU19HRU4yKGRl dl9wcml2KSB8fAo+IEhBU18xMjhfQllURV9ZX1RJTElORyhkZXZfcHJpdikpCj4gwqAJCQlyZXR1 cm4gMTI4Owo+IMKgCQllbHNlCj4gwqAJCQlyZXR1cm4gNTEyOwo+ICsJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRURfQ0NTOgo+ICsJCWlmIChwbGFuZSA9PSAxKQo+ICsJCQlyZXR1cm4gNjQ7 Cj4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gwqAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQ6Cj4gwqAJCS8qCj4gwqAJCcKgKiBCc3BlYyBzZWVtcyB0byBzdWdnZXN0IHRoYXQgdGhlIFlm IHRpbGUgd2lkdGgKPiB3b3VsZAo+IEBAIC0yMTU2LDcgKzIxNjQsNyBAQCBzdGF0aWMgdW5zaWdu ZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0Cj4gc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsCj4gwqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShm Yi0+ZGV2KTsKPiDCoAo+IMKgCS8qIEFVWF9ESVNUIG5lZWRzIG9ubHkgNEsgYWxpZ25tZW50ICov Cj4gLQlpZiAoZmItPmZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9 PSAxKQo+ICsJaWYgKHBsYW5lID09IDEpCj4gwqAJCXJldHVybiA0MDk2Owo+IMKgCj4gwqAJc3dp dGNoIChmYi0+bW9kaWZpZXIpIHsKPiBAQCAtMjE2Niw2ICsyMTc0LDggQEAgc3RhdGljIHVuc2ln bmVkIGludCBpbnRlbF9zdXJmX2FsaWdubWVudChjb25zdAo+IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLAo+IMKgCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+IMKgCQkJcmV0dXJu IDI1NiAqIDEwMjQ7Cj4gwqAJCXJldHVybiAwOwo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9DQ1M6Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gwqAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRDoKPiDCoAkJcmV0dXJuIDEgKiAxMDI0ICogMTAyNDsKPiBAQCAtMjQ3Miw2ICsyNDgyLDcg QEAgc3RhdGljIHVuc2lnbmVkIGludAo+IGludGVsX2ZiX21vZGlmaWVyX3RvX3RpbGluZyh1aW50 NjRfdCBmYl9tb2RpZmllcikKPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgo+IMKg CQlyZXR1cm4gSTkxNV9USUxJTkdfWDsKPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE Ogo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gwqAJCXJldHVybiBJOTE1 X1RJTElOR19ZOwo+IMKgCWRlZmF1bHQ6Cj4gwqAJCXJldHVybiBJOTE1X1RJTElOR19OT05FOwo+ IEBAIC0yNTM2LDYgKzI1NDcsMzUgQEAgaW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlCj4gKmRldl9wcml2LAo+IMKgCj4gwqAJCWludGVsX2ZiX29mZnNldF90b194eSgm eCwgJnksIGZiLCBpKTsKPiDCoAo+ICsJCWlmICgoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0NDUyB8fAo+ICsJCcKgwqDCoMKgwqBmYi0+bW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEX0NDUykKPiAmJiBpID09IDEpIHsKPiArCQkJaW50IG1haW5feCwg bWFpbl95Owo+ICsJCQlpbnQgY2NzX3gsIGNjc195Owo+ICsKPiArCQkJLyoKPiArCQkJwqAqIEVh Y2ggYnl0ZSBvZiBDQ1MgY29ycmVzcG9uZHMgdG8gYSAxNng4Cj4gYXJlYSBvZiB0aGUgbWFpbiBz dXJmYWNlLCBhbmQKPiArCQkJwqAqIGVhY2ggQ0NTIHRpbGUgaXMgNjR4NjQgYnl0ZXMuCj4gKwkJ CcKgKi8KPiArCQkJY2NzX3ggPSAoeCAqIDE2KSAlICg2NCAqIDE2KTsKPiArCQkJY2NzX3kgPSAo eSAqIDgpICUgKDY0ICogOCk7Cj4gKwkJCW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbMF0ueCAl ICg2NCAqIDE2KTsKPiArCQkJbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFswXS55ICUgKDY0ICog OCk7Cj4gKwo+ICsJCQkvKgo+ICsJCQnCoCogQ0NTIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBv ZmZzZXQKPiByZWdpc3Rlciwgc28gdGhlIGludHJhIENDUyB0aWxlCj4gKwkJCcKgKiB4L3kgb2Zm c2V0cyBtdXN0IG1hdGNoIGJldHdlZW4gQ0NTIGFuZAo+IHRoZSBtYWluIHN1cmZhY2UuCj4gKwkJ CcKgKi8KPiArCQkJaWYgKG1haW5feCAhPSBjY3NfeCB8fCBtYWluX3kgIT0gY2NzX3kpIHsKPiAr CQkJCURSTV9ERUJVR19LTVMoIkJhZCBDQ1MgeC95IChtYWluCj4gJWQsJWQgY2NzICVkLCVkKSBm dWxsIChtYWluICVkLCVkIGNjcyAlZCwlZClcbiIsCj4gKwkJCQkJwqDCoMKgwqDCoMKgbWFpbl94 LCBtYWluX3ksCj4gKwkJCQkJwqDCoMKgwqDCoMKgY2NzX3gsIGNjc195LAo+ICsJCQkJCcKgwqDC oMKgwqDCoGludGVsX2ZiLT5ub3JtYWxbMF0ueCwKPiArCQkJCQnCoMKgwqDCoMKgwqBpbnRlbF9m Yi0+bm9ybWFsWzBdLnksCj4gKwkJCQkJwqDCoMKgwqDCoMKgeCwgeSk7Cj4gKwkJCQlyZXR1cm4g LUVJTlZBTDsKPiArCQkJfQo+ICsJCX0KPiArCj4gwqAJCS8qCj4gwqAJCcKgKiBUaGUgZmVuY2Ug KGlmIHVzZWQpIGlzIGFsaWduZWQgdG8gdGhlIHN0YXJ0IG9mCj4gdGhlIG9iamVjdAo+IMKgCQnC oCogc28gaGF2aW5nIHRoZSBmcmFtZWJ1ZmZlciB3cmFwIGFyb3VuZCBhY3Jvc3MgdGhlCj4gZWRn ZSBvZiB0aGUKPiBAQCAtMjg3Myw2ICsyOTEzLDkgQEAgc3RhdGljIGludCBza2xfbWF4X3BsYW5l X3dpZHRoKGNvbnN0IHN0cnVjdAo+IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiDC oAkJCWJyZWFrOwo+IMKgCQl9Cj4gwqAJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9DQ1M6Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gKwkJ LyogRklYTUUgQVVYIHBsYW5lPyAqLwo+IMKgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6 Cj4gwqAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4gwqAJCXN3aXRjaCAoY3BwKSB7 Cj4gQEAgLTI4OTUsNiArMjkzOCw0MiBAQCBzdGF0aWMgaW50IHNrbF9tYXhfcGxhbmVfd2lkdGgo Y29uc3Qgc3RydWN0Cj4gZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAo+IMKgCXJldHVy biAyMDQ4Owo+IMKgfQo+IMKgCj4gK3N0YXRpYyBib29sIHNrbF9jaGVja19tYWluX2Njc19jb29y ZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPiAqcGxhbmVfc3RhdGUsCj4gKwkJCQkJ wqDCoMKgaW50IG1haW5feCwgaW50IG1haW5feSwKPiB1MzIgbWFpbl9vZmZzZXQpCj4gK3sKPiAr CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7 Cj4gKwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+YXV4Lng7Cj4gKwlpbnQgYXV4X3kgPSBwbGFu ZV9zdGF0ZS0+YXV4Lnk7Cj4gKwl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5hdXgub2Zm c2V0Owo+ICsJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCAxKTsKPiAr Cj4gKwl3aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29mZnNldCAmJiBhdXhfeSA8PSBtYWluX3kp IHsKPiArCQlpbnQgeCwgeTsKPiArCj4gKwkJaWYgKGF1eF94ID09IG1haW5feCAmJiBhdXhfeSA9 PSBtYWluX3kpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlpZiAoYXV4X29mZnNldCA9PSAwKQo+ICsJ CQlicmVhazsKPiArCj4gKwkJeCA9IGF1eF94IC8gMTY7Cj4gKwkJeSA9IGF1eF95IC8gODsKPiAr CQlhdXhfb2Zmc2V0ID0gaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwKPiBwbGFuZV9z dGF0ZSwgMSwKPiArCQkJCQkJwqDCoMKgwqDCoMKgYXV4X29mZnNldCwKPiBhdXhfb2Zmc2V0IC0g YWxpZ25tZW50KTsKPiArCQlhdXhfeCA9IHggKiAxNiArIGF1eF94ICUgMTY7Cj4gKwkJYXV4X3kg PSB5ICogOCArIGF1eF95ICUgODsKPiArCX0KPiArCj4gKwlpZiAoYXV4X3ggIT0gbWFpbl94IHx8 IGF1eF95ICE9IG1haW5feSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcGxhbmVfc3RhdGUt PmF1eC5vZmZzZXQgPSBhdXhfb2Zmc2V0Owo+ICsJcGxhbmVfc3RhdGUtPmF1eC54ID0gYXV4X3g7 Cj4gKwlwbGFuZV9zdGF0ZS0+YXV4LnkgPSBhdXhfeTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiAr fQo+ICsKPiDCoHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUKPiAqcGxhbmVfc3RhdGUpCj4gwqB7Cj4gwqAJY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiBAQCAtMjkzNyw3ICszMDE2 LDcgQEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdAo+IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiDCoAo+IMKgCQl3aGlsZSAoKHggKyB3KSAqIGNwcCA+ IGZiLT5waXRjaGVzWzBdKSB7Cj4gwqAJCQlpZiAob2Zmc2V0ID09IDApIHsKPiAtCQkJCURSTV9E RUJVR19LTVMoIlVuYWJsZSB0byBmaW5kCj4gc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNl dFxuIik7Cj4gKwkJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmluZAo+IHN1aXRhYmxlIGRp c3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIFgtdGlsaW5nXG4iKTsKPiDCoAkJCQlyZXR1cm4g LUVJTlZBTDsKPiDCoAkJCX0KPiDCoAo+IEBAIC0yOTQ2LDYgKzMwMjUsMjYgQEAgc3RhdGljIGlu dCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdAo+IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKPiDCoAkJfQo+IMKgCX0KPiDCoAo+ICsJLyoKPiArCcKgKiBDQ1MgQVVYIHN1cmZh Y2UgZG9lc24ndCBoYXZlIGl0cyBvd24geC95IG9mZnNldHMsIHdlIG11c3QKPiBtYWtlIHN1cmUK PiArCcKgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1haW4gc3VyZmFjZSB4L3kgb2Zmc2V0cy4KPiAr CcKgKi8KPiArCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NT IHx8Cj4gKwnCoMKgwqDCoGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURf Q0NTKSB7Cj4gKwkJd2hpbGUgKCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVf c3RhdGUsCj4geCwgeSwgb2Zmc2V0KSkgewo+ICsJCQlpZiAob2Zmc2V0ID09IDApCj4gKwkJCQli cmVhazsKPiArCj4gKwkJCW9mZnNldCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnks Cj4gcGxhbmVfc3RhdGUsIDAsCj4gKwkJCQkJCQnCoMKgb2Zmc2V0LAo+IG9mZnNldCAtIGFsaWdu bWVudCk7Cj4gKwkJfQo+ICsKPiArCQlpZiAoeCAhPSBwbGFuZV9zdGF0ZS0+YXV4LnggfHwgeSAh PSBwbGFuZV9zdGF0ZS0KPiA+YXV4LnkpIHsKPiArCQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRv IGZpbmQgc3VpdGFibGUKPiBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOwo+ ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwl9Cj4gKwo+IMKgCXBsYW5lX3N0YXRlLT5t YWluLm9mZnNldCA9IG9mZnNldDsKPiDCoAlwbGFuZV9zdGF0ZS0+bWFpbi54ID0geDsKPiDCoAlw bGFuZV9zdGF0ZS0+bWFpbi55ID0geTsKPiBAQCAtMjk4Miw2ICszMDgxLDUzIEBAIHN0YXRpYyBp bnQgc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2Uoc3RydWN0Cj4gaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQo+IMKgCXJldHVybiAwOwo+IMKgfQo+IMKgCj4gK3N0YXRpYyBpbnQgc2ts X2NoZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPiAqcGxhbmVf c3RhdGUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFu ZShwbGFuZV9zdGF0ZS0KPiA+YmFzZS5wbGFuZSk7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YyA9IHRvX2ludGVsX2NydGMocGxhbmVfc3RhdGUtCj4gPmJhc2UuY3J0Yyk7Cj4gKwlpbnQgc3Jj X3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7Cj4gKwlpbnQgc3JjX3kgPSBwbGFu ZV9zdGF0ZS0+YmFzZS5zcmMueTEgPj4gMTY7Cj4gKwlpbnQgeCA9IHNyY194IC8gMTY7Cj4gKwlp bnQgeSA9IHNyY195IC8gODsKPiArCXUzMiBvZmZzZXQ7Cj4gKwo+ICsJc3dpdGNoIChwbGFuZS0+ aWQpIHsKPiArCWNhc2UgUExBTkVfUFJJTUFSWToKPiArCWNhc2UgUExBTkVfU1BSSVRFMDoKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydCBvbmx5 IG9uIHBsYW5lIDEgYW5kIDJcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiAr CWlmIChjcnRjLT5waXBlID09IFBJUEVfQykgewo+ICsJCURSTV9ERUJVR19LTVMoIk5vIFJDIHN1 cHBvcnQgb24gcGlwZSBDXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCS8qCj4g KwnCoCogVE9ETzoKPiArCcKgKiAxLiBEaXNhYmxlIHN0ZXJlbyAzRCB3aGVuIHJlbmRlciBkZWNv bXAgaXMgZW5hYmxlZCAoYml0Cj4gNzo2KQo+ICsJwqAqIDIuIFJlbmRlciBkZWNvbXByZXNzaW9u IG11c3Qgbm90IGJlIHVzZWQgaW4gVlRkIHBhc3MtCj4gdGhyb3VnaCBtb2RlCj4gKwnCoCogMy4g UHJvZ3JhbSBoYXNoaW5nIHNlbGVjdCBDSElDS0VOX01JU0MxIGJpdCAxNQo+ICsJwqAqLwo+ICsK PiArCWlmIChwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbiAmJgo+ICsJwqDCoMKgwqBwbGFuZV9z dGF0ZS0+YmFzZS5yb3RhdGlvbiAmIH4oRFJNX1JPVEFURV8wIHwKPiBEUk1fUk9UQVRFXzE4MCkp IHsKPiArCQlEUk1fREVCVUdfS01TKCJSQyBzdXBwb3J0IG9ubHkgd2l0aCAwLzE4MCBkZWdyZWUK PiByb3RhdGlvbiAleFxuIiwKPiArCQkJwqDCoMKgwqDCoMKgcGxhbmVfc3RhdGUtPmJhc2Uucm90 YXRpb24pOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWludGVsX2FkZF9mYl9v ZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEpOwo+ICsJb2Zmc2V0ID0gaW50ZWxfY29tcHV0 ZV90aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAxKTsKPiArCj4gKwlwbGFuZV9zdGF0 ZS0+YXV4Lm9mZnNldCA9IG9mZnNldDsKPiArCXBsYW5lX3N0YXRlLT5hdXgueCA9IHggKiAxNiAr IHNyY194ICUgMTY7Cj4gKwlwbGFuZV9zdGF0ZS0+YXV4LnkgPSB5ICogOCArIHNyY195ICUgODsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiDCoGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFj ZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+IMKgewo+IMKgCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gQEAg LTMwMDIsNiArMzE0OCwxMSBAQCBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0Cj4g aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+IMKgCQlyZXQgPSBza2xfY2hlY2tfbnYx Ml9hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4gwqAJCWlmIChyZXQpCj4gwqAJCQlyZXR1cm4g cmV0Owo+ICsJfSBlbHNlIGlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfQ0NTIHx8Cj4gKwkJwqDCoMKgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRF9DQ1MpIHsKPiArCQlyZXQgPSBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0 YXRlKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+IMKgCX0gZWxzZSB7Cj4gwqAJ CXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0gfjB4ZmZmOwo+IMKgCQlwbGFuZV9zdGF0ZS0+YXV4 LnggPSAwOwo+IEBAIC0zMzU3LDggKzM1MDgsMTIgQEAgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5n KHVpbnQ2NF90IGZiX21vZGlmaWVyKQo+IMKgCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1g7Cj4g wqAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKPiDCoAkJcmV0dXJuIFBMQU5FX0NUTF9U SUxFRF9ZOwo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gKwkJcmV0dXJu IFBMQU5FX0NUTF9USUxFRF9ZIHwKPiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEU7Cj4g wqAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4gwqAJCXJldHVybiBQTEFORV9DVExf VElMRURfWUY7Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gKwkJcmV0 dXJuIFBMQU5FX0NUTF9USUxFRF9ZRiB8Cj4gUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxF Owo+IMKgCWRlZmF1bHQ6Cj4gwqAJCU1JU1NJTkdfQ0FTRShmYl9tb2RpZmllcik7Cj4gwqAJfQo+ IEBAIC0zNDAxLDYgKzM1NTYsNyBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5 X3BsYW5lKHN0cnVjdAo+IGRybV9wbGFuZSAqcGxhbmUsCj4gwqAJdTMyIHBsYW5lX2N0bDsKPiDC oAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiDC oAl1MzIgc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMCwgcm90YXRpb24pOwo+ICsJdTMy IGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAxLCByb3RhdGlvbik7Cj4gwqAJdTMy IHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5tYWluLm9mZnNldDsKPiDCoAlpbnQgc2NhbGVyX2lk ID0gcGxhbmVfc3RhdGUtPnNjYWxlcl9pZDsKPiDCoAlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+ bWFpbi54Owo+IEBAIC0zNDM2LDYgKzM1OTIsMTAgQEAgc3RhdGljIHZvaWQKPiBza3lsYWtlX3Vw ZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IMKgCUk5MTVfV1JJ VEUoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwgKHNyY195IDw8IDE2KSB8Cj4gc3JjX3gp Owo+IMKgCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lX2lkKSwgc3RyaWRlKTsK PiDCoAlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpLCAoc3JjX2ggPDwgMTYp IHwKPiBzcmNfdyk7Cj4gKwlJOTE1X1dSSVRFKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lk KSwKPiArCQnCoMKgwqAocGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgLSBzdXJmX2FkZHIpIHwKPiBh dXhfc3RyaWRlKTsKPiArCUk5MTVfV1JJVEUoUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9p ZCksCj4gKwkJwqDCoMKgKHBsYW5lX3N0YXRlLT5hdXgueSA8PCAxNikgfCBwbGFuZV9zdGF0ZS0+ YXV4LngpOwo+IMKgCj4gwqAJaWYgKHNjYWxlcl9pZCA+PSAwKSB7Cj4gwqAJCXVpbnQzMl90IHBz X2N0cmwgPSAwOwo+IEBAIC05ODA3LDEwICs5OTY3LDE2IEBAIHNreWxha2VfZ2V0X2luaXRpYWxf cGxhbmVfY29uZmlnKHN0cnVjdAo+IGludGVsX2NydGMgKmNydGMsCj4gwqAJCWZiLT5tb2RpZmll ciA9IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwo+IMKgCQlicmVhazsKPiDCoAljYXNlIFBMQU5F X0NUTF9USUxFRF9ZOgo+IC0JCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE Owo+ICsJCWlmICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpCj4gKwkJCWZi LT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKPiArCQllbHNlCj4gKwkJ CWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOwo+IMKgCQlicmVhazsKPiDC oAljYXNlIFBMQU5FX0NUTF9USUxFRF9ZRjoKPiAtCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQ7Cj4gKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VO QUJMRSkKPiArCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsK PiArCQllbHNlCj4gKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsK PiDCoAkJYnJlYWs7Cj4gwqAJZGVmYXVsdDoKPiDCoAkJTUlTU0lOR19DQVNFKHRpbGluZyk7Cj4g QEAgLTEyMDE0LDcgKzEyMTgwLDcgQEAgc3RhdGljIHZvaWQgc2tsX2RvX21taW9fZmxpcChzdHJ1 Y3QKPiBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+IMKgCXUzMiBjdGwsIHN0cmlkZSA9IHNrbF9w bGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsKPiDCoAo+IMKgCWN0bCA9IEk5MTVfUkVBRChQ TEFORV9DVEwocGlwZSwgMCkpOwo+IC0JY3RsICY9IH5QTEFORV9DVExfVElMRURfTUFTSzsKPiAr CWN0bCAmPSB+KFBMQU5FX0NUTF9USUxFRF9NQVNLIHwKPiBQTEFORV9DVExfREVDT01QUkVTU0lP Tl9FTkFCTEUpOwo+IMKgCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7Cj4gwqAJY2FzZSBEUk1fRk9S TUFUX01PRF9OT05FOgo+IMKgCQlicmVhazsKPiBAQCAtMTIwMjQsOSArMTIxOTAsMTUgQEAgc3Rh dGljIHZvaWQgc2tsX2RvX21taW9fZmxpcChzdHJ1Y3QKPiBpbnRlbF9jcnRjICppbnRlbF9jcnRj LAo+IMKgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gwqAJCWN0bCB8PSBQTEFORV9D VExfVElMRURfWTsKPiDCoAkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0NDUzoKPiArCQljdGwgfD0gUExBTkVfQ1RMX1RJTEVEX1kgfAo+IFBMQU5FX0NUTF9ERUNPTVBS RVNTSU9OX0VOQUJMRTsKPiArCQlicmVhazsKPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRDoKPiDCoAkJY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9ZRjsKPiDCoAkJYnJlYWs7Cj4gKwlj YXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gKwkJY3RsIHw9IFBMQU5FX0NUTF9U SUxFRF9ZRiB8Cj4gUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwo+ICsJCWJyZWFrOwo+ IMKgCWRlZmF1bHQ6Cj4gwqAJCU1JU1NJTkdfQ0FTRShmYi0+bW9kaWZpZXIpOwo+IMKgCX0KPiBA QCAtMTU5MjYsOCArMTYwOTgsOCBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQo c3RydWN0Cj4gZHJtX2RldmljZSAqZGV2LAo+IMKgewo+IMKgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiDCoAl1bnNpZ25lZCBpbnQgdGlsaW5nID0g aTkxNV9nZW1fb2JqZWN0X2dldF90aWxpbmcob2JqKTsKPiAtCWludCByZXQ7Cj4gLQl1MzIgcGl0 Y2hfbGltaXQsIHN0cmlkZV9hbGlnbm1lbnQ7Cj4gKwlpbnQgcmV0LCBpOwo+ICsJdTMyIHBpdGNo X2xpbWl0Owo+IMKgCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOwo+IMKg Cj4gwqAJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+IEBA IC0xNTk1Myw2ICsxNjEyNSwxOSBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQo c3RydWN0Cj4gZHJtX2RldmljZSAqZGV2LAo+IMKgCj4gwqAJLyogUGFzc2VkIGluIG1vZGlmaWVy IHNhbml0eSBjaGVja2luZy4gKi8KPiDCoAlzd2l0Y2ggKG1vZGVfY21kLT5tb2RpZmllclswXSkg ewo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gKwljYXNlIEk5MTVfRk9S TUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gKwkJc3dpdGNoIChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0 KSB7Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9B QkdSODg4ODoKPiArCQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKwkJY2FzZSBEUk1fRk9S TUFUX0FSR0I4ODg4Ogo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQlEUk1fREVCVUdf S01TKCJSQyBzdXBwb3J0ZWQgb25seSB3aXRoCj4gUkdCODg4OCBmb3JtYXRzXG4iKTsKPiArCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+IMKgCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gwqAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQ6Cj4gwqAJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkgewo+IEBAIC0xNjA2MSwxMSAr MTYyNDYsMjEgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdAo+IGRy bV9kZXZpY2UgKmRldiwKPiDCoAo+IMKgCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdChk ZXYsICZpbnRlbF9mYi0+YmFzZSwKPiBtb2RlX2NtZCk7Cj4gwqAKPiAtCXN0cmlkZV9hbGlnbm1l bnQgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KCZpbnRlbF9mYi0KPiA+YmFzZSwgMCk7Cj4g LQlpZiAobW9kZV9jbWQtPnBpdGNoZXNbMF0gJiAoc3RyaWRlX2FsaWdubWVudCAtIDEpKSB7Cj4g LQkJRFJNX0RFQlVHX0tNUygicGl0Y2ggKCVkKSBtdXN0IGJlIGF0IGxlYXN0ICV1IGJ5dGUKPiBh bGlnbmVkXG4iLAo+IC0JCQnCoMKgwqDCoMKgwqBtb2RlX2NtZC0+cGl0Y2hlc1swXSwKPiBzdHJp ZGVfYWxpZ25tZW50KTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiArCWZvciAoaSA9IDA7IGkgPCBp bnRlbF9mYi0+YmFzZS5mb3JtYXQtPm51bV9wbGFuZXM7IGkrKykgewo+ICsJCXUzMiBzdHJpZGVf YWxpZ25tZW50Owo+ICsKPiArCQlpZiAobW9kZV9jbWQtPmhhbmRsZXNbaV0gIT0gbW9kZV9jbWQt PmhhbmRsZXNbMF0pIHsKPiArCQkJRFJNX0RFQlVHX0tNUygiYmFkIHBsYW5lICVkIGhhbmRsZVxu IiwgaSk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCj4gKwkJc3RyaWRlX2FsaWdu bWVudCA9Cj4gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudCgmaW50ZWxfZmItPmJhc2UsIGkpOwo+ ICsKPiArCQlpZiAobW9kZV9jbWQtPnBpdGNoZXNbaV0gJiAoc3RyaWRlX2FsaWdubWVudCAtIDEp KSB7Cj4gKwkJCURSTV9ERUJVR19LTVMoInBsYW5lICVkIHBpdGNoICglZCkgbXVzdCBiZQo+IGF0 IGxlYXN0ICV1IGJ5dGUgYWxpZ25lZFxuIiwKPiArCQkJCcKgwqDCoMKgwqDCoGksIG1vZGVfY21k LT5waXRjaGVzW2ldLAo+IHN0cmlkZV9hbGlnbm1lbnQpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsK PiArCQl9Cj4gwqAJfQo+IMKgCj4gwqAJaW50ZWxfZmItPm9iaiA9IG9iajsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwo+IGluZGV4IDI0OTYyM2Q0NWJlMC4uYWRkMzU5MDIyYzk2IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gQEAgLTMzMTQsNyArMzMxNCw5IEBAIHNrbF9kZGJfbWlu X2FsbG9jKGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUKPiAqcHN0YXRlLAo+IMKgCj4gwqAJ LyogRm9yIE5vbiBZLXRpbGUgcmV0dXJuIDgtYmxvY2tzICovCj4gwqAJaWYgKGZiLT5tb2RpZmll ciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgo+IC0JwqDCoMKgwqBmYi0+bW9kaWZpZXIg IT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKQo+ICsJwqDCoMKgwqBmYi0+bW9kaWZpZXIgIT0g STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEICYmCj4gKwnCoMKgwqDCoGZiLT5tb2RpZmllciAhPSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgJiYKPiArCcKgwqDCoMKgZmItPm1vZGlmaWVyICE9 IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpCj4gwqAJCXJldHVybiA4Owo+IMKgCj4gwqAJ c3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmaW50ZWxfcHN0YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4g QEAgLTM1OTAsNyArMzU5Miw5IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29u c3Qgc3RydWN0Cj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gwqAJfQo+IMKgCj4gwqAJ eV90aWxlZCA9IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+IC0J CcKgwqBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOwo+ICsJCcKgwqBm Yi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEIHx8Cj4gKwkJwqDCoGZiLT5t b2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKPiArCQnCoMKgZmItPm1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7Cj4gwqAJeF90aWxlZCA9IGZi LT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKPiDCoAo+IMKgCS8qIERpc3Bs YXkgV0EgIzExNDE6IGtibC4gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfc3ByaXRlLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4g aW5kZXggNzAzMWJjNzMzZDk3Li4wNjNhOTk0ODE1ZDAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9zcHJpdGUuYwo+IEBAIC0yMTAsNiArMjEwLDcgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCj4gwqAJdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRl LT5tYWluLm9mZnNldDsKPiDCoAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+ YmFzZS5yb3RhdGlvbjsKPiDCoAl1MzIgc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMCwg cm90YXRpb24pOwo+ICsJdTMyIGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAxLCBy b3RhdGlvbik7Cj4gwqAJaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC54MTsKPiDC oAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0LnkxOwo+IMKgCXVpbnQzMl90IGNy dGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5kc3QpOwo+IEBAIC0yNDgs NiArMjQ5LDEwIEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5l LAo+IMKgCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwgKHkgPDwgMTYp IHwgeCk7Cj4gwqAJSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmVfaWQpLCBzdHJp ZGUpOwo+IMKgCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCksIChzcmNfaCA8 PCAxNikgfAo+IHNyY193KTsKPiArCUk5MTVfV1JJVEUoUExBTkVfQVVYX0RJU1QocGlwZSwgcGxh bmVfaWQpLAo+ICsJCcKgwqDCoChwbGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCAtIHN1cmZfYWRkcikg fAo+IGF1eF9zdHJpZGUpOwo+ICsJSTkxNV9XUklURShQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBs YW5lX2lkKSwKPiArCQnCoMKgwqAocGxhbmVfc3RhdGUtPmF1eC55IDw8IDE2KSB8IHBsYW5lX3N0 YXRlLT5hdXgueCk7Cj4gwqAKPiDCoAkvKiBwcm9ncmFtIHBsYW5lIHNjYWxlciAqLwo+IMKgCWlm IChwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkID49IDApIHsKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==