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 1E89289243 for ; Mon, 8 Apr 2019 16:35:19 +0000 (UTC) References: <20190408161533.2421-1-andi.shyti@intel.com> <20190408161533.2421-7-andi.shyti@intel.com> From: Tvrtko Ursulin Message-ID: Date: Mon, 8 Apr 2019 17:35:16 +0100 MIME-Version: 1.0 In-Reply-To: <20190408161533.2421-7-andi.shyti@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH v19 6/6] test: perf_pmu: use the gem_engine_topology library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Andi Shyti , IGT dev Cc: Andi Shyti List-ID: Ck9uIDA4LzA0LzIwMTkgMTc6MTUsIEFuZGkgU2h5dGkgd3JvdGU6Cj4gUmVwbGFjZSB0aGUgbGVn YWN5IGZvcl9lYWNoX2VuZ2luZSogZGVmaW5lcyB3aXRoIHRoZSBvbmVzCj4gaW1wbGVtZW50ZWQg aW4gdGhlIGdlbV9lbmdpbmVfdG9wb2xvZ3kgbGlicmFyeS4KPiAKPiBVc2Ugd2hlbmV2ZXIgcG9z c2libGUgZ2VtX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoKSB0aGF0IGNoZWNrcwo+IGNsYXNzIGlu c3RlYWQgb2YgZmxhZ3MuCj4gCj4gTm93IHRoZSBfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0 YW5jZSBhbmQKPiBmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgYXJlIHVudXNlZCwgcmVt b3ZlIHRoZW0uCgpJbiB0aGUgZnV0dXJlIHBsZWFzZSBzdGFydCBhZGRpbmcgcGVyIHBhdGNoIGNo YW5nZWxvZ3MgYW5kIGluIHRoZSBjb3ZlciAKbGV0dGVyIGp1c3QgbGlzdCB0aGUgbWFpbiBjaGFu Z2VzLgoKPiBTdWdnZXN0ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRl bC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQW5kaSBTaHl0aSA8YW5kaS5zaHl0aUBpbnRlbC5jb20+ Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+Cj4g LS0tCj4gICBsaWIvaWd0X2d0LmggICAgIHwgICA3IC0tLQo+ICAgdGVzdHMvcGVyZl9wbXUuYyB8 IDE0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQo+ICAg MiBmaWxlcyBjaGFuZ2VkLCA4OCBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKPiAKPiBk aWZmIC0tZ2l0IGEvbGliL2lndF9ndC5oIGIvbGliL2lndF9ndC5oCj4gaW5kZXggYWY0Y2MzOGEx ZWY3Li5jMmNhMDdlMDM3MzggMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9ndC5oCj4gKysrIGIvbGli L2lndF9ndC5oCj4gQEAgLTExOSwxMSArMTE5LDQgQEAgdm9pZCBnZW1fcmVxdWlyZV9lbmdpbmUo aW50IGdlbV9mZCwKPiAgIAlpZ3RfcmVxdWlyZShnZW1faGFzX2VuZ2luZShnZW1fZmQsIGNsYXNz LCBpbnN0YW5jZSkpOwo+ICAgfQo+ICAgCj4gLSNkZWZpbmUgX19mb3JfZWFjaF9lbmdpbmVfY2xh c3NfaW5zdGFuY2UoZV9fKSBcCj4gLQlmb3IgKChlX18pID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZXMyOyAoZV9fKS0+bmFtZTsgKGVfXykrKykKPiAtCj4gLSNkZWZpbmUgZm9yX2VhY2hfZW5naW5l X2NsYXNzX2luc3RhbmNlKGZkX18sIGVfXykgXAo+IC0JZm9yICgoZV9fKSA9IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmVzMjsgKGVfXyktPm5hbWU7IChlX18pKyspIFwKPiAtCQlmb3JfaWYgKGdlbV9o YXNfZW5naW5lKChmZF9fKSwgKGVfXyktPmNsYXNzLCAoZV9fKS0+aW5zdGFuY2UpKQo+IC0KPiAg ICNlbmRpZiAvKiBJR1RfR1RfSCAqLwo+IGRpZmYgLS1naXQgYS90ZXN0cy9wZXJmX3BtdS5jIGIv dGVzdHMvcGVyZl9wbXUuYwo+IGluZGV4IDRmNTUyYmMyYWUyOC4uYTg4OWI1NTIyMzZkIDEwMDY0 NAo+IC0tLSBhL3Rlc3RzL3BlcmZfcG11LmMKPiArKysgYi90ZXN0cy9wZXJmX3BtdS5jCj4gQEAg LTcyLDcgKzcyLDcgQEAgc3RhdGljIGludCBvcGVuX2dyb3VwKHVpbnQ2NF90IGNvbmZpZywgaW50 IGdyb3VwKQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IC1pbml0KGludCBnZW1fZmQsIGNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwgdWludDhfdCBzYW1wbGUpCj4g K2luaXQoaW50IGdlbV9mZCwgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLCB1aW50 OF90IHNhbXBsZSkKCldoeSBpcyBjb25zdCBhIHByb2JsZW0gaGVyZT8gVGhlIGZ1bmN0aW9uIG9u bHkgcmVhZHMgZnJvbSB0aGUgb2JqZWN0PwoKPiAgIHsKPiAgIAlpbnQgZmQsIGVyciA9IDA7Cj4g ICAJYm9vbCBleGlzdHM7Cj4gQEAgLTE1OCwxMSArMTU4LDYgQEAgc3RhdGljIHVuc2lnbmVkIGlu dCBtZWFzdXJlZF91c2xlZXAodW5zaWduZWQgaW50IHVzZWMpCj4gICAJcmV0dXJuIGlndF9uc2Vj X2VsYXBzZWQoJnRzKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdW5zaWduZWQgaW50IGUycmluZyhp bnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gLXsK PiAtCXJldHVybiBnZW1fY2xhc3NfaW5zdGFuY2VfdG9fZWJfZmxhZ3MoZ2VtX2ZkLCBlLT5jbGFz cywgZS0+aW5zdGFuY2UpOwo+IC19Cj4gLQo+ICAgI2RlZmluZSBURVNUX0JVU1kgKDEpCj4gICAj ZGVmaW5lIEZMQUdfU1lOQyAoMikKPiAgICNkZWZpbmUgVEVTVF9UUkFJTElOR19JRExFICg0KQo+ IEBAIC0xNzAsMTQgKzE2NSwxNSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGUycmluZyhpbnQgZ2Vt X2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICAjZGVmaW5l IEZMQUdfTE9ORyAoMTYpCj4gICAjZGVmaW5lIEZMQUdfSEFORyAoMzIpCj4gICAKPiAtc3RhdGlj IGlndF9zcGluX3QgKiBfX3NwaW5fcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQg bG9uZyBmbGFncykKPiArc3RhdGljIGlndF9zcGluX3QgKiBfX3NwaW5fcG9sbChpbnQgZmQsIHVp bnQzMl90IGN0eCwKPiArCQkJCXN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAg IHsKPiAgIAlzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSBvcHRzID0gewo+ICAgCQkuY3R4ID0gY3R4 LAo+IC0JCS5lbmdpbmUgPSBmbGFncywKPiArCQkuZW5naW5lID0gZS0+ZmxhZ3MsCj4gICAJfTsK PiAgIAo+IC0JaWYgKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGZsYWdzKSkKPiArCWlmIChnZW1f Y2xhc3NfY2FuX3N0b3JlX2R3b3JkKGZkLCBlLT5jbGFzcykpCj4gICAJCW9wdHMuZmxhZ3MgfD0g SUdUX1NQSU5fUE9MTF9SVU47Cj4gICAKPiAgIAlyZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9mYWN0 b3J5KGZkLCAmb3B0cyk7Cj4gQEAgLTIwOSwyMCArMjA1LDM0IEBAIHN0YXRpYyB1bnNpZ25lZCBs b25nIF9fc3Bpbl93YWl0KGludCBmZCwgaWd0X3NwaW5fdCAqc3BpbikKPiAgIAlyZXR1cm4gaWd0 X25zZWNfZWxhcHNlZCgmc3RhcnQpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpZ3Rfc3Bpbl90ICog X19zcGluX3N5bmMoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4g K3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3N5bmMoaW50IGZkLCB1aW50MzJfdCBjdHgsCj4g KwkJCQlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICB7Cj4gLQlpZ3Rfc3Bp bl90ICpzcGluID0gX19zcGluX3BvbGwoZmQsIGN0eCwgZmxhZ3MpOwo+ICsJaWd0X3NwaW5fdCAq c3BpbiA9IF9fc3Bpbl9wb2xsKGZkLCBjdHgsIGUpOwo+ICAgCj4gICAJX19zcGluX3dhaXQoZmQs IHNwaW4pOwo+ICAgCj4gICAJcmV0dXJuIHNwaW47Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlndF9z cGluX3QgKiBzcGluX3N5bmMoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxh Z3MpCj4gK3N0YXRpYyBpZ3Rfc3Bpbl90ICogc3Bpbl9zeW5jKGludCBmZCwgdWludDMyX3QgY3R4 LAo+ICsJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICB7Cj4g ICAJaWd0X3JlcXVpcmVfZ2VtKGZkKTsKPiAgIAo+IC0JcmV0dXJuIF9fc3Bpbl9zeW5jKGZkLCBj dHgsIGZsYWdzKTsKPiArCXJldHVybiBfX3NwaW5fc3luYyhmZCwgY3R4LCBlKTsKPiArfQo+ICsK PiArc3RhdGljIGlndF9zcGluX3QgKiBzcGluX3N5bmNfZmxhZ3MoaW50IGZkLCB1aW50MzJfdCBj dHgsIHVuc2lnbmVkIGludCBmbGFncykKPiArewo+ICsJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyIGUgPSB7IH07Cj4gKwo+ICsJZS5jbGFzcyA9IGdlbV9lYl90b19jbGFzcyhmbGFncyk7 Cj4gKwllLmluc3RhbmNlID0gKGZsYWdzICYgKEk5MTVfRVhFQ19CU0RfTUFTSyB8IEk5MTVfRVhF Q19SSU5HX01BU0spKSA9PQo+ICsJCSAgICAgKEk5MTVfRVhFQ19CU0QgfCBJOTE1X0VYRUNfQlNE X1JJTkcyKSA/IDEgOiAwOwo+ICsJZS5mbGFncyA9IGZsYWdzOwo+ICsKPiArCXJldHVybiBzcGlu X3N5bmMoZmQsIGN0eCwgJmUpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZCBlbmRfc3Bpbihp bnQgZmQsIGlndF9zcGluX3QgKnNwaW4sIHVuc2lnbmVkIGludCBmbGFncykKPiBAQCAtMjU3LDcg KzI2Nyw3IEBAIHN0YXRpYyB2b2lkIGVuZF9zcGluKGludCBmZCwgaWd0X3NwaW5fdCAqc3Bpbiwg dW5zaWduZWQgaW50IGZsYWdzKQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IC1zaW5nbGUo aW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLCB1bnNp Z25lZCBpbnQgZmxhZ3MpCj4gK3NpbmdsZShpbnQgZ2VtX2ZkLCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZTIgKmUsIHVuc2lnbmVkIGludCBmbGFncykKPiAgIHsKPiAgIAl1bnNpZ25lZCBs b25nIHNsZXB0Owo+ICAgCWlndF9zcGluX3QgKnNwaW47Cj4gQEAgLTI2Nyw3ICsyNzcsNyBAQCBz aW5nbGUoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICpl LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gICAJZmQgPSBvcGVuX3BtdShJOTE1X1BNVV9FTkdJTkVf QlVTWShlLT5jbGFzcywgZS0+aW5zdGFuY2UpKTsKPiAgIAo+ICAgCWlmIChmbGFncyAmIFRFU1Rf QlVTWSkKPiAtCQlzcGluID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkp Owo+ICsJCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlKTsKPiAgIAllbHNlCj4gICAJCXNw aW4gPSBOVUxMOwo+ICAgCj4gQEAgLTMwMyw3ICszMTMsNyBAQCBzaW5nbGUoaW50IGdlbV9mZCwg Y29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLCB1bnNpZ25lZCBpbnQgZmxh Z3MpCj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gLWJ1c3lfc3RhcnQoaW50IGdlbV9mZCwg Y29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICtidXN5X3N0YXJ0KGlu dCBnZW1fZmQsIHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAgIHsKPiAgIAl1 bnNpZ25lZCBsb25nIHNsZXB0Owo+ICAgCXVpbnQ2NF90IHZhbCwgdHNbMl07Cj4gQEAgLTMxNiw3 ICszMjYsNyBAQCBidXN5X3N0YXJ0KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZSkKPiAgIAkgKi8KPiAgIAlzbGVlcCgyKTsKPiAgIAo+IC0Jc3BpbiA9 IF9fc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwo+ICsJc3BpbiA9IF9f c3Bpbl9zeW5jKGdlbV9mZCwgMCwgZSk7Cj4gICAKPiAgIAlmZCA9IG9wZW5fcG11KEk5MTVfUE1V X0VOR0lORV9CVVNZKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSkpOwo+ICAgCj4gQEAgLTMzOCw3ICsz NDgsNyBAQCBidXN5X3N0YXJ0KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRp b25fZW5naW5lMiAqZSkKPiAgICAqIHdpbGwgZGVwZW5kIG9uIHRoZSBDSSBzeXN0ZW1zIHJ1bm5p bmcgaXQgYSBsb3QgdG8gZGV0ZWN0IGlzc3Vlcy4KPiAgICAqLwo+ICAgc3RhdGljIHZvaWQKPiAt YnVzeV9kb3VibGVfc3RhcnQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplKQo+ICtidXN5X2RvdWJsZV9zdGFydChpbnQgZ2VtX2ZkLCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICB7Cj4gICAJdW5zaWduZWQgbG9uZyBzbGVwdDsK PiAgIAl1aW50NjRfdCB2YWwsIHZhbDIsIHRzWzJdOwo+IEBAIC0zNDcsNiArMzU3LDcgQEAgYnVz eV9kb3VibGVfc3RhcnQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyICplKQo+ICAgCWludCBmZDsKPiAgIAo+ICAgCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0 ZShnZW1fZmQpOwo+ICsJaW50ZWxfaW5pdF9lbmdpbmVfbGlzdChnZW1fZmQsIGN0eCk7CgpZb3Ug ZGlkbid0IGZpbmQgdGhpcyBhIGJpdCB1Z2x5PyBJIHdhcyB0aGlua2luZyB0aGF0IHdlIHNob3Vs ZCBtYXliZSAKaGF2ZSBhIGhlbHBlciB0byBjb25maWd1cmUgdGhlIGNvbnRleHQgd2hpY2ggZG9l c24ndCByZXR1cm4gdGhlIGVuZ2luZSAKZGF0YSBzdHJ1Y3QuIERvZXNuJ3QgbWF0dGVyIEkgZ3Vl c3MuCgo+ICAgCj4gICAJLyoKPiAgIAkgKiBEZWZlYXQgdGhlIGJ1c3kgc3RhdHMgZGVsYXllZCBk aXNhYmxlLCB3ZSBuZWVkIHRvIGd1YXJhbnRlZSB3ZSBhcmUKPiBAQCAtMzU5LDExICszNzAsMTEg QEAgYnVzeV9kb3VibGVfc3RhcnQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplKQo+ICAgCSAqIHJlLXN1Ym1pc3Npb24gaW4gZXhlY2xpc3RzIG1vZGUu IE1ha2Ugc3VyZSBidXN5bmVzcyBpcyBjb3JyZWN0bHkKPiAgIAkgKiByZXBvcnRlZCB3aXRoIHRo ZSBlbmdpbmUgYnVzeSwgYW5kIGFmdGVyIHRoZSBlbmdpbmUgd2VudCBpZGxlLgo+ICAgCSAqLwo+ IC0Jc3BpblswXSA9IF9fc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwo+ ICsJc3BpblswXSA9IF9fc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZSk7Cj4gICAJdXNsZWVwKDUwMGUz KTsKPiAgIAlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLAo+ICAgCQkJCSAg ICAgICAuY3R4ID0gY3R4LAo+IC0JCQkJICAgICAgIC5lbmdpbmUgPSBlMnJpbmcoZ2VtX2ZkLCBl KSk7Cj4gKwkJCQkgICAgICAgLmVuZ2luZSA9IGUtPmZsYWdzKTsKPiAgIAo+ICAgCS8qCj4gICAJ ICogT3BlbiBQTVUgYXMgZmFzdCBhcyBwb3NzaWJsZSBhZnRlciB0aGUgc2Vjb25kIHNwaW4gYmF0 Y2ggaW4gYXR0ZW1wdAo+IEBAIC00MjEsMTAgKzQzMiwxMCBAQCBzdGF0aWMgdm9pZCBsb2dfYnVz eSh1bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXMsIHVpbnQ2NF90ICp2YWwpCj4gICB9Cj4gICAKPiAg IHN0YXRpYyB2b2lkCj4gLWJ1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBp bnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKPiArYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCSAgICAgICBjb25zdCB1bnNp Z25lZCBpbnQgbnVtX2VuZ2luZXMsIHVuc2lnbmVkIGludCBmbGFncykKPiAgIHsKPiAtCWNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZV87Cj4gKwlzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZTIgKmVfOwo+ICAgCXVpbnQ2NF90IHR2YWxbMl1bbnVtX2VuZ2luZXNdOwo+ ICAgCXVuc2lnbmVkIGludCBidXN5X2lkeCA9IDAsIGk7Cj4gICAJdWludDY0X3QgdmFsW251bV9l bmdpbmVzXTsKPiBAQCAtNDM0LDggKzQ0NSw4IEBAIGJ1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQs IGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKPiAgIAo+ICAgCWkgPSAw Owo+ICAgCWZkWzBdID0gLTE7Cj4gLQlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZ2Vt X2ZkLCBlXykgewo+IC0JCWlmIChlID09IGVfKQo+ICsJX19mb3JfZWFjaF9waHlzaWNhbF9lbmdp bmUoZ2VtX2ZkLCBlXykgewo+ICsJCWlmIChlLT5jbGFzcyA9PSBlXy0+Y2xhc3MgJiYgZS0+aW5z dGFuY2UgPT0gZV8tPmluc3RhbmNlKQo+ICAgCQkJYnVzeV9pZHggPSBpOwo+ICAgCj4gICAJCWZk W2krK10gPSBvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9CVVNZKGVfLT5jbGFzcywKPiBAQCAt NDQ1LDcgKzQ1Niw3IEBAIGJ1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBp bnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKPiAgIAo+ICAgCWlndF9hc3NlcnRfZXEoaSwgbnVt X2VuZ2luZXMpOwo+ICAgCj4gLQlzcGluID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdl bV9mZCwgZSkpOwo+ICsJc3BpbiA9IHNwaW5fc3luYyhnZW1fZmQsIDAsIGUpOwo+ICAgCXBtdV9y ZWFkX211bHRpKGZkWzBdLCBudW1fZW5naW5lcywgdHZhbFswXSk7Cj4gICAJc2xlcHQgPSBtZWFz dXJlZF91c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKPiAgIAlpZiAoZmxhZ3MgJiBU RVNUX1RSQUlMSU5HX0lETEUpCj4gQEAgLTQ3MiwyMyArNDgzLDIzIEBAIGJ1c3lfY2hlY2tfYWxs KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKPiAg IAo+ICAgc3RhdGljIHZvaWQKPiAgIF9fc3VibWl0X3NwaW5fYmF0Y2goaW50IGdlbV9mZCwgaWd0 X3NwaW5fdCAqc3BpbiwKPiAtCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplLAo+ICsJCSAgICBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gICAJ CSAgICBpbnQgb2Zmc2V0KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZl cjIgZWIgPSBzcGluLT5leGVjYnVmOwo+ICAgCj4gICAJZWIuZmxhZ3MgJj0gfigweDNmIHwgSTkx NV9FWEVDX0JTRF9NQVNLKTsKPiAtCWViLmZsYWdzIHw9IGUycmluZyhnZW1fZmQsIGUpIHwgSTkx NV9FWEVDX05PX1JFTE9DOwo+ICsJZWIuZmxhZ3MgfD0gZS0+ZmxhZ3MgfCBJOTE1X0VYRUNfTk9f UkVMT0M7Cj4gICAJZWIuYmF0Y2hfc3RhcnRfb2Zmc2V0ICs9IG9mZnNldDsKPiAgIAo+ICAgCWdl bV9leGVjYnVmKGdlbV9mZCwgJmViKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAtbW9z dF9idXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9u X2VuZ2luZTIgKmUsCj4gK21vc3RfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgc3RydWN0IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCQkgICAgY29uc3QgdW5zaWduZWQgaW50IG51 bV9lbmdpbmVzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gICB7Cj4gLQljb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVfOwo+ICsJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplXzsKPiAgIAl1aW50NjRfdCB0dmFsWzJdW251bV9lbmdpbmVzXTsKPiAgIAl1aW50NjRf dCB2YWxbbnVtX2VuZ2luZXNdOwo+ICAgCWludCBmZFtudW1fZW5naW5lc107Cj4gQEAgLTQ5Nywx MyArNTA4LDEzIEBAIG1vc3RfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0 IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCXVuc2lnbmVkIGludCBpZGxlX2lkeCwg aTsKPiAgIAo+ICAgCWkgPSAwOwo+IC0JZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGdl bV9mZCwgZV8pIHsKPiAtCQlpZiAoZSA9PSBlXykKPiArCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5n aW5lKGdlbV9mZCwgZV8pIHsKPiArCQlpZiAoZS0+Y2xhc3MgPT0gZV8tPmNsYXNzICYmIGUtPmlu c3RhbmNlID09IGVfLT5pbnN0YW5jZSkKPiAgIAkJCWlkbGVfaWR4ID0gaTsKPiAgIAkJZWxzZSBp ZiAoc3BpbikKPiAgIAkJCV9fc3VibWl0X3NwaW5fYmF0Y2goZ2VtX2ZkLCBzcGluLCBlXywgNjQp Owo+ICAgCQllbHNlCj4gLQkJCXNwaW4gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAsIGUycmluZyhn ZW1fZmQsIGVfKSk7Cj4gKwkJCXNwaW4gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAsIGVfKTsKPiAg IAo+ICAgCQl2YWxbaSsrXSA9IEk5MTVfUE1VX0VOR0lORV9CVVNZKGVfLT5jbGFzcywgZV8tPmlu c3RhbmNlKTsKPiAgIAl9Cj4gQEAgLTU0NSw3ICs1NTYsNyBAQCBzdGF0aWMgdm9pZAo+ICAgYWxs X2J1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5l cywKPiAgIAkJICAgdW5zaWduZWQgaW50IGZsYWdzKQo+ICAgewo+IC0JY29uc3Qgc3RydWN0IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOwo+ICsJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplOwo+ICAgCXVpbnQ2NF90IHR2YWxbMl1bbnVtX2VuZ2luZXNdOwo+ICAgCXVpbnQ2NF90 IHZhbFtudW1fZW5naW5lc107Cj4gICAJaW50IGZkW251bV9lbmdpbmVzXTsKPiBAQCAtNTU0LDEx ICs1NjUsMTEgQEAgYWxsX2J1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHVuc2lnbmVk IGludCBudW1fZW5naW5lcywKPiAgIAl1bnNpZ25lZCBpbnQgaTsKPiAgIAo+ICAgCWkgPSAwOwo+ IC0JZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGdlbV9mZCwgZSkgewo+ICsJX19mb3Jf ZWFjaF9waHlzaWNhbF9lbmdpbmUoZ2VtX2ZkLCBlKSB7Cj4gICAJCWlmIChzcGluKQo+ICAgCQkJ X19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsIHNwaW4sIGUsIDY0KTsKPiAgIAkJZWxzZQo+IC0J CQlzcGluID0gX19zcGluX3BvbGwoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7Cj4gKwkJ CXNwaW4gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAsIGUpOwo+ICAgCj4gICAJCXZhbFtpKytdID0g STkxNV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsKPiAgIAl9Cj4gQEAg LTU5Miw3ICs2MDMsNyBAQCBhbGxfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3QgdW5z aWduZWQgaW50IG51bV9lbmdpbmVzLAo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IC1ub19z ZW1hKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwg dW5zaWduZWQgaW50IGZsYWdzKQo+ICtub19zZW1hKGludCBnZW1fZmQsIHN0cnVjdCBpbnRlbF9l eGVjdXRpb25fZW5naW5lMiAqZSwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICAgewo+ICAgCWlndF9z cGluX3QgKnNwaW47Cj4gICAJdWludDY0X3QgdmFsWzJdWzJdOwo+IEBAIC02MDIsNyArNjEzLDcg QEAgbm9fc2VtYShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmUsIHVuc2lnbmVkIGludCBmbGFncykKPiAgIAlvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lO RV9XQUlUKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSksIGZkKTsKPiAgIAo+ICAgCWlmIChmbGFncyAm IFRFU1RfQlVTWSkKPiAtCQlzcGluID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9m ZCwgZSkpOwo+ICsJCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlKTsKPiAgIAllbHNlCj4g ICAJCXNwaW4gPSBOVUxMOwo+ICAgCj4gQEAgLTYzMSw3ICs2NDIsNyBAQCBub19zZW1hKGludCBn ZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwgdW5zaWduZWQg aW50IGZsYWdzKQo+ICAgI2RlZmluZSAgIE1JX1NFTUFQSE9SRV9TQURfR1RFX1NERAkoMTw8MTIp Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gLXNlbWFfd2FpdChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1 Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gK3NlbWFfd2FpdChpbnQgZ2VtX2ZkLCBz dHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gICAJICB1bnNpZ25lZCBpbnQgZmxh Z3MpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9j WzJdID0ge307Cj4gQEAgLTY4OSw3ICs3MDAsNyBAQCBzZW1hX3dhaXQoaW50IGdlbV9mZCwgY29u c3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCj4gICAJZWIuYnVmZmVy X2NvdW50ID0gMjsKPiAgIAllYi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+ IC0JZWIuZmxhZ3MgPSBlMnJpbmcoZ2VtX2ZkLCBlKTsKPiArCWViLmZsYWdzID0gZS0+ZmxhZ3M7 Cj4gICAKPiAgIAkvKioKPiAgIAkgKiBTdGFydCB0aGUgc2VtYXBob3JlIHdhaXQgUE1VIGFuZCBh ZnRlciBzb21lIGtub3duIHRpbWUgbGV0IHRoZSBhYm92ZQo+IEBAIC03OTIsNyArODAzLDcgQEAg c3RhdGljIGludCB3YWl0X3ZibGFuayhpbnQgZmQsIHVuaW9uIGRybV93YWl0X3ZibGFuayAqdmJs KQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IC1ldmVudF93YWl0KGludCBnZW1fZmQsIGNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiArZXZlbnRfd2FpdChpbnQg Z2VtX2ZkLCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICB7Cj4gICAJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geyB9Owo+ICAgCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7IH07Cj4gQEAgLTg0NSw3ICs4NTYsNyBAQCBldmVu dF93YWl0KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSkKPiAgIAo+ICAgCWViLmJ1ZmZlcl9jb3VudCA9IDE7Cj4gICAJZWIuYnVmZmVyc19wdHIgPSB0 b191c2VyX3BvaW50ZXIoJm9iaik7Cj4gLQllYi5mbGFncyA9IGUycmluZyhnZW1fZmQsIGUpIHwg STkxNV9FWEVDX1NFQ1VSRTsKPiArCWViLmZsYWdzID0gZS0+ZmxhZ3MgfCBJOTE1X0VYRUNfU0VD VVJFOwo+ICAgCj4gICAJZm9yX2VhY2hfcGlwZV93aXRoX3ZhbGlkX291dHB1dCgmZGF0YS5kaXNw bGF5LCBwLCBvdXRwdXQpIHsKPiAgIAkJc3RydWN0IGlndF9oZWxwZXJfcHJvY2VzcyB3YWl0ZXIg PSB7IH07Cj4gQEAgLTkxNyw3ICs5MjgsNyBAQCBldmVudF93YWl0KGludCBnZW1fZmQsIGNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAgIH0KPiAgIAo+ICAgc3RhdGlj IHZvaWQKPiAtbXVsdGlfY2xpZW50KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZSkKPiArbXVsdGlfY2xpZW50KGludCBnZW1fZmQsIHN0cnVjdCBpbnRl bF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAgIHsKPiAgIAl1aW50NjRfdCBjb25maWcgPSBJOTE1 X1BNVV9FTkdJTkVfQlVTWShlLT5jbGFzcywgZS0+aW5zdGFuY2UpOwo+ICAgCXVuc2lnbmVkIGxv bmcgc2xlcHRbMl07Cj4gQEAgLTkzNiw3ICs5NDcsNyBAQCBtdWx0aV9jbGllbnQoaW50IGdlbV9m ZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICAgCSAqLwo+ICAg CWZkWzFdID0gb3Blbl9wbXUoY29uZmlnKTsKPiAgIAo+IC0Jc3BpbiA9IHNwaW5fc3luYyhnZW1f ZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpKTsKPiArCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAw LCBlKTsKPiAgIAo+ICAgCXZhbFswXSA9IHZhbFsxXSA9IF9fcG11X3JlYWRfc2luZ2xlKGZkWzBd LCAmdHNbMF0pOwo+ICAgCXNsZXB0WzFdID0gbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0aW9u X25zIC8gMTAwMCk7Cj4gQEAgLTEwMzksNiArMTA1MCw3IEBAIHN0YXRpYyB2b2lkIGNwdV9ob3Rw bHVnKGludCBnZW1fZmQpCj4gICAJaWd0X3NwaW5fdCAqc3BpblsyXTsKPiAgIAl1aW50NjRfdCB0 c1syXTsKPiAgIAl1aW50NjRfdCB2YWw7Cj4gKwl1aW50MzJfdCBjdHg7Cj4gICAJaW50IGxpbmtb Ml07Cj4gICAJaW50IGZkLCByZXQ7Cj4gICAJaW50IGN1ciA9IDA7Cj4gQEAgLTEwNDYsMTQgKzEw NTgsMTggQEAgc3RhdGljIHZvaWQgY3B1X2hvdHBsdWcoaW50IGdlbV9mZCkKPiAgIAo+ICAgCWln dF9yZXF1aXJlKGNwdTBfaG90cGx1Z19zdXBwb3J0KCkpOwo+ICAgCj4gKwljdHggPSBnZW1fY29u dGV4dF9jcmVhdGUoZ2VtX2ZkKTsKPiArCj4gICAJZmQgPSBvcGVuX3BtdShJOTE1X1BNVV9FTkdJ TkVfQlVTWShJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApKTsKPiAgIAo+ICAgCS8qCj4gICAJ ICogQ3JlYXRlIHR3byBzcGlubmVycyBzbyB0ZXN0IGNhbiBlbnN1cmUgc2hvcnRlciBnYXBzIGlu IGVuZ2luZQo+ICAgCSAqIGJ1c3luZXNzIGFzIGl0IGlzIHRlcm1pbmF0aW5nIG9uZSBhbmQgcmUt c3RhcnRpbmcgdGhlIG90aGVyLgo+ICAgCSAqLwo+IC0Jc3BpblswXSA9IGlndF9zcGluX2JhdGNo X25ldyhnZW1fZmQsIC5lbmdpbmUgPSBJOTE1X0VYRUNfUkVOREVSKTsKPiAtCXNwaW5bMV0gPSBf X2lndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIC5lbmdpbmUgPSBJOTE1X0VYRUNfUkVOREVSKTsK PiArCXNwaW5bMF0gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLAo+ICsJCQkJICAgICAuZW5n aW5lID0gSTkxNV9FWEVDX1JFTkRFUiwgLmN0eCA9IGN0eCk7Cj4gKwlzcGluWzFdID0gX19pZ3Rf c3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLAo+ICsJCQkJICAgICAgIC5lbmdpbmUgPSBJOTE1X0VYRUNf UkVOREVSLCAuY3R4ID0gY3R4KTsKPiAgIAo+ICAgCXZhbCA9IF9fcG11X3JlYWRfc2luZ2xlKGZk LCAmdHNbMF0pOwo+ICAgCj4gQEAgLTExMzcsNiArMTE1Myw3IEBAIHN0YXRpYyB2b2lkIGNwdV9o b3RwbHVnKGludCBnZW1fZmQpCj4gICAKPiAgIAkJaWd0X3NwaW5fYmF0Y2hfZnJlZShnZW1fZmQs IHNwaW5bY3VyXSk7Cj4gICAJCXNwaW5bY3VyXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9m ZCwKPiArCQkJCQkJIC5jdHggPSBjdHgsCj4gICAJCQkJCQkgLmVuZ2luZSA9IEk5MTVfRVhFQ19S RU5ERVIpOwo+ICAgCQljdXIgXj0gMTsKPiAgIAl9Cj4gQEAgLTExNTAsNiArMTE2Nyw3IEBAIHN0 YXRpYyB2b2lkIGNwdV9ob3RwbHVnKGludCBnZW1fZmQpCj4gICAJaWd0X3dhaXRjaGlsZHJlbigp Owo+ICAgCWNsb3NlKGZkKTsKPiAgIAljbG9zZShsaW5rWzBdKTsKPiArCWdlbV9jb250ZXh0X2Rl c3Ryb3koZ2VtX2ZkLCBjdHgpOwo+ICAgCj4gICAJLyogU2tpcCBpZiBjaGlsZCBzaWduYWxzIGEg cHJvYmxlbSB3aXRoIG9mZmxpbmluZyBhIENQVS4gKi8KPiAgIAlpZ3Rfc2tpcF9vbihidWYgPT0g J3MnKTsKPiBAQCAtMTE2NSwxNyArMTE4MywyMSBAQCB0ZXN0X2ludGVycnVwdHMoaW50IGdlbV9m ZCkKPiAgIAlpZ3Rfc3Bpbl90ICpzcGluW3RhcmdldF07Cj4gICAJc3RydWN0IHBvbGxmZCBwZmQ7 Cj4gICAJdWludDY0X3QgaWRsZSwgYnVzeTsKPiArCXVpbnQzMl90IGN0eDsKPiAgIAlpbnQgZmVu Y2VfZmQ7Cj4gICAJaW50IGZkOwo+ICAgCj4gICAJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsK PiAgIAo+ICsJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGdlbV9mZCk7Cj4gKwo+ICAgCWZkID0g b3Blbl9wbXUoSTkxNV9QTVVfSU5URVJSVVBUUyk7Cj4gICAKPiAgIAkvKiBRdWV1ZSBzcGlubmlu ZyBiYXRjaGVzLiAqLwo+ICAgCWZvciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0OyBpKyspIHsKPiAg IAkJc3BpbltpXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwKPiAgIAkJCQkJICAgICAg IC5lbmdpbmUgPSBJOTE1X0VYRUNfUkVOREVSLAo+ICsJCQkJCSAgICAgICAuY3R4ID0gY3R4LAo+ ICAgCQkJCQkgICAgICAgLmZsYWdzID0gSUdUX1NQSU5fRkVOQ0VfT1VUKTsKPiAgIAkJaWYgKGkg PT0gMCkgewo+ICAgCQkJZmVuY2VfZmQgPSBzcGluW2ldLT5vdXRfZmVuY2U7Cj4gQEAgLTEyMTcs NiArMTIzOSw3IEBAIHRlc3RfaW50ZXJydXB0cyhpbnQgZ2VtX2ZkKQo+ICAgCS8qIENoZWNrIGF0 IGxlYXN0IGFzIG1hbnkgaW50ZXJydXB0cyBoYXMgYmVlbiBnZW5lcmF0ZWQuICovCj4gICAJYnVz eSA9IHBtdV9yZWFkX3NpbmdsZShmZCkgLSBpZGxlOwo+ICAgCWNsb3NlKGZkKTsKPiArCWdlbV9j b250ZXh0X2Rlc3Ryb3koZ2VtX2ZkLCBjdHgpOwo+ICAgCj4gICAJaWd0X2Fzc2VydF9sdGUodGFy Z2V0LCBidXN5KTsKPiAgIH0KPiBAQCAtMTIyOSwxNSArMTI1MiwxOSBAQCB0ZXN0X2ludGVycnVw dHNfc3luYyhpbnQgZ2VtX2ZkKQo+ICAgCWlndF9zcGluX3QgKnNwaW5bdGFyZ2V0XTsKPiAgIAlz dHJ1Y3QgcG9sbGZkIHBmZDsKPiAgIAl1aW50NjRfdCBpZGxlLCBidXN5Owo+ICsJdWludDMyX3Qg Y3R4Owo+ICAgCWludCBmZDsKPiAgIAo+ICAgCWdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7Cj4g ICAKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShnZW1fZmQpOwo+ICsKPiAgIAlmZCA9IG9w ZW5fcG11KEk5MTVfUE1VX0lOVEVSUlVQVFMpOwo+ICAgCj4gICAJLyogUXVldWUgc3Bpbm5pbmcg YmF0Y2hlcy4gKi8KPiAgIAlmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldDsgaSsrKQo+ICAgCQlz cGluW2ldID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLAo+ICsJCQkJCSAgICAgICAuY3R4 ID0gY3R4LAo+ICAgCQkJCQkgICAgICAgLmZsYWdzID0gSUdUX1NQSU5fRkVOQ0VfT1VUKTsKPiAg IAo+ICAgCS8qIFdhaXQgZm9yIGlkbGUgc3RhdGUuICovCj4gQEAgLTEyNjIsNiArMTI4OSw3IEBA IHRlc3RfaW50ZXJydXB0c19zeW5jKGludCBnZW1fZmQpCj4gICAJLyogQ2hlY2sgYXQgbGVhc3Qg YXMgbWFueSBpbnRlcnJ1cHRzIGhhcyBiZWVuIGdlbmVyYXRlZC4gKi8KPiAgIAlidXN5ID0gcG11 X3JlYWRfc2luZ2xlKGZkKSAtIGlkbGU7Cj4gICAJY2xvc2UoZmQpOwo+ICsJZ2VtX2NvbnRleHRf ZGVzdHJveShnZW1fZmQsIGN0eCk7Cj4gICAKPiAgIAlpZ3RfYXNzZXJ0X2x0ZSh0YXJnZXQsIGJ1 c3kpOwo+ICAgfQo+IEBAIC0xMjc0LDYgKzEzMDIsOSBAQCB0ZXN0X2ZyZXF1ZW5jeShpbnQgZ2Vt X2ZkKQo+ICAgCWRvdWJsZSBtaW5bMl0sIG1heFsyXTsKPiAgIAlpZ3Rfc3Bpbl90ICpzcGluOwo+ ICAgCWludCBmZCwgc3lzZnM7Cj4gKwl1aW50MzJfdCBjdHg7Cj4gKwo+ICsJY3R4ID0gZ2VtX2Nv bnRleHRfY3JlYXRlKGdlbV9mZCk7Cj4gICAKPiAgIAlzeXNmcyA9IGlndF9zeXNmc19vcGVuKGdl bV9mZCk7Cj4gICAJaWd0X3JlcXVpcmUoc3lzZnMgPj0gMCk7Cj4gQEAgLTEzMDEsNyArMTMzMiw3 IEBAIHRlc3RfZnJlcXVlbmN5KGludCBnZW1fZmQpCj4gICAJaWd0X3JlcXVpcmUoaWd0X3N5c2Zz X2dldF91MzIoc3lzZnMsICJndF9ib29zdF9mcmVxX21oeiIpID09IG1pbl9mcmVxKTsKPiAgIAo+ ICAgCWdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7IC8qIElkbGUgdG8gYmUgc3VyZSB0aGUgY2hh bmdlIHRha2VzIGVmZmVjdCAqLwo+IC0Jc3BpbiA9IHNwaW5fc3luYyhnZW1fZmQsIDAsIEk5MTVf RVhFQ19SRU5ERVIpOwo+ICsJc3BpbiA9IHNwaW5fc3luY19mbGFncyhnZW1fZmQsIGN0eCwgSTkx NV9FWEVDX1JFTkRFUik7Cj4gICAKPiAgIAlzbGVwdCA9IHBtdV9yZWFkX211bHRpKGZkLCAyLCBz dGFydCk7Cj4gICAJbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7Cj4g QEAgLTEzMjcsNyArMTM1OCw3IEBAIHRlc3RfZnJlcXVlbmN5KGludCBnZW1fZmQpCj4gICAJaWd0 X3JlcXVpcmUoaWd0X3N5c2ZzX2dldF91MzIoc3lzZnMsICJndF9taW5fZnJlcV9taHoiKSA9PSBt YXhfZnJlcSk7Cj4gICAKPiAgIAlnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQpOwo+IC0Jc3BpbiA9 IHNwaW5fc3luYyhnZW1fZmQsIDAsIEk5MTVfRVhFQ19SRU5ERVIpOwo+ICsJc3BpbiA9IHNwaW5f c3luY19mbGFncyhnZW1fZmQsIGN0eCwgSTkxNV9FWEVDX1JFTkRFUik7Cj4gICAKPiAgIAlzbGVw dCA9IHBtdV9yZWFkX211bHRpKGZkLCAyLCBzdGFydCk7Cj4gICAJbWVhc3VyZWRfdXNsZWVwKGJh dGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7Cj4gQEAgLTEzNDgsNiArMTM3OSw4IEBAIHRlc3RfZnJl cXVlbmN5KGludCBnZW1fZmQpCj4gICAJCQkgbWluX2ZyZXEsIGlndF9zeXNmc19nZXRfdTMyKHN5 c2ZzLCAiZ3RfbWluX2ZyZXFfbWh6IikpOwo+ICAgCWNsb3NlKGZkKTsKPiAgIAo+ICsJZ2VtX2Nv bnRleHRfZGVzdHJveShnZW1fZmQsIGN0eCk7Cj4gKwo+ICAgCWlndF9pbmZvKCJNaW4gZnJlcXVl bmN5OiByZXF1ZXN0ZWQgJS4xZiwgYWN0dWFsICUuMWZcbiIsCj4gICAJCSBtaW5bMF0sIG1pblsx XSk7Cj4gICAJaWd0X2luZm8oIk1heCBmcmVxdWVuY3k6IHJlcXVlc3RlZCAlLjFmLCBhY3R1YWwg JS4xZlxuIiwKPiBAQCAtMTQ0OCw3ICsxNDgxLDcgQEAgdGVzdF9yYzYoaW50IGdlbV9mZCwgdW5z aWduZWQgaW50IGZsYWdzKQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IC10ZXN0X2VuYWJs ZV9yYWNlKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSkKPiArdGVzdF9lbmFibGVfcmFjZShpbnQgZ2VtX2ZkLCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9u X2VuZ2luZTIgKmUpCj4gICB7Cj4gICAJdWludDY0X3QgY29uZmlnID0gSTkxNV9QTVVfRU5HSU5F X0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsKPiAgIAlzdHJ1Y3QgaWd0X2hlbHBlcl9wcm9j ZXNzIGVuZ2luZV9sb2FkID0geyB9Owo+IEBAIC0xNDY1LDcgKzE0OTgsNyBAQCB0ZXN0X2VuYWJs ZV9yYWNlKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSkKPiAgIAo+ICAgCWViLmJ1ZmZlcl9jb3VudCA9IDE7Cj4gICAJZWIuYnVmZmVyc19wdHIgPSB0 b191c2VyX3BvaW50ZXIoJm9iaik7Cj4gLQllYi5mbGFncyA9IGUycmluZyhnZW1fZmQsIGUpOwo+ ICsJZWIuZmxhZ3MgPSBlLT5mbGFnczsKPiAgIAo+ICAgCS8qCj4gICAJICogVGhpcyB0ZXN0IGlz IHByb2JhYmlsaXN0aWMgc28gcnVuIGluIGEgZmV3IHRpbWVzIHRvIGluY3JlYXNlIHRoZQo+IEBA IC0xNTIwLDcgKzE1NTMsNyBAQCBzdGF0aWMgdm9pZCBfX3JlYXJtX3NwaW5fYmF0Y2goaWd0X3Nw aW5fdCAqc3BpbikKPiAgIAlfX2Fzc2VydF93aXRoaW4oeCwgcmVmLCB0b2xlcmFuY2UsIHRvbGVy YW5jZSkKPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAtYWNjdXJhY3koaW50IGdlbV9mZCwgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICthY2N1cmFjeShpbnQgZ2VtX2Zk LCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gICAJIHVuc2lnbmVkIGxvbmcg dGFyZ2V0X2J1c3lfcGN0LAo+ICAgCSB1bnNpZ25lZCBsb25nIHRhcmdldF9pdGVycykKPiAgIHsK PiBAQCAtMTU3MCw3ICsxNjAzLDcgQEAgYWNjdXJhY3koaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0 IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCQlpZ3Rfc3Bpbl90ICpzcGluOwo+ICAg Cj4gICAJCS8qIEFsbG9jYXRlIG91ciBzcGluIGJhdGNoIGFuZCBpZGxlIGl0LiAqLwo+IC0JCXNw aW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAuZW5naW5lID0gZTJyaW5nKGdlbV9mZCwg ZSkpOwo+ICsJCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAuZW5naW5lID0gZS0+ ZmxhZ3MpOwo+ICAgCQlpZ3Rfc3Bpbl9iYXRjaF9lbmQoc3Bpbik7Cj4gICAJCWdlbV9zeW5jKGdl bV9mZCwgc3Bpbi0+aGFuZGxlKTsKPiAgIAo+IEBAIC0xNjc0LDcgKzE3MDcsNyBAQCBpZ3RfbWFp bgo+ICAgCQkJCUk5MTVfUE1VX0xBU1QgLSBfX0k5MTVfUE1VX09USEVSKDApICsgMTsKPiAgIAl1 bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXMgPSAwOwo+ICAgCWludCBmZCA9IC0xOwo+IC0JY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOwo+ICsJc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplOwo+ICAgCXVuc2lnbmVkIGludCBpOwo+ICAgCj4gICAJaWd0X2ZpeHR1 cmUgewo+IEBAIC0xNjgzLDcgKzE3MTYsNyBAQCBpZ3RfbWFpbgo+ICAgCQlpZ3RfcmVxdWlyZV9n ZW0oZmQpOwo+ICAgCQlpZ3RfcmVxdWlyZShpOTE1X3R5cGVfaWQoKSA+IDApOwo+ICAgCj4gLQkJ Zm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlKQo+ICsJCV9fZm9yX2VhY2hfcGh5 c2ljYWxfZW5naW5lKGZkLCBlKQo+ICAgCQkJbnVtX2VuZ2luZXMrKzsKPiAgIAl9Cj4gICAKPiBA QCAtMTY5Myw3ICsxNzI2LDcgQEAgaWd0X21haW4KPiAgIAlpZ3Rfc3VidGVzdCgiaW52YWxpZC1p bml0IikKPiAgIAkJaW52YWxpZF9pbml0KCk7Cj4gICAKPiAtCV9fZm9yX2VhY2hfZW5naW5lX2Ns YXNzX2luc3RhbmNlKGUpIHsKPiArCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBlKSB7 Cj4gICAJCWNvbnN0IHVuc2lnbmVkIGludCBwY3RbXSA9IHsgMiwgNTAsIDk4IH07Cj4gICAKPiAg IAkJLyoqCj4gQEAgLTE4OTcsNyArMTkzMCw3IEBAIGlndF9tYWluCj4gICAJCQlnZW1fcXVpZXNj ZW50X2dwdShmZCk7Cj4gICAJCX0KPiAgIAo+IC0JCV9fZm9yX2VhY2hfZW5naW5lX2NsYXNzX2lu c3RhbmNlKGUpIHsKPiArCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShyZW5kZXJfZmQsIGUp IHsKPiAgIAkJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiAgIAkJCQlpZ3RfZml4dHVyZSB7Cj4gICAJ CQkJCWdlbV9yZXF1aXJlX2VuZ2luZShyZW5kZXJfZmQsCj4gClJldmlld2VkLWJ5OiBUdnJ0a28g VXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgoKUmVnYXJkcywKClR2cnRrbwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=