From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id E08706E029 for ; Thu, 12 Sep 2019 00:45:34 +0000 (UTC) Date: Wed, 11 Sep 2019 17:47:04 -0700 From: Manasi Navare Message-ID: <20190912004703.GA6114@intel.com> References: <20190823182351.25822-1-madhumitha.tolakanahalli.pradeep@intel.com> <20190823182351.25822-3-madhumitha.tolakanahalli.pradeep@intel.com> <44a51c697ed71dbf239322e20e9de0b18bc0b42c.camel@intel.com> <20190827212949.GF701@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [igt-dev] [PATCH i-g-t v2 2/2] igt/tests/kms_dp_tiled_display: kms test for display port tiled displays 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: "Ser, Simon" Cc: "igt-dev@lists.freedesktop.org" , "madhumitha.tp@gmail.com" , "Latvala, Petri" List-ID: T24gRnJpLCBBdWcgMzAsIDIwMTkgYXQgMDQ6Mzk6NTNBTSAtMDcwMCwgU2VyLCBTaW1vbiB3cm90 ZToKPiBPbiBUdWUsIDIwMTktMDgtMjcgYXQgMTQ6MjkgLTA3MDAsIE1hbmFzaSBOYXZhcmUgd3Jv dGU6Cj4gPiBPbiBUdWUsIEF1ZyAyNywgMjAxOSBhdCAwMzo0OTozOEFNIC0wNzAwLCBTZXIsIFNp bW9uIHdyb3RlOgo+ID4gPiBUaGFua3MgZm9yIHRoZSBuZXcgdmVyc2lvbiEgSGVyZSBhcmUgc29t ZSBtb3JlIGNvbW1lbnRzLiBTb21lIG9mIHRoZW0KPiA+ID4gYXJlIG5pdHMsIHNvbWUgb2YgdGhl bSBhcmUgbW9yZSBzZXJpb3VzIHF1ZXN0aW9ucy4gRmVlbCBmcmVlIHRvIGxldCBtZQo+ID4gPiBr bm93IGlmIEknbSBtaXN0YWtlbiBvciBpZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCBvbmUgb2YgdGhl bS4KPiA+IAo+ID4gVGhhbmtzIGZvciB0aGUgcmV2aWV3IGNvbW1lbnRzIFNpbW9uLiBJIHdpbGwg YmUgd29ya2luZyBvbiBhZGRyZXNzaW5nIHRoZSBmb2xsb3dpbmcKPiA+IHJldmlldyBjb21tZW50 cyBhbmQgd2lsbCB0YWtlIG92ZXIgdGhpcyBwYXRjaCBzaW5jZSBNYWRodW1pdGhhJ3MgaW50ZXJu c2hpcCBoYXMgZW5kZWQuCj4gPiBJIHJlYWxseSBhcHByZWNpYXRlIGFsbCB5b3VyIGhlbHAgYW5k IGZlZWRiYWNrIG9uIHRoaXMuCj4gPiAKPiA+IFBsZWFzZSBmaW5kIG15IGFuc3dlcnMgYmVsb3c6 Cj4gPiAKPiA+ID4gT24gRnJpLCAyMDE5LTA4LTIzIGF0IDExOjIzIC0wNzAwLCBNYWRodW1pdGhh IFRvbGFrYW5haGFsbGkgUHJhZGVlcCB3cm90ZToKPiA+ID4gPiBUaGlzIHRlc3QgdmFsaWRhdGVz IHRoZSB0aWxlZCBEUCBkaXNwbGF5cyB0byBkaXNwbGF5IGEgdGVzdCBwYXR0ZXJuCj4gPiA+ID4g c2VhbWxlc3NseSBhY3Jvc3MgdGhlIHR3byB0aWxlcy4gSXQgdmFsaWRhdGVzIHRoZSB0cmFuc2Nv ZGVyIHBvcnQKPiA+ID4gPiBzeW5jIGZlYXR1cmUgb24gaTkxNSB0byBnZXQgYSB0ZWFyZnJlZSB0 aWxlZCBkaXNwbGF5IG91dHB1dC4KPiA+ID4gPiAKPiA+ID4gPiBSZWxhdGVkIGtlcm5lbCB3b3Jr IHBhdGNoZXMtCj4gPiA+ID4gaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3Nlcmll cy81OTgzNy8jcmV2NC4KPiA+ID4gPiAKPiA+ID4gPiBUaGlzIHRlc3QgY2FuIGV2ZW50dWFsbHkg YmUgZXh0ZW5kZWQgdG8gY292ZXIgdGlsZWQgZGlzcGxheSBzdXBwb3J0Cj4gPiA+ID4gb24gb3Ro ZXIgY29ubmVjdG9yIHR5cGVzLgo+ID4gPiA+IAo+ID4gPiA+IHYyOiBBZGRlZCBhIGNoZWNrIGZv ciBjaGVja2luZyBwYWdlZmxpcCBldmVudCB0aW1lc3RhbXBzIChTaW1vbiwgTWFuYXNpKQo+ID4g PiA+ICAgICBNaW5vciBzdHlsZSBjaGFuZ2VzIChTaW1vbikKPiA+ID4gPiAgICBDb2RlIGNsZWFu LXVwIGFuZCByZW9yZGVyaW5nCj4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gQ2M6IE1hbmFzaSBO YXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiA+ID4gQ2M6IFBldHJpIExhdHZh bGEgPHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPgo+ID4gPiA+IENjOiBTaW1vbiBTZXIgPHNpbW9u LnNlckBpbnRlbC5jb20+Cj4gPiA+ID4gCj4gPiA+ID4gQ2M6IDxtYWRodW1pdGhhLnRwQGdtYWls LmNvbT4KPiA+ID4gPiAKPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBNYWRodW1pdGhhIFRvbGFrYW5h aGFsbGkgUHJhZGVlcCA8bWFkaHVtaXRoYS50b2xha2FuYWhhbGxpLnByYWRlZXBAaW50ZWwuY29t Pgo+ID4gPiA+IC0tLQo+ID4gPiA+ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgICAgIHwgICAx ICsKPiA+ID4gPiAgdGVzdHMva21zX2RwX3RpbGVkX2Rpc3BsYXkuYyB8IDM0NiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiA+ICB0ZXN0cy9tZXNvbi5idWlsZCAgICAg ICAgICAgIHwgICAxICsKPiA+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAzNDggaW5zZXJ0aW9ucygr KQo+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2RwX3RpbGVkX2Rpc3BsYXku Ywo+ID4gPiA+IAo+ID4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIv dGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiA+IGluZGV4IGMwMmU0ZDk0Li43NTYxYWI5YiAx MDA2NDQKPiA+ID4gPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiA+ID4gKysrIGIv dGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiA+IEBAIC00MSw2ICs0MSw3IEBAIFRFU1RTX3By b2dzID0gXAo+ID4gPiA+ICAJa21zX2N1cnNvcl9lZGdlX3dhbGsgXAo+ID4gPiA+ICAJa21zX2N1 cnNvcl9sZWdhY3kgXAo+ID4gPiA+ICAJa21zX2RwX2RzYyBcCj4gPiA+ID4gKwlrbXNfZHBfdGls ZWRfZGlzcGxheSBcCj4gPiA+ID4gIAlrbXNfZHJhd19jcmMgXAo+ID4gPiA+ICAJa21zX2ZiY29u X2ZidCBcCj4gPiA+ID4gIAlrbXNfZmVuY2VfcGluX2xlYWsgXAo+ID4gPiA+IGRpZmYgLS1naXQg YS90ZXN0cy9rbXNfZHBfdGlsZWRfZGlzcGxheS5jIGIvdGVzdHMva21zX2RwX3RpbGVkX2Rpc3Bs YXkuYwo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gaW5kZXggMDAwMDAwMDAu LjE2MmZiZGQ5Cj4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ICsrKyBiL3Rlc3RzL2ttc19k cF90aWxlZF9kaXNwbGF5LmMKPiA+ID4gPiBAQCAtMCwwICsxLDM0NiBAQAo+ID4gPiA+ICsvKgo+ ID4gPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gPiA+ICsg Kgo+ID4gPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAo+ID4gPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiA+ID4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAo+ID4gPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ID4gPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ID4g PiArICoKPiA+ID4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4gPiA+ICsgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCj4gPiA+ID4gKyAqIFNvZnR3YXJlLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ID4gPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiA+ID4gPiArICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCj4gPiA+ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gPiA+ID4gKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gPiA+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiA+ID4gPiArICog SU4gVEhFIFNPRlRXQVJFLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBBdXRob3JzOgo+ID4gPiA+ ICsgKiAgTWFkaHVtaXRoYSBUb2xha2FuYWhhbGxpIFByYWRlZXAKPiA+ID4gPiArICogICAgICA8 bWFkaHVtaXRoYS50b2xha2FuYWhhbGxpLnByYWRlZXBAaW50ZWwuY29tPgo+ID4gPiA+ICsgKgo+ ID4gPiA+ICsgKiBEaXNwbGF5IFBvcnQgVGlsZWQgRGlzcGxheSBUZXN0Cj4gPiA+ID4gKyAqIFRo aXMgdGVzdCBwYXJzZXMgdGhlIHRpbGUgaW5mb3JtYXRpb24gb2YgdGhlIGNvbm5lY3RvcnMgdGhh dCBoYXZlIFRJTEUKPiA+ID4gPiArICogcHJvcGVydHkgc2V0LCBzZXRzIHVwIHRoZSBmcmFtZWJ1 ZmZlciB3aXRoIGNvcnJlY3Qgb2Zmc2V0cyBjb3JyZXNwb25kaW5nIHRvCj4gPiA+ID4gKyAqIHRo ZSB0aWxlIG9mZnNldHMgYW5kIGRvZXMgYW4gYXRvbWljIG1vZGVzZXQgd2l0aCB0d28gQ1JUQ3Mg Zm9yIHR3bwo+ID4gPiA+ICsgKiBjb25uZWN0b3JzLiBQYWdlIGZsaXAgZXZlbnQgdGltZXN0YW1w IGZyb20gZWFjaCBDUlRDIGlzIGNvbGxlY3RlZCBhbmQKPiA+ID4gPiArICogY29tcGFyZWQgdG8g bWFrZSBzdXJlIHRoYXQgdGhleSBvY2N1cnJlZCBpbiBhIHN5bmNocm9ub3VzIG1hbm5lci4KPiA+ ID4gPiArICoKPiA+ID4gPiArICogVGhpcyB0ZXN0IGN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IGhv cml6b250YWxseSB0aWxlZCBkaXNwbGF5cywgaW4gbGluZSB3aXRoCj4gPiA+ID4gKyAqIHRoZSBk aXNwbGF5cyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCBhdCB0aGUgbW9tZW50Lgo+ID4gPiA+ICsg Ki8KPiA+ID4gPiArCj4gPiA+ID4gKyNpbmNsdWRlICJpZ3QuaCIKPiA+ID4gPiArI2luY2x1ZGUg InBvbGwuaCIKPiA+ID4gPiArI2luY2x1ZGUgImRybV9tb2RlLmgiCj4gPiA+ID4gKyNpbmNsdWRl ICJkcm1fZm91cmNjLmgiCj4gPiA+ID4gKwo+ID4gPiA+ICtJR1RfVEVTVF9ERVNDUklQVElPTigi VGVzdCBmb3IgRGlzcGxheSBQb3J0IFRpbGVkIERpc3BsYXlzIik7Cj4gPiA+ID4gKwo+ID4gPiA+ ICt0eXBlZGVmIHN0cnVjdCB7Cj4gPiA+ID4gKwlpbnQgZHJtX2ZkOwo+ID4gPiA+ICsJaW50IG51 bV9oX3RpbGVzOwo+ID4gPiA+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheTsKPiA+ID4gPiArCWVu dW0gaWd0X2NvbW1pdF9zdHlsZSBjb21taXQ7Cj4gPiA+ID4gK30gZGF0YV90Owo+ID4gPiA+ICsK PiA+ID4gPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ID4gPiA+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7 Cj4gPiA+ID4gKwlpZ3RfdGlsZV9pbmZvX3QgdGlsZTsKPiA+ID4gPiArCWlndF9mYl90IGZiX3Rl c3RfcGF0dGVybjsKPiA+ID4gPiArCWVudW0gcGlwZSBwaXBlOwo+ID4gPiA+ICsJZW51bSBpZ3Rf Y29tbWl0X3N0eWxlIGNvbW1pdDsKPiA+ID4gPiArCWRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVj dG9yOwo+ID4gPiA+ICt9IGRhdGFfY29ubmVjdG9yX3Q7Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0 aWMgaW50IGRybV9wcm9wZXJ0eV9pc190aWxlKGRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wKQo+ID4g PiA+ICt7Cj4gPiA+ID4gKwlyZXR1cm4gKHN0cmNtcChwcm9wLT5uYW1lICwgIlRJTEUiKSA/IDAg OiAxKSAmJgo+ID4gPiA+ICsJCQkgZHJtX3Byb3BlcnR5X3R5cGVfaXMocHJvcCwgRFJNX01PREVf UFJPUF9CTE9CKTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgZ2V0 X2Nvbm5lY3Rvcl90aWxlX3Byb3BzKGRhdGFfdCAqZGF0YSwgZHJtTW9kZUNvbm5lY3RvclB0ciBj b25uLAo+ID4gPiA+ICsJCWlndF90aWxlX2luZm9fdCAqdGlsZSkKPiA+ID4gPiArewo+ID4gPiA+ ICsJaW50IGkgPSAwOwo+ID4gPiA+ICsJZHJtTW9kZVByb3BlcnR5UHRyIHByb3A7Cj4gPiA+ID4g Kwlkcm1Nb2RlUHJvcGVydHlCbG9iUHRyIGJsb2I7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZm9yIChp ID0gMDsgaSA8IGNvbm4tPmNvdW50X3Byb3BzOyBpKyspIHsKPiA+ID4gPiArCQlwcm9wID0gZHJt TW9kZUdldFByb3BlcnR5KGRhdGEtPmRybV9mZCwgY29ubi0+cHJvcHNbaV0pOwo+ID4gPiA+ICsK PiA+ID4gPiArCQlpZ3RfYXNzZXJ0KHByb3ApOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlpZiAoIWRy bV9wcm9wZXJ0eV9pc190aWxlKHByb3ApKQo+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gCj4g PiA+IFRoaXMgYnJhbmNoIGxlYWtzIHByb3AuCj4gPiAKPiA+IEZyZWVpbmcgcHJvcCBoZXJlIGJl Zm9yZSBjb250aW51aW5nIHNoZCBmaXggdGhpcywgd2lsbCBmaXggdGhpcyBpbiB0aGUgbmV4dCBy ZXYKPiA+IAo+ID4gPiA+ICsJCWJsb2IgPSBkcm1Nb2RlR2V0UHJvcGVydHlCbG9iKGRhdGEtPmRy bV9mZCwKPiA+ID4gPiArCQkJCWNvbm4tPnByb3BfdmFsdWVzW2ldKTsKPiA+ID4gPiArCj4gPiA+ ID4gKwkJaWYgKCFibG9iKQo+ID4gPiA+ICsJCQlyZXR1cm47Cj4gPiA+IAo+ID4gPiBUaGlzIGJy YW5jaCBsZWFrcyBwcm9wLgo+ID4gCj4gPiBBZ3JlZSwgd2lsbCBhZGQgZHJtTW9kZUZyZWVQcm9w ZXJ0eUJsb2IoYmxvYik7IGJlZm9yZSByZXR1cm4KPiA+IAo+ID4gPiA+ICsJCWlndF9wYXJzZV9j b25uZWN0b3JfdGlsZV9ibG9iKGJsb2IsIHRpbGUpOwo+ID4gPiA+ICsJCWJyZWFrOwo+ID4gPiA+ ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiArCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gPiA+ ID4gKwlkcm1Nb2RlRnJlZVByb3BlcnR5QmxvYihibG9iKTsKPiA+ID4gPiArfQo+ID4gPiA+ICsK PiA+ID4gPiArc3RhdGljIHZvaWQgZ2V0X251bWJlcl9vZl9oX3RpbGVzKGRhdGFfdCAqZGF0YSkK PiA+ID4gPiArewo+ID4gPiA+ICsJaW50IGk7Cj4gPiA+ID4gKwlkcm1Nb2RlUmVzUHRyIHJlczsK PiA+ID4gPiArCWRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yOwo+ID4gPiA+ICsJaWd0X3Rp bGVfaW5mb190IHRpbGUgPSB7Lm51bV9oX3RpbGUgPSAwfTsKPiA+ID4gPiArCj4gPiA+ID4gKwlp Z3RfYXNzZXJ0KHJlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0YS0+ZHJtX2ZkKSk7Cj4gPiA+ ID4gKwo+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IHJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsr KSB7Cj4gPiA+ID4gKwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0 YS0+ZHJtX2ZkLAo+ID4gPiA+ICsJCQkJcmVzLT5jb25uZWN0b3JzW2ldKTsKPiA+ID4gPiArCj4g PiA+ID4gKwkJaWd0X2Fzc2VydChjb25uZWN0b3IpOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlpZiAo IShjb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0gRFJNX01PREVfQ09OTkVDVEVEICYmCj4gPiA+ID4g KwkJCWNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3Bs YXlQb3J0KSkKPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+IAo+ID4gPiBUaGlzIGNhbiBiZSBz aW1wbGlmaWVkIHRvCj4gPiA+IAo+ID4gPiAgICAgY29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05O RUNURUQgfHwKPiA+ID4gICAgIGNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9E aXNwbGF5UG9ydAo+ID4gCj4gPiBZZXMgd2lsbCBzaW1wbGlmeSBpbiB0aGUgbmV4dCByZXYKPiA+ IAo+ID4gPiBBZGRpdGlvbmFsbHksIHRoaXMgYnJhbmNoIGxlYWtzIHRoZSBjb25uZWN0b3IuCj4g PiAKPiA+IEhtbSwgc28gY2FsbCBkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOyBiZWZv cmUgY29udGludWluZyBzaGQgYmUgZm9sbG93ZWQgaW4gZ2VuZXJhbCB0aHJvdWdob3V0Cj4gPiB0 aGUgY29kZSByaWdodD8KPiAKPiBZZWFoLCB0aGF0IHdvdWxkIGZpeCBpdC4KPiAKPiA+ID4gPiAr CQlnZXRfY29ubmVjdG9yX3RpbGVfcHJvcHMoZGF0YSwgY29ubmVjdG9yLCAmdGlsZSk7Cj4gPiA+ ID4gKwkJZGF0YS0+bnVtX2hfdGlsZXMgPSB0aWxlLm51bV9oX3RpbGU7Cj4gPiA+ID4gKwkJYnJl YWs7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMo cmVzKTsKPiA+ID4gPiArCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+ID4g K30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2b2lkIGdldF9jb25uZWN0b3IoZGF0YV90ICpk YXRhLCBkYXRhX2Nvbm5lY3Rvcl90ICpjb25uKQo+ID4gPiAKPiA+ID4gTml0OiBzaW5jZSB0aGlz IGZpbGxzIGFsbCBjb25uZWN0b3JzLCBtYXliZSBpdCBzaG91bGQgYmUgbmFtZWQKPiA+ID4gZ2V0 X2Nvbm5lY3RvcnMgKHdpdGggYW4gcykuIEFsc28gaXQncyBub3QgY2xlYXIgdGhhdCBjb25uIHJl ZmVycyB0byBhbgo+ID4gPiBhcnJheSBvZiBjb25uZWN0b3JzLCBtYXliZSBpdCBzaG91bGQgYmUg cmVuYW1lZCB0byBjb25ucy4KPiA+IAo+ID4gWWVzIEkgYWdyZWUgdGhhdCB3aWxsIG1ha2UgaXQg bW9yZSByZWFkYWJsZSwgSSB3aWxsIGZpeCBpdCBpbiBuZXh0IHJldgo+ID4gCj4gPiA+IChBcHBs aWVzIHRvIHRoZSB3aG9sZSBwYXRjaCkKPiA+ID4gCj4gPiA+ID4gK3sKPiA+ID4gPiArCWludCBj b3VudCA9IDA7Cj4gPiA+ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ID4gPiArCj4gPiA+ ID4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRhdGEtPmRpc3BsYXksIG91dHB1dCkgewo+ ID4gPiA+ICsJCWNvbm5bY291bnRdLmNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3IoZGF0 YS0+ZGlzcGxheS0+ZHJtX2ZkLAo+ID4gPiA+ICsJCQkJCQlvdXRwdXQtPmlkKTsKPiA+ID4gPiAr Cj4gPiA+ID4gKwkJaWd0X2Fzc2VydChjb25uW2NvdW50XS5jb25uZWN0b3IpOwo+ID4gPiA+ICsK PiA+ID4gPiArCQlpZiAoIShjb25uW2NvdW50XS5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09 Cj4gPiA+ID4gKwkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkpCj4gPiA+ID4gKwkJ CWNvbnRpbnVlOwo+ID4gPiAKPiA+ID4gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0bwo+ID4gPiAK PiA+ID4gICAgIGlmIChjb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxh eVBvcnQpCj4gPiA+IAo+ID4gPiBBZGRpdGlvbmFsbHksIHRoaXMgYnJhbmNoIGxlYWtzIHRoZSBj b25uZWN0b3IuCj4gPiA+IAo+ID4gPiA+ICsJCWdldF9jb25uZWN0b3JfdGlsZV9wcm9wcyhkYXRh LCBjb25uW2NvdW50XS5jb25uZWN0b3IsCj4gPiA+ID4gKwkJCSZjb25uW2NvdW50XS50aWxlKTsK PiA+ID4gPiArCj4gPiA+ID4gKwkJLyogQ2hlY2sgaWYgdGhlIGNvbm5lY3RvcnMgYmVsb25nIHRv IHRoZSBzYW1lIHRpbGUgZ3JvdXAgKi8KPiA+ID4gPiArCQlpZiAoY291bnQgPiAwKQo+ID4gPiA+ ICsJCQlpZ3RfYXNzZXJ0KGNvbm5bY291bnRdLnRpbGUudGlsZV9ncm91cF9pZCA9PQo+ID4gPiA+ ICsJCQkJY29ubltjb3VudC0xXS50aWxlLnRpbGVfZ3JvdXBfaWQpOwo+ID4gPiA+ICsKPiA+ID4g PiArCQljb3VudCsrOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtz dGF0aWMgdm9pZAo+ID4gPiA+ICtyZXNldF9mcmFtZWJ1ZmZlcihpbnQgZHJtX2ZkLCBpZ3Rfb3V0 cHV0X3QgKm91dHB1dCwgaWd0X2ZiX3QgKmZiKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlpZ3RfcGxh bmVfdCAqcHJpbWFyeTsKPiA+ID4gPiArCj4gPiA+ID4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9n ZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ID4gPiA+ICsJ aWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiA+ID4gPiArCWlndF9yZW1vdmVfZmIo ZHJtX2ZkLCBmYik7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2b2lkIHJl c2V0X291dHB1dChpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiA+ID4gPiArewo+ID4gPiA+ICsJaWd0 X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfTk9ORSk7Cj4gPiA+ID4gK30KPiA+ID4gPiAr Cj4gPiA+ID4gK3N0YXRpYyB2b2lkIHRlc3RfY2xlYW51cChkYXRhX3QgKmRhdGEsIGRhdGFfY29u bmVjdG9yX3QgKmNvbm4pCj4gPiA+ID4gK3sKPiA+ID4gPiArCWludCBjb3VudDsKPiA+ID4gPiAr Cj4gPiA+ID4gKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBkYXRhLT5udW1faF90aWxlczsgY291 bnQrKykgewo+ID4gPiA+ICsJCWlmIChjb25uW2NvdW50XS5vdXRwdXQpIHsKPiA+ID4gPiArCQkJ cmVzZXRfZnJhbWVidWZmZXIoZGF0YS0+ZHJtX2ZkLCBjb25uW2NvdW50XS5vdXRwdXQsCj4gPiA+ ID4gKwkJCQkmY29ubltjb3VudF0uZmJfdGVzdF9wYXR0ZXJuKTsKPiA+ID4gPiArCQkJcmVzZXRf b3V0cHV0KGNvbm5bY291bnRdLm91dHB1dCk7Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsJfQo+ID4g PiA+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MihkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwo+ ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9pZCBzZXR1cF9tb2RlKGRhdGFf dCAqZGF0YSwgZGF0YV9jb25uZWN0b3JfdCAqY29ubl9kYXRhKQo+ID4gPiAKPiA+ID4gVGhpcyBm dW5jdGlvbiBkb2Vzbid0IGFjdHVhbGx5IHNldHVwIHRoZSBvdXRwdXQgbW9kZSwgaXQgb25seSBz ZXRzIHVwCj4gPiA+IHRoZSBwaXBlLiBJcyB0aGlzIGFuIG92ZXJsb29rPwo+ID4gCj4gPiB5ZXMg d2UganVzdCBzZXQgdGhlIHBpcGUvQ1JUQyBoZXJlIGFuZCB0aGUgYXRvbWljIGNvbW1pdCBjYWxs IGRvZXMgYSBjb21wbGV0ZQo+ID4gbW9kZXNldCB3aXRoIGNoZWNrIGFuZCBjb21taXQgd2l0aG91 dCBhbnkgb3V0cHV0IHNpbmNlIHdlIGRpZG50IHNldHVwIGZiIHlldC4KPiA+IEJ1dCBJIGFncmVl IHRoYXQgY2FsbGluZyBpdCBqdXN0IHNldHVwX3BpcGUgcm9iYWJseSBtYWtlcyBpdCBtb3JlIGlu dHVpdGl2ZQo+IAo+IE9oLCBJIGZvcmdvdCB0aGF0IGlndF9vdXRwdXRfc2V0X3BpcGUgYWxzbyBz ZXRzIHRoZSBtb2RlLgo+IAo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlpbnQgY291bnQgPSAwOwo+ID4g PiA+ICsJZW51bSBwaXBlIHBpcGU7Cj4gPiA+ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ ID4gPiArCj4gPiA+ID4gKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBkYXRhLT5udW1faF90aWxl czsgY291bnQrKykgewo+ID4gPiA+ICsJCW91dHB1dCA9IGlndF9vdXRwdXRfZnJvbV9jb25uZWN0 b3IoZGF0YS0+ZGlzcGxheSwKPiA+ID4gPiArCQkJCWNvbm5fZGF0YVtjb3VudF0uY29ubmVjdG9y KTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJLyoKPiA+ID4gPiArCQkgKiBUaGUgb3V0cHV0IGlzIHNl dCB0byBQSVBFX05PTkUgYW5kIHRoZW4gYXNzaWduZWQgYSBwaXBlLgo+ID4gPiA+ICsJCSAqIFRo aXMgaXMgZG9uZSB0byBlbnN1cmUgYSBjb21wbGV0ZSBtb2Rlc2V0IG9jY3VyZXMgZXZlcnkKPiA+ ID4gPiArCQkgKiB0aW1lIHRoZSB0ZXN0IGlzIHJ1bi4KPiA+ID4gPiArCQkgKi8KPiA+ID4gPiAr CQlyZXNldF9vdXRwdXQob3V0cHV0KTsKPiA+ID4gCj4gPiA+IElzIHRoaXMgbmVjZXNzYXJ5Pwo+ ID4gCj4gPiBZZXMgdGhpcyBpcyBuZWNlc3NhcnkgdG8gZm9yY2UgYSBjb21wbGV0ZSBtb2Rlc2V0 IGZvciBlYWNoIHRlc3Qgc2luY2UgaWYgdGhlIHBpcGUKPiA+IGFzc2lnbm1lbnRzIG9yIHRoZSBt b2RlIGhhcyBub3QgY2hhbmdlZCBpdCB3aWxsIG5vdCBzZXQgbmVlZHNfbW9kZXNldCBmbGFnIGlu IHNpZGUga2VybmVsCj4gPiBhbmQgd2lsbCBub3QgZG8gYSBmdWxsIGF0b21pYyBjaGVjayBhbmQg Y29tbWl0Lgo+IAo+IEhtbSwgd2h5IGRvIHdlIG5lZWQgdG8gZG8gYSBuZXcgbW9kZXNldD8gSWYg dGhlIG1vZGUgaXMgYWxyZWFkeSBzZXQgdG8KPiB3aGF0IHdlIHdhbnQsIG5vIG5lZWQgZm9yIHRo aXM/Cj4gCj4gKFNvcnJ5LCBJJ20gdW5mYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwgc2lkZSBvZiB0 aGluZ3MhKQo+IAo+ID4gPiA+ICsJCWZvcl9lYWNoX3BpcGUoZGF0YS0+ZGlzcGxheSwgcGlwZSkg ewo+ID4gPiA+ICsJCQlpZiAoY291bnQgPiAwICYmIHBpcGUgPT0gY29ubl9kYXRhW2NvdW50LTFd LnBpcGUpCj4gPiA+ID4gKwkJCQljb250aW51ZTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCWlmIChp Z3RfcGlwZV9jb25uZWN0b3JfdmFsaWQocGlwZSwgb3V0cHV0KSkgewo+ID4gPiA+ICsKPiA+ID4g PiArCQkJCWNvbm5fZGF0YVtjb3VudF0ucGlwZSA9IHBpcGU7Cj4gPiA+ID4gKwkJCQljb25uX2Rh dGFbY291bnRdLm91dHB1dCA9IG91dHB1dDsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCQlpZ3Rfb3V0 cHV0X3NldF9waXBlKGNvbm5fZGF0YVtjb3VudF0ub3V0cHV0LAo+ID4gPiA+ICsJCQkJCWNvbm5f ZGF0YVtjb3VudF0ucGlwZSk7Cj4gPiA+ID4gKwkJCQlicmVhazsKPiA+ID4gPiArCQkJfQo+ID4g PiA+ICsJCX0KPiA+ID4gPiArCX0KPiA+ID4gPiArCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMo ZGF0YS0+ZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsCj4gPiA+ID4gKwkJ TlVMTCk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2b2lkIHNldHVwX2Zy YW1lYnVmZmVyKGRhdGFfdCAqZGF0YSwgZGF0YV9jb25uZWN0b3JfdCAqY29ubikKPiA+ID4gPiAr ewo+ID4gPiA+ICsJaW50IGNvdW50Owo+ID4gPiA+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4g PiA+ID4gKwo+ID4gPiA+ICsJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgZGF0YS0+bnVtX2hfdGls ZXM7IGNvdW50KyspIHsKPiA+ID4gPiArCj4gPiA+ID4gKwkJaWd0X2NyZWF0ZV9wYXR0ZXJuX2Zi KGRhdGEtPmRybV9mZCwKPiA+ID4gPiArCQkJKGNvbm5bY291bnRdLnRpbGUudGlsZV9oX3NpemUg Kgo+ID4gPiA+ICsJCQlkYXRhLT5udW1faF90aWxlcyksCj4gPiA+IAo+ID4gPiBEbyB3ZSBuZWVk IHRvIG11bHRpcGx5IGJ5IHRoZSBudW1iZXIgb2YgaG9yaXpvbnRhbCB0aWxlcyBoZXJlPyBJdCBz ZWVtcwo+ID4gPiB3ZSBvbmx5IHVzZSB0aGUgZmlyc3QgdGlsZV9oX3NpemUgcGl4ZWxzIG9mIHRo ZSBidWZmZXIuIEFtIEkgbWlzc2luZwo+ID4gPiBzb21ldGhpbmc/Cj4gPiA+IAo+ID4gCj4gPiBZ ZXMgd2Ugb25seSB1c2UgdGhlIHRpbGVfaF9zaXplIG9mIHRoZSBidWZmZXIgYXQgdGhlIHByb3Bl ciBvZmZzZXQgb2YgdGlsZV9oX2xvYwo+ID4gU28gdGhpcyBiZWxvdyBsb2dpYyBzaGQgYmUgbW9k aWZpZWQgdG8gb25seSBjcmVhdGUgZmIgb2YgdGhlIHNpemUgdGlsZV9oX3NpemUgaWYgaXRzIGlu IHRoZSBmb3IgbG9vcAo+ID4gb3IganVzdCBjcmVhdGUgb25lIGZiIG91dHNpZGUgdGhlIGxvb3Ag b2YgdGhlIHNpemUgdGlsZV9oX3NpemUgKiBudW1fdGlsZXMgYW5kIHRoZW4ganVzdCB1c2UgdGhh dCB3aXRoIGRmZmVyZW50Cj4gPiBvZmZzZXRzIGZvciB0d28gQ1JUQ3MKPiA+IAo+ID4gV2hlbiBJ IGRpc2N1c3NlZCB0aGlzIG9uIGRyaS1kZXZlbCwgcGVvcGxlIHNhaWQgdGhhdCByZWFsIHVzZXJz cGFjZSBjYW4gZGVjaWRlIHRvIGRvIGVpdGhlciBvbmUgc2luZ2xlIGZiIGZvciBhbGwgdGlsZXMK PiA+IG9yIHNlcGFyYXRlIG9uZXMgd2hlcmUgZWFjaCBpcyBvZiB0aGUgc2l6ZSBlcXVhbCB0byB0 aWxlIHNpemUuCj4gPiAKPiA+IExldCBtZSBrbm93IGlmIHRoZXJlIGlzIGEgcHJlZmVyZW5jZQo+ IAo+IEFzIGEgdXNlcnNwYWNlIGRldiwgSSdkIHNheSBhIHNpbmdsZSBGQiB3b3VsZCBiZSBhIGxp dHRsZSBiaXQgbW9yZQo+IHJlYWxpc3RpYywgYnV0IHllYWggSSBndWVzcyB1c2Vyc3BhY2UgY291 bGQgdXNlIHR3byBGQnMgYXMgd2VsbC4gTm8gYmlnCj4gZGVhbCwgSSdtIGZpbmUgd2l0aCBib3Ro Lgo+IAo+ID4gPiBCdXQgbWF5YmUgYSB0ZXN0IHRoYXQgd291bGQgYmV0dGVyIHJlZmxlY3QgcmVh bGl0eSB3b3VsZCBjcmVhdGUgYQo+ID4gPiBzaW5nbGUgZnJhbWVidWZmZXIgZm9yIGFsbCB0aWxl ZCBkaXNwbGF5cywgdG8gZGlzcGxheSBhIHNpbmdsZSBpbWFnZQo+ID4gPiBhY3Jvc3MgYWxsIG9m IHRoZW0/Cj4gPiA+IAo+ID4gPiA+ICsJCQljb25uW2NvdW50XS50aWxlLnRpbGVfdl9zaXplLAo+ ID4gPiA+ICsJCQlEUk1fRk9STUFUX1hCR1I4ODg4LAo+ID4gPiA+ICsJCQlMT0NBTF9EUk1fRk9S TUFUX01PRF9OT05FLAo+ID4gPiA+ICsJCQkmY29ubltjb3VudF0uZmJfdGVzdF9wYXR0ZXJuKTsK PiA+ID4gPiArCj4gPiA+ID4gKwkJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUo Y29ubltjb3VudF0ub3V0cHV0LAo+ID4gPiA+ICsJCQkJRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7 Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmNvbm5bY291 bnRdLmZiX3Rlc3RfcGF0dGVybik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCWlndF9mYl9zZXRfc2l6 ZSgmY29ubltjb3VudF0uZmJfdGVzdF9wYXR0ZXJuLCBwcmltYXJ5LAo+ID4gPiA+ICsJCQkJY29u bltjb3VudF0udGlsZS50aWxlX2hfc2l6ZSwKPiA+ID4gPiArCQkJCWNvbm5bY291bnRdLnRpbGUu dGlsZV92X3NpemUpOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZj b25uW2NvdW50XS5mYl90ZXN0X3BhdHRlcm4sIHByaW1hcnksCj4gPiA+ID4gKwkJCQkoY29ubltj b3VudF0udGlsZS50aWxlX2hfc2l6ZSAqCj4gPiA+ID4gKwkJCQljb25uW2NvdW50XS50aWxlLnRp bGVfaF9sb2MpLAo+ID4gPiA+ICsJCQkJKGNvbm5bY291bnRdLnRpbGUudGlsZV92X3NpemUgKgo+ ID4gPiA+ICsJCQkJY29ubltjb3VudF0udGlsZS50aWxlX3ZfbG9jKSk7Cj4gPiA+ID4gKwo+ID4g PiA+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwcmltYXJ5LAo+ID4gPiA+ICsJCQkJY29ubltjb3Vu dF0udGlsZS50aWxlX2hfc2l6ZSwKPiA+ID4gPiArCQkJCWNvbm5bY291bnRdLnRpbGUudGlsZV92 X3NpemUpOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMg dm9pZCBwYWdlX2ZsaXBfaGFuZGxlcihpbnQgZmQsIHVuc2lnbmVkIGludCBzZXEsCj4gPiA+ID4g KwkJdW5zaWduZWQgaW50IHR2X3NlYywgdW5zaWduZWQgaW50IHR2X3VzZWMsCj4gPiA+ID4gKwkJ dW5zaWduZWQgaW50IGNydGNfaWQsIHZvaWQgKmRhdGEpCj4gPiA+ID4gK3sKPiA+ID4gPiArCWJv b2wgZXhwciA9IGZhbHNlOwo+ID4gPiA+ICsJc3RhdGljIHVuc2lnbmVkIGludCBfdHZfc2VjLCBf dHZfdXNlYzsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZ3RfZGVidWcoIlBhZ2UgRmxpcCBFdmVudCBy ZWNlaXZlZCBmcm9tIENSVEM6JWQgYXQgJXU6JXVcbiIsIGNydGNfaWQsCj4gPiA+ID4gKwkJdHZf c2VjLCB0dl91c2VjKTsKPiA+ID4gCj4gPiA+IFdlIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB3ZSBy ZWNlaXZlIGV4YWN0bHkgb25lIHBhZ2UtZmxpcCBwZXIgQ1JUQy4KPiA+ID4gQ3VycmVudGx5IHdl IGRvbid0IHVzZSBjcnRjX2lkIChhcGFydCBmcm9tIGxvZ2dpbmcgcHVycG9zZXMpLgo+ID4gCj4g PiBJIHNlZSBzbyBzb21laG93IGhhdmUgYSBzdGF0aWMgY291bnQgb2YgZXZlbnRzIGFuZCBtYWtl IHN1cmUgcGVyIGNydGMgaWQgaXRzIHRoZSBzYW1lIGNvdW50IG9yCj4gPiBzb21lIHNpbWlsYXIg bG9naWMKPiAKPiBZZWFoLiBXZSBjb3VsZCBmb3IgaW5zdGFuY2UgYWRkIGEgImJvb2wgZ290X3Bh Z2VfZmxpcCIgZmllbGQgaW4gb3VyCj4gZGF0YV9jb25uZWN0b3JfdCBzdHJ1Y3QgYW5kIHNldCBp dCB0byB0cnVlIGhlcmUgKG1ha2luZyBzdXJlIGl0J3Mgbm90Cj4gc2V0IHRvIHRydWUgYWxyZWFk eSkuCj4gCj4gQSBwb2ludGVyIGNhbiBiZSBwYXNzZWQgdG8gcGFnZV9mbGlwX2hhbmRsZXIgdmlh IHRoZSBkYXRhIGFyZ3VtZW50LgoKSSBkaWRudCB1bmRlcnN0YW5kIHdoYXQgeW91IG1lYW50IGJ5 IHBhc3NpbmcgYSBwb2ludGVyIHRvIHBhZ2VfZmxpcF9oYW5kbGVyCnZpYSB0aGUgZGF0YSBhcmd1 bWVudD8KSSBsb29rZWQgdGhyb3VnaCB0aGUgZHJtSGFuZGxlRXZlbnQgZGVmaW5pdGlvbiBhbmQg aXQgcG9wdWxhdGVzIHRoZSB2b2lkICpkYXRhCmluIHBhZ2VfZmxpcF9oYW5kbGVyIHdpdGggdmJs YW5rLT51c2VyX2RhdGEKU28gaXRzIG5vdCBjbGVhciB0byBtZSBob3cgd2UgY2FuIHBhc3Mgb3Vy IGRhdGFfY29ubmVjdG9yX3QgLT4gZ290X3BhZ2VfZmxpcF9ib29sIHRvIHBhZ2VfZmxpcF9oYW5k bGVyCmFuZCBzZXQgdGhhdCB0byB0cnVlIGhlcmUuCgpJIGhhdmUgYWxsIHRoZSBvdGhlciBjaGFu Z2VzIGRvbmUsIHNvIGluIG15IHJldmlzaW9uIHRoYXQgSSBhbSBhYm91dCB0byBzZW5kIGFsbCB0 aGUgY2hhbmdlcyBleGNlcHQgZm9yCnRoaXMgY2hlY2sgdG8gZG91YmxlIGNoZWNrIG51bWJlciBv ZiBwYWdlIGZsaXAgZXZlbnRzID09IG51bV9oX3RpbGVzIGlzIG1pc3NpbmcuCgpBbHNvIGkgb2Jz ZXJ2ZWQgdGhhdCBzaW5jZSB0aGUgZXZlbnRzIGFyZSBxdWV1ZWQsIGl0IGNhbGxzIHRoZSBwYWdl IGZsaXAgaGFuZGxlciB0d2ljZSBpbiB0aGUgZmlyc3Qgd2FpdF9mb3JfcGFnZV9mbGlwKCkgY2Fs bApzbyBldmVuIGlmIGkgbG9vcCBpdCB0aGUgbnVtYmVyIG9mIHRpbWVzID0gbnVtYmVyIG9mIGNv bm5lY3RvcnMsIGl0IGNhbGxzIHBhZ2UgZmxpcCBoYW5kbGVyIHR3aWNlIGZvciB0aGUgZmlyc3Qg bG9vcAphbmQgdGhlbiBkb2VzbnQgY2FsbCBwYWdlIGZsaXAgaGFuZGxlciB0ZWggc2Vjb25kIHRp bWUuCgpTbyBJIGFtIHNraXBwaW5nIHRoYXQgbG9vcGluZyBwYXJ0IGFzIHdlbGwuCgpQbGVhc2Ug bGV0IG1lIGtub3cgeW91ciB0aG91Z2h0cyBhbmQgSSBsb29rIGZvcndhcmQgdG8geW91ciByZXZp ZXcgb24gdGVoIG5ldyByZXZpc2lvbiBJIGFtIHNlbmRpbmcgdG9kYXkuCgpNYW5hc2kKCj4gCj4g PiA+ID4gKwkvKiBTa2lwIHRoZSBmb2xsb3dpbmcgY2hlY2tzIGZvciB0aGUgZmlyc3QgcGFnZSBm bGlwIGV2ZW50ICovCj4gPiA+ID4gKwlpZiAoX3R2X3NlYyA9PSAwIHx8IF90dl91c2VjID09IDAp IHsKPiA+ID4gPiArCQlfdHZfc2VjID0gdHZfc2VjOwo+ID4gPiA+ICsJCV90dl91c2VjID0gdHZf dXNlYzsKPiA+ID4gPiArCQlyZXR1cm47Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ LyoKPiA+ID4gPiArCSAqIEZvciBzZWFtbGVzcyB0ZWFyLWZyZWUgZGlzcGxheSwgdGhlIHBhZ2Ug ZmxpcCBldmVudCB0aW1lc3RhbXBzCj4gPiA+ID4gKwkgKiBmcm9tIGFsbCB0aGUgdGlsZXMgc2hv dWxkIG5vdCBkaWZmZXIgYnkgbW9yZSB0aGFuIDEwdXMuCj4gPiA+ID4gKwkgKi8KPiA+ID4gPiAr CWV4cHIgPSB0dl9zZWMgPT0gX3R2X3NlYyAmJiAoYWJzKHR2X3VzZWMgLSBfdHZfdXNlYykgPCAx MCk7Cj4gPiA+IAo+ID4gPiBOaXQ6IHRoaXMgY291bGQgYmUgcmVuYW1lZCB0byBlLmcuIGlzX29u X3RpbWUsIGV4cHIgaXMgYSBwcmV0dHkgdmFndWUKPiA+ID4gbmFtZS4KPiA+IAo+ID4geWVzIGFn cmVlIHdpbGwgcmVuYW1lIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZQo+ID4gCj4gPiA+ID4gKwlp Z3RfZmFpbF9vbl9mKCFleHByLCAiRGVsYXllZCBwYWdlIGZsaXAgZXZlbnQgZnJvbSBDUlRDOiVk IGF0ICV1OiV1XG4iLAo+ID4gPiA+ICsJCWNydGNfaWQsIHR2X3NlYywgdHZfdXNlYyk7Cj4gPiA+ ID4gKwo+ID4gPiA+ICsJaWYgKHR2X3NlYyA8IF90dl9zZWMpCj4gPiA+ID4gKwkJX3R2X3NlYyA9 IHR2X3NlYzsKPiA+ID4gPiArCWlmICh0dl91c2VjIDwgX3R2X3VzZWMpCj4gPiA+ID4gKwkJX3R2 X3VzZWMgPSB0dl91c2VjOwo+ID4gPiAKPiA+ID4gVGhpcyB1cGRhdGVzIHRoZSB0aW1lc3RhbXAg b24gZWFjaCBwYWdlLWZsaXAuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZmlyc3QKPiA+ID4gYW5kIGxh c3QgcGFnZS1mbGlwcyBjb3VsZCBiZSBkZWxheWVkIGJ5IG1vcmUgdGhhbiAxMMK1cyBpZiB0aGVy ZSBhcmUKPiA+ID4gaW50ZXJtZWRpYXRlIHBhZ2UtZmxpcHMuIEZvciBpbnN0YW5jZSwgaWYgdGhl IGZpcnN0IHBhZ2UtZmxpcCBoYXBwZW5zCj4gPiA+IGF0IHQ9MMK1cyBhbmQgdGhlIHNlY29uZCBv bmUgaGFwcGVucyBhdCB0PTnCtXMsIHRoZSBsYXN0IG9uZSBjb3VsZCBoYXBwZW4KPiA+ID4gYXQg dD0xOMK1cyB3aXRob3V0IG1ha2luZyB0aGlzIHRlc3QgZmFpbHMuIElzIHRoaXMgc29tZXRoaW5n IHdlIHdhbnQgdG8KPiA+ID4gYWxsb3c/Cj4gPiAKPiA+IE5vcGUgYWxsIG9mIHRoZW0gc2hvdWxk IGhhcHBlbiB3aXRoaW4gdGhlIHNhbWUgdmJsYW5rIHNvIHRoZSBkaWZmIGJldHdlZW4gYWxsCj4g PiBzaG91bGQgYmUgPDEwdXMsIHdpbGwgaGF2ZSB0byBtb2RpZnkgdGhlIGxvZ2ljIHRvIGRvIHRo YXQuCj4gPiAKPiA+IHNvIGJhc2ljYWxseSBpbnN0ZWFkIG9mIG1ha2luZyA8MTB1cyBjb25kaXRp b24gZm9yIHRoZSBjb25zZWN1dGl2ZSBvbmVzLCBpdCBzaG91bGQgYmUgYmV0d2VlbiB0aGUgZmly c3Qgb25lCj4gPiBhbmQgYWxsIG90aGVyIGV2ZW50cywgY29ycmVjdD8KPiAKPiBDb3JyZWN0ISBT byB3ZSBjYW4ganVzdCBkcm9wIHRoZXNlIDQgbGluZXMsIHRoYXQgc2hvdWxkIGRvIGl0Lgo+IAo+ ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYWdlZmxp cChpbnQgZHJtX2ZkKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKPiA+ ID4gPiArCWRybUV2ZW50Q29udGV4dCBkcm1fZXZlbnQ7Cj4gPiA+IAo+ID4gPiBOaXQ6IHRvIG1h a2Ugc3VyZSBnYXJiYWdlIGlzbid0IHJlYWQgZnJvbSB0aGlzIHN0cnVjdCAodGhlcmUgYXJlIG90 aGVyCj4gPiA+IGZ1bmN0aW9uIHBvaW50ZXJzKSwgaXQncyBwcm9iYWJseSBzYWZlciB0byB6ZXJv LWZpbGwgaXQgKD0gezB9KS4KPiA+IAo+ID4gR290IGl0Cj4gPiAKPiA+ID4gPiArCWRybV9ldmVu dC52ZXJzaW9uID0gMzsKPiA+ID4gPiArCWRybV9ldmVudC5wYWdlX2ZsaXBfaGFuZGxlcjIgPSBw YWdlX2ZsaXBfaGFuZGxlcjsKPiA+ID4gPiArCj4gPiA+ID4gKwlwZmQuZmQgPSBkcm1fZmQ7Cj4g PiA+ID4gKwlwZmQuZXZlbnRzID0gUE9MTElOOwo+ID4gPiA+ICsJcGZkLnJldmVudHMgPSAwOwo+ ID4gPiA+ICsKPiA+ID4gPiArCXBvbGwoJnBmZCwgMSwgMTAwMCk7Cj4gPiA+IAo+ID4gPiBNYXli ZSB3ZSBzaG91bGQgY2hlY2sgcG9sbCgyKSdzIHJldHVybiB2YWx1ZT8KPiA+IAo+ID4gcG9sbCgy KT8gT3IganVzdCBjaGVjayByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHBvbGwoKSBqdXN0 IGZvciBlcnJvciBoYW5kbGluZz8KPiAKPiBZZXMsIGp1c3QgaW4gY2FzZS4KPiAKPiAoQXMgYSBz aWRlIG5vdGUsIHBvbGwoMikgc2ltcGx5IG1lYW5zICJ0aGUgcG9sbCBzeXN0ZW0gY2FsbCIgYW5k IHJlZmVycwo+IHRvIHBvbGwncyBzeXNjYWxsIG1hbnBhZ2Ugc2VjdGlvbi4pCj4gCj4gPiA+ID4g KwlpZiAocGZkLnJldmVudHMgJiBQT0xMSU4pCj4gPiA+ID4gKwkJZHJtSGFuZGxlRXZlbnQoZHJt X2ZkLCAmZHJtX2V2ZW50KTsKPiA+ID4gCj4gPiA+IElmIHdlIGRvbid0IGdldCBQT0xMSU4gKGUu Zy4gaWYgd2UgdGltZW91dCksIHdhaXRfZm9yX3BhZ2VmbGlwIHdpbGwKPiA+ID4gc2lsZW50bHkg ZG8gbm90aGluZywgYW5kIHRoZSB0ZXN0IHdpbGwgcGFzcy4gSW5zdGVhZCwgd2UgcHJvYmFibHkg d2FudAo+ID4gPiB0byBmYWlsIGluIHRoaXMgY2FzZS4KPiA+IAo+ID4gWWVzIHRoYXRzIGNvcnJl Y3QsIGp1c3QgYWRkIGVsc2UgY2FzZSB3aXRoIGlndF9hc3NlcnQ/Cj4gCj4gWWVzIQo+IAo+ID4g PiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtpZ3RfbWFpbgo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlp Z3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gPiA+ID4gKwlkYXRhX2Nvbm5lY3Rvcl90ICpjb25uX2Rh dGEgPSBOVUxMOwo+ID4gPiA+ICsJZGF0YV90IGRhdGEgPSB7LmRybV9mZCA9IDAsIC5udW1faF90 aWxlcyA9IDAsCj4gPiA+ID4gKwkJICAgICAgIC5kaXNwbGF5ID0gTlVMTCwgLmNvbW1pdCA9IENP TU1JVF9MRUdBQ1l9Owo+ID4gPiAKPiA+ID4gTml0OiBvbmUgY2FuIGp1c3QgZG8gYXNzaWduIHRv IHswfSB0byB6ZXJvLWZpbGwgdGhlIHN0cnVjdC4KPiA+IAo+ID4gR290IGl0Cj4gPiAKPiA+ID4g PiArCWlndF9maXh0dXJlIHsKPiA+ID4gPiArCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2RyaXZl cl9tYXN0ZXIoRFJJVkVSX0FOWSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCWttc3Rlc3Rfc2V0X3Z0 X2dyYXBoaWNzX21vZGUoKTsKPiA+ID4gPiArCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkaXNwbGF5 LCBkYXRhLmRybV9mZCk7Cj4gPiA+ID4gKwkJaWd0X2Rpc3BsYXlfcmVzZXQoJmRpc3BsYXkpOwo+ ID4gPiA+ICsKPiA+ID4gPiArCQlkYXRhLmRpc3BsYXkgPSAmZGlzcGxheTsKPiA+ID4gPiArCj4g PiA+ID4gKwkJZ2V0X251bWJlcl9vZl9oX3RpbGVzKCZkYXRhKTsKPiA+ID4gPiArCQlpZ3RfZGVi dWcoIk51bWJlciBvZiBIb3Jpem9udGFsIFRpbGVzOiAlZFxuIiwgZGF0YS5udW1faF90aWxlcyk7 Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCWRhdGEuY29tbWl0ID0gZGF0YS5kaXNwbGF5LT5pc19hdG9t aWMgPyBDT01NSVRfQVRPTUlDIDogQ09NTUlUX0xFR0FDWTsKPiA+ID4gCj4gPiA+IFNob3VsZCB3 ZSB0cnkgdG8gcnVuIHRoaXMgdGVzdCBhdCBhbGwgb24gZHJpdmVycyB0aGF0IGRvbid0IHN1cHBv cnQKPiA+ID4gYXRvbWljPwo+ID4gPiAKPiA+ID4gSWYgdGhlIGRyaXZlciBkb2Vzbid0IHN1cHBv cnQgYXRvbWljLCB1c2VyLXNwYWNlIHdpbGwgc3VibWl0IHR3byBwYWdlLQo+ID4gPiBmbGlwIHJl cXVlc3RzLiBIb3dldmVyIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgaGFyZHdhcmUgZXhlY3V0ZXMg YSBwYWdlLQo+ID4gPiBmbGlwIGJldHdlZW4gYm90aCByZXF1ZXN0czogdXNlci1zcGFjZSBjYWxs cyB0aGUgZmlyc3QgZHJtTW9kZVBhZ2VGbGlwLAo+ID4gPiB0aGUgdmJsYW5rIGZvciB0aGlzIHBh cnRpY3VsYXIgQ1JUQyB0cmlnZ2VycywgdGhlbiB1c2VyLXNwYWNlIGNhbGxzIHRoZQo+ID4gPiBz ZWNvbmQgZHJtTW9kZVBhZ2VGbGlwLiBQYWdlLWZsaXBzIHdpbGwgYmUgb3V0LW9mLXN5bmMgYnkg b25lIGZyYW1lLgo+ID4gCj4gPiBIbW0sIHllYSBzaG91bGQgcHJvYmJhbHkgaGF2ZSBpZ3RfcmVx dWlyZSBvbiBhdG9taWMKPiA+IAo+ID4gPiA+ICsJCWlmIChkYXRhLm51bV9oX3RpbGVzID4gMCkK PiA+ID4gPiArCQkJY29ubl9kYXRhID0gbWFsbG9jKGRhdGEubnVtX2hfdGlsZXMgKiBzaXplb2Yo ZGF0YV9jb25uZWN0b3JfdCkpOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiArCWlndF9z dWJ0ZXN0KCJiYXNpYy10ZXN0LXBhdHRlcm4iKSB7Cj4gPiA+ID4gKwkJaWd0X3NraXBfb24oZGF0 YS5udW1faF90aWxlcyA9PSAwKTsKPiA+ID4gPiArCQlpZ3RfYXNzZXJ0KGNvbm5fZGF0YSk7Cj4g PiA+ID4gKwo+ID4gPiA+ICsJCWdldF9jb25uZWN0b3IoJmRhdGEsIGNvbm5fZGF0YSk7Cj4gPiA+ ID4gKwkJc2V0dXBfbW9kZSgmZGF0YSwgY29ubl9kYXRhKTsKPiA+ID4gPiArCQlzZXR1cF9mcmFt ZWJ1ZmZlcigmZGF0YSwgY29ubl9kYXRhKTsKPiA+ID4gPiArCQlpZ3RfZGlzcGxheV9jb21taXRf YXRvbWljKGRhdGEuZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX05PTkJMT0NLIHwKPiA+ID4gPiAr CQkJRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULCBOVUxMKTsKPiA+ID4gPiArCQl3YWl0X2Zvcl9w YWdlZmxpcChkYXRhLmRybV9mZCk7Cj4gPiA+IAo+ID4gPiBIZXJlIHdlIG9ubHkgd2FpdCBmb3Ig YSBzaW5nbGUgcGFnZS1mbGlwLiBUaGlzIHdpbGwgb25seSBzdGFzaCB0aGUKPiA+ID4gdGltZXN0 YW1wIG9mIHRoZSBmcnN0IHBhZ2UtZmxpcCB3aXRob3V0IGNoZWNraW5nIHRoZSB0aW1lLXN0YW1w IG9mCj4gPiA+IHN1YnNlcXVlbnQgcGFnZS1mbGlwcy4gV2Ugc2hvdWxkIHdhaXQgZm9yIGFzIG1h bnkgcGFnZS1mbGlwcyBhcyBlbmFibGVkCj4gPiA+IHRpbGVkIGNvbm5lY3RvcnMuCj4gPiAKPiA+ IFRoYXQgd2FzIG91ciBpbml0aWFsIHVuZGVyc3RhbmRpbmcgYXMgd2VsbCwgYnV0IHdpdGgganVz dCBvbmUgd2FpdF9mb3JfcGFnZWZsaXAgY2FsbCB3ZQo+ID4gd2VyZSBnZXRpbmcgdHdvIHBhZ2Ug ZmxpcCBldmVudHMgZm9yIHR3byB0aWxlcwo+ID4gRG8gd2UgbmVlZCB0byBjYWxsIHdhaXQgZm9y IHBhZ2UgZmxpcCBleHBsaWNpdGx5IHRoZSBudW1iZXIgb2YgdGltZXMgPSBudW1iZXIgb2YgdGls ZXM/Cj4gCj4gT2gsIEkgc2VlLiBTbyBpdCBzZWVtcyB0d28gZXZlbnRzIGFyZSBxdWV1ZWQuIFRo ZW4gd2Ugc2hvdWxkIHByb2JhYmx5Cj4gbG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFnZS1mbGlwIGZv ciBhbGwgQ1JUQ3MsIHNpbmNlIHRoZXJlJ3Mgbm8KPiBndWFyYW50ZWUgYWxsIGV2ZW50cyB3aWxs IGJlIHNlbnQgYXQgb25jZS4KPiAKPiA+IFJlZ2FyZHMKPiA+IE1hbmFzaQo+ID4gCj4gPiA+ID4g KwkJdGVzdF9jbGVhbnVwKCZkYXRhLCBjb25uX2RhdGEpOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsK PiA+ID4gPiArCWlndF9maXh0dXJlIHsKPiA+ID4gPiArCQlmcmVlKGNvbm5fZGF0YSk7Cj4gPiA+ ID4gKwkJY2xvc2UoZGF0YS5kcm1fZmQpOwo+ID4gPiA+ICsJCWttc3Rlc3RfcmVzdG9yZV92dF9t b2RlKCk7Cj4gPiA+ID4gKwkJaWd0X2Rpc3BsYXlfZmluaShkYXRhLmRpc3BsYXkpOwo+ID4gPiA+ ICsJfQo+ID4gPiA+ICt9Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIv dGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gPiBpbmRleCBhN2IyYjMyMi4uNTAyOTJkZjggMTAwNjQ0 Cj4gPiA+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gPiArKysgYi90ZXN0cy9tZXNv bi5idWlsZAo+ID4gPiA+IEBAIC0yNiw2ICsyNiw3IEBAIHRlc3RfcHJvZ3MgPSBbCj4gPiA+ID4g IAkna21zX2N1cnNvcl9lZGdlX3dhbGsnLAo+ID4gPiA+ICAJJ2ttc19jdXJzb3JfbGVnYWN5JywK PiA+ID4gPiAgCSdrbXNfZHBfZHNjJywKPiA+ID4gPiArCSdrbXNfZHBfdGlsZWRfZGlzcGxheScs Cj4gPiA+ID4gIAkna21zX2RyYXdfY3JjJywKPiA+ID4gPiAgCSdrbXNfZmJjb25fZmJ0JywKPiA+ ID4gPiAgCSdrbXNfZmVuY2VfcGluX2xlYWsnLApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2lndC1kZXY=