From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: Re: [PATCH v4] drm/i915 : Added Programming of the MOCS Date: Mon, 29 Jun 2015 09:21:47 +0100 (BST) Message-ID: References: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> <87ioact03d.fsf@riseup.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 09AE76E811 for ; Mon, 29 Jun 2015 01:21:49 -0700 (PDT) In-Reply-To: <87ioact03d.fsf@riseup.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Francisco Jerez Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyNSBKdW4gMjAxNSwgRnJhbmNpc2NvIEplcmV6IHdyb3RlOgoKPiBQZXRlciBBbnRv aW5lIDxwZXRlci5hbnRvaW5lQGludGVsLmNvbT4gd3JpdGVzOgo+Cj4+IFRoaXMgY2hhbmdlIGFk ZHMgdGhlIHByb2dyYW1taW5nIG9mIHRoZSBNT0NTIHJlZ2lzdGVycyB0byB0aGUgZ2VuIDkrCj4+ IHBsYXRmb3Jtcy4gVGhpcyBjaGFuZ2Ugc2V0IHByb2dyYW1zIHRoZSBNT0NTIHJlZ2lzdGVyIHZh bHVlcyB0byBhIHNldAo+PiBvZiB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCB0byBiZSBvcHRpbWFs Lgo+Pgo+PiBJdCBjcmVhdGVzIGEgZml4ZWQgcmVnaXN0ZXIgc2V0IHRoYXQgaXMgcHJvZ3JhbW1l ZCBhY3Jvc3MgdGhlIGRpZmZlcmVudAo+PiBlbmdpbmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2 ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25lIGFzIHRoZQo+PiBtYWluIFJDUyBjb250ZXh0 IG9ubHkgaG9sZHMgdGhlIHJlZ2lzdGVycyBmb3IgaXRzZWxmIGFuZCB0aGUgc2hhcmVkCj4+IEwz IHZhbHVlcy4gQnkgdHJ5aW5nIHRvIGtlZXAgdGhlIHJlZ2lzdGVycyBjb25zaXN0ZW50IGFjcm9z cyB0aGUKPj4gZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2UgdGhlIHByb2dyYW1taW5n IGZvciB0aGUgcmVnaXN0ZXJzCj4+IGNvbnNpc3RlbnQuCj4+Cj4+IHYyOgo+PiAtJ3N0YXRpYyBj b25zdCcgZm9yIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdHlsZSBjaGFuZ2VzLihNYXR0 IFR1cm5lcikKPj4gdjM6Cj4+IC0gTWFrZSB0aGUgdGFibGVzICJzbGlnaHRseSIgbW9yZSByZWFk YWJsZS4gKERhbWllbiBMZXNwaWF1KQo+PiAtIFVwZGF0ZWQgdGFibGVzIGZpeCBwZXJmb3JtYW5j ZSByZWdyZXNzaW9uLgo+PiB2NDoKPj4gLSBDb2RlIGZvcm1hdHRpbmcuIChDaHJpcyBXaWxzb24p Cj4+IC0gcmUtcHJpdmF0aXNlZCBtb2NzIGNvZGUuIChEYW5pZWwgVmV0dGVyKQo+Pgo+PiBTaWdu ZWQtb2ZmLWJ5OiBQZXRlciBBbnRvaW5lIDxwZXRlci5hbnRvaW5lQGludGVsLmNvbT4KPj4gLS0t Cj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgfCAgIDEgKwo+PiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgIHwgICA5ICsKPj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jICB8ICAxMCArLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bHJjLmggIHwgICA0ICsKPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYyB8IDM3 MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbW9jcy5oIHwgIDY0ICsrKysrKysKPj4gIDYgZmlsZXMgY2hhbmdlZCwg NDYwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK Pj4gaW5kZXggYjdkZGY0OC4uYzc4MWUxOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4g QEAgLTM1LDYgKzM1LDcgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPj4gIAkgIGk5 MTVfaXJxLm8gXAo+PiAgCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCj4+ICAJICBpbnRlbF9scmMu byBcCj4+ICsJICBpbnRlbF9tb2NzLm8gXAo+PiAgCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKPj4g IAkgIGludGVsX3VuY29yZS5vCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+PiBpbmRleCA3 MjEzMjI0Li4zYTQzNWI1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gQEAgLTc4 MjksNCArNzgyOSwxMyBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dlbGxzIHsKPj4gICNkZWZpbmUg X1BBTEVUVEVfQSAoZGV2X3ByaXYtPmluZm8uZGlzcGxheV9tbWlvX29mZnNldCArIDB4YTAwMCkK Pj4gICNkZWZpbmUgX1BBTEVUVEVfQiAoZGV2X3ByaXYtPmluZm8uZGlzcGxheV9tbWlvX29mZnNl dCArIDB4YTgwMCkKPj4KPj4gKy8qIE1PQ1MgKE1lbW9yeSBPYmplY3QgQ29udHJvbCBTdGF0ZSkg cmVnaXN0ZXJzICovCj4+ICsjZGVmaW5lIEdFTjlfTE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMg Q2FjaGUgQ29udHJvbCBiYXNlICovCj4+ICsKPj4gKyNkZWZpbmUgR0VOOV9HRlhfTU9DU18wCQko MHhjODAwKQkvKiBHcmFwaGljcyBNT0NTIGJhc2UgcmVnaXN0ZXIqLwo+PiArI2RlZmluZSBHRU45 X01GWDBfTU9DU18wCSgweGM5MDApCS8qIE1lZGlhIDAgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KPj4g KyNkZWZpbmUgR0VOOV9NRlgxX01PQ1NfMAkoMHhjQTAwKQkvKiBNZWRpYSAxIE1PQ1MgYmFzZSBy ZWdpc3RlciovCj4+ICsjZGVmaW5lIEdFTjlfVkVCT1hfTU9DU18wCSgweGNCMDApCS8qIFZpZGVv IE1PQ1MgYmFzZSByZWdpc3RlciovCj4+ICsjZGVmaW5lIEdFTjlfQkxUX01PQ1NfMAkJKDB4Y2Mw MCkJLyogQmxpdHRlciBNT0NTIGJhc2UgcmVnaXN0ZXIqLwo+PiArCj4+ICAjZW5kaWYgLyogX0k5 MTVfUkVHX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IGluZGV4IDlmNTQ4NWQu LjczYjkxOWQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IEBAIC0xMzUsNiAr MTM1LDcgQEAKPj4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+PiAgI2luY2x1ZGUgPGRybS9pOTE1 X2RybS5oPgo+PiAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4+ICsjaW5jbHVkZSAiaW50ZWxfbW9j cy5oIgo+Pgo+PiAgI2RlZmluZSBHRU45X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIyICogUEFH RV9TSVpFKQo+PiAgI2RlZmluZSBHRU44X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIwICogUEFH RV9TSVpFKQo+PiBAQCAtNzk2LDcgKzc5Nyw3IEBAIHN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3By ZXBhcmUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4+ICAgKgo+PiAgICogUmV0 dXJuOiBub24temVybyBpZiB0aGUgcmluZ2J1ZmZlciBpcyBub3QgcmVhZHkgdG8gYmUgd3JpdHRl biB0by4KPj4gICAqLwo+PiAtc3RhdGljIGludCBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4oc3Ry dWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4+ICtpbnQgaW50ZWxfbG9naWNhbF9yaW5n X2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+PiAgCQkJCSAgICBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQgbnVtX2R3b3JkcykKPj4gIHsKPj4gIAlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nID0gcmluZ2J1Zi0+cmluZzsKPj4gQEAgLTEzNzksNiArMTM4 MCwxMyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3NfY29udGV4dChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nLAo+PiAgCWlmIChyZXQpCj4+ICAJCXJldHVybiByZXQ7Cj4+Cj4+ICsJLyoK Pj4gKwkgKiBGYWlsaW5nIHRvIHByb2dyYW0gdGhlIE1PQ1MgaXMgbm9uLWZhdGFsLlRoZSBzeXN0 ZW0gd2lsbCBub3QKPj4gKwkgKiBydW4gYXQgcGVhayBwZXJmb3JtYW5jZS4gU28gZ2VuZXJhdGUg YSB3YXJuaW5nIGFuZCBjYXJyeSBvbi4KPj4gKwkgKi8KPj4gKwlpZiAoZ2VuOV9wcm9ncmFtX21v Y3MocmluZywgY3R4KSAhPSAwKQo+PiArCQlEUk1fRVJST1IoIk1PQ1MgZmFpbGVkIHRvIHByb2dy YW06IGV4cGVjdCBwZXJmb3JtYW5jZSBpc3N1ZXMuIik7Cj4+ICsKPj4gIAlyZXR1cm4gaW50ZWxf bHJfY29udGV4dF9yZW5kZXJfc3RhdGVfaW5pdChyaW5nLCBjdHgpOwo+PiAgfQo+Pgo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scmMuaAo+PiBpbmRleCAwNGQzYTZkLi5kYmJkNmFmIDEwMDY0NAo+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuaAo+PiBAQCAtNDQsNiArNDQsMTAgQEAgaW50IGludGVsX2xv Z2ljYWxfcmluZ3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPj4KPj4gIGludCBsb2dp Y2FsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1 ZiwKPj4gIAkJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpOwo+PiArCj4+ICtpbnQgaW50 ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+ PiArCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQgbnVtX2R3b3Jkcyk7Cj4+ ICsKPj4gIC8qKgo+PiAgICogaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UoKSAtIGFkdmFuY2Ug dGhlIHJpbmdidWZmZXIgdGFpbAo+PiAgICogQHJpbmdidWY6IFJpbmdidWZmZXIgdG8gYWR2YW5j ZS4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ PiBpbmRleCAwMDAwMDAwLi43YzA5ZTY3Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jCj4+IEBAIC0wLDAgKzEsMzczIEBACj4+ICsvKgo+ PiArICogQ29weXJpZ2h0IChjKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4+ICsgKgo+PiArICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+PiArICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczogKgo+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+PiArICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQo+PiArICogU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPj4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4+ICsgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPj4gKyAqIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MgSU4gVEhFCj4+ICsgKiBTT0ZUV0FSRS4KPj4gKyAqCj4+ICsgKiBBdXRob3JzOgo+PiArICog ICAgUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+Cj4+ICsgKi8KPj4gKwo+ PiArI2luY2x1ZGUgImludGVsX21vY3MuaCIKPj4gKyNpbmNsdWRlICJpbnRlbF9scmMuaCIKPj4g KyNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCj4+ICsKPj4gKy8qIHN0cnVjdHVyZXMgcmVx dWlyZWQgKi8KPj4gK3N0cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IHsKPj4gKwl1MzIJY29udHJv bF92YWx1ZTsKPj4gKwl1MTYJbDNjY192YWx1ZTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcm1f aTkxNV9tb2NzX3RhYmxlIHsKPj4gKwl1MzIJCQkJCXNpemU7Cj4+ICsJY29uc3Qgc3RydWN0IGRy bV9pOTE1X21vY3NfZW50cnkJKnRhYmxlOwo+PiArfTsKPj4gKwo+PiArLyogRGVmaW5lcyBmb3Ig dGhlIHRhYmxlcyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLwo+PiArI2RlZmluZQlNT0NT X0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZhbHVlIDw8IDApCj4+ICsjZGVmaW5lCU1PQ1NfVEdUX0NB Q0hFKHZhbHVlKQkJKHZhbHVlIDw8IDIpCj4+ICsjZGVmaW5lCU1PQ1NfTFJVTSh2YWx1ZSkJCSh2 YWx1ZSA8PCA0KQo+PiArI2RlZmluZQlNT0NTX0FPTSh2YWx1ZSkJCQkodmFsdWUgPDwgNikKPj4g KyNkZWZpbmUJTU9DU19MRUNDX0VTQyh2YWx1ZSkJCSh2YWx1ZSA8PCA3KQo+PiArI2RlZmluZQlN T0NTX0xFQ0NfU0NDKHZhbHVlKQkJKHZhbHVlIDw8IDgpCj4+ICsjZGVmaW5lCU1PQ19QRk0odmFs dWUpCQkJKHZhbHVlIDw8IDExKQo+PiArI2RlZmluZQlNT0NTX1NDRih2YWx1ZSkJCQkodmFsdWUg PDwgMTQpCj4+ICsKPj4gKy8qIERlZmluZXMgZm9yIHRoZSB0YWJsZXMgKExOQ0ZNT0NTMCAtIExO Q0ZNT0NTMzEpIC0gdHdvIGVudHJpZXMgcGVyIHdvcmQgKi8KPj4gKyNkZWZpbmUJTU9DU19FU0Mo dmFsdWUpCQkJKHZhbHVlIDw8IDApCj4+ICsjZGVmaW5lCU1PQ1NfU0NDKHZhbHVlKQkJCSh2YWx1 ZSA8PCAxKQo+PiArI2RlZmluZQlNT0NTX0wzX0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZhbHVlIDw8 IDQpCj4+ICsKPj4gKy8qIEhlbHBlciBkZWZpbmVzICovCj4+ICsjZGVmaW5lIEdFTjlfTlVNX01P Q1NfUklOR1MJKDUpCS8qIE51bWJlciBvZiBtb2NzIGVuZ2luZXMgdG8gcHJvZ3JhbSAqLwo+PiAr I2RlZmluZSBHRU45X05VTV9NT0NTX0VOVFJJRVMJKDYzKQkvKiA2MyBvdXQgb2YgNjQgLSA2NCBp cyByc3ZyZCAqLwo+PiArCj4+ICsvKiBFRFJBTSBDYWNoaW5nIG9wdGlvbnMgKi8KPj4gKyNkZWZp bmUgRURSQU1fUEFHRVRBQkxFCQkoMCkKPj4gKyNkZWZpbmUgRURSQU1fVUMJCSgxKQo+PiArI2Rl ZmluZSBFRFJBTV9SRVNFUlZFRAkJKDIpCj4KPiBBY2NvcmRpbmcgdG8gdGhlIEJTcGVjIHRoaXMg aXMgV1QgcmF0aGVyIHRoYW4gcmVzZXJ2ZWQ/YQpKdXN0IGNoZWNrZWQgdGhlIEJzcGVjIGFuZCB5 b3UgYXJlIGNvcnJlY3QsIGNoYW5naW5nIHRoZSB0ZXh0LgpBcyB3ZWxsIGFzIGZvciB0aGUgaXRl bXMgYmVsb3cuCj4KPj4gKyNkZWZpbmUgRURSQU1fV0IJCSgzKQo+PiArCj4+ICsvKiBMMyBDYWNo aW5nIG9wdGlvbnMgKi8KPj4gKyNkZWZpbmUgTDNfRElSRUNUCQkoMCkKPj4gKyNkZWZpbmUgTDNf VUMJCQkoMSkKPj4gKyNkZWZpbmUgTDNfUkVTRVJWRUQJCSgyKQo+PiArI2RlZmluZSBMM19XQgkJ CSgzKQo+PiArCj4+ICsvKiB0YXJnZXQgY2FjaGUgKi8KPj4gKyNkZWZpbmUgRUxMQwkJCSgwKQo+ Cj4gQlNwZWMgc2F5cyB0aGF0IHRoaXMgaXMgIlVzZSBUQy9MUlUgY29udHJvbHMgZnJvbSBwYWdl IHRhYmxlIiwgYnV0IHVwb24KPiBhIGNsb3NlciBsb29rIGl0IHNlZW1zIGxpa2UgdGhlIEJTcGVj IGlzIHdyb25nIGFuZCB5b3VyIHBhdGNoIGlzCj4gY29ycmVjdC4gIENhbiB5b3UgY29uZmlybSB0 aGF0IHRoaXMgaXMgd2hhdCB5b3UgaW50ZW5kZWQ/ClRoZXNlIHZhbHVlcyBsb29rIGdvb2QsIHRo ZXkgYXJlIGJpdHMgMzoyIGZvciB0aGUgWFhYX01PQ1NfTiByZWdpc3RlcnMgCihjODAwKSBhbmQg ZnJpZW5kcy4gCj4KPj4gKyNkZWZpbmUgTExDCQkJKDEpCj4+ICsjZGVmaW5lIExMQ19FTExDCQko MikKPj4gKwo+PiArLyoKPj4gKyAqIE1PQ1MgdGFibGVzCj4+ICsgKgo+PiArICogVGhlc2UgYXJl IHRoZSBNT0NTIHRhYmxlcyB0aGF0IGFyZSBwcm9ncmFtbWVkIGFjcm9zcyBhbGwgdGhlIHJpbmdz Lgo+PiArICogVGhlIGNvbnRyb2wgdmFsdWUgaXMgcHJvZ3JhbW1lZCB0byBhbGwgdGhlIHJpbmdz IHRoYXQgc3VwcG9ydCB0aGUKPj4gKyAqIE1PQ1MgcmVnaXN0ZXJzLiBXaGlsZSB0aGUgbDNjY192 YWx1ZXMgYXJlIG9ubHkgcHJvZ3JhbW1lZCB0byB0aGUKPj4gKyAqIExOQ0ZDTU9DUzAgLSBMTkNG Q01PQ1MzMiByZWdpc3RlcnMuCj4+ICsgKgo+PiArICogTk9URTogVGhlc2UgdGFibGVzIE1VU1Qg c3RhcnQgd2l0aCBiZWluZyB1bmNhY2hlZCBhbmQgdGhlIGxlbmd0aCBNVVNUIGJlCj4+ICsgKiAg ICAgICBsZXNzIHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQg YnkgdGhlIGhhcmR3YXJlLgo+PiArICovCj4+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X21vY3Nf ZW50cnkgc2t5bGFrZV9tb2NzX3RhYmxlW10gPSB7Cj4+ICsJIC8qIHsweDAwMDAwMDA5LCAweDAw MTB9ICovCj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNI RShMTENfRUxMQykgfAo+PiArCQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVD Q19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSks Cj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFko TDNfVUMpKX0sCj4+ICsJIC8qIHsweDAwMDAwMDNiLCAweDAwMzB9ICovCj4+ICsJeyhNT0NTX0NB Q0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+PiArCQlN T0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8Cj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+ICsJCShNT0NTX0VTQygwKSB8 IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4+ICsJIC8qIHsw eDAwMDAwMDM5LCAweDAwMTB9ICovCj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykg fCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAo+PiArCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FP TSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+ICsJCU1PQ19QRk0oMCkg fCBNT0NTX1NDRigwKSksCj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19M M19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCj4+ICsJIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICov Cj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMp IHwKPj4gKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwg TU9DU19TQ0MoMCkgfAo+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+PiArCQkoTU9D U19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAo+ PiArCSAvKiB7MHgwMDAwMDAxNywgMHgwMDEwfSAqLwo+PiArCXsoTU9DU19DQUNIRUFCSUxJVFko RURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+ICsJCU1PQ1NfTFJVTSgxKSB8IE1P Q1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4gKwkJTU9DX1BG TSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBN T0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4gKwkgLyogezB4MDAwMDAwMTksIDB4MDAx MH0gKi8KPj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hF KExMQ19FTExDKSB8Cj4+ICsJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUND X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwK Pj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShM M19VQykpfSwKPj4gKwkgLyogezB4MDAwMDAwMzcsIDB4MDAzMH0gKi8KPj4gKwl7KE1PQ1NfQ0FD SEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAo+PiArCQlNT0NTX0xS VU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+ ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCj4+ICsJIC8qIHsweDAwMDAw MDM3LCAweDAwMTB9ICovCj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NT X1RHVF9DQUNIRShMTEMpIHwKPj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NT X0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0Yo MCkpLAo+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklM SVRZKEwzX1VDKSl9LAo+PiArCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDEwfSAqLwo+PiArCXsoTU9D U19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKPj4g KwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19T Q0MoMCkgfAo+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+PiArCQkoTU9DU19FU0Mo MCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+PiArfTsK Pgo+IE1lc2Egd2lsbCB3YW50IGFuIGFkZGl0aW9uYWwgZW50cnkgd2l0aCBUQz1MTEMvZUxMQywg TGVDQz1QVEUsIEwzQ0M9V0IsCj4gZXZlcnl0aGluZyBlbHNlIHVuc2V0LCBJJ2xsIHJlcGx5IHdp dGggYSB1c2Vyc3BhY2UgcGF0Y2ggbWFraW5nIHVzZSBvZgo+IHlvdXIgY2hhbmdlIGlmIHlvdSBh ZGQgc3VjaCBhbiBlbnRyeS4KPgo+IEFub3RoZXIgdGhpbmcgd29ydGggbWVudGlvbmluZyBpcyB0 aGF0IGVudHJpZXMgMCwgMiBhbmQgNSBzZWVtIHRvIGRvIHRoZQo+IHNhbWUgdGhpbmcgc3VzcGlj aW91c2x5LCB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSBMUlVNIGZpZWxkIHdoaWNoCj4gQUZB SUsgZG9lc24ndCBoYXZlIGFueSBlZmZlY3QgZm9yIExlQ0M9VUMuICBJcyBteSB1bmRlcnN0YW5k aW5nIGNvcnJlY3Q/Cj4KVGhlc2UgdGFibGVzIGFyZSBnZW5lcmF0ZWQgdmlhIHJlcXVlc3RzIGFu ZCB0aGVuIGJvaWxlZCBkb3duIHRvIHRoZSBhYm92ZS4gClNvIHNvbWUgb2YgdGhlIGVudHJpZXMg YXJlIGJ5IHJlcXVlc3QuIFN3aW5ncyBhbmQgcm91bmRhYm91dHMsIGNhbiByZW1vdmUgCnRoZSBv bmVzIHRoYXQgbG9vayByZWR1bmRhbnQgYnV0IHRoZW4gdGhlIHR1bmluZyB0aGF0IGhhcyBiZWVu IGRvbmUgd29udCAKbWF0Y2guIEknbGwgYWRkIHRoZSBuZXcgZW50cnkgYXQgdGhlIGVuZCBvZiB0 aGUgdGFibGUuCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSBicm94 dG9uX21vY3NfdGFibGVbXSA9IHsKPj4gKwkgLyogezB4MDAwMDAwMDEsIDB4MDAxMH0gKi8KPj4g Kwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKEVMTEMpIHwK Pj4gKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfAo+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+PiArCQkoTU9DU19F U0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+PiAr CSAvKiB7MHgwMDAwMDAwNSwgMHgwMDEwfSAqLwo+PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURS QU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8Cj4+ICsJCU1PQ1NfTFJVTSgwKSB8IE1PQ1Nf QU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKPj4gKwkJTU9DX1BGTSgw KSB8IE1PQ1NfU0NGKDApKSwKPj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NT X0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4gKwkgLyogezB4MDAwMDAwMDUsIDB4MDAzMH0g Ki8KPj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExM QykgfAo+PiArCQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkg fCBNT0NTX1NDQygwKSB8Cj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCj4+ICsJCShN T0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0s Cj4+ICsJIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICovCj4+ICsJeyhNT0NTX0NBQ0hFQUJJTElU WShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPj4gKwkJTU9DU19MUlVNKDEpIHwg TU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+PiArCQlNT0Nf UEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8 IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAo+PiArCSAvKiB7MHgwMDAwMDAxNywgMHgw MDEwfSAqLwo+PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FD SEUoTExDKSB8Cj4+ICsJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VT QygwKSB8IE1PQ1NfU0NDKDApIHwKPj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4g KwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19V QykpfSwKPj4gKwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KPj4gKwl7KE1PQ1NfQ0FDSEVB QklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8Cj4+ICsJCU1PQ1Nf TFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwK Pj4gKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKPj4gKwkJKE1PQ1NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKPj4gKwkgLyogezB4MDAw MDAwMzcsIDB4MDAzMH0gKi8KPj4gKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1P Q1NfVEdUX0NBQ0hFKExMQykgfAo+PiArCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1P Q1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8Cj4+ICsJCU1PQ19QRk0oMCkgfCBNT0NTX1ND RigwKSksCj4+ICsJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFC SUxJVFkoTDNfV0IpKX0sCj4+ICsJIC8qIHsweDAwMDAwMDM3LCAweDAwMTB9ICovCj4+ICsJeyhN T0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKPj4gKwkJ TU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0Mo MCkgfAo+PiArCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAo+PiArCQkoTU9DU19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+PiArCSAvKiB7 MHgwMDAwMDAzYiwgMHgwMDEwfSAqLwo+PiArCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0Ip IHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKPj4gKwkJTU9DU19MUlVNKDMpIHwgTU9DU19B T00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAo+PiArCQlNT0NfUEZNKDAp IHwgTU9DU19TQ0YoMCkpLAo+PiArCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1Nf TDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAo+PiArfTsKPj4gKwo+Cj4gV291bGRuJ3QgaXQgYmUg YSBnb29kIGlkZWEgdG8gaGF2ZSBCWFQncyBlbnRyaWVzIG1hdGNoIFNLTCdzIGZvciBhIGdpdmVu Cj4gaW5kZXg/ICBUaGUgVEMsIExlQ0MgYW5kIExSVU0gc2V0dGluZ3MgeW91IGRvIGhlcmUgYXJn dWFibHkgZG9uJ3QgaGF2ZQo+IGFueSBlZmZlY3Qgb24gQlhULCBMM0NDIGRvZXMgYnV0IGl0IGRv ZXNuJ3QgbWF0Y2ggU0tMJ3Mgc2V0dGluZyBmb3IKPiBlbnRyaWVzIDEgYW5kIDIuICBJcyB0aGVy ZSBhbnkgcmVhc29uIGZvciB0aGlzPwpBcyBtZW50aW9uZWQgYWJvdmUgdGhpcyB0YWJsZSBpcyBh dXRvLWdlbmVyYXRlZCBhbmQgbWF0Y2hlcyBhbm90aGVyIHR1bmVkIAp0YWJsZSwgc2ltcGx5IGtl ZXBpbmcgdGhlbSB0aGUgc2FtZSBhbGxvd3MgZm9yIHRoZSB0dW5pbmcgdG8gYmUgY29uc2lzdGVu dCAKYWNyb3NzIHBsYXRmb3Jtcy4KClBldGVyLgo+Cj4gT3RoZXIgdGhhbiB0aGF0IGxvb2tzIGdv b2QuCj4KPj4gKy8qKgo+PiArICogZ2V0X21vY3Nfc2V0dGluZ3MKPj4gKyAqCj4+ICsgKiBUaGlz IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgb2YgdGhlIE1PQ1MgdGFibGUgdGhhdCBu ZWVkcyB0bwo+PiArICogYmUgcHJvZ3JhbW1lZCBmb3IgdGhlIHBsYXRmb3JtLiBJdCB3aWxsIHJl dHVybiB0aGUgdmFsdWVzIHRoYXQgbmVlZAo+PiArICogdG8gYmUgcHJvZ3JhbW1lZCBhbmQgaWYg dGhleSBuZWVkIHRvIGJlIHByb2dyYW1tZWQuCj4+ICsgKgo+PiArICogSWYgdGhlIHJldHVybiB2 YWx1ZXMgaXMgZmFsc2UgdGhlbiB0aGUgcmVnaXN0ZXJzIGRvIG5vdCBuZWVkIHByb2dyYW1taW5n Lgo+PiArICovCj4+ICtzdGF0aWMgYm9vbCBnZXRfbW9jc19zZXR0aW5ncyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+PiArCQkJICAgICAgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxl KSB7Cj4+ICsJYm9vbAlyZXN1bHQgPSBmYWxzZTsKPj4gKwo+PiArCWlmIChJU19TS1lMQUtFKGRl dikpIHsKPj4gKwkJdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShza3lsYWtlX21vY3NfdGFibGUp Owo+PiArCQl0YWJsZS0+dGFibGUgPSBza3lsYWtlX21vY3NfdGFibGU7Cj4+ICsJCXJlc3VsdCA9 IHRydWU7Cj4+ICsJfSBlbHNlIGlmIChJU19CUk9YVE9OKGRldikpIHsKPj4gKwkJdGFibGUtPnNp emUgID0gQVJSQVlfU0laRShicm94dG9uX21vY3NfdGFibGUpOwo+PiArCQl0YWJsZS0+dGFibGUg PSBicm94dG9uX21vY3NfdGFibGU7Cj4+ICsJCXJlc3VsdCA9IHRydWU7Cj4+ICsJfSBlbHNlIHsK Pj4gKwkJLyogUGxhdGZvcm0gdGhhdCBzaG91bGQgaGF2ZSBhIE1PQ1MgdGFibGUgZG9lcyBub3Qg Ki8KPj4gKwkJV0FSTl9PTihJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KTsKPj4gKwl9Cj4+ICsK Pj4gKwlyZXR1cm4gcmVzdWx0Owo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGVtaXRfbW9jc19j b250cm9sX3RhYmxlKCkgLSBlbWl0IHRoZSBtb2NzIGNvbnRyb2wgdGFibGUKPj4gKyAqIEByaW5n YnVmOglEUk0gZGV2aWNlLgo+PiArICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50 byB0aGUgY29udHJvbCByZWdzLgo+PiArICogQHJlZ19iYXNlOglUaGUgYmFzZSBmb3IgdGhlIEVu Z2luZSB0aGF0IG5lZWRzIHRvIGJlIHByb2dyYW1tZWQuCj4+ICsgKgo+PiArICogVGhpcyBmdW5j dGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kIGZvciB0aGUK Pj4gKyAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyZXNzLgo+PiArICoK Pj4gKyAqIFJldHVybjogTm90aGluZy4KPj4gKyAqLwo+PiArc3RhdGljIHZvaWQgZW1pdF9tb2Nz X2NvbnRyb2xfdGFibGUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4+ICsJCQkJ ICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSwKPj4gKwkJCQkgICAgdTMyIHJl Z19iYXNlKQo+PiArewo+PiArCXVuc2lnbmVkIGludCBpbmRleDsKPj4gKwo+PiArCWludGVsX2xv Z2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCj4+ICsJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45 X05VTV9NT0NTX0VOVFJJRVMpKTsKPj4gKwo+PiArCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRh YmxlLT5zaXplOyBpbmRleCsrKSB7Cj4+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsIHJlZ19iYXNlICsgKGluZGV4ICogNCkpOwo+PiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1p dChyaW5nYnVmLAo+PiArCQkJCQl0YWJsZS0+dGFibGVbaW5kZXhdLmNvbnRyb2xfdmFsdWUpOwo+ PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVz IHRvIHVuY2FjaGVkLiBUaGVzZSBlbnRyaWVzIGFyZQo+PiArCSAqIG9mZmljaWFsbHkgdW5kZWZp bmVkIGFuZCBubyBjb250YWN0IGlzIGdpdmVuIGZvciB0aGUgY29udGVudHMgYW5kCj4+ICsJICog c2V0dGluZ3MgaXMgZ2l2ZW4gZm9yIHRoZXNlIGVudHJpZXMuCj4+ICsJICoKPj4gKwkgKiBFbnRy eSAwIGluIHRoZSB0YWJsZSBpcyB1bmNhY2hlZCAtIHNvIHdlIGFyZSBqdXN0IHdyaXR0ZW4gdGhh dAo+PiArCSAqIHZhbHVlIHRvIGFsbCB0aGUgdXNlZCBlbnRyaWVzLgo+PiArCSAqLwo+PiArCWZv ciAoOyBpbmRleCA8IEdFTjlfTlVNX01PQ1NfRU5UUklFUzsgaW5kZXgrKykgewo+PiArCQlpbnRl bF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCByZWdfYmFzZSArIChpbmRleCAqIDQpKTsKPj4g KwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdGFibGUtPnRhYmxlWzBdLmNvbnRy b2xfdmFsdWUpOwo+PiArCX0KPj4gKwo+PiArCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsIE1JX05PT1ApOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGVtaXRfbW9jc19sM2NjX3Rh YmxlKCkgLSBlbWl0IHRoZSBtb2NzIGNvbnRyb2wgdGFibGUKPj4gKyAqIEByaW5nYnVmOglEUk0g ZGV2aWNlLgo+PiArICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29u dHJvbCByZWdzLgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlf TE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZCBmb3IgdGhlCj4+ICsgKiBnaXZlbiB0YWJsZSBzdGFy dGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gVGhpcyByZWdpc3RlciBzZXQgaXMgIHByb2dyYW1t ZWQKPj4gKyAqIGluIHBhaXJzLgo+PiArICoKPj4gKyAqIFJldHVybjogTm90aGluZy4KPj4gKyAq Lwo+PiArc3RhdGljIHZvaWQgZW1pdF9tb2NzX2wzY2NfdGFibGUoc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmdidWYsCj4+ICsJCQkgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxl KSB7Cj4+ICsJdW5zaWduZWQgaW50IGNvdW50Owo+PiArCXVuc2lnbmVkIGludCBpOwo+PiArCXUz MiB2YWx1ZTsKPj4gKwl1MzIgZmlsbGVyID0gKHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYg MHhmZmZmKSB8Cj4+ICsJCQkoKHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8 PCAxNik7Cj4+ICsKPj4gKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAo+PiArCQkJ TUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9OVU1fTU9DU19FTlRSSUVTIC8gMikpOwo+PiArCj4+ ICsJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgdGFibGUtPnNpemUgLyAyOyBpKyssIGNvdW50 ICs9IDIpIHsKPj4gKwkJdmFsdWUgPSAodGFibGUtPnRhYmxlW2NvdW50XS5sM2NjX3ZhbHVlICYg MHhmZmZmKSB8Cj4+ICsJCQkoKHRhYmxlLT50YWJsZVtjb3VudCArIDFdLmwzY2NfdmFsdWUgJiAw eGZmZmYpIDw8IDE2KTsKPj4gKwo+PiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVm LCBHRU45X0xOQ0ZDTU9DUzAgKyAoaSAqIDQpKTsKPj4gKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwgdmFsdWUpOwo+PiArCX0KPj4gKwo+PiArCWlmICh0YWJsZS0+c2l6ZSAmIDB4 MDEpIHsKPj4gKwkJLyogT2RkIHRhYmxlIHNpemUgLSAxIGxlZnQgb3ZlciAqLwo+PiArCQl2YWx1 ZSA9ICh0YWJsZS0+dGFibGVbY291bnRdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKPj4gKwkJCSgo dGFibGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIDw8IDE2KTsKPj4gKwl9IGVsc2UK Pj4gKwkJdmFsdWUgPSBmaWxsZXI7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIE5vdyBzZXQgdGhlIHJl c3Qgb2YgdGhlIHRhYmxlIHRvIHVuY2FjaGVkIC0gdXNlIGVudHJ5IDAgYXMgdGhpcwo+PiArCSAq IHdpbGwgYmUgdW5jYWNoZWQuIExlYXZlIHRoZSBsYXN0IHBhaXIgYXMgaW5pdGlhbGlzZWQgYXMg dGhleSBhcmUKPj4gKwkgKiByZXNlcnZlZCBieSB0aGUgaGFyZHdhcmUuCj4+ICsJICovCj4+ICsJ Zm9yICg7IGkgPCAoR0VOOV9OVU1fTU9DU19FTlRSSUVTIC8gMikgLSAxOyBpKyspIHsKPj4gKwkJ aW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0 KSk7Cj4+ICsJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHZhbHVlKTsKPj4gKwo+ PiArCQl2YWx1ZSA9IGZpbGxlcjsKPj4gKwl9Cj4+ICsKPj4gKwlpbnRlbF9sb2dpY2FsX3Jpbmdf ZW1pdChyaW5nYnVmLCBNSV9OT09QKTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIGdlbjlfcHJv Z3JhbV9tb2NzKCkgLSBwcm9ncmFtIHRoZSBNT0NTIHJlZ2lzdGVyLgo+PiArICoKPj4gKyAqIHJp bmc6CVRoZSByaW5nIHRoYXQgdGhlIHByb2dyYW1taW5nIGJhdGNoIHdpbGwgYmUgcnVuIGluLgo+ PiArICogY3R4OgkJVGhlIGludGVsX2NvbnRleHQgdG8gYmUgdXNlZC4KPj4gKyAqCj4+ICsgKiBU aGlzIGZ1bmN0aW9uIHdpbGwgZW1pdCBhIGJhdGNoIGJ1ZmZlciB3aXRoIHRoZSB2YWx1ZXMgcmVx dWlyZWQgZm9yCj4+ICsgKiBwcm9ncmFtbWluZyB0aGUgTU9DUyByZWdpc3RlciB2YWx1ZXMgZm9y IGFsbCB0aGUgY3VycmVudGx5IHN1cHBvcnRlZAo+PiArICogcmluZ3MuCj4+ICsgKgo+PiArICog VGhlc2UgcmVnaXN0ZXJzIGFyZSBwYXJ0aWFsbHkgc3RvcmVkIGluIHRoZSBSQ1MgY29udGV4dCwg c28gdGhleSBhcmUKPj4gKyAqIGVtaXR0ZWQgYXQgdGhlIHNhbWUgdGltZSBzbyB0aGF0IHdoZW4g YSBjb250ZXh0IGlzIGNyZWF0ZWQgdGhlc2UgcmVnaXN0ZXJzCj4+ICsgKiBhcmUgc2V0IHVwLiBU aGVzZSByZWdpc3RlcnMgaGF2ZSB0byBiZSBlbWl0dGVkIGludG8gdGhlIHN0YXJ0IG9mIHRoZQo+ PiArICogY29udGV4dCBhcyBzZXR0aW5nIHRoZSBFTFNQIHdpbGwgcmUtaW5pdCBzb21lIG9mIHRo ZXNlIHJlZ2lzdGVycyBiYWNrCj4+ICsgKiB0byB0aGUgaHcgdmFsdWVzLgo+PiArICoKPj4gKyAq IFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgdGhlIGVycm9yIHN0YXR1cy4KPj4gKyAq Lwo+PiAraW50IGdlbjlfcHJvZ3JhbV9tb2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs Cj4+ICsJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpCj4+ICt7Cj4+ICsJaW50IHJldCA9 IDA7Cj4+ICsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB0Owo+PiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIg KnJpbmdidWYgPSBjdHgtPmVuZ2luZVtyaW5nLT5pZF0ucmluZ2J1ZjsKPj4gKwo+PiArCWlmIChn ZXRfbW9jc19zZXR0aW5ncyhkZXYsICZ0KSkgewo+PiArCQl1MzIgdGFibGVfc2l6ZTsKPj4gKwo+ PiArCQkvKgo+PiArCQkgKiBPSy4gRm9yIGVhY2ggc3VwcG9ydGVkIHJpbmc6Cj4+ICsJCSAqICBu dW1iZXIgb2YgbW9jcyBlbnRyaWVzICogMiBkd29yZHMgZm9yIGVhY2ggY29udHJvbF92YWx1ZQo+ PiArCQkgKiAgcGx1cyBudW1iZXIgb2YgbW9jcyBlbnRyaWVzIC8yIGR3b3JkcyBmb3IgbDNjYyB2 YWx1ZXMuCj4+ICsJCSAqCj4+ICsJCSAqICBQbHVzIDEgZm9yIHRoZSBsb2FkIGNvbW1hbmQgYW5k IDEgZm9yIHRoZSBOT09QIHBlciByaW5nCj4+ICsJCSAqICBhbmQgdGhlIGwzY2MgcHJvZ3JhbW1p bmcuCj4+ICsJCSAqLwo+PiArCQl0YWJsZV9zaXplID0gR0VOOV9OVU1fTU9DU19SSU5HUyAqCj4+ ICsJCQkJKCgyICogR0VOOV9OVU1fTU9DU19FTlRSSUVTKSArIDIpICsKPj4gKwkJCQlHRU45X05V TV9NT0NTX0VOVFJJRVMgKyAyOwo+PiArCQlyZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4o cmluZ2J1ZiwgY3R4LCB0YWJsZV9zaXplKTsKPj4gKwkJaWYgKHJldCkgewo+PiArCQkJRFJNX0RF QlVHKCJpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4gZmFpbGVkICVkXG4iLCByZXQpOwo+PiArCQkJ cmV0dXJuIHJldDsKPj4gKwkJfQo+PiArCj4+ICsJCS8qIHByb2dyYW0gdGhlIGNvbnRyb2wgcmVn aXN0ZXJzICovCj4+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45 X0dGWF9NT0NTXzApOwo+PiArCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwg R0VOOV9NRlgwX01PQ1NfMCk7Cj4+ICsJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYs ICZ0LCBHRU45X01GWDFfTU9DU18wKTsKPj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmlu Z2J1ZiwgJnQsIEdFTjlfVkVCT1hfTU9DU18wKTsKPj4gKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFi bGUocmluZ2J1ZiwgJnQsIEdFTjlfQkxUX01PQ1NfMCk7Cj4+ICsKPj4gKwkJLyogbm93IHByb2dy YW0gdGhlIGwzY2MgcmVnaXN0ZXJzICovCj4+ICsJCWVtaXRfbW9jc19sM2NjX3RhYmxlKHJpbmdi dWYsICZ0KTsKPj4gKwo+PiArCQlpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVmKTsK Pj4gKwo+PiArCQlEUk1fREVCVUcoIk1PQ1M6IFRhYmxlIHNldCBpbiBDb250ZXh0XG4iKTsKPj4g Kwl9IGVsc2Ugewo+PiArCQlEUk1fREVCVUcoIk1PQ1M6IFRhYmxlIE5vdCBzdXBwb3J0ZWQgb24g cGxhdGZvcm1cbiIpOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX21vY3MuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi5lMjc4MGNlCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbW9jcy5oCj4+IEBAIC0wLDAgKzEsNjQgQEAKPj4gKy8qCj4+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPj4gKyAqCj4+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQo+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4gKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ICsg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKPj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4+ICsgKiBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT IElOIFRIRQo+PiArICogU09GVFdBUkUuCj4+ICsgKgo+PiArICogQXV0aG9yczoKPj4gKyAqICAg IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgo+PiArICovCj4+ICsKPj4g KyNpZm5kZWYgSU5URUxfTU9DU19ICj4+ICsjZGVmaW5lIElOVEVMX01PQ1NfSAo+PiArCj4+ICsv KioKPj4gKyAqIERPQzogTWVtb3J5IE9iamVjdHMgQ29udHJvbCBTdGF0ZSAoTU9DUykKPj4gKyAq Cj4+ICsgKiBNb3RpdmF0aW9uOgo+PiArICogSW4gcHJldmlvdXMgR2VucyB0aGUgTU9DUyBzZXR0 aW5ncyB3YXMgYSB2YWx1ZSB0aGF0IHdhcyBzZXQgYnkgdXNlciBsYW5kIGFzCj4+ICsgKiBwYXJ0 IG9mIHRoZSBiYXRjaC4gSW4gR2VuOSB0aGlzIGhhcyBjaGFuZ2VkIHRvIGJlIGEgc2luZ2xlIHRh YmxlIChwZXIgcmluZykKPj4gKyAqIHRoYXQgYWxsIGJhdGNoZXMgbm93IHJlZmVyZW5jZSBieSBp bmRleCBpbnN0ZWFkIG9mIHByb2dyYW1taW5nIHRoZSBNT0NTCj4+ICsgKiBkaXJlY3RseS4KPj4g KyAqCj4+ICsgKiBUaGUgb25lIHdyaW5rbGUgaW4gdGhpcyBpcyB0aGF0IG9ubHkgUEFSVCBvZiB0 aGUgTU9DUyB0YWJsZXMgYXJlIGluY2x1ZGVkCj4+ICsgKiBpbiBjb250ZXh0IChUaGUgR0ZYX01P Q1NfMCAtIEdGWF9NT0NTXzY0IGFuZCB0aGUgTE5DRkNNT0NTMCAtIExOQ0ZDTU9DUzMyCj4+ICsg KiByZWdpc3RlcnMpLiBUaGUgcmVzdCBhcmUgbm90ICh0aGUgc2V0dGluZ3MgZm9yIHRoZSBvdGhl ciByaW5ncykuCj4+ICsgKgo+PiArICogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBzZXQgYXQgc3lz dGVtIHN0YXJ0LXVwIGJlY2F1c2UgdGhlIHdheSB0aGUgdGFibGUKPj4gKyAqIGludGVyYWN0cyB3 aXRoIHRoZSBjb250ZXh0cyBhbmQgdGhlIEdtbUxpYiBpbnRlcmZhY2UuCj4+ICsgKgo+PiArICoK Pj4gKyAqIEltcGxlbWVudGF0aW9uOgo+PiArICoKPj4gKyAqIFRoZSB0YWJsZSBpcyBwcm9ncmFt bWVkIG9uIGEgcGxhdGZvcm0gYmFzaXMgZnJvbSBhIHRhYmxlIHRoYXQgaXMgZ2VuZXJhdGVkCj4+ ICsgKiBmcm9tIHRoZSBvbmUgdGhhdCBoYXMgYmVlbiBhZ3JlZWQgYnkgdGhlIGRpZmZlcmVudCBy ZXNwb25zaWJsZSBwYXJ0aWVzLiBUaGlzCj4+ICsgKiB0YWJsZXMgKG9uZSBwZXIgc3VwcG9ydGVk IHBsYXRmb3JtKSBpcyBkZWZpbmVkIGluIGludGVsX21vY3MuYyBhbmQgaXMKPj4gKyAqIHByb2dy YW1tZWQgaW4gdGhlIGZpcnN0IGJhdGNoIGFmdGVyIHRoZSBjb250ZXh0IGlzIGxvYWRlZCAod2l0 aCB0aGUgaGFyZHdhcmUKPj4gKyAqIHdvcmthcm91bmRzKS4gVGhpcyB3aWxsIHRoZW4gbGV0IHRo ZSB1c3VhbCBjb250ZXh0IGhhbmRsaW5nIGtlZXAgdGhlIE1PQ1MgaW4KPj4gKyAqIHN0ZXAuCj4+ ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+ICsjaW5jbHVkZSAiaTkxNV9k cnYuaCIKPj4gKwo+PiAraW50IGdlbjlfcHJvZ3JhbV9tb2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcsCj4+ICsJCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KTsKPj4gKwo+PiArI2Vu ZGlmCj4+ICsKPj4gLS0KPj4gMS45LjEKPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+PiBJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPgoKLS0KICAgIFBldGVyIEFudG9pbmUgKEFuZHJv aWQgR3JhcGhpY3MgRHJpdmVyIFNvZnR3YXJlIEVuZ2luZWVyKQogICAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg ICBJbnRlbCBDb3Jwb3JhdGlvbiAoVUspIExpbWl0ZWQKICAgIFJlZ2lzdGVyZWQgTm8uIDExMzQ5 NDUgKEVuZ2xhbmQpCiAgICBSZWdpc3RlcmVkIE9mZmljZTogUGlwZXJzIFdheSwgU3dpbmRvbiBT TjMgMVJKCiAgICBWQVQgTm86IDg2MCAyMTczIDQ3Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==