From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 828286E320 for ; Fri, 22 Mar 2019 10:46:42 +0000 (UTC) References: <20190321160528.4131-1-andi.shyti@intel.com> <20190321160528.4131-5-andi.shyti@intel.com> From: Tvrtko Ursulin Message-ID: <6907dc4a-b671-b9dc-cd2d-c023a298f2b2@linux.intel.com> Date: Fri, 22 Mar 2019 10:46:39 +0000 MIME-Version: 1.0 In-Reply-To: <20190321160528.4131-5-andi.shyti@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH v15 4/5] lib/i915: add gem_engine_topology library and for_each loop definition 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: Ck9uIDIxLzAzLzIwMTkgMTY6MDUsIEFuZGkgU2h5dGkgd3JvdGU6Cj4gVGhlIGdlbV9lbmdpbmVf dG9wb2xvZ3kgbGlicmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdAo+IGludGVyZmFjZSB3 aXRoIHRoZSBxdWVyeSBhbmQgZ2V0cGFyYW0vc2V0cGFyYW0gaW9jdGxzLgo+IAo+IFRoZSBsaWJy YXJ5J3MgYWNjZXNzIHBvaW50IGlzIHRoZSAnaW50ZWxfaW5pdF9lbmdpbmVfbGlzdCgpJwo+IGZ1 bmN0aW9uIHRoYXQsIGV2ZXJ5dGltZSBpcyBjYWxsZWQsIGdlbmVyYXRlcyB0aGUgbGlzdCBvZiBh Y3RpdmUKPiBlbmdpbmVzIGFuZCByZXR1cm5zIHRoZW0gaW4gYSAnc3RydWN0IGludGVsX2VuZ2lu ZV9kYXRhJy4gVGhlCj4gc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgdGhlIGVuZ2luZXMgdGhhdCBh cmUgYWN0aXZlbHkgcHJlc2VudCBpbgo+IHRoZSBHUFUuCj4gCj4gVGhlIGZ1bmN0aW9uIGNhbiB3 b3JrIGluIGJvdGggdGhlIGNhc2VzIHRoYXQgdGhlIHF1ZXJ5IGFuZAo+IGdldHBhcmFtIGlvY3Rs cyBhcmUgaW1wbGVtZW50ZWQgb3Igbm90IGJ5IHRoZSBydW5uaW5nIGtlcm5lbC4gSW4KPiBjYXNl IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhIHF1ZXJ5IGlzIG1hZGUgdG8gdGhlIGRyaXZlciB0byBm ZXRjaAo+IHRoZSBsaXN0IG9mIGFjdGl2ZSBlbmdpbmVzLiBJbiBjYXNlIHRoZXkgYXJlIG5vdCBp bXBsZW1lbnRlZCwgdGhlCj4gbGlzdCBpcyB0YWtlbiBmcm9tIHRoZSAnaW50ZWxfZXhlY3V0aW9u X2VuZ2luZXMyJyBhcnJheSBhbmQKPiBzdG9yZWQgb25seSBhZnRlciBjaGVja2luZyB0aGVpciBw cmVzZW5jZS4KPiAKPiBUaGUgZ2VtX2VuZ2luZV90b3BvbG9neSBsaWJyYXJ5IHByb3ZpZGVzIHNv bWUgaXRlcmF0aW9uIGhlbHBlcnM6Cj4gCj4gICAtIGludGVsX2dldF9jdXJyZW50X2VuZ2luZSgp OiBwcm92aWRlcyB0aGUgY3VycmVudCBlbmdpbmUgaW4gdGhlCj4gICAgIGl0ZXJhdGlvbi4KPiAK PiAgIC0gaW50ZWxfZ2V0X2N1cnJlbnRfcGh5c2ljYWxfZW5naW5lKCk6IHByb3ZpZGVzIHRoZSBj dXJyZW50Cj4gICAgIHBoeXNpY2FsIGVuZ2luZSwgaWYgdGhlIGN1cnJlbnQgZW5naW5lIGlzIGEg dmlydHVhbCBlbmdpbmUsCj4gICAgIGl0IG1vdmVzIGZvcndhcmQgdW50aWwgaXQgZmluZHMgYSBw aHlzaWNhbCBlbmdpbmUuCj4gCj4gICAtIGludGVsX25leHRfZW5naW5lKCkgaXQganVzdCBpbmNy ZW1lbnRzIHRoZSBjb3VudGVyIHNvIHRoYXQgaXQKPiAgICAgcG9pbnRzIHRvIHRoZSBuZXh0IGVu Z2luZS4KPiAKPiBFeHRlbmQgdGhlICdmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UnIHNv IHRoYXQgaXQgY2FuIGxvb3AKPiB1c2luZyB0aGUgbmV3ICdpbnRlbF9pbml0X2VuZ2luZV9saXN0 KCknIGFuZCByZW5hbWUgaXQgdG8KPiAnZm9yX2VhY2hfY29udGV4dF9lbmdpbmUnLgo+IAo+IE1v dmUgJ19fZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlJyB0byBnZW1fZW5naW5lX3RvcG9s b2d5LmgKPiBhbmQgcmVuYW1lIGl0IHRvICdfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUnLgo+IAo+ IFVwZGF0ZSBhY2NvcmRpbmdseSB0ZXN0cy9wZXJmX3BtdS5jIHRvIHVzZSBjb3JyZWN0bHkgdGhl IG5ldwo+IGZvcl9lYWNoIGxvcHBzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFuZGkgU2h5dGkgPGFu ZGkuc2h5dGlAaW50ZWwuY29tPgo+IC0tLQo+ICAgbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAg ICAgIHwgICAyICsKPiAgIGxpYi9pOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuYyB8IDIyMiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIGxpYi9pOTE1L2dlbV9lbmdpbmVfdG9w b2xvZ3kuaCB8ICA2MyArKysrKysrKysrCj4gICBsaWIvaWd0LmggICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwo+ICAgbGliL2lndF9ndC5oICAgICAgICAgICAgICAgICAgIHwgICA4ICstCj4g ICBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICAgdGVzdHMvcGVyZl9w bXUuYyAgICAgICAgICAgICAgIHwgIDEyICstCj4gICA3IGZpbGVzIGNoYW5nZWQsIDI5NiBpbnNl cnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaTkx NS9nZW1fZW5naW5lX3RvcG9sb2d5LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaTkxNS9n ZW1fZW5naW5lX3RvcG9sb2d5LmgKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJj ZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGNmMjcyMDk4MTcwNy4uNzU3YmQ3YTE3 ZWJlIDEwMDY0NAo+IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvbGliL01ha2Vm aWxlLnNvdXJjZXMKPiBAQCAtMTMsNiArMTMsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKPiAg IAlpOTE1L2dlbV9yaW5nLmMJXAo+ICAgCWk5MTUvZ2VtX21tYW4uYwlcCj4gICAJaTkxNS9nZW1f bW1hbi5oCVwKPiArCWk5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5jCVwKPiArCWk5MTUvZ2VtX2Vu Z2luZV90b3BvbG9neS5oCVwKPiAgIAlpOTE1XzNkLmgJCVwKPiAgIAlpOTE1X3JlZy5oCQlcCj4g ICAJaTkxNV9wY2lpZHMuaAkJXAo+IGRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fZW5naW5lX3Rv cG9sb2d5LmMgYi9saWIvaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5LmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTE0NGM0OWExOTkzCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2xpYi9pOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuYwo+IEBAIC0wLDAgKzEsMjIy IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAq Cj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImRybXRlc3QuaCIK PiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKwo+ICsjaW5jbHVkZSAiaTkxNS9nZW1f ZW5naW5lX3RvcG9sb2d5LmgiCj4gKwo+ICsjZGVmaW5lIFNJWkVPRl9DVFhfUEFSQU0Jb2Zmc2V0 b2Yoc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzLCBcCj4gKwkJCQkJY2xhc3NfaW5z dGFuY2VbSTkxNV9FWEVDX1JJTkdfTUFTSyArIDFdKQo+ICsjZGVmaW5lIFNJWkVPRl9RVUVSWQkJ b2Zmc2V0b2Yoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvLCBcCj4gKwkJCQkJZW5n aW5lc1tJOTE1X0VYRUNfUklOR19NQVNLICsgMV0pCj4gKwo+ICtzdGF0aWMgaW50IF9fZ2VtX3F1 ZXJ5KGludCBmZCwgc3RydWN0IGRybV9pOTE1X3F1ZXJ5ICpxKQo+ICt7Cj4gKwlpbnQgZXJyID0g MDsKPiArCj4gKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9RVUVSWSwgcSkpCj4g KwkJZXJyID0gLWVycm5vOwo+ICsKPiArCWVycm5vID0gMDsKPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGdlbV9xdWVyeShpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9xdWVy eSAqcSkKPiArewo+ICsJaWd0X2Fzc2VydF9lcShfX2dlbV9xdWVyeShmZCwgcSksIDApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBxdWVyeV9lbmdpbmVzKGludCBmZCwKPiArCQkJICBzdHJ1Y3Qg ZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKnF1ZXJ5X2VuZ2luZXMsCj4gKwkJCSAgaW50IGxl bmd0aCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbSA9IHsgfTsKPiAr CXN0cnVjdCBkcm1faTkxNV9xdWVyeSBxdWVyeSA9IHsgfTsKPiArCj4gKwlpdGVtLnF1ZXJ5X2lk ID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX0lORk87Cj4gKwlxdWVyeS5pdGVtc19wdHIgPSB0b191 c2VyX3BvaW50ZXIoJml0ZW0pOwo+ICsJcXVlcnkubnVtX2l0ZW1zID0gMTsKPiArCWl0ZW0ubGVu Z3RoID0gbGVuZ3RoOwo+ICsKPiArCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIocXVl cnlfZW5naW5lcyk7Cj4gKwo+ICsJZ2VtX3F1ZXJ5KGZkLCAmcXVlcnkpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBjdHhfbWFwX2VuZ2luZXMoaW50IGZkLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Rh dGEgKmVkLAo+ICsJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtICpjdHhf cGFyYW0pCj4gK3sKPiArCXN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqY3R4X2Vu Z2luZSA9Cj4gKwkJCShzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMqKSBjdHhfcGFy YW0tPnZhbHVlOwo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWZvciAodHlwZW9mKGN0eF9lbmdpbmUt PmNsYXNzX2luc3RhbmNlWzBdKSAqcCA9Cj4gKwkJCSZjdHhfZW5naW5lLT5jbGFzc19pbnN0YW5j ZVswXTsKPiArCQkJCQkJaSA8IGVkLT5uZW5naW5lczsgaSsrLCBwKyspIHsKPiArCQlwLT5lbmdp bmVfY2xhc3MgPSBlZC0+ZW5naW5lc1tpXS5jbGFzczsKPiArCQlwLT5lbmdpbmVfaW5zdGFuY2Ug PSBlZC0+ZW5naW5lc1tpXS5pbnN0YW5jZTsKPiArCX0KPiArCj4gKwljdHhfcGFyYW0tPnNpemUg PSBvZmZzZXRvZih0eXBlb2YoKmN0eF9lbmdpbmUpLCBjbGFzc19pbnN0YW5jZVtpXSk7Cj4gKwo+ ICsJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCBjdHhfcGFyYW0pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpbml0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUyLCBj b25zdCBjaGFyICpuYW1lLAo+ICsJCQl1aW50MTZfdCBjbGFzcywgdWludDE2X3QgaW5zdGFuY2Us IHVpbnQ2NF90IGZsYWdzKQo+ICt7Cj4gKwlzdGF0aWMgY29uc3QgY2hhciAqdW5rbm93bl9uYW1l ID0gInVua25vd24iLAo+ICsJCQkgICp2aXJ0dWFsX25hbWUgPSAidmlydHVhbCI7Cj4gKwo+ICsJ ZTItPmNsYXNzICAgID0gY2xhc3M7Cj4gKwllMi0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKPiArCWUy LT5mbGFncyAgICA9IGZsYWdzOwo+ICsKPiArCWlmIChjbGFzcyA8IDAgJiYgaW5zdGFuY2UgPCAw KSB7Cj4gKwkJZTItPm5hbWUgPSB2aXJ0dWFsX25hbWU7Cj4gKwl9IGVsc2Ugewo+ICsJCWNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqX19lMjsKPiArCj4gKwkJX19mb3JfZWFj aF9zdGF0aWNfZW5naW5lKF9fZTIpCj4gKwkJCWlmIChfX2UyLT5jbGFzcyA9PSBjbGFzcyAmJiBf X2UyLT5pbnN0YW5jZSA9PSBpbnN0YW5jZSkKPiArCQkJCWJyZWFrOwo+ICsKPiArCQllMi0+bmFt ZSA9IF9fZTItPm5hbWUgPyBfX2UyLT5uYW1lIDogdW5rbm93bl9uYW1lOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBxdWVyeV9lbmdpbmVfbGlzdChpbnQgZmQsIHN0cnVjdCBpbnRlbF9l bmdpbmVfZGF0YSAqZWQpCj4gK3sKPiArCXVpbnQ4X3QgcXVlcnlfYnVmZmVyW1NJWkVPRl9RVUVS WV0gPSB7IH07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKnF1ZXJ5X2Vu Z2luZSA9Cj4gKwkJCShzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKikgcXVlcnlf YnVmZmVyOwo+ICsJaW50IGk7Cj4gKwo+ICsJcXVlcnlfZW5naW5lcyhmZCwgcXVlcnlfZW5naW5l LCBTSVpFT0ZfUVVFUlkpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBxdWVyeV9lbmdpbmUtPm51 bV9lbmdpbmVzOyBpKyspCj4gKwkJaW5pdF9lbmdpbmUoJmVkLT5lbmdpbmVzW2ldLCBOVUxMLAo+ ICsJCQkgICBxdWVyeV9lbmdpbmUtPmVuZ2luZXNbaV0uZW5naW5lX2NsYXNzLAo+ICsJCQkgICBx dWVyeV9lbmdpbmUtPmVuZ2luZXNbaV0uZW5naW5lX2luc3RhbmNlLCBpKTsKPiArCj4gKwllZC0+ bmVuZ2luZXMgPSBxdWVyeV9lbmdpbmUtPm51bV9lbmdpbmVzOwo+ICt9Cj4gKwo+ICtzdHJ1Y3Qg aW50ZWxfZW5naW5lX2RhdGEgaW50ZWxfaW5pdF9lbmdpbmVfbGlzdChpbnQgZmQsIHVpbnQzMl90 IGN0eF9pZCkKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9kYXRhIGVuZ2luZV9kYXRhID0g eyB9Owo+ICsJdWludDhfdCBidWZmW1NJWkVPRl9DVFhfUEFSQU1dID0geyB9Owo+ICsKPiArCXN0 cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqZW5naW5lcyA9Cj4gKwkJKHN0cnVjdCBp OTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqKSBidWZmOwo+ICsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fY29udGV4dF9wYXJhbSBwYXJhbSA9IHsKPiArCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRf UEFSQU1fRU5HSU5FUywKPiArCQkuY3R4X2lkID0gY3R4X2lkLAo+ICsJCS5zaXplID0gU0laRU9G X0NUWF9QQVJBTSwKPiArCQkudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoZW5naW5lcyksCj4gKwl9 Owo+ICsKPiArCWludCBpLCByZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgbmVuZ2luZXM7Cj4gKwo+ICsJ cmV0ID0gX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZwYXJhbSk7Cj4gKwo+ICsJbmVuZ2lu ZXMgPSBwYXJhbS5zaXplID4gc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5l cykgPwo+ICsJCSAgIChwYXJhbS5zaXplIC0gc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFy YW1fZW5naW5lcykpIC8KPiArCQkgICBzaXplb2YoZW5naW5lcy0+Y2xhc3NfaW5zdGFuY2VbMF0p IDoKPiArCQkgICAwOwo+ICsKPiArCWlmIChuZW5naW5lcyA+IEk5MTVfRVhFQ19SSU5HX01BU0sg KyAxKSB7Cj4gKwkJZW5naW5lX2RhdGEuZXJyb3IgPSByZXQgPyByZXQgOiAtRUlOVkFMOwo+ICsJ CXJldHVybiBlbmdpbmVfZGF0YTsKPiArCX0KPiArCj4gKwlpZiAoX19nZW1fY29udGV4dF9nZXRf cGFyYW0oZmQsICZwYXJhbSkpIHsKPiArCQkvKiBpZiBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBl bmdpbmUvY29udGV4dCBtYXBwaW5nICovCj4gKwkJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplMjsKPiArCj4gKwkJaWd0X2RlYnVnKCJ1c2luZyBwcmUtYWxsb2NhdGVkIGVu Z2luZSBsaXN0XG4iKTsKPiArCj4gKwkJX19mb3JfZWFjaF9zdGF0aWNfZW5naW5lKGUyKSB7Cj4g KwkJCXN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqX19lMjsKPiArCj4gKwkJCV9fZTIg PSAmZW5naW5lX2RhdGEuZW5naW5lc1tlbmdpbmVfZGF0YS5uZW5naW5lc107Cj4gKwkJCV9fZTIt PmZsYWdzID0gZ2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGZkLAo+ICsJCQkJCQllMi0+ Y2xhc3MsIGUyLT5pbnN0YW5jZSk7Cj4gKwo+ICsJCQlpZiAoIWdlbV9oYXNfcmluZyhmZCwgX19l Mi0+ZmxhZ3MpKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlfX2UyLT5uYW1lID0gZTItPm5h bWU7Cj4gKwkJCV9fZTItPmluc3RhbmNlID0gZTItPmluc3RhbmNlOwo+ICsJCQlfX2UyLT5jbGFz cyA9IGUyLT5jbGFzczsKPiArCQkJZW5naW5lX2RhdGEubmVuZ2luZXMrKzsKPiArCQl9Cj4gKwo+ ICsJfSBlbHNlIGlmICghcGFyYW0uc2l6ZSkgewo+ICsJCS8qIGVsc2UgaWYgY29udGV4dCBkb2Vz bid0IGhhdmUgbWFwcGVkIGVuZ2luZXMgKi8KPiArCQlxdWVyeV9lbmdpbmVfbGlzdChmZCwgJmVu Z2luZV9kYXRhKTsKPiArCQljdHhfbWFwX2VuZ2luZXMoZmQsICZlbmdpbmVfZGF0YSwgJnBhcmFt KTsKPiArCj4gKwl9IGVsc2Ugewo+ICsJCS8qIGNvbnRleHQgaGFzIGEgbGlzdCBvZiBtYXBwZWQg ZW5naW5lcyAqLwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbmVuZ2luZXM7IGkrKykKPiArCQkJ aW5pdF9lbmdpbmUoJmVuZ2luZV9kYXRhLmVuZ2luZXNbaV0sIE5VTEwsCj4gKwkJCQkgICAgZW5n aW5lcy0+Y2xhc3NfaW5zdGFuY2VbaV0uZW5naW5lX2NsYXNzLAo+ICsJCQkJICAgIGVuZ2luZXMt PmNsYXNzX2luc3RhbmNlW2ldLmVuZ2luZV9pbnN0YW5jZSwKPiArCQkJCSAgICBpKTsKPiArCj4g KwkJZW5naW5lX2RhdGEubmVuZ2luZXMgPSBpOwo+ICsJfQo+ICsKPiArCXJldHVybiBlbmdpbmVf ZGF0YTsKPiArfQo+ICsKPiArc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyCj4gKwkqaW50 ZWxfZ2V0X2N1cnJlbnRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfZGF0YSAqZWQpCj4gK3sK PiArCXJldHVybiAoZWQtPm4gPCBlZC0+bmVuZ2luZXMpICYmICFlZC0+ZXJyb3IgPwo+ICsJCSZl ZC0+ZW5naW5lc1tlZC0+bl0gOgo+ICsJCU5VTEw7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfbmV4 dF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9kYXRhICplZCkKPiArewo+ICsJZWQtPm4rKzsK PiArfQo+ICsKPiArc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyCj4gKwkqaW50ZWxfZ2V0 X2N1cnJlbnRfcGh5c2ljYWxfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfZGF0YSAqZWQpCj4g K3sKPiArCXN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTsKPiArCj4gKwlmb3IgKGUg PSBpbnRlbF9nZXRfY3VycmVudF9lbmdpbmUoZWQpOwo+ICsJICAgICBlICYmICFJU19QSFlTSUNB TF9FTkdJTkUoZSk7Cj4gKwkgICAgIGludGVsX25leHRfZW5naW5lKGVkKSkKPiArCQk7Cj4gKwo+ ICsJcmV0dXJuIGU7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliL2k5MTUvZ2VtX2VuZ2luZV90b3Bv bG9neS5oIGIvbGliL2k5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5oCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY2NjJhNDYwMWVjZAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9saWIvaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5LmgKPiBAQCAtMCwwICsxLDYzIEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4g KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsg KiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBHRU1fRU5HSU5FX1RPUE9M T0dZX0gKPiArI2RlZmluZSBHRU1fRU5HSU5FX1RPUE9MT0dZX0gKPiArCj4gKyNpbmNsdWRlICJp Z3RfZ3QuaCIKPiArI2luY2x1ZGUgImk5MTVfZHJtLmgiCj4gKwo+ICtzdHJ1Y3QgaW50ZWxfZW5n aW5lX2RhdGEgewo+ICsJdWludDMyX3QgbmVuZ2luZXM7Cj4gKwl1aW50MzJfdCBuOwo+ICsJaW50 IGVycm9yOwo+ICsJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyIGVuZ2luZXNbSTkxNV9F WEVDX1JJTkdfTUFTSyArIDFdOwo+ICt9Owo+ICsKPiArc3RydWN0IGludGVsX2VuZ2luZV9kYXRh IGludGVsX2luaXRfZW5naW5lX2xpc3QoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQpOwo+ICsKPiAr LyogaXRlcmF0aW9uIGZ1bmN0aW9ucyAqLwo+ICtzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIKPiArCSppbnRlbF9nZXRfY3VycmVudF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9kYXRh ICplZCk7Cj4gK3N0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMgo+ICsJKmludGVsX2dldF9j dXJyZW50X3BoeXNpY2FsX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgKmVkKTsKPiAr dm9pZCBpbnRlbF9uZXh0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgKmVkKTsKPiAr Cj4gKyNkZWZpbmUgSVNfUEhZU0lDQUxfRU5HSU5FKGUyKSAoKGUyLT5jbGFzcyA+PSAwKSAmJiAo ZTItPmluc3RhbmNlID49IDApKQo+ICsKPiArLyogbmVlZHMgdG8gcmVwbGFjZSAiX19mb3JfZWFj aF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UiIHdoZW4gY29uZmxpY3RzIGFyZSBmaXhlZCAqLwo+ICsj ZGVmaW5lIF9fZm9yX2VhY2hfc3RhdGljX2VuZ2luZShlX18pIFwKPiArCWZvciAoKGVfXykgPSBp bnRlbF9leGVjdXRpb25fZW5naW5lczI7IChlX18pLT5uYW1lOyAoZV9fKSsrKQo+ICsKPiArI2Rl ZmluZSBmb3JfZWFjaF9jb250ZXh0X2VuZ2luZShmZF9fLCBjdHhfXywgZV9fKSBcCj4gKwlmb3Ig KHN0cnVjdCBpbnRlbF9lbmdpbmVfZGF0YSBpX18gPSBpbnRlbF9pbml0X2VuZ2luZV9saXN0KGZk X18sIGN0eF9fKTsgXAo+ICsJICAgICAoKGVfXykgPSBpbnRlbF9nZXRfY3VycmVudF9lbmdpbmUo JmlfXykpOyBcCj4gKwkgICAgIGludGVsX25leHRfZW5naW5lKCZpX18pKQo+ICsKPiArLyogbmVl ZHMgdG8gcmVwbGFjZSAiZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lIiB3aGVuIGNvbmZsaWN0cyBh cmUgZml4ZWQgKi8KPiArI2RlZmluZSBfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZV9fKGZkX18s IGVfXykgXAo+ICsJZm9yIChzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgaV9fID0gaW50ZWxfaW5p dF9lbmdpbmVfbGlzdChmZF9fLCAwKTsgXAo+ICsJICAgICAoKGVfXykgPSBpbnRlbF9nZXRfY3Vy cmVudF9waHlzaWNhbF9lbmdpbmUoJmlfXykpOyBcCj4gKwkgICAgIGludGVsX25leHRfZW5naW5l KCZpX18pKQo+ICsKPiArI2VuZGlmIC8qIEdFTV9FTkdJTkVfVE9QT0xPR1lfSCAqLwo+IGRpZmYg LS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgKPiBpbmRleCA2NjU0YTY1OWMwNjIuLjAzZjE5 Y2EyZGZiNiAxMDA2NDQKPiAtLS0gYS9saWIvaWd0LmgKPiArKysgYi9saWIvaWd0LmgKPiBAQCAt NTMsNSArNTMsNiBAQAo+ICAgI2luY2x1ZGUgIm1lZGlhX3NwaW4uaCIKPiAgICNpbmNsdWRlICJy ZW5kZXJjb3B5LmgiCj4gICAjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgo+ICsjaW5jbHVkZSAi aTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5LmgiCj4gICAKPiAgICNlbmRpZiAvKiBJR1RfSCAqLwo+ IGRpZmYgLS1naXQgYS9saWIvaWd0X2d0LmggYi9saWIvaWd0X2d0LmgKPiBpbmRleCA0NzVjMGIz YzNjYzYuLjJhNzAzMmQ0YjI2MiAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2d0LmgKPiArKysgYi9s aWIvaWd0X2d0LmgKPiBAQCAtOTUsNiArOTUsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUyIHsKPiAgIAljb25zdCBjaGFyICpuYW1lOwo+ICAgCWludCBjbGFz czsKPiAgIAlpbnQgaW5zdGFuY2U7Cj4gKwl1aW50NjRfdCBmbGFnczsKPiAgIH0gaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZXMyW107Cj4gICAKPiAgIHVuc2lnbmVkIGludAo+IEBAIC0xMTQsMTEgKzEx NSw0IEBAIHZvaWQgZ2VtX3JlcXVpcmVfZW5naW5lKGludCBnZW1fZmQsCj4gICAJaWd0X3JlcXVp cmUoZ2VtX2hhc19lbmdpbmUoZ2VtX2ZkLCBjbGFzcywgaW5zdGFuY2UpKTsKPiAgIH0KPiAgIAo+ IC0jZGVmaW5lIF9fZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGVfXykgXAo+IC0JZm9y ICgoZV9fKSA9IGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzMjsgKGVfXyktPm5hbWU7IChlX18pKysp Cj4gLQo+IC0jZGVmaW5lIGZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZF9fLCBlX18p IFwKPiAtCWZvciAoKGVfXykgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7IChlX18pLT5uYW1l OyAoZV9fKSsrKSBcCj4gLQkJZm9yX2lmIChnZW1faGFzX2VuZ2luZSgoZmRfXyksIChlX18pLT5j bGFzcywgKGVfXyktPmluc3RhbmNlKSkKPiAtCj4gICAjZW5kaWYgLyogSUdUX0dUX0ggKi8KPiBk aWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCj4gaW5kZXggMGVi NTU4NWQ3MmI5Li4zY2M1MmY5N2M4YmYgMTAwNjQ0Cj4gLS0tIGEvbGliL21lc29uLmJ1aWxkCj4g KysrIGIvbGliL21lc29uLmJ1aWxkCj4gQEAgLTUsNiArNSw3IEBAIGxpYl9zb3VyY2VzID0gWwo+ ICAgCSdpOTE1L2dlbV9zdWJtaXNzaW9uLmMnLAo+ICAgCSdpOTE1L2dlbV9yaW5nLmMnLAo+ICAg CSdpOTE1L2dlbV9tbWFuLmMnLAo+ICsJJ2k5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5jJywKPiAg IAknaWd0X2NvbG9yX2VuY29kaW5nLmMnLAo+ICAgCSdpZ3RfZGVidWdmcy5jJywKPiAgIAknaWd0 X2RldmljZS5jJywKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZl9wbXUuYyBiL3Rlc3RzL3BlcmZf cG11LmMKPiBpbmRleCA0ZjU1MmJjMmFlMjguLjBlMTBiY2ZkMTY5MyAxMDA2NDQKPiAtLS0gYS90 ZXN0cy9wZXJmX3BtdS5jCj4gKysrIGIvdGVzdHMvcGVyZl9wbXUuYwo+IEBAIC00MzQsNyArNDM0 LDcgQEAgYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplLAo+ICAgCj4gICAJaSA9IDA7Cj4gICAJZmRbMF0gPSAtMTsKPiAtCWZv cl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShnZW1fZmQsIGVfKSB7Cj4gKwlmb3JfZWFjaF9j b250ZXh0X2VuZ2luZShnZW1fZmQsIDAsIGVfKSB7Cj4gICAJCWlmIChlID09IGVfKQo+ICAgCQkJ YnVzeV9pZHggPSBpOwoKQXMgbWVudGlvbmVkIG9uIElSQyB0aGlzIGNoZWNrIG5lZWRzIHRvIGJl IGNvbnZlcnRlZCBpbnRvIGNsYXNzIGFuZCAKaW5zdGFuY2UgY29tcGFyaXNvbi4KCj4gICAKPiBA QCAtNDk3LDcgKzQ5Nyw3IEBAIG1vc3RfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICAgCXVuc2lnbmVkIGludCBpZGxl X2lkeCwgaTsKPiAgIAo+ICAgCWkgPSAwOwo+IC0JZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3Rh bmNlKGdlbV9mZCwgZV8pIHsKPiArCWZvcl9lYWNoX2NvbnRleHRfZW5naW5lKGdlbV9mZCwgMCwg ZV8pIHsKPiAgIAkJaWYgKGUgPT0gZV8pCj4gICAJCQlpZGxlX2lkeCA9IGk7CgpBbmQgdGhpcyBv bmUuCgo+ICAgCQllbHNlIGlmIChzcGluKQo+IEBAIC01NTQsNyArNTU0LDcgQEAgYWxsX2J1c3lf Y2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcywKPiAg IAl1bnNpZ25lZCBpbnQgaTsKPiAgIAo+ICAgCWkgPSAwOwo+IC0JZm9yX2VhY2hfZW5naW5lX2Ns YXNzX2luc3RhbmNlKGdlbV9mZCwgZSkgewo+ICsJZm9yX2VhY2hfY29udGV4dF9lbmdpbmUoZ2Vt X2ZkLCAwLCBlKSB7Cj4gICAJCWlmIChzcGluKQo+ICAgCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChn ZW1fZmQsIHNwaW4sIGUsIDY0KTsKCkFuZCBlMnJpbmcgbmVlZHMgdG8gYmUgY29udmVydGVkIChv ciByZXBsYWNlZCkgd2l0aCBlLT5mbGFncy4KCk9uZSBjb21wbGljYXRpb24gd2lsbCBiZSBnZW1f Y2FuX3N0b3JlX2R3b3JkIGluIF9fc3Bpbl9wb2xsIGFuZCBhbm90aGVyIAppZ3Rfc3Bpbl9mYWN0 b3J5IGFzc3VtcHRpb25zIG9uIGVuZ2luZSBmbGFncy4gV2hpY2ggSSB0aGluayByZXNvbHZlcyAK b25seSBvbiBnZW1fY2FuX3N0b3JlX2R3b3JkIGFnYWluLi4gVWdoLgoKV291bGQgdGhpcyB3b3Jr OgoKaWd0X2R1bW15bG9hZC5jL2VtaXRfcmVjdXJzaXZlX2JhdGNoCgogIGZvcl9lYWNoX3BoeXNp Y2FsX2VuZ2luZQpyZXBsYWNlIHdpdGg6CiAgIGZvcl9lYWNoX2NvbnRleHRfZW5naW5lKG9wdHMt PmN0eCkKCkFMTF9FTkdJTkVTIG5vdyBtZWFucyBhbGwgY29udGV4dCBvciBhbGwgcGh5c2ljYWws IGRlcGVuZGluZyBvbiBjb250ZXh0LgoKQWRkIGEgaGVscGVyOgoKZ2VtX2VuZ2luZV9jYW5fc3Rv cmVfZHdvcmQoY2xhc3MsIGluc3RhbmNlKQoKSW4gaWd0X3NwaW5fYmF0Y2hfZmFjdG9yeToKClJl bW92ZSAiaWYgKG9wdHMtPmVuZ2luZSAhPSBBTExfRU5HSU5FUykiIGNoZWNrLCB3ZSdsbCB0cnkg dG8gaGFuZGxlIGl0IAppbiBlbWl0X3JlY3Vyc2l2ZSBiYXRjaC4KCkluIHRoZSBsYXR0ZXIgY2hh bmdlIHRoZSBlbHNlIGJsb2NrIG9mIHRoZSBmaXJzdCBpZi1lbHNlIHRvIGJlIHNvbWV0aGluZyAK bGlrZToKCi8vIGlvY3RsIGFuZCBzdHVmZi4uIGJ1bW1lci4uLiA6KApyZXQgPSBnZW1fY29udGV4 dF9nZXRfZW5naW5lX21hcF9jbGFzc19pbnN0YW5jZShmZCwgb3B0cy0+Y3R4LCAKb3B0cy0+ZW5n aW5lLCAmY2xhc3MsICZpbnN0YW5jZSk7CmlmIChyZXQpIC8vIGVycm9yID0gbm8gbWFwID0gbWVh bnMgb3B0cy0+ZW5naW5lIGlzIGViIGZsYWdzCgljaGVjayBsZWdhY3kgZ2VtX2Nhbl9zdG9yZV9k d29yZAplbHNlCgljaGVjayB1c2luZyBuZXcgZ2VtX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoY2xh c3MsIGluc3RhbmNlKQoKSXQgaXMgbm90IHByZXR0eSBidXQgdW5sZXNzIEkgbWlzc2VkIHNvbWV0 aGluZyBpdCBjb3VsZCB3b3JrLiA6SQoKUmVnYXJkcywKClR2cnRrbwoKPiAgIAkJZWxzZQo+IEBA IC0xNjgzLDcgKzE2ODMsNyBAQCBpZ3RfbWFpbgo+ICAgCQlpZ3RfcmVxdWlyZV9nZW0oZmQpOwo+ ICAgCQlpZ3RfcmVxdWlyZShpOTE1X3R5cGVfaWQoKSA+IDApOwo+ICAgCj4gLQkJZm9yX2VhY2hf ZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlKQo+ICsJCWZvcl9lYWNoX2NvbnRleHRfZW5naW5l KGZkLCAwLCBlKQo+ICAgCQkJbnVtX2VuZ2luZXMrKzsKPiAgIAl9Cj4gICAKPiBAQCAtMTY5Myw3 ICsxNjkzLDcgQEAgaWd0X21haW4KPiAgIAlpZ3Rfc3VidGVzdCgiaW52YWxpZC1pbml0IikKPiAg IAkJaW52YWxpZF9pbml0KCk7Cj4gICAKPiAtCV9fZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3Rh bmNlKGUpIHsKPiArCV9fZm9yX2VhY2hfc3RhdGljX2VuZ2luZShlKSB7Cj4gICAJCWNvbnN0IHVu c2lnbmVkIGludCBwY3RbXSA9IHsgMiwgNTAsIDk4IH07Cj4gICAKPiAgIAkJLyoqCj4gQEAgLTE4 OTcsNyArMTg5Nyw3IEBAIGlndF9tYWluCj4gICAJCQlnZW1fcXVpZXNjZW50X2dwdShmZCk7Cj4g ICAJCX0KPiAgIAo+IC0JCV9fZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGUpIHsKPiAr CQlfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUoZSkgewo+ICAgCQkJaWd0X3N1YnRlc3RfZ3JvdXAg ewo+ICAgCQkJCWlndF9maXh0dXJlIHsKPiAgIAkJCQkJZ2VtX3JlcXVpcmVfZW5naW5lKHJlbmRl cl9mZCwKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K aWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2