From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 2/6] drm/i915: Unduplicate CHV signal level code Date: Mon, 11 Apr 2016 18:09:43 +0300 Message-ID: <20160411150943.GH4329@intel.com> References: <1460129506-6293-1-git-send-email-ander.conselvan.de.oliveira@intel.com> <1460129506-6293-3-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 2080E6E584 for ; Mon, 11 Apr 2016 15:09:46 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1460129506-6293-3-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ander Conselvan de Oliveira Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBBcHIgMDgsIDIwMTYgYXQgMDY6MzE6NDJQTSArMDMwMCwgQW5kZXIgQ29uc2VsdmFu IGRlIE9saXZlaXJhIHdyb3RlOgo+IFRoZSBjb2RlIGZvciBwcm9ncmFtbWluZyB2b2x0YWdlIHN3 aW5nIGFuZCBlbXBoYXNpcyB3YXMgZHVwbGljYXRlZAo+IGJldHdlZW4gRFAgYW5kIEhETUkgY29k ZS4gTW92ZSB0aGF0IHRvIGEgbmV3IGZpbGUsIGludGVsX2RwaW9fcGh5LmMuCj4gCj4gU2lnbmVk LW9mZi1ieTogQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxhbmRlci5jb25zZWx2YW4uZGUu b2xpdmVpcmFAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAg ICB8ICAgNSArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jICAgICAgIHwgMTAz ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHBpb19waHkuYyB8IDEyMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyAgICAgfCAgNzIgKy0tLS0tLS0tLS0t LS0tLS0tLS0KPiAgNSBmaWxlcyBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKSwgMTY3IGRlbGV0 aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHBpb19waHkuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggN2ZmYjUxYi4uZWI0NWUy OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTU3LDYgKzU3LDcgQEAgaTkxNS15ICs9 IGludGVsX2F1ZGlvLm8gXAo+ICAJICBpbnRlbF9iaW9zLm8gXAo+ICAJICBpbnRlbF9jb2xvci5v IFwKPiAgCSAgaW50ZWxfZGlzcGxheS5vIFwKPiArCSAgaW50ZWxfZHBpb19waHkubyBcCj4gIAkg IGludGVsX2RwbGxfbWdyLm8gXAo+ICAJICBpbnRlbF9mYmMubyBcCj4gIAkgIGludGVsX2ZpZm9f dW5kZXJydW4ubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggNGViZDNmZi4uM2Mz OTNlMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0zNTA0LDYgKzM1MDQsMTEg QEAgdm9pZCBpbnRlbF9zYmlfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCB1MTYgcmVnLCB1MzIgdmFsdWUsCj4gIHUzMiB2bHZfZmxpc2RzaV9yZWFkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZyk7Cj4gIHZvaWQgdmx2X2ZsaXNkc2lfd3Jp dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnLCB1MzIgdmFsKTsK PiAgCj4gKy8qIGludGVsX2RwaW9fcGh5LmMgKi8KPiArdm9pZCBjaHZfc2V0X3BoeV9zaWduYWxf bGV2ZWwoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCSAgICAgIHUzMiBkZWVt cGhfcmVnX3ZhbHVlLCB1MzIgbWFyZ2luX3JlZ192YWx1ZSwKPiArCQkJICAgICAgYm9vbCB1bmlx X3RyYW5zX3NjYWxlKTsKPiArCj4gIGludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwo+ICBpbnQgaW50ZWxfZnJlcV9vcGNvZGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKTsKPiAgCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcC5jCj4gaW5kZXggZGEwYzNkMi4uNWJhNzJiMCAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHAuYwo+IEBAIC0zMzM5LDIzICszMzM5LDEyIEBAIHN0YXRpYyB1aW50MzJfdCB2bHZf c2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJcmV0dXJuIDA7Cj4g IH0KPiAgCj4gLXN0YXRpYyBib29sIGNodl9uZWVkX3VuaXFfdHJhbnNfc2NhbGUodWludDhfdCB0 cmFpbl9zZXQpCj4gLXsKPiAtCXJldHVybiAodHJhaW5fc2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhB U0lTX01BU0spID09IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzAgJiYKPiAtCQkodHJhaW5fc2V0 ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSA9PSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X0xFVkVMXzM7Cj4gLX0KPiAtCj4gIHN0YXRpYyB1aW50MzJfdCBjaHZfc2lnbmFsX2xldmVscyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9w b3J0ICpkcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiAtCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhkcG9ydC0+YmFzZS5iYXNlLmNydGMpOwo+ IC0JdTMyIGRlZW1waF9yZWdfdmFsdWUsIG1hcmdpbl9yZWdfdmFsdWUsIHZhbDsKPiArCXN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFz ZTsKPiArCXUzMiBkZWVtcGhfcmVnX3ZhbHVlLCBtYXJnaW5fcmVnX3ZhbHVlOwo+ICsJYm9vbCB1 bmlxX3RyYW5zX3NjYWxlID0gZmFsc2U7Cj4gIAl1aW50OF90IHRyYWluX3NldCA9IGludGVsX2Rw LT50cmFpbl9zZXRbMF07Cj4gLQllbnVtIGRwaW9fY2hhbm5lbCBjaCA9IHZsdl9kcG9ydF90b19j aGFubmVsKGRwb3J0KTsKPiAtCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiAt CWludCBpOwo+ICAKPiAgCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lT X01BU0spIHsKPiAgCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKPiBAQCAtMzM3NSw3 ICszMzY0LDcgQEAgc3RhdGljIHVpbnQzMl90IGNodl9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gIAkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6 Cj4gIAkJCWRlZW1waF9yZWdfdmFsdWUgPSAxMjg7Cj4gIAkJCW1hcmdpbl9yZWdfdmFsdWUgPSAx NTQ7Cj4gLQkJCS8qIEZJWE1FIGV4dHJhIHRvIHNldCBmb3IgMTIwMCAqLwo+ICsJCQl1bmlxX3Ry YW5zX3NjYWxlID0gdHJ1ZTsKPiAgCQkJYnJlYWs7Cj4gIAkJZGVmYXVsdDoKPiAgCQkJcmV0dXJu IDA7Cj4gQEAgLTM0MjcsODggKzM0MTYsOCBAQCBzdGF0aWMgdWludDMyX3QgY2h2X3NpZ25hbF9s ZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCQlyZXR1cm4gMDsKPiAgCX0KPiAg Cj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+c2JfbG9jayk7Cj4gLQo+IC0JLyogQ2xlYXIgY2Fs YyBpbml0ICovCj4gLQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUENT MDFfRFcxMChjaCkpOwo+IC0JdmFsICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwg RFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgzKTsKPiAtCXZhbCAmPSB+KERQSU9fUENTX1RYMURF RU1QX01BU0sgfCBEUElPX1BDU19UWDJERUVNUF9NQVNLKTsKPiAtCXZhbCB8PSBEUElPX1BDU19U WDFERUVNUF85UDUgfCBEUElPX1BDU19UWDJERUVNUF85UDU7Cj4gLQl2bHZfZHBpb193cml0ZShk ZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpLCB2YWwpOwo+IC0KPiAtCWlmIChpbnRl bF9jcnRjLT5jb25maWctPmxhbmVfY291bnQgPiAyKSB7Cj4gLQkJdmFsID0gdmx2X2RwaW9fcmVh ZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAoY2gpKTsKPiAtCQl2YWwgJj0gfihEUElP X1BDU19TV0lOR19DQUxDX1RYMF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9UWDMpOwo+ IC0JCXZhbCAmPSB+KERQSU9fUENTX1RYMURFRU1QX01BU0sgfCBEUElPX1BDU19UWDJERUVNUF9N QVNLKTsKPiAtCQl2YWwgfD0gRFBJT19QQ1NfVFgxREVFTVBfOVA1IHwgRFBJT19QQ1NfVFgyREVF TVBfOVA1Owo+IC0JCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcx MChjaCksIHZhbCk7Cj4gLQl9Cj4gLQo+IC0JdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwg cGlwZSwgVkxWX1BDUzAxX0RXOShjaCkpOwo+IC0JdmFsICY9IH4oRFBJT19QQ1NfVFgxTUFSR0lO X01BU0sgfCBEUElPX1BDU19UWDJNQVJHSU5fTUFTSyk7Cj4gLQl2YWwgfD0gRFBJT19QQ1NfVFgx TUFSR0lOXzAwMCB8IERQSU9fUENTX1RYMk1BUkdJTl8wMDA7Cj4gLQl2bHZfZHBpb193cml0ZShk ZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXOShjaCksIHZhbCk7Cj4gLQo+IC0JaWYgKGludGVs X2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIpIHsKPiAtCQl2YWwgPSB2bHZfZHBpb19yZWFk KGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFc5KGNoKSk7Cj4gLQkJdmFsICY9IH4oRFBJT19Q Q1NfVFgxTUFSR0lOX01BU0sgfCBEUElPX1BDU19UWDJNQVJHSU5fTUFTSyk7Cj4gLQkJdmFsIHw9 IERQSU9fUENTX1RYMU1BUkdJTl8wMDAgfCBEUElPX1BDU19UWDJNQVJHSU5fMDAwOwo+IC0JCXZs dl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFc5KGNoKSwgdmFsKTsKPiAt CX0KPiAtCj4gLQkvKiBQcm9ncmFtIHN3aW5nIGRlZW1waCAqLwo+IC0JZm9yIChpID0gMDsgaSA8 IGludGVsX2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudDsgaSsrKSB7Cj4gLQkJdmFsID0gdmx2X2Rw aW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXNChjaCwgaSkpOwo+IC0JCXZhbCAmPSB+ RFBJT19TV0lOR19ERUVNUEg5UDVfTUFTSzsKPiAtCQl2YWwgfD0gZGVlbXBoX3JlZ192YWx1ZSA8 PCBEUElPX1NXSU5HX0RFRU1QSDlQNV9TSElGVDsKPiAtCQl2bHZfZHBpb193cml0ZShkZXZfcHJp diwgcGlwZSwgQ0hWX1RYX0RXNChjaCwgaSksIHZhbCk7Cj4gLQl9Cj4gLQo+IC0JLyogUHJvZ3Jh bSBzd2luZyBtYXJnaW4gKi8KPiAtCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9jcnRjLT5jb25maWct PmxhbmVfY291bnQ7IGkrKykgewo+IC0JCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBp cGUsIENIVl9UWF9EVzIoY2gsIGkpKTsKPiAtCj4gLQkJdmFsICY9IH5EUElPX1NXSU5HX01BUkdJ TjAwMF9NQVNLOwo+IC0JCXZhbCB8PSBtYXJnaW5fcmVnX3ZhbHVlIDw8IERQSU9fU1dJTkdfTUFS R0lOMDAwX1NISUZUOwo+IC0KPiAtCQkvKgo+IC0JCSAqIFN1cHBvc2VkbHkgdGhpcyB2YWx1ZSBz aG91bGRuJ3QgbWF0dGVyIHdoZW4gdW5pcXVlIHRyYW5zaXRpb24KPiAtCQkgKiBzY2FsZSBpcyBk aXNhYmxlZCwgYnV0IGluIGZhY3QgaXQgZG9lcyBtYXR0ZXIuIExldCdzIGp1c3QKPiAtCQkgKiBh bHdheXMgcHJvZ3JhbSB0aGUgc2FtZSB2YWx1ZSBhbmQgaG9wZSBpdCdzIE9LLgo+IC0JCSAqLwo+ IC0JCXZhbCAmPSB+KDB4ZmYgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUKTsKPiAtCQl2 YWwgfD0gMHg5YSA8PCBEUElPX1VOSVFfVFJBTlNfU0NBTEVfU0hJRlQ7Cj4gLQo+IC0JCXZsdl9k cGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFcyKGNoLCBpKSwgdmFsKTsKPiAtCX0K PiAtCj4gLQkvKgo+IC0JICogVGhlIGRvY3VtZW50IHNhaWQgaXQgbmVlZHMgdG8gc2V0IGJpdCAy NyBmb3IgY2gwIGFuZCBiaXQgMjYKPiAtCSAqIGZvciBjaDEuIE1pZ2h0IGJlIGEgdHlwbyBpbiB0 aGUgZG9jLgo+IC0JICogRm9yIG5vdywgZm9yIHRoaXMgdW5pcXVlIHRyYW5zaXRpb24gc2NhbGUg c2VsZWN0aW9uLCBzZXQgYml0Cj4gLQkgKiAyNyBmb3IgY2gwIGFuZCBjaDEuCj4gLQkgKi8KPiAt CWZvciAoaSA9IDA7IGkgPCBpbnRlbF9jcnRjLT5jb25maWctPmxhbmVfY291bnQ7IGkrKykgewo+ IC0JCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzMoY2gsIGkp KTsKPiAtCQlpZiAoY2h2X25lZWRfdW5pcV90cmFuc19zY2FsZSh0cmFpbl9zZXQpKQo+IC0JCQl2 YWwgfD0gRFBJT19UWF9VTklRX1RSQU5TX1NDQUxFX0VOOwo+IC0JCWVsc2UKPiAtCQkJdmFsICY9 IH5EUElPX1RYX1VOSVFfVFJBTlNfU0NBTEVfRU47Cj4gLQkJdmx2X2RwaW9fd3JpdGUoZGV2X3By aXYsIHBpcGUsIENIVl9UWF9EVzMoY2gsIGkpLCB2YWwpOwo+IC0JfQo+IC0KPiAtCS8qIFN0YXJ0 IHN3aW5nIGNhbGN1bGF0aW9uICovCj4gLQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBw aXBlLCBWTFZfUENTMDFfRFcxMChjaCkpOwo+IC0JdmFsIHw9IERQSU9fUENTX1NXSU5HX0NBTENf VFgwX1RYMiB8IERQSU9fUENTX1NXSU5HX0NBTENfVFgxX1RYMzsKPiAtCXZsdl9kcGlvX3dyaXRl KGRldl9wcml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCksIHZhbCk7Cj4gLQo+IC0JaWYgKGlu dGVsX2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIpIHsKPiAtCQl2YWwgPSB2bHZfZHBpb19y ZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCkpOwo+IC0JCXZhbCB8PSBEUElP X1BDU19TV0lOR19DQUxDX1RYMF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9UWDM7Cj4g LQkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MyM19EVzEwKGNoKSwgdmFs KTsKPiAtCX0KPiAtCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKPiArCWNo dl9zZXRfcGh5X3NpZ25hbF9sZXZlbChlbmNvZGVyLCBkZWVtcGhfcmVnX3ZhbHVlLAo+ICsJCQkJ IG1hcmdpbl9yZWdfdmFsdWUsIHVuaXFfdHJhbnNfc2NhbGUpOwo+ICAKPiAgCXJldHVybiAwOwo+ ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwaW9fcGh5LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGlvX3BoeS5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi5jYmUxNzAzZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGlvX3BoeS5jCj4gQEAgLTAsMCArMSwxMjIgQEAK PiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTQtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKPiArICogREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJpbnRlbF9kcnYu aCIKPiArCj4gK3ZvaWQgY2h2X3NldF9waHlfc2lnbmFsX2xldmVsKHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAo+ICsJCQkgICAgICB1MzIgZGVlbXBoX3JlZ192YWx1ZSwgdTMyIG1hcmdp bl9yZWdfdmFsdWUsCj4gKwkJCSAgICAgIGJvb2wgdW5pcV90cmFuc19zY2FsZSkKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNl LmRldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkcG9ydCA9IGVuY190b19kaWdf cG9ydCgmZW5jb2Rlci0+YmFzZSk7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoZHBvcnQtPmJhc2UuYmFzZS5jcnRjKTsKCkNvdWxkIGRvIHNvbWUgcy9p bnRlbF9jcnRjL2NydGMvIHdoaWxlIG1vdmluZy4KCj4gKwllbnVtIGRwaW9fY2hhbm5lbCBjaCA9 IHZsdl9kcG9ydF90b19jaGFubmVsKGRwb3J0KTsKPiArCWVudW0gcGlwZSBwaXBlID0gaW50ZWxf Y3J0Yy0+cGlwZTsKPiArCXUzMiB2YWw7Cj4gKwlpbnQgaTsKPiArCj4gKwltdXRleF9sb2NrKCZk ZXZfcHJpdi0+c2JfbG9jayk7Cj4gKwo+ICsJLyogQ2xlYXIgY2FsYyBpbml0ICovCj4gKwl2YWwg PSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCkpOwo+ICsJ dmFsICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FM Q19UWDFfVFgzKTsKPiArCXZhbCAmPSB+KERQSU9fUENTX1RYMURFRU1QX01BU0sgfCBEUElPX1BD U19UWDJERUVNUF9NQVNLKTsKPiArCXZhbCB8PSBEUElPX1BDU19UWDFERUVNUF85UDUgfCBEUElP X1BDU19UWDJERUVNUF85UDU7Cj4gKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxW X1BDUzAxX0RXMTAoY2gpLCB2YWwpOwo+ICsKPiArCWlmIChpbnRlbF9jcnRjLT5jb25maWctPmxh bmVfY291bnQgPiAyKSB7Cj4gKwkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwg VkxWX1BDUzIzX0RXMTAoY2gpKTsKPiArCQl2YWwgJj0gfihEUElPX1BDU19TV0lOR19DQUxDX1RY MF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9UWDMpOwo+ICsJCXZhbCAmPSB+KERQSU9f UENTX1RYMURFRU1QX01BU0sgfCBEUElPX1BDU19UWDJERUVNUF9NQVNLKTsKPiArCQl2YWwgfD0g RFBJT19QQ1NfVFgxREVFTVBfOVA1IHwgRFBJT19QQ1NfVFgyREVFTVBfOVA1Owo+ICsJCXZsdl9k cGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCksIHZhbCk7Cj4gKwl9 Cj4gKwo+ICsJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RX OShjaCkpOwo+ICsJdmFsICY9IH4oRFBJT19QQ1NfVFgxTUFSR0lOX01BU0sgfCBEUElPX1BDU19U WDJNQVJHSU5fTUFTSyk7Cj4gKwl2YWwgfD0gRFBJT19QQ1NfVFgxTUFSR0lOXzAwMCB8IERQSU9f UENTX1RYMk1BUkdJTl8wMDA7Cj4gKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxW X1BDUzAxX0RXOShjaCksIHZhbCk7Cj4gKwo+ICsJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGFu ZV9jb3VudCA+IDIpIHsKPiArCQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBW TFZfUENTMjNfRFc5KGNoKSk7Cj4gKwkJdmFsICY9IH4oRFBJT19QQ1NfVFgxTUFSR0lOX01BU0sg fCBEUElPX1BDU19UWDJNQVJHSU5fTUFTSyk7Cj4gKwkJdmFsIHw9IERQSU9fUENTX1RYMU1BUkdJ Tl8wMDAgfCBEUElPX1BDU19UWDJNQVJHSU5fMDAwOwo+ICsJCXZsdl9kcGlvX3dyaXRlKGRldl9w cml2LCBwaXBlLCBWTFZfUENTMjNfRFc5KGNoKSwgdmFsKTsKPiArCX0KPiArCj4gKwkvKiBQcm9n cmFtIHN3aW5nIGRlZW1waCAqLwo+ICsJZm9yIChpID0gMDsgaSA8IGludGVsX2NydGMtPmNvbmZp Zy0+bGFuZV9jb3VudDsgaSsrKSB7Cj4gKwkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwg cGlwZSwgQ0hWX1RYX0RXNChjaCwgaSkpOwo+ICsJCXZhbCAmPSB+RFBJT19TV0lOR19ERUVNUEg5 UDVfTUFTSzsKPiArCQl2YWwgfD0gZGVlbXBoX3JlZ192YWx1ZSA8PCBEUElPX1NXSU5HX0RFRU1Q SDlQNV9TSElGVDsKPiArCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RX NChjaCwgaSksIHZhbCk7Cj4gKwl9Cj4gKwo+ICsJLyogUHJvZ3JhbSBzd2luZyBtYXJnaW4gKi8K PiArCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9jcnRjLT5jb25maWctPmxhbmVfY291bnQ7IGkrKykg ewo+ICsJCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzIoY2gs IGkpKTsKPiArCj4gKwkJdmFsICY9IH5EUElPX1NXSU5HX01BUkdJTjAwMF9NQVNLOwo+ICsJCXZh bCB8PSBtYXJnaW5fcmVnX3ZhbHVlIDw8IERQSU9fU1dJTkdfTUFSR0lOMDAwX1NISUZUOwo+ICsK PiArCQkvKgo+ICsJCSAqIFN1cHBvc2VkbHkgdGhpcyB2YWx1ZSBzaG91bGRuJ3QgbWF0dGVyIHdo ZW4gdW5pcXVlIHRyYW5zaXRpb24KPiArCQkgKiBzY2FsZSBpcyBkaXNhYmxlZCwgYnV0IGluIGZh Y3QgaXQgZG9lcyBtYXR0ZXIuIExldCdzIGp1c3QKPiArCQkgKiBhbHdheXMgcHJvZ3JhbSB0aGUg c2FtZSB2YWx1ZSBhbmQgaG9wZSBpdCdzIE9LLgo+ICsJCSAqLwo+ICsJCXZhbCAmPSB+KDB4ZmYg PDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUKTsKPiArCQl2YWwgfD0gMHg5YSA8PCBEUElP X1VOSVFfVFJBTlNfU0NBTEVfU0hJRlQ7Cj4gKwo+ICsJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2 LCBwaXBlLCBDSFZfVFhfRFcyKGNoLCBpKSwgdmFsKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICog VGhlIGRvY3VtZW50IHNhaWQgaXQgbmVlZHMgdG8gc2V0IGJpdCAyNyBmb3IgY2gwIGFuZCBiaXQg MjYKPiArCSAqIGZvciBjaDEuIE1pZ2h0IGJlIGEgdHlwbyBpbiB0aGUgZG9jLgo+ICsJICogRm9y IG5vdywgZm9yIHRoaXMgdW5pcXVlIHRyYW5zaXRpb24gc2NhbGUgc2VsZWN0aW9uLCBzZXQgYml0 Cj4gKwkgKiAyNyBmb3IgY2gwIGFuZCBjaDEuCj4gKwkgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBp bnRlbF9jcnRjLT5jb25maWctPmxhbmVfY291bnQ7IGkrKykgewo+ICsJCXZhbCA9IHZsdl9kcGlv X3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzMoY2gsIGkpKTsKPiArCQlpZiAodW5pcV90 cmFuc19zY2FsZSkKPiArCQkJdmFsIHw9IERQSU9fVFhfVU5JUV9UUkFOU19TQ0FMRV9FTjsKPiAr CQllbHNlCj4gKwkJCXZhbCAmPSB+RFBJT19UWF9VTklRX1RSQU5TX1NDQUxFX0VOOwo+ICsJCXZs dl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFczKGNoLCBpKSwgdmFsKTsKPiAr CX0KPiArCj4gKwkvKiBTdGFydCBzd2luZyBjYWxjdWxhdGlvbiAqLwo+ICsJdmFsID0gdmx2X2Rw aW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpKTsKPiArCXZhbCB8PSBE UElPX1BDU19TV0lOR19DQUxDX1RYMF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9UWDM7 Cj4gKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpLCB2 YWwpOwo+ICsKPiArCWlmIChpbnRlbF9jcnRjLT5jb25maWctPmxhbmVfY291bnQgPiAyKSB7Cj4g KwkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAoY2gp KTsKPiArCQl2YWwgfD0gRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJ TkdfQ0FMQ19UWDFfVFgzOwo+ICsJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZf UENTMjNfRFcxMChjaCksIHZhbCk7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+c2JfbG9jayk7Cj4gKwo+ICt9Cj4gKwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKPiBp bmRleCAyZGM2ZTAwLi4xMDdhODBhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2hkbWkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwo+ IEBAIC0xOTExLDc4ICsxOTExLDEwIEBAIHN0YXRpYyB2b2lkIGNodl9oZG1pX3ByZV9lbmFibGUo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4gIAkvKiBEZWFzc2VydCBkYXRhIGxhbmUg cmVzZXQgKi8KPiAgCWNodl9kYXRhX2xhbmVfc29mdF9yZXNldChlbmNvZGVyLCBmYWxzZSk7Cj4g IAo+IC0JLyogQ2xlYXIgY2FsYyBpbml0ICovCj4gLQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9w cml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCkpOwo+IC0JdmFsICY9IH4oRFBJT19QQ1NfU1dJ TkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgzKTsKPiAtCXZhbCAm PSB+KERQSU9fUENTX1RYMURFRU1QX01BU0sgfCBEUElPX1BDU19UWDJERUVNUF9NQVNLKTsKPiAt CXZhbCB8PSBEUElPX1BDU19UWDFERUVNUF85UDUgfCBEUElPX1BDU19UWDJERUVNUF85UDU7Cj4g LQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpLCB2YWwp Owo+IC0KPiAtCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MyM19E VzEwKGNoKSk7Cj4gLQl2YWwgJj0gfihEUElPX1BDU19TV0lOR19DQUxDX1RYMF9UWDIgfCBEUElP X1BDU19TV0lOR19DQUxDX1RYMV9UWDMpOwo+IC0JdmFsICY9IH4oRFBJT19QQ1NfVFgxREVFTVBf TUFTSyB8IERQSU9fUENTX1RYMkRFRU1QX01BU0spOwo+IC0JdmFsIHw9IERQSU9fUENTX1RYMURF RU1QXzlQNSB8IERQSU9fUENTX1RYMkRFRU1QXzlQNTsKPiAtCXZsdl9kcGlvX3dyaXRlKGRldl9w cml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCksIHZhbCk7Cj4gLQo+IC0JdmFsID0gdmx2X2Rw aW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXOShjaCkpOwo+IC0JdmFsICY9IH4o RFBJT19QQ1NfVFgxTUFSR0lOX01BU0sgfCBEUElPX1BDU19UWDJNQVJHSU5fTUFTSyk7Cj4gLQl2 YWwgfD0gRFBJT19QQ1NfVFgxTUFSR0lOXzAwMCB8IERQSU9fUENTX1RYMk1BUkdJTl8wMDA7Cj4g LQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXOShjaCksIHZhbCk7 Cj4gLQo+IC0JdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RX OShjaCkpOwo+IC0JdmFsICY9IH4oRFBJT19QQ1NfVFgxTUFSR0lOX01BU0sgfCBEUElPX1BDU19U WDJNQVJHSU5fTUFTSyk7Cj4gLQl2YWwgfD0gRFBJT19QQ1NfVFgxTUFSR0lOXzAwMCB8IERQSU9f UENTX1RYMk1BUkdJTl8wMDA7Cj4gLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxW X1BDUzIzX0RXOShjaCksIHZhbCk7Cj4gLQo+IC0JLyogRklYTUU6IFByb2dyYW0gdGhlIHN1cHBv cnQgeHh4IFYtZEIgKi8KPiAtCS8qIFVzZSA4MDBtVi0wZEIgKi8KCkknZCBrZWVwIHRoaXMgY29t bWVudCBzbyB0aGF0IHBlb3BsZSBkb24ndCBoYXZlIHRvIHdvbmRlciB3aGVyZSB0aGUKMTI4IGFu ZCAxMDIgbWFnaWMgbnVtYmVycyBjYW1lIGZyb20uCgo+IC0JZm9yIChpID0gMDsgaSA8IDQ7IGkr Kykgewo+IC0JCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzQo Y2gsIGkpKTsKPiAtCQl2YWwgJj0gfkRQSU9fU1dJTkdfREVFTVBIOVA1X01BU0s7Cj4gLQkJdmFs IHw9IDEyOCA8PCBEUElPX1NXSU5HX0RFRU1QSDlQNV9TSElGVDsKPiAtCQl2bHZfZHBpb193cml0 ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXNChjaCwgaSksIHZhbCk7Cj4gLQl9Cj4gLQo+IC0J Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+IC0JCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3By aXYsIHBpcGUsIENIVl9UWF9EVzIoY2gsIGkpKTsKPiAtCj4gLQkJdmFsICY9IH5EUElPX1NXSU5H X01BUkdJTjAwMF9NQVNLOwo+IC0JCXZhbCB8PSAxMDIgPDwgRFBJT19TV0lOR19NQVJHSU4wMDBf U0hJRlQ7Cj4gLQo+IC0JCS8qCj4gLQkJICogU3VwcG9zZWRseSB0aGlzIHZhbHVlIHNob3VsZG4n dCBtYXR0ZXIgd2hlbiB1bmlxdWUgdHJhbnNpdGlvbgo+IC0JCSAqIHNjYWxlIGlzIGRpc2FibGVk LCBidXQgaW4gZmFjdCBpdCBkb2VzIG1hdHRlci4gTGV0J3MganVzdAo+IC0JCSAqIGFsd2F5cyBw cm9ncmFtIHRoZSBzYW1lIHZhbHVlIGFuZCBob3BlIGl0J3MgT0suCj4gLQkJICovCj4gLQkJdmFs ICY9IH4oMHhmZiA8PCBEUElPX1VOSVFfVFJBTlNfU0NBTEVfU0hJRlQpOwo+IC0JCXZhbCB8PSAw eDlhIDw8IERQSU9fVU5JUV9UUkFOU19TQ0FMRV9TSElGVDsKPiAtCj4gLQkJdmx2X2RwaW9fd3Jp dGUoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzIoY2gsIGkpLCB2YWwpOwo+IC0JfQo+IC0KPiAt CS8qCj4gLQkgKiBUaGUgZG9jdW1lbnQgc2FpZCBpdCBuZWVkcyB0byBzZXQgYml0IDI3IGZvciBj aDAgYW5kIGJpdCAyNgo+IC0JICogZm9yIGNoMS4gTWlnaHQgYmUgYSB0eXBvIGluIHRoZSBkb2Mu Cj4gLQkgKiBGb3Igbm93LCBmb3IgdGhpcyB1bmlxdWUgdHJhbnNpdGlvbiBzY2FsZSBzZWxlY3Rp b24sIHNldCBiaXQKPiAtCSAqIDI3IGZvciBjaDAgYW5kIGNoMS4KPiAtCSAqLwo+IC0JZm9yIChp ID0gMDsgaSA8IDQ7IGkrKykgewo+IC0JCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBp cGUsIENIVl9UWF9EVzMoY2gsIGkpKTsKPiAtCQl2YWwgJj0gfkRQSU9fVFhfVU5JUV9UUkFOU19T Q0FMRV9FTjsKPiAtCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXMyhj aCwgaSksIHZhbCk7Cj4gLQl9Cj4gLQo+IC0JLyogU3RhcnQgc3dpbmcgY2FsY3VsYXRpb24gKi8K PiAtCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzEwKGNo KSk7Cj4gLQl2YWwgfD0gRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJ TkdfQ0FMQ19UWDFfVFgzOwo+IC0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9Q Q1MwMV9EVzEwKGNoKSwgdmFsKTsKPiAtCj4gLQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2 LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCkpOwo+IC0JdmFsIHw9IERQSU9fUENTX1NXSU5HX0NB TENfVFgwX1RYMiB8IERQSU9fUENTX1NXSU5HX0NBTENfVFgxX1RYMzsKPiAtCXZsdl9kcGlvX3dy aXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCksIHZhbCk7Cj4gLQo+ICAJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c2JfbG9jayk7Cj4gIAo+ICsJY2h2X3NldF9waHlfc2lnbmFs X2xldmVsKGVuY29kZXIsIDEyOCwgMTAyLCBmYWxzZSk7Cj4gKwo+ICAJaW50ZWxfaGRtaS0+c2V0 X2luZm9mcmFtZXMoJmVuY29kZXItPmJhc2UsCj4gIAkJCQkgICBpbnRlbF9jcnRjLT5jb25maWct Pmhhc19oZG1pX3NpbmssCj4gIAkJCQkgICBhZGp1c3RlZF9tb2RlKTsKPiAtLSAKPiAyLjQuMTEK PiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IElu dGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK Ci0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=