From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v2 1/6] drm/i915: store all subslice masks Date: Fri, 12 Jan 2018 10:58:28 +0000 Message-ID: References: <20180111195352.27193-1-lionel.g.landwerlin@intel.com> <20180111195352.27193-2-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id F248C6E713 for ; Fri, 12 Jan 2018 13:38:52 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTIvMDEvMTggMTA6MTUsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMTEvMDEvMjAx OCAxOTo1MywgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IFVwIHRvIG5vdywgc3Vic2xpY2Ug bWFzayB3YXMgYXNzdW1lZCB0byBiZSB1bmlmb3JtIGFjcm9zcyBzbGljZXMuIEJ1dAo+PiBzdGFy dGluZyB3aXRoIENhbm5vbmxha2UsIHNsaWNlcyBjYW4gYmUgYXN5bW1ldHJpYyAoZm9yIGV4YW1w bGUgc2xpY2UwCj4+IGhhcyBkaWZmZXJlbnQgbnVtYmVyIG9mIHN1YnNsaWNlcyBhcyBzbGljZTEr KS4gVGhpcyBjaGFuZ2Ugc3RvcmVzIGFsbAo+PiBzdWJzbGljZXMgbWFza3MgZm9yIGFsbCBzbGlj ZXMgcmF0aGVyIHRoYW4gaGF2aW5nIGEgc2luZ2xlIG1hc2sgdGhhdAo+PiBhcHBsaWVzIHRvIGFs bCBzbGljZXMuCj4+Cj4+IHYyOiBSZXdvcmsgaG93IHdlIHN0b3JlIHRvdGFsIG51bWJlcnMgaW4g c3NldV9kZXZfaW5mbyAoVHZydGtvKQo+PiDCoMKgwqDCoCBGaXggQ0hWIGV1IG1hc2tzLCB3YXMg cmVhZGluZyBkaXNhYmxlZCBhcyBlbmFibGVkIChUdnJ0a28pCj4+IMKgwqDCoMKgIFJlYWRhYmls aXR5IGNoYW5nZXMgKFR2cnRrbykKPj4gwqDCoMKgwqAgQWRkIEVVIGluZGV4IGhlbHBlciAoVHZy dGtvKQo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFu ZHdlcmxpbkBpbnRlbC5jb20+Cj4+IC0tLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuY8KgwqDCoMKgwqAgfMKgIDI1ICsrLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuY8KgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICstCj4+IMKgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmMgfCAxOTYgCj4+ICsrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNl X2luZm8uaCB8wqAgMzYgKysrKystCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICstCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaMKgIHzCoMKgIDIgKy0KPj4gwqAgNiBmaWxlcyBjaGFuZ2VkLCAy MDAgaW5zZXJ0aW9ucygrKSwgNjMgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwo+PiBpbmRleCAyYmI2MzA3M2Q3M2YuLjQ2MzAyOWY3MmEwYiAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gQEAgLTQyODUsNyArNDI4NSw3 IEBAIHN0YXRpYyB2b2lkIAo+PiBjaGVycnl2aWV3X3NzZXVfZGV2aWNlX3N0YXR1cyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnRpbnVlOwo+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c2xpY2VfbWFzayA9IEJJ VCgwKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgfD0gQklUKHNzKTsK Pj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2tbMF0gfD0gQklUKHNzKTsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIGV1X2NudCA9ICgoc2lnMVtzc10gJiBDSFZfRVUwOF9QR19FTkFC TEUpID8gMCA6IDIpICsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKHNpZzFbc3Nd ICYgQ0hWX0VVMTlfUEdfRU5BQkxFKSA/IDAgOiAyKSArCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKChzaWcxW3NzXSAmIENIVl9FVTIxMF9QR19FTkFCTEUpID8gMCA6IDIpICsKPj4g QEAgLTQzMzIsNyArNDMzMiw3IEBAIHN0YXRpYyB2b2lkIGdlbjEwX3NzZXVfZGV2aWNlX3N0YXR1 cyhzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnNs aWNlX21hc2sgfD0gQklUKHMpOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFz ayA9IGluZm8tPnNzZXUuc3Vic2xpY2VfbWFzazsKPj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1 YnNsaWNlX21hc2tbc10gPSBpbmZvLT5zc2V1LnN1YnNsaWNlX21hc2tbc107Cj4+IMKgIMKgwqDC oMKgwqDCoMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGV1X2NudDsKPj4gQEAgLTQzODcsOCAr NDM4Nyw4IEBAIHN0YXRpYyB2b2lkIGdlbjlfc3NldV9kZXZpY2Vfc3RhdHVzKHN0cnVjdCAKPj4g ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5z bGljZV9tYXNrIHw9IEJJVChzKTsKPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19HRU45 X0JDKGRldl9wcml2KSkKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2Vf bWFzayA9Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfSU5GTyhkZXZf cHJpdiktPnNzZXUuc3Vic2xpY2VfbWFzazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Nl dS0+c3Vic2xpY2VfbWFza1tzXSA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg SU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuc3Vic2xpY2VfbWFza1tzXTsKPj4gwqAgwqDCoMKg wqDCoMKgwqDCoMKgIGZvciAoc3MgPSAwOyBzcyA8IHNzX21heDsgc3MrKykgewo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgZXVfY250Owo+PiBAQCAtNDM5OCw3ICs0 Mzk4LDcgQEAgc3RhdGljIHZvaWQgZ2VuOV9zc2V1X2RldmljZV9zdGF0dXMoc3RydWN0IAo+PiBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC8qIHNraXAgZGlzYWJsZWQgc3Vic2xpY2UgKi8KPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiDCoCAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgfD0gQklUKHNzKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrW3Nd IHw9IEJJVChzcyk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZXVfY250ID0gMiAqIGh3ZWlnaHQzMihldV9yZWdbMipzICsg c3MvMl0gJgo+PiBAQCAtNDQyMCw5ICs0NDIwLDEyIEBAIHN0YXRpYyB2b2lkIAo+PiBicm9hZHdl bGxfc3NldV9kZXZpY2Vfc3RhdHVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK Pj4gwqDCoMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrID0gc2xpY2VfaW5mbyAmIEdFTjhfTFNMSUNF U1RBVF9NQVNLOwo+PiDCoCDCoMKgwqDCoMKgIGlmIChzc2V1LT5zbGljZV9tYXNrKSB7Cj4+IC3C oMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrID0gSU5URUxfSU5GTyhkZXZfcHJpdikt PnNzZXUuc3Vic2xpY2VfbWFzazsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X3Blcl9z dWJzbGljZSA9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfSU5G TyhkZXZfcHJpdiktPnNzZXUuZXVfcGVyX3N1YnNsaWNlOwo+PiArwqDCoMKgwqDCoMKgwqAgZm9y IChzID0gMDsgcyA8IGZscyhzc2V1LT5zbGljZV9tYXNrKTsgcysrKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2tbc10gPQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIElOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21hc2tb c107Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV90 b3RhbCA9IHNzZXUtPmV1X3Blcl9zdWJzbGljZSAqCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzc2V1X3N1YnNsaWNlX3RvdGFsKHNzZXUpOwo+PiDCoCBAQCAtNDQ0MSw2 ICs0NDQ0LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9wcmludF9zc2V1X2luZm8oc3RydWN0IAo+PiBz ZXFfZmlsZSAqbSwgYm9vbCBpc19hdmFpbGFibGVfaW5mbywKPj4gwqAgewo+PiDCoMKgwqDCoMKg IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2 YXRlKTsKPj4gwqDCoMKgwqDCoCBjb25zdCBjaGFyICp0eXBlID0gaXNfYXZhaWxhYmxlX2luZm8g PyAiQXZhaWxhYmxlIiA6ICJFbmFibGVkIjsKPj4gK8KgwqDCoCBpbnQgczsKPj4gwqAgwqDCoMKg wqDCoCBzZXFfcHJpbnRmKG0sICLCoCAlcyBTbGljZSBNYXNrOiAlMDR4XG4iLCB0eXBlLAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c2xpY2VfbWFzayk7Cj4+IEBAIC00NDQ4LDEw ICs0NDUyLDExIEBAIHN0YXRpYyB2b2lkIGk5MTVfcHJpbnRfc3NldV9pbmZvKHN0cnVjdCAKPj4g c2VxX2ZpbGUgKm0sIGJvb2wgaXNfYXZhaWxhYmxlX2luZm8sCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBod2VpZ2h0OChzc2V1LT5zbGljZV9tYXNrKSk7Cj4+IMKgwqDCoMKgwqAgc2VxX3By aW50ZihtLCAiwqAgJXMgU3Vic2xpY2UgVG90YWw6ICV1XG4iLCB0eXBlLAo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3NldV9zdWJzbGljZV90b3RhbChzc2V1KSk7Cj4+IC3CoMKgwqAgc2Vx X3ByaW50ZihtLCAiwqAgJXMgU3Vic2xpY2UgTWFzazogJTA0eFxuIiwgdHlwZSwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2spOwo+PiAtwqDCoMKgIHNlcV9wcmlu dGYobSwgIsKgICVzIFN1YnNsaWNlIFBlciBTbGljZTogJXVcbiIsIHR5cGUsCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoCBod2VpZ2h0OChzc2V1LT5zdWJzbGljZV9tYXNrKSk7Cj4+ICvCoMKgwqAg Zm9yIChzID0gMDsgcyA8IGZscyhzc2V1LT5zbGljZV9tYXNrKTsgcysrKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCBzZXFfcHJpbnRmKG0sICLCoCAlcyBTbGljZSVpICV1IHN1YnNsaWNlcywgbWFzaz0l MDR4XG4iLCB0eXBlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzLCBod2VpZ2h0 OChzc2V1LT5zdWJzbGljZV9tYXNrW3NdKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3NldS0+c3Vic2xpY2VfbWFza1tzXSk7Cj4+ICvCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIHNl cV9wcmludGYobSwgIsKgICVzIEVVIFRvdGFsOiAldVxuIiwgdHlwZSwKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNzZXUtPmV1X3RvdGFsKTsKPj4gwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0s ICLCoCAlcyBFVSBQZXIgU3Vic2xpY2U6ICV1XG4iLCB0eXBlLAo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jCj4+IGluZGV4IDZjOGRhOWQyMGMzMy4uOTY5ODM1ZDNjYmNkIDEwMDY0NAo+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMKPj4gQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgaW50IGk5 MTVfZ2V0cGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgCj4+IHZvaWQgKmRhdGEsCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREVWOwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgY2FzZSBJOTE1X1BBUkFNX1NVQlNMSUNFX01BU0s6 Cj4+IC3CoMKgwqDCoMKgwqDCoCB2YWx1ZSA9IElOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1 YnNsaWNlX21hc2s7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2YWx1ZSA9IElOVEVMX0lORk8oZGV2X3By aXYpLT5zc2V1LnN1YnNsaWNlX21hc2tbMF07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXZh bHVlKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGV2aWNlX2luZm8uYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k ZXZpY2VfaW5mby5jCj4+IGluZGV4IGQyODU5MmU0MzUxMi4uMGJmNmVmNTFjZGI3IDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5jCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmMKPj4gQEAgLTgwLDEyICs4 MCwxNyBAQCB2b2lkIGludGVsX2RldmljZV9pbmZvX2R1bXBfZmxhZ3MoY29uc3Qgc3RydWN0IAo+ PiBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbywKPj4gwqAgwqAgc3RhdGljIHZvaWQgc3NldV9kdW1w KGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1LCBzdHJ1Y3QgCj4+IGRybV9wcmludGVy ICpwKQo+PiDCoCB7Cj4+ICvCoMKgwqAgaW50IHM7Cj4+ICsKPj4gwqDCoMKgwqDCoCBkcm1fcHJp bnRmKHAsICJzbGljZSBtYXNrOiAlMDR4XG4iLCBzc2V1LT5zbGljZV9tYXNrKTsKPj4gwqDCoMKg wqDCoCBkcm1fcHJpbnRmKHAsICJzbGljZSB0b3RhbDogJXVcbiIsIGh3ZWlnaHQ4KHNzZXUtPnNs aWNlX21hc2spKTsKPj4gwqDCoMKgwqDCoCBkcm1fcHJpbnRmKHAsICJzdWJzbGljZSB0b3RhbDog JXVcbiIsIHNzZXVfc3Vic2xpY2VfdG90YWwoc3NldSkpOwo+PiAtwqDCoMKgIGRybV9wcmludGYo cCwgInN1YnNsaWNlIG1hc2sgJTA0eFxuIiwgc3NldS0+c3Vic2xpY2VfbWFzayk7Cj4+IC3CoMKg wqAgZHJtX3ByaW50ZihwLCAic3Vic2xpY2UgcGVyIHNsaWNlOiAldVxuIiwKPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgIGh3ZWlnaHQ4KHNzZXUtPnN1YnNsaWNlX21hc2spKTsKPj4gK8KgwqDCoCBm b3IgKHMgPSAwOyBzIDwgQVJSQVlfU0laRShzc2V1LT5zdWJzbGljZV9tYXNrKTsgcysrKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBkcm1fcHJpbnRmKHAsICJzbGljZSVkIHN1YnNsaWNlIG1hc2sgJTA0 eFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcywgc3NldS0+c3Vic2xpY2Vf bWFza1tzXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fcHJpbnRmKHAsICJzbGljZSVkIHN1YnNs aWNlIHBlciBzbGljZTogJXVcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMs IGh3ZWlnaHQ4KHNzZXUtPnN1YnNsaWNlX21hc2tbc10pKTsKPgo+IENvc21ldGljIG9ubHkgYnV0 IGNvbnNpZGVyIGNvbmRlbnNpbmcgdGhpcyBpbnRvIG9uZSBsaW5lIGlmIHlvdSBkb24ndCAKPiBo YXZlIGEgcHJlZmVyZW5jZSB0byBlaXRoZXIuCgpTdXJlLCBqdXN0IGNvbnNjaW91cyBhYm91dCB0 aGUgODBjaGFyYWN0ZXJzLgoKPgo+PiArwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCBkcm1fcHJpbnRm KHAsICJFVSB0b3RhbDogJXVcbiIsIHNzZXUtPmV1X3RvdGFsKTsKPj4gwqDCoMKgwqDCoCBkcm1f cHJpbnRmKHAsICJFVSBwZXIgc3Vic2xpY2U6ICV1XG4iLCBzc2V1LT5ldV9wZXJfc3Vic2xpY2Up Owo+PiDCoMKgwqDCoMKgIGRybV9wcmludGYocCwgImhhcyBzbGljZSBwb3dlciBnYXRpbmc6ICVz XG4iLAo+PiBAQCAtMTE5LDIyICsxMjQsODggQEAgdm9pZCBpbnRlbF9kZXZpY2VfaW5mb19kdW1w KGNvbnN0IHN0cnVjdCAKPj4gaW50ZWxfZGV2aWNlX2luZm8gKmluZm8sCj4+IMKgwqDCoMKgwqAg aW50ZWxfZGV2aWNlX2luZm9fZHVtcF9mbGFncyhpbmZvLCBwKTsKPj4gwqAgfQo+PiDCoCArc3Rh dGljIHUxNiBjb21wdXRlX2V1X3RvdGFsKGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1 KQo+PiArewo+PiArwqDCoMKgIHUxNiBpLCB0b3RhbCA9IDA7Cj4+ICsKPj4gK8KgwqDCoCBmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShzc2V1LT5ldV9tYXNrKTsgaSsrKQo+PiArwqDCoMKgwqDC oMKgwqAgdG90YWwgKz0gaHdlaWdodDgoc3NldS0+ZXVfbWFza1tpXSk7Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gdG90YWw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1MTYgY29tcHV0ZV9zdWJzbGlj ZV90b3RhbChjb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSkKPj4gK3sKPj4gK8KgwqDC oCB1MTYgaSwgdG90YWwgPSAwOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoc3NldS0+c3Vic2xpY2VfbWFzayk7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIHRvdGFs ICs9IGh3ZWlnaHQ4KHNzZXUtPnN1YnNsaWNlX21hc2tbaV0pOwo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIHRvdGFsOwo+PiArfQo+PiArCj4+IMKgIHN0YXRpYyB2b2lkIGdlbjEwX3NzZXVfaW5mb19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAgewo+PiDCoMKgwqDC oMKgIHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1ID0gJm1rd3JpdGVfZGV2aWNlX2luZm8oZGV2 X3ByaXYpLT5zc2V1Owo+PiDCoMKgwqDCoMKgIGNvbnN0IHUzMiBmdXNlMiA9IEk5MTVfUkVBRChH RU44X0ZVU0UyKTsKPj4gK8KgwqDCoCBpbnQgcywgc3M7Cj4+ICvCoMKgwqAgY29uc3QgaW50IGV1 X21hc2sgPSAweGZmOwo+PiArwqDCoMKgIHUzMiBzdWJzbGljZV9tYXNrLCBldV9lbjsKPj4gwqAg wqDCoMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrID0gKGZ1c2UyICYgR0VOMTBfRjJfU19FTkFfTUFT SykgPj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU4xMF9GMl9TX0VO QV9TSElGVDsKPj4gLcKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrID0gKDEgPDwgNCkgLSAxOwo+ PiAtwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgJj0gfigoZnVzZTIgJiBHRU4xMF9GMl9TU19E SVNfTUFTSykgPj4KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjEwX0Yy X1NTX0RJU19TSElGVCk7Cj4+ICvCoMKgwqAgc3NldS0+bWF4X3NsaWNlcyA9IDY7Cj4+ICvCoMKg wqAgc3NldS0+bWF4X3N1YnNsaWNlcyA9IDQ7Cj4+ICvCoMKgwqAgc3NldS0+bWF4X2V1c19wZXJf c3Vic2xpY2UgPSA4Owo+PiDCoCAtwqDCoMKgIHNzZXUtPmV1X3RvdGFsID0gaHdlaWdodDMyKH5J OTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMCkpOwo+PiAtwqDCoMKgIHNzZXUtPmV1X3RvdGFsICs9 IGh3ZWlnaHQzMih+STkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTEpKTsKPj4gLcKgwqDCoCBzc2V1 LT5ldV90b3RhbCArPSBod2VpZ2h0MzIofkk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUyKSk7Cj4+ IC3CoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gaHdlaWdodDgofihJOTE1X1JFQUQoR0VOMTBfRVVf RElTQUJMRTMpICYKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg R0VOMTBfRVVfRElTX1NTX01BU0spKTsKPj4gK8KgwqDCoCBzdWJzbGljZV9tYXNrID0gKDEgPDwg NCkgLSAxOwo+PiArwqDCoMKgIHN1YnNsaWNlX21hc2sgJj0gfigoZnVzZTIgJiBHRU4xMF9GMl9T U19ESVNfTUFTSykgPj4KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOMTBfRjJf U1NfRElTX1NISUZUKTsKPj4gKwo+PiArwqDCoMKgIC8qIFNsaWNlMCBjYW4gaGF2ZSB1cCB0byAz IHN1YnNsaWNlcywgYnV0IHRoZXJlIGFyZSBvbmx5IDIgaW4KPj4gK8KgwqDCoMKgICogc2xpY2Ux LzIuCj4+ICvCoMKgwqDCoCAqLwo+Cj4gU29ycnkgZm9yIG5vdCBzcG90dGluZyB0aGlzIGVhcmxp ZXIgLSB0aGlzIGNvbW1lbnQgc3R5bGUgaXMgZnJvd25lZCAKPiB1cG9uLiBJbnN0ZWFkIGZvciBt dWx0aS1saW5lIHBsZWFzZSB1c2U6Cj4KPiAvKgo+IMKgKiBCbGFoIGJsYWguLi4KPiDCoCovCgpE b25lLgoKPgo+PiArwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2tbMF0gPSBzdWJzbGljZV9tYXNr Owo+PiArwqDCoMKgIGZvciAocyA9IDE7IHMgPCBzc2V1LT5tYXhfc2xpY2VzOyBzKyspCj4+ICvC oMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrW3NdID0gc3Vic2xpY2VfbWFzayAmIDB4 MzsKPj4gKwo+PiArwqDCoMKgIC8qIFNsaWNlMCAqLwo+PiArwqDCoMKgIGV1X2VuID0gfkk5MTVf UkVBRChHRU44X0VVX0RJU0FCTEUwKTsKPj4gK8KgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc2V1 LT5tYXhfc3Vic2xpY2VzOyBzcysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNr W3NzZXVfZXVfaWR4KHNzZXUsIDAsIHNzLCAwKV0gPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAoZXVfZW4gPj4gKDggKiBzcykpICYgZXVfbWFzazsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAg LyogU2xpY2UxICovCj4+ICvCoMKgwqAgc3NldS0+ZXVfbWFza1tzc2V1X2V1X2lkeChzc2V1LCAx LCAwLCAwKV0gPSAoZXVfZW4gPj4gMjQpICYgCj4+IGV1X21hc2s7Cj4+ICvCoMKgwqAgZXVfZW4g PSB+STkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTEpOwo+PiArwqDCoMKgIHNzZXUtPmV1X21hc2tb c3NldV9ldV9pZHgoc3NldSwgMSwgMSwgMCldID0gZXVfZW4gJiBldV9tYXNrOwo+PiArwqDCoMKg IC8qIFNsaWNlMiAqLwo+PiArwqDCoMKgIHNzZXUtPmV1X21hc2tbc3NldV9ldV9pZHgoc3NldSwg MiwgMCwgMCldID0gKGV1X2VuID4+IDgpICYgZXVfbWFzazsKPj4gK8KgwqDCoCBzc2V1LT5ldV9t YXNrW3NzZXVfZXVfaWR4KHNzZXUsIDIsIDEsIDApXSA9IChldV9lbiA+PiAxNikgJiAKPj4gZXVf bWFzazsKPj4gK8KgwqDCoCAvKiBTbGljZTMgKi8KPj4gK8KgwqDCoCBzc2V1LT5ldV9tYXNrW3Nz ZXVfZXVfaWR4KHNzZXUsIDMsIDAsIDApXSA9IChldV9lbiA+PiAyNCkgJiAKPj4gZXVfbWFzazsK Pj4gK8KgwqDCoCBldV9lbiA9IH5JOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMik7Cj4+ICvCoMKg wqAgc3NldS0+ZXVfbWFza1tzc2V1X2V1X2lkeChzc2V1LCAzLCAxLCAwKV0gPSBldV9lbiAmIGV1 X21hc2s7Cj4+ICvCoMKgwqAgLyogU2xpY2U0ICovCj4+ICvCoMKgwqAgc3NldS0+ZXVfbWFza1tz c2V1X2V1X2lkeChzc2V1LCA0LCAwLCAwKV0gPSAoZXVfZW4gPj4gOCkgJiBldV9tYXNrOwo+PiAr wqDCoMKgIHNzZXUtPmV1X21hc2tbc3NldV9ldV9pZHgoc3NldSwgNCwgMSwgMCldID0gKGV1X2Vu ID4+IDE2KSAmIAo+PiBldV9tYXNrOwo+PiArwqDCoMKgIC8qIFNsaWNlNSAqLwo+PiArwqDCoMKg IHNzZXUtPmV1X21hc2tbc3NldV9ldV9pZHgoc3NldSwgNSwgMCwgMCldID0gKGV1X2VuID4+IDI0 KSAmIAo+PiBldV9tYXNrOwo+PiArwqDCoMKgIGV1X2VuID0gfkk5MTVfUkVBRChHRU4xMF9FVV9E SVNBQkxFMyk7Cj4+ICvCoMKgwqAgc3NldS0+ZXVfbWFza1tzc2V1X2V1X2lkeChzc2V1LCA1LCAx LCAwKV0gPSBldV9lbiAmIGV1X21hc2s7Cj4KPiBJbmRpY2VzIGFyZSBndWFyYW50ZWVkIHRvIGJl IHVuaXF1ZSBpbiB0aGVzZSBvcGVyYXRpb25zPyBObyBuZWVkIHRvIFJNVz8KCkZvciBhIGdpdmVu IG1heF9zbGljZXMvbWF4X3N1YnNsaWNlcy9ESVZfUk9VTkRfVVAobWF4X2V1c19wZXJfc3Vic2xp Y2UsIApCSVRTX1BFUl9CWVRFKSBpbmRpY2VzIGFyZSB1bmlxdWUuCgo+Cj4+ICsKPj4gK8KgwqDC oCAvKiBEbyBhIHNlY29uZCBwYXNzIHdoZXJlIHdlIG1hcmtlZCB0aGUgc3Vic2xpY2VzIGRpc2Fi bGVkIGlmIGFsbAo+PiArwqDCoMKgwqAgKiB0aGVpciBldXMgYXJlIG9mZi4KPj4gK8KgwqDCoMKg ICovCj4+ICvCoMKgwqAgZm9yIChzID0gMDsgcyA8IHNzZXUtPm1heF9zbGljZXM7IHMrKykgewo+ PiArwqDCoMKgwqDCoMKgwqAgZm9yIChzcyA9IDA7IHNzIDwgc3NldS0+bWF4X3N1YnNsaWNlczsg c3MrKykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc3NldV9ldV9tYXNrKHNzZXUs IHMsIHNzLCAwKSA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUt PnN1YnNsaWNlX21hc2tbc10gJj0gfkJJVChzcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvC oMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgc3NldS0+c3Vic2xpY2VfdG90YWwgPSBjb21wdXRlX3N1 YnNsaWNlX3RvdGFsKHNzZXUpOwo+PiArwqDCoMKgIHNzZXUtPmV1X3RvdGFsID0gY29tcHV0ZV9l dV90b3RhbChzc2V1KTsKPj4gwqAgwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDCoMKgwqAgKiBDTkwg aXMgZXhwZWN0ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbgo+PiBAQCAt MTU1LDI2ICsyMjYsMzEgQEAgc3RhdGljIHZvaWQgZ2VuMTBfc3NldV9pbmZvX2luaXQoc3RydWN0 IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAgc3RhdGljIHZvaWQgY2hlcnJ5 dmlld19zc2V1X2luZm9faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4gKmRldl9wcml2 KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAmbWt3 cml0ZV9kZXZpY2VfaW5mbyhkZXZfcHJpdiktPnNzZXU7Cj4+IC3CoMKgwqAgdTMyIGZ1c2UsIGV1 X2RpczsKPj4gK8KgwqDCoCB1MzIgZnVzZTsKPj4gwqAgwqDCoMKgwqDCoCBmdXNlID0gSTkxNV9S RUFEKENIVl9GVVNFX0dUKTsKPj4gwqAgwqDCoMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrID0gQklU KDApOwo+PiArwqDCoMKgIHNzZXUtPm1heF9zbGljZXMgPSAxOwo+PiArwqDCoMKgIHNzZXUtPm1h eF9zdWJzbGljZXMgPSAyOwo+PiArwqDCoMKgIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID0g ODsKPj4gwqAgwqDCoMKgwqDCoCBpZiAoIShmdXNlICYgQ0hWX0ZHVF9ESVNBQkxFX1NTMCkpIHsK Pj4gLcKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgfD0gQklUKDApOwo+PiAtwqDC oMKgwqDCoMKgwqAgZXVfZGlzID0gZnVzZSAmIChDSFZfRkdUX0VVX0RJU19TUzBfUjBfTUFTSyB8 Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDSFZfRkdUX0VVX0RJU19TUzBf UjFfTUFTSyk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV90b3RhbCArPSA4IC0gaHdlaWdo dDMyKGV1X2Rpcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrWzBdIHw9 IEJJVCgwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X21hc2tbMF0gPSB+KChmdXNlICYg Q0hWX0ZHVF9FVV9ESVNfU1MwX1IwX01BU0spID4+IAo+PiBDSFZfRkdUX0VVX0RJU19TUzBfUjBf U0hJRlQpOwo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfbWFza1swXSB8PSB+KCgoZnVzZSAm IENIVl9GR1RfRVVfRElTX1NTMF9SMV9NQVNLKSAKPj4gPj4gQ0hWX0ZHVF9FVV9ESVNfU1MwX1Ix X1NISUZUKSA8PCA0KTsKPgo+IFVzZSBzc2V1X2V1X2lkeD8KCkRvbmUuCgo+Cj4+ICvCoMKgwqDC oMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrWzBdID0gMTsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKg IMKgwqDCoMKgwqAgaWYgKCEoZnVzZSAmIENIVl9GR1RfRElTQUJMRV9TUzEpKSB7Cj4+IC3CoMKg wqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrIHw9IEJJVCgxKTsKPj4gLcKgwqDCoMKgwqDC oMKgIGV1X2RpcyA9IGZ1c2UgJiAoQ0hWX0ZHVF9FVV9ESVNfU1MxX1IwX01BU0sgfAo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0hWX0ZHVF9FVV9ESVNfU1MxX1IxX01BU0sp Owo+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gOCAtIGh3ZWlnaHQzMihldV9k aXMpOwo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFza1swXSB8PSBCSVQoMSk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNrWzFdID0gfigoZnVzZSAmIENIVl9GR1Rf RVVfRElTX1NTMV9SMF9NQVNLKSA+PiAKPj4gQ0hWX0ZHVF9FVV9ESVNfU1MwX1IwX1NISUZUKTsK Pj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X21hc2tbMV0gfD0gfigoKGZ1c2UgJiBDSFZfRkdU X0VVX0RJU19TUzFfUjFfTUFTSykgCj4+ID4+IENIVl9GR1RfRVVfRElTX1NTMF9SMV9TSElGVCkg PDwgNCk7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCArwqDCoMKgIHNzZXUtPnN1YnNsaWNlX3RvdGFs ID0gY29tcHV0ZV9zdWJzbGljZV90b3RhbChzc2V1KTsKPj4gK8KgwqDCoCBzc2V1LT5ldV90b3Rh bCA9IGNvbXB1dGVfZXVfdG90YWwoc3NldSk7Cj4+ICsKPj4gwqDCoMKgwqDCoCAvKgo+PiDCoMKg wqDCoMKgwqAgKiBDSFYgZXhwZWN0ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1 dGlvbiBvZiBFVQo+PiDCoMKgwqDCoMKgwqAgKiBhY3Jvc3Mgc3Vic2xpY2VzLgo+PiBAQCAtMTk2 LDQxICsyNzIsNTMgQEAgc3RhdGljIHZvaWQgZ2VuOV9zc2V1X2luZm9faW5pdChzdHJ1Y3QgCj4+ IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0 IGludGVsX2RldmljZV9pbmZvICppbmZvID0gbWt3cml0ZV9kZXZpY2VfaW5mbyhkZXZfcHJpdik7 Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAmaW5mby0+c3NldTsK Pj4gLcKgwqDCoCBpbnQgc19tYXggPSAzLCBzc19tYXggPSA0LCBldV9tYXggPSA4Owo+PiDCoMKg wqDCoMKgIGludCBzLCBzczsKPj4gLcKgwqDCoCB1MzIgZnVzZTIsIGV1X2Rpc2FibGU7Cj4+IC3C oMKgwqAgdTggZXVfbWFzayA9IDB4ZmY7Cj4+ICvCoMKgwqAgdTMyIGZ1c2UyLCBldV9kaXNhYmxl LCBzdWJzbGljZV9tYXNrOwo+PiArwqDCoMKgIGNvbnN0IHU4IGV1X21hc2sgPSAweGZmOwo+PiDC oCDCoMKgwqDCoMKgIGZ1c2UyID0gSTkxNV9SRUFEKEdFTjhfRlVTRTIpOwo+PiDCoMKgwqDCoMKg IHNzZXUtPnNsaWNlX21hc2sgPSAoZnVzZTIgJiBHRU44X0YyX1NfRU5BX01BU0spID4+IAo+PiBH RU44X0YyX1NfRU5BX1NISUZUOwo+PiDCoCArwqDCoMKgIC8qIEJYVCBoYXMgYSBzaW5nbGUgc2xp Y2UgYW5kIGF0IG1vc3QgMyBzdWJzbGljZXMuICovCj4+ICvCoMKgwqAgc3NldS0+bWF4X3NsaWNl cyA9IElTX0dFTjlfTFAoZGV2X3ByaXYpID8gMSA6IDM7Cj4+ICvCoMKgwqAgc3NldS0+bWF4X3N1 YnNsaWNlcyA9IElTX0dFTjlfTFAoZGV2X3ByaXYpID8gMyA6IDQ7Cj4+ICvCoMKgwqAgc3NldS0+ bWF4X2V1c19wZXJfc3Vic2xpY2UgPSA4Owo+PiArCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKg wqDCoMKgICogVGhlIHN1YnNsaWNlIGRpc2FibGUgZmllbGQgaXMgZ2xvYmFsLCBpLmUuIGl0IGFw cGxpZXMKPj4gwqDCoMKgwqDCoMKgICogdG8gZWFjaCBvZiB0aGUgZW5hYmxlZCBzbGljZXMuCj4+ IMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrID0gKDEgPDwgc3Nf bWF4KSAtIDE7Cj4+IC3CoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFzayAmPSB+KChmdXNlMiAmIEdF TjlfRjJfU1NfRElTX01BU0spID4+Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBHRU45X0YyX1NTX0RJU19TSElGVCk7Cj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayA9ICgxIDw8 IHNzZXUtPm1heF9zdWJzbGljZXMpIC0gMTsKPj4gK8KgwqDCoCBzdWJzbGljZV9tYXNrICY9IH4o KGZ1c2UyICYgR0VOOV9GMl9TU19ESVNfTUFTSykgPj4KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgR0VOOV9GMl9TU19ESVNfU0hJRlQpOwo+PiDCoCDCoMKgwqDCoMKgIC8qCj4+IMKg wqDCoMKgwqDCoCAqIEl0ZXJhdGUgdGhyb3VnaCBlbmFibGVkIHNsaWNlcyBhbmQgc3Vic2xpY2Vz IHRvCj4+IMKgwqDCoMKgwqDCoCAqIGNvdW50IHRoZSB0b3RhbCBlbmFibGVkIEVVLgo+PiDCoMKg wqDCoMKgICovCj4+IC3CoMKgwqAgZm9yIChzID0gMDsgcyA8IHNfbWF4OyBzKyspIHsKPj4gK8Kg wqDCoCBmb3IgKHMgPSAwOyBzIDwgc3NldS0+bWF4X3NsaWNlczsgcysrKSB7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoIShzc2V1LT5zbGljZV9tYXNrICYgQklUKHMpKSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLyogc2tpcCBkaXNhYmxlZCBzbGljZSAqLwo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqAgK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1 YnNsaWNlX21hc2tbc10gPSBzdWJzbGljZV9tYXNrOwo+PiArCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBldV9kaXNhYmxlID0gSTkxNV9SRUFEKEdFTjlfRVVfRElTQUJMRShzKSk7Cj4+IC3CoMKgwqDC oMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGZvciAoc3MgPSAwOyBzcyA8IHNzZXUtPm1heF9zdWJzbGljZXM7IHNzKyspIHsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGV1X3Blcl9zczsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTggZXVfZGlzYWJsZWRfbWFzazsKPj4gwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKCEoc3NldS0+c3Vic2xpY2VfbWFzayAmIEJJVChzcykpKQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoIShzc2V1LT5zdWJzbGljZV9tYXNrW3NdICYgQklUKHNzKSkpCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogc2tpcCBkaXNhYmxlZCBzdWJzbGlj ZSAqLwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiDC oCAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldV9wZXJfc3MgPSBldV9tYXggLSBod2VpZ2h0OCgo ZXVfZGlzYWJsZSA+PiAoc3MqOCkpICYKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXVfbWFzayk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGV1X2Rpc2FibGVkX21hc2sgPSAoZXVfZGlzYWJsZSA+PiAoc3MqOCkpICYgZXVf bWFzazsgPiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X21hc2tbc3NldV9l dV9pZHgoc3NldSwgcywgc3MsIDApXSA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfmV1X2Rpc2FibGVkX21hc2s7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXVf cGVyX3NzID0gc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2UgLQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGh3ZWlnaHQ4KGV1X2Rpc2FibGVkX21hc2spOwo+PiDCoCDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICog UmVjb3JkIHdoaWNoIHN1YnNsaWNlKHMpIGhhcyhoYXZlKSA3IEVVcy4gd2UKPj4gQEAgLTIzOSwx MSArMzI3LDEyIEBAIHN0YXRpYyB2b2lkIGdlbjlfc3NldV9pbmZvX2luaXQoc3RydWN0IAo+PiBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqLwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZXVfcGVyX3NzID09IDcpCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfN2V1W3Nd IHw9IEJJVChzcyk7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90 YWwgKz0gZXVfcGVyX3NzOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIH0K Pj4gwqAgK8KgwqDCoCBzc2V1LT5zdWJzbGljZV90b3RhbCA9IGNvbXB1dGVfc3Vic2xpY2VfdG90 YWwoc3NldSk7Cj4+ICvCoMKgwqAgc3NldS0+ZXVfdG90YWwgPSBjb21wdXRlX2V1X3RvdGFsKHNz ZXUpOwo+PiArCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICogU0tMIGlzIGV4cGVj dGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmlidXRpb24KPj4gwqDCoMKgwqDCoMKg ICogb2YgRVUgYWNyb3NzIHN1YnNsaWNlcyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBhbnkgb25l Cj4+IEBAIC0yNjksOCArMzU4LDggQEAgc3RhdGljIHZvaWQgZ2VuOV9zc2V1X2luZm9faW5pdChz dHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDCoMKgwqDCoMKgIHNzZXUt Pmhhc19ldV9wZyA9IHNzZXUtPmV1X3Blcl9zdWJzbGljZSA+IDI7Cj4+IMKgIMKgwqDCoMKgwqAg aWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKSB7Cj4+IC0jZGVmaW5lIElTX1NTX0RJU0FCTEVEKHNz KcKgwqDCoCAoIShzc2V1LT5zdWJzbGljZV9tYXNrICYgQklUKHNzKSkpCj4+IC3CoMKgwqDCoMKg wqDCoCBpbmZvLT5oYXNfcG9vbGVkX2V1ID0gaHdlaWdodDgoc3NldS0+c3Vic2xpY2VfbWFzaykg PT0gMzsKPj4gKyNkZWZpbmUgSVNfU1NfRElTQUJMRUQoc3MpwqDCoMKgICghKHNzZXUtPnN1YnNs aWNlX21hc2tbMF0gJiBCSVQoc3MpKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGluZm8tPmhhc19wb29s ZWRfZXUgPSBod2VpZ2h0OChzc2V1LT5zdWJzbGljZV9tYXNrWzBdKSA9PSAzOwo+PiDCoCDCoMKg wqDCoMKgwqDCoMKgwqAgc3NldS0+bWluX2V1X2luX3Bvb2wgPSAwOwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGluZm8tPmhhc19wb29sZWRfZXUpIHsKPj4gQEAgLTI4OCwxOSArMzc3LDIyIEBA IHN0YXRpYyB2b2lkIGdlbjlfc3NldV9pbmZvX2luaXQoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPj4gwqAgc3RhdGljIHZvaWQgYnJvYWR3ZWxsX3NzZXVfaW5mb19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAqZGV2X3ByaXYpCj4+IMKgIHsKPj4gwqDCoMKg wqDCoCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSA9ICZta3dyaXRlX2RldmljZV9pbmZvKGRl dl9wcml2KS0+c3NldTsKPj4gLcKgwqDCoCBjb25zdCBpbnQgc19tYXggPSAzLCBzc19tYXggPSAz LCBldV9tYXggPSA4Owo+PiDCoMKgwqDCoMKgIGludCBzLCBzczsKPj4gLcKgwqDCoCB1MzIgZnVz ZTIsIGV1X2Rpc2FibGVbM107IC8qIHNfbWF4ICovCj4+ICvCoMKgwqAgdTMyIGZ1c2UyLCBzdWJz bGljZV9tYXNrLCBldV9kaXNhYmxlWzNdOyAvKiBzX21heCAqLwo+PiDCoCDCoMKgwqDCoMKgIGZ1 c2UyID0gSTkxNV9SRUFEKEdFTjhfRlVTRTIpOwo+PiDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21h c2sgPSAoZnVzZTIgJiBHRU44X0YyX1NfRU5BX01BU0spID4+IAo+PiBHRU44X0YyX1NfRU5BX1NI SUZUOwo+PiArwqDCoMKgIHNzZXUtPm1heF9zbGljZXMgPSAzOwo+PiArwqDCoMKgIHNzZXUtPm1h eF9zdWJzbGljZXMgPSAzOwo+PiArwqDCoMKgIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID0g ODsKPj4gKwo+PiDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoCAqIFRoZSBzdWJzbGljZSBk aXNhYmxlIGZpZWxkIGlzIGdsb2JhbCwgaS5lLiBpdCBhcHBsaWVzCj4+IMKgwqDCoMKgwqDCoCAq IHRvIGVhY2ggb2YgdGhlIGVuYWJsZWQgc2xpY2VzLgo+PiDCoMKgwqDCoMKgwqAgKi8KPj4gLcKg wqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrID0gR0VOTUFTSyhzc19tYXggLSAxLCAwKTsKPj4gLcKg wqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrICY9IH4oKGZ1c2UyICYgR0VOOF9GMl9TU19ESVNfTUFT SykgPj4KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfRjJfU1NfRElT X1NISUZUKTsKPj4gK8KgwqDCoCBzdWJzbGljZV9tYXNrID0gR0VOTUFTSyhzc2V1LT5tYXhfc3Vi c2xpY2VzIC0gMSwgMCk7Cj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayAmPSB+KChmdXNlMiAmIEdF TjhfRjJfU1NfRElTX01BU0spID4+Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdF TjhfRjJfU1NfRElTX1NISUZUKTsKPj4gwqAgwqDCoMKgwqDCoCBldV9kaXNhYmxlWzBdID0gSTkx NV9SRUFEKEdFTjhfRVVfRElTQUJMRTApICYgCj4+IEdFTjhfRVVfRElTMF9TMF9NQVNLOwo+PiDC oMKgwqDCoMKgIGV1X2Rpc2FibGVbMV0gPSAoSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTApID4+ IAo+PiBHRU44X0VVX0RJUzBfUzFfU0hJRlQpIHwKPj4gQEAgLTMxNCwzMCArNDA2LDQwIEBAIHN0 YXRpYyB2b2lkIGJyb2Fkd2VsbF9zc2V1X2luZm9faW5pdChzdHJ1Y3QgCj4+IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+PiDCoMKgwqDCoMKgwqAgKiBJdGVyYXRlIHRocm91Z2ggZW5hYmxl ZCBzbGljZXMgYW5kIHN1YnNsaWNlcyB0bwo+PiDCoMKgwqDCoMKgwqAgKiBjb3VudCB0aGUgdG90 YWwgZW5hYmxlZCBFVS4KPj4gwqDCoMKgwqDCoMKgICovCj4+IC3CoMKgwqAgZm9yIChzID0gMDsg cyA8IHNfbWF4OyBzKyspIHsKPj4gK8KgwqDCoCBmb3IgKHMgPSAwOyBzIDwgc3NldS0+bWF4X3Ns aWNlczsgcysrKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIShzc2V1LT5zbGljZV9tYXNr ICYgQklUKHMpKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogc2tpcCBkaXNhYmxl ZCBzbGljZSAqLwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqAg LcKgwqDCoMKgwqDCoMKgIGZvciAoc3MgPSAwOyBzcyA8IHNzX21heDsgc3MrKykgewo+PiArwqDC oMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFza1tzXSA9IHN1YnNsaWNlX21hc2s7Cj4+ICsK Pj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoc3MgPSAwOyBzcyA8IHNzZXUtPm1heF9zdWJzbGljZXM7 IHNzKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTggZXVfZGlzYWJsZWRfbWFzazsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIG5fZGlzYWJsZWQ7Cj4+IMKgIC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKHNzZXUtPnN1YnNsaWNlX21hc2sgJiBCSVQoc3MpKSkK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCEoc3NldS0+c3Vic2xpY2VfbWFza1tzc10g JiBCSVQoc3MpKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBza2lw IGRpc2FibGVkIHN1YnNsaWNlICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29udGludWU7Cj4+IMKgIC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5fZGlzYWJsZWQgPSBo d2VpZ2h0OChldV9kaXNhYmxlW3NdID4+IChzcyAqIGV1X21heCkpOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBldV9kaXNhYmxlZF9tYXNrID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBldV9kaXNhYmxlW3NdID4+IChzcyAqIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNl KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNrW3NzZXVfZXVf aWR4KHNzZXUsIHMsIHNzLCAwKV0gPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH5ldV9kaXNhYmxlZF9tYXNrOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5fZGlz YWJsZWQgPSBod2VpZ2h0OChldV9kaXNhYmxlZF9tYXNrKTsKPj4gwqAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFJlY29yZCB3 aGljaCBzdWJzbGljZXMgaGF2ZSA3IEVVcy4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqLwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZXVfbWF4IC0gbl9kaXNhYmxlZCA9 PSA3KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc3NldS0+bWF4X2V1c19wZXJfc3Vi c2xpY2UgLSBuX2Rpc2FibGVkID09IDcpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3NldS0+c3Vic2xpY2VfN2V1W3NdIHw9IDEgPDwgc3M7Cj4+IC0KPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gZXVfbWF4IC0gbl9kaXNhYmxlZDsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCB9Cj4+IMKgICvCoMKgwqAgc3NldS0+ c3Vic2xpY2VfdG90YWwgPSBjb21wdXRlX3N1YnNsaWNlX3RvdGFsKHNzZXUpOwo+PiArwqDCoMKg IHNzZXUtPmV1X3RvdGFsID0gY29tcHV0ZV9ldV90b3RhbChzc2V1KTsKPj4gKwo+PiDCoMKgwqDC oMKgIC8qCj4+IMKgwqDCoMKgwqDCoCAqIEJEVyBpcyBleHBlY3RlZCB0byBhbHdheXMgaGF2ZSBh IHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIEVVIAo+PiBhY3Jvc3MKPj4gwqDCoMKgwqDCoMKgICog c3Vic2xpY2VzIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGFueSBvbmUgRVUgaW4gYW55IG9uZSAK Pj4gc3Vic2xpY2UgbWF5Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kZXZpY2VfaW5mby5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9p bmZvLmgKPj4gaW5kZXggNDljYjI3YmQwNGMxLi42ZWI4YmNmNWEyMTMgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmgKPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaAo+PiBAQCAtMTEwLDEwICsxMTAsMTQg QEAgZW51bSBpbnRlbF9wbGF0Zm9ybSB7Cj4+IMKgwqDCoMKgwqAgZnVuYyhzdXBwb3J0c190dik7 IFwKPj4gwqDCoMKgwqDCoCBmdW5jKGhhc19pcGMpOwo+PiDCoCArI2RlZmluZSBHRU5fTUFYX1NM SUNFU8KgwqDCoMKgwqDCoMKgICg2KSAvKiBDTkwgdXBwZXIgYm91bmQgKi8KPj4gKyNkZWZpbmUg R0VOX01BWF9TVUJTTElDRVPCoMKgwqAgKDcpCj4+ICsKPj4gwqAgc3RydWN0IHNzZXVfZGV2X2lu Zm8gewo+PiDCoMKgwqDCoMKgIHU4IHNsaWNlX21hc2s7Cj4+IC3CoMKgwqAgdTggc3Vic2xpY2Vf bWFzazsKPj4gLcKgwqDCoCB1OCBldV90b3RhbDsKPj4gK8KgwqDCoCB1OCBzdWJzbGljZV9tYXNr W0dFTl9NQVhfU1VCU0xJQ0VTXTsKPj4gK8KgwqDCoCB1MTYgc3Vic2xpY2VfdG90YWw7Cj4+ICvC oMKgwqAgdTE2IGV1X3RvdGFsOwo+PiDCoMKgwqDCoMKgIHU4IGV1X3Blcl9zdWJzbGljZTsKPj4g wqDCoMKgwqDCoCB1OCBtaW5fZXVfaW5fcG9vbDsKPj4gwqDCoMKgwqDCoCAvKiBGb3IgZWFjaCBz bGljZSwgd2hpY2ggc3Vic2xpY2UocykgaGFzKGhhdmUpIDcgRVVzIAo+PiAoYml0ZmllbGQpPyAq Lwo+PiBAQCAtMTIxLDYgKzEyNSwxNyBAQCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyB7Cj4+IMKgwqDC oMKgwqAgdTggaGFzX3NsaWNlX3BnOjE7Cj4+IMKgwqDCoMKgwqAgdTggaGFzX3N1YnNsaWNlX3Bn OjE7Cj4+IMKgwqDCoMKgwqAgdTggaGFzX2V1X3BnOjE7Cj4+ICsKPj4gK8KgwqDCoCAvKiBUb3Bv bG9neSBmaWVsZHMgKi8KPj4gK8KgwqDCoCB1OCBtYXhfc2xpY2VzOwo+PiArwqDCoMKgIHU4IG1h eF9zdWJzbGljZXM7Cj4+ICvCoMKgwqAgdTggbWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4+ICsKPj4g K8KgwqDCoCAvKiBXZSBkb24ndCBoYXZlIG1vcmUgdGhhbiA4IGV1cyBwZXIgc3Vic2xpY2UgYXQg dGhlIG1vbWVudCBhbmQgCj4+IGFzIHdlCj4+ICvCoMKgwqDCoCAqIHN0b3JlIGV1cyBlbmFibGVk IHVzaW5nIGJpdHMsIG5vIG5lZWQgdG8gbXVsdGlwbHkgYnkgZXVzIHBlcgo+PiArwqDCoMKgwqAg KiBzdWJzbGljZS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgdTggZXVfbWFza1tHRU5fTUFY X1NMSUNFUyAqIEdFTl9NQVhfU1VCU0xJQ0VTXTsKPj4gwqAgfTsKPj4gwqAgwqAgc3RydWN0IGlu dGVsX2RldmljZV9pbmZvIHsKPj4gQEAgLTE2Nyw3ICsxODIsMjIgQEAgc3RydWN0IGludGVsX2Rl dmljZV9pbmZvIHsKPj4gwqAgwqAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3NldV9zdWJz bGljZV90b3RhbChjb25zdCBzdHJ1Y3QgCj4+IHNzZXVfZGV2X2luZm8gKnNzZXUpCj4+IMKgIHsK Pj4gLcKgwqDCoCByZXR1cm4gaHdlaWdodDgoc3NldS0+c2xpY2VfbWFzaykgKiBod2VpZ2h0OChz c2V1LT5zdWJzbGljZV9tYXNrKTsKPj4gK8KgwqDCoCByZXR1cm4gc3NldS0+c3Vic2xpY2VfdG90 YWw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgaW50IHNzZXVfZXVfaWR4KGNvbnN0IHN0 cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpbnQgc2xpY2UsIGludCBzdWJzbGljZSwgaW50IGV1X2dyb3VwKQo+Cj4gV2hhdCBp cyBldV9ncm91cCBmb3I/IFdpbGwgaXQgYmUgdXNlZCBhdCBzb21lIHBvaW50PwoKSW4gY2FzZSB3 ZSBldmVyIGhhdmUgbW9yZSB0aGFuIDggRVVzIHBlciBzdWJzbGljZS4KCj4KPj4gK3sKPj4gK8Kg wqDCoCBpbnQgc3Vic2xpY2Vfc3RyaWRlID0gQUxJR04oc3NldS0+bWF4X2V1c19wZXJfc3Vic2xp Y2UsIDgpIC8gODsKPgo+IFdoYXQgYXJlIHRoZXNlIGVpZ2h0cz8gc2l6ZW9mKGV1X21hc2tbMF0p ID8gSXMgdGhpcyB3aG9sZSBzdGF0ZW1lbnQgCj4gRElWX1JPVU5EX1VQIGFsc28/CgpTb3JyeSwg Zm9yZ290IHRvIHJlcGxhY2Ugc29tZSBvZiB0aGVtLiBEb25lLgoKPgo+PiArwqDCoMKgIGludCBz bGljZV9zdHJpZGUgPSBzc2V1LT5tYXhfc3Vic2xpY2VzICogc3Vic2xpY2Vfc3RyaWRlOwo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuIHNsaWNlICogc2xpY2Vfc3RyaWRlICsgc3Vic2xpY2UgKiBzdWJz bGljZV9zdHJpZGUgKyAKPj4gZXVfZ3JvdXA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUg aW50IHNzZXVfZXVfbWFzayhjb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgc2xpY2UsIGludCBzdWJzbGlj ZSwgaW50IGV1X2dyb3VwKQo+PiArewo+PiArwqDCoMKgIHJldHVybiBzc2V1LT5ldV9tYXNrW3Nz ZXVfZXVfaWR4KHNzZXUsIHNsaWNlLCBzdWJzbGljZSwgZXVfZ3JvdXApXTsKPj4gwqAgfQo+PiDC oCDCoCBjb25zdCBjaGFyICppbnRlbF9wbGF0Zm9ybV9uYW1lKGVudW0gaW50ZWxfcGxhdGZvcm0g cGxhdGZvcm0pOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPj4gaW5kZXggZmYyNWYy MDlkMGE1Li5hYzc4OTYwMzFiOGQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+ IEBAIC0yMDk4LDcgKzIwOTgsNyBAQCBtYWtlX3JwY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+PiDCoCDCoMKgwqDCoMKgIGlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+c3Nl dS5oYXNfc3Vic2xpY2VfcGcpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9S UENTX1NTX0NOVF9FTkFCTEU7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IGh3ZWlnaHQ4KElO VEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21hc2spIDw8Cj4+ICvCoMKgwqDCoMKg wqDCoCBycGNzIHw9IAo+PiBod2VpZ2h0OChJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJz bGljZV9tYXNrWzBdKSA8PAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU44X1JQQ1Nf U1NfQ05UX1NISUZUOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQQ1NfRU5B QkxFOwo+PiDCoMKgwqDCoMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmgKPj4gaW5kZXggYzVmZjIwM2U0MmQ2Li4yM2FlOWE5NTdmYWIgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPj4gQEAgLTkwLDcgKzkwLDcgQEAg aGFuZ2NoZWNrX2FjdGlvbl90b19zdHIoY29uc3QgZW51bSAKPj4gaW50ZWxfZW5naW5lX2hhbmdj aGVja19hY3Rpb24gYSkKPj4gwqAgwqAgI2RlZmluZSBpbnN0ZG9uZV9zdWJzbGljZV9tYXNrKGRl dl9wcml2X18pIFwKPj4gwqDCoMKgwqDCoCAoSU5URUxfR0VOKGRldl9wcml2X18pID09IDcgPyBc Cj4+IC3CoMKgwqDCoCAxIDogSU5URUxfSU5GTyhkZXZfcHJpdl9fKS0+c3NldS5zdWJzbGljZV9t YXNrKQo+PiArwqDCoMKgwqAgMSA6IElOVEVMX0lORk8oZGV2X3ByaXZfXyktPnNzZXUuc3Vic2xp Y2VfbWFza1swXSkKPj4gwqAgwqAgI2RlZmluZSBmb3JfZWFjaF9pbnN0ZG9uZV9zbGljZV9zdWJz bGljZShkZXZfcHJpdl9fLCBzbGljZV9fLCAKPj4gc3Vic2xpY2VfXykgXAo+PiDCoMKgwqDCoMKg IGZvciAoKHNsaWNlX18pID0gMCwgKHN1YnNsaWNlX18pID0gMDsgXAo+Pgo+Cj4gUmVnYXJkcywK Pgo+IFR2cnRrbwo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK