From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 570646E075 for ; Fri, 21 Sep 2018 20:36:07 +0000 (UTC) Date: Fri, 21 Sep 2018 13:36:06 -0700 From: Tarun Vyas Message-ID: <20180921203606.GA125488@otc-chromeosbuild-5> References: <20180914235702.27428-1-tarun.vyas@intel.com> <1795913.BsR4cFQdua@dk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1795913.BsR4cFQdua@dk> Subject: Re: [igt-dev] [PATCH i-g-t v3] tools: Add a simple tool to read/write/decode dpcd registers 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: Dhinakaran Pandiyan Cc: igt-dev@lists.freedesktop.org, rodrigo.vivi@intel.com List-ID: T24gVGh1LCBTZXAgMjAsIDIwMTggYXQgMTE6MTI6NDlQTSAtMDcwMCwgRGhpbmFrYXJhbiBQYW5k aXlhbiB3cm90ZToKPiBPbiBGcmlkYXksIFNlcHRlbWJlciAxNCwgMjAxOCA0OjU3OjAyIFBNIFBE VCBUYXJ1biBWeWFzIHdyb3RlOgo+ID4gVGhpcyB0b29sIHNlcnZlcyBhcyBhIHdyYXBwZXIgYXJv dW5kIHRoZSBjb25zdHJ1Y3RzIHByb3ZpZGVkIGJ5IHRoZQo+ID4gZHJtX2RwY2RfYXV4X2RldiBr ZXJuZWwgbW9kdWxlIGJ5IHdvcmtpbmcgb24gdGhlIC9kZXYvZHJtX2RwX2F1eFtuXQo+ID4gZGV2 aWNlcyBjcmVhdGVkIGJ5IHRoZSBrZXJuZWwgbW9kdWxlLgo+ID4gSXQgc3VwcG9ydHMgcmVhZGlu ZyBhbmQgd3JpdGluZyBkcGNkIHJlZ2lzdGVycyBvbiB0aGUgY29ubmVjdGVkIGF1eAo+ID4gY2hh bm5lbHMuCj4gPiBJbiB0aGUgZm9sbG93LXVwIHBhdGNoLCBzdXBwb3J0IGZvciBkZWNvZGluZyB0 aGVzZSByZWdpc3RlcnMgd2lsbCBiZQo+ID4gYWRkZWQgdG8gZmFjaWxhdGUgZGVidWdnaW5nIHBh bmVsIHJlbGF0ZWQgaXNzdWVzLgo+ID4gCj4gPiB2MjogKEZpeGVzIGJ5IFJvZHJpZ28gYnV0IG5v IGZ1bmN0aW9uYWwgY2hhbmdlcyB5ZXQpOgo+ID4gICAgIC0gSW5kZW50YXRpb25zLCBUeXBvLCBN aXNzZWQgc3BhY2VzCj4gPiAgICAgLSBSZW1vdmluZyBtZW50aW9uaW5nIHRvIGRlY29kZSBhbmQg c3BlYyB0aGF0IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCj4gPiAgICAgLSBBZGQgTWFrZWZpbGUu c291cmNlcyBiYWNrCj4gPiAgICAgLSBNaXNzZWQgcy9wcmludGYvaWd0X3dhcm4KPiA+IAo+ID4g djM6Cj4gPiAgICAgLSBBZGRyZXMgREsncyByZXZpZXcgY29tbWVudHMgZnJvbSB2MiBhYm92ZS4K PiA+ICAgICAtIFNxdWFzaCBSb2RyaWdvJ3MgZmlsZSBoYW5kbGluZyB1bmlmaWNhdGlvbiBwYXRj aC4KPiA+ICAgICAtIE1ha2UgY291bnQsIG9mZnNldCBhbmQgZGV2aWNlIGlkIG9wdGlvbmFsLgo+ ID4gCj4gPiBTdWdnZXN0ZWQtYnk6IERoaW5ha2FyYW4gUGFuZGl5YW4gPGRoaW5ha2FyYW4ucGFu ZGl5YW5AaW50ZWwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogVGFydW4gVnlhcyA8dGFydW4udnlh c0BpbnRlbC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2 aUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICB0b29scy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsK PiA+ICB0b29scy9kcGNkX3JlZy5jICAgICAgIHwgMjEzCj4gPiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIHRvb2xzL21lc29uLmJ1aWxkICAgICAgfCAK PiA+ICAxICsKPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDIxNSBpbnNlcnRpb25zKCspCj4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2RwY2RfcmVnLmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3Rv b2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29scy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBpbmRleCBh YmQyM2EwZi4uNTA3MDZmNDEgMTAwNjQ0Cj4gPiAtLS0gYS90b29scy9NYWtlZmlsZS5zb3VyY2Vz Cj4gPiArKysgYi90b29scy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBAQCAtNyw2ICs3LDcgQEAgbm9p bnN0X1BST0dSQU1TID0JCVwKPiA+IAo+ID4gIHRvb2xzX3Byb2dfbGlzdHMgPQkJXAo+ID4gIAlp Z3Rfc3RhdHMJCVwKPiA+ICsJZHBjZF9yZWcJCVwKPiA+ICAJaW50ZWxfYXVkaW9fZHVtcAlcCj4g PiAgCWludGVsX3JlZwkJXAo+ID4gIAlpbnRlbF9iYWNrbGlnaHQJCVwKPiA+IGRpZmYgLS1naXQg YS90b29scy9kcGNkX3JlZy5jIGIvdG9vbHMvZHBjZF9yZWcuYwo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwLi5jZDlmZWQ0Zgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4g KysrIGIvdG9vbHMvZHBjZF9yZWcuYwo+ID4gQEAgLTAsMCArMSwyMTMgQEAKPiA+ICsvKgo+ID4g KyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ICJTb2Z0d2FyZSIpLCArICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCj4gPiB3aXRob3V0 IGxpbWl0YXRpb24gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLAo+ID4gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwo+ID4gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUg KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwo+ID4gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQo+ID4gbmV4dCArICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zCj4gPiBvZiB0aGUgKyAqIFNvZnR3YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MKPiA+IE9SICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GCj4gPiBNRVJDSEFOVEFCSUxJVFksICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAKPiA+IElOIE5PIEVWRU5U IFNIQUxMICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWQo+ID4gQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCj4gPiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG Uk9NLCArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKPiA+IFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFICsgKiBTT0ZUV0FSRS4KPiA+ICsgKgo+ ID4gKyAqIERQQ0QgcmVnaXN0ZXIgcmVhZC93cml0ZSB0b29sCj4gPiArICogVGhpcyB0b29sIHdy YXBzIGFyb3VuZCBEUk1fRFBfQVVYX0RFViBtb2R1bGUgdG8gcHJvdmlkZSBEUENEIHJlZ2lzdGVy Cj4gPiByZWFkICsgKiBhbmQgd3JpdGUsIHNvIENPTkZJR19EUk1fRFBfQVVYX0RFViBuZWVkcyB0 byBiZSBzZXQuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgImlndF9jb3JlLmgiCj4gV2hh dCdzIHRoZSBkZXBlbmRlbmN5IG9uIGlndF9jb3JlIGhlcmU/Cj4KRm9yZ290IHRvIHJlbW92ZSBp dC4gCj4gPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbWl0cy5oPgo+ID4gKwo+ID4gKyNkZWZpbmUgTUFYX09GRlNFVAkweGYwMmZm Cj4gSSB0aGluayB3ZSBzaG91bGQgYmUgYWJsZSB0byBhbGxvdyBhbGxvdyB1cCB0byB0aGUgbWF4 IGxpbWl0IG9mIDB4ZmZmZmYgKERQIAo+IDEuNCBzZWN0aW9uIDIuOS4zKQo+IApXaWxsIG1vZGlm eS4KPiA+ICsKPiA+ICtjb25zdCBjaGFyIGF1eF9kZXZbXSA9ICIvZGV2L2RybV9kcF9hdXgiOwo+ ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHByaW50X3VzYWdlKGNoYXIgKnRvb2wsIGludCBleGl0X2Nv ZGUpCj4gPiArewo+ID4gKwlwcmludGYoIkRQQ0QgcmVnaXN0ZXIgcmVhZCBhbmQgd3JpdGUgdG9v bFxuXG4iKTsKPiA+ICsJcHJpbnRmKCJUaGlzIHRvb2wgcmVxdWlyZXMgQ09ORklHX0RSTV9EUF9B VVhfQ0hBUkRFVlxuIgo+ID4gKwkJICJ0byBiZSBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG5c biIpOwo+IEkgdGhpbmsgaXQgd291bGQgbG9vayBiZXR0ZXIgdG8gcHJpbnQgdGhlIGFib3ZlIGxp bmVzIG9ubHkgd2hlbiAtLWhlbHAvLWggd2FzIAo+IHBhc3NlZC4gIE1vdmUgdGhpcyB1bmRlciAg Y2FzZSAnaCcgPwo+IApXaWxsIGRvCj4gPiArCXByaW50ZigiVXNhZ2U6ICVzIFtPUFRJT04gLi4u XSBDT01NQU5EXG5cbiIsIHRvb2wpOwo+ID4gKwlwcmludGYoIkNPTU1BTkQgaXMgb25lIG9mOlxu Iik7Cj4gPiArCXByaW50ZigiICByZWFkOgkJUmVhZCBbY291bnRdIGJ5dGVzIGRwY2QgcmVnIGF0 IGFuIG9mZnNldFxuIik7Cj4gPiArCXByaW50ZigiICB3cml0ZToJV3JpdGUgYSBkcGNkIHJlZyBh dCBhbiBvZmZzZXRcblxuIik7Cj4gPiArCXByaW50ZigiT3B0aW9ucyBmb3IgdGhlIGFib3ZlIENP TU1BTkRTIGFyZVxuIik7Cj4gPiArCXByaW50ZigiIC0tZGV2aWNlPURFVklECQlBdXggZGV2aWNl IGlkLCBhcyBsaXN0ZWQgaW4KPiA+IC9kZXYvZHJtX2RwX2F1eF9kZXZbbl0uIiArCQkJCQkiRGVm YXVsdHMgdG8gMFxuIik7Cj4gPiArCXByaW50ZigiIC0tb2Zmc2V0PVJFR19BRERSCURQQ0QgcmVn aXN0ZXIgb2Zmc2V0IGluIGhleC4gRGVmYXVsdHMgdG8KPiA+IDB4MDBcbiIpOyArCXByaW50Zigi IC0tY291bnQ9QllURVMJCUZvciByZWFkcywgc3BlY2lmeSBudW1iZXIgb2YgYnl0ZXMgdG8KPiA+ IGJlIHJlYWQgZnJvbSIgKwkJCQkJInRoZSBvZmZzZXQuIERlZmF1bHRzIHRvIDFcbiIpOwo+ID4g KwlwcmludGYoIiAtLXZhbAkJCUZvciB3cml0ZXMsIHNwZWNpZnkgYSBoZXggdmFsdWUgdG8gYmUg d3JpdHRlblxuXG4iKTsKPiA+ICsKPiA+ICsJcHJpbnRmKCIgLS1oZWxwOiBwcmludCB0aGUgdXNh Z2VcbiIpOwo+ID4gKwo+ID4gKwlleGl0KGV4aXRfY29kZSk7Cj4gTW9kaWZ5IHRoZSBjYWxsZXJz IHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZXhpdCBmcm9tIGEgcHJpbnQgZnVuY3Rpb24uIAo+ CldpbGwgZG8uIAo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRwY2RfcmVhZChpbnQgZmQs IGNvbnN0IHVpbnQzMl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQo+IGNvbnN0IGlzIG5vdCBuZWVk ZWQgYXMgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ5IHZhbHVlLgo+IApXaWxsIHJlbW92ZSBp dC4KPiA+ICt7Cj4gPiArCWludCByZXQsIGk7Cj4gPiArCXZvaWQgKmJ1ZiA9IGNhbGxvYyhjb3Vu dCwgc2l6ZW9mKHVpbnQ4X3QpKTsKPiB1aW50OF90ICpidWYgPwo+IApIZWgsIHllYS4KPiA+ICsK PiA+ICsJaWYgKCFidWYpIHsKPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgYWxsb2NhdGUg cmVhZCBidWZmZXJcbiIpOwo+ID4gKwkJcmV0dXJuIEVOT01FTTsKPiA+ICsJfQo+ID4gKwo+ID4g KwlyZXQgPSBwcmVhZChmZCwgYnVmLCBjb3VudCwgb2Zmc2V0KTsKPiA+ICsJaWYgKHJldCAhPSBj b3VudCkgewo+ID4gKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCAtICVzXG4iLCBz dHJlcnJvcihlcnJubykpOwo+IFByaW50IHJldCB0b28/IElmIHRoZSBudW1iZXIgb2YgYnl0ZXMg cmVhZCB3ZXJlIGxvd2VyLCBlcnJubyB3b24ndCBiZSBzZXQuCj4gCk9rCj4gPiArCQlyZXQgPSBl cnJubzsKPiA+ICsJCWdvdG8gb3V0Owo+ID4gKwl9IGVsc2UKPiB9IGVsc2Ugewo+IAo+ID4gKwkJ cmV0ID0gRVhJVF9TVUNDRVNTOwo+IEludGlhbGl6ZSByZXQgIGFuZCBnZXQgcmlkIG9mIHRoZSBl bHNlIGJsb2NrPwo+IApBeWUKPiA+ICsKPiA+ICsJcHJpbnRmKCJSZWFkICV6dSBieXRlKHMpIHN0 YXJ0aW5nIGF0IG9mZnNldCAleFxuXG4iLCBjb3VudCwgb2Zmc2V0KTsKPiBQcmludCB0aGlzIGRl YnVnIG1lc3NhZ2Ugb25seSBpZiB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGJ5dGVzIHdlcmVuJ3Qg cmVhZCBhbmQgCj4gc29tZXRoaW5nIGxpa2UgcHJpbnRmKCJSZWFkICV6dSBieXRlcywgZXhwZWN0 ZWQgJXp1XG4iKTsKPiAKPiBwcmludGYoIjB4Iik7IHRvIGNsYXJpZnkgdGhhdCB0aGUgcHJpbnRl ZCB2YWx1ZXMgYXJlIGluIGhleC4KV2lsbCBtb2RpZnkKPiA+ICsJZm9yIChpID0gMDsgaSA8IGNv dW50OyBpKyspCj4gPiArCQlwcmludGYoIiAlMDJ4IiwgKigoKHVpbnQ4X3QgKikoYnVmKSkgKyBp KSk7Cj4gWW91IGNhbiBhdm9pZCB0eXBlY2FzdGluZyBpZiB5b3UgZGVmaW5lIHRoZSBhcnJheSBh cyB0eXBlIHVpbnQ4X3QKPiAKPiA+ICsJcHJpbnRmKCJcbiIpOwo+ID4gKwo+ID4gK291dDoKPiA+ ICsJZnJlZShidWYpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg aW50IGRwY2Rfd3JpdGUoaW50IGZkLCBjb25zdCB1aW50MzJfdCBvZmZzZXQsIGNvbnN0IHVpbnQ4 X3QgdmFsKQo+IGNvbnN0IGlzbid0IG5lZWRlZC4KPiAKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4g PiArCj4gPiArCXJldCA9IHB3cml0ZShmZCwgKGNvbnN0IHZvaWQgKikmdmFsLCBzaXplb2YodWlu dDhfdCksIG9mZnNldCk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlmcHJpbnRmKHN0ZGVy ciwgIkZhaWxlZCB0byB3cml0ZSAtICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+IFNhbWUgYXMg YWJvdmUsIHByaW50IG51bWJlciBvZiBieXRlcyB3cml0dGVuIGluIGNhc2Ugb2YgZXJyb3IuCj4g Cj4gPiArCQlyZXR1cm4gZXJybm87Cj4gPiArCX0gZWxzZQo+ID4gKwkJcmV0dXJuIEVYSVRfU1VD Q0VTUzsKPiBZb3UgY291bGQgYXZvaWQgJ2Vsc2UnIGhlcmUuCj4gCj4gPiArfQo+ID4gKwo+ID4g K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiA+ICt7Cj4gPiArCWNoYXIgZGV2X25h bWVbMjBdOwo+ID4gKwlpbnQgcmV0LCBkZXZpZCwgZmQsIHZmbGFnID0gMDsKPiA+ICsJdWludDMy X3Qgb2Zmc2V0Owo+ID4gKwl1aW50OF90IHZhbDsKPiA+ICsJc2l6ZV90IGNvdW50Owo+ID4gKwlp bnQgZmlsZV9vcCA9IE9fUkRPTkxZOwo+ID4gKwo+ID4gKwllbnVtIGNvbW1hbmQgewo+ID4gKwkJ SU5WID0gLTEsCj4gPiArCQlSRUFEID0gMiwKPiBBbnkgcmVhc29uIHRvIG5vdCB1c2UgdGhlIHZh bHVlIGNvbXBpbGVyIGdlbmVyYXRlcz8KPiAKSSB3YW50ZWQgdG8gaW5pdCBJTlZBTElEIHdpdGgg YW4gLXZlIHZhbHVlLiBKdXN0IGZvbGxvd2luZyB0aGUgdHJlbmQgZnJvbSBpbnRlbF9yZWcuCj4g PiArCQlXUklURSwKPiA+ICsJfSBjbWQgPSBJTlY7Cj4gPiArCj4gPiArCXN0cnVjdCBvcHRpb24g bG9uZ29wdHNbXSA9IHsKPiA+ICsJCXsgImNvdW50IiwJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEws CQknYycgfSwKPiA+ICsJCXsgImRldmljZSIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAkJJ2Qn IH0sCj4gPiArCQl7ICJoZWxwIiwJbm9fYXJndW1lbnQsCQlOVUxMLAkJJ2gnIH0sCj4gPiArCQl7 ICJvZmZzZXQiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdvJyB9LAo+ID4gKwkJeyAidmFs dWUiLAlyZXF1aXJlZF9hcmd1bWVudCwJJnZmbGFnLAkJJ3YnIH0sCj4gPiArCQl7IDAgfQo+ID4g Kwl9Owo+ID4gKwo+ID4gKwlkZXZpZCA9IDAsIGNvdW50ID0gMSwgb2Zmc2V0ID0gMHgwOwo+ID4g Kwo+ID4gKwl3aGlsZSAoKHJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICItOmM6ZDpoOm86 IiwgbG9uZ29wdHMsIE5VTEwpKSAhPQo+IEFueSByZWFzb24gdG8gbGVhdmUgb3V0IHRoZSBvcHRp b24gLXYgPyBBbmQgJy1oJyBzaG91bGRuJ3QgbmVlZCBhbiBhcmd1bWVudC4KPiAKPiAKSSBkaWRu dCB3YW4ndCB0byByZWx5IG9uIGluaXRpYWxpemluZyB0aGUgKndyaXRlIHZhbHVlKiB3aXRoIGFu IGludmFsaWQgLCBzbyBiYXNlZCBvbiB0aGUgdmZsYWcsIHdlJ2xsIGtub3cgaWYgdGhlIHdyaXRl IHZhbHVlIHdhcyBldmVyIHNldCBvciBub3QgYW5kIGVycm9yIG91dCBhY2NvcmRpbmdseS4KZ2V0 b3B0X2xvbmcgd2lsbCBvbmx5IGNvbXBsYWluIGlmIHRoZSB1c2VyIHN1cHBsaWVzIC0tdmFsdWUg b3B0aW9uIGJ1dCBubyBhcmd1bWVudCB3aXRoIGl0LiBJZiB0aGUgdXNlciBjaG9vc2VzIHRvIGNv bXBsZXRlbHkgc2tpcCB0aGUgLS12YWx1ZSBvcHRpb24gdGhlbiB3ZSB3b24ndCBrbm93Lgo+ID4g LTEpIHsgKwkJc3dpdGNoIChyZXQpIHsKPiA+ICsJCWNhc2UgJ2MnOgo+ID4gKwkJCWNvdW50ID0g c3RydG91bChvcHRhcmcsIE5VTEwsIDEwKTsKPiBXaXRoIHN0cnRvbCgpIHlvdSBzaG91bGQgYmUg YWJsZSByZWplY3QgYWxsIG5lZ2F0aXZlIGFyZ3MgYW5kIG1ha2UgdXNlIG9mIHRoZSAKPiBzZWNv bmQgYXJndW1lbnQgdG8gcmVqZWN0IGludmFsaWQgbnVtYmVycy4KPiAKSG1tLCBtYWtlcyBzZW5z ZS4KPiA+ICsJCQlpZiAoY291bnQgPT0gVUxPTkdfTUFYKSB7Cj4gPiArCQkJCWZwcmludGYoc3Rk ZXJyLCAiQ291bnQgYXJndW1lbnQgdG9vIGJpZ1xuIik7Cj4gPiArCQkJCWV4aXQoRVJBTkdFKTsK PiA+ICsJCQl9Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQljYXNlICdkJzoKPiA+ICsJCQlkZXZpZCA9 IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAxMCk7Cj4gU2FtZSBoZXJlLCBzdHJ0b2woKSB0byByZWpl Y3QgbmVnYXRpdmVzIGFuZCB1c2UgKiplbmRwdHIgdG8gZmFpbCBvbiBpbnZhbGlkIAo+IG51bWJl cnMuCj4gCj4gPiArCQkJaWYgKGRldmlkID09IFVMT05HX01BWCkgewo+ID4gKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkRldmlkIGFyZ3VtZW50IHRvbyBiaWdcbiIpOwo+IAo+ID4gKwkJCQlleGl0KEVS QU5HRSk7Cj4gPiArCQkJfQo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJY2FzZSAnaCc6Cj4gPiArCQkJ cHJpbnRfdXNhZ2UoYXJndlswXSwgRVhJVF9TVUNDRVNTKTsKPiA+ICsJCQlicmVhazsKPiA+ICsJ CWNhc2UgJ28nOgo+ID4gKwkJCW9mZnNldCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAxNik7Cj4g U2FtZSBjb21tZW50IGFzIGZvciAnZCcuICBZb3UgbWlnaHQgYWxzbyB3YW50IHRvIGNoZWNrIGlm IGVycm5vIGlzIHNldC4KPiAKPiA+ICsJCQlpZiAob2Zmc2V0ID4gTUFYX09GRlNFVCkgewo+ID4g KwkJCQlmcHJpbnRmKHN0ZGVyciwgIk9mZnNldCBzaG91bGQgYmUgPD0gMHhmMDJmZlxuIik7Cj4g PiArCQkJCWV4aXQoRVJBTkdFKTsKPiA+ICsJCQl9Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQljYXNl IDA6Cj4gPiArCQkJaWYgKHZmbGFnID09ICd2JyAmJiBvcHRhcmcpCj4gSSBkaWRuJ3QgZ2V0IHdo eSAmdmZsYWcgaGFkIHRvIGJlIHVzZWQuCj4gCk15IGlkZWEgd2FzIHRvIHVzZSB0aGUgdmZsYWcg dG8gY2hlY2sgaWYgLS12YWx1ZSBvcHRpb24gd2FzIHVzZWQgYXQgYWxsIG9yIG5vdC4KPiA+ICsJ CQkJdmFsID0gKHVpbnQ4X3QpIHN0cnRvdWwob3B0YXJnLCBOVUxMLCAxNik7Cj4gUmVqZWN0IHZh bHVlcyBncmVhdGVyIHRoYW4gMHhmZj8KPiAKdWludDhfdCBjYXN0IHNob3VsZCB0cnVuY2F0ZSBl dmVyeXRoaW5nLCBidXQgeWVhLCBJJ2xsIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGFueXRoaW5nID4g MHhmZi4KPiA+ICsJCQlicmVhazsKPiA+ICsJCS8qIENvbW1hbmQgcGFyc2luZyAqLwo+ID4gKwkJ Y2FzZSAxOgo+ID4gKwkJCWlmIChzdHJjbXAob3B0YXJnLCAicmVhZCIpID09IDApIHsKPiA+ICsJ CQkJY21kID0gUkVBRDsKPiA+ICsJCQl9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJ3cml0ZSIp ID09IDApIHsKPiA+ICsJCQkJY21kID0gV1JJVEU7Cj4gPiArCQkJCWZpbGVfb3AgPSBPX1dST05M WTsKPiA+ICsJCQl9Cj4gPiArCQkJYnJlYWs7Cj4gIH0gZWxzZSB7Cj4gIGFuZCBleGl0IGhlcmU/ ICBvciBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBibG9jayBieSByZS1hcnJhbmdpbmcgdGhlIGJs b2Nrcy4KPiAKQWxyaWdodAo+ID4gKwkJY2FzZSAnOic6Cj4gPiArCQkJZnByaW50ZihzdGRlcnIs ICJUaGUgLSVjIG9wdGlvbiBvZiAlcyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKPiA+ICsJCQkJ IG9wdG9wdCwgYXJndlswXSk7Cj4gCj4gUHJpbnRzICJUaGUgLWMgb3B0aW9uIG9mIHRvb2xzL2Rw Y2RfcmVnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwgaXMgdGhhdCB3aGF0IAo+IHlvdSBpbnRlbmRl ZD8gU2tpcCBwcmludGluZyB0aGUgdG9vbCBwYXRoPwo+IApPaCBubywgdGhlICVjIGlzIHRoZSBm b3JtYXQgc3BlY2lmaWVyLiBTbywgaWYgY291bnQsIGRldmlkLCBvZmZzZXQgZXRjLiBhcmUgcGFz c2VkIHcvbyBhbiBhcmd1bWVudCwKdGhlbiB0aGlzIHdpbGwgcHJpbnQgc29tZXRoaW5nIGxpa2Ug IlRoZSAtdiBvcHRpb24gb2YgdG9vbHMvZHBjZF9yZWcgcmVxdWlyZXMgYW4gYXJndW1lbnQiLCAK Zm9yIHRoZSB2YWx1ZSBhcmd1bWVudCwgaW4gdGhpcyBjYXNlLCBvciAtZCBmb3IgdGhlIGRldmlk IGFyZ3VtZW50IGFuZCBzbyBvbi4KPiA+ICsJCQlwcmludF91c2FnZShhcmd2WzBdLCBFWElUX0ZB SUxVUkUpOwo+ID4gKwkJY2FzZSAnPyc6Cj4gPiArCQlkZWZhdWx0Ogo+ID4gKwkJCWZwcmludGYo c3RkZXJyLCAiJXMgLSBvcHRpb24gJWMgaXMgaW52YWxpZFxuIiwgYXJndlswXSwKPiA+ICsJCQkJ IG9wdG9wdCk7Cj4gPiArCQkJcHJpbnRfdXNhZ2UoYXJndlswXSwgRVhJVF9GQUlMVVJFKTsKPiA+ ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoKGNvdW50ICsgb2Zmc2V0KSA+IChNQVhfT0ZG U0VUICsgMSkpIHsKPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIGJvdW5kcy4gQ291bnQg KyBPZmZzZXQgPD0gMHhmMDMwMFxuIik7Cj4gPiArCQlleGl0KEVSQU5HRSk7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJaWYgKChjbWQgPT0gV1JJVEUpICYmICh2ZmxhZyAhPSAndicpKSB7Cj4gPiArCQlm cHJpbnRmKHN0ZGVyciwgIldyaXRlIHZhbHVlIGlzIG1pc3NpbmdcbiIpOwo+ID4gKwkJcHJpbnRf dXNhZ2UoYXJndlswXSwgRVhJVF9GQUlMVVJFKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwltZW1zZXQo ZGV2X25hbWUsICdcMCcsIDIwKTsKPiBOb3QgbmVlZGVkIGFzIHNucHJpbnRmIGluY2x1ZGVzIHRo ZSBudWxsIGJ5dGUsCk9rLgo+ID4gKwlzbnByaW50ZihkZXZfbmFtZSwgc3RybGVuKGF1eF9kZXYp ICsgMywgIiVzJWQiLCBhdXhfZGV2LCBkZXZpZCk7Cj4gQWxsb3dzIGEgbWF4IG9mIDk5IGZvciBk ZXZpZCwgd2hpY2ggc2hvdWxkIGJlIG9rYXkgYnV0IGRlZmluZSBhIG1hY3JvIGFuZCAKPiByZWpl Y3Qgb3B0IGFyZ3MgZ3JlYXRlciB0aGFuIHRoYXQ/Cj4gCldpbGwgbW9kaWZ5Lgo+ID4gKwo+ID4g KwlmZCA9IG9wZW4oZGV2X25hbWUsIGZpbGVfb3ApOwo+ID4gKwlpZiAoZmQgPCAwKSB7Cj4gPiAr CQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuICVzIGF1eCBkZXZpY2UgLSBlcnJvcjog JXNcbiIsIGRldl9uYW1lLAo+ID4gKwkJCXN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQlyZXR1cm4g ZXJybm87Cj4gPiArCX0KPiA+ICsKPiA+ICsJc3dpdGNoIChjbWQpIHsKPiA+ICsJY2FzZSBSRUFE Ogo+ID4gKwkJcmV0ID0gZHBjZF9yZWFkKGZkLCBvZmZzZXQsIGNvdW50KTsKPiA+ICsJCWJyZWFr Owo+ID4gKwljYXNlIFdSSVRFOgo+ID4gKwkJcmV0ID0gZHBjZF93cml0ZShmZCwgb2Zmc2V0LCB2 YWwpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgSU5WOgo+IElOVkFMSUQgaXMgZWFzaWVyIHRv IHVuZGVyc3RhbmQKPiAKUmlnaHQKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCWZwcmludGYoc3RkZXJy LCAiUGxlYXNlIHNwZWNpZnkgYSBjb21tYW5kOiByZWFkL3dyaXRlLiBTZWUgdXNhZ2VcbiIpOwo+ IFJlbW92ZSAiU2VlIHVzYWdlIgo+IAo+ID4gKwkJY2xvc2UoZmQpOwo+IFRoZXJlJ3MgYW5vdGhl ciBjbG9zZSgpIGJlbG93Lgo+IApwcmludF91c2FnZSB3YXMgZXhpdGluZyBzbyB0aGUgb3RoZXIg Y2xvc2UoKSB3b3VsZG50IGJlIGNhbGxlZC4gQnV0IHdpdGggdGhlIHJlbW92YWwgb2YgZXhpdCBm cm9tIHByaW50X3VzYWdlLCB0aGlzIHdpbGwgY2hhbmdlLgo+ID4gKwkJcHJpbnRfdXNhZ2UoYXJn dlswXSwgRVhJVF9GQUlMVVJFKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwljbG9zZShmZCk7Cj4gPiAr Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL21lc29uLmJ1 aWxkIGIvdG9vbHMvbWVzb24uYnVpbGQKPiA+IGluZGV4IGU0NTE3ZDY2Li43OWYzNmFhOSAxMDA2 NDQKPiA+IC0tLSBhL3Rvb2xzL21lc29uLmJ1aWxkCj4gPiArKysgYi90b29scy9tZXNvbi5idWls ZAo+ID4gQEAgLTM2LDYgKzM2LDcgQEAgdG9vbHNfcHJvZ3MgPSBbCj4gPiAgCSdpbnRlbF93YXRl cm1hcmsnLAo+ID4gIAknaW50ZWxfZ2VtX2luZm8nLAo+ID4gIAknaW50ZWxfZ3Z0Z190ZXN0JywK PiA+ICsJJ2RwY2RfcmVnJywKPiA+ICBdCj4gPiAgdG9vbF9kZXBzID0gaWd0X2RlcHMKPiAKPiBU aGFua3MgZm9yIHdvcmtpbmcgb24gdGhpcy4gIFRoZSB0b29sIGxvb2tzIGdvb2Qgb3ZlcmFsbCwu IGp1c3QgbmVlZHMgc29tZSAKPiBtaW5vciBwb2xpc2hpbmcuCj4KVGhhbmtzIGZvciB0aGUgcmV2 aWV3IDopIAo+IC1ESwo+IAo+IAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ln dC1kZXYK