From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 3/5] drm/i915/skl: Support secondary (rotated) frame buffer mapping Date: Tue, 03 Mar 2015 09:59:31 +0000 Message-ID: <54F58603.30601@linux.intel.com> References: <1425307432-4955-1-git-send-email-tvrtko.ursulin@linux.intel.com> <1425307432-4955-4-git-send-email-tvrtko.ursulin@linux.intel.com> <20150302182158.GF18775@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 494526E20B for ; Tue, 3 Mar 2015 01:59:35 -0800 (PST) In-Reply-To: <20150302182158.GF18775@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAzLzAyLzIwMTUgMDY6MjEgUE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gTW9uLCBN YXIgMDIsIDIwMTUgYXQgMDI6NDM6NTBQTSArMDAwMCwgVHZydGtvIFVyc3VsaW4gd3JvdGU6Cj4+ IEZyb206IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+Cj4+IDkw LzI3MCByb3RhdGVkIHNjYW5vdXQgbmVlZHMgYSByb3RhdGVkIEdUVCB2aWV3IG9mIHRoZSBmcmFt ZWJ1ZmZlci4KPj4KPj4gVGhpcyBpcyBwdXQgaW4gYSBzZXBhcmF0ZSBWTUEgd2l0aCBhIGRlZGlj YXRlZCBnZ3R0X3ZpZXcgYW5kIHdpcmVkIHN1Y2hzIHRoYXQKPj4gaXQgaXMgY3JlYXRlZCB3aGVu IGEgZnJhbWVidWZmZXIgaXMgcGlubmVkIHRvIGEgOTAvMjcwIHJvdGF0ZWQgcGxhbmUuCj4+Cj4+ IFJvdGF0aW9uIGlzIG9ubHkgcG9zc2libGUgd2l0aCBZYi9ZZiBidWZmZXJzIGFuZCBlcnJvciBp cyBwcm9wYWdhdGVkIHRvCj4+IHVzZXIgc3BhY2UgaW4gY2FzZSBvZiBhIG1pc21hdGNoLgo+Pgo+ PiBTcGVjaWFsIHJvdGF0ZWQgcGFnZSB2aWV3IGlzIGNvbnN0cnVjdGVkIGF0IHRoZSBWTUEgY3Jl YXRpb24gdGltZSBieQo+PiBib3Jyb3dpbmcgdGhlIERNQSBhZGRyZXNzZXMgZnJvbSBvYmotPnBh Z2VzLgo+Pgo+PiB2MjoKPj4gICAgICAqIERvIG5vdCBib3RoZXIgd2l0aCBwYWdlcyBmb3Igcm90 YXRlZCBzZyBsaXN0LCBqdXN0IHBvcHVsYXRlIHRoZSBETUEKPj4gICAgICAgIGFkZHJlc3Nlcy4g KERhbmllbCBWZXR0ZXIpCj4+ICAgICAgKiBDaGVja3BhdGNoIGNsZWFudXAuCj4+Cj4+IHYzOgo+ PiAgICAgICogUmViYXNlZCBvbiB0b3Agb2YgbmV3IHBsYW5lIGhhbmRsaW5nIChjcmVhdGUgcm90 YXRlZCBtYXBwaW5nIHdoZW4KPj4gICAgICAgIHNldHRpbmcgdGhlIHJvdGF0aW9uIHByb3BlcnR5 KS4KPj4gICAgICAqIFVucGluIHJvdGF0ZWQgVk1BIG9uIHVucGlubmluZyBmcm9tIGRpc3BsYXkg cGxhbmUuCj4+ICAgICAgKiBTaW1wbGlmeSByb3RhdGlvbiBjaGVjayB1c2luZyBiaXR3aXNlIEFO RC4gKENocmlzIFdpbHNvbikKPj4KPj4gdjQ6Cj4+ICAgICAgKiBGaXggdW5waW5uaW5nIG9mIG9w dGlvbmFsIHJvdGF0ZWQgbWFwcGluZyBzbyBpdCBpcyByZWFsbHkgY29uc2lkZXJlZAo+PiAgICAg ICAgdG8gYmUgb3B0aW9uYWwuCj4+Cj4+IHY1Ogo+PiAgICAgKiBSZWJhc2VkIGZvciBmYiBtb2Rp ZmllciBjaGFuZ2VzLgo+PiAgICAgKiBSZWJhc2VkIGZvciBhdG9taWMgY29tbWl0Lgo+PiAgICAg KiBPbmx5IHBpbiBuZWVkZWQgdmlldyBmb3IgZGlzcGxheS4gKFZpbGxlIFN5cmrDpGzDpCwgRGFu aWVsIFZldHRlcikKPj4KPj4gRm9yOiBWSVotNDcyNgo+PiBTaWduZWQtb2ZmLWJ5OiBUdnJ0a28g VXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+PiBSZXZpZXdlZC1ieTogTWljaGVs IFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4gKHY0KQo+Cj4gQnVuY2ggb2Ygbml0 cGlja3MgYmVsb3cuIEFsc28gSSB0aGluayBpdCdkIGJlIGdvb2QgdG8gc3BsaXQgdGhpcyBwYXRj aAo+IGludG8gdGhlIHJvdGUgcmVmYWN0b3Jpbmcgd29yayB0byBhZGQgdmlldyBwYXJhbWV0ZXJz IGFsbCBvdmVyIHRoZSBwbGFjZQo+IGFuZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLgoKT2sg d2lsbCBzcGxpdCBpdC4gUmVzdCBiZWxvdy4uLgoKPj4gLS0tCj4+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgIDMzICsrKysrLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMgICAgICB8ICAyNyArKystLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jICB8ICAxNCArKy0KPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuaCAgfCAgMTIgKysrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jIHwgMjA0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCj4+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgICA0ICsKPj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jICAgfCAgIDIgKy0KPj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9vdmVybGF5LmMgfCAgIDMgKy0KPj4gICA4IGZpbGVzIGNoYW5nZWQsIDI2MyBp bnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4+IGluZGV4IGUwN2ExY2IuLjc5ZDNmMmMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+PiBAQCAtMjc0Myw4ICsyNzQzLDEwIEBAIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2Rv bWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHdyaXRlKTsKPj4gICBp bnQgX19tdXN0X2NoZWNrCj4+ICAgaTkxNV9nZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5l KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+ICAgCQkJCSAgICAgdTMyIGFsaWdu bWVudCwKPj4gLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnBpcGVsaW5lZCk7Cj4+ IC12b2lkIGk5MTVfZ2VtX29iamVjdF91bnBpbl9mcm9tX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4+ICsJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpwaXBlbGluZWQsCj4+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcg KnZpZXcpOwo+PiArdm9pZCBpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3BsYW5l KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+ICsJCQkJCSAgICAgIGNvbnN0IHN0 cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldyk7Cj4+ICAgaW50IGk5MTVfZ2VtX29iamVjdF9hdHRh Y2hfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiAgIAkJCQlpbnQgYWxp Z24pOwo+PiAgIGludCBpOTE1X2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSk7Cj4+IEBAIC0yODEzLDcgKzI4MTUsMTMgQEAgaTkxNV9nZW1fb2Jq X2xvb2t1cF9vcl9jcmVhdGVfdm1hKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+ ICAgCQkJCQkJJmk5MTVfZ2d0dF92aWV3X25vcm1hbCk7Cj4+ICAgfQo+Pgo+PiAtc3RydWN0IGk5 MTVfdm1hICppOTE1X2dlbV9vYmpfdG9fZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKTsKPj4gK3N0cnVjdCBpOTE1X3ZtYSAqaTkxNV9nZW1fb2JqX3RvX2dndHRfdmlldyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiArCQkJCQkgICBlbnVtIGk5MTVfZ2d0dF92 aWV3X3R5cGUgdmlldyk7Cj4+ICtzdGF0aWMgaW5saW5lCj4+ICtzdHJ1Y3QgaTkxNV92bWEgKmk5 MTVfZ2VtX29ial90b19nZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+ICt7 Cj4+ICsJcmV0dXJuIGk5MTVfZ2VtX29ial90b19nZ3R0X3ZpZXcob2JqLCBJOTE1X0dHVFRfVklF V19OT1JNQUwpOwo+PiArfQo+PiAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X2dlbV9vYmpfaXNf cGlubmVkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHsKPj4gICAJc3RydWN0IGk5 MTVfdm1hICp2bWE7Cj4+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmb2JqLT52bWFfbGlz dCwgdm1hX2xpbmspCj4+IEBAIC0yODY3LDEzICsyODc1LDMwIEBAIGk5MTVfZ2VtX29ial9nZ3R0 X3BpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiAgIAkJCQkgICBhbGlnbm1l bnQsIGZsYWdzIHwgUElOX0dMT0JBTCk7Cj4+ICAgfQo+Pgo+PiArc3RhdGljIGlubGluZSBpbnQg X19tdXN0X2NoZWNrCj4+ICtpOTE1X2dlbV9vYmpfZ2d0dF9waW5fdmlldyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+PiArCQkJICAgdWludDMyX3QgYWxpZ25tZW50LAo+PiArCQkJ ICAgdW5zaWduZWQgZmxhZ3MsCj4+ICsJCQkgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcg KmdndHRfdmlldykKPj4gK3sKPj4gKwlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3Bpbl92aWV3KG9i aiwgaTkxNV9vYmpfdG9fZ2d0dChvYmopLAo+PiArCQkJCQlhbGlnbm1lbnQsIGZsYWdzIHwgUElO X0dMT0JBTCwKPj4gKwkJCQkJZ2d0dF92aWV3KTsKPj4gK30KPj4gKwo+PiAgIHN0YXRpYyBpbmxp bmUgaW50Cj4+ICAgaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5iaW5kKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4+ICAgewo+PiAgIAlyZXR1cm4gaTkxNV92bWFfdW5iaW5kKGk5MTVf Z2VtX29ial90b19nZ3R0KG9iaikpOwo+PiAgIH0KPj4KPj4gLXZvaWQgaTkxNV9nZW1fb2JqZWN0 X2dndHRfdW5waW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4+ICt2b2lkIGk5 MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluX3ZpZXcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPj4gKwkJCQkgICAgIGVudW0gaTkxNV9nZ3R0X3ZpZXdfdHlwZSB2aWV3KTsKPj4gK3N0 YXRpYyBpbmxpbmUgdm9pZAo+PiAraTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4gK3sKPj4gKwlpOTE1X2dlbV9vYmplY3RfZ2d0dF91 bnBpbl92aWV3KG9iaiwgSTkxNV9HR1RUX1ZJRVdfTk9STUFMKTsKPj4gK30KPj4KPj4gICAvKiBp OTE1X2dlbV9jb250ZXh0LmMgKi8KPj4gICBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2NvbnRl eHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j Cj4+IGluZGV4IDAxMDdjMmEuLjA0YzBjYjEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u Ywo+PiBAQCAtMzkzOCw3ICszOTM4LDggQEAgc3RhdGljIGJvb2wgaXNfcGluX2Rpc3BsYXkoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4gICBpbnQKPj4gICBpOTE1X2dlbV9vYmpl Y3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK Pj4gICAJCQkJICAgICB1MzIgYWxpZ25tZW50LAo+PiAtCQkJCSAgICAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcGlwZWxpbmVkKQo+PiArCQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cGlwZWxpbmVkLAo+PiArCQkJCSAgICAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3 KQo+PiAgIHsKPj4gICAJdTMyIG9sZF9yZWFkX2RvbWFpbnMsIG9sZF93cml0ZV9kb21haW47Cj4+ ICAgCWJvb2wgd2FzX3Bpbl9kaXNwbGF5Owo+PiBAQCAtMzk3NCw3ICszOTc1LDkgQEAgaTkxNV9n ZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4+ICAgCSAqIChlLmcuIGxpYmttcyBmb3IgdGhlIGJvb3R1cCBzcGxhc2gpLCB3ZSBo YXZlIHRvIGVuc3VyZSB0aGF0IHdlCj4+ICAgCSAqIGFsd2F5cyB1c2UgbWFwX2FuZF9mZW5jZWFi bGUgZm9yIGFsbCBzY2Fub3V0IGJ1ZmZlcnMuCj4+ICAgCSAqLwo+PiAtCXJldCA9IGk5MTVfZ2Vt X29ial9nZ3R0X3BpbihvYmosIGFsaWdubWVudCwgUElOX01BUFBBQkxFKTsKPj4gKwlyZXQgPSBp OTE1X2dlbV9vYmpfZ2d0dF9waW5fdmlldyhvYmosIGFsaWdubWVudCwKPj4gKwkJCQkJIHZpZXct PnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMID8KPj4gKwkJCQkJIFBJTl9NQVBQQUJMRSA6 IDAsIHZpZXcpOwo+PiAgIAlpZiAocmV0KQo+PiAgIAkJZ290byBlcnJfdW5waW5fZGlzcGxheTsK Pj4KPj4gQEAgLTQwMDIsOSArNDAwNSwxMSBAQCBlcnJfdW5waW5fZGlzcGxheToKPj4gICB9Cj4+ Cj4+ICAgdm9pZAo+PiAtaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21fZGlzcGxheV9wbGFuZShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+PiAraTkxNV9nZW1fb2JqZWN0X3VucGlu X2Zyb21fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiAr CQkJCQkgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQo+PiAgIHsKPj4gLQlpOTE1 X2dlbV9vYmplY3RfZ2d0dF91bnBpbihvYmopOwo+PiArCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3Vu cGluX3ZpZXcob2JqLCB2aWV3LT50eXBlKTsKPj4gKwo+PiAgIAlvYmotPnBpbl9kaXNwbGF5ID0g aXNfcGluX2Rpc3BsYXkob2JqKTsKPj4gICB9Cj4+Cj4+IEBAIC00MjQxLDE1ICs0MjQ2LDE2IEBA IGk5MTVfZ2VtX29iamVjdF9waW5fdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAo+PiAgIH0KPj4KPj4gICB2b2lkCj4+IC1pOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+PiAraTkxNV9nZW1fb2JqZWN0X2dndHRfdW5w aW5fdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+PiArCQkJCWVudW0gaTkx NV9nZ3R0X3ZpZXdfdHlwZSB2aWV3KQo+PiAgIHsKPj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9 IGk5MTVfZ2VtX29ial90b19nZ3R0KG9iaik7Cj4+ICsJc3RydWN0IGk5MTVfdm1hICp2bWEgPSBp OTE1X2dlbV9vYmpfdG9fZ2d0dF92aWV3KG9iaiwgdmlldyk7Cj4+Cj4+ICAgCUJVR19PTighdm1h KTsKPj4gICAJQlVHX09OKHZtYS0+cGluX2NvdW50ID09IDApOwo+PiAtCUJVR19PTighaTkxNV9n ZW1fb2JqX2dndHRfYm91bmQob2JqKSk7Cj4+ICsJQlVHX09OKCFpOTE1X2dlbV9vYmpfYm91bmRf dmlldyhvYmosIGk5MTVfb2JqX3RvX2dndHQob2JqKSwgdmlldykpOwo+Pgo+PiAtCWlmICgtLXZt YS0+cGluX2NvdW50ID09IDApCj4+ICsJaWYgKC0tdm1hLT5waW5fY291bnQgPT0gMCAmJiB2aWV3 ID09IEk5MTVfR0dUVF9WSUVXX05PUk1BTCkKPj4gICAJCW9iai0+cGluX21hcHBhYmxlID0gZmFs c2U7Cj4+ICAgfQo+Pgo+PiBAQCAtNTMwNiwxNCArNTMxMiwxNSBAQCBpOTE1X2dlbV9zaHJpbmtl cl9vb20oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9p ZCAqcHRyKQo+PiAgIAlyZXR1cm4gTk9USUZZX0RPTkU7Cj4+ICAgfQo+Pgo+PiAtc3RydWN0IGk5 MTVfdm1hICppOTE1X2dlbV9vYmpfdG9fZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+PiArc3RydWN0IGk5MTVfdm1hICppOTE1X2dlbV9vYmpfdG9fZ2d0dF92aWV3KHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+ICsJCQkJCSAgIGVudW0gaTkxNV9nZ3R0X3Zp ZXdfdHlwZSB2aWV3KQo+PiAgIHsKPj4gICAJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqZ2d0 dCA9IGk5MTVfb2JqX3RvX2dndHQob2JqKTsKPj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4+ Cj4+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmsp Cj4+ICAgCQlpZiAodm1hLT52bSA9PSBnZ3R0ICYmCj4+IC0JCSAgICB2bWEtPmdndHRfdmlldy50 eXBlID09IEk5MTVfR0dUVF9WSUVXX05PUk1BTCkKPj4gKwkJICAgIHZtYS0+Z2d0dF92aWV3LnR5 cGUgPT0gdmlldykKPj4gICAJCQlyZXR1cm4gdm1hOwo+Pgo+PiAgIAlyZXR1cm4gTlVMTDsKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4gaW5kZXggYmQ5NTc3Ni4uOTMzNjE0MiAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4gQEAgLTIzNzUsMTEgKzIz NzUsMTYgQEAgaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hX3ZpZXcoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4gICBzdGF0aWMgaW5saW5lCj4+ICAgaW50IGk5MTVf Z2V0X3ZtYV9wYWdlcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPj4gICB7Cj4+ICsJaW50IHJldCA9 IDA7Cj4+ICsKPj4gICAJaWYgKHZtYS0+Z2d0dF92aWV3LnBhZ2VzKQo+PiAgIAkJcmV0dXJuIDA7 Cj4+Cj4+ICAgCWlmICh2bWEtPmdndHRfdmlldy50eXBlID09IEk5MTVfR0dUVF9WSUVXX05PUk1B TCkKPj4gICAJCXZtYS0+Z2d0dF92aWV3LnBhZ2VzID0gdm1hLT5vYmotPnBhZ2VzOwo+PiArCWVs c2UgaWYgKHZtYS0+Z2d0dF92aWV3LnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfUk9UQVRFRCkKPj4g KwkJdm1hLT5nZ3R0X3ZpZXcucGFnZXMgPQo+PiArCQkJaW50ZWxfcm90YXRlX2ZiX29ial9wYWdl cygmdm1hLT5nZ3R0X3ZpZXcsIHZtYS0+b2JqKTsKPgo+IFRoZXJlJ3MgYSBiaXQgYSBsYXllcmlu ZyBjb25mdXNpb24gZ29pbmcgb24sIGdndHQgdmlldyBjb2RlIHNob3VsZCBiZSBoZXJlCj4gaW4g dGhlIGdlbSBjb2RlIHdpdGggYW4gYXBwcm9wcmlhdGUgcHJlZml4LiBKdXN0IG1vdmluZyB0aGUg Y29kZSBpcyBhbGwKPiB0aGF0J3MgaW1vIG5lZWRlZC4KCllvdSB3b3VsZCBtb3ZlIGludGVsX3Jv dGF0ZV9mYl9vYmpfcGFnZXMgaW1wbGVtZW50YXRpb24gaW50byAKaTkxNV9nZW1fZ3R0LmM/IElu dGVyZXN0aW5nLCBiZWNhdXNlIEkgc2F3IGl0IGRpZmZlcmVudGx5IC0gYXMgYSBkaXNwbGF5IApp bnRlcm5hbCBfaW1wbGVtZW50YXRpb25fIHVzaW5nIHRoZSBHRU0gR0dUVCB2aWV3IGZyYW1ld29y ayAtIGFuZCBhcyAKc3VjaCBkb2VzIG5vdCBiZWxvbmcgaW4gY29yZSBHRU0uICBDb3VsZCB5b3Ug ZXhwbGFpbiB3aHkgeW91IHRoaW5rIHNvPwoKPj4gICAJZWxzZQo+PiAgIAkJV0FSTl9PTkNFKDEs ICJHR1RUIHZpZXcgJXUgbm90IGltcGxlbWVudGVkIVxuIiwKPj4gICAJCQkgIHZtYS0+Z2d0dF92 aWV3LnR5cGUpOwo+PiBAQCAtMjM4NywxMCArMjM5MiwxNSBAQCBpbnQgaTkxNV9nZXRfdm1hX3Bh Z2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+PiAgIAlpZiAoIXZtYS0+Z2d0dF92aWV3LnBhZ2Vz KSB7Cj4+ICAgCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgcGFnZXMgZm9yIFZNQSB2aWV3IHR5 cGUgJXUhXG4iLAo+PiAgIAkJCSAgdm1hLT5nZ3R0X3ZpZXcudHlwZSk7Cj4+IC0JCXJldHVybiAt RUlOVkFMOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCX0gZWxzZSBpZiAoSVNfRVJSKHZtYS0+ Z2d0dF92aWV3LnBhZ2VzKSkgewo+PiArCQlyZXQgPSBQVFJfRVJSKHZtYS0+Z2d0dF92aWV3LnBh Z2VzKTsKPj4gKwkJdm1hLT5nZ3R0X3ZpZXcucGFnZXMgPSBOVUxMOwo+PiArCQlEUk1fRVJST1Io IkZhaWxlZCB0byBnZXQgcGFnZXMgZm9yIFZNQSB2aWV3IHR5cGUgJXUgKCVkKSFcbiIsCj4+ICsJ CQkgIHZtYS0+Z2d0dF92aWV3LnR5cGUsIHJldCk7Cj4+ICAgCX0KPj4KPj4gLQlyZXR1cm4gMDsK Pj4gKwlyZXR1cm4gcmV0Owo+PiAgIH0KPj4KPj4gICAvKioKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmgKPj4gaW5kZXggYzllOTNmNS4uNTZhMjM1NiAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmgKPj4gQEAgLTExMSwxMiArMTExLDI0IEBAIHR5cGVkZWYgZ2Vu OF9ndHRfcHRlX3QgZ2VuOF9wcGd0dF9wZGVfdDsKPj4KPj4gICBlbnVtIGk5MTVfZ2d0dF92aWV3 X3R5cGUgewo+PiAgIAlJOTE1X0dHVFRfVklFV19OT1JNQUwgPSAwLAo+PiArCUk5MTVfR0dUVF9W SUVXX1JPVEFURUQKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvIHsK Pj4gKwl1bnNpZ25lZCBpbnQgcGl4ZWxfc2l6ZTsKPj4gKwl1bnNpZ25lZCBpbnQgaGVpZ2h0Owo+ PiArCXVuc2lnbmVkIGludCBwaXRjaDsKPj4gKwl1aW50NjRfdCBmYl9tb2RpZmllcjsKPj4gICB9 Owo+Pgo+PiAgIHN0cnVjdCBpOTE1X2dndHRfdmlldyB7Cj4+ICAgCWVudW0gaTkxNV9nZ3R0X3Zp ZXdfdHlwZSB0eXBlOwo+Pgo+PiAgIAlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwo+PiArCj4+ICsJ dW5pb24gewo+PiArCQlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyByb3RhdGlvbl9pbmZvOwo+ PiArCX07Cj4+ICAgfTsKPj4KPj4gICBleHRlcm4gY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3 IGk5MTVfZ2d0dF92aWV3X25vcm1hbDsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku Ywo+PiBpbmRleCA3YTVkMGE3Li5jYjRkYWU4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4+IEBAIC0yMjQ0LDE4ICsyMjQ0LDE1MSBAQCBpbnRlbF9mYl9hbGlnbl9o ZWlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGhlaWdodCwgdWludDMyX3QgcGl4ZWxf Zm9ybWF0LAo+PiAgIAkJCQkJCSAgZmJfZm9ybWF0X21vZGlmaWVyKSk7Cj4+ICAgfQo+Pgo+PiAt aW50Cj4+IC1pbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPj4gLQkJCSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+PiAtCQkJICAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcGlwZWxpbmVkKQo+PiArc3RhdGljCj4+ICt2b2lkIHJvdGF0ZV9w YWdlcyhkbWFfYWRkcl90ICppbiwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVp Z2h0LAo+PiArCQkgIHN0cnVjdCBzZ190YWJsZSAqc3QpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50 IGNvbHVtbiwgcm93Owo+PiArCXVuc2lnbmVkIGludCBzcmNfaWR4Owo+PiArCXN0cnVjdCBzY2F0 dGVybGlzdCAqc2cgPSBzdC0+c2dsOwo+PiArCj4+ICsJc3QtPm5lbnRzID0gMDsKPj4gKwo+PiAr CWZvciAoY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7IGNvbHVtbisrKSB7Cj4+ICsJCXNyY19p ZHggPSB3aWR0aCAqIChoZWlnaHQgLSAxKSArIGNvbHVtbjsKPj4gKwkJZm9yIChyb3cgPSAwOyBy b3cgPCBoZWlnaHQ7IHJvdysrKSB7Cj4+ICsJCQlzdC0+bmVudHMrKzsKPj4gKwkJCS8qIFdlIGRv bid0IG5lZWQgdGhlIHBhZ2VzLCBidXQgbmVlZCB0byBpbml0aWFsaXplCj4+ICsJCQkgKiB0aGUg ZW50cmllcyBzbyB0aGUgc2cgbGlzdCBjYW4gYmUgaGFwcGlseSB0cmF2ZXJzZWQuCj4+ICsJCQkg KiBUaGUgb25seSB0aGluZyB3ZSBuZWVkIGFyZSBETUEgYWRkcmVzc2VzLgo+PiArCQkJICovCj4+ ICsJCQlzZ19zZXRfcGFnZShzZywgTlVMTCwgUEFHRV9TSVpFLCAwKTsKPj4gKwkJCXNnX2RtYV9h ZGRyZXNzKHNnKSA9IGluW3NyY19pZHhdOwo+PiArCQkJc2dfZG1hX2xlbihzZykgPSBQQUdFX1NJ WkU7Cj4+ICsJCQlzZyA9IHNnX25leHQoc2cpOwo+PiArCQkJc3JjX2lkeCAtPSB3aWR0aDsKPj4g KwkJfQo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RydWN0IHNnX3RhYmxlICppbnRlbF9yb3RhdGVf ZmJfb2JqX3BhZ2VzKHN0cnVjdCBpOTE1X2dndHRfdmlldyAqZ2d0dF92aWV3LAo+PiArCQkJCQkg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+PiAgIHsKPj4gLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZmItPmRldjsKPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2Jq LT5iYXNlLmRldjsKPj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50 ZWxfZmJfb2JqKGZiKTsKPj4gLQl1MzIgYWxpZ25tZW50Owo+PiAtCWludCByZXQ7Cj4+ICsJc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqZ2d0dCA9ICZkZXZfcHJpdi0+Z3R0LmJhc2U7Cj4+ICsJ c3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvID0gJmdndHRfdmlldy0+cm90YXRp b25faW5mbzsKPj4gKwl1bnNpZ25lZCBsb25nIHNpemUsIHBhZ2VzLCByb3RfcGFnZXM7Cj4+ICsJ c3RydWN0IHNnX3BhZ2VfaXRlciBzZ19pdGVyOwo+PiArCXVuc2lnbmVkIGxvbmcgaTsKPj4gKwlk bWFfYWRkcl90ICpwYWdlX2FkZHJfbGlzdDsKPj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0Owo+PiAr CXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPj4gKwl1bnNpZ25lZCBpbnQg d2lkdGhfcGFnZXMsIGhlaWdodF9wYWdlczsKPj4gKwlpbnQgcmV0ID0gRU5PTUVNOwo+Pgo+PiAt CVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPj4gKwlwYWdl cyA9IGk5MTVfZ2VtX29ial9zaXplKG9iaiwgZ2d0dCkgLyBQQUdFX1NJWkU7Cj4+ICsKPj4gKwkv KiBDYWxjdWxhdGUgdGlsaW5nIGdlb21ldHJ5LiAqLwo+PiArCXRpbGVfaGVpZ2h0ID0gaW50ZWxf dGlsZV9oZWlnaHQoZGV2LCByb3RfaW5mby0+cGl4ZWxfc2l6ZSAqIDgsCj4+ICsJCQkJCXJvdF9p bmZvLT5mYl9tb2RpZmllcik7Cj4+ICsJdGlsZV93aWR0aCA9IFBBR0VfU0laRSAvIHJvdF9pbmZv LT5waXhlbF9zaXplIC8gdGlsZV9oZWlnaHQ7Cj4+ICsJd2lkdGhfcGFnZXMgPSBESVZfUk9VTkRf VVAocm90X2luZm8tPnBpdGNoIC8gcm90X2luZm8tPnBpeGVsX3NpemUsCj4+ICsJCQkJICAgdGls ZV93aWR0aCk7Cj4+ICsJaGVpZ2h0X3BhZ2VzID0gRElWX1JPVU5EX1VQKHJvdF9pbmZvLT5oZWln aHQsIHRpbGVfaGVpZ2h0KTsKPj4gKwlyb3RfcGFnZXMgPSB3aWR0aF9wYWdlcyAqIGhlaWdodF9w YWdlczsKPj4gKwlzaXplID0gcm90X3BhZ2VzICogUEFHRV9TSVpFOwo+PiArCj4+ICsJLyogQWxs b2NhdGUgYSB0ZW1wb3JhcnkgbGlzdCBvZiBzb3VyY2UgcGFnZXMgZm9yIHJhbmRvbSBhY2Nlc3Mu ICovCj4+ICsJcGFnZV9hZGRyX2xpc3QgPSBkcm1fbWFsbG9jX2FiKHBhZ2VzLCBzaXplb2YoZG1h X2FkZHJfdCkpOwo+PiArCWlmICghcGFnZV9hZGRyX2xpc3QpCj4+ICsJCXJldHVybiBFUlJfUFRS KHJldCk7Cj4+ICsKPj4gKwkvKiBBbGxvY2F0ZSB0YXJnZXQgU0cgbGlzdC4gKi8KPj4gKwlzdCA9 IGttYWxsb2Moc2l6ZW9mKCpzdCksIEdGUF9LRVJORUwpOwo+PiArCWlmICghc3QpCj4+ICsJCWdv dG8gZXJyX3N0X2FsbG9jOwo+PiArCj4+ICsJcmV0ID0gc2dfYWxsb2NfdGFibGUoc3QsIHJvdF9w YWdlcywgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBlcnJfc2dfYWxsb2M7 Cj4+ICsKPj4gKwkvKiBQb3B1bGF0ZSBzb3VyY2UgcGFnZSBsaXN0IGZyb20gdGhlIG9iamVjdC4g Ki8KPj4gKwlpID0gMDsKPj4gKwlmb3JfZWFjaF9zZ19wYWdlKG9iai0+cGFnZXMtPnNnbCwgJnNn X2l0ZXIsIG9iai0+cGFnZXMtPm5lbnRzLCAwKSB7Cj4+ICsJCXBhZ2VfYWRkcl9saXN0W2ldID0g c2dfcGFnZV9pdGVyX2RtYV9hZGRyZXNzKCZzZ19pdGVyKTsKPj4gKwkJaSsrOwo+PiArCX0KPj4g Kwo+PiArCS8qIFJvdGF0ZSB0aGUgcGFnZXMuICovCj4+ICsJcm90YXRlX3BhZ2VzKHBhZ2VfYWRk cl9saXN0LCB3aWR0aF9wYWdlcywgaGVpZ2h0X3BhZ2VzLCBzdCk7Cj4+ICsKPj4gKwlEUk1fREVC VUdfS01TKAo+PiArCQkgICAgICAiQ3JlYXRlZCByb3RhdGVkIHBhZ2UgbWFwcGluZyBmb3Igb2Jq ZWN0IHNpemUgJWx1IChwaXRjaD0ldSwgaGVpZ2h0PSV1LCBwaXhlbF9zaXplPSV1LCAldXgldSB0 aWxlcywgJWx1IHBhZ2VzKS5cbiIsCj4+ICsJCSAgICAgIHNpemUsIHJvdF9pbmZvLT5waXRjaCwg cm90X2luZm8tPmhlaWdodCwKPj4gKwkJICAgICAgcm90X2luZm8tPnBpeGVsX3NpemUsIHdpZHRo X3BhZ2VzLCBoZWlnaHRfcGFnZXMsCj4+ICsJCSAgICAgIHJvdF9wYWdlcyk7Cj4+ICsKPj4gKwlk cm1fZnJlZV9sYXJnZShwYWdlX2FkZHJfbGlzdCk7Cj4+ICsKPj4gKwlyZXR1cm4gc3Q7Cj4+ICsK Pj4gK2Vycl9zZ19hbGxvYzoKPj4gKwlrZnJlZShzdCk7Cj4+ICtlcnJfc3RfYWxsb2M6Cj4+ICsJ ZHJtX2ZyZWVfbGFyZ2UocGFnZV9hZGRyX2xpc3QpOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygK Pj4gKwkJICAgICAgIkZhaWxlZCB0byBjcmVhdGUgcm90YXRlZCBtYXBwaW5nIGZvciBvYmplY3Qg c2l6ZSAlbHUhICglZCkgKHBpdGNoPSV1LCBoZWlnaHQ9JXUsIHBpeGVsX3NpemU9JXUsICV1eCV1 IHRpbGVzLCAlbHUgcGFnZXMpXG4iLAo+PiArCQkgICAgICBzaXplLCByZXQsIHJvdF9pbmZvLT5w aXRjaCwgcm90X2luZm8tPmhlaWdodCwKPj4gKwkJICAgICAgcm90X2luZm8tPnBpeGVsX3NpemUs IHdpZHRoX3BhZ2VzLCBoZWlnaHRfcGFnZXMsCj4+ICsJCSAgICAgIHJvdF9wYWdlcyk7Cj4+ICsJ cmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gK30KPj4gKwo+PiArc3RhdGljCj4+ICtjb25zdCBzdHJ1 Y3QgaTkxNV9nZ3R0X3ZpZXcgaTkxNV9yb3RhdGVkX2dndHRfdmlld190ZW1wbGF0ZSA9IHsKPj4g KwkudHlwZSA9IEk5MTVfR0dUVF9WSUVXX1JPVEFURUQsCj4+ICt9Owo+Cj4gTm90IHJlYWxseSBu ZWVkZWQsIHlvdSBjYW4ganVzdCB1c2UgYSBzdHJ1Y3QgYXNzaWdubWVudCBpbnN0YWVkIG9mIHRo ZQo+IG1lbWNweSBiZWxvdywgaS5lLgo+Cj4gCSp2aWV3ID0gey50eXBlID0gSTkxNV9HR1RUX1ZJ RVdfUk9UQVRFRH07Cj4KPiBnY2MgdGhlbiBjbGVhcnMgZXZlcnloaW5nIGVsc2UuCgpXaWxsIGNo YW5nZS4KCj4+ICsKPj4gK3N0YXRpYwo+PiAraW50IGludGVsX2ZiX2dndHRfdmlldyhzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPj4gKwkJICAgICAgIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAo+PiArCQkgICAgICAgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQo+ Cj4gSSB0aGluayBpbnRlbF9maWxsX2ZiX2dndHRfdmlldyB3b3VsZCBiZSBhIGNsZWFyZXIgbmFt ZSBmb3Igd2hhdCB0aGlzCj4gZG9lcy4gQWxzbyBnZW5lcmFsbHkgd2UgcHV0IHRoZSBzdHJ1Y3Qg YSBmdW5jdGlvbiBvcGVyYXRpb25zIG9uIGZpcnN0ICh0bwo+IGZha2UgT09QIHByaW5jaXBsZXMp IGFuZCBncm91cCBsYXRlciBwYXJhbWV0ZXJzIGJ5IHRvcGljIGFuZCB0aGVuIG9iamVjdAo+IGZp cnN0IGFuZCBmbGFncy9kYXRhIGxhdGVyLiBTbyBoZXJlIEknZCBnbyB3aXRoICh2aWV3LCBmYiwg cGxhbmVfc3RhdGUpLgoKTWFrZXMgc2Vuc2UsIEkganVzdCBtaW5kbGVzc2x5IGV4cGFuZGVkIGl0 IGluIHRoaXMgdmVyc2lvbiB3aXRob3V0IAp0YWtpbmcgYSBzdGVwIGJhY2sgdG8gcmUtZXZhbHV0 ZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCgpSZWdhcmRzLAoKVHZydGtvCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=