From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] tests/kms_color.c :Color IGT Patch This patch will verify color correction capability of a display driver. Currently Pipe level CSC and Pipe level Gamma are supported. Date: Thu, 11 Jun 2015 10:10:29 +0300 Message-ID: <87616u7mai.fsf@intel.com> References: <1433993759-21610-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 257BA6E554 for ; Thu, 11 Jun 2015 00:08:08 -0700 (PDT) In-Reply-To: <1433993759-21610-1-git-send-email-dhanya.p.r@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: dhanyapr List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAxMSBKdW4gMjAxNSwgRGhhbnlhIFBpbGxhaSA8ZGhhbnlhLnAuckBpbnRlbC5jb20+ IHdyb3RlOgo+IEZyb206IGRoYW55YXByIDxkaGFueWEucC5yQGludGVsLmNvbT4KPgoKUGxlYXNl IHNwbGl0IHlvdXIgcGF0Y2ggdGl0bGUgdG8gZm9ybSBhIHByb3BlciBjb21taXQgbWVzc2FnZS4g U2VlIGdpdApsb2cgZm9yIGV4YW1wbGVzLgoKQlIsCkphbmkuCgoKPiBTaWduZWQtb2ZmLWJ5OiBk aGFueWFwciA8ZGhhbnlhLnAuckBpbnRlbC5jb20+Cj4gLS0tCj4gIHRlc3RzL01ha2VmaWxlLnNv dXJjZXMgfCAgIDEgKwo+ICB0ZXN0cy9rbXNfY29sb3IuYyAgICAgIHwgNTA4ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMiBmaWxlcyBjaGFuZ2Vk LCA1MDkgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2NvbG9y LmMKPgo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZp bGUuc291cmNlcwo+IGluZGV4IDk5NGMzMWIuLjYyMTE4OTggMTAwNjQ0Cj4gLS0tIGEvdGVzdHMv TWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtODAs NiArODAsNyBAQCBURVNUU19wcm9nc19NID0gXAo+ICAJa21zX2NydGNfYmFja2dyb3VuZF9jb2xv ciBcCj4gIAlrbXNfcGxhbmVfc2NhbGluZyBcCj4gIAlrbXNfcGFuZWxfZml0dGluZyBcCj4gKwlr bXNfY29sb3IgXAo+ICAJcG1fbHBzcCBcCj4gIAlwbV9ycG0gXAo+ICAJcG1fcnBzIFwKPiBkaWZm IC0tZ2l0IGEvdGVzdHMva21zX2NvbG9yLmMgYi90ZXN0cy9rbXNfY29sb3IuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZGY0YWMwNgo+IC0tLSAvZGV2L251bGwKPiAr KysgYi90ZXN0cy9rbXNfY29sb3IuYwo+IEBAIC0wLDAgKzEsNTA4IEBACj4gKy8qCj4gKyAqIENv cHllaWdodCDCqSAyMDEzLDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsg KiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bWF0aC5oPgo+ICsjaW5jbHVk ZSAiZHJtdGVzdC5oIgo+ICsjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKPiArI2luY2x1ZGUgImln dF9rbXMuaCIKPiArI2luY2x1ZGUgImlndF9jb3JlLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9jaGlw c2V0LmgiCj4gKyNpbmNsdWRlICJpZ3RfYXV4LmgiCj4gKyNpbmNsdWRlPHVuaXN0ZC5oPgo+ICsj aW5jbHVkZTxzdGRsaWIuaD4KPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3QgR2FtbWEgYXQg UGxhbmUvUGlwZSBsZXZlbCIpOwo+ICsKPiArCj4gKyNkZWZpbmUgQ0hWX0NTQ19WQUxTICAgIDkK PiArI2RlZmluZSBEUk1fSU9DVExfTU9ERV9DUkVBVEVQUk9QQkxPQiAgIERSTV9JT1dSKDB4QkQs IHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxvYikKPiArI2RlZmluZSBJOTE1X1BJUEVfQ1NDICAg ICAgICAgICAoMTw8MCkKPiArI2RlZmluZSBJOTE1X1BMQU5FX0NTQyAgKDE8PDEpCj4gKyNkZWZp bmUgSTkxNV9DU0NfQ09FRkZfRk9STUFUX1VOS05PV04gICAwCj4gKyNkZWZpbmUgSTkxNV9DU0Nf Q09FRkZfRk9STUFUX0NVUlJFTlQgICAweEZGRkZGRkZGCj4gKyNkZWZpbmUgSTkxNV9DU0NfQ09F RkZfRk9STUFUX1MxXzMwICAgICAoMTw8MCkKPiArI2RlZmluZSBJOTE1X0NTQ19DT0VGRl9GT1JN QVRfUzJfMjkgICAgICgxPDwxKQo+ICsKPiArI2RlZmluZSBDU0NfTUFOVElTU0FfTUFYX0JJVFMg ICAgMQo+ICsjZGVmaW5lIENTQ19NQU5USVNTQV9NQVhfVkFMVUUgICAoKDEgPDwgQ1NDX01BTlRJ U1NBX01BWF9CSVRTKSAtIDEpCj4gKyNkZWZpbmUgQ1NDX0ZSQUNUSU9OX01BWF9CSVRTICAgIDEw Cj4gKyNkZWZpbmUgR0FNTUFfUkVEX1NISUZUCTE2Cj4gKyNkZWZpbmUgR0FNTUFfR1JFRU5fU0hJ RlQJOAo+ICsjZGVmaW5lIFNUQU5EQVJEX0dBTU1BCQkJCTIuMgo+ICsjZGVmaW5lIEk5MTVfR0FN TUFfRkxBR19ERUdBTU1BCQkoMTw8MCkKPiArI2RlZmluZSBJOTE1X1BJUEVfR0FNTUEJCSgxPDww KQo+ICsjZGVmaW5lIEk5MTVfUExBTkVfR0FNTUEJKDE8PDEpCj4gKyNkZWZpbmUgSTkxNV9HQU1N QV9QUkVDSVNJT05fVU5LTk9XTgkwCj4gKyNkZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJT05fQ1VS UkVOVAkweEZGRkZGRkZGCj4gKyNkZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJT05fTEVHQUNZCSgx PDwwKQo+ICsjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzEwQklUCSgxPDwxKQo+ICsjZGVm aW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzEyQklUCSgxPDwyKQo+ICsjZGVmaW5lIEk5MTVfR0FN TUFfUFJFQ0lTSU9OXzE0QklUCSgxPDwzKQo+ICsjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9O XzE2QklUCSgxPDw0KQo+ICsjZGVmaW5lIENIVl9ERUdBTU1BX01BWF9JTkRFWAk2NAo+ICsjZGVm aW5lIENIVl9ERUdBTU1BX1ZBTFMJNjUKPiArI2RlZmluZSBDSFZfOEJJVF9HQU1NQV9NQVhfSU5E RVgJMjU2Cj4gKyNkZWZpbmUgQ0hWXzhCSVRfR0FNTUFfTUFYX1ZBTFMJQ0hWXzhCSVRfR0FNTUFf TUFYX0lOREVYCj4gKyNkZWZpbmUgQ0hWXzEwQklUX0dBTU1BX01BWF9JTkRFWAkyNTYKPiArI2Rl ZmluZSBDSFZfMTBCSVRfR0FNTUFfTUFYX1ZBTFMJKENIVl8xMEJJVF9HQU1NQV9NQVhfSU5ERVgg KyAxKQo+ICsKPiArI2RlZmluZSBDSFZfU1BSSVRFX0dBTU1BX01BWF9WQUxTCTYKPiArI2RlZmlu ZSBERUZBVUxUIDAKPiArI2RlZmluZSBSQU5ET00gMQo+ICsjZGVmaW5lIERSTV9JT0NUTF9NT0RF X0NSRUFURVBST1BCTE9CCURSTV9JT1dSKDB4QkQsIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxv YikKPiArCj4gK3N0cnVjdCBkcm1faW50ZWxfY3Njewo+ICsJdWludDMyX3QgY3NjX2xldmVsOwo+ ICsJdWludDMyX3QgY3NjX2Zvcm1hdDsKPiArCXVpbnQzMl90IHJlc2VydmVkOwo+ICsJdWludDY0 X3QgY3NjX21hdHJpeFs5XTsKPiArCj4gK307Cj4gKwo+ICsKPiArCj4gK3R5cGVkZWYgc3RydWN0 ewo+ICsJaW50MzJfdCBicmlnaHRuZXNzOwo+ICsJaW50MzJfdCBjb250cmFzdDsKPiArCWZsb2F0 IGdhbW1hOwo+ICt9IENVUlZFX1NMSURFUl9WQUxVRVM7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBy MTZnMTZiMTZfcGl4ZWwgewo+ICsJdWludDE2X3QgcmVkOwo+ICsJdWludDE2X3QgZ3JlZW47Cj4g Kwl1aW50MTZfdCBibHVlOwo+ICt9IHJnYl9waXhlbDsKPiArCj4gK3N0cnVjdCBkcm1faW50ZWxf Z2FtbWF7Cj4gKwl1aW50MzJfdCBmbGFnczsKPiArCXVpbnQzMl90IGdhbW1hX2xldmVsOwo+ICsJ dWludDMyX3QgZ2FtbWFfcHJlY2lzaW9uOwo+ICsJdWludDMyX3QgbnVtX3NhbXBsZXM7Cj4gKwl1 aW50MzJfdCByZXNlcnZlZDsKPiArCXJnYl9waXhlbCBnYW1tYV92YWx1ZXNbMjU3XTsKPiArfTsK PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2Igewo+ICsJdWludDY0X3Qg ZGF0YTsKPiArCXVpbnQzMl90IGxlbmd0aDsKPiArCXVpbnQzMl90IGJsb2JfaWQ7Cj4gK307Cj4g Kwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ICsJaW50IGZiX2luaXRpYWw7Cj4gKwlpbnQgZHJt X2ZkOwo+ICsJaW50IHcsIGg7Cj4gKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gKwlzdHJ1Y3Qg aWd0X2ZiIGZiX3ByZXA7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiLCBmYjE7Cj4gK30gZGF0YV90Owo+ ICsKPiArCXN0YXRpYyB2b2lkCj4gK3BhaW50X2NvbG9yKGRhdGFfdCAqZCwgc3RydWN0IGlndF9m YiAqZmIsIHVpbnQxNl90IHcsIHVpbnQxNl90IGgpCj4gK3sKPiArCWNhaXJvX3QgKmNyOwo+ICsJ Y3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkLT5kcm1fZmQsIGZiKTsKPiArCWlndF9wYWludF90ZXN0 X3BhdHRlcm4oY3IsIHcsIGgpOwo+ICsJY2Fpcm9fZGVzdHJveShjcik7Cj4gK30KPiArCj4gK2lu dCBjcmVhdGVfYmxvYihpbnQgZmQsIHVpbnQ2NF90ICpkYXRhLCBpbnQgbGVuZ3RoKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgYmxvYjsKPiArCWludCByZXQgPSAtMTsKPiAr CWJsb2IuZGF0YSA9ICh1aW50NjRfdClkYXRhOwo+ICsJYmxvYi5sZW5ndGggPSBsZW5ndGg7Cj4g KwlibG9iLmJsb2JfaWQgPSAtMTsKPiArCXJldCA9IGlvY3RsKGZkLCBEUk1fSU9DVExfTU9ERV9D UkVBVEVQUk9QQkxPQiwgJmJsb2IpOwo+ICsJaWYgKCFyZXQpCj4gKwkJcmV0dXJuIGJsb2IuYmxv Yl9pZDsKPiArCXByaW50ZigiQmxvYiBjcmVhdGlvbiBpb2N0bCBmYWlsZWQiKTsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRhdGEs IGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSwKPiArCQlpZ3RfcGxhbmVfdCAq cGxhbmUsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwgZW51bSBpZ3RfY29tbWl0X3N0eWxlIHMpCj4g K3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCj4gKwlp Z3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gKwo+ICsKPiArCS8qIGJlZm9yZSBh bGxvY2F0aW5nLCBmcmVlIGlmIGFueSBvbGRlciBmYiAqLwo+ICsJaWYgKGRhdGEtPmZiX2luaXRp YWwpIHsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiX3ByZXApOwo+ ICsJCWRhdGEtPmZiX2luaXRpYWwgPSAwOwo+ICsJfQo+ICsKPiArCS8qIGFsbG9jYXRlIGZiIGZv ciBwbGFuZSAxICovCj4gKwlkYXRhLT5mYl9pbml0aWFsID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihk YXRhLT5kcm1fZmQsCj4gKwkJCW1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJ RFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCQkJTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQs IC8qIHRpbGVkICovCj4gKwkJCTAsIDAsIDEuMCwKPiArCQkJJmRhdGEtPmZiX3ByZXApOwo+ICsJ aWd0X2Fzc2VydChkYXRhLT5mYl9pbml0aWFsKTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCAmZGF0YS0+ZmJfcHJlcCk7Cj4gKwlpZiAocyA9PSBDT01NSVRfTEVHQUNZKSB7Cj4gKwkJ aW50IHJldDsKPiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsCj4gKwkJCQlv dXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+ICsJCQkJZGF0YS0+ZmJfaW5pdGlhbCwKPiAr CQkJCXBsYW5lLT5wYW5feCwgcGxhbmUtPnBhbl95LAo+ICsJCQkJJm91dHB1dC0+aWQsCj4gKwkJ CQkxLAo+ICsJCQkJbW9kZSk7Cj4gKwkJaWd0X2Fzc2VydChyZXQgPT0gMCk7Cj4gKwl9IGVsc2Ug ewo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgcyk7Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGNsZWFudXBfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0 cHV0LCBpZ3RfcGxhbmVfdCAqcGxhbmUpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSAmZGF0YS0+ZGlzcGxheTsKPiArCj4gKwlpZiAoZGF0YS0+ZmJfaW5pdGlhbCkgewo+ICsJCWln dF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJfcHJlcCk7Cj4gKwkJZGF0YS0+ZmJf aW5pdGlhbCA9IDA7Cj4gKwl9Cj4gKwlpZiAoZGF0YS0+ZmIuZmJfaWQpCj4gKwkJaWd0X3JlbW92 ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYik7Cj4gKwlpZiAoZGF0YS0+ZmIxLmZiX2lkKQo+ ICsJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIxKTsKPiArCj4gKwlpZiAo IXBsYW5lLT5pc19wcmltYXJ5KSB7Cj4gKwkJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gKwo+ICsJ CXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZ KTsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOwo+ICsJfQo+ICsKPiArCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRw dXQsIFBJUEVfQU5ZKTsKPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0xF R0FDWSk7Cj4gK30KPiArCj4gK2ludCBjb252ZXJ0VG9CaW5hcnlTaWduZWQoZmxvYXQgdmFsdWUp Cj4gK3sKPiArCWludCBtYW50aXNzYSA9IDA7Cj4gKwlpbnQgZnJhY3Rpb24gPSAwOwo+ICsJaW50 IHNpZ24gPSAwOwo+ICsJaW50IGxvb3A7Cj4gKwlmbG9hdCBmdG1wOwo+ICsJaW50IHJldCA9IDA7 Cj4gKwlpZiAodmFsdWUgPCAwKSB7Cj4gKwkJc2lnbiA9IDE7Cj4gKwkJdmFsdWUgKj0gKC0xKTsK PiArCX0KPiArCW1hbnRpc3NhID0gKGludCkgdmFsdWUgLyAxOwo+ICsJbWFudGlzc2EgJj0gQ1ND X01BTlRJU1NBX01BWF9WQUxVRTsKPiArCWZ0bXAgPSB2YWx1ZSAtIG1hbnRpc3NhOwo+ICsJZm9y IChsb29wID0gMDsgbG9vcCA8IENTQ19GUkFDVElPTl9NQVhfQklUUzsgbG9vcCsrKSB7Cj4gKwkJ ZnRtcCA9IGZ0bXAgKiAyOwo+ICsJCWlmIChmdG1wID49IDEpIHsKPiArCQkJZnJhY3Rpb24gfD0g MHgxOwo+ICsJCQlmdG1wIC09IDEuMDsKPiArCQl9Cj4gKwkJaWYgKGxvb3AgPT0gKENTQ19GUkFD VElPTl9NQVhfQklUUyAtIDEpKSB7Cj4gKwkJCWJyZWFrOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWZy YWN0aW9uIDw8PSAxOwo+ICsJCX0KPiArCX0KPiArCWZyYWN0aW9uICY9IDB4M0ZGOwo+ICsJcmV0 ID0gKGZyYWN0aW9uIHwgKG1hbnRpc3NhIDw8IENTQ19GUkFDVElPTl9NQVhfQklUUykpOwo+ICsJ aWYgKHNpZ24pIHsKPiArCQlyZXQgPSAofnJldCkgKyAxOwo+ICsJfQo+ICsJcmV0IHw9IChzaWdu IDw8IDExKTsKPiArCXJldCAmPSAweEZGRjsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArdm9pZCBj c2NXcml0ZShmbG9hdCAqY3NjX3ZhbCwgdWludDY0X3QgKmNzY19tYXRyaXgpCj4gK3sKPiArCWZv ciAoaW50IGkgPSAwOyBpIDwgQ0hWX0NTQ19WQUxTOyBpKyspIHsKPiArCQljc2NfbWF0cml4W2ld ID0gKHVpbnQ2NF90KWNvbnZlcnRUb0JpbmFyeVNpZ25lZChjc2NfdmFsW2ldKTsKPiArCX0KPiAr fQo+ICsKPiArdm9pZCBnZW5lcmF0ZUN1cnZlRnJvbVNsaWRlcihDVVJWRV9TTElERVJfVkFMVUVT ICpwU2xpZGVyLCB1aW50MTZfdCAqcEN1cnZlLCB1aW50MzJfdCBudW1fc2FtcGxlcykKPiArewo+ ICsJZG91YmxlIGRHYW1tYSA9IChkb3VibGUpcFNsaWRlci0+Z2FtbWE7Cj4gKwlkb3VibGUgZEJy aWdodG5lc3MgPSAoZG91YmxlKXBTbGlkZXItPmJyaWdodG5lc3MgKiAyNTY7Owo+ICsJZG91Ymxl IGRDb250cmFzdCA9IChkb3VibGUpcFNsaWRlci0+Y29udHJhc3Q7Cj4gKwlkb3VibGUgZFNsb3Bl LCBkT3V0cHV0LCBvdXRWYWw7Cj4gKwl1aW50MzJfdCBpbnB1dCwgaW5kZXgsIGk7Cj4gKwlpbnQg bWF4VmFsID0gNjU1MzU7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXMqMjsgaSsrKSB7 Cj4gKwkJb3V0VmFsID0gKGRvdWJsZSkoMjU1ICogcG93KCgoZG91YmxlKWkgLyAyNTUuMCksIChT VEFOREFSRF9HQU1NQSAvIGRHYW1tYSkpKTsKPiArCQlvdXRWYWwgKz0gMC41Owo+ICsJCWlmICht YXhWYWwgPCBvdXRWYWwpIHsKPiArCQkJb3V0VmFsID0gbWF4VmFsOwo+ICsJCX0KPiArCQlwQ3Vy dmVbaV0gPSBvdXRWYWw7Cj4gKwl9Cj4gKwlkU2xvcGUgPSAxLjAgKyBkQ29udHJhc3QgLyAxMDAu MDsKPiArCWZvciAoaW5wdXQgPSAwOyBpbnB1dCA8IG51bV9zYW1wbGVzKjI7IGlucHV0KyspIHsK PiArCQlkT3V0cHV0ID0gZFNsb3BlICogcEN1cnZlW2lucHV0XTsKPiArCQlkT3V0cHV0ICs9IGRC cmlnaHRuZXNzICsgMC41Owo+ICsJCWlmIChkT3V0cHV0ID4gbWF4VmFsKQo+ICsJCQlkT3V0cHV0 ID0gbWF4VmFsOwo+ICsJCWlmIChkT3V0cHV0IDwgMCkKPiArCQkJZE91dHB1dCA9IDA7Cj4gKwkJ cEN1cnZlW2lucHV0XSA9IGRPdXRwdXQ7Cj4gKwl9Cj4gK30KPiArdm9pZCB3cml0ZUN1cnZlQ3N2 KHVpbnQxNl90ICpwQ3VydmVEYXRhLCB1aW50MzJfdCBudW1fc2FtcGxlcywgcmdiX3BpeGVsICpn YW1tYV9wdHIpCj4gK3sKPiArCXVpbnQxNl90ICpwUmVkLCAqcEdyZWVuLCAqcEJsdWU7Cj4gKwl1 aW50NjRfdCBpLCBpbmRleDsKPiArCj4gKwlwUmVkID0gcEN1cnZlRGF0YTsKPiArCXBHcmVlbiA9 IHBDdXJ2ZURhdGE7Cj4gKwlwQmx1ZSA9IHBDdXJ2ZURhdGE7Cj4gKwlmb3IgKGkgPSAwOyBpIDwg bnVtX3NhbXBsZXM7IGkrKykgewo+ICsJCWluZGV4ID0gaSAqIDI7Cj4gKwkJZ2FtbWFfcHRyW2ld LnJlZCA9IHBSZWRbaW5kZXhdOwo+ICsJCWdhbW1hX3B0cltpXS5ncmVlbiA9IHBHcmVlbltpbmRl eF07Cj4gKwkJZ2FtbWFfcHRyW2ldLmJsdWUgPSBwQmx1ZVtpbmRleF07Cj4gKwl9Cj4gK30KPiAr Cj4gK3ZvaWQgZ2FtbWFQaXBlKGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsIGZsb2F0IGdh bW1hLCB1aW50MzJfdCBudW1fc2FtcGxlcywgcmdiX3BpeGVsICpnYW1tYV9wdHIpCj4gK3sKPiAr CUNVUlZFX1NMSURFUl9WQUxVRVMgc1NsaWRlRGF0YTsKPiArCXVpbnQxNl90IHBDdXJ2ZVsyKm51 bV9zYW1wbGVzXTsKPiArCj4gKwlzU2xpZGVEYXRhLmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOwo+ ICsJc1NsaWRlRGF0YS5jb250cmFzdCA9IGNvbnRyYXN0Owo+ICsJc1NsaWRlRGF0YS5nYW1tYSA9 IGdhbW1hOwo+ICsJZ2VuZXJhdGVDdXJ2ZUZyb21TbGlkZXIoJnNTbGlkZURhdGEsIHBDdXJ2ZSwg bnVtX3NhbXBsZXMpOwo+ICsJd3JpdGVDdXJ2ZUNzdihwQ3VydmUsIG51bV9zYW1wbGVzLCBnYW1t YV9wdHIpOwo+ICt9Cj4gKwo+ICtpbnQgc2V0X2NvbG9yX3Byb3BlcnR5KGludCBkcm1fZmQsIGlu dCBpZCwgaW50IG9iamVjdCwgY2hhciAqcHJvcF9uYW1lLCBpbnQgYmxvYl9pZCkKPiArewo+ICsJ aW50IGkgPSAwLCByZXM7Cj4gKwo+ICsJZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHMg PSBOVUxMOwo+ICsKPiArCWlmIChpZCA8IDAgfHwgKChvYmplY3QgIT0gRFJNX01PREVfT0JKRUNU X0NSVEMpICYmIChvYmplY3QgIT0gRFJNX01PREVfT0JKRUNUX1BMQU5FKSkpIHsKPiArCQlwcmlu dGYoIkludmFsaWQgaW5wdXQgdG8gc2V0IGNvbG9yIHByb3BlcnR5ICglZCBhbmQgJWQpIiwgaWQs IG9iamVjdCk7Cj4gKwkJcmV0dXJuIC0xOwo+ICsJfQo+ICsKPiArCXByb3BzID0gZHJtTW9kZU9i amVjdEdldFByb3BlcnRpZXMoZHJtX2ZkLCBpZCwgb2JqZWN0KTsKPiArCWlmICghcHJvcHMpIHsK PiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3By b3BzOyBpKyspIHsKPiArCQlkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCA9IGRybU1vZGVHZXRQcm9w ZXJ0eShkcm1fZmQsIHByb3BzLT5wcm9wc1tpXSk7Cj4gKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1l LCBwcm9wX25hbWUpID09IDApIHsKPiArCQkJLyogRm91bmQgcHJvcGVydHksIG5vdyBzZXQgdGhl IHZhbHVlcyAqLwo+ICsJCQlyZXMgPSBkcm1Nb2RlT2JqZWN0U2V0UHJvcGVydHkoZHJtX2ZkLCBp ZCwgb2JqZWN0LCAodWludDMyX3QpcHJvcC0+cHJvcF9pZCwgYmxvYl9pZCk7Cj4gKwkJCWlmIChy ZXMpIHsKPiArCQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gKwkJCQlkcm1Nb2RlRnJl ZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwo+ICsJCQkJcmV0dXJuIHJlczsKPiArCQkJfSBlbHNl IHsKPiArCQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gKwkJCQlicmVhazsKPiArCQkJ fQo+ICsJCX0KPiArCj4gKwkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKPiArCX0KPiArCWRy bU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7Cj4gKwlpZiAoaSA9PSBwcm9wcy0+Y291 bnRfcHJvcHMpIHsKPiArCQkvKiBQcm9wZXJ0eSBub3QgZm91bmQgKi8KPiArCQlwcmludGYoIlxu c2V0X3Byb3BlcnR5IFwiJXNcIiBObyBzdWNoIHByb3BlcnR5XG4iLCBwcm9wX25hbWUpOwo+ICsJ CXJldHVybiAtMTsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gK3ZvaWQgdGVzdF9waXBlX2Nz YyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaWd0X3BsYW5l X3QgKnBsYW5lLCB1aW50MzJfdCBjc2NfZm9ybWF0LCBpbnQgdmFsdWUpCj4gK3sKPiArCXN0cnVj dCBkcm1faW50ZWxfY3NjICpjc2NfZGF0YSA9IE5VTEw7Cj4gKwljc2NfZGF0YSA9IChzdHJ1Y3Qg ZHJtX2ludGVsX2NzYyAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1faW50ZWxfY3NjKSk7Cj4g Kwljc2NfZGF0YS0+Y3NjX2xldmVsID0gSTkxNV9QSVBFX0NTQzsKPiArCWNzY19kYXRhLT5jc2Nf Zm9ybWF0ID0gY3NjX2Zvcm1hdDsKPiArCWludDY0X3QgY3NjX21hdHJpeFtDSFZfQ1NDX1ZBTFNd Owo+ICsJZmxvYXQgIGNzY192YWxbQ0hWX0NTQ19WQUxTXTsKPiArCWZsb2F0IGNzY19yYW5kb21b Q0hWX0NTQ19WQUxTXSA9IHsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxfTsKPiArCWZsb2F0IGNz Y19kZWZhdWx0W0NIVl9DU0NfVkFMU10gPSB7MSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMX07Cj4g KwlpbnQgaSwgcmVzOwo+ICsJaWYgKHZhbHVlID09IERFRkFVTFQpCj4gKwkJbWVtY3B5KGNzY192 YWwsIGNzY19kZWZhdWx0LCBzaXplb2YoY3NjX3ZhbCkpOwo+ICsJZWxzZQo+ICsJCW1lbWNweShj c2NfdmFsLCBjc2NfcmFuZG9tLCBzaXplb2YoY3NjX3ZhbCkpOwo+ICsKPiArCWNzY1dyaXRlKGNz Y192YWwsIGNzY19tYXRyaXgpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBDSFZfQ1NDX1ZBTFM7 IGkrKykgewo+ICsJCWNzY19kYXRhLT5jc2NfbWF0cml4W2ldID0gY3NjX21hdHJpeFtpXTsKPiAr CX0KPiArCj4gKwo+ICsJaW50IGJsb2JfaWQgPSBjcmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQs ICh1aW50NjRfdCAqKShjc2NfZGF0YSksIHNpemVvZihzdHJ1Y3QgZHJtX2ludGVsX2NzYykpOwo+ ICsKPiArCWlndF9hc3NlcnQoYmxvYl9pZCA+IDApOwo+ICsKPiArCXJlcyA9IHNldF9jb2xvcl9w cm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsIERS TV9NT0RFX09CSkVDVF9DUlRDLCAiY3NjX3Byb3BlcnR5IiwgYmxvYl9pZCk7Cj4gKwlpZiAocmVz IDwgMCkgewo+ICsJCXByaW50ZigiU2V0dGluZyBDU0MgZmFpbGVkISIpOwo+ICsJfQo+ICsJZnJl ZShjc2NfZGF0YSk7Cj4gKwo+ICsKPiArfQo+ICsKPiArdm9pZCB0ZXN0X3BpcGVfZ2FtbWEoaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGlndF9wbGFuZV90ICpw bGFuZSwgZmxvYXQgZ2FtbWEsIGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsIHVpbnQzMl90 IGdhbW1hX3ByZWNpc2lvbiwgdWludDMyX3QgbnVtX3NhbXBsZXMpCj4gK3sKPiArCXN0cnVjdCBk cm1faW50ZWxfZ2FtbWEgKmdhbW1hX2RhdGEgPSAgTlVMTDsKPiArCWludCByZXM7Cj4gKwlnYW1t YV9kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2ludGVsX2dhbW1hKSArIChudW1fc2Ft cGxlcyAqIHNpemVvZihyZ2JfcGl4ZWwpKSk7Cj4gKwlnYW1tYV9kYXRhLT5mbGFncyA9IDA7Cj4g KwlnYW1tYV9kYXRhLT5nYW1tYV9sZXZlbCA9IEk5MTVfUElQRV9HQU1NQTsKPiArCWdhbW1hX2Rh dGEtPmdhbW1hX3ByZWNpc2lvbiA9IGdhbW1hX3ByZWNpc2lvbjsKPiArCWdhbW1hX2RhdGEtPm51 bV9zYW1wbGVzID0gbnVtX3NhbXBsZXM7Cj4gKwlyZ2JfcGl4ZWwgZ2FtbWFfcHRyW251bV9zYW1w bGVzXTsKPiArCWdhbW1hUGlwZShicmlnaHRuZXNzLCBjb250cmFzdCwgZ2FtbWEsIG51bV9zYW1w bGVzLCBnYW1tYV9wdHIpOwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsr KSB7Cj4gKwkJZ2FtbWFfZGF0YS0+Z2FtbWFfdmFsdWVzW2ldID0gZ2FtbWFfcHRyW2ldOwo+ICsJ fQo+ICsKPiArCj4gKwlpbnQgYmxvYl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwg KHVpbnQ2NF90ICopKGdhbW1hX2RhdGEpLCBzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9nYW1tYSkg KyAobnVtX3NhbXBsZXMgKiBzaXplb2YocmdiX3BpeGVsKSkpOwo+ICsJaWd0X2Fzc2VydChibG9i X2lkID4gMCk7Cj4gKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBv dXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgImdhbW1h X3Byb3BlcnR5IiwgYmxvYl9pZCk7Cj4gKwlpZiAocmVzIDwgMCkgewo+ICsJCXByaW50ZigiU2V0 dGluZyBHYW1tYSBmYWlsZWQhIik7Cj4gKwl9Cj4gKwlmcmVlKGdhbW1hX2RhdGEpOwo+ICt9Cj4g K3ZvaWQgdGVzdF9waXBlX2NvbG9yKGRhdGFfdCAqZGF0YSwgY2hhciAqcHJvcF9uYW1lLCBpbnQg dmFsdWUpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsK PiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ICsJaWd0X3BsYW5lX3QgKnBsYW5lOwo+ICsJZW51 bSBwaXBlIHBpcGU7Cj4gKwllbnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0ID0gQ09NTUlUX0xF R0FDWTsKPiArCWludCByZXMsIGk7Cj4gKwlpbnQgZmJfaWQsIGZiX2lkMTsKPiArCWludCB3aWR0 aCwgaGVpZ2h0Owo+ICsJdWludDMyX3QgcGl4ZWxmb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4 Owo+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5LCBvdXRwdXQpIHsKPiArCQlk cm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwkJcGlwZSA9IG91dHB1dC0+Y29uZmlnLnBpcGU7Cj4g KwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ICsJCW1vZGUgPSBpZ3Rfb3V0 cHV0X2dldF9tb2RlKG91dHB1dCk7Cj4gKwkJLypEcmF3IHRoZSBpbml0aWFsIHByaW1hcnkgcGxh bmUqLwo+ICsJCXBsYW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVf UFJJTUFSWSk7Cj4gKwo+ICsJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5l LCBtb2RlLCBjb21taXQpOwo+ICsJCXBsYW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0 LCBJR1RfUExBTkVfMik7Cj4gKwkJZmJfaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRy bV9mZCwKPiArCQkJCXdpZHRoLCBoZWlnaHQsCj4gKwkJCQlwaXhlbGZvcm1hdCwKPiArCQkJCUxP Q0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCQkxLjAsCj4gKwkJCQkwLjAsCj4gKwkJCQkw LjAsCj4gKwkJCQkmZGF0YS0+ZmIpOwo+ICsJCWlndF9hc3NlcnQoZmJfaWQpOwo+ICsJCXBsYW5l LT5jcnRjX3ggPSAwOwo+ICsJCXBsYW5lLT5jcnRjX3kgPSAwOwo+ICsJCXBsYW5lLT5mYl9jaGFu Z2VkID0gdHJ1ZTsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIpOwo+ICsJ CS8qIHNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBmb3Igc3ByaXRlIHBsYW5lIDIuICovCj4gKwkJ d2lkdGggPSAyMDA7Cj4gKwkJaGVpZ2h0ID0gMjAwOwo+ICsJCXBsYW5lID0gaWd0X291dHB1dF9n ZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMyk7Cj4gKwkJZmJfaWQgPSBpZ3RfY3JlYXRlX2Nv bG9yX2ZiKGRhdGEtPmRybV9mZCwKPiArCQkJCXdpZHRoLCBoZWlnaHQsCj4gKwkJCQlwaXhlbGZv cm1hdCwKPiArCQkJCUxPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCQkwLjAsCj4gKwkJ CQkwLjAsCj4gKwkJCQkxLjAsCj4gKwkJCQkmZGF0YS0+ZmIxKTsKPiArCQlpZ3RfYXNzZXJ0KGZi X2lkKTsKPiArCj4gKwkJcGxhbmUtPmNydGNfeCA9IDMwOwo+ICsJCXBsYW5lLT5jcnRjX3kgPSAz MDsKPiArCQlwbGFuZS0+ZmJfY2hhbmdlZCA9IHRydWU7Cj4gKwkJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgJmRhdGEtPmZiMSk7Cj4gKwo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwg Y29tbWl0KTsKPiArCQl1c2xlZXAoMjAwMDAwMCk7Cj4gKwkJaWYgKChzdHJjbXAocHJvcF9uYW1l LCAiZ2FtbWFfcHJvcGVydHkiKSA9PSAwKSAmJiB2YWx1ZSA9PSBERUZBVUxUKSB7Cj4gKwkJCXRl c3RfcGlwZV9nYW1tYShkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCAxLCA1MCwgNTAsIEk5MTVfR0FN TUFfUFJFQ0lTSU9OX0xFR0FDWSwgQ0hWXzhCSVRfR0FNTUFfTUFYX1ZBTFMpOwo+ICsJCX0gZWxz ZSAgaWYgKChzdHJjbXAocHJvcF9uYW1lLCAiZ2FtbWFfcHJvcGVydHkiKSA9PSAwKSAmJiB2YWx1 ZSA9PSBSQU5ET00pIHsKPiArCQkJdGVzdF9waXBlX2dhbW1hKGRpc3BsYXksIG91dHB1dCwgcGxh bmUsIDEuNSwgMTAsIDIwLCBJOTE1X0dBTU1BX1BSRUNJU0lPTl9MRUdBQ1ksIENIVl84QklUX0dB TU1BX01BWF9WQUxTKTsKPiArCQl9IGVsc2UgIGlmICgoc3RyY21wKHByb3BfbmFtZSwgImNzY19w cm9wZXJ0eSIpID09IDApKSB7Cj4gKwkJCXRlc3RfcGlwZV9jc2MoZGlzcGxheSwgb3V0cHV0LCBw bGFuZSwgSTkxNV9DU0NfQ09FRkZfRk9STUFUX1MyXzI5LCB2YWx1ZSk7Cj4gKwkJfSBlbHNlIHsK PiArCQkJcHJpbnRmKCJJbnZhbGlkIFRlc3RcbiIpOwo+ICsJCX0KPiArCQlwbGFuZSA9IGlndF9v dXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzMpOwo+ICsJCWNsZWFudXBfY3J0Yyhk YXRhLCBvdXRwdXQsIHBsYW5lKTsKPiArCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91 dHB1dCwgSUdUX1BMQU5FXzIpOwo+ICsJCWNsZWFudXBfY3J0YyhkYXRhLCBvdXRwdXQsIHBsYW5l KTsKPiArCj4gKwl9Cj4gK30KPiArCj4gK2lndF9tYWluCj4gK3sKPiArCWRhdGFfdCBkYXRhID0g e307Cj4gKwlpbnQgZ2VuID0gMDsKPiArCWludCBwbGFuZV9pdCA9IDAsIGl0X3JvdGF0aW9uID0g MCwgaXRfdGlsaW5nID0gMDsKPiArCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiArCj4gKwlp Z3RfZml4dHVyZXsKPiArCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2FueV9tYXN0ZXIoKTsKPiAr Cj4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ICsKPiArCQlpZ3RfZGlzcGxh eV9pbml0KCZkYXRhLmRpc3BsYXksIGRhdGEuZHJtX2ZkKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0 X2YoIkVuYWJsZV9HYW1tYSIpIHsKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1tYV9w cm9wZXJ0eSIsIFJBTkRPTSk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfRGVmYXVs dF9HYW1tYSIpIHsKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1tYV9wcm9wZXJ0eSIs IERFRkFVTFQpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3RfZigiRW5hYmxlX0NTQyIpIHsKPiArCQl0 ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJjc2NfcHJvcGVydHkiLCBSQU5ET00pOwo+ICsJfQo+ICsJ aWd0X3N1YnRlc3RfZigiRW5hYmxlX0RlZmF1bHRfQ1NDIikgewo+ICsJCXRlc3RfcGlwZV9jb2xv cigmZGF0YSwgImNzY19wcm9wZXJ0eSIsIERFRkFVTFQpOwo+ICsJfQo+ICsJaWd0X2ZpeHR1cmV7 Cj4gKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKPiArCX0KPiArfQo+ICsKPiAt LSAKPiAxLjkuMQo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBD ZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK