From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4177489CA2 for ; Tue, 16 Oct 2018 19:09:04 +0000 (UTC) Date: Tue, 16 Oct 2018 12:11:26 -0700 From: Manasi Navare Message-ID: <20181016191126.GB8224@intel.com> References: <20181005233437.31286-1-manasi.d.navare@intel.com> <20181011212152.s7n723uzto3zzgub@InViCtUs> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20181011212152.s7n723uzto3zzgub@InViCtUs> Subject: Re: [igt-dev] [PATCH i-g-t] test/kms_dp_dsc: Basic KMS test to validate VESA DSC on DP/eDP List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Radhakrishna Sripada Cc: igt-dev@lists.freedesktop.org, Anusha Srivatsa List-ID: T24gVGh1LCBPY3QgMTEsIDIwMTggYXQgMDI6MjE6NTJQTSAtMDcwMCwgUmFkaGFrcmlzaG5hIFNy aXBhZGEgd3JvdGU6Cj4gT24gRnJpLCBPY3QgMDUsIDIwMTggYXQgMDQ6MzQ6MzdQTSAtMDcwMCwg TWFuYXNpIE5hdmFyZSB3cm90ZToKPiA+IFRoaXMgcGF0Y2ggYWRkcyBhIGJhc2ljIGttcyB0ZXN0 IHRvIHZhbGlkYXRlIHRoZSBkaXNwbGF5IHN0cmVhbQo+ID4gY29tcHJlc3Npb24gZnVuY3Rpb25h bGl0eSBpZiBzdXBwb3J0ZWQgb24gRFAvZURQIGNvbm5lY3Rvci4KPiA+IEN1cnJlbnRseSB0aGlz IGhhcyBvbmx5IG9uZSBzdWJ0ZXN0IHRvIGZvcmNlIHRoZSBEU0Mgb24gYWxsCj4gPiB0aGUgY29u bmVjdG9ycyB0aGF0IHN1cHBvcnQgaXQgd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMuCj4gPiBUaGlz IHdpbGwgYmUgZXhwYW5kZWQgdG8gYWRkIG1vcmUgc3VidGVzdHMgdG8gdHdlYWsgRFNDIHBhcmFt ZXRlcnMuCj4gPiAKPiA+IENjOiBBbnVzaGEgU3JpdmF0c2EgPGFudXNoYS5zcml2YXRzYUBpbnRl bC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVA aW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4g PiAgdGVzdHMva21zX2RwX2RzYy5jICAgICB8IDM3MiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMzczIGluc2VydGlvbnMoKykK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2RwX2RzYy5jCj4gPiAKPiA+IGRpZmYg LS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ ID4gaW5kZXggYzg0OTMzZjEuLmM4MDdhYWQzIDEwMDY0NAo+ID4gLS0tIGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcwo+ID4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gQEAgLTIwNyw2 ICsyMDcsNyBAQCBURVNUU19wcm9ncyA9IFwKPiA+ICAJa21zX3R2X2xvYWRfZGV0ZWN0IFwKPiA+ ICAJa21zX3VuaXZlcnNhbF9wbGFuZSBcCj4gPiAgCWttc192YmxhbmsgXAo+ID4gKwlrbXNfZHBf ZHNjIFwKPiA+ICAJbWV0YV90ZXN0IFwKPiA+ICAJcGVyZiBcCj4gPiAgCXBlcmZfcG11IFwKPiA+ IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfZHBfZHNjLmMgYi90ZXN0cy9rbXNfZHBfZHNjLmMKPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMC4uZDBmZDJhZTMKPiA+IC0t LSAvZGV2L251bGwKPiA+ICsrKyBiL3Rlc3RzL2ttc19kcF9kc2MuYwo+ID4gQEAgLTAsMCArMSwz NzIgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9u Cj4gPiArICoKPiA+ICsgKiBEaXNwbGF5cG9ydCBEaXNwbGF5IFN0cmVhbSBDb21wcmVzc2lvbiB0 ZXN0Cj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqIE1hbmFzaSBOYXZhcmUgPG1hbmFz aS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiArICoKPiA+ICsgKiBFbGVtZW50cyBvZiB0aGUgbW9k ZXNldCBjb2RlIGFkYXB0ZWQgZnJvbSBEYXZpZCBIZXJybWFubidzCj4gPiArICogRFJNIG1vZGVz ZXQgZXhhbXBsZQo+ID4gKyAqCj4gPiArICovCj4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4gKyNp bmNsdWRlIDxlcnJuby5oPgo+ID4gKyNpbmNsdWRlIDxnZXRvcHQuaD4KPiA+ICsjaW5jbHVkZSA8 bWF0aC5oPgo+ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiA+ICsjaW5jbHVkZSA8c3RkYm9vbC5o Pgo+ID4gKyNpbmNsdWRlIDxzdHJpbmdzLmg+Cj4gPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ID4g KyNpbmNsdWRlIDxzdGRsaWIuaD4KPiA+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gPiArI2luY2x1 ZGUgPHRpbWUuaD4KPiA+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiA+ICsjaW5jbHVkZSA8dGVybWlv cy5oPgo+ID4gKwo+ID4gK2ludCBkcm1fZmQ7Cj4gPiArZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwo+ ID4gK3VpbnQ2NF90IHRpbGluZyA9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gPiArCj4g PiArc3RydWN0IGNvbm5lY3RvciB7Cj4gPiArCXVpbnQzMl90IGlkOwo+ID4gKwlpbnQgbW9kZV92 YWxpZDsKPiA+ICsJZHJtTW9kZU1vZGVJbmZvIG1vZGU7Cj4gPiArCWRybU1vZGVDb25uZWN0b3Ig KmNvbm5lY3RvcjsKPiA+ICsJZHJtTW9kZUVuY29kZXIgKmVuY29kZXI7Cj4gPiArCWludCBjcnRj LCBwaXBlOwo+ID4gK307Cj4gQ2FuIGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyBiZSB1c2VkIHRv IHNpbXBsaWZ5IHRoaXMgc3RydWN0dXJlPwoKVXN1YWxseSB3aGF0IEkgaGF2ZSBzZWVuIGlzIHRo YXQga21zX2Nvbm5lY3Rvcl9jb25maWcgd291bGQgYmUgdXNlZCB0byBvYnRhaW4KdGhlIGNvbmZp ZyB0aHJvdWdoIHRoZSBrbXMgaGVscGVycyBhbmQgdGhlbiB0aGlzIGxvY2FsIHN0cnVjdCB2YXJp YWJsZXMgYXJlIGFzc2lnbmVkCnRoaW5ncyBmcm9tIGttc19jb25uZWN0b3JfY29uZmlnLgpCdXQg aSB3aWxsIHRha2UgYSBsb29rIGF0IGlmIEkgY2FuIHNpbXBsaWZ5IGFuZCB1c2Uga21zX2Nvbm5l Y3Rvcl9jb25maWcgZGlyZWN0bHkKCj4gPiArCj4gPiArc3RydWN0IGRzY19jb25maWcgewo+ID4g KwljaGFyIHRlc3RfbmFtZVsxMjhdOwo+ID4gKwlpbnQgbW9kZV93aWR0aDsKPiA+ICsJaW50IG1v ZGVfaGVpZ2h0Owo+ID4gKwlpbnQgYnBwOwo+ID4gKwlpbnQgZGVwdGg7Cj4gPiArCWJvb2wgZHNj X3N1cHBvcnRlZDsKPiA+ICsJYm9vbCBkc2NfZW5hYmxlOwo+ID4gK307Cj4gPiArCj4gPiArc3Rh dGljIEZJTEUgKmZvcGVuYXQoaW50IGRpciwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq bW9kZSkKPiA+ICt7Cj4gPiArCWludCBmZCA9IG9wZW5hdChkaXIsIG5hbWUsIE9fUkRXUik7Cj4g PiArCXJldHVybiBmZG9wZW4oZmQsIG1vZGUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9v bCBnZXRfZHBfZHNjX3N1cHBvcnQoY2hhciAqdGVzdF9jb25uZWN0b3JfbmFtZSkKPiA+ICt7Cj4g PiArCWludCBkaXIgPSBpZ3RfZGVidWdmc19kaXIoZHJtX2ZkKTsKPiA+ICsJRklMRSAqZHNjX3N1 cHBvcnRfZnAgPSBOVUxMOwo+ID4gKwljaGFyICpsaW5lID0gTlVMTDsKPiA+ICsJc2l6ZV90IGxp bmVfc2l6ZSA9IDA7Cj4gPiArCWNoYXIgYnVmWzEyOF0gPSB7MH0sIHN1cHBvcnRlZF9zdHJbNV0s IGVuYWJsZWRfc3RyWzVdOwo+ID4gKwlib29sIHN1cHBvcnRlZCA9IGZhbHNlOwo+ID4gKwo+ID4g KwlzdHJjcHkoYnVmLCB0ZXN0X2Nvbm5lY3Rvcl9uYW1lKTsKPiA+ICsJc3RyY2F0KGJ1ZiwgIi9p OTE1X2RzY19zdXBwb3J0Iik7Cj4gPiArCWRzY19zdXBwb3J0X2ZwID0gZm9wZW5hdChkaXIsIGJ1 ZiwgInIiKTsKPiA+ICsJaWd0X3JlcXVpcmUoZHNjX3N1cHBvcnRfZnApOwo+ID4gKwo+ID4gKwl3 aGlsZSAoZ2V0bGluZSgmbGluZSwgJmxpbmVfc2l6ZSwgZHNjX3N1cHBvcnRfZnApID4gMCkgewo+ ID4gKwkJY2hhciAqc3VwcG9ydCwgKmVuYWJsZWQ7Cj4gPiArCj4gPiArCQllbmFibGVkID0gc3Ry c3RyKGxpbmUsICJFbmFibGVkOiAiKTsKPiA+ICsJCWlndF9hc3NlcnRfZXEoc3NjYW5mKGVuYWJs ZWQsICJFbmFibGVkOiAlcyIsIGVuYWJsZWRfc3RyKSwgMSk7Cj4gPiArCQlpZiAoc3RyY21wKGVu YWJsZWRfc3RyLCAieWVzIikgPT0gMCkgewo+ID4gKwkJCWlndF9pbmZvKCJEU0MgaXMgZW5hYmxl ZCBvbiAlc1xuIiwgdGVzdF9jb25uZWN0b3JfbmFtZSk7Cj4gPiArCQkJc3VwcG9ydGVkID0gdHJ1 ZTsKPiA+ICsJCQlicmVhazsKPiA+ICsJCX0gZWxzZSB7Cj4gPiArCQkJZ2V0bGluZSgmbGluZSwg JmxpbmVfc2l6ZSwgZHNjX3N1cHBvcnRfZnApOwo+ID4gKwkJCXN1cHBvcnQgPSBzdHJzdHIobGlu ZSwgIlN1cHBvcnRlZDogIik7Cj4gPiArCQlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdXBwb3J0LCAi U3VwcG9ydGVkOiAlcyIsIHN1cHBvcnRlZF9zdHIpLCAxKTsKPiA+ICsJCWlmIChzdHJjbXAoc3Vw cG9ydGVkX3N0ciwgInllcyIpID09IDApCj4gPiArCQkJc3VwcG9ydGVkID0gdHJ1ZTsKPiA+ICsJ CWVsc2UgaWYgKHN0cmNtcChzdXBwb3J0ZWRfc3RyLCAibm8iKSA9PSAwKQo+ID4gKwkJCXN1cHBv cnRlZCA9IGZhbHNlOwo+ID4gKwkJZWxzZQo+ID4gKwkJCWlndF9mYWlsX29uX2YodHJ1ZSwgIlVu a25vd24gRFNDIHN1cHBvcnRlZCBzdGF0dXMgJyVzJ1xuIiwKPiA+ICsJCQkJICAgICAgc3VwcG9y dGVkX3N0cik7Cj4gPiArCQlicmVhazsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+IFRoaXMgZnVu Y3Rpb24gY291bGQgbWFrZSB1c2Ugb2YgaWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQgdGhlIHdheSBr bXNfcHNyIGRvZXMgdG8gbWFrZSBpdCBjbGVhbmVyLgoKSSBpd2xsIGxvb2sgYXQgdGhlIGlndF9k ZWJ1Z2ZzX3JlYWQoKSBhbmQgc2VlIGlmIHRoYXQgY2FuIGJlIHVzZWQuCgo+ID4gKwlmcmVlKGxp bmUpOwo+ID4gKwlmY2xvc2UoZHNjX3N1cHBvcnRfZnApOwo+ID4gKwo+ID4gKwlyZXR1cm4gc3Vw cG9ydGVkOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBzZXRfZHBfZHNjX2VuYWJsZShi b29sIGVuYWJsZSwgY2hhciAqdGVzdF9jb25uZWN0b3JfbmFtZSkKPiA+ICt7Cj4gPiArCWludCBk aXIgPSBpZ3RfZGVidWdmc19kaXIoZHJtX2ZkKTsKPiA+ICsJRklMRSAqZHNjX2VuYWJsZV9mcCA9 IE5VTEw7Cj4gPiArCWNoYXIgYnVmWzEyOF0gPSB7MH07Cj4gPiArCj4gPiArCXN0cmNweShidWYs IHRlc3RfY29ubmVjdG9yX25hbWUpOwo+ID4gKwlzdHJjYXQoYnVmLCAiL2k5MTVfZHNjX3N1cHBv cnQiKTsKPiA+ICsJZHNjX2VuYWJsZV9mcCA9IGZvcGVuYXQoZGlyLCBidWYsICJ3KyIpOwo+ID4g KwlpZ3RfcmVxdWlyZShkc2NfZW5hYmxlX2ZwKTsKPiA+ICsJcmV3aW5kKGRzY19lbmFibGVfZnAp Owo+ID4gKwlpZ3RfaW5mbygiU2V0dGluZyBEU0NfRU5BQkxFIHRvICVzIGZvciAlc1xuIiwgKGVu YWJsZSkgPyAidHJ1ZSIgOiAiZmFsc2UiLCB0ZXN0X2Nvbm5lY3Rvcl9uYW1lKTsKPiBDYW4gd2Ug dXNlIGlndF9zeXNmc193cml0ZSBoZXJlPwoKQnV0IHRoaXMgaXMgbm90IGEgc3lzZnMgbm9kZSwg anVzdCBhIGRlYnVnZnMuIFdpbGwgaGF2ZSB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGlndCBkZWJ1 Z2ZzIHdyYXBwZXIKCj4gPiArCWZwcmludGYoZHNjX2VuYWJsZV9mcCwgIiVkIiwgZW5hYmxlKTsK PiA+ICsJZmZsdXNoKGRzY19lbmFibGVfZnApOwo+ID4gKwlmY2xvc2UoZHNjX2VuYWJsZV9mcCk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGR1bXBfY29ubmVjdG9yc19mZChpbnQgZHJt ZmQpCj4gPiArewo+ID4gKwlpbnQgaSwgajsKPiA+ICsKPiA+ICsJZHJtTW9kZVJlcyAqbW9kZV9y ZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybWZkKTsKPiA+ICsKPiA+ICsgICAgICAg IGlmICghbW9kZV9yZXNvdXJjZXMpIHsKPiA+ICsJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3Vy Y2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQlyZXR1cm47Cj4gPiAr CX0KPiA+ICsKPiA+ICsJaWd0X2luZm8oIkNvbm5lY3RvcnM6XG4iKTsKPiA+ICsJaWd0X2luZm8o ImlkXHRlbmNvZGVyXHRzdGF0dXNcdFx0dHlwZVx0c2l6ZSAobW0pXHRtb2Rlc1xuIik7Cj4gPiAr CWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7 Cj4gPiArCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiArCj4gPiArCQljb25uZWN0 b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yQ3VycmVudChkcm1mZCwKPiA+ICsJCQkJCQkgICAgICAg bW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOwo+ID4gKwkJaWYgKCFjb25uZWN0b3IpIHsK PiA+ICsJCQlpZ3Rfd2FybigiY291bGQgbm90IGdldCBjb25uZWN0b3IgJWk6ICVzXG4iLAo+ID4g KwkJCQkgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0cmVycm9yKGVycm5vKSk7Cj4g PiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZ3RfaW5mbygiJWRcdCVkXHQl c1x0JXNcdCVkeCVkXHRcdCVkXG4iLAo+ID4gKwkJCSBjb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwg Y29ubmVjdG9yLT5lbmNvZGVyX2lkLAo+ID4gKwkJCSBrbXN0ZXN0X2Nvbm5lY3Rvcl9zdGF0dXNf c3RyKGNvbm5lY3Rvci0+Y29ubmVjdGlvbiksCj4gPiArCQkJIGttc3Rlc3RfY29ubmVjdG9yX3R5 cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLAo+ID4gKwkJCSBjb25uZWN0b3ItPm1t V2lkdGgsIGNvbm5lY3Rvci0+bW1IZWlnaHQsCj4gPiArCQkJIGNvbm5lY3Rvci0+Y291bnRfbW9k ZXMpOwo+ID4gKwo+ID4gKwkJaWYgKCFjb25uZWN0b3ItPmNvdW50X21vZGVzKQo+ID4gKwkJCWNv bnRpbnVlOwo+ID4gKwo+ID4gKwkJaWd0X2luZm8oIiAgbW9kZXM6XG4iKTsKPiA+ICsJCWlndF9p bmZvKCIgIG5hbWUgcmVmcmVzaCAoSHopIGhkaXNwIGhzcyBoc2UgaHRvdCB2ZGlzcCAiInZzcyB2 c2UgdnRvdCBmbGFncyB0eXBlIGNsb2NrXG4iKTsKPiA+ICsJCWZvciAoaiA9IDA7IGogPCBjb25u ZWN0b3ItPmNvdW50X21vZGVzOyBqKyspewo+ID4gKwkJCWlndF9pbmZvKCJbJWRdIiwgaik7Cj4g PiArCQkJa21zdGVzdF9kdW1wX21vZGUoJmNvbm5lY3Rvci0+bW9kZXNbal0pOwo+ID4gKwkJfQo+ ID4gKwo+ID4gKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ICsJfQo+ID4g KwlpZ3RfaW5mbygiXG4iKTsKPiA+ICsKPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMobW9kZV9y ZXNvdXJjZXMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdW1wX2NydGNzX2ZkKGlu dCBkcm1mZCkKPiA+ICt7Cj4gPiArCWludCBpOwo+ID4gKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291 cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtZmQpOwo+ID4gKwo+ID4gKwlpZ3RfaW5mbygi Q1JUQ3M6XG4iKTsKPiA+ICsJaWd0X2luZm8oImlkXHRmYlx0cG9zXHRzaXplXG4iKTsKPiA+ICsJ Zm9yIChpID0gMDsgaSA8IG1vZGVfcmVzb3VyY2VzLT5jb3VudF9jcnRjczsgaSsrKSB7Cj4gPiAr CQlkcm1Nb2RlQ3J0YyAqY3J0YzsKPiA+ICsKPiA+ICsJCWNydGMgPSBkcm1Nb2RlR2V0Q3J0Yyhk cm1mZCwgbW9kZV9yZXNvdXJjZXMtPmNydGNzW2ldKTsKPiA+ICsJCWlmICghY3J0Yykgewo+ID4g KwkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNydGMgJWk6ICVzXG4iLAo+ID4gKwkJCQkgbW9k ZV9yZXNvdXJjZXMtPmNydGNzW2ldLCBzdHJlcnJvcihlcnJubykpOwo+ID4gKwkJCWNvbnRpbnVl Owo+ID4gKwkJfQo+ID4gKwkJaWd0X2luZm8oIiVkXHQlZFx0KCVkLCVkKVx0KCVkeCVkKVxuIiwK PiA+ICsJCQkgY3J0Yy0+Y3J0Y19pZCwgY3J0Yy0+YnVmZmVyX2lkLCBjcnRjLT54LAo+ID4gKwkJ CSBjcnRjLT55LCBjcnRjLT53aWR0aCwgY3J0Yy0+aGVpZ2h0KTsKPiA+ICsJCWttc3Rlc3RfZHVt cF9tb2RlKCZjcnRjLT5tb2RlKTsKPiA+ICsKPiA+ICsJCWRybU1vZGVGcmVlQ3J0YyhjcnRjKTsK PiA+ICsJfQo+ID4gKwlpZ3RfaW5mbygiXG4iKTsKPiA+ICsKPiA+ICsJZHJtTW9kZUZyZWVSZXNv dXJjZXMobW9kZV9yZXNvdXJjZXMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdW1w X2luZm8odm9pZCkKPiA+ICt7Cj4gPiArCWR1bXBfY29ubmVjdG9yc19mZChkcm1fZmQpOwo+ID4g KwlkdW1wX2NydGNzX2ZkKGRybV9mZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ ICtzZXRfbW9kZShzdHJ1Y3QgY29ubmVjdG9yICpjLCBzdHJ1Y3QgZHNjX2NvbmZpZyAqdGVzdF9j b25maWcsIGJvb2wgc2V0X21vZGUpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgZmJfaWQgPSAw Owo+ID4gKwlzdHJ1Y3QgaWd0X2ZiIGZiX2luZm87Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwo+ ID4gKwlpZiAoIXNldF9tb2RlKSB7Cj4gPiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQs IGMtPmNydGMsIDAsIDAsIDAsCj4gPiArCQkJCSAgICAgTlVMTCwgMCwgTlVMTCk7Cj4gPiArCQlp ZiAocmV0KQo+ID4gKwkJCWlndF93YXJuKCJGYWlsZWQgdG8gdW5zZXQgbW9kZSIpOwo+ID4gKwkJ cmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmYl9pZCA9IGlndF9jcmVhdGVfcGF0dGVy bl9mYihkcm1fZmQsIHRlc3RfY29uZmlnLT5tb2RlX3dpZHRoLAo+ID4gKwkJCQkgICAgICB0ZXN0 X2NvbmZpZy0+bW9kZV9oZWlnaHQsCj4gPiArCQkJCSAgICAgIGlndF9icHBfZGVwdGhfdG9fZHJt X2Zvcm1hdCh0ZXN0X2NvbmZpZy0+YnBwLAo+ID4gKwkJCQkJCQkJICB0ZXN0X2NvbmZpZy0+ZGVw dGgpLAo+ID4gKwkJCQkgICAgICB0aWxpbmcsICZmYl9pbmZvKTsKPiA+ICsKPiA+ICsJaWd0X2lu Zm8oIkNSVEMoJXUpOlslZF0iLCBjLT5jcnRjLCAwKTsKPiA+ICsJa21zdGVzdF9kdW1wX21vZGUo JmMtPm1vZGUpOwo+ID4gKwlkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIGMtPmNydGMsIC0xLCAwLCAw LCBOVUxMLCAwLCBOVUxMKTsKPiA+ICsJcmV0ID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBjLT5j cnRjLCBmYl9pZCwgMCwgMCwKPiA+ICsJCQkgICAgICZjLT5pZCwgMSwgJmMtPm1vZGUpOwo+ID4g KwlzbGVlcCg1KTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCWlndF93YXJuKCJGYWlsZWQg dG8gc2V0IG1vZGUgKCVkeCVkQCVkSHopOiAlc1xuIiwKPiA+ICsJCQkgdGVzdF9jb25maWctPm1v ZGVfd2lkdGgsIHRlc3RfY29uZmlnLT5tb2RlX2hlaWdodCwKPiA+ICsJCQkgYy0+bW9kZS52cmVm cmVzaCwgc3RyZXJyb3IoZXJybm8pKTsKPiA+ICsJCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmJf aW5mbyk7Cj4gPiArCj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiAr Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBSZS1wcm9iZSBjb25uZWN0b3JzIGFuZCBkbyBhIG1vZGVz ZXQgd2l0aCBhbmQgd2lob3V0IERTQwo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiAw OiBPbiBTdWNjZXNzCj4gPiArICogLTE6IE9uIGZhaWx1cmUKPiA+ICsgKi8KPiA+ICtzdGF0aWMg aW50IHVwZGF0ZV9kaXNwbGF5KHN0cnVjdCBkc2NfY29uZmlnICp0ZXN0X2NvbmZpZykKPiA+ICt7 Cj4gPiArCXN0cnVjdCBjb25uZWN0b3IgKmNvbm5lY3RvcnM7Cj4gPiArCXN0cnVjdCBrbXN0ZXN0 X2Nvbm5lY3Rvcl9jb25maWcgY29uZmlnOwo+ID4gKwlpbnQgY250LCBjb25uX2NudCA9IDAsIHJl dCA9IDAsIGVkcF9jbnQgPSAwLCBkcF9jbnQgPSAwOwo+ID4gKwl1bnNpZ25lZCBsb25nIGNydGNf aWR4X21hc2sgPSAtMVVMOwo+ID4gKwljaGFyIGNvbm5fYnVmWzEyOF0gPSB7MH07Cj4gPiArCj4g PiArCXJlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsKPiA+ICsJaWYgKCFy ZXNvdXJjZXMpIHsKPiA+ICsJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDog JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQlyZXR1cm4gLTE7Cj4gPiArCX0KPiA+ICsK PiA+ICsJY29ubmVjdG9ycyA9IGNhbGxvYyhyZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMsCj4g PiArCQkJICAgIHNpemVvZihzdHJ1Y3QgY29ubmVjdG9yKSk7Cj4gPiArCWlmICghY29ubmVjdG9y cykKPiA+ICsJCXJldHVybiAtMTsKPiA+ICsKPiBJcyBpdCBwb3NzaWJsZSB0byB1c2UgaWd0X2Rp c3BsYXlfdCwgZm9sbG93ZWQgYnkgaWd0X2Rpc3BsYXlfcmVxdWlyZSBpbiBpZ3RfZml4dHVyZT8K PiBPciBpcyBpdCB3YXkgdG9vIG11Y2ggb3ZlcmhlYWQgaW4gY29sbGVjdGluZyBhbGwgbm9uLXJl cXVpcmVkIHJlc291cmNlcz8KCk5vdCBzdXJlIHdoYXQgeW91IG1lYW4gaGVyZS4gQXJlIHlvdSBz dWdnZXN0aW5nIHJlbW92aW5nIHRoZSB1cGRhdGVfZGlzcGxheSgpIGZ1bmN0aW9uIGFuZCB1c2lu ZwppZ3RfZGlzcGxheV9pbml0IGluc3RlYWQ/IEJ1dCBJIGFtIG5vdCBzdXJlIGhvdyBJIGNhbiBz ZXQgbW9kZSBwZXIgY29ubmVjdG9yIGluIHRoYXQgY2FzZSBsaWtlIEkgYW0gZG9pbmcKaW4gdXBk YXRlX2Rpc3BsYXkgd2l0aCB0aGUgZm9yIGxvb3AKCj4gPiArCS8qIEZpbmQgYW55IGNvbm5lY3Rl ZCBkaXNwbGF5cyAqLwo+ID4gKwlmb3IgKGNudCA9IDA7IGNudCA8IHJlc291cmNlcy0+Y291bnRf Y29ubmVjdG9yczsgY250KyspIHsKPiA+ICsJCXN0cnVjdCBjb25uZWN0b3IgKmMgPSAmY29ubmVj dG9yc1tjbnRdOwo+ID4gKwkJYy0+aWQgPSByZXNvdXJjZXMtPmNvbm5lY3RvcnNbY250XTsKPiA+ ICsJCWlmKCFrbXN0ZXN0X2dldF9jb25uZWN0b3JfY29uZmlnKGRybV9mZCwgYy0+aWQsIGNydGNf aWR4X21hc2ssCj4gPiArCQkJCQkJJmNvbmZpZykpIHsKPiA+ICsJCQljLT5tb2RlX3ZhbGlkID0g MDsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsJCWMtPmNvbm5lY3RvciA9IGNvbmZp Zy5jb25uZWN0b3I7Cj4gPiArCQljLT5lbmNvZGVyID0gY29uZmlnLmVuY29kZXI7Cj4gPiArCQlj LT5tb2RlID0gY29uZmlnLmRlZmF1bHRfbW9kZTsKPiA+ICsJCWMtPmNydGMgPSBjb25maWcuY3J0 Yy0+Y3J0Y19pZDsKPiA+ICsJCWMtPnBpcGUgPSBjb25maWcucGlwZTsKPiA+ICsJCWMtPm1vZGVf dmFsaWQgPSAxOwo+ID4gKwo+ID4gKwkJaWYgKGMtPmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUg PT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0IHx8Cj4gPiArCQkgICAgYy0+Y29ubmVj dG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSB7Cj4gPiArCj4g PiArCQkJaWYgKGMtPmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVD VE9SX2VEUCkKPiA+ICsJCQkJY29ubl9jbnQgPSArKyBlZHBfY250Owo+ID4gKwkJCWVsc2UKPiA+ ICsJCQkJY29ubl9jbnQgPSArKyBkcF9jbnQ7Cj4gPiArCQkJaWYgKGMtPmNvbm5lY3Rvci0+Y29u bmVjdGlvbiA9PSBEUk1fTU9ERV9DT05ORUNURUQpIHsKPiA+ICsJCQkJc3ByaW50Zihjb25uX2J1 ZiwgIiVzLSVkIiwKPiA+ICsJCQkJCWttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGMtPmNvbm5l Y3Rvci0+Y29ubmVjdG9yX3R5cGUpLAo+ID4gKwkJCQkJY29ubl9jbnQpOwo+ID4gKwkJCQl0ZXN0 X2NvbmZpZy0+ZHNjX3N1cHBvcnRlZCA9Cj4gPiArCQkJCQlnZXRfZHBfZHNjX3N1cHBvcnQoY29u bl9idWYpOwo+ID4gKwkJCQlpZiAoIXN0cmNtcCh0ZXN0X2NvbmZpZy0+dGVzdF9uYW1lLAo+ID4g KwkJCQkJICAgICJmb3JjZV9kc2NfZW5hYmxlX2Jhc2ljIikpIHsKPiBXaWxsIHRoaXMgY29kZSBw YXRoIHJ1bj8KPiA+ICsJCQkJCWlmICh0ZXN0X2NvbmZpZy0+ZHNjX3N1cHBvcnRlZCkgewo+ID4g KwkJCQkJCWlndF9pbmZvICgiRFNDIGlzIHN1cHBvcnRlZCBvbiAlc1xuIiwKPiA+ICsJCQkJCQkJ ICBjb25uX2J1Zik7Cj4gPiArCQkJCQkJdGVzdF9jb25maWctPm1vZGVfd2lkdGggPSBjLT5tb2Rl LmhkaXNwbGF5Owo+ID4gKwkJCQkJCXRlc3RfY29uZmlnLT5tb2RlX2hlaWdodCA9IGMtPm1vZGUu dmRpc3BsYXk7Cj4gPiArCQkJCQkJdGVzdF9jb25maWctPmJwcCA9IDMyOwo+ID4gKwkJCQkJCXRl c3RfY29uZmlnLT5kZXB0aCA9IDI0Owo+ID4gKwkJCQkJCXNldF9kcF9kc2NfZW5hYmxlKHRlc3Rf Y29uZmlnLT5kc2NfZW5hYmxlLAo+ID4gKwkJCQkJCQkgIGNvbm5fYnVmKTsKPiA+ICsJCQkJCQly ZXQgPSBzZXRfbW9kZShjLCB0ZXN0X2NvbmZpZywKPiA+ICsJCQkJCQkJICAgICAgIHRydWUpOwo+ ID4gKwkJCQkJfSBlbHNlIHsKPiA+ICsJCQkJCQlpZ3RfaW5mbyAoIkRTQyBpcyBub3Qgc3VwcG9y dGVkIG9uICVzXG4iLAo+ID4gKwkJCQkJCQkgIGNvbm5fYnVmKTsKPiA+ICsJCQkJCX0KPiA+ICsJ CQkJfQo+ID4gKwkJCQljcnRjX2lkeF9tYXNrICY9IH4oMSA8PCBjLT5waXBlKTsKPiA+ICsJCQl9 Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJZnJlZShjb25uZWN0b3JzKTsKPiA+ICsJZHJt TW9kZUZyZWVSZXNvdXJjZXMocmVzb3VyY2VzKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBvcHRfaGFuZGxlcihpbnQgb3B0LCBpbnQgb3B0X2luZGV4LCB2 b2lkICpvcHRfZHVtcCkKPiA+ICt7Cj4gPiArCWJvb2wgKmR1bXAgPSBvcHRfZHVtcDsKPiA+ICsK PiA+ICsJc3dpdGNoIChvcHQpIHsKPiA+ICsJY2FzZSAnaSc6Cj4gPiArCQkqZHVtcCA9IHRydWU7 Cj4gPiArCQlicmVhazsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCWlndF9hc3NlcnQoMCk7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4gPiArewo+ID4gKwljb25zdCBjaGFyICpoZWxwX3N0ciA9Cj4g PiArCQkiICAtLWluZm9cdFx0RHVtcCBJbmZvcm1hdGlvbiBhYm91dCBjb25uZWN0b3JzLiAoc3Rp bGwgbmVlZHMgRFJNIGFjY2VzcylcbiI7Cj4gPiArCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdf b3B0aW9uc1tdID0gewo+ID4gKwkJeyJpbmZvIiwgMCwgMCwgJ2knfSwKPiA+ICsJCXswLCAwLCAw LCAwfQo+ID4gKwl9Owo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsJc3RydWN0IGRzY19jb25maWcg dGVzdF9jb25maWc7Cj4gPiArCWJvb2wgb3B0X2R1bXAgPSBmYWxzZTsKPiA+ICsJaWd0X3N1YnRl c3RfaW5pdF9wYXJzZV9vcHRzKCZhcmdjLCBhcmd2LCAiIiwgbG9uZ19vcHRpb25zLCBoZWxwX3N0 ciwKPiA+ICsJCQkJICAgIG9wdF9oYW5kbGVyLCAmb3B0X2R1bXApOwo+ID4gKwo+ID4gKwlpZ3Rf c2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gPiArCj4gPiArCWlndF9maXh0dXJlIHsKPiA+ICsJCWtt c3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiA+ICsJCWRybV9mZCA9IGRybV9vcGVuX2Ry aXZlcihEUklWRVJfQU5ZKTsKPiA+ICsJCWlmIChvcHRfZHVtcCkKPiA+ICsJCQlkdW1wX2luZm8o KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZ3Rfc3VidGVzdCgiZm9yY2VfZHNjX2VuYWJsZV9iYXNp YyIpIHsKPiA+ICsJCXN0cmNweSh0ZXN0X2NvbmZpZy50ZXN0X25hbWUsImZvcmNlX2RzY19lbmFi bGVfYmFzaWMiKTsKPiA+ICsJCXJldCA9IHVwZGF0ZV9kaXNwbGF5KCZ0ZXN0X2NvbmZpZyk7Cj4g PiArCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJY2xvc2UoZHJt X2ZkKTsKPiA+ICsKPiA+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+IElzIHRoaXMgYXNzZXJ0 IHJlcXVpcmVkPwoKVGhlIGdvYWwgaXMgdG8gdXNlIHRoaXMgYXNzZXJ0IHRvIGNoZWNrIHRoZSBy ZXQgdmFsdWUgb2YgdXBkYXRlIGRpc3BsYXkuCgpNYW5hc2kKCj4gCj4gLSBSYWRoYWtyaXNobmEo UkspIFNyaXBhZGEKPiA+ICsKPiA+ICsJaWd0X2luZm8oIkRTQyB0ZXN0aW5nIGRvbmVcbiIpOwo+ ID4gKwlpZ3RfZXhpdCgpOwo+ID4gKwo+ID4gK30KPiA+IC0tIAo+ID4gMi4xOC4wCj4gPiAKPiA+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBpZ3Qt ZGV2IG1haWxpbmcgbGlzdAo+ID4gaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IGh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK