From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: Re: [PATCH 3/9] drm/i915: remove intel_pipe_set_base() (v4) Date: Thu, 27 Nov 2014 16:20:58 +0200 Message-ID: <5477334A.4060201@gmail.com> References: <1416858786-25376-1-git-send-email-matthew.d.roper@intel.com> <1416858786-25376-4-git-send-email-matthew.d.roper@intel.com> 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 5DC336E99E for ; Thu, 27 Nov 2014 06:20:52 -0800 (PST) In-Reply-To: <1416858786-25376-4-git-send-email-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper , intel-gfx@lists.freedesktop.org Cc: Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org UmV2aWV3ZWQtYnk6IEFuZGVyIENvbnNlbHZhbiBkZSBPbGl2ZWlyYSA8YW5kZXIuY29uc2VsdmFu LmRlLm9saXZlaXJhQGludGVsLmNvbT4KCk9uIDExLzI0LzIwMTQgMDk6NTMgUE0sIE1hdHQgUm9w ZXIgd3JvdGU6Cj4gRnJvbTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFi b3JhLmNvLnVrPgo+IAo+IEFmdGVyIHNvbWUgcmVmYWN0b3IgaW50ZWxfcHJpbWFyeV9wbGFuZV9z ZXRwbGFuZSgpIGRvZXMgdGhlIHNhbWUKPiBhcyBpbnRlbF9waXBlX3NldF9iYXNlKCkgc28gd2Ug Y2FuIGdldCByaWQgb2YgaXQgYW5kIHJlcGxhY2UgdGhlIGNhbGxzCj4gd2l0aCBpbnRlbF9wcmlt YXJ5X3BsYW5lX3NldHBsYW5lKCkuCj4gCj4gdjI6IHRha2UgVmlsbGUncyBjb21tZW50czoKPiAJ LSBnZXQgdGhlIHJpZ2h0IGFyZ3VtZW50cyBmb3IgdXBkYXRlX3BsYW5lKCkKPiAJLSB1c2UgZHJt X2NydGNfZ2V0X2h2X3RpbWluZygpCj4gCj4gdjMgKGJ5IE1hdHQpOgo+ICAgLSBSZWJhc2UgdG8g bGF0ZXN0IGRpLW5pZ2h0bHkgY29kZWJhc2UKPiAgIC0gVXNlIHByaW1hcnktPmZ1bmNzLT51cGRh dGVfcGxhbmUoKSBpbiBfX2ludGVsX3NldF9tb2RlKCkKPiAgIC0gVXNlIHByaW1hcnktPmZ1bmNz LT5kaXNhYmxlX3BsYW5lKCkgaW4gaW50ZWxfY3J0Y19kaXNhYmxlKCkKPiAKPiB2NCAoYnkgTWF0 dCk6Cj4gICAtIERyb3AgcmVkdW5kYW50IGNhbGxzIHRvIGludGVsX2NydGNfd2FpdF9mb3JfcGVu ZGluZ19mbGlwcygpIGJlZm9yZQo+ICAgICBjYWxsaW5nIHVwZGF0ZV9wbGFuZSgpIChWaWxsZSkK PiAKPiBTaWduZWQtb2ZmLWJ5OiBHdXN0YXZvIFBhZG92YW4gPGd1c3Rhdm8ucGFkb3ZhbkBjb2xs YWJvcmEuY28udWs+Cj4gU2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVy QGludGVsLmNvbT4KPiBBY2tlZC1hbmQtbW91cm5lZC1ieTogSmVzc2UgQmFybmVzIDxqYmFybmVz QHZpcnR1b3VzZ2Vlay5vcmc+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMgfCAxMjkgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgIDEg ZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAxMDEgZGVsZXRpb25zKC0pCj4gCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IDgxODk0YmUuLjE3Nzg4ZjggMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTI4OTAsNzEgKzI4OTAs NiBAQCBzdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfcGlwZV9zaXplKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKQo+ICAgCWNydGMtPmNvbmZpZy5waXBlX3NyY19oID0gYWRqdXN0ZWRfbW9kZS0+Y3J0 Y192ZGlzcGxheTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50Cj4gLWludGVsX3BpcGVfc2V0X2Jh c2Uoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCj4gLQkJICAgIHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKPiAtCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiAtCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9IGNydGMtPnByaW1hcnktPmZiOwo+IC0Jc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZF9vYmogPSBpbnRlbF9mYl9vYmoob2xkX2ZiKTsKPiAt CWludCByZXQ7Cj4gLQo+IC0JaWYgKGludGVsX2NydGNfaGFzX3BlbmRpbmdfZmxpcChjcnRjKSkg ewo+IC0JCURSTV9FUlJPUigicGlwZSBpcyBzdGlsbCBidXN5IHdpdGggYW4gb2xkIHBhZ2VmbGlw XG4iKTsKPiAtCQlyZXR1cm4gLUVCVVNZOwo+IC0JfQo+IC0KPiAtCS8qIG5vIGZiIGJvdW5kICov Cj4gLQlpZiAoIWZiKSB7Cj4gLQkJRFJNX0VSUk9SKCJObyBGQiBib3VuZFxuIik7Cj4gLQkJcmV0 dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JaWYgKGludGVsX2NydGMtPnBsYW5lID4gSU5URUxfSU5GTyhk ZXYpLT5udW1fcGlwZXMpIHsKPiAtCQlEUk1fRVJST1IoIm5vIHBsYW5lIGZvciBjcnRjOiBwbGFu ZSAlYywgbnVtX3BpcGVzICVkXG4iLAo+IC0JCQkgIHBsYW5lX25hbWUoaW50ZWxfY3J0Yy0+cGxh bmUpLAo+IC0JCQkgIElOVEVMX0lORk8oZGV2KS0+bnVtX3BpcGVzKTsKPiAtCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCX0KPiAtCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQly ZXQgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihjcnRjLT5wcmltYXJ5LCBmYiwgTlVMTCk7 Cj4gLQlpZiAocmV0ID09IDApCj4gLQkJaTkxNV9nZW1fdHJhY2tfZmIob2xkX29iaiwgaW50ZWxf ZmJfb2JqKGZiKSwKPiAtCQkJCSAgSU5URUxfRlJPTlRCVUZGRVJfUFJJTUFSWShwaXBlKSk7Cj4g LQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAtCWlmIChyZXQgIT0gMCkgewo+ IC0JCURSTV9FUlJPUigicGluICYgZmVuY2UgZmFpbGVkXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+ IC0JfQo+IC0KPiAtCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMs IGZiLCB4LCB5KTsKPiAtCj4gLQlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKQo+IC0JCWludGVsX2Zy b250YnVmZmVyX2ZsaXAoZGV2LCBJTlRFTF9GUk9OVEJVRkZFUl9QUklNQVJZKHBpcGUpKTsKPiAt Cj4gLQljcnRjLT5wcmltYXJ5LT5mYiA9IGZiOwo+IC0JY3J0Yy0+eCA9IHg7Cj4gLQljcnRjLT55 ID0geTsKPiAtCj4gLQlpZiAob2xkX2ZiKSB7Cj4gLQkJaWYgKGludGVsX2NydGMtPmFjdGl2ZSAm JiBvbGRfZmIgIT0gZmIpCj4gLQkJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIGludGVsX2Ny dGMtPnBpcGUpOwo+IC0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAtCQlpbnRl bF91bnBpbl9mYl9vYmoob2xkX29iaik7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7Cj4gLQl9Cj4gLQo+IC0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0J aW50ZWxfdXBkYXRlX2ZiYyhkZXYpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdm9pZCBpbnRlbF9mZGlf bm9ybWFsX3RyYWluKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+IEBAIC01MjQ4LDggKzUxODMsNiBAQCBzdGF0aWMg dm9pZCBpbnRlbF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAgCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gICAJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZF9vYmogPSBp bnRlbF9mYl9vYmooY3J0Yy0+cHJpbWFyeS0+ZmIpOwo+IC0JZW51bSBwaXBlIHBpcGUgPSB0b19p bnRlbF9jcnRjKGNydGMpLT5waXBlOwo+ICAgCj4gICAJLyogY3J0YyBzaG91bGQgc3RpbGwgYmUg ZW5hYmxlZCB3aGVuIHdlIGRpc2FibGUgaXQuICovCj4gICAJV0FSTl9PTighY3J0Yy0+ZW5hYmxl ZCk7Cj4gQEAgLTUyNTcsMTQgKzUxOTAsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2Fi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAgCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZGlz YWJsZShjcnRjKTsKPiAgIAlkZXZfcHJpdi0+ZGlzcGxheS5vZmYoY3J0Yyk7Cj4gICAKPiAtCWlm IChjcnRjLT5wcmltYXJ5LT5mYikgewo+IC0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4 KTsKPiAtCQlpbnRlbF91bnBpbl9mYl9vYmoob2xkX29iaik7Cj4gLQkJaTkxNV9nZW1fdHJhY2tf ZmIob2xkX29iaiwgTlVMTCwKPiAtCQkJCSAgSU5URUxfRlJPTlRCVUZGRVJfUFJJTUFSWShwaXBl KSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQkJY3J0Yy0+cHJp bWFyeS0+ZmIgPSBOVUxMOwo+IC0JfQo+ICsJY3J0Yy0+cHJpbWFyeS0+ZnVuY3MtPmRpc2FibGVf cGxhbmUoY3J0Yy0+cHJpbWFyeSk7Cj4gICAKPiAgIAkvKiBVcGRhdGUgY29tcHV0ZWQgc3RhdGUu ICovCj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmln LmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Cj4gQEAgLTk2MjEsNiArOTU0Nyw4IEBAIHN0YXRpYyBp bnQgaW50ZWxfY3J0Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAgCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9IGNydGMtPnByaW1hcnktPmZiOwo+ICAgCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ICAgCXN0cnVj dCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiArCXN0cnVj dCBkcm1fcGxhbmUgKnByaW1hcnkgPSBjcnRjLT5wcmltYXJ5Owo+ICsJc3RydWN0IGludGVsX3Bs YW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHByaW1hcnkpOwo+ICAgCWVudW0gcGlw ZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiAgIAlzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayAq d29yazsKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IEBAIC05Nzc5LDggKzk3 MDcsMTUgQEAgZnJlZV93b3JrOgo+ICAgCj4gICAJaWYgKHJldCA9PSAtRUlPKSB7Cj4gICBvdXRf aGFuZzoKPiAtCQlpbnRlbF9jcnRjX3dhaXRfZm9yX3BlbmRpbmdfZmxpcHMoY3J0Yyk7Cj4gLQkJ cmV0ID0gaW50ZWxfcGlwZV9zZXRfYmFzZShjcnRjLCBjcnRjLT54LCBjcnRjLT55LCBmYik7Cj4g KwkJcmV0ID0gcHJpbWFyeS0+ZnVuY3MtPnVwZGF0ZV9wbGFuZShwcmltYXJ5LCBjcnRjLCBmYiwK PiArCQkJCQkJICAgaW50ZWxfcGxhbmUtPmNydGNfeCwKPiArCQkJCQkJICAgaW50ZWxfcGxhbmUt PmNydGNfeSwKPiArCQkJCQkJICAgaW50ZWxfcGxhbmUtPmNydGNfaCwKPiArCQkJCQkJICAgaW50 ZWxfcGxhbmUtPmNydGNfdywKPiArCQkJCQkJICAgaW50ZWxfcGxhbmUtPnNyY194LAo+ICsJCQkJ CQkgICBpbnRlbF9wbGFuZS0+c3JjX3ksCj4gKwkJCQkJCSAgIGludGVsX3BsYW5lLT5zcmNfaCwK PiArCQkJCQkJICAgaW50ZWxfcGxhbmUtPnNyY193KTsKPiAgIAkJaWYgKHJldCA9PSAwICYmIGV2 ZW50KSB7Cj4gICAJCQlzcGluX2xvY2tfaXJxKCZkZXYtPmV2ZW50X2xvY2spOwo+ICAgCQkJZHJt X3NlbmRfdmJsYW5rX2V2ZW50KGRldiwgcGlwZSwgZXZlbnQpOwo+IEBAIC0xMDk2MiwyNiArMTA4 OTcsMTUgQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiAgIAkgKiBvbiB0aGUgRFBMTC4KPiAgIAkgKi8KPiAgIAlmb3JfZWFjaF9pbnRlbF9jcnRj X21hc2tlZChkZXYsIG1vZGVzZXRfcGlwZXMsIGludGVsX2NydGMpIHsKPiAtCQlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpvbGRfZmIgPSBjcnRjLT5wcmltYXJ5LT5mYjsKPiAtCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2xkX29iaiA9IGludGVsX2ZiX29iaihvbGRfZmIpOwo+IC0JCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ICsJCXN0 cnVjdCBkcm1fcGxhbmUgKnByaW1hcnkgPSBpbnRlbF9jcnRjLT5iYXNlLnByaW1hcnk7Cj4gKwkJ aW50IHZkaXNwbGF5LCBoZGlzcGxheTsKPiAgIAo+IC0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0 X211dGV4KTsKPiAtCQlyZXQgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihjcnRjLT5wcmlt YXJ5LCBmYiwgTlVMTCk7Cj4gLQkJaWYgKHJldCAhPSAwKSB7Cj4gLQkJCURSTV9FUlJPUigicGlu ICYgZmVuY2UgZmFpbGVkXG4iKTsKPiAtCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7Cj4gLQkJCWdvdG8gZG9uZTsKPiAtCQl9Cj4gLQkJaWYgKG9sZF9mYikKPiAtCQkJaW50ZWxf dW5waW5fZmJfb2JqKG9sZF9vYmopOwo+IC0JCWk5MTVfZ2VtX3RyYWNrX2ZiKG9sZF9vYmosIG9i aiwKPiAtCQkJCSAgSU5URUxfRlJPTlRCVUZGRVJfUFJJTUFSWShpbnRlbF9jcnRjLT5waXBlKSk7 Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JCWNydGMtPnBy aW1hcnktPmZiID0gZmI7Cj4gLQkJY3J0Yy0+eCA9IHg7Cj4gLQkJY3J0Yy0+eSA9IHk7Cj4gKwkJ ZHJtX2NydGNfZ2V0X2h2X3RpbWluZyhtb2RlLCAmaGRpc3BsYXksICZ2ZGlzcGxheSk7Cj4gKwkJ cmV0ID0gcHJpbWFyeS0+ZnVuY3MtPnVwZGF0ZV9wbGFuZShwcmltYXJ5LCAmaW50ZWxfY3J0Yy0+ YmFzZSwKPiArCQkJCQkJICAgZmIsIDAsIDAsCj4gKwkJCQkJCSAgIGhkaXNwbGF5LCB2ZGlzcGxh eSwKPiArCQkJCQkJICAgeCA8PCAxNiwgeSA8PCAxNiwKPiArCQkJCQkJICAgaGRpc3BsYXkgPDwg MTYsIHZkaXNwbGF5IDw8IDE2KTsKPiAgIAl9Cj4gICAKPiAgIAkvKiBOb3cgZW5hYmxlIHRoZSBj bG9ja3MsIHBsYW5lLCBwaXBlLCBhbmQgY29ubmVjdG9ycyB0aGF0IHdlIHNldCB1cC4gKi8KPiBA QCAtMTE0NDcsMTEgKzExMzcxLDE0IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19zZXRfY29uZmln KHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKPiAgIAkJCQkJICAgZGlzYWJsZV9waXBlcyk7Cj4g ICAJfSBlbHNlIGlmIChjb25maWctPmZiX2NoYW5nZWQpIHsKPiAgIAkJc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKHNldC0+Y3J0Yyk7Cj4gLQo+IC0JCWludGVs X2NydGNfd2FpdF9mb3JfcGVuZGluZ19mbGlwcyhzZXQtPmNydGMpOwo+IC0KPiAtCQlyZXQgPSBp bnRlbF9waXBlX3NldF9iYXNlKHNldC0+Y3J0YywKPiAtCQkJCQkgIHNldC0+eCwgc2V0LT55LCBz ZXQtPmZiKTsKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gc2V0LT5jcnRjLT5wcmlt YXJ5Owo+ICsJCWludCB2ZGlzcGxheSwgaGRpc3BsYXk7Cj4gKwo+ICsJCWRybV9jcnRjX2dldF9o dl90aW1pbmcoc2V0LT5tb2RlLCAmaGRpc3BsYXksICZ2ZGlzcGxheSk7Cj4gKwkJcmV0ID0gcHJp bWFyeS0+ZnVuY3MtPnVwZGF0ZV9wbGFuZShwcmltYXJ5LCBzZXQtPmNydGMsIHNldC0+ZmIsCj4g KwkJCQkJCSAgIDAsIDAsIGhkaXNwbGF5LCB2ZGlzcGxheSwKPiArCQkJCQkJICAgc2V0LT54IDw8 IDE2LCBzZXQtPnkgPDwgMTYsCj4gKwkJCQkJCSAgIGhkaXNwbGF5IDw8IDE2LCB2ZGlzcGxheSA8 PCAxNik7Cj4gICAKPiAgIAkJLyoKPiAgIAkJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBy aW1hcnkgcGxhbmUgaXMgcmUtZW5hYmxlZCBpZiBpdAo+IAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK