From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH 1/6] drm/i915: store all subslice masks Date: Thu, 11 Jan 2018 15:48:19 +0000 Message-ID: References: <20171218153520.14181-1-lionel.g.landwerlin@intel.com> <20171218153520.14181-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 77D5B6E4B9 for ; Thu, 11 Jan 2018 15:48:22 +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 T24gMTEvMDEvMTggMTE6MTIsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMTgvMTIvMjAx NyAxNTozNSwgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IFVwIHRvIG5vdywgc3Vic2xpY2Ug bWFzayB3YXMgYXNzdW1lZCB0byBiZSB1bmlmb3JtIGFjcm9zcyBzbGljZXMuIEJ1dAo+PiBzdGFy dGluZyB3aXRoIENhbm5vbmxha2UsIHNsaWNlcyBjYW4gYmUgYXN5bWV0cmljIChmb3IgZXhhbXBs ZSBzbGljZTAKPgo+IGFzeW1tZXRyaWMsIHRoYW5rcyBhdXRvIHNwZWxsIGNoZWNrZXIuIDopCgpE b25lLCB0aGFua3MuCgo+Cj4+IGhhcyBkaWZmZXJlbnQgbnVtYmVyIG9mIHN1YnNsaWNlcyBhcyBz bGljZTErKS4gVGhpcyBjaGFuZ2Ugc3RvcmVzIGFsbAo+PiBzdWJzbGljZXMgbWFza3MgZm9yIGFs bCBzbGljZXMgcmF0aGVyIHRoYW4gaGF2aW5nIGEgc2luZ2xlIG1hc2sgdGhhdAo+PiBhcHBsaWVz IHRvIGFsbCBzbGljZXMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IExpb25lbCBMYW5kd2VybGluIDxs aW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KPj4gLS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jwqDCoMKgwqDCoCB8wqAgMjQgKysrLS0KPj4gwqAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuY8KgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICstCj4+ IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmjCoMKgwqDCoMKgwqDCoMKgwqAgfMKg IDIzICsrKystCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmMg fCAxNjkgCj4+ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPj4gwqAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmPCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKy0KPj4gwqAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5owqAgfMKgwqAgMiArLQo+PiDC oCA2IGZpbGVzIGNoYW5nZWQsIDE2MSBpbnNlcnRpb25zKCspLCA2MSBkZWxldGlvbnMoLSkKPj4K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIAo+PiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4+IGluZGV4IDBkZGNlNzI1NTJi Zi4uMGM3ODkwYjY5NWM1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ PiBAQCAtNDI5Myw3ICs0MjkzLDcgQEAgc3RhdGljIHZvaWQgCj4+IGNoZXJyeXZpZXdfc3NldV9k ZXZpY2Vfc3RhdHVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBz c2V1LT5zbGljZV9tYXNrID0gQklUKDApOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xp Y2VfbWFzayB8PSBCSVQoc3MpOwo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VzX21h c2tbMF0gfD0gQklUKHNzKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGV1X2NudCA9ICgoc2lnMVtz c10gJiBDSFZfRVUwOF9QR19FTkFCTEUpID8gMCA6IDIpICsKPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAoKHNpZzFbc3NdICYgQ0hWX0VVMTlfUEdfRU5BQkxFKSA/IDAgOiAyKSArCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKChzaWcxW3NzXSAmIENIVl9FVTIxMF9QR19F TkFCTEUpID8gMCA6IDIpICsKPj4gQEAgLTQzNDAsNyArNDM0MCw3IEBAIHN0YXRpYyB2b2lkIGdl bjEwX3NzZXVfZGV2aWNlX3N0YXR1cyhzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqAgwqDCoMKg wqDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgfD0gQklUKHMpOwo+PiAtwqDCoMKgwqDCoMKg wqAgc3NldS0+c3Vic2xpY2VfbWFzayA9IGluZm8tPnNzZXUuc3Vic2xpY2VfbWFzazsKPj4gK8Kg wqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdID0gaW5mby0+c3NldS5zdWJzbGlj ZXNfbWFza1tzXTsKPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoc3MgPSAwOyBzcyA8IHNz X21heDsgc3MrKykgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQg ZXVfY250Owo+PiBAQCAtNDM5NSw4ICs0Mzk1LDggQEAgc3RhdGljIHZvaWQgZ2VuOV9zc2V1X2Rl dmljZV9zdGF0dXMoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgfD0gQklUKHMpOwo+PiDCoCDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKElTX0dFTjlfQkMoZGV2X3ByaXYpKQo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrID0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJzbGljZV9tYXNrOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZXNfbWFza1tzXSA9Cj4+ICsgSU5URUxf SU5GTyhkZXZfcHJpdiktPnNzZXUuc3Vic2xpY2VzX21hc2tbc107Cj4+IMKgIMKgwqDCoMKgwqDC oMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGV1X2NudDsKPj4gQEAgLTQ0MDYsNyArNDQwNiw3 IEBAIHN0YXRpYyB2b2lkIGdlbjlfc3NldV9kZXZpY2Vfc3RhdHVzKHN0cnVjdCAKPj4gZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvKiBza2lwIGRpc2FibGVkIHN1YnNsaWNlICovCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqAgLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrIHw9IEJJVChzcyk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VzX21hc2tbc10gfD0g QklUKHNzKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBldV9jbnQgPSAyICogaHdlaWdodDMyKGV1X3JlZ1syKnMgKyBzcy8y XSAmCj4+IEBAIC00NDI4LDkgKzQ0MjgsMTIgQEAgc3RhdGljIHZvaWQgCj4+IGJyb2Fkd2VsbF9z c2V1X2RldmljZV9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiDC oMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgPSBzbGljZV9pbmZvICYgR0VOOF9MU0xJQ0VTVEFU X01BU0s7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKHNzZXUtPnNsaWNlX21hc2spIHsKPj4gLcKgwqDC oMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgPSBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3Nl dS5zdWJzbGljZV9tYXNrOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfcGVyX3N1YnNs aWNlID0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJTlRFTF9JTkZPKGRl dl9wcml2KS0+c3NldS5ldV9wZXJfc3Vic2xpY2U7Cj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKHMg PSAwOyBzIDwgZmxzKHNzZXUtPnNsaWNlX21hc2spOyBzKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3NldS0+c3Vic2xpY2VzX21hc2tbc10gPQo+PiArIElOVEVMX0lORk8oZGV2X3By aXYpLT5zc2V1LnN1YnNsaWNlc19tYXNrW3NdOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90YWwgPSBzc2V1LT5ldV9wZXJfc3Vic2xpY2UgKgo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldV9zdWJzbGljZV90b3Rh bChzc2V1KTsKPj4gwqAgQEAgLTQ0NDksNiArNDQ1Miw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfcHJp bnRfc3NldV9pbmZvKHN0cnVjdCAKPj4gc2VxX2ZpbGUgKm0sIGJvb2wgaXNfYXZhaWxhYmxlX2lu Zm8sCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Cj4+IMKgwqDCoMKgwqAgY29uc3QgY2hhciAq dHlwZSA9IGlzX2F2YWlsYWJsZV9pbmZvID8gIkF2YWlsYWJsZSIgOiAiRW5hYmxlZCI7Cj4+ICvC oMKgwqAgaW50IHM7Cj4+IMKgIMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiwqAgJXMgU2xpY2Ug TWFzazogJTA0eFxuIiwgdHlwZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnNs aWNlX21hc2spOwo+PiBAQCAtNDQ1NiwxMCArNDQ2MCwxMCBAQCBzdGF0aWMgdm9pZCBpOTE1X3By aW50X3NzZXVfaW5mbyhzdHJ1Y3QgCj4+IHNlcV9maWxlICptLCBib29sIGlzX2F2YWlsYWJsZV9p bmZvLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdlaWdodDgoc3NldS0+c2xpY2VfbWFz aykpOwo+PiDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwgIsKgICVzIFN1YnNsaWNlIFRvdGFsOiAl dVxuIiwgdHlwZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXVfc3Vic2xpY2VfdG90 YWwoc3NldSkpOwo+PiAtwqDCoMKgIHNlcV9wcmludGYobSwgIsKgICVzIFN1YnNsaWNlIE1hc2s6 ICUwNHhcbiIsIHR5cGUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9t YXNrKTsKPj4gLcKgwqDCoCBzZXFfcHJpbnRmKG0sICLCoCAlcyBTdWJzbGljZSBQZXIgU2xpY2U6 ICV1XG4iLCB0eXBlLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdlaWdodDgoc3NldS0+c3Vi c2xpY2VfbWFzaykpOwo+PiArwqDCoMKgIGZvciAocyA9IDA7IHMgPCBmbHMoc3NldS0+c2xpY2Vf bWFzayk7IHMrKykgewo+Cj4gU2xpY2UgbWFzayBpcyBhbHdheXMgY29udGlndW91cyBiaXRzPwoK SSBoYXZlIGEgMng2IEJYVCBvbiBteSBkZXNrIHdoZXJlIHRoZSBzdWJzbGljZTAgYXBwZWFycyB0 byBiZSBmdXNlZC1vZmYuCkkgYXNzdW1lZCBzYW1lIGNvdWxkIGJlIHRydWUgZm9yIHNsaWNlcy4K ZmxzKCkgc2hvdWxkIG1ha2UgdXMgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgc2xpY2VzIChldmVu IHRoZSBmdXNlZCBvZmYgCm9uZXMpLgoKPgo+PiArwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50Ziht LCAiwqAgJXMgU2xpY2UlaSBTdWJzbGljZSBNYXNrOiAlMDR4XG4iLCB0eXBlLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzLCBzc2V1LT5zdWJzbGljZXNfbWFza1tzXSk7Cj4KPiBE b24ndCB3YW50IHRvIGtlZXAgcHJpbnRpbmcgdGhlIGNvdW50PyBMaWtlIG1heWJlICIgJXMgU2xp Y2UldSAldSAKPiBzdWJsaWNlcywgbWFzaz0lMDR4XG4iID8KClN1cmUsIGRvbmUuCgo+Cj4+ICvC oMKgwqAgfQo+PiDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwgIsKgICVzIEVVIFRvdGFsOiAldVxu IiwgdHlwZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X3RvdGFsKTsKPj4g wqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICLCoCAlcyBFVSBQZXIgU3Vic2xpY2U6ICV1XG4iLCB0 eXBlLAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAKPj4g Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+IGluZGV4IDcyYmVhMjgxZWRiNy4u OGI5OWU0MTVjMzQ1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPj4gQEAgLTQxNCw3 ICs0MTQsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2V0cGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKmRl diwgCj4+IHZvaWQgKmRhdGEsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PREVWOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgY2FzZSBJ OTE1X1BBUkFNX1NVQlNMSUNFX01BU0s6Cj4+IC3CoMKgwqDCoMKgwqDCoCB2YWx1ZSA9IElOVEVM X0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21hc2s7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2 YWx1ZSA9IElOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlc19tYXNrWzBdOwo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKCF2YWx1ZSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FTk9ERVY7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggCj4+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBpbmRleCAxYWJhNTY1N2Y1ZjAuLjgyZmM1OTA3OGM2YSAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+IEBAIC04MDIsOSArODAyLDEyIEBAIHN0 cnVjdCBpbnRlbF9jc3Igewo+PiDCoMKgwqDCoMKgIGZ1bmMoc3VwcG9ydHNfdHYpOyBcCj4+IMKg wqDCoMKgwqAgZnVuYyhoYXNfaXBjKTsKPj4gwqAgKyNkZWZpbmUgR0VOX01BWF9TTElDRVPCoMKg wqDCoMKgwqDCoCAoNikgLyogQ05MIHVwcGVyIGJvdW5kICovCj4+ICsjZGVmaW5lIEdFTl9NQVhf U1VCU0xJQ0VTwqDCoMKgICg3KQo+PiArCj4+IMKgIHN0cnVjdCBzc2V1X2Rldl9pbmZvIHsKPj4g wqDCoMKgwqDCoCB1OCBzbGljZV9tYXNrOwo+PiAtwqDCoMKgIHU4IHN1YnNsaWNlX21hc2s7Cj4+ ICvCoMKgwqAgdTggc3Vic2xpY2VzX21hc2tbR0VOX01BWF9TTElDRVNdOwo+Cj4gUGVyc29uYWxs eSBJIHdvdWxkIHByb2JhYmx5IGtlcHQgdGhlIHN1YnNsaWNlX21hc2sgbmFtZSBhbmQganVzdCAK PiB0dXJuZWQgaXQgaW50byBhbiBhcnJheSwgYnV0IHRoYXQgaXMgYmlrZS1zaGVkIHRlcnJpdG9y eS4KCkl0IHdhcyBlYXNpZXIgdG8gc3BvdCBhbGwgdGhlIHBsYWNlcyB0byBtb2RpZnkuIFdpbGwg Z28gYmFjay4KCj4KPj4gwqDCoMKgwqDCoCB1OCBldV90b3RhbDsKPj4gwqDCoMKgwqDCoCB1OCBl dV9wZXJfc3Vic2xpY2U7Cj4+IMKgwqDCoMKgwqAgdTggbWluX2V1X2luX3Bvb2w7Cj4+IEBAIC04 MTMsMTEgKzgxNiwyNyBAQCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyB7Cj4+IMKgwqDCoMKgwqAgdTgg aGFzX3NsaWNlX3BnOjE7Cj4+IMKgwqDCoMKgwqAgdTggaGFzX3N1YnNsaWNlX3BnOjE7Cj4+IMKg wqDCoMKgwqAgdTggaGFzX2V1X3BnOjE7Cj4+ICsKPj4gK8KgwqDCoCAvKiBUb3BvbG9neSBmaWVs ZHMgKi8KPj4gK8KgwqDCoCB1OCBtYXhfc2xpY2VzOwo+PiArwqDCoMKgIHU4IG1heF9zdWJzbGlj ZXM7Cj4+ICvCoMKgwqAgdTggbWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4+ICsKPj4gK8KgwqDCoCAv KiBXZSBkb24ndCBoYXZlIG1vcmUgdGhhbiA4IGV1cyBwZXIgc3Vic2xpY2UgYXQgdGhlIG1vbWVu dCBhbmQgCj4+IGFzIHdlCj4+ICvCoMKgwqDCoCAqIHN0b3JlIGV1cyBlbmFibGVkIHVzaW5nIGJp dHMsIG5vIG5lZWQgdG8gbXVsdGlwbHkgYnkgZXVzIHBlcgo+PiArwqDCoMKgwqAgKiBzdWJzbGlj ZS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgdTggZXVfbWFza1tHRU5fTUFYX1NMSUNFUyAq IEdFTl9NQVhfU1VCU0xJQ0VTXTsKPj4gwqAgfTsKPj4gwqAgwqAgc3RhdGljIGlubGluZSB1bnNp Z25lZCBpbnQgc3NldV9zdWJzbGljZV90b3RhbChjb25zdCBzdHJ1Y3QgCj4+IHNzZXVfZGV2X2lu Zm8gKnNzZXUpCj4+IMKgIHsKPj4gLcKgwqDCoCByZXR1cm4gaHdlaWdodDgoc3NldS0+c2xpY2Vf bWFzaykgKiBod2VpZ2h0OChzc2V1LT5zdWJzbGljZV9tYXNrKTsKPj4gK8KgwqDCoCB1bnNpZ25l ZCBzLCB0b3RhbCA9IDA7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKHMgPSAwOyBzIDwgQVJSQVlfU0la RShzc2V1LT5zdWJzbGljZXNfbWFzayk7IHMrKykKPj4gK8KgwqDCoMKgwqDCoMKgIHRvdGFsICs9 IGh3ZWlnaHQ4KHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdKTsKPj4gKwo+PiArwqDCoMKgIHJldHVy biB0b3RhbDsKPgo+IFRoZSBmdW5jdGlvbiBpcyBiaWdnZXIgbm93IHNvIG1heWJlIGl0IG5lZWRz IHN0b3BzIGJlaW5nIGlubGluZSwgYnV0IAo+IGVpdGhlciBtb3ZlZCB0byB0aGUgLmMgZmlsZSwg b3IgZXZlbiB0aGUgdG90YWwgc3RvcmVkIGluIHN0cnVjdCAKPiBzc2V1X2Rldl9pbmZvLCBhbmQg dGhlbiB0aGlzIGJlY29tZXMganVzdCBhIGdldHRlcj8KCkxldCdzIGdvIHdpdGggYSBzdWJzbGlj ZV90b3RhbCBmaWVsZC4KCj4KPj4gwqAgfQo+PiDCoCDCoCAvKiBLZWVwIGluIGdlbiBiYXNlZCBv cmRlciwgYW5kIGNocm9ub2xvZ2ljYWwgb3JkZXIgd2l0aGluIGEgZ2VuICovCj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5jIAo+PiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmMKPj4gaW5kZXggZjQ3OGJlM2FlMGJh Li42YTNjNDA0MzllODMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RldmljZV9pbmZvLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNl X2luZm8uYwo+PiBAQCAtODIsMjIgKzgyLDc0IEBAIHZvaWQgaW50ZWxfZGV2aWNlX2luZm9fZHVt cChzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDCoCAjdW5kZWYgUFJJ TlRfRkxBRwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgdTggY29tcHV0ZV9ldV90b3RhbChjb25zdCBz dHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSkKPj4gK3sKPj4gK8KgwqDCoCB1OCBpLCB0b3RhbCA9 IDA7Cj4KPiBzc2V1X3N1YnNsaWNlX3RvdGFsIHJldHVybnMgYW4gdW5zaW5nZWQgaW50LCB3aGls ZSB0aGlzIGlzIHU4LCAKPiBzdWdnZXN0aW5nIHRoZXJlIGNhbiBiZSBtb3JlIHN1YmxpY2VzIGFu ZCBldXMuIDspIEpva2VzIGFzaWRlLCBJJ2QgCj4gcHJvYmFibHkgbWFrZSB0aGVtIGNvbnNpc3Rl bnQuIFRoZSBpbmRleCB2YXJpYWJsZSBpcyBwcm9iYWJseSBiZXN0IGFzIAo+IHVuc2lnbmVkIGlu dCwgYnV0IHRoZSB0b3RhbCBhbmQgcmV0dXJuIGNhbiBiZSB1OCBpZiBiaWcgZW5vdWdoIGZvciAK PiB0b3RhbCBldXM/IEVpdGhlciB3YXkgYmVzdCBpdCBtYXRjaGVzIHRoZSB0eXBlcyBpbiB0aGUg c3RydWN0IHRoZXkgZ2V0IAo+IGFzc2lnbmVkIHRvLgoKWW91J3JlIHJpZ2h0IQp1MTYgc2hvdWxk IGJlIGZpbmUgdGhvdWdoLgoKPgo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoc3NldS0+ZXVfbWFzayk7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIHRvdGFsICs9IGh3 ZWlnaHQ4KHNzZXUtPmV1X21hc2tbaV0pOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHRvdGFsOwo+ PiArfQo+PiArCj4+IMKgIHN0YXRpYyB2b2lkIGdlbjEwX3NzZXVfaW5mb19pbml0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBz c2V1X2Rldl9pbmZvICpzc2V1ID0gJm1rd3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpLT5zc2V1 Owo+PiDCoMKgwqDCoMKgIGNvbnN0IHUzMiBmdXNlMiA9IEk5MTVfUkVBRChHRU44X0ZVU0UyKTsK Pj4gK8KgwqDCoCBpbnQgcywgc3MsIGV1X21hc2sgPSAweGZmOwo+Cj4gY29uc3QgZXVfbWFzayA/ CgpEb25lLgoKPgo+PiArwqDCoMKgIHUzMiBzdWJzbGljZV9tYXNrLCBldV9lbjsKPj4gwqAgwqDC oMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrID0gKGZ1c2UyICYgR0VOMTBfRjJfU19FTkFfTUFTSykg Pj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU4xMF9GMl9TX0VOQV9T SElGVDsKPj4gLcKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrID0gKDEgPDwgNCkgLSAxOwo+PiAt wqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgJj0gfigoZnVzZTIgJiBHRU4xMF9GMl9TU19ESVNf TUFTSykgPj4KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjEwX0YyX1NT X0RJU19TSElGVCk7Cj4+ICvCoMKgwqAgc3NldS0+bWF4X3NsaWNlcyA9IDY7Cj4+ICvCoMKgwqAg c3NldS0+bWF4X3N1YnNsaWNlcyA9IDQ7Cj4+ICvCoMKgwqAgc3NldS0+bWF4X2V1c19wZXJfc3Vi c2xpY2UgPSA4Owo+PiArCj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayA9ICgxIDw8IDQpIC0gMTsK Pj4gK8KgwqDCoCBzdWJzbGljZV9tYXNrICY9IH4oKGZ1c2UyICYgR0VOMTBfRjJfU1NfRElTX01B U0spID4+Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjEwX0YyX1NTX0RJU19T SElGVCk7Cj4+ICsKPj4gK8KgwqDCoCAvKiBTbGljZTAgY2FuIGhhdmUgdXAgdG8gMyBzdWJzbGlj ZXMsIGJ1dCB0aGVyZSBhcmUgb25seSAyIGluCj4+ICvCoMKgwqDCoCAqIHNsaWNlMS8yLgo+PiAr wqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBzc2V1LT5zdWJzbGljZXNfbWFza1swXSA9IHN1YnNsaWNl X21hc2s7Cj4+ICvCoMKgwqAgZm9yIChzID0gMTsgcyA8IHNzZXUtPm1heF9zbGljZXM7IHMrKykK Pj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdID0gc3Vic2xpY2VfbWFz ayAmIDB4MzsKPj4gKwo+PiArwqDCoMKgIC8qIFNsaWNlMCAqLwo+PiArwqDCoMKgIGV1X2VuID0g fkk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUwKTsKPj4gK8KgwqDCoCBmb3IgKHNzID0gMDsgc3Mg PCBzc2V1LT5tYXhfc3Vic2xpY2VzOyBzcysrKQo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVf bWFza1tzc13CoMKgwqDCoCA9IChldV9lbiA+PiAoOCAqIHNzKSkgJiBldV9tYXNrOwo+PiArwqDC oMKgIC8qIFNsaWNlMSAqLwo+PiArwqDCoMKgIHNzZXUtPmV1X21hc2tbc3NldS0+bWF4X3N1YnNs aWNlc13CoMKgwqDCoMKgwqDCoMKgID0gKGV1X2VuID4+IDI0KSAmIAo+PiBldV9tYXNrOwo+PiAr wqDCoMKgIGV1X2VuID0gfkk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUxKTsKPj4gK8KgwqDCoCBz c2V1LT5ldV9tYXNrW3NzZXUtPm1heF9zdWJzbGljZXMgKyAxXcKgwqDCoMKgID0gZXVfZW4gJiBl dV9tYXNrOwo+Cj4gSSBzdWdnZXN0IGEgaGVscGVyIHRvIGluZGV4IGludG8gc3NlLT5ldV9tYXNr LCBsaWtlIAo+IHNzZXUtPmV1X21hc2tbX2V1X21hc2tfaWR4KHNsaWNlLCBzdWJzbGljZSldIG9y IHNvbWV0aGluZywgc28gaXQgaXMgCj4gbW9yZSByZWFkYWJsZSB3aGF0IGlzIGhhcHBlbmluZyBo ZXJlLiBPciBldmVuOgo+Cj4gwqBfZXVfbWFzayhzc2V1LCBzbGljZSwgc3Vic2xpY2UpID0gbWFz azsKPgo+IERvYWJsZT8gSSBhbSBub3QgMTAwJSBJIHBpY2tlZCB1cCBleGFjdGx5IG9uIHRoZSBs YXlvdXQgb2YgdGhlIGV1X21hc2sgCj4gYXJyYXkuLiBlYWNoIGVsZW1lbnQgaXMgb25lIHN1YnNs aWNlPyBDb25zZWN1dGl2ZSBmb3Igc2xpY2UwLCAKPiBzdWJzbGljZTAuLk4sIHNsaWNlMS4uLiBz bGljZU4gPwoKVW5mb3J0dW5hdGVseSB0aGF0J3Mgbm90IHBvc3NpYmxlIGJlY2F1c2Ugb2YgdGhl IGFzeW1tZXRyeSB0aGluZy4uLgoKPgo+PiArwqDCoMKgIC8qIFNsaWNlMiAqLwo+PiArwqDCoMKg IHNzZXUtPmV1X21hc2tbMiAqIHNzZXUtPm1heF9zdWJzbGljZXNdwqDCoMKgwqAgPSAoZXVfZW4g Pj4gOCkgJiAKPj4gZXVfbWFzazsKPj4gK8KgwqDCoCBzc2V1LT5ldV9tYXNrWzIgKiBzc2V1LT5t YXhfc3Vic2xpY2VzICsgMV0gPSAoZXVfZW4gPj4gMTYpICYgCj4+IGV1X21hc2s7Cj4+ICvCoMKg wqAgLyogU2xpY2UzICovCj4+ICvCoMKgwqAgc3NldS0+ZXVfbWFza1szICogc3NldS0+bWF4X3N1 YnNsaWNlc13CoMKgwqDCoCA9IChldV9lbiA+PiAyNCkgJiAKPj4gZXVfbWFzazsKPj4gK8KgwqDC oCBldV9lbiA9IH5JOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMik7Cj4+ICvCoMKgwqAgc3NldS0+ ZXVfbWFza1szICogc3NldS0+bWF4X3N1YnNsaWNlcyArIDFdID0gZXVfZW4gJiBldV9tYXNrOwo+ PiArwqDCoMKgIC8qIFNsaWNlNCAqLwo+PiArwqDCoMKgIHNzZXUtPmV1X21hc2tbNCAqIHNzZXUt Pm1heF9zdWJzbGljZXNdwqDCoMKgwqAgPSAoZXVfZW4gPj4gOCkgJiAKPj4gZXVfbWFzazsKPj4g K8KgwqDCoCBzc2V1LT5ldV9tYXNrWzQgKiBzc2V1LT5tYXhfc3Vic2xpY2VzICsgMV0gPSAoZXVf ZW4gPj4gMTYpICYgCj4+IGV1X21hc2s7Cj4+ICvCoMKgwqAgLyogU2xpY2U1ICovCj4+ICvCoMKg wqAgc3NldS0+ZXVfbWFza1s1ICogc3NldS0+bWF4X3N1YnNsaWNlc13CoMKgwqDCoCA9IChldV9l biA+PiAyNCkgJiAKPj4gZXVfbWFzazsKPj4gK8KgwqDCoCBldV9lbiA9IH5JOTE1X1JFQUQoR0VO MTBfRVVfRElTQUJMRTMpOwo+PiArwqDCoMKgIHNzZXUtPmV1X21hc2tbNSAqIHNzZXUtPm1heF9z dWJzbGljZXMgKyAxXSA9IGV1X2VuICYgZXVfbWFzazsKPj4gKwo+PiArwqDCoMKgIC8qIERvIGEg c2Vjb25kIHBhc3Mgd2hlcmUgd2UgbWFya2VkIHRoZSBzdWJzbGljZXMgZGlzYWJsZWQgaWYgYWxs Cj4+ICvCoMKgwqDCoCAqIHRoZWlyIGV1cyBhcmUgb2ZmLgo+PiArwqDCoMKgwqAgKi8KPj4gK8Kg wqDCoCBmb3IgKHMgPSAwOyBzIDwgc3NldS0+bWF4X3NsaWNlczsgcysrKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc2V1LT5tYXhfc3Vic2xpY2VzOyBzcysrKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzc2V1LT5ldV9tYXNrW3MgKiBzc2V1LT5tYXhf c3Vic2xpY2VzICsgc3NdID09IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3NldS0+c3Vic2xpY2VzX21hc2tbc10gJj0gfkJJVChzcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9 Cj4+ICvCoMKgwqAgfQo+PiDCoCAtwqDCoMKgIHNzZXUtPmV1X3RvdGFsID0gaHdlaWdodDMyKH5J OTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMCkpOwo+PiAtwqDCoMKgIHNzZXUtPmV1X3RvdGFsICs9 IGh3ZWlnaHQzMih+STkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTEpKTsKPj4gLcKgwqDCoCBzc2V1 LT5ldV90b3RhbCArPSBod2VpZ2h0MzIofkk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUyKSk7Cj4+ IC3CoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gaHdlaWdodDgofihJOTE1X1JFQUQoR0VOMTBfRVVf RElTQUJMRTMpICYKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg R0VOMTBfRVVfRElTX1NTX01BU0spKTsKPj4gK8KgwqDCoCBzc2V1LT5ldV90b3RhbCA9IGNvbXB1 dGVfZXVfdG90YWwoc3NldSk7Cj4+IMKgIMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICog Q05MIGlzIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmlidXRpb24KPj4g QEAgLTExOCwyNiArMTcwLDMwIEBAIHN0YXRpYyB2b2lkIGdlbjEwX3NzZXVfaW5mb19pbml0KHN0 cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgIHN0YXRpYyB2b2lkIGNo ZXJyeXZpZXdfc3NldV9pbmZvX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICpkZXZf cHJpdikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1ID0g Jm1rd3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpLT5zc2V1Owo+PiAtwqDCoMKgIHUzMiBmdXNl LCBldV9kaXM7Cj4+ICvCoMKgwqAgdTMyIGZ1c2U7Cj4+IMKgIMKgwqDCoMKgwqAgZnVzZSA9IEk5 MTVfUkVBRChDSFZfRlVTRV9HVCk7Cj4+IMKgIMKgwqDCoMKgwqAgc3NldS0+c2xpY2VfbWFzayA9 IEJJVCgwKTsKPj4gK8KgwqDCoCBzc2V1LT5tYXhfc2xpY2VzID0gMTsKPj4gK8KgwqDCoCBzc2V1 LT5tYXhfc3Vic2xpY2VzID0gMjsKPj4gK8KgwqDCoCBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGlj ZSA9IDg7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKCEoZnVzZSAmIENIVl9GR1RfRElTQUJMRV9TUzAp KSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrIHw9IEJJVCgwKTsKPj4g LcKgwqDCoMKgwqDCoMKgIGV1X2RpcyA9IGZ1c2UgJiAoQ0hWX0ZHVF9FVV9ESVNfU1MwX1IwX01B U0sgfAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0hWX0ZHVF9FVV9ESVNf U1MwX1IxX01BU0spOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gOCAtIGh3 ZWlnaHQzMihldV9kaXMpOwo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VzX21hc2tb MF0gfD0gQklUKDApOwo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfbWFza1swXSA9IChmdXNl ICYgQ0hWX0ZHVF9FVV9ESVNfU1MwX1IwX01BU0spID4+IAo+PiBDSFZfRkdUX0VVX0RJU19TUzBf UjBfU0hJRlQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNrWzBdIHw9ICgoZnVzZSAm IENIVl9GR1RfRVVfRElTX1NTMF9SMV9NQVNLKSA+PiAKPj4gQ0hWX0ZHVF9FVV9ESVNfU1MwX1Ix X1NISUZUKSA8PCA0Owo+Cj4gRG8geW91IG5lZWQgdG8gaW52ZXJ0IHRoZSBiaXRzIGhlcmU/CgpP aCBkZWFyLi4uIEluZGVlZCEKCj4KPj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlc19t YXNrWzBdID0gMTsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKCEoZnVzZSAm IENIVl9GR1RfRElTQUJMRV9TUzEpKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGlj ZV9tYXNrIHw9IEJJVCgxKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGV1X2RpcyA9IGZ1c2UgJiAoQ0hW X0ZHVF9FVV9ESVNfU1MxX1IwX01BU0sgfAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQ0hWX0ZHVF9FVV9ESVNfU1MxX1IxX01BU0spOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3Nl dS0+ZXVfdG90YWwgKz0gOCAtIGh3ZWlnaHQzMihldV9kaXMpOwo+PiArwqDCoMKgwqDCoMKgwqAg c3NldS0+c3Vic2xpY2VzX21hc2tbMF0gfD0gQklUKDEpOwo+PiArwqDCoMKgwqDCoMKgwqAgc3Nl dS0+ZXVfbWFza1sxXSA9IChmdXNlICYgQ0hWX0ZHVF9FVV9ESVNfU1MxX1IwX01BU0spID4+IAo+ PiBDSFZfRkdUX0VVX0RJU19TUzBfUjBfU0hJRlQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5l dV9tYXNrWzJdIHw9ICgoZnVzZSAmIENIVl9GR1RfRVVfRElTX1NTMV9SMV9NQVNLKSA+PiAKPj4g Q0hWX0ZHVF9FVV9ESVNfU1MwX1IxX1NISUZUKSA8PCA0Owo+Cj4gV2h5IGV1X21hc2sgaW5kaWNl cyAxIGFuZCAyIGhlcmUsIHdoaWxlIGZvciBzdWJzbGljZSAwIHlvdSBtZXJnZWQgdGhlbSAKPiBp bnRvIGluZGV4IDA/CgpBZ2FpbiwgeW91J3JlIHJpZ2h0LgpUaGFua3MhCgo+Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoCArwqDCoMKgIHNzZXUtPmV1X3RvdGFsID0gY29tcHV0ZV9ldV90b3RhbChzc2V1 KTsKPj4gKwo+PiDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoCAqIENIViBleHBlY3RlZCB0 byBhbHdheXMgaGF2ZSBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIEVVCj4+IMKgwqDCoMKgwqDC oCAqIGFjcm9zcyBzdWJzbGljZXMuCj4+IEBAIC0xNTksNDEgKzIxNSw1MCBAQCBzdGF0aWMgdm9p ZCBnZW45X3NzZXVfaW5mb19pbml0KHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmluZm8g PSBta3dyaXRlX2RldmljZV9pbmZvKGRldl9wcml2KTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qgc3Nl dV9kZXZfaW5mbyAqc3NldSA9ICZpbmZvLT5zc2V1Owo+PiAtwqDCoMKgIGludCBzX21heCA9IDMs IHNzX21heCA9IDQsIGV1X21heCA9IDg7Cj4+IMKgwqDCoMKgwqAgaW50IHMsIHNzOwo+PiAtwqDC oMKgIHUzMiBmdXNlMiwgZXVfZGlzYWJsZTsKPj4gK8KgwqDCoCB1MzIgZnVzZTIsIGV1X2Rpc2Fi bGUsIHN1YnNsaWNlX21hc2s7Cj4+IMKgwqDCoMKgwqAgdTggZXVfbWFzayA9IDB4ZmY7Cj4+IMKg IMKgwqDCoMKgwqAgZnVzZTIgPSBJOTE1X1JFQUQoR0VOOF9GVVNFMik7Cj4+IMKgwqDCoMKgwqAg c3NldS0+c2xpY2VfbWFzayA9IChmdXNlMiAmIEdFTjhfRjJfU19FTkFfTUFTSykgPj4gCj4+IEdF TjhfRjJfU19FTkFfU0hJRlQ7Cj4+IMKgICvCoMKgwqAgLyogQlhUIGhhcyBhIHNpbmdsZSBzbGlj ZSBhbmQgYXQgbW9zdCAzIHN1YnNsaWNlcy4gKi8KPj4gK8KgwqDCoCBzc2V1LT5tYXhfc2xpY2Vz ID0gSVNfR0VOOV9MUChkZXZfcHJpdikgPyAxIDogMzsKPj4gK8KgwqDCoCBzc2V1LT5tYXhfc3Vi c2xpY2VzID0gSVNfR0VOOV9MUChkZXZfcHJpdikgPyAzIDogNDsKPj4gK8KgwqDCoCBzc2V1LT5t YXhfZXVzX3Blcl9zdWJzbGljZSA9IDg7Cj4+ICsKPj4gwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDC oMKgwqAgKiBUaGUgc3Vic2xpY2UgZGlzYWJsZSBmaWVsZCBpcyBnbG9iYWwsIGkuZS4gaXQgYXBw bGllcwo+PiDCoMKgwqDCoMKgwqAgKiB0byBlYWNoIG9mIHRoZSBlbmFibGVkIHNsaWNlcy4KPj4g wqDCoMKgwqDCoCAqLwo+PiAtwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgPSAoMSA8PCBzc19t YXgpIC0gMTsKPj4gLcKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrICY9IH4oKGZ1c2UyICYgR0VO OV9GMl9TU19ESVNfTUFTSykgPj4KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEdFTjlfRjJfU1NfRElTX1NISUZUKTsKPj4gK8KgwqDCoCBzdWJzbGljZV9tYXNrID0gKDEgPDwg c3NldS0+bWF4X3N1YnNsaWNlcykgLSAxOwo+PiArwqDCoMKgIHN1YnNsaWNlX21hc2sgJj0gfigo ZnVzZTIgJiBHRU45X0YyX1NTX0RJU19NQVNLKSA+Pgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBHRU45X0YyX1NTX0RJU19TSElGVCk7Cj4+IMKgIMKgwqDCoMKgwqAgLyoKPj4gwqDC oMKgwqDCoMKgICogSXRlcmF0ZSB0aHJvdWdoIGVuYWJsZWQgc2xpY2VzIGFuZCBzdWJzbGljZXMg dG8KPj4gwqDCoMKgwqDCoMKgICogY291bnQgdGhlIHRvdGFsIGVuYWJsZWQgRVUuCj4+IMKgwqDC oMKgwqAgKi8KPj4gLcKgwqDCoCBmb3IgKHMgPSAwOyBzIDwgc19tYXg7IHMrKykgewo+PiArwqDC oMKgIGZvciAocyA9IDA7IHMgPCBzc2V1LT5tYXhfc2xpY2VzOyBzKyspIHsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGlmICghKHNzZXUtPnNsaWNlX21hc2sgJiBCSVQocykpKQo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBza2lwIGRpc2FibGVkIHNsaWNlICovCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiDCoCArwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vi c2xpY2VzX21hc2tbc10gPSBzdWJzbGljZV9tYXNrOwo+PiArCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBldV9kaXNhYmxlID0gSTkxNV9SRUFEKEdFTjlfRVVfRElTQUJMRShzKSk7Cj4+IC3CoMKgwqDC oMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGZvciAoc3MgPSAwOyBzcyA8IHNzZXUtPm1heF9zdWJzbGljZXM7IHNzKyspIHsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGV1X3Blcl9zczsKPj4gwqAgLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKCEoc3NldS0+c3Vic2xpY2VfbWFzayAmIEJJVChzcykpKQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIShzc2V1LT5zdWJzbGljZXNfbWFza1tzXSAmIEJJVChz cykpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHNraXAgZGlzYWJs ZWQgc3Vic2xpY2UgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250 aW51ZTsKPj4gwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXVfcGVyX3NzID0gZXVfbWF4IC0g aHdlaWdodDgoKGV1X2Rpc2FibGUgPj4gKHNzKjgpKSAmCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV1X21hc2spOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNrW3NzICsgcyAqIHNzZXUtPm1heF9zdWJz bGljZXNdID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB+KChldV9kaXNhYmxl ID4+IChzcyo4KSkgJiBldV9tYXNrKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl dV9wZXJfc3MgPSBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSAtCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaHdlaWdodDgoKGV1X2Rpc2FibGUgPj4gKHNzKjgpKSAmIGV1X21h c2spOwo+Cj4gU3RvcmUgImV1X2Rpc2FibGUgPj4gKHNzKjgpKSAmIGV1X21hc2siIGluIGEgbG9j YWwgZm9yIHJlYWRhYmlsaXR5IAo+IHNpbmNlIGl0IGlzIGNhbGN1bGF0ZWQgdHdpY2U/CgpEb25l LgoKPgo+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICogUmVjb3JkIHdoaWNoIHN1YnNsaWNlKHMpIGhhcyhoYXZlKSA3IEVV cy4gd2UKPj4gQEAgLTIwMiwxMSArMjY3LDExIEBAIHN0YXRpYyB2b2lkIGdlbjlfc3NldV9pbmZv X2luaXQoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo ZXVfcGVyX3NzID09IDcpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Nl dS0+c3Vic2xpY2VfN2V1W3NdIHw9IEJJVChzcyk7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gZXVfcGVyX3NzOwo+Cj4gWW91IGNvdWxkIHRoZW9yZXRp Y2FsbHkga2VlcCB0aGlzIHJ1bm5pbmcgdG90YWwgYW5kIHRoZW4gYXQgdGhlIGVuZCAKPiBjb21w YXJlIGFnYWluc3QgY29tcHV0ZV9ldV90b3RhbCB1bmRlciBhIEdFTV9CVUdfT04sIGp1c3QgdG8g Y2hlY2sgCj4gZXZlcnl0aW5nIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuCj4KPj4gwqDCoMKgwqDC oMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCB9Cj4+IMKgICvCoMKgwqAgc3NldS0+ZXVfdG90YWwg PSBjb21wdXRlX2V1X3RvdGFsKHNzZXUpOwo+PiArCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKg wqDCoMKgICogU0tMIGlzIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmli dXRpb24KPj4gwqDCoMKgwqDCoMKgICogb2YgRVUgYWNyb3NzIHN1YnNsaWNlcyB3aXRoIHRoZSBl eGNlcHRpb24gdGhhdCBhbnkgb25lCj4+IEBAIC0yMzIsOCArMjk3LDggQEAgc3RhdGljIHZvaWQg Z2VuOV9zc2V1X2luZm9faW5pdChzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+PiDCoMKgwqDCoMKgIHNzZXUtPmhhc19ldV9wZyA9IHNzZXUtPmV1X3Blcl9zdWJzbGljZSA+ IDI7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKSB7Cj4+IC0jZGVm aW5lIElTX1NTX0RJU0FCTEVEKHNzKcKgwqDCoCAoIShzc2V1LT5zdWJzbGljZV9tYXNrICYgQklU KHNzKSkpCj4+IC3CoMKgwqDCoMKgwqDCoCBpbmZvLT5oYXNfcG9vbGVkX2V1ID0gaHdlaWdodDgo c3NldS0+c3Vic2xpY2VfbWFzaykgPT0gMzsKPj4gKyNkZWZpbmUgSVNfU1NfRElTQUJMRUQoc3Mp wqDCoMKgICghKHNzZXUtPnN1YnNsaWNlc19tYXNrWzBdICYgQklUKHNzKSkpCj4+ICvCoMKgwqDC oMKgwqDCoCBpbmZvLT5oYXNfcG9vbGVkX2V1ID0gaHdlaWdodDgoc3NldS0+c3Vic2xpY2VzX21h c2tbMF0pID09IDM7Cj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5taW5fZXVfaW5fcG9v bCA9IDA7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaW5mby0+aGFzX3Bvb2xlZF9ldSkgewo+ PiBAQCAtMjUxLDE5ICszMTYsMjIgQEAgc3RhdGljIHZvaWQgZ2VuOV9zc2V1X2luZm9faW5pdChz dHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDCoCBzdGF0aWMgdm9pZCBi cm9hZHdlbGxfc3NldV9pbmZvX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICpkZXZf cHJpdikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1ID0g Jm1rd3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpLT5zc2V1Owo+PiAtwqDCoMKgIGNvbnN0IGlu dCBzX21heCA9IDMsIHNzX21heCA9IDMsIGV1X21heCA9IDg7Cj4+IMKgwqDCoMKgwqAgaW50IHMs IHNzOwo+PiAtwqDCoMKgIHUzMiBmdXNlMiwgZXVfZGlzYWJsZVszXTsgLyogc19tYXggKi8KPj4g K8KgwqDCoCB1MzIgZnVzZTIsIHN1YnNsaWNlX21hc2ssIGV1X2Rpc2FibGVbM107IC8qIHNfbWF4 ICovCj4+IMKgIMKgwqDCoMKgwqAgZnVzZTIgPSBJOTE1X1JFQUQoR0VOOF9GVVNFMik7Cj4+IMKg wqDCoMKgwqAgc3NldS0+c2xpY2VfbWFzayA9IChmdXNlMiAmIEdFTjhfRjJfU19FTkFfTUFTSykg Pj4gCj4+IEdFTjhfRjJfU19FTkFfU0hJRlQ7Cj4+ICvCoMKgwqAgc3NldS0+bWF4X3NsaWNlcyA9 IDM7Cj4+ICvCoMKgwqAgc3NldS0+bWF4X3N1YnNsaWNlcyA9IDM7Cj4+ICvCoMKgwqAgc3NldS0+ bWF4X2V1c19wZXJfc3Vic2xpY2UgPSA4Owo+PiArCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKg wqDCoMKgICogVGhlIHN1YnNsaWNlIGRpc2FibGUgZmllbGQgaXMgZ2xvYmFsLCBpLmUuIGl0IGFw cGxpZXMKPj4gwqDCoMKgwqDCoMKgICogdG8gZWFjaCBvZiB0aGUgZW5hYmxlZCBzbGljZXMuCj4+ IMKgwqDCoMKgwqDCoCAqLwo+PiAtwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgPSBHRU5NQVNL KHNzX21heCAtIDEsIDApOwo+PiAtwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgJj0gfigoZnVz ZTIgJiBHRU44X0YyX1NTX0RJU19NQVNLKSA+Pgo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgR0VOOF9GMl9TU19ESVNfU0hJRlQpOwo+PiArwqDCoMKgIHN1YnNsaWNlX21hc2sg PSBHRU5NQVNLKHNzZXUtPm1heF9zdWJzbGljZXMgLSAxLCAwKTsKPj4gK8KgwqDCoCBzdWJzbGlj ZV9tYXNrICY9IH4oKGZ1c2UyICYgR0VOOF9GMl9TU19ESVNfTUFTSykgPj4KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOOF9GMl9TU19ESVNfU0hJRlQpOwo+PiDCoCDCoMKgwqDC oMKgIGV1X2Rpc2FibGVbMF0gPSBJOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMCkgJiAKPj4gR0VO OF9FVV9ESVMwX1MwX01BU0s7Cj4+IMKgwqDCoMKgwqAgZXVfZGlzYWJsZVsxXSA9IChJOTE1X1JF QUQoR0VOOF9FVV9ESVNBQkxFMCkgPj4gCj4+IEdFTjhfRVVfRElTMF9TMV9TSElGVCkgfAo+PiBA QCAtMjc3LDMwICszNDUsMzYgQEAgc3RhdGljIHZvaWQgYnJvYWR3ZWxsX3NzZXVfaW5mb19pbml0 KHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgwqDCoMKgwqDCoCAq IEl0ZXJhdGUgdGhyb3VnaCBlbmFibGVkIHNsaWNlcyBhbmQgc3Vic2xpY2VzIHRvCj4+IMKgwqDC oMKgwqDCoCAqIGNvdW50IHRoZSB0b3RhbCBlbmFibGVkIEVVLgo+PiDCoMKgwqDCoMKgwqAgKi8K Pj4gLcKgwqDCoCBmb3IgKHMgPSAwOyBzIDwgc19tYXg7IHMrKykgewo+PiArwqDCoMKgIGZvciAo cyA9IDA7IHMgPCBzc2V1LT5tYXhfc2xpY2VzOyBzKyspIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKg IGlmICghKHNzZXUtPnNsaWNlX21hc2sgJiBCSVQocykpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKiBza2lwIGRpc2FibGVkIHNsaWNlICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNvbnRpbnVlOwo+PiDCoCAtwqDCoMKgwqDCoMKgwqAgZm9yIChzcyA9IDA7IHNzIDwg c3NfbWF4OyBzcysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZXNfbWFza1tz XSA9IHN1YnNsaWNlX21hc2s7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoc3MgPSAwOyBz cyA8IHNzZXUtPm1heF9zdWJzbGljZXM7IHNzKyspIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdTMyIG5fZGlzYWJsZWQ7Cj4+IMKgIC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgh KHNzZXUtPnN1YnNsaWNlX21hc2sgJiBCSVQoc3MpKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKCEoc3NldS0+c3Vic2xpY2VzX21hc2tbc3NdICYgQklUKHNzKSkpCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogc2tpcCBkaXNhYmxlZCBzdWJzbGljZSAqLwo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiDCoCAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBuX2Rpc2FibGVkID0gaHdlaWdodDgoZXVfZGlzYWJsZVtzXSA+ PiAoc3MgKiBldV9tYXgpKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfbWFz a1tzcyArIHMgKiBzc2V1LT5tYXhfc3Vic2xpY2VzXSA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfihldV9kaXNhYmxlW3NdID4+Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIChzcyAqIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlKSk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG5fZGlzYWJsZWQgPSBod2VpZ2h0OChldV9kaXNhYmxlW3NdID4+ Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo c3MgKiBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSkpOwo+Cj4gQXMgYWJvdmUgY291bGQgdXNl IGEgbG9jYWwgZm9yICJldV9kaXNhYmxlW3NdID4+IChzcyAqIAo+IHNzZXUtPm1heF9ldXNfcGVy X3N1YnNsaWNlKSIKCkRvbmUuCgo+Cj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBSZWNvcmQgd2hpY2ggc3Vic2xpY2Vz IGhhdmUgNyBFVXMuCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKGV1X21heCAtIG5fZGlzYWJsZWQgPT0gNykKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlIC0gbl9kaXNh YmxlZCA9PSA3KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1 YnNsaWNlXzdldVtzXSB8PSAxIDw8IHNzOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNzZXUtPmV1X3RvdGFsICs9IGV1X21heCAtIG5fZGlzYWJsZWQ7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCB9Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCArwqDCoMKgIHNzZXUtPmV1X3RvdGFsID0gY29t cHV0ZV9ldV90b3RhbChzc2V1KTsKPj4gKwo+PiDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDC oCAqIEJEVyBpcyBleHBlY3RlZCB0byBhbHdheXMgaGF2ZSBhIHVuaWZvcm0gZGlzdHJpYnV0aW9u IG9mIEVVIAo+PiBhY3Jvc3MKPj4gwqDCoMKgwqDCoMKgICogc3Vic2xpY2VzIHdpdGggdGhlIGV4 Y2VwdGlvbiB0aGF0IGFueSBvbmUgRVUgaW4gYW55IG9uZSAKPj4gc3Vic2xpY2UgbWF5Cj4+IEBA IC00MzcsNiArNTExLDcgQEAgdm9pZCBpbnRlbF9kZXZpY2VfaW5mb19ydW50aW1lX2luaXQoc3Ry dWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAgewo+PiDCoMKgwqDCoMKg IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbyA9IG1rd3JpdGVfZGV2aWNlX2luZm8oZGV2 X3ByaXYpOwo+PiDCoMKgwqDCoMKgIGVudW0gcGlwZSBwaXBlOwo+PiArwqDCoMKgIGludCBzOwo+ PiDCoCDCoMKgwqDCoMKgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+PiBAQCAtNTQ4LDkg KzYyMywxMSBAQCB2b2lkIGludGVsX2RldmljZV9pbmZvX3J1bnRpbWVfaW5pdChzdHJ1Y3QgCj4+ IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDCoMKgwqDCoMKgIERSTV9ERUJVR19EUklW RVIoInNsaWNlIHRvdGFsOiAldVxuIiwgCj4+IGh3ZWlnaHQ4KGluZm8tPnNzZXUuc2xpY2VfbWFz aykpOwo+PiDCoMKgwqDCoMKgIERSTV9ERUJVR19EUklWRVIoInN1YnNsaWNlIHRvdGFsOiAldVxu IiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1X3N1YnNsaWNlX3RvdGFsKCZp bmZvLT5zc2V1KSk7Cj4+IC3CoMKgwqAgRFJNX0RFQlVHX0RSSVZFUigic3Vic2xpY2UgbWFzayAl MDR4XG4iLCBpbmZvLT5zc2V1LnN1YnNsaWNlX21hc2spOwo+PiAtwqDCoMKgIERSTV9ERUJVR19E UklWRVIoInN1YnNsaWNlIHBlciBzbGljZTogJXVcbiIsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaHdlaWdodDgoaW5mby0+c3NldS5zdWJzbGljZV9tYXNrKSk7Cj4+ICvCoMKgwqAgZm9y IChzID0gMDsgcyA8IEFSUkFZX1NJWkUoaW5mby0+c3NldS5zdWJzbGljZXNfbWFzayk7IHMrKykg ewo+PiArwqDCoMKgwqDCoMKgwqAgRFJNX0RFQlVHX0RSSVZFUigic3Vic2xpY2UgbWFzayAlMDR4 XG4iLCAKPj4gaW5mby0+c3NldS5zdWJzbGljZXNfbWFza1tzXSk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBEUk1fREVCVUdfRFJJVkVSKCJzdWJzbGljZSBwZXIgc2xpY2U6ICV1XG4iLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdlaWdodDgoaW5mby0+c3NldS5zdWJzbGljZXNf bWFza1tzXSkpOwo+Cj4gUHV0IGEgc3Vic2xpY2UgaW5kZXggaW50byBtZXNzYWdlcz8KCkRvbmUu Cgo+Cj4+ICvCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIERSTV9ERUJVR19EUklWRVIoIkVVIHRvdGFs OiAldVxuIiwgaW5mby0+c3NldS5ldV90b3RhbCk7Cj4+IMKgwqDCoMKgwqAgRFJNX0RFQlVHX0RS SVZFUigiRVUgcGVyIHN1YnNsaWNlOiAldVxuIiwgCj4+IGluZm8tPnNzZXUuZXVfcGVyX3N1YnNs aWNlKTsKPj4gwqDCoMKgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCJoYXMgc2xpY2UgcG93ZXIgZ2F0 aW5nOiAlc1xuIiwKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IGluZGV4IDJlMzhm YmZkZjA4Zi4uNmU1NWI4NDJjMjFkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+ PiBAQCAtMjA3Miw3ICsyMDcyLDcgQEAgbWFrZV9ycGNzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPj4gwqAgwqDCoMKgwqDCoCBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPnNz ZXUuaGFzX3N1YnNsaWNlX3BnKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBycGNzIHw9IEdFTjhf UlBDU19TU19DTlRfRU5BQkxFOwo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBod2VpZ2h0OChJ TlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJzbGljZV9tYXNrKSA8PAo+PiArwqDCoMKgwqDC oMKgwqAgcnBjcyB8PSAKPj4gaHdlaWdodDgoSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuc3Vi c2xpY2VzX21hc2tbMF0pIDw8Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUlBD U19TU19DTlRfU0hJRlQ7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBycGNzIHw9IEdFTjhfUlBDU19F TkFCTEU7Cj4+IMKgwqDCoMKgwqAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuaAo+PiBpbmRleCBjNWZmMjAzZTQyZDYuLmE5NGJjMWI1YzUwMiAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+PiBAQCAtOTAsNyArOTAsNyBA QCBoYW5nY2hlY2tfYWN0aW9uX3RvX3N0cihjb25zdCBlbnVtIAo+PiBpbnRlbF9lbmdpbmVfaGFu Z2NoZWNrX2FjdGlvbiBhKQo+PiDCoCDCoCAjZGVmaW5lIGluc3Rkb25lX3N1YnNsaWNlX21hc2so ZGV2X3ByaXZfXykgXAo+PiDCoMKgwqDCoMKgIChJTlRFTF9HRU4oZGV2X3ByaXZfXykgPT0gNyA/ IFwKPj4gLcKgwqDCoMKgIDEgOiBJTlRFTF9JTkZPKGRldl9wcml2X18pLT5zc2V1LnN1YnNsaWNl X21hc2spCj4+ICvCoMKgwqDCoCAxIDogSU5URUxfSU5GTyhkZXZfcHJpdl9fKS0+c3NldS5zdWJz bGljZXNfbWFza1swXSkKPj4gwqAgwqAgI2RlZmluZSBmb3JfZWFjaF9pbnN0ZG9uZV9zbGljZV9z dWJzbGljZShkZXZfcHJpdl9fLCBzbGljZV9fLCAKPj4gc3Vic2xpY2VfXykgXAo+PiDCoMKgwqDC oMKgIGZvciAoKHNsaWNlX18pID0gMCwgKHN1YnNsaWNlX18pID0gMDsgXAo+Pgo+Cj4gUmVnYXJk cywKPgo+IFR2cnRrbwo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK