From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v7] drm/i915: Enable second dbuf slice for ICL and TGL Date: Mon, 18 Nov 2019 17:27:12 +0200 Message-ID: <20191118152712.GS1208@intel.com> References: <20191114122449.26409-1-stanislav.lisovskiy@intel.com> <20191115201944.GO1208@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id D2E3789951 for ; Mon, 18 Nov 2019 15:27:18 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Lisovskiy, Stanislav" Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMDk6MTk6MThBTSArMDAwMCwgTGlzb3Zza2l5LCBTdGFu aXNsYXYgd3JvdGU6Cj4gT24gRnJpLCAyMDE5LTExLTE1IGF0IDIyOjE5ICswMjAwLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBUaHUsIE5vdiAxNCwgMjAxOSBhdCAwMjoyNDo0OVBNICsw MjAwLCBTdGFuaXNsYXYgTGlzb3Zza2l5IHdyb3RlOgo+ID4gPiBBbHNvIGltcGxlbWVudGVkIGFs Z29yaXRobSBmb3IgY2hvb3NpbmcgREJ1ZiBzbGljZSBjb25maWd1cmF0aW9uCj4gPiA+IGJhc2Vk IG9uIGFjdGl2ZSBwaXBlcywgcGlwZSByYXRpbyBhcyBzdGF0ZWQgaW4gQlNwZWMgMTI3MTYuCj4g PiA+IAo+ID4gPiBOb3cgcGlwZSBhbGxvY2F0aW9uIHN0aWxsIHN0YXlzIHByb3BvcnRpb25hbCB0 byBwaXBlIHdpZHRoIGFzCj4gPiA+IGJlZm9yZSwKPiA+ID4gaG93ZXZlciB3aXRoaW4gYWxsb3dl ZCBEQnVmIHNsaWNlIGZvciB0aGlzIHBhcnRpY3VsYXIKPiA+ID4gY29uZmlndXJhdGlvbi4KPiA+ ID4gCj4gPiA+IHYyOiBSZW1vdmUgdW5uZWVkZWQgY2hlY2sgZnJvbSBjb21taXQgYXMgZGRiIGVu YWJsZWQgc2xpY2VzIG1pZ2h0Cj4gPiA+ICAgICBub3cgZGlmZmVyIGZyb20gaHcgc3RhdGUuCj4g PiA+IAo+ID4gPiB2MzogLSBBZGRlZCBuZXcgZmllbGQgInN1cHBvcnRlZF9zbGljZXMiIHRvIGRk YiB0byBzZXBhcmF0ZSBtYXgKPiA+ID4gICAgICAgc3VwcG9ydGVkIHNsaWNlcyB2cyBjdXJyZW50 bHkgZW5hYmxlZCwgdG8gYXZvaWQgY29uZnVzaW9uLgo+ID4gPiAgICAgLSBSZW1vdmVkIG9ic29s ZXRlIGNvbW1lbnRzIGFuZCBjb2RlIHJlbGF0ZWQgdG8gREJ1ZihNYXR0aGV3Cj4gPiA+IFJvcGVy KS4KPiA+ID4gICAgIC0gU29tZSBjb2RlIHN0eWxlIGFuZCBsb25nIGxpbmUgcmVtb3ZhbChNYXR0 aGV3IFJvcGVyKS4KPiA+ID4gICAgIC0gQWRkZWQgV0FSTl9PTiB0byBuZXcgZGRiIHJhbmdlIG9m ZnNldCBjYWxjIGZ1bmN0aW9uKE1hdHRoZXcKPiA+ID4gUm9wZXIpLgo+ID4gPiAgICAgLSBSZW1v dmVkIHBsYXRmb3JtIHNwZWNpZmljIGNhbGwgdG8gY2FsYyBwaXBlIHJhdGlvIGZyb20gZGRiCj4g PiA+ICAgICAgIGFsbG9jYXRpb24gZnVuY3Rpb24gYW5kIGZpeGVkIHRoZSByZXR1cm4gdmFsdWUo TWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gUmVmYWN0b3JlZCBEQlVGIHNsaWNlIGFsbG9jYXRp b24gdGFibGUgdG8gaW1wcm92ZSByZWFkYWJpbGl0eQo+ID4gPiAgICAgLSBBZGRlZCBEQlVGIHNs aWNlIGFsbG9jYXRpb24gZm9yIFRHTCBhcyB3ZWxsLgo+ID4gPiAgICAgLSBJQ0woaG93ZXZlciBu b3QgVEdMKSBzZWVtcyB0byB2b2x1bnRhcmlseSBlbmFibGUgc2Vjb25kIERCdWYKPiA+ID4gc2xp Y2UKPiA+ID4gICAgICAgYWZ0ZXIgcG0gc3VzcGVuZC9yZXN1bWUgY2F1c2luZyBhIG1pc21hdGNo IGZhaWx1cmUsIGJlY2F1c2UKPiA+ID4gd2UKPiA+ID4gICAgICAgdXBkYXRlIERCdWYgc2xpY2Vz IG9ubHkgaWYgd2UgZG8gYSBtb2Rlc2V0LCBob3dldmVyIHRoaXMKPiA+ID4gY2hlY2sKPiA+ID4g ICAgICAgaXMgZG9uZSBhbHdheXMuIEZpeGVkIGl0IHRvIGJlIGRvbmUgb25seSB3aGVuIG1vZGVz ZXQgZm9yCj4gPiA+IElDTC4KPiA+ID4gCj4gPiA+IHY0OiAtIE5vdyBlbmFibGVkIHNsaWNlcyBp cyBub3QgYWN0dWFsbHkgYSBudW1iZXIsIGJ1dCBhIGJpdG1hc2ssCj4gPiA+ICAgICAgIGJlY2F1 c2Ugd2UgbWlnaHQgbmVlZCB0byBlbmFibGUgc2Vjb25kIHNsaWNlIG9ubHkgYW5kIG51bWJlcgo+ ID4gPiAgICAgICBvZiBzbGljZXMgd291bGQgc3RpbGwgMSBhbmQgdGhhdCBjdXJyZW50IGNvZGUg ZG9lc24ndCBhbGxvdy4KPiA+ID4gICAgIC0gUmVtb3ZlIHJlZHVuZGFudCBkdXBsaWNhdGUgY29k ZSB0byBoYXZlIHNvbWUgdW5pZmllZCB3YXkgb2YKPiA+ID4gICAgICAgZW5hYmxpbmcgZGJ1ZiBz bGljZXMgaW5zdGVhZCBvZiBoYXJkY29kaW5nLgo+ID4gPiAKPiA+ID4gdjU6IC0gRml4IGZhaWxp bmcgZ2VuOV9hc3NlcnRfZGJ1Zl9lbmFibGVkIGFzIGl0IHdhcyBuYWl2ZWx5Cj4gPiA+IHRoaW5r aW5nCj4gPiA+ICAgICAgIHRoYXQgd2UgaGF2ZSBvbmx5IG9uZSBEQlVGX0NUTCBzbGljZS4gTm93 IGFub3RoZXIgdmVyc2lvbiBmb3IKPiA+ID4gICAgICAgZ2VuMTEgd2lsbCBjaGVjayBib3RoIHNs aWNlcyBhcyBvbmx5IHNlY29uZCBvbmUgY2FuIGJlCj4gPiA+IGVuYWJsZWQsCj4gPiA+ICAgICAg IHRvIGtlZXAgQ0kgaGFwcHkuCj4gPiA+IAo+ID4gPiB2NjogLSBSZW1vdmVkIGVuYWJsZWQgZGJ1 ZiBhc3NlcnRpb24gY29tcGxldGVseS4gUHJldmlvdXMgY29kZQo+ID4gPiAgICAgICB3YXMga2Vl cGluZyBkYnVmIGVuYWJsZWQsIGV2ZW4oISkgd2hlbiBfZGJ1Zl9kaXNhYmxlIGlzCj4gPiA+IGNh bGxlZC4KPiA+ID4gICAgICAgQ3VycmVudGx5IHdlIGVuYWJsZS9kaXNhYmxlIGRidWYgc2xpY2Vz IGJhc2VkIG9uIHJlcXVyZW1lbnQKPiA+ID4gICAgICAgc28gbm8gcG9pbnQgaW4gYXNzZXJ0aW5n IHRoaXMgaGVyZS4KPiA+ID4gICAgIC0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBtb2Rlc2V0IGNoZWNr IGZyb20KPiA+ID4gdmVyaWZ5X3dtX3N0YXRlKE1hdHRoZXcgUm9wZXIpCj4gPiA+ICAgICAtIFNs aWNlcyBpbnRlcnNlY3Rpb24gYWZ0ZXIgdW5pb24gaXMgc2FtZSBhcyBmaW5hbAo+ID4gPiByZXN1 bHQoTWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gTW92ZWQgREJ1ZiBzbGljZXMgdG8gaW50ZWxf ZGV2aWNlX2luZm8oTWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gU29tZSBtYWNyb3MgYWRkZWQo TWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gZGRiIHJhbmdlIGlzIG5vdyBhbHdheXMgbGVzcyBv ciBlcXVhbCB0byBkZGIgc2l6ZSAtIG5vIG5lZWQKPiA+ID4gZm9yIGFkZGl0aW9uYWwKPiA+ID4g ICAgICAgY2hlY2tzKHByZXZpb3VzbHkgbmVlZGVkIGFzIHdlIGhhZCBzb21lIGJhbmR3aWR0aCBj aGVja3MgaW4KPiA+ID4gdGhlcmUgd2hpY2gKPiA+ID4gICAgICAgY291bGQgInN1ZGRlbmx5IiBy ZXR1cm4gZGRiX3NpemUgc21hbGxlciB0aGFuIGl0IGlzLgo+ID4gPiAKPiA+ID4gdjc6IE1pbm9y IGNvc3RlbWljIGNoYW5nZXM6Cj4gPiA+ICAgICAtIENoYW5nZWQgaWNsX2RidWZfc2xpY2VzX3Jl c3RvcmUgbmFtZSB0bwo+ID4gPiBpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcwo+ID4gPiAgICAgICBh cyBpdCBtb3JlIGNvcnJlc3BvbmRzIHRvIHRoZSBhY3R1YWwgZnVuY3Rpb25hbGl0eS4KPiA+ID4g ICAgIC0gU29tZSBzaW1wbGlmaWNhdGlvbiB3aXRoIHN1cHBvcnRlZCBzbGljZXMgZm9yIEJYVCBh bmQgR0xLCj4gPiA+ICAgICAtIHNrbF9waXBlX2Rvd25zY2FsZV9hbW91bnQgLT4gaWNsX3BpcGVf ZG93bnNjYWxlX2Ftb3VudCBhcwo+ID4gPiAgICAgICB0aGlzIGlzIG5vdCB1c2VkIGZvciBza2wg YW55bW9yZS4KPiA+ID4gICAgIC0gQ2hhbmdlZCBEQnVmIHNsaWNlIGFzc2lnbm1lbnQgb3JkZXIg Zm9yIFRHTCBjYXNlCj4gPiA+IAo+ID4gPiBSZXZpZXdlZC1ieTogTWF0dGhldyBSb3BlciA8bWF0 dGhldy5kLnJvcGVyQGludGVsLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogU3RhbmlzbGF2IExp c292c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBpbnRlbC5jb20+Cj4gPiA+IENjOiBNYXR0aGV3 IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+ID4gPiBDYzogVmlsbGUgU3lyasOk bMOkIDx2aWxsZS5zeXJqYWxhQGludGVsLmNvbT4KPiA+ID4gQ2M6IEphbWVzIEF1c211cyA8amFt ZXMuYXVzbXVzQGludGVsLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCAgMjYgKy0KPiA+ID4gIC4uLi9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYyAgICB8ICA5OCArKy0tLQo+ID4gPiAgLi4uL2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5oICAgIHwgICAyICsKPiA+ID4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAgNSArCj4gPiA+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICAgfCAgIDIgKy0K PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMgICAgICAgICAgICAgICB8ICAg NiArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgICAgICAg IHwgICA4ICstCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5o ICAgICAgfCAgIDEgKwo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAg ICAgICAgICAgIHwgMzg3Cj4gPiA+ICsrKysrKysrKysrKysrKystLQo+ID4gPiAgOSBmaWxlcyBj aGFuZ2VkLCA0MzEgaW5zZXJ0aW9ucygrKSwgMTA0IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5j Cj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiA+ ID4gaW5kZXggODc2ZmMyNTk2OGJmLi5iZDdhZmY2NzUxOTggMTAwNjQ0Cj4gPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gPiA+IEBAIC0xMzM4 Nyw3ICsxMzM4Nyw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV93bV9zdGF0ZShzdHJ1Y3QKPiA+ID4g aW50ZWxfY3J0YyAqY3J0YywKPiA+ID4gIAo+ID4gPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDExICYmCj4gPiA+ICAJICAgIGh3LT5kZGIuZW5hYmxlZF9zbGljZXMgIT0gc3dfZGRiLT5l bmFibGVkX3NsaWNlcykKPiA+ID4gLQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEQlVGIFNsaWNl cyAoZXhwZWN0ZWQgJXUsIGdvdAo+ID4gPiAldSlcbiIsCj4gPiA+ICsJCURSTV9FUlJPUigibWlz bWF0Y2ggaW4gREJVRiBTbGljZXMgKGV4cGVjdGVkICV4LCBnb3QKPiA+ID4gJXgpXG4iLAo+ID4g PiAgCQkJICBzd19kZGItPmVuYWJsZWRfc2xpY2VzLAo+ID4gPiAgCQkJICBody0+ZGRiLmVuYWJs ZWRfc2xpY2VzKTsKPiA+ID4gIAo+ID4gPiBAQCAtMTQ2MTQsMTUgKzE0NjE0LDI0IEBAIHN0YXRp YyB2b2lkCj4gPiA+IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzKHN0cnVjdCBpbnRlbF9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ID4gPiAgCXU4IGh3X2VuYWJsZWRfc2xpY2VzID0gZGV2X3ByaXYt PndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXM7Cj4gPiA+ICAJdTggcmVxdWlyZWRfc2xpY2Vz ID0gc3RhdGUtPndtX3Jlc3VsdHMuZGRiLmVuYWJsZWRfc2xpY2VzOwo+ID4gPiAgCXN0cnVjdCBz a2xfZGRiX2VudHJ5IGVudHJpZXNbSTkxNV9NQVhfUElQRVNdID0ge307Cj4gPiA+ICsJdTggc2xp Y2VzX3VuaW9uID0gaHdfZW5hYmxlZF9zbGljZXMgfCByZXF1aXJlZF9zbGljZXM7Cj4gPiA+ICsJ dTggc2xpY2VzX2ludGVyc2VjdGlvbiA9IHJlcXVpcmVkX3NsaWNlczsKPiA+ID4gIAo+ID4gPiAg CWZvcl9lYWNoX29sZG5ld19pbnRlbF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLAo+ID4gPiBv bGRfY3J0Y19zdGF0ZSwgbmV3X2NydGNfc3RhdGUsIGkpCj4gPiA+ICAJCS8qIGlnbm9yZSBhbGxv Y2F0aW9ucyBmb3IgY3J0YydzIHRoYXQgaGF2ZSBiZWVuIHR1cm5lZAo+ID4gPiBvZmYuICovCj4g PiA+ICAJCWlmIChuZXdfY3J0Y19zdGF0ZS0+aHcuYWN0aXZlKQo+ID4gPiAgCQkJZW50cmllc1tp XSA9IG9sZF9jcnRjX3N0YXRlLT53bS5za2wuZGRiOwo+ID4gPiAgCj4gPiA+IC0JLyogSWYgMm5k IERCdWYgc2xpY2UgcmVxdWlyZWQsIGVuYWJsZSBpdCBoZXJlICovCj4gPiA+IC0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTEgJiYgcmVxdWlyZWRfc2xpY2VzID4KPiA+ID4gaHdfZW5hYmxl ZF9zbGljZXMpCj4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsIHJlcXVp cmVkX3NsaWNlcyk7Cj4gPiA+ICsJRFJNX0RFQlVHX0tNUygiREJ1ZiByZXEgc2xpY2VzICVkIGh3 IHNsaWNlcyAlZFxuIiwKPiA+ID4gKwkJICAgICAgcmVxdWlyZWRfc2xpY2VzLCBod19lbmFibGVk X3NsaWNlcyk7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIElmIHNvbWUgb3RoZXIgREJ1 ZiBzbGljZSByZXF1aXJlZCwgZW5hYmxlIGl0IGhlcmUsCj4gPiA+ICsJICogYXMgaGVyZSB3ZSBv bmx5IGFkZCBtb3JlIHNsaWNlcywgYnV0IG5vdCByZW1vdmUgdG8gcHJldmVudAo+ID4gPiArCSAq IGlzc3VlcyBpZiBzb21lYm9keSBzdGlsbCB1c2VzIHRob3NlLgo+ID4gPiArCSAqLwo+ID4gPiAr CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyAhPQo+ID4g PiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4gKwkJaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShkZXZf cHJpdiwgc2xpY2VzX3VuaW9uKTsKPiA+ID4gIAo+ID4gPiAgCS8qCj4gPiA+ICAJICogV2hlbmV2 ZXIgdGhlIG51bWJlciBvZiBhY3RpdmUgcGlwZXMgY2hhbmdlcywgd2UgbmVlZCB0byBtYWtlCj4g PiA+IHN1cmUgd2UKPiA+ID4gQEAgLTE0NjgxLDkgKzE0NjkwLDEyIEBAIHN0YXRpYyB2b2lkCj4g PiA+IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlKQo+ID4gPiAgCQl9Cj4gPiA+ICAJfSB3aGlsZSAocHJvZ3Jlc3MpOwo+ID4gPiAgCj4g PiA+IC0JLyogSWYgMm5kIERCdWYgc2xpY2UgaXMgbm8gbW9yZSByZXF1aXJlZCBkaXNhYmxlIGl0 ICovCj4gPiA+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYgcmVxdWlyZWRfc2xp Y2VzIDwKPiA+ID4gaHdfZW5hYmxlZF9zbGljZXMpCj4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191 cGRhdGUoZGV2X3ByaXYsIHJlcXVpcmVkX3NsaWNlcyk7Cj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBJ ZiBzb21lIG90aGVyIERCdWYgc2xpY2UgaXMgbm90IG5lZWRlZCwgZGlzYWJsZSBpdCBoZXJlLAo+ ID4gPiArCSAqIGFzIGhlcmUgd2Ugb25seSByZW1vdmUgc2xpY2VzLCB3aGljaCBhcmUgbm90IG5l ZWRlZCBhbnltb3JlLgo+ID4gPiArCSAqLwo+ID4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyAhPQo+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ ID4gKwkJaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShkZXZfcHJpdiwgc2xpY2VzX2ludGVyc2VjdGlv bik7Cj4gPiAKPiA+IFRoaXMgaXMgc3RpbGwgYSB0b3RhbGx5IHdyb25nIHBsYWNlIGZvciB0aGlz LiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhlCj4gPiBwbGFuZXMgaGF2ZSBzd2l0Y2hlZCBvdmVyIHRv IHRoZSBuZXcgZGRiIGxheW91dCBiZWZvcmUgd2UgcG93ZXIgb2ZmCj4gPiBhbnl0aGluZy4KPiAK PiBJIGhhdmUganVzdCBtb2RpZmllZCBhbHJlYWR5IGV4aXN0aW5nIGxpbmUgaGVyZSwgbm90IGFk ZGVkIGJ5IG1lLgo+IFRoZSBwb2ludCBvZiB0aGlzIHBhdGNoIGlzIHN0YXJ0aW5nIHRvIHVzZSBz ZWNvbmQgREJ1ZiBzbGljZSBidXQKPiBub3QgZml4aW5nIGFsbCBraW5kcyBvZiBpc3N1ZXMgcmVs YXRlZCB0byBEQnVmIGNvZGUgYXQgdGhlIHNhbWUgdGltZS4KCllvdSdyZSByZS1lbmFibGluZyBj b2RlIEkgZGlzYWJsZWQgb24gcHVycG9zZS4gSXQgaGFzIHRvIGJlIGZpeGVkCnByb3Blcmx5IG9y IG5vdCB0b3VjaGVkIGF0IGFsbC4gSW4gaGluZHNpZ2h0IEkgc2hvdWxkIGhhdmUgcHJvYmFibHkK anVzdCByaXBwZWQgaXQgYWxsIG91dCB0byBub3QgZ2l2ZSBwZW9wbGUgYmFkIGlkZWFzLgoKPiAK PiBPZiBjb3Vyc2UgdGhpcyBpcyBuaWNlIGlkZWEgdG8gZml4IGl0IC0gaWYgdGhhdCBpcyB3cm9u ZyBwbGFuZSwKPiBidXQgY3VycmVudCBjb2RlIHNvbWVob3cgbGl2ZXMgd2l0aCBpdCBhbmQgcHJv YmFibHkgdGhpcyBzaG91bGQgYmUKPiB3aXRoIHNvbWUgb3RoZXIgcGF0Y2guCj4gCj4gPiAKPiA+ ID4gIH0KPiA+ID4gIAo+ID4gPiAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2hlbHBlcl9mcmVl X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ICpkZXZfcHJpdikKPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dl ci5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bv d2VyLmMKPiA+ID4gaW5kZXggY2UxYjY0ZjRkZDQ0Li5hNzhiYzliNjE4NjIgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5j Cj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9w b3dlci5jCj4gPiA+IEBAIC0xMDMxLDE1ICsxMDMxLDYgQEAgc3RhdGljIGJvb2wKPiA+ID4gZ2Vu OV9kY19vZmZfcG93ZXJfd2VsbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiA+ID4gIAkJKEk5MTVfUkVBRChEQ19TVEFURV9FTikgJgo+ID4gPiBEQ19TVEFURV9F Tl9VUFRPX0RDNV9EQzZfTUFTSykgPT0gMCk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRp YyB2b2lkIGdlbjlfYXNzZXJ0X2RidWZfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ ID4gPiAqZGV2X3ByaXYpCj4gPiA+IC17Cj4gPiA+IC0JdTMyIHRtcCA9IEk5MTVfUkVBRChEQlVG X0NUTCk7Cj4gPiA+IC0KPiA+ID4gLQlXQVJOKCh0bXAgJiAoREJVRl9QT1dFUl9TVEFURSB8IERC VUZfUE9XRVJfUkVRVUVTVCkpICE9Cj4gPiA+IC0JICAgICAoREJVRl9QT1dFUl9TVEFURSB8IERC VUZfUE9XRVJfUkVRVUVTVCksCj4gPiA+IC0JICAgICAiVW5leHBlY3RlZCBEQnVmIHBvd2VyIHBv d2VyIHN0YXRlICgweCUwOHgpXG4iLCB0bXApOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+ICBzdGF0 aWMgdm9pZCBnZW45X2Rpc2FibGVfZGNfc3RhdGVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4g PiA+ICpkZXZfcHJpdikKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUg Y2RjbGtfc3RhdGUgPSB7fTsKPiA+ID4gQEAgLTEwNTUsOCArMTA0Niw2IEBAIHN0YXRpYyB2b2lk IGdlbjlfZGlzYWJsZV9kY19zdGF0ZXMoc3RydWN0Cj4gPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ID4gPiAgCS8qIENhbid0IHJlYWQgb3V0IHZvbHRhZ2VfbGV2ZWwgc28gY2FuJ3Qg dXNlCj4gPiA+IGludGVsX2NkY2xrX2NoYW5nZWQoKSAqLwo+ID4gPiAgCVdBUk5fT04oaW50ZWxf Y2RjbGtfbmVlZHNfbW9kZXNldCgmZGV2X3ByaXYtPmNkY2xrLmh3LAo+ID4gPiAmY2RjbGtfc3Rh dGUpKTsKPiA+ID4gIAo+ID4gPiAtCWdlbjlfYXNzZXJ0X2RidWZfZW5hYmxlZChkZXZfcHJpdik7 Cj4gPiA+IC0KPiA+ID4gIAlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCj4gPiA+ICAJCWJ4dF92 ZXJpZnlfZGRpX3BoeV9wb3dlcl93ZWxscyhkZXZfcHJpdik7Cj4gPiA+ICAKPiA+ID4gQEAgLTQy NTQsMzEgKzQyNDMsNTEgQEAgc3RhdGljIHZvaWQgZ2VuOV9kYnVmX2Rpc2FibGUoc3RydWN0Cj4g PiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gPiAgCWludGVsX2RidWZfc2xpY2Vf c2V0KGRldl9wcml2LCBEQlVGX0NUTCwgZmFsc2UpOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC1z dGF0aWMgdTggaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiA+ID4gK2ludCBpbnRlbF9kYnVmX21heF9zbGljZXMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gPiAgewo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpIDwgMTEpCj4gPiA+IC0JCXJldHVybiAxOwo+ID4gPiAtCXJldHVybiAyOwo+ID4gPiArCXJl dHVybiBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3VwcG9ydGVkX3NsaWNlczsKPiA+ID4gK30KPiA+ IAo+ID4gS2luZGEgcG9pbnRsZXNzIGZ1bmN0aW9uIG5vdy4gJ3N1cHBvcnRlZF9zbGljZXMnIGlz IG5vdCBhIHZlcnkgZ29vZAo+ID4gbmFtZS4gU2hvdWxkIGJlICdudW1fZGJ1Zl9zbGljZXMnIG9y IHNvbWV0aGluZyBhbG9uZyB0aG9zZSBsaW5lcy4KPiAKPiBTdXBwb3J0ZWQgc2xpY2VzIHJlYWxs eSBtZWFucyBob3cgbXVjaCBzbGljZXMgd2Ugc3VwcG9ydCBpbiBoYXJkd2FyZS4KPiBudW1fZGJ1 Zl9zbGljZXMgd2lsbCBub3QgcmVmbGVjdCB0aGF0LCBpdCB3aWxsIGJlIG1vcmUgYW1iaWdpb3Vz Lgo+IEkgZG9uJ3QgbGlrZSB0aGlzIG5hbWUuCgpzdXBwb3J0ZWRfc2xpY2VzIGRvZXNuJ3QgZXZl biBzYXkgImRidWYiIGFueXdoZXJlLiBTbyBpdCdzIGV2ZW4gbW9yZQphbWJpZ3VvdXMuIEFsc28g d2UgYWxyZWFkeSBoYXZlIG51bV9waXBlcywgbnVtX3Nwcml0ZXMsIGV0Yy4KCj4gCj4gPiAKPiA+ ID4gKwo+ID4gPiArdm9pZCBpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ICt7Cj4gPiA+ICsJY29uc3QgdTggaHdfZW5hYmxlZF9z bGljZXMgPSBkZXZfcHJpdi0KPiA+ID4gPndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXM7Cj4g PiAKPiA+IFNlZW1zIGEgcmF0aGVyIHBvaW50bGVzcyB2YXJpYWJsZS4gY29uc3QgYXQgbGVhc3Qg aXMgcG9pbnRsZXNzLgo+ID4gCj4gPiA+ICsKPiA+ID4gKwlpY2xfZGJ1Zl9zbGljZXNfdXBkYXRl KGRldl9wcml2LCBod19lbmFibGVkX3NsaWNlcyk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIHZv aWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gPiA+ICAJCQkgICAgdTggcmVxX3NsaWNlcykKPiA+ID4gIHsKPiA+ID4gLQljb25zdCB1 OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9wcml2LQo+ID4gPiA+d20uc2tsX2h3LmRkYi5lbmFi bGVkX3NsaWNlczsKPiA+ID4gLQlib29sIHJldDsKPiA+ID4gKwlib29sIHJldCA9IHRydWU7Cj4g PiA+ICsJaW50IGk7Cj4gPiA+ICsJaW50IG1heF9zbGljZXMgPSBpbnRlbF9kYnVmX21heF9zbGlj ZXMoZGV2X3ByaXYpOwo+ID4gPiAgCj4gPiA+IC0JaWYgKHJlcV9zbGljZXMgPiBpbnRlbF9kYnVm X21heF9zbGljZXMoZGV2X3ByaXYpKSB7Cj4gPiA+ICsJaWYgKGh3ZWlnaHQ4KHJlcV9zbGljZXMp ID4gaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKGRldl9wcml2KSkgewo+ID4gPiAgCQlEUk1fRVJST1Io IkludmFsaWQgbnVtYmVyIG9mIGRidWYgc2xpY2VzIHJlcXVlc3RlZFxuIik7Cj4gPiA+ICAJCXJl dHVybjsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gLQlpZiAocmVxX3NsaWNlcyA9PSBod19lbmFi bGVkX3NsaWNlcyB8fCByZXFfc2xpY2VzID09IDApCj4gPiA+IC0JCXJldHVybjsKPiA+ID4gKwlE Uk1fREVCVUdfS01TKCJVcGRhdGluZyBkYnVmIHNsaWNlcyB0byAleFxuIiwgcmVxX3NsaWNlcyk7 Cj4gPiA+ICAKPiA+ID4gLQlpZiAocmVxX3NsaWNlcyA+IGh3X2VuYWJsZWRfc2xpY2VzKQo+ID4g PiAtCQlyZXQgPSBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwgREJVRl9DVExfUzIsCj4g PiA+IHRydWUpOwo+ID4gPiAtCWVsc2UKPiA+ID4gLQkJcmV0ID0gaW50ZWxfZGJ1Zl9zbGljZV9z ZXQoZGV2X3ByaXYsIERCVUZfQ1RMX1MyLAo+ID4gPiBmYWxzZSk7Cj4gPiA+ICsJZm9yIChpID0g MDsgaSA8IG1heF9zbGljZXM7IGkrKykgewo+ID4gPiArCQlpbnQgc2xpY2VfYml0ID0gQklUKGkp Owo+ID4gPiArCQlib29sIHNsaWNlX3NldCA9IChzbGljZV9iaXQgJiByZXFfc2xpY2VzKSAhPSAw Owo+ID4gPiArCj4gPiA+ICsJCXN3aXRjaCAoc2xpY2VfYml0KSB7Cj4gPiA+ICsJCWNhc2UgREJV Rl9TMV9CSVQ6Cj4gPiA+ICsJCQlyZXQgPSByZXQgJiYgaW50ZWxfZGJ1Zl9zbGljZV9zZXQoZGV2 X3ByaXYsCj4gPiA+ICsJCQkJCQkJICBEQlVGX0NUTF9TMSwKPiA+ID4gKwkJCQkJCQkgIHNsaWNl X3NldCk7Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwkJY2FzZSBEQlVGX1MyX0JJVDoKPiA+ID4g KwkJCXJldCA9IHJldCAmJiBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwKPiA+ID4gKwkJ CQkJCQkgIERCVUZfQ1RMX1MyLAo+ID4gPiArCQkJCQkJCSAgc2xpY2Vfc2V0KTsKPiA+IAo+ID4g VGhlIHJldHVybiB2YWx1ZSBvbiBpbnRlbF9kYnVmX3NsaWNlX3NldCgpIHNlZW1zIHBvaW50bGVz cy4gSSdkIG51a2UKPiA+IGl0Lgo+ID4gCj4gPiBBbHNvIGFzIGxvbmcgeW91IGhhdmUgaW50ZWxf ZGJ1Zl9zbGljZV9zZXQoKSBJJ2QgcHJvYmFibHkganVzdCBwYXNzCj4gPiB0aGUKPiA+IHNsaWNl IGluZGV4IHRoZXJlIGFuZCBsZXQgaXQgZGVhbCB3aXRoIHRoZSByZWdpc3RlciBkZXRhaWxzLiBE QlVGX0NUTAo+ID4gc2hvdWxkIHByb2JhYmx5IGJlIHBhcmFtZXRyaXplZCBhcyB3ZWxsIHNvIHlv dSBkb24ndCBuZWVkIGFubm95aW5nCj4gPiBzd2l0Y2gKPiA+IHN0YXRlbWVudHMuCj4gCj4gV2hh dCBpZiBpdCBmYWlscz8gU2hvdWxkbid0IHdlIHN0aWxsIGhhdmUgc29tZSBjbHVlIHdoYXQgc3Rh dGUgZG8gd2UKPiBoYXZlL2hhZCBhdCB0aGUgbW9tZW50PwoKSXQgaWYgZmFpbHMgeW91IGxvZyBh biBlcnJvciBhbmQga2VlcCBnb2luZy4KCj4gCj4gPiAKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiAr CQlkZWZhdWx0Ogo+ID4gPiArCQkJTUlTU0lOR19DQVNFKHNsaWNlX2JpdCk7Cj4gPiA+ICsJCX0K PiA+ID4gKwl9Cj4gPiA+ICAKPiA+ID4gIAlpZiAocmV0KQo+ID4gPiAgCQlkZXZfcHJpdi0+d20u c2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9IHJlcV9zbGljZXM7Cj4gPiA+IEBAIC00Mjg2LDQw ICs0Mjk1LDIxIEBAIHZvaWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QKPiA+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAKPiA+ID4gIHN0YXRpYyB2b2lkIGljbF9k YnVmX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ICB7Cj4g PiA+IC0JSTkxNV9XUklURShEQlVGX0NUTF9TMSwgSTkxNV9SRUFEKERCVUZfQ1RMX1MxKSB8Cj4g PiA+IERCVUZfUE9XRVJfUkVRVUVTVCk7Cj4gPiA+IC0JSTkxNV9XUklURShEQlVGX0NUTF9TMiwg STkxNV9SRUFEKERCVUZfQ1RMX1MyKSB8Cj4gPiA+IERCVUZfUE9XRVJfUkVRVUVTVCk7Cj4gPiA+ IC0JUE9TVElOR19SRUFEKERCVUZfQ1RMX1MyKTsKPiA+ID4gLQo+ID4gPiAtCXVkZWxheSgxMCk7 Cj4gPiA+IC0KPiA+ID4gLQlpZiAoIShJOTE1X1JFQUQoREJVRl9DVExfUzEpICYgREJVRl9QT1dF Ul9TVEFURSkgfHwKPiA+ID4gLQkgICAgIShJOTE1X1JFQUQoREJVRl9DVExfUzIpICYgREJVRl9Q T1dFUl9TVEFURSkpCj4gPiA+IC0JCURSTV9FUlJPUigiREJ1ZiBwb3dlciBlbmFibGUgdGltZW91 dFxuIik7Cj4gPiA+IC0JZWxzZQo+ID4gPiAtCQkvKgo+ID4gPiAtCQkgKiBGSVhNRTogZm9yIG5v dyBwcmV0ZW5kIHRoYXQgd2Ugb25seSBoYXZlIDEgc2xpY2UsCj4gPiA+IHNlZQo+ID4gPiAtCQkg KiBpbnRlbF9lbmFibGVkX2RidWZfc2xpY2VzX251bSgpLgo+ID4gPiAtCQkgKi8KPiA+ID4gLQkJ ZGV2X3ByaXYtPndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXMgPSAxOwo+ID4gPiArCS8qCj4g PiA+ICsJICogSnVzdCBwb3dlciB1cCAxIHNsaWNlLCB3ZSB3aWxsCj4gPiA+ICsJICogZmlndXJl IG91dCBsYXRlciB3aGljaCBzbGljZXMgd2UgaGF2ZSBhbmQgd2hhdCB3ZSBuZWVkLgo+ID4gPiAr CSAqLwo+ID4gPiArCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzID0gREJV Rl9TMV9CSVQ7Cj4gPiAKPiA+IFRoYXQgc3R1ZmYgcmVhbGx5IHNob3VsZG4ndCBiZSBtb2RpZmll ZCBieSBsb3cgbGV2ZWwgZnVuY3Rpb25zLgo+ID4gVGhlIGludGlhbCB2YWx1ZSBzaG91bGQgY29t ZSBmcm9tIHJlYWRvdXQsIGFuZCBhZnRlciB0aGF0IGl0IHNob3VsZAo+ID4gYmUgYWRqdXN0ZWQg YXMgcGFydCBvZiB0aGUgb3ZlcmFsbCBhdG9taWMgc3RhdGUuCj4gCj4gV2VsbCwgYXMgeW91IGNh biBzZWUgY3VycmVudGx5IHRoaXMgaXMgZXZlbiB3b3JzZSAtIGhhcyBzb21lIHdlaXJkCj4gaGFy ZGNvZGVkIHN0dWZmIGFuZCBpcyBtb2RpZmllZCBsaWtlIHRoYXQuIEFsc28gaWYgd2UgYXJlIGVu YWJsaW5nIHRoZSAKPiBkYnVmIHNsaWNlcywgc2hvdWxkbid0IHdlIHJlYWxseSBkZXRlcm1pbmUg d2hhdCB2YWx1ZSBzaG91bGQgYmUgdGhlcmU/Cj4gCj4gQWxzbyBJIHdvdWxkbid0IHJlYWxseSBh bHdheXMgdHJ1c3QgdGhlIHJlYWRvdXQsIGFzIHRvIG1lIGl0IHNlZW1zCj4gaWNlbGFrZSByZXNl dHMgaXQgY29uc3RhbnRseSB0byAyIGFmdGVyIHN1c3BlbmQvcmVzdW1lLiAKClRoZSBwb2ludCBv ZiByZWFkb3V0IGlzIHRoYXQgd2Ugc3luY3Job25pemUgb3VyIHNvZnR3YXJlIHN0YXRlIHdpdGgg dGhlCmN1cnJlbnQgc3RhdGUgb2YgaGFyZHdhcmUgd2l0aG91dCBoYXZpbmcgdG8gbW9kaWZ5IHRo ZSBoYXJkd2FyZSBzdGF0ZS4KT25jZSBzeW5jaHJvbml6ZWQgdGhlIGRyaXZlciB0YWtlcyBvdmVy IGFuZCB0ZWxscyB0aGUgaHcgd2hhdCB0byBkby4KCj4gCj4gPiAKPiA+ID4gKwlpY2xfcHJvZ3Jh bV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIHN0YXRpYyB2 b2lkIGljbF9kYnVmX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ID4gPiAgewo+ID4gPiAtCUk5MTVfV1JJVEUoREJVRl9DVExfUzEsIEk5MTVfUkVBRChEQlVGX0NU TF9TMSkgJgo+ID4gPiB+REJVRl9QT1dFUl9SRVFVRVNUKTsKPiA+ID4gLQlJOTE1X1dSSVRFKERC VUZfQ1RMX1MyLCBJOTE1X1JFQUQoREJVRl9DVExfUzIpICYKPiA+ID4gfkRCVUZfUE9XRVJfUkVR VUVTVCk7Cj4gPiA+IC0JUE9TVElOR19SRUFEKERCVUZfQ1RMX1MyKTsKPiA+ID4gLQo+ID4gPiAt CXVkZWxheSgxMCk7Cj4gPiA+IC0KPiA+ID4gLQlpZiAoKEk5MTVfUkVBRChEQlVGX0NUTF9TMSkg JiBEQlVGX1BPV0VSX1NUQVRFKSB8fAo+ID4gPiAtCSAgICAoSTkxNV9SRUFEKERCVUZfQ1RMX1My KSAmIERCVUZfUE9XRVJfU1RBVEUpKQo+ID4gPiAtCQlEUk1fRVJST1IoIkRCdWYgcG93ZXIgZGlz YWJsZSB0aW1lb3V0IVxuIik7Cj4gPiA+IC0JZWxzZQo+ID4gPiAtCQkvKgo+ID4gPiAtCQkgKiBG SVhNRTogZm9yIG5vdyBwcmV0ZW5kIHRoYXQgdGhlIGZpcnN0IHNsaWNlIGlzCj4gPiA+IGFsd2F5 cwo+ID4gPiAtCQkgKiBlbmFibGVkLCBzZWUgaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNlc19udW0o KS4KPiA+ID4gLQkJICovCj4gPiA+IC0JCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRf c2xpY2VzID0gMTsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIERpc2FibGUgYWxsIHNsaWNlcwo+ID4g PiArCSAqLwo+ID4gPiArCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzID0g MDsKPiA+ID4gKwlpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICB9Cj4g PiA+ICAKPiA+ID4gIHN0YXRpYyB2b2lkIGljbF9tYnVzX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuaAo+ID4gPiBpbmRleCAxZGEwNGYzZTBmYjMu LmI3MDU3ZDY4YWQ3OCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gQEAgLTMxMSw4ICszMTEsMTAg QEAgaW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoc3RydWN0Cj4gPiA+IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCj4gPiA+ICAJZm9yICgod2YpID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQo KGk5MTUpLCAoZG9tYWluKSk7ICh3Zik7IFwKPiA+ID4gIAkgICAgIGludGVsX2Rpc3BsYXlfcG93 ZXJfcHV0X2FzeW5jKChpOTE1KSwgKGRvbWFpbiksICh3ZikpLAo+ID4gPiAod2YpID0gMCkKPiA+ ID4gIAo+ID4gPiAraW50IGludGVsX2RidWZfbWF4X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwo+ID4gPiAgdm9pZCBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gIAkJCSAgICB1OCByZXFfc2xpY2Vz KTsKPiA+ID4gK3ZvaWQgaWNsX3Byb2dyYW1fZGJ1Zl9zbGljZXMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKPiA+ID4gIAo+ID4gPiAgdm9pZCBjaHZfcGh5X3Bvd2VyZ2F0ZV9s YW5lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gIAkJCSAgICAgYm9vbCBv dmVycmlkZSwgdW5zaWduZWQgaW50IG1hc2spOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMKPiA+ID4gaW5kZXggODJlNGU2YmYwOGMzLi45Njc0MWU2ODYzM2EgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gPiBAQCAtNTEsNiArNTEsNyBAQAo+ID4gPiAg I2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfYncuaCIKPiA+ID4gICNpbmNsdWRlICJkaXNwbGF5L2lu dGVsX2NkY2xrLmgiCj4gPiA+ICAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmgiCj4gPiA+ICsjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgiCj4gPiA+ ICAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kcC5oIgo+ID4gPiAgI2luY2x1ZGUgImRpc3BsYXkv aW50ZWxfZmJkZXYuaCIKPiA+ID4gICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2hvdHBsdWcuaCIK PiA+ID4gQEAgLTI1ODgsNiArMjU4OSwxMCBAQCBzdGF0aWMgaW50IGludGVsX3J1bnRpbWVfcmVz dW1lKHN0cnVjdAo+ID4gPiBkZXZpY2UgKmtkZXYpCj4gPiA+ICAJaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ID4gPiAgCQlyZXQgPSB2bHZf cmVzdW1lX3ByZXBhcmUoZGV2X3ByaXYsIHRydWUpOwo+ID4gPiAgCj4gPiA+ICsJLyogV2VpcmQg aGFjayB0byBmaXggSUNMIGhhcmR3YXJlIGJ1ZywgYXMgaXQgcmVzZXRzIERCVUYgc2xpY2VzCj4g PiA+IHJlZyAqLwo+ID4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID09IDExKQo+ID4gPiAr CQlpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICsKPiA+ID4gIAlpbnRl bF91bmNvcmVfcnVudGltZV9yZXN1bWUoJmRldl9wcml2LT51bmNvcmUpOwo+ID4gPiAgCj4gPiA+ ICAJaW50ZWxfcnVudGltZV9wbV9lbmFibGVfaW50ZXJydXB0cyhkZXZfcHJpdik7Cj4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiBpbmRleCA3ZTBmNjdiYWJlMjAuLmEzOTY5 NzdjOWMyZCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IEBAIC04 MDQsNyArODA0LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrbF9kZGJfZW50cnlfZXF1YWwoY29u c3QKPiA+ID4gc3RydWN0IHNrbF9kZGJfZW50cnkgKmUxLAo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKPiA+IAo+ID4gVGhpcyBzdHJ1Y3QgaXMgcXVp dGUgcG9pbnRsZXNzLiBTaG91bGQgYmUga2lsbGVkIG9mZi4KPiAKPiBMZWdhY3kgc3R1ZmYsIG5v dCBhZGRlZCBieSBtZS4gUXVpdGUgZmluZSB3aXRoIHJlbW92aW5nIGl0IC0gCj4gYnV0IHNob3Vs ZCB3ZSByZWFsbHkgZG8gYWxsIHRoaXMgYXQgdGhlIHNhbWUgdGltZSBhbmQgaW4gc2FtZQo+IHBh dGNoPyAKCk5vdCB0aGUgc2FtZSBwYXRjaC4gQnV0IGNsZWFuIHVwIHRoZSBjb2J3ZWJzIGZpcnN0 LCB0aGVuIGFkZCB0aGUgbmV3CnN0dWZmLiBNdWNoIGVhc2llciB0aGF0IHdheSBhcm91bmQuCgo+ IAo+ID4gCj4gPiA+IC0JdTggZW5hYmxlZF9zbGljZXM7IC8qIEdFTjExIGhhcyBjb25maWd1cmFi bGUgMiBzbGljZXMgKi8KPiA+ID4gKwl1OCBlbmFibGVkX3NsaWNlczsgICAvKiBCaXRtYXNrIG9m IGN1cnJlbnRseSBlbmFibGVkIERCdWYKPiA+ID4gc2xpY2VzICovCj4gPiA+ICB9Owo+ID4gPiAg Cj4gPiA+ICBzdHJ1Y3Qgc2tsX2RkYl92YWx1ZXMgewo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGNpLmMKPiA+ID4gaW5kZXggMWJiNzAxZDMyYTVkLi44ZTg2YWY1MDU3MzAgMTAwNjQ0Cj4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiA+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYwo+ID4gPiBAQCAtNjE0LDcgKzYxNCw4IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8KPiA+ID4gaW50ZWxfY2hlcnJ5dmll d19pbmZvID0gewo+ID4gPiAgCS5oYXNfZ3RfdWMgPSAxLCBcCj4gPiA+ICAJLmRpc3BsYXkuaGFz X2hkY3AgPSAxLCBcCj4gPiA+ICAJLmRpc3BsYXkuaGFzX2lwYyA9IDEsIFwKPiA+ID4gLQkuZGRi X3NpemUgPSA4OTYKPiA+ID4gKwkuZGRiX3NpemUgPSA4OTYsIFwKPiA+ID4gKwkuc3VwcG9ydGVk X3NsaWNlcyA9IDEKPiA+ID4gIAo+ID4gPiAgI2RlZmluZSBTS0xfUExBVEZPUk0gXAo+ID4gPiAg CUdFTjlfRkVBVFVSRVMsIFwKPiA+ID4gQEAgLTY1MCw2ICs2NTEsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGludGVsX2RldmljZV9pbmZvCj4gPiA+IGludGVsX3NreWxha2VfZ3Q0X2luZm8gPSB7 Cj4gPiA+ICAJR0VOKDkpLCBcCj4gPiA+ICAJLmlzX2xwID0gMSwgXAo+ID4gPiAgCS5kaXNwbGF5 Lmhhc19ob3RwbHVnID0gMSwgXAo+ID4gPiArCS5zdXBwb3J0ZWRfc2xpY2VzID0gMSwgXAo+ID4g PiAgCS5lbmdpbmVfbWFzayA9IEJJVChSQ1MwKSB8IEJJVChWQ1MwKSB8IEJJVChCQ1MwKSB8IEJJ VChWRUNTMCksCj4gPiA+IFwKPiA+ID4gIAkucGlwZV9tYXNrID0gQklUKFBJUEVfQSkgfCBCSVQo UElQRV9CKSB8IEJJVChQSVBFX0MpLCBcCj4gPiA+ICAJLmhhc182NGJpdF9yZWxvYyA9IDEsIFwK PiA+ID4gQEAgLTczNyw2ICs3MzksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2Rldmlj ZV9pbmZvCj4gPiA+IGludGVsX2NvZmZlZWxha2VfZ3QzX2luZm8gPSB7Cj4gPiA+ICAJR0VOOV9G RUFUVVJFUywgXAo+ID4gPiAgCUdFTigxMCksIFwKPiA+ID4gIAkuZGRiX3NpemUgPSAxMDI0LCBc Cj4gPiA+ICsJLnN1cHBvcnRlZF9zbGljZXMgPSAxLCBcCj4gPiA+ICAJLmRpc3BsYXkuaGFzX2Rz YyA9IDEsIFwKPiA+ID4gIAkuaGFzX2NvaGVyZW50X2dndHQgPSBmYWxzZSwgXAo+ID4gPiAgCUdM S19DT0xPUlMKPiA+ID4gQEAgLTc3Myw2ICs3NzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX2RldmljZV9pbmZvCj4gPiA+IGludGVsX2Nhbm5vbmxha2VfaW5mbyA9IHsKPiA+ID4gIAl9 LCBcCj4gPiA+ICAJR0VOKDExKSwgXAo+ID4gPiAgCS5kZGJfc2l6ZSA9IDIwNDgsIFwKPiA+ID4g Kwkuc3VwcG9ydGVkX3NsaWNlcyA9IDIsIFwKPiA+ID4gIAkuaGFzX2xvZ2ljYWxfcmluZ19lbHNx ID0gMSwgXAo+ID4gPiAgCS5jb2xvciA9IHsgLmRlZ2FtbWFfbHV0X3NpemUgPSAzMywgLmdhbW1h X2x1dF9zaXplID0gMjYyMTQ1IH0KPiA+ID4gIAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmgKPiA+ID4gaW5kZXggYTYwN2VhNTIwODI5Li5mYmE1NzMxMDYzZDggMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBAQCAtNzczNCw5ICs3NzM0LDExIEBAIGVu dW0gewo+ID4gPiAgI2RlZmluZSBESVNQX0FSQl9DVEwyCV9NTUlPKDB4NDUwMDQpCj4gPiA+ICAj ZGVmaW5lICBESVNQX0RBVEFfUEFSVElUSU9OXzVfNgkoMSA8PCA2KQo+ID4gPiAgI2RlZmluZSAg RElTUF9JUENfRU5BQkxFCQkoMSA8PCAzKQo+ID4gPiAtI2RlZmluZSBEQlVGX0NUTAlfTU1JTygw eDQ1MDA4KQo+ID4gPiAtI2RlZmluZSBEQlVGX0NUTF9TMQlfTU1JTygweDQ1MDA4KQo+ID4gPiAt I2RlZmluZSBEQlVGX0NUTF9TMglfTU1JTygweDQ0RkU4KQo+ID4gPiArI2RlZmluZSBEQlVGX1Mx X0JJVAkJCUJJVCgwKQo+ID4gPiArI2RlZmluZSBEQlVGX1MyX0JJVAkJCUJJVCgxKQo+ID4gCj4g PiBUaGVzZSBhcmUgbm90IGJpdHMgaW5zaWRlIERCVUZfQ1RMIHNvIHRoZXkgc2hvdWxkIG5vdCBi ZSBoZXJlLgo+ID4gSSdkIGp1c3QgbnVrZSB0aGVtIGVudGlyZWx5LiBJZiB5b3UgdGhpbmsgd2Ug bmVlZCBtb3JlIHRoYW4gYW4KPiA+IGludCB0byByZWZlciB0byBhIHNsaWNlIHRoZW4gSU1PIHNv bWV0aGluZyBzaW1wbGUgbGlrZQo+ID4gCj4gPiBlbnVtIGRidWZfc2xpY2Ugewo+ID4gCURCVUZf UzEsCj4gPiAJREJVRl9TMiwKPiA+IH07Cj4gPiAKPiA+IHdvdWxkIG1hdGNoIHRoZSBnZW5lcmFs IGFwcG9yYWNoIHdlIHVzZSBmb3Igb3RoZXIgdGhpbmdzIG11Y2ggYmV0dGVyCj4gPiByYXRoZXIg dGhhbiBkZWZpbmluZyBzb21lIHNoaWZ0ZWQgdmFsdWVzLgo+IAo+IFdlIG5lZWQgdG8gY29tYmlu ZSBzbGljZXMgLSBzbyBiaXRtYXNrIGlzIHF1aXRlIHN1aXRhYmxlIGZvciB0aGF0LCAKPiBJIGNh biBvZiBjb3Vyc2UgdXNlIHRoaXMgZW51bSwgYnV0IHRoZW4gSSdsbCBoYXZlIHRvIHJlLWVuY29k ZSBpdCAKPiB0byBiaXRtYXNrIGFueXdheXMuCgpXaGljaCBpcyBwcmV0dHkgbXVjaCBob3cgZXZl cnl0aGluZyBlbHNlIHdvcmtzIGluIHRoZSBkcml2ZXIuCgo+IAo+IAo+ID4gCj4gPiA+ICsjZGVm aW5lIERCVUZfQ1RMCQkJX01NSU8oMHg0NTAwOCkKPiA+ID4gKyNkZWZpbmUgREJVRl9DVExfUzEJ CQlfTU1JTygweDQ1MDA4KQo+ID4gPiArI2RlZmluZSBEQlVGX0NUTF9TMgkJCV9NTUlPKDB4NDRG RTgpCj4gPiA+ICAjZGVmaW5lICBEQlVGX1BPV0VSX1JFUVVFU1QJCSgxIDw8IDMxKQo+ID4gPiAg I2RlZmluZSAgREJVRl9QT1dFUl9TVEFURQkJKDEgPDwgMzApCj4gPiA+ICAjZGVmaW5lIEdFTjdf TVNHX0NUTAlfTU1JTygweDQ1MDEwKQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RldmljZV9pbmZvLmgKPiA+ID4gaW5kZXggNGJkZjhhNmNmYjQ3Li5iYTM0ZTFhNWM1OTEg MTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZv LmgKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaAo+ ID4gPiBAQCAtMTgwLDYgKzE4MCw3IEBAIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7Cj4gPiA+ ICAJfSBkaXNwbGF5Owo+ID4gPiAgCj4gPiA+ICAJdTE2IGRkYl9zaXplOyAvKiBpbiBibG9ja3Mg Ki8KPiA+ID4gKwl1OCBzdXBwb3J0ZWRfc2xpY2VzOyAvKiBudW1iZXIgb2YgREJ1ZiBzbGljZXMg Ki8KPiA+ID4gIAo+ID4gPiAgCS8qIFJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSB2YXJpb3VzIGRp c3BsYXkgcGlwZXMgYW5kCj4gPiA+IHRyYW5zY29kZXJzICovCj4gPiA+ICAJaW50IHBpcGVfb2Zm c2V0c1tJOTE1X01BWF9UUkFOU0NPREVSU107Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwo+ID4gPiBpbmRleCAyZDM4OWU0MzdlODcuLjFlYTgxYWI5MjQyOSAxMDA2NDQKPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiA+IEBAIC0zNTg2LDI0ICszNTg2LDIwIEBAIGJv b2wgaWxrX2Rpc2FibGVfbHBfd20oc3RydWN0IGRybV9kZXZpY2UKPiA+ID4gKmRldikKPiA+ID4g IAlyZXR1cm4gX2lsa19kaXNhYmxlX2xwX3dtKGRldl9wcml2LCBXTV9ESVJUWV9MUF9BTEwpOwo+ ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC1zdGF0aWMgdTggaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNl c19udW0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gKmRldl9wcml2KQo+ID4gPiArc3Rh dGljIHU4IGludGVsX2VuYWJsZWRfZGJ1Zl9zbGljZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUK PiA+ID4gKmRldl9wcml2KQo+ID4gPiAgewo+ID4gPiAtCXU4IGVuYWJsZWRfc2xpY2VzOwo+ID4g PiAtCj4gPiA+IC0JLyogU2xpY2UgMSB3aWxsIGFsd2F5cyBiZSBlbmFibGVkICovCj4gPiA+IC0J ZW5hYmxlZF9zbGljZXMgPSAxOwo+ID4gPiArCXU4IGVuYWJsZWRfc2xpY2VzID0gMDsKPiA+ID4g IAo+ID4gPiAgCS8qIEdlbiBwcmlvciB0byBHRU4xMSBoYXZlIG9ubHkgb25lIERCdWYgc2xpY2Ug Ki8KPiA+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ID4gPiAtCQlyZXR1cm4g ZW5hYmxlZF9zbGljZXM7Cj4gPiA+ICsJCXJldHVybiBEQlVGX1MxX0JJVDsKPiA+IAo+ID4gSSdk IG51a2UgdGhpcyBzcGVjaWFsIGNhc2UgZW50aXJlbHkgYW5kIGp1c3QgcmVhZCBldmVyeXRoaW5n IGZyb20gdGhlCj4gPiBody4gQXNzdW1pbmcgd2UgbmVlZCByZWFkb3V0IHNvbWV3aGVyZS4KPiAK PiBXZSBoYXZlIGl0IHRoYXQgd2F5IGhhcmRjb2RlZCByaWdodCBub3cgaW4gZHJtLXRpcC4gSSB0 aGluayB0aGlzIGlzIGEKPiBzdWJqZWN0IHRvIG90aGVyIHBhdGNoLCBidXQgbm90IHRoaXMgY2hh bmdlLiBBcyBJIHVuZGVyc3RhbmQgd2UgbmVlZCAKPiB0byBmaXJzdCBmaWd1cmUgb3V0IGhvdyB0 byBkbyBpdCBwcm9wZXJseS4gCj4gVGhpcyBwYXRjaCBhbnl3YXkgbWFrZXMgaXQgYmV0dGVyIGJ5 IGF0IGxlYXN0IHJlbW92aW5nIGhhcmRjb2RlZAo+IHJlbGF0aW9uIGJldHdlZW4gbnVtYmVyIG9m IHNsaWNlcyBhbmQgd2hpY2ggc2xpY2VzIGFyZSBlbmFibGVkLgo+IFdpdGggY3VycmVudCBjb2Rl IHRoZXJlIGlzIG5vIHdheSBmb3IgZXhhbXBsZSB0byBlbmFibGUgc2Vjb25kIERCdWYKPiBzbGlj ZSBvbmx5LCB3aGljaCBpcyByZXF1aXJlZCBieSBCU3BlYy4KPiAKPiA+IAo+ID4gPiAgCj4gPiA+ IC0JLyoKPiA+ID4gLQkgKiBGSVhNRTogZm9yIG5vdyB3ZSdsbCBvbmx5IGV2ZXIgdXNlIDEgc2xp Y2U7IHByZXRlbmQgdGhhdCB3ZQo+ID4gPiBoYXZlCj4gPiA+IC0JICogb25seSB0aGF0IDEgc2xp Y2UgZW5hYmxlZCB1bnRpbCB3ZSBoYXZlIGEgcHJvcGVyIHdheSBmb3Igb24tCj4gPiA+IGRlbWFu ZAo+ID4gPiAtCSAqIHRvZ2dsaW5nIG9mIHRoZSBzZWNvbmQgc2xpY2UuCj4gPiA+IC0JICovCj4g PiA+IC0JaWYgKDAgJiYgSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9XRVJfU1RBVEUp Cj4gPiA+IC0JCWVuYWJsZWRfc2xpY2VzKys7Cj4gPiA+ICsJLyogQ2hlY2sgaWYgc2Vjb25kIERC dWYgc2xpY2UgaXMgZW5hYmxlZCAqLwo+ID4gPiArCWlmIChJOTE1X1JFQUQoREJVRl9DVExfUzEp ICYgREJVRl9QT1dFUl9TVEFURSkKPiA+ID4gKwkJZW5hYmxlZF9zbGljZXMgfD0gREJVRl9TMV9C SVQ7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9X RVJfU1RBVEUpCj4gPiA+ICsJCWVuYWJsZWRfc2xpY2VzIHw9IERCVUZfUzJfQklUOwo+ID4gPiAg Cj4gPiA+ICAJcmV0dXJuIGVuYWJsZWRfc2xpY2VzOwo+ID4gPiAgfQo+ID4gPiBAQCAtMzgxMiwz NiArMzgwOCwzOCBAQCBzdGF0aWMgdTE2IGludGVsX2dldF9kZGJfc2l6ZShzdHJ1Y3QKPiA+ID4g ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAJCQkgICAgICBjb25zdCBpbnQgbnVt X2FjdGl2ZSwKPiA+ID4gIAkJCSAgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYikK PiA+ID4gIHsKPiA+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRf bW9kZTsKPiA+ID4gLQl1NjQgdG90YWxfZGF0YV9idzsKPiA+ID4gIAl1MTYgZGRiX3NpemUgPSBJ TlRFTF9JTkZPKGRldl9wcml2KS0+ZGRiX3NpemU7Cj4gPiA+IC0KPiA+ID4gIAlXQVJOX09OKGRk Yl9zaXplID09IDApOwo+ID4gPiAgCj4gPiA+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAx MSkKPiA+ID4gIAkJcmV0dXJuIGRkYl9zaXplIC0gNDsgLyogNCBibG9ja3MgZm9yIGJ5cGFzcyBw YXRoCj4gPiA+IGFsbG9jYXRpb24gKi8KPiA+ID4gIAo+ID4gPiAtCWFkanVzdGVkX21vZGUgPSAm Y3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKPiA+ID4gLQl0b3RhbF9kYXRhX2J3ID0gdG90 YWxfZGF0YV9yYXRlICoKPiA+ID4gZHJtX21vZGVfdnJlZnJlc2goYWRqdXN0ZWRfbW9kZSk7Cj4g PiA+ICsJcmV0dXJuIGRkYl9zaXplOwo+ID4gPiArfQo+ID4gPiAgCj4gPiA+IC0JLyoKPiA+ID4g LQkgKiAxMkdCL3MgaXMgbWF4aW11bSBCVyBzdXBwb3J0ZWQgYnkgc2luZ2xlIERCdWYgc2xpY2Uu Cj4gPiA+IC0JICoKPiA+ID4gLQkgKiBGSVhNRSBkYnVmIHNsaWNlIGNvZGUgaXMgYnJva2VuOgo+ ID4gPiAtCSAqIC0gbXVzdCB3YWl0IGZvciBwbGFuZXMgdG8gc3RvcCB1c2luZyB0aGUgc2xpY2Ug YmVmb3JlCj4gPiA+IHBvd2VyaW5nIGl0IG9mZgo+ID4gPiAtCSAqIC0gcGxhbmUgc3RyYWRkbGlu ZyBib3RoIHNsaWNlcyBpcyBpbGxlZ2FsIGluIG11bHRpLXBpcGUKPiA+ID4gc2NlbmFyaW9zCj4g PiA+IC0JICogLSBzaG91bGQgdmFsaWRhdGUgd2Ugc3RheSB3aXRoaW4gdGhlIGh3IGJhbmR3aWR0 aCBsaW1pdHMKPiA+ID4gLQkgKi8KPiA+ID4gLQlpZiAoMCAmJiAobnVtX2FjdGl2ZSA+IDEgfHwg dG90YWxfZGF0YV9idyA+PSBHQnBzKDEyKSkpIHsKPiA+ID4gLQkJZGRiLT5lbmFibGVkX3NsaWNl cyA9IDI7Cj4gPiA+IC0JfSBlbHNlIHsKPiA+ID4gLQkJZGRiLT5lbmFibGVkX3NsaWNlcyA9IDE7 Cj4gPiA+IC0JCWRkYl9zaXplIC89IDI7Cj4gPiA+IC0JfQo+ID4gPiArLyoKPiA+ID4gKyAqIENh bGN1bGF0ZSBpbml0aWFsIERCdWYgc2xpY2Ugb2Zmc2V0LCBiYXNlZCBvbiBzbGljZSBzaXplCj4g PiA+ICsgKiBhbmQgbWFzayhpLmUgaWYgc2xpY2Ugc2l6ZSBpcyAxMDI0IGFuZCBzZWNvbmQgc2xp Y2UgaXMgZW5hYmxlZAo+ID4gPiArICogb2Zmc2V0IHdvdWxkIGJlIDEwMjQpCj4gPiA+ICsgKi8K PiA+ID4gK3N0YXRpYyB1MzIgc2tsX2dldF9maXJzdF9kYnVmX3NsaWNlX29mZnNldCh1MzIgZGJ1 Zl9zbGljZV9tYXNrLAo+ID4gPiArCQkJCQkgICB1MzIgc2xpY2Vfc2l6ZSwgdTMyCj4gPiA+IGRk Yl9zaXplKQo+ID4gPiArewo+ID4gPiArCXUzMiBvZmZzZXQgPSAwOwo+ID4gPiAgCj4gPiA+IC0J cmV0dXJuIGRkYl9zaXplOwo+ID4gPiArCWlmICghZGJ1Zl9zbGljZV9tYXNrKQo+ID4gPiArCQly ZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiArCW9mZnNldCA9IChmZnMoZGJ1Zl9zbGljZV9tYXNrKSAt IDEpICogc2xpY2Vfc2l6ZTsKPiA+ID4gKwo+ID4gPiArCVdBUk5fT04ob2Zmc2V0ID49IGRkYl9z aXplKTsKPiA+ID4gKwlyZXR1cm4gb2Zmc2V0Owo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICtzdGF0 aWMgdTMyIGk5MTVfZ2V0X2FsbG93ZWRfZGJ1Zl9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl Cj4gPiA+ICpkZXZfcHJpdiwKPiA+ID4gKwkJCQkgICAgICBpbnQgcGlwZSwgdTMyIGFjdGl2ZV9w aXBlcywKPiA+ID4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4g PiAqY3J0Y19zdGF0ZSk7Cj4gPiA+ICsKPiA+ID4gIHN0YXRpYyB2b2lkCj4gPiA+ICBza2xfZGRi X2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ ICpkZXZfcHJpdiwKPiA+ID4gIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ ID4gPiAqY3J0Y19zdGF0ZSwKPiA+ID4gQEAgLTM4NTcsNyArMzg1NSwxNCBAQCBza2xfZGRiX2dl dF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdAo+ID4gPiBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiA+ID4gIAl1MzIgcGlwZV93aWR0aCA9IDAsIHRvdGFsX3dpZHRoID0gMCwgd2lk dGhfYmVmb3JlX3BpcGUgPSAwOwo+ID4gPiAgCWVudW0gcGlwZSBmb3JfcGlwZSA9IHRvX2ludGVs X2NydGMoZm9yX2NydGMpLT5waXBlOwo+ID4gPiAgCXUxNiBkZGJfc2l6ZTsKPiA+ID4gKwl1MzIg ZGRiX3JhbmdlX3NpemU7Cj4gPiA+ICAJdTMyIGk7Cj4gPiA+ICsJdTMyIGRidWZfc2xpY2VfbWFz azsKPiA+ID4gKwl1MzIgYWN0aXZlX3BpcGVzOwo+ID4gPiArCXUzMiBvZmZzZXQ7Cj4gPiA+ICsJ dTMyIHNsaWNlX3NpemU7Cj4gPiA+ICsJdTMyIHRvdGFsX3NsaWNlX21hc2s7Cj4gPiA+ICsJdTMy IHN0YXJ0LCBlbmQ7Cj4gPiA+ICAKPiA+ID4gIAlpZiAoV0FSTl9PTighc3RhdGUpIHx8ICFjcnRj X3N0YXRlLT5ody5hY3RpdmUpIHsKPiA+ID4gIAkJYWxsb2MtPnN0YXJ0ID0gMDsKPiA+ID4gQEAg LTM4NjYsMTQgKzM4NzEsMjMgQEAgc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhz dHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAJCXJldHVybjsK PiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gLQlpZiAoaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlX2No YW5nZXMpCj4gPiA+ICsJaWYgKGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2VzKSB7Cj4g PiA+ICAJCSpudW1fYWN0aXZlID0gaHdlaWdodDgoaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlcyk7 Cj4gPiA+IC0JZWxzZQo+ID4gPiArCQlhY3RpdmVfcGlwZXMgPSBpbnRlbF9zdGF0ZS0+YWN0aXZl X3BpcGVzOwo+ID4gPiArCX0gZWxzZSB7Cj4gPiA+ICAJCSpudW1fYWN0aXZlID0gaHdlaWdodDgo ZGV2X3ByaXYtPmFjdGl2ZV9waXBlcyk7Cj4gPiA+ICsJCWFjdGl2ZV9waXBlcyA9IGRldl9wcml2 LT5hY3RpdmVfcGlwZXM7Cj4gPiA+ICsJfQo+ID4gPiAgCj4gPiA+ICAJZGRiX3NpemUgPSBpbnRl bF9nZXRfZGRiX3NpemUoZGV2X3ByaXYsIGNydGNfc3RhdGUsCj4gPiA+IHRvdGFsX2RhdGFfcmF0 ZSwKPiA+ID4gIAkJCQkgICAgICAqbnVtX2FjdGl2ZSwgZGRiKTsKPiA+ID4gIAo+ID4gPiArCURS TV9ERUJVR19LTVMoIkdvdCB0b3RhbCBkZGIgc2l6ZSAlZFxuIiwgZGRiX3NpemUpOwo+ID4gPiAr Cj4gPiA+ICsJc2xpY2Vfc2l6ZSA9IGRkYl9zaXplIC8gSU5URUxfSU5GTyhkZXZfcHJpdiktPnN1 cHBvcnRlZF9zbGljZXM7Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVCVUdfS01TKCJHb3QgREJ1ZiBz bGljZSBzaXplICVkXG4iLCBzbGljZV9zaXplKTsKPiA+ID4gKwo+ID4gPiAgCS8qCj4gPiA+ICAJ ICogSWYgdGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydzIG9yIHRoZXJl IGlzIG5vCj4gPiA+ICAJICogbW9kZXNldCByZXF1ZXN0LCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0 byByZWNhbGN1bGF0ZTsKPiA+ID4gQEAgLTM4OTEsMjAgKzM5MDUsNzAgQEAgc2tsX2RkYl9nZXRf cGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhzdHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gPiA+ICAJCXJldHVybjsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gKwkvKgo+ID4g PiArCSAqIEdldCBhbGxvd2VkIERCdWYgc2xpY2VzIGZvciBjb3JyZXNwb25kZW50IHBpcGUgYW5k IHBsYXRmb3JtLgo+ID4gPiArCSAqLwo+ID4gPiArCWRidWZfc2xpY2VfbWFzayA9IGk5MTVfZ2V0 X2FsbG93ZWRfZGJ1Zl9tYXNrKGRldl9wcml2LAo+ID4gPiBmb3JfcGlwZSwKPiA+ID4gKwkJCQkJ CSAgICAgYWN0aXZlX3BpcGVzLAo+ID4gPiBjcnRjX3N0YXRlKTsKPiA+IAo+ID4gUXVpdGUgYSBm ZXcgcmVkdW5kYW50IGFyZ3VtZW50cy4gVGhlIGZ1bmN0aW9uIG5hbWUgbG9va3MgYWxpZW4uCj4g PiAKPiA+IHNrbF9jcnRjX3Bvc3NpYmxlX2RidWZfc2xpY2VzKCkgb3Igc29tZXRoaW5nIHBlcmhh cHM/Cj4gPiAKPiA+ID4gKwo+ID4gPiArCURSTV9ERUJVR19LTVMoIkRCdWYgc2xpY2UgbWFzayAl eCBwaXBlICVkIGFjdGl2ZSBwaXBlcyAleFxuIiwKPiA+ID4gKwkJICAgICAgZGJ1Zl9zbGljZV9t YXNrLAo+ID4gPiArCQkgICAgICBmb3JfcGlwZSwgYWN0aXZlX3BpcGVzKTsKPiA+ID4gKwo+ID4g PiArCS8qCj4gPiA+ICsJICogRmlndXJlIG91dCBhdCB3aGljaCBEQnVmIHNsaWNlIHdlIHN0YXJ0 LCBpLmUgaWYgd2Ugc3RhcnQgYXQKPiA+ID4gRGJ1ZiBTMgo+ID4gPiArCSAqIGFuZCBzbGljZSBz aXplIGlzIDEwMjQsIHRoZSBvZmZzZXQgd291bGQgYmUgMTAyNAo+ID4gPiArCSAqLwo+ID4gPiAr CW9mZnNldCA9IHNrbF9nZXRfZmlyc3RfZGJ1Zl9zbGljZV9vZmZzZXQoZGJ1Zl9zbGljZV9tYXNr LAo+ID4gPiArCQkJCQkJIHNsaWNlX3NpemUsIGRkYl9zaXplKTsKPiA+ID4gKwo+ID4gPiArCS8q Cj4gPiA+ICsJICogRmlndXJlIG91dCB0b3RhbCBzaXplIG9mIGFsbG93ZWQgREJ1ZiBzbGljZXMs IHdoaWNoIGlzCj4gPiA+IGJhc2ljYWxseQo+ID4gPiArCSAqIGEgbnVtYmVyIG9mIGFsbG93ZWQg c2xpY2VzIGZvciB0aGF0IHBpcGUgbXVsdGlwbGllZCBieSBzbGljZQo+ID4gPiBzaXplLgo+ID4g PiArCSAqIEluc2lkZSBvZiB0aGlzCj4gPiA+ICsJICogcmFuZ2UgZGRiIGVudHJpZXMgYXJlIHN0 aWxsIGFsbG9jYXRlZCBpbiBwcm9wb3J0aW9uIHRvCj4gPiA+IGRpc3BsYXkgd2lkdGguCj4gPiA+ ICsJICovCj4gPiA+ICsJZGRiX3JhbmdlX3NpemUgPSBod2VpZ2h0OChkYnVmX3NsaWNlX21hc2sp ICogc2xpY2Vfc2l6ZTsKPiA+ID4gKwo+ID4gPiAgCS8qCj4gPiA+ICAJICogV2F0ZXJtYXJrL2Rk YiByZXF1aXJlbWVudCBoaWdobHkgZGVwZW5kcyB1cG9uIHdpZHRoIG9mIHRoZQo+ID4gPiAgCSAq IGZyYW1lYnVmZmVyLCBTbyBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgRERCIGVxdWFsbHkgYW1vbmcK PiA+ID4gcGlwZXMKPiA+ID4gIAkgKiBkaXN0cmlidXRlIEREQiBiYXNlZCBvbiByZXNvbHV0aW9u L3dpZHRoIG9mIHRoZSBkaXNwbGF5Lgo+ID4gPiAgCSAqLwo+ID4gPiArCXRvdGFsX3NsaWNlX21h c2sgPSBkYnVmX3NsaWNlX21hc2s7Cj4gPiAKPiA+IElzbid0IHRoaXMgYWxyZWFkeSB0YWtlbiBj YXJlIGJ5IHRoZSBsb29wIGJlbG93Pwo+ID4gCj4gPiA+ICAJZm9yX2VhY2hfbmV3X2ludGVsX2Ny dGNfaW5fc3RhdGUoaW50ZWxfc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsCj4gPiA+IGkpIHsKPiA+ ID4gIAkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQo+ID4g PiAgCQkJJmNydGNfc3RhdGUtPmh3LmFkanVzdGVkX21vZGU7Cj4gPiA+ICAJCWVudW0gcGlwZSBw aXBlID0gY3J0Yy0+cGlwZTsKPiA+ID4gIAkJaW50IGhkaXNwbGF5LCB2ZGlzcGxheTsKPiA+ID4g KwkJdTMyIHBpcGVfZGJ1Zl9zbGljZV9tYXNrID0gXAo+ID4gPiArCQkJaTkxNV9nZXRfYWxsb3dl ZF9kYnVmX21hc2soZGV2X3ByaXYsCj4gPiA+ICsJCQkJCQlwaXBlLAo+ID4gPiArCQkJCQkJYWN0 aXZlX3BpcGVzLAo+ID4gPiArCQkJCQkJY3J0Y19zdGF0ZSk7Cj4gPiA+ICAKPiA+ID4gIAkJaWYg KCFjcnRjX3N0YXRlLT5ody5lbmFibGUpCj4gPiA+ICAJCQljb250aW51ZTsKPiA+ID4gIAo+ID4g PiArCQkvKgo+ID4gPiArCQkgKiBBY2NvcmRpbmcgdG8gQlNwZWMgcGlwZSBjYW4gc2hhcmUgb25l IGRidWYgc2xpY2UKPiA+ID4gd2l0aCBhbm90aGVyCj4gPiA+ICsJCSAqIHBpcGVzIG9yIHBpcGUg Y2FuIHVzZSBtdWx0aXBsZSBkYnVmcywgaW4gYm90aCBjYXNlcwo+ID4gPiB3ZQo+ID4gPiArCQkg KiBhY2NvdW50IGZvciBvdGhlciBwaXBlcyBvbmx5IGlmIHRoZXkgaGF2ZSBleGFjdGx5Cj4gPiA+ IHNhbWUgbWFzay4KPiA+ID4gKwkJICogSG93ZXZlciB3ZSBuZWVkIHRvIGFjY291bnQgaG93IG1h bnkgc2xpY2VzIHdlIHNob3VsZAo+ID4gPiBlbmFibGUKPiA+ID4gKwkJICogaW4gdG90YWwuCj4g PiA+ICsJCSAqLwo+ID4gPiArCQl0b3RhbF9zbGljZV9tYXNrIHw9IHBpcGVfZGJ1Zl9zbGljZV9t YXNrOwo+ID4gCj4gPiB0b3RhbF9zbGljZV9tYXNrIHdpbGwgbm93IGFjY291bnQgb25seSB0aGUg Y3J0Y3MgaW4gdGhlIHN0YXRlLiBXaGF0Cj4gPiBoYXBwZW5zIHRvIHRoZSBvdGhlciBwaXBlcycg c2xpY2VzPwo+IAo+IFllcyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgcGlwZXMvY3J0 Y3MgaGVyZSwgaG93ZXZlcgo+IGZvciBnZXR0aW5nIGNvcnJlY3QgZGJ1ZiBzbGljZSBtYXNrIG1v c3QgaW1wb3J0YW50IGlzIGFjdGl2ZV9waXBlcy4KPiBIb3dldmVyIHllcywgSSB3aWxsIGNoYW5n ZSB0aGUgbG9vcCBmb3IgaXQgdG8gYmUgbW9yZSBjb3JyZWN0Lgo+IAo+ID4gCj4gPiA+ICsKPiA+ ID4gKwkJLyoKPiA+ID4gKwkJICogRG8gbm90IGFjY291bnQgcGlwZXMgdXNpbmcgb3RoZXIgc2xp Y2Ugc2V0cwo+ID4gPiArCQkgKiBsdWNraWx5IGFzIG9mIGN1cnJlbnQgQlNwZWMgc2xpY2Ugc2V0 cyBkbyBub3QKPiA+ID4gcGFydGlhbGx5Cj4gPiA+ICsJCSAqIGludGVyc2VjdChwaXBlcyBzaGFy ZSBlaXRoZXIgc2FtZSBvbmUgc2xpY2Ugb3Igc2FtZQo+ID4gPiBzbGljZSBzZXQKPiA+ID4gKwkJ ICogaS5lIG5vIHBhcnRpYWwgaW50ZXJzZWN0aW9uKSwgc28gaXQgaXMgZW5vdWdoIHRvCj4gPiA+ IGNoZWNrIGZvcgo+ID4gPiArCQkgKiBlcXVhbGl0eSBmb3Igbm93Lgo+ID4gPiArCQkgKi8KPiA+ ID4gKwkJaWYgKGRidWZfc2xpY2VfbWFzayAhPSBwaXBlX2RidWZfc2xpY2VfbWFzaykKPiA+ID4g KwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICAJCWRybV9tb2RlX2dldF9odl90aW1pbmcoYWRq dXN0ZWRfbW9kZSwgJmhkaXNwbGF5LAo+ID4gPiAmdmRpc3BsYXkpOwo+ID4gPiAgCQl0b3RhbF93 aWR0aCArPSBoZGlzcGxheTsKPiA+ID4gIAo+ID4gPiBAQCAtMzkxNCw4ICszOTc4LDE5IEBAIHNr bF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoc3RydWN0Cj4gPiA+IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ID4gPiAgCQkJcGlwZV93aWR0aCA9IGhkaXNwbGF5Owo+ID4gPiAg CX0KPiA+ID4gIAo+ID4gPiAtCWFsbG9jLT5zdGFydCA9IGRkYl9zaXplICogd2lkdGhfYmVmb3Jl X3BpcGUgLyB0b3RhbF93aWR0aDsKPiA+ID4gLQlhbGxvYy0+ZW5kID0gZGRiX3NpemUgKiAod2lk dGhfYmVmb3JlX3BpcGUgKyBwaXBlX3dpZHRoKSAvCj4gPiA+IHRvdGFsX3dpZHRoOwo+ID4gPiAr CWRkYi0+ZW5hYmxlZF9zbGljZXMgPSB0b3RhbF9zbGljZV9tYXNrOwo+ID4gPiArCj4gPiA+ICsJ c3RhcnQgPSBkZGJfcmFuZ2Vfc2l6ZSAqIHdpZHRoX2JlZm9yZV9waXBlIC8gdG90YWxfd2lkdGg7 Cj4gPiA+ICsJZW5kID0gZGRiX3JhbmdlX3NpemUgKiAod2lkdGhfYmVmb3JlX3BpcGUgKyBwaXBl X3dpZHRoKSAvCj4gPiA+IHRvdGFsX3dpZHRoOwo+ID4gPiArCj4gPiA+ICsJYWxsb2MtPnN0YXJ0 ID0gb2Zmc2V0ICsgc3RhcnQ7Cj4gPiA+ICsJYWxsb2MtPmVuZCA9IG9mZnNldCArIGVuZDsKPiA+ ID4gKwo+ID4gPiArCURSTV9ERUJVR19LTVMoIlBpcGUgJWQgZGRiICVkLSVkXG4iLCBmb3JfcGlw ZSwKPiA+ID4gKwkJICAgICAgYWxsb2MtPnN0YXJ0LCBhbGxvYy0+ZW5kKTsKPiA+ID4gKwlEUk1f REVCVUdfS01TKCJFbmFibGVkIGRkYiBzbGljZXMgbWFzayAleCBudW0gc3VwcG9ydGVkICVkXG4i LAo+ID4gPiArCQkgICAgICBkZGItPmVuYWJsZWRfc2xpY2VzLAo+ID4gPiArCQkgICAgICBJTlRF TF9JTkZPKGRldl9wcml2KS0+c3VwcG9ydGVkX3NsaWNlcyk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ ID4gIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfd21fcGFyYW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlCj4gPiA+ICpjcnRjX3N0YXRlLAo+ID4gPiBAQCAtNDAzNiw3ICs0MTExLDggQEAg dm9pZCBza2xfcGlwZV9kZGJfZ2V0X2h3X3N0YXRlKHN0cnVjdAo+ID4gPiBpbnRlbF9jcnRjICpj cnRjLAo+ID4gPiAgdm9pZCBza2xfZGRiX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAJCQkgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRk YiAvKiBvdXQgKi8pCj4gPiA+ICB7Cj4gPiA+IC0JZGRiLT5lbmFibGVkX3NsaWNlcyA9IGludGVs X2VuYWJsZWRfZGJ1Zl9zbGljZXNfbnVtKGRldl9wcml2KTsKPiA+ID4gKwlkZGItPmVuYWJsZWRf c2xpY2VzID0gaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICsJRFJN X0RFQlVHX0tNUygiR290IGh3IGRidWYgc2xpY2VzIG1hc2sgJXhcbiIsIGRkYi0KPiA+ID4gPmVu YWJsZWRfc2xpY2VzKTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAgLyoKPiA+ID4gQEAgLTQxNjQs NiArNDI0MCwyNDEgQEAgc2tsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3RydWN0Cj4g PiA+IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiA+ICAJcmV0dXJuIHRvdGFsX2Rh dGFfcmF0ZTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiArc3RhdGljIHVpbnRfZml4ZWRfMTZfMTZf dAo+ID4gPiAraWNsX3BpcGVfZG93bnNjYWxlX2Ftb3VudChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZQo+ID4gPiAqY3J0Y19zdGF0ZSkKPiA+ID4gK3sKPiA+ID4gKwl1MzIgc3JjX3csIHNy Y19oLCBkc3RfdywgZHN0X2g7Cj4gPiA+ICsJdWludF9maXhlZF8xNl8xNl90IGZwX3dfcmF0aW8s IGZwX2hfcmF0aW87Cj4gPiA+ICsJdWludF9maXhlZF8xNl8xNl90IGRvd25zY2FsZV9oLCBkb3du c2NhbGVfdzsKPiA+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRf bW9kZSA9ICZjcnRjX3N0YXRlLQo+ID4gPiA+aHcuYWRqdXN0ZWRfbW9kZTsKPiA+ID4gKwo+ID4g PiArCXNyY193ID0gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdzsKPiA+ID4gKwlzcmNfaCA9IGNydGNf c3RhdGUtPnBpcGVfc3JjX2g7Cj4gPiA+ICsJZHN0X3cgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hk aXNwbGF5Owo+ID4gPiArCWRzdF9oID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKPiA+ ID4gKwo+ID4gPiArCWZwX3dfcmF0aW8gPSBkaXZfZml4ZWQxNihzcmNfdywgZHN0X3cpOwo+ID4g PiArCWZwX2hfcmF0aW8gPSBkaXZfZml4ZWQxNihzcmNfaCwgZHN0X2gpOwo+ID4gPiArCWRvd25z Y2FsZV93ID0gbWF4X2ZpeGVkMTYoZnBfd19yYXRpbywgdTMyX3RvX2ZpeGVkMTYoMSkpOwo+ID4g PiArCWRvd25zY2FsZV9oID0gbWF4X2ZpeGVkMTYoZnBfaF9yYXRpbywgdTMyX3RvX2ZpeGVkMTYo MSkpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIG11bF9maXhlZDE2KGRvd25zY2FsZV93LCBkb3du c2NhbGVfaCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3VpbnRfZml4ZWRfMTZfMTZfdAo+ID4g PiAraWNsX2dldF9waXBlX3JhdGlvKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gPiAr CWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmRybV9wbGFuZV9zdGF0ZTsKPiA+ID4gKwl1 aW50X2ZpeGVkXzE2XzE2X3QgcGlwZV9kb3duc2NhbGUsIHBpcGVfcmF0aW87Cj4gPiA+ICsJdWlu dF9maXhlZF8xNl8xNl90IG1heF9kb3duc2NhbGUgPSB1MzJfdG9fZml4ZWQxNigxKTsKPiA+ID4g KwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFw aS5jcnRjKTsKPiA+ID4gKwo+ID4gPiArCWlmICghY3J0Y19zdGF0ZS0+dWFwaS5lbmFibGUpCj4g PiA+ICsJCXJldHVybiBtYXhfZG93bnNjYWxlOwo+ID4gPiArCj4gPiA+ICsJZHJtX2F0b21pY19j cnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lX3N0YXRlKHBsYW5lLAo+ID4gPiBkcm1fcGxhbmVfc3Rh dGUsICZjcnRjX3N0YXRlLT51YXBpKSB7Cj4gPiA+ICsJCXVpbnRfZml4ZWRfMTZfMTZfdCBwbGFu ZV9kb3duc2NhbGU7Cj4gPiA+ICsJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUgPQo+ID4gPiArCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUoZHJtX3BsYW5lX3N0YXRl KTsKPiA+ID4gKwo+ID4gPiArCQlpZiAoIWludGVsX3dtX3BsYW5lX3Zpc2libGUoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUpKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJcGxh bmVfZG93bnNjYWxlID0KPiA+ID4gc2tsX3BsYW5lX2Rvd25zY2FsZV9hbW91bnQoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUpOwo+ID4gPiArCj4gPiA+ICsJCURSTV9ERUJVR19LTVMoIlBsYW5lICVk IGRvd25zY2FsZSBhbW91bnQgJWQuJWRcbiIsCj4gPiA+ICsJCQkgICAgICB0b19pbnRlbF9wbGFu ZShwbGFuZSktPmlkLAo+ID4gPiArCQkJICAgICAgcGxhbmVfZG93bnNjYWxlLnZhbCA+PiAxNiwK PiA+ID4gKwkJCSAgICAgIHBsYW5lX2Rvd25zY2FsZS52YWwgJiAweGZmZmYpOwo+ID4gPiArCj4g PiA+ICsJCW1heF9kb3duc2NhbGUgPSBtYXhfZml4ZWQxNihwbGFuZV9kb3duc2NhbGUsCj4gPiA+ IG1heF9kb3duc2NhbGUpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCj4gPiA+ICsJcGlwZV9k b3duc2NhbGUgPSBpY2xfcGlwZV9kb3duc2NhbGVfYW1vdW50KGNydGNfc3RhdGUpOwo+ID4gPiAr Cj4gPiA+ICsJRFJNX0RFQlVHX0tNUygiUGlwZSAlZCBkb3duc2NhbGUgYW1vdW50ICVkLiVkXG4i LAo+ID4gPiArCQkgICAgICAgY3J0Yy0+cGlwZSwgcGlwZV9kb3duc2NhbGUudmFsID4+IDE2LAo+ ID4gPiArCQkgICAgICAgcGlwZV9kb3duc2NhbGUudmFsICYgMHhmZmZmKTsKPiA+ID4gKwo+ID4g PiArCXBpcGVfZG93bnNjYWxlID0gbXVsX2ZpeGVkMTYocGlwZV9kb3duc2NhbGUsIG1heF9kb3du c2NhbGUpOwo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBDb252ZXJ0IHJlc3VsdCB0byBw ZXJjZW50YWdlOiBnZXQgdGhlIGFjdHVhbCByYXRpbyBpbnN0ZWFkCj4gPiA+IG9mIHJhdGUsCj4g PiA+ICsJICogdGhlbiBtdWx0aXBseSBieSAxMDAgdG8gZ2V0IHBlcmNlbnRhZ2UuCj4gPiA+ICsJ ICovCj4gPiA+ICsJcGlwZV9yYXRpbyA9IHUzMl90b19maXhlZDE2KDEwMCAqIGRpdl9yb3VuZF91 cF91MzJfZml4ZWQxNigxLAo+ID4gPiBwaXBlX2Rvd25zY2FsZSkpOwo+ID4gPiArCj4gPiA+ICsJ RFJNX0RFQlVHX0tNUygiUGlwZSAlZCByYXRpbyAlZC4lZFxuIiwgY3J0Yy0+cGlwZSwKPiA+ID4g KwkJICAgICAgcGlwZV9yYXRpby52YWwgPj4gMTYsIHBpcGVfcmF0aW8udmFsICYgMHhmZmZmKTsK PiA+ID4gKwo+ID4gPiArCXJldHVybiBwaXBlX3JhdGlvOwo+ID4gPiArfQo+ID4gCj4gPiBZdWNr LiBJIGp1c3Qga2lsbGVkIHRoZXNlLgo+IAo+IEkgc3RpbGwgbmVlZCBwaXBlX3JhdGlvIGZybyBJ Q0wgYXMgeW91IGtub3csIHRoaXMgaXMgZGljdGF0ZWQgYnkgQlNwZWMsCj4gbm90IGJ5IG1lLgoK VGhhdCBwYXJ0IG9mIHRoZSBzcGVjIGlzIHByZXR0eSBjcmF6eSBJTU8uIEkgdGhpbmsgd2Ugc2hv dWxkIGp1c3QgaWdub3JlCml0IGZvciBub3cuIEFsc28gbm90aGluZyBpbiB0aGVyZSBzYXlzIHdl IG11c3QgdXNlIGJvdGggc2xpY2VzIGZvciBhCnNpbmdsZSBwaXBlIHNvIGlnbm9yaW5nIGRvZXNu J3QgZXZlbiB2aW9sYXRlIHRoZSBzcGVjIGluIGFueSB3YXkuCgo+IAo+ID4gCj4gPiA+ICsKPiA+ ID4gK3N0cnVjdCBkYnVmX3NsaWNlX2NvbmZfZW50cnkgewo+ID4gPiArCXUzMiBkYnVmX21hc2tb STkxNV9NQVhfUElQRVNdOwo+ID4gPiArCXUzMiBhY3RpdmVfcGlwZXM7Cj4gPiA+ICt9Owo+ID4g PiArCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQV9EQlVGX1NMSUNFUyhEQnVmMSkg IFwKPiA+ID4gKwl7IHsgREJ1ZjEsIDAsIDAsIDAgfSwgQklUKFBJUEVfQSkgfQo+ID4gPiArI2Rl ZmluZSBJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCdWYxKSAgXAo+ID4gPiArCXsgeyAwLCBEQnVm MSwgMCwgMCB9LCBCSVQoUElQRV9CKSB9Cj4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0NfREJVRl9T TElDRVMoREJ1ZjEpICBcCj4gPiA+ICsJeyB7IDAsIDAsIERCdWYxLCAwIH0sIEJJVChQSVBFX0Mp IH0KPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfRF9EQlVGX1NMSUNFUyhEQnVmMSkgIFwKPiA+ID4g Kwl7IHsgMCwgMCwgMCwgREJ1ZjEgfSwgQklUKFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJQ0xf UElQRV9BQl9EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAgXAo+ID4gPiArCXsgeyBEQnVmMSwg REJ1ZjIsIDAsIDAgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9CKSB9Cj4gPiA+ICsjZGVmaW5l IElDTF9QSVBFX0JDX0RCVUZfU0xJQ0VTKERCdWYxLCBEQnVmMikgICBcCj4gPiA+ICsJeyB7IDAs IERCdWYxLCBEQnVmMiwgMCB9LCBCSVQoUElQRV9CKSB8IEJJVChQSVBFX0MpIH0KPiA+ID4gKyNk ZWZpbmUgSUNMX1BJUEVfQkRfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyKSAgIFwKPiA+ID4gKwl7 IHsgMCwgREJ1ZjEsIDAsIERCdWYyIH0sIEJJVChQSVBFX0IpIHwgQklUKFBJUEVfRCkgfQo+ID4g PiArI2RlZmluZSBJQ0xfUElQRV9BQ19EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAgXAo+ID4g PiArCXsgeyBEQnVmMSwgMCwgREJ1ZjIsIDAgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9DKSB9 Cj4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0FEX0RCVUZfU0xJQ0VTKERCdWYxLCBEQnVmMikgICBc Cj4gPiA+ICsJeyB7IERCdWYxLCAwLCAwLCBEQnVmMiB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBF X0QpIH0KPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQ0RfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYy KSAgIFwKPiA+ID4gKwl7IHsgMCwgMCwgREJ1ZjEsIERCdWYyIH0sIEJJVChQSVBFX0MpIHwgQklU KFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJ1ZjEs IERCdWYyLCBEQnVmMykgIFwKPiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCBEQnVmMywgMCB9LCBC SVQoUElQRV9BKSB8IEJJVChQSVBFX0IpIHwKPiA+ID4gQklUKFBJUEVfQykgfQo+ID4gPiArI2Rl ZmluZSBJQ0xfUElQRV9BQ0RfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ ID4gKwl7IHsgREJ1ZjEsIDAsIERCdWYyLCBEQnVmMyB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBF X0MpIHwKPiA+ID4gQklUKFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9CQ0RfREJV Rl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gKwl7IHsgMCwgREJ1ZjEsIERC dWYyLCBEQnVmMyB9LCBCSVQoUElQRV9CKSB8IEJJVChQSVBFX0MpIHwKPiA+ID4gQklUKFBJUEVf RCkgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkRfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYy LCBEQnVmMykgIFwKPiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCAwLCBEQnVmMyB9LCBCSVQoUElQ RV9BKSB8IEJJVChQSVBFX0IpIHwKPiA+ID4gQklUKFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJ Q0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gKwl7 IHsgREJ1ZjEsIERCdWYyLCBEQnVmMywgMCB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBFX0IpIHwK PiA+ID4gQklUKFBJUEVfQykgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkNEX0RCVUZfU0xJ Q0VTKERCdWYxLCBEQnVmMiwgREJ1ZjMsIERCdWY0KSAgXAo+ID4gPiArCXsgeyBEQnVmMSwgREJ1 ZjIsIERCdWYzLCBEQnVmNCB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBFX0IpIHwgXAo+ID4gPiAr CQkJCQkgIEJJVChQSVBFX0MpIHwgQklUKFBJUEVfRCkgfQo+ID4gPiArCj4gPiA+ICsvKgo+ID4g PiArICogVGFibGUgdGFrZW4gZnJvbSBCc3BlYyAxMjcxNgo+ID4gPiArICogUGlwZXMgZG8gaGF2 ZSBzb21lIHByZWZlcnJlZCBEQnVmIHNsaWNlIGFmZmluaXR5LAo+ID4gPiArICogcGx1cyB0aGVy ZSBhcmUgc29tZSBoYXJkY29kZWQgcmVxdWlyZW1lbnRzIG9uIGhvdwo+ID4gPiArICogdGhvc2Ug c2hvdWxkIGJlIGRpc3RyaWJ1dGVkIGZvciBtdWx0aXBpcGUgc2NlbmFyaW9zLgo+ID4gPiArICog Rm9yIG1vcmUgREJ1ZiBzbGljZXMgYWxnb3JpdGhtIGNhbiBnZXQgZXZlbiBtb3JlIG1lc3N5Cj4g PiA+ICsgKiBhbmQgbGVzcyByZWFkYWJsZSwgc28gZGVjaWRlZCB0byB1c2UgYSB0YWJsZSBhbG1v c3QKPiA+ID4gKyAqIGFzIGlzIGZyb20gQlNwZWMgaXRzZWxmIC0gdGhhdCB3YXkgaXQgaXMgYXQg bGVhc3QgZWFzaWVyCj4gPiA+ICsgKiB0byBjb21wYXJlLCBjaGFuZ2UgYW5kIGNoZWNrLgo+ID4g PiArICovCj4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IGljbF9hbGxvd2VkX2Ri dWZzW10gPSB7Cj4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4gPiA+ICtJQ0xfUElQRV9B X0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLCAgLyogcGlwZSByYXRpbwo+ ID4gPiA8IDg4LjggKi8KPiA+ID4gK0lDTF9QSVBFX0FfREJVRl9TTElDRVMoREJVRl9TMV9CSVQp LCAgICAgICAgICAgICAgICAvKiBmb3IgcGlwZQo+ID4gPiByYXRpbyA+PSA4OC44ICovCj4gPiA+ ICtJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLCAgLyog cGlwZSByYXRpbwo+ID4gPiA8IDg4LjggKi8KPiA+ID4gK0lDTF9QSVBFX0JfREJVRl9TTElDRVMo REJVRl9TMV9CSVQpLCAgICAgICAgICAgICAgICAvKiBmb3IgcGlwZQo+ID4gPiByYXRpbyA+PSA4 OC44ICovCj4gPiA+ICtJQ0xfUElQRV9DX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9T Ml9CSVQpLCAgLyogcGlwZSByYXRpbwo+ID4gPiA8IDg4LjggKi8KPiA+ID4gK0lDTF9QSVBFX0Nf REJVRl9TTElDRVMoREJVRl9TMl9CSVQpLCAgICAgICAgICAgICAgICAvKiBmb3IgcGlwZQo+ID4g PiByYXRpbyA+PSA4OC44ICovCj4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVGX1Mx X0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUNfREJVRl9TTElDRVMoREJVRl9T MV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gK0lDTF9QSVBFX0JDX0RCVUZfU0xJQ0VTKERCVUZf UzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ICtJQ0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJV Rl9TMV9CSVQsIERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ICt9Owo+ID4gPiArCj4g PiA+ICsvKgo+ID4gPiArICogVGFibGUgdGFrZW4gZnJvbSBCc3BlYyA0OTI1NQo+ID4gPiArICog UGlwZXMgZG8gaGF2ZSBzb21lIHByZWZlcnJlZCBEQnVmIHNsaWNlIGFmZmluaXR5LAo+ID4gPiAr ICogcGx1cyB0aGVyZSBhcmUgc29tZSBoYXJkY29kZWQgcmVxdWlyZW1lbnRzIG9uIGhvdwo+ID4g PiArICogdGhvc2Ugc2hvdWxkIGJlIGRpc3RyaWJ1dGVkIGZvciBtdWx0aXBpcGUgc2NlbmFyaW9z Lgo+ID4gPiArICogRm9yIG1vcmUgREJ1ZiBzbGljZXMgYWxnb3JpdGhtIGNhbiBnZXQgZXZlbiBt b3JlIG1lc3N5Cj4gPiA+ICsgKiBhbmQgbGVzcyByZWFkYWJsZSwgc28gZGVjaWRlZCB0byB1c2Ug YSB0YWJsZSBhbG1vc3QKPiA+ID4gKyAqIGFzIGlzIGZyb20gQlNwZWMgaXRzZWxmIC0gdGhhdCB3 YXkgaXQgaXMgYXQgbGVhc3QgZWFzaWVyCj4gPiA+ICsgKiB0byBjb21wYXJlLCBjaGFuZ2UgYW5k IGNoZWNrLgo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IHRn bF9hbGxvd2VkX2RidWZzW10gPSB7Cj4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4gPiA+ ICtJQ0xfUElQRV9BX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ID4g PiArSUNMX1BJUEVfQl9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERCVUZfUzJfQklUKSwKPiA+ ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBEQlVGX1MyX0JJVCksCj4g PiA+ICtJQ0xfUElQRV9EX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ ID4gPiArSUNMX1BJUEVfQUJfREJVRl9TTElDRVMoREJVRl9TMl9CSVQsIERCVUZfUzFfQklUKSwK PiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCks Cj4gPiA+ICtJQ0xfUElQRV9CQ19EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQp LAo+ID4gPiArSUNMX1BJUEVfQURfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklU KSwKPiA+ID4gK0lDTF9QSVBFX0JEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJ VCksCj4gPiA+ICtJQ0xfUElQRV9DRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9C SVQpLAo+ID4gPiArSUNMX1BJUEVfQUJEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1Mx X0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUJDX0RCVUZfU0xJQ0VTKERCVUZf UzFfQklULCBEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUNEX0RC VUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiAr SUNMX1BJUEVfQkNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwgREJVRl9T Ml9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUJDRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJV Rl9TMV9CSVQsIERCVUZfUzJfQklULAo+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ICt9Owo+ID4g Cj4gPiBNeSBleWVzIQo+ID4gCj4gPiBJIGhhdmUgdG8gdGhpbmsgd2Ugc2hvdWxkIGJlIGFibGUg dG8gcmVkdWNlIGFsbCB0aGF0IHRvIGEgaGFuZGZ1bAo+ID4gb2YgbGluZXMgb2YgY29kZS4KPiAK PiBZZWFoLCB0aGVuIHdlIGFyZSBnb2luZyB0byBoYXZlIGEgaHVnZSBmdW5jdGlvbiB3aXRoIGxv dHMgb2Ygd2VpcmQKPiBkZWZpbml0aW9ucywgdW5mb3J0dW5hdGVseSBCU3BlYyB0YWJsZSBoYXMg cXVpdGUgc3RyYW5nZSBEQnVmCj4gYXNzaWdubWVudHMgbGlrZSAKPiArSUNMX1BJUEVfQUJfREJV Rl9TTElDRVMoREJVRl9TMl9CSVQsIERCVUZfUzFfQklUKSwKPiArSUNMX1BJUEVfQUNfREJVRl9T TElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiAKPiBpLmUgc2xpY2VzIGNhbiBnZXQg bWl4ZWQgaW4gYSBxdWl0ZSB2YXJpb3VzIHdheXMuIFRoZXJlIGlzIG5vCj4gcmF0aW9uYWwgcGF0 dGVybiBpbiB0aG9zZSBhbmQgY291bGQgYmUgZXZlbiBkYW5nZXJvdXMgdG8gdHJ5IHRvIAo+IG9w dGltaXplIGl0IHNvbWUgd2F5LCBhcyBvbmUgZGF5IGl0IG1pZ2h0IGNoYW5nZSBhZ2FpbiBpbiBz b21lCj4gdW5wcmVkaWN0YWJsZSB3YXkuCj4gCj4gV291bGQgeW91IHByZWZlciB0byBoYXZlIGl0 IGxpa2UKPiAKPiBpZiAocGlwZXMgYXJlIEEgYW5kIEIpCj4gICAgIHByb2dyYW0gUzIgdG8gQSBh bmQgUzEgdG8gQgo+IGlmIChwaXBlcyBhcmUgQSBhbmQgQykKPiAgICAgcHJvZ3JhbSBTMSB0byBB IGFuZCBTMiB0byBDCj4gLi4uCj4gCj4gSSB3b3VsZCBwcmVmZXIgYXQgbGVhc3QgdG8gc2VlIGl0 IGluIGEgY29tcGFyYWJsZSB3YXkgd2l0aCB0aGUKPiB0YWJsZSB3ZSBoYXZlIGluIEJTcGVjLCBy YXRoZXIgdGhhbiBoYXZpbmcgbG90cyBvZiB3ZWlyZCBsb29raW5nCj4gaWYtZWxzZSBzdGF0ZW1l bnRzLCBHRU4gY2hlY2tzIGFuZCBzbyBvbi4KPiAKPiBJIGtuZXcgdGhpcyB0YWJsZSB3YXMgbm90 IGdvaW5nIHRvIGxvb2sgbGlrZSBpdCBpcyBkb25lIHR5cGljYWxseQo+IGhlcmUgLSBidXQgcmVh bGx5IG15IG9waW5pb24gdGhhdCBpdCBpcyB3YXkgYmV0dGVyIHRoYW4gaGFyZGNvZGluZwo+IGl0 IGludG8gc29tZSB3ZWlyZCBhbGdvcml0aG0sIHdoaWNoIHdvdWxkIGJlIGhhcmQgdG8gY29tcGFy ZSB0byAKPiBpbml0aWFsIHRhYmxlLCB3aGljaCBpcyBhbHJlYWR5IHN0cmFuZ2UgZW5vdWdoLgo+ IAo+IElmIHlvdSBkb24ndCBsaWtlIGl0IC0gY291bGQgeW91IHBsZWFzZSBleHBsYWluIHdoeSB0 aGlzIGlzIGV4YWN0bHkKPiB3b3JzZSB0aGFuIGhhdmluZyBsb25nIGZ1bmN0aW9ucyB3aXRoIGhh cmRjb2RlZCBjaGVja3M/CgpJIHRoaW5rIHdlIHNob3VsZCBiZSBhYmxlIHRvIGVuY29kZSB0aGlz IHNpbXBseSB1c2luZyB0aGUKIlBpcGUgYW5kIERCVUYgb3JkZXJpbmciIHN0dWZmIGZyb20gdGhl IHNwZWMuIEllLiBqdXN0IHNwZWNpZnkgd2hhdAppcyB0aGUgZGlzdGFuY2Ugb2YgZWFjaCBwaXBl IGZyb20gZWFjaCBkYnVmIHNsaWNlLiBUaGVuIGFsbCB3ZSBoYXZlCnRvIGRvIGlzIG1pbmltaXpl IHRoZSB0b3RhbCBkaXN0YW5jZS4gVGhlIGZvbGxvd2luZyB0YWJsZXMgSSB0aGluawpzaG91bGQg ZW5jb2RlIHRoYXQgcmVhc29uYWJseSBjb25jaXNlbHk6CgovKiBwaXBlQSAtIERCVUZfUzEgLSBw aXBlQiAtIHBpcGVDIC0gREJVRl9TMiAqLwpzdGF0aWMgY29uc3QgdTggaWNsX2RidWZfZGlzdGFu Y2VbXVtdIHsKCVtQSVBFX0FdID0geyBbREJVRl9TMV0gPSAxLCBbREJVRl9TMl0gPSA0LCB9LAoJ W1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVGX1MyXSA9IDIsIH0sCglbUElQRV9DXSA9 IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZfUzJdID0gMSwgfSwKfTsKCi8qIHBpcGVEIC0gREJVRl9T MiAtIHBpcGVDIC0gcGlwZUEgLSBEQlVGX1MxIC0gcGlwZUIgKi8Kc3RhdGljIGNvbnN0IHU4IHRn bF9kYnVmX2Rpc3RhbmNlW11bXSB7CglbUElQRV9BXSA9IHsgW0RCVUZfUzFdID0gMSwgW0RCVUZf UzJdID0gMiwgfSwKCVtQSVBFX0JdID0geyBbREJVRl9TMV0gPSAxLCBbREJVRl9TMl0gPSA0LCB9 LAoJW1BJUEVfQ10gPSB7IFtEQlVGX1MxXSA9IDIsIFtEQlVGX1MyXSA9IDEsIH0sCglbUElQRV9E XSA9IHsgW0RCVUZfUzFdID0gNCwgW0RCVUZfUzJdID0gMSwgfSwKfTsKCi8qCiAqIHBpcGVBIC0g REJVRl9TMCAtIERCVUZfUzEgLSBwaXBlQgogKiBwaXBlQyAtIERCVUZfUzIgLSBEQlVGX1MzIC0g cGlwZUQKICovCnN0YXRpYyBjb25zdCB1OCBmdXR1cmVfZGJ1Zl9kaXN0YW5jZVtdW10gewoJW1BJ UEVfQV0gPSB7IFtEQlVGX1MwXSA9IDEsIFtEQlVGX1MxXSA9IDMsIH0sCglbUElQRV9CXSA9IHsg W0RCVUZfUzBdID0gMywgW0RCVUZfUzFdID0gMSwgfSwKCVtQSVBFX0NdID0geyBbREJVRl9TMl0g PSAxLCBbREJVRl9TM10gPSAzLCB9LAoJW1BJUEVfRF0gPSB7IFtEQlVGX1MyXSA9IDMsIFtEQlVG X1MzXSA9IDEsIH0sCn07CgpJIHN1cHBvc2Ugd2UgY291bGQgbWFrZSB0aGF0IGV2ZW4gbW9yZSBt aW5pbWFsIGJ5IGp1c3QKZGlyZWN0bHkgc3RpY2tpbmcgdGhhdCAiUGlwZSBhbmQgREJVRiBvcmRl cmluZyIgbGFuZ3VhZ2UKaW50byBhIHNpbmdsZSBhcnJheSBidXQgYW5kIHRoZW4gY2FsY3VsYXRl IGVhY2ggZGlzdGFuY2UKZnJvbSBpdCwgYnV0IHRoYXQgaXMgcGVyaGFwcyBtb3JlIHdvcmssIGFu ZCB3ZSdkIG5lZWQKc29tZSBraW5kIG9mIGVudW0ganVzdCBmb3IgdGhhdCBzbyB0aGF0IHdlIGhh dmUgYSBzaW5nbGUKbmFtZXNwYWNlIGZvciB0aGUgcGlwZXMgYW5kIGRidWYgc2xpY2VzLiBTbyBp IGhhdmUgYQpmZWVsaW5nIGhhdmluZyB0aG9zZSBkaXN0YW5jZXMgcHJlLWNvbXB1dGVkIGluIGEg dGFibGUKbGlrZSB0aGV0IGlzIG1heWJlIGEgYmV0dGVyIHdheSB0byBnby4KCj4gCj4gSSB0aGlu ayB0aGlzIGlzIHByZXR0eSBzdHVwaWQgdG8gZml4IHN0dWZmIHdoaWNoIGxvb2tzIG5ldyBvciB1 bnVzdWFsCj4ganVzdCBiZWNhdXNlIHNvbWVib2R5IGRvZXNuJ3QgbGlrZSBpdCwgd2l0aG91dCBl dmVuIGNvbnN0cnVjdGl2ZQo+IGFyZ3VpbmcuCj4gCj4gLSBTdGFuCj4gCj4gPiAKPiA+IAo+ID4g PiArCj4gPiA+ICsvKgo+ID4gPiArICogVGhpcyBmdW5jdGlvbgo+ID4gCj4gPiAiVGhpcyBmdW5j dGlvbiIgaXMgdG90YWxseSByZWR1bmRhbnQuIERpdHRvIGVsc2V3aGVyZS4KPiA+IAo+ID4gPiBm aW5kcyBhbiBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlIGNvbmZpZ3VyYXRpb24gYW5kCj4g PiA+ICsgKiByZXR1cm5zIGNvcnJlc3BvbmRlbnQgREJ1ZiBzbGljZSBtYXNrIGFzIHN0YXRlZCBp biBCU3BlYyBmb3IKPiA+ID4gcGFydGljdWxhcgo+ID4gPiArICogcGxhdGZvcm0uCj4gPiA+ICsg Ki8KPiA+ID4gK3N0YXRpYyB1MzIgaWNsX2dldF9hbGxvd2VkX2RidWZfbWFzayhpbnQgcGlwZSwK PiA+ID4gKwkJCQkgICAgIHUzMiBhY3RpdmVfcGlwZXMsCj4gPiA+ICsJCQkJICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gPiAqY3J0Y19zdGF0ZSkKPiA+ID4gK3sKPiA+ID4g KwlpbnQgaTsKPiA+ID4gKwl1aW50X2ZpeGVkXzE2XzE2X3QgcGlwZV9yYXRpbzsKPiA+ID4gKwo+ ID4gPiArCS8qCj4gPiA+ICsJICogQ2FsY3VsYXRlIHBpcGUgcmF0aW8gYXMgc3RhdGVkIGluIEJT cGVjIDI4NjkyCj4gPiA+ICsJICovCj4gPiA+ICsJcGlwZV9yYXRpbyA9IGljbF9nZXRfcGlwZV9y YXRpbyhjcnRjX3N0YXRlKTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGljbF9hbGxvd2VkX2RidWZzKTsgaSsrKSB7Cj4gPiA+ICsJCWlmIChpY2xfYWxsb3dlZF9k YnVmc1tpXS5hY3RpdmVfcGlwZXMgPT0gYWN0aXZlX3BpcGVzKQo+ID4gPiB7Cj4gPiA+ICsJCQlp ZiAoaHdlaWdodDMyKGFjdGl2ZV9waXBlcykgPT0gMSkgewo+ID4gPiArCQkJCS8qCj4gPiA+ICsJ CQkJICogQWNjb3JkaW5nIHRvIEJTcGVjIDEyNzE2OiBpZiByYXRpbwo+ID4gPiA+PSA4OC44Cj4g PiA+ICsJCQkJICogYWx3YXlzIHVzZSBzaW5nbGUgZGJ1ZiBzbGljZS4KPiA+ID4gKwkJCQkgKi8K PiA+ID4gKwkJCQlpZiAocGlwZV9yYXRpby52YWwgPj0gZGl2X2ZpeGVkMTYoODg4LAo+ID4gPiAx MCkudmFsKQo+ID4gPiArCQkJCQkrK2k7Cj4gPiA+ICsJCQl9Cj4gPiA+ICsJCQlyZXR1cm4gaWNs X2FsbG93ZWRfZGJ1ZnNbaV0uZGJ1Zl9tYXNrW3BpcGVdOwo+ID4gPiArCQl9Cj4gPiA+ICsJfQo+ ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKgo+ID4gPiArICogVGhp cyBmdW5jdGlvbiBmaW5kcyBhbiBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlCj4gPiA+IGNv bmZpZ3VyYXRpb24gYW5kCj4gPiA+ICsgKiByZXR1cm5zIGNvcnJlc3BvbmRlbnQgREJ1ZiBzbGlj ZSBtYXNrIGFzIHN0YXRlZCBpbiBCU3BlYyBmb3IKPiA+ID4gcGFydGljdWxhcgo+ID4gPiArICog cGxhdGZvcm0uCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyB1MzIgdGdsX2dldF9hbGxvd2VkX2Ri dWZfbWFzayhpbnQgcGlwZSwKPiA+ID4gKwkJCQkgICAgIHUzMiBhY3RpdmVfcGlwZXMsCj4gPiA+ ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gPiAqY3J0Y19zdGF0 ZSkKPiA+ID4gK3sKPiA+ID4gKwlpbnQgaTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHRnbF9hbGxvd2VkX2RidWZzKTsgaSsrKSB7Cj4gPiA+ICsJCWlmICh0Z2xf YWxsb3dlZF9kYnVmc1tpXS5hY3RpdmVfcGlwZXMgPT0gYWN0aXZlX3BpcGVzKQo+ID4gPiArCQkJ cmV0dXJuIHRnbF9hbGxvd2VkX2RidWZzW2ldLmRidWZfbWFza1twaXBlXTsKPiA+ID4gKwl9Cj4g PiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3UzMiBpOTE1X2dldF9hbGxv d2VkX2RidWZfbWFzayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICsJ CQkJICAgICAgaW50IHBpcGUsIHUzMiBhY3RpdmVfcGlwZXMsCj4gPiA+ICsJCQkJICAgICAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUKPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ICt7Cj4g PiA+ICsJaWYgKElTX0dFTihkZXZfcHJpdiwgMTEpKQo+ID4gPiArCQlyZXR1cm4gaWNsX2dldF9h bGxvd2VkX2RidWZfbWFzayhwaXBlLAo+ID4gPiArCQkJCQkJIGFjdGl2ZV9waXBlcywKPiA+ID4g KwkJCQkJCSBjcnRjX3N0YXRlKTsKPiA+ID4gKwllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDEy KSkKPiA+ID4gKwkJcmV0dXJuIHRnbF9nZXRfYWxsb3dlZF9kYnVmX21hc2socGlwZSwKPiA+ID4g KwkJCQkJCSBhY3RpdmVfcGlwZXMsCj4gPiA+ICsJCQkJCQkgY3J0Y19zdGF0ZSk7Cj4gPiA+ICsJ LyoKPiA+ID4gKwkgKiBGb3IgYW55dGhpbmcgZWxzZSBqdXN0IHJldHVybiBvbmUgc2xpY2UgeWV0 Lgo+ID4gPiArCSAqIFNob3VsZCBiZSBleHRlbmRlZCBmb3Igb3RoZXIgcGxhdGZvcm1zLgo+ID4g PiArCSAqLwo+ID4gPiArCXJldHVybiBEQlVGX1MxX0JJVDsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiAgc3RhdGljIHU2NAo+ID4gPiAgaWNsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUKPiA+ID4gKmNydGNfc3RhdGUsCj4gPiA+ICAJCQkJIHU2NCAq cGxhbmVfZGF0YV9yYXRlKQo+ID4gPiAtLSAKPiA+ID4gMi4xNy4xCj4gPiAKPiA+IAoKLS0gClZp bGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZng= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 02B0FC432C3 for ; Mon, 18 Nov 2019 15:27:21 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D4C0D20857 for ; Mon, 18 Nov 2019 15:27:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D4C0D20857 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 739C76E570; Mon, 18 Nov 2019 15:27:20 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id D2E3789951 for ; Mon, 18 Nov 2019 15:27:18 +0000 (UTC) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Nov 2019 07:27:18 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,320,1569308400"; d="scan'208";a="289288818" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.174]) by orsmga001.jf.intel.com with SMTP; 18 Nov 2019 07:27:14 -0800 Received: by stinkbox (sSMTP sendmail emulation); Mon, 18 Nov 2019 17:27:12 +0200 Date: Mon, 18 Nov 2019 17:27:12 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: "Lisovskiy, Stanislav" Message-ID: <20191118152712.GS1208@intel.com> References: <20191114122449.26409-1-stanislav.lisovskiy@intel.com> <20191115201944.GO1208@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Subject: Re: [Intel-gfx] [PATCH v7] drm/i915: Enable second dbuf slice for ICL and TGL X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "intel-gfx@lists.freedesktop.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191118152712.uWzke13x4EoLkGU8YbaXAd9rf-XfRti7V34THuaqolI@z> T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMDk6MTk6MThBTSArMDAwMCwgTGlzb3Zza2l5LCBTdGFu aXNsYXYgd3JvdGU6Cj4gT24gRnJpLCAyMDE5LTExLTE1IGF0IDIyOjE5ICswMjAwLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBUaHUsIE5vdiAxNCwgMjAxOSBhdCAwMjoyNDo0OVBNICsw MjAwLCBTdGFuaXNsYXYgTGlzb3Zza2l5IHdyb3RlOgo+ID4gPiBBbHNvIGltcGxlbWVudGVkIGFs Z29yaXRobSBmb3IgY2hvb3NpbmcgREJ1ZiBzbGljZSBjb25maWd1cmF0aW9uCj4gPiA+IGJhc2Vk IG9uIGFjdGl2ZSBwaXBlcywgcGlwZSByYXRpbyBhcyBzdGF0ZWQgaW4gQlNwZWMgMTI3MTYuCj4g PiA+IAo+ID4gPiBOb3cgcGlwZSBhbGxvY2F0aW9uIHN0aWxsIHN0YXlzIHByb3BvcnRpb25hbCB0 byBwaXBlIHdpZHRoIGFzCj4gPiA+IGJlZm9yZSwKPiA+ID4gaG93ZXZlciB3aXRoaW4gYWxsb3dl ZCBEQnVmIHNsaWNlIGZvciB0aGlzIHBhcnRpY3VsYXIKPiA+ID4gY29uZmlndXJhdGlvbi4KPiA+ ID4gCj4gPiA+IHYyOiBSZW1vdmUgdW5uZWVkZWQgY2hlY2sgZnJvbSBjb21taXQgYXMgZGRiIGVu YWJsZWQgc2xpY2VzIG1pZ2h0Cj4gPiA+ICAgICBub3cgZGlmZmVyIGZyb20gaHcgc3RhdGUuCj4g PiA+IAo+ID4gPiB2MzogLSBBZGRlZCBuZXcgZmllbGQgInN1cHBvcnRlZF9zbGljZXMiIHRvIGRk YiB0byBzZXBhcmF0ZSBtYXgKPiA+ID4gICAgICAgc3VwcG9ydGVkIHNsaWNlcyB2cyBjdXJyZW50 bHkgZW5hYmxlZCwgdG8gYXZvaWQgY29uZnVzaW9uLgo+ID4gPiAgICAgLSBSZW1vdmVkIG9ic29s ZXRlIGNvbW1lbnRzIGFuZCBjb2RlIHJlbGF0ZWQgdG8gREJ1ZihNYXR0aGV3Cj4gPiA+IFJvcGVy KS4KPiA+ID4gICAgIC0gU29tZSBjb2RlIHN0eWxlIGFuZCBsb25nIGxpbmUgcmVtb3ZhbChNYXR0 aGV3IFJvcGVyKS4KPiA+ID4gICAgIC0gQWRkZWQgV0FSTl9PTiB0byBuZXcgZGRiIHJhbmdlIG9m ZnNldCBjYWxjIGZ1bmN0aW9uKE1hdHRoZXcKPiA+ID4gUm9wZXIpLgo+ID4gPiAgICAgLSBSZW1v dmVkIHBsYXRmb3JtIHNwZWNpZmljIGNhbGwgdG8gY2FsYyBwaXBlIHJhdGlvIGZyb20gZGRiCj4g PiA+ICAgICAgIGFsbG9jYXRpb24gZnVuY3Rpb24gYW5kIGZpeGVkIHRoZSByZXR1cm4gdmFsdWUo TWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gUmVmYWN0b3JlZCBEQlVGIHNsaWNlIGFsbG9jYXRp b24gdGFibGUgdG8gaW1wcm92ZSByZWFkYWJpbGl0eQo+ID4gPiAgICAgLSBBZGRlZCBEQlVGIHNs aWNlIGFsbG9jYXRpb24gZm9yIFRHTCBhcyB3ZWxsLgo+ID4gPiAgICAgLSBJQ0woaG93ZXZlciBu b3QgVEdMKSBzZWVtcyB0byB2b2x1bnRhcmlseSBlbmFibGUgc2Vjb25kIERCdWYKPiA+ID4gc2xp Y2UKPiA+ID4gICAgICAgYWZ0ZXIgcG0gc3VzcGVuZC9yZXN1bWUgY2F1c2luZyBhIG1pc21hdGNo IGZhaWx1cmUsIGJlY2F1c2UKPiA+ID4gd2UKPiA+ID4gICAgICAgdXBkYXRlIERCdWYgc2xpY2Vz IG9ubHkgaWYgd2UgZG8gYSBtb2Rlc2V0LCBob3dldmVyIHRoaXMKPiA+ID4gY2hlY2sKPiA+ID4g ICAgICAgaXMgZG9uZSBhbHdheXMuIEZpeGVkIGl0IHRvIGJlIGRvbmUgb25seSB3aGVuIG1vZGVz ZXQgZm9yCj4gPiA+IElDTC4KPiA+ID4gCj4gPiA+IHY0OiAtIE5vdyBlbmFibGVkIHNsaWNlcyBp cyBub3QgYWN0dWFsbHkgYSBudW1iZXIsIGJ1dCBhIGJpdG1hc2ssCj4gPiA+ICAgICAgIGJlY2F1 c2Ugd2UgbWlnaHQgbmVlZCB0byBlbmFibGUgc2Vjb25kIHNsaWNlIG9ubHkgYW5kIG51bWJlcgo+ ID4gPiAgICAgICBvZiBzbGljZXMgd291bGQgc3RpbGwgMSBhbmQgdGhhdCBjdXJyZW50IGNvZGUg ZG9lc24ndCBhbGxvdy4KPiA+ID4gICAgIC0gUmVtb3ZlIHJlZHVuZGFudCBkdXBsaWNhdGUgY29k ZSB0byBoYXZlIHNvbWUgdW5pZmllZCB3YXkgb2YKPiA+ID4gICAgICAgZW5hYmxpbmcgZGJ1ZiBz bGljZXMgaW5zdGVhZCBvZiBoYXJkY29kaW5nLgo+ID4gPiAKPiA+ID4gdjU6IC0gRml4IGZhaWxp bmcgZ2VuOV9hc3NlcnRfZGJ1Zl9lbmFibGVkIGFzIGl0IHdhcyBuYWl2ZWx5Cj4gPiA+IHRoaW5r aW5nCj4gPiA+ICAgICAgIHRoYXQgd2UgaGF2ZSBvbmx5IG9uZSBEQlVGX0NUTCBzbGljZS4gTm93 IGFub3RoZXIgdmVyc2lvbiBmb3IKPiA+ID4gICAgICAgZ2VuMTEgd2lsbCBjaGVjayBib3RoIHNs aWNlcyBhcyBvbmx5IHNlY29uZCBvbmUgY2FuIGJlCj4gPiA+IGVuYWJsZWQsCj4gPiA+ICAgICAg IHRvIGtlZXAgQ0kgaGFwcHkuCj4gPiA+IAo+ID4gPiB2NjogLSBSZW1vdmVkIGVuYWJsZWQgZGJ1 ZiBhc3NlcnRpb24gY29tcGxldGVseS4gUHJldmlvdXMgY29kZQo+ID4gPiAgICAgICB3YXMga2Vl cGluZyBkYnVmIGVuYWJsZWQsIGV2ZW4oISkgd2hlbiBfZGJ1Zl9kaXNhYmxlIGlzCj4gPiA+IGNh bGxlZC4KPiA+ID4gICAgICAgQ3VycmVudGx5IHdlIGVuYWJsZS9kaXNhYmxlIGRidWYgc2xpY2Vz IGJhc2VkIG9uIHJlcXVyZW1lbnQKPiA+ID4gICAgICAgc28gbm8gcG9pbnQgaW4gYXNzZXJ0aW5n IHRoaXMgaGVyZS4KPiA+ID4gICAgIC0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBtb2Rlc2V0IGNoZWNr IGZyb20KPiA+ID4gdmVyaWZ5X3dtX3N0YXRlKE1hdHRoZXcgUm9wZXIpCj4gPiA+ICAgICAtIFNs aWNlcyBpbnRlcnNlY3Rpb24gYWZ0ZXIgdW5pb24gaXMgc2FtZSBhcyBmaW5hbAo+ID4gPiByZXN1 bHQoTWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gTW92ZWQgREJ1ZiBzbGljZXMgdG8gaW50ZWxf ZGV2aWNlX2luZm8oTWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gU29tZSBtYWNyb3MgYWRkZWQo TWF0dGhldyBSb3BlcikKPiA+ID4gICAgIC0gZGRiIHJhbmdlIGlzIG5vdyBhbHdheXMgbGVzcyBv ciBlcXVhbCB0byBkZGIgc2l6ZSAtIG5vIG5lZWQKPiA+ID4gZm9yIGFkZGl0aW9uYWwKPiA+ID4g ICAgICAgY2hlY2tzKHByZXZpb3VzbHkgbmVlZGVkIGFzIHdlIGhhZCBzb21lIGJhbmR3aWR0aCBj aGVja3MgaW4KPiA+ID4gdGhlcmUgd2hpY2gKPiA+ID4gICAgICAgY291bGQgInN1ZGRlbmx5IiBy ZXR1cm4gZGRiX3NpemUgc21hbGxlciB0aGFuIGl0IGlzLgo+ID4gPiAKPiA+ID4gdjc6IE1pbm9y IGNvc3RlbWljIGNoYW5nZXM6Cj4gPiA+ICAgICAtIENoYW5nZWQgaWNsX2RidWZfc2xpY2VzX3Jl c3RvcmUgbmFtZSB0bwo+ID4gPiBpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcwo+ID4gPiAgICAgICBh cyBpdCBtb3JlIGNvcnJlc3BvbmRzIHRvIHRoZSBhY3R1YWwgZnVuY3Rpb25hbGl0eS4KPiA+ID4g ICAgIC0gU29tZSBzaW1wbGlmaWNhdGlvbiB3aXRoIHN1cHBvcnRlZCBzbGljZXMgZm9yIEJYVCBh bmQgR0xLCj4gPiA+ICAgICAtIHNrbF9waXBlX2Rvd25zY2FsZV9hbW91bnQgLT4gaWNsX3BpcGVf ZG93bnNjYWxlX2Ftb3VudCBhcwo+ID4gPiAgICAgICB0aGlzIGlzIG5vdCB1c2VkIGZvciBza2wg YW55bW9yZS4KPiA+ID4gICAgIC0gQ2hhbmdlZCBEQnVmIHNsaWNlIGFzc2lnbm1lbnQgb3JkZXIg Zm9yIFRHTCBjYXNlCj4gPiA+IAo+ID4gPiBSZXZpZXdlZC1ieTogTWF0dGhldyBSb3BlciA8bWF0 dGhldy5kLnJvcGVyQGludGVsLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogU3RhbmlzbGF2IExp c292c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBpbnRlbC5jb20+Cj4gPiA+IENjOiBNYXR0aGV3 IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+ID4gPiBDYzogVmlsbGUgU3lyasOk bMOkIDx2aWxsZS5zeXJqYWxhQGludGVsLmNvbT4KPiA+ID4gQ2M6IEphbWVzIEF1c211cyA8amFt ZXMuYXVzbXVzQGludGVsLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCAgMjYgKy0KPiA+ID4gIC4uLi9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYyAgICB8ICA5OCArKy0tLQo+ID4gPiAgLi4uL2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5oICAgIHwgICAyICsKPiA+ID4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAgNSArCj4gPiA+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICAgfCAgIDIgKy0K PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMgICAgICAgICAgICAgICB8ICAg NiArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgICAgICAg IHwgICA4ICstCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5o ICAgICAgfCAgIDEgKwo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAg ICAgICAgICAgIHwgMzg3Cj4gPiA+ICsrKysrKysrKysrKysrKystLQo+ID4gPiAgOSBmaWxlcyBj aGFuZ2VkLCA0MzEgaW5zZXJ0aW9ucygrKSwgMTA0IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5j Cj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiA+ ID4gaW5kZXggODc2ZmMyNTk2OGJmLi5iZDdhZmY2NzUxOTggMTAwNjQ0Cj4gPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gPiA+IEBAIC0xMzM4 Nyw3ICsxMzM4Nyw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV93bV9zdGF0ZShzdHJ1Y3QKPiA+ID4g aW50ZWxfY3J0YyAqY3J0YywKPiA+ID4gIAo+ID4gPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDExICYmCj4gPiA+ICAJICAgIGh3LT5kZGIuZW5hYmxlZF9zbGljZXMgIT0gc3dfZGRiLT5l bmFibGVkX3NsaWNlcykKPiA+ID4gLQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEQlVGIFNsaWNl cyAoZXhwZWN0ZWQgJXUsIGdvdAo+ID4gPiAldSlcbiIsCj4gPiA+ICsJCURSTV9FUlJPUigibWlz bWF0Y2ggaW4gREJVRiBTbGljZXMgKGV4cGVjdGVkICV4LCBnb3QKPiA+ID4gJXgpXG4iLAo+ID4g PiAgCQkJICBzd19kZGItPmVuYWJsZWRfc2xpY2VzLAo+ID4gPiAgCQkJICBody0+ZGRiLmVuYWJs ZWRfc2xpY2VzKTsKPiA+ID4gIAo+ID4gPiBAQCAtMTQ2MTQsMTUgKzE0NjE0LDI0IEBAIHN0YXRp YyB2b2lkCj4gPiA+IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzKHN0cnVjdCBpbnRlbF9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ID4gPiAgCXU4IGh3X2VuYWJsZWRfc2xpY2VzID0gZGV2X3ByaXYt PndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXM7Cj4gPiA+ICAJdTggcmVxdWlyZWRfc2xpY2Vz ID0gc3RhdGUtPndtX3Jlc3VsdHMuZGRiLmVuYWJsZWRfc2xpY2VzOwo+ID4gPiAgCXN0cnVjdCBz a2xfZGRiX2VudHJ5IGVudHJpZXNbSTkxNV9NQVhfUElQRVNdID0ge307Cj4gPiA+ICsJdTggc2xp Y2VzX3VuaW9uID0gaHdfZW5hYmxlZF9zbGljZXMgfCByZXF1aXJlZF9zbGljZXM7Cj4gPiA+ICsJ dTggc2xpY2VzX2ludGVyc2VjdGlvbiA9IHJlcXVpcmVkX3NsaWNlczsKPiA+ID4gIAo+ID4gPiAg CWZvcl9lYWNoX29sZG5ld19pbnRlbF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLAo+ID4gPiBv bGRfY3J0Y19zdGF0ZSwgbmV3X2NydGNfc3RhdGUsIGkpCj4gPiA+ICAJCS8qIGlnbm9yZSBhbGxv Y2F0aW9ucyBmb3IgY3J0YydzIHRoYXQgaGF2ZSBiZWVuIHR1cm5lZAo+ID4gPiBvZmYuICovCj4g PiA+ICAJCWlmIChuZXdfY3J0Y19zdGF0ZS0+aHcuYWN0aXZlKQo+ID4gPiAgCQkJZW50cmllc1tp XSA9IG9sZF9jcnRjX3N0YXRlLT53bS5za2wuZGRiOwo+ID4gPiAgCj4gPiA+IC0JLyogSWYgMm5k IERCdWYgc2xpY2UgcmVxdWlyZWQsIGVuYWJsZSBpdCBoZXJlICovCj4gPiA+IC0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTEgJiYgcmVxdWlyZWRfc2xpY2VzID4KPiA+ID4gaHdfZW5hYmxl ZF9zbGljZXMpCj4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsIHJlcXVp cmVkX3NsaWNlcyk7Cj4gPiA+ICsJRFJNX0RFQlVHX0tNUygiREJ1ZiByZXEgc2xpY2VzICVkIGh3 IHNsaWNlcyAlZFxuIiwKPiA+ID4gKwkJICAgICAgcmVxdWlyZWRfc2xpY2VzLCBod19lbmFibGVk X3NsaWNlcyk7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIElmIHNvbWUgb3RoZXIgREJ1 ZiBzbGljZSByZXF1aXJlZCwgZW5hYmxlIGl0IGhlcmUsCj4gPiA+ICsJICogYXMgaGVyZSB3ZSBv bmx5IGFkZCBtb3JlIHNsaWNlcywgYnV0IG5vdCByZW1vdmUgdG8gcHJldmVudAo+ID4gPiArCSAq IGlzc3VlcyBpZiBzb21lYm9keSBzdGlsbCB1c2VzIHRob3NlLgo+ID4gPiArCSAqLwo+ID4gPiAr CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyAhPQo+ID4g PiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4gKwkJaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShkZXZf cHJpdiwgc2xpY2VzX3VuaW9uKTsKPiA+ID4gIAo+ID4gPiAgCS8qCj4gPiA+ICAJICogV2hlbmV2 ZXIgdGhlIG51bWJlciBvZiBhY3RpdmUgcGlwZXMgY2hhbmdlcywgd2UgbmVlZCB0byBtYWtlCj4g PiA+IHN1cmUgd2UKPiA+ID4gQEAgLTE0NjgxLDkgKzE0NjkwLDEyIEBAIHN0YXRpYyB2b2lkCj4g PiA+IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlKQo+ID4gPiAgCQl9Cj4gPiA+ICAJfSB3aGlsZSAocHJvZ3Jlc3MpOwo+ID4gPiAgCj4g PiA+IC0JLyogSWYgMm5kIERCdWYgc2xpY2UgaXMgbm8gbW9yZSByZXF1aXJlZCBkaXNhYmxlIGl0 ICovCj4gPiA+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYgcmVxdWlyZWRfc2xp Y2VzIDwKPiA+ID4gaHdfZW5hYmxlZF9zbGljZXMpCj4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191 cGRhdGUoZGV2X3ByaXYsIHJlcXVpcmVkX3NsaWNlcyk7Cj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBJ ZiBzb21lIG90aGVyIERCdWYgc2xpY2UgaXMgbm90IG5lZWRlZCwgZGlzYWJsZSBpdCBoZXJlLAo+ ID4gPiArCSAqIGFzIGhlcmUgd2Ugb25seSByZW1vdmUgc2xpY2VzLCB3aGljaCBhcmUgbm90IG5l ZWRlZCBhbnltb3JlLgo+ID4gPiArCSAqLwo+ID4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyAhPQo+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ ID4gKwkJaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShkZXZfcHJpdiwgc2xpY2VzX2ludGVyc2VjdGlv bik7Cj4gPiAKPiA+IFRoaXMgaXMgc3RpbGwgYSB0b3RhbGx5IHdyb25nIHBsYWNlIGZvciB0aGlz LiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhlCj4gPiBwbGFuZXMgaGF2ZSBzd2l0Y2hlZCBvdmVyIHRv IHRoZSBuZXcgZGRiIGxheW91dCBiZWZvcmUgd2UgcG93ZXIgb2ZmCj4gPiBhbnl0aGluZy4KPiAK PiBJIGhhdmUganVzdCBtb2RpZmllZCBhbHJlYWR5IGV4aXN0aW5nIGxpbmUgaGVyZSwgbm90IGFk ZGVkIGJ5IG1lLgo+IFRoZSBwb2ludCBvZiB0aGlzIHBhdGNoIGlzIHN0YXJ0aW5nIHRvIHVzZSBz ZWNvbmQgREJ1ZiBzbGljZSBidXQKPiBub3QgZml4aW5nIGFsbCBraW5kcyBvZiBpc3N1ZXMgcmVs YXRlZCB0byBEQnVmIGNvZGUgYXQgdGhlIHNhbWUgdGltZS4KCllvdSdyZSByZS1lbmFibGluZyBj b2RlIEkgZGlzYWJsZWQgb24gcHVycG9zZS4gSXQgaGFzIHRvIGJlIGZpeGVkCnByb3Blcmx5IG9y IG5vdCB0b3VjaGVkIGF0IGFsbC4gSW4gaGluZHNpZ2h0IEkgc2hvdWxkIGhhdmUgcHJvYmFibHkK anVzdCByaXBwZWQgaXQgYWxsIG91dCB0byBub3QgZ2l2ZSBwZW9wbGUgYmFkIGlkZWFzLgoKPiAK PiBPZiBjb3Vyc2UgdGhpcyBpcyBuaWNlIGlkZWEgdG8gZml4IGl0IC0gaWYgdGhhdCBpcyB3cm9u ZyBwbGFuZSwKPiBidXQgY3VycmVudCBjb2RlIHNvbWVob3cgbGl2ZXMgd2l0aCBpdCBhbmQgcHJv YmFibHkgdGhpcyBzaG91bGQgYmUKPiB3aXRoIHNvbWUgb3RoZXIgcGF0Y2guCj4gCj4gPiAKPiA+ ID4gIH0KPiA+ID4gIAo+ID4gPiAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2hlbHBlcl9mcmVl X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ICpkZXZfcHJpdikKPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dl ci5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bv d2VyLmMKPiA+ID4gaW5kZXggY2UxYjY0ZjRkZDQ0Li5hNzhiYzliNjE4NjIgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5j Cj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9w b3dlci5jCj4gPiA+IEBAIC0xMDMxLDE1ICsxMDMxLDYgQEAgc3RhdGljIGJvb2wKPiA+ID4gZ2Vu OV9kY19vZmZfcG93ZXJfd2VsbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiA+ID4gIAkJKEk5MTVfUkVBRChEQ19TVEFURV9FTikgJgo+ID4gPiBEQ19TVEFURV9F Tl9VUFRPX0RDNV9EQzZfTUFTSykgPT0gMCk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRp YyB2b2lkIGdlbjlfYXNzZXJ0X2RidWZfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ ID4gPiAqZGV2X3ByaXYpCj4gPiA+IC17Cj4gPiA+IC0JdTMyIHRtcCA9IEk5MTVfUkVBRChEQlVG X0NUTCk7Cj4gPiA+IC0KPiA+ID4gLQlXQVJOKCh0bXAgJiAoREJVRl9QT1dFUl9TVEFURSB8IERC VUZfUE9XRVJfUkVRVUVTVCkpICE9Cj4gPiA+IC0JICAgICAoREJVRl9QT1dFUl9TVEFURSB8IERC VUZfUE9XRVJfUkVRVUVTVCksCj4gPiA+IC0JICAgICAiVW5leHBlY3RlZCBEQnVmIHBvd2VyIHBv d2VyIHN0YXRlICgweCUwOHgpXG4iLCB0bXApOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+ICBzdGF0 aWMgdm9pZCBnZW45X2Rpc2FibGVfZGNfc3RhdGVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4g PiA+ICpkZXZfcHJpdikKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUg Y2RjbGtfc3RhdGUgPSB7fTsKPiA+ID4gQEAgLTEwNTUsOCArMTA0Niw2IEBAIHN0YXRpYyB2b2lk IGdlbjlfZGlzYWJsZV9kY19zdGF0ZXMoc3RydWN0Cj4gPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ID4gPiAgCS8qIENhbid0IHJlYWQgb3V0IHZvbHRhZ2VfbGV2ZWwgc28gY2FuJ3Qg dXNlCj4gPiA+IGludGVsX2NkY2xrX2NoYW5nZWQoKSAqLwo+ID4gPiAgCVdBUk5fT04oaW50ZWxf Y2RjbGtfbmVlZHNfbW9kZXNldCgmZGV2X3ByaXYtPmNkY2xrLmh3LAo+ID4gPiAmY2RjbGtfc3Rh dGUpKTsKPiA+ID4gIAo+ID4gPiAtCWdlbjlfYXNzZXJ0X2RidWZfZW5hYmxlZChkZXZfcHJpdik7 Cj4gPiA+IC0KPiA+ID4gIAlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCj4gPiA+ICAJCWJ4dF92 ZXJpZnlfZGRpX3BoeV9wb3dlcl93ZWxscyhkZXZfcHJpdik7Cj4gPiA+ICAKPiA+ID4gQEAgLTQy NTQsMzEgKzQyNDMsNTEgQEAgc3RhdGljIHZvaWQgZ2VuOV9kYnVmX2Rpc2FibGUoc3RydWN0Cj4g PiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gPiAgCWludGVsX2RidWZfc2xpY2Vf c2V0KGRldl9wcml2LCBEQlVGX0NUTCwgZmFsc2UpOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC1z dGF0aWMgdTggaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiA+ID4gK2ludCBpbnRlbF9kYnVmX21heF9zbGljZXMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gPiAgewo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpIDwgMTEpCj4gPiA+IC0JCXJldHVybiAxOwo+ID4gPiAtCXJldHVybiAyOwo+ID4gPiArCXJl dHVybiBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3VwcG9ydGVkX3NsaWNlczsKPiA+ID4gK30KPiA+ IAo+ID4gS2luZGEgcG9pbnRsZXNzIGZ1bmN0aW9uIG5vdy4gJ3N1cHBvcnRlZF9zbGljZXMnIGlz IG5vdCBhIHZlcnkgZ29vZAo+ID4gbmFtZS4gU2hvdWxkIGJlICdudW1fZGJ1Zl9zbGljZXMnIG9y IHNvbWV0aGluZyBhbG9uZyB0aG9zZSBsaW5lcy4KPiAKPiBTdXBwb3J0ZWQgc2xpY2VzIHJlYWxs eSBtZWFucyBob3cgbXVjaCBzbGljZXMgd2Ugc3VwcG9ydCBpbiBoYXJkd2FyZS4KPiBudW1fZGJ1 Zl9zbGljZXMgd2lsbCBub3QgcmVmbGVjdCB0aGF0LCBpdCB3aWxsIGJlIG1vcmUgYW1iaWdpb3Vz Lgo+IEkgZG9uJ3QgbGlrZSB0aGlzIG5hbWUuCgpzdXBwb3J0ZWRfc2xpY2VzIGRvZXNuJ3QgZXZl biBzYXkgImRidWYiIGFueXdoZXJlLiBTbyBpdCdzIGV2ZW4gbW9yZQphbWJpZ3VvdXMuIEFsc28g d2UgYWxyZWFkeSBoYXZlIG51bV9waXBlcywgbnVtX3Nwcml0ZXMsIGV0Yy4KCj4gCj4gPiAKPiA+ ID4gKwo+ID4gPiArdm9pZCBpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ICt7Cj4gPiA+ICsJY29uc3QgdTggaHdfZW5hYmxlZF9z bGljZXMgPSBkZXZfcHJpdi0KPiA+ID4gPndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXM7Cj4g PiAKPiA+IFNlZW1zIGEgcmF0aGVyIHBvaW50bGVzcyB2YXJpYWJsZS4gY29uc3QgYXQgbGVhc3Qg aXMgcG9pbnRsZXNzLgo+ID4gCj4gPiA+ICsKPiA+ID4gKwlpY2xfZGJ1Zl9zbGljZXNfdXBkYXRl KGRldl9wcml2LCBod19lbmFibGVkX3NsaWNlcyk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIHZv aWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gPiA+ICAJCQkgICAgdTggcmVxX3NsaWNlcykKPiA+ID4gIHsKPiA+ID4gLQljb25zdCB1 OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9wcml2LQo+ID4gPiA+d20uc2tsX2h3LmRkYi5lbmFi bGVkX3NsaWNlczsKPiA+ID4gLQlib29sIHJldDsKPiA+ID4gKwlib29sIHJldCA9IHRydWU7Cj4g PiA+ICsJaW50IGk7Cj4gPiA+ICsJaW50IG1heF9zbGljZXMgPSBpbnRlbF9kYnVmX21heF9zbGlj ZXMoZGV2X3ByaXYpOwo+ID4gPiAgCj4gPiA+IC0JaWYgKHJlcV9zbGljZXMgPiBpbnRlbF9kYnVm X21heF9zbGljZXMoZGV2X3ByaXYpKSB7Cj4gPiA+ICsJaWYgKGh3ZWlnaHQ4KHJlcV9zbGljZXMp ID4gaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKGRldl9wcml2KSkgewo+ID4gPiAgCQlEUk1fRVJST1Io IkludmFsaWQgbnVtYmVyIG9mIGRidWYgc2xpY2VzIHJlcXVlc3RlZFxuIik7Cj4gPiA+ICAJCXJl dHVybjsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gLQlpZiAocmVxX3NsaWNlcyA9PSBod19lbmFi bGVkX3NsaWNlcyB8fCByZXFfc2xpY2VzID09IDApCj4gPiA+IC0JCXJldHVybjsKPiA+ID4gKwlE Uk1fREVCVUdfS01TKCJVcGRhdGluZyBkYnVmIHNsaWNlcyB0byAleFxuIiwgcmVxX3NsaWNlcyk7 Cj4gPiA+ICAKPiA+ID4gLQlpZiAocmVxX3NsaWNlcyA+IGh3X2VuYWJsZWRfc2xpY2VzKQo+ID4g PiAtCQlyZXQgPSBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwgREJVRl9DVExfUzIsCj4g PiA+IHRydWUpOwo+ID4gPiAtCWVsc2UKPiA+ID4gLQkJcmV0ID0gaW50ZWxfZGJ1Zl9zbGljZV9z ZXQoZGV2X3ByaXYsIERCVUZfQ1RMX1MyLAo+ID4gPiBmYWxzZSk7Cj4gPiA+ICsJZm9yIChpID0g MDsgaSA8IG1heF9zbGljZXM7IGkrKykgewo+ID4gPiArCQlpbnQgc2xpY2VfYml0ID0gQklUKGkp Owo+ID4gPiArCQlib29sIHNsaWNlX3NldCA9IChzbGljZV9iaXQgJiByZXFfc2xpY2VzKSAhPSAw Owo+ID4gPiArCj4gPiA+ICsJCXN3aXRjaCAoc2xpY2VfYml0KSB7Cj4gPiA+ICsJCWNhc2UgREJV Rl9TMV9CSVQ6Cj4gPiA+ICsJCQlyZXQgPSByZXQgJiYgaW50ZWxfZGJ1Zl9zbGljZV9zZXQoZGV2 X3ByaXYsCj4gPiA+ICsJCQkJCQkJICBEQlVGX0NUTF9TMSwKPiA+ID4gKwkJCQkJCQkgIHNsaWNl X3NldCk7Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwkJY2FzZSBEQlVGX1MyX0JJVDoKPiA+ID4g KwkJCXJldCA9IHJldCAmJiBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwKPiA+ID4gKwkJ CQkJCQkgIERCVUZfQ1RMX1MyLAo+ID4gPiArCQkJCQkJCSAgc2xpY2Vfc2V0KTsKPiA+IAo+ID4g VGhlIHJldHVybiB2YWx1ZSBvbiBpbnRlbF9kYnVmX3NsaWNlX3NldCgpIHNlZW1zIHBvaW50bGVz cy4gSSdkIG51a2UKPiA+IGl0Lgo+ID4gCj4gPiBBbHNvIGFzIGxvbmcgeW91IGhhdmUgaW50ZWxf ZGJ1Zl9zbGljZV9zZXQoKSBJJ2QgcHJvYmFibHkganVzdCBwYXNzCj4gPiB0aGUKPiA+IHNsaWNl IGluZGV4IHRoZXJlIGFuZCBsZXQgaXQgZGVhbCB3aXRoIHRoZSByZWdpc3RlciBkZXRhaWxzLiBE QlVGX0NUTAo+ID4gc2hvdWxkIHByb2JhYmx5IGJlIHBhcmFtZXRyaXplZCBhcyB3ZWxsIHNvIHlv dSBkb24ndCBuZWVkIGFubm95aW5nCj4gPiBzd2l0Y2gKPiA+IHN0YXRlbWVudHMuCj4gCj4gV2hh dCBpZiBpdCBmYWlscz8gU2hvdWxkbid0IHdlIHN0aWxsIGhhdmUgc29tZSBjbHVlIHdoYXQgc3Rh dGUgZG8gd2UKPiBoYXZlL2hhZCBhdCB0aGUgbW9tZW50PwoKSXQgaWYgZmFpbHMgeW91IGxvZyBh biBlcnJvciBhbmQga2VlcCBnb2luZy4KCj4gCj4gPiAKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiAr CQlkZWZhdWx0Ogo+ID4gPiArCQkJTUlTU0lOR19DQVNFKHNsaWNlX2JpdCk7Cj4gPiA+ICsJCX0K PiA+ID4gKwl9Cj4gPiA+ICAKPiA+ID4gIAlpZiAocmV0KQo+ID4gPiAgCQlkZXZfcHJpdi0+d20u c2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9IHJlcV9zbGljZXM7Cj4gPiA+IEBAIC00Mjg2LDQw ICs0Mjk1LDIxIEBAIHZvaWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QKPiA+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAKPiA+ID4gIHN0YXRpYyB2b2lkIGljbF9k YnVmX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ICB7Cj4g PiA+IC0JSTkxNV9XUklURShEQlVGX0NUTF9TMSwgSTkxNV9SRUFEKERCVUZfQ1RMX1MxKSB8Cj4g PiA+IERCVUZfUE9XRVJfUkVRVUVTVCk7Cj4gPiA+IC0JSTkxNV9XUklURShEQlVGX0NUTF9TMiwg STkxNV9SRUFEKERCVUZfQ1RMX1MyKSB8Cj4gPiA+IERCVUZfUE9XRVJfUkVRVUVTVCk7Cj4gPiA+ IC0JUE9TVElOR19SRUFEKERCVUZfQ1RMX1MyKTsKPiA+ID4gLQo+ID4gPiAtCXVkZWxheSgxMCk7 Cj4gPiA+IC0KPiA+ID4gLQlpZiAoIShJOTE1X1JFQUQoREJVRl9DVExfUzEpICYgREJVRl9QT1dF Ul9TVEFURSkgfHwKPiA+ID4gLQkgICAgIShJOTE1X1JFQUQoREJVRl9DVExfUzIpICYgREJVRl9Q T1dFUl9TVEFURSkpCj4gPiA+IC0JCURSTV9FUlJPUigiREJ1ZiBwb3dlciBlbmFibGUgdGltZW91 dFxuIik7Cj4gPiA+IC0JZWxzZQo+ID4gPiAtCQkvKgo+ID4gPiAtCQkgKiBGSVhNRTogZm9yIG5v dyBwcmV0ZW5kIHRoYXQgd2Ugb25seSBoYXZlIDEgc2xpY2UsCj4gPiA+IHNlZQo+ID4gPiAtCQkg KiBpbnRlbF9lbmFibGVkX2RidWZfc2xpY2VzX251bSgpLgo+ID4gPiAtCQkgKi8KPiA+ID4gLQkJ ZGV2X3ByaXYtPndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXMgPSAxOwo+ID4gPiArCS8qCj4g PiA+ICsJICogSnVzdCBwb3dlciB1cCAxIHNsaWNlLCB3ZSB3aWxsCj4gPiA+ICsJICogZmlndXJl IG91dCBsYXRlciB3aGljaCBzbGljZXMgd2UgaGF2ZSBhbmQgd2hhdCB3ZSBuZWVkLgo+ID4gPiAr CSAqLwo+ID4gPiArCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzID0gREJV Rl9TMV9CSVQ7Cj4gPiAKPiA+IFRoYXQgc3R1ZmYgcmVhbGx5IHNob3VsZG4ndCBiZSBtb2RpZmll ZCBieSBsb3cgbGV2ZWwgZnVuY3Rpb25zLgo+ID4gVGhlIGludGlhbCB2YWx1ZSBzaG91bGQgY29t ZSBmcm9tIHJlYWRvdXQsIGFuZCBhZnRlciB0aGF0IGl0IHNob3VsZAo+ID4gYmUgYWRqdXN0ZWQg YXMgcGFydCBvZiB0aGUgb3ZlcmFsbCBhdG9taWMgc3RhdGUuCj4gCj4gV2VsbCwgYXMgeW91IGNh biBzZWUgY3VycmVudGx5IHRoaXMgaXMgZXZlbiB3b3JzZSAtIGhhcyBzb21lIHdlaXJkCj4gaGFy ZGNvZGVkIHN0dWZmIGFuZCBpcyBtb2RpZmllZCBsaWtlIHRoYXQuIEFsc28gaWYgd2UgYXJlIGVu YWJsaW5nIHRoZSAKPiBkYnVmIHNsaWNlcywgc2hvdWxkbid0IHdlIHJlYWxseSBkZXRlcm1pbmUg d2hhdCB2YWx1ZSBzaG91bGQgYmUgdGhlcmU/Cj4gCj4gQWxzbyBJIHdvdWxkbid0IHJlYWxseSBh bHdheXMgdHJ1c3QgdGhlIHJlYWRvdXQsIGFzIHRvIG1lIGl0IHNlZW1zCj4gaWNlbGFrZSByZXNl dHMgaXQgY29uc3RhbnRseSB0byAyIGFmdGVyIHN1c3BlbmQvcmVzdW1lLiAKClRoZSBwb2ludCBv ZiByZWFkb3V0IGlzIHRoYXQgd2Ugc3luY3Job25pemUgb3VyIHNvZnR3YXJlIHN0YXRlIHdpdGgg dGhlCmN1cnJlbnQgc3RhdGUgb2YgaGFyZHdhcmUgd2l0aG91dCBoYXZpbmcgdG8gbW9kaWZ5IHRo ZSBoYXJkd2FyZSBzdGF0ZS4KT25jZSBzeW5jaHJvbml6ZWQgdGhlIGRyaXZlciB0YWtlcyBvdmVy IGFuZCB0ZWxscyB0aGUgaHcgd2hhdCB0byBkby4KCj4gCj4gPiAKPiA+ID4gKwlpY2xfcHJvZ3Jh bV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIHN0YXRpYyB2 b2lkIGljbF9kYnVmX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ID4gPiAgewo+ID4gPiAtCUk5MTVfV1JJVEUoREJVRl9DVExfUzEsIEk5MTVfUkVBRChEQlVGX0NU TF9TMSkgJgo+ID4gPiB+REJVRl9QT1dFUl9SRVFVRVNUKTsKPiA+ID4gLQlJOTE1X1dSSVRFKERC VUZfQ1RMX1MyLCBJOTE1X1JFQUQoREJVRl9DVExfUzIpICYKPiA+ID4gfkRCVUZfUE9XRVJfUkVR VUVTVCk7Cj4gPiA+IC0JUE9TVElOR19SRUFEKERCVUZfQ1RMX1MyKTsKPiA+ID4gLQo+ID4gPiAt CXVkZWxheSgxMCk7Cj4gPiA+IC0KPiA+ID4gLQlpZiAoKEk5MTVfUkVBRChEQlVGX0NUTF9TMSkg JiBEQlVGX1BPV0VSX1NUQVRFKSB8fAo+ID4gPiAtCSAgICAoSTkxNV9SRUFEKERCVUZfQ1RMX1My KSAmIERCVUZfUE9XRVJfU1RBVEUpKQo+ID4gPiAtCQlEUk1fRVJST1IoIkRCdWYgcG93ZXIgZGlz YWJsZSB0aW1lb3V0IVxuIik7Cj4gPiA+IC0JZWxzZQo+ID4gPiAtCQkvKgo+ID4gPiAtCQkgKiBG SVhNRTogZm9yIG5vdyBwcmV0ZW5kIHRoYXQgdGhlIGZpcnN0IHNsaWNlIGlzCj4gPiA+IGFsd2F5 cwo+ID4gPiAtCQkgKiBlbmFibGVkLCBzZWUgaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNlc19udW0o KS4KPiA+ID4gLQkJICovCj4gPiA+IC0JCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRf c2xpY2VzID0gMTsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIERpc2FibGUgYWxsIHNsaWNlcwo+ID4g PiArCSAqLwo+ID4gPiArCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzID0g MDsKPiA+ID4gKwlpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICB9Cj4g PiA+ICAKPiA+ID4gIHN0YXRpYyB2b2lkIGljbF9tYnVzX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuaAo+ID4gPiBpbmRleCAxZGEwNGYzZTBmYjMu LmI3MDU3ZDY4YWQ3OCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gQEAgLTMxMSw4ICszMTEsMTAg QEAgaW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoc3RydWN0Cj4gPiA+IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCj4gPiA+ICAJZm9yICgod2YpID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQo KGk5MTUpLCAoZG9tYWluKSk7ICh3Zik7IFwKPiA+ID4gIAkgICAgIGludGVsX2Rpc3BsYXlfcG93 ZXJfcHV0X2FzeW5jKChpOTE1KSwgKGRvbWFpbiksICh3ZikpLAo+ID4gPiAod2YpID0gMCkKPiA+ ID4gIAo+ID4gPiAraW50IGludGVsX2RidWZfbWF4X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwo+ID4gPiAgdm9pZCBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gIAkJCSAgICB1OCByZXFfc2xpY2Vz KTsKPiA+ID4gK3ZvaWQgaWNsX3Byb2dyYW1fZGJ1Zl9zbGljZXMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKPiA+ID4gIAo+ID4gPiAgdm9pZCBjaHZfcGh5X3Bvd2VyZ2F0ZV9s YW5lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gIAkJCSAgICAgYm9vbCBv dmVycmlkZSwgdW5zaWduZWQgaW50IG1hc2spOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMKPiA+ID4gaW5kZXggODJlNGU2YmYwOGMzLi45Njc0MWU2ODYzM2EgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gPiBAQCAtNTEsNiArNTEsNyBAQAo+ID4gPiAg I2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfYncuaCIKPiA+ID4gICNpbmNsdWRlICJkaXNwbGF5L2lu dGVsX2NkY2xrLmgiCj4gPiA+ICAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmgiCj4gPiA+ICsjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgiCj4gPiA+ ICAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kcC5oIgo+ID4gPiAgI2luY2x1ZGUgImRpc3BsYXkv aW50ZWxfZmJkZXYuaCIKPiA+ID4gICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2hvdHBsdWcuaCIK PiA+ID4gQEAgLTI1ODgsNiArMjU4OSwxMCBAQCBzdGF0aWMgaW50IGludGVsX3J1bnRpbWVfcmVz dW1lKHN0cnVjdAo+ID4gPiBkZXZpY2UgKmtkZXYpCj4gPiA+ICAJaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ID4gPiAgCQlyZXQgPSB2bHZf cmVzdW1lX3ByZXBhcmUoZGV2X3ByaXYsIHRydWUpOwo+ID4gPiAgCj4gPiA+ICsJLyogV2VpcmQg aGFjayB0byBmaXggSUNMIGhhcmR3YXJlIGJ1ZywgYXMgaXQgcmVzZXRzIERCVUYgc2xpY2VzCj4g PiA+IHJlZyAqLwo+ID4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID09IDExKQo+ID4gPiAr CQlpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICsKPiA+ID4gIAlpbnRl bF91bmNvcmVfcnVudGltZV9yZXN1bWUoJmRldl9wcml2LT51bmNvcmUpOwo+ID4gPiAgCj4gPiA+ ICAJaW50ZWxfcnVudGltZV9wbV9lbmFibGVfaW50ZXJydXB0cyhkZXZfcHJpdik7Cj4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiBpbmRleCA3ZTBmNjdiYWJlMjAuLmEzOTY5 NzdjOWMyZCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IEBAIC04 MDQsNyArODA0LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrbF9kZGJfZW50cnlfZXF1YWwoY29u c3QKPiA+ID4gc3RydWN0IHNrbF9kZGJfZW50cnkgKmUxLAo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKPiA+IAo+ID4gVGhpcyBzdHJ1Y3QgaXMgcXVp dGUgcG9pbnRsZXNzLiBTaG91bGQgYmUga2lsbGVkIG9mZi4KPiAKPiBMZWdhY3kgc3R1ZmYsIG5v dCBhZGRlZCBieSBtZS4gUXVpdGUgZmluZSB3aXRoIHJlbW92aW5nIGl0IC0gCj4gYnV0IHNob3Vs ZCB3ZSByZWFsbHkgZG8gYWxsIHRoaXMgYXQgdGhlIHNhbWUgdGltZSBhbmQgaW4gc2FtZQo+IHBh dGNoPyAKCk5vdCB0aGUgc2FtZSBwYXRjaC4gQnV0IGNsZWFuIHVwIHRoZSBjb2J3ZWJzIGZpcnN0 LCB0aGVuIGFkZCB0aGUgbmV3CnN0dWZmLiBNdWNoIGVhc2llciB0aGF0IHdheSBhcm91bmQuCgo+ IAo+ID4gCj4gPiA+IC0JdTggZW5hYmxlZF9zbGljZXM7IC8qIEdFTjExIGhhcyBjb25maWd1cmFi bGUgMiBzbGljZXMgKi8KPiA+ID4gKwl1OCBlbmFibGVkX3NsaWNlczsgICAvKiBCaXRtYXNrIG9m IGN1cnJlbnRseSBlbmFibGVkIERCdWYKPiA+ID4gc2xpY2VzICovCj4gPiA+ICB9Owo+ID4gPiAg Cj4gPiA+ICBzdHJ1Y3Qgc2tsX2RkYl92YWx1ZXMgewo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGNpLmMKPiA+ID4gaW5kZXggMWJiNzAxZDMyYTVkLi44ZTg2YWY1MDU3MzAgMTAwNjQ0Cj4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiA+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYwo+ID4gPiBAQCAtNjE0LDcgKzYxNCw4IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8KPiA+ID4gaW50ZWxfY2hlcnJ5dmll d19pbmZvID0gewo+ID4gPiAgCS5oYXNfZ3RfdWMgPSAxLCBcCj4gPiA+ICAJLmRpc3BsYXkuaGFz X2hkY3AgPSAxLCBcCj4gPiA+ICAJLmRpc3BsYXkuaGFzX2lwYyA9IDEsIFwKPiA+ID4gLQkuZGRi X3NpemUgPSA4OTYKPiA+ID4gKwkuZGRiX3NpemUgPSA4OTYsIFwKPiA+ID4gKwkuc3VwcG9ydGVk X3NsaWNlcyA9IDEKPiA+ID4gIAo+ID4gPiAgI2RlZmluZSBTS0xfUExBVEZPUk0gXAo+ID4gPiAg CUdFTjlfRkVBVFVSRVMsIFwKPiA+ID4gQEAgLTY1MCw2ICs2NTEsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGludGVsX2RldmljZV9pbmZvCj4gPiA+IGludGVsX3NreWxha2VfZ3Q0X2luZm8gPSB7 Cj4gPiA+ICAJR0VOKDkpLCBcCj4gPiA+ICAJLmlzX2xwID0gMSwgXAo+ID4gPiAgCS5kaXNwbGF5 Lmhhc19ob3RwbHVnID0gMSwgXAo+ID4gPiArCS5zdXBwb3J0ZWRfc2xpY2VzID0gMSwgXAo+ID4g PiAgCS5lbmdpbmVfbWFzayA9IEJJVChSQ1MwKSB8IEJJVChWQ1MwKSB8IEJJVChCQ1MwKSB8IEJJ VChWRUNTMCksCj4gPiA+IFwKPiA+ID4gIAkucGlwZV9tYXNrID0gQklUKFBJUEVfQSkgfCBCSVQo UElQRV9CKSB8IEJJVChQSVBFX0MpLCBcCj4gPiA+ICAJLmhhc182NGJpdF9yZWxvYyA9IDEsIFwK PiA+ID4gQEAgLTczNyw2ICs3MzksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2Rldmlj ZV9pbmZvCj4gPiA+IGludGVsX2NvZmZlZWxha2VfZ3QzX2luZm8gPSB7Cj4gPiA+ICAJR0VOOV9G RUFUVVJFUywgXAo+ID4gPiAgCUdFTigxMCksIFwKPiA+ID4gIAkuZGRiX3NpemUgPSAxMDI0LCBc Cj4gPiA+ICsJLnN1cHBvcnRlZF9zbGljZXMgPSAxLCBcCj4gPiA+ICAJLmRpc3BsYXkuaGFzX2Rz YyA9IDEsIFwKPiA+ID4gIAkuaGFzX2NvaGVyZW50X2dndHQgPSBmYWxzZSwgXAo+ID4gPiAgCUdM S19DT0xPUlMKPiA+ID4gQEAgLTc3Myw2ICs3NzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX2RldmljZV9pbmZvCj4gPiA+IGludGVsX2Nhbm5vbmxha2VfaW5mbyA9IHsKPiA+ID4gIAl9 LCBcCj4gPiA+ICAJR0VOKDExKSwgXAo+ID4gPiAgCS5kZGJfc2l6ZSA9IDIwNDgsIFwKPiA+ID4g Kwkuc3VwcG9ydGVkX3NsaWNlcyA9IDIsIFwKPiA+ID4gIAkuaGFzX2xvZ2ljYWxfcmluZ19lbHNx ID0gMSwgXAo+ID4gPiAgCS5jb2xvciA9IHsgLmRlZ2FtbWFfbHV0X3NpemUgPSAzMywgLmdhbW1h X2x1dF9zaXplID0gMjYyMTQ1IH0KPiA+ID4gIAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmgKPiA+ID4gaW5kZXggYTYwN2VhNTIwODI5Li5mYmE1NzMxMDYzZDggMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBAQCAtNzczNCw5ICs3NzM0LDExIEBAIGVu dW0gewo+ID4gPiAgI2RlZmluZSBESVNQX0FSQl9DVEwyCV9NTUlPKDB4NDUwMDQpCj4gPiA+ICAj ZGVmaW5lICBESVNQX0RBVEFfUEFSVElUSU9OXzVfNgkoMSA8PCA2KQo+ID4gPiAgI2RlZmluZSAg RElTUF9JUENfRU5BQkxFCQkoMSA8PCAzKQo+ID4gPiAtI2RlZmluZSBEQlVGX0NUTAlfTU1JTygw eDQ1MDA4KQo+ID4gPiAtI2RlZmluZSBEQlVGX0NUTF9TMQlfTU1JTygweDQ1MDA4KQo+ID4gPiAt I2RlZmluZSBEQlVGX0NUTF9TMglfTU1JTygweDQ0RkU4KQo+ID4gPiArI2RlZmluZSBEQlVGX1Mx X0JJVAkJCUJJVCgwKQo+ID4gPiArI2RlZmluZSBEQlVGX1MyX0JJVAkJCUJJVCgxKQo+ID4gCj4g PiBUaGVzZSBhcmUgbm90IGJpdHMgaW5zaWRlIERCVUZfQ1RMIHNvIHRoZXkgc2hvdWxkIG5vdCBi ZSBoZXJlLgo+ID4gSSdkIGp1c3QgbnVrZSB0aGVtIGVudGlyZWx5LiBJZiB5b3UgdGhpbmsgd2Ug bmVlZCBtb3JlIHRoYW4gYW4KPiA+IGludCB0byByZWZlciB0byBhIHNsaWNlIHRoZW4gSU1PIHNv bWV0aGluZyBzaW1wbGUgbGlrZQo+ID4gCj4gPiBlbnVtIGRidWZfc2xpY2Ugewo+ID4gCURCVUZf UzEsCj4gPiAJREJVRl9TMiwKPiA+IH07Cj4gPiAKPiA+IHdvdWxkIG1hdGNoIHRoZSBnZW5lcmFs IGFwcG9yYWNoIHdlIHVzZSBmb3Igb3RoZXIgdGhpbmdzIG11Y2ggYmV0dGVyCj4gPiByYXRoZXIg dGhhbiBkZWZpbmluZyBzb21lIHNoaWZ0ZWQgdmFsdWVzLgo+IAo+IFdlIG5lZWQgdG8gY29tYmlu ZSBzbGljZXMgLSBzbyBiaXRtYXNrIGlzIHF1aXRlIHN1aXRhYmxlIGZvciB0aGF0LCAKPiBJIGNh biBvZiBjb3Vyc2UgdXNlIHRoaXMgZW51bSwgYnV0IHRoZW4gSSdsbCBoYXZlIHRvIHJlLWVuY29k ZSBpdCAKPiB0byBiaXRtYXNrIGFueXdheXMuCgpXaGljaCBpcyBwcmV0dHkgbXVjaCBob3cgZXZl cnl0aGluZyBlbHNlIHdvcmtzIGluIHRoZSBkcml2ZXIuCgo+IAo+IAo+ID4gCj4gPiA+ICsjZGVm aW5lIERCVUZfQ1RMCQkJX01NSU8oMHg0NTAwOCkKPiA+ID4gKyNkZWZpbmUgREJVRl9DVExfUzEJ CQlfTU1JTygweDQ1MDA4KQo+ID4gPiArI2RlZmluZSBEQlVGX0NUTF9TMgkJCV9NTUlPKDB4NDRG RTgpCj4gPiA+ICAjZGVmaW5lICBEQlVGX1BPV0VSX1JFUVVFU1QJCSgxIDw8IDMxKQo+ID4gPiAg I2RlZmluZSAgREJVRl9QT1dFUl9TVEFURQkJKDEgPDwgMzApCj4gPiA+ICAjZGVmaW5lIEdFTjdf TVNHX0NUTAlfTU1JTygweDQ1MDEwKQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RldmljZV9pbmZvLmgKPiA+ID4gaW5kZXggNGJkZjhhNmNmYjQ3Li5iYTM0ZTFhNWM1OTEg MTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZv LmgKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaAo+ ID4gPiBAQCAtMTgwLDYgKzE4MCw3IEBAIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7Cj4gPiA+ ICAJfSBkaXNwbGF5Owo+ID4gPiAgCj4gPiA+ICAJdTE2IGRkYl9zaXplOyAvKiBpbiBibG9ja3Mg Ki8KPiA+ID4gKwl1OCBzdXBwb3J0ZWRfc2xpY2VzOyAvKiBudW1iZXIgb2YgREJ1ZiBzbGljZXMg Ki8KPiA+ID4gIAo+ID4gPiAgCS8qIFJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSB2YXJpb3VzIGRp c3BsYXkgcGlwZXMgYW5kCj4gPiA+IHRyYW5zY29kZXJzICovCj4gPiA+ICAJaW50IHBpcGVfb2Zm c2V0c1tJOTE1X01BWF9UUkFOU0NPREVSU107Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwo+ID4gPiBpbmRleCAyZDM4OWU0MzdlODcuLjFlYTgxYWI5MjQyOSAxMDA2NDQKPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiA+IEBAIC0zNTg2LDI0ICszNTg2LDIwIEBAIGJv b2wgaWxrX2Rpc2FibGVfbHBfd20oc3RydWN0IGRybV9kZXZpY2UKPiA+ID4gKmRldikKPiA+ID4g IAlyZXR1cm4gX2lsa19kaXNhYmxlX2xwX3dtKGRldl9wcml2LCBXTV9ESVJUWV9MUF9BTEwpOwo+ ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC1zdGF0aWMgdTggaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNl c19udW0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gKmRldl9wcml2KQo+ID4gPiArc3Rh dGljIHU4IGludGVsX2VuYWJsZWRfZGJ1Zl9zbGljZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUK PiA+ID4gKmRldl9wcml2KQo+ID4gPiAgewo+ID4gPiAtCXU4IGVuYWJsZWRfc2xpY2VzOwo+ID4g PiAtCj4gPiA+IC0JLyogU2xpY2UgMSB3aWxsIGFsd2F5cyBiZSBlbmFibGVkICovCj4gPiA+IC0J ZW5hYmxlZF9zbGljZXMgPSAxOwo+ID4gPiArCXU4IGVuYWJsZWRfc2xpY2VzID0gMDsKPiA+ID4g IAo+ID4gPiAgCS8qIEdlbiBwcmlvciB0byBHRU4xMSBoYXZlIG9ubHkgb25lIERCdWYgc2xpY2Ug Ki8KPiA+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ID4gPiAtCQlyZXR1cm4g ZW5hYmxlZF9zbGljZXM7Cj4gPiA+ICsJCXJldHVybiBEQlVGX1MxX0JJVDsKPiA+IAo+ID4gSSdk IG51a2UgdGhpcyBzcGVjaWFsIGNhc2UgZW50aXJlbHkgYW5kIGp1c3QgcmVhZCBldmVyeXRoaW5n IGZyb20gdGhlCj4gPiBody4gQXNzdW1pbmcgd2UgbmVlZCByZWFkb3V0IHNvbWV3aGVyZS4KPiAK PiBXZSBoYXZlIGl0IHRoYXQgd2F5IGhhcmRjb2RlZCByaWdodCBub3cgaW4gZHJtLXRpcC4gSSB0 aGluayB0aGlzIGlzIGEKPiBzdWJqZWN0IHRvIG90aGVyIHBhdGNoLCBidXQgbm90IHRoaXMgY2hh bmdlLiBBcyBJIHVuZGVyc3RhbmQgd2UgbmVlZCAKPiB0byBmaXJzdCBmaWd1cmUgb3V0IGhvdyB0 byBkbyBpdCBwcm9wZXJseS4gCj4gVGhpcyBwYXRjaCBhbnl3YXkgbWFrZXMgaXQgYmV0dGVyIGJ5 IGF0IGxlYXN0IHJlbW92aW5nIGhhcmRjb2RlZAo+IHJlbGF0aW9uIGJldHdlZW4gbnVtYmVyIG9m IHNsaWNlcyBhbmQgd2hpY2ggc2xpY2VzIGFyZSBlbmFibGVkLgo+IFdpdGggY3VycmVudCBjb2Rl IHRoZXJlIGlzIG5vIHdheSBmb3IgZXhhbXBsZSB0byBlbmFibGUgc2Vjb25kIERCdWYKPiBzbGlj ZSBvbmx5LCB3aGljaCBpcyByZXF1aXJlZCBieSBCU3BlYy4KPiAKPiA+IAo+ID4gPiAgCj4gPiA+ IC0JLyoKPiA+ID4gLQkgKiBGSVhNRTogZm9yIG5vdyB3ZSdsbCBvbmx5IGV2ZXIgdXNlIDEgc2xp Y2U7IHByZXRlbmQgdGhhdCB3ZQo+ID4gPiBoYXZlCj4gPiA+IC0JICogb25seSB0aGF0IDEgc2xp Y2UgZW5hYmxlZCB1bnRpbCB3ZSBoYXZlIGEgcHJvcGVyIHdheSBmb3Igb24tCj4gPiA+IGRlbWFu ZAo+ID4gPiAtCSAqIHRvZ2dsaW5nIG9mIHRoZSBzZWNvbmQgc2xpY2UuCj4gPiA+IC0JICovCj4g PiA+IC0JaWYgKDAgJiYgSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9XRVJfU1RBVEUp Cj4gPiA+IC0JCWVuYWJsZWRfc2xpY2VzKys7Cj4gPiA+ICsJLyogQ2hlY2sgaWYgc2Vjb25kIERC dWYgc2xpY2UgaXMgZW5hYmxlZCAqLwo+ID4gPiArCWlmIChJOTE1X1JFQUQoREJVRl9DVExfUzEp ICYgREJVRl9QT1dFUl9TVEFURSkKPiA+ID4gKwkJZW5hYmxlZF9zbGljZXMgfD0gREJVRl9TMV9C SVQ7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9X RVJfU1RBVEUpCj4gPiA+ICsJCWVuYWJsZWRfc2xpY2VzIHw9IERCVUZfUzJfQklUOwo+ID4gPiAg Cj4gPiA+ICAJcmV0dXJuIGVuYWJsZWRfc2xpY2VzOwo+ID4gPiAgfQo+ID4gPiBAQCAtMzgxMiwz NiArMzgwOCwzOCBAQCBzdGF0aWMgdTE2IGludGVsX2dldF9kZGJfc2l6ZShzdHJ1Y3QKPiA+ID4g ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAJCQkgICAgICBjb25zdCBpbnQgbnVt X2FjdGl2ZSwKPiA+ID4gIAkJCSAgICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYikK PiA+ID4gIHsKPiA+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRf bW9kZTsKPiA+ID4gLQl1NjQgdG90YWxfZGF0YV9idzsKPiA+ID4gIAl1MTYgZGRiX3NpemUgPSBJ TlRFTF9JTkZPKGRldl9wcml2KS0+ZGRiX3NpemU7Cj4gPiA+IC0KPiA+ID4gIAlXQVJOX09OKGRk Yl9zaXplID09IDApOwo+ID4gPiAgCj4gPiA+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAx MSkKPiA+ID4gIAkJcmV0dXJuIGRkYl9zaXplIC0gNDsgLyogNCBibG9ja3MgZm9yIGJ5cGFzcyBw YXRoCj4gPiA+IGFsbG9jYXRpb24gKi8KPiA+ID4gIAo+ID4gPiAtCWFkanVzdGVkX21vZGUgPSAm Y3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKPiA+ID4gLQl0b3RhbF9kYXRhX2J3ID0gdG90 YWxfZGF0YV9yYXRlICoKPiA+ID4gZHJtX21vZGVfdnJlZnJlc2goYWRqdXN0ZWRfbW9kZSk7Cj4g PiA+ICsJcmV0dXJuIGRkYl9zaXplOwo+ID4gPiArfQo+ID4gPiAgCj4gPiA+IC0JLyoKPiA+ID4g LQkgKiAxMkdCL3MgaXMgbWF4aW11bSBCVyBzdXBwb3J0ZWQgYnkgc2luZ2xlIERCdWYgc2xpY2Uu Cj4gPiA+IC0JICoKPiA+ID4gLQkgKiBGSVhNRSBkYnVmIHNsaWNlIGNvZGUgaXMgYnJva2VuOgo+ ID4gPiAtCSAqIC0gbXVzdCB3YWl0IGZvciBwbGFuZXMgdG8gc3RvcCB1c2luZyB0aGUgc2xpY2Ug YmVmb3JlCj4gPiA+IHBvd2VyaW5nIGl0IG9mZgo+ID4gPiAtCSAqIC0gcGxhbmUgc3RyYWRkbGlu ZyBib3RoIHNsaWNlcyBpcyBpbGxlZ2FsIGluIG11bHRpLXBpcGUKPiA+ID4gc2NlbmFyaW9zCj4g PiA+IC0JICogLSBzaG91bGQgdmFsaWRhdGUgd2Ugc3RheSB3aXRoaW4gdGhlIGh3IGJhbmR3aWR0 aCBsaW1pdHMKPiA+ID4gLQkgKi8KPiA+ID4gLQlpZiAoMCAmJiAobnVtX2FjdGl2ZSA+IDEgfHwg dG90YWxfZGF0YV9idyA+PSBHQnBzKDEyKSkpIHsKPiA+ID4gLQkJZGRiLT5lbmFibGVkX3NsaWNl cyA9IDI7Cj4gPiA+IC0JfSBlbHNlIHsKPiA+ID4gLQkJZGRiLT5lbmFibGVkX3NsaWNlcyA9IDE7 Cj4gPiA+IC0JCWRkYl9zaXplIC89IDI7Cj4gPiA+IC0JfQo+ID4gPiArLyoKPiA+ID4gKyAqIENh bGN1bGF0ZSBpbml0aWFsIERCdWYgc2xpY2Ugb2Zmc2V0LCBiYXNlZCBvbiBzbGljZSBzaXplCj4g PiA+ICsgKiBhbmQgbWFzayhpLmUgaWYgc2xpY2Ugc2l6ZSBpcyAxMDI0IGFuZCBzZWNvbmQgc2xp Y2UgaXMgZW5hYmxlZAo+ID4gPiArICogb2Zmc2V0IHdvdWxkIGJlIDEwMjQpCj4gPiA+ICsgKi8K PiA+ID4gK3N0YXRpYyB1MzIgc2tsX2dldF9maXJzdF9kYnVmX3NsaWNlX29mZnNldCh1MzIgZGJ1 Zl9zbGljZV9tYXNrLAo+ID4gPiArCQkJCQkgICB1MzIgc2xpY2Vfc2l6ZSwgdTMyCj4gPiA+IGRk Yl9zaXplKQo+ID4gPiArewo+ID4gPiArCXUzMiBvZmZzZXQgPSAwOwo+ID4gPiAgCj4gPiA+IC0J cmV0dXJuIGRkYl9zaXplOwo+ID4gPiArCWlmICghZGJ1Zl9zbGljZV9tYXNrKQo+ID4gPiArCQly ZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiArCW9mZnNldCA9IChmZnMoZGJ1Zl9zbGljZV9tYXNrKSAt IDEpICogc2xpY2Vfc2l6ZTsKPiA+ID4gKwo+ID4gPiArCVdBUk5fT04ob2Zmc2V0ID49IGRkYl9z aXplKTsKPiA+ID4gKwlyZXR1cm4gb2Zmc2V0Owo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICtzdGF0 aWMgdTMyIGk5MTVfZ2V0X2FsbG93ZWRfZGJ1Zl9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl Cj4gPiA+ICpkZXZfcHJpdiwKPiA+ID4gKwkJCQkgICAgICBpbnQgcGlwZSwgdTMyIGFjdGl2ZV9w aXBlcywKPiA+ID4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4g PiAqY3J0Y19zdGF0ZSk7Cj4gPiA+ICsKPiA+ID4gIHN0YXRpYyB2b2lkCj4gPiA+ICBza2xfZGRi X2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ ICpkZXZfcHJpdiwKPiA+ID4gIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ ID4gPiAqY3J0Y19zdGF0ZSwKPiA+ID4gQEAgLTM4NTcsNyArMzg1NSwxNCBAQCBza2xfZGRiX2dl dF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdAo+ID4gPiBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiA+ID4gIAl1MzIgcGlwZV93aWR0aCA9IDAsIHRvdGFsX3dpZHRoID0gMCwgd2lk dGhfYmVmb3JlX3BpcGUgPSAwOwo+ID4gPiAgCWVudW0gcGlwZSBmb3JfcGlwZSA9IHRvX2ludGVs X2NydGMoZm9yX2NydGMpLT5waXBlOwo+ID4gPiAgCXUxNiBkZGJfc2l6ZTsKPiA+ID4gKwl1MzIg ZGRiX3JhbmdlX3NpemU7Cj4gPiA+ICAJdTMyIGk7Cj4gPiA+ICsJdTMyIGRidWZfc2xpY2VfbWFz azsKPiA+ID4gKwl1MzIgYWN0aXZlX3BpcGVzOwo+ID4gPiArCXUzMiBvZmZzZXQ7Cj4gPiA+ICsJ dTMyIHNsaWNlX3NpemU7Cj4gPiA+ICsJdTMyIHRvdGFsX3NsaWNlX21hc2s7Cj4gPiA+ICsJdTMy IHN0YXJ0LCBlbmQ7Cj4gPiA+ICAKPiA+ID4gIAlpZiAoV0FSTl9PTighc3RhdGUpIHx8ICFjcnRj X3N0YXRlLT5ody5hY3RpdmUpIHsKPiA+ID4gIAkJYWxsb2MtPnN0YXJ0ID0gMDsKPiA+ID4gQEAg LTM4NjYsMTQgKzM4NzEsMjMgQEAgc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhz dHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAJCXJldHVybjsK PiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gLQlpZiAoaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlX2No YW5nZXMpCj4gPiA+ICsJaWYgKGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2VzKSB7Cj4g PiA+ICAJCSpudW1fYWN0aXZlID0gaHdlaWdodDgoaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlcyk7 Cj4gPiA+IC0JZWxzZQo+ID4gPiArCQlhY3RpdmVfcGlwZXMgPSBpbnRlbF9zdGF0ZS0+YWN0aXZl X3BpcGVzOwo+ID4gPiArCX0gZWxzZSB7Cj4gPiA+ICAJCSpudW1fYWN0aXZlID0gaHdlaWdodDgo ZGV2X3ByaXYtPmFjdGl2ZV9waXBlcyk7Cj4gPiA+ICsJCWFjdGl2ZV9waXBlcyA9IGRldl9wcml2 LT5hY3RpdmVfcGlwZXM7Cj4gPiA+ICsJfQo+ID4gPiAgCj4gPiA+ICAJZGRiX3NpemUgPSBpbnRl bF9nZXRfZGRiX3NpemUoZGV2X3ByaXYsIGNydGNfc3RhdGUsCj4gPiA+IHRvdGFsX2RhdGFfcmF0 ZSwKPiA+ID4gIAkJCQkgICAgICAqbnVtX2FjdGl2ZSwgZGRiKTsKPiA+ID4gIAo+ID4gPiArCURS TV9ERUJVR19LTVMoIkdvdCB0b3RhbCBkZGIgc2l6ZSAlZFxuIiwgZGRiX3NpemUpOwo+ID4gPiAr Cj4gPiA+ICsJc2xpY2Vfc2l6ZSA9IGRkYl9zaXplIC8gSU5URUxfSU5GTyhkZXZfcHJpdiktPnN1 cHBvcnRlZF9zbGljZXM7Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVCVUdfS01TKCJHb3QgREJ1ZiBz bGljZSBzaXplICVkXG4iLCBzbGljZV9zaXplKTsKPiA+ID4gKwo+ID4gPiAgCS8qCj4gPiA+ICAJ ICogSWYgdGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydzIG9yIHRoZXJl IGlzIG5vCj4gPiA+ICAJICogbW9kZXNldCByZXF1ZXN0LCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0 byByZWNhbGN1bGF0ZTsKPiA+ID4gQEAgLTM4OTEsMjAgKzM5MDUsNzAgQEAgc2tsX2RkYl9nZXRf cGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhzdHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gPiA+ICAJCXJldHVybjsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gKwkvKgo+ID4g PiArCSAqIEdldCBhbGxvd2VkIERCdWYgc2xpY2VzIGZvciBjb3JyZXNwb25kZW50IHBpcGUgYW5k IHBsYXRmb3JtLgo+ID4gPiArCSAqLwo+ID4gPiArCWRidWZfc2xpY2VfbWFzayA9IGk5MTVfZ2V0 X2FsbG93ZWRfZGJ1Zl9tYXNrKGRldl9wcml2LAo+ID4gPiBmb3JfcGlwZSwKPiA+ID4gKwkJCQkJ CSAgICAgYWN0aXZlX3BpcGVzLAo+ID4gPiBjcnRjX3N0YXRlKTsKPiA+IAo+ID4gUXVpdGUgYSBm ZXcgcmVkdW5kYW50IGFyZ3VtZW50cy4gVGhlIGZ1bmN0aW9uIG5hbWUgbG9va3MgYWxpZW4uCj4g PiAKPiA+IHNrbF9jcnRjX3Bvc3NpYmxlX2RidWZfc2xpY2VzKCkgb3Igc29tZXRoaW5nIHBlcmhh cHM/Cj4gPiAKPiA+ID4gKwo+ID4gPiArCURSTV9ERUJVR19LTVMoIkRCdWYgc2xpY2UgbWFzayAl eCBwaXBlICVkIGFjdGl2ZSBwaXBlcyAleFxuIiwKPiA+ID4gKwkJICAgICAgZGJ1Zl9zbGljZV9t YXNrLAo+ID4gPiArCQkgICAgICBmb3JfcGlwZSwgYWN0aXZlX3BpcGVzKTsKPiA+ID4gKwo+ID4g PiArCS8qCj4gPiA+ICsJICogRmlndXJlIG91dCBhdCB3aGljaCBEQnVmIHNsaWNlIHdlIHN0YXJ0 LCBpLmUgaWYgd2Ugc3RhcnQgYXQKPiA+ID4gRGJ1ZiBTMgo+ID4gPiArCSAqIGFuZCBzbGljZSBz aXplIGlzIDEwMjQsIHRoZSBvZmZzZXQgd291bGQgYmUgMTAyNAo+ID4gPiArCSAqLwo+ID4gPiAr CW9mZnNldCA9IHNrbF9nZXRfZmlyc3RfZGJ1Zl9zbGljZV9vZmZzZXQoZGJ1Zl9zbGljZV9tYXNr LAo+ID4gPiArCQkJCQkJIHNsaWNlX3NpemUsIGRkYl9zaXplKTsKPiA+ID4gKwo+ID4gPiArCS8q Cj4gPiA+ICsJICogRmlndXJlIG91dCB0b3RhbCBzaXplIG9mIGFsbG93ZWQgREJ1ZiBzbGljZXMs IHdoaWNoIGlzCj4gPiA+IGJhc2ljYWxseQo+ID4gPiArCSAqIGEgbnVtYmVyIG9mIGFsbG93ZWQg c2xpY2VzIGZvciB0aGF0IHBpcGUgbXVsdGlwbGllZCBieSBzbGljZQo+ID4gPiBzaXplLgo+ID4g PiArCSAqIEluc2lkZSBvZiB0aGlzCj4gPiA+ICsJICogcmFuZ2UgZGRiIGVudHJpZXMgYXJlIHN0 aWxsIGFsbG9jYXRlZCBpbiBwcm9wb3J0aW9uIHRvCj4gPiA+IGRpc3BsYXkgd2lkdGguCj4gPiA+ ICsJICovCj4gPiA+ICsJZGRiX3JhbmdlX3NpemUgPSBod2VpZ2h0OChkYnVmX3NsaWNlX21hc2sp ICogc2xpY2Vfc2l6ZTsKPiA+ID4gKwo+ID4gPiAgCS8qCj4gPiA+ICAJICogV2F0ZXJtYXJrL2Rk YiByZXF1aXJlbWVudCBoaWdobHkgZGVwZW5kcyB1cG9uIHdpZHRoIG9mIHRoZQo+ID4gPiAgCSAq IGZyYW1lYnVmZmVyLCBTbyBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgRERCIGVxdWFsbHkgYW1vbmcK PiA+ID4gcGlwZXMKPiA+ID4gIAkgKiBkaXN0cmlidXRlIEREQiBiYXNlZCBvbiByZXNvbHV0aW9u L3dpZHRoIG9mIHRoZSBkaXNwbGF5Lgo+ID4gPiAgCSAqLwo+ID4gPiArCXRvdGFsX3NsaWNlX21h c2sgPSBkYnVmX3NsaWNlX21hc2s7Cj4gPiAKPiA+IElzbid0IHRoaXMgYWxyZWFkeSB0YWtlbiBj YXJlIGJ5IHRoZSBsb29wIGJlbG93Pwo+ID4gCj4gPiA+ICAJZm9yX2VhY2hfbmV3X2ludGVsX2Ny dGNfaW5fc3RhdGUoaW50ZWxfc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsCj4gPiA+IGkpIHsKPiA+ ID4gIAkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQo+ID4g PiAgCQkJJmNydGNfc3RhdGUtPmh3LmFkanVzdGVkX21vZGU7Cj4gPiA+ICAJCWVudW0gcGlwZSBw aXBlID0gY3J0Yy0+cGlwZTsKPiA+ID4gIAkJaW50IGhkaXNwbGF5LCB2ZGlzcGxheTsKPiA+ID4g KwkJdTMyIHBpcGVfZGJ1Zl9zbGljZV9tYXNrID0gXAo+ID4gPiArCQkJaTkxNV9nZXRfYWxsb3dl ZF9kYnVmX21hc2soZGV2X3ByaXYsCj4gPiA+ICsJCQkJCQlwaXBlLAo+ID4gPiArCQkJCQkJYWN0 aXZlX3BpcGVzLAo+ID4gPiArCQkJCQkJY3J0Y19zdGF0ZSk7Cj4gPiA+ICAKPiA+ID4gIAkJaWYg KCFjcnRjX3N0YXRlLT5ody5lbmFibGUpCj4gPiA+ICAJCQljb250aW51ZTsKPiA+ID4gIAo+ID4g PiArCQkvKgo+ID4gPiArCQkgKiBBY2NvcmRpbmcgdG8gQlNwZWMgcGlwZSBjYW4gc2hhcmUgb25l IGRidWYgc2xpY2UKPiA+ID4gd2l0aCBhbm90aGVyCj4gPiA+ICsJCSAqIHBpcGVzIG9yIHBpcGUg Y2FuIHVzZSBtdWx0aXBsZSBkYnVmcywgaW4gYm90aCBjYXNlcwo+ID4gPiB3ZQo+ID4gPiArCQkg KiBhY2NvdW50IGZvciBvdGhlciBwaXBlcyBvbmx5IGlmIHRoZXkgaGF2ZSBleGFjdGx5Cj4gPiA+ IHNhbWUgbWFzay4KPiA+ID4gKwkJICogSG93ZXZlciB3ZSBuZWVkIHRvIGFjY291bnQgaG93IG1h bnkgc2xpY2VzIHdlIHNob3VsZAo+ID4gPiBlbmFibGUKPiA+ID4gKwkJICogaW4gdG90YWwuCj4g PiA+ICsJCSAqLwo+ID4gPiArCQl0b3RhbF9zbGljZV9tYXNrIHw9IHBpcGVfZGJ1Zl9zbGljZV9t YXNrOwo+ID4gCj4gPiB0b3RhbF9zbGljZV9tYXNrIHdpbGwgbm93IGFjY291bnQgb25seSB0aGUg Y3J0Y3MgaW4gdGhlIHN0YXRlLiBXaGF0Cj4gPiBoYXBwZW5zIHRvIHRoZSBvdGhlciBwaXBlcycg c2xpY2VzPwo+IAo+IFllcyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgcGlwZXMvY3J0 Y3MgaGVyZSwgaG93ZXZlcgo+IGZvciBnZXR0aW5nIGNvcnJlY3QgZGJ1ZiBzbGljZSBtYXNrIG1v c3QgaW1wb3J0YW50IGlzIGFjdGl2ZV9waXBlcy4KPiBIb3dldmVyIHllcywgSSB3aWxsIGNoYW5n ZSB0aGUgbG9vcCBmb3IgaXQgdG8gYmUgbW9yZSBjb3JyZWN0Lgo+IAo+ID4gCj4gPiA+ICsKPiA+ ID4gKwkJLyoKPiA+ID4gKwkJICogRG8gbm90IGFjY291bnQgcGlwZXMgdXNpbmcgb3RoZXIgc2xp Y2Ugc2V0cwo+ID4gPiArCQkgKiBsdWNraWx5IGFzIG9mIGN1cnJlbnQgQlNwZWMgc2xpY2Ugc2V0 cyBkbyBub3QKPiA+ID4gcGFydGlhbGx5Cj4gPiA+ICsJCSAqIGludGVyc2VjdChwaXBlcyBzaGFy ZSBlaXRoZXIgc2FtZSBvbmUgc2xpY2Ugb3Igc2FtZQo+ID4gPiBzbGljZSBzZXQKPiA+ID4gKwkJ ICogaS5lIG5vIHBhcnRpYWwgaW50ZXJzZWN0aW9uKSwgc28gaXQgaXMgZW5vdWdoIHRvCj4gPiA+ IGNoZWNrIGZvcgo+ID4gPiArCQkgKiBlcXVhbGl0eSBmb3Igbm93Lgo+ID4gPiArCQkgKi8KPiA+ ID4gKwkJaWYgKGRidWZfc2xpY2VfbWFzayAhPSBwaXBlX2RidWZfc2xpY2VfbWFzaykKPiA+ID4g KwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICAJCWRybV9tb2RlX2dldF9odl90aW1pbmcoYWRq dXN0ZWRfbW9kZSwgJmhkaXNwbGF5LAo+ID4gPiAmdmRpc3BsYXkpOwo+ID4gPiAgCQl0b3RhbF93 aWR0aCArPSBoZGlzcGxheTsKPiA+ID4gIAo+ID4gPiBAQCAtMzkxNCw4ICszOTc4LDE5IEBAIHNr bF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoc3RydWN0Cj4gPiA+IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ID4gPiAgCQkJcGlwZV93aWR0aCA9IGhkaXNwbGF5Owo+ID4gPiAg CX0KPiA+ID4gIAo+ID4gPiAtCWFsbG9jLT5zdGFydCA9IGRkYl9zaXplICogd2lkdGhfYmVmb3Jl X3BpcGUgLyB0b3RhbF93aWR0aDsKPiA+ID4gLQlhbGxvYy0+ZW5kID0gZGRiX3NpemUgKiAod2lk dGhfYmVmb3JlX3BpcGUgKyBwaXBlX3dpZHRoKSAvCj4gPiA+IHRvdGFsX3dpZHRoOwo+ID4gPiAr CWRkYi0+ZW5hYmxlZF9zbGljZXMgPSB0b3RhbF9zbGljZV9tYXNrOwo+ID4gPiArCj4gPiA+ICsJ c3RhcnQgPSBkZGJfcmFuZ2Vfc2l6ZSAqIHdpZHRoX2JlZm9yZV9waXBlIC8gdG90YWxfd2lkdGg7 Cj4gPiA+ICsJZW5kID0gZGRiX3JhbmdlX3NpemUgKiAod2lkdGhfYmVmb3JlX3BpcGUgKyBwaXBl X3dpZHRoKSAvCj4gPiA+IHRvdGFsX3dpZHRoOwo+ID4gPiArCj4gPiA+ICsJYWxsb2MtPnN0YXJ0 ID0gb2Zmc2V0ICsgc3RhcnQ7Cj4gPiA+ICsJYWxsb2MtPmVuZCA9IG9mZnNldCArIGVuZDsKPiA+ ID4gKwo+ID4gPiArCURSTV9ERUJVR19LTVMoIlBpcGUgJWQgZGRiICVkLSVkXG4iLCBmb3JfcGlw ZSwKPiA+ID4gKwkJICAgICAgYWxsb2MtPnN0YXJ0LCBhbGxvYy0+ZW5kKTsKPiA+ID4gKwlEUk1f REVCVUdfS01TKCJFbmFibGVkIGRkYiBzbGljZXMgbWFzayAleCBudW0gc3VwcG9ydGVkICVkXG4i LAo+ID4gPiArCQkgICAgICBkZGItPmVuYWJsZWRfc2xpY2VzLAo+ID4gPiArCQkgICAgICBJTlRF TF9JTkZPKGRldl9wcml2KS0+c3VwcG9ydGVkX3NsaWNlcyk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ ID4gIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfd21fcGFyYW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlCj4gPiA+ICpjcnRjX3N0YXRlLAo+ID4gPiBAQCAtNDAzNiw3ICs0MTExLDggQEAg dm9pZCBza2xfcGlwZV9kZGJfZ2V0X2h3X3N0YXRlKHN0cnVjdAo+ID4gPiBpbnRlbF9jcnRjICpj cnRjLAo+ID4gPiAgdm9pZCBza2xfZGRiX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAJCQkgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRk YiAvKiBvdXQgKi8pCj4gPiA+ICB7Cj4gPiA+IC0JZGRiLT5lbmFibGVkX3NsaWNlcyA9IGludGVs X2VuYWJsZWRfZGJ1Zl9zbGljZXNfbnVtKGRldl9wcml2KTsKPiA+ID4gKwlkZGItPmVuYWJsZWRf c2xpY2VzID0gaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ICsJRFJN X0RFQlVHX0tNUygiR290IGh3IGRidWYgc2xpY2VzIG1hc2sgJXhcbiIsIGRkYi0KPiA+ID4gPmVu YWJsZWRfc2xpY2VzKTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAgLyoKPiA+ID4gQEAgLTQxNjQs NiArNDI0MCwyNDEgQEAgc2tsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3RydWN0Cj4g PiA+IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiA+ICAJcmV0dXJuIHRvdGFsX2Rh dGFfcmF0ZTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiArc3RhdGljIHVpbnRfZml4ZWRfMTZfMTZf dAo+ID4gPiAraWNsX3BpcGVfZG93bnNjYWxlX2Ftb3VudChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZQo+ID4gPiAqY3J0Y19zdGF0ZSkKPiA+ID4gK3sKPiA+ID4gKwl1MzIgc3JjX3csIHNy Y19oLCBkc3RfdywgZHN0X2g7Cj4gPiA+ICsJdWludF9maXhlZF8xNl8xNl90IGZwX3dfcmF0aW8s IGZwX2hfcmF0aW87Cj4gPiA+ICsJdWludF9maXhlZF8xNl8xNl90IGRvd25zY2FsZV9oLCBkb3du c2NhbGVfdzsKPiA+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRf bW9kZSA9ICZjcnRjX3N0YXRlLQo+ID4gPiA+aHcuYWRqdXN0ZWRfbW9kZTsKPiA+ID4gKwo+ID4g PiArCXNyY193ID0gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdzsKPiA+ID4gKwlzcmNfaCA9IGNydGNf c3RhdGUtPnBpcGVfc3JjX2g7Cj4gPiA+ICsJZHN0X3cgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hk aXNwbGF5Owo+ID4gPiArCWRzdF9oID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKPiA+ ID4gKwo+ID4gPiArCWZwX3dfcmF0aW8gPSBkaXZfZml4ZWQxNihzcmNfdywgZHN0X3cpOwo+ID4g PiArCWZwX2hfcmF0aW8gPSBkaXZfZml4ZWQxNihzcmNfaCwgZHN0X2gpOwo+ID4gPiArCWRvd25z Y2FsZV93ID0gbWF4X2ZpeGVkMTYoZnBfd19yYXRpbywgdTMyX3RvX2ZpeGVkMTYoMSkpOwo+ID4g PiArCWRvd25zY2FsZV9oID0gbWF4X2ZpeGVkMTYoZnBfaF9yYXRpbywgdTMyX3RvX2ZpeGVkMTYo MSkpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIG11bF9maXhlZDE2KGRvd25zY2FsZV93LCBkb3du c2NhbGVfaCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3VpbnRfZml4ZWRfMTZfMTZfdAo+ID4g PiAraWNsX2dldF9waXBlX3JhdGlvKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gPiAr CWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmRybV9wbGFuZV9zdGF0ZTsKPiA+ID4gKwl1 aW50X2ZpeGVkXzE2XzE2X3QgcGlwZV9kb3duc2NhbGUsIHBpcGVfcmF0aW87Cj4gPiA+ICsJdWlu dF9maXhlZF8xNl8xNl90IG1heF9kb3duc2NhbGUgPSB1MzJfdG9fZml4ZWQxNigxKTsKPiA+ID4g KwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFw aS5jcnRjKTsKPiA+ID4gKwo+ID4gPiArCWlmICghY3J0Y19zdGF0ZS0+dWFwaS5lbmFibGUpCj4g PiA+ICsJCXJldHVybiBtYXhfZG93bnNjYWxlOwo+ID4gPiArCj4gPiA+ICsJZHJtX2F0b21pY19j cnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lX3N0YXRlKHBsYW5lLAo+ID4gPiBkcm1fcGxhbmVfc3Rh dGUsICZjcnRjX3N0YXRlLT51YXBpKSB7Cj4gPiA+ICsJCXVpbnRfZml4ZWRfMTZfMTZfdCBwbGFu ZV9kb3duc2NhbGU7Cj4gPiA+ICsJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUgPQo+ID4gPiArCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUoZHJtX3BsYW5lX3N0YXRl KTsKPiA+ID4gKwo+ID4gPiArCQlpZiAoIWludGVsX3dtX3BsYW5lX3Zpc2libGUoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUpKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJcGxh bmVfZG93bnNjYWxlID0KPiA+ID4gc2tsX3BsYW5lX2Rvd25zY2FsZV9hbW91bnQoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUpOwo+ID4gPiArCj4gPiA+ICsJCURSTV9ERUJVR19LTVMoIlBsYW5lICVk IGRvd25zY2FsZSBhbW91bnQgJWQuJWRcbiIsCj4gPiA+ICsJCQkgICAgICB0b19pbnRlbF9wbGFu ZShwbGFuZSktPmlkLAo+ID4gPiArCQkJICAgICAgcGxhbmVfZG93bnNjYWxlLnZhbCA+PiAxNiwK PiA+ID4gKwkJCSAgICAgIHBsYW5lX2Rvd25zY2FsZS52YWwgJiAweGZmZmYpOwo+ID4gPiArCj4g PiA+ICsJCW1heF9kb3duc2NhbGUgPSBtYXhfZml4ZWQxNihwbGFuZV9kb3duc2NhbGUsCj4gPiA+ IG1heF9kb3duc2NhbGUpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCj4gPiA+ICsJcGlwZV9k b3duc2NhbGUgPSBpY2xfcGlwZV9kb3duc2NhbGVfYW1vdW50KGNydGNfc3RhdGUpOwo+ID4gPiAr Cj4gPiA+ICsJRFJNX0RFQlVHX0tNUygiUGlwZSAlZCBkb3duc2NhbGUgYW1vdW50ICVkLiVkXG4i LAo+ID4gPiArCQkgICAgICAgY3J0Yy0+cGlwZSwgcGlwZV9kb3duc2NhbGUudmFsID4+IDE2LAo+ ID4gPiArCQkgICAgICAgcGlwZV9kb3duc2NhbGUudmFsICYgMHhmZmZmKTsKPiA+ID4gKwo+ID4g PiArCXBpcGVfZG93bnNjYWxlID0gbXVsX2ZpeGVkMTYocGlwZV9kb3duc2NhbGUsIG1heF9kb3du c2NhbGUpOwo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBDb252ZXJ0IHJlc3VsdCB0byBw ZXJjZW50YWdlOiBnZXQgdGhlIGFjdHVhbCByYXRpbyBpbnN0ZWFkCj4gPiA+IG9mIHJhdGUsCj4g PiA+ICsJICogdGhlbiBtdWx0aXBseSBieSAxMDAgdG8gZ2V0IHBlcmNlbnRhZ2UuCj4gPiA+ICsJ ICovCj4gPiA+ICsJcGlwZV9yYXRpbyA9IHUzMl90b19maXhlZDE2KDEwMCAqIGRpdl9yb3VuZF91 cF91MzJfZml4ZWQxNigxLAo+ID4gPiBwaXBlX2Rvd25zY2FsZSkpOwo+ID4gPiArCj4gPiA+ICsJ RFJNX0RFQlVHX0tNUygiUGlwZSAlZCByYXRpbyAlZC4lZFxuIiwgY3J0Yy0+cGlwZSwKPiA+ID4g KwkJICAgICAgcGlwZV9yYXRpby52YWwgPj4gMTYsIHBpcGVfcmF0aW8udmFsICYgMHhmZmZmKTsK PiA+ID4gKwo+ID4gPiArCXJldHVybiBwaXBlX3JhdGlvOwo+ID4gPiArfQo+ID4gCj4gPiBZdWNr LiBJIGp1c3Qga2lsbGVkIHRoZXNlLgo+IAo+IEkgc3RpbGwgbmVlZCBwaXBlX3JhdGlvIGZybyBJ Q0wgYXMgeW91IGtub3csIHRoaXMgaXMgZGljdGF0ZWQgYnkgQlNwZWMsCj4gbm90IGJ5IG1lLgoK VGhhdCBwYXJ0IG9mIHRoZSBzcGVjIGlzIHByZXR0eSBjcmF6eSBJTU8uIEkgdGhpbmsgd2Ugc2hv dWxkIGp1c3QgaWdub3JlCml0IGZvciBub3cuIEFsc28gbm90aGluZyBpbiB0aGVyZSBzYXlzIHdl IG11c3QgdXNlIGJvdGggc2xpY2VzIGZvciBhCnNpbmdsZSBwaXBlIHNvIGlnbm9yaW5nIGRvZXNu J3QgZXZlbiB2aW9sYXRlIHRoZSBzcGVjIGluIGFueSB3YXkuCgo+IAo+ID4gCj4gPiA+ICsKPiA+ ID4gK3N0cnVjdCBkYnVmX3NsaWNlX2NvbmZfZW50cnkgewo+ID4gPiArCXUzMiBkYnVmX21hc2tb STkxNV9NQVhfUElQRVNdOwo+ID4gPiArCXUzMiBhY3RpdmVfcGlwZXM7Cj4gPiA+ICt9Owo+ID4g PiArCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQV9EQlVGX1NMSUNFUyhEQnVmMSkg IFwKPiA+ID4gKwl7IHsgREJ1ZjEsIDAsIDAsIDAgfSwgQklUKFBJUEVfQSkgfQo+ID4gPiArI2Rl ZmluZSBJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCdWYxKSAgXAo+ID4gPiArCXsgeyAwLCBEQnVm MSwgMCwgMCB9LCBCSVQoUElQRV9CKSB9Cj4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0NfREJVRl9T TElDRVMoREJ1ZjEpICBcCj4gPiA+ICsJeyB7IDAsIDAsIERCdWYxLCAwIH0sIEJJVChQSVBFX0Mp IH0KPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfRF9EQlVGX1NMSUNFUyhEQnVmMSkgIFwKPiA+ID4g Kwl7IHsgMCwgMCwgMCwgREJ1ZjEgfSwgQklUKFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJQ0xf UElQRV9BQl9EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAgXAo+ID4gPiArCXsgeyBEQnVmMSwg REJ1ZjIsIDAsIDAgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9CKSB9Cj4gPiA+ICsjZGVmaW5l IElDTF9QSVBFX0JDX0RCVUZfU0xJQ0VTKERCdWYxLCBEQnVmMikgICBcCj4gPiA+ICsJeyB7IDAs IERCdWYxLCBEQnVmMiwgMCB9LCBCSVQoUElQRV9CKSB8IEJJVChQSVBFX0MpIH0KPiA+ID4gKyNk ZWZpbmUgSUNMX1BJUEVfQkRfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyKSAgIFwKPiA+ID4gKwl7 IHsgMCwgREJ1ZjEsIDAsIERCdWYyIH0sIEJJVChQSVBFX0IpIHwgQklUKFBJUEVfRCkgfQo+ID4g PiArI2RlZmluZSBJQ0xfUElQRV9BQ19EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAgXAo+ID4g PiArCXsgeyBEQnVmMSwgMCwgREJ1ZjIsIDAgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9DKSB9 Cj4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0FEX0RCVUZfU0xJQ0VTKERCdWYxLCBEQnVmMikgICBc Cj4gPiA+ICsJeyB7IERCdWYxLCAwLCAwLCBEQnVmMiB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBF X0QpIH0KPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQ0RfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYy KSAgIFwKPiA+ID4gKwl7IHsgMCwgMCwgREJ1ZjEsIERCdWYyIH0sIEJJVChQSVBFX0MpIHwgQklU KFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJ1ZjEs IERCdWYyLCBEQnVmMykgIFwKPiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCBEQnVmMywgMCB9LCBC SVQoUElQRV9BKSB8IEJJVChQSVBFX0IpIHwKPiA+ID4gQklUKFBJUEVfQykgfQo+ID4gPiArI2Rl ZmluZSBJQ0xfUElQRV9BQ0RfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ ID4gKwl7IHsgREJ1ZjEsIDAsIERCdWYyLCBEQnVmMyB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBF X0MpIHwKPiA+ID4gQklUKFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9CQ0RfREJV Rl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gKwl7IHsgMCwgREJ1ZjEsIERC dWYyLCBEQnVmMyB9LCBCSVQoUElQRV9CKSB8IEJJVChQSVBFX0MpIHwKPiA+ID4gQklUKFBJUEVf RCkgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkRfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYy LCBEQnVmMykgIFwKPiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCAwLCBEQnVmMyB9LCBCSVQoUElQ RV9BKSB8IEJJVChQSVBFX0IpIHwKPiA+ID4gQklUKFBJUEVfRCkgfQo+ID4gPiArI2RlZmluZSBJ Q0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gKwl7 IHsgREJ1ZjEsIERCdWYyLCBEQnVmMywgMCB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBFX0IpIHwK PiA+ID4gQklUKFBJUEVfQykgfQo+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkNEX0RCVUZfU0xJ Q0VTKERCdWYxLCBEQnVmMiwgREJ1ZjMsIERCdWY0KSAgXAo+ID4gPiArCXsgeyBEQnVmMSwgREJ1 ZjIsIERCdWYzLCBEQnVmNCB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBFX0IpIHwgXAo+ID4gPiAr CQkJCQkgIEJJVChQSVBFX0MpIHwgQklUKFBJUEVfRCkgfQo+ID4gPiArCj4gPiA+ICsvKgo+ID4g PiArICogVGFibGUgdGFrZW4gZnJvbSBCc3BlYyAxMjcxNgo+ID4gPiArICogUGlwZXMgZG8gaGF2 ZSBzb21lIHByZWZlcnJlZCBEQnVmIHNsaWNlIGFmZmluaXR5LAo+ID4gPiArICogcGx1cyB0aGVy ZSBhcmUgc29tZSBoYXJkY29kZWQgcmVxdWlyZW1lbnRzIG9uIGhvdwo+ID4gPiArICogdGhvc2Ug c2hvdWxkIGJlIGRpc3RyaWJ1dGVkIGZvciBtdWx0aXBpcGUgc2NlbmFyaW9zLgo+ID4gPiArICog Rm9yIG1vcmUgREJ1ZiBzbGljZXMgYWxnb3JpdGhtIGNhbiBnZXQgZXZlbiBtb3JlIG1lc3N5Cj4g PiA+ICsgKiBhbmQgbGVzcyByZWFkYWJsZSwgc28gZGVjaWRlZCB0byB1c2UgYSB0YWJsZSBhbG1v c3QKPiA+ID4gKyAqIGFzIGlzIGZyb20gQlNwZWMgaXRzZWxmIC0gdGhhdCB3YXkgaXQgaXMgYXQg bGVhc3QgZWFzaWVyCj4gPiA+ICsgKiB0byBjb21wYXJlLCBjaGFuZ2UgYW5kIGNoZWNrLgo+ID4g PiArICovCj4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IGljbF9hbGxvd2VkX2Ri dWZzW10gPSB7Cj4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4gPiA+ICtJQ0xfUElQRV9B X0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLCAgLyogcGlwZSByYXRpbwo+ ID4gPiA8IDg4LjggKi8KPiA+ID4gK0lDTF9QSVBFX0FfREJVRl9TTElDRVMoREJVRl9TMV9CSVQp LCAgICAgICAgICAgICAgICAvKiBmb3IgcGlwZQo+ID4gPiByYXRpbyA+PSA4OC44ICovCj4gPiA+ ICtJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLCAgLyog cGlwZSByYXRpbwo+ID4gPiA8IDg4LjggKi8KPiA+ID4gK0lDTF9QSVBFX0JfREJVRl9TTElDRVMo REJVRl9TMV9CSVQpLCAgICAgICAgICAgICAgICAvKiBmb3IgcGlwZQo+ID4gPiByYXRpbyA+PSA4 OC44ICovCj4gPiA+ICtJQ0xfUElQRV9DX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9T Ml9CSVQpLCAgLyogcGlwZSByYXRpbwo+ID4gPiA8IDg4LjggKi8KPiA+ID4gK0lDTF9QSVBFX0Nf REJVRl9TTElDRVMoREJVRl9TMl9CSVQpLCAgICAgICAgICAgICAgICAvKiBmb3IgcGlwZQo+ID4g PiByYXRpbyA+PSA4OC44ICovCj4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVGX1Mx X0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUNfREJVRl9TTElDRVMoREJVRl9T MV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gK0lDTF9QSVBFX0JDX0RCVUZfU0xJQ0VTKERCVUZf UzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ICtJQ0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJV Rl9TMV9CSVQsIERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ICt9Owo+ID4gPiArCj4g PiA+ICsvKgo+ID4gPiArICogVGFibGUgdGFrZW4gZnJvbSBCc3BlYyA0OTI1NQo+ID4gPiArICog UGlwZXMgZG8gaGF2ZSBzb21lIHByZWZlcnJlZCBEQnVmIHNsaWNlIGFmZmluaXR5LAo+ID4gPiAr ICogcGx1cyB0aGVyZSBhcmUgc29tZSBoYXJkY29kZWQgcmVxdWlyZW1lbnRzIG9uIGhvdwo+ID4g PiArICogdGhvc2Ugc2hvdWxkIGJlIGRpc3RyaWJ1dGVkIGZvciBtdWx0aXBpcGUgc2NlbmFyaW9z Lgo+ID4gPiArICogRm9yIG1vcmUgREJ1ZiBzbGljZXMgYWxnb3JpdGhtIGNhbiBnZXQgZXZlbiBt b3JlIG1lc3N5Cj4gPiA+ICsgKiBhbmQgbGVzcyByZWFkYWJsZSwgc28gZGVjaWRlZCB0byB1c2Ug YSB0YWJsZSBhbG1vc3QKPiA+ID4gKyAqIGFzIGlzIGZyb20gQlNwZWMgaXRzZWxmIC0gdGhhdCB3 YXkgaXQgaXMgYXQgbGVhc3QgZWFzaWVyCj4gPiA+ICsgKiB0byBjb21wYXJlLCBjaGFuZ2UgYW5k IGNoZWNrLgo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IHRn bF9hbGxvd2VkX2RidWZzW10gPSB7Cj4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4gPiA+ ICtJQ0xfUElQRV9BX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ID4g PiArSUNMX1BJUEVfQl9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERCVUZfUzJfQklUKSwKPiA+ ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBEQlVGX1MyX0JJVCksCj4g PiA+ICtJQ0xfUElQRV9EX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ ID4gPiArSUNMX1BJUEVfQUJfREJVRl9TTElDRVMoREJVRl9TMl9CSVQsIERCVUZfUzFfQklUKSwK PiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCks Cj4gPiA+ICtJQ0xfUElQRV9CQ19EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQp LAo+ID4gPiArSUNMX1BJUEVfQURfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklU KSwKPiA+ID4gK0lDTF9QSVBFX0JEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJ VCksCj4gPiA+ICtJQ0xfUElQRV9DRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9C SVQpLAo+ID4gPiArSUNMX1BJUEVfQUJEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1Mx X0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUJDX0RCVUZfU0xJQ0VTKERCVUZf UzFfQklULCBEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUNEX0RC VUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiAr SUNMX1BJUEVfQkNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwgREJVRl9T Ml9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUJDRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJV Rl9TMV9CSVQsIERCVUZfUzJfQklULAo+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ICt9Owo+ID4g Cj4gPiBNeSBleWVzIQo+ID4gCj4gPiBJIGhhdmUgdG8gdGhpbmsgd2Ugc2hvdWxkIGJlIGFibGUg dG8gcmVkdWNlIGFsbCB0aGF0IHRvIGEgaGFuZGZ1bAo+ID4gb2YgbGluZXMgb2YgY29kZS4KPiAK PiBZZWFoLCB0aGVuIHdlIGFyZSBnb2luZyB0byBoYXZlIGEgaHVnZSBmdW5jdGlvbiB3aXRoIGxv dHMgb2Ygd2VpcmQKPiBkZWZpbml0aW9ucywgdW5mb3J0dW5hdGVseSBCU3BlYyB0YWJsZSBoYXMg cXVpdGUgc3RyYW5nZSBEQnVmCj4gYXNzaWdubWVudHMgbGlrZSAKPiArSUNMX1BJUEVfQUJfREJV Rl9TTElDRVMoREJVRl9TMl9CSVQsIERCVUZfUzFfQklUKSwKPiArSUNMX1BJUEVfQUNfREJVRl9T TElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiAKPiBpLmUgc2xpY2VzIGNhbiBnZXQg bWl4ZWQgaW4gYSBxdWl0ZSB2YXJpb3VzIHdheXMuIFRoZXJlIGlzIG5vCj4gcmF0aW9uYWwgcGF0 dGVybiBpbiB0aG9zZSBhbmQgY291bGQgYmUgZXZlbiBkYW5nZXJvdXMgdG8gdHJ5IHRvIAo+IG9w dGltaXplIGl0IHNvbWUgd2F5LCBhcyBvbmUgZGF5IGl0IG1pZ2h0IGNoYW5nZSBhZ2FpbiBpbiBz b21lCj4gdW5wcmVkaWN0YWJsZSB3YXkuCj4gCj4gV291bGQgeW91IHByZWZlciB0byBoYXZlIGl0 IGxpa2UKPiAKPiBpZiAocGlwZXMgYXJlIEEgYW5kIEIpCj4gICAgIHByb2dyYW0gUzIgdG8gQSBh bmQgUzEgdG8gQgo+IGlmIChwaXBlcyBhcmUgQSBhbmQgQykKPiAgICAgcHJvZ3JhbSBTMSB0byBB IGFuZCBTMiB0byBDCj4gLi4uCj4gCj4gSSB3b3VsZCBwcmVmZXIgYXQgbGVhc3QgdG8gc2VlIGl0 IGluIGEgY29tcGFyYWJsZSB3YXkgd2l0aCB0aGUKPiB0YWJsZSB3ZSBoYXZlIGluIEJTcGVjLCBy YXRoZXIgdGhhbiBoYXZpbmcgbG90cyBvZiB3ZWlyZCBsb29raW5nCj4gaWYtZWxzZSBzdGF0ZW1l bnRzLCBHRU4gY2hlY2tzIGFuZCBzbyBvbi4KPiAKPiBJIGtuZXcgdGhpcyB0YWJsZSB3YXMgbm90 IGdvaW5nIHRvIGxvb2sgbGlrZSBpdCBpcyBkb25lIHR5cGljYWxseQo+IGhlcmUgLSBidXQgcmVh bGx5IG15IG9waW5pb24gdGhhdCBpdCBpcyB3YXkgYmV0dGVyIHRoYW4gaGFyZGNvZGluZwo+IGl0 IGludG8gc29tZSB3ZWlyZCBhbGdvcml0aG0sIHdoaWNoIHdvdWxkIGJlIGhhcmQgdG8gY29tcGFy ZSB0byAKPiBpbml0aWFsIHRhYmxlLCB3aGljaCBpcyBhbHJlYWR5IHN0cmFuZ2UgZW5vdWdoLgo+ IAo+IElmIHlvdSBkb24ndCBsaWtlIGl0IC0gY291bGQgeW91IHBsZWFzZSBleHBsYWluIHdoeSB0 aGlzIGlzIGV4YWN0bHkKPiB3b3JzZSB0aGFuIGhhdmluZyBsb25nIGZ1bmN0aW9ucyB3aXRoIGhh cmRjb2RlZCBjaGVja3M/CgpJIHRoaW5rIHdlIHNob3VsZCBiZSBhYmxlIHRvIGVuY29kZSB0aGlz IHNpbXBseSB1c2luZyB0aGUKIlBpcGUgYW5kIERCVUYgb3JkZXJpbmciIHN0dWZmIGZyb20gdGhl IHNwZWMuIEllLiBqdXN0IHNwZWNpZnkgd2hhdAppcyB0aGUgZGlzdGFuY2Ugb2YgZWFjaCBwaXBl IGZyb20gZWFjaCBkYnVmIHNsaWNlLiBUaGVuIGFsbCB3ZSBoYXZlCnRvIGRvIGlzIG1pbmltaXpl IHRoZSB0b3RhbCBkaXN0YW5jZS4gVGhlIGZvbGxvd2luZyB0YWJsZXMgSSB0aGluawpzaG91bGQg ZW5jb2RlIHRoYXQgcmVhc29uYWJseSBjb25jaXNlbHk6CgovKiBwaXBlQSAtIERCVUZfUzEgLSBw aXBlQiAtIHBpcGVDIC0gREJVRl9TMiAqLwpzdGF0aWMgY29uc3QgdTggaWNsX2RidWZfZGlzdGFu Y2VbXVtdIHsKCVtQSVBFX0FdID0geyBbREJVRl9TMV0gPSAxLCBbREJVRl9TMl0gPSA0LCB9LAoJ W1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVGX1MyXSA9IDIsIH0sCglbUElQRV9DXSA9 IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZfUzJdID0gMSwgfSwKfTsKCi8qIHBpcGVEIC0gREJVRl9T MiAtIHBpcGVDIC0gcGlwZUEgLSBEQlVGX1MxIC0gcGlwZUIgKi8Kc3RhdGljIGNvbnN0IHU4IHRn bF9kYnVmX2Rpc3RhbmNlW11bXSB7CglbUElQRV9BXSA9IHsgW0RCVUZfUzFdID0gMSwgW0RCVUZf UzJdID0gMiwgfSwKCVtQSVBFX0JdID0geyBbREJVRl9TMV0gPSAxLCBbREJVRl9TMl0gPSA0LCB9 LAoJW1BJUEVfQ10gPSB7IFtEQlVGX1MxXSA9IDIsIFtEQlVGX1MyXSA9IDEsIH0sCglbUElQRV9E XSA9IHsgW0RCVUZfUzFdID0gNCwgW0RCVUZfUzJdID0gMSwgfSwKfTsKCi8qCiAqIHBpcGVBIC0g REJVRl9TMCAtIERCVUZfUzEgLSBwaXBlQgogKiBwaXBlQyAtIERCVUZfUzIgLSBEQlVGX1MzIC0g cGlwZUQKICovCnN0YXRpYyBjb25zdCB1OCBmdXR1cmVfZGJ1Zl9kaXN0YW5jZVtdW10gewoJW1BJ UEVfQV0gPSB7IFtEQlVGX1MwXSA9IDEsIFtEQlVGX1MxXSA9IDMsIH0sCglbUElQRV9CXSA9IHsg W0RCVUZfUzBdID0gMywgW0RCVUZfUzFdID0gMSwgfSwKCVtQSVBFX0NdID0geyBbREJVRl9TMl0g PSAxLCBbREJVRl9TM10gPSAzLCB9LAoJW1BJUEVfRF0gPSB7IFtEQlVGX1MyXSA9IDMsIFtEQlVG X1MzXSA9IDEsIH0sCn07CgpJIHN1cHBvc2Ugd2UgY291bGQgbWFrZSB0aGF0IGV2ZW4gbW9yZSBt aW5pbWFsIGJ5IGp1c3QKZGlyZWN0bHkgc3RpY2tpbmcgdGhhdCAiUGlwZSBhbmQgREJVRiBvcmRl cmluZyIgbGFuZ3VhZ2UKaW50byBhIHNpbmdsZSBhcnJheSBidXQgYW5kIHRoZW4gY2FsY3VsYXRl IGVhY2ggZGlzdGFuY2UKZnJvbSBpdCwgYnV0IHRoYXQgaXMgcGVyaGFwcyBtb3JlIHdvcmssIGFu ZCB3ZSdkIG5lZWQKc29tZSBraW5kIG9mIGVudW0ganVzdCBmb3IgdGhhdCBzbyB0aGF0IHdlIGhh dmUgYSBzaW5nbGUKbmFtZXNwYWNlIGZvciB0aGUgcGlwZXMgYW5kIGRidWYgc2xpY2VzLiBTbyBp IGhhdmUgYQpmZWVsaW5nIGhhdmluZyB0aG9zZSBkaXN0YW5jZXMgcHJlLWNvbXB1dGVkIGluIGEg dGFibGUKbGlrZSB0aGV0IGlzIG1heWJlIGEgYmV0dGVyIHdheSB0byBnby4KCj4gCj4gSSB0aGlu ayB0aGlzIGlzIHByZXR0eSBzdHVwaWQgdG8gZml4IHN0dWZmIHdoaWNoIGxvb2tzIG5ldyBvciB1 bnVzdWFsCj4ganVzdCBiZWNhdXNlIHNvbWVib2R5IGRvZXNuJ3QgbGlrZSBpdCwgd2l0aG91dCBl dmVuIGNvbnN0cnVjdGl2ZQo+IGFyZ3VpbmcuCj4gCj4gLSBTdGFuCj4gCj4gPiAKPiA+IAo+ID4g PiArCj4gPiA+ICsvKgo+ID4gPiArICogVGhpcyBmdW5jdGlvbgo+ID4gCj4gPiAiVGhpcyBmdW5j dGlvbiIgaXMgdG90YWxseSByZWR1bmRhbnQuIERpdHRvIGVsc2V3aGVyZS4KPiA+IAo+ID4gPiBm aW5kcyBhbiBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlIGNvbmZpZ3VyYXRpb24gYW5kCj4g PiA+ICsgKiByZXR1cm5zIGNvcnJlc3BvbmRlbnQgREJ1ZiBzbGljZSBtYXNrIGFzIHN0YXRlZCBp biBCU3BlYyBmb3IKPiA+ID4gcGFydGljdWxhcgo+ID4gPiArICogcGxhdGZvcm0uCj4gPiA+ICsg Ki8KPiA+ID4gK3N0YXRpYyB1MzIgaWNsX2dldF9hbGxvd2VkX2RidWZfbWFzayhpbnQgcGlwZSwK PiA+ID4gKwkJCQkgICAgIHUzMiBhY3RpdmVfcGlwZXMsCj4gPiA+ICsJCQkJICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gPiAqY3J0Y19zdGF0ZSkKPiA+ID4gK3sKPiA+ID4g KwlpbnQgaTsKPiA+ID4gKwl1aW50X2ZpeGVkXzE2XzE2X3QgcGlwZV9yYXRpbzsKPiA+ID4gKwo+ ID4gPiArCS8qCj4gPiA+ICsJICogQ2FsY3VsYXRlIHBpcGUgcmF0aW8gYXMgc3RhdGVkIGluIEJT cGVjIDI4NjkyCj4gPiA+ICsJICovCj4gPiA+ICsJcGlwZV9yYXRpbyA9IGljbF9nZXRfcGlwZV9y YXRpbyhjcnRjX3N0YXRlKTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGljbF9hbGxvd2VkX2RidWZzKTsgaSsrKSB7Cj4gPiA+ICsJCWlmIChpY2xfYWxsb3dlZF9k YnVmc1tpXS5hY3RpdmVfcGlwZXMgPT0gYWN0aXZlX3BpcGVzKQo+ID4gPiB7Cj4gPiA+ICsJCQlp ZiAoaHdlaWdodDMyKGFjdGl2ZV9waXBlcykgPT0gMSkgewo+ID4gPiArCQkJCS8qCj4gPiA+ICsJ CQkJICogQWNjb3JkaW5nIHRvIEJTcGVjIDEyNzE2OiBpZiByYXRpbwo+ID4gPiA+PSA4OC44Cj4g PiA+ICsJCQkJICogYWx3YXlzIHVzZSBzaW5nbGUgZGJ1ZiBzbGljZS4KPiA+ID4gKwkJCQkgKi8K PiA+ID4gKwkJCQlpZiAocGlwZV9yYXRpby52YWwgPj0gZGl2X2ZpeGVkMTYoODg4LAo+ID4gPiAx MCkudmFsKQo+ID4gPiArCQkJCQkrK2k7Cj4gPiA+ICsJCQl9Cj4gPiA+ICsJCQlyZXR1cm4gaWNs X2FsbG93ZWRfZGJ1ZnNbaV0uZGJ1Zl9tYXNrW3BpcGVdOwo+ID4gPiArCQl9Cj4gPiA+ICsJfQo+ ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKgo+ID4gPiArICogVGhp cyBmdW5jdGlvbiBmaW5kcyBhbiBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlCj4gPiA+IGNv bmZpZ3VyYXRpb24gYW5kCj4gPiA+ICsgKiByZXR1cm5zIGNvcnJlc3BvbmRlbnQgREJ1ZiBzbGlj ZSBtYXNrIGFzIHN0YXRlZCBpbiBCU3BlYyBmb3IKPiA+ID4gcGFydGljdWxhcgo+ID4gPiArICog cGxhdGZvcm0uCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyB1MzIgdGdsX2dldF9hbGxvd2VkX2Ri dWZfbWFzayhpbnQgcGlwZSwKPiA+ID4gKwkJCQkgICAgIHUzMiBhY3RpdmVfcGlwZXMsCj4gPiA+ ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gPiAqY3J0Y19zdGF0 ZSkKPiA+ID4gK3sKPiA+ID4gKwlpbnQgaTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHRnbF9hbGxvd2VkX2RidWZzKTsgaSsrKSB7Cj4gPiA+ICsJCWlmICh0Z2xf YWxsb3dlZF9kYnVmc1tpXS5hY3RpdmVfcGlwZXMgPT0gYWN0aXZlX3BpcGVzKQo+ID4gPiArCQkJ cmV0dXJuIHRnbF9hbGxvd2VkX2RidWZzW2ldLmRidWZfbWFza1twaXBlXTsKPiA+ID4gKwl9Cj4g PiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3UzMiBpOTE1X2dldF9hbGxv d2VkX2RidWZfbWFzayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICsJ CQkJICAgICAgaW50IHBpcGUsIHUzMiBhY3RpdmVfcGlwZXMsCj4gPiA+ICsJCQkJICAgICAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUKPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ICt7Cj4g PiA+ICsJaWYgKElTX0dFTihkZXZfcHJpdiwgMTEpKQo+ID4gPiArCQlyZXR1cm4gaWNsX2dldF9h bGxvd2VkX2RidWZfbWFzayhwaXBlLAo+ID4gPiArCQkJCQkJIGFjdGl2ZV9waXBlcywKPiA+ID4g KwkJCQkJCSBjcnRjX3N0YXRlKTsKPiA+ID4gKwllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDEy KSkKPiA+ID4gKwkJcmV0dXJuIHRnbF9nZXRfYWxsb3dlZF9kYnVmX21hc2socGlwZSwKPiA+ID4g KwkJCQkJCSBhY3RpdmVfcGlwZXMsCj4gPiA+ICsJCQkJCQkgY3J0Y19zdGF0ZSk7Cj4gPiA+ICsJ LyoKPiA+ID4gKwkgKiBGb3IgYW55dGhpbmcgZWxzZSBqdXN0IHJldHVybiBvbmUgc2xpY2UgeWV0 Lgo+ID4gPiArCSAqIFNob3VsZCBiZSBleHRlbmRlZCBmb3Igb3RoZXIgcGxhdGZvcm1zLgo+ID4g PiArCSAqLwo+ID4gPiArCXJldHVybiBEQlVGX1MxX0JJVDsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiAgc3RhdGljIHU2NAo+ID4gPiAgaWNsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUKPiA+ID4gKmNydGNfc3RhdGUsCj4gPiA+ICAJCQkJIHU2NCAq cGxhbmVfZGF0YV9yYXRlKQo+ID4gPiAtLSAKPiA+ID4gMi4xNy4xCj4gPiAKPiA+IAoKLS0gClZp bGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZng=