From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id F35BB6E2AD for ; Tue, 16 Oct 2018 21:35:10 +0000 (UTC) Date: Tue, 16 Oct 2018 14:37:32 -0700 From: Manasi Navare Message-ID: <20181016213732.GH8224@intel.com> References: <20181005233437.31286-1-manasi.d.navare@intel.com> <20181016184704.GA8224@intel.com> <3b41c1f5-f149-43a9-d177-d9a751b226e0@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <3b41c1f5-f149-43a9-d177-d9a751b226e0@intel.com> 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: Antonio Argenziano Cc: igt-dev@lists.freedesktop.org, Anusha Srivatsa List-ID: T24gVHVlLCBPY3QgMTYsIDIwMTggYXQgMDI6MTQ6NTlQTSAtMDcwMCwgQW50b25pbyBBcmdlbnpp YW5vIHdyb3RlOgo+IAo+IAo+IE9uIDE2LzEwLzE4IDExOjQ3LCBNYW5hc2kgTmF2YXJlIHdyb3Rl Ogo+ID5PbiBXZWQsIE9jdCAxMCwgMjAxOCBhdCAwODo0ODozN0FNIC0wNzAwLCBBbnRvbmlvIEFy Z2Vuemlhbm8gd3JvdGU6Cj4gPj4KPiA+Pgo+ID4+T24gMDUvMTAvMTggMTY6MzQsIE1hbmFzaSBO YXZhcmUgd3JvdGU6Cj4gPj4+VGhpcyBwYXRjaCBhZGRzIGEgYmFzaWMga21zIHRlc3QgdG8gdmFs aWRhdGUgdGhlIGRpc3BsYXkgc3RyZWFtCj4gPj4+Y29tcHJlc3Npb24gZnVuY3Rpb25hbGl0eSBp ZiBzdXBwb3J0ZWQgb24gRFAvZURQIGNvbm5lY3Rvci4KPiA+Pj5DdXJyZW50bHkgdGhpcyBoYXMg b25seSBvbmUgc3VidGVzdCB0byBmb3JjZSB0aGUgRFNDIG9uIGFsbAo+ID4+PnRoZSBjb25uZWN0 b3JzIHRoYXQgc3VwcG9ydCBpdCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycy4KPiA+Pj5UaGlzIHdp bGwgYmUgZXhwYW5kZWQgdG8gYWRkIG1vcmUgc3VidGVzdHMgdG8gdHdlYWsgRFNDIHBhcmFtZXRl cnMuCj4gPj4+Cj4gPj4+Q2M6IEFudXNoYSBTcml2YXRzYSA8YW51c2hhLnNyaXZhdHNhQGludGVs LmNvbT4KPiA+Pj5TaWduZWQtb2ZmLWJ5OiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVA aW50ZWwuY29tPgo+ID4+Pi0tLQo+ID4+PiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSAr Cj4gPj4+ICB0ZXN0cy9rbXNfZHBfZHNjLmMgICAgIHwgMzcyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gPj4+ICAyIGZpbGVzIGNoYW5nZWQsIDM3MyBpbnNlcnRp b25zKCspCj4gPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2RwX2RzYy5jCj4gPj4+ Cj4gPj4+ZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCj4gPj4+aW5kZXggYzg0OTMzZjEuLmM4MDdhYWQzIDEwMDY0NAo+ID4+Pi0tLSBh L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+Pj4rKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz Cj4gPj4+QEAgLTIwNyw2ICsyMDcsNyBAQCBURVNUU19wcm9ncyA9IFwKPiA+Pj4gIAlrbXNfdHZf bG9hZF9kZXRlY3QgXAo+ID4+PiAgCWttc191bml2ZXJzYWxfcGxhbmUgXAo+ID4+PiAgCWttc192 YmxhbmsgXAo+ID4+PisJa21zX2RwX2RzYyBcCj4gPj4KPiA+PkFkZCB0ZXN0IGluIG1lc29uIGJ1 aWxkIGFzIHdlbGwuCj4gPgo+ID5CdXQgSSBkb250IHNlZSBhbnkga21zIHRlc3RzIGFkZGVkIGlu IG1lc29uLmJ1aWxkIGZpbGUsIGlzIHRoZXJlIGFueSBvdGhlcgo+ID5maWxlIHRoYXQgYWRkcyB0 aGUgdGVzdCBuYW1lcyB0byBtZXNvbiBidWlsZD8KPiAKPiB0ZXN0cy9tZXNvbi5idWlsZCBkb2Vz IGhhdmUga21zIHRlc3RzIGluIG15IHRyZWUuIEkgdGhpbmsgdGhhdCBpcyB0aGUgb25seQo+IHBs YWNlIHdpdGggdGVzdHMuCgpPayBnb3QgaXQhIFRoYW5rcy4KCj4gCj4gPgo+ID4+Cj4gPj4+ICAJ bWV0YV90ZXN0IFwKPiA+Pj4gIAlwZXJmIFwKPiA+Pj4gIAlwZXJmX3BtdSBcCj4gPj4+ZGlmZiAt LWdpdCBhL3Rlc3RzL2ttc19kcF9kc2MuYyBiL3Rlc3RzL2ttc19kcF9kc2MuYwo+ID4+Pm5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPj4+aW5kZXggMDAwMDAwMDAuLmQwZmQyYWUzCj4gPj4+LS0tIC9k ZXYvbnVsbAo+ID4+PisrKyBiL3Rlc3RzL2ttc19kcF9kc2MuYwo+ID4+PkBAIC0wLDAgKzEsMzcy IEBACj4gCj4gPj4+KwlzaXplX3QgbGluZV9zaXplID0gMDsKPiA+Pj4rCWNoYXIgYnVmWzEyOF0g PSB7MH0sIHN1cHBvcnRlZF9zdHJbNV0sIGVuYWJsZWRfc3RyWzVdOwo+ID4+PisJYm9vbCBzdXBw b3J0ZWQgPSBmYWxzZTsKPiA+Pj4rCj4gPj4+KwlzdHJjcHkoYnVmLCB0ZXN0X2Nvbm5lY3Rvcl9u YW1lKTsKPiA+Pj4rCXN0cmNhdChidWYsICIvaTkxNV9kc2Nfc3VwcG9ydCIpOwo+ID4+PisJZHNj X3N1cHBvcnRfZnAgPSBmb3BlbmF0KGRpciwgYnVmLCAiciIpOwo+ID4+PisJaWd0X3JlcXVpcmUo ZHNjX3N1cHBvcnRfZnApOwo+ID4+Cj4gPj5kb24ndCB3ZSBoYXZlIHNvbWV0aGluZyBzaW1pbGFy IGluIGlndF9kZWJ1Z2ZzIGFscmVhZHkgKGlndF9kZWJ1Z2ZzX3JlYWQpPwo+ID4KPiA+SG1tLCB5 ZWEgSSB0aGluayBJIGNvdWxkIGJlIGFibGUgdG8gdXNlIGlndF9kZWJ1Z2ZzX3JlYWQgYW5kIHBh c3MgdGhlIGJ1ZiB3aGljaCB3aWxsCj4gPmJlIGNvbmNhdGVuYXRlZCBzdHIgd2l0aCBjb25uZWN0 b3JfbmFtZS9maWxlIG5hbWUgRWc6IERQLTEvaTkxNV9kc2Nfc3VwcG9ydAo+ID4KPiA+QnV0IEkg d2lsbCBzdGlsbCBuZWVkIHRoZSBiZWxvdyB3aGlsZSBsb29wIGluIG9yZGVyIHRvIHBhcnNlIHRo ZSBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQKPiA+c3RyaW5ncy4gSSB3aWxsIHBsYXkgd2l0aCB0aGUg aWd0X2RlYnVnZnNfcmVhZCBhbmQgc3Ryc3RyIHRvIHNlZSBpZiBJIGNhbiBnZXQgcmlkIG9mIHRo aXMgd2hpbGUKPiA+bG9vcCBiZWxvdy4KPiA+Cj4gPj4KPiA+Pj4rCj4gPj4+Kwl3aGlsZSAoZ2V0 bGluZSgmbGluZSwgJmxpbmVfc2l6ZSwgZHNjX3N1cHBvcnRfZnApID4gMCkgewo+ID4+PisJCWNo YXIgKnN1cHBvcnQsICplbmFibGVkOwo+ID4+PisKPiA+Pj4rCQllbmFibGVkID0gc3Ryc3RyKGxp bmUsICJFbmFibGVkOiAiKTsKPiA+Pj4rCQlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihlbmFibGVkLCAi RW5hYmxlZDogJXMiLCBlbmFibGVkX3N0ciksIDEpOwo+ID4+PisJCWlmIChzdHJjbXAoZW5hYmxl ZF9zdHIsICJ5ZXMiKSA9PSAwKSB7Cj4gPj4+KwkJCWlndF9pbmZvKCJEU0MgaXMgZW5hYmxlZCBv biAlc1xuIiwgdGVzdF9jb25uZWN0b3JfbmFtZSk7Cj4gPj4+KwkJCXN1cHBvcnRlZCA9IHRydWU7 Cj4gPj4+KwkJCWJyZWFrOwo+ID4+PisJCX0gZWxzZSB7Cj4gPj4+KwkJCWdldGxpbmUoJmxpbmUs ICZsaW5lX3NpemUsIGRzY19zdXBwb3J0X2ZwKTsKPiA+Pj4rCQkJc3VwcG9ydCA9IHN0cnN0cihs aW5lLCAiU3VwcG9ydGVkOiAiKTsKPiA+Pj4rCQlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdXBwb3J0 LCAiU3VwcG9ydGVkOiAlcyIsIHN1cHBvcnRlZF9zdHIpLCAxKTsKPiA+Pj4rCQlpZiAoc3RyY21w KHN1cHBvcnRlZF9zdHIsICJ5ZXMiKSA9PSAwKQo+ID4+PisJCQlzdXBwb3J0ZWQgPSB0cnVlOwo+ ID4+PisJCWVsc2UgaWYgKHN0cmNtcChzdXBwb3J0ZWRfc3RyLCAibm8iKSA9PSAwKQo+ID4+PisJ CQlzdXBwb3J0ZWQgPSBmYWxzZTsKPiA+Pj4rCQllbHNlCj4gPj4+KwkJCWlndF9mYWlsX29uX2Yo dHJ1ZSwgIlVua25vd24gRFNDIHN1cHBvcnRlZCBzdGF0dXMgJyVzJ1xuIiwKPiA+Pj4rCQkJCSAg ICAgIHN1cHBvcnRlZF9zdHIpOwo+ID4+PisJCWJyZWFrOwo+ID4+PisJCX1odHRwczovL2ppcmEw MS5kZXZ0b29scy5pbnRlbC5jb20vYnJvd3NlL0dVQy0zMDYKPiA+Pj4rCX0KPiA+Pj4rCj4gPj4+ KwlmcmVlKGxpbmUpOwo+ID4+PisJZmNsb3NlKGRzY19zdXBwb3J0X2ZwKTsKPiA+Pj4rCj4gPj4+ KwlyZXR1cm4gc3VwcG9ydGVkOwo+ID4+Pit9Cj4gPj4+Kwo+IAo+ID4+PisKPiA+Pj4rc3RhdGlj IGludAo+ID4+PitzZXRfbW9kZShzdHJ1Y3QgY29ubmVjdG9yICpjLCBzdHJ1Y3QgZHNjX2NvbmZp ZyAqdGVzdF9jb25maWcsIGJvb2wgc2V0X21vZGUpCj4gPj4+K3sKPiA+Pj4rCXVuc2lnbmVkIGlu dCBmYl9pZCA9IDA7Cj4gPj4+KwlzdHJ1Y3QgaWd0X2ZiIGZiX2luZm87Cj4gPj4+KwlpbnQgcmV0 ID0gMDsKPiA+Pj4rCj4gPj4+KwlpZiAoIXNldF9tb2RlKSB7Cj4gPj4+KwkJcmV0ID0gZHJtTW9k ZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCAwLCAwLCAwLAo+ID4+PisJCQkJICAgICBOVUxMLCAw LCBOVUxMKTsKPiA+Pj4rCQlpZiAocmV0KQo+ID4+PisJCQlpZ3Rfd2FybigiRmFpbGVkIHRvIHVu c2V0IG1vZGUiKTsKPiA+Pj4rCQlyZXR1cm4gcmV0Owo+ID4+PisJfQo+ID4+PisKPiA+Pj4rCWZi X2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRybV9mZCwgdGVzdF9jb25maWctPm1vZGVfd2lk dGgsCj4gPj4+KwkJCQkgICAgICB0ZXN0X2NvbmZpZy0+bW9kZV9oZWlnaHQsCj4gPj4+KwkJCQkg ICAgICBpZ3RfYnBwX2RlcHRoX3RvX2RybV9mb3JtYXQodGVzdF9jb25maWctPmJwcCwKPiA+Pj4r CQkJCQkJCQkgIHRlc3RfY29uZmlnLT5kZXB0aCksCj4gPj4+KwkJCQkgICAgICB0aWxpbmcsICZm Yl9pbmZvKTsKPiA+Pj4rCj4gPj4+KwlpZ3RfaW5mbygiQ1JUQygldSk6WyVkXSIsIGMtPmNydGMs IDApOwo+ID4+PisJa21zdGVzdF9kdW1wX21vZGUoJmMtPm1vZGUpOwo+ID4+PisJZHJtTW9kZVNl dENydGMoZHJtX2ZkLCBjLT5jcnRjLCAtMSwgMCwgMCwgTlVMTCwgMCwgTlVMTCk7Cj4gPj4+Kwly ZXQgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIGMtPmNydGMsIGZiX2lkLCAwLCAwLAo+ID4+PisJ CQkgICAgICZjLT5pZCwgMSwgJmMtPm1vZGUpOwo+ID4+PisJc2xlZXAoNSk7Cj4gPj4KPiA+Pldo eSB0aGUgc2xlZXAgYmVmb3JlIGNoZWNraW5nIHRoZSByZXR1cm4gY29kZT8KPiA+Cj4gPlRoaXMg aXMgc28gdGhhdCBpdCBkaXNwbGF5cyB0aGUgcmVxdWVzdGVkIHBhdHRlcm4gZm9yIGZldyBzZWNz IGJlZm9yZSBjeWNsaW5nIHRvIHRoZSBuZXh0Cj4gPmNvbm5lY3RvciBzbyB0aGF0IGl0IGNhbiBi ZSB2YWxpZGF0ZWQgdmlzdWFsbHkuCj4gPk1ha2VzIHNlbnNlPwo+IAo+IEhvdyBkb2VzIGl0IGZh aWw/IFNob3VsZCB5b3Ugd2FpdCBmb3IgdXNlciBpbnB1dD8KCkFjdHVhbGx5IHRoaXMgd2lsbCBm YWlsIGlmIGRybU1vZGVTZXRDcnRjIGZhaWxzIHNheSBpbiBjYXNlcyB3aGVyZSBEU0MgY291bGQg bm90IGJlIGVuYWJsZWQKYW5kIHRoZW4gZW5jb2RlciBjb25maWcgd2lsbCBmYWlsLgoKPiAKPiBN YXliZSBhZGQgYSBjb21tZW50IGZvciB0aGF0LiBJcyB0aGlzIHRlc3QgYWx3YXlzIHZpc3VhbGx5 IHZhbGlkYXRlZD8gSSBtZWFuCj4gY2FuIHdlIHNraXAgdGhlIHNsZWVwIGluIGFuIGF1dG9tYXRl ZCBydW4gbGlrZSBDSSBmb3IgaW5zdGFuY2UuCj4KClllcyBJIHdpbGwgYWRkIGEgY29tbWVudCBm b3IgdGhpcy4gQW5kIHllcyB0aGUgRFNDIG91dHB1dCB3aWxsIGFsd2F5cyBuZWVkIHZpc3VhbCB2 YWxpZGF0aW9uIGluIHRlcm1zIG9mIGNvcnJ1cHRpb24gZXRjLgpCdXQgaXRzIGEgZ29vZCBpZGVh IHRvIHNraXAgdGhlIHNsZWVwIGluIGNhc2Ugb2YgQ0kuIElzIHRoZXJlIGEgd2F5IHRvIGNvbmRp dGlvbmFsbCBhZGQgc2xlZXAgb3Igc2tpcCBzbGVlcCgpPwoKTWFuYXNpCiAKPiA+Cj4gPj4KPiA+ Pj4rCWlmIChyZXQgPCAwKSB7Cj4gPj4+KwkJaWd0X3dhcm4oIkZhaWxlZCB0byBzZXQgbW9kZSAo JWR4JWRAJWRIeik6ICVzXG4iLAo+ID4+PisJCQkgdGVzdF9jb25maWctPm1vZGVfd2lkdGgsIHRl c3RfY29uZmlnLT5tb2RlX2hlaWdodCwKPiA+Pj4rCQkJIGMtPm1vZGUudnJlZnJlc2gsIHN0cmVy cm9yKGVycm5vKSk7Cj4gPj4+KwkJaWd0X3JlbW92ZV9mYihkcm1fZmQsICZmYl9pbmZvKTsKPiA+ Pj4rCj4gPj4+Kwl9Cj4gPj4+Kwo+ID4+PisJcmV0dXJuIHJldDsKPiA+Pj4rfQo+ID4+PisKPiA+ Pj4rCj4gPj4+Ky8qCj4gPj4+KyAqIFJlLXByb2JlIGNvbm5lY3RvcnMgYW5kIGRvIGEgbW9kZXNl dCB3aXRoIGFuZCB3aWhvdXQgRFNDCj4gPj4+KyAqCj4gPj4+KyAqIFJldHVybnM6Cj4gPj4+KyAq IDA6IE9uIFN1Y2Nlc3MKPiA+Pj4rICogLTE6IE9uIGZhaWx1cmUKPiA+Pj4rICovCj4gPj4+K3N0 YXRpYyBpbnQgdXBkYXRlX2Rpc3BsYXkoc3RydWN0IGRzY19jb25maWcgKnRlc3RfY29uZmlnKQo+ ID4+Pit7Cj4gPj4+KwlzdHJ1Y3QgY29ubmVjdG9yICpjb25uZWN0b3JzOwo+ID4+PisJc3RydWN0 IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyBjb25maWc7Cj4gPj4+KwlpbnQgY250LCBjb25uX2Nu dCA9IDAsIHJldCA9IDAsIGVkcF9jbnQgPSAwLCBkcF9jbnQgPSAwOwo+ID4+PisJdW5zaWduZWQg bG9uZyBjcnRjX2lkeF9tYXNrID0gLTFVTDsKPiA+Pj4rCWNoYXIgY29ubl9idWZbMTI4XSA9IHsw fTsKPiA+Pj4rCj4gPj4+KwlyZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7 Cj4gPj4+KwlpZiAoIXJlc291cmNlcykgewo+ID4+PisJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVz b3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gPj4+KwkJcmV0dXJuIC0x Owo+ID4+PisJfQo+ID4+PisKPiA+Pj4rCWNvbm5lY3RvcnMgPSBjYWxsb2MocmVzb3VyY2VzLT5j b3VudF9jb25uZWN0b3JzLAo+ID4+PisJCQkgICAgc2l6ZW9mKHN0cnVjdCBjb25uZWN0b3IpKTsK PiA+Pj4rCWlmICghY29ubmVjdG9ycykKPiA+Pj4rCQlyZXR1cm4gLTE7Cj4gPj4+Kwo+ID4+PisJ LyogRmluZCBhbnkgY29ubmVjdGVkIGRpc3BsYXlzICovCj4gPj4+Kwlmb3IgKGNudCA9IDA7IGNu dCA8IHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgY250KyspIHsKPiA+Pj4rCQlzdHJ1Y3Qg Y29ubmVjdG9yICpjID0gJmNvbm5lY3RvcnNbY250XTsKPiA+Pj4rCQljLT5pZCA9IHJlc291cmNl cy0+Y29ubmVjdG9yc1tjbnRdOwo+ID4+PisJCWlmKCFrbXN0ZXN0X2dldF9jb25uZWN0b3JfY29u ZmlnKGRybV9mZCwgYy0+aWQsIGNydGNfaWR4X21hc2ssCj4gPj4+KwkJCQkJCSZjb25maWcpKSB7 Cj4gPj4+KwkJCWMtPm1vZGVfdmFsaWQgPSAwOwo+ID4+PisJCQljb250aW51ZTsKPiA+Pj4rCQl9 Cj4gPj4+KwkJYy0+Y29ubmVjdG9yID0gY29uZmlnLmNvbm5lY3RvcjsKPiA+Pj4rCQljLT5lbmNv ZGVyID0gY29uZmlnLmVuY29kZXI7Cj4gPj4+KwkJYy0+bW9kZSA9IGNvbmZpZy5kZWZhdWx0X21v ZGU7Cj4gPj4+KwkJYy0+Y3J0YyA9IGNvbmZpZy5jcnRjLT5jcnRjX2lkOwo+ID4+PisJCWMtPnBp cGUgPSBjb25maWcucGlwZTsKPiA+Pj4rCQljLT5tb2RlX3ZhbGlkID0gMTsKPiA+Pj4rCj4gPj4+ KwkJaWYgKGMtPmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9S X0Rpc3BsYXlQb3J0IHx8Cj4gPj4+KwkJICAgIGMtPmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUg PT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkgewo+ID4+PisKPiA+Pj4rCQkJaWYgKGMtPmNvbm5l Y3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkKPiA+Pj4rCQkJ CWNvbm5fY250ID0gKysgZWRwX2NudDsKPiA+Pj4rCQkJZWxzZQo+ID4+PisJCQkJY29ubl9jbnQg PSArKyBkcF9jbnQ7Cj4gPj4+KwkJCWlmIChjLT5jb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0gRFJN X01PREVfQ09OTkVDVEVEKSB7Cj4gPj4+KwkJCQlzcHJpbnRmKGNvbm5fYnVmLCAiJXMtJWQiLAo+ ID4+PisJCQkJCWttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGMtPmNvbm5lY3Rvci0+Y29ubmVj dG9yX3R5cGUpLAo+ID4+PisJCQkJCWNvbm5fY250KTsKPiA+Pj4rCQkJCXRlc3RfY29uZmlnLT5k c2Nfc3VwcG9ydGVkID0KPiA+Pj4rCQkJCQlnZXRfZHBfZHNjX3N1cHBvcnQoY29ubl9idWYpOwo+ ID4+PisJCQkJaWYgKCFzdHJjbXAodGVzdF9jb25maWctPnRlc3RfbmFtZSwKPiA+Pj4rCQkJCQkg ICAgImZvcmNlX2RzY19lbmFibGVfYmFzaWMiKSkgewo+ID4+PisJCQkJCWlmICh0ZXN0X2NvbmZp Zy0+ZHNjX3N1cHBvcnRlZCkgewo+ID4+PisJCQkJCQlpZ3RfaW5mbyAoIkRTQyBpcyBzdXBwb3J0 ZWQgb24gJXNcbiIsCj4gPj4+KwkJCQkJCQkgIGNvbm5fYnVmKTsKPiA+Pj4rCQkJCQkJdGVzdF9j b25maWctPm1vZGVfd2lkdGggPSBjLT5tb2RlLmhkaXNwbGF5Owo+ID4+PisJCQkJCQl0ZXN0X2Nv bmZpZy0+bW9kZV9oZWlnaHQgPSBjLT5tb2RlLnZkaXNwbGF5Owo+ID4+PisJCQkJCQl0ZXN0X2Nv bmZpZy0+YnBwID0gMzI7Cj4gPj4+KwkJCQkJCXRlc3RfY29uZmlnLT5kZXB0aCA9IDI0Owo+ID4+ PisJCQkJCQlzZXRfZHBfZHNjX2VuYWJsZSh0ZXN0X2NvbmZpZy0+ZHNjX2VuYWJsZSwKPiA+Pj4r CQkJCQkJCSAgY29ubl9idWYpOwo+ID4+PisJCQkJCQlyZXQgPSBzZXRfbW9kZShjLCB0ZXN0X2Nv bmZpZywKPiA+Pj4rCQkJCQkJCSAgICAgICB0cnVlKTsKPiA+Pj4rCQkJCQl9IGVsc2Ugewo+ID4+ PisJCQkJCQlpZ3RfaW5mbyAoIkRTQyBpcyBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLAo+ID4+PisJ CQkJCQkJICBjb25uX2J1Zik7Cj4gPj4+KwkJCQkJfQo+ID4+PisJCQkJfQo+ID4+PisJCQkJY3J0 Y19pZHhfbWFzayAmPSB+KDEgPDwgYy0+cGlwZSk7Cj4gPj4+KwkJCX0KPiA+Pj4rCQl9Cj4gPj4+ Kwl9Cj4gPj4+Kwo+ID4+PisJZnJlZShjb25uZWN0b3JzKTsKPiA+Pj4rCWRybU1vZGVGcmVlUmVz b3VyY2VzKHJlc291cmNlcyk7Cj4gPj4+KwlyZXR1cm4gcmV0Owo+ID4+Pit9Cj4gPj4+Kwo+ID4+ PitzdGF0aWMgaW50IG9wdF9oYW5kbGVyKGludCBvcHQsIGludCBvcHRfaW5kZXgsIHZvaWQgKm9w dF9kdW1wKQo+ID4+Pit7Cj4gPj4KPiA+PldoeSBub3Qgd3JhcHBpbmcgYWxsIHRoZSBvcHRpb25h bCBwcmludHMgaW4gaWd0X2RlYnVnIHNvIHlvdSBjb3VsZCByZS11c2UKPiA+PnRoZSAtLWRlYnVn IG9wdGlvbj8KPiA+Cj4gPllvdSBtZWFuIGluc3RlYWQgb2YgaWd0X2luZm8gYW5kIGFsbCBjb25u ZWN0b3IgZHVtcCBwcmludHMgaGF2ZSB0aGVtIGluIGlndF9kZWJ1ZygpID8KPiAKPiBTb21ldGhp bmcgbGlrZSB0aGF0IG9yIHJldHVybmluZyBhIHN0cmluZyBmcm9tIHRoZSBkdW1wIGZ1bmN0aW9u cyBhbmQgcGludAo+IGl0IGludG8gYW4gaWd0X2RlYnVnKCkgY2FsbC4KPiAKPiA+Cj4gPj4KPiA+ Pj4rCWJvb2wgKmR1bXAgPSBvcHRfZHVtcDsKPiA+Pj4rCj4gPj4+Kwlzd2l0Y2ggKG9wdCkgewo+ ID4+PisJY2FzZSAnaSc6Cj4gPj4+KwkJKmR1bXAgPSB0cnVlOwo+ID4+PisJCWJyZWFrOwo+ID4+ PisJZGVmYXVsdDoKPiA+Pj4rCQlpZ3RfYXNzZXJ0KDApOwo+ID4+PisJfQo+ID4+PisKPiA+Pj4r CXJldHVybiAwOwo+ID4+Pit9Cj4gPj4+Kwo+ID4+PitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQo+ID4+Pit7Cj4gPj4+Kwljb25zdCBjaGFyICpoZWxwX3N0ciA9Cj4gPj4+KwkJIiAg LS1pbmZvXHRcdER1bXAgSW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdG9ycy4gKHN0aWxsIG5lZWRz IERSTSBhY2Nlc3MpXG4iOwo+ID4+PisJc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25z W10gPSB7Cj4gPj4+KwkJeyJpbmZvIiwgMCwgMCwgJ2knfSwKPiA+Pj4rCQl7MCwgMCwgMCwgMH0K PiA+Pj4rCX07Cj4gPj4+KwlpbnQgcmV0ID0gMDsKPiA+Pj4rCXN0cnVjdCBkc2NfY29uZmlnIHRl c3RfY29uZmlnOwo+ID4+PisJYm9vbCBvcHRfZHVtcCA9IGZhbHNlOwo+ID4+PisJaWd0X3N1YnRl c3RfaW5pdF9wYXJzZV9vcHRzKCZhcmdjLCBhcmd2LCAiIiwgbG9uZ19vcHRpb25zLCBoZWxwX3N0 ciwKPiA+Pj4rCQkJCSAgICBvcHRfaGFuZGxlciwgJm9wdF9kdW1wKTsKPiA+Pj4rCj4gPj4+Kwlp Z3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gPj4+Kwo+ID4+PisJaWd0X2ZpeHR1cmUgewo+ID4+ PisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiA+Pj4rCQlkcm1fZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0FOWSk7Cj4gPj4+KwkJaWYgKG9wdF9kdW1wKQo+ID4+PisJCQlk dW1wX2luZm8oKTsKPiA+Pj4rCX0KPiA+Pj4rCj4gPj4+KwlpZ3Rfc3VidGVzdCgiZm9yY2VfZHNj X2VuYWJsZV9iYXNpYyIpIHsKPiA+Pj4rCQlzdHJjcHkodGVzdF9jb25maWcudGVzdF9uYW1lLCJm b3JjZV9kc2NfZW5hYmxlX2Jhc2ljIik7Cj4gPj4+KwkJcmV0ID0gdXBkYXRlX2Rpc3BsYXkoJnRl c3RfY29uZmlnKTsKPiA+Pgo+ID4+J3Rlc3RfY29uZmlnJyBzZWVtcyB0byBiZSBhbiBvdXRwdXQg cGFyYW1ldGVyIGJ1dCBpdCBpcyBub3QgdXNlZCBpbiB0aGUKPiA+PnRlc3QuCj4gPgo+ID50ZXN0 X2NvbmZpZyBpcyB1c2VkIGluIHRoZSB1cGRhdGVfZGlzcGxheSgpCj4gPgo+ID4+Cj4gPj4+KwkJ aWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ID4+PisJfQo+ID4+PisKPiA+Pj4rCWNsb3NlKGRybV9m ZCk7Cj4gPj4+Kwo+ID4+PisJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ID4+Cj4gPj4ncmV0JyBp cyBhbHJlYWR5IGNoZWNrZWQgaW4gdGhlIHN1YnRlc3QgYWxzbywgdGhpcyB3b3VsZCBmYWlsIGlm IHlvdSBkb24ndAo+ID4+cnVuIHRoZSBzdWJ0ZXN0Lgo+ID4KPiA+SWYgSSBkb250IHJ1biB0aGUg c3VidGVzdCwgaXQgd2lsbCB1c2UgdGhlIGluaXRpYWxpemVkIHZhbHVlIG9mIHJldCB3aGljaCBp cyAwLgo+ID5JdCB3aWxsIG9ubHkgZmFpbCBpZiB1cGRhdGVfZGlzcGxheSByZXR1cm5zIGEgbmVn YXRpdmUgdmFsdWUuCj4gCj4gU29ycnksIHlvdSBhcmUgcmlnaHQgSSBtaXNyZWFkIHRoYXQuIEJ1 dCwgaXQgd2lsbCBub3QgYmUgdGhpcyBhc3NlcnQgdG8gZmlyZQo+IGlmIHJldCAhPSAwIGJ1dCB0 aGUgb25lIGluIHRoZSBzdWJ0ZXN0LiBNeSBwb2ludCB3YXMgdGhhdCB0aGlzIHN0YXRlbWVudAo+ IHNlZW1zIGEgYml0IHJlZHVuZGFudCBhbmQgY291bGQgYmUgZWxpbWluYXRlZC4KPiAKPiBBbnRv bmlvCj4gCj4gPgo+ID5NYW5hc2kKPiA+Cj4gPj4KPiA+PkNvbW1lbnRzIG1vc3RseSBmcm9tIGEg cmFwaWQgcmVhZC4gWW91IHdpbGwgc3RpbGwgbmVlZCBhIHByb3BlciByZXZpZXdlciBmb3IKPiA+ PnRoZSBLTVMgc3R1ZmYuCj4gPj4KPiA+PlRoYW5rcywKPiA+PkFudG9uaW8KPiA+Pgo+ID4+PisK PiA+Pj4rCWlndF9pbmZvKCJEU0MgdGVzdGluZyBkb25lXG4iKTsKPiA+Pj4rCWlndF9leGl0KCk7 Cj4gPj4+Kwo+ID4+Pit9Cj4gPj4+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0 LWRldgo=