From mboxrd@z Thu Jan 1 00:00:00 1970 From: "R, Dhanya p" Subject: Re: [PATCH] tests/kms_color:Color IGT Date: Mon, 14 Dec 2015 13:13:48 +0530 Message-ID: <566E7334.4020203@intel.com> References: <1449829902-21924-1-git-send-email-dhanya.p.r@intel.com> <1449848136.10248.36.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 737426E00E for ; Sun, 13 Dec 2015 23:43:51 -0800 (PST) In-Reply-To: <1449848136.10248.36.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rob Bradford , intel-gfx@lists.freedesktop.org Cc: jesse.barnes@intel.com List-Id: intel-gfx@lists.freedesktop.org SEkgUm9iLAoKVGhhbmtzIGZvciB0aGUgZmVlZGJhY2suClBsZWFzZSBmaW5kIG15IGNvbW1lbnRz IGlubGluZS4KClJlZ2FyZHMsCkRoYW55YQpPbiAxMi8xMS8yMDE1IDk6MDUgUE0sIFJvYiBCcmFk Zm9yZCB3cm90ZToKPiBPbiBGcmksIDIwMTUtMTItMTEgYXQgMTY6MDEgKzA1MzAsIERoYW55YSBQ aWxsYWkgd3JvdGU6Cj4+IEZyb206IERoYW55YSA8ZGhhbnlhLnAuckBpbnRlbC5jb20+Cj4+Cj4+ IFRoaXMgcGF0Y2ggd2lsbCB2ZXJpZnkgY29sb3IgY29ycmVjdGlvbiBjYXBhYmlsaXR5IG9mIGEg ZGlzcGxheQo+PiBkcml2ZXIuCj4+IEdhbW1hL0NTQy9EZS1nYW1tYSBmb3IgU0tML0JYVCBzdXBw b3J0ZWQuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IERoYW55YSA8ZGhhbnlhLnAuckBpbnRlbC5jb20+ Cj4+IC0tLQo+PiAgIHRlc3RzLy5naXRpZ25vcmUgICAgICAgfCAgIDEgKwo+PiAgIHRlc3RzL01h a2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+PiAgIHRlc3RzL2ttc19jb2xvci5jICAgICAgfCA2ODQK Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAg IDMgZmlsZXMgY2hhbmdlZCwgNjg2IGluc2VydGlvbnMoKykKPj4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgdGVzdHMva21zX2NvbG9yLmMKPj4KPj4gZGlmZiAtLWdpdCBhL3Rlc3RzLy5naXRpZ25vcmUg Yi90ZXN0cy8uZ2l0aWdub3JlCj4+IGluZGV4IDgwYWY5YTcuLjU4Yzc5ZTIgMTAwNjQ0Cj4+IC0t LSBhL3Rlc3RzLy5naXRpZ25vcmUKPj4gKysrIGIvdGVzdHMvLmdpdGlnbm9yZQo+PiBAQCAtMTI3 LDYgKzEyNyw3IEBAIGdlbjdfZm9yY2V3YWtlX210Cj4+ICAga21zXzNkCj4+ICAga21zX2FkZGZi X2Jhc2ljCj4+ICAga21zX2F0b21pYwo+PiAra21zX2NvbG9yCj4+ICAga21zX2NydGNfYmFja2dy b3VuZF9jb2xvcgo+PiAgIGttc19jdXJzb3JfY3JjCj4+ICAga21zX2RyYXdfY3JjCj4+IGRpZmYg LS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ PiBpbmRleCA4ZmIyZGU4Li45MDZjMTRmIDEwMDY0NAo+PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCj4+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4gQEAgLTY0LDYgKzY0LDcg QEAgVEVTVFNfcHJvZ3NfTSA9IFwKPj4gICAJZ2VtX3dyaXRlX3JlYWRfcmluZ19zd2l0Y2ggXAo+ PiAgIAlrbXNfYWRkZmJfYmFzaWMgXAo+PiAgIAlrbXNfYXRvbWljIFwKPj4gKwlrbXNfY29sb3Ig XAo+PiAgIAlrbXNfY3Vyc29yX2NyYyBcCj4+ICAgCWttc19kcmF3X2NyYyBcCj4+ICAgCWttc19m YmNfY3JjIFwKPj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19jb2xvci5jIGIvdGVzdHMva21zX2Nv bG9yLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uYjVkMTk5Ygo+ PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3Rlc3RzL2ttc19jb2xvci5jCj4+IEBAIC0wLDAgKzEs Njg0IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24K Pj4gKyAqCj4+ICsgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24KPj4gb2J0YWluaW5nIGEKPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPj4gIlNvZnR3YXJl IiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dAo+PiBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPj4gc3VibGljZW5zZSwK Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tCj4+IHRoZQo+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPj4gY29uZGl0aW9uczoKPj4gKyAqCj4+ICsg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nCj4+IHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPj4gcG9ydGlvbnMgb2YgdGhlCj4+ICsgKiBT b2Z0d2FyZS4KPj4gKyAqCj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPj4gRVhQUkVTUyBPUgo+PiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+PiBNRVJD SEFOVEFCSUxJVFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8KPj4gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCj4+ IE9SIE9USEVSCj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPj4gQVJJU0lORwo+PiArICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+PiBPVEhFUiBE RUFMSU5HUwo+PiArICogSU4gVEhFIFNPRlRXQVJFLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsj aW5jbHVkZSA8bWF0aC5oPgo+PiArI2luY2x1ZGUgImRybXRlc3QuaCIKPj4gKyNpbmNsdWRlICJk cm0uaCIKPj4gKyNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgo+PiArI2luY2x1ZGUgImlndF9rbXMu aCIKPj4gKyNpbmNsdWRlICJpZ3RfY29yZS5oIgo+PiArI2luY2x1ZGUgImludGVsX2lvLmgiCj4+ ICsjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+PiArI2luY2x1ZGUgImlndF9hdXguaCIKPj4g KyNpbmNsdWRlPHVuaXN0ZC5oPgo+PiArI2luY2x1ZGU8c3RkbGliLmg+Cj4gVGhlcmUgYXJlIHF1 aXRlIGEgZmV3IGNvZGluZyBzdHlsZSBpc3N1ZXMgZm91bmQgYnkgY2hlY2twYXRjaDogaHR0cHM6 Ly8KPiBwYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3Nlcmllcy85ODkvIHBlcmhhcHMgeW91IGNv dWxkIHJ1bgo+IGNoZWNrcGF0Y2gucGwgbG9jYWxseSBiZWZvcmUgc2VuZGluZyB0aGUgbmV4dCB2 ZXJzaW9uPwo+Cj4gbml0OiBzcGFjaW5nICYgcGVyaGFwcyBzeXN0ZW0gaGVhZGVycyBzaG91bGQg YmUgYWhlYWQgb2YgaWd0IGhlYWRlcnMKPiAoY2hlY2sgb3RoZXIgZmlsZSBjb2Rpbmcgc3R5bGUp CldpbGwgZml4IHRoZXNlLgo+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+Cj4+ICsKPj4gKwo+PiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3Qg Q29sb3IgRmVhdHVyZXMgYXQgUGlwZSBsZXZlbCIpOwo+PiArLyoKPj4gK1RoaXMgdG9vbCB0ZXN0 cyB0aGUgZm9sbG93aW5nIGNvbG9yIGZlYXR1cmVzOgo+PiArCTEuY3NjLXJlZAo+PiArCTIuY3Nj LWdyZWVuCj4+ICsJMy5jc2MtYmx1ZQo+PiArCTQuZ2FtbWEtbGVnYWN5Cj4+ICsJNS5nYW1tYS04 Yml0Cj4+ICsJNi5nYW1tYS0xMGJpdAo+PiArCTcuZ2FtbWEtMTJiaXQKPj4gKwk4LmdhbW1hLXNw bGl0Cj4+ICsKPj4gK1ZlcmlmaWNhdGlvbiBpcyBkb25lIGJ5IENSQyBjaGVja3MuCj4+ICsKPj4g KyovCj4+ICsKPj4gKyNkZWZpbmUgQ1NDX01BWF9WQUxTICAgIDkKPj4gKyNkZWZpbmUgR0VOOV9T UExJVEdBTU1BX01BWF9WQUxTICAgICAgICAgICAgICAgIDUxMgo+PiArI2RlZmluZSBHRU45XzhC SVRfR0FNTUFfTUFYX1ZBTFMgICAgICAgICAgICAgICAgMjU2Cj4+ICsjZGVmaW5lIEdFTjlfMTBC SVRfR0FNTUFfTUFYX1ZBTFMgICAgICAgICAgICAgICAxMDI0Cj4+ICsjZGVmaW5lIEdFTjlfMTJC SVRfR0FNTUFfTUFYX1ZBTFMgICAgICAgICAgICAgICA1MTMKPj4gKyNkZWZpbmUgR0VOOV9NQVhf R0FNTUEgICAgICAgICAgICAgICAgICAgICAgICAgKCgxIDw8IDI0KSAtIDEpCj4+ICsjZGVmaW5l IEdFTjlfTUlOX0dBTU1BCQkJCTAKPiBHRU45PyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgY3VycmVu dGx5IGVuYWJsZWQgZm9yIEJEVyBvbndhcmRzIChidXQgSQo+IHRoaW5rIGluIHRoZW9yeSBjb3Vs ZCBiZSBlbmFibGVkIGZvciBIU1cpCldpbGwgY2hhbmdlIEdFTjkgLT4gQkRXLgo+Cj4+ICsjZGVm aW5lIFJFRF9DU0MgMAo+PiArI2RlZmluZSBHUkVFTl9DU0MgMQo+PiArI2RlZmluZSBCTFVFX0NT QyAyCj4+ICsjZGVmaW5lIFJFRF9GQiAwCj4+ICsjZGVmaW5lIEdSRUVOX0ZCIDEKPj4gKyNkZWZp bmUgQkxVRV9GQiAyCj4+ICsKPj4gK3N0cnVjdCBfZHJtX3IzMmczMmIzMiB7Cj4+ICsJX191MzIg cjMyOwo+PiArCV9fdTMyIGczMjsKPj4gKwlfX3UzMiBiMzI7Cj4+ICsJX191MzIgcmVzZXJ2ZWQ7 Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgX2RybV9wYWxldHRlIHsKPj4gKwlzdHJ1Y3QgX2RybV9y MzJnMzJiMzIgbHV0WzBdOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IF9kcm1fY3RtIHsKPj4gKwlf X3M2NCBjdG1fY29lZmZbOV07Cj4+ICt9Owo+PiArCj4gU3Vycm91bmQgdGhlc2Ugc3RydWN0dXJl IGRlZmluaXRpb25zIHdpdGggI2lmbmRlZnMgc28gdGhhdCB0aGlzCj4gY29udGludWVzIHRvIHdv cmsgd2hlbiBsaWJyZHJtIGdldHMgdXBkYXRlZC4KV2lsbCBmaXggdGhpcy4KPj4gK2Zsb2F0IGN0 bV9yZWRbOV0gPSB7MSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMH07Cj4+ICtmbG9hdCBjdG1fZ3Jl ZW5bOV0gPSB7MCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMH07Cj4+ICtmbG9hdCBjdG1fYmx1ZVs5 XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxfTsKPj4gK2Zsb2F0IGN0bV91bml0eVs5XSA9 IHsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxfTsKPiBUaGVzZSBhcmUgb25seSB1c2VkIGluIHRo aXMgZmlsZSwgYW5kIG5ldmVyIGNoYW5nZWQ6IC0+IHN0YXRpYyBjb25zdC4KPgo+IHMvdW5pdHkv aWRlbnRpdHkvIChJIHRoaW5rIHVuaXR5IGlzIHRoZSB3cm9uZyB0ZXJtaW5vbG9neSBoZXJlLikK Pgo+IEknZCBsaWtlIHRvIHNlZSB2ZXJzaW9ucyBvZiB0aGUgQ1RNIHRlc3RzIHRoYXQ6Cj4KPiBh LikgVGVzdCB3aXRoIG5lZ2F0aXZlIGNvZWZmaWNpZW50cwo+IGIuKSBXaXRoIGZyYWN0aW9uYWwg Y29lZmZlY2llbnRzIChvbiBCRFcgdGhlIHRoZSBjb2VmZmljaWVudHMgYXJlCj4gc3RvcmVkIGlu IGEgZnVua3kgcHNldWRvIGZwIGZvcm1hdC4gVGVzdGluZyBzb21lIG9mIHRob3NlIGFyZSBlc3Nl bnRpYWwKPiAodGVzdGluZyBhbGwgZXZlbiBiZXR0ZXIuKQo+IGMuKSBTd2FwcGluZyByZWQgd2l0 aCBncmVlbiB3b3VsZCBiZSBhIGdvb2QgdGVzdCB0b28uCldpbGwgYWRkIHRoZXNlIHRlc3RzLgo+ PiArc3RydWN0IGZyYW1lYnVmZmVyX2NvbG9yIHsKPj4gKwlpbnQgcmVkOwo+PiArCWludCBncmVl bjsKPj4gKwlpbnQgYmx1ZTsKPj4gK307Cj4+ICtzdHJ1Y3QgZnJhbWVidWZmZXJfY29sb3IgZmJf Y29sb3IgPSB7MCwwLDB9Owo+IE1heWJlIG5hbWUgdGhpcyBmYl9jb2xvcl9ibGFjayA/ClRoaXMg aXMganVzdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZiLgo+PiArCj4+ICtpZ3RfY3JjX3Qg Y3JjX3JlZmVyZW5jZSwgY3JjX3JlZmVyZW5jZV9ibGFjaywgY3JjX3JlZmVyZW5jZV93aGl0ZTsK Pj4gK2lndF9jcmNfdCBjcmNfYmxhY2ssIGNyY193aGl0ZSwgY3JjX2N1cnJlbnQ7Cj4gc3RhdGlj IF4KV2lsbCBmaXggdGhpcy4KPj4gK3N0cnVjdCBkYXRhX3Qgewo+PiArCWludCBmYl9pbml0aWFs Owo+PiArCWludCBkcm1fZmQ7Cj4+ICsJaW50IGdlbjsKPj4gKwlpbnQgdywgaDsKPj4gKwlpZ3Rf ZGlzcGxheV90IGRpc3BsYXk7Cj4+ICsJc3RydWN0IGlndF9mYiBmYl9wcmVwOwo+PiArCXN0cnVj dCBpZ3RfZmIgZmIsIGZiMTsKPj4gKyAgICAgICAgaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOwo+ PiArCWVudW0gcGlwZSBwaXBlOwo+PiArCj4+ICt9Owo+PiArCj4+ICsKPj4gK3N0YXRpYyBpbnQg Y3JlYXRlX2Jsb2IoaW50IGZkLCB1aW50NjRfdCAqZGF0YSwgaW50IGxlbmd0aCkKPj4gK3sKPj4g KwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgYmxvYjsKPj4gKwlpbnQgcmV0ID0gLTE7Cj4+ ICsKPj4gKwlibG9iLmRhdGEgPSAodWludDY0X3QpZGF0YTsKPj4gKwlibG9iLmxlbmd0aCA9IGxl bmd0aDsKPj4gKwlibG9iLmJsb2JfaWQgPSAtMTsKPj4gKwlyZXQgPSBpb2N0bChmZCwgRFJNX0lP Q1RMX01PREVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsKPj4gKwlpZiAoIXJldCkKPj4gKwkJcmV0 dXJuIGJsb2IuYmxvYl9pZDsKPj4gKwlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJFKTsKPj4gKwly ZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBwcmVwYXJlX2NydGMoc3RydWN0 IGRhdGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsCj4+ICsJCQkgZW51bSBwaXBlIHBp cGUxLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4+IGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPj4gKwkJ CSBlbnVtIGlndF9jb21taXRfc3R5bGUgcykKPj4gK3sKPj4gKwlpZ3RfZGlzcGxheV90ICpkaXNw bGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4+ICsKPj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1 dCwgcGlwZTEpOwo+PiArCQo+PiArCWlndF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjKTsK Pj4gKyAgICAgICAgZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KHBpcGUxLAo+PiBJ TlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7Cj4+ICsJCj4+ICsJLyogYmVmb3JlIGFsbG9jYXRp bmcsIGZyZWUgaWYgYW55IG9sZGVyIGZiICovCj4+ICsJaWYgKGRhdGEtPmZiX2luaXRpYWwpIHsK Pj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYl9wcmVwKTsKPj4gKwkJ ZGF0YS0+ZmJfaW5pdGlhbCA9IDA7Cj4+ICsJfQo+PiArCj4+ICsJLyogYWxsb2NhdGUgZmIgZm9y IHBsYW5lIDEgKi8KPj4gKwlkYXRhLT5mYl9pbml0aWFsID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihk YXRhLT5kcm1fZmQsCj4+ICsJCQkJCSAgICAgICBtb2RlLT5oZGlzcGxheSwgbW9kZS0KPj4+IHZk aXNwbGF5LAo+PiArCQkJCQkgICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPj4gKwkJCQkJICAg ICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRAo+PiBfWF9USUxFRCwgLyogdGlsZWQgKi8KPj4gKwkJ CQkJICAgICAgIGZiX2NvbG9yLnJlZCwKPj4gZmJfY29sb3IuZ3JlZW4sIGZiX2NvbG9yLmJsdWUs Cj4+ICsJCQkJCSAgICAgICAmZGF0YS0+ZmJfcHJlcCk7Cj4+ICsJaWd0X2Fzc2VydChkYXRhLT5m Yl9pbml0aWFsKTsKPj4gKwo+PiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYl9w cmVwKTsKPj4gKwo+PiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgcyk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGNsZWFudXBfZmIoc3RydWN0IGRhdGFfdCAqZGF0YSkKPj4gK3sK Pj4gKwo+PiArCWlmIChkYXRhLT5mYl9pbml0aWFsKSB7Cj4+ICsJCWlndF9yZW1vdmVfZmIoZGF0 YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJfcHJlcCk7Cj4+ICsJCWRhdGEtPmZiX2luaXRpYWwgPSAwOwo+ PiArCX0KPj4gKwlpZiAoZGF0YS0+ZmIuZmJfaWQpCj4+ICsJCWlndF9yZW1vdmVfZmIoZGF0YS0+ ZHJtX2ZkLCAmZGF0YS0+ZmIpOwo+PiArCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNsZWFu dXBfY3J0YyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPj4gKwkJ CSBpZ3RfcGxhbmVfdCAqcGxhbmUpCj4+ICt7Cj4+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9 ICZkYXRhLT5kaXNwbGF5Owo+PiArCj4+ICsJaWYgKCFwbGFuZS0+aXNfcHJpbWFyeSkgewo+PiAr CQlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPj4gKwo+PiArCQlwcmltYXJ5ID0gaWd0X291dHB1dF9n ZXRfcGxhbmUob3V0cHV0LAo+PiBJR1RfUExBTkVfUFJJTUFSWSk7Cj4+ICsJCWlndF9wbGFuZV9z ZXRfZmIocHJpbWFyeSwgTlVMTCk7Cj4+ICsJfQo+PiArCj4+ICsJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgTlVMTCk7Cj4+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfQU5ZKTsK Pj4gKz4gCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4+ ICsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBnZXRfY29sb3JfcHJvcGVydHkoaW50IGRybV9m ZCwgaW50IGlkLCBpbnQgb2JqZWN0LGNvbnN0Cj4+IGNoYXIgKnByb3BfbmFtZSwKPj4gKwkJCSAg ICAgIGludCBibG9iX2lkKQo+PiArewo+PiArCWludCBpID0gMCwgcmV0ID0gMDsKPj4gKwlkcm1N b2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wcyA9IE5VTEw7Cj4+ICsJaWd0X2ZhaWxfb25fZihp ZCA8IDAgfHwgKChvYmplY3QgIT0gRFJNX01PREVfT0JKRUNUX0NSVEMpICYmCj4+ICsJCSAgICAg IChvYmplY3QgIT0gRFJNX01PREVfT0JKRUNUX1BMQU5FKSksCj4+ICsJCSAgICAgICJJbnZhbGlk IGlucHV0IHRvIGdldCBjb2xvciBwcm9wZXJ0eSAlZCIsIGlkKTsKPj4gKwo+PiArCXByb3BzID0g ZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoZHJtX2ZkLCBpZCwgb2JqZWN0KTsKPj4gKwlpZ3Rf ZmFpbF9vbl9mKCFwcm9wcywKPj4gKwkJICAgICAiXG5ObyBwcm9wZXJ0eSBmb3Igb2JqZWN0IGlk PSVkXG4iLCBpZCk7Cj4+ICsJZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsr KSB7Cj4+ICsJCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wID0gZHJtTW9kZUdldFByb3BlcnR5KGRy bV9mZCwKPj4gKwkJCQkJCQkgICAgIHByb3BzLQo+Pj4gcHJvcHNbaV0pOwo+PiArCQlpZiAoc3Ry Y21wKHByb3AtPm5hbWUsIHByb3BfbmFtZSkgPT0gMCkgewo+PiArCQkJYmxvYl9pZCA9IHByb3Bz LT5wcm9wX3ZhbHVlc1tpXTsKPj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ICsJCWRybU1vZGVGcmVl UHJvcGVydHkocHJvcCk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gYmxvYl9pZDsKPj4gKwlkcm1N b2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwo+PiArCWlndF9mYWlsX29uX2YoaSA9PSBw cm9wcy0+Y291bnRfcHJvcHMsCj4+ICsJCSAgICAgICIlcyBObyBzdWNoIHByb3BlcnR5XG4iLCBw cm9wX25hbWUpOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKwo+PiArc3RhdGljIGlu dCBzZXRfY29sb3JfcHJvcGVydHkoaW50IGRybV9mZCwgaW50IGlkLCBpbnQgb2JqZWN0LCBjb25z dAo+PiBjaGFyICpwcm9wX25hbWUsIGludCBibG9iX2lkKQo+PiArewo+PiArCWludCBpID0gMCwg cmVzOwo+PiArCj4+ICsJZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHMgPSBOVUxMOwo+ PiArCWlndF9mYWlsX29uX2YoaWQgPCAwIHx8ICgob2JqZWN0ICE9IERSTV9NT0RFX09CSkVDVF9D UlRDKSAmJgo+PiArICAgICAgICAgICAgICAgICAgICAgIChvYmplY3QgIT0gRFJNX01PREVfT0JK RUNUX1BMQU5FKSksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgaW5wdXQgdG8g Z2V0IGNvbG9yIHByb3BlcnR5ICVkIiwgaWQpOwo+PiArCj4+ICsKPj4gKwlwcm9wcyA9IGRybU1v ZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRybV9mZCwgaWQsIG9iamVjdCk7Cj4+ICsgICAgICAgIGln dF9mYWlsX29uX2YoIXByb3BzLAo+PiArICAgICAgICAgICAgICAgICAgICAgIlxuTm8gcHJvcGVy dHkgZm9yIG9iamVjdCBpZD0lZFxuIiwgaWQpOwo+PiArCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+ Y291bnRfcHJvcHM7IGkrKykgewo+PiArCQlkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCA9IGRybU1v ZGVHZXRQcm9wZXJ0eShkcm1fZmQsCj4+ICsJCQkJCQkJICAgICBwcm9wcy0KPj4+IHByb3BzW2ld KTsKPj4gKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCBwcm9wX25hbWUpID09IDApIHsKPj4gKwkJ CXJlcyA9IGRybU1vZGVPYmplY3RTZXRQcm9wZXJ0eShkcm1fZmQsIGlkLAo+PiBvYmplY3QsCj4+ ICsJCQkJCQkgICAgICAgKHVpbnQzMl90KXBybwo+PiBwLT5wcm9wX2lkLCBibG9iX2lkKTsKPj4g Kwo+PiArCQkJaWYgKHJlcykgewo+PiArCQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4+ ICsJCQkJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKPj4gKwkJCX0gZWxzZSB7 Cj4+ICsJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKPj4gKwkJCQlicmVhazsKPj4gKwkJ CX0KPj4gKwkJfQo+PiArCj4+ICsJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4+ICsJfQo+ PiArCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7Cj4+ICsgICAgICAgIGlndF9m YWlsX29uX2YoaSA9PSBwcm9wcy0+Y291bnRfcHJvcHMsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIiVzIE5vIHN1Y2ggcHJvcGVydHlcbiIsIHByb3BfbmFtZSk7Cj4+ICsJcmV0dXJuIDA7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQ2NF90ICBjb252ZXJ0RmxvYXRUb0JpbmFyeShkb3VibGUg aW5wdXQpCj4+ICt7Cj4+ICsKPj4gKwlpbnQgaW50ZWdlcl9wYXJ0LCBjb3VudCA9IDA7Cj4+ICsJ dWludDMyX3QgdGVtcF9pcCwgZnJhY192YWwgPSAweDAwMDAwMDAwOwo+PiArCXVpbnQ2NF90IGlu dGVnZXJfdmFsID0gMHgwMDAwMDAwMDsKPj4gKwlpbnQ2NF90ICB2YWx1ZSA9IDB4MDAwMDAwMDAw MDAwMDAwMDsKPj4gKwlmbG9hdCBmcmFjdGlvbmFsX3BhcnQsIGlwOwo+PiArCWludGVnZXJfcGFy dCA9IChpbnQpaW5wdXQ7Cj4+ICsJZnJhY3Rpb25hbF9wYXJ0ID0gaW5wdXQgLSBpbnRlZ2VyX3Bh cnQ7Cj4+ICsJd2hpbGUgKGZyYWN0aW9uYWxfcGFydCAhPSAwLjAwMDAwMCkgewo+PiArCQlpcCA9 IGZyYWN0aW9uYWxfcGFydCAqIDE2Owo+PiArCQl0ZW1wX2lwID0gKGludCkoZnJhY3Rpb25hbF9w YXJ0ICogMTYpOwo+PiArCQlmcmFjX3ZhbCA9IGZyYWNfdmFsIHwgKHRlbXBfaXAgPDwgKDI4IC0g Y291bnQgKiA0KSk7Cj4+ICsJCWNvdW50Kys7Cj4+ICsJCWZyYWN0aW9uYWxfcGFydCA9IGlwIC0g dGVtcF9pcDsKPj4gKwl9Cj4+ICsJaW50ZWdlcl92YWwgPSBpbnRlZ2VyX3BhcnQ7Cj4+ICsJdmFs dWUgPSB2YWx1ZSB8IChpbnRlZ2VyX3ZhbCA8PCAzMik7Cj4+ICsJdmFsdWUgPSB2YWx1ZSB8IGZy YWNfdmFsOwo+PiArCXJldHVybiB2YWx1ZTsKPj4gKwo+IEdpdmVuIHRoZSB0cnVuY2F0aW9uIGJ5 IHRoZSBIVywgSSB0aGluayB5b3UgY2FuIHJlcGxhY2UgdGhpcyB3aXRoIGlucHV0Cj4gKiAoMXVs bCA8PCAzMikuIChJIHRoaW5rLi4uKQpDYW4geW91IGNsYXJpZnkgbW9yZS4KPj4gKwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCB3cml0ZV9nYW1tYV9sdXQoIHVpbnQzMl90IG51bV9zYW1wbGVz LCBzdHJ1Y3QKPj4gX2RybV9yMzJnMzJiMzIgKmdhbW1hX3B0ciwgaW50IHVuaXRfZ2FtbWEgKQo+ PiArewo+PiArCXVuc2lnbmVkIHNob3J0IFJlZCwgR3JlZW4sIEJsdWU7Cj4+ICsJdWludDMyX3Qg cjMyLCBiMzIsIGczMjsKPj4gKwl1aW50NjRfdCBpLCAgdmFsOwo+PiArCj4+ICsJZm9yIChpID0g MDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKPj4gKwkJaWYodW5pdF9nYW1tYSA9PSAwKSB7Cj4+ ICsJCUJsdWUgPSBHRU45X01BWF9HQU1NQTsKPj4gKwkJR3JlZW4gPSBHRU45X01BWF9HQU1NQTsK Pj4gKwkJUmVkID0gR0VOOV9NQVhfR0FNTUE7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCUJsdWUgPSBH RU45X01JTl9HQU1NQTsKPj4gKwkJR3JlZW4gPSBHRU45X01JTl9HQU1NQTsKPj4gKwkJUmVkID0g R0VOOV9NSU5fR0FNTUE7Cj4+ICsJCX0KPj4gKwkJcjMyID0gUmVkOwo+PiArCQlnMzIgPSBHcmVl bjsKPj4gKwkJYjMyID0gQmx1ZTsKPj4gKwkJcjMyIDw8PTg7Cj4+ICsJCWczMiA8PD04Owo+PiAr CQliMzIgPDw9ODsKPj4gKwkJZ2FtbWFfcHRyW2ldLnIzMiA9IHIzMjsKPj4gKwkJZ2FtbWFfcHRy W2ldLmczMiA9IGczMjsKPj4gKwkJZ2FtbWFfcHRyW2ldLmIzMiA9IGIzMjsKPj4gKwl9Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB1aW50NjRfdCBnZXRfYmxvYihpbnQgZmQsIGludCBibG9iX2lkLCBp bnQgbGVuZ3RoKQo+PiArewo+PiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfYmxvYiBibG9iOwo+PiAr CWludCByZXQgPSAwOwo+PiArCj4+ICsJYmxvYi5ibG9iX2lkID0gYmxvYl9pZDsKPj4gKwlibG9i Lmxlbmd0aCA9IGxlbmd0aDsKPj4gKwlibG9iLmRhdGEgPSAgKHVpbnQ2NF90KW1hbGxvYyhibG9i Lmxlbmd0aCk7Cj4+ICsJcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9NT0RFX0dFVFBST1BCTE9C LCAmYmxvYik7Cj4+ICsKPj4gKwlpZiAocmV0KQo+PiArCQlpZ3RfaW5mbygiR0VUIEJMT0IgRmFp bGVkXG4iKTsKPj4gKwo+PiArCXJldHVybiBibG9iLmRhdGE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyB2b2lkIGVuYWJsZV9wbGFuZShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90Cj4+ ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCAsIGludCBwaXBlMSkKPj4gK3sKPj4gKwll bnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0Owo+PiArCWVudW0gcGlwZSBwaXBlMjsKPj4gKyAg ICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7Cj4+ICsgICAgICAgIHVpbnQzMl90IHBpeGVsZm9ybWF0 ID0gRFJNX0ZPUk1BVF9YUkdCODg4ODsKPj4gKwo+PiArCWNvbW1pdCA9IENPTU1JVF9VTklWRVJT QUw7Cj4+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5LCBvdXRwdXQpIHsKPj4g KwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+PiArCQlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4+ICsJ CXBpcGUyID0gb3V0cHV0LT5jb25maWcucGlwZTsKPj4gKwo+PiArCQlpZiAocGlwZTIgIT0gcGlw ZTEpCj4+ICsJCQlicmVhazsKPj4gKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUy KTsKPj4gKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPj4gKwkJLypEcmF3 IHRoZSBpbml0aWFsIHByaW1hcnkgcGxhbmUqLwo+PiArCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0 X3BsYW5lKG91dHB1dCwKPj4gSUdUX1BMQU5FX1BSSU1BUlkpOwo+PiArCj4+ICsJCXByZXBhcmVf Y3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUyLCBwbGFuZSwgbW9kZSwKPj4gY29tbWl0KTsKPj4gKwkJ LypSYW5kb20gU2l6ZSAgQnVmZmVyIENyZWF0aW9uICovCj4+ICsJCXdpZHRoID0gNjAwOwo+PiAr CQloZWlnaHQgPSA2MDA7Cj4+ICsKPj4gKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShv dXRwdXQsIElHVF9QTEFORV8yKTsKPj4gKwkJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1f ZmQsCj4+ICsJCQkJCSAgICB3aWR0aCwgaGVpZ2h0LAo+PiArCQkJCQkgICAgcGl4ZWxmb3JtYXQs Cj4+ICsJCQkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT04KPj4gRSwKPj4gKwkJCQkJICAg IGZiX2NvbG9yLnJlZCxmYl9jb2xvci5ncgo+PiBlZW4sZmJfY29sb3IuYmx1ZSwKPj4gKwkJCQkJ ICAgICZkYXRhLT5mYik7Cj4+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDEwMCwg MTAwKTsKPj4gKwo+PiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIpOwo+PiAr CQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGNvbW1pdCk7Cj4+ICsJfQo+PiArCj4+ICt9 Cj4+ICsvKgo+PiArVGhpcyBmdW5jdGlvbiB2ZXJpZnkgY3NjIGZlYXR1cmUgdXNpbmcgYm90aCBD UkMgY2hlY2suCj4+ICtTdGVwcyBmb2xsb3dlZCBhcmU6Cj4+ICsJMS5FbmFibGUgcGxhbmUgZm9y IGNhcHR1cmluZyByZWZlcmVuY2UgQ1JDCj4+ICsJMi5DYXB0dXJlIFJlZmVyZW5jZSBDUkMKPj4g KwkzLkFwcGx5IENTQyBvbiBQaXBlCj4+ICsJNC5FbmFibGUgUGxhbmUgLkNTQyB3aWxsIGJlIGFw cGxpZWQgb24gdGhpcyBwbGFuZXMuCj4+ICsJNS5DYXB0dXJlIENSQyBhbmQgY29tcGFyZSB3aXRo IHJlZmVyZW5jZSBDUkMKPj4gKwk2LiBSZWdpc3RlciBWYWxpZGF0aW9uIGZvciBDUkMKPj4gKyov Cj4+ICtzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfY3NjKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9k aXNwbGF5X3QKPj4gKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+PiArCQkJICBpZ3Rf cGxhbmVfdCAqcGxhbmUsIGJvb2wgZW5hYmxlLCBpbnQKPj4gdmFsdWUsIGludCBwaXBlMSkKPj4g K3sKPj4gKwo+PiArCXN0cnVjdCBfZHJtX2N0bSAqY3RtX2RhdGEgPSBOVUxMOwo+PiArCWJvb2wg cmV0ID0gZmFsc2U7Cj4+ICsJaW50IHJlcywgaSwgYmxvYl9pZDsKPj4gKwlmbG9hdCAqY3RtOwo+ PiArCXVpbnQ2NF90IGJsb2JfYWRkcmVzczsKPj4gKwljdG1fZGF0YSA9IChzdHJ1Y3QgX2RybV9j dG0gKikKPj4gKwkJbWFsbG9jKHNpemVvZihzdHJ1Y3QgX2RybV9jdG0pKTsKPj4gKwlpZiAoIWVu YWJsZSkgewo+PiArCQljdG0gPSBjdG1fdW5pdHk7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJaWYgKHZh bHVlID09IFJFRF9DU0MpIHsKPj4gKwkJCWN0bSA9IGN0bV9yZWQ7Cj4+ICsJCX0gZWxzZSBpZiAo dmFsdWUgPT0gR1JFRU5fQ1NDKSB7Cj4+ICsJCQljdG0gPSBjdG1fZ3JlZW47Cj4+ICsJCX0gZWxz ZSBpZiAodmFsdWUgPT0gQkxVRV9DU0MpIHsKPj4gKwkJCWN0bSA9IGN0bV9ibHVlOwo+PiArCQl9 IGVsc2V7Cj4+ICsJCQljdG0gPSBjdG1fdW5pdHk7Cj4+ICsJCX0gfQo+PiArCWlmKHZhbHVlID09 IFJFRF9GQikgewo+PiArCQlmYl9jb2xvci5yZWQgPSAxOwo+PiArCQlmYl9jb2xvci5ncmVlbiA9 MDsKPj4gKwkJZmJfY29sb3IuYmx1ZSA9IDA7Cj4+ICsJfSBlbHNlICBpZih2YWx1ZSA9PSBHUkVF Tl9GQikgewo+PiArCQlmYl9jb2xvci5yZWQgPSAwOwo+PiArCQlmYl9jb2xvci5ncmVlbiA9IDE7 Cj4+ICsJCWZiX2NvbG9yLmJsdWUgPSAwOwo+PiArCX0gZWxzZSBpZih2YWx1ZSA9PSBCTFVFX0ZC KSB7Cj4+ICsJCWZiX2NvbG9yLnJlZCA9IDA7Cj4+ICsJCWZiX2NvbG9yLmdyZWVuID0gMDsKPj4g KwkJZmJfY29sb3IuYmx1ZSA9IDE7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZmJfY29sb3IucmVkID0g MTsKPj4gKwkJZmJfY29sb3IuZ3JlZW4gPSAxOwo+PiArCQlmYl9jb2xvci5ibHVlID0gMTsKPj4g Kwl9Cj4+ICsJLypFbmFibGUgcGxhbmVzIGFuZCBjYXB0dXJlIHJlZmVyZW5jZSBjcmMqLwo+PiAr CWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKPj4gKwlpZ3RfcGlw ZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmNfcmVmZXJlbmNlKTsKPj4gKwo+ PiArCWZiX2NvbG9yLnJlZCA9IDE7Cj4+ICsJZmJfY29sb3IuZ3JlZW4gPSAxOwo+PiArCWZiX2Nv bG9yLmJsdWUgPSAxOwo+PiArCj4+ICsJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1 dCwgcGlwZTEpOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IENTQ19NQVhfVkFMUzsgaSsrKSB7 Cj4+ICsJCWN0bV9kYXRhLT5jdG1fY29lZmZbaV0gPSBjb252ZXJ0RmxvYXRUb0JpbmFyeSgqKGN0 bQo+PiArIGkpKTsKPj4gKwl9Cj4+ICsKPj4gKwlibG9iX2lkID0gY3JlYXRlX2Jsb2IoZGlzcGxh eS0+ZHJtX2ZkLAo+PiArCQkJKGludCAqKShjdG1fZGF0YSksIHNpemVvZihzdHJ1Y3QgX2RybV9j dG0pKTsKPj4gKwlpZ3RfZmFpbF9vbl9mIChibG9iX2lkIDwgMCwgIkNUTTpCTE9CIElPQ1RMIEZh aWxcbiIpOwo+PiArCXJlcyA9IHNldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91 dHB1dC0KPj4+IGNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+PiArCQkJRFJNX01PREVfT0JKRUNUX0NS VEMsICJDVE0iLCBibG9iX2lkKTsKPj4gKwlpZ3RfZmFpbF9vbl9mIChyZXMgPCAwLCAiQ1RNOlNl dCBQcm9wZXJ0eSBGYWlsZWRcbiIpOwo+PiArCXJlcyA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNw bGF5LT5kcm1fZmQsIG91dHB1dC0KPj4+IGNvbmZpZy5jcnRjLT5jcnRjX2lkLCBEUk1fTU9ERV9P QkpFQ1RfQ1JUQywgIkNUTSIsIGJsb2JfaWQpOwo+PiArCWlndF9mYWlsX29uX2YgKHJlcyA8IDAs ICJDVE06R2V0IFByb3BlcnR5IEZhaWxlZFxuIik7Cj4+ICsJCj4+ICsJYmxvYl9hZGRyZXNzID0g Z2V0X2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLCByZXMsIHNpemVvZihzdHJ1Y3QKPj4gX2RybV9jdG0p KTsKPj4gKwljdG1fZGF0YSA9IChzdHJ1Y3QgX2RybV9jdG0gKikgKGludHB0cl90KSBibG9iX2Fk ZHJlc3M7Cj4+ICsKPj4gKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBl MSk7Cj4+ICsJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX2N1 cnJlbnQpOwo+PiArCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmNfcmVmZXJlbmNlLCAmY3JjX2N1 cnJlbnQpOwo+PiArCS8qUmVzdG9yaW5nIHRoZSBVbml0IENTQyovCj4+ICsJY3RtID0gY3RtX3Vu aXR5Owo+PiArCWZvciAoaSA9IDA7IGkgPCBDU0NfTUFYX1ZBTFM7IGkrKykgewo+PiArCQljdG1f ZGF0YS0+Y3RtX2NvZWZmW2ldID0gY29udmVydEZsb2F0VG9CaW5hcnkoKihjdG0KPj4gKyBpKSk7 Cj4+ICsJfQo+PiArCj4+ICsJYmxvYl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwK Pj4gKwkJCShpbnQgKikoY3RtX2RhdGEpLCBzaXplb2Yoc3RydWN0IF9kcm1fY3RtKSk7Cj4+ICsg ICAgICAgIGlndF9mYWlsX29uX2YgKGJsb2JfaWQgPCAwLCAiQ1RNOkJMT0IgSU9DVEwgRmFpbFxu Iik7Cj4+ICsKPj4gKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBv dXRwdXQtCj4+PiBjb25maWcuY3J0Yy0+Y3J0Y19pZCwKPj4gKwkJCURSTV9NT0RFX09CSkVDVF9D UlRDLCAiQ1RNIiwgYmxvYl9pZCk7Cj4+ICsgICAgICAgIGlndF9mYWlsX29uX2YgKHJlcyA8IDAs ICJDVE06U2V0IFByb3BlcnR5IEZhaWxlZFxuIik7Cj4+ICsKPj4gKwlmcmVlKGN0bV9kYXRhKTsK Pj4gKwo+PiArfQo+PiArCj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFwcGx5X2dhbW1hKHN0cnVjdCBk YXRhX3QgKmRhdGEsIGlndF9kaXNwbGF5X3QgKmRpc3BsYXksCj4+IGlndF9vdXRwdXRfdCAqb3V0 cHV0LCBpbnQgcGlwZTEsIHVpbnQzMl90IG51bV9zYW1wbGVzLCBpbnQKPj4gdW5pdF9nYW1tYSkK Pj4gK3sKPj4gKwlzdHJ1Y3QgX2RybV9wYWxldHRlICpnYW1tYV9kYXRhID0gIE5VTEw7Cj4+ICsJ aW50ICByZXQsIHJlcywgYmxvYl9pZCwgYmxvYl9sZW5ndGg7Cj4+ICsJYm9vbCBzdGF0dXMgPSBm YWxzZTsKPj4gKwo+PiArCj4+ICsJaWYgKG51bV9zYW1wbGVzID09IDApCj4+ICsJCWJsb2JfbGVu Z3RoID0gMTsKPj4gKwllbHNlCj4+ICsJCWJsb2JfbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgX2Ry bV9wYWxldHRlKSArCj4+IChudW1fc2FtcGxlcyAqIHNpemVvZihzdHJ1Y3QgX2RybV9yMzJnMzJi MzIpKSk7Cj4+ICsKPj4gKwlnYW1tYV9kYXRhID0gbWFsbG9jKGJsb2JfbGVuZ3RoKTsKPj4gKwl3 cml0ZV9nYW1tYV9sdXQobnVtX3NhbXBsZXMsIGdhbW1hX2RhdGEtPmx1dCwgdW5pdF9nYW1tYSk7 Cj4+ICsJYmxvYl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwgKHVpbnQ2NF90Cj4+ ICopKGdhbW1hX2RhdGEpLCBibG9iX2xlbmd0aCk7Cj4+ICsJaWYgKGJsb2JfaWQgPCAwKQo+PiAr CQlmcmVlKGdhbW1hX2RhdGEpOwo+PiArCj4+ICsgICAgICAgIGlndF9mYWlsX29uX2YgKGJsb2Jf aWQgPCAwLCAiR0FNTUE6QkxPQiBJT0NUTCBGYWlsXG4iKTsKPj4gKwkvKkRpc2FibGluZyBkZWdh bW1hKi8KPj4gKwlpZih1bml0X2dhbW1hID09IDIgKSB7Cj4+ICsJCXJlcyA9IHNldF9jb2xvcl9w cm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0KPj4+IGNvbmZpZy5jcnRjLT5jcnRjX2lk LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxF VFRFX0JFRk9SRV9DVE0iLAo+PiBibG9iX2lkKTsKPj4gKyAgICAgICAgICAgICAgICByZXQgPSBn ZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtCj4+PiBjb25maWcuY3J0 Yy0+Y3J0Y19pZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIERSTV9NT0RFX09CSkVDVF9D UlRDLCAiUEFMRVRURV9CRUZPUkVfQ1RNIiwKPj4gYmxvYl9pZCk7Cj4+ICsgICAgICAgICAgICAg ICAgaWd0X2ZhaWxfb25fZiAocmVzIDwgMCwgIlBBTEVUVEVfQkVGT1JFX0NUTTpTZXQKPj4gUHJv cGVydHkgRmFpbGVkXG4iKTsKPj4gKyAgICAgICAgICAgICAgICBpZ3RfZmFpbF9vbl9mIChyZXQg PCAwLCAiUEFMRVRURV9CRUZPUkVfQ1RNOlNldAo+PiBQcm9wZXJ0eSBGYWlsZWRcbiIpOwo+PiAr Cj4+ICsJfQo+PiArCj4+ICsJaWYgKG51bV9zYW1wbGVzID09IEdFTjlfU1BMSVRHQU1NQV9NQVhf VkFMUykgewo+PiArCQlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBv dXRwdXQtCj4+PiBjb25maWcuY3J0Yy0+Y3J0Y19pZCwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIERSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9CRUZPUkVfQ1RNIiwKPj4gYmxvYl9p ZCk7Cj4+ICsJCXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1 dC0KPj4+IGNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg RFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JFRk9SRV9DVE0iLAo+PiBibG9iX2lkKTsK Pj4gKwkJaWYgKHJlcyA8IDApCj4+ICsJCQlmcmVlKGdhbW1hX2RhdGEpOwo+PiArCSAgICAgICAg aWd0X2ZhaWxfb25fZiAocmVzIDwgMCwgIlBBTEVUVEVfQkVGT1JFX0NUTTpTZXQKPj4gUHJvcGVy dHkgRmFpbGVkXG4iKTsKPj4gKyAgICAgICAgICAgICAgICBpZ3RfZmFpbF9vbl9mIChyZXQgPCAw LCAiUEFMRVRURV9CRUZPUkVfQ1RNOlNldAo+PiBQcm9wZXJ0eSBGYWlsZWRcbiIpOwo+PiArCj4+ ICsJfQo+PiArCj4+ICsJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwg b3V0cHV0LQo+Pj4gY29uZmlnLmNydGMtPmNydGNfaWQsCj4+ICsJCQlEUk1fTU9ERV9PQkpFQ1Rf Q1JUQywgIlBBTEVUVEVfQUZURVJfQ1RNIiwKPj4gYmxvYl9pZCk7Cj4+ICsJaWYgKHJlcyA8IDAp IHsKPj4gKwkJZnJlZShnYW1tYV9kYXRhKTsKPj4gKwl9Cj4+ICsgICAgICAgIGlndF9mYWlsX29u X2YgKHJlcyA8IDAsICJQQUxFVFRFX0FGVEVSX0NUTTpTZXQgUHJvcGVydHkKPj4gRmFpbGVkXG4i KTsKPj4gKwo+PiArCXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91 dHB1dC0KPj4+IGNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+PiArCQkJRFJNX01PREVfT0JKRUNUX0NS VEMsICJQQUxFVFRFX0FGVEVSX0NUTSIsCj4+IGJsb2JfaWQpOwo+PiArCWlmIChyZXQgPCAwKSB7 Cj4+ICsJCWZyZWUoZ2FtbWFfZGF0YSk7Cj4+ICsJfQo+PiArICAgICAgICBpZ3RfZmFpbF9vbl9m IChyZXQgPCAwLCAiUEFMRVRURV9CRUZPUkVfQ1RNOlNldCBQcm9wZXJ0eQo+PiBGYWlsZWRcbiIp Owo+PiArCj4+ICsJZnJlZShnYW1tYV9kYXRhKTsKPj4gKwo+PiArCj4+ICt9Cj4+ICsvKgo+PiAr VGhpcyBmdW5jdGlvbiB2ZXJpZnkgY3NjIGZlYXR1cmUgdXNpbmcgYm90aCBDUkMgY2hlY2suCj4+ ICtTdGVwcyBmb2xsb3dlZCBhcmU6Cj4+ICsgICAgICAgIDEuRW5hYmxlIEJsYWNrIHBsYW5lIGFu ZCBjYXB0dXJlIENSQ19SRUZFUkVOQ0VfQkxBQ0suCj4+ICsJMi5FbmFibGUgV2hpdGUgcGxhbmUg YW5kIGNhcHR1cmUgQ1JTX1JFRkVSRU5DRV9XSElURQo+PiArICAgICAgICAzLkVuYWJsZSBSZWQg cGxhbmUuCj4+ICsgICAgICAgIDQuQXBwbHkgTE9XIEdhbW1hLgo+PiArICAgICAgICA1LkNhcHR1 cmUgQ1JDX0JsYWNrLgo+PiArICAgICAgICA2LkFwcGx5IEhpZ2ggR2FtbWEgYW5kIGNhcHR1cmUg Q1JDX1doaXRlLgo+PiArICAgICAgICA3LkNSQ19CbGFjayBzaG91bGQgYmUgZXF1aXZhbGVudCB0 byBDUkNfUkVGRVJFTkNFX0JMQUNLCj4+ICsgICAgICAgIDguQ1JDX1doaXRlIHNob3VsZCBiZSBl cXVpdmFsZW50IHRvIENSQ19SRUZFUkVOQ0VfV0hpdGUuCj4+ICsKPj4gKwo+PiArKi8KPj4gK3N0 YXRpYyB2b2lkIHRlc3RfcGlwZV9nYW1tYShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxh eV90Cj4+ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPj4gKwkJICAgICAgICAgICAg dWludDMyX3QgbnVtX3NhbXBsZXMsIGludCB2YWx1ZXMsIGludAo+PiBwaXBlMSkKPj4gK3sKPj4g KwlpbnQgdW5pdF9nYW1tYSwgZGlzYWJsZV9nYW1tYTsKPj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmU7 Cj4+ICsKPj4gKwkvKkVuYWJsZSBibGFjayBwbGFuZXMgYW5kIGNhcHR1cmUgcmVmZXJlbmNlIGNy YyovCj4+ICsKPj4gKwlmYl9jb2xvci5yZWQgPSAwOwo+PiArCWZiX2NvbG9yLmdyZWVuID0wOwo+ PiArCWZiX2NvbG9yLmJsdWUgPSAwOwo+PiArCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBv dXRwdXQsIHBpcGUxKTsKPj4gKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsCj4+ICZjcmNfcmVmZXJlbmNlX2JsYWNrKTsKPj4gKwkvKkVuYWJsZSB3aGl0ZSBwbGFuZSBh bmQgY2FwdHVyZSByZWZlcm5jZSBjcmMqLwo+PiArCWZiX2NvbG9yLnJlZCA9IDE7Cj4+ICsJZmJf Y29sb3IuZ3JlZW4gPTE7Cj4+ICsJZmJfY29sb3IuYmx1ZSA9IDE7Cj4+ICsJZW5hYmxlX3BsYW5l KGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOwo+PiArCWlndF9waXBlX2NyY19jb2xsZWN0 X2NyYyhkYXRhLT5waXBlX2NyYywKPj4gJmNyY19yZWZlcmVuY2Vfd2hpdGUpOwo+PiArCj4+ICsJ LypFbmFibGUgcmVkIHBsYW5lcyBhbmQgYXBwbHkgdW5pdCBnYW1tYSovCj4+ICsJZmJfY29sb3Iu cmVkID0gMTsKPj4gKwlmYl9jb2xvci5ncmVlbiA9MDsKPj4gKwlmYl9jb2xvci5ibHVlID0gMDsK Pj4gKwl1bml0X2dhbW1hID0gMDsgLyowIC0+IHdoaXRlIDEtPmJsYWNrKi8KPiBUYWtlIHRoZSBD UkMgaGVyZSB0b28sIGFzIHJlZmVyZW5jZV9yZWQgYW5kIGNoZWNrIHRoYXQgY3JjX3doaXRlICE9 Cj4gcmVmZXJlbmNlX3JlZC4gKGkuZS4gY2hlY2sgaXRzIGNoYW5nZWQpCkFzIHN1Z2dlc3RlZCBi eSBEYW5pZWwgLCBub3QgYWRkaW5nICB0aGlzIGNoZWNrIGhlcmUuCj4KPj4gKwlhcHBseV9nYW1t YShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxLCBudW1fc2FtcGxlcywKPj4gdW5pdF9nYW1t YSk7Cj4+ICsJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOwo+PiAr CWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY193aGl0ZSk7Cj4+ ICsKPj4gKwkvKiBBcHBseSAweDAgZ2FtbWEgKi8KPj4gKwl1bml0X2dhbW1hID0gIDE7Cj4+ICsK Pj4gKwlhcHBseV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxLCBudW1fc2FtcGxl cywKPj4gdW5pdF9nYW1tYSk7Cj4+ICsJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1 dCwgcGlwZTEpOwo+PiArCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywg JmNyY19ibGFjayk7Cj4+ICsJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY19yZWZlcmVuY2VfYmxh Y2ssICZjcmNfYmxhY2spOwo+PiArCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmNfcmVmZXJlbmNl X3doaXRlLCAmY3JjX3doaXRlKTsKPj4gKwo+PiArCS8qRGlzYWJsaW5nIGdhbW1hKi8KPj4gKwlp ZiggbnVtX3NhbXBsZXMgPT0gR0VOOV9TUExJVEdBTU1BX01BWF9WQUxTKSB7Cj4+ICsJCWRpc2Fi bGVfZ2FtbWEgPSAyOwo+PiArCQlhcHBseV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBp cGUxLCAwLAo+PiBkaXNhYmxlX2dhbW1hKTsKPj4gKwl9IGVsc2Ugewo+PiArICAgICAgICAgICAg ICAgIGFwcGx5X2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEsIDAsCj4+IHVuaXRf Z2FtbWEpOwo+PiArCX0KPj4gKwkKPj4gKwo+PiArCj4+ICsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgdGVzdF9sZWdhY3lfZ2FtbWEgKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9kaXNwbGF5 X3QKPj4gKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpbnQgcGlwZTEpCj4+ICt7Cj4+ ICsJaW50IGZkLHJldCxpOwo+PiArCj4+ICsJdWludDMyX3QgY3J0YzsKPj4gKwl1aW50MTZfdCAq dmFsID0gbWFsbG9jKHNpemVvZih1aW50MTZfdCkgKiAyNTYpOwo+PiArICAgICAgICBpZ3RfcGxh bmVfdCAqcGxhbmU7Cj4+ICsKPj4gKyAgICAgICAgZmJfY29sb3IucmVkID0gMTsKPj4gKyAgICAg ICAgZmJfY29sb3IuZ3JlZW4gPTE7Cj4+ICsgICAgICAgIGZiX2NvbG9yLmJsdWUgPSAxOwo+PiAr ICAgICAgICBlbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7Cj4gbml0 OiBjb2Rpbmcgc3R5bGUgKHNwYWNpbmcpCldpbGwgZml4IHRoaXMuCj4KPj4gKwlmbG9hdCBnYW1t YTEgPSAxLjA7Cj4gTmVlZCB0byBkbyBtb3JlIHRoYXQgdGVzdCB3aXRoIGEgbGluZWFyIGdhbW1h LCBhcyB0aGF0IGlzIGRlZmF1bHQKPiBpbml0aWFsaXNlZCBpbiB0aGUga2VybmVsLgpXZSBhcmUg ZG9pbmcgb25seSBuZWdhdGl2ZSB0ZXN0aW5nIGZvciBsZWdhY3kgZ2FtbWEuClRoaXMgcGF0Y2gg aXMgb25seSBtZWFudCBmb3IgQ29sb3IgTWFuYWdlciAzLjAgLiBJZiByZXF1aXJlZCAsIHdpbGwg YWRkIAphbm90aGVyIHBhdGNoIHdoaWNoCmRvZXMgdGVzdGluZyBmb3IgbGVnYWN5Lgo+PiArCWZv cihpID0gMDsgaSA8IDI1NiA7IGkrKykgewo+PiArCQl2YWxbaV0gPSAweGZmZmYgKiBwb3coKGkv MjU1KSwgZ2FtbWExKTsKPj4gKwo+PiArCX0KPj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0 IChkaXNwbGF5LCBvdXRwdXQpIHsKPj4gKwkJcmV0ID0gZHJtTW9kZUNydGNTZXRHYW1tYSAoZGlz cGxheS0+ZHJtX2ZkLCBvdXRwdXQtCj4+PiBjb25maWcuY3J0Yy0+Y3J0Y19pZCwgMjU2LCB2YWws IHZhbCwgdmFsKTsKPj4gKwkgICAgICAgIGlndF9hc3NlcnRfbHRlKDAsIHJldCk7Cj4gQWxzbywg bmVlZCB0byBkbyBtb3JlIHRoYXQgY2hlY2sgcmV0dXJuIHZhbHVlLiBJIHJlY29tbWVuZCB0YWtp bmcgdGhlCj4gQ1JDIHdpdGggMHhmZiByZWQgRkIuIFRoZW4gbWFwcGluZyAweGZmIHJlZCAobGFz dCBlbnRyeSkgdG8gMHhmMCBhbmQKPiB0aGVuIGNvbXBhcmluZy4gQW5kIHRoZSBzYW1lIHdpdGgg b3RoZXIgY2hhbm5lbHMgYW5kIG1vcmUgY29sb3Vycy4KPgo+Cj4+ICsJfQo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfY29sb3Ioc3RydWN0IGRhdGFfdCAqZGF0YSwgY29uc3Qg IGNoYXIKPj4gKnByb3BfbmFtZSwgaW50IGVuYWJsZSwgaW50IHZhbHVlKQo+IFJlcGxhY2UgcHJv cF9uYW1lIHdpdGggYW4gZW51bS4gVGhlbiB5b3UgY2FuIHJlcGxhY2UgYWxsIHRoZSBzdHJjbXAo KXMKPiB3aXRoIGEgc3dpdGNoIQpXaWxsIGFkZCB0aGlzLgo+PiArewo+PiArCWlndF9kaXNwbGF5 X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsK Pj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4+ICsJZW51bSBwaXBlIHBpcGUxOwo+PiArCj4+ICsJ Zm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5LCBvdXRwdXQpIHsKPj4gKwkJcGlwZTEg PSBvdXRwdXQtPmNvbmZpZy5waXBlOwo+PiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCxw aXBlMSk7Cj4+ICsJCWlmICgoc3RyY21wKHByb3BfbmFtZSwgImdhbW1hX3Byb3BlcnR5XzhiaXQi KSA9PSAwKQo+PiAmJgo+PiArCQkJCWVuYWJsZSA9PSB0cnVlKXsKPj4gKwkJCXRlc3RfcGlwZV9n YW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsCj4+ICsJCQkJCUdFTjlfOEJJVF9HQU1NQV9NQVhf VkFMUywKPj4gdmFsdWUsIHBpcGUxKTsKPj4gKwkJfSBlbHNlIGlmICgoc3RyY21wKHByb3BfbmFt ZSwgImxlZ2FjeV9nYW1tYSIpID09Cj4+IDApKXsKPj4gKwkJCXRlc3RfbGVnYWN5X2dhbW1hKGRh dGEsIGRpc3BsYXksIG91dHB1dCwKPj4gcGlwZTEpOwo+PiArCQl9IGVsc2UgIGlmICgoc3RyY21w KHByb3BfbmFtZSwKPj4gImdhbW1hX3Byb3BlcnR5XzEwYml0IikgPT0gMCkgJiYKPj4gKwkJCQll bmFibGUgPT0gdHJ1ZSkgewo+PiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRpc3BsYXksIG91 dHB1dCwKPj4gR0VOOV8xMEJJVF9HQU1NQV9NQVhfVkFMUywgdmFsdWUsIHBpcGUxKTsKPj4gKwkJ fSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJjc2NfcHJvcGVydHkiKSA9PQo+PiAwKSkg ewo+PiArCQkJdGVzdF9waXBlX2NzYyhkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLAo+PiBl bmFibGUsIHZhbHVlLCBwaXBlMSk7Cj4+ICsJCX0gZWxzZSAgaWYgKChzdHJjbXAocHJvcF9uYW1l LAo+PiAiZ2FtbWFfcHJvcGVydHlfc3BsaXQiKSA9PSAwKSAmJgo+PiArCQkJCWVuYWJsZSA9PSB0 cnVlKSB7Cj4+ICsJCQl0ZXN0X3BpcGVfZ2FtbWEoZGF0YSwgZGlzcGxheSwgb3V0cHV0LAo+PiAr CQkJCQlHRU45X1NQTElUR0FNTUFfTUFYX1ZBTFMsCj4+IHZhbHVlLCBwaXBlMSk7Cj4+ICsJCX0g ZWxzZSAgaWYgKChzdHJjbXAocHJvcF9uYW1lLAo+PiAiZ2FtbWFfcHJvcGVydHlfMTJiaXQiKSA9 PSAwKSAmJiBlbmFibGUgPT0gdHJ1ZSkgewo+PiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRp c3BsYXksIG91dHB1dCwKPj4gKwkJCQkJR0VOOV8xMkJJVF9HQU1NQV9NQVhfVkFMUywKPj4gdmFs dWUsIHBpcGUxKTsKPj4gKwkJfSBlbHNlIHsKPj4gKwkJCWlndF9pbmZvKCJJbnZhbGlkIFRlc3Rc biIpOwo+PiArCQl9Cj4+ICsJCWNsZWFudXBfZmIoZGF0YSk7Cj4+ICsJCXBsYW5lID0gaWd0X291 dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMik7Cj4+ICsJCWNsZWFudXBfY3J0Yyhk YXRhLCBvdXRwdXQsIHBsYW5lKTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK2lndF9tYWluCj4+ICt7 Cj4+ICsJc3RydWN0IGRhdGFfdCBkYXRhID0ge307Cj4+ICsJaW50IHZhbHVlcyA9IDE7Cj4+ICsJ aWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+PiArCWlndF9maXh0dXJlewo+PiArCQkvLyAgICAg ICAgICAgICAgICBkYXRhLmRybV9mZCA9Cj4+IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVS X0lOVEVMKTsKPiBMZWZ0IG92ZXIgZGVidWdnaW5nIGNvbW1lbnQ/Ck15IGJhZC4gV0lsbCByZW1v dmUuCj4+ICsJCWRhdGEuZHJtX2ZkID0gZHJtX29wZW5fYW55X21hc3RlcigpOwo+PiArCQlrbXN0 ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4+ICsJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEu ZGlzcGxheSwgZGF0YS5kcm1fZmQpOwo+PiArCQlkYXRhLmdlbiA9Cj4+IGludGVsX2dlbihpbnRl bF9nZXRfZHJtX2RldmlkKGRhdGEuZHJtX2ZkKSk7Cj4+ICsJCWlndF9yZXF1aXJlKGRhdGEuZ2Vu ID49IDkpOwo+IDk/IFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGZyb20gQkRXIG9ud2FyZHMgYXRt LCBidXQgaXMgcG9zc2libGUgb24KPiBIU1cuIENhbiB3ZSBpbnN0ZWFkIGNoZWNrIGZvciB0aGUg Q1RNIHByb3BlcnR5PwpXaWxsIHJlbW92ZSB0aGlzIGNoZWNrIGFuZCBhZGQgZm9yIENUTSBwcm9w ZXJ0eS4KPj4gKwl9Cj4+ICsJaWd0X3N1YnRlc3RfZigiY3NjLXJlZCIpCj4+ICsJCXRlc3RfcGlw ZV9jb2xvcigmZGF0YSwgImNzY19wcm9wZXJ0eSIsIHRydWUsCj4+IFJFRF9DU0MpOwo+PiArCWln dF9zdWJ0ZXN0X2YoImNzYy1ncmVlbiIpCj4+ICsJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImNz Y19wcm9wZXJ0eSIsIHRydWUsCj4+IEdSRUVOX0NTQyk7Cj4+ICsJaWd0X3N1YnRlc3RfZigiY3Nj LWJsdWUiKQo+PiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJjc2NfcHJvcGVydHkiLCB0cnVl LAo+PiBCTFVFX0NTQyk7Cj4+ICsJaWd0X3N1YnRlc3RfZigiZ2FtbWEtbGVnYWN5IikKPj4gKyAg ICAgICAgICAgICAgICB0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJsZWdhY3lfZ2FtbWEiLCB0cnVl LAo+PiB2YWx1ZXMpOwo+PiArCj4+ICsJaWd0X3N1YnRlc3RfZigiZ2FtbWEtOGJpdCIpCj4+ICsJ CXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3BlcnR5XzhiaXQiLCB0cnVlLAo+PiB2 YWx1ZXMpOwo+PiArCWlndF9zdWJ0ZXN0X2YoImdhbW1hLTEwYml0IikKPj4gKwkJdGVzdF9waXBl X2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfMTBiaXQiLCB0cnVlLAo+PiB2YWx1ZXMpOwo+ PiArCWlndF9zdWJ0ZXN0X2YoImdhbW1hLTEyYml0IikKPj4gKwkJdGVzdF9waXBlX2NvbG9yKCZk YXRhLCAiZ2FtbWFfcHJvcGVydHlfMTJiaXQiLAo+PiB0cnVlLCAgdmFsdWVzKTsKPj4gKwlpZ3Rf c3VidGVzdF9mKCJnYW1tYS1zcGxpdCIpCj4+ICsJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImdh bW1hX3Byb3BlcnR5X3NwbGl0IiwKPj4gdHJ1ZSwgIHZhbHVlcyk7Cj4+ICsKPj4gKwlpZ3RfZml4 dHVyZXsKPj4gKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKPj4gKwl9Cj4+ICt9 Cj4+ICsKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K Pj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==