From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 09/12] drm/i915: Rewrite VLV/CHV watermark code Date: Fri, 6 Mar 2015 20:14:02 +0200 Message-ID: <20150306181402.GQ11371@intel.com> References: <1425583192-2584-1-git-send-email-ville.syrjala@linux.intel.com> <1425583192-2584-10-git-send-email-ville.syrjala@linux.intel.com> <54F9E468.2020901@virtuousgeek.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 5F4196E19B for ; Fri, 6 Mar 2015 10:14:06 -0800 (PST) Content-Disposition: inline In-Reply-To: <54F9E468.2020901@virtuousgeek.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jesse Barnes Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBNYXIgMDYsIDIwMTUgYXQgMDk6MzE6MjBBTSAtMDgwMCwgSmVzc2UgQmFybmVzIHdy b3RlOgo+IE9uIDAzLzA1LzIwMTUgMTE6MTkgQU0sIHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+IAo+ID4gQXNzdW1pbmcgdGhlIFBORCBkZWFkbGluZSBtZWNoYW5pc20g d29ya3MgcmVhc29uYWJseSB3ZSBzaG91bGQgZG8KPiA+IG1lbW9yeSByZXF1ZXN0cyBhcyBlYXJs eSBhcyBwb3NzaWJsZSBzbyB0aGF0IFBORCBoYXMgc2NoZWR1bGUgdGhlCj4gPiByZXF1ZXN0cyBt b3JlIGludGVsbGlnZW50bHkuIEN1cnJlbnRseSB3ZSdyZSBzdGlsbCBjYWxjdWxhdGluZwo+ID4g dGhlIHdhdGVybWFya3MgYXMgaWYgVkxWL0NIViBhcmUgaWRlbnRpY2FsIHRvIGc0eCwgd2hpY2gg aXNuJ3QKPiA+IHRoZSBjYXNlLgo+ID4gCj4gPiBUaGUgY3VycmVudCBjb2RlIGFsc28gc2VlbXMg dG8gY2FsY3VsYXRlIGluc3VmZmljaWVudCB3YXRlcm1hcmtzCj4gPiBhbmQgaGVuY2Ugd2UncmUg c2VlaW5nIHNvbWUgdW5kZXJydW5zLCBlc3BlY2lhbGx5IG9uIGhpZ2ggcmVzb2x1dGlvbgo+ID4g ZGlzcGxheXMuCj4gPiAKPiA+IFRvIGZpeCBpdCBqdXN0IHJpcCBvdXQgdGhlIGN1cnJlbnQgY29k ZSBhbmQgcmVwbGFjZSBpcyB3aXRoIHNvbWV0aGluZwo+ID4gdGhhdCB0cmllcyB0byB1dGlsaXpl IFBORCBhcyBlZmZpY2llbnRseSBhcyBwb3NzaWJsZS4KPiA+IAo+ID4gV2Ugbm93IGNhbGN1bGF0 ZSB0aGUgV00gd2F0ZXJtYXJrIHRvIHRyaWdnZXIgd2hlbiB0aGUgRklGTyBzdGlsbCBoYXMKPiA+ IDI1NnVzIHdvcnRoIG9mIGRhdGEuIDI1NnVzIGlzIHRoZSBtYXhpbXVtIGRlYWRsaW5lIHZhbHVl IHN1cG9vcnRlZCBieQo+ID4gUE5ELCBzbyBpc3N1aW5nIG1lbW9yeSByZXF1ZXN0cyBlYXJsaWVy IHdvdWxkIG1lYW4gd2UgcHJvYmFibHkgY291bGRuJ3QKPiA+IHV0aWxpemUgdGhlIGZ1bGwgRklG TyBhcyBQTkQgd291bGQgYXR0ZW1wdCB0byByZXR1cm4gdGhlIGRhdGEgYXQKPiA+IGxlYXN0IGlu IGF0IGxlYXN0IDI1NnVzLiBXZSBhbHNvIGNsYW1wIHRoZSB3YXRlcm1hcmsgdG8gYXQgbGVhc3Qg OAo+ID4gY2FjaGVsaW5lcyBhcyB0aGF0J3MgdGhlIG1hZ2ljIHdhdGVybWFyayB0aGF0IGVuYWJs aW5nIHRyaWNrbGUgZmVlZAo+ID4gd291bGQgYWxzbyBpbXBvc2UuIEknbSBhc3N1bWluZyBpdCBt YXRjaGVzIHNvbWUgYnVyc3Qgc2l6ZS4KPiA+IAo+ID4gSW4gdGhlb3J5IHdlIGNvdWxkIGp1c3Qg ZW5hYmxlIHRyaWNrbGUgZmVlZCBhbmQgaWdub3JlIHRoZSBXTSB2YWx1ZXMsCj4gPiBleGNlcHQg dHJpY2tsZSBmZWVkIGRvZXNuJ3Qgd29yayB3aXRoIG1heCBmaWZvIG1vZGUgYW55d2F5LCBzbyB3 ZSdkCj4gPiBzdGlsbCBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgU1Igd2F0ZXJtYXJrcy4gSXQgc2Vl bXMgY2xlYW5lciB0byBqdXN0Cj4gPiBkaXNhYmxlIHRyaWNrbGUgZmVlZCBhbmQgY2FsY3VsYXRl IGFsbCB3YXRlcm1hcmtzIHRoZSBzYW1lIHdheS4gQWxzbwo+ID4gdHJpY2tsZSBmZWVkIHdvdWxk bid0IGFjY291bnQgZm9yIHRoZSAyNTZ1cyBtYXggZGVhZGxpbmUgdmFsdWUsIHRob2d1aAo+ID4g dGhhdCBtYXkgYmUgYSBtb290IHBvaW50IGluIG5vbi1tYXggZmlmbyBtb2RlIHNpY25lIHRoZSBG SUZPcyBhcmUgZmFpcmx5Cj4gPiBzbWFsbC4KPiA+IAo+ID4gT24gVkxWIG1heCBmaWZvIG1vZGUg Y2FuIGJlIHVzZWQgd2l0aCBlaXRoZXIgcHJpbWFyeSBvciBzcHJpdGUgcGxhbmVzLgo+ID4gU28g dGhlIGNvZGUgbm93IGFsc28gY2hlY2tzIGFsbCB0aGUgcGxhbmVzIChhcGFydCBmcm9tIHRoZSBj dXJzb3IpCj4gPiB3aGVuIGNhbGN1bGF0aW5nIHRoZSBTUiBwbGFuZSB3YXRlcm1hcmsuCj4gPiAK PiA+IFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIFdNMSB3YXRlcm1hcmtzIHNpbmNl IHdlJ3JlIHVzaW5nIHRoZQo+ID4gUE5EIGRlYWRsaW5lIHNjaGVtZSB3aGljaCBtZWFucyB0aGUg aGFyZHdhcmUgaWdub3JlcyBXTTEgdmFsdWVzLgo+ID4gCj4gPiB2MjogVXNlIHBsYW5lLT5zdGF0 ZS0+ZmIgaW5zdGVhZCBvZiBwbGFuZS0+ZmIKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUg U3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggfCAgMTEgKysKPiA+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oIHwgICA0ICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYyB8IDMzMCArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCj4g PiAgMyBmaWxlcyBjaGFuZ2VkLCAxODggaW5zZXJ0aW9ucygrKSwgMTU3IGRlbGV0aW9ucygtKQo+ ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+IGluZGV4IDVkZTY5YTAuLmIxOTFiMTIg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBAQCAtMTUxNiw2ICsxNTE2LDE3 IEBAIHN0cnVjdCBpbGtfd21fdmFsdWVzIHsKPiA+ICAKPiA+ICBzdHJ1Y3Qgdmx2X3dtX3ZhbHVl cyB7Cj4gPiAgCXN0cnVjdCB7Cj4gPiArCQl1aW50MTZfdCBwcmltYXJ5Owo+ID4gKwkJdWludDE2 X3Qgc3ByaXRlWzJdOwo+ID4gKwkJdWludDhfdCBjdXJzb3I7Cj4gPiArCX0gcGlwZVszXTsKPiA+ ICsKPiA+ICsJc3RydWN0IHsKPiA+ICsJCXVpbnQxNl90IHBsYW5lOwo+ID4gKwkJdWludDhfdCBj dXJzb3I7Cj4gPiArCX0gc3I7Cj4gPiArCj4gPiArCXN0cnVjdCB7Cj4gPiAgCQl1aW50OF90IGN1 cnNvcjsKPiA+ICAJCXVpbnQ4X3Qgc3ByaXRlWzJdOwo+ID4gIAkJdWludDhfdCBwcmltYXJ5Owo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gPiBpbmRleCA4MTc4NjEwLi45Zjk4Mzg0IDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gQEAgLTQxMjcsNyArNDEyNyw3IEBAIGVu dW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewo+ID4gIC8qIHZsdi9jaHYgaGlnaCBvcmRlciBiaXRz ICovCj4gPiAgI2RlZmluZSBEU1BIT1dNCQkJKFZMVl9ESVNQTEFZX0JBU0UgKyAweDcwMDY0KQo+ ID4gICNkZWZpbmUgICBEU1BGV19TUl9ISV9TSElGVAkJMjQKPiA+IC0jZGVmaW5lICAgRFNQRldf U1JfSElfTUFTSwkJKDE8PDI0KQo+ID4gKyNkZWZpbmUgICBEU1BGV19TUl9ISV9NQVNLCQkoMzw8 MjQpIC8qIDIgYml0cyBmb3IgY2h2LCAxIGZvciB2bHYgKi8KPiA+ICAjZGVmaW5lICAgRFNQRldf U1BSSVRFRl9ISV9TSElGVAkyMwo+ID4gICNkZWZpbmUgICBEU1BGV19TUFJJVEVGX0hJX01BU0sJ CSgxPDwyMykKPiA+ICAjZGVmaW5lICAgRFNQRldfU1BSSVRFRV9ISV9TSElGVAkyMgo+ID4gQEAg LTQxNDgsNyArNDE0OCw3IEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewo+ID4gICNkZWZp bmUgICBEU1BGV19QTEFORUFfSElfTUFTSwkJKDE8PDApCj4gPiAgI2RlZmluZSBEU1BIT1dNMQkJ KFZMVl9ESVNQTEFZX0JBU0UgKyAweDcwMDY4KQo+ID4gICNkZWZpbmUgICBEU1BGV19TUl9XTTFf SElfU0hJRlQJCTI0Cj4gPiAtI2RlZmluZSAgIERTUEZXX1NSX1dNMV9ISV9NQVNLCQkoMTw8MjQp Cj4gPiArI2RlZmluZSAgIERTUEZXX1NSX1dNMV9ISV9NQVNLCQkoMzw8MjQpIC8qIDIgYml0cyBm b3IgY2h2LCAxIGZvciB2bHYgKi8KPiA+ICAjZGVmaW5lICAgRFNQRldfU1BSSVRFRl9XTTFfSElf U0hJRlQJMjMKPiA+ICAjZGVmaW5lICAgRFNQRldfU1BSSVRFRl9XTTFfSElfTUFTSwkoMTw8MjMp Cj4gPiAgI2RlZmluZSAgIERTUEZXX1NQUklURUVfV00xX0hJX1NISUZUCTIyCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMKPiA+IGluZGV4IGJkYjBmNWQuLjQ5Nzg0N2MgMTAwNjQ0Cj4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jCj4gPiBAQCAtNzc4LDYgKzc3OCw1NSBAQCBzdGF0aWMgdm9pZCB2 bHZfd3JpdGVfd21fdmFsdWVzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4gIAkJICAgKHdt LT5kZGxbcGlwZV0uc3ByaXRlWzBdIDw8IERETF9TUFJJVEVfU0hJRlQoMCkpIHwKPiA+ICAJCSAg ICh3bS0+ZGRsW3BpcGVdLnByaW1hcnkgPDwgRERMX1BMQU5FX1NISUZUKSk7Cj4gPiAgCj4gPiAr CUk5MTVfV1JJVEUoRFNQRlcxLAo+ID4gKwkJICAgKCh3bS0+c3IucGxhbmUgPDwgRFNQRldfU1Jf U0hJRlQpICYgRFNQRldfU1JfTUFTSykgfAo+ID4gKwkJICAgKCh3bS0+cGlwZVtQSVBFX0JdLmN1 cnNvciA8PCBEU1BGV19DVVJTT1JCX1NISUZUKSAmIERTUEZXX0NVUlNPUkJfTUFTSykgfAo+ID4g KwkJICAgKCh3bS0+cGlwZVtQSVBFX0JdLnByaW1hcnkgPDwgRFNQRldfUExBTkVCX1NISUZUKSAm IERTUEZXX1BMQU5FQl9NQVNLX1ZMVikgfAo+ID4gKwkJICAgKCh3bS0+cGlwZVtQSVBFX0FdLnBy aW1hcnkgPDwgRFNQRldfUExBTkVBX1NISUZUKSAmIERTUEZXX1BMQU5FQV9NQVNLX1ZMVikpOwo+ ID4gKwlJOTE1X1dSSVRFKERTUEZXMiwKPiA+ICsJCSAgICgod20tPnBpcGVbUElQRV9BXS5zcHJp dGVbMV0gPDwgRFNQRldfU1BSSVRFQl9TSElGVCkgJiBEU1BGV19TUFJJVEVCX01BU0tfVkxWKSB8 Cj4gPiArCQkgICAoKHdtLT5waXBlW1BJUEVfQV0uY3Vyc29yIDw8IERTUEZXX0NVUlNPUkFfU0hJ RlQpICYgRFNQRldfQ1VSU09SQV9NQVNLKSB8Cj4gPiArCQkgICAoKHdtLT5waXBlW1BJUEVfQV0u c3ByaXRlWzBdIDw8IERTUEZXX1NQUklURUFfU0hJRlQpICYgRFNQRldfU1BSSVRFQV9NQVNLX1ZM VikpOwo+ID4gKwlJOTE1X1dSSVRFKERTUEZXMywKPiA+ICsJCSAgICgod20tPnNyLmN1cnNvciA8 PCBEU1BGV19DVVJTT1JfU1JfU0hJRlQpICYgRFNQRldfQ1VSU09SX1NSX01BU0spKTsKPiA+ICsK PiA+ICsJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gPiArCQlJOTE1X1dSSVRFKERT UEZXN19DSFYsCj4gPiArCQkJICAgKCh3bS0+cGlwZVtQSVBFX0JdLnNwcml0ZVsxXSA8PCBEU1BG V19TUFJJVEVEX1NISUZUKSAmIERTUEZXX1NQUklURURfTUFTSykgfAo+ID4gKwkJCSAgICgod20t PnBpcGVbUElQRV9CXS5zcHJpdGVbMF0gPDwgRFNQRldfU1BSSVRFQ19TSElGVCkgJiBEU1BGV19T UFJJVEVDX01BU0spKTsKPiA+ICsJCUk5MTVfV1JJVEUoRFNQRlc4X0NIViwKPiA+ICsJCQkgICAo KHdtLT5waXBlW1BJUEVfQ10uc3ByaXRlWzFdIDw8IERTUEZXX1NQUklURUZfU0hJRlQpICYgRFNQ RldfU1BSSVRFRl9NQVNLKSB8Cj4gPiArCQkJICAgKCh3bS0+cGlwZVtQSVBFX0NdLnNwcml0ZVsw XSA8PCBEU1BGV19TUFJJVEVFX1NISUZUKSAmIERTUEZXX1NQUklURUVfTUFTSykpOwo+ID4gKwkJ STkxNV9XUklURShEU1BGVzlfQ0hWLAo+ID4gKwkJCSAgICgod20tPnBpcGVbUElQRV9DXS5wcmlt YXJ5IDw8IERTUEZXX1BMQU5FQ19TSElGVCkgJiBEU1BGV19QTEFORUNfTUFTSykgfAo+ID4gKwkJ CSAgICgod20tPnBpcGVbUElQRV9DXS5jdXJzb3IgPDwgRFNQRldfQ1VSU09SQ19TSElGVCkgJiBE U1BGV19DVVJTT1JDX01BU0spKTsKPiA+ICsJCUk5MTVfV1JJVEUoRFNQSE9XTSwKPiA+ICsJCQkg ICAoKCh3bS0+c3IucGxhbmUgPj4gOSkgPDwgRFNQRldfU1JfSElfU0hJRlQpICYgRFNQRldfU1Jf SElfTUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQ10uc3ByaXRlWzFdID4+IDgp IDw8IERTUEZXX1NQUklURUZfSElfU0hJRlQpICYgRFNQRldfU1BSSVRFRl9ISV9NQVNLKSB8Cj4g PiArCQkJICAgKCgod20tPnBpcGVbUElQRV9DXS5zcHJpdGVbMF0gPj4gOCkgPDwgRFNQRldfU1BS SVRFRV9ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVFX0hJX01BU0spIHwKPiA+ICsJCQkgICAoKCh3 bS0+cGlwZVtQSVBFX0NdLnByaW1hcnkgPj4gOCkgPDwgRFNQRldfUExBTkVDX0hJX1NISUZUKSAm IERTUEZXX1BMQU5FQ19ISV9NQVNLKSB8Cj4gPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9CXS5z cHJpdGVbMV0gPj4gOCkgPDwgRFNQRldfU1BSSVRFRF9ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVE X0hJX01BU0spIHwKPiA+ICsJCQkgICAoKCh3bS0+cGlwZVtQSVBFX0JdLnNwcml0ZVswXSA+PiA4 KSA8PCBEU1BGV19TUFJJVEVDX0hJX1NISUZUKSAmIERTUEZXX1NQUklURUNfSElfTUFTSykgfAo+ ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQl0ucHJpbWFyeSA+PiA4KSA8PCBEU1BGV19QTEFO RUJfSElfU0hJRlQpICYgRFNQRldfUExBTkVCX0hJX01BU0spIHwKPiA+ICsJCQkgICAoKCh3bS0+ cGlwZVtQSVBFX0FdLnNwcml0ZVsxXSA+PiA4KSA8PCBEU1BGV19TUFJJVEVCX0hJX1NISUZUKSAm IERTUEZXX1NQUklURUJfSElfTUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQV0u c3ByaXRlWzBdID4+IDgpIDw8IERTUEZXX1NQUklURUFfSElfU0hJRlQpICYgRFNQRldfU1BSSVRF QV9ISV9NQVNLKSB8Cj4gPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9BXS5wcmltYXJ5ID4+IDgp IDw8IERTUEZXX1BMQU5FQV9ISV9TSElGVCkgJiBEU1BGV19QTEFORUFfSElfTUFTSykpOwo+ID4g Kwl9IGVsc2Ugewo+ID4gKwkJSTkxNV9XUklURShEU1BGVzcsCj4gPiArCQkJICAgKCh3bS0+cGlw ZVtQSVBFX0JdLnNwcml0ZVsxXSA8PCBEU1BGV19TUFJJVEVEX1NISUZUKSAmIERTUEZXX1NQUklU RURfTUFTSykgfAo+ID4gKwkJCSAgICgod20tPnBpcGVbUElQRV9CXS5zcHJpdGVbMF0gPDwgRFNQ RldfU1BSSVRFQ19TSElGVCkgJiBEU1BGV19TUFJJVEVDX01BU0spKTsKPiA+ICsJCUk5MTVfV1JJ VEUoRFNQSE9XTSwKPiA+ICsJCQkgICAoKCh3bS0+c3IucGxhbmUgPj4gOSkgPDwgRFNQRldfU1Jf SElfU0hJRlQpICYgRFNQRldfU1JfSElfTUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJ UEVfQl0uc3ByaXRlWzFdID4+IDgpIDw8IERTUEZXX1NQUklURURfSElfU0hJRlQpICYgRFNQRldf U1BSSVRFRF9ISV9NQVNLKSB8Cj4gPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9CXS5zcHJpdGVb MF0gPj4gOCkgPDwgRFNQRldfU1BSSVRFQ19ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVDX0hJX01B U0spIHwKPiA+ICsJCQkgICAoKCh3bS0+cGlwZVtQSVBFX0JdLnByaW1hcnkgPj4gOCkgPDwgRFNQ RldfUExBTkVCX0hJX1NISUZUKSAmIERTUEZXX1BMQU5FQl9ISV9NQVNLKSB8Cj4gPiArCQkJICAg KCgod20tPnBpcGVbUElQRV9BXS5zcHJpdGVbMV0gPj4gOCkgPDwgRFNQRldfU1BSSVRFQl9ISV9T SElGVCkgJiBEU1BGV19TUFJJVEVCX0hJX01BU0spIHwKPiA+ICsJCQkgICAoKCh3bS0+cGlwZVtQ SVBFX0FdLnNwcml0ZVswXSA+PiA4KSA8PCBEU1BGV19TUFJJVEVBX0hJX1NISUZUKSAmIERTUEZX X1NQUklURUFfSElfTUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQV0ucHJpbWFy eSA+PiA4KSA8PCBEU1BGV19QTEFORUFfSElfU0hJRlQpICYgRFNQRldfUExBTkVBX0hJX01BU0sp KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlQT1NUSU5HX1JFQUQoRFNQRlcxKTsKPiA+ICsKPiA+ICAJ ZGV2X3ByaXYtPndtLnZsdiA9ICp3bTsKPiA+ICB9Cj4gPiAgCj4gPiBAQCAtODIyLDE2OSArODcx LDExMyBAQCBzdGF0aWMgdWludDhfdCB2bHZfY29tcHV0ZV9kcmFpbl9sYXRlbmN5KHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiA+ICAJCQkJRERMX1BSRUNJU0lPTl9ISUdIIDogRERMX1BSRUNJU0lP Tl9MT1cpOwo+ID4gIH0KPiA+ICAKPiA+IC0vKgo+ID4gLSAqIFVwZGF0ZSBkcmFpbiBsYXRlbmN5 IHJlZ2lzdGVycyBvZiBtZW1vcnkgYXJiaXRlcgo+ID4gLSAqCj4gPiAtICogVmFsbGV5dmlldyBT b0MgaGFzIGEgbmV3IG1lbW9yeSBhcmJpdGVyIGFuZCBuZWVkcyBkcmFpbiBsYXRlbmN5IHJlZ2lz dGVycwo+ID4gLSAqIHRvIGJlIHByb2dyYW1tZWQuIEVhY2ggcGxhbmUgaGFzIGEgZHJhaW4gbGF0 ZW5jeSBtdWx0aXBsaWVyIGFuZCBhIGRyYWluCj4gPiAtICogbGF0ZW5jeSB2YWx1ZS4KPiA+IC0g Ki8KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCB2bHZfdXBkYXRlX2RyYWluX2xhdGVuY3koc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ID4gK3N0YXRpYyBpbnQgdmx2X2NvbXB1dGVfd20oc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCj4gPiArCQkJICBzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4g KwkJCSAgaW50IGZpZm9fc2l6ZSkKPiA+ICt7Cj4gPiArCWludCBjbG9jaywgZW50cmllcywgcGl4 ZWxfc2l6ZTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogRklYTUUgdGhlIHBsYW5lIG1pZ2h0IGhh dmUgYW4gZmIKPiA+ICsJICogYnV0IGJlIGludmlzaWJsZSAoZWcuIGR1ZSB0byBjbGlwcGluZykK PiA+ICsJICovCj4gPiArCWlmICghY3J0Yy0+YWN0aXZlIHx8ICFwbGFuZS0+YmFzZS5zdGF0ZS0+ ZmIpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJcGl4ZWxfc2l6ZSA9IGRybV9mb3JtYXRf cGxhbmVfY3BwKHBsYW5lLT5iYXNlLnN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiA+ICsJ Y2xvY2sgPSBjcnRjLT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOwo+ID4g Kwo+ID4gKwllbnRyaWVzID0gRElWX1JPVU5EX1VQKGNsb2NrLCAxMDAwKSAqIHBpeGVsX3NpemU7 Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFNldCB1cCB0aGUgd2F0ZXJtYXJrIHN1Y2ggdGhhdCB3 ZSBkb24ndCBzdGFydCBpc3N1aW5nIG1lbW9yeQo+ID4gKwkgKiByZXF1ZXN0cyB1bnRpbCB3ZSBh cmUgd2l0aGluIFBORCdzIG1heCBkZWFkbGluZSB2YWx1ZSAoMjU2dXMpLgo+ID4gKwkgKiBJZGVh IGJlaW5nIHRvIGJlIGlkbGUgYXMgbG9uZyBhcyBwb3NzaWJsZSB3aGlsZSBzdGlsbCB0YWtpbmcK PiA+ICsJICogYWR2YXRhbmdlIG9mIFBORCdzIGRlYWRsaW5lIHNjaGVkdWxpbmcuIFRoZSBsaW1p dCBvZiA4Cj4gPiArCSAqIGNhY2hlbGluZXMgKHVzZWQgd2hlbiB0aGUgRklGTyB3aWxsIGFueXdh eSBkcmFpbiBpbiBsZXNzIHRpbWUKPiA+ICsJICogdGhhbiAyNTZ1cykgc2hvdWxkIG1hdGNoIHdo YXQgd2Ugd291bGQgYmUgZG9uZSBpZiB0cmlja2xlCj4gPiArCSAqIGZlZWQgd2VyZSBlbmFibGVk Lgo+ID4gKwkgKi8KPiA+ICsJcmV0dXJuIGZpZm9fc2l6ZSAtIGNsYW1wKERJVl9ST1VORF9VUCgy NTYgKiBlbnRyaWVzLCA2NCksIDAsIGZpZm9fc2l6ZSAtIDgpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgYm9vbCB2bHZfY29tcHV0ZV9zcl93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4g KwkJCSAgICAgIHN0cnVjdCB2bHZfd21fdmFsdWVzICp3bSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ICsJc3RydWN0IGRy bV9jcnRjICpjcnRjOwo+ID4gKwllbnVtIHBpcGUgcGlwZSA9IElOVkFMSURfUElQRTsKPiA+ICsJ aW50IG51bV9wbGFuZXMgPSAwOwo+ID4gKwlpbnQgZmlmb19zaXplID0gMDsKPiA+ICsJc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZTsKPiA+ICsKPiA+ICsJd20tPnNyLmN1cnNvciA9IHdtLT5zci5w bGFuZSA9IDA7Cj4gPiArCj4gPiArCWNydGMgPSBzaW5nbGVfZW5hYmxlZF9jcnRjKGRldik7Cj4g PiArCS8qIG1heGZpZm8gbm90IHN1cHBvcnRlZCBvbiBwaXBlIEMgKi8KPiA+ICsJaWYgKGNydGMg JiYgdG9faW50ZWxfY3J0YyhjcnRjKS0+cGlwZSAhPSBQSVBFX0MpIHsKPiA+ICsJCXBpcGUgPSB0 b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwo+ID4gKwkJbnVtX3BsYW5lcyA9ICEhd20tPnBpcGVb cGlwZV0ucHJpbWFyeSArCj4gPiArCQkJISF3bS0+cGlwZVtwaXBlXS5zcHJpdGVbMF0gKwo+ID4g KwkJCSEhd20tPnBpcGVbcGlwZV0uc3ByaXRlWzFdOwo+ID4gKwkJZmlmb19zaXplID0gSU5URUxf SU5GTyhkZXZfcHJpdiktPm51bV9waXBlcyAqIDUxMiAtIDE7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ aWYgKGZpZm9fc2l6ZSA9PSAwIHx8IG51bV9wbGFuZXMgPiAxKQo+ID4gKwkJcmV0dXJuIGZhbHNl Owo+ID4gKwo+ID4gKwl3bS0+c3IuY3Vyc29yID0gdmx2X2NvbXB1dGVfd20odG9faW50ZWxfY3J0 YyhjcnRjKSwKPiA+ICsJCQkJICAgICAgIHRvX2ludGVsX3BsYW5lKGNydGMtPmN1cnNvciksIDB4 M2YpOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBsYW5lLCAmZGV2LT5tb2RlX2Nv bmZpZy5wbGFuZV9saXN0LCBiYXNlLmhlYWQpIHsKPiA+ICsJCWlmIChwbGFuZS0+YmFzZS50eXBl ID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJ CWlmIChwbGFuZS0+cGlwZSAhPSBwaXBlKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJ d20tPnNyLnBsYW5lID0gdmx2X2NvbXB1dGVfd20odG9faW50ZWxfY3J0YyhjcnRjKSwKPiA+ICsJ CQkJCSAgICAgIHBsYW5lLCBmaWZvX3NpemUpOwo+ID4gKwkJaWYgKHdtLT5zci5wbGFuZSAhPSAw KQo+ID4gKwkJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiB0cnVlOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2 Owo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Yyk7Cj4gPiAgCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiA+ICsJYm9v bCBjeHNyX2VuYWJsZWQ7Cj4gPiAgCXN0cnVjdCB2bHZfd21fdmFsdWVzIHdtID0gZGV2X3ByaXYt PndtLnZsdjsKPiA+ICAKPiA+ICAJd20uZGRsW3BpcGVdLnByaW1hcnkgPSB2bHZfY29tcHV0ZV9k cmFpbl9sYXRlbmN5KGNydGMsIGNydGMtPnByaW1hcnkpOwo+ID4gKwl3bS5waXBlW3BpcGVdLnBy aW1hcnkgPSB2bHZfY29tcHV0ZV93bShpbnRlbF9jcnRjLAo+ID4gKwkJCQkJICAgICAgIHRvX2lu dGVsX3BsYW5lKGNydGMtPnByaW1hcnkpLAo+ID4gKwkJCQkJICAgICAgIHZsdl9nZXRfZmlmb19z aXplKGRldiwgcGlwZSwgMCkpOwo+ID4gKwo+ID4gIAl3bS5kZGxbcGlwZV0uY3Vyc29yID0gdmx2 X2NvbXB1dGVfZHJhaW5fbGF0ZW5jeShjcnRjLCBjcnRjLT5jdXJzb3IpOwo+ID4gKwl3bS5waXBl W3BpcGVdLmN1cnNvciA9IHZsdl9jb21wdXRlX3dtKGludGVsX2NydGMsCj4gPiArCQkJCQkgICAg ICB0b19pbnRlbF9wbGFuZShjcnRjLT5jdXJzb3IpLAo+ID4gKwkJCQkJICAgICAgMHgzZik7Cj4g PiArCj4gPiArCWN4c3JfZW5hYmxlZCA9IHZsdl9jb21wdXRlX3NyX3dtKGRldiwgJndtKTsKPiA+ ICsKPiA+ICsJaWYgKG1lbWNtcCgmd20sICZkZXZfcHJpdi0+d20udmx2LCBzaXplb2Yod20pKSA9 PSAwKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlEUk1fREVCVUdfS01TKCJTZXR0aW5nIEZJ Rk8gd2F0ZXJtYXJrcyAtICVjOiBwbGFuZT0lZCwgY3Vyc29yPSVkLCAiCj4gPiArCQkgICAgICAi U1I6IHBsYW5lPSVkLCBjdXJzb3I9JWRcbiIsIHBpcGVfbmFtZShwaXBlKSwKPiA+ICsJCSAgICAg IHdtLnBpcGVbcGlwZV0ucHJpbWFyeSwgd20ucGlwZVtwaXBlXS5jdXJzb3IsCj4gPiArCQkgICAg ICB3bS5zci5wbGFuZSwgd20uc3IuY3Vyc29yKTsKPiA+ICsKPiA+ICsJaWYgKCFjeHNyX2VuYWJs ZWQpCj4gPiArCQlpbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIGZhbHNlKTsKPiA+ICAK PiA+ICAJdmx2X3dyaXRlX3dtX3ZhbHVlcyhpbnRlbF9jcnRjLCAmd20pOwo+ID4gLX0KPiA+IC0K PiA+IC0jZGVmaW5lIHNpbmdsZV9wbGFuZV9lbmFibGVkKG1hc2spIGlzX3Bvd2VyX29mXzIobWFz aykKPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCB2YWxsZXl2aWV3X3VwZGF0ZV93bShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ ZGV2Owo+ID4gLQlzdGF0aWMgY29uc3QgaW50IHNyX2xhdGVuY3lfbnMgPSAxMjAwMDsKPiA+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiA+ IC0JaW50IHBsYW5lYV93bSwgcGxhbmViX3dtLCBjdXJzb3JhX3dtLCBjdXJzb3JiX3dtOwo+ID4g LQlpbnQgcGxhbmVfc3IsIGN1cnNvcl9zcjsKPiA+IC0JaW50IGlnbm9yZV9wbGFuZV9zciwgaWdu b3JlX2N1cnNvcl9zcjsKPiA+IC0JdW5zaWduZWQgaW50IGVuYWJsZWQgPSAwOwo+ID4gLQlib29s IGN4c3JfZW5hYmxlZDsKPiA+IC0KPiA+IC0Jdmx2X3VwZGF0ZV9kcmFpbl9sYXRlbmN5KGNydGMp Owo+ID4gLQo+ID4gLQlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgUElQRV9BLAo+ID4gLQkJCSAg ICAmdmFsbGV5dmlld193bV9pbmZvLCBwZXNzaW1hbF9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAm dmFsbGV5dmlld19jdXJzb3Jfd21faW5mbywgcGVzc2ltYWxfbGF0ZW5jeV9ucywKPiA+IC0JCQkg ICAgJnBsYW5lYV93bSwgJmN1cnNvcmFfd20pKQo+ID4gLQkJZW5hYmxlZCB8PSAxIDw8IFBJUEVf QTsKPiA+IC0KPiA+IC0JaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIFBJUEVfQiwKPiA+IC0JCQkg ICAgJnZhbGxleXZpZXdfd21faW5mbywgcGVzc2ltYWxfbGF0ZW5jeV9ucywKPiA+IC0JCQkgICAg JnZhbGxleXZpZXdfY3Vyc29yX3dtX2luZm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4gPiAtCQkJ ICAgICZwbGFuZWJfd20sICZjdXJzb3JiX3dtKSkKPiA+IC0JCWVuYWJsZWQgfD0gMSA8PCBQSVBF X0I7Cj4gPiAtCj4gPiAtCWlmIChzaW5nbGVfcGxhbmVfZW5hYmxlZChlbmFibGVkKSAmJgo+ID4g LQkgICAgZzR4X2NvbXB1dGVfc3J3bShkZXYsIGZmcyhlbmFibGVkKSAtIDEsCj4gPiAtCQkJICAg ICBzcl9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAgJnZhbGxleXZpZXdfd21faW5mbywKPiA+IC0J CQkgICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93bV9pbmZvLAo+ID4gLQkJCSAgICAgJnBsYW5lX3Ny LCAmaWdub3JlX2N1cnNvcl9zcikgJiYKPiA+IC0JICAgIGc0eF9jb21wdXRlX3Nyd20oZGV2LCBm ZnMoZW5hYmxlZCkgLSAxLAo+ID4gLQkJCSAgICAgMipzcl9sYXRlbmN5X25zLAo+ID4gLQkJCSAg ICAgJnZhbGxleXZpZXdfd21faW5mbywKPiA+IC0JCQkgICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93 bV9pbmZvLAo+ID4gLQkJCSAgICAgJmlnbm9yZV9wbGFuZV9zciwgJmN1cnNvcl9zcikpIHsKPiA+ IC0JCWN4c3JfZW5hYmxlZCA9IHRydWU7Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQljeHNyX2VuYWJs ZWQgPSBmYWxzZTsKPiA+IC0JCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZmFsc2Up Owo+ID4gLQkJcGxhbmVfc3IgPSBjdXJzb3Jfc3IgPSAwOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCURS TV9ERUJVR19LTVMoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogcGxhbmU9JWQsIGN1cnNv cj0lZCwgIgo+ID4gLQkJICAgICAgIkI6IHBsYW5lPSVkLCBjdXJzb3I9JWQsIFNSOiBwbGFuZT0l ZCwgY3Vyc29yPSVkXG4iLAo+ID4gLQkJICAgICAgcGxhbmVhX3dtLCBjdXJzb3JhX3dtLAo+ID4g LQkJICAgICAgcGxhbmViX3dtLCBjdXJzb3JiX3dtLAo+ID4gLQkJICAgICAgcGxhbmVfc3IsIGN1 cnNvcl9zcik7Cj4gPiAtCj4gPiAtCUk5MTVfV1JJVEUoRFNQRlcxLAo+ID4gLQkJICAgKHBsYW5l X3NyIDw8IERTUEZXX1NSX1NISUZUKSB8Cj4gPiAtCQkgICAoY3Vyc29yYl93bSA8PCBEU1BGV19D VVJTT1JCX1NISUZUKSB8Cj4gPiAtCQkgICAocGxhbmViX3dtIDw8IERTUEZXX1BMQU5FQl9TSElG VCkgfAo+ID4gLQkJICAgKHBsYW5lYV93bSA8PCBEU1BGV19QTEFORUFfU0hJRlQpKTsKPiA+IC0J STkxNV9XUklURShEU1BGVzIsCj4gPiAtCQkgICAoSTkxNV9SRUFEKERTUEZXMikgJiB+RFNQRldf Q1VSU09SQV9NQVNLKSB8Cj4gPiAtCQkgICAoY3Vyc29yYV93bSA8PCBEU1BGV19DVVJTT1JBX1NI SUZUKSk7Cj4gPiAtCUk5MTVfV1JJVEUoRFNQRlczLAo+ID4gLQkJICAgKEk5MTVfUkVBRChEU1BG VzMpICYgfkRTUEZXX0NVUlNPUl9TUl9NQVNLKSB8Cj4gPiAtCQkgICAoY3Vyc29yX3NyIDw8IERT UEZXX0NVUlNPUl9TUl9TSElGVCkpOwo+ID4gLQo+ID4gLQlpZiAoY3hzcl9lbmFibGVkKQo+ID4g LQkJaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCB0cnVlKTsKPiA+IC19Cj4gPiAtCj4g PiAtc3RhdGljIHZvaWQgY2hlcnJ5dmlld191cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+IC0J c3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7Cj4gPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiAtCWludCBwbGFu ZWFfd20sIHBsYW5lYl93bSwgcGxhbmVjX3dtOwo+ID4gLQlpbnQgY3Vyc29yYV93bSwgY3Vyc29y Yl93bSwgY3Vyc29yY193bTsKPiA+IC0JaW50IHBsYW5lX3NyLCBjdXJzb3Jfc3I7Cj4gPiAtCWlu dCBpZ25vcmVfcGxhbmVfc3IsIGlnbm9yZV9jdXJzb3Jfc3I7Cj4gPiAtCXVuc2lnbmVkIGludCBl bmFibGVkID0gMDsKPiA+IC0JYm9vbCBjeHNyX2VuYWJsZWQ7Cj4gPiAtCj4gPiAtCXZsdl91cGRh dGVfZHJhaW5fbGF0ZW5jeShjcnRjKTsKPiA+IC0KPiA+IC0JaWYgKGc0eF9jb21wdXRlX3dtMChk ZXYsIFBJUEVfQSwKPiA+IC0JCQkgICAgJnZhbGxleXZpZXdfd21faW5mbywgcGVzc2ltYWxfbGF0 ZW5jeV9ucywKPiA+IC0JCQkgICAgJnZhbGxleXZpZXdfY3Vyc29yX3dtX2luZm8sIHBlc3NpbWFs X2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICZwbGFuZWFfd20sICZjdXJzb3JhX3dtKSkKPiA+IC0J CWVuYWJsZWQgfD0gMSA8PCBQSVBFX0E7Cj4gPiAtCj4gPiAtCWlmIChnNHhfY29tcHV0ZV93bTAo ZGV2LCBQSVBFX0IsCj4gPiAtCQkJICAgICZ2YWxsZXl2aWV3X3dtX2luZm8sIHBlc3NpbWFsX2xh dGVuY3lfbnMsCj4gPiAtCQkJICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93bV9pbmZvLCBwZXNzaW1h bF9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAmcGxhbmViX3dtLCAmY3Vyc29yYl93bSkpCj4gPiAt CQllbmFibGVkIHw9IDEgPDwgUElQRV9COwo+ID4gLQo+ID4gLQlpZiAoZzR4X2NvbXB1dGVfd20w KGRldiwgUElQRV9DLAo+ID4gLQkJCSAgICAmdmFsbGV5dmlld193bV9pbmZvLCBwZXNzaW1hbF9s YXRlbmN5X25zLAo+ID4gLQkJCSAgICAmdmFsbGV5dmlld19jdXJzb3Jfd21faW5mbywgcGVzc2lt YWxfbGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgJnBsYW5lY193bSwgJmN1cnNvcmNfd20pKQo+ID4g LQkJZW5hYmxlZCB8PSAxIDw8IFBJUEVfQzsKPiA+IC0KPiA+IC0JaWYgKHNpbmdsZV9wbGFuZV9l bmFibGVkKGVuYWJsZWQpICYmCj4gPiAtCSAgICBnNHhfY29tcHV0ZV9zcndtKGRldiwgZmZzKGVu YWJsZWQpIC0gMSwKPiA+IC0JCQkgICAgIHNyX2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICAmdmFs bGV5dmlld193bV9pbmZvLAo+ID4gLQkJCSAgICAgJnZhbGxleXZpZXdfY3Vyc29yX3dtX2luZm8s Cj4gPiAtCQkJICAgICAmcGxhbmVfc3IsICZpZ25vcmVfY3Vyc29yX3NyKSAmJgo+ID4gLQkgICAg ZzR4X2NvbXB1dGVfc3J3bShkZXYsIGZmcyhlbmFibGVkKSAtIDEsCj4gPiAtCQkJICAgICAyKnNy X2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICAmdmFsbGV5dmlld193bV9pbmZvLAo+ID4gLQkJCSAg ICAgJnZhbGxleXZpZXdfY3Vyc29yX3dtX2luZm8sCj4gPiAtCQkJICAgICAmaWdub3JlX3BsYW5l X3NyLCAmY3Vyc29yX3NyKSkgewo+ID4gLQkJY3hzcl9lbmFibGVkID0gdHJ1ZTsKPiA+IC0JfSBl bHNlIHsKPiA+IC0JCWN4c3JfZW5hYmxlZCA9IGZhbHNlOwo+ID4gLQkJaW50ZWxfc2V0X21lbW9y eV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4gPiAtCQlwbGFuZV9zciA9IGN1cnNvcl9zciA9IDA7 Cj4gPiAtCX0KPiA+IC0KPiA+IC0JRFJNX0RFQlVHX0tNUygiU2V0dGluZyBGSUZPIHdhdGVybWFy a3MgLSBBOiBwbGFuZT0lZCwgY3Vyc29yPSVkLCAiCj4gPiAtCQkgICAgICAiQjogcGxhbmU9JWQs IGN1cnNvcj0lZCwgQzogcGxhbmU9JWQsIGN1cnNvcj0lZCwgIgo+ID4gLQkJICAgICAgIlNSOiBw bGFuZT0lZCwgY3Vyc29yPSVkXG4iLAo+ID4gLQkJICAgICAgcGxhbmVhX3dtLCBjdXJzb3JhX3dt LAo+ID4gLQkJICAgICAgcGxhbmViX3dtLCBjdXJzb3JiX3dtLAo+ID4gLQkJICAgICAgcGxhbmVj X3dtLCBjdXJzb3JjX3dtLAo+ID4gLQkJICAgICAgcGxhbmVfc3IsIGN1cnNvcl9zcik7Cj4gPiAt Cj4gPiAtCUk5MTVfV1JJVEUoRFNQRlcxLAo+ID4gLQkJICAgKHBsYW5lX3NyIDw8IERTUEZXX1NS X1NISUZUKSB8Cj4gPiAtCQkgICAoY3Vyc29yYl93bSA8PCBEU1BGV19DVVJTT1JCX1NISUZUKSB8 Cj4gPiAtCQkgICAocGxhbmViX3dtIDw8IERTUEZXX1BMQU5FQl9TSElGVCkgfAo+ID4gLQkJICAg KHBsYW5lYV93bSA8PCBEU1BGV19QTEFORUFfU0hJRlQpKTsKPiA+IC0JSTkxNV9XUklURShEU1BG VzIsCj4gPiAtCQkgICAoSTkxNV9SRUFEKERTUEZXMikgJiB+RFNQRldfQ1VSU09SQV9NQVNLKSB8 Cj4gPiAtCQkgICAoY3Vyc29yYV93bSA8PCBEU1BGV19DVVJTT1JBX1NISUZUKSk7Cj4gPiAtCUk5 MTVfV1JJVEUoRFNQRlczLAo+ID4gLQkJICAgKEk5MTVfUkVBRChEU1BGVzMpICYgfkRTUEZXX0NV UlNPUl9TUl9NQVNLKSB8Cj4gPiAtCQkgICAoY3Vyc29yX3NyIDw8IERTUEZXX0NVUlNPUl9TUl9T SElGVCkpOwo+ID4gLQlJOTE1X1dSSVRFKERTUEZXOV9DSFYsCj4gPiAtCQkgICAoSTkxNV9SRUFE KERTUEZXOV9DSFYpICYgfihEU1BGV19QTEFORUNfTUFTSyB8Cj4gPiAtCQkJCQkgICAgICBEU1BG V19DVVJTT1JDX01BU0spKSB8Cj4gPiAtCQkgICAocGxhbmVjX3dtIDw8IERTUEZXX1BMQU5FQ19T SElGVCkgfAo+ID4gLQkJICAgKGN1cnNvcmNfd20gPDwgRFNQRldfQ1VSU09SQ19TSElGVCkpOwo+ ID4gIAo+ID4gIAlpZiAoY3hzcl9lbmFibGVkKQo+ID4gIAkJaW50ZWxfc2V0X21lbW9yeV9jeHNy KGRldl9wcml2LCB0cnVlKTsKPiA+IEBAIC0xMDAyLDE3ICs5OTUsNDQgQEAgc3RhdGljIHZvaWQg dmFsbGV5dmlld191cGRhdGVfc3ByaXRlX3dtKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4g IAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4g PiAgCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiA+ICAJaW50IHNwcml0ZSA9 IHRvX2ludGVsX3BsYW5lKHBsYW5lKS0+cGxhbmU7Cj4gPiArCWJvb2wgY3hzcl9lbmFibGVkOwo+ ID4gIAlzdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyB3bSA9IGRldl9wcml2LT53bS52bHY7Cj4gPiAgCj4g PiAtCWlmIChlbmFibGVkKQo+ID4gKwlpZiAoZW5hYmxlZCkgewo+ID4gIAkJd20uZGRsW3BpcGVd LnNwcml0ZVtzcHJpdGVdID0KPiA+ICAJCQl2bHZfY29tcHV0ZV9kcmFpbl9sYXRlbmN5KGNydGMs IHBsYW5lKTsKPiA+IC0JZWxzZQo+ID4gKwo+ID4gKwkJd20ucGlwZVtwaXBlXS5zcHJpdGVbc3By aXRlXSA9Cj4gPiArCQkJdmx2X2NvbXB1dGVfd20oaW50ZWxfY3J0YywKPiA+ICsJCQkJICAgICAg IHRvX2ludGVsX3BsYW5lKHBsYW5lKSwKPiA+ICsJCQkJICAgICAgIHZsdl9nZXRfZmlmb19zaXpl KGRldiwgcGlwZSwgc3ByaXRlKzEpKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICAJCXdtLmRkbFtwaXBl XS5zcHJpdGVbc3ByaXRlXSA9IDA7Cj4gPiArCQl3bS5waXBlW3BpcGVdLnNwcml0ZVtzcHJpdGVd ID0gMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwljeHNyX2VuYWJsZWQgPSB2bHZfY29tcHV0ZV9zcl93 bShkZXYsICZ3bSk7Cj4gPiArCj4gPiArCWlmIChtZW1jbXAoJndtLCAmZGV2X3ByaXYtPndtLnZs diwgc2l6ZW9mKHdtKSkgPT0gMCkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJRFJNX0RFQlVH X0tNUygiU2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSAlYzogc3ByaXRlICVjPSVkLCAiCj4gPiAr CQkgICAgICAiU1I6IHBsYW5lPSVkLCBjdXJzb3I9JWRcbiIsIHBpcGVfbmFtZShwaXBlKSwKPiA+ ICsJCSAgICAgIHNwcml0ZV9uYW1lKHBpcGUsIHNwcml0ZSksCj4gPiArCQkgICAgICB3bS5waXBl W3BpcGVdLnNwcml0ZVtzcHJpdGVdLAo+ID4gKwkJICAgICAgd20uc3IucGxhbmUsIHdtLnNyLmN1 cnNvcik7Cj4gPiArCj4gPiArCWlmICghY3hzcl9lbmFibGVkKQo+ID4gKwkJaW50ZWxfc2V0X21l bW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4gPiAgCj4gPiAgCXZsdl93cml0ZV93bV92YWx1 ZXMoaW50ZWxfY3J0YywgJndtKTsKPiA+ICsKPiA+ICsJaWYgKGN4c3JfZW5hYmxlZCkKPiA+ICsJ CWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4gPiAgfQo+ID4gIAo+ID4g KyNkZWZpbmUgc2luZ2xlX3BsYW5lX2VuYWJsZWQobWFzaykgaXNfcG93ZXJfb2ZfMihtYXNrKQo+ ID4gKwo+ID4gIHN0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+IEBA IC02NDg1LDcgKzY1MDUsNyBAQCB2b2lkIGludGVsX2luaXRfcG0oc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiA+ICAJCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDgpCj4gPiAgCQkJ ZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPSBicm9hZHdlbGxfaW5pdF9jbG9j a19nYXRpbmc7Cj4gPiAgCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXYpKSB7Cj4gPiAtCQlk ZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBjaGVycnl2aWV3X3VwZGF0ZV93bTsKPiA+ICsJ CWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRlX3dtOwo+ID4g IAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3Nwcml0ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRl X3Nwcml0ZV93bTsKPiA+ICAJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0K PiA+ICAJCQljaGVycnl2aWV3X2luaXRfY2xvY2tfZ2F0aW5nOwo+ID4gCj4gCj4gSSB3b25kZXIg aWYgd2Ugc2hvdWxkIGJlIHdhcm5pbmcgaWYgdGhlIHdtIHZhbHVlcyB3ZSBlbmQgdXAgd2l0aCBl eGNlZWQKPiB0aGUgbWFzayBzaXplICh0aGUgZmFjdCB0aGF0IHlvdSB3cml0ZSB0aGVtIHdpdGgg YSBzaGlmdCBhbmQgbWFzayBtYWRlCj4gbWUgdGhpbmsgb2YgaXQpLCBidXQgdGhhdCBjb3VsZCBi ZSBhIGZvbGxvdyBvbiwgb3IgZXZlbiBwdXQgaW50byB0aGUKPiBjYWxjIGNvZGUgaW5zdGVhZC4g IEFueXdheSB0aGF0J3Mgc29tZXRoaW5nIHdlIGNhbiBkbyBsYXRlciBhZnRlciBhbGwKPiB0aGUg YXRvbWljIGNoYW5nZXMgaGl0LgoKSUlSQyB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggYml0cyB1cCB0 byBhbnkgbGVnYWwgRklGTyBzaXplLCBzbyB0aGUgY2xhbXBpbmcKZG9uZSBieSB2bHZfY29tcHV0 ZV93bSgpIHNob3VsZCBiZSBlbm91Z2guIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IHRob3Vn aApzaW5jZSB0aGF0IGlzbid0IHRoZSBjYXNlIG9uIGEgYnVuY2ggb2YgdGhlIG90aGVyIHBsYXRm b3Jtcy4KCkkgdGhpbmsgaW4gZ2VuZXJhbCBJJ2QgcmVhbGx5IGxpa2UgbWFnaWMgcmVnaXN0ZXIg Yml0ZmllbGQgbWFjcm9zIHRoYXQKc2NyZWFtIHdoZW5ldmVyIHdlIG92ZXJmbG93IHNvbWV0aGlu ZyBieSBhY2NpZGVudC4gQnV0IHRoYXQncyBhIG11Y2gKYmlnZ2VyIHRvcGljLiBGb3Igb25lIHdl J2QgaGF2ZSB0byBwYXJhbWV0cml6ZSBhbGwgdGhlIG1hY3JvcyByYXRoZXIgdGhhbgp1c2luZyBy YXcgc2hpZnRzLgoKPiAKPiBEb2VzIHRoaXMgZml4IGFueSBvZiBvdXIgdW5kZXJydW4gYnVncz8g IFNob3VsZCBpdCBoYXZlIGFueSByZWZlcmVuY2VzOgo+IGxpbmVzPwoKVGhvc2Ugc2hvdWxkIHBy b2JhYmx5IGJlIGF0IHRoZSBERFIgRFZGUyBkaXNhYmxlIHBhdGNoIHNpbmNlIGJlZm9yZSB0aGF0 CnByZXR0eSBtdWNoIGFueXRoaW5nIGNhbiBoYXBwZW4uIEkgd2FzIHRvbyBsYXp5IHRvIHRyYXds IGJ1Z3ppbGxhIHRob3VnaC4KUHJldHR5IG11Y2ggaG9waW5nIFFBIGNhbiBqdXN0IGdvIHJldGVz dCBhbGwgZGlzcGxheSBidWdzIG9uY2Ugd2UgZ2V0CnRoaXMgbGFuZGVkLgoKPiAKPiBFaXRoZXIg d2F5Ogo+IFJldmlld2VkLWJ5OiBKZXNzZSBCYXJuZXMgPGpiYXJuZXNAdmlydHVvdXNnZWVrLm9y Zz4KClRoYW5rcy4KCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==