From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4EAB3891F2 for ; Tue, 16 Apr 2019 17:06:04 +0000 (UTC) References: <20190416151128.2465-1-andi.shyti@intel.com> <20190416151128.2465-7-andi.shyti@intel.com> From: Tvrtko Ursulin Message-ID: Date: Tue, 16 Apr 2019 18:06:00 +0100 MIME-Version: 1.0 In-Reply-To: <20190416151128.2465-7-andi.shyti@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH v21 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: Ck9uIDE2LzA0LzIwMTkgMTY6MTEsIEFuZGkgU2h5dGkgd3JvdGU6Cj4gUmVwbGFjZSB0aGUgbGVn YWN5IGZvcl9lYWNoX2VuZ2luZSogZGVmaW5lcyB3aXRoIHRoZSBvbmVzCj4gaW1wbGVtZW50ZWQg aW4gdGhlIGdlbV9lbmdpbmVfdG9wb2xvZ3kgbGlicmFyeS4KPiAKPiBVc2Ugd2hlbmV2ZXIgcG9z c2libGUgZ2VtX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoKSB0aGF0IGNoZWNrcwo+IGNsYXNzIGlu c3RlYWQgb2YgZmxhZ3MuCj4gCj4gTm93IHRoZSBfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0 YW5jZSBhbmQKPiBmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgYXJlIHVudXNlZCwgcmVt b3ZlIHRoZW0uCj4gCj4gU3VnZ2VzdGVkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3Vs aW5AaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFuZGkgU2h5dGkgPGFuZGkuc2h5dGlAaW50 ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AbGludXguaW50ZWwu Y29tPgo+IFJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwu Y29tPgo+IC0tLQo+ICAgbGliL2lndF9ndC5oICAgICB8ICAgNyAtLS0KPiAgIHRlc3RzL3BlcmZf cG11LmMgfCAxNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0KPiAgIDIgZmlsZXMgY2hhbmdlZCwgOTAgaW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25zKC0p Cj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZ3QuaCBiL2xpYi9pZ3RfZ3QuaAo+IGluZGV4IDBi NWM3ZmNiNGMzYy4uNzczMThlMmE4MmI4IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfZ3QuaAo+ICsr KyBiL2xpYi9pZ3RfZ3QuaAo+IEBAIC0xMTksMTEgKzExOSw0IEBAIHZvaWQgZ2VtX3JlcXVpcmVf ZW5naW5lKGludCBnZW1fZmQsCj4gICAJaWd0X3JlcXVpcmUoZ2VtX2hhc19lbmdpbmUoZ2VtX2Zk LCBjbGFzcywgaW5zdGFuY2UpKTsKPiAgIH0KPiAgIAo+IC0jZGVmaW5lIF9fZm9yX2VhY2hfZW5n aW5lX2NsYXNzX2luc3RhbmNlKGVfXykgXAo+IC0JZm9yICgoZV9fKSA9IGludGVsX2V4ZWN1dGlv bl9lbmdpbmVzMjsgKGVfXyktPm5hbWU7IChlX18pKyspCj4gLQo+IC0jZGVmaW5lIGZvcl9lYWNo X2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZF9fLCBlX18pIFwKPiAtCWZvciAoKGVfXykgPSBpbnRl bF9leGVjdXRpb25fZW5naW5lczI7IChlX18pLT5uYW1lOyAoZV9fKSsrKSBcCj4gLQkJZm9yX2lm IChnZW1faGFzX2VuZ2luZSgoZmRfXyksIChlX18pLT5jbGFzcywgKGVfXyktPmluc3RhbmNlKSkK PiAtCj4gICAjZW5kaWYgLyogSUdUX0dUX0ggKi8KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZl9w bXUuYyBiL3Rlc3RzL3BlcmZfcG11LmMKPiBpbmRleCA0ZjU1MmJjMmFlMjguLjkzZThlZmM5YTY0 NSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9wZXJmX3BtdS5jCj4gKysrIGIvdGVzdHMvcGVyZl9wbXUu Ywo+IEBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbnQgb3Blbl9ncm91cCh1aW50NjRfdCBjb25m aWcsIGludCBncm91cCkKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAtaW5pdChpbnQgZ2Vt X2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVpbnQ4X3Qgc2Ft cGxlKQo+ICtpbml0KGludCBnZW1fZmQsIHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSwgdWludDhfdCBzYW1wbGUpCj4gICB7Cj4gICAJaW50IGZkLCBlcnIgPSAwOwo+ICAgCWJvb2wg ZXhpc3RzOwo+IEBAIC04Miw3ICs4Miw3IEBAIGluaXQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0 IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLCB1aW50OF90IHNhbXBsZSkKPiAgIAlpZiAoZmQg PCAwKQo+ICAgCQllcnIgPSBlcnJubzsKPiAgIAo+IC0JZXhpc3RzID0gZ2VtX2hhc19lbmdpbmUo Z2VtX2ZkLCBlLT5jbGFzcywgZS0+aW5zdGFuY2UpOwo+ICsJZXhpc3RzID0gZ2VtX2NvbnRleHRf aGFzX2VuZ2luZShnZW1fZmQsIDAsIGUtPmZsYWdzKTsKPiAgIAlpZiAoaW50ZWxfZ2VuKGludGVs X2dldF9kcm1fZGV2aWQoZ2VtX2ZkKSkgPCA2ICYmCj4gICAJICAgIHNhbXBsZSA9PSBJOTE1X1NB TVBMRV9TRU1BKQo+ICAgCQlleGlzdHMgPSBmYWxzZTsKPiBAQCAtMTU4LDExICsxNTgsNiBAQCBz dGF0aWMgdW5zaWduZWQgaW50IG1lYXN1cmVkX3VzbGVlcCh1bnNpZ25lZCBpbnQgdXNlYykKPiAg IAlyZXR1cm4gaWd0X25zZWNfZWxhcHNlZCgmdHMpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB1bnNp Z25lZCBpbnQgZTJyaW5nKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lMiAqZSkKPiAtewo+IC0JcmV0dXJuIGdlbV9jbGFzc19pbnN0YW5jZV90b19lYl9mbGFn cyhnZW1fZmQsIGUtPmNsYXNzLCBlLT5pbnN0YW5jZSk7Cj4gLX0KPiAtCj4gICAjZGVmaW5lIFRF U1RfQlVTWSAoMSkKPiAgICNkZWZpbmUgRkxBR19TWU5DICgyKQo+ICAgI2RlZmluZSBURVNUX1RS QUlMSU5HX0lETEUgKDQpCj4gQEAgLTE3MCwxNCArMTY1LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBp bnQgZTJyaW5nKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5l MiAqZSkKPiAgICNkZWZpbmUgRkxBR19MT05HICgxNikKPiAgICNkZWZpbmUgRkxBR19IQU5HICgz MikKPiAgIAo+IC1zdGF0aWMgaWd0X3NwaW5fdCAqIF9fc3Bpbl9wb2xsKGludCBmZCwgdWludDMy X3QgY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICtzdGF0aWMgaWd0X3NwaW5fdCAqIF9fc3Bp bl9wb2xsKGludCBmZCwgdWludDMyX3QgY3R4LAo+ICsJCQkJc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplKQo+ICAgewo+ICAgCXN0cnVjdCBpZ3Rfc3Bpbl9mYWN0b3J5IG9wdHMgPSB7 Cj4gICAJCS5jdHggPSBjdHgsCj4gLQkJLmVuZ2luZSA9IGZsYWdzLAo+ICsJCS5lbmdpbmUgPSBl LT5mbGFncywKPiAgIAl9Owo+ICAgCj4gLQlpZiAoZ2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgZmxh Z3MpKQo+ICsJaWYgKGdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoZmQsIGUtPmNsYXNzKSkKPiAg IAkJb3B0cy5mbGFncyB8PSBJR1RfU1BJTl9QT0xMX1JVTjsKPiAgIAo+ICAgCXJldHVybiBfX2ln dF9zcGluX2JhdGNoX2ZhY3RvcnkoZmQsICZvcHRzKTsKPiBAQCAtMjA5LDIwICsyMDUsMzQgQEAg c3RhdGljIHVuc2lnbmVkIGxvbmcgX19zcGluX3dhaXQoaW50IGZkLCBpZ3Rfc3Bpbl90ICpzcGlu KQo+ICAgCXJldHVybiBpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCk7Cj4gICB9Cj4gICAKPiAtc3Rh dGljIGlndF9zcGluX3QgKiBfX3NwaW5fc3luYyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWdu ZWQgbG9uZyBmbGFncykKPiArc3RhdGljIGlndF9zcGluX3QgKiBfX3NwaW5fc3luYyhpbnQgZmQs IHVpbnQzMl90IGN0eCwKPiArCQkJCXN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkK PiAgIHsKPiAtCWlndF9zcGluX3QgKnNwaW4gPSBfX3NwaW5fcG9sbChmZCwgY3R4LCBmbGFncyk7 Cj4gKwlpZ3Rfc3Bpbl90ICpzcGluID0gX19zcGluX3BvbGwoZmQsIGN0eCwgZSk7Cj4gICAKPiAg IAlfX3NwaW5fd2FpdChmZCwgc3Bpbik7Cj4gICAKPiAgIAlyZXR1cm4gc3BpbjsKPiAgIH0KPiAg IAo+IC1zdGF0aWMgaWd0X3NwaW5fdCAqIHNwaW5fc3luYyhpbnQgZmQsIHVpbnQzMl90IGN0eCwg dW5zaWduZWQgbG9uZyBmbGFncykKPiArc3RhdGljIGlndF9zcGluX3QgKiBzcGluX3N5bmMoaW50 IGZkLCB1aW50MzJfdCBjdHgsCj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lMiAqZSkKPiAgIHsKPiAgIAlpZ3RfcmVxdWlyZV9nZW0oZmQpOwo+ICAgCj4gLQlyZXR1cm4g X19zcGluX3N5bmMoZmQsIGN0eCwgZmxhZ3MpOwo+ICsJcmV0dXJuIF9fc3Bpbl9zeW5jKGZkLCBj dHgsIGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaWd0X3NwaW5fdCAqIHNwaW5fc3luY19mbGFncyhp bnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3Qg aW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgZSA9IHsgfTsKPiArCj4gKwllLmNsYXNzID0gZ2VtX2V4 ZWNidWZfZmxhZ3NfdG9fZW5naW5lX2NsYXNzKGZsYWdzKTsKPiArCWUuaW5zdGFuY2UgPSAoZmxh Z3MgJiAoSTkxNV9FWEVDX0JTRF9NQVNLIHwgSTkxNV9FWEVDX1JJTkdfTUFTSykpID09Cj4gKwkJ ICAgICAoSTkxNV9FWEVDX0JTRCB8IEk5MTVfRVhFQ19CU0RfUklORzIpID8gMSA6IDA7Cj4gKwll LmZsYWdzID0gZmxhZ3M7Cj4gKwo+ICsJcmV0dXJuIHNwaW5fc3luYyhmZCwgY3R4LCAmZSk7Cj4g ICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGVuZF9zcGluKGludCBmZCwgaWd0X3NwaW5fdCAqc3Bp biwgdW5zaWduZWQgaW50IGZsYWdzKQo+IEBAIC0yNTcsNyArMjY3LDcgQEAgc3RhdGljIHZvaWQg ZW5kX3NwaW4oaW50IGZkLCBpZ3Rfc3Bpbl90ICpzcGluLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4g ICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gLXNpbmdsZShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1 Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVuc2lnbmVkIGludCBmbGFncykKPiArc2lu Z2xlKGludCBnZW1fZmQsIHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwgdW5zaWdu ZWQgaW50IGZsYWdzKQo+ICAgewo+ICAgCXVuc2lnbmVkIGxvbmcgc2xlcHQ7Cj4gICAJaWd0X3Nw aW5fdCAqc3BpbjsKPiBAQCAtMjY3LDcgKzI3Nyw3IEBAIHNpbmdsZShpbnQgZ2VtX2ZkLCBjb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVuc2lnbmVkIGludCBmbGFncykK PiAgIAlmZCA9IG9wZW5fcG11KEk5MTVfUE1VX0VOR0lORV9CVVNZKGUtPmNsYXNzLCBlLT5pbnN0 YW5jZSkpOwo+ICAgCj4gICAJaWYgKGZsYWdzICYgVEVTVF9CVVNZKQo+IC0JCXNwaW4gPSBzcGlu X3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7Cj4gKwkJc3BpbiA9IHNwaW5fc3lu YyhnZW1fZmQsIDAsIGUpOwo+ICAgCWVsc2UKPiAgIAkJc3BpbiA9IE5VTEw7Cj4gICAKPiBAQCAt MzAzLDcgKzMxMyw3IEBAIHNpbmdsZShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZTIgKmUsIHVuc2lnbmVkIGludCBmbGFncykKPiAgIH0KPiAgIAo+ICAgc3Rh dGljIHZvaWQKPiAtYnVzeV9zdGFydChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZTIgKmUpCj4gK2J1c3lfc3RhcnQoaW50IGdlbV9mZCwgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICAgewo+ICAgCXVuc2lnbmVkIGxvbmcgc2xlcHQ7Cj4g ICAJdWludDY0X3QgdmFsLCB0c1syXTsKPiBAQCAtMzE2LDcgKzMyNiw3IEBAIGJ1c3lfc3RhcnQo aW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICAg CSAqLwo+ICAgCXNsZWVwKDIpOwo+ICAgCj4gLQlzcGluID0gX19zcGluX3N5bmMoZ2VtX2ZkLCAw LCBlMnJpbmcoZ2VtX2ZkLCBlKSk7Cj4gKwlzcGluID0gX19zcGluX3N5bmMoZ2VtX2ZkLCAwLCBl KTsKPiAgIAo+ICAgCWZkID0gb3Blbl9wbXUoSTkxNV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3Ms IGUtPmluc3RhbmNlKSk7Cj4gICAKPiBAQCAtMzM4LDcgKzM0OCw3IEBAIGJ1c3lfc3RhcnQoaW50 IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICAgICog d2lsbCBkZXBlbmQgb24gdGhlIENJIHN5c3RlbXMgcnVubmluZyBpdCBhIGxvdCB0byBkZXRlY3Qg aXNzdWVzLgo+ICAgICovCj4gICBzdGF0aWMgdm9pZAo+IC1idXN5X2RvdWJsZV9zdGFydChpbnQg Z2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gK2J1c3lf ZG91YmxlX3N0YXJ0KGludCBnZW1fZmQsIHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSkKPiAgIHsKPiAgIAl1bnNpZ25lZCBsb25nIHNsZXB0Owo+ICAgCXVpbnQ2NF90IHZhbCwgdmFs MiwgdHNbMl07Cj4gQEAgLTM0Niw3ICszNTYsNyBAQCBidXN5X2RvdWJsZV9zdGFydChpbnQgZ2Vt X2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICAJdWludDMy X3QgY3R4Owo+ICAgCWludCBmZDsKPiAgIAo+IC0JY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGdl bV9mZCk7Cj4gKwljdHggPSBnZW1fbWFrZV9jb250ZXh0X3NldF9hbGxfZW5naW5lcyhnZW1fZmQp Owo+ICAgCj4gICAJLyoKPiAgIAkgKiBEZWZlYXQgdGhlIGJ1c3kgc3RhdHMgZGVsYXllZCBkaXNh YmxlLCB3ZSBuZWVkIHRvIGd1YXJhbnRlZSB3ZSBhcmUKPiBAQCAtMzU5LDExICszNjksMTEgQEAg YnVzeV9kb3VibGVfc3RhcnQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplKQo+ICAgCSAqIHJlLXN1Ym1pc3Npb24gaW4gZXhlY2xpc3RzIG1vZGUuIE1h a2Ugc3VyZSBidXN5bmVzcyBpcyBjb3JyZWN0bHkKPiAgIAkgKiByZXBvcnRlZCB3aXRoIHRoZSBl bmdpbmUgYnVzeSwgYW5kIGFmdGVyIHRoZSBlbmdpbmUgd2VudCBpZGxlLgo+ICAgCSAqLwo+IC0J c3BpblswXSA9IF9fc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwo+ICsJ c3BpblswXSA9IF9fc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZSk7Cj4gICAJdXNsZWVwKDUwMGUzKTsK PiAgIAlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLAo+ICAgCQkJCSAgICAg ICAuY3R4ID0gY3R4LAo+IC0JCQkJICAgICAgIC5lbmdpbmUgPSBlMnJpbmcoZ2VtX2ZkLCBlKSk7 Cj4gKwkJCQkgICAgICAgLmVuZ2luZSA9IGUtPmZsYWdzKTsKPiAgIAo+ICAgCS8qCj4gICAJICog T3BlbiBQTVUgYXMgZmFzdCBhcyBwb3NzaWJsZSBhZnRlciB0aGUgc2Vjb25kIHNwaW4gYmF0Y2gg aW4gYXR0ZW1wdAo+IEBAIC0zOTMsNyArNDAzLDcgQEAgYnVzeV9kb3VibGVfc3RhcnQoaW50IGdl bV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICAgCj4gICAJ Y2xvc2UoZmQpOwo+ICAgCj4gLQlnZW1fY29udGV4dF9kZXN0cm95KGdlbV9mZCwgY3R4KTsKPiAr CWdlbV91bnNldF9jb250ZXh0X2VuZ2luZXMoZ2VtX2ZkLCBjdHgpOwo+ICAgCj4gICAJYXNzZXJ0 X3dpdGhpbl9lcHNpbG9uKHZhbCwgdHNbMV0gLSB0c1swXSwgdG9sZXJhbmNlKTsKPiAgIAlpZ3Rf YXNzZXJ0X2VxKHZhbDIsIDApOwo+IEBAIC00MjEsMTAgKzQzMSwxMCBAQCBzdGF0aWMgdm9pZCBs b2dfYnVzeSh1bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXMsIHVpbnQ2NF90ICp2YWwpCj4gICB9Cj4g ICAKPiAgIHN0YXRpYyB2b2lkCj4gLWJ1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0 cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKPiArYnVzeV9jaGVja19hbGwoaW50IGdl bV9mZCwgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCSAgICAgICBjb25z dCB1bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXMsIHVuc2lnbmVkIGludCBmbGFncykKPiAgIHsKPiAt CWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZV87Cj4gKwlzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVfOwo+ICAgCXVpbnQ2NF90IHR2YWxbMl1bbnVtX2VuZ2lu ZXNdOwo+ICAgCXVuc2lnbmVkIGludCBidXN5X2lkeCA9IDAsIGk7Cj4gICAJdWludDY0X3QgdmFs W251bV9lbmdpbmVzXTsKPiBAQCAtNDM0LDggKzQ0NCw4IEBAIGJ1c3lfY2hlY2tfYWxsKGludCBn ZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKPiAgIAo+ICAg CWkgPSAwOwo+ICAgCWZkWzBdID0gLTE7Cj4gLQlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFu Y2UoZ2VtX2ZkLCBlXykgewo+IC0JCWlmIChlID09IGVfKQo+ICsJX19mb3JfZWFjaF9waHlzaWNh bF9lbmdpbmUoZ2VtX2ZkLCBlXykgewo+ICsJCWlmIChlLT5jbGFzcyA9PSBlXy0+Y2xhc3MgJiYg ZS0+aW5zdGFuY2UgPT0gZV8tPmluc3RhbmNlKQo+ICAgCQkJYnVzeV9pZHggPSBpOwo+ICAgCj4g ICAJCWZkW2krK10gPSBvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9CVVNZKGVfLT5jbGFzcywK PiBAQCAtNDQ1LDcgKzQ1NSw3IEBAIGJ1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0 cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKPiAgIAo+ICAgCWlndF9hc3NlcnRfZXEo aSwgbnVtX2VuZ2luZXMpOwo+ICAgCj4gLQlzcGluID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJy aW5nKGdlbV9mZCwgZSkpOwo+ICsJc3BpbiA9IHNwaW5fc3luYyhnZW1fZmQsIDAsIGUpOwo+ICAg CXBtdV9yZWFkX211bHRpKGZkWzBdLCBudW1fZW5naW5lcywgdHZhbFswXSk7Cj4gICAJc2xlcHQg PSBtZWFzdXJlZF91c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKPiAgIAlpZiAoZmxh Z3MgJiBURVNUX1RSQUlMSU5HX0lETEUpCj4gQEAgLTQ3MiwyMyArNDgyLDIzIEBAIGJ1c3lfY2hl Y2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSwKPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAgIF9fc3VibWl0X3NwaW5fYmF0Y2goaW50IGdlbV9m ZCwgaWd0X3NwaW5fdCAqc3BpbiwKPiAtCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplLAo+ICsJCSAgICBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUs Cj4gICAJCSAgICBpbnQgb2Zmc2V0KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZWIgPSBzcGluLT5leGVjYnVmOwo+ICAgCj4gICAJZWIuZmxhZ3MgJj0gfigweDNm IHwgSTkxNV9FWEVDX0JTRF9NQVNLKTsKPiAtCWViLmZsYWdzIHw9IGUycmluZyhnZW1fZmQsIGUp IHwgSTkxNV9FWEVDX05PX1JFTE9DOwo+ICsJZWIuZmxhZ3MgfD0gZS0+ZmxhZ3MgfCBJOTE1X0VY RUNfTk9fUkVMT0M7Cj4gICAJZWIuYmF0Y2hfc3RhcnRfb2Zmc2V0ICs9IG9mZnNldDsKPiAgIAo+ ICAgCWdlbV9leGVjYnVmKGdlbV9mZCwgJmViKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQK PiAtbW9zdF9idXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZTIgKmUsCj4gK21vc3RfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgc3Ry dWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCQkgICAgY29uc3QgdW5zaWduZWQg aW50IG51bV9lbmdpbmVzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gICB7Cj4gLQljb25zdCBzdHJ1 Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVfOwo+ICsJc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplXzsKPiAgIAl1aW50NjRfdCB0dmFsWzJdW251bV9lbmdpbmVzXTsKPiAgIAl1 aW50NjRfdCB2YWxbbnVtX2VuZ2luZXNdOwo+ICAgCWludCBmZFtudW1fZW5naW5lc107Cj4gQEAg LTQ5NywxMyArNTA3LDEzIEBAIG1vc3RfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCXVuc2lnbmVkIGludCBpZGxl X2lkeCwgaTsKPiAgIAo+ICAgCWkgPSAwOwo+IC0JZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3Rh bmNlKGdlbV9mZCwgZV8pIHsKPiAtCQlpZiAoZSA9PSBlXykKPiArCV9fZm9yX2VhY2hfcGh5c2lj YWxfZW5naW5lKGdlbV9mZCwgZV8pIHsKPiArCQlpZiAoZS0+Y2xhc3MgPT0gZV8tPmNsYXNzICYm IGUtPmluc3RhbmNlID09IGVfLT5pbnN0YW5jZSkKPiAgIAkJCWlkbGVfaWR4ID0gaTsKPiAgIAkJ ZWxzZSBpZiAoc3BpbikKPiAgIAkJCV9fc3VibWl0X3NwaW5fYmF0Y2goZ2VtX2ZkLCBzcGluLCBl XywgNjQpOwo+ICAgCQllbHNlCj4gLQkJCXNwaW4gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAsIGUy cmluZyhnZW1fZmQsIGVfKSk7Cj4gKwkJCXNwaW4gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAsIGVf KTsKPiAgIAo+ICAgCQl2YWxbaSsrXSA9IEk5MTVfUE1VX0VOR0lORV9CVVNZKGVfLT5jbGFzcywg ZV8tPmluc3RhbmNlKTsKPiAgIAl9Cj4gQEAgLTU0NSw3ICs1NTUsNyBAQCBzdGF0aWMgdm9pZAo+ ICAgYWxsX2J1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHVuc2lnbmVkIGludCBudW1f ZW5naW5lcywKPiAgIAkJICAgdW5zaWduZWQgaW50IGZsYWdzKQo+ICAgewo+IC0JY29uc3Qgc3Ry dWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOwo+ICsJc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplOwo+ICAgCXVpbnQ2NF90IHR2YWxbMl1bbnVtX2VuZ2luZXNdOwo+ICAgCXVp bnQ2NF90IHZhbFtudW1fZW5naW5lc107Cj4gICAJaW50IGZkW251bV9lbmdpbmVzXTsKPiBAQCAt NTU0LDExICs1NjQsMTEgQEAgYWxsX2J1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHVu c2lnbmVkIGludCBudW1fZW5naW5lcywKPiAgIAl1bnNpZ25lZCBpbnQgaTsKPiAgIAo+ICAgCWkg PSAwOwo+IC0JZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGdlbV9mZCwgZSkgewo+ICsJ X19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoZ2VtX2ZkLCBlKSB7Cj4gICAJCWlmIChzcGluKQo+ ICAgCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsIHNwaW4sIGUsIDY0KTsKPiAgIAkJZWxz ZQo+IC0JCQlzcGluID0gX19zcGluX3BvbGwoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7 Cj4gKwkJCXNwaW4gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAsIGUpOwo+ICAgCj4gICAJCXZhbFtp KytdID0gSTkxNV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsKPiAgIAl9 Cj4gQEAgLTU5Miw3ICs2MDIsNyBAQCBhbGxfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29u c3QgdW5zaWduZWQgaW50IG51bV9lbmdpbmVzLAo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+ IC1ub19zZW1hKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5l MiAqZSwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICtub19zZW1hKGludCBnZW1fZmQsIHN0cnVjdCBp bnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICAgewo+ICAg CWlndF9zcGluX3QgKnNwaW47Cj4gICAJdWludDY0X3QgdmFsWzJdWzJdOwo+IEBAIC02MDIsNyAr NjEyLDcgQEAgbm9fc2VtYShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9u X2VuZ2luZTIgKmUsIHVuc2lnbmVkIGludCBmbGFncykKPiAgIAlvcGVuX2dyb3VwKEk5MTVfUE1V X0VOR0lORV9XQUlUKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSksIGZkKTsKPiAgIAo+ICAgCWlmIChm bGFncyAmIFRFU1RfQlVTWSkKPiAtCQlzcGluID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5n KGdlbV9mZCwgZSkpOwo+ICsJCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlKTsKPiAgIAll bHNlCj4gICAJCXNwaW4gPSBOVUxMOwo+ICAgCj4gQEAgLTYzMSw3ICs2NDEsNyBAQCBub19zZW1h KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwgdW5z aWduZWQgaW50IGZsYWdzKQo+ICAgI2RlZmluZSAgIE1JX1NFTUFQSE9SRV9TQURfR1RFX1NERAko MTw8MTIpCj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gLXNlbWFfd2FpdChpbnQgZ2VtX2ZkLCBjb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gK3NlbWFfd2FpdChpbnQgZ2Vt X2ZkLCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gICAJICB1bnNpZ25lZCBp bnQgZmxhZ3MpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 IHJlbG9jWzJdID0ge307Cj4gQEAgLTY4OSw3ICs2OTksNyBAQCBzZW1hX3dhaXQoaW50IGdlbV9m ZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCj4gICAJZWIu YnVmZmVyX2NvdW50ID0gMjsKPiAgIAllYi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihv YmopOwo+IC0JZWIuZmxhZ3MgPSBlMnJpbmcoZ2VtX2ZkLCBlKTsKPiArCWViLmZsYWdzID0gZS0+ ZmxhZ3M7Cj4gICAKPiAgIAkvKioKPiAgIAkgKiBTdGFydCB0aGUgc2VtYXBob3JlIHdhaXQgUE1V IGFuZCBhZnRlciBzb21lIGtub3duIHRpbWUgbGV0IHRoZSBhYm92ZQo+IEBAIC03OTIsNyArODAy LDcgQEAgc3RhdGljIGludCB3YWl0X3ZibGFuayhpbnQgZmQsIHVuaW9uIGRybV93YWl0X3ZibGFu ayAqdmJsKQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IC1ldmVudF93YWl0KGludCBnZW1f ZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiArZXZlbnRfd2Fp dChpbnQgZ2VtX2ZkLCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICB7Cj4g ICAJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geyB9Owo+ICAgCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7IH07Cj4gQEAgLTg0NSw3ICs4NTUsNyBA QCBldmVudF93YWl0KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lMiAqZSkKPiAgIAo+ICAgCWViLmJ1ZmZlcl9jb3VudCA9IDE7Cj4gICAJZWIuYnVmZmVyc19w dHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaik7Cj4gLQllYi5mbGFncyA9IGUycmluZyhnZW1fZmQs IGUpIHwgSTkxNV9FWEVDX1NFQ1VSRTsKPiArCWViLmZsYWdzID0gZS0+ZmxhZ3MgfCBJOTE1X0VY RUNfU0VDVVJFOwo+ICAgCj4gICAJZm9yX2VhY2hfcGlwZV93aXRoX3ZhbGlkX291dHB1dCgmZGF0 YS5kaXNwbGF5LCBwLCBvdXRwdXQpIHsKPiAgIAkJc3RydWN0IGlndF9oZWxwZXJfcHJvY2VzcyB3 YWl0ZXIgPSB7IH07Cj4gQEAgLTkxNyw3ICs5MjcsNyBAQCBldmVudF93YWl0KGludCBnZW1fZmQs IGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAgIH0KPiAgIAo+ICAg c3RhdGljIHZvaWQKPiAtbXVsdGlfY2xpZW50KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRl bF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiArbXVsdGlfY2xpZW50KGludCBnZW1fZmQsIHN0cnVj dCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAgIHsKPiAgIAl1aW50NjRfdCBjb25maWcg PSBJOTE1X1BNVV9FTkdJTkVfQlVTWShlLT5jbGFzcywgZS0+aW5zdGFuY2UpOwo+ICAgCXVuc2ln bmVkIGxvbmcgc2xlcHRbMl07Cj4gQEAgLTkzNiw3ICs5NDYsNyBAQCBtdWx0aV9jbGllbnQoaW50 IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICAgCSAq Lwo+ICAgCWZkWzFdID0gb3Blbl9wbXUoY29uZmlnKTsKPiAgIAo+IC0Jc3BpbiA9IHNwaW5fc3lu YyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpKTsKPiArCXNwaW4gPSBzcGluX3N5bmMoZ2Vt X2ZkLCAwLCBlKTsKPiAgIAo+ICAgCXZhbFswXSA9IHZhbFsxXSA9IF9fcG11X3JlYWRfc2luZ2xl KGZkWzBdLCAmdHNbMF0pOwo+ICAgCXNsZXB0WzFdID0gbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1 cmF0aW9uX25zIC8gMTAwMCk7Cj4gQEAgLTEwMzksNiArMTA0OSw3IEBAIHN0YXRpYyB2b2lkIGNw dV9ob3RwbHVnKGludCBnZW1fZmQpCj4gICAJaWd0X3NwaW5fdCAqc3BpblsyXTsKPiAgIAl1aW50 NjRfdCB0c1syXTsKPiAgIAl1aW50NjRfdCB2YWw7Cj4gKwl1aW50MzJfdCBjdHg7Cj4gICAJaW50 IGxpbmtbMl07Cj4gICAJaW50IGZkLCByZXQ7Cj4gICAJaW50IGN1ciA9IDA7Cj4gQEAgLTEwNDYs MTQgKzEwNTcsMTggQEAgc3RhdGljIHZvaWQgY3B1X2hvdHBsdWcoaW50IGdlbV9mZCkKPiAgIAo+ ICAgCWlndF9yZXF1aXJlKGNwdTBfaG90cGx1Z19zdXBwb3J0KCkpOwo+ICAgCj4gKwljdHggPSBn ZW1fY29udGV4dF9jcmVhdGUoZ2VtX2ZkKTsKClRPRE8gbGVmdCB3YXMgdG8gdHJ5IHdpdGhvdXQg bmV3IGNvbnRleHRzIGZvciBhIGhhbmRmdWwgb2YgdGVzdHMgd2hlcmUgSSAKYWRkZWQgdGhlbS4g SW5zdGVhZCB0cnkgSTkxNV9FWEVDX0RFRkFVTFQgd2hlbiBzdWJtaXR0aW5nIGFuZCAoYWIpdXNl IAp0aGUgZmFjdCBSQ1MgaXMgYXQgaW5kZXggemVybyBmb3IgZm9yZXNlZWFibGUgZnV0dXJlLiBX aGVuIGl0IGZhaWxzIAp3ZSdsbCBrbm93IGFib3V0IGl0LiBUaGlzIGFwcGxpZXMgdG8gaG90cGx1 ZywgZnJlcXVlbmN5LCBpbnRlcnJ1cHRzIApzdWJ0ZXN0cyBBRkFJUi4KClJlZ2FyZHMsCgpUdnJ0 a28KCj4gKwo+ICAgCWZkID0gb3Blbl9wbXUoSTkxNV9QTVVfRU5HSU5FX0JVU1koSTkxNV9FTkdJ TkVfQ0xBU1NfUkVOREVSLCAwKSk7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIENyZWF0ZSB0d28gc3Bp bm5lcnMgc28gdGVzdCBjYW4gZW5zdXJlIHNob3J0ZXIgZ2FwcyBpbiBlbmdpbmUKPiAgIAkgKiBi dXN5bmVzcyBhcyBpdCBpcyB0ZXJtaW5hdGluZyBvbmUgYW5kIHJlLXN0YXJ0aW5nIHRoZSBvdGhl ci4KPiAgIAkgKi8KPiAtCXNwaW5bMF0gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAuZW5n aW5lID0gSTkxNV9FWEVDX1JFTkRFUik7Cj4gLQlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9u ZXcoZ2VtX2ZkLCAuZW5naW5lID0gSTkxNV9FWEVDX1JFTkRFUik7Cj4gKwlzcGluWzBdID0gaWd0 X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwKPiArCQkJCSAgICAgLmVuZ2luZSA9IEk5MTVfRVhFQ19S RU5ERVIsIC5jdHggPSBjdHgpOwo+ICsJc3BpblsxXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGdl bV9mZCwKPiArCQkJCSAgICAgICAuZW5naW5lID0gSTkxNV9FWEVDX1JFTkRFUiwgLmN0eCA9IGN0 eCk7Cj4gICAKPiAgIAl2YWwgPSBfX3BtdV9yZWFkX3NpbmdsZShmZCwgJnRzWzBdKTsKPiAgIAo+ IEBAIC0xMTM3LDYgKzExNTIsNyBAQCBzdGF0aWMgdm9pZCBjcHVfaG90cGx1ZyhpbnQgZ2VtX2Zk KQo+ICAgCj4gICAJCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluW2N1cl0pOwo+ICAg CQlzcGluW2N1cl0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsCj4gKwkJCQkJCSAuY3R4 ID0gY3R4LAo+ICAgCQkJCQkJIC5lbmdpbmUgPSBJOTE1X0VYRUNfUkVOREVSKTsKPiAgIAkJY3Vy IF49IDE7Cj4gICAJfQo+IEBAIC0xMTUwLDYgKzExNjYsNyBAQCBzdGF0aWMgdm9pZCBjcHVfaG90 cGx1ZyhpbnQgZ2VtX2ZkKQo+ICAgCWlndF93YWl0Y2hpbGRyZW4oKTsKPiAgIAljbG9zZShmZCk7 Cj4gICAJY2xvc2UobGlua1swXSk7Cj4gKwlnZW1fY29udGV4dF9kZXN0cm95KGdlbV9mZCwgY3R4 KTsKPiAgIAo+ICAgCS8qIFNraXAgaWYgY2hpbGQgc2lnbmFscyBhIHByb2JsZW0gd2l0aCBvZmZs aW5pbmcgYSBDUFUuICovCj4gICAJaWd0X3NraXBfb24oYnVmID09ICdzJyk7Cj4gQEAgLTExNjUs MTcgKzExODIsMjEgQEAgdGVzdF9pbnRlcnJ1cHRzKGludCBnZW1fZmQpCj4gICAJaWd0X3NwaW5f dCAqc3Bpblt0YXJnZXRdOwo+ICAgCXN0cnVjdCBwb2xsZmQgcGZkOwo+ICAgCXVpbnQ2NF90IGlk bGUsIGJ1c3k7Cj4gKwl1aW50MzJfdCBjdHg7Cj4gICAJaW50IGZlbmNlX2ZkOwo+ICAgCWludCBm ZDsKPiAgIAo+ICAgCWdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7Cj4gICAKPiArCWN0eCA9IGdl bV9jb250ZXh0X2NyZWF0ZShnZW1fZmQpOwo+ICsKPiAgIAlmZCA9IG9wZW5fcG11KEk5MTVfUE1V X0lOVEVSUlVQVFMpOwo+ICAgCj4gICAJLyogUXVldWUgc3Bpbm5pbmcgYmF0Y2hlcy4gKi8KPiAg IAlmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldDsgaSsrKSB7Cj4gICAJCXNwaW5baV0gPSBfX2ln dF9zcGluX2JhdGNoX25ldyhnZW1fZmQsCj4gICAJCQkJCSAgICAgICAuZW5naW5lID0gSTkxNV9F WEVDX1JFTkRFUiwKPiArCQkJCQkgICAgICAgLmN0eCA9IGN0eCwKPiAgIAkJCQkJICAgICAgIC5m bGFncyA9IElHVF9TUElOX0ZFTkNFX09VVCk7Cj4gICAJCWlmIChpID09IDApIHsKPiAgIAkJCWZl bmNlX2ZkID0gc3BpbltpXS0+b3V0X2ZlbmNlOwo+IEBAIC0xMjE3LDYgKzEyMzgsNyBAQCB0ZXN0 X2ludGVycnVwdHMoaW50IGdlbV9mZCkKPiAgIAkvKiBDaGVjayBhdCBsZWFzdCBhcyBtYW55IGlu dGVycnVwdHMgaGFzIGJlZW4gZ2VuZXJhdGVkLiAqLwo+ICAgCWJ1c3kgPSBwbXVfcmVhZF9zaW5n bGUoZmQpIC0gaWRsZTsKPiAgIAljbG9zZShmZCk7Cj4gKwlnZW1fY29udGV4dF9kZXN0cm95KGdl bV9mZCwgY3R4KTsKPiAgIAo+ICAgCWlndF9hc3NlcnRfbHRlKHRhcmdldCwgYnVzeSk7Cj4gICB9 Cj4gQEAgLTEyMjksMTUgKzEyNTEsMTkgQEAgdGVzdF9pbnRlcnJ1cHRzX3N5bmMoaW50IGdlbV9m ZCkKPiAgIAlpZ3Rfc3Bpbl90ICpzcGluW3RhcmdldF07Cj4gICAJc3RydWN0IHBvbGxmZCBwZmQ7 Cj4gICAJdWludDY0X3QgaWRsZSwgYnVzeTsKPiArCXVpbnQzMl90IGN0eDsKPiAgIAlpbnQgZmQ7 Cj4gICAKPiAgIAlnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQpOwo+ICAgCj4gKwljdHggPSBnZW1f Y29udGV4dF9jcmVhdGUoZ2VtX2ZkKTsKPiArCj4gICAJZmQgPSBvcGVuX3BtdShJOTE1X1BNVV9J TlRFUlJVUFRTKTsKPiAgIAo+ICAgCS8qIFF1ZXVlIHNwaW5uaW5nIGJhdGNoZXMuICovCj4gICAJ Zm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXQ7IGkrKykKPiAgIAkJc3BpbltpXSA9IF9faWd0X3Nw aW5fYmF0Y2hfbmV3KGdlbV9mZCwKPiArCQkJCQkgICAgICAgLmN0eCA9IGN0eCwKPiAgIAkJCQkJ ICAgICAgIC5mbGFncyA9IElHVF9TUElOX0ZFTkNFX09VVCk7Cj4gICAKPiAgIAkvKiBXYWl0IGZv ciBpZGxlIHN0YXRlLiAqLwo+IEBAIC0xMjYyLDYgKzEyODgsNyBAQCB0ZXN0X2ludGVycnVwdHNf c3luYyhpbnQgZ2VtX2ZkKQo+ICAgCS8qIENoZWNrIGF0IGxlYXN0IGFzIG1hbnkgaW50ZXJydXB0 cyBoYXMgYmVlbiBnZW5lcmF0ZWQuICovCj4gICAJYnVzeSA9IHBtdV9yZWFkX3NpbmdsZShmZCkg LSBpZGxlOwo+ICAgCWNsb3NlKGZkKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koZ2VtX2ZkLCBj dHgpOwo+ICAgCj4gICAJaWd0X2Fzc2VydF9sdGUodGFyZ2V0LCBidXN5KTsKPiAgIH0KPiBAQCAt MTI3NCw2ICsxMzAxLDkgQEAgdGVzdF9mcmVxdWVuY3koaW50IGdlbV9mZCkKPiAgIAlkb3VibGUg bWluWzJdLCBtYXhbMl07Cj4gICAJaWd0X3NwaW5fdCAqc3BpbjsKPiAgIAlpbnQgZmQsIHN5c2Zz Owo+ICsJdWludDMyX3QgY3R4Owo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShnZW1f ZmQpOwo+ICAgCj4gICAJc3lzZnMgPSBpZ3Rfc3lzZnNfb3BlbihnZW1fZmQpOwo+ICAgCWlndF9y ZXF1aXJlKHN5c2ZzID49IDApOwo+IEBAIC0xMzAxLDcgKzEzMzEsNyBAQCB0ZXN0X2ZyZXF1ZW5j eShpbnQgZ2VtX2ZkKQo+ICAgCWlndF9yZXF1aXJlKGlndF9zeXNmc19nZXRfdTMyKHN5c2ZzLCAi Z3RfYm9vc3RfZnJlcV9taHoiKSA9PSBtaW5fZnJlcSk7Cj4gICAKPiAgIAlnZW1fcXVpZXNjZW50 X2dwdShnZW1fZmQpOyAvKiBJZGxlIHRvIGJlIHN1cmUgdGhlIGNoYW5nZSB0YWtlcyBlZmZlY3Qg Ki8KPiAtCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSKTsKPiAr CXNwaW4gPSBzcGluX3N5bmNfZmxhZ3MoZ2VtX2ZkLCBjdHgsIEk5MTVfRVhFQ19SRU5ERVIpOwo+ ICAgCj4gICAJc2xlcHQgPSBwbXVfcmVhZF9tdWx0aShmZCwgMiwgc3RhcnQpOwo+ICAgCW1lYXN1 cmVkX3VzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAvIDEwMDApOwo+IEBAIC0xMzI3LDcgKzEzNTcs NyBAQCB0ZXN0X2ZyZXF1ZW5jeShpbnQgZ2VtX2ZkKQo+ICAgCWlndF9yZXF1aXJlKGlndF9zeXNm c19nZXRfdTMyKHN5c2ZzLCAiZ3RfbWluX2ZyZXFfbWh6IikgPT0gbWF4X2ZyZXEpOwo+ICAgCj4g ICAJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsKPiAtCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2Zk LCAwLCBJOTE1X0VYRUNfUkVOREVSKTsKPiArCXNwaW4gPSBzcGluX3N5bmNfZmxhZ3MoZ2VtX2Zk LCBjdHgsIEk5MTVfRVhFQ19SRU5ERVIpOwo+ICAgCj4gICAJc2xlcHQgPSBwbXVfcmVhZF9tdWx0 aShmZCwgMiwgc3RhcnQpOwo+ICAgCW1lYXN1cmVkX3VzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAv IDEwMDApOwo+IEBAIC0xMzQ4LDYgKzEzNzgsOCBAQCB0ZXN0X2ZyZXF1ZW5jeShpbnQgZ2VtX2Zk KQo+ICAgCQkJIG1pbl9mcmVxLCBpZ3Rfc3lzZnNfZ2V0X3UzMihzeXNmcywgImd0X21pbl9mcmVx X21oeiIpKTsKPiAgIAljbG9zZShmZCk7Cj4gICAKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koZ2Vt X2ZkLCBjdHgpOwo+ICsKPiAgIAlpZ3RfaW5mbygiTWluIGZyZXF1ZW5jeTogcmVxdWVzdGVkICUu MWYsIGFjdHVhbCAlLjFmXG4iLAo+ICAgCQkgbWluWzBdLCBtaW5bMV0pOwo+ICAgCWlndF9pbmZv KCJNYXggZnJlcXVlbmN5OiByZXF1ZXN0ZWQgJS4xZiwgYWN0dWFsICUuMWZcbiIsCj4gQEAgLTE0 NDgsNyArMTQ4MCw3IEBAIHRlc3RfcmM2KGludCBnZW1fZmQsIHVuc2lnbmVkIGludCBmbGFncykK PiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAtdGVzdF9lbmFibGVfcmFjZShpbnQgZ2VtX2Zk LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gK3Rlc3RfZW5hYmxl X3JhY2UoaW50IGdlbV9mZCwgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICAg ewo+ICAgCXVpbnQ2NF90IGNvbmZpZyA9IEk5MTVfUE1VX0VOR0lORV9CVVNZKGUtPmNsYXNzLCBl LT5pbnN0YW5jZSk7Cj4gICAJc3RydWN0IGlndF9oZWxwZXJfcHJvY2VzcyBlbmdpbmVfbG9hZCA9 IHsgfTsKPiBAQCAtMTQ2NSw3ICsxNDk3LDcgQEAgdGVzdF9lbmFibGVfcmFjZShpbnQgZ2VtX2Zk LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4gICAKPiAgIAllYi5i dWZmZXJfY291bnQgPSAxOwo+ICAgCWViLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZv YmopOwo+IC0JZWIuZmxhZ3MgPSBlMnJpbmcoZ2VtX2ZkLCBlKTsKPiArCWViLmZsYWdzID0gZS0+ ZmxhZ3M7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIFRoaXMgdGVzdCBpcyBwcm9iYWJpbGlzdGljIHNv IHJ1biBpbiBhIGZldyB0aW1lcyB0byBpbmNyZWFzZSB0aGUKPiBAQCAtMTUyMCw3ICsxNTUyLDcg QEAgc3RhdGljIHZvaWQgX19yZWFybV9zcGluX2JhdGNoKGlndF9zcGluX3QgKnNwaW4pCj4gICAJ X19hc3NlcnRfd2l0aGluKHgsIHJlZiwgdG9sZXJhbmNlLCB0b2xlcmFuY2UpCj4gICAKPiAgIHN0 YXRpYyB2b2lkCj4gLWFjY3VyYWN5KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZSwKPiArYWNjdXJhY3koaW50IGdlbV9mZCwgc3RydWN0IGludGVsX2V4 ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCSB1bnNpZ25lZCBsb25nIHRhcmdldF9idXN5X3BjdCwK PiAgIAkgdW5zaWduZWQgbG9uZyB0YXJnZXRfaXRlcnMpCj4gICB7Cj4gQEAgLTE1NzAsNyArMTYw Miw3IEBAIGFjY3VyYWN5KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lMiAqZSwKPiAgIAkJaWd0X3NwaW5fdCAqc3BpbjsKPiAgIAo+ICAgCQkvKiBBbGxvY2F0 ZSBvdXIgc3BpbiBiYXRjaCBhbmQgaWRsZSBpdC4gKi8KPiAtCQlzcGluID0gaWd0X3NwaW5fYmF0 Y2hfbmV3KGdlbV9mZCwgLmVuZ2luZSA9IGUycmluZyhnZW1fZmQsIGUpKTsKPiArCQlzcGluID0g aWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgLmVuZ2luZSA9IGUtPmZsYWdzKTsKPiAgIAkJaWd0 X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOwo+ICAgCQlnZW1fc3luYyhnZW1fZmQsIHNwaW4tPmhhbmRs ZSk7Cj4gICAKPiBAQCAtMTY3NCw3ICsxNzA2LDcgQEAgaWd0X21haW4KPiAgIAkJCQlJOTE1X1BN VV9MQVNUIC0gX19JOTE1X1BNVV9PVEhFUigwKSArIDE7Cj4gICAJdW5zaWduZWQgaW50IG51bV9l bmdpbmVzID0gMDsKPiAgIAlpbnQgZmQgPSAtMTsKPiAtCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZTsKPiArCXN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTsK PiAgIAl1bnNpZ25lZCBpbnQgaTsKPiAgIAo+ICAgCWlndF9maXh0dXJlIHsKPiBAQCAtMTY4Myw3 ICsxNzE1LDcgQEAgaWd0X21haW4KPiAgIAkJaWd0X3JlcXVpcmVfZ2VtKGZkKTsKPiAgIAkJaWd0 X3JlcXVpcmUoaTkxNV90eXBlX2lkKCkgPiAwKTsKPiAgIAo+IC0JCWZvcl9lYWNoX2VuZ2luZV9j bGFzc19pbnN0YW5jZShmZCwgZSkKPiArCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwg ZSkKPiAgIAkJCW51bV9lbmdpbmVzKys7Cj4gICAJfQo+ICAgCj4gQEAgLTE2OTMsNyArMTcyNSw3 IEBAIGlndF9tYWluCj4gICAJaWd0X3N1YnRlc3QoImludmFsaWQtaW5pdCIpCj4gICAJCWludmFs aWRfaW5pdCgpOwo+ICAgCj4gLQlfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShlKSB7 Cj4gKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgZSkgewo+ICAgCQljb25zdCB1bnNp Z25lZCBpbnQgcGN0W10gPSB7IDIsIDUwLCA5OCB9Owo+ICAgCj4gICAJCS8qKgo+IEBAIC0xODk3 LDcgKzE5MjksNyBAQCBpZ3RfbWFpbgo+ICAgCQkJZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwo+ICAg CQl9Cj4gICAKPiAtCQlfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShlKSB7Cj4gKwkJ X19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUocmVuZGVyX2ZkLCBlKSB7Cj4gICAJCQlpZ3Rfc3Vi dGVzdF9ncm91cCB7Cj4gICAJCQkJaWd0X2ZpeHR1cmUgewo+ICAgCQkJCQlnZW1fcmVxdWlyZV9l bmdpbmUocmVuZGVyX2ZkLAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXY=