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 20:18:06 +0200 Message-ID: <20191118181806.GX1208@intel.com> References: <20191114122449.26409-1-stanislav.lisovskiy@intel.com> <20191115201944.GO1208@intel.com> <20191118152712.GS1208@intel.com> <4f13f1993b67930ac88f6fd8adcf47f197a02799.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDD6F6E792 for ; Mon, 18 Nov 2019 18:18:10 +0000 (UTC) Content-Disposition: inline In-Reply-To: <4f13f1993b67930ac88f6fd8adcf47f197a02799.camel@intel.com> 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 T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMDU6MTc6NTFQTSArMDAwMCwgTGlzb3Zza2l5LCBTdGFu aXNsYXYgd3JvdGU6Cj4gT24gTW9uLCAyMDE5LTExLTE4IGF0IDE3OjI3ICswMjAwLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBNb24sIE5vdiAxOCwgMjAxOSBhdCAwOToxOToxOEFNICsw MDAwLCBMaXNvdnNraXksIFN0YW5pc2xhdiB3cm90ZToKPiA+ID4gT24gRnJpLCAyMDE5LTExLTE1 IGF0IDIyOjE5ICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiA+ID4gT24gVGh1LCBO b3YgMTQsIDIwMTkgYXQgMDI6MjQ6NDlQTSArMDIwMCwgU3RhbmlzbGF2IExpc292c2tpeQo+ID4g PiA+IHdyb3RlOgo+ID4gPiA+ID4gQWxzbyBpbXBsZW1lbnRlZCBhbGdvcml0aG0gZm9yIGNob29z aW5nIERCdWYgc2xpY2UKPiA+ID4gPiA+IGNvbmZpZ3VyYXRpb24KPiA+ID4gPiA+IGJhc2VkIG9u IGFjdGl2ZSBwaXBlcywgcGlwZSByYXRpbyBhcyBzdGF0ZWQgaW4gQlNwZWMgMTI3MTYuCj4gPiA+ ID4gPiAKPiA+ID4gPiA+IE5vdyBwaXBlIGFsbG9jYXRpb24gc3RpbGwgc3RheXMgcHJvcG9ydGlv bmFsIHRvIHBpcGUgd2lkdGggYXMKPiA+ID4gPiA+IGJlZm9yZSwKPiA+ID4gPiA+IGhvd2V2ZXIg d2l0aGluIGFsbG93ZWQgREJ1ZiBzbGljZSBmb3IgdGhpcyBwYXJ0aWN1bGFyCj4gPiA+ID4gPiBj b25maWd1cmF0aW9uLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiB2MjogUmVtb3ZlIHVubmVlZGVkIGNo ZWNrIGZyb20gY29tbWl0IGFzIGRkYiBlbmFibGVkIHNsaWNlcwo+ID4gPiA+ID4gbWlnaHQKPiA+ ID4gPiA+ICAgICBub3cgZGlmZmVyIGZyb20gaHcgc3RhdGUuCj4gPiA+ID4gPiAKPiA+ID4gPiA+ IHYzOiAtIEFkZGVkIG5ldyBmaWVsZCAic3VwcG9ydGVkX3NsaWNlcyIgdG8gZGRiIHRvIHNlcGFy YXRlIG1heAo+ID4gPiA+ID4gICAgICAgc3VwcG9ydGVkIHNsaWNlcyB2cyBjdXJyZW50bHkgZW5h YmxlZCwgdG8gYXZvaWQKPiA+ID4gPiA+IGNvbmZ1c2lvbi4KPiA+ID4gPiA+ICAgICAtIFJlbW92 ZWQgb2Jzb2xldGUgY29tbWVudHMgYW5kIGNvZGUgcmVsYXRlZCB0bwo+ID4gPiA+ID4gREJ1ZihN YXR0aGV3Cj4gPiA+ID4gPiBSb3BlcikuCj4gPiA+ID4gPiAgICAgLSBTb21lIGNvZGUgc3R5bGUg YW5kIGxvbmcgbGluZSByZW1vdmFsKE1hdHRoZXcgUm9wZXIpLgo+ID4gPiA+ID4gICAgIC0gQWRk ZWQgV0FSTl9PTiB0byBuZXcgZGRiIHJhbmdlIG9mZnNldCBjYWxjCj4gPiA+ID4gPiBmdW5jdGlv bihNYXR0aGV3Cj4gPiA+ID4gPiBSb3BlcikuCj4gPiA+ID4gPiAgICAgLSBSZW1vdmVkIHBsYXRm b3JtIHNwZWNpZmljIGNhbGwgdG8gY2FsYyBwaXBlIHJhdGlvIGZyb20KPiA+ID4gPiA+IGRkYgo+ ID4gPiA+ID4gICAgICAgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZml4ZWQgdGhlIHJldHVybiB2 YWx1ZShNYXR0aGV3Cj4gPiA+ID4gPiBSb3BlcikKPiA+ID4gPiA+ICAgICAtIFJlZmFjdG9yZWQg REJVRiBzbGljZSBhbGxvY2F0aW9uIHRhYmxlIHRvIGltcHJvdmUKPiA+ID4gPiA+IHJlYWRhYmls aXR5Cj4gPiA+ID4gPiAgICAgLSBBZGRlZCBEQlVGIHNsaWNlIGFsbG9jYXRpb24gZm9yIFRHTCBh cyB3ZWxsLgo+ID4gPiA+ID4gICAgIC0gSUNMKGhvd2V2ZXIgbm90IFRHTCkgc2VlbXMgdG8gdm9s dW50YXJpbHkgZW5hYmxlIHNlY29uZAo+ID4gPiA+ID4gREJ1Zgo+ID4gPiA+ID4gc2xpY2UKPiA+ ID4gPiA+ICAgICAgIGFmdGVyIHBtIHN1c3BlbmQvcmVzdW1lIGNhdXNpbmcgYSBtaXNtYXRjaCBm YWlsdXJlLAo+ID4gPiA+ID4gYmVjYXVzZQo+ID4gPiA+ID4gd2UKPiA+ID4gPiA+ICAgICAgIHVw ZGF0ZSBEQnVmIHNsaWNlcyBvbmx5IGlmIHdlIGRvIGEgbW9kZXNldCwgaG93ZXZlciB0aGlzCj4g PiA+ID4gPiBjaGVjawo+ID4gPiA+ID4gICAgICAgaXMgZG9uZSBhbHdheXMuIEZpeGVkIGl0IHRv IGJlIGRvbmUgb25seSB3aGVuIG1vZGVzZXQgZm9yCj4gPiA+ID4gPiBJQ0wuCj4gPiA+ID4gPiAK PiA+ID4gPiA+IHY0OiAtIE5vdyBlbmFibGVkIHNsaWNlcyBpcyBub3QgYWN0dWFsbHkgYSBudW1i ZXIsIGJ1dCBhCj4gPiA+ID4gPiBiaXRtYXNrLAo+ID4gPiA+ID4gICAgICAgYmVjYXVzZSB3ZSBt aWdodCBuZWVkIHRvIGVuYWJsZSBzZWNvbmQgc2xpY2Ugb25seSBhbmQKPiA+ID4gPiA+IG51bWJl cgo+ID4gPiA+ID4gICAgICAgb2Ygc2xpY2VzIHdvdWxkIHN0aWxsIDEgYW5kIHRoYXQgY3VycmVu dCBjb2RlIGRvZXNuJ3QKPiA+ID4gPiA+IGFsbG93Lgo+ID4gPiA+ID4gICAgIC0gUmVtb3ZlIHJl ZHVuZGFudCBkdXBsaWNhdGUgY29kZSB0byBoYXZlIHNvbWUgdW5pZmllZCB3YXkKPiA+ID4gPiA+ IG9mCj4gPiA+ID4gPiAgICAgICBlbmFibGluZyBkYnVmIHNsaWNlcyBpbnN0ZWFkIG9mIGhhcmRj b2RpbmcuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IHY1OiAtIEZpeCBmYWlsaW5nIGdlbjlfYXNzZXJ0 X2RidWZfZW5hYmxlZCBhcyBpdCB3YXMgbmFpdmVseQo+ID4gPiA+ID4gdGhpbmtpbmcKPiA+ID4g PiA+ICAgICAgIHRoYXQgd2UgaGF2ZSBvbmx5IG9uZSBEQlVGX0NUTCBzbGljZS4gTm93IGFub3Ro ZXIgdmVyc2lvbgo+ID4gPiA+ID4gZm9yCj4gPiA+ID4gPiAgICAgICBnZW4xMSB3aWxsIGNoZWNr IGJvdGggc2xpY2VzIGFzIG9ubHkgc2Vjb25kIG9uZSBjYW4gYmUKPiA+ID4gPiA+IGVuYWJsZWQs Cj4gPiA+ID4gPiAgICAgICB0byBrZWVwIENJIGhhcHB5Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiB2 NjogLSBSZW1vdmVkIGVuYWJsZWQgZGJ1ZiBhc3NlcnRpb24gY29tcGxldGVseS4gUHJldmlvdXMg Y29kZQo+ID4gPiA+ID4gICAgICAgd2FzIGtlZXBpbmcgZGJ1ZiBlbmFibGVkLCBldmVuKCEpIHdo ZW4gX2RidWZfZGlzYWJsZSBpcwo+ID4gPiA+ID4gY2FsbGVkLgo+ID4gPiA+ID4gICAgICAgQ3Vy cmVudGx5IHdlIGVuYWJsZS9kaXNhYmxlIGRidWYgc2xpY2VzIGJhc2VkIG9uCj4gPiA+ID4gPiBy ZXF1cmVtZW50Cj4gPiA+ID4gPiAgICAgICBzbyBubyBwb2ludCBpbiBhc3NlcnRpbmcgdGhpcyBo ZXJlLgo+ID4gPiA+ID4gICAgIC0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBtb2Rlc2V0IGNoZWNrIGZy b20KPiA+ID4gPiA+IHZlcmlmeV93bV9zdGF0ZShNYXR0aGV3IFJvcGVyKQo+ID4gPiA+ID4gICAg IC0gU2xpY2VzIGludGVyc2VjdGlvbiBhZnRlciB1bmlvbiBpcyBzYW1lIGFzIGZpbmFsCj4gPiA+ ID4gPiByZXN1bHQoTWF0dGhldyBSb3BlcikKPiA+ID4gPiA+ICAgICAtIE1vdmVkIERCdWYgc2xp Y2VzIHRvIGludGVsX2RldmljZV9pbmZvKE1hdHRoZXcgUm9wZXIpCj4gPiA+ID4gPiAgICAgLSBT b21lIG1hY3JvcyBhZGRlZChNYXR0aGV3IFJvcGVyKQo+ID4gPiA+ID4gICAgIC0gZGRiIHJhbmdl IGlzIG5vdyBhbHdheXMgbGVzcyBvciBlcXVhbCB0byBkZGIgc2l6ZSAtIG5vCj4gPiA+ID4gPiBu ZWVkCj4gPiA+ID4gPiBmb3IgYWRkaXRpb25hbAo+ID4gPiA+ID4gICAgICAgY2hlY2tzKHByZXZp b3VzbHkgbmVlZGVkIGFzIHdlIGhhZCBzb21lIGJhbmR3aWR0aCBjaGVja3MKPiA+ID4gPiA+IGlu Cj4gPiA+ID4gPiB0aGVyZSB3aGljaAo+ID4gPiA+ID4gICAgICAgY291bGQgInN1ZGRlbmx5IiBy ZXR1cm4gZGRiX3NpemUgc21hbGxlciB0aGFuIGl0IGlzLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiB2 NzogTWlub3IgY29zdGVtaWMgY2hhbmdlczoKPiA+ID4gPiA+ICAgICAtIENoYW5nZWQgaWNsX2Ri dWZfc2xpY2VzX3Jlc3RvcmUgbmFtZSB0bwo+ID4gPiA+ID4gaWNsX3Byb2dyYW1fZGJ1Zl9zbGlj ZXMKPiA+ID4gPiA+ICAgICAgIGFzIGl0IG1vcmUgY29ycmVzcG9uZHMgdG8gdGhlIGFjdHVhbCBm dW5jdGlvbmFsaXR5Lgo+ID4gPiA+ID4gICAgIC0gU29tZSBzaW1wbGlmaWNhdGlvbiB3aXRoIHN1 cHBvcnRlZCBzbGljZXMgZm9yIEJYVCBhbmQgR0xLCj4gPiA+ID4gPiAgICAgLSBza2xfcGlwZV9k b3duc2NhbGVfYW1vdW50IC0+IGljbF9waXBlX2Rvd25zY2FsZV9hbW91bnQgYXMKPiA+ID4gPiA+ ICAgICAgIHRoaXMgaXMgbm90IHVzZWQgZm9yIHNrbCBhbnltb3JlLgo+ID4gPiA+ID4gICAgIC0g Q2hhbmdlZCBEQnVmIHNsaWNlIGFzc2lnbm1lbnQgb3JkZXIgZm9yIFRHTCBjYXNlCj4gPiA+ID4g PiAKPiA+ID4gPiA+IFJldmlld2VkLWJ5OiBNYXR0aGV3IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJA aW50ZWwuY29tPgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8 Cj4gPiA+ID4gPiBzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNvbT4KPiA+ID4gPiA+IENjOiBN YXR0aGV3IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+ID4gPiA+ID4gQ2M6IFZp bGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBpbnRlbC5jb20+Cj4gPiA+ID4gPiBDYzogSmFt ZXMgQXVzbXVzIDxqYW1lcy5hdXNtdXNAaW50ZWwuY29tPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgIHwgIDI2ICst Cj4gPiA+ID4gPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jICAg IHwgIDk4ICsrLS0tCj4gPiA+ID4gPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eV9wb3dlci5oICAgIHwgICAyICsKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jICAgICAgICAgICAgICAgfCAgIDUgKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgMiArLQo+ID4gPiA+ID4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcGNpLmMgICAgICAgICAgICAgICB8ICAgNiArLQo+ID4gPiA+ID4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICAgICAgICB8ICAgOCArLQo+ ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmggICAgICB8 ICAgMSArCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgICAg ICAgICAgIHwgMzg3Cj4gPiA+ID4gPiArKysrKysrKysrKysrKysrLS0KPiA+ID4gPiA+ICA5IGZp bGVzIGNoYW5nZWQsIDQzMSBpbnNlcnRpb25zKCspLCAxMDQgZGVsZXRpb25zKC0pCj4gPiA+ID4g PiAKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuYwo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuYwo+ID4gPiA+ID4gaW5kZXggODc2ZmMyNTk2OGJmLi5iZDdhZmY2NzUxOTgg MTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMKPiA+ID4gPiA+IEBAIC0xMzM4Nyw3ICsxMzM4Nyw3IEBAIHN0YXRpYyB2 b2lkIHZlcmlmeV93bV9zdGF0ZShzdHJ1Y3QKPiA+ID4gPiA+IGludGVsX2NydGMgKmNydGMsCj4g PiA+ID4gPiAgCj4gPiA+ID4gPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCj4g PiA+ID4gPiAgCSAgICBody0+ZGRiLmVuYWJsZWRfc2xpY2VzICE9IHN3X2RkYi0+ZW5hYmxlZF9z bGljZXMpCj4gPiA+ID4gPiAtCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIERCVUYgU2xpY2VzIChl eHBlY3RlZAo+ID4gPiA+ID4gJXUsIGdvdAo+ID4gPiA+ID4gJXUpXG4iLAo+ID4gPiA+ID4gKwkJ RFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEQlVGIFNsaWNlcyAoZXhwZWN0ZWQKPiA+ID4gPiA+ICV4 LCBnb3QKPiA+ID4gPiA+ICV4KVxuIiwKPiA+ID4gPiA+ICAJCQkgIHN3X2RkYi0+ZW5hYmxlZF9z bGljZXMsCj4gPiA+ID4gPiAgCQkJICBody0+ZGRiLmVuYWJsZWRfc2xpY2VzKTsKPiA+ID4gPiA+ ICAKPiA+ID4gPiA+IEBAIC0xNDYxNCwxNSArMTQ2MTQsMjQgQEAgc3RhdGljIHZvaWQKPiA+ID4g PiA+IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlKQo+ID4gPiA+ID4gIAl1OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9wcml2LQo+ID4g PiA+ID4gPndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXM7Cj4gPiA+ID4gPiAgCXU4IHJlcXVp cmVkX3NsaWNlcyA9IHN0YXRlLQo+ID4gPiA+ID4gPndtX3Jlc3VsdHMuZGRiLmVuYWJsZWRfc2xp Y2VzOwo+ID4gPiA+ID4gIAlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSBlbnRyaWVzW0k5MTVfTUFYX1BJ UEVTXSA9IHt9Owo+ID4gPiA+ID4gKwl1OCBzbGljZXNfdW5pb24gPSBod19lbmFibGVkX3NsaWNl cyB8IHJlcXVpcmVkX3NsaWNlczsKPiA+ID4gPiA+ICsJdTggc2xpY2VzX2ludGVyc2VjdGlvbiA9 IHJlcXVpcmVkX3NsaWNlczsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJZm9yX2VhY2hfb2xkbmV3 X2ludGVsX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsCj4gPiA+ID4gPiBvbGRfY3J0Y19zdGF0 ZSwgbmV3X2NydGNfc3RhdGUsIGkpCj4gPiA+ID4gPiAgCQkvKiBpZ25vcmUgYWxsb2NhdGlvbnMg Zm9yIGNydGMncyB0aGF0IGhhdmUgYmVlbgo+ID4gPiA+ID4gdHVybmVkCj4gPiA+ID4gPiBvZmYu ICovCj4gPiA+ID4gPiAgCQlpZiAobmV3X2NydGNfc3RhdGUtPmh3LmFjdGl2ZSkKPiA+ID4gPiA+ ICAJCQllbnRyaWVzW2ldID0gb2xkX2NydGNfc3RhdGUtCj4gPiA+ID4gPiA+d20uc2tsLmRkYjsK PiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JLyogSWYgMm5kIERCdWYgc2xpY2UgcmVxdWlyZWQsIGVu YWJsZSBpdCBoZXJlICovCj4gPiA+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx ICYmIHJlcXVpcmVkX3NsaWNlcyA+Cj4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4g PiA+IC0JCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4gPiByZXF1aXJl ZF9zbGljZXMpOwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJEQnVmIHJlcSBzbGljZXMgJWQg aHcgc2xpY2VzICVkXG4iLAo+ID4gPiA+ID4gKwkJICAgICAgcmVxdWlyZWRfc2xpY2VzLCBod19l bmFibGVkX3NsaWNlcyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAq IElmIHNvbWUgb3RoZXIgREJ1ZiBzbGljZSByZXF1aXJlZCwgZW5hYmxlIGl0IGhlcmUsCj4gPiA+ ID4gPiArCSAqIGFzIGhlcmUgd2Ugb25seSBhZGQgbW9yZSBzbGljZXMsIGJ1dCBub3QgcmVtb3Zl IHRvCj4gPiA+ID4gPiBwcmV2ZW50Cj4gPiA+ID4gPiArCSAqIGlzc3VlcyBpZiBzb21lYm9keSBz dGlsbCB1c2VzIHRob3NlLgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTEgJiYgcmVxdWlyZWRfc2xpY2VzICE9Cj4gPiA+ID4gPiBod19lbmFi bGVkX3NsaWNlcykKPiA+ID4gPiA+ICsJCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYs IHNsaWNlc191bmlvbik7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCS8qCj4gPiA+ID4gPiAgCSAq IFdoZW5ldmVyIHRoZSBudW1iZXIgb2YgYWN0aXZlIHBpcGVzIGNoYW5nZXMsIHdlIG5lZWQKPiA+ ID4gPiA+IHRvIG1ha2UKPiA+ID4gPiA+IHN1cmUgd2UKPiA+ID4gPiA+IEBAIC0xNDY4MSw5ICsx NDY5MCwxMiBAQCBzdGF0aWMgdm9pZAo+ID4gPiA+ID4gc2tsX2NvbW1pdF9tb2Rlc2V0X2VuYWJs ZXMoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiA+ID4gPiAgCQl9Cj4gPiA+ ID4gPiAgCX0gd2hpbGUgKHByb2dyZXNzKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JLyogSWYg Mm5kIERCdWYgc2xpY2UgaXMgbm8gbW9yZSByZXF1aXJlZCBkaXNhYmxlIGl0ICovCj4gPiA+ID4g PiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyA8Cj4g PiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191 cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4gPiByZXF1aXJlZF9zbGljZXMpOwo+ID4gPiA+ID4gKwkv Kgo+ID4gPiA+ID4gKwkgKiBJZiBzb21lIG90aGVyIERCdWYgc2xpY2UgaXMgbm90IG5lZWRlZCwg ZGlzYWJsZSBpdAo+ID4gPiA+ID4gaGVyZSwKPiA+ID4gPiA+ICsJICogYXMgaGVyZSB3ZSBvbmx5 IHJlbW92ZSBzbGljZXMsIHdoaWNoIGFyZSBub3QgbmVlZGVkCj4gPiA+ID4gPiBhbnltb3JlLgo+ ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEg JiYgcmVxdWlyZWRfc2xpY2VzICE9Cj4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4g PiA+ICsJCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4gPiBzbGljZXNf aW50ZXJzZWN0aW9uKTsKPiA+ID4gPiAKPiA+ID4gPiBUaGlzIGlzIHN0aWxsIGEgdG90YWxseSB3 cm9uZyBwbGFjZSBmb3IgdGhpcy4gV2UgbmVlZCB0byBiZSBzdXJlCj4gPiA+ID4gdGhlCj4gPiA+ ID4gcGxhbmVzIGhhdmUgc3dpdGNoZWQgb3ZlciB0byB0aGUgbmV3IGRkYiBsYXlvdXQgYmVmb3Jl IHdlIHBvd2VyCj4gPiA+ID4gb2ZmCj4gPiA+ID4gYW55dGhpbmcuCj4gPiA+IAo+ID4gPiBJIGhh dmUganVzdCBtb2RpZmllZCBhbHJlYWR5IGV4aXN0aW5nIGxpbmUgaGVyZSwgbm90IGFkZGVkIGJ5 IG1lLgo+ID4gPiBUaGUgcG9pbnQgb2YgdGhpcyBwYXRjaCBpcyBzdGFydGluZyB0byB1c2Ugc2Vj b25kIERCdWYgc2xpY2UgYnV0Cj4gPiA+IG5vdCBmaXhpbmcgYWxsIGtpbmRzIG9mIGlzc3VlcyBy ZWxhdGVkIHRvIERCdWYgY29kZSBhdCB0aGUgc2FtZQo+ID4gPiB0aW1lLgo+ID4gCj4gPiBZb3Un cmUgcmUtZW5hYmxpbmcgY29kZSBJIGRpc2FibGVkIG9uIHB1cnBvc2UuIEl0IGhhcyB0byBiZSBm aXhlZAo+ID4gcHJvcGVybHkgb3Igbm90IHRvdWNoZWQgYXQgYWxsLiBJbiBoaW5kc2lnaHQgSSBz aG91bGQgaGF2ZSBwcm9iYWJseQo+ID4ganVzdCByaXBwZWQgaXQgYWxsIG91dCB0byBub3QgZ2l2 ZSBwZW9wbGUgYmFkIGlkZWFzLgo+IAo+IC0JLyogSWYgMm5kIERCdWYgc2xpY2UgaXMgbm8gbW9y ZSByZXF1aXJlZCBkaXNhYmxlIGl0ICovCj4gPiA+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyA8Cj4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNl cykKPiA+ID4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4g PiByZXF1aXJlZF9zbGljZXMpOwo+IAo+IEknbSBub3QgcmVlbmFibGluZyBpdCAtIHRoaXMgaXMg Y29kZSBpcyBvdXQgdGhlcmUgcmlnaHQgbm93LgoKSXQncyBfZGVhZF8gY29kZSwgYW5kIGl0J3Mg bGlrZSB0aGF0IG9uIHB1cnBvc2UuIFlvdSdyZSBub3cgYXR0ZW1wdGluZwp0byByZS1lbmFibGUg aXQgd2l0aG91dCBmaXhpbmcgdGhlIHVuZGVybHlpbmcgaXNzdWVzLgoKPiBUaGlzIGlzIGFsbCBh Z2FpbiBhYm91dCBjaGFuZ2luZyBhbGwga2luZHMgb2Ygc3R1ZmYgYXQgdGhlIHNhbWUgdGltZS4K PiAKPiBXaHkgd2UgY2FuJ3QganVzdCBkbyB0aGluZ3Mgc3RlcCBieSBzdGVwPyBZb3UgaGF2ZSBh IHBvaW50IHRoYXQKPiB0aGlzIGlzIHdyb25nIHBsYWNlIG9rLCBidXQgYXMgd2Ugc2VlIGN1cnJl bnQgY29kZSBjYXVzZXMgbm8KPiByZWdyZXNzaW9ucy4gSnVzdCB0ZWxsIG1lIHlvdXIgaWRlYSB3 aGVyZSB0byBwdXQgaXQgYW5kIEkgd2lsbAo+IGRvIHRoYXQsIGlmIHlvdSBkb24ndCBoYXZlIGl0 IHlldCAtIGxldCBpdCBzdGF5IHRoZXJlLCBpZiBDSSBzaG93cwo+IG5vIHJlZ3Jlc3Npb25zIGN1 cnJlbnRseS4gCgpUaGUgc2FtZSBnbG9iYWwgc3RhdGUgdHJpY2tzIGFwcGx5IGhlcmUgYXMgd2l0 aCB0aGUgY2RjbGsvc2FndiBzdHVmZi4KMS4gZW5hYmxlIG5ldyByZXNvdXJjZXMvYnVtcCB1cCBj bG9ja3MKMi4gcmVjb25maWd1cmUgcGxhbmVzL2V0Yy4KMy4gd2FpdCBmb3IgdmJsYW5rcwo0LiBk aXNhYmxlIHVudXNlZCByZXNvdXJjZXMvZHJvcCB0aGUgY2xvY2tzCgo+IAo+ID4gCj4gPiA+IAo+ ID4gPiBPZiBjb3Vyc2UgdGhpcyBpcyBuaWNlIGlkZWEgdG8gZml4IGl0IC0gaWYgdGhhdCBpcyB3 cm9uZyBwbGFuZSwKPiA+ID4gYnV0IGN1cnJlbnQgY29kZSBzb21laG93IGxpdmVzIHdpdGggaXQg YW5kIHByb2JhYmx5IHRoaXMgc2hvdWxkIGJlCj4gPiA+IHdpdGggc29tZSBvdGhlciBwYXRjaC4K PiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIHN0YXRp YyB2b2lkIGludGVsX2F0b21pY19oZWxwZXJfZnJlZV9zdGF0ZShzdHJ1Y3QKPiA+ID4gPiA+IGRy bV9pOTE1X3ByaXZhdGUKPiA+ID4gPiA+ICpkZXZfcHJpdikKPiA+ID4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYwo+ID4g PiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIu Ywo+ID4gPiA+ID4gaW5kZXggY2UxYjY0ZjRkZDQ0Li5hNzhiYzliNjE4NjIgMTAwNjQ0Cj4gPiA+ ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93 ZXIuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5X3Bvd2VyLmMKPiA+ID4gPiA+IEBAIC0xMDMxLDE1ICsxMDMxLDYgQEAgc3RhdGljIGJv b2wKPiA+ID4gPiA+IGdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZQo+ID4gPiA+ID4gKmRldl9wcml2LAo+ID4gPiA+ID4gIAkJKEk5MTVfUkVBRChE Q19TVEFURV9FTikgJgo+ID4gPiA+ID4gRENfU1RBVEVfRU5fVVBUT19EQzVfREM2X01BU0spID09 IDApOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC1zdGF0aWMgdm9pZCBnZW45 X2Fzc2VydF9kYnVmX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gPiA+ICpk ZXZfcHJpdikKPiA+ID4gPiA+IC17Cj4gPiA+ID4gPiAtCXUzMiB0bXAgPSBJOTE1X1JFQUQoREJV Rl9DVEwpOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQlXQVJOKCh0bXAgJiAoREJVRl9QT1dFUl9T VEFURSB8IERCVUZfUE9XRVJfUkVRVUVTVCkpICE9Cj4gPiA+ID4gPiAtCSAgICAgKERCVUZfUE9X RVJfU1RBVEUgfCBEQlVGX1BPV0VSX1JFUVVFU1QpLAo+ID4gPiA+ID4gLQkgICAgICJVbmV4cGVj dGVkIERCdWYgcG93ZXIgcG93ZXIgc3RhdGUgKDB4JTA4eClcbiIsCj4gPiA+ID4gPiB0bXApOwo+ ID4gPiA+ID4gLX0KPiA+ID4gPiA+IC0KPiA+ID4gPiA+ICBzdGF0aWMgdm9pZCBnZW45X2Rpc2Fi bGVfZGNfc3RhdGVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYp Cj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUgY2RjbGtf c3RhdGUgPSB7fTsKPiA+ID4gPiA+IEBAIC0xMDU1LDggKzEwNDYsNiBAQCBzdGF0aWMgdm9pZCBn ZW45X2Rpc2FibGVfZGNfc3RhdGVzKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gPiA+ID4gPiAgCS8qIENhbid0IHJlYWQgb3V0IHZvbHRhZ2VfbGV2ZWwgc28g Y2FuJ3QgdXNlCj4gPiA+ID4gPiBpbnRlbF9jZGNsa19jaGFuZ2VkKCkgKi8KPiA+ID4gPiA+ICAJ V0FSTl9PTihpbnRlbF9jZGNsa19uZWVkc19tb2Rlc2V0KCZkZXZfcHJpdi0+Y2RjbGsuaHcsCj4g PiA+ID4gPiAmY2RjbGtfc3RhdGUpKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JZ2VuOV9hc3Nl cnRfZGJ1Zl9lbmFibGVkKGRldl9wcml2KTsKPiA+ID4gPiA+IC0KPiA+ID4gPiA+ICAJaWYgKElT X0dFTjlfTFAoZGV2X3ByaXYpKQo+ID4gPiA+ID4gIAkJYnh0X3ZlcmlmeV9kZGlfcGh5X3Bvd2Vy X3dlbGxzKGRldl9wcml2KTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IEBAIC00MjU0LDMxICs0MjQz LDUxIEBAIHN0YXRpYyB2b2lkIGdlbjlfZGJ1Zl9kaXNhYmxlKHN0cnVjdAo+ID4gPiA+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ID4gPiAgCWludGVsX2RidWZfc2xpY2Vfc2V0 KGRldl9wcml2LCBEQlVGX0NUTCwgZmFsc2UpOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ ID4gPiA+IC1zdGF0aWMgdTggaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYpCj4gPiA+ID4gPiAraW50IGludGVsX2RidWZfbWF4 X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ID4gPiAgewo+ ID4gPiA+ID4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ID4gPiA+ID4gLQkJcmV0 dXJuIDE7Cj4gPiA+ID4gPiAtCXJldHVybiAyOwo+ID4gPiA+ID4gKwlyZXR1cm4gSU5URUxfSU5G TyhkZXZfcHJpdiktPnN1cHBvcnRlZF9zbGljZXM7Cj4gPiA+ID4gPiArfQo+ID4gPiA+IAo+ID4g PiA+IEtpbmRhIHBvaW50bGVzcyBmdW5jdGlvbiBub3cuICdzdXBwb3J0ZWRfc2xpY2VzJyBpcyBu b3QgYSB2ZXJ5Cj4gPiA+ID4gZ29vZAo+ID4gPiA+IG5hbWUuIFNob3VsZCBiZSAnbnVtX2RidWZf c2xpY2VzJyBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuCj4gPiA+IAo+ID4gPiBTdXBw b3J0ZWQgc2xpY2VzIHJlYWxseSBtZWFucyBob3cgbXVjaCBzbGljZXMgd2Ugc3VwcG9ydCBpbgo+ ID4gPiBoYXJkd2FyZS4KPiA+ID4gbnVtX2RidWZfc2xpY2VzIHdpbGwgbm90IHJlZmxlY3QgdGhh dCwgaXQgd2lsbCBiZSBtb3JlIGFtYmlnaW91cy4KPiA+ID4gSSBkb24ndCBsaWtlIHRoaXMgbmFt ZS4KPiA+IAo+ID4gc3VwcG9ydGVkX3NsaWNlcyBkb2Vzbid0IGV2ZW4gc2F5ICJkYnVmIiBhbnl3 aGVyZS4gU28gaXQncyBldmVuIG1vcmUKPiA+IGFtYmlndW91cy4gQWxzbyB3ZSBhbHJlYWR5IGhh dmUgbnVtX3BpcGVzLCBudW1fc3ByaXRlcywgZXRjLgo+IAo+IC4uYW5kIGluIGN1cnJlbnQgY29k ZSB3ZSBoYXZlLi4uICJlbmFibGVkX3NsaWNlcyIsIG5vPyBPdWNoISA6KSBJUyB0aGlzCj4gcmVh bGx5IHRoYXQgaW1wb3J0YW50IGFuZCB3b3J0aCBhcmd1aW5nIGF0IHRoZSB2ZXJ5IGxhc3QgbW9t ZW50Pwo+IHdoZXRoZXIgbnVtYmVyIG9mCj4gc3VwcG9ydGVkX3NsaWNlc19pbl9oYXJkd2FyZSwg c2hvdWxkIGJlIG5hbWVkICJzdXBwb3J0ZWQgc2xpY2VzIiBvcgo+ICJudW1fZGJ1Zl9zbGljZXMi PyBJZiB5ZXMsIGxldHMgZ28gb24sIG1pc3Mgc29tZSB0YXJnZXRzIGFuZCBjb250aW51ZQo+IGRp c2N1c3NpbmcgdGhpcyAic29vb28gaW1wb3J0YW50IiB0aGluZy4gCj4gCj4gU29tZSBvbmUgbWln aHQgY29tZSB1cCB0aGF0IGl0IGlzIGNhbGxlZCAibnVtX3NsaWNlcyIgb3IKPiAiZGJ1Zl9udW1f c2xpY2VzIi4gU2VyaW91c2x5LCBtYXkgYmUgInN1cHBvcnRlZF9udW1fZGJ1Zl9zbGljZXMiIHRv Cj4ga2VlcCBldmVyeW9uZXMgYmxvYXRlZCBlZ29zIGhhcHB5Pz8KPiAKPiAKPiA+IAo+ID4gPiAK PiA+ID4gPiAKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICt2b2lkIGljbF9wcm9ncmFtX2RidWZfc2xp Y2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYpCj4gPiA+ID4g PiArewo+ID4gPiA+ID4gKwljb25zdCB1OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9wcml2LQo+ ID4gPiA+ID4gPiB3bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzOwo+ID4gPiA+IAo+ID4gPiA+ IFNlZW1zIGEgcmF0aGVyIHBvaW50bGVzcyB2YXJpYWJsZS4gY29uc3QgYXQgbGVhc3QgaXMgcG9p bnRsZXNzLgo+ID4gPiA+IAo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpY2xfZGJ1Zl9zbGljZXNf dXBkYXRlKGRldl9wcml2LCBod19lbmFibGVkX3NsaWNlcyk7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ ID4gIAo+ID4gPiA+ID4gIHZvaWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCQkJICAgIHU4IHJlcV9zbGljZXMpCj4g PiA+ID4gPiAgewo+ID4gPiA+ID4gLQljb25zdCB1OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9w cml2LQo+ID4gPiA+ID4gPiB3bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzOwo+ID4gPiA+ID4g Cj4gPiA+ID4gPiAtCWJvb2wgcmV0Owo+ID4gPiA+ID4gKwlib29sIHJldCA9IHRydWU7Cj4gPiA+ ID4gPiArCWludCBpOwo+ID4gPiA+ID4gKwlpbnQgbWF4X3NsaWNlcyA9IGludGVsX2RidWZfbWF4 X3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWlmIChyZXFfc2xpY2Vz ID4gaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKGRldl9wcml2KSkgewo+ID4gPiA+ID4gKwlpZiAoaHdl aWdodDgocmVxX3NsaWNlcykgPgo+ID4gPiA+ID4gaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKGRldl9w cml2KSkgewo+ID4gPiA+ID4gIAkJRFJNX0VSUk9SKCJJbnZhbGlkIG51bWJlciBvZiBkYnVmIHNs aWNlcwo+ID4gPiA+ID4gcmVxdWVzdGVkXG4iKTsKPiA+ID4gPiA+ICAJCXJldHVybjsKPiA+ID4g PiA+ICAJfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gLQlpZiAocmVxX3NsaWNlcyA9PSBod19lbmFi bGVkX3NsaWNlcyB8fCByZXFfc2xpY2VzID09IDApCj4gPiA+ID4gPiAtCQlyZXR1cm47Cj4gPiA+ ID4gPiArCURSTV9ERUJVR19LTVMoIlVwZGF0aW5nIGRidWYgc2xpY2VzIHRvICV4XG4iLAo+ID4g PiA+ID4gcmVxX3NsaWNlcyk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWlmIChyZXFfc2xpY2Vz ID4gaHdfZW5hYmxlZF9zbGljZXMpCj4gPiA+ID4gPiAtCQlyZXQgPSBpbnRlbF9kYnVmX3NsaWNl X3NldChkZXZfcHJpdiwKPiA+ID4gPiA+IERCVUZfQ1RMX1MyLAo+ID4gPiA+ID4gdHJ1ZSk7Cj4g PiA+ID4gPiAtCWVsc2UKPiA+ID4gPiA+IC0JCXJldCA9IGludGVsX2RidWZfc2xpY2Vfc2V0KGRl dl9wcml2LAo+ID4gPiA+ID4gREJVRl9DVExfUzIsCj4gPiA+ID4gPiBmYWxzZSk7Cj4gPiA+ID4g PiArCWZvciAoaSA9IDA7IGkgPCBtYXhfc2xpY2VzOyBpKyspIHsKPiA+ID4gPiA+ICsJCWludCBz bGljZV9iaXQgPSBCSVQoaSk7Cj4gPiA+ID4gPiArCQlib29sIHNsaWNlX3NldCA9IChzbGljZV9i aXQgJiByZXFfc2xpY2VzKSAhPSAwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJc3dpdGNoIChz bGljZV9iaXQpIHsKPiA+ID4gPiA+ICsJCWNhc2UgREJVRl9TMV9CSVQ6Cj4gPiA+ID4gPiArCQkJ cmV0ID0gcmV0ICYmCj4gPiA+ID4gPiBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwKPiA+ ID4gPiA+ICsJCQkJCQkJICBEQlVGXwo+ID4gPiA+ID4gQ1RMX1MxLAo+ID4gPiA+ID4gKwkJCQkJ CQkgIHNsaWNlCj4gPiA+ID4gPiBfc2V0KTsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ ICsJCWNhc2UgREJVRl9TMl9CSVQ6Cj4gPiA+ID4gPiArCQkJcmV0ID0gcmV0ICYmCj4gPiA+ID4g PiBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwKPiA+ID4gPiA+ICsJCQkJCQkJICBEQlVG Xwo+ID4gPiA+ID4gQ1RMX1MyLAo+ID4gPiA+ID4gKwkJCQkJCQkgIHNsaWNlCj4gPiA+ID4gPiBf c2V0KTsKPiA+ID4gPiAKPiA+ID4gPiBUaGUgcmV0dXJuIHZhbHVlIG9uIGludGVsX2RidWZfc2xp Y2Vfc2V0KCkgc2VlbXMgcG9pbnRsZXNzLiBJJ2QKPiA+ID4gPiBudWtlCj4gPiA+ID4gaXQuCj4g PiA+ID4gCj4gPiA+ID4gQWxzbyBhcyBsb25nIHlvdSBoYXZlIGludGVsX2RidWZfc2xpY2Vfc2V0 KCkgSSdkIHByb2JhYmx5IGp1c3QKPiA+ID4gPiBwYXNzCj4gPiA+ID4gdGhlCj4gPiA+ID4gc2xp Y2UgaW5kZXggdGhlcmUgYW5kIGxldCBpdCBkZWFsIHdpdGggdGhlIHJlZ2lzdGVyIGRldGFpbHMu Cj4gPiA+ID4gREJVRl9DVEwKPiA+ID4gPiBzaG91bGQgcHJvYmFibHkgYmUgcGFyYW1ldHJpemVk IGFzIHdlbGwgc28geW91IGRvbid0IG5lZWQKPiA+ID4gPiBhbm5veWluZwo+ID4gPiA+IHN3aXRj aAo+ID4gPiA+IHN0YXRlbWVudHMuCj4gPiA+IAo+ID4gPiBXaGF0IGlmIGl0IGZhaWxzPyBTaG91 bGRuJ3Qgd2Ugc3RpbGwgaGF2ZSBzb21lIGNsdWUgd2hhdCBzdGF0ZSBkbwo+ID4gPiB3ZQo+ID4g PiBoYXZlL2hhZCBhdCB0aGUgbW9tZW50Pwo+ID4gCj4gPiBJdCBpZiBmYWlscyB5b3UgbG9nIGFu IGVycm9yIGFuZCBrZWVwIGdvaW5nLgo+IAo+IEFoIHN1cmUuIEFuZCBsZXQgaHcvc3cgc3RhdGUg YmUgY29tcGxldGVseSBkaWZmZXJlbnQuCj4gQWxzbyBzZWUgbmV4dCBjb21tZW50IGFib3V0IHRo aXMuCj4gCj4gPiAKPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ID4g PiArCQlkZWZhdWx0Ogo+ID4gPiA+ID4gKwkJCU1JU1NJTkdfQ0FTRShzbGljZV9iaXQpOwo+ID4g PiA+ID4gKwkJfQo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCWlmIChyZXQp Cj4gPiA+ID4gPiAgCQlkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9Cj4g PiA+ID4gPiByZXFfc2xpY2VzOwo+ID4gPiA+ID4gQEAgLTQyODYsNDAgKzQyOTUsMjEgQEAgdm9p ZCBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgc3RhdGljIHZvaWQgaWNsX2RidWZf ZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ID4gPiA+ICB7Cj4g PiA+ID4gPiAtCUk5MTVfV1JJVEUoREJVRl9DVExfUzEsIEk5MTVfUkVBRChEQlVGX0NUTF9TMSkg fAo+ID4gPiA+ID4gREJVRl9QT1dFUl9SRVFVRVNUKTsKPiA+ID4gPiA+IC0JSTkxNV9XUklURShE QlVGX0NUTF9TMiwgSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSB8Cj4gPiA+ID4gPiBEQlVGX1BPV0VS X1JFUVVFU1QpOwo+ID4gPiA+ID4gLQlQT1NUSU5HX1JFQUQoREJVRl9DVExfUzIpOwo+ID4gPiA+ ID4gLQo+ID4gPiA+ID4gLQl1ZGVsYXkoMTApOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQlpZiAo IShJOTE1X1JFQUQoREJVRl9DVExfUzEpICYgREJVRl9QT1dFUl9TVEFURSkgfHwKPiA+ID4gPiA+ IC0JICAgICEoSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9XRVJfU1RBVEUpKQo+ID4g PiA+ID4gLQkJRFJNX0VSUk9SKCJEQnVmIHBvd2VyIGVuYWJsZSB0aW1lb3V0XG4iKTsKPiA+ID4g PiA+IC0JZWxzZQo+ID4gPiA+ID4gLQkJLyoKPiA+ID4gPiA+IC0JCSAqIEZJWE1FOiBmb3Igbm93 IHByZXRlbmQgdGhhdCB3ZSBvbmx5IGhhdmUgMQo+ID4gPiA+ID4gc2xpY2UsCj4gPiA+ID4gPiBz ZWUKPiA+ID4gPiA+IC0JCSAqIGludGVsX2VuYWJsZWRfZGJ1Zl9zbGljZXNfbnVtKCkuCj4gPiA+ ID4gPiAtCQkgKi8KPiA+ID4gPiA+IC0JCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRf c2xpY2VzID0gMTsKPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ICsJICogSnVzdCBwb3dlciB1cCAx IHNsaWNlLCB3ZSB3aWxsCj4gPiA+ID4gPiArCSAqIGZpZ3VyZSBvdXQgbGF0ZXIgd2hpY2ggc2xp Y2VzIHdlIGhhdmUgYW5kIHdoYXQgd2UKPiA+ID4gPiA+IG5lZWQuCj4gPiA+ID4gPiArCSAqLwo+ ID4gPiA+ID4gKwlkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9IERCVUZf UzFfQklUOwo+ID4gPiA+IAo+ID4gPiA+IFRoYXQgc3R1ZmYgcmVhbGx5IHNob3VsZG4ndCBiZSBt b2RpZmllZCBieSBsb3cgbGV2ZWwgZnVuY3Rpb25zLgo+ID4gPiA+IFRoZSBpbnRpYWwgdmFsdWUg c2hvdWxkIGNvbWUgZnJvbSByZWFkb3V0LCBhbmQgYWZ0ZXIgdGhhdCBpdAo+ID4gPiA+IHNob3Vs ZAo+ID4gPiA+IGJlIGFkanVzdGVkIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgYXRvbWljIHN0YXRl Lgo+ID4gPiAKPiA+ID4gV2VsbCwgYXMgeW91IGNhbiBzZWUgY3VycmVudGx5IHRoaXMgaXMgZXZl biB3b3JzZSAtIGhhcyBzb21lIHdlaXJkCj4gPiA+IGhhcmRjb2RlZCBzdHVmZiBhbmQgaXMgbW9k aWZpZWQgbGlrZSB0aGF0LiBBbHNvIGlmIHdlIGFyZSBlbmFibGluZwo+ID4gPiB0aGUgCj4gPiA+ IGRidWYgc2xpY2VzLCBzaG91bGRuJ3Qgd2UgcmVhbGx5IGRldGVybWluZSB3aGF0IHZhbHVlIHNo b3VsZCBiZQo+ID4gPiB0aGVyZT8KPiA+ID4gCj4gPiA+IEFsc28gSSB3b3VsZG4ndCByZWFsbHkg YWx3YXlzIHRydXN0IHRoZSByZWFkb3V0LCBhcyB0byBtZSBpdCBzZWVtcwo+ID4gPiBpY2VsYWtl IHJlc2V0cyBpdCBjb25zdGFudGx5IHRvIDIgYWZ0ZXIgc3VzcGVuZC9yZXN1bWUuIAo+ID4gCj4g PiBUaGUgcG9pbnQgb2YgcmVhZG91dCBpcyB0aGF0IHdlIHN5bmNyaG9uaXplIG91ciBzb2Z0d2Fy ZSBzdGF0ZSB3aXRoCj4gPiB0aGUKPiA+IGN1cnJlbnQgc3RhdGUgb2YgaGFyZHdhcmUgd2l0aG91 dCBoYXZpbmcgdG8gbW9kaWZ5IHRoZSBoYXJkd2FyZQo+ID4gc3RhdGUuCj4gPiBPbmNlIHN5bmNo cm9uaXplZCB0aGUgZHJpdmVyIHRha2VzIG92ZXIgYW5kIHRlbGxzIHRoZSBodyB3aGF0IHRvIGRv Lgo+IAo+IFRoYXQgaXMgZXNwZWNpYWxseSBuaWNlIGFmdGVyIHlvdSBzYXkgInJlcG9ydCBlcnJv ciBhbmQgZG9uJ3QgY2FyZSIKPiB3aGVuIEkgcmVhbGx5IHdhbnQgdG8gcmVmbGVjdCBodyBzdGF0 ZSBpbiBzdyBzdGF0ZSwgYnkgY2hlY2tpbmcgd2hldGhlcgo+IHdlIGNvdWxkIHNldCBkYnVmIHNs aWNlcyBvciBub3QuIAo+IE5vdyB5b3Ugc2F5IHRoYXQgd2UgbmVlZCB0byBzeW5jaHJvbml6ZSBz b2Z0d2FyZSBzdGF0ZSB3aXRoIGh3IHN0YXRlLAo+IGhvd2V2ZXIgaWYgSSBmYWlsIHRvIG1vZGlm eSBpdCAtIHRoZW4gIndobyBjYXJlcyIuCgpZZXMuIElmIHlvdSBmYWlsIHRvIG1vZGlmeSB0aGUg aGFyZHdhcmUgc3RhdGUgdGhlIHdob2xlIHRoaW5nIGlzCmJyb2tlbiBhbnl3YXkuIFRoZXJlJ3Mg aXMgKm5vdGhpbmcqIHdlIGNhbiBkbyBhdCB0aGlzIHN0YWdlIGluIHRoZQpjb21taXQgdG8gZml4 IGl0LgoKPiAKPiAKPiA+IAo+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiA+ICsJaWNsX3Byb2dyYW1f ZGJ1Zl9zbGljZXMoZGV2X3ByaXYpOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ ICBzdGF0aWMgdm9pZCBpY2xfZGJ1Zl9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4g PiA+ID4gPiAqZGV2X3ByaXYpCj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gLQlJOTE1X1dSSVRFKERC VUZfQ1RMX1MxLCBJOTE1X1JFQUQoREJVRl9DVExfUzEpICYKPiA+ID4gPiA+IH5EQlVGX1BPV0VS X1JFUVVFU1QpOwo+ID4gPiA+ID4gLQlJOTE1X1dSSVRFKERCVUZfQ1RMX1MyLCBJOTE1X1JFQUQo REJVRl9DVExfUzIpICYKPiA+ID4gPiA+IH5EQlVGX1BPV0VSX1JFUVVFU1QpOwo+ID4gPiA+ID4g LQlQT1NUSU5HX1JFQUQoREJVRl9DVExfUzIpOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQl1ZGVs YXkoMTApOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQlpZiAoKEk5MTVfUkVBRChEQlVGX0NUTF9T MSkgJiBEQlVGX1BPV0VSX1NUQVRFKSB8fAo+ID4gPiA+ID4gLQkgICAgKEk5MTVfUkVBRChEQlVG X0NUTF9TMikgJiBEQlVGX1BPV0VSX1NUQVRFKSkKPiA+ID4gPiA+IC0JCURSTV9FUlJPUigiREJ1 ZiBwb3dlciBkaXNhYmxlIHRpbWVvdXQhXG4iKTsKPiA+ID4gPiA+IC0JZWxzZQo+ID4gPiA+ID4g LQkJLyoKPiA+ID4gPiA+IC0JCSAqIEZJWE1FOiBmb3Igbm93IHByZXRlbmQgdGhhdCB0aGUgZmly c3Qgc2xpY2UKPiA+ID4gPiA+IGlzCj4gPiA+ID4gPiBhbHdheXMKPiA+ID4gPiA+IC0JCSAqIGVu YWJsZWQsIHNlZQo+ID4gPiA+ID4gaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNlc19udW0oKS4KPiA+ ID4gPiA+IC0JCSAqLwo+ID4gPiA+ID4gLQkJZGV2X3ByaXYtPndtLnNrbF9ody5kZGIuZW5hYmxl ZF9zbGljZXMgPSAxOwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkgKiBEaXNhYmxlIGFsbCBz bGljZXMKPiA+ID4gPiA+ICsJICovCj4gPiA+ID4gPiArCWRldl9wcml2LT53bS5za2xfaHcuZGRi LmVuYWJsZWRfc2xpY2VzID0gMDsKPiA+ID4gPiA+ICsJaWNsX3Byb2dyYW1fZGJ1Zl9zbGljZXMo ZGV2X3ByaXYpOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICBzdGF0aWMgdm9p ZCBpY2xfbWJ1c19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXlfcG93ZXIuaAo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXlfcG93ZXIuaAo+ID4gPiA+ID4gaW5kZXggMWRhMDRmM2UwZmIzLi5iNzA1N2Q2OGFk NzggMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXlfcG93ZXIuaAo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gPiA+IEBAIC0zMTEsOCArMzExLDEw IEBAIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2FzeW5jKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwKPiA+ID4gPiA+ICAJZm9yICgod2YpID0gaW50ZWxfZGlzcGxheV9w b3dlcl9nZXQoKGk5MTUpLCAoZG9tYWluKSk7Cj4gPiA+ID4gPiAod2YpOyBcCj4gPiA+ID4gPiAg CSAgICAgaW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoKGk5MTUpLCAoZG9tYWluKSwKPiA+ ID4gPiA+ICh3ZikpLAo+ID4gPiA+ID4gKHdmKSA9IDApCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAr aW50IGludGVsX2RidWZfbWF4X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwo+ID4gPiA+ID4gIHZvaWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCQkJICAgIHU4IHJlcV9zbGljZXMpOwo+ ID4gPiA+ID4gK3ZvaWQgaWNsX3Byb2dyYW1fZGJ1Zl9zbGljZXMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUKPiA+ID4gPiA+ICpkZXZfcHJpdik7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgdm9pZCBj aHZfcGh5X3Bvd2VyZ2F0ZV9sYW5lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ ID4gPiA+ICAJCQkgICAgIGJvb2wgb3ZlcnJpZGUsIHVuc2lnbmVkIGludCBtYXNrKTsKPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gPiA+ID4g PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+ID4gPiA+IGluZGV4IDgyZTRl NmJmMDhjMy4uOTY3NDFlNjg2MzNhIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYwo+ID4gPiA+ID4gQEAgLTUxLDYgKzUxLDcgQEAKPiA+ID4gPiA+ICAjaW5jbHVk ZSAiZGlzcGxheS9pbnRlbF9idy5oIgo+ID4gPiA+ID4gICNpbmNsdWRlICJkaXNwbGF5L2ludGVs X2NkY2xrLmgiCj4gPiA+ID4gPiAgI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBl cy5oIgo+ID4gPiA+ID4gKyNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuaCIK PiA+ID4gPiA+ICAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kcC5oIgo+ID4gPiA+ID4gICNpbmNs dWRlICJkaXNwbGF5L2ludGVsX2ZiZGV2LmgiCj4gPiA+ID4gPiAgI2luY2x1ZGUgImRpc3BsYXkv aW50ZWxfaG90cGx1Zy5oIgo+ID4gPiA+ID4gQEAgLTI1ODgsNiArMjU4OSwxMCBAQCBzdGF0aWMg aW50IGludGVsX3J1bnRpbWVfcmVzdW1lKHN0cnVjdAo+ID4gPiA+ID4gZGV2aWNlICprZGV2KQo+ ID4gPiA+ID4gIAlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpCj4gPiA+ID4gPiAgCQlyZXQgPSB2bHZfcmVzdW1lX3ByZXBhcmUoZGV2X3ByaXYs IHRydWUpOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gKwkvKiBXZWlyZCBoYWNrIHRvIGZpeCBJQ0wg aGFyZHdhcmUgYnVnLCBhcyBpdCByZXNldHMKPiA+ID4gPiA+IERCVUYgc2xpY2VzCj4gPiA+ID4g PiByZWcgKi8KPiA+ID4gPiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPT0gMTEpCj4gPiA+ ID4gPiArCQlpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiAgCWludGVsX3VuY29yZV9ydW50aW1lX3Jlc3VtZSgmZGV2X3ByaXYtPnVuY29yZSk7 Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCWludGVsX3J1bnRpbWVfcG1fZW5hYmxlX2ludGVycnVw dHMoZGV2X3ByaXYpOwo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ ID4gPiA+ID4gaW5kZXggN2UwZjY3YmFiZTIwLi5hMzk2OTc3YzljMmQgMTAwNjQ0Cj4gPiA+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+ID4gPiBAQCAtODA0LDcgKzgwNCw3 IEBAIHN0YXRpYyBpbmxpbmUgYm9vbAo+ID4gPiA+ID4gc2tsX2RkYl9lbnRyeV9lcXVhbChjb25z dAo+ID4gPiA+ID4gc3RydWN0IHNrbF9kZGJfZW50cnkgKmUxLAo+ID4gPiA+ID4gIH0KPiA+ID4g PiA+ICAKPiA+ID4gPiA+ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKPiA+ID4gPiAKPiA+ ID4gPiBUaGlzIHN0cnVjdCBpcyBxdWl0ZSBwb2ludGxlc3MuIFNob3VsZCBiZSBraWxsZWQgb2Zm Lgo+ID4gPiAKPiA+ID4gTGVnYWN5IHN0dWZmLCBub3QgYWRkZWQgYnkgbWUuIFF1aXRlIGZpbmUg d2l0aCByZW1vdmluZyBpdCAtIAo+ID4gPiBidXQgc2hvdWxkIHdlIHJlYWxseSBkbyBhbGwgdGhp cyBhdCB0aGUgc2FtZSB0aW1lIGFuZCBpbiBzYW1lCj4gPiA+IHBhdGNoPyAKPiA+IAo+ID4gTm90 IHRoZSBzYW1lIHBhdGNoLiBCdXQgY2xlYW4gdXAgdGhlIGNvYndlYnMgZmlyc3QsIHRoZW4gYWRk IHRoZSBuZXcKPiA+IHN0dWZmLiBNdWNoIGVhc2llciB0aGF0IHdheSBhcm91bmQuCj4gCj4gVGhl cmUgaXMgYSBzaGl0IHRvbiBsb2FkIG9mIGNvYndlYnMgdG8gY2xlYW4uIFBlcnNvbmFsbHkgbXkg b3BpbmlvbiBpcwo+IHRoYXQgY3VycmVudCBkYnVmIGNvbnRyb2xsaW5nIGNvZGUgaXMgdG90YWwg Z2FyYmFnZSAtIHdoaWNoIGhhcyBsb3RzIG9mCj4gaGFyZGNvZGVkIHN0dWZmLiBHb29kIGx1Y2sg ZW5hYmxpbmcgb25seSBzZWNvbmQgZGJ1ZiBzbGljZSwgZ29vZCBsdWNrCj4gZGlzYWJsaW5nL2Vu YWJsaW5nIGRidWYgcHJvcGVybHkuLi4uCj4gV2hlcmUgeW91IHdlcmUsIHdoZW4gdGhpcyB3YXMg Y29tbWl0dGVkIHRoZW4/CgpMb29raW5nIGF0IHNvbWV0aGluZyBlbHNlIHVuZm9ydHVuYXRlbHku IEFsc28gaXQgaGFzIGp1c3Qga2VwdApiaXRyb3R0aW5nIHNpbmNlIGJlY2F1c2Ugbm8gb25lIGhh cyBjYXJlZC4KCj4gCj4gSWYgd2UgbmVlZCB0byBmaXggaXQgLSBmaW5lLiBCdXQgbWF5IGJlIHdl IHNob3VsZCBkbyBpdCBpbiBzdGFnZXM/Cj4gUG9pbnQgb2YgdGhpcyBwYXRjaCBpcyAiZW5hYmxl IHNlY29uZCBkYnVmIHNsaWNlIiwgbmV4dCBwYXRjaCAicmVtb3ZlIAo+IHVubmVlZGVkIHN0cnVj dHMiIGFuZCBzbyBvbi4gCj4gV2hpbGUgeW91IHdhbnQgbWUgdG8gc2h1ZmZsZSBldmVyeXRoaW5n IGF0IHRoZSBzYW1lIHRpbWUsIHdoaWNoIGlzIG5vdAo+IGdvb2QgaWRlYSwgZXNwZWNpYWxseSBj b25zaWRlcmluZyBjb21wbGV4aXR5IGFuZCBhbW91bnQgb2YgbGVnYWN5IHN0dWZmCj4gd2UgY3Vy cmVudGx5IGhhdmUuCgpCdWlsZGluZyBuZXcgc3R1ZmYgb24gdG9wIG9mIGEgZGVjb21wb3Npbmcg Z2FyYmFnZSBwaWxlIGlzIG5vdAphIGdvb2QgaWRlYTogYSkgaXQncyBoYXJkZXIgdGhhbiBidWls ZGluZyBvbiBjbGVhbiBmb3VuZGF0aW9uLApiKSBpdCdsbCBwcm9iYWJseSBmYWxsIG92ZXIgYW5k IGdldCBidXJpZWQgaW4gdGhlIG9sZCBnYXJiYWdlCmF0IHdoaWNoIHBvaW50IHlvdSdyZSBsaWtl bHkgZ29pbmcgdG8gYmUgcmlnaHQgYmFjayB3aGVyZSB5b3UKc3RhcnRlZC4KCj4gCj4gPiAKPiA+ ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAtCXU4IGVuYWJsZWRfc2xpY2VzOyAvKiBHRU4xMSBoYXMg Y29uZmlndXJhYmxlIDIgc2xpY2VzCj4gPiA+ID4gPiAqLwo+ID4gPiA+ID4gKwl1OCBlbmFibGVk X3NsaWNlczsgICAvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBlbmFibGVkCj4gPiA+ID4gPiBEQnVm Cj4gPiA+ID4gPiBzbGljZXMgKi8KPiA+ID4gPiA+ICB9Owo+ID4gPiA+ID4gIAo+ID4gPiA+ID4g IHN0cnVjdCBza2xfZGRiX3ZhbHVlcyB7Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wY2kuYwo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BjaS5jCj4gPiA+ID4gPiBpbmRleCAxYmI3MDFkMzJhNWQuLjhlODZhZjUwNTczMCAxMDA2 NDQKPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiA+ID4g PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiA+ID4gPiA+IEBAIC02 MTQsNyArNjE0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbwo+ID4g PiA+ID4gaW50ZWxfY2hlcnJ5dmlld19pbmZvID0gewo+ID4gPiA+ID4gIAkuaGFzX2d0X3VjID0g MSwgXAo+ID4gPiA+ID4gIAkuZGlzcGxheS5oYXNfaGRjcCA9IDEsIFwKPiA+ID4gPiA+ICAJLmRp c3BsYXkuaGFzX2lwYyA9IDEsIFwKPiA+ID4gPiA+IC0JLmRkYl9zaXplID0gODk2Cj4gPiA+ID4g PiArCS5kZGJfc2l6ZSA9IDg5NiwgXAo+ID4gPiA+ID4gKwkuc3VwcG9ydGVkX3NsaWNlcyA9IDEK PiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAjZGVmaW5lIFNLTF9QTEFURk9STSBcCj4gPiA+ID4gPiAg CUdFTjlfRkVBVFVSRVMsIFwKPiA+ID4gPiA+IEBAIC02NTAsNiArNjUxLDcgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbwo+ID4gPiA+ID4gaW50ZWxfc2t5bGFrZV9ndDRf aW5mbyA9IHsKPiA+ID4gPiA+ICAJR0VOKDkpLCBcCj4gPiA+ID4gPiAgCS5pc19scCA9IDEsIFwK PiA+ID4gPiA+ICAJLmRpc3BsYXkuaGFzX2hvdHBsdWcgPSAxLCBcCj4gPiA+ID4gPiArCS5zdXBw b3J0ZWRfc2xpY2VzID0gMSwgXAo+ID4gPiA+ID4gIAkuZW5naW5lX21hc2sgPSBCSVQoUkNTMCkg fCBCSVQoVkNTMCkgfCBCSVQoQkNTMCkgfAo+ID4gPiA+ID4gQklUKFZFQ1MwKSwKPiA+ID4gPiA+ IFwKPiA+ID4gPiA+ICAJLnBpcGVfbWFzayA9IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQikgfCBC SVQoUElQRV9DKSwgXAo+ID4gPiA+ID4gIAkuaGFzXzY0Yml0X3JlbG9jID0gMSwgXAo+ID4gPiA+ ID4gQEAgLTczNyw2ICs3MzksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9p bmZvCj4gPiA+ID4gPiBpbnRlbF9jb2ZmZWVsYWtlX2d0M19pbmZvID0gewo+ID4gPiA+ID4gIAlH RU45X0ZFQVRVUkVTLCBcCj4gPiA+ID4gPiAgCUdFTigxMCksIFwKPiA+ID4gPiA+ICAJLmRkYl9z aXplID0gMTAyNCwgXAo+ID4gPiA+ID4gKwkuc3VwcG9ydGVkX3NsaWNlcyA9IDEsIFwKPiA+ID4g PiA+ICAJLmRpc3BsYXkuaGFzX2RzYyA9IDEsIFwKPiA+ID4gPiA+ICAJLmhhc19jb2hlcmVudF9n Z3R0ID0gZmFsc2UsIFwKPiA+ID4gPiA+ICAJR0xLX0NPTE9SUwo+ID4gPiA+ID4gQEAgLTc3Myw2 ICs3NzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvCj4gPiA+ID4g PiBpbnRlbF9jYW5ub25sYWtlX2luZm8gPSB7Cj4gPiA+ID4gPiAgCX0sIFwKPiA+ID4gPiA+ICAJ R0VOKDExKSwgXAo+ID4gPiA+ID4gIAkuZGRiX3NpemUgPSAyMDQ4LCBcCj4gPiA+ID4gPiArCS5z dXBwb3J0ZWRfc2xpY2VzID0gMiwgXAo+ID4gPiA+ID4gIAkuaGFzX2xvZ2ljYWxfcmluZ19lbHNx ID0gMSwgXAo+ID4gPiA+ID4gIAkuY29sb3IgPSB7IC5kZWdhbW1hX2x1dF9zaXplID0gMzMsIC5n YW1tYV9sdXRfc2l6ZSA9Cj4gPiA+ID4gPiAyNjIxNDUgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gPiA+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiA+ID4gaW5kZXggYTYwN2VhNTIw ODI5Li5mYmE1NzMxMDYzZDggMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCj4gPiA+ID4gPiBAQCAtNzczNCw5ICs3NzM0LDExIEBAIGVudW0gewo+ID4gPiA+ID4g ICNkZWZpbmUgRElTUF9BUkJfQ1RMMglfTU1JTygweDQ1MDA0KQo+ID4gPiA+ID4gICNkZWZpbmUg IERJU1BfREFUQV9QQVJUSVRJT05fNV82CSgxIDw8IDYpCj4gPiA+ID4gPiAgI2RlZmluZSAgRElT UF9JUENfRU5BQkxFCQkoMSA8PCAzKQo+ID4gPiA+ID4gLSNkZWZpbmUgREJVRl9DVEwJX01NSU8o MHg0NTAwOCkKPiA+ID4gPiA+IC0jZGVmaW5lIERCVUZfQ1RMX1MxCV9NTUlPKDB4NDUwMDgpCj4g PiA+ID4gPiAtI2RlZmluZSBEQlVGX0NUTF9TMglfTU1JTygweDQ0RkU4KQo+ID4gPiA+ID4gKyNk ZWZpbmUgREJVRl9TMV9CSVQJCQlCSVQoMCkKPiA+ID4gPiA+ICsjZGVmaW5lIERCVUZfUzJfQklU CQkJQklUKDEpCj4gPiA+ID4gCj4gPiA+ID4gVGhlc2UgYXJlIG5vdCBiaXRzIGluc2lkZSBEQlVG X0NUTCBzbyB0aGV5IHNob3VsZCBub3QgYmUgaGVyZS4KPiA+ID4gPiBJJ2QganVzdCBudWtlIHRo ZW0gZW50aXJlbHkuIElmIHlvdSB0aGluayB3ZSBuZWVkIG1vcmUgdGhhbiBhbgo+ID4gPiA+IGlu dCB0byByZWZlciB0byBhIHNsaWNlIHRoZW4gSU1PIHNvbWV0aGluZyBzaW1wbGUgbGlrZQo+ID4g PiA+IAo+ID4gPiA+IGVudW0gZGJ1Zl9zbGljZSB7Cj4gPiA+ID4gCURCVUZfUzEsCj4gPiA+ID4g CURCVUZfUzIsCj4gPiA+ID4gfTsKPiA+ID4gPiAKPiA+ID4gPiB3b3VsZCBtYXRjaCB0aGUgZ2Vu ZXJhbCBhcHBvcmFjaCB3ZSB1c2UgZm9yIG90aGVyIHRoaW5ncyBtdWNoCj4gPiA+ID4gYmV0dGVy Cj4gPiA+ID4gcmF0aGVyIHRoYW4gZGVmaW5pbmcgc29tZSBzaGlmdGVkIHZhbHVlcy4KPiA+ID4g Cj4gPiA+IFdlIG5lZWQgdG8gY29tYmluZSBzbGljZXMgLSBzbyBiaXRtYXNrIGlzIHF1aXRlIHN1 aXRhYmxlIGZvciB0aGF0LCAKPiA+ID4gSSBjYW4gb2YgY291cnNlIHVzZSB0aGlzIGVudW0sIGJ1 dCB0aGVuIEknbGwgaGF2ZSB0byByZS1lbmNvZGUgaXQgCj4gPiA+IHRvIGJpdG1hc2sgYW55d2F5 cy4KPiA+IAo+ID4gV2hpY2ggaXMgcHJldHR5IG11Y2ggaG93IGV2ZXJ5dGhpbmcgZWxzZSB3b3Jr cyBpbiB0aGUgZHJpdmVyLgo+IAo+IEFub3RoZXIgcGllY2Ugb2YgaW5jcmVkaWJseSBpbXBvcnRh bnQgdGhpbmcgdG8gYXJndWUuLgoKSXQgaXMuIExvdCdzIG9mIGNyYXAgaW4gdGhlIGRyaXZlciBp cyBzaW1wbHkgY2F1c2VkIGJ5IHBlb3BsZSBub3QKZm9sbG93aW5nIGVzdGFibGlzaGVkIHN0eWxl IGFuZCBjb21pbmcgdXAgd2l0aCBzb21ldGhpbmcgZGlmZmVyZW50Li4KV2hpY2ggbWVhbnMgdGhl cmUgaXMgYW4gZXh0cmEgY29zdCBmb3IgZXZlcnlvbmUgZWxzZSB3aGVuIHJlYWRpbmcgdGhlCmNv ZGUuIEFuZCB0aGF0IHByb2JhYmx5IG1lYW5zIG1vc3QgcGVvcGxlIGp1c3QgZG9uJ3QgYm90aGVy IHRvIHJlYWQgaXQuCgpHcmFudGVkLCBzb21lIG9mIHRoYXQgaXMgZHVlIHRvIHNwdXJ0cyBpbiBl dm9sdXRpb24gd2hlcmUgbWFqb3Igb3ZlcmhhdWxzCmNoYW5nZWQgdGhlIGFyY2hpdGVjdHVyZSBz byBzaWduaWZpY2FudGx5IHRoYXQgdGhlIG9sZCBlc3RhYmxpc2hlZApjb252ZW50aW9ucyBzaW1w bHkgbWFkZSBub2RlIHNlbnNlIGFueW1vcmUuIEF0b21pYyBiZWluZyB0aGUgbGFzdCBiaWcKb25l IGluIHRoYXQgcmVnYXJkLiBBbmQgd2UncmUgc3RpbGwgY2xlYW5pbmcgdXAgdGhlIHJlc3VsdGlu ZyBtZXNzLgoKPiAKPiA+IAo+ID4gPiAKPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiArI2RlZmlu ZSBEQlVGX0NUTAkJCV9NTUlPKDB4NDUwMDgpCj4gPiA+ID4gPiArI2RlZmluZSBEQlVGX0NUTF9T MQkJCV9NTUlPKDB4NDUwMDgpCj4gPiA+ID4gPiArI2RlZmluZSBEQlVGX0NUTF9TMgkJCV9NTUlP KDB4NDRGRTgpCj4gPiA+ID4gPiAgI2RlZmluZSAgREJVRl9QT1dFUl9SRVFVRVNUCQkoMSA8PCAz MSkKPiA+ID4gPiA+ICAjZGVmaW5lICBEQlVGX1BPV0VSX1NUQVRFCQkoMSA8PCAzMCkKPiA+ID4g PiA+ICAjZGVmaW5lIEdFTjdfTVNHX0NUTAlfTU1JTygweDQ1MDEwKQo+ID4gPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmgKPiA+ID4gPiA+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaAo+ID4gPiA+ID4gaW5k ZXggNGJkZjhhNmNmYjQ3Li5iYTM0ZTFhNWM1OTEgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5oCj4gPiA+ID4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5oCj4gPiA+ID4gPiBAQCAtMTgwLDYg KzE4MCw3IEBAIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7Cj4gPiA+ID4gPiAgCX0gZGlzcGxh eTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJdTE2IGRkYl9zaXplOyAvKiBpbiBibG9ja3MgKi8K PiA+ID4gPiA+ICsJdTggc3VwcG9ydGVkX3NsaWNlczsgLyogbnVtYmVyIG9mIERCdWYgc2xpY2Vz ICovCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCS8qIFJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSB2 YXJpb3VzIGRpc3BsYXkgcGlwZXMgYW5kCj4gPiA+ID4gPiB0cmFuc2NvZGVycyAqLwo+ID4gPiA+ ID4gIAlpbnQgcGlwZV9vZmZzZXRzW0k5MTVfTUFYX1RSQU5TQ09ERVJTXTsKPiA+ID4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiA+ID4gPiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+ID4gPiA+IGluZGV4IDJkMzg5ZTQzN2U4 Ny4uMWVhODFhYjkyNDI5IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwo+ID4gPiA+ID4gQEAgLTM1ODYsMjQgKzM1ODYsMjAgQEAgYm9vbCBpbGtfZGlzYWJsZV9s cF93bShzdHJ1Y3QKPiA+ID4gPiA+IGRybV9kZXZpY2UKPiA+ID4gPiA+ICpkZXYpCj4gPiA+ID4g PiAgCXJldHVybiBfaWxrX2Rpc2FibGVfbHBfd20oZGV2X3ByaXYsIFdNX0RJUlRZX0xQX0FMTCk7 Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gLXN0YXRpYyB1OCBpbnRlbF9lbmFi bGVkX2RidWZfc2xpY2VzX251bShzdHJ1Y3QKPiA+ID4gPiA+IGRybV9pOTE1X3ByaXZhdGUKPiA+ ID4gPiA+ICpkZXZfcHJpdikKPiA+ID4gPiA+ICtzdGF0aWMgdTggaW50ZWxfZW5hYmxlZF9kYnVm X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ID4gPiA+ID4gKmRldl9wcml2KQo+ID4g PiA+ID4gIHsKPiA+ID4gPiA+IC0JdTggZW5hYmxlZF9zbGljZXM7Cj4gPiA+ID4gPiAtCj4gPiA+ ID4gPiAtCS8qIFNsaWNlIDEgd2lsbCBhbHdheXMgYmUgZW5hYmxlZCAqLwo+ID4gPiA+ID4gLQll bmFibGVkX3NsaWNlcyA9IDE7Cj4gPiA+ID4gPiArCXU4IGVuYWJsZWRfc2xpY2VzID0gMDsKPiA+ ID4gPiA+ICAKPiA+ID4gPiA+ICAJLyogR2VuIHByaW9yIHRvIEdFTjExIGhhdmUgb25seSBvbmUg REJ1ZiBzbGljZSAqLwo+ID4gPiA+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ ID4gPiA+ID4gLQkJcmV0dXJuIGVuYWJsZWRfc2xpY2VzOwo+ID4gPiA+ID4gKwkJcmV0dXJuIERC VUZfUzFfQklUOwo+ID4gPiA+IAo+ID4gPiA+IEknZCBudWtlIHRoaXMgc3BlY2lhbCBjYXNlIGVu dGlyZWx5IGFuZCBqdXN0IHJlYWQgZXZlcnl0aGluZyBmcm9tCj4gPiA+ID4gdGhlCj4gPiA+ID4g aHcuIEFzc3VtaW5nIHdlIG5lZWQgcmVhZG91dCBzb21ld2hlcmUuCj4gPiA+IAo+ID4gPiBXZSBo YXZlIGl0IHRoYXQgd2F5IGhhcmRjb2RlZCByaWdodCBub3cgaW4gZHJtLXRpcC4gSSB0aGluayB0 aGlzIGlzCj4gPiA+IGEKPiA+ID4gc3ViamVjdCB0byBvdGhlciBwYXRjaCwgYnV0IG5vdCB0aGlz IGNoYW5nZS4gQXMgSSB1bmRlcnN0YW5kIHdlCj4gPiA+IG5lZWQgCj4gPiA+IHRvIGZpcnN0IGZp Z3VyZSBvdXQgaG93IHRvIGRvIGl0IHByb3Blcmx5LiAKPiA+ID4gVGhpcyBwYXRjaCBhbnl3YXkg bWFrZXMgaXQgYmV0dGVyIGJ5IGF0IGxlYXN0IHJlbW92aW5nIGhhcmRjb2RlZAo+ID4gPiByZWxh dGlvbiBiZXR3ZWVuIG51bWJlciBvZiBzbGljZXMgYW5kIHdoaWNoIHNsaWNlcyBhcmUgZW5hYmxl ZC4KPiA+ID4gV2l0aCBjdXJyZW50IGNvZGUgdGhlcmUgaXMgbm8gd2F5IGZvciBleGFtcGxlIHRv IGVuYWJsZSBzZWNvbmQgREJ1Zgo+ID4gPiBzbGljZSBvbmx5LCB3aGljaCBpcyByZXF1aXJlZCBi eSBCU3BlYy4KPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCS8qCj4gPiA+ ID4gPiAtCSAqIEZJWE1FOiBmb3Igbm93IHdlJ2xsIG9ubHkgZXZlciB1c2UgMSBzbGljZTsgcHJl dGVuZAo+ID4gPiA+ID4gdGhhdCB3ZQo+ID4gPiA+ID4gaGF2ZQo+ID4gPiA+ID4gLQkgKiBvbmx5 IHRoYXQgMSBzbGljZSBlbmFibGVkIHVudGlsIHdlIGhhdmUgYSBwcm9wZXIgd2F5Cj4gPiA+ID4g PiBmb3Igb24tCj4gPiA+ID4gPiBkZW1hbmQKPiA+ID4gPiA+IC0JICogdG9nZ2xpbmcgb2YgdGhl IHNlY29uZCBzbGljZS4KPiA+ID4gPiA+IC0JICovCj4gPiA+ID4gPiAtCWlmICgwICYmIEk5MTVf UkVBRChEQlVGX0NUTF9TMikgJiBEQlVGX1BPV0VSX1NUQVRFKQo+ID4gPiA+ID4gLQkJZW5hYmxl ZF9zbGljZXMrKzsKPiA+ID4gPiA+ICsJLyogQ2hlY2sgaWYgc2Vjb25kIERCdWYgc2xpY2UgaXMg ZW5hYmxlZCAqLwo+ID4gPiA+ID4gKwlpZiAoSTkxNV9SRUFEKERCVUZfQ1RMX1MxKSAmIERCVUZf UE9XRVJfU1RBVEUpCj4gPiA+ID4gPiArCQllbmFibGVkX3NsaWNlcyB8PSBEQlVGX1MxX0JJVDsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKEk5MTVfUkVBRChEQlVGX0NUTF9TMikgJiBEQlVG X1BPV0VSX1NUQVRFKQo+ID4gPiA+ID4gKwkJZW5hYmxlZF9zbGljZXMgfD0gREJVRl9TMl9CSVQ7 Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCXJldHVybiBlbmFibGVkX3NsaWNlczsKPiA+ID4gPiA+ ICB9Cj4gPiA+ID4gPiBAQCAtMzgxMiwzNiArMzgwOCwzOCBAQCBzdGF0aWMgdTE2IGludGVsX2dl dF9kZGJfc2l6ZShzdHJ1Y3QKPiA+ID4gPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ID4gPiA+ID4gIAkJCSAgICAgIGNvbnN0IGludCBudW1fYWN0aXZlLAo+ID4gPiA+ID4gIAkJCSAg ICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYikKPiA+ID4gPiA+ICB7Cj4gPiA+ID4g PiAtCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlOwo+ID4gPiA+ ID4gLQl1NjQgdG90YWxfZGF0YV9idzsKPiA+ID4gPiA+ICAJdTE2IGRkYl9zaXplID0gSU5URUxf SU5GTyhkZXZfcHJpdiktPmRkYl9zaXplOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gIAlXQVJOX09O KGRkYl9zaXplID09IDApOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA8IDExKQo+ID4gPiA+ID4gIAkJcmV0dXJuIGRkYl9zaXplIC0gNDsgLyogNCBibG9j a3MgZm9yIGJ5cGFzcwo+ID4gPiA+ID4gcGF0aAo+ID4gPiA+ID4gYWxsb2NhdGlvbiAqLwo+ID4g PiA+ID4gIAo+ID4gPiA+ID4gLQlhZGp1c3RlZF9tb2RlID0gJmNydGNfc3RhdGUtPmh3LmFkanVz dGVkX21vZGU7Cj4gPiA+ID4gPiAtCXRvdGFsX2RhdGFfYncgPSB0b3RhbF9kYXRhX3JhdGUgKgo+ ID4gPiA+ID4gZHJtX21vZGVfdnJlZnJlc2goYWRqdXN0ZWRfbW9kZSk7Cj4gPiA+ID4gPiArCXJl dHVybiBkZGJfc2l6ZTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCS8qCj4g PiA+ID4gPiAtCSAqIDEyR0IvcyBpcyBtYXhpbXVtIEJXIHN1cHBvcnRlZCBieSBzaW5nbGUgREJ1 ZiBzbGljZS4KPiA+ID4gPiA+IC0JICoKPiA+ID4gPiA+IC0JICogRklYTUUgZGJ1ZiBzbGljZSBj b2RlIGlzIGJyb2tlbjoKPiA+ID4gPiA+IC0JICogLSBtdXN0IHdhaXQgZm9yIHBsYW5lcyB0byBz dG9wIHVzaW5nIHRoZSBzbGljZQo+ID4gPiA+ID4gYmVmb3JlCj4gPiA+ID4gPiBwb3dlcmluZyBp dCBvZmYKPiA+ID4gPiA+IC0JICogLSBwbGFuZSBzdHJhZGRsaW5nIGJvdGggc2xpY2VzIGlzIGls bGVnYWwgaW4gbXVsdGktCj4gPiA+ID4gPiBwaXBlCj4gPiA+ID4gPiBzY2VuYXJpb3MKPiA+ID4g PiA+IC0JICogLSBzaG91bGQgdmFsaWRhdGUgd2Ugc3RheSB3aXRoaW4gdGhlIGh3IGJhbmR3aWR0 aAo+ID4gPiA+ID4gbGltaXRzCj4gPiA+ID4gPiAtCSAqLwo+ID4gPiA+ID4gLQlpZiAoMCAmJiAo bnVtX2FjdGl2ZSA+IDEgfHwgdG90YWxfZGF0YV9idyA+PSBHQnBzKDEyKSkpCj4gPiA+ID4gPiB7 Cj4gPiA+ID4gPiAtCQlkZGItPmVuYWJsZWRfc2xpY2VzID0gMjsKPiA+ID4gPiA+IC0JfSBlbHNl IHsKPiA+ID4gPiA+IC0JCWRkYi0+ZW5hYmxlZF9zbGljZXMgPSAxOwo+ID4gPiA+ID4gLQkJZGRi X3NpemUgLz0gMjsKPiA+ID4gPiA+IC0JfQo+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiArICogQ2Fs Y3VsYXRlIGluaXRpYWwgREJ1ZiBzbGljZSBvZmZzZXQsIGJhc2VkIG9uIHNsaWNlIHNpemUKPiA+ ID4gPiA+ICsgKiBhbmQgbWFzayhpLmUgaWYgc2xpY2Ugc2l6ZSBpcyAxMDI0IGFuZCBzZWNvbmQg c2xpY2UgaXMKPiA+ID4gPiA+IGVuYWJsZWQKPiA+ID4gPiA+ICsgKiBvZmZzZXQgd291bGQgYmUg MTAyNCkKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdGF0aWMgdTMyIHNrbF9nZXRfZmlyc3Rf ZGJ1Zl9zbGljZV9vZmZzZXQodTMyCj4gPiA+ID4gPiBkYnVmX3NsaWNlX21hc2ssCj4gPiA+ID4g PiArCQkJCQkgICB1MzIgc2xpY2Vfc2l6ZSwgdTMyCj4gPiA+ID4gPiBkZGJfc2l6ZSkKPiA+ID4g PiA+ICt7Cj4gPiA+ID4gPiArCXUzMiBvZmZzZXQgPSAwOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4g LQlyZXR1cm4gZGRiX3NpemU7Cj4gPiA+ID4gPiArCWlmICghZGJ1Zl9zbGljZV9tYXNrKQo+ID4g PiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCW9mZnNldCA9IChmZnMo ZGJ1Zl9zbGljZV9tYXNrKSAtIDEpICogc2xpY2Vfc2l6ZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJV0FSTl9PTihvZmZzZXQgPj0gZGRiX3NpemUpOwo+ID4gPiA+ID4gKwlyZXR1cm4gb2Zmc2V0 Owo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICtzdGF0aWMgdTMyIGk5MTVfZ2V0 X2FsbG93ZWRfZGJ1Zl9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2 X3ByaXYsCj4gPiA+ID4gPiArCQkJCSAgICAgIGludCBwaXBlLCB1MzIKPiA+ID4gPiA+IGFjdGl2 ZV9waXBlcywKPiA+ID4gPiA+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0Cj4gPiA+ID4gPiBpbnRl bF9jcnRjX3N0YXRlCj4gPiA+ID4gPiAqY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiAgc3RhdGljIHZvaWQKPiA+ID4gPiA+ICBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGlt aXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYsCj4gPiA+ID4g PiAgCQkJCSAgIGNvbnN0IHN0cnVjdAo+ID4gPiA+ID4gaW50ZWxfY3J0Y19zdGF0ZQo+ID4gPiA+ ID4gKmNydGNfc3RhdGUsCj4gPiA+ID4gPiBAQCAtMzg1Nyw3ICszODU1LDE0IEBACj4gPiA+ID4g PiBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdAo+ID4gPiA+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCXUzMiBwaXBlX3dpZHRoID0gMCwg dG90YWxfd2lkdGggPSAwLCB3aWR0aF9iZWZvcmVfcGlwZQo+ID4gPiA+ID4gPSAwOwo+ID4gPiA+ ID4gIAllbnVtIHBpcGUgZm9yX3BpcGUgPSB0b19pbnRlbF9jcnRjKGZvcl9jcnRjKS0+cGlwZTsK PiA+ID4gPiA+ICAJdTE2IGRkYl9zaXplOwo+ID4gPiA+ID4gKwl1MzIgZGRiX3JhbmdlX3NpemU7 Cj4gPiA+ID4gPiAgCXUzMiBpOwo+ID4gPiA+ID4gKwl1MzIgZGJ1Zl9zbGljZV9tYXNrOwo+ID4g PiA+ID4gKwl1MzIgYWN0aXZlX3BpcGVzOwo+ID4gPiA+ID4gKwl1MzIgb2Zmc2V0Owo+ID4gPiA+ ID4gKwl1MzIgc2xpY2Vfc2l6ZTsKPiA+ID4gPiA+ICsJdTMyIHRvdGFsX3NsaWNlX21hc2s7Cj4g PiA+ID4gPiArCXUzMiBzdGFydCwgZW5kOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlpZiAoV0FS Tl9PTighc3RhdGUpIHx8ICFjcnRjX3N0YXRlLT5ody5hY3RpdmUpIHsKPiA+ID4gPiA+ICAJCWFs bG9jLT5zdGFydCA9IDA7Cj4gPiA+ID4gPiBAQCAtMzg2NiwxNCArMzg3MSwyMyBAQAo+ID4gPiA+ ID4gc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhzdHJ1Y3QKPiA+ID4gPiA+IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiA+ID4gIAkJcmV0dXJuOwo+ID4gPiA+ID4g IAl9Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWlmIChpbnRlbF9zdGF0ZS0+YWN0aXZlX3BpcGVf Y2hhbmdlcykKPiA+ID4gPiA+ICsJaWYgKGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2Vz KSB7Cj4gPiA+ID4gPiAgCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQ4KGludGVsX3N0YXRlLQo+ID4g PiA+ID4gPmFjdGl2ZV9waXBlcyk7Cj4gPiA+ID4gPiAtCWVsc2UKPiA+ID4gPiA+ICsJCWFjdGl2 ZV9waXBlcyA9IGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZXM7Cj4gPiA+ID4gPiArCX0gZWxzZSB7 Cj4gPiA+ID4gPiAgCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQ4KGRldl9wcml2LT5hY3RpdmVfcGlw ZXMpOwo+ID4gPiA+ID4gKwkJYWN0aXZlX3BpcGVzID0gZGV2X3ByaXYtPmFjdGl2ZV9waXBlczsK PiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlkZGJfc2l6ZSA9IGludGVsX2dl dF9kZGJfc2l6ZShkZXZfcHJpdiwgY3J0Y19zdGF0ZSwKPiA+ID4gPiA+IHRvdGFsX2RhdGFfcmF0 ZSwKPiA+ID4gPiA+ICAJCQkJICAgICAgKm51bV9hY3RpdmUsIGRkYik7Cj4gPiA+ID4gPiAgCj4g PiA+ID4gPiArCURSTV9ERUJVR19LTVMoIkdvdCB0b3RhbCBkZGIgc2l6ZSAlZFxuIiwgZGRiX3Np emUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlzbGljZV9zaXplID0gZGRiX3NpemUgLyBJTlRF TF9JTkZPKGRldl9wcml2KS0KPiA+ID4gPiA+ID5zdXBwb3J0ZWRfc2xpY2VzOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJHb3QgREJ1ZiBzbGljZSBzaXplICVkXG4iLCBz bGljZV9zaXplKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICAJLyoKPiA+ID4gPiA+ICAJICogSWYg dGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydzIG9yCj4gPiA+ID4gPiB0 aGVyZSBpcyBubwo+ID4gPiA+ID4gIAkgKiBtb2Rlc2V0IHJlcXVlc3QsIHRoZW4gdGhlcmUncyBu byBuZWVkIHRvCj4gPiA+ID4gPiByZWNhbGN1bGF0ZTsKPiA+ID4gPiA+IEBAIC0zODkxLDIwICsz OTA1LDcwIEBACj4gPiA+ID4gPiBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0 cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCQly ZXR1cm47Cj4gPiA+ID4gPiAgCX0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ ICsJICogR2V0IGFsbG93ZWQgREJ1ZiBzbGljZXMgZm9yIGNvcnJlc3BvbmRlbnQgcGlwZSBhbmQK PiA+ID4gPiA+IHBsYXRmb3JtLgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJZGJ1Zl9zbGlj ZV9tYXNrID0gaTkxNV9nZXRfYWxsb3dlZF9kYnVmX21hc2soZGV2X3ByaXYsCj4gPiA+ID4gPiBm b3JfcGlwZSwKPiA+ID4gPiA+ICsJCQkJCQkgICAgIGFjdGl2ZV9waXAKPiA+ID4gPiA+IGVzLAo+ ID4gPiA+ID4gY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gCj4gPiA+ID4gUXVpdGUgYSBmZXcgcmVkdW5k YW50IGFyZ3VtZW50cy4gVGhlIGZ1bmN0aW9uIG5hbWUgbG9va3MgYWxpZW4uCj4gPiA+ID4gCj4g PiA+ID4gc2tsX2NydGNfcG9zc2libGVfZGJ1Zl9zbGljZXMoKSBvciBzb21ldGhpbmcgcGVyaGFw cz8KPiA+ID4gPiAKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJRFJNX0RFQlVHX0tNUygiREJ1ZiBz bGljZSBtYXNrICV4IHBpcGUgJWQgYWN0aXZlIHBpcGVzCj4gPiA+ID4gPiAleFxuIiwKPiA+ID4g PiA+ICsJCSAgICAgIGRidWZfc2xpY2VfbWFzaywKPiA+ID4gPiA+ICsJCSAgICAgIGZvcl9waXBl LCBhY3RpdmVfcGlwZXMpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkg KiBGaWd1cmUgb3V0IGF0IHdoaWNoIERCdWYgc2xpY2Ugd2Ugc3RhcnQsIGkuZSBpZiB3ZQo+ID4g PiA+ID4gc3RhcnQgYXQKPiA+ID4gPiA+IERidWYgUzIKPiA+ID4gPiA+ICsJICogYW5kIHNsaWNl IHNpemUgaXMgMTAyNCwgdGhlIG9mZnNldCB3b3VsZCBiZSAxMDI0Cj4gPiA+ID4gPiArCSAqLwo+ ID4gPiA+ID4gKwlvZmZzZXQgPQo+ID4gPiA+ID4gc2tsX2dldF9maXJzdF9kYnVmX3NsaWNlX29m ZnNldChkYnVmX3NsaWNlX21hc2ssCj4gPiA+ID4gPiArCQkJCQkJIHNsaWNlX3NpemUsCj4gPiA+ ID4gPiBkZGJfc2l6ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAq IEZpZ3VyZSBvdXQgdG90YWwgc2l6ZSBvZiBhbGxvd2VkIERCdWYgc2xpY2VzLCB3aGljaAo+ID4g PiA+ID4gaXMKPiA+ID4gPiA+IGJhc2ljYWxseQo+ID4gPiA+ID4gKwkgKiBhIG51bWJlciBvZiBh bGxvd2VkIHNsaWNlcyBmb3IgdGhhdCBwaXBlIG11bHRpcGxpZWQKPiA+ID4gPiA+IGJ5IHNsaWNl Cj4gPiA+ID4gPiBzaXplLgo+ID4gPiA+ID4gKwkgKiBJbnNpZGUgb2YgdGhpcwo+ID4gPiA+ID4g KwkgKiByYW5nZSBkZGIgZW50cmllcyBhcmUgc3RpbGwgYWxsb2NhdGVkIGluIHByb3BvcnRpb24K PiA+ID4gPiA+IHRvCj4gPiA+ID4gPiBkaXNwbGF5IHdpZHRoLgo+ID4gPiA+ID4gKwkgKi8KPiA+ ID4gPiA+ICsJZGRiX3JhbmdlX3NpemUgPSBod2VpZ2h0OChkYnVmX3NsaWNlX21hc2spICoKPiA+ ID4gPiA+IHNsaWNlX3NpemU7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAgCS8qCj4gPiA+ID4gPiAg CSAqIFdhdGVybWFyay9kZGIgcmVxdWlyZW1lbnQgaGlnaGx5IGRlcGVuZHMgdXBvbiB3aWR0aAo+ ID4gPiA+ID4gb2YgdGhlCj4gPiA+ID4gPiAgCSAqIGZyYW1lYnVmZmVyLCBTbyBpbnN0ZWFkIG9m IGFsbG9jYXRpbmcgRERCIGVxdWFsbHkKPiA+ID4gPiA+IGFtb25nCj4gPiA+ID4gPiBwaXBlcwo+ ID4gPiA+ID4gIAkgKiBkaXN0cmlidXRlIEREQiBiYXNlZCBvbiByZXNvbHV0aW9uL3dpZHRoIG9m IHRoZQo+ID4gPiA+ID4gZGlzcGxheS4KPiA+ID4gPiA+ICAJICovCj4gPiA+ID4gPiArCXRvdGFs X3NsaWNlX21hc2sgPSBkYnVmX3NsaWNlX21hc2s7Cj4gPiA+ID4gCj4gPiA+ID4gSXNuJ3QgdGhp cyBhbHJlYWR5IHRha2VuIGNhcmUgYnkgdGhlIGxvb3AgYmVsb3c/Cj4gPiA+ID4gCj4gPiA+ID4g PiAgCWZvcl9lYWNoX25ld19pbnRlbF9jcnRjX2luX3N0YXRlKGludGVsX3N0YXRlLCBjcnRjLAo+ ID4gPiA+ID4gY3J0Y19zdGF0ZSwKPiA+ID4gPiA+IGkpIHsKPiA+ID4gPiA+ICAJCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0KPiA+ID4gPiA+ICAJCQkmY3J0 Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKPiA+ID4gPiA+ICAJCWVudW0gcGlwZSBwaXBlID0g Y3J0Yy0+cGlwZTsKPiA+ID4gPiA+ICAJCWludCBoZGlzcGxheSwgdmRpc3BsYXk7Cj4gPiA+ID4g PiArCQl1MzIgcGlwZV9kYnVmX3NsaWNlX21hc2sgPSBcCj4gPiA+ID4gPiArCQkJaTkxNV9nZXRf YWxsb3dlZF9kYnVmX21hc2soZGV2X3ByaXYsCj4gPiA+ID4gPiArCQkJCQkJcGlwZSwKPiA+ID4g PiA+ICsJCQkJCQlhY3RpdmVfcGlwZXMsCj4gPiA+ID4gPiArCQkJCQkJY3J0Y19zdGF0ZSk7Cj4g PiA+ID4gPiAgCj4gPiA+ID4gPiAgCQlpZiAoIWNydGNfc3RhdGUtPmh3LmVuYWJsZSkKPiA+ID4g PiA+ICAJCQljb250aW51ZTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICsJCS8qCj4gPiA+ID4gPiAr CQkgKiBBY2NvcmRpbmcgdG8gQlNwZWMgcGlwZSBjYW4gc2hhcmUgb25lIGRidWYKPiA+ID4gPiA+ IHNsaWNlCj4gPiA+ID4gPiB3aXRoIGFub3RoZXIKPiA+ID4gPiA+ICsJCSAqIHBpcGVzIG9yIHBp cGUgY2FuIHVzZSBtdWx0aXBsZSBkYnVmcywgaW4KPiA+ID4gPiA+IGJvdGggY2FzZXMKPiA+ID4g PiA+IHdlCj4gPiA+ID4gPiArCQkgKiBhY2NvdW50IGZvciBvdGhlciBwaXBlcyBvbmx5IGlmIHRo ZXkgaGF2ZQo+ID4gPiA+ID4gZXhhY3RseQo+ID4gPiA+ID4gc2FtZSBtYXNrLgo+ID4gPiA+ID4g KwkJICogSG93ZXZlciB3ZSBuZWVkIHRvIGFjY291bnQgaG93IG1hbnkgc2xpY2VzCj4gPiA+ID4g PiB3ZSBzaG91bGQKPiA+ID4gPiA+IGVuYWJsZQo+ID4gPiA+ID4gKwkJICogaW4gdG90YWwuCj4g PiA+ID4gPiArCQkgKi8KPiA+ID4gPiA+ICsJCXRvdGFsX3NsaWNlX21hc2sgfD0gcGlwZV9kYnVm X3NsaWNlX21hc2s7Cj4gPiA+ID4gCj4gPiA+ID4gdG90YWxfc2xpY2VfbWFzayB3aWxsIG5vdyBh Y2NvdW50IG9ubHkgdGhlIGNydGNzIGluIHRoZSBzdGF0ZS4KPiA+ID4gPiBXaGF0Cj4gPiA+ID4g aGFwcGVucyB0byB0aGUgb3RoZXIgcGlwZXMnIHNsaWNlcz8KPiAKPiBTYW1lIGFzIGhhcHBlbnMg bm93IGJ0dy4gUmlnaHQgbm93IGl0IGFsc28gZG9lcyB0aGUgc2FtZSB0aGluZy4KClJpZ2h0IG5v dyBpdCBkb2VzIGFic29sdXRlbHkgbm90aGluZy4gSXQncyBhbGwgZGVhZCBjb2RlLgoKPiAKPiA+ ID4gCj4gPiA+IFllcyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgcGlwZXMvY3J0Y3Mg aGVyZSwgaG93ZXZlcgo+ID4gPiBmb3IgZ2V0dGluZyBjb3JyZWN0IGRidWYgc2xpY2UgbWFzayBt b3N0IGltcG9ydGFudCBpcyBhY3RpdmVfcGlwZXMuCj4gPiA+IEhvd2V2ZXIgeWVzLCBJIHdpbGwg Y2hhbmdlIHRoZSBsb29wIGZvciBpdCB0byBiZSBtb3JlIGNvcnJlY3QuCj4gPiA+IAo+ID4gPiA+ IAo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJLyoKPiA+ID4gPiA+ICsJCSAqIERvIG5vdCBhY2Nv dW50IHBpcGVzIHVzaW5nIG90aGVyIHNsaWNlIHNldHMKPiA+ID4gPiA+ICsJCSAqIGx1Y2tpbHkg YXMgb2YgY3VycmVudCBCU3BlYyBzbGljZSBzZXRzIGRvCj4gPiA+ID4gPiBub3QKPiA+ID4gPiA+ IHBhcnRpYWxseQo+ID4gPiA+ID4gKwkJICogaW50ZXJzZWN0KHBpcGVzIHNoYXJlIGVpdGhlciBz YW1lIG9uZSBzbGljZQo+ID4gPiA+ID4gb3Igc2FtZQo+ID4gPiA+ID4gc2xpY2Ugc2V0Cj4gPiA+ ID4gPiArCQkgKiBpLmUgbm8gcGFydGlhbCBpbnRlcnNlY3Rpb24pLCBzbyBpdCBpcwo+ID4gPiA+ ID4gZW5vdWdoIHRvCj4gPiA+ID4gPiBjaGVjayBmb3IKPiA+ID4gPiA+ICsJCSAqIGVxdWFsaXR5 IGZvciBub3cuCj4gPiA+ID4gPiArCQkgKi8KPiA+ID4gPiA+ICsJCWlmIChkYnVmX3NsaWNlX21h c2sgIT0gcGlwZV9kYnVmX3NsaWNlX21hc2spCj4gPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiAgCQlkcm1fbW9kZV9nZXRfaHZfdGltaW5nKGFkanVzdGVkX21vZGUs Cj4gPiA+ID4gPiAmaGRpc3BsYXksCj4gPiA+ID4gPiAmdmRpc3BsYXkpOwo+ID4gPiA+ID4gIAkJ dG90YWxfd2lkdGggKz0gaGRpc3BsYXk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiBAQCAtMzkxNCw4 ICszOTc4LDE5IEBACj4gPiA+ID4gPiBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRz KHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAg CQkJcGlwZV93aWR0aCA9IGhkaXNwbGF5Owo+ID4gPiA+ID4gIAl9Cj4gPiA+ID4gPiAgCj4gPiA+ ID4gPiAtCWFsbG9jLT5zdGFydCA9IGRkYl9zaXplICogd2lkdGhfYmVmb3JlX3BpcGUgLwo+ID4g PiA+ID4gdG90YWxfd2lkdGg7Cj4gPiA+ID4gPiAtCWFsbG9jLT5lbmQgPSBkZGJfc2l6ZSAqICh3 aWR0aF9iZWZvcmVfcGlwZSArCj4gPiA+ID4gPiBwaXBlX3dpZHRoKSAvCj4gPiA+ID4gPiB0b3Rh bF93aWR0aDsKPiA+ID4gPiA+ICsJZGRiLT5lbmFibGVkX3NsaWNlcyA9IHRvdGFsX3NsaWNlX21h c2s7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXN0YXJ0ID0gZGRiX3JhbmdlX3NpemUgKiB3aWR0 aF9iZWZvcmVfcGlwZSAvCj4gPiA+ID4gPiB0b3RhbF93aWR0aDsKPiA+ID4gPiA+ICsJZW5kID0g ZGRiX3JhbmdlX3NpemUgKiAod2lkdGhfYmVmb3JlX3BpcGUgKyBwaXBlX3dpZHRoKQo+ID4gPiA+ ID4gLwo+ID4gPiA+ID4gdG90YWxfd2lkdGg7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWFsbG9j LT5zdGFydCA9IG9mZnNldCArIHN0YXJ0Owo+ID4gPiA+ID4gKwlhbGxvYy0+ZW5kID0gb2Zmc2V0 ICsgZW5kOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJQaXBlICVkIGRk YiAlZC0lZFxuIiwgZm9yX3BpcGUsCj4gPiA+ID4gPiArCQkgICAgICBhbGxvYy0+c3RhcnQsIGFs bG9jLT5lbmQpOwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJFbmFibGVkIGRkYiBzbGljZXMg bWFzayAleCBudW0gc3VwcG9ydGVkCj4gPiA+ID4gPiAlZFxuIiwKPiA+ID4gPiA+ICsJCSAgICAg IGRkYi0+ZW5hYmxlZF9zbGljZXMsCj4gPiA+ID4gPiArCQkgICAgICBJTlRFTF9JTkZPKGRldl9w cml2KS0+c3VwcG9ydGVkX3NsaWNlcyk7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ ID4gIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfd21fcGFyYW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlCj4gPiA+ID4gPiAqY3J0Y19zdGF0ZSwKPiA+ID4gPiA+IEBAIC00MDM2LDcgKzQx MTEsOCBAQCB2b2lkIHNrbF9waXBlX2RkYl9nZXRfaHdfc3RhdGUoc3RydWN0Cj4gPiA+ID4gPiBp bnRlbF9jcnRjICpjcnRjLAo+ID4gPiA+ID4gIHZvaWQgc2tsX2RkYl9nZXRfaHdfc3RhdGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiA+ID4gIAkJCSAgc3RydWN0IHNr bF9kZGJfYWxsb2NhdGlvbiAqZGRiIC8qIG91dAo+ID4gPiA+ID4gKi8pCj4gPiA+ID4gPiAgewo+ ID4gPiA+ID4gLQlkZGItPmVuYWJsZWRfc2xpY2VzID0KPiA+ID4gPiA+IGludGVsX2VuYWJsZWRf ZGJ1Zl9zbGljZXNfbnVtKGRldl9wcml2KTsKPiA+ID4gPiA+ICsJZGRiLT5lbmFibGVkX3NsaWNl cyA9Cj4gPiA+ID4gPiBpbnRlbF9lbmFibGVkX2RidWZfc2xpY2VzKGRldl9wcml2KTsKPiA+ID4g PiA+ICsJRFJNX0RFQlVHX0tNUygiR290IGh3IGRidWYgc2xpY2VzIG1hc2sgJXhcbiIsIGRkYi0K PiA+ID4gPiA+ID4gZW5hYmxlZF9zbGljZXMpOwo+ID4gPiA+ID4gCj4gPiA+ID4gPiAgfQo+ID4g PiA+ID4gIAo+ID4gPiA+ID4gIC8qCj4gPiA+ID4gPiBAQCAtNDE2NCw2ICs0MjQwLDI0MSBAQCBz a2xfZ2V0X3RvdGFsX3JlbGF0aXZlX2RhdGFfcmF0ZShzdHJ1Y3QKPiA+ID4gPiA+IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiA+ID4gPiAgCXJldHVybiB0b3RhbF9kYXRhX3JhdGU7 Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gK3N0YXRpYyB1aW50X2ZpeGVkXzE2 XzE2X3QKPiA+ID4gPiA+ICtpY2xfcGlwZV9kb3duc2NhbGVfYW1vdW50KGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlCj4gPiA+ID4gPiAqY3J0Y19zdGF0ZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ ID4gPiArCXUzMiBzcmNfdywgc3JjX2gsIGRzdF93LCBkc3RfaDsKPiA+ID4gPiA+ICsJdWludF9m aXhlZF8xNl8xNl90IGZwX3dfcmF0aW8sIGZwX2hfcmF0aW87Cj4gPiA+ID4gPiArCXVpbnRfZml4 ZWRfMTZfMTZfdCBkb3duc2NhbGVfaCwgZG93bnNjYWxlX3c7Cj4gPiA+ID4gPiArCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0KPiA+ID4gPiA+ICZjcnRjX3N0 YXRlLQo+ID4gPiA+ID4gPiBody5hZGp1c3RlZF9tb2RlOwo+ID4gPiA+ID4gCj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCXNyY193ID0gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdzsKPiA+ID4gPiA+ICsJ c3JjX2ggPSBjcnRjX3N0YXRlLT5waXBlX3NyY19oOwo+ID4gPiA+ID4gKwlkc3RfdyA9IGFkanVz dGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Cj4gPiA+ID4gPiArCWRzdF9oID0gYWRqdXN0ZWRfbW9k ZS0+Y3J0Y192ZGlzcGxheTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZnBfd19yYXRpbyA9IGRp dl9maXhlZDE2KHNyY193LCBkc3Rfdyk7Cj4gPiA+ID4gPiArCWZwX2hfcmF0aW8gPSBkaXZfZml4 ZWQxNihzcmNfaCwgZHN0X2gpOwo+ID4gPiA+ID4gKwlkb3duc2NhbGVfdyA9IG1heF9maXhlZDE2 KGZwX3dfcmF0aW8sCj4gPiA+ID4gPiB1MzJfdG9fZml4ZWQxNigxKSk7Cj4gPiA+ID4gPiArCWRv d25zY2FsZV9oID0gbWF4X2ZpeGVkMTYoZnBfaF9yYXRpbywKPiA+ID4gPiA+IHUzMl90b19maXhl ZDE2KDEpKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIG11bF9maXhlZDE2KGRvd25z Y2FsZV93LCBkb3duc2NhbGVfaCk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g K3VpbnRfZml4ZWRfMTZfMTZfdAo+ID4gPiA+ID4gK2ljbF9nZXRfcGlwZV9yYXRpbyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4g PiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpkcm1fcGxhbmVfc3RhdGU7Cj4gPiA+ID4gPiArCXVpbnRfZml4ZWRfMTZf MTZfdCBwaXBlX2Rvd25zY2FsZSwgcGlwZV9yYXRpbzsKPiA+ID4gPiA+ICsJdWludF9maXhlZF8x Nl8xNl90IG1heF9kb3duc2NhbGUgPSB1MzJfdG9fZml4ZWQxNigxKTsKPiA+ID4gPiA+ICsJc3Ry dWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtCj4gPiA+ID4g PiA+dWFwaS5jcnRjKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKCFjcnRjX3N0YXRlLT51 YXBpLmVuYWJsZSkKPiA+ID4gPiA+ICsJCXJldHVybiBtYXhfZG93bnNjYWxlOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmVfc3RhdGUo cGxhbmUsCj4gPiA+ID4gPiBkcm1fcGxhbmVfc3RhdGUsICZjcnRjX3N0YXRlLT51YXBpKSB7Cj4g PiA+ID4gPiArCQl1aW50X2ZpeGVkXzE2XzE2X3QgcGxhbmVfZG93bnNjYWxlOwo+ID4gPiA+ID4g KwkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4gPiA+ID4g PiArCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUoZHJtX3BsYW5lX3N0YXRlKTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJCWlmICghaW50ZWxfd21fcGxhbmVfdmlzaWJsZShjcnRjX3N0YXRlLAo+ID4g PiA+ID4gcGxhbmVfc3RhdGUpKQo+ID4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gKwkJcGxhbmVfZG93bnNjYWxlID0KPiA+ID4gPiA+IHNrbF9wbGFuZV9kb3duc2Nh bGVfYW1vdW50KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJCURSTV9ERUJVR19LTVMoIlBsYW5lICVkIGRvd25zY2FsZSBhbW91bnQKPiA+ID4gPiA+ICVk LiVkXG4iLAo+ID4gPiA+ID4gKwkJCSAgICAgIHRvX2ludGVsX3BsYW5lKHBsYW5lKS0+aWQsCj4g PiA+ID4gPiArCQkJICAgICAgcGxhbmVfZG93bnNjYWxlLnZhbCA+PiAxNiwKPiA+ID4gPiA+ICsJ CQkgICAgICBwbGFuZV9kb3duc2NhbGUudmFsICYgMHhmZmZmKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJCW1heF9kb3duc2NhbGUgPSBtYXhfZml4ZWQxNihwbGFuZV9kb3duc2NhbGUsCj4gPiA+ ID4gPiBtYXhfZG93bnNjYWxlKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlwaXBlX2Rvd25zY2FsZSA9IGljbF9waXBlX2Rvd25zY2FsZV9hbW91bnQo Y3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCURSTV9ERUJVR19LTVMoIlBpcGUg JWQgZG93bnNjYWxlIGFtb3VudCAlZC4lZFxuIiwKPiA+ID4gPiA+ICsJCSAgICAgICBjcnRjLT5w aXBlLCBwaXBlX2Rvd25zY2FsZS52YWwgPj4gMTYsCj4gPiA+ID4gPiArCQkgICAgICAgcGlwZV9k b3duc2NhbGUudmFsICYgMHhmZmZmKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcGlwZV9kb3du c2NhbGUgPSBtdWxfZml4ZWQxNihwaXBlX2Rvd25zY2FsZSwKPiA+ID4gPiA+IG1heF9kb3duc2Nh bGUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkgKiBDb252ZXJ0IHJl c3VsdCB0byBwZXJjZW50YWdlOiBnZXQgdGhlIGFjdHVhbCByYXRpbwo+ID4gPiA+ID4gaW5zdGVh ZAo+ID4gPiA+ID4gb2YgcmF0ZSwKPiA+ID4gPiA+ICsJICogdGhlbiBtdWx0aXBseSBieSAxMDAg dG8gZ2V0IHBlcmNlbnRhZ2UuCj4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ID4gKwlwaXBlX3JhdGlv ID0gdTMyX3RvX2ZpeGVkMTYoMTAwICoKPiA+ID4gPiA+IGRpdl9yb3VuZF91cF91MzJfZml4ZWQx NigxLAo+ID4gPiA+ID4gcGlwZV9kb3duc2NhbGUpKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ RFJNX0RFQlVHX0tNUygiUGlwZSAlZCByYXRpbyAlZC4lZFxuIiwgY3J0Yy0+cGlwZSwKPiA+ID4g PiA+ICsJCSAgICAgIHBpcGVfcmF0aW8udmFsID4+IDE2LCBwaXBlX3JhdGlvLnZhbCAmCj4gPiA+ ID4gPiAweGZmZmYpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gcGlwZV9yYXRpbzsK PiA+ID4gPiA+ICt9Cj4gPiA+ID4gCj4gPiA+ID4gWXVjay4gSSBqdXN0IGtpbGxlZCB0aGVzZS4K PiA+ID4gCj4gPiA+IEkgc3RpbGwgbmVlZCBwaXBlX3JhdGlvIGZybyBJQ0wgYXMgeW91IGtub3cs IHRoaXMgaXMgZGljdGF0ZWQgYnkKPiA+ID4gQlNwZWMsCj4gPiA+IG5vdCBieSBtZS4KPiA+IAo+ ID4gVGhhdCBwYXJ0IG9mIHRoZSBzcGVjIGlzIHByZXR0eSBjcmF6eSBJTU8uIEkgdGhpbmsgd2Ug c2hvdWxkIGp1c3QKPiA+IGlnbm9yZQo+ID4gaXQgZm9yIG5vdy4gQWxzbyBub3RoaW5nIGluIHRo ZXJlIHNheXMgd2UgbXVzdCB1c2UgYm90aCBzbGljZXMgZm9yIGEKPiA+IHNpbmdsZSBwaXBlIHNv IGlnbm9yaW5nIGRvZXNuJ3QgZXZlbiB2aW9sYXRlIHRoZSBzcGVjIGluIGFueSB3YXkuCj4gCj4g U28geW91IGFyZSBpbnN0cnVjdGluZyBtZSBub3cgdG8gaWdub3JlIEJTcGVjIGFzICJ3ZSBhcmUg c21hcnRlciI/Cj4gSSBkb24ndCB0aGluayB0aGlzIGlzIHByb3Blcmx5IHRvIGRvIGl0IHRoaXMg d2F5LiBMZXRzIGZpcnN0IGNoYW5nZSB0aGUKPiBCU3BlYywgaWYgd2UgZG9uJ3QgbGlrZSBwaXBl IHJhdGlvIGhlcmUgYW5kIHRoZW4gZHJpdmVyLiBDdXJyZW50bHkgdGhpcwo+IGlzIHdyaXR0ZW4g dGhhdCB3YXkgYW5kIGlmIHdlIGFyZSBnb2luZyB0byBkbyBldmVyeXRoaW5nIG91ciBvd24gd2F5 Cj4gaWdub3Jpbmcgc3BlY3MsIHRoaXMgaXMgZ29pbmcgdG8gYmUgY2hhb3MuCgpMaWtlIEkgc2Fp IHlvdSBkb24ndCBoYXZlIHRvIHZpb2xhdGUgdGhlIHNwZWMgYXQgYWxsLiBKdXN0IGRvbid0IHVz ZQp0d28gc2xpY2VzIGZvciB0aGUgc2FtZSBwaXBlIGFuZCB5b3UgY2FuIGF2b2lkIHRoZSB3aG9s ZSBzdHJhbmdlIHBpcGUKcmF0aW8gbGltaXRhdGlvbi4gV2Ugc2hvdWxkIGZpbGUgYSBic3BlYyBp c3N1ZSB0byBnZXQgdGhhdCBjbGFyaWZpZWQKdGhvdWdoLgoKPiAKPiA+IAo+ID4gPiAKPiA+ID4g PiAKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IHsK PiA+ID4gPiA+ICsJdTMyIGRidWZfbWFza1tJOTE1X01BWF9QSVBFU107Cj4gPiA+ID4gPiArCXUz MiBhY3RpdmVfcGlwZXM7Cj4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0FfREJVRl9TTElDRVMoREJ1ZjEpICBcCj4gPiA+ID4g PiArCXsgeyBEQnVmMSwgMCwgMCwgMCB9LCBCSVQoUElQRV9BKSB9Cj4gPiA+ID4gPiArI2RlZmlu ZSBJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCdWYxKSAgXAo+ID4gPiA+ID4gKwl7IHsgMCwgREJ1 ZjEsIDAsIDAgfSwgQklUKFBJUEVfQikgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQ19E QlVGX1NMSUNFUyhEQnVmMSkgIFwKPiA+ID4gPiA+ICsJeyB7IDAsIDAsIERCdWYxLCAwIH0sIEJJ VChQSVBFX0MpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0RfREJVRl9TTElDRVMoREJ1 ZjEpICBcCj4gPiA+ID4gPiArCXsgeyAwLCAwLCAwLCBEQnVmMSB9LCBCSVQoUElQRV9EKSB9Cj4g PiA+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAg XAo+ID4gPiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCAwLCAwIH0sIEJJVChQSVBFX0EpIHwgQklU KFBJUEVfQikgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQkNfREJVRl9TTElDRVMoREJ1 ZjEsIERCdWYyKSAgIFwKPiA+ID4gPiA+ICsJeyB7IDAsIERCdWYxLCBEQnVmMiwgMCB9LCBCSVQo UElQRV9CKSB8IEJJVChQSVBFX0MpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0JEX0RC VUZfU0xJQ0VTKERCdWYxLCBEQnVmMikgICBcCj4gPiA+ID4gPiArCXsgeyAwLCBEQnVmMSwgMCwg REJ1ZjIgfSwgQklUKFBJUEVfQikgfCBCSVQoUElQRV9EKSB9Cj4gPiA+ID4gPiArI2RlZmluZSBJ Q0xfUElQRV9BQ19EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAgXAo+ID4gPiA+ID4gKwl7IHsg REJ1ZjEsIDAsIERCdWYyLCAwIH0sIEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQykgfQo+ID4gPiA+ ID4gKyNkZWZpbmUgSUNMX1BJUEVfQURfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyKSAgIFwKPiA+ ID4gPiA+ICsJeyB7IERCdWYxLCAwLCAwLCBEQnVmMiB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBF X0QpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0NEX0RCVUZfU0xJQ0VTKERCdWYxLCBE QnVmMikgICBcCj4gPiA+ID4gPiArCXsgeyAwLCAwLCBEQnVmMSwgREJ1ZjIgfSwgQklUKFBJUEVf QykgfCBCSVQoUElQRV9EKSB9Cj4gPiA+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkNfREJVRl9T TElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gPiA+ICsJeyB7IERCdWYxLCBEQnVm MiwgREJ1ZjMsIDAgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9CKQo+ID4gPiA+ID4gfAo+ID4g PiA+ID4gQklUKFBJUEVfQykgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQUNEX0RCVUZf U0xJQ0VTKERCdWYxLCBEQnVmMiwgREJ1ZjMpICBcCj4gPiA+ID4gPiArCXsgeyBEQnVmMSwgMCwg REJ1ZjIsIERCdWYzIH0sIEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQykKPiA+ID4gPiA+IHwKPiA+ ID4gPiA+IEJJVChQSVBFX0QpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0JDRF9EQlVG X1NMSUNFUyhEQnVmMSwgREJ1ZjIsIERCdWYzKSAgXAo+ID4gPiA+ID4gKwl7IHsgMCwgREJ1ZjEs IERCdWYyLCBEQnVmMyB9LCBCSVQoUElQRV9CKSB8IEJJVChQSVBFX0MpCj4gPiA+ID4gPiB8Cj4g PiA+ID4gPiBCSVQoUElQRV9EKSB9Cj4gPiA+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkRfREJV Rl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gPiA+ICsJeyB7IERCdWYxLCBE QnVmMiwgMCwgREJ1ZjMgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9CKQo+ID4gPiA+ID4gfAo+ ID4gPiA+ID4gQklUKFBJUEVfRCkgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQUJDX0RC VUZfU0xJQ0VTKERCdWYxLCBEQnVmMiwgREJ1ZjMpICBcCj4gPiA+ID4gPiArCXsgeyBEQnVmMSwg REJ1ZjIsIERCdWYzLCAwIH0sIEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQikKPiA+ID4gPiA+IHwK PiA+ID4gPiA+IEJJVChQSVBFX0MpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0FCQ0Rf REJVRl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMywKPiA+ID4gPiA+IERCdWY0KSAgXAo+ID4g PiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCBEQnVmMywgREJ1ZjQgfSwgQklUKFBJUEVfQSkgfAo+ ID4gPiA+ID4gQklUKFBJUEVfQikgfCBcCj4gPiA+ID4gPiArCQkJCQkgIEJJVChQSVBFX0MpIHwK PiA+ID4gPiA+IEJJVChQSVBFX0QpIH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKgo+ID4gPiA+ ID4gKyAqIFRhYmxlIHRha2VuIGZyb20gQnNwZWMgMTI3MTYKPiA+ID4gPiA+ICsgKiBQaXBlcyBk byBoYXZlIHNvbWUgcHJlZmVycmVkIERCdWYgc2xpY2UgYWZmaW5pdHksCj4gPiA+ID4gPiArICog cGx1cyB0aGVyZSBhcmUgc29tZSBoYXJkY29kZWQgcmVxdWlyZW1lbnRzIG9uIGhvdwo+ID4gPiA+ ID4gKyAqIHRob3NlIHNob3VsZCBiZSBkaXN0cmlidXRlZCBmb3IgbXVsdGlwaXBlIHNjZW5hcmlv cy4KPiA+ID4gPiA+ICsgKiBGb3IgbW9yZSBEQnVmIHNsaWNlcyBhbGdvcml0aG0gY2FuIGdldCBl dmVuIG1vcmUgbWVzc3kKPiA+ID4gPiA+ICsgKiBhbmQgbGVzcyByZWFkYWJsZSwgc28gZGVjaWRl ZCB0byB1c2UgYSB0YWJsZSBhbG1vc3QKPiA+ID4gPiA+ICsgKiBhcyBpcyBmcm9tIEJTcGVjIGl0 c2VsZiAtIHRoYXQgd2F5IGl0IGlzIGF0IGxlYXN0IGVhc2llcgo+ID4gPiA+ID4gKyAqIHRvIGNv bXBhcmUsIGNoYW5nZSBhbmQgY2hlY2suCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RydWN0 IGRidWZfc2xpY2VfY29uZl9lbnRyeSBpY2xfYWxsb3dlZF9kYnVmc1tdID0gewo+ID4gPiA+ID4g K3sgeyAwLCAwLCAwLCAwIH0sIDAgfSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BX0RCVUZfU0xJQ0VT KERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLCAgLyogcGlwZQo+ID4gPiA+ID4gcmF0aW8KPiA+ ID4gPiA+IDwgODguOCAqLwo+ID4gPiA+ID4gK0lDTF9QSVBFX0FfREJVRl9TTElDRVMoREJVRl9T MV9CSVQpLCAgICAgICAgICAgICAgICAvKiBmb3IKPiA+ID4gPiA+IHBpcGUKPiA+ID4gPiA+IHJh dGlvID49IDg4LjggKi8KPiA+ID4gPiA+ICtJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFf QklUIHwgREJVRl9TMl9CSVQpLCAgLyogcGlwZQo+ID4gPiA+ID4gcmF0aW8KPiA+ID4gPiA+IDwg ODguOCAqLwo+ID4gPiA+ID4gK0lDTF9QSVBFX0JfREJVRl9TTElDRVMoREJVRl9TMV9CSVQpLCAg ICAgICAgICAgICAgICAvKiBmb3IKPiA+ID4gPiA+IHBpcGUKPiA+ID4gPiA+IHJhdGlvID49IDg4 LjggKi8KPiA+ID4gPiA+ICtJQ0xfUElQRV9DX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJV Rl9TMl9CSVQpLCAgLyogcGlwZQo+ID4gPiA+ID4gcmF0aW8KPiA+ID4gPiA+IDwgODguOCAqLwo+ ID4gPiA+ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMl9CSVQpLCAgICAgICAgICAg ICAgICAvKiBmb3IKPiA+ID4gPiA+IHBpcGUKPiA+ID4gPiA+IHJhdGlvID49IDg4LjggKi8KPiA+ ID4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQp LAo+ID4gPiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1My X0JJVCksCj4gPiA+ID4gPiArSUNMX1BJUEVfQkNfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERC VUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJVRl9TMV9C SVQsIERCVUZfUzFfQklULAo+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gK307Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ICsgKiBUYWJsZSB0YWtlbiBmcm9tIEJz cGVjIDQ5MjU1Cj4gPiA+ID4gPiArICogUGlwZXMgZG8gaGF2ZSBzb21lIHByZWZlcnJlZCBEQnVm IHNsaWNlIGFmZmluaXR5LAo+ID4gPiA+ID4gKyAqIHBsdXMgdGhlcmUgYXJlIHNvbWUgaGFyZGNv ZGVkIHJlcXVpcmVtZW50cyBvbiBob3cKPiA+ID4gPiA+ICsgKiB0aG9zZSBzaG91bGQgYmUgZGlz dHJpYnV0ZWQgZm9yIG11bHRpcGlwZSBzY2VuYXJpb3MuCj4gPiA+ID4gPiArICogRm9yIG1vcmUg REJ1ZiBzbGljZXMgYWxnb3JpdGhtIGNhbiBnZXQgZXZlbiBtb3JlIG1lc3N5Cj4gPiA+ID4gPiAr ICogYW5kIGxlc3MgcmVhZGFibGUsIHNvIGRlY2lkZWQgdG8gdXNlIGEgdGFibGUgYWxtb3N0Cj4g PiA+ID4gPiArICogYXMgaXMgZnJvbSBCU3BlYyBpdHNlbGYgLSB0aGF0IHdheSBpdCBpcyBhdCBs ZWFzdCBlYXNpZXIKPiA+ID4gPiA+ICsgKiB0byBjb21wYXJlLCBjaGFuZ2UgYW5kIGNoZWNrLgo+ ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0cnVjdCBkYnVmX3NsaWNlX2NvbmZfZW50cnkgdGds X2FsbG93ZWRfZGJ1ZnNbXSA9IHsKPiA+ID4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4g PiA+ID4gPiArSUNMX1BJUEVfQV9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERCVUZfUzJfQklU KSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9T Ml9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBE QlVGX1MyX0JJVCksCj4gPiA+ID4gPiArSUNMX1BJUEVfRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJ VCB8IERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVG X1MyX0JJVCwgREJVRl9TMV9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VT KERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiArSUNMX1BJUEVfQkNfREJVRl9T TElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BRF9E QlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBF X0JEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiArSUNM X1BJUEVfQ0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ ICtJQ0xfUElQRV9BQkRfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ID4g PiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBFX0FCQ19EQlVGX1NMSUNFUyhE QlVGX1MxX0JJVCwgREJVRl9TMV9CSVQsCj4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4g PiArSUNMX1BJUEVfQUNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwKPiA+ ID4gPiA+IERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9CQ0RfREJVRl9TTElDRVMo REJVRl9TMV9CSVQsIERCVUZfUzJfQklULAo+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ ID4gK0lDTF9QSVBFX0FCQ0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ ID4gPiA+ID4gREJVRl9TMl9CSVQsCj4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiAr fTsKPiA+ID4gPiAKPiA+ID4gPiBNeSBleWVzIQo+ID4gPiA+IAo+ID4gPiA+IEkgaGF2ZSB0byB0 aGluayB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWR1Y2UgYWxsIHRoYXQgdG8gYSBoYW5kZnVsCj4g PiA+ID4gb2YgbGluZXMgb2YgY29kZS4KPiA+ID4gCj4gPiA+IFllYWgsIHRoZW4gd2UgYXJlIGdv aW5nIHRvIGhhdmUgYSBodWdlIGZ1bmN0aW9uIHdpdGggbG90cyBvZiB3ZWlyZAo+ID4gPiBkZWZp bml0aW9ucywgdW5mb3J0dW5hdGVseSBCU3BlYyB0YWJsZSBoYXMgcXVpdGUgc3RyYW5nZSBEQnVm Cj4gPiA+IGFzc2lnbm1lbnRzIGxpa2UgCj4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhE QlVGX1MyX0JJVCwgREJVRl9TMV9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUNfREJVRl9TTElDRVMo REJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gCj4gPiA+IGkuZSBzbGljZXMgY2FuIGdl dCBtaXhlZCBpbiBhIHF1aXRlIHZhcmlvdXMgd2F5cy4gVGhlcmUgaXMgbm8KPiA+ID4gcmF0aW9u YWwgcGF0dGVybiBpbiB0aG9zZSBhbmQgY291bGQgYmUgZXZlbiBkYW5nZXJvdXMgdG8gdHJ5IHRv IAo+ID4gPiBvcHRpbWl6ZSBpdCBzb21lIHdheSwgYXMgb25lIGRheSBpdCBtaWdodCBjaGFuZ2Ug YWdhaW4gaW4gc29tZQo+ID4gPiB1bnByZWRpY3RhYmxlIHdheS4KPiA+ID4gCj4gPiA+IFdvdWxk IHlvdSBwcmVmZXIgdG8gaGF2ZSBpdCBsaWtlCj4gPiA+IAo+ID4gPiBpZiAocGlwZXMgYXJlIEEg YW5kIEIpCj4gPiA+ICAgICBwcm9ncmFtIFMyIHRvIEEgYW5kIFMxIHRvIEIKPiA+ID4gaWYgKHBp cGVzIGFyZSBBIGFuZCBDKQo+ID4gPiAgICAgcHJvZ3JhbSBTMSB0byBBIGFuZCBTMiB0byBDCj4g PiA+IC4uLgo+ID4gPiAKPiA+ID4gSSB3b3VsZCBwcmVmZXIgYXQgbGVhc3QgdG8gc2VlIGl0IGlu IGEgY29tcGFyYWJsZSB3YXkgd2l0aCB0aGUKPiA+ID4gdGFibGUgd2UgaGF2ZSBpbiBCU3BlYywg cmF0aGVyIHRoYW4gaGF2aW5nIGxvdHMgb2Ygd2VpcmQgbG9va2luZwo+ID4gPiBpZi1lbHNlIHN0 YXRlbWVudHMsIEdFTiBjaGVja3MgYW5kIHNvIG9uLgo+ID4gPiAKPiA+ID4gSSBrbmV3IHRoaXMg dGFibGUgd2FzIG5vdCBnb2luZyB0byBsb29rIGxpa2UgaXQgaXMgZG9uZSB0eXBpY2FsbHkKPiA+ ID4gaGVyZSAtIGJ1dCByZWFsbHkgbXkgb3BpbmlvbiB0aGF0IGl0IGlzIHdheSBiZXR0ZXIgdGhh biBoYXJkY29kaW5nCj4gPiA+IGl0IGludG8gc29tZSB3ZWlyZCBhbGdvcml0aG0sIHdoaWNoIHdv dWxkIGJlIGhhcmQgdG8gY29tcGFyZSB0byAKPiA+ID4gaW5pdGlhbCB0YWJsZSwgd2hpY2ggaXMg YWxyZWFkeSBzdHJhbmdlIGVub3VnaC4KPiA+ID4gCj4gPiA+IElmIHlvdSBkb24ndCBsaWtlIGl0 IC0gY291bGQgeW91IHBsZWFzZSBleHBsYWluIHdoeSB0aGlzIGlzIGV4YWN0bHkKPiA+ID4gd29y c2UgdGhhbiBoYXZpbmcgbG9uZyBmdW5jdGlvbnMgd2l0aCBoYXJkY29kZWQgY2hlY2tzPwo+ID4g Cj4gPiBJIHRoaW5rIHdlIHNob3VsZCBiZSBhYmxlIHRvIGVuY29kZSB0aGlzIHNpbXBseSB1c2lu ZyB0aGUKPiA+ICJQaXBlIGFuZCBEQlVGIG9yZGVyaW5nIiBzdHVmZiBmcm9tIHRoZSBzcGVjLiBJ ZS4ganVzdCBzcGVjaWZ5IHdoYXQKPiA+IGlzIHRoZSBkaXN0YW5jZSBvZiBlYWNoIHBpcGUgZnJv bSBlYWNoIGRidWYgc2xpY2UuIFRoZW4gYWxsIHdlIGhhdmUKPiA+IHRvIGRvIGlzIG1pbmltaXpl IHRoZSB0b3RhbCBkaXN0YW5jZS4gVGhlIGZvbGxvd2luZyB0YWJsZXMgSSB0aGluawo+ID4gc2hv dWxkIGVuY29kZSB0aGF0IHJlYXNvbmFibHkgY29uY2lzZWx5Ogo+ID4gCj4gPiAvKiBwaXBlQSAt IERCVUZfUzEgLSBwaXBlQiAtIHBpcGVDIC0gREJVRl9TMiAqLwo+ID4gc3RhdGljIGNvbnN0IHU4 IGljbF9kYnVmX2Rpc3RhbmNlW11bXSB7Cj4gPiAJW1BJUEVfQV0gPSB7IFtEQlVGX1MxXSA9IDEs IFtEQlVGX1MyXSA9IDQsIH0sCj4gPiAJW1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVG X1MyXSA9IDIsIH0sCj4gPiAJW1BJUEVfQ10gPSB7IFtEQlVGX1MxXSA9IDIsIFtEQlVGX1MyXSA9 IDEsIH0sCj4gPiB9Owo+ID4gCj4gPiAvKiBwaXBlRCAtIERCVUZfUzIgLSBwaXBlQyAtIHBpcGVB IC0gREJVRl9TMSAtIHBpcGVCICovCj4gPiBzdGF0aWMgY29uc3QgdTggdGdsX2RidWZfZGlzdGFu Y2VbXVtdIHsKPiA+IAlbUElQRV9BXSA9IHsgW0RCVUZfUzFdID0gMSwgW0RCVUZfUzJdID0gMiwg fSwKPiA+IAlbUElQRV9CXSA9IHsgW0RCVUZfUzFdID0gMSwgW0RCVUZfUzJdID0gNCwgfSwKPiA+ IAlbUElQRV9DXSA9IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZfUzJdID0gMSwgfSwKPiA+IAlbUElQ RV9EXSA9IHsgW0RCVUZfUzFdID0gNCwgW0RCVUZfUzJdID0gMSwgfSwKPiA+IH07Cj4gCj4gSSB0 aGluayB5b3UgYXJlIG1pc3NpbmcgbXkgcG9pbnQuIEkgd2lsbCBleHBsYWluIHdoeS4KPiBNeSBp bml0aWFsIGlkZWEgd2FzIHNpbWlsYXIsIHVzZSBzb21lIGtpbmQgb2YgZGlzdGFuY2UKPiBtZXRy aWNzIGFuZCBlbmNvZGUgZXZlcnl0aGluZyBpbiBhIHNtYXJ0IHdheS4KPiBDdXJyZW50IEJTcGVj IHRhYmxlIGhhcyBzb21ldGltZXMgc2xpY2VzIHN3YXBwZWQgZm9yIG5vIHJlYXNvbi4KPiAKPiBU aGVyZSBhcmUgc2VlbSB0byBiZSBzb21lIGhhcmR3YXJlIGNvbnN0cmFpbnRzIHdlIGFyZSBub3Qg YXdhcmUKPiBvZi4gRm9yIGV4YW1wbGUgZm9yIFRHTCBwaXBlcyBBLEIgZ2V0IFMyIGFuZCBTMSBz bGljZXMsCgpBL1MxICsgQi9TMiA9IDEgKyA0ID0gNQpBL1MyICsgQi9TMSA9IDIgKyAxID0gMwoK PiBidXQgcGlwZXMgQSBDIGdldCBTMSBhbmQgUzIuCgpBL1MxICsgQy9TMiA9IDEgKyAxID0gMgpB L1MyICsgQy9TMSA9IDIgKyAyID0gNAoKU28gaXQncyBleGFjdGx5IGFzIG15IGRpc3RhbmNlIHRh YmxlIHNheXMgaXQgc2hvdWxkIGJlLgoKPiAKPiBpZiB5b3UgZW5jb2RlIGFsbCB0aGlzIGludG8g c29tZSBraW5kIG9mIGRpc3RhbmNlIGFsZ29yaXRobSwKPiB0aG9zZSBkaWZmZXJlbmNlcyB3b3Vs ZCBiZSBlbm91cm1vdXNseSBkaWZmaWN1bHQgdG8gc3BvdCBhbmQKPiBjb21wYXJlIHdpdGggYWN0 dWFsIHRhYmxlLiBUaGF0IGlzIHdoeSBJIGRlY2lkZWQgdG8gZG8gaXQgdGhhdAo+IHdheS4KPiAK PiBNb3N0IGxpa2VseSB5ZXMgeW91IGNhbiBzb2x2ZSBpdCBieSB1c2luZyB0aGlzIG1ldHJpY3Ms Cj4gYnV0IHdpbGwgaXQgcmVhbGx5IGJlIHRoZW4gbW9yZSByZWFkYWJsZSBhbmQgY29tcGFyYWJs ZQo+IHdpdGggcmVmZXJlbmNlIHRhYmxlPyAKPiBXaGF0IGlmIHNvbWUgY29udHJhaW50cyB3aWxs IGJlIGFkZGVkIGFnYWluLCBsaWtlIHBpcGUgcmF0aW8/Cj4gCj4gPiAKPiA+IC8qCj4gPiAgKiBw aXBlQSAtIERCVUZfUzAgLSBEQlVGX1MxIC0gcGlwZUIKPiA+ICAqIHBpcGVDIC0gREJVRl9TMiAt IERCVUZfUzMgLSBwaXBlRAo+ID4gICovCj4gPiBzdGF0aWMgY29uc3QgdTggZnV0dXJlX2RidWZf ZGlzdGFuY2VbXVtdIHsKPiA+IAlbUElQRV9BXSA9IHsgW0RCVUZfUzBdID0gMSwgW0RCVUZfUzFd ID0gMywgfSwKPiA+IAlbUElQRV9CXSA9IHsgW0RCVUZfUzBdID0gMywgW0RCVUZfUzFdID0gMSwg fSwKPiA+IAlbUElQRV9DXSA9IHsgW0RCVUZfUzJdID0gMSwgW0RCVUZfUzNdID0gMywgfSwKPiA+ IAlbUElQRV9EXSA9IHsgW0RCVUZfUzJdID0gMywgW0RCVUZfUzNdID0gMSwgfSwKPiA+IH07Cj4g PiAKPiA+IEkgc3VwcG9zZSB3ZSBjb3VsZCBtYWtlIHRoYXQgZXZlbiBtb3JlIG1pbmltYWwgYnkg anVzdAo+ID4gZGlyZWN0bHkgc3RpY2tpbmcgdGhhdCAiUGlwZSBhbmQgREJVRiBvcmRlcmluZyIg bGFuZ3VhZ2UKPiA+IGludG8gYSBzaW5nbGUgYXJyYXkgYnV0IGFuZCB0aGVuIGNhbGN1bGF0ZSBl YWNoIGRpc3RhbmNlCj4gPiBmcm9tIGl0LCBidXQgdGhhdCBpcyBwZXJoYXBzIG1vcmUgd29yaywg YW5kIHdlJ2QgbmVlZAo+ID4gc29tZSBraW5kIG9mIGVudW0ganVzdCBmb3IgdGhhdCBzbyB0aGF0 IHdlIGhhdmUgYSBzaW5nbGUKPiA+IG5hbWVzcGFjZSBmb3IgdGhlIHBpcGVzIGFuZCBkYnVmIHNs aWNlcy4gU28gaSBoYXZlIGEKPiA+IGZlZWxpbmcgaGF2aW5nIHRob3NlIGRpc3RhbmNlcyBwcmUt Y29tcHV0ZWQgaW4gYSB0YWJsZQo+ID4gbGlrZSB0aGV0IGlzIG1heWJlIGEgYmV0dGVyIHdheSB0 byBnby4KPiAKPiBHb29kIGx1Y2sgdGhlbiBzcG90aW5nIGRpZmZlcmVuY2VzIHdpdGggdGhlIEJT cGVjIHRhYmxlIG9uY2UgaXQKPiBnZXRzIGNoYW5nZWQuCgpXZWxsLCBJJ2QgcmF0aGVyIGRvIHRo YXQgdGhhbiBkZWNvZGUgdGhyb3VnaCBsYXllcnMgb2YgY3BwIG1hY3Jvcy4KQWxzbyBhdG0gdGhl IHRhYmxlIGhhcyBubyBleHRyYSByZXN0cmljdGlvbnMgc28gaXQncyBjbGVhcmx5IHRoZXJlCmp1 c3QgYmVjYXVzZSBzb21lb25lIHRob3VnaHQgdGhleSdkIHdyaXRlIG91dCB0aGUgcmVzdWx0cyBv ZiB0aGUKZGlzdGFuY2UgY2FsY3VsYXRpb25zLiBJbiBnZW5lcmFsIGJzcGVjIHN0eWxlIGlzIHNv bWV3aGF0IGFubm95aW5nCndoZXJlIHRoZXkgdHJ5IHRvIHdyaXRlIG91dCB0aGluZ3MgaW4gdGhl IGxvd2VzdCBsZXZlbCBvZiBhYnNyYWN0aW9uCnBvc3NpYmxlICh0aGV5IGFyZSBoYXJkd2FyZSBw ZW9wbGUgYWZ0ZXIgYWxsKS4gSSdkIG11Y2ggcHJlZmVyIGEKaGlnaGVyIGxldmVsIGRlc2NyaXB0 aW9uIG9mIHRoZSBpc3N1ZS4KCj4gCj4gPiAKPiA+ID4gCj4gPiA+IEkgdGhpbmsgdGhpcyBpcyBw cmV0dHkgc3R1cGlkIHRvIGZpeCBzdHVmZiB3aGljaCBsb29rcyBuZXcgb3IKPiA+ID4gdW51c3Vh bAo+ID4gPiBqdXN0IGJlY2F1c2Ugc29tZWJvZHkgZG9lc24ndCBsaWtlIGl0LCB3aXRob3V0IGV2 ZW4gY29uc3RydWN0aXZlCj4gPiA+IGFyZ3VpbmcuCj4gPiA+IAo+ID4gPiAtIFN0YW4KPiA+ID4g Cj4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ICsg KiBUaGlzIGZ1bmN0aW9uCj4gPiA+ID4gCj4gPiA+ID4gIlRoaXMgZnVuY3Rpb24iIGlzIHRvdGFs bHkgcmVkdW5kYW50LiBEaXR0byBlbHNld2hlcmUuCj4gPiA+ID4gCj4gPiA+ID4gPiBmaW5kcyBh biBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlIGNvbmZpZ3VyYXRpb24gYW5kCj4gPiA+ID4g PiArICogcmV0dXJucyBjb3JyZXNwb25kZW50IERCdWYgc2xpY2UgbWFzayBhcyBzdGF0ZWQgaW4g QlNwZWMKPiA+ID4gPiA+IGZvcgo+ID4gPiA+ID4gcGFydGljdWxhcgo+ID4gPiA+ID4gKyAqIHBs YXRmb3JtLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0YXRpYyB1MzIgaWNsX2dldF9hbGxv d2VkX2RidWZfbWFzayhpbnQgcGlwZSwKPiA+ID4gPiA+ICsJCQkJICAgICB1MzIgYWN0aXZlX3Bp cGVzLAo+ID4gPiA+ID4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdAo+ID4gPiA+ID4gaW50ZWxfY3J0 Y19zdGF0ZQo+ID4gPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlp bnQgaTsKPiA+ID4gPiA+ICsJdWludF9maXhlZF8xNl8xNl90IHBpcGVfcmF0aW87Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAqIENhbGN1bGF0ZSBwaXBlIHJhdGlvIGFz IHN0YXRlZCBpbiBCU3BlYyAyODY5Mgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJcGlwZV9y YXRpbyA9IGljbF9nZXRfcGlwZV9yYXRpbyhjcnRjX3N0YXRlKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWNsX2FsbG93ZWRfZGJ1ZnMpOyBpKysp IHsKPiA+ID4gPiA+ICsJCWlmIChpY2xfYWxsb3dlZF9kYnVmc1tpXS5hY3RpdmVfcGlwZXMgPT0K PiA+ID4gPiA+IGFjdGl2ZV9waXBlcykKPiA+ID4gPiA+IHsKPiA+ID4gPiA+ICsJCQlpZiAoaHdl aWdodDMyKGFjdGl2ZV9waXBlcykgPT0gMSkgewo+ID4gPiA+ID4gKwkJCQkvKgo+ID4gPiA+ID4g KwkJCQkgKiBBY2NvcmRpbmcgdG8gQlNwZWMgMTI3MTY6IGlmCj4gPiA+ID4gPiByYXRpbwo+ID4g PiA+ID4gPiA9IDg4LjgKPiA+ID4gPiA+IAo+ID4gPiA+ID4gKwkJCQkgKiBhbHdheXMgdXNlIHNp bmdsZSBkYnVmCj4gPiA+ID4gPiBzbGljZS4KPiA+ID4gPiA+ICsJCQkJICovCj4gPiA+ID4gPiAr CQkJCWlmIChwaXBlX3JhdGlvLnZhbCA+PQo+ID4gPiA+ID4gZGl2X2ZpeGVkMTYoODg4LAo+ID4g PiA+ID4gMTApLnZhbCkKPiA+ID4gPiA+ICsJCQkJCSsraTsKPiA+ID4gPiA+ICsJCQl9Cj4gPiA+ ID4gPiArCQkJcmV0dXJuCj4gPiA+ID4gPiBpY2xfYWxsb3dlZF9kYnVmc1tpXS5kYnVmX21hc2tb cGlwZV07Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsJcmV0dXJuIDA7 Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiArICogVGhp cyBmdW5jdGlvbiBmaW5kcyBhbiBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlCj4gPiA+ID4g PiBjb25maWd1cmF0aW9uIGFuZAo+ID4gPiA+ID4gKyAqIHJldHVybnMgY29ycmVzcG9uZGVudCBE QnVmIHNsaWNlIG1hc2sgYXMgc3RhdGVkIGluIEJTcGVjCj4gPiA+ID4gPiBmb3IKPiA+ID4gPiA+ IHBhcnRpY3VsYXIKPiA+ID4gPiA+ICsgKiBwbGF0Zm9ybS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4g PiA+ICtzdGF0aWMgdTMyIHRnbF9nZXRfYWxsb3dlZF9kYnVmX21hc2soaW50IHBpcGUsCj4gPiA+ ID4gPiArCQkJCSAgICAgdTMyIGFjdGl2ZV9waXBlcywKPiA+ID4gPiA+ICsJCQkJICAgICBjb25z dCBzdHJ1Y3QKPiA+ID4gPiA+IGludGVsX2NydGNfc3RhdGUKPiA+ID4gPiA+ICpjcnRjX3N0YXRl KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJaW50IGk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRnbF9hbGxvd2VkX2RidWZzKTsgaSsrKSB7Cj4g PiA+ID4gPiArCQlpZiAodGdsX2FsbG93ZWRfZGJ1ZnNbaV0uYWN0aXZlX3BpcGVzID09Cj4gPiA+ ID4gPiBhY3RpdmVfcGlwZXMpCj4gPiA+ID4gPiArCQkJcmV0dXJuCj4gPiA+ID4gPiB0Z2xfYWxs b3dlZF9kYnVmc1tpXS5kYnVmX21hc2tbcGlwZV07Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsJ cmV0dXJuIDA7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3UzMiBpOTE1X2dl dF9hbGxvd2VkX2RidWZfbWFzayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ID4gPiA+ID4gKmRl dl9wcml2LAo+ID4gPiA+ID4gKwkJCQkgICAgICBpbnQgcGlwZSwgdTMyCj4gPiA+ID4gPiBhY3Rp dmVfcGlwZXMsCj4gPiA+ID4gPiArCQkJCSAgICAgIGNvbnN0IHN0cnVjdAo+ID4gPiA+ID4gaW50 ZWxfY3J0Y19zdGF0ZQo+ID4gPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ID4gPiArewo+ID4gPiA+ ID4gKwlpZiAoSVNfR0VOKGRldl9wcml2LCAxMSkpCj4gPiA+ID4gPiArCQlyZXR1cm4gaWNsX2dl dF9hbGxvd2VkX2RidWZfbWFzayhwaXBlLAo+ID4gPiA+ID4gKwkJCQkJCSBhY3RpdmVfcGlwZXMs Cj4gPiA+ID4gPiArCQkJCQkJIGNydGNfc3RhdGUpOwo+ID4gPiA+ID4gKwllbHNlIGlmIChJU19H RU4oZGV2X3ByaXYsIDEyKSkKPiA+ID4gPiA+ICsJCXJldHVybiB0Z2xfZ2V0X2FsbG93ZWRfZGJ1 Zl9tYXNrKHBpcGUsCj4gPiA+ID4gPiArCQkJCQkJIGFjdGl2ZV9waXBlcywKPiA+ID4gPiA+ICsJ CQkJCQkgY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAqIEZvciBhbnl0 aGluZyBlbHNlIGp1c3QgcmV0dXJuIG9uZSBzbGljZSB5ZXQuCj4gPiA+ID4gPiArCSAqIFNob3Vs ZCBiZSBleHRlbmRlZCBmb3Igb3RoZXIgcGxhdGZvcm1zLgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4g PiA+ICsJcmV0dXJuIERCVUZfUzFfQklUOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICBzdGF0aWMgdTY0Cj4gPiA+ID4gPiAgaWNsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3Jh dGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUKPiA+ID4gPiA+ICpjcnRjX3N0YXRlLAo+ID4gPiA+ ID4gIAkJCQkgdTY0ICpwbGFuZV9kYXRhX3JhdGUpCj4gPiA+ID4gPiAtLSAKPiA+ID4gPiA+IDIu MTcuMQo+ID4gPiA+IAo+ID4gPiA+IAo+ID4gCj4gPiAKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50 ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 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 73E25C432C0 for ; Mon, 18 Nov 2019 18:18:12 +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 576B1222AD for ; Mon, 18 Nov 2019 18:18:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 576B1222AD 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 D552A6E792; Mon, 18 Nov 2019 18:18:11 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDD6F6E792 for ; Mon, 18 Nov 2019 18:18:10 +0000 (UTC) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Nov 2019 10:18:10 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,321,1569308400"; d="scan'208";a="200056153" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.174]) by orsmga008.jf.intel.com with SMTP; 18 Nov 2019 10:18:06 -0800 Received: by stinkbox (sSMTP sendmail emulation); Mon, 18 Nov 2019 20:18:06 +0200 Date: Mon, 18 Nov 2019 20:18:06 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: "Lisovskiy, Stanislav" Message-ID: <20191118181806.GX1208@intel.com> References: <20191114122449.26409-1-stanislav.lisovskiy@intel.com> <20191115201944.GO1208@intel.com> <20191118152712.GS1208@intel.com> <4f13f1993b67930ac88f6fd8adcf47f197a02799.camel@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <4f13f1993b67930ac88f6fd8adcf47f197a02799.camel@intel.com> 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: <20191118181806.SRdZJcwKy-hBOe_G1UPxQqOiW9vGGQUnOoQ5MwUwN1E@z> T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMDU6MTc6NTFQTSArMDAwMCwgTGlzb3Zza2l5LCBTdGFu aXNsYXYgd3JvdGU6Cj4gT24gTW9uLCAyMDE5LTExLTE4IGF0IDE3OjI3ICswMjAwLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBNb24sIE5vdiAxOCwgMjAxOSBhdCAwOToxOToxOEFNICsw MDAwLCBMaXNvdnNraXksIFN0YW5pc2xhdiB3cm90ZToKPiA+ID4gT24gRnJpLCAyMDE5LTExLTE1 IGF0IDIyOjE5ICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiA+ID4gT24gVGh1LCBO b3YgMTQsIDIwMTkgYXQgMDI6MjQ6NDlQTSArMDIwMCwgU3RhbmlzbGF2IExpc292c2tpeQo+ID4g PiA+IHdyb3RlOgo+ID4gPiA+ID4gQWxzbyBpbXBsZW1lbnRlZCBhbGdvcml0aG0gZm9yIGNob29z aW5nIERCdWYgc2xpY2UKPiA+ID4gPiA+IGNvbmZpZ3VyYXRpb24KPiA+ID4gPiA+IGJhc2VkIG9u IGFjdGl2ZSBwaXBlcywgcGlwZSByYXRpbyBhcyBzdGF0ZWQgaW4gQlNwZWMgMTI3MTYuCj4gPiA+ ID4gPiAKPiA+ID4gPiA+IE5vdyBwaXBlIGFsbG9jYXRpb24gc3RpbGwgc3RheXMgcHJvcG9ydGlv bmFsIHRvIHBpcGUgd2lkdGggYXMKPiA+ID4gPiA+IGJlZm9yZSwKPiA+ID4gPiA+IGhvd2V2ZXIg d2l0aGluIGFsbG93ZWQgREJ1ZiBzbGljZSBmb3IgdGhpcyBwYXJ0aWN1bGFyCj4gPiA+ID4gPiBj b25maWd1cmF0aW9uLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiB2MjogUmVtb3ZlIHVubmVlZGVkIGNo ZWNrIGZyb20gY29tbWl0IGFzIGRkYiBlbmFibGVkIHNsaWNlcwo+ID4gPiA+ID4gbWlnaHQKPiA+ ID4gPiA+ICAgICBub3cgZGlmZmVyIGZyb20gaHcgc3RhdGUuCj4gPiA+ID4gPiAKPiA+ID4gPiA+ IHYzOiAtIEFkZGVkIG5ldyBmaWVsZCAic3VwcG9ydGVkX3NsaWNlcyIgdG8gZGRiIHRvIHNlcGFy YXRlIG1heAo+ID4gPiA+ID4gICAgICAgc3VwcG9ydGVkIHNsaWNlcyB2cyBjdXJyZW50bHkgZW5h YmxlZCwgdG8gYXZvaWQKPiA+ID4gPiA+IGNvbmZ1c2lvbi4KPiA+ID4gPiA+ICAgICAtIFJlbW92 ZWQgb2Jzb2xldGUgY29tbWVudHMgYW5kIGNvZGUgcmVsYXRlZCB0bwo+ID4gPiA+ID4gREJ1ZihN YXR0aGV3Cj4gPiA+ID4gPiBSb3BlcikuCj4gPiA+ID4gPiAgICAgLSBTb21lIGNvZGUgc3R5bGUg YW5kIGxvbmcgbGluZSByZW1vdmFsKE1hdHRoZXcgUm9wZXIpLgo+ID4gPiA+ID4gICAgIC0gQWRk ZWQgV0FSTl9PTiB0byBuZXcgZGRiIHJhbmdlIG9mZnNldCBjYWxjCj4gPiA+ID4gPiBmdW5jdGlv bihNYXR0aGV3Cj4gPiA+ID4gPiBSb3BlcikuCj4gPiA+ID4gPiAgICAgLSBSZW1vdmVkIHBsYXRm b3JtIHNwZWNpZmljIGNhbGwgdG8gY2FsYyBwaXBlIHJhdGlvIGZyb20KPiA+ID4gPiA+IGRkYgo+ ID4gPiA+ID4gICAgICAgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZml4ZWQgdGhlIHJldHVybiB2 YWx1ZShNYXR0aGV3Cj4gPiA+ID4gPiBSb3BlcikKPiA+ID4gPiA+ICAgICAtIFJlZmFjdG9yZWQg REJVRiBzbGljZSBhbGxvY2F0aW9uIHRhYmxlIHRvIGltcHJvdmUKPiA+ID4gPiA+IHJlYWRhYmls aXR5Cj4gPiA+ID4gPiAgICAgLSBBZGRlZCBEQlVGIHNsaWNlIGFsbG9jYXRpb24gZm9yIFRHTCBh cyB3ZWxsLgo+ID4gPiA+ID4gICAgIC0gSUNMKGhvd2V2ZXIgbm90IFRHTCkgc2VlbXMgdG8gdm9s dW50YXJpbHkgZW5hYmxlIHNlY29uZAo+ID4gPiA+ID4gREJ1Zgo+ID4gPiA+ID4gc2xpY2UKPiA+ ID4gPiA+ICAgICAgIGFmdGVyIHBtIHN1c3BlbmQvcmVzdW1lIGNhdXNpbmcgYSBtaXNtYXRjaCBm YWlsdXJlLAo+ID4gPiA+ID4gYmVjYXVzZQo+ID4gPiA+ID4gd2UKPiA+ID4gPiA+ICAgICAgIHVw ZGF0ZSBEQnVmIHNsaWNlcyBvbmx5IGlmIHdlIGRvIGEgbW9kZXNldCwgaG93ZXZlciB0aGlzCj4g PiA+ID4gPiBjaGVjawo+ID4gPiA+ID4gICAgICAgaXMgZG9uZSBhbHdheXMuIEZpeGVkIGl0IHRv IGJlIGRvbmUgb25seSB3aGVuIG1vZGVzZXQgZm9yCj4gPiA+ID4gPiBJQ0wuCj4gPiA+ID4gPiAK PiA+ID4gPiA+IHY0OiAtIE5vdyBlbmFibGVkIHNsaWNlcyBpcyBub3QgYWN0dWFsbHkgYSBudW1i ZXIsIGJ1dCBhCj4gPiA+ID4gPiBiaXRtYXNrLAo+ID4gPiA+ID4gICAgICAgYmVjYXVzZSB3ZSBt aWdodCBuZWVkIHRvIGVuYWJsZSBzZWNvbmQgc2xpY2Ugb25seSBhbmQKPiA+ID4gPiA+IG51bWJl cgo+ID4gPiA+ID4gICAgICAgb2Ygc2xpY2VzIHdvdWxkIHN0aWxsIDEgYW5kIHRoYXQgY3VycmVu dCBjb2RlIGRvZXNuJ3QKPiA+ID4gPiA+IGFsbG93Lgo+ID4gPiA+ID4gICAgIC0gUmVtb3ZlIHJl ZHVuZGFudCBkdXBsaWNhdGUgY29kZSB0byBoYXZlIHNvbWUgdW5pZmllZCB3YXkKPiA+ID4gPiA+ IG9mCj4gPiA+ID4gPiAgICAgICBlbmFibGluZyBkYnVmIHNsaWNlcyBpbnN0ZWFkIG9mIGhhcmRj b2RpbmcuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IHY1OiAtIEZpeCBmYWlsaW5nIGdlbjlfYXNzZXJ0 X2RidWZfZW5hYmxlZCBhcyBpdCB3YXMgbmFpdmVseQo+ID4gPiA+ID4gdGhpbmtpbmcKPiA+ID4g PiA+ICAgICAgIHRoYXQgd2UgaGF2ZSBvbmx5IG9uZSBEQlVGX0NUTCBzbGljZS4gTm93IGFub3Ro ZXIgdmVyc2lvbgo+ID4gPiA+ID4gZm9yCj4gPiA+ID4gPiAgICAgICBnZW4xMSB3aWxsIGNoZWNr IGJvdGggc2xpY2VzIGFzIG9ubHkgc2Vjb25kIG9uZSBjYW4gYmUKPiA+ID4gPiA+IGVuYWJsZWQs Cj4gPiA+ID4gPiAgICAgICB0byBrZWVwIENJIGhhcHB5Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiB2 NjogLSBSZW1vdmVkIGVuYWJsZWQgZGJ1ZiBhc3NlcnRpb24gY29tcGxldGVseS4gUHJldmlvdXMg Y29kZQo+ID4gPiA+ID4gICAgICAgd2FzIGtlZXBpbmcgZGJ1ZiBlbmFibGVkLCBldmVuKCEpIHdo ZW4gX2RidWZfZGlzYWJsZSBpcwo+ID4gPiA+ID4gY2FsbGVkLgo+ID4gPiA+ID4gICAgICAgQ3Vy cmVudGx5IHdlIGVuYWJsZS9kaXNhYmxlIGRidWYgc2xpY2VzIGJhc2VkIG9uCj4gPiA+ID4gPiBy ZXF1cmVtZW50Cj4gPiA+ID4gPiAgICAgICBzbyBubyBwb2ludCBpbiBhc3NlcnRpbmcgdGhpcyBo ZXJlLgo+ID4gPiA+ID4gICAgIC0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBtb2Rlc2V0IGNoZWNrIGZy b20KPiA+ID4gPiA+IHZlcmlmeV93bV9zdGF0ZShNYXR0aGV3IFJvcGVyKQo+ID4gPiA+ID4gICAg IC0gU2xpY2VzIGludGVyc2VjdGlvbiBhZnRlciB1bmlvbiBpcyBzYW1lIGFzIGZpbmFsCj4gPiA+ ID4gPiByZXN1bHQoTWF0dGhldyBSb3BlcikKPiA+ID4gPiA+ICAgICAtIE1vdmVkIERCdWYgc2xp Y2VzIHRvIGludGVsX2RldmljZV9pbmZvKE1hdHRoZXcgUm9wZXIpCj4gPiA+ID4gPiAgICAgLSBT b21lIG1hY3JvcyBhZGRlZChNYXR0aGV3IFJvcGVyKQo+ID4gPiA+ID4gICAgIC0gZGRiIHJhbmdl IGlzIG5vdyBhbHdheXMgbGVzcyBvciBlcXVhbCB0byBkZGIgc2l6ZSAtIG5vCj4gPiA+ID4gPiBu ZWVkCj4gPiA+ID4gPiBmb3IgYWRkaXRpb25hbAo+ID4gPiA+ID4gICAgICAgY2hlY2tzKHByZXZp b3VzbHkgbmVlZGVkIGFzIHdlIGhhZCBzb21lIGJhbmR3aWR0aCBjaGVja3MKPiA+ID4gPiA+IGlu Cj4gPiA+ID4gPiB0aGVyZSB3aGljaAo+ID4gPiA+ID4gICAgICAgY291bGQgInN1ZGRlbmx5IiBy ZXR1cm4gZGRiX3NpemUgc21hbGxlciB0aGFuIGl0IGlzLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiB2 NzogTWlub3IgY29zdGVtaWMgY2hhbmdlczoKPiA+ID4gPiA+ICAgICAtIENoYW5nZWQgaWNsX2Ri dWZfc2xpY2VzX3Jlc3RvcmUgbmFtZSB0bwo+ID4gPiA+ID4gaWNsX3Byb2dyYW1fZGJ1Zl9zbGlj ZXMKPiA+ID4gPiA+ICAgICAgIGFzIGl0IG1vcmUgY29ycmVzcG9uZHMgdG8gdGhlIGFjdHVhbCBm dW5jdGlvbmFsaXR5Lgo+ID4gPiA+ID4gICAgIC0gU29tZSBzaW1wbGlmaWNhdGlvbiB3aXRoIHN1 cHBvcnRlZCBzbGljZXMgZm9yIEJYVCBhbmQgR0xLCj4gPiA+ID4gPiAgICAgLSBza2xfcGlwZV9k b3duc2NhbGVfYW1vdW50IC0+IGljbF9waXBlX2Rvd25zY2FsZV9hbW91bnQgYXMKPiA+ID4gPiA+ ICAgICAgIHRoaXMgaXMgbm90IHVzZWQgZm9yIHNrbCBhbnltb3JlLgo+ID4gPiA+ID4gICAgIC0g Q2hhbmdlZCBEQnVmIHNsaWNlIGFzc2lnbm1lbnQgb3JkZXIgZm9yIFRHTCBjYXNlCj4gPiA+ID4g PiAKPiA+ID4gPiA+IFJldmlld2VkLWJ5OiBNYXR0aGV3IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJA aW50ZWwuY29tPgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8 Cj4gPiA+ID4gPiBzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNvbT4KPiA+ID4gPiA+IENjOiBN YXR0aGV3IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+ID4gPiA+ID4gQ2M6IFZp bGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBpbnRlbC5jb20+Cj4gPiA+ID4gPiBDYzogSmFt ZXMgQXVzbXVzIDxqYW1lcy5hdXNtdXNAaW50ZWwuY29tPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgIHwgIDI2ICst Cj4gPiA+ID4gPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jICAg IHwgIDk4ICsrLS0tCj4gPiA+ID4gPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eV9wb3dlci5oICAgIHwgICAyICsKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jICAgICAgICAgICAgICAgfCAgIDUgKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgMiArLQo+ID4gPiA+ID4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcGNpLmMgICAgICAgICAgICAgICB8ICAgNiArLQo+ID4gPiA+ID4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICAgICAgICB8ICAgOCArLQo+ ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmggICAgICB8 ICAgMSArCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgICAg ICAgICAgIHwgMzg3Cj4gPiA+ID4gPiArKysrKysrKysrKysrKysrLS0KPiA+ID4gPiA+ICA5IGZp bGVzIGNoYW5nZWQsIDQzMSBpbnNlcnRpb25zKCspLCAxMDQgZGVsZXRpb25zKC0pCj4gPiA+ID4g PiAKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuYwo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuYwo+ID4gPiA+ID4gaW5kZXggODc2ZmMyNTk2OGJmLi5iZDdhZmY2NzUxOTgg MTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMKPiA+ID4gPiA+IEBAIC0xMzM4Nyw3ICsxMzM4Nyw3IEBAIHN0YXRpYyB2 b2lkIHZlcmlmeV93bV9zdGF0ZShzdHJ1Y3QKPiA+ID4gPiA+IGludGVsX2NydGMgKmNydGMsCj4g PiA+ID4gPiAgCj4gPiA+ID4gPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCj4g PiA+ID4gPiAgCSAgICBody0+ZGRiLmVuYWJsZWRfc2xpY2VzICE9IHN3X2RkYi0+ZW5hYmxlZF9z bGljZXMpCj4gPiA+ID4gPiAtCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIERCVUYgU2xpY2VzIChl eHBlY3RlZAo+ID4gPiA+ID4gJXUsIGdvdAo+ID4gPiA+ID4gJXUpXG4iLAo+ID4gPiA+ID4gKwkJ RFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEQlVGIFNsaWNlcyAoZXhwZWN0ZWQKPiA+ID4gPiA+ICV4 LCBnb3QKPiA+ID4gPiA+ICV4KVxuIiwKPiA+ID4gPiA+ICAJCQkgIHN3X2RkYi0+ZW5hYmxlZF9z bGljZXMsCj4gPiA+ID4gPiAgCQkJICBody0+ZGRiLmVuYWJsZWRfc2xpY2VzKTsKPiA+ID4gPiA+ ICAKPiA+ID4gPiA+IEBAIC0xNDYxNCwxNSArMTQ2MTQsMjQgQEAgc3RhdGljIHZvaWQKPiA+ID4g PiA+IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlKQo+ID4gPiA+ID4gIAl1OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9wcml2LQo+ID4g PiA+ID4gPndtLnNrbF9ody5kZGIuZW5hYmxlZF9zbGljZXM7Cj4gPiA+ID4gPiAgCXU4IHJlcXVp cmVkX3NsaWNlcyA9IHN0YXRlLQo+ID4gPiA+ID4gPndtX3Jlc3VsdHMuZGRiLmVuYWJsZWRfc2xp Y2VzOwo+ID4gPiA+ID4gIAlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSBlbnRyaWVzW0k5MTVfTUFYX1BJ UEVTXSA9IHt9Owo+ID4gPiA+ID4gKwl1OCBzbGljZXNfdW5pb24gPSBod19lbmFibGVkX3NsaWNl cyB8IHJlcXVpcmVkX3NsaWNlczsKPiA+ID4gPiA+ICsJdTggc2xpY2VzX2ludGVyc2VjdGlvbiA9 IHJlcXVpcmVkX3NsaWNlczsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJZm9yX2VhY2hfb2xkbmV3 X2ludGVsX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsCj4gPiA+ID4gPiBvbGRfY3J0Y19zdGF0 ZSwgbmV3X2NydGNfc3RhdGUsIGkpCj4gPiA+ID4gPiAgCQkvKiBpZ25vcmUgYWxsb2NhdGlvbnMg Zm9yIGNydGMncyB0aGF0IGhhdmUgYmVlbgo+ID4gPiA+ID4gdHVybmVkCj4gPiA+ID4gPiBvZmYu ICovCj4gPiA+ID4gPiAgCQlpZiAobmV3X2NydGNfc3RhdGUtPmh3LmFjdGl2ZSkKPiA+ID4gPiA+ ICAJCQllbnRyaWVzW2ldID0gb2xkX2NydGNfc3RhdGUtCj4gPiA+ID4gPiA+d20uc2tsLmRkYjsK PiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JLyogSWYgMm5kIERCdWYgc2xpY2UgcmVxdWlyZWQsIGVu YWJsZSBpdCBoZXJlICovCj4gPiA+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx ICYmIHJlcXVpcmVkX3NsaWNlcyA+Cj4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4g PiA+IC0JCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4gPiByZXF1aXJl ZF9zbGljZXMpOwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJEQnVmIHJlcSBzbGljZXMgJWQg aHcgc2xpY2VzICVkXG4iLAo+ID4gPiA+ID4gKwkJICAgICAgcmVxdWlyZWRfc2xpY2VzLCBod19l bmFibGVkX3NsaWNlcyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAq IElmIHNvbWUgb3RoZXIgREJ1ZiBzbGljZSByZXF1aXJlZCwgZW5hYmxlIGl0IGhlcmUsCj4gPiA+ ID4gPiArCSAqIGFzIGhlcmUgd2Ugb25seSBhZGQgbW9yZSBzbGljZXMsIGJ1dCBub3QgcmVtb3Zl IHRvCj4gPiA+ID4gPiBwcmV2ZW50Cj4gPiA+ID4gPiArCSAqIGlzc3VlcyBpZiBzb21lYm9keSBz dGlsbCB1c2VzIHRob3NlLgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTEgJiYgcmVxdWlyZWRfc2xpY2VzICE9Cj4gPiA+ID4gPiBod19lbmFi bGVkX3NsaWNlcykKPiA+ID4gPiA+ICsJCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYs IHNsaWNlc191bmlvbik7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCS8qCj4gPiA+ID4gPiAgCSAq IFdoZW5ldmVyIHRoZSBudW1iZXIgb2YgYWN0aXZlIHBpcGVzIGNoYW5nZXMsIHdlIG5lZWQKPiA+ ID4gPiA+IHRvIG1ha2UKPiA+ID4gPiA+IHN1cmUgd2UKPiA+ID4gPiA+IEBAIC0xNDY4MSw5ICsx NDY5MCwxMiBAQCBzdGF0aWMgdm9pZAo+ID4gPiA+ID4gc2tsX2NvbW1pdF9tb2Rlc2V0X2VuYWJs ZXMoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiA+ID4gPiAgCQl9Cj4gPiA+ ID4gPiAgCX0gd2hpbGUgKHByb2dyZXNzKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JLyogSWYg Mm5kIERCdWYgc2xpY2UgaXMgbm8gbW9yZSByZXF1aXJlZCBkaXNhYmxlIGl0ICovCj4gPiA+ID4g PiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyA8Cj4g PiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191 cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4gPiByZXF1aXJlZF9zbGljZXMpOwo+ID4gPiA+ID4gKwkv Kgo+ID4gPiA+ID4gKwkgKiBJZiBzb21lIG90aGVyIERCdWYgc2xpY2UgaXMgbm90IG5lZWRlZCwg ZGlzYWJsZSBpdAo+ID4gPiA+ID4gaGVyZSwKPiA+ID4gPiA+ICsJICogYXMgaGVyZSB3ZSBvbmx5 IHJlbW92ZSBzbGljZXMsIHdoaWNoIGFyZSBub3QgbmVlZGVkCj4gPiA+ID4gPiBhbnltb3JlLgo+ ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEg JiYgcmVxdWlyZWRfc2xpY2VzICE9Cj4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4g PiA+ICsJCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4gPiBzbGljZXNf aW50ZXJzZWN0aW9uKTsKPiA+ID4gPiAKPiA+ID4gPiBUaGlzIGlzIHN0aWxsIGEgdG90YWxseSB3 cm9uZyBwbGFjZSBmb3IgdGhpcy4gV2UgbmVlZCB0byBiZSBzdXJlCj4gPiA+ID4gdGhlCj4gPiA+ ID4gcGxhbmVzIGhhdmUgc3dpdGNoZWQgb3ZlciB0byB0aGUgbmV3IGRkYiBsYXlvdXQgYmVmb3Jl IHdlIHBvd2VyCj4gPiA+ID4gb2ZmCj4gPiA+ID4gYW55dGhpbmcuCj4gPiA+IAo+ID4gPiBJIGhh dmUganVzdCBtb2RpZmllZCBhbHJlYWR5IGV4aXN0aW5nIGxpbmUgaGVyZSwgbm90IGFkZGVkIGJ5 IG1lLgo+ID4gPiBUaGUgcG9pbnQgb2YgdGhpcyBwYXRjaCBpcyBzdGFydGluZyB0byB1c2Ugc2Vj b25kIERCdWYgc2xpY2UgYnV0Cj4gPiA+IG5vdCBmaXhpbmcgYWxsIGtpbmRzIG9mIGlzc3VlcyBy ZWxhdGVkIHRvIERCdWYgY29kZSBhdCB0aGUgc2FtZQo+ID4gPiB0aW1lLgo+ID4gCj4gPiBZb3Un cmUgcmUtZW5hYmxpbmcgY29kZSBJIGRpc2FibGVkIG9uIHB1cnBvc2UuIEl0IGhhcyB0byBiZSBm aXhlZAo+ID4gcHJvcGVybHkgb3Igbm90IHRvdWNoZWQgYXQgYWxsLiBJbiBoaW5kc2lnaHQgSSBz aG91bGQgaGF2ZSBwcm9iYWJseQo+ID4ganVzdCByaXBwZWQgaXQgYWxsIG91dCB0byBub3QgZ2l2 ZSBwZW9wbGUgYmFkIGlkZWFzLgo+IAo+IC0JLyogSWYgMm5kIERCdWYgc2xpY2UgaXMgbm8gbW9y ZSByZXF1aXJlZCBkaXNhYmxlIGl0ICovCj4gPiA+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExICYmIHJlcXVpcmVkX3NsaWNlcyA8Cj4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNl cykKPiA+ID4gPiA+IC0JCWljbF9kYnVmX3NsaWNlc191cGRhdGUoZGV2X3ByaXYsCj4gPiA+ID4g PiByZXF1aXJlZF9zbGljZXMpOwo+IAo+IEknbSBub3QgcmVlbmFibGluZyBpdCAtIHRoaXMgaXMg Y29kZSBpcyBvdXQgdGhlcmUgcmlnaHQgbm93LgoKSXQncyBfZGVhZF8gY29kZSwgYW5kIGl0J3Mg bGlrZSB0aGF0IG9uIHB1cnBvc2UuIFlvdSdyZSBub3cgYXR0ZW1wdGluZwp0byByZS1lbmFibGUg aXQgd2l0aG91dCBmaXhpbmcgdGhlIHVuZGVybHlpbmcgaXNzdWVzLgoKPiBUaGlzIGlzIGFsbCBh Z2FpbiBhYm91dCBjaGFuZ2luZyBhbGwga2luZHMgb2Ygc3R1ZmYgYXQgdGhlIHNhbWUgdGltZS4K PiAKPiBXaHkgd2UgY2FuJ3QganVzdCBkbyB0aGluZ3Mgc3RlcCBieSBzdGVwPyBZb3UgaGF2ZSBh IHBvaW50IHRoYXQKPiB0aGlzIGlzIHdyb25nIHBsYWNlIG9rLCBidXQgYXMgd2Ugc2VlIGN1cnJl bnQgY29kZSBjYXVzZXMgbm8KPiByZWdyZXNzaW9ucy4gSnVzdCB0ZWxsIG1lIHlvdXIgaWRlYSB3 aGVyZSB0byBwdXQgaXQgYW5kIEkgd2lsbAo+IGRvIHRoYXQsIGlmIHlvdSBkb24ndCBoYXZlIGl0 IHlldCAtIGxldCBpdCBzdGF5IHRoZXJlLCBpZiBDSSBzaG93cwo+IG5vIHJlZ3Jlc3Npb25zIGN1 cnJlbnRseS4gCgpUaGUgc2FtZSBnbG9iYWwgc3RhdGUgdHJpY2tzIGFwcGx5IGhlcmUgYXMgd2l0 aCB0aGUgY2RjbGsvc2FndiBzdHVmZi4KMS4gZW5hYmxlIG5ldyByZXNvdXJjZXMvYnVtcCB1cCBj bG9ja3MKMi4gcmVjb25maWd1cmUgcGxhbmVzL2V0Yy4KMy4gd2FpdCBmb3IgdmJsYW5rcwo0LiBk aXNhYmxlIHVudXNlZCByZXNvdXJjZXMvZHJvcCB0aGUgY2xvY2tzCgo+IAo+ID4gCj4gPiA+IAo+ ID4gPiBPZiBjb3Vyc2UgdGhpcyBpcyBuaWNlIGlkZWEgdG8gZml4IGl0IC0gaWYgdGhhdCBpcyB3 cm9uZyBwbGFuZSwKPiA+ID4gYnV0IGN1cnJlbnQgY29kZSBzb21laG93IGxpdmVzIHdpdGggaXQg YW5kIHByb2JhYmx5IHRoaXMgc2hvdWxkIGJlCj4gPiA+IHdpdGggc29tZSBvdGhlciBwYXRjaC4K PiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIHN0YXRp YyB2b2lkIGludGVsX2F0b21pY19oZWxwZXJfZnJlZV9zdGF0ZShzdHJ1Y3QKPiA+ID4gPiA+IGRy bV9pOTE1X3ByaXZhdGUKPiA+ID4gPiA+ICpkZXZfcHJpdikKPiA+ID4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYwo+ID4g PiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIu Ywo+ID4gPiA+ID4gaW5kZXggY2UxYjY0ZjRkZDQ0Li5hNzhiYzliNjE4NjIgMTAwNjQ0Cj4gPiA+ ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93 ZXIuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5X3Bvd2VyLmMKPiA+ID4gPiA+IEBAIC0xMDMxLDE1ICsxMDMxLDYgQEAgc3RhdGljIGJv b2wKPiA+ID4gPiA+IGdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZQo+ID4gPiA+ID4gKmRldl9wcml2LAo+ID4gPiA+ID4gIAkJKEk5MTVfUkVBRChE Q19TVEFURV9FTikgJgo+ID4gPiA+ID4gRENfU1RBVEVfRU5fVVBUT19EQzVfREM2X01BU0spID09 IDApOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC1zdGF0aWMgdm9pZCBnZW45 X2Fzc2VydF9kYnVmX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gPiA+ICpk ZXZfcHJpdikKPiA+ID4gPiA+IC17Cj4gPiA+ID4gPiAtCXUzMiB0bXAgPSBJOTE1X1JFQUQoREJV Rl9DVEwpOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQlXQVJOKCh0bXAgJiAoREJVRl9QT1dFUl9T VEFURSB8IERCVUZfUE9XRVJfUkVRVUVTVCkpICE9Cj4gPiA+ID4gPiAtCSAgICAgKERCVUZfUE9X RVJfU1RBVEUgfCBEQlVGX1BPV0VSX1JFUVVFU1QpLAo+ID4gPiA+ID4gLQkgICAgICJVbmV4cGVj dGVkIERCdWYgcG93ZXIgcG93ZXIgc3RhdGUgKDB4JTA4eClcbiIsCj4gPiA+ID4gPiB0bXApOwo+ ID4gPiA+ID4gLX0KPiA+ID4gPiA+IC0KPiA+ID4gPiA+ICBzdGF0aWMgdm9pZCBnZW45X2Rpc2Fi bGVfZGNfc3RhdGVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYp Cj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUgY2RjbGtf c3RhdGUgPSB7fTsKPiA+ID4gPiA+IEBAIC0xMDU1LDggKzEwNDYsNiBAQCBzdGF0aWMgdm9pZCBn ZW45X2Rpc2FibGVfZGNfc3RhdGVzKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gPiA+ID4gPiAgCS8qIENhbid0IHJlYWQgb3V0IHZvbHRhZ2VfbGV2ZWwgc28g Y2FuJ3QgdXNlCj4gPiA+ID4gPiBpbnRlbF9jZGNsa19jaGFuZ2VkKCkgKi8KPiA+ID4gPiA+ICAJ V0FSTl9PTihpbnRlbF9jZGNsa19uZWVkc19tb2Rlc2V0KCZkZXZfcHJpdi0+Y2RjbGsuaHcsCj4g PiA+ID4gPiAmY2RjbGtfc3RhdGUpKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JZ2VuOV9hc3Nl cnRfZGJ1Zl9lbmFibGVkKGRldl9wcml2KTsKPiA+ID4gPiA+IC0KPiA+ID4gPiA+ICAJaWYgKElT X0dFTjlfTFAoZGV2X3ByaXYpKQo+ID4gPiA+ID4gIAkJYnh0X3ZlcmlmeV9kZGlfcGh5X3Bvd2Vy X3dlbGxzKGRldl9wcml2KTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IEBAIC00MjU0LDMxICs0MjQz LDUxIEBAIHN0YXRpYyB2b2lkIGdlbjlfZGJ1Zl9kaXNhYmxlKHN0cnVjdAo+ID4gPiA+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ID4gPiAgCWludGVsX2RidWZfc2xpY2Vfc2V0 KGRldl9wcml2LCBEQlVGX0NUTCwgZmFsc2UpOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ ID4gPiA+IC1zdGF0aWMgdTggaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYpCj4gPiA+ID4gPiAraW50IGludGVsX2RidWZfbWF4 X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiA+ID4gPiAgewo+ ID4gPiA+ID4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ID4gPiA+ID4gLQkJcmV0 dXJuIDE7Cj4gPiA+ID4gPiAtCXJldHVybiAyOwo+ID4gPiA+ID4gKwlyZXR1cm4gSU5URUxfSU5G TyhkZXZfcHJpdiktPnN1cHBvcnRlZF9zbGljZXM7Cj4gPiA+ID4gPiArfQo+ID4gPiA+IAo+ID4g PiA+IEtpbmRhIHBvaW50bGVzcyBmdW5jdGlvbiBub3cuICdzdXBwb3J0ZWRfc2xpY2VzJyBpcyBu b3QgYSB2ZXJ5Cj4gPiA+ID4gZ29vZAo+ID4gPiA+IG5hbWUuIFNob3VsZCBiZSAnbnVtX2RidWZf c2xpY2VzJyBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuCj4gPiA+IAo+ID4gPiBTdXBw b3J0ZWQgc2xpY2VzIHJlYWxseSBtZWFucyBob3cgbXVjaCBzbGljZXMgd2Ugc3VwcG9ydCBpbgo+ ID4gPiBoYXJkd2FyZS4KPiA+ID4gbnVtX2RidWZfc2xpY2VzIHdpbGwgbm90IHJlZmxlY3QgdGhh dCwgaXQgd2lsbCBiZSBtb3JlIGFtYmlnaW91cy4KPiA+ID4gSSBkb24ndCBsaWtlIHRoaXMgbmFt ZS4KPiA+IAo+ID4gc3VwcG9ydGVkX3NsaWNlcyBkb2Vzbid0IGV2ZW4gc2F5ICJkYnVmIiBhbnl3 aGVyZS4gU28gaXQncyBldmVuIG1vcmUKPiA+IGFtYmlndW91cy4gQWxzbyB3ZSBhbHJlYWR5IGhh dmUgbnVtX3BpcGVzLCBudW1fc3ByaXRlcywgZXRjLgo+IAo+IC4uYW5kIGluIGN1cnJlbnQgY29k ZSB3ZSBoYXZlLi4uICJlbmFibGVkX3NsaWNlcyIsIG5vPyBPdWNoISA6KSBJUyB0aGlzCj4gcmVh bGx5IHRoYXQgaW1wb3J0YW50IGFuZCB3b3J0aCBhcmd1aW5nIGF0IHRoZSB2ZXJ5IGxhc3QgbW9t ZW50Pwo+IHdoZXRoZXIgbnVtYmVyIG9mCj4gc3VwcG9ydGVkX3NsaWNlc19pbl9oYXJkd2FyZSwg c2hvdWxkIGJlIG5hbWVkICJzdXBwb3J0ZWQgc2xpY2VzIiBvcgo+ICJudW1fZGJ1Zl9zbGljZXMi PyBJZiB5ZXMsIGxldHMgZ28gb24sIG1pc3Mgc29tZSB0YXJnZXRzIGFuZCBjb250aW51ZQo+IGRp c2N1c3NpbmcgdGhpcyAic29vb28gaW1wb3J0YW50IiB0aGluZy4gCj4gCj4gU29tZSBvbmUgbWln aHQgY29tZSB1cCB0aGF0IGl0IGlzIGNhbGxlZCAibnVtX3NsaWNlcyIgb3IKPiAiZGJ1Zl9udW1f c2xpY2VzIi4gU2VyaW91c2x5LCBtYXkgYmUgInN1cHBvcnRlZF9udW1fZGJ1Zl9zbGljZXMiIHRv Cj4ga2VlcCBldmVyeW9uZXMgYmxvYXRlZCBlZ29zIGhhcHB5Pz8KPiAKPiAKPiA+IAo+ID4gPiAK PiA+ID4gPiAKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICt2b2lkIGljbF9wcm9ncmFtX2RidWZfc2xp Y2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYpCj4gPiA+ID4g PiArewo+ID4gPiA+ID4gKwljb25zdCB1OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9wcml2LQo+ ID4gPiA+ID4gPiB3bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzOwo+ID4gPiA+IAo+ID4gPiA+ IFNlZW1zIGEgcmF0aGVyIHBvaW50bGVzcyB2YXJpYWJsZS4gY29uc3QgYXQgbGVhc3QgaXMgcG9p bnRsZXNzLgo+ID4gPiA+IAo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpY2xfZGJ1Zl9zbGljZXNf dXBkYXRlKGRldl9wcml2LCBod19lbmFibGVkX3NsaWNlcyk7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ ID4gIAo+ID4gPiA+ID4gIHZvaWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCQkJICAgIHU4IHJlcV9zbGljZXMpCj4g PiA+ID4gPiAgewo+ID4gPiA+ID4gLQljb25zdCB1OCBod19lbmFibGVkX3NsaWNlcyA9IGRldl9w cml2LQo+ID4gPiA+ID4gPiB3bS5za2xfaHcuZGRiLmVuYWJsZWRfc2xpY2VzOwo+ID4gPiA+ID4g Cj4gPiA+ID4gPiAtCWJvb2wgcmV0Owo+ID4gPiA+ID4gKwlib29sIHJldCA9IHRydWU7Cj4gPiA+ ID4gPiArCWludCBpOwo+ID4gPiA+ID4gKwlpbnQgbWF4X3NsaWNlcyA9IGludGVsX2RidWZfbWF4 X3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWlmIChyZXFfc2xpY2Vz ID4gaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKGRldl9wcml2KSkgewo+ID4gPiA+ID4gKwlpZiAoaHdl aWdodDgocmVxX3NsaWNlcykgPgo+ID4gPiA+ID4gaW50ZWxfZGJ1Zl9tYXhfc2xpY2VzKGRldl9w cml2KSkgewo+ID4gPiA+ID4gIAkJRFJNX0VSUk9SKCJJbnZhbGlkIG51bWJlciBvZiBkYnVmIHNs aWNlcwo+ID4gPiA+ID4gcmVxdWVzdGVkXG4iKTsKPiA+ID4gPiA+ICAJCXJldHVybjsKPiA+ID4g PiA+ICAJfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gLQlpZiAocmVxX3NsaWNlcyA9PSBod19lbmFi bGVkX3NsaWNlcyB8fCByZXFfc2xpY2VzID09IDApCj4gPiA+ID4gPiAtCQlyZXR1cm47Cj4gPiA+ ID4gPiArCURSTV9ERUJVR19LTVMoIlVwZGF0aW5nIGRidWYgc2xpY2VzIHRvICV4XG4iLAo+ID4g PiA+ID4gcmVxX3NsaWNlcyk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWlmIChyZXFfc2xpY2Vz ID4gaHdfZW5hYmxlZF9zbGljZXMpCj4gPiA+ID4gPiAtCQlyZXQgPSBpbnRlbF9kYnVmX3NsaWNl X3NldChkZXZfcHJpdiwKPiA+ID4gPiA+IERCVUZfQ1RMX1MyLAo+ID4gPiA+ID4gdHJ1ZSk7Cj4g PiA+ID4gPiAtCWVsc2UKPiA+ID4gPiA+IC0JCXJldCA9IGludGVsX2RidWZfc2xpY2Vfc2V0KGRl dl9wcml2LAo+ID4gPiA+ID4gREJVRl9DVExfUzIsCj4gPiA+ID4gPiBmYWxzZSk7Cj4gPiA+ID4g PiArCWZvciAoaSA9IDA7IGkgPCBtYXhfc2xpY2VzOyBpKyspIHsKPiA+ID4gPiA+ICsJCWludCBz bGljZV9iaXQgPSBCSVQoaSk7Cj4gPiA+ID4gPiArCQlib29sIHNsaWNlX3NldCA9IChzbGljZV9i aXQgJiByZXFfc2xpY2VzKSAhPSAwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJc3dpdGNoIChz bGljZV9iaXQpIHsKPiA+ID4gPiA+ICsJCWNhc2UgREJVRl9TMV9CSVQ6Cj4gPiA+ID4gPiArCQkJ cmV0ID0gcmV0ICYmCj4gPiA+ID4gPiBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwKPiA+ ID4gPiA+ICsJCQkJCQkJICBEQlVGXwo+ID4gPiA+ID4gQ1RMX1MxLAo+ID4gPiA+ID4gKwkJCQkJ CQkgIHNsaWNlCj4gPiA+ID4gPiBfc2V0KTsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ ICsJCWNhc2UgREJVRl9TMl9CSVQ6Cj4gPiA+ID4gPiArCQkJcmV0ID0gcmV0ICYmCj4gPiA+ID4g PiBpbnRlbF9kYnVmX3NsaWNlX3NldChkZXZfcHJpdiwKPiA+ID4gPiA+ICsJCQkJCQkJICBEQlVG Xwo+ID4gPiA+ID4gQ1RMX1MyLAo+ID4gPiA+ID4gKwkJCQkJCQkgIHNsaWNlCj4gPiA+ID4gPiBf c2V0KTsKPiA+ID4gPiAKPiA+ID4gPiBUaGUgcmV0dXJuIHZhbHVlIG9uIGludGVsX2RidWZfc2xp Y2Vfc2V0KCkgc2VlbXMgcG9pbnRsZXNzLiBJJ2QKPiA+ID4gPiBudWtlCj4gPiA+ID4gaXQuCj4g PiA+ID4gCj4gPiA+ID4gQWxzbyBhcyBsb25nIHlvdSBoYXZlIGludGVsX2RidWZfc2xpY2Vfc2V0 KCkgSSdkIHByb2JhYmx5IGp1c3QKPiA+ID4gPiBwYXNzCj4gPiA+ID4gdGhlCj4gPiA+ID4gc2xp Y2UgaW5kZXggdGhlcmUgYW5kIGxldCBpdCBkZWFsIHdpdGggdGhlIHJlZ2lzdGVyIGRldGFpbHMu Cj4gPiA+ID4gREJVRl9DVEwKPiA+ID4gPiBzaG91bGQgcHJvYmFibHkgYmUgcGFyYW1ldHJpemVk IGFzIHdlbGwgc28geW91IGRvbid0IG5lZWQKPiA+ID4gPiBhbm5veWluZwo+ID4gPiA+IHN3aXRj aAo+ID4gPiA+IHN0YXRlbWVudHMuCj4gPiA+IAo+ID4gPiBXaGF0IGlmIGl0IGZhaWxzPyBTaG91 bGRuJ3Qgd2Ugc3RpbGwgaGF2ZSBzb21lIGNsdWUgd2hhdCBzdGF0ZSBkbwo+ID4gPiB3ZQo+ID4g PiBoYXZlL2hhZCBhdCB0aGUgbW9tZW50Pwo+ID4gCj4gPiBJdCBpZiBmYWlscyB5b3UgbG9nIGFu IGVycm9yIGFuZCBrZWVwIGdvaW5nLgo+IAo+IEFoIHN1cmUuIEFuZCBsZXQgaHcvc3cgc3RhdGUg YmUgY29tcGxldGVseSBkaWZmZXJlbnQuCj4gQWxzbyBzZWUgbmV4dCBjb21tZW50IGFib3V0IHRo aXMuCj4gCj4gPiAKPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ID4g PiArCQlkZWZhdWx0Ogo+ID4gPiA+ID4gKwkJCU1JU1NJTkdfQ0FTRShzbGljZV9iaXQpOwo+ID4g PiA+ID4gKwkJfQo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCWlmIChyZXQp Cj4gPiA+ID4gPiAgCQlkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9Cj4g PiA+ID4gPiByZXFfc2xpY2VzOwo+ID4gPiA+ID4gQEAgLTQyODYsNDAgKzQyOTUsMjEgQEAgdm9p ZCBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgc3RhdGljIHZvaWQgaWNsX2RidWZf ZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ID4gPiA+ICB7Cj4g PiA+ID4gPiAtCUk5MTVfV1JJVEUoREJVRl9DVExfUzEsIEk5MTVfUkVBRChEQlVGX0NUTF9TMSkg fAo+ID4gPiA+ID4gREJVRl9QT1dFUl9SRVFVRVNUKTsKPiA+ID4gPiA+IC0JSTkxNV9XUklURShE QlVGX0NUTF9TMiwgSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSB8Cj4gPiA+ID4gPiBEQlVGX1BPV0VS X1JFUVVFU1QpOwo+ID4gPiA+ID4gLQlQT1NUSU5HX1JFQUQoREJVRl9DVExfUzIpOwo+ID4gPiA+ ID4gLQo+ID4gPiA+ID4gLQl1ZGVsYXkoMTApOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQlpZiAo IShJOTE1X1JFQUQoREJVRl9DVExfUzEpICYgREJVRl9QT1dFUl9TVEFURSkgfHwKPiA+ID4gPiA+ IC0JICAgICEoSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9XRVJfU1RBVEUpKQo+ID4g PiA+ID4gLQkJRFJNX0VSUk9SKCJEQnVmIHBvd2VyIGVuYWJsZSB0aW1lb3V0XG4iKTsKPiA+ID4g PiA+IC0JZWxzZQo+ID4gPiA+ID4gLQkJLyoKPiA+ID4gPiA+IC0JCSAqIEZJWE1FOiBmb3Igbm93 IHByZXRlbmQgdGhhdCB3ZSBvbmx5IGhhdmUgMQo+ID4gPiA+ID4gc2xpY2UsCj4gPiA+ID4gPiBz ZWUKPiA+ID4gPiA+IC0JCSAqIGludGVsX2VuYWJsZWRfZGJ1Zl9zbGljZXNfbnVtKCkuCj4gPiA+ ID4gPiAtCQkgKi8KPiA+ID4gPiA+IC0JCWRldl9wcml2LT53bS5za2xfaHcuZGRiLmVuYWJsZWRf c2xpY2VzID0gMTsKPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ICsJICogSnVzdCBwb3dlciB1cCAx IHNsaWNlLCB3ZSB3aWxsCj4gPiA+ID4gPiArCSAqIGZpZ3VyZSBvdXQgbGF0ZXIgd2hpY2ggc2xp Y2VzIHdlIGhhdmUgYW5kIHdoYXQgd2UKPiA+ID4gPiA+IG5lZWQuCj4gPiA+ID4gPiArCSAqLwo+ ID4gPiA+ID4gKwlkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9IERCVUZf UzFfQklUOwo+ID4gPiA+IAo+ID4gPiA+IFRoYXQgc3R1ZmYgcmVhbGx5IHNob3VsZG4ndCBiZSBt b2RpZmllZCBieSBsb3cgbGV2ZWwgZnVuY3Rpb25zLgo+ID4gPiA+IFRoZSBpbnRpYWwgdmFsdWUg c2hvdWxkIGNvbWUgZnJvbSByZWFkb3V0LCBhbmQgYWZ0ZXIgdGhhdCBpdAo+ID4gPiA+IHNob3Vs ZAo+ID4gPiA+IGJlIGFkanVzdGVkIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgYXRvbWljIHN0YXRl Lgo+ID4gPiAKPiA+ID4gV2VsbCwgYXMgeW91IGNhbiBzZWUgY3VycmVudGx5IHRoaXMgaXMgZXZl biB3b3JzZSAtIGhhcyBzb21lIHdlaXJkCj4gPiA+IGhhcmRjb2RlZCBzdHVmZiBhbmQgaXMgbW9k aWZpZWQgbGlrZSB0aGF0LiBBbHNvIGlmIHdlIGFyZSBlbmFibGluZwo+ID4gPiB0aGUgCj4gPiA+ IGRidWYgc2xpY2VzLCBzaG91bGRuJ3Qgd2UgcmVhbGx5IGRldGVybWluZSB3aGF0IHZhbHVlIHNo b3VsZCBiZQo+ID4gPiB0aGVyZT8KPiA+ID4gCj4gPiA+IEFsc28gSSB3b3VsZG4ndCByZWFsbHkg YWx3YXlzIHRydXN0IHRoZSByZWFkb3V0LCBhcyB0byBtZSBpdCBzZWVtcwo+ID4gPiBpY2VsYWtl IHJlc2V0cyBpdCBjb25zdGFudGx5IHRvIDIgYWZ0ZXIgc3VzcGVuZC9yZXN1bWUuIAo+ID4gCj4g PiBUaGUgcG9pbnQgb2YgcmVhZG91dCBpcyB0aGF0IHdlIHN5bmNyaG9uaXplIG91ciBzb2Z0d2Fy ZSBzdGF0ZSB3aXRoCj4gPiB0aGUKPiA+IGN1cnJlbnQgc3RhdGUgb2YgaGFyZHdhcmUgd2l0aG91 dCBoYXZpbmcgdG8gbW9kaWZ5IHRoZSBoYXJkd2FyZQo+ID4gc3RhdGUuCj4gPiBPbmNlIHN5bmNo cm9uaXplZCB0aGUgZHJpdmVyIHRha2VzIG92ZXIgYW5kIHRlbGxzIHRoZSBodyB3aGF0IHRvIGRv Lgo+IAo+IFRoYXQgaXMgZXNwZWNpYWxseSBuaWNlIGFmdGVyIHlvdSBzYXkgInJlcG9ydCBlcnJv ciBhbmQgZG9uJ3QgY2FyZSIKPiB3aGVuIEkgcmVhbGx5IHdhbnQgdG8gcmVmbGVjdCBodyBzdGF0 ZSBpbiBzdyBzdGF0ZSwgYnkgY2hlY2tpbmcgd2hldGhlcgo+IHdlIGNvdWxkIHNldCBkYnVmIHNs aWNlcyBvciBub3QuIAo+IE5vdyB5b3Ugc2F5IHRoYXQgd2UgbmVlZCB0byBzeW5jaHJvbml6ZSBz b2Z0d2FyZSBzdGF0ZSB3aXRoIGh3IHN0YXRlLAo+IGhvd2V2ZXIgaWYgSSBmYWlsIHRvIG1vZGlm eSBpdCAtIHRoZW4gIndobyBjYXJlcyIuCgpZZXMuIElmIHlvdSBmYWlsIHRvIG1vZGlmeSB0aGUg aGFyZHdhcmUgc3RhdGUgdGhlIHdob2xlIHRoaW5nIGlzCmJyb2tlbiBhbnl3YXkuIFRoZXJlJ3Mg aXMgKm5vdGhpbmcqIHdlIGNhbiBkbyBhdCB0aGlzIHN0YWdlIGluIHRoZQpjb21taXQgdG8gZml4 IGl0LgoKPiAKPiAKPiA+IAo+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiA+ICsJaWNsX3Byb2dyYW1f ZGJ1Zl9zbGljZXMoZGV2X3ByaXYpOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ ICBzdGF0aWMgdm9pZCBpY2xfZGJ1Zl9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4g PiA+ID4gPiAqZGV2X3ByaXYpCj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gLQlJOTE1X1dSSVRFKERC VUZfQ1RMX1MxLCBJOTE1X1JFQUQoREJVRl9DVExfUzEpICYKPiA+ID4gPiA+IH5EQlVGX1BPV0VS X1JFUVVFU1QpOwo+ID4gPiA+ID4gLQlJOTE1X1dSSVRFKERCVUZfQ1RMX1MyLCBJOTE1X1JFQUQo REJVRl9DVExfUzIpICYKPiA+ID4gPiA+IH5EQlVGX1BPV0VSX1JFUVVFU1QpOwo+ID4gPiA+ID4g LQlQT1NUSU5HX1JFQUQoREJVRl9DVExfUzIpOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQl1ZGVs YXkoMTApOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQlpZiAoKEk5MTVfUkVBRChEQlVGX0NUTF9T MSkgJiBEQlVGX1BPV0VSX1NUQVRFKSB8fAo+ID4gPiA+ID4gLQkgICAgKEk5MTVfUkVBRChEQlVG X0NUTF9TMikgJiBEQlVGX1BPV0VSX1NUQVRFKSkKPiA+ID4gPiA+IC0JCURSTV9FUlJPUigiREJ1 ZiBwb3dlciBkaXNhYmxlIHRpbWVvdXQhXG4iKTsKPiA+ID4gPiA+IC0JZWxzZQo+ID4gPiA+ID4g LQkJLyoKPiA+ID4gPiA+IC0JCSAqIEZJWE1FOiBmb3Igbm93IHByZXRlbmQgdGhhdCB0aGUgZmly c3Qgc2xpY2UKPiA+ID4gPiA+IGlzCj4gPiA+ID4gPiBhbHdheXMKPiA+ID4gPiA+IC0JCSAqIGVu YWJsZWQsIHNlZQo+ID4gPiA+ID4gaW50ZWxfZW5hYmxlZF9kYnVmX3NsaWNlc19udW0oKS4KPiA+ ID4gPiA+IC0JCSAqLwo+ID4gPiA+ID4gLQkJZGV2X3ByaXYtPndtLnNrbF9ody5kZGIuZW5hYmxl ZF9zbGljZXMgPSAxOwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkgKiBEaXNhYmxlIGFsbCBz bGljZXMKPiA+ID4gPiA+ICsJICovCj4gPiA+ID4gPiArCWRldl9wcml2LT53bS5za2xfaHcuZGRi LmVuYWJsZWRfc2xpY2VzID0gMDsKPiA+ID4gPiA+ICsJaWNsX3Byb2dyYW1fZGJ1Zl9zbGljZXMo ZGV2X3ByaXYpOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICBzdGF0aWMgdm9p ZCBpY2xfbWJ1c19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXlfcG93ZXIuaAo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXlfcG93ZXIuaAo+ID4gPiA+ID4gaW5kZXggMWRhMDRmM2UwZmIzLi5iNzA1N2Q2OGFk NzggMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXlfcG93ZXIuaAo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmgKPiA+ID4gPiA+IEBAIC0zMTEsOCArMzExLDEw IEBAIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2FzeW5jKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwKPiA+ID4gPiA+ICAJZm9yICgod2YpID0gaW50ZWxfZGlzcGxheV9w b3dlcl9nZXQoKGk5MTUpLCAoZG9tYWluKSk7Cj4gPiA+ID4gPiAod2YpOyBcCj4gPiA+ID4gPiAg CSAgICAgaW50ZWxfZGlzcGxheV9wb3dlcl9wdXRfYXN5bmMoKGk5MTUpLCAoZG9tYWluKSwKPiA+ ID4gPiA+ICh3ZikpLAo+ID4gPiA+ID4gKHdmKSA9IDApCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAr aW50IGludGVsX2RidWZfbWF4X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwo+ID4gPiA+ID4gIHZvaWQgaWNsX2RidWZfc2xpY2VzX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCQkJICAgIHU4IHJlcV9zbGljZXMpOwo+ ID4gPiA+ID4gK3ZvaWQgaWNsX3Byb2dyYW1fZGJ1Zl9zbGljZXMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUKPiA+ID4gPiA+ICpkZXZfcHJpdik7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgdm9pZCBj aHZfcGh5X3Bvd2VyZ2F0ZV9sYW5lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ ID4gPiA+ICAJCQkgICAgIGJvb2wgb3ZlcnJpZGUsIHVuc2lnbmVkIGludCBtYXNrKTsKPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gPiA+ID4g PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+ID4gPiA+IGluZGV4IDgyZTRl NmJmMDhjMy4uOTY3NDFlNjg2MzNhIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYwo+ID4gPiA+ID4gQEAgLTUxLDYgKzUxLDcgQEAKPiA+ID4gPiA+ICAjaW5jbHVk ZSAiZGlzcGxheS9pbnRlbF9idy5oIgo+ID4gPiA+ID4gICNpbmNsdWRlICJkaXNwbGF5L2ludGVs X2NkY2xrLmgiCj4gPiA+ID4gPiAgI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBl cy5oIgo+ID4gPiA+ID4gKyNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuaCIK PiA+ID4gPiA+ICAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kcC5oIgo+ID4gPiA+ID4gICNpbmNs dWRlICJkaXNwbGF5L2ludGVsX2ZiZGV2LmgiCj4gPiA+ID4gPiAgI2luY2x1ZGUgImRpc3BsYXkv aW50ZWxfaG90cGx1Zy5oIgo+ID4gPiA+ID4gQEAgLTI1ODgsNiArMjU4OSwxMCBAQCBzdGF0aWMg aW50IGludGVsX3J1bnRpbWVfcmVzdW1lKHN0cnVjdAo+ID4gPiA+ID4gZGV2aWNlICprZGV2KQo+ ID4gPiA+ID4gIAlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpCj4gPiA+ID4gPiAgCQlyZXQgPSB2bHZfcmVzdW1lX3ByZXBhcmUoZGV2X3ByaXYs IHRydWUpOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gKwkvKiBXZWlyZCBoYWNrIHRvIGZpeCBJQ0wg aGFyZHdhcmUgYnVnLCBhcyBpdCByZXNldHMKPiA+ID4gPiA+IERCVUYgc2xpY2VzCj4gPiA+ID4g PiByZWcgKi8KPiA+ID4gPiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPT0gMTEpCj4gPiA+ ID4gPiArCQlpY2xfcHJvZ3JhbV9kYnVmX3NsaWNlcyhkZXZfcHJpdik7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiAgCWludGVsX3VuY29yZV9ydW50aW1lX3Jlc3VtZSgmZGV2X3ByaXYtPnVuY29yZSk7 Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCWludGVsX3J1bnRpbWVfcG1fZW5hYmxlX2ludGVycnVw dHMoZGV2X3ByaXYpOwo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ ID4gPiA+ID4gaW5kZXggN2UwZjY3YmFiZTIwLi5hMzk2OTc3YzljMmQgMTAwNjQ0Cj4gPiA+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+ID4gPiBAQCAtODA0LDcgKzgwNCw3 IEBAIHN0YXRpYyBpbmxpbmUgYm9vbAo+ID4gPiA+ID4gc2tsX2RkYl9lbnRyeV9lcXVhbChjb25z dAo+ID4gPiA+ID4gc3RydWN0IHNrbF9kZGJfZW50cnkgKmUxLAo+ID4gPiA+ID4gIH0KPiA+ID4g PiA+ICAKPiA+ID4gPiA+ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKPiA+ID4gPiAKPiA+ ID4gPiBUaGlzIHN0cnVjdCBpcyBxdWl0ZSBwb2ludGxlc3MuIFNob3VsZCBiZSBraWxsZWQgb2Zm Lgo+ID4gPiAKPiA+ID4gTGVnYWN5IHN0dWZmLCBub3QgYWRkZWQgYnkgbWUuIFF1aXRlIGZpbmUg d2l0aCByZW1vdmluZyBpdCAtIAo+ID4gPiBidXQgc2hvdWxkIHdlIHJlYWxseSBkbyBhbGwgdGhp cyBhdCB0aGUgc2FtZSB0aW1lIGFuZCBpbiBzYW1lCj4gPiA+IHBhdGNoPyAKPiA+IAo+ID4gTm90 IHRoZSBzYW1lIHBhdGNoLiBCdXQgY2xlYW4gdXAgdGhlIGNvYndlYnMgZmlyc3QsIHRoZW4gYWRk IHRoZSBuZXcKPiA+IHN0dWZmLiBNdWNoIGVhc2llciB0aGF0IHdheSBhcm91bmQuCj4gCj4gVGhl cmUgaXMgYSBzaGl0IHRvbiBsb2FkIG9mIGNvYndlYnMgdG8gY2xlYW4uIFBlcnNvbmFsbHkgbXkg b3BpbmlvbiBpcwo+IHRoYXQgY3VycmVudCBkYnVmIGNvbnRyb2xsaW5nIGNvZGUgaXMgdG90YWwg Z2FyYmFnZSAtIHdoaWNoIGhhcyBsb3RzIG9mCj4gaGFyZGNvZGVkIHN0dWZmLiBHb29kIGx1Y2sg ZW5hYmxpbmcgb25seSBzZWNvbmQgZGJ1ZiBzbGljZSwgZ29vZCBsdWNrCj4gZGlzYWJsaW5nL2Vu YWJsaW5nIGRidWYgcHJvcGVybHkuLi4uCj4gV2hlcmUgeW91IHdlcmUsIHdoZW4gdGhpcyB3YXMg Y29tbWl0dGVkIHRoZW4/CgpMb29raW5nIGF0IHNvbWV0aGluZyBlbHNlIHVuZm9ydHVuYXRlbHku IEFsc28gaXQgaGFzIGp1c3Qga2VwdApiaXRyb3R0aW5nIHNpbmNlIGJlY2F1c2Ugbm8gb25lIGhh cyBjYXJlZC4KCj4gCj4gSWYgd2UgbmVlZCB0byBmaXggaXQgLSBmaW5lLiBCdXQgbWF5IGJlIHdl IHNob3VsZCBkbyBpdCBpbiBzdGFnZXM/Cj4gUG9pbnQgb2YgdGhpcyBwYXRjaCBpcyAiZW5hYmxl IHNlY29uZCBkYnVmIHNsaWNlIiwgbmV4dCBwYXRjaCAicmVtb3ZlIAo+IHVubmVlZGVkIHN0cnVj dHMiIGFuZCBzbyBvbi4gCj4gV2hpbGUgeW91IHdhbnQgbWUgdG8gc2h1ZmZsZSBldmVyeXRoaW5n IGF0IHRoZSBzYW1lIHRpbWUsIHdoaWNoIGlzIG5vdAo+IGdvb2QgaWRlYSwgZXNwZWNpYWxseSBj b25zaWRlcmluZyBjb21wbGV4aXR5IGFuZCBhbW91bnQgb2YgbGVnYWN5IHN0dWZmCj4gd2UgY3Vy cmVudGx5IGhhdmUuCgpCdWlsZGluZyBuZXcgc3R1ZmYgb24gdG9wIG9mIGEgZGVjb21wb3Npbmcg Z2FyYmFnZSBwaWxlIGlzIG5vdAphIGdvb2QgaWRlYTogYSkgaXQncyBoYXJkZXIgdGhhbiBidWls ZGluZyBvbiBjbGVhbiBmb3VuZGF0aW9uLApiKSBpdCdsbCBwcm9iYWJseSBmYWxsIG92ZXIgYW5k IGdldCBidXJpZWQgaW4gdGhlIG9sZCBnYXJiYWdlCmF0IHdoaWNoIHBvaW50IHlvdSdyZSBsaWtl bHkgZ29pbmcgdG8gYmUgcmlnaHQgYmFjayB3aGVyZSB5b3UKc3RhcnRlZC4KCj4gCj4gPiAKPiA+ ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAtCXU4IGVuYWJsZWRfc2xpY2VzOyAvKiBHRU4xMSBoYXMg Y29uZmlndXJhYmxlIDIgc2xpY2VzCj4gPiA+ID4gPiAqLwo+ID4gPiA+ID4gKwl1OCBlbmFibGVk X3NsaWNlczsgICAvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBlbmFibGVkCj4gPiA+ID4gPiBEQnVm Cj4gPiA+ID4gPiBzbGljZXMgKi8KPiA+ID4gPiA+ICB9Owo+ID4gPiA+ID4gIAo+ID4gPiA+ID4g IHN0cnVjdCBza2xfZGRiX3ZhbHVlcyB7Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wY2kuYwo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BjaS5jCj4gPiA+ID4gPiBpbmRleCAxYmI3MDFkMzJhNWQuLjhlODZhZjUwNTczMCAxMDA2 NDQKPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiA+ID4g PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMKPiA+ID4gPiA+IEBAIC02 MTQsNyArNjE0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbwo+ID4g PiA+ID4gaW50ZWxfY2hlcnJ5dmlld19pbmZvID0gewo+ID4gPiA+ID4gIAkuaGFzX2d0X3VjID0g MSwgXAo+ID4gPiA+ID4gIAkuZGlzcGxheS5oYXNfaGRjcCA9IDEsIFwKPiA+ID4gPiA+ICAJLmRp c3BsYXkuaGFzX2lwYyA9IDEsIFwKPiA+ID4gPiA+IC0JLmRkYl9zaXplID0gODk2Cj4gPiA+ID4g PiArCS5kZGJfc2l6ZSA9IDg5NiwgXAo+ID4gPiA+ID4gKwkuc3VwcG9ydGVkX3NsaWNlcyA9IDEK PiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAjZGVmaW5lIFNLTF9QTEFURk9STSBcCj4gPiA+ID4gPiAg CUdFTjlfRkVBVFVSRVMsIFwKPiA+ID4gPiA+IEBAIC02NTAsNiArNjUxLDcgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbwo+ID4gPiA+ID4gaW50ZWxfc2t5bGFrZV9ndDRf aW5mbyA9IHsKPiA+ID4gPiA+ICAJR0VOKDkpLCBcCj4gPiA+ID4gPiAgCS5pc19scCA9IDEsIFwK PiA+ID4gPiA+ICAJLmRpc3BsYXkuaGFzX2hvdHBsdWcgPSAxLCBcCj4gPiA+ID4gPiArCS5zdXBw b3J0ZWRfc2xpY2VzID0gMSwgXAo+ID4gPiA+ID4gIAkuZW5naW5lX21hc2sgPSBCSVQoUkNTMCkg fCBCSVQoVkNTMCkgfCBCSVQoQkNTMCkgfAo+ID4gPiA+ID4gQklUKFZFQ1MwKSwKPiA+ID4gPiA+ IFwKPiA+ID4gPiA+ICAJLnBpcGVfbWFzayA9IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQikgfCBC SVQoUElQRV9DKSwgXAo+ID4gPiA+ID4gIAkuaGFzXzY0Yml0X3JlbG9jID0gMSwgXAo+ID4gPiA+ ID4gQEAgLTczNyw2ICs3MzksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9p bmZvCj4gPiA+ID4gPiBpbnRlbF9jb2ZmZWVsYWtlX2d0M19pbmZvID0gewo+ID4gPiA+ID4gIAlH RU45X0ZFQVRVUkVTLCBcCj4gPiA+ID4gPiAgCUdFTigxMCksIFwKPiA+ID4gPiA+ICAJLmRkYl9z aXplID0gMTAyNCwgXAo+ID4gPiA+ID4gKwkuc3VwcG9ydGVkX3NsaWNlcyA9IDEsIFwKPiA+ID4g PiA+ICAJLmRpc3BsYXkuaGFzX2RzYyA9IDEsIFwKPiA+ID4gPiA+ICAJLmhhc19jb2hlcmVudF9n Z3R0ID0gZmFsc2UsIFwKPiA+ID4gPiA+ICAJR0xLX0NPTE9SUwo+ID4gPiA+ID4gQEAgLTc3Myw2 ICs3NzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvCj4gPiA+ID4g PiBpbnRlbF9jYW5ub25sYWtlX2luZm8gPSB7Cj4gPiA+ID4gPiAgCX0sIFwKPiA+ID4gPiA+ICAJ R0VOKDExKSwgXAo+ID4gPiA+ID4gIAkuZGRiX3NpemUgPSAyMDQ4LCBcCj4gPiA+ID4gPiArCS5z dXBwb3J0ZWRfc2xpY2VzID0gMiwgXAo+ID4gPiA+ID4gIAkuaGFzX2xvZ2ljYWxfcmluZ19lbHNx ID0gMSwgXAo+ID4gPiA+ID4gIAkuY29sb3IgPSB7IC5kZWdhbW1hX2x1dF9zaXplID0gMzMsIC5n YW1tYV9sdXRfc2l6ZSA9Cj4gPiA+ID4gPiAyNjIxNDUgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gPiA+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiA+ID4gaW5kZXggYTYwN2VhNTIw ODI5Li5mYmE1NzMxMDYzZDggMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCj4gPiA+ID4gPiBAQCAtNzczNCw5ICs3NzM0LDExIEBAIGVudW0gewo+ID4gPiA+ID4g ICNkZWZpbmUgRElTUF9BUkJfQ1RMMglfTU1JTygweDQ1MDA0KQo+ID4gPiA+ID4gICNkZWZpbmUg IERJU1BfREFUQV9QQVJUSVRJT05fNV82CSgxIDw8IDYpCj4gPiA+ID4gPiAgI2RlZmluZSAgRElT UF9JUENfRU5BQkxFCQkoMSA8PCAzKQo+ID4gPiA+ID4gLSNkZWZpbmUgREJVRl9DVEwJX01NSU8o MHg0NTAwOCkKPiA+ID4gPiA+IC0jZGVmaW5lIERCVUZfQ1RMX1MxCV9NTUlPKDB4NDUwMDgpCj4g PiA+ID4gPiAtI2RlZmluZSBEQlVGX0NUTF9TMglfTU1JTygweDQ0RkU4KQo+ID4gPiA+ID4gKyNk ZWZpbmUgREJVRl9TMV9CSVQJCQlCSVQoMCkKPiA+ID4gPiA+ICsjZGVmaW5lIERCVUZfUzJfQklU CQkJQklUKDEpCj4gPiA+ID4gCj4gPiA+ID4gVGhlc2UgYXJlIG5vdCBiaXRzIGluc2lkZSBEQlVG X0NUTCBzbyB0aGV5IHNob3VsZCBub3QgYmUgaGVyZS4KPiA+ID4gPiBJJ2QganVzdCBudWtlIHRo ZW0gZW50aXJlbHkuIElmIHlvdSB0aGluayB3ZSBuZWVkIG1vcmUgdGhhbiBhbgo+ID4gPiA+IGlu dCB0byByZWZlciB0byBhIHNsaWNlIHRoZW4gSU1PIHNvbWV0aGluZyBzaW1wbGUgbGlrZQo+ID4g PiA+IAo+ID4gPiA+IGVudW0gZGJ1Zl9zbGljZSB7Cj4gPiA+ID4gCURCVUZfUzEsCj4gPiA+ID4g CURCVUZfUzIsCj4gPiA+ID4gfTsKPiA+ID4gPiAKPiA+ID4gPiB3b3VsZCBtYXRjaCB0aGUgZ2Vu ZXJhbCBhcHBvcmFjaCB3ZSB1c2UgZm9yIG90aGVyIHRoaW5ncyBtdWNoCj4gPiA+ID4gYmV0dGVy Cj4gPiA+ID4gcmF0aGVyIHRoYW4gZGVmaW5pbmcgc29tZSBzaGlmdGVkIHZhbHVlcy4KPiA+ID4g Cj4gPiA+IFdlIG5lZWQgdG8gY29tYmluZSBzbGljZXMgLSBzbyBiaXRtYXNrIGlzIHF1aXRlIHN1 aXRhYmxlIGZvciB0aGF0LCAKPiA+ID4gSSBjYW4gb2YgY291cnNlIHVzZSB0aGlzIGVudW0sIGJ1 dCB0aGVuIEknbGwgaGF2ZSB0byByZS1lbmNvZGUgaXQgCj4gPiA+IHRvIGJpdG1hc2sgYW55d2F5 cy4KPiA+IAo+ID4gV2hpY2ggaXMgcHJldHR5IG11Y2ggaG93IGV2ZXJ5dGhpbmcgZWxzZSB3b3Jr cyBpbiB0aGUgZHJpdmVyLgo+IAo+IEFub3RoZXIgcGllY2Ugb2YgaW5jcmVkaWJseSBpbXBvcnRh bnQgdGhpbmcgdG8gYXJndWUuLgoKSXQgaXMuIExvdCdzIG9mIGNyYXAgaW4gdGhlIGRyaXZlciBp cyBzaW1wbHkgY2F1c2VkIGJ5IHBlb3BsZSBub3QKZm9sbG93aW5nIGVzdGFibGlzaGVkIHN0eWxl IGFuZCBjb21pbmcgdXAgd2l0aCBzb21ldGhpbmcgZGlmZmVyZW50Li4KV2hpY2ggbWVhbnMgdGhl cmUgaXMgYW4gZXh0cmEgY29zdCBmb3IgZXZlcnlvbmUgZWxzZSB3aGVuIHJlYWRpbmcgdGhlCmNv ZGUuIEFuZCB0aGF0IHByb2JhYmx5IG1lYW5zIG1vc3QgcGVvcGxlIGp1c3QgZG9uJ3QgYm90aGVy IHRvIHJlYWQgaXQuCgpHcmFudGVkLCBzb21lIG9mIHRoYXQgaXMgZHVlIHRvIHNwdXJ0cyBpbiBl dm9sdXRpb24gd2hlcmUgbWFqb3Igb3ZlcmhhdWxzCmNoYW5nZWQgdGhlIGFyY2hpdGVjdHVyZSBz byBzaWduaWZpY2FudGx5IHRoYXQgdGhlIG9sZCBlc3RhYmxpc2hlZApjb252ZW50aW9ucyBzaW1w bHkgbWFkZSBub2RlIHNlbnNlIGFueW1vcmUuIEF0b21pYyBiZWluZyB0aGUgbGFzdCBiaWcKb25l IGluIHRoYXQgcmVnYXJkLiBBbmQgd2UncmUgc3RpbGwgY2xlYW5pbmcgdXAgdGhlIHJlc3VsdGlu ZyBtZXNzLgoKPiAKPiA+IAo+ID4gPiAKPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiArI2RlZmlu ZSBEQlVGX0NUTAkJCV9NTUlPKDB4NDUwMDgpCj4gPiA+ID4gPiArI2RlZmluZSBEQlVGX0NUTF9T MQkJCV9NTUlPKDB4NDUwMDgpCj4gPiA+ID4gPiArI2RlZmluZSBEQlVGX0NUTF9TMgkJCV9NTUlP KDB4NDRGRTgpCj4gPiA+ID4gPiAgI2RlZmluZSAgREJVRl9QT1dFUl9SRVFVRVNUCQkoMSA8PCAz MSkKPiA+ID4gPiA+ICAjZGVmaW5lICBEQlVGX1BPV0VSX1NUQVRFCQkoMSA8PCAzMCkKPiA+ID4g PiA+ICAjZGVmaW5lIEdFTjdfTVNHX0NUTAlfTU1JTygweDQ1MDEwKQo+ID4gPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmgKPiA+ID4gPiA+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaAo+ID4gPiA+ID4gaW5k ZXggNGJkZjhhNmNmYjQ3Li5iYTM0ZTFhNWM1OTEgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5oCj4gPiA+ID4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5oCj4gPiA+ID4gPiBAQCAtMTgwLDYg KzE4MCw3IEBAIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7Cj4gPiA+ID4gPiAgCX0gZGlzcGxh eTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJdTE2IGRkYl9zaXplOyAvKiBpbiBibG9ja3MgKi8K PiA+ID4gPiA+ICsJdTggc3VwcG9ydGVkX3NsaWNlczsgLyogbnVtYmVyIG9mIERCdWYgc2xpY2Vz ICovCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCS8qIFJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSB2 YXJpb3VzIGRpc3BsYXkgcGlwZXMgYW5kCj4gPiA+ID4gPiB0cmFuc2NvZGVycyAqLwo+ID4gPiA+ ID4gIAlpbnQgcGlwZV9vZmZzZXRzW0k5MTVfTUFYX1RSQU5TQ09ERVJTXTsKPiA+ID4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiA+ID4gPiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+ID4gPiA+IGluZGV4IDJkMzg5ZTQzN2U4 Ny4uMWVhODFhYjkyNDI5IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwo+ID4gPiA+ID4gQEAgLTM1ODYsMjQgKzM1ODYsMjAgQEAgYm9vbCBpbGtfZGlzYWJsZV9s cF93bShzdHJ1Y3QKPiA+ID4gPiA+IGRybV9kZXZpY2UKPiA+ID4gPiA+ICpkZXYpCj4gPiA+ID4g PiAgCXJldHVybiBfaWxrX2Rpc2FibGVfbHBfd20oZGV2X3ByaXYsIFdNX0RJUlRZX0xQX0FMTCk7 Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gLXN0YXRpYyB1OCBpbnRlbF9lbmFi bGVkX2RidWZfc2xpY2VzX251bShzdHJ1Y3QKPiA+ID4gPiA+IGRybV9pOTE1X3ByaXZhdGUKPiA+ ID4gPiA+ICpkZXZfcHJpdikKPiA+ID4gPiA+ICtzdGF0aWMgdTggaW50ZWxfZW5hYmxlZF9kYnVm X3NsaWNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ID4gPiA+ID4gKmRldl9wcml2KQo+ID4g PiA+ID4gIHsKPiA+ID4gPiA+IC0JdTggZW5hYmxlZF9zbGljZXM7Cj4gPiA+ID4gPiAtCj4gPiA+ ID4gPiAtCS8qIFNsaWNlIDEgd2lsbCBhbHdheXMgYmUgZW5hYmxlZCAqLwo+ID4gPiA+ID4gLQll bmFibGVkX3NsaWNlcyA9IDE7Cj4gPiA+ID4gPiArCXU4IGVuYWJsZWRfc2xpY2VzID0gMDsKPiA+ ID4gPiA+ICAKPiA+ID4gPiA+ICAJLyogR2VuIHByaW9yIHRvIEdFTjExIGhhdmUgb25seSBvbmUg REJ1ZiBzbGljZSAqLwo+ID4gPiA+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ ID4gPiA+ID4gLQkJcmV0dXJuIGVuYWJsZWRfc2xpY2VzOwo+ID4gPiA+ID4gKwkJcmV0dXJuIERC VUZfUzFfQklUOwo+ID4gPiA+IAo+ID4gPiA+IEknZCBudWtlIHRoaXMgc3BlY2lhbCBjYXNlIGVu dGlyZWx5IGFuZCBqdXN0IHJlYWQgZXZlcnl0aGluZyBmcm9tCj4gPiA+ID4gdGhlCj4gPiA+ID4g aHcuIEFzc3VtaW5nIHdlIG5lZWQgcmVhZG91dCBzb21ld2hlcmUuCj4gPiA+IAo+ID4gPiBXZSBo YXZlIGl0IHRoYXQgd2F5IGhhcmRjb2RlZCByaWdodCBub3cgaW4gZHJtLXRpcC4gSSB0aGluayB0 aGlzIGlzCj4gPiA+IGEKPiA+ID4gc3ViamVjdCB0byBvdGhlciBwYXRjaCwgYnV0IG5vdCB0aGlz IGNoYW5nZS4gQXMgSSB1bmRlcnN0YW5kIHdlCj4gPiA+IG5lZWQgCj4gPiA+IHRvIGZpcnN0IGZp Z3VyZSBvdXQgaG93IHRvIGRvIGl0IHByb3Blcmx5LiAKPiA+ID4gVGhpcyBwYXRjaCBhbnl3YXkg bWFrZXMgaXQgYmV0dGVyIGJ5IGF0IGxlYXN0IHJlbW92aW5nIGhhcmRjb2RlZAo+ID4gPiByZWxh dGlvbiBiZXR3ZWVuIG51bWJlciBvZiBzbGljZXMgYW5kIHdoaWNoIHNsaWNlcyBhcmUgZW5hYmxl ZC4KPiA+ID4gV2l0aCBjdXJyZW50IGNvZGUgdGhlcmUgaXMgbm8gd2F5IGZvciBleGFtcGxlIHRv IGVuYWJsZSBzZWNvbmQgREJ1Zgo+ID4gPiBzbGljZSBvbmx5LCB3aGljaCBpcyByZXF1aXJlZCBi eSBCU3BlYy4KPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCS8qCj4gPiA+ ID4gPiAtCSAqIEZJWE1FOiBmb3Igbm93IHdlJ2xsIG9ubHkgZXZlciB1c2UgMSBzbGljZTsgcHJl dGVuZAo+ID4gPiA+ID4gdGhhdCB3ZQo+ID4gPiA+ID4gaGF2ZQo+ID4gPiA+ID4gLQkgKiBvbmx5 IHRoYXQgMSBzbGljZSBlbmFibGVkIHVudGlsIHdlIGhhdmUgYSBwcm9wZXIgd2F5Cj4gPiA+ID4g PiBmb3Igb24tCj4gPiA+ID4gPiBkZW1hbmQKPiA+ID4gPiA+IC0JICogdG9nZ2xpbmcgb2YgdGhl IHNlY29uZCBzbGljZS4KPiA+ID4gPiA+IC0JICovCj4gPiA+ID4gPiAtCWlmICgwICYmIEk5MTVf UkVBRChEQlVGX0NUTF9TMikgJiBEQlVGX1BPV0VSX1NUQVRFKQo+ID4gPiA+ID4gLQkJZW5hYmxl ZF9zbGljZXMrKzsKPiA+ID4gPiA+ICsJLyogQ2hlY2sgaWYgc2Vjb25kIERCdWYgc2xpY2UgaXMg ZW5hYmxlZCAqLwo+ID4gPiA+ID4gKwlpZiAoSTkxNV9SRUFEKERCVUZfQ1RMX1MxKSAmIERCVUZf UE9XRVJfU1RBVEUpCj4gPiA+ID4gPiArCQllbmFibGVkX3NsaWNlcyB8PSBEQlVGX1MxX0JJVDsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKEk5MTVfUkVBRChEQlVGX0NUTF9TMikgJiBEQlVG X1BPV0VSX1NUQVRFKQo+ID4gPiA+ID4gKwkJZW5hYmxlZF9zbGljZXMgfD0gREJVRl9TMl9CSVQ7 Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCXJldHVybiBlbmFibGVkX3NsaWNlczsKPiA+ID4gPiA+ ICB9Cj4gPiA+ID4gPiBAQCAtMzgxMiwzNiArMzgwOCwzOCBAQCBzdGF0aWMgdTE2IGludGVsX2dl dF9kZGJfc2l6ZShzdHJ1Y3QKPiA+ID4gPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ID4gPiA+ID4gIAkJCSAgICAgIGNvbnN0IGludCBudW1fYWN0aXZlLAo+ID4gPiA+ID4gIAkJCSAg ICAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYikKPiA+ID4gPiA+ICB7Cj4gPiA+ID4g PiAtCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlOwo+ID4gPiA+ ID4gLQl1NjQgdG90YWxfZGF0YV9idzsKPiA+ID4gPiA+ICAJdTE2IGRkYl9zaXplID0gSU5URUxf SU5GTyhkZXZfcHJpdiktPmRkYl9zaXplOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gIAlXQVJOX09O KGRkYl9zaXplID09IDApOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA8IDExKQo+ID4gPiA+ID4gIAkJcmV0dXJuIGRkYl9zaXplIC0gNDsgLyogNCBibG9j a3MgZm9yIGJ5cGFzcwo+ID4gPiA+ID4gcGF0aAo+ID4gPiA+ID4gYWxsb2NhdGlvbiAqLwo+ID4g PiA+ID4gIAo+ID4gPiA+ID4gLQlhZGp1c3RlZF9tb2RlID0gJmNydGNfc3RhdGUtPmh3LmFkanVz dGVkX21vZGU7Cj4gPiA+ID4gPiAtCXRvdGFsX2RhdGFfYncgPSB0b3RhbF9kYXRhX3JhdGUgKgo+ ID4gPiA+ID4gZHJtX21vZGVfdnJlZnJlc2goYWRqdXN0ZWRfbW9kZSk7Cj4gPiA+ID4gPiArCXJl dHVybiBkZGJfc2l6ZTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCS8qCj4g PiA+ID4gPiAtCSAqIDEyR0IvcyBpcyBtYXhpbXVtIEJXIHN1cHBvcnRlZCBieSBzaW5nbGUgREJ1 ZiBzbGljZS4KPiA+ID4gPiA+IC0JICoKPiA+ID4gPiA+IC0JICogRklYTUUgZGJ1ZiBzbGljZSBj b2RlIGlzIGJyb2tlbjoKPiA+ID4gPiA+IC0JICogLSBtdXN0IHdhaXQgZm9yIHBsYW5lcyB0byBz dG9wIHVzaW5nIHRoZSBzbGljZQo+ID4gPiA+ID4gYmVmb3JlCj4gPiA+ID4gPiBwb3dlcmluZyBp dCBvZmYKPiA+ID4gPiA+IC0JICogLSBwbGFuZSBzdHJhZGRsaW5nIGJvdGggc2xpY2VzIGlzIGls bGVnYWwgaW4gbXVsdGktCj4gPiA+ID4gPiBwaXBlCj4gPiA+ID4gPiBzY2VuYXJpb3MKPiA+ID4g PiA+IC0JICogLSBzaG91bGQgdmFsaWRhdGUgd2Ugc3RheSB3aXRoaW4gdGhlIGh3IGJhbmR3aWR0 aAo+ID4gPiA+ID4gbGltaXRzCj4gPiA+ID4gPiAtCSAqLwo+ID4gPiA+ID4gLQlpZiAoMCAmJiAo bnVtX2FjdGl2ZSA+IDEgfHwgdG90YWxfZGF0YV9idyA+PSBHQnBzKDEyKSkpCj4gPiA+ID4gPiB7 Cj4gPiA+ID4gPiAtCQlkZGItPmVuYWJsZWRfc2xpY2VzID0gMjsKPiA+ID4gPiA+IC0JfSBlbHNl IHsKPiA+ID4gPiA+IC0JCWRkYi0+ZW5hYmxlZF9zbGljZXMgPSAxOwo+ID4gPiA+ID4gLQkJZGRi X3NpemUgLz0gMjsKPiA+ID4gPiA+IC0JfQo+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiArICogQ2Fs Y3VsYXRlIGluaXRpYWwgREJ1ZiBzbGljZSBvZmZzZXQsIGJhc2VkIG9uIHNsaWNlIHNpemUKPiA+ ID4gPiA+ICsgKiBhbmQgbWFzayhpLmUgaWYgc2xpY2Ugc2l6ZSBpcyAxMDI0IGFuZCBzZWNvbmQg c2xpY2UgaXMKPiA+ID4gPiA+IGVuYWJsZWQKPiA+ID4gPiA+ICsgKiBvZmZzZXQgd291bGQgYmUg MTAyNCkKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdGF0aWMgdTMyIHNrbF9nZXRfZmlyc3Rf ZGJ1Zl9zbGljZV9vZmZzZXQodTMyCj4gPiA+ID4gPiBkYnVmX3NsaWNlX21hc2ssCj4gPiA+ID4g PiArCQkJCQkgICB1MzIgc2xpY2Vfc2l6ZSwgdTMyCj4gPiA+ID4gPiBkZGJfc2l6ZSkKPiA+ID4g PiA+ICt7Cj4gPiA+ID4gPiArCXUzMiBvZmZzZXQgPSAwOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4g LQlyZXR1cm4gZGRiX3NpemU7Cj4gPiA+ID4gPiArCWlmICghZGJ1Zl9zbGljZV9tYXNrKQo+ID4g PiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCW9mZnNldCA9IChmZnMo ZGJ1Zl9zbGljZV9tYXNrKSAtIDEpICogc2xpY2Vfc2l6ZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJV0FSTl9PTihvZmZzZXQgPj0gZGRiX3NpemUpOwo+ID4gPiA+ID4gKwlyZXR1cm4gb2Zmc2V0 Owo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICtzdGF0aWMgdTMyIGk5MTVfZ2V0 X2FsbG93ZWRfZGJ1Zl9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2 X3ByaXYsCj4gPiA+ID4gPiArCQkJCSAgICAgIGludCBwaXBlLCB1MzIKPiA+ID4gPiA+IGFjdGl2 ZV9waXBlcywKPiA+ID4gPiA+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0Cj4gPiA+ID4gPiBpbnRl bF9jcnRjX3N0YXRlCj4gPiA+ID4gPiAqY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiAgc3RhdGljIHZvaWQKPiA+ID4gPiA+ICBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGlt aXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gPiAqZGV2X3ByaXYsCj4gPiA+ID4g PiAgCQkJCSAgIGNvbnN0IHN0cnVjdAo+ID4gPiA+ID4gaW50ZWxfY3J0Y19zdGF0ZQo+ID4gPiA+ ID4gKmNydGNfc3RhdGUsCj4gPiA+ID4gPiBAQCAtMzg1Nyw3ICszODU1LDE0IEBACj4gPiA+ID4g PiBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdAo+ID4gPiA+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCXUzMiBwaXBlX3dpZHRoID0gMCwg dG90YWxfd2lkdGggPSAwLCB3aWR0aF9iZWZvcmVfcGlwZQo+ID4gPiA+ID4gPSAwOwo+ID4gPiA+ ID4gIAllbnVtIHBpcGUgZm9yX3BpcGUgPSB0b19pbnRlbF9jcnRjKGZvcl9jcnRjKS0+cGlwZTsK PiA+ID4gPiA+ICAJdTE2IGRkYl9zaXplOwo+ID4gPiA+ID4gKwl1MzIgZGRiX3JhbmdlX3NpemU7 Cj4gPiA+ID4gPiAgCXUzMiBpOwo+ID4gPiA+ID4gKwl1MzIgZGJ1Zl9zbGljZV9tYXNrOwo+ID4g PiA+ID4gKwl1MzIgYWN0aXZlX3BpcGVzOwo+ID4gPiA+ID4gKwl1MzIgb2Zmc2V0Owo+ID4gPiA+ ID4gKwl1MzIgc2xpY2Vfc2l6ZTsKPiA+ID4gPiA+ICsJdTMyIHRvdGFsX3NsaWNlX21hc2s7Cj4g PiA+ID4gPiArCXUzMiBzdGFydCwgZW5kOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlpZiAoV0FS Tl9PTighc3RhdGUpIHx8ICFjcnRjX3N0YXRlLT5ody5hY3RpdmUpIHsKPiA+ID4gPiA+ICAJCWFs bG9jLT5zdGFydCA9IDA7Cj4gPiA+ID4gPiBAQCAtMzg2NiwxNCArMzg3MSwyMyBAQAo+ID4gPiA+ ID4gc2tsX2RkYl9nZXRfcGlwZV9hbGxvY2F0aW9uX2xpbWl0cyhzdHJ1Y3QKPiA+ID4gPiA+IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiA+ID4gIAkJcmV0dXJuOwo+ID4gPiA+ID4g IAl9Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWlmIChpbnRlbF9zdGF0ZS0+YWN0aXZlX3BpcGVf Y2hhbmdlcykKPiA+ID4gPiA+ICsJaWYgKGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2Vz KSB7Cj4gPiA+ID4gPiAgCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQ4KGludGVsX3N0YXRlLQo+ID4g PiA+ID4gPmFjdGl2ZV9waXBlcyk7Cj4gPiA+ID4gPiAtCWVsc2UKPiA+ID4gPiA+ICsJCWFjdGl2 ZV9waXBlcyA9IGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZXM7Cj4gPiA+ID4gPiArCX0gZWxzZSB7 Cj4gPiA+ID4gPiAgCQkqbnVtX2FjdGl2ZSA9IGh3ZWlnaHQ4KGRldl9wcml2LT5hY3RpdmVfcGlw ZXMpOwo+ID4gPiA+ID4gKwkJYWN0aXZlX3BpcGVzID0gZGV2X3ByaXYtPmFjdGl2ZV9waXBlczsK PiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlkZGJfc2l6ZSA9IGludGVsX2dl dF9kZGJfc2l6ZShkZXZfcHJpdiwgY3J0Y19zdGF0ZSwKPiA+ID4gPiA+IHRvdGFsX2RhdGFfcmF0 ZSwKPiA+ID4gPiA+ICAJCQkJICAgICAgKm51bV9hY3RpdmUsIGRkYik7Cj4gPiA+ID4gPiAgCj4g PiA+ID4gPiArCURSTV9ERUJVR19LTVMoIkdvdCB0b3RhbCBkZGIgc2l6ZSAlZFxuIiwgZGRiX3Np emUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlzbGljZV9zaXplID0gZGRiX3NpemUgLyBJTlRF TF9JTkZPKGRldl9wcml2KS0KPiA+ID4gPiA+ID5zdXBwb3J0ZWRfc2xpY2VzOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJHb3QgREJ1ZiBzbGljZSBzaXplICVkXG4iLCBz bGljZV9zaXplKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICAJLyoKPiA+ID4gPiA+ICAJICogSWYg dGhlIHN0YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSBhY3RpdmUgQ1JUQydzIG9yCj4gPiA+ID4gPiB0 aGVyZSBpcyBubwo+ID4gPiA+ID4gIAkgKiBtb2Rlc2V0IHJlcXVlc3QsIHRoZW4gdGhlcmUncyBu byBuZWVkIHRvCj4gPiA+ID4gPiByZWNhbGN1bGF0ZTsKPiA+ID4gPiA+IEBAIC0zODkxLDIwICsz OTA1LDcwIEBACj4gPiA+ID4gPiBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0 cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAgCQly ZXR1cm47Cj4gPiA+ID4gPiAgCX0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ ICsJICogR2V0IGFsbG93ZWQgREJ1ZiBzbGljZXMgZm9yIGNvcnJlc3BvbmRlbnQgcGlwZSBhbmQK PiA+ID4gPiA+IHBsYXRmb3JtLgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJZGJ1Zl9zbGlj ZV9tYXNrID0gaTkxNV9nZXRfYWxsb3dlZF9kYnVmX21hc2soZGV2X3ByaXYsCj4gPiA+ID4gPiBm b3JfcGlwZSwKPiA+ID4gPiA+ICsJCQkJCQkgICAgIGFjdGl2ZV9waXAKPiA+ID4gPiA+IGVzLAo+ ID4gPiA+ID4gY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gCj4gPiA+ID4gUXVpdGUgYSBmZXcgcmVkdW5k YW50IGFyZ3VtZW50cy4gVGhlIGZ1bmN0aW9uIG5hbWUgbG9va3MgYWxpZW4uCj4gPiA+ID4gCj4g PiA+ID4gc2tsX2NydGNfcG9zc2libGVfZGJ1Zl9zbGljZXMoKSBvciBzb21ldGhpbmcgcGVyaGFw cz8KPiA+ID4gPiAKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJRFJNX0RFQlVHX0tNUygiREJ1ZiBz bGljZSBtYXNrICV4IHBpcGUgJWQgYWN0aXZlIHBpcGVzCj4gPiA+ID4gPiAleFxuIiwKPiA+ID4g PiA+ICsJCSAgICAgIGRidWZfc2xpY2VfbWFzaywKPiA+ID4gPiA+ICsJCSAgICAgIGZvcl9waXBl LCBhY3RpdmVfcGlwZXMpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkg KiBGaWd1cmUgb3V0IGF0IHdoaWNoIERCdWYgc2xpY2Ugd2Ugc3RhcnQsIGkuZSBpZiB3ZQo+ID4g PiA+ID4gc3RhcnQgYXQKPiA+ID4gPiA+IERidWYgUzIKPiA+ID4gPiA+ICsJICogYW5kIHNsaWNl IHNpemUgaXMgMTAyNCwgdGhlIG9mZnNldCB3b3VsZCBiZSAxMDI0Cj4gPiA+ID4gPiArCSAqLwo+ ID4gPiA+ID4gKwlvZmZzZXQgPQo+ID4gPiA+ID4gc2tsX2dldF9maXJzdF9kYnVmX3NsaWNlX29m ZnNldChkYnVmX3NsaWNlX21hc2ssCj4gPiA+ID4gPiArCQkJCQkJIHNsaWNlX3NpemUsCj4gPiA+ ID4gPiBkZGJfc2l6ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAq IEZpZ3VyZSBvdXQgdG90YWwgc2l6ZSBvZiBhbGxvd2VkIERCdWYgc2xpY2VzLCB3aGljaAo+ID4g PiA+ID4gaXMKPiA+ID4gPiA+IGJhc2ljYWxseQo+ID4gPiA+ID4gKwkgKiBhIG51bWJlciBvZiBh bGxvd2VkIHNsaWNlcyBmb3IgdGhhdCBwaXBlIG11bHRpcGxpZWQKPiA+ID4gPiA+IGJ5IHNsaWNl Cj4gPiA+ID4gPiBzaXplLgo+ID4gPiA+ID4gKwkgKiBJbnNpZGUgb2YgdGhpcwo+ID4gPiA+ID4g KwkgKiByYW5nZSBkZGIgZW50cmllcyBhcmUgc3RpbGwgYWxsb2NhdGVkIGluIHByb3BvcnRpb24K PiA+ID4gPiA+IHRvCj4gPiA+ID4gPiBkaXNwbGF5IHdpZHRoLgo+ID4gPiA+ID4gKwkgKi8KPiA+ ID4gPiA+ICsJZGRiX3JhbmdlX3NpemUgPSBod2VpZ2h0OChkYnVmX3NsaWNlX21hc2spICoKPiA+ ID4gPiA+IHNsaWNlX3NpemU7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAgCS8qCj4gPiA+ID4gPiAg CSAqIFdhdGVybWFyay9kZGIgcmVxdWlyZW1lbnQgaGlnaGx5IGRlcGVuZHMgdXBvbiB3aWR0aAo+ ID4gPiA+ID4gb2YgdGhlCj4gPiA+ID4gPiAgCSAqIGZyYW1lYnVmZmVyLCBTbyBpbnN0ZWFkIG9m IGFsbG9jYXRpbmcgRERCIGVxdWFsbHkKPiA+ID4gPiA+IGFtb25nCj4gPiA+ID4gPiBwaXBlcwo+ ID4gPiA+ID4gIAkgKiBkaXN0cmlidXRlIEREQiBiYXNlZCBvbiByZXNvbHV0aW9uL3dpZHRoIG9m IHRoZQo+ID4gPiA+ID4gZGlzcGxheS4KPiA+ID4gPiA+ICAJICovCj4gPiA+ID4gPiArCXRvdGFs X3NsaWNlX21hc2sgPSBkYnVmX3NsaWNlX21hc2s7Cj4gPiA+ID4gCj4gPiA+ID4gSXNuJ3QgdGhp cyBhbHJlYWR5IHRha2VuIGNhcmUgYnkgdGhlIGxvb3AgYmVsb3c/Cj4gPiA+ID4gCj4gPiA+ID4g PiAgCWZvcl9lYWNoX25ld19pbnRlbF9jcnRjX2luX3N0YXRlKGludGVsX3N0YXRlLCBjcnRjLAo+ ID4gPiA+ID4gY3J0Y19zdGF0ZSwKPiA+ID4gPiA+IGkpIHsKPiA+ID4gPiA+ICAJCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0KPiA+ID4gPiA+ICAJCQkmY3J0 Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKPiA+ID4gPiA+ICAJCWVudW0gcGlwZSBwaXBlID0g Y3J0Yy0+cGlwZTsKPiA+ID4gPiA+ICAJCWludCBoZGlzcGxheSwgdmRpc3BsYXk7Cj4gPiA+ID4g PiArCQl1MzIgcGlwZV9kYnVmX3NsaWNlX21hc2sgPSBcCj4gPiA+ID4gPiArCQkJaTkxNV9nZXRf YWxsb3dlZF9kYnVmX21hc2soZGV2X3ByaXYsCj4gPiA+ID4gPiArCQkJCQkJcGlwZSwKPiA+ID4g PiA+ICsJCQkJCQlhY3RpdmVfcGlwZXMsCj4gPiA+ID4gPiArCQkJCQkJY3J0Y19zdGF0ZSk7Cj4g PiA+ID4gPiAgCj4gPiA+ID4gPiAgCQlpZiAoIWNydGNfc3RhdGUtPmh3LmVuYWJsZSkKPiA+ID4g PiA+ICAJCQljb250aW51ZTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICsJCS8qCj4gPiA+ID4gPiAr CQkgKiBBY2NvcmRpbmcgdG8gQlNwZWMgcGlwZSBjYW4gc2hhcmUgb25lIGRidWYKPiA+ID4gPiA+ IHNsaWNlCj4gPiA+ID4gPiB3aXRoIGFub3RoZXIKPiA+ID4gPiA+ICsJCSAqIHBpcGVzIG9yIHBp cGUgY2FuIHVzZSBtdWx0aXBsZSBkYnVmcywgaW4KPiA+ID4gPiA+IGJvdGggY2FzZXMKPiA+ID4g PiA+IHdlCj4gPiA+ID4gPiArCQkgKiBhY2NvdW50IGZvciBvdGhlciBwaXBlcyBvbmx5IGlmIHRo ZXkgaGF2ZQo+ID4gPiA+ID4gZXhhY3RseQo+ID4gPiA+ID4gc2FtZSBtYXNrLgo+ID4gPiA+ID4g KwkJICogSG93ZXZlciB3ZSBuZWVkIHRvIGFjY291bnQgaG93IG1hbnkgc2xpY2VzCj4gPiA+ID4g PiB3ZSBzaG91bGQKPiA+ID4gPiA+IGVuYWJsZQo+ID4gPiA+ID4gKwkJICogaW4gdG90YWwuCj4g PiA+ID4gPiArCQkgKi8KPiA+ID4gPiA+ICsJCXRvdGFsX3NsaWNlX21hc2sgfD0gcGlwZV9kYnVm X3NsaWNlX21hc2s7Cj4gPiA+ID4gCj4gPiA+ID4gdG90YWxfc2xpY2VfbWFzayB3aWxsIG5vdyBh Y2NvdW50IG9ubHkgdGhlIGNydGNzIGluIHRoZSBzdGF0ZS4KPiA+ID4gPiBXaGF0Cj4gPiA+ID4g aGFwcGVucyB0byB0aGUgb3RoZXIgcGlwZXMnIHNsaWNlcz8KPiAKPiBTYW1lIGFzIGhhcHBlbnMg bm93IGJ0dy4gUmlnaHQgbm93IGl0IGFsc28gZG9lcyB0aGUgc2FtZSB0aGluZy4KClJpZ2h0IG5v dyBpdCBkb2VzIGFic29sdXRlbHkgbm90aGluZy4gSXQncyBhbGwgZGVhZCBjb2RlLgoKPiAKPiA+ ID4gCj4gPiA+IFllcyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgcGlwZXMvY3J0Y3Mg aGVyZSwgaG93ZXZlcgo+ID4gPiBmb3IgZ2V0dGluZyBjb3JyZWN0IGRidWYgc2xpY2UgbWFzayBt b3N0IGltcG9ydGFudCBpcyBhY3RpdmVfcGlwZXMuCj4gPiA+IEhvd2V2ZXIgeWVzLCBJIHdpbGwg Y2hhbmdlIHRoZSBsb29wIGZvciBpdCB0byBiZSBtb3JlIGNvcnJlY3QuCj4gPiA+IAo+ID4gPiA+ IAo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJLyoKPiA+ID4gPiA+ICsJCSAqIERvIG5vdCBhY2Nv dW50IHBpcGVzIHVzaW5nIG90aGVyIHNsaWNlIHNldHMKPiA+ID4gPiA+ICsJCSAqIGx1Y2tpbHkg YXMgb2YgY3VycmVudCBCU3BlYyBzbGljZSBzZXRzIGRvCj4gPiA+ID4gPiBub3QKPiA+ID4gPiA+ IHBhcnRpYWxseQo+ID4gPiA+ID4gKwkJICogaW50ZXJzZWN0KHBpcGVzIHNoYXJlIGVpdGhlciBz YW1lIG9uZSBzbGljZQo+ID4gPiA+ID4gb3Igc2FtZQo+ID4gPiA+ID4gc2xpY2Ugc2V0Cj4gPiA+ ID4gPiArCQkgKiBpLmUgbm8gcGFydGlhbCBpbnRlcnNlY3Rpb24pLCBzbyBpdCBpcwo+ID4gPiA+ ID4gZW5vdWdoIHRvCj4gPiA+ID4gPiBjaGVjayBmb3IKPiA+ID4gPiA+ICsJCSAqIGVxdWFsaXR5 IGZvciBub3cuCj4gPiA+ID4gPiArCQkgKi8KPiA+ID4gPiA+ICsJCWlmIChkYnVmX3NsaWNlX21h c2sgIT0gcGlwZV9kYnVmX3NsaWNlX21hc2spCj4gPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiAgCQlkcm1fbW9kZV9nZXRfaHZfdGltaW5nKGFkanVzdGVkX21vZGUs Cj4gPiA+ID4gPiAmaGRpc3BsYXksCj4gPiA+ID4gPiAmdmRpc3BsYXkpOwo+ID4gPiA+ID4gIAkJ dG90YWxfd2lkdGggKz0gaGRpc3BsYXk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiBAQCAtMzkxNCw4 ICszOTc4LDE5IEBACj4gPiA+ID4gPiBza2xfZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRz KHN0cnVjdAo+ID4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ID4gPiAg CQkJcGlwZV93aWR0aCA9IGhkaXNwbGF5Owo+ID4gPiA+ID4gIAl9Cj4gPiA+ID4gPiAgCj4gPiA+ ID4gPiAtCWFsbG9jLT5zdGFydCA9IGRkYl9zaXplICogd2lkdGhfYmVmb3JlX3BpcGUgLwo+ID4g PiA+ID4gdG90YWxfd2lkdGg7Cj4gPiA+ID4gPiAtCWFsbG9jLT5lbmQgPSBkZGJfc2l6ZSAqICh3 aWR0aF9iZWZvcmVfcGlwZSArCj4gPiA+ID4gPiBwaXBlX3dpZHRoKSAvCj4gPiA+ID4gPiB0b3Rh bF93aWR0aDsKPiA+ID4gPiA+ICsJZGRiLT5lbmFibGVkX3NsaWNlcyA9IHRvdGFsX3NsaWNlX21h c2s7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXN0YXJ0ID0gZGRiX3JhbmdlX3NpemUgKiB3aWR0 aF9iZWZvcmVfcGlwZSAvCj4gPiA+ID4gPiB0b3RhbF93aWR0aDsKPiA+ID4gPiA+ICsJZW5kID0g ZGRiX3JhbmdlX3NpemUgKiAod2lkdGhfYmVmb3JlX3BpcGUgKyBwaXBlX3dpZHRoKQo+ID4gPiA+ ID4gLwo+ID4gPiA+ID4gdG90YWxfd2lkdGg7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWFsbG9j LT5zdGFydCA9IG9mZnNldCArIHN0YXJ0Owo+ID4gPiA+ID4gKwlhbGxvYy0+ZW5kID0gb2Zmc2V0 ICsgZW5kOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJQaXBlICVkIGRk YiAlZC0lZFxuIiwgZm9yX3BpcGUsCj4gPiA+ID4gPiArCQkgICAgICBhbGxvYy0+c3RhcnQsIGFs bG9jLT5lbmQpOwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01TKCJFbmFibGVkIGRkYiBzbGljZXMg bWFzayAleCBudW0gc3VwcG9ydGVkCj4gPiA+ID4gPiAlZFxuIiwKPiA+ID4gPiA+ICsJCSAgICAg IGRkYi0+ZW5hYmxlZF9zbGljZXMsCj4gPiA+ID4gPiArCQkgICAgICBJTlRFTF9JTkZPKGRldl9w cml2KS0+c3VwcG9ydGVkX3NsaWNlcyk7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ ID4gIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfd21fcGFyYW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlCj4gPiA+ID4gPiAqY3J0Y19zdGF0ZSwKPiA+ID4gPiA+IEBAIC00MDM2LDcgKzQx MTEsOCBAQCB2b2lkIHNrbF9waXBlX2RkYl9nZXRfaHdfc3RhdGUoc3RydWN0Cj4gPiA+ID4gPiBp bnRlbF9jcnRjICpjcnRjLAo+ID4gPiA+ID4gIHZvaWQgc2tsX2RkYl9nZXRfaHdfc3RhdGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiA+ID4gIAkJCSAgc3RydWN0IHNr bF9kZGJfYWxsb2NhdGlvbiAqZGRiIC8qIG91dAo+ID4gPiA+ID4gKi8pCj4gPiA+ID4gPiAgewo+ ID4gPiA+ID4gLQlkZGItPmVuYWJsZWRfc2xpY2VzID0KPiA+ID4gPiA+IGludGVsX2VuYWJsZWRf ZGJ1Zl9zbGljZXNfbnVtKGRldl9wcml2KTsKPiA+ID4gPiA+ICsJZGRiLT5lbmFibGVkX3NsaWNl cyA9Cj4gPiA+ID4gPiBpbnRlbF9lbmFibGVkX2RidWZfc2xpY2VzKGRldl9wcml2KTsKPiA+ID4g PiA+ICsJRFJNX0RFQlVHX0tNUygiR290IGh3IGRidWYgc2xpY2VzIG1hc2sgJXhcbiIsIGRkYi0K PiA+ID4gPiA+ID4gZW5hYmxlZF9zbGljZXMpOwo+ID4gPiA+ID4gCj4gPiA+ID4gPiAgfQo+ID4g PiA+ID4gIAo+ID4gPiA+ID4gIC8qCj4gPiA+ID4gPiBAQCAtNDE2NCw2ICs0MjQwLDI0MSBAQCBz a2xfZ2V0X3RvdGFsX3JlbGF0aXZlX2RhdGFfcmF0ZShzdHJ1Y3QKPiA+ID4gPiA+IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiA+ID4gPiAgCXJldHVybiB0b3RhbF9kYXRhX3JhdGU7 Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gK3N0YXRpYyB1aW50X2ZpeGVkXzE2 XzE2X3QKPiA+ID4gPiA+ICtpY2xfcGlwZV9kb3duc2NhbGVfYW1vdW50KGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlCj4gPiA+ID4gPiAqY3J0Y19zdGF0ZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ ID4gPiArCXUzMiBzcmNfdywgc3JjX2gsIGRzdF93LCBkc3RfaDsKPiA+ID4gPiA+ICsJdWludF9m aXhlZF8xNl8xNl90IGZwX3dfcmF0aW8sIGZwX2hfcmF0aW87Cj4gPiA+ID4gPiArCXVpbnRfZml4 ZWRfMTZfMTZfdCBkb3duc2NhbGVfaCwgZG93bnNjYWxlX3c7Cj4gPiA+ID4gPiArCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0KPiA+ID4gPiA+ICZjcnRjX3N0 YXRlLQo+ID4gPiA+ID4gPiBody5hZGp1c3RlZF9tb2RlOwo+ID4gPiA+ID4gCj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCXNyY193ID0gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdzsKPiA+ID4gPiA+ICsJ c3JjX2ggPSBjcnRjX3N0YXRlLT5waXBlX3NyY19oOwo+ID4gPiA+ID4gKwlkc3RfdyA9IGFkanVz dGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Cj4gPiA+ID4gPiArCWRzdF9oID0gYWRqdXN0ZWRfbW9k ZS0+Y3J0Y192ZGlzcGxheTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZnBfd19yYXRpbyA9IGRp dl9maXhlZDE2KHNyY193LCBkc3Rfdyk7Cj4gPiA+ID4gPiArCWZwX2hfcmF0aW8gPSBkaXZfZml4 ZWQxNihzcmNfaCwgZHN0X2gpOwo+ID4gPiA+ID4gKwlkb3duc2NhbGVfdyA9IG1heF9maXhlZDE2 KGZwX3dfcmF0aW8sCj4gPiA+ID4gPiB1MzJfdG9fZml4ZWQxNigxKSk7Cj4gPiA+ID4gPiArCWRv d25zY2FsZV9oID0gbWF4X2ZpeGVkMTYoZnBfaF9yYXRpbywKPiA+ID4gPiA+IHUzMl90b19maXhl ZDE2KDEpKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIG11bF9maXhlZDE2KGRvd25z Y2FsZV93LCBkb3duc2NhbGVfaCk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g K3VpbnRfZml4ZWRfMTZfMTZfdAo+ID4gPiA+ID4gK2ljbF9nZXRfcGlwZV9yYXRpbyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4g PiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpkcm1fcGxhbmVfc3RhdGU7Cj4gPiA+ID4gPiArCXVpbnRfZml4ZWRfMTZf MTZfdCBwaXBlX2Rvd25zY2FsZSwgcGlwZV9yYXRpbzsKPiA+ID4gPiA+ICsJdWludF9maXhlZF8x Nl8xNl90IG1heF9kb3duc2NhbGUgPSB1MzJfdG9fZml4ZWQxNigxKTsKPiA+ID4gPiA+ICsJc3Ry dWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtCj4gPiA+ID4g PiA+dWFwaS5jcnRjKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKCFjcnRjX3N0YXRlLT51 YXBpLmVuYWJsZSkKPiA+ID4gPiA+ICsJCXJldHVybiBtYXhfZG93bnNjYWxlOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmVfc3RhdGUo cGxhbmUsCj4gPiA+ID4gPiBkcm1fcGxhbmVfc3RhdGUsICZjcnRjX3N0YXRlLT51YXBpKSB7Cj4g PiA+ID4gPiArCQl1aW50X2ZpeGVkXzE2XzE2X3QgcGxhbmVfZG93bnNjYWxlOwo+ID4gPiA+ID4g KwkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4gPiA+ID4g PiArCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUoZHJtX3BsYW5lX3N0YXRlKTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJCWlmICghaW50ZWxfd21fcGxhbmVfdmlzaWJsZShjcnRjX3N0YXRlLAo+ID4g PiA+ID4gcGxhbmVfc3RhdGUpKQo+ID4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gKwkJcGxhbmVfZG93bnNjYWxlID0KPiA+ID4gPiA+IHNrbF9wbGFuZV9kb3duc2Nh bGVfYW1vdW50KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJCURSTV9ERUJVR19LTVMoIlBsYW5lICVkIGRvd25zY2FsZSBhbW91bnQKPiA+ID4gPiA+ICVk LiVkXG4iLAo+ID4gPiA+ID4gKwkJCSAgICAgIHRvX2ludGVsX3BsYW5lKHBsYW5lKS0+aWQsCj4g PiA+ID4gPiArCQkJICAgICAgcGxhbmVfZG93bnNjYWxlLnZhbCA+PiAxNiwKPiA+ID4gPiA+ICsJ CQkgICAgICBwbGFuZV9kb3duc2NhbGUudmFsICYgMHhmZmZmKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJCW1heF9kb3duc2NhbGUgPSBtYXhfZml4ZWQxNihwbGFuZV9kb3duc2NhbGUsCj4gPiA+ ID4gPiBtYXhfZG93bnNjYWxlKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlwaXBlX2Rvd25zY2FsZSA9IGljbF9waXBlX2Rvd25zY2FsZV9hbW91bnQo Y3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCURSTV9ERUJVR19LTVMoIlBpcGUg JWQgZG93bnNjYWxlIGFtb3VudCAlZC4lZFxuIiwKPiA+ID4gPiA+ICsJCSAgICAgICBjcnRjLT5w aXBlLCBwaXBlX2Rvd25zY2FsZS52YWwgPj4gMTYsCj4gPiA+ID4gPiArCQkgICAgICAgcGlwZV9k b3duc2NhbGUudmFsICYgMHhmZmZmKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcGlwZV9kb3du c2NhbGUgPSBtdWxfZml4ZWQxNihwaXBlX2Rvd25zY2FsZSwKPiA+ID4gPiA+IG1heF9kb3duc2Nh bGUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkgKiBDb252ZXJ0IHJl c3VsdCB0byBwZXJjZW50YWdlOiBnZXQgdGhlIGFjdHVhbCByYXRpbwo+ID4gPiA+ID4gaW5zdGVh ZAo+ID4gPiA+ID4gb2YgcmF0ZSwKPiA+ID4gPiA+ICsJICogdGhlbiBtdWx0aXBseSBieSAxMDAg dG8gZ2V0IHBlcmNlbnRhZ2UuCj4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ID4gKwlwaXBlX3JhdGlv ID0gdTMyX3RvX2ZpeGVkMTYoMTAwICoKPiA+ID4gPiA+IGRpdl9yb3VuZF91cF91MzJfZml4ZWQx NigxLAo+ID4gPiA+ID4gcGlwZV9kb3duc2NhbGUpKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ RFJNX0RFQlVHX0tNUygiUGlwZSAlZCByYXRpbyAlZC4lZFxuIiwgY3J0Yy0+cGlwZSwKPiA+ID4g PiA+ICsJCSAgICAgIHBpcGVfcmF0aW8udmFsID4+IDE2LCBwaXBlX3JhdGlvLnZhbCAmCj4gPiA+ ID4gPiAweGZmZmYpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gcGlwZV9yYXRpbzsK PiA+ID4gPiA+ICt9Cj4gPiA+ID4gCj4gPiA+ID4gWXVjay4gSSBqdXN0IGtpbGxlZCB0aGVzZS4K PiA+ID4gCj4gPiA+IEkgc3RpbGwgbmVlZCBwaXBlX3JhdGlvIGZybyBJQ0wgYXMgeW91IGtub3cs IHRoaXMgaXMgZGljdGF0ZWQgYnkKPiA+ID4gQlNwZWMsCj4gPiA+IG5vdCBieSBtZS4KPiA+IAo+ ID4gVGhhdCBwYXJ0IG9mIHRoZSBzcGVjIGlzIHByZXR0eSBjcmF6eSBJTU8uIEkgdGhpbmsgd2Ug c2hvdWxkIGp1c3QKPiA+IGlnbm9yZQo+ID4gaXQgZm9yIG5vdy4gQWxzbyBub3RoaW5nIGluIHRo ZXJlIHNheXMgd2UgbXVzdCB1c2UgYm90aCBzbGljZXMgZm9yIGEKPiA+IHNpbmdsZSBwaXBlIHNv IGlnbm9yaW5nIGRvZXNuJ3QgZXZlbiB2aW9sYXRlIHRoZSBzcGVjIGluIGFueSB3YXkuCj4gCj4g U28geW91IGFyZSBpbnN0cnVjdGluZyBtZSBub3cgdG8gaWdub3JlIEJTcGVjIGFzICJ3ZSBhcmUg c21hcnRlciI/Cj4gSSBkb24ndCB0aGluayB0aGlzIGlzIHByb3Blcmx5IHRvIGRvIGl0IHRoaXMg d2F5LiBMZXRzIGZpcnN0IGNoYW5nZSB0aGUKPiBCU3BlYywgaWYgd2UgZG9uJ3QgbGlrZSBwaXBl IHJhdGlvIGhlcmUgYW5kIHRoZW4gZHJpdmVyLiBDdXJyZW50bHkgdGhpcwo+IGlzIHdyaXR0ZW4g dGhhdCB3YXkgYW5kIGlmIHdlIGFyZSBnb2luZyB0byBkbyBldmVyeXRoaW5nIG91ciBvd24gd2F5 Cj4gaWdub3Jpbmcgc3BlY3MsIHRoaXMgaXMgZ29pbmcgdG8gYmUgY2hhb3MuCgpMaWtlIEkgc2Fp IHlvdSBkb24ndCBoYXZlIHRvIHZpb2xhdGUgdGhlIHNwZWMgYXQgYWxsLiBKdXN0IGRvbid0IHVz ZQp0d28gc2xpY2VzIGZvciB0aGUgc2FtZSBwaXBlIGFuZCB5b3UgY2FuIGF2b2lkIHRoZSB3aG9s ZSBzdHJhbmdlIHBpcGUKcmF0aW8gbGltaXRhdGlvbi4gV2Ugc2hvdWxkIGZpbGUgYSBic3BlYyBp c3N1ZSB0byBnZXQgdGhhdCBjbGFyaWZpZWQKdGhvdWdoLgoKPiAKPiA+IAo+ID4gPiAKPiA+ID4g PiAKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IHsK PiA+ID4gPiA+ICsJdTMyIGRidWZfbWFza1tJOTE1X01BWF9QSVBFU107Cj4gPiA+ID4gPiArCXUz MiBhY3RpdmVfcGlwZXM7Cj4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0FfREJVRl9TTElDRVMoREJ1ZjEpICBcCj4gPiA+ID4g PiArCXsgeyBEQnVmMSwgMCwgMCwgMCB9LCBCSVQoUElQRV9BKSB9Cj4gPiA+ID4gPiArI2RlZmlu ZSBJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCdWYxKSAgXAo+ID4gPiA+ID4gKwl7IHsgMCwgREJ1 ZjEsIDAsIDAgfSwgQklUKFBJUEVfQikgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQ19E QlVGX1NMSUNFUyhEQnVmMSkgIFwKPiA+ID4gPiA+ICsJeyB7IDAsIDAsIERCdWYxLCAwIH0sIEJJ VChQSVBFX0MpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0RfREJVRl9TTElDRVMoREJ1 ZjEpICBcCj4gPiA+ID4gPiArCXsgeyAwLCAwLCAwLCBEQnVmMSB9LCBCSVQoUElQRV9EKSB9Cj4g PiA+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAg XAo+ID4gPiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCAwLCAwIH0sIEJJVChQSVBFX0EpIHwgQklU KFBJUEVfQikgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQkNfREJVRl9TTElDRVMoREJ1 ZjEsIERCdWYyKSAgIFwKPiA+ID4gPiA+ICsJeyB7IDAsIERCdWYxLCBEQnVmMiwgMCB9LCBCSVQo UElQRV9CKSB8IEJJVChQSVBFX0MpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0JEX0RC VUZfU0xJQ0VTKERCdWYxLCBEQnVmMikgICBcCj4gPiA+ID4gPiArCXsgeyAwLCBEQnVmMSwgMCwg REJ1ZjIgfSwgQklUKFBJUEVfQikgfCBCSVQoUElQRV9EKSB9Cj4gPiA+ID4gPiArI2RlZmluZSBJ Q0xfUElQRV9BQ19EQlVGX1NMSUNFUyhEQnVmMSwgREJ1ZjIpICAgXAo+ID4gPiA+ID4gKwl7IHsg REJ1ZjEsIDAsIERCdWYyLCAwIH0sIEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQykgfQo+ID4gPiA+ ID4gKyNkZWZpbmUgSUNMX1BJUEVfQURfREJVRl9TTElDRVMoREJ1ZjEsIERCdWYyKSAgIFwKPiA+ ID4gPiA+ICsJeyB7IERCdWYxLCAwLCAwLCBEQnVmMiB9LCBCSVQoUElQRV9BKSB8IEJJVChQSVBF X0QpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0NEX0RCVUZfU0xJQ0VTKERCdWYxLCBE QnVmMikgICBcCj4gPiA+ID4gPiArCXsgeyAwLCAwLCBEQnVmMSwgREJ1ZjIgfSwgQklUKFBJUEVf QykgfCBCSVQoUElQRV9EKSB9Cj4gPiA+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkNfREJVRl9T TElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gPiA+ICsJeyB7IERCdWYxLCBEQnVm MiwgREJ1ZjMsIDAgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9CKQo+ID4gPiA+ID4gfAo+ID4g PiA+ID4gQklUKFBJUEVfQykgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQUNEX0RCVUZf U0xJQ0VTKERCdWYxLCBEQnVmMiwgREJ1ZjMpICBcCj4gPiA+ID4gPiArCXsgeyBEQnVmMSwgMCwg REJ1ZjIsIERCdWYzIH0sIEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQykKPiA+ID4gPiA+IHwKPiA+ ID4gPiA+IEJJVChQSVBFX0QpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0JDRF9EQlVG X1NMSUNFUyhEQnVmMSwgREJ1ZjIsIERCdWYzKSAgXAo+ID4gPiA+ID4gKwl7IHsgMCwgREJ1ZjEs IERCdWYyLCBEQnVmMyB9LCBCSVQoUElQRV9CKSB8IEJJVChQSVBFX0MpCj4gPiA+ID4gPiB8Cj4g PiA+ID4gPiBCSVQoUElQRV9EKSB9Cj4gPiA+ID4gPiArI2RlZmluZSBJQ0xfUElQRV9BQkRfREJV Rl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMykgIFwKPiA+ID4gPiA+ICsJeyB7IERCdWYxLCBE QnVmMiwgMCwgREJ1ZjMgfSwgQklUKFBJUEVfQSkgfCBCSVQoUElQRV9CKQo+ID4gPiA+ID4gfAo+ ID4gPiA+ID4gQklUKFBJUEVfRCkgfQo+ID4gPiA+ID4gKyNkZWZpbmUgSUNMX1BJUEVfQUJDX0RC VUZfU0xJQ0VTKERCdWYxLCBEQnVmMiwgREJ1ZjMpICBcCj4gPiA+ID4gPiArCXsgeyBEQnVmMSwg REJ1ZjIsIERCdWYzLCAwIH0sIEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQikKPiA+ID4gPiA+IHwK PiA+ID4gPiA+IEJJVChQSVBFX0MpIH0KPiA+ID4gPiA+ICsjZGVmaW5lIElDTF9QSVBFX0FCQ0Rf REJVRl9TTElDRVMoREJ1ZjEsIERCdWYyLCBEQnVmMywKPiA+ID4gPiA+IERCdWY0KSAgXAo+ID4g PiA+ID4gKwl7IHsgREJ1ZjEsIERCdWYyLCBEQnVmMywgREJ1ZjQgfSwgQklUKFBJUEVfQSkgfAo+ ID4gPiA+ID4gQklUKFBJUEVfQikgfCBcCj4gPiA+ID4gPiArCQkJCQkgIEJJVChQSVBFX0MpIHwK PiA+ID4gPiA+IEJJVChQSVBFX0QpIH0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKgo+ID4gPiA+ ID4gKyAqIFRhYmxlIHRha2VuIGZyb20gQnNwZWMgMTI3MTYKPiA+ID4gPiA+ICsgKiBQaXBlcyBk byBoYXZlIHNvbWUgcHJlZmVycmVkIERCdWYgc2xpY2UgYWZmaW5pdHksCj4gPiA+ID4gPiArICog cGx1cyB0aGVyZSBhcmUgc29tZSBoYXJkY29kZWQgcmVxdWlyZW1lbnRzIG9uIGhvdwo+ID4gPiA+ ID4gKyAqIHRob3NlIHNob3VsZCBiZSBkaXN0cmlidXRlZCBmb3IgbXVsdGlwaXBlIHNjZW5hcmlv cy4KPiA+ID4gPiA+ICsgKiBGb3IgbW9yZSBEQnVmIHNsaWNlcyBhbGdvcml0aG0gY2FuIGdldCBl dmVuIG1vcmUgbWVzc3kKPiA+ID4gPiA+ICsgKiBhbmQgbGVzcyByZWFkYWJsZSwgc28gZGVjaWRl ZCB0byB1c2UgYSB0YWJsZSBhbG1vc3QKPiA+ID4gPiA+ICsgKiBhcyBpcyBmcm9tIEJTcGVjIGl0 c2VsZiAtIHRoYXQgd2F5IGl0IGlzIGF0IGxlYXN0IGVhc2llcgo+ID4gPiA+ID4gKyAqIHRvIGNv bXBhcmUsIGNoYW5nZSBhbmQgY2hlY2suCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RydWN0 IGRidWZfc2xpY2VfY29uZl9lbnRyeSBpY2xfYWxsb3dlZF9kYnVmc1tdID0gewo+ID4gPiA+ID4g K3sgeyAwLCAwLCAwLCAwIH0sIDAgfSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BX0RCVUZfU0xJQ0VT KERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLCAgLyogcGlwZQo+ID4gPiA+ID4gcmF0aW8KPiA+ ID4gPiA+IDwgODguOCAqLwo+ID4gPiA+ID4gK0lDTF9QSVBFX0FfREJVRl9TTElDRVMoREJVRl9T MV9CSVQpLCAgICAgICAgICAgICAgICAvKiBmb3IKPiA+ID4gPiA+IHBpcGUKPiA+ID4gPiA+IHJh dGlvID49IDg4LjggKi8KPiA+ID4gPiA+ICtJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFf QklUIHwgREJVRl9TMl9CSVQpLCAgLyogcGlwZQo+ID4gPiA+ID4gcmF0aW8KPiA+ID4gPiA+IDwg ODguOCAqLwo+ID4gPiA+ID4gK0lDTF9QSVBFX0JfREJVRl9TTElDRVMoREJVRl9TMV9CSVQpLCAg ICAgICAgICAgICAgICAvKiBmb3IKPiA+ID4gPiA+IHBpcGUKPiA+ID4gPiA+IHJhdGlvID49IDg4 LjggKi8KPiA+ID4gPiA+ICtJQ0xfUElQRV9DX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJV Rl9TMl9CSVQpLCAgLyogcGlwZQo+ID4gPiA+ID4gcmF0aW8KPiA+ID4gPiA+IDwgODguOCAqLwo+ ID4gPiA+ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMl9CSVQpLCAgICAgICAgICAg ICAgICAvKiBmb3IKPiA+ID4gPiA+IHBpcGUKPiA+ID4gPiA+IHJhdGlvID49IDg4LjggKi8KPiA+ ID4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQp LAo+ID4gPiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1My X0JJVCksCj4gPiA+ID4gPiArSUNMX1BJUEVfQkNfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERC VUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BQkNfREJVRl9TTElDRVMoREJVRl9TMV9C SVQsIERCVUZfUzFfQklULAo+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gK307Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ICsgKiBUYWJsZSB0YWtlbiBmcm9tIEJz cGVjIDQ5MjU1Cj4gPiA+ID4gPiArICogUGlwZXMgZG8gaGF2ZSBzb21lIHByZWZlcnJlZCBEQnVm IHNsaWNlIGFmZmluaXR5LAo+ID4gPiA+ID4gKyAqIHBsdXMgdGhlcmUgYXJlIHNvbWUgaGFyZGNv ZGVkIHJlcXVpcmVtZW50cyBvbiBob3cKPiA+ID4gPiA+ICsgKiB0aG9zZSBzaG91bGQgYmUgZGlz dHJpYnV0ZWQgZm9yIG11bHRpcGlwZSBzY2VuYXJpb3MuCj4gPiA+ID4gPiArICogRm9yIG1vcmUg REJ1ZiBzbGljZXMgYWxnb3JpdGhtIGNhbiBnZXQgZXZlbiBtb3JlIG1lc3N5Cj4gPiA+ID4gPiAr ICogYW5kIGxlc3MgcmVhZGFibGUsIHNvIGRlY2lkZWQgdG8gdXNlIGEgdGFibGUgYWxtb3N0Cj4g PiA+ID4gPiArICogYXMgaXMgZnJvbSBCU3BlYyBpdHNlbGYgLSB0aGF0IHdheSBpdCBpcyBhdCBs ZWFzdCBlYXNpZXIKPiA+ID4gPiA+ICsgKiB0byBjb21wYXJlLCBjaGFuZ2UgYW5kIGNoZWNrLgo+ ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0cnVjdCBkYnVmX3NsaWNlX2NvbmZfZW50cnkgdGds X2FsbG93ZWRfZGJ1ZnNbXSA9IHsKPiA+ID4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4g PiA+ID4gPiArSUNMX1BJUEVfQV9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERCVUZfUzJfQklU KSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9T Ml9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBE QlVGX1MyX0JJVCksCj4gPiA+ID4gPiArSUNMX1BJUEVfRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJ VCB8IERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVG X1MyX0JJVCwgREJVRl9TMV9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VT KERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiArSUNMX1BJUEVfQkNfREJVRl9T TElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9BRF9E QlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBF X0JEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiArSUNM X1BJUEVfQ0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ ICtJQ0xfUElQRV9BQkRfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ID4g PiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gK0lDTF9QSVBFX0FCQ19EQlVGX1NMSUNFUyhE QlVGX1MxX0JJVCwgREJVRl9TMV9CSVQsCj4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4g PiArSUNMX1BJUEVfQUNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwKPiA+ ID4gPiA+IERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ICtJQ0xfUElQRV9CQ0RfREJVRl9TTElDRVMo REJVRl9TMV9CSVQsIERCVUZfUzJfQklULAo+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ ID4gK0lDTF9QSVBFX0FCQ0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ ID4gPiA+ID4gREJVRl9TMl9CSVQsCj4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiAr fTsKPiA+ID4gPiAKPiA+ID4gPiBNeSBleWVzIQo+ID4gPiA+IAo+ID4gPiA+IEkgaGF2ZSB0byB0 aGluayB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWR1Y2UgYWxsIHRoYXQgdG8gYSBoYW5kZnVsCj4g PiA+ID4gb2YgbGluZXMgb2YgY29kZS4KPiA+ID4gCj4gPiA+IFllYWgsIHRoZW4gd2UgYXJlIGdv aW5nIHRvIGhhdmUgYSBodWdlIGZ1bmN0aW9uIHdpdGggbG90cyBvZiB3ZWlyZAo+ID4gPiBkZWZp bml0aW9ucywgdW5mb3J0dW5hdGVseSBCU3BlYyB0YWJsZSBoYXMgcXVpdGUgc3RyYW5nZSBEQnVm Cj4gPiA+IGFzc2lnbm1lbnRzIGxpa2UgCj4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhE QlVGX1MyX0JJVCwgREJVRl9TMV9CSVQpLAo+ID4gPiArSUNMX1BJUEVfQUNfREJVRl9TTElDRVMo REJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gCj4gPiA+IGkuZSBzbGljZXMgY2FuIGdl dCBtaXhlZCBpbiBhIHF1aXRlIHZhcmlvdXMgd2F5cy4gVGhlcmUgaXMgbm8KPiA+ID4gcmF0aW9u YWwgcGF0dGVybiBpbiB0aG9zZSBhbmQgY291bGQgYmUgZXZlbiBkYW5nZXJvdXMgdG8gdHJ5IHRv IAo+ID4gPiBvcHRpbWl6ZSBpdCBzb21lIHdheSwgYXMgb25lIGRheSBpdCBtaWdodCBjaGFuZ2Ug YWdhaW4gaW4gc29tZQo+ID4gPiB1bnByZWRpY3RhYmxlIHdheS4KPiA+ID4gCj4gPiA+IFdvdWxk IHlvdSBwcmVmZXIgdG8gaGF2ZSBpdCBsaWtlCj4gPiA+IAo+ID4gPiBpZiAocGlwZXMgYXJlIEEg YW5kIEIpCj4gPiA+ICAgICBwcm9ncmFtIFMyIHRvIEEgYW5kIFMxIHRvIEIKPiA+ID4gaWYgKHBp cGVzIGFyZSBBIGFuZCBDKQo+ID4gPiAgICAgcHJvZ3JhbSBTMSB0byBBIGFuZCBTMiB0byBDCj4g PiA+IC4uLgo+ID4gPiAKPiA+ID4gSSB3b3VsZCBwcmVmZXIgYXQgbGVhc3QgdG8gc2VlIGl0IGlu IGEgY29tcGFyYWJsZSB3YXkgd2l0aCB0aGUKPiA+ID4gdGFibGUgd2UgaGF2ZSBpbiBCU3BlYywg cmF0aGVyIHRoYW4gaGF2aW5nIGxvdHMgb2Ygd2VpcmQgbG9va2luZwo+ID4gPiBpZi1lbHNlIHN0 YXRlbWVudHMsIEdFTiBjaGVja3MgYW5kIHNvIG9uLgo+ID4gPiAKPiA+ID4gSSBrbmV3IHRoaXMg dGFibGUgd2FzIG5vdCBnb2luZyB0byBsb29rIGxpa2UgaXQgaXMgZG9uZSB0eXBpY2FsbHkKPiA+ ID4gaGVyZSAtIGJ1dCByZWFsbHkgbXkgb3BpbmlvbiB0aGF0IGl0IGlzIHdheSBiZXR0ZXIgdGhh biBoYXJkY29kaW5nCj4gPiA+IGl0IGludG8gc29tZSB3ZWlyZCBhbGdvcml0aG0sIHdoaWNoIHdv dWxkIGJlIGhhcmQgdG8gY29tcGFyZSB0byAKPiA+ID4gaW5pdGlhbCB0YWJsZSwgd2hpY2ggaXMg YWxyZWFkeSBzdHJhbmdlIGVub3VnaC4KPiA+ID4gCj4gPiA+IElmIHlvdSBkb24ndCBsaWtlIGl0 IC0gY291bGQgeW91IHBsZWFzZSBleHBsYWluIHdoeSB0aGlzIGlzIGV4YWN0bHkKPiA+ID4gd29y c2UgdGhhbiBoYXZpbmcgbG9uZyBmdW5jdGlvbnMgd2l0aCBoYXJkY29kZWQgY2hlY2tzPwo+ID4g Cj4gPiBJIHRoaW5rIHdlIHNob3VsZCBiZSBhYmxlIHRvIGVuY29kZSB0aGlzIHNpbXBseSB1c2lu ZyB0aGUKPiA+ICJQaXBlIGFuZCBEQlVGIG9yZGVyaW5nIiBzdHVmZiBmcm9tIHRoZSBzcGVjLiBJ ZS4ganVzdCBzcGVjaWZ5IHdoYXQKPiA+IGlzIHRoZSBkaXN0YW5jZSBvZiBlYWNoIHBpcGUgZnJv bSBlYWNoIGRidWYgc2xpY2UuIFRoZW4gYWxsIHdlIGhhdmUKPiA+IHRvIGRvIGlzIG1pbmltaXpl IHRoZSB0b3RhbCBkaXN0YW5jZS4gVGhlIGZvbGxvd2luZyB0YWJsZXMgSSB0aGluawo+ID4gc2hv dWxkIGVuY29kZSB0aGF0IHJlYXNvbmFibHkgY29uY2lzZWx5Ogo+ID4gCj4gPiAvKiBwaXBlQSAt IERCVUZfUzEgLSBwaXBlQiAtIHBpcGVDIC0gREJVRl9TMiAqLwo+ID4gc3RhdGljIGNvbnN0IHU4 IGljbF9kYnVmX2Rpc3RhbmNlW11bXSB7Cj4gPiAJW1BJUEVfQV0gPSB7IFtEQlVGX1MxXSA9IDEs IFtEQlVGX1MyXSA9IDQsIH0sCj4gPiAJW1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVG X1MyXSA9IDIsIH0sCj4gPiAJW1BJUEVfQ10gPSB7IFtEQlVGX1MxXSA9IDIsIFtEQlVGX1MyXSA9 IDEsIH0sCj4gPiB9Owo+ID4gCj4gPiAvKiBwaXBlRCAtIERCVUZfUzIgLSBwaXBlQyAtIHBpcGVB IC0gREJVRl9TMSAtIHBpcGVCICovCj4gPiBzdGF0aWMgY29uc3QgdTggdGdsX2RidWZfZGlzdGFu Y2VbXVtdIHsKPiA+IAlbUElQRV9BXSA9IHsgW0RCVUZfUzFdID0gMSwgW0RCVUZfUzJdID0gMiwg fSwKPiA+IAlbUElQRV9CXSA9IHsgW0RCVUZfUzFdID0gMSwgW0RCVUZfUzJdID0gNCwgfSwKPiA+ IAlbUElQRV9DXSA9IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZfUzJdID0gMSwgfSwKPiA+IAlbUElQ RV9EXSA9IHsgW0RCVUZfUzFdID0gNCwgW0RCVUZfUzJdID0gMSwgfSwKPiA+IH07Cj4gCj4gSSB0 aGluayB5b3UgYXJlIG1pc3NpbmcgbXkgcG9pbnQuIEkgd2lsbCBleHBsYWluIHdoeS4KPiBNeSBp bml0aWFsIGlkZWEgd2FzIHNpbWlsYXIsIHVzZSBzb21lIGtpbmQgb2YgZGlzdGFuY2UKPiBtZXRy aWNzIGFuZCBlbmNvZGUgZXZlcnl0aGluZyBpbiBhIHNtYXJ0IHdheS4KPiBDdXJyZW50IEJTcGVj IHRhYmxlIGhhcyBzb21ldGltZXMgc2xpY2VzIHN3YXBwZWQgZm9yIG5vIHJlYXNvbi4KPiAKPiBU aGVyZSBhcmUgc2VlbSB0byBiZSBzb21lIGhhcmR3YXJlIGNvbnN0cmFpbnRzIHdlIGFyZSBub3Qg YXdhcmUKPiBvZi4gRm9yIGV4YW1wbGUgZm9yIFRHTCBwaXBlcyBBLEIgZ2V0IFMyIGFuZCBTMSBz bGljZXMsCgpBL1MxICsgQi9TMiA9IDEgKyA0ID0gNQpBL1MyICsgQi9TMSA9IDIgKyAxID0gMwoK PiBidXQgcGlwZXMgQSBDIGdldCBTMSBhbmQgUzIuCgpBL1MxICsgQy9TMiA9IDEgKyAxID0gMgpB L1MyICsgQy9TMSA9IDIgKyAyID0gNAoKU28gaXQncyBleGFjdGx5IGFzIG15IGRpc3RhbmNlIHRh YmxlIHNheXMgaXQgc2hvdWxkIGJlLgoKPiAKPiBpZiB5b3UgZW5jb2RlIGFsbCB0aGlzIGludG8g c29tZSBraW5kIG9mIGRpc3RhbmNlIGFsZ29yaXRobSwKPiB0aG9zZSBkaWZmZXJlbmNlcyB3b3Vs ZCBiZSBlbm91cm1vdXNseSBkaWZmaWN1bHQgdG8gc3BvdCBhbmQKPiBjb21wYXJlIHdpdGggYWN0 dWFsIHRhYmxlLiBUaGF0IGlzIHdoeSBJIGRlY2lkZWQgdG8gZG8gaXQgdGhhdAo+IHdheS4KPiAK PiBNb3N0IGxpa2VseSB5ZXMgeW91IGNhbiBzb2x2ZSBpdCBieSB1c2luZyB0aGlzIG1ldHJpY3Ms Cj4gYnV0IHdpbGwgaXQgcmVhbGx5IGJlIHRoZW4gbW9yZSByZWFkYWJsZSBhbmQgY29tcGFyYWJs ZQo+IHdpdGggcmVmZXJlbmNlIHRhYmxlPyAKPiBXaGF0IGlmIHNvbWUgY29udHJhaW50cyB3aWxs IGJlIGFkZGVkIGFnYWluLCBsaWtlIHBpcGUgcmF0aW8/Cj4gCj4gPiAKPiA+IC8qCj4gPiAgKiBw aXBlQSAtIERCVUZfUzAgLSBEQlVGX1MxIC0gcGlwZUIKPiA+ICAqIHBpcGVDIC0gREJVRl9TMiAt IERCVUZfUzMgLSBwaXBlRAo+ID4gICovCj4gPiBzdGF0aWMgY29uc3QgdTggZnV0dXJlX2RidWZf ZGlzdGFuY2VbXVtdIHsKPiA+IAlbUElQRV9BXSA9IHsgW0RCVUZfUzBdID0gMSwgW0RCVUZfUzFd ID0gMywgfSwKPiA+IAlbUElQRV9CXSA9IHsgW0RCVUZfUzBdID0gMywgW0RCVUZfUzFdID0gMSwg fSwKPiA+IAlbUElQRV9DXSA9IHsgW0RCVUZfUzJdID0gMSwgW0RCVUZfUzNdID0gMywgfSwKPiA+ IAlbUElQRV9EXSA9IHsgW0RCVUZfUzJdID0gMywgW0RCVUZfUzNdID0gMSwgfSwKPiA+IH07Cj4g PiAKPiA+IEkgc3VwcG9zZSB3ZSBjb3VsZCBtYWtlIHRoYXQgZXZlbiBtb3JlIG1pbmltYWwgYnkg anVzdAo+ID4gZGlyZWN0bHkgc3RpY2tpbmcgdGhhdCAiUGlwZSBhbmQgREJVRiBvcmRlcmluZyIg bGFuZ3VhZ2UKPiA+IGludG8gYSBzaW5nbGUgYXJyYXkgYnV0IGFuZCB0aGVuIGNhbGN1bGF0ZSBl YWNoIGRpc3RhbmNlCj4gPiBmcm9tIGl0LCBidXQgdGhhdCBpcyBwZXJoYXBzIG1vcmUgd29yaywg YW5kIHdlJ2QgbmVlZAo+ID4gc29tZSBraW5kIG9mIGVudW0ganVzdCBmb3IgdGhhdCBzbyB0aGF0 IHdlIGhhdmUgYSBzaW5nbGUKPiA+IG5hbWVzcGFjZSBmb3IgdGhlIHBpcGVzIGFuZCBkYnVmIHNs aWNlcy4gU28gaSBoYXZlIGEKPiA+IGZlZWxpbmcgaGF2aW5nIHRob3NlIGRpc3RhbmNlcyBwcmUt Y29tcHV0ZWQgaW4gYSB0YWJsZQo+ID4gbGlrZSB0aGV0IGlzIG1heWJlIGEgYmV0dGVyIHdheSB0 byBnby4KPiAKPiBHb29kIGx1Y2sgdGhlbiBzcG90aW5nIGRpZmZlcmVuY2VzIHdpdGggdGhlIEJT cGVjIHRhYmxlIG9uY2UgaXQKPiBnZXRzIGNoYW5nZWQuCgpXZWxsLCBJJ2QgcmF0aGVyIGRvIHRo YXQgdGhhbiBkZWNvZGUgdGhyb3VnaCBsYXllcnMgb2YgY3BwIG1hY3Jvcy4KQWxzbyBhdG0gdGhl IHRhYmxlIGhhcyBubyBleHRyYSByZXN0cmljdGlvbnMgc28gaXQncyBjbGVhcmx5IHRoZXJlCmp1 c3QgYmVjYXVzZSBzb21lb25lIHRob3VnaHQgdGhleSdkIHdyaXRlIG91dCB0aGUgcmVzdWx0cyBv ZiB0aGUKZGlzdGFuY2UgY2FsY3VsYXRpb25zLiBJbiBnZW5lcmFsIGJzcGVjIHN0eWxlIGlzIHNv bWV3aGF0IGFubm95aW5nCndoZXJlIHRoZXkgdHJ5IHRvIHdyaXRlIG91dCB0aGluZ3MgaW4gdGhl IGxvd2VzdCBsZXZlbCBvZiBhYnNyYWN0aW9uCnBvc3NpYmxlICh0aGV5IGFyZSBoYXJkd2FyZSBw ZW9wbGUgYWZ0ZXIgYWxsKS4gSSdkIG11Y2ggcHJlZmVyIGEKaGlnaGVyIGxldmVsIGRlc2NyaXB0 aW9uIG9mIHRoZSBpc3N1ZS4KCj4gCj4gPiAKPiA+ID4gCj4gPiA+IEkgdGhpbmsgdGhpcyBpcyBw cmV0dHkgc3R1cGlkIHRvIGZpeCBzdHVmZiB3aGljaCBsb29rcyBuZXcgb3IKPiA+ID4gdW51c3Vh bAo+ID4gPiBqdXN0IGJlY2F1c2Ugc29tZWJvZHkgZG9lc24ndCBsaWtlIGl0LCB3aXRob3V0IGV2 ZW4gY29uc3RydWN0aXZlCj4gPiA+IGFyZ3VpbmcuCj4gPiA+IAo+ID4gPiAtIFN0YW4KPiA+ID4g Cj4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoKPiA+ID4gPiA+ICsg KiBUaGlzIGZ1bmN0aW9uCj4gPiA+ID4gCj4gPiA+ID4gIlRoaXMgZnVuY3Rpb24iIGlzIHRvdGFs bHkgcmVkdW5kYW50LiBEaXR0byBlbHNld2hlcmUuCj4gPiA+ID4gCj4gPiA+ID4gPiBmaW5kcyBh biBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlIGNvbmZpZ3VyYXRpb24gYW5kCj4gPiA+ID4g PiArICogcmV0dXJucyBjb3JyZXNwb25kZW50IERCdWYgc2xpY2UgbWFzayBhcyBzdGF0ZWQgaW4g QlNwZWMKPiA+ID4gPiA+IGZvcgo+ID4gPiA+ID4gcGFydGljdWxhcgo+ID4gPiA+ID4gKyAqIHBs YXRmb3JtLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0YXRpYyB1MzIgaWNsX2dldF9hbGxv d2VkX2RidWZfbWFzayhpbnQgcGlwZSwKPiA+ID4gPiA+ICsJCQkJICAgICB1MzIgYWN0aXZlX3Bp cGVzLAo+ID4gPiA+ID4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdAo+ID4gPiA+ID4gaW50ZWxfY3J0 Y19zdGF0ZQo+ID4gPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlp bnQgaTsKPiA+ID4gPiA+ICsJdWludF9maXhlZF8xNl8xNl90IHBpcGVfcmF0aW87Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAqIENhbGN1bGF0ZSBwaXBlIHJhdGlvIGFz IHN0YXRlZCBpbiBCU3BlYyAyODY5Mgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJcGlwZV9y YXRpbyA9IGljbF9nZXRfcGlwZV9yYXRpbyhjcnRjX3N0YXRlKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWNsX2FsbG93ZWRfZGJ1ZnMpOyBpKysp IHsKPiA+ID4gPiA+ICsJCWlmIChpY2xfYWxsb3dlZF9kYnVmc1tpXS5hY3RpdmVfcGlwZXMgPT0K PiA+ID4gPiA+IGFjdGl2ZV9waXBlcykKPiA+ID4gPiA+IHsKPiA+ID4gPiA+ICsJCQlpZiAoaHdl aWdodDMyKGFjdGl2ZV9waXBlcykgPT0gMSkgewo+ID4gPiA+ID4gKwkJCQkvKgo+ID4gPiA+ID4g KwkJCQkgKiBBY2NvcmRpbmcgdG8gQlNwZWMgMTI3MTY6IGlmCj4gPiA+ID4gPiByYXRpbwo+ID4g PiA+ID4gPiA9IDg4LjgKPiA+ID4gPiA+IAo+ID4gPiA+ID4gKwkJCQkgKiBhbHdheXMgdXNlIHNp bmdsZSBkYnVmCj4gPiA+ID4gPiBzbGljZS4KPiA+ID4gPiA+ICsJCQkJICovCj4gPiA+ID4gPiAr CQkJCWlmIChwaXBlX3JhdGlvLnZhbCA+PQo+ID4gPiA+ID4gZGl2X2ZpeGVkMTYoODg4LAo+ID4g PiA+ID4gMTApLnZhbCkKPiA+ID4gPiA+ICsJCQkJCSsraTsKPiA+ID4gPiA+ICsJCQl9Cj4gPiA+ ID4gPiArCQkJcmV0dXJuCj4gPiA+ID4gPiBpY2xfYWxsb3dlZF9kYnVmc1tpXS5kYnVmX21hc2tb cGlwZV07Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsJcmV0dXJuIDA7 Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiArICogVGhp cyBmdW5jdGlvbiBmaW5kcyBhbiBlbnRyeSB3aXRoIHNhbWUgZW5hYmxlZCBwaXBlCj4gPiA+ID4g PiBjb25maWd1cmF0aW9uIGFuZAo+ID4gPiA+ID4gKyAqIHJldHVybnMgY29ycmVzcG9uZGVudCBE QnVmIHNsaWNlIG1hc2sgYXMgc3RhdGVkIGluIEJTcGVjCj4gPiA+ID4gPiBmb3IKPiA+ID4gPiA+ IHBhcnRpY3VsYXIKPiA+ID4gPiA+ICsgKiBwbGF0Zm9ybS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4g PiA+ICtzdGF0aWMgdTMyIHRnbF9nZXRfYWxsb3dlZF9kYnVmX21hc2soaW50IHBpcGUsCj4gPiA+ ID4gPiArCQkJCSAgICAgdTMyIGFjdGl2ZV9waXBlcywKPiA+ID4gPiA+ICsJCQkJICAgICBjb25z dCBzdHJ1Y3QKPiA+ID4gPiA+IGludGVsX2NydGNfc3RhdGUKPiA+ID4gPiA+ICpjcnRjX3N0YXRl KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJaW50IGk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRnbF9hbGxvd2VkX2RidWZzKTsgaSsrKSB7Cj4g PiA+ID4gPiArCQlpZiAodGdsX2FsbG93ZWRfZGJ1ZnNbaV0uYWN0aXZlX3BpcGVzID09Cj4gPiA+ ID4gPiBhY3RpdmVfcGlwZXMpCj4gPiA+ID4gPiArCQkJcmV0dXJuCj4gPiA+ID4gPiB0Z2xfYWxs b3dlZF9kYnVmc1tpXS5kYnVmX21hc2tbcGlwZV07Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsJ cmV0dXJuIDA7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3UzMiBpOTE1X2dl dF9hbGxvd2VkX2RidWZfbWFzayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ID4gPiA+ID4gKmRl dl9wcml2LAo+ID4gPiA+ID4gKwkJCQkgICAgICBpbnQgcGlwZSwgdTMyCj4gPiA+ID4gPiBhY3Rp dmVfcGlwZXMsCj4gPiA+ID4gPiArCQkJCSAgICAgIGNvbnN0IHN0cnVjdAo+ID4gPiA+ID4gaW50 ZWxfY3J0Y19zdGF0ZQo+ID4gPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ID4gPiArewo+ID4gPiA+ ID4gKwlpZiAoSVNfR0VOKGRldl9wcml2LCAxMSkpCj4gPiA+ID4gPiArCQlyZXR1cm4gaWNsX2dl dF9hbGxvd2VkX2RidWZfbWFzayhwaXBlLAo+ID4gPiA+ID4gKwkJCQkJCSBhY3RpdmVfcGlwZXMs Cj4gPiA+ID4gPiArCQkJCQkJIGNydGNfc3RhdGUpOwo+ID4gPiA+ID4gKwllbHNlIGlmIChJU19H RU4oZGV2X3ByaXYsIDEyKSkKPiA+ID4gPiA+ICsJCXJldHVybiB0Z2xfZ2V0X2FsbG93ZWRfZGJ1 Zl9tYXNrKHBpcGUsCj4gPiA+ID4gPiArCQkJCQkJIGFjdGl2ZV9waXBlcywKPiA+ID4gPiA+ICsJ CQkJCQkgY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAqIEZvciBhbnl0 aGluZyBlbHNlIGp1c3QgcmV0dXJuIG9uZSBzbGljZSB5ZXQuCj4gPiA+ID4gPiArCSAqIFNob3Vs ZCBiZSBleHRlbmRlZCBmb3Igb3RoZXIgcGxhdGZvcm1zLgo+ID4gPiA+ID4gKwkgKi8KPiA+ID4g PiA+ICsJcmV0dXJuIERCVUZfUzFfQklUOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICBzdGF0aWMgdTY0Cj4gPiA+ID4gPiAgaWNsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3Jh dGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUKPiA+ID4gPiA+ICpjcnRjX3N0YXRlLAo+ID4gPiA+ ID4gIAkJCQkgdTY0ICpwbGFuZV9kYXRhX3JhdGUpCj4gPiA+ID4gPiAtLSAKPiA+ID4gPiA+IDIu MTcuMQo+ID4gPiA+IAo+ID4gPiA+IAo+ID4gCj4gPiAKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50 ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4