From mboxrd@z Thu Jan 1 00:00:00 1970 From: Isaila Alexandru Subject: Re: [PATCH v3] x86/mm: Add mem access rights to NPT Date: Thu, 19 Jul 2018 11:18:19 +0300 Message-ID: <1531988299.10865.16.camel@bitdefender.com> References: <1530535351-5516-1-git-send-email-aisaila@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: George Dunlap Cc: Andrew Cooper , "tamas@tklengyel.com" , "jbeulich@suse.com" , "rcojocaru@bitdefender.com" , "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org T24gTWksIDIwMTgtMDctMTggYXQgMTU6MzMgKzAwMDAsIEdlb3JnZSBEdW5sYXAgd3JvdGU6Cj4g Cj4gPiAKPiA+IE9uIEp1bCAyLCAyMDE4LCBhdCA4OjQyIEFNLCBBbGV4YW5kcnUgSXNhaWxhIDxh aXNhaWxhQGJpdGRlZmVuZGVyLmMKPiA+IG9tPiB3cm90ZToKPiA+IAo+ID4gRnJvbTogSXNhaWxh IEFsZXhhbmRydSA8YWlzYWlsYUBiaXRkZWZlbmRlci5jb20+Cj4gPiAKPiA+IFRoaXMgcGF0Y2gg YWRkcyBhY2Nlc3MgcmlnaHRzIGZvciB0aGUgTlBUIHBhZ2VzLiBUaGUgYWNjZXNzIHJpZ2h0cwo+ ID4gYXJlCj4gPiBzYXZlZCBpbiBhIHJhZGl4IHRyZWUgd2l0aCB0aGUgcm9vdCBzYXZlZCBpbiBw Mm1fZG9tYWluLiBUaGUgcmlnaHRzCj4gPiBhcmUgbWFuaXB1bGF0ZWQgdGhyb3VnaCBwMm1fc2V0 X2FjY2VzcygpCj4gPiBhbmQgcDJtX2dldF9hY2Nlc3MoKSBmdW5jdGlvbnMuCj4gPiBUaGUgcGF0 Y2ggZm9sbG93cyB0aGUgZXB0IGxvZ2ljLgo+IFRoaXMgZGVzY3JpcHRpb24gbmVlZHMgdG8gYmUg bXVjaCBtb3JlIGNvbXBsZXRlLsKgwqBTb21ldGhpbmcgbGlrZQo+IHRoaXM6Cj4gCj4gLS0tCj4g VGhpcyBwYXRjaCBhZGRzIGFjY2VzcyBjb250cm9sIGZvciBOUFQgbW9kZS7CoMKgCj4gCj4gVGhl cmUgYXJlbuKAmXQgZW5vdWdoIGV4dHJhIGJpdHMgdG8gc3RvcmUgdGhlIGFjY2VzcyByaWdodHMg aW4gdGhlIE5QVAo+IHAybSB0YWJsZSwgc28gd2UgYWRkIGEgcmFkaXggdHJlZSB0byBzdG9yZSB0 aGUgcmlnaHRzLsKgwqBGb3IKPiBlZmZpY2llbmN5LCByZW1vdmUgZW50cmllcyB3aGljaCBtYXRj aCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyByYXRoZXIKPiB0aGFuIGNvbnRpbnVpbmcgdG8gc3Rv cmUgdGhlbS4KPiAKPiBNb2RpZnkgcDJtLXB0LmM6cDJtX3R5cGVfdG9fZmxhZ3MoKSB0byBtaXJy b3IgdGhlIGVwdCB2ZXJzaW9uOiB0YWtpbmcKPiBhbiBhY2Nlc3MsIGFuZCByZW1vdmluZyAvIGFk ZGluZyBSVyBvciBOWCBmbGFncyBhcyBhcHByb3ByaWF0ZS4KPiAtLS0KPiAKSSB3aWxsIHVwZGF0 ZSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24uCj4gPiAKPiA+IAo+ID4gTm90ZTogSXQgd2FzIHRlc3Rl ZCB3aXRoIHhlbi1hY2Nlc3Mgd3JpdGUKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1 IElzYWlsYSA8YWlzYWlsYUBiaXRkZWZlbmRlci5jb20+Cj4gCj4gPiAKPiA+IAo+ID4gLS0tCj4g PiBDaGFuZ2VzIHNpbmNlIFYyOgo+ID4gCS0gRGVsZXRlIGJsYWsgbGluZQo+ID4gCS0gQWRkIHJl dHVybiBpZiBwMm1fYWNjZXNzX3J3eCA9IGEKPiA+IAktIERlbGV0ZSB0aGUgY29tbWVudCBmcm9t IHAybV9wdF9nZXRfZW50cnkoKQo+ID4gCS0gTW92ZWQgcmFkaXhfdHJlZV9pbml0KCkgdG8gYXJj aF9tb25pdG9yX2luaXRfZG9tYWluKCkuCj4gPiAtLS0KPiA+IHhlbi9hcmNoL3g4Ni9tbS9tZW1f YWNjZXNzLmPCoMKgwqDCoMKgfMKgwqDCoDMgKysKPiA+IHhlbi9hcmNoL3g4Ni9tbS9wMm0tcHQu Y8KgwqDCoMKgwqDCoMKgwqDCoHwgMTA5Cj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0KPiA+IHhlbi9hcmNoL3g4Ni9tbS9wMm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHzCoMKgwqA2ICsrKwo+ID4geGVuL2FyY2gveDg2L21vbml0b3IuY8KgwqDCoMKgwqDCoMKg wqDCoMKgwqB8wqDCoDEzICsrKysrCj4gPiB4ZW4vaW5jbHVkZS9hc20teDg2L21lbV9hY2Nlc3Mu aCB8wqDCoMKgMiArLQo+ID4geGVuL2luY2x1ZGUvYXNtLXg4Ni9wMm0uaMKgwqDCoMKgwqDCoMKg wqB8wqDCoMKgNiArKysKPiA+IDYgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyksIDE1 IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tL21lbV9h Y2Nlc3MuYwo+ID4gYi94ZW4vYXJjaC94ODYvbW0vbWVtX2FjY2Vzcy5jCj4gPiBpbmRleCBjMGNk MDE3Li5kNzhjODJjIDEwMDY0NAo+ID4gLS0tIGEveGVuL2FyY2gveDg2L21tL21lbV9hY2Nlc3Mu Ywo+ID4gKysrIGIveGVuL2FyY2gveDg2L21tL21lbV9hY2Nlc3MuYwo+ID4gQEAgLTIyMSw3ICsy MjEsMTAgQEAgYm9vbCBwMm1fbWVtX2FjY2Vzc19jaGVjayhwYWRkcl90IGdwYSwKPiA+IHVuc2ln bmVkIGxvbmcgZ2xhLAo+ID4gwqDCoMKgwqDCoMKgwqDCoHsKPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJlcS0+dS5tZW1fYWNjZXNzLmZsYWdzIHw9IE1FTV9BQ0NFU1NfR0xBX1ZBTElEOwo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxLT51Lm1lbV9hY2Nlc3MuZ2xhID0gZ2xhOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKCBucGZl Yy5nbGFfdmFsaWQgfHwgY3B1X2hhc19zdm0gKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB7Cj4gSSBj YW7igJl0IGltbWVkaWF0ZWx5IHRlbGwgd2hhdCB0aGlzIGlzIGFib3V0LCB3aGljaCBtZWFucyBp dCBuZWVkcyBhCj4gY29tbWVudC4KPiAKPiBJdCBtYXkgYWxzbyBiZSAoZGVwZW5kaW5nIG9uIHdo eSB0aGlzIGlzIGhlcmUpIHRoYXQg4oCcY3B1X2hhc19zdm3igJ0KPiBtYWtlcyB0aGlzIG1vcmUg ZnJhZ2lsZSDigJQgaWYgdGhpcyBpcyByZWFsbHkgYWJvdXQgaGF2aW5nIGEgcmFkaXgKPiB0cmVl LCBmb3IgaW5zdGFuY2UsIHRoZW4geW91IHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgYSByYWRp eCB0cmVlLgoKVGhpcyBpcyBhYm91dCB0aGUgZGlmZmVyZW50IG5wZmVjIG9uIFNWTi4gVGhlIGds YSBpbiBuZXZlciB2YWxpZCBzbyB0aGUKZmF1bHQgZmxhZyB3aWxsIG5vdCBiZSBzZXQuCj4gCj4g PiAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICggbnBmZWMua2luZCA9PSBucGZlY19r aW5kX3dpdGhfZ2xhICkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxLT51 Lm1lbV9hY2Nlc3MuZmxhZ3MgfD0KPiA+IE1FTV9BQ0NFU1NfRkFVTFRfV0lUSF9HTEE7Cj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlmICggbnBmZWMua2luZCA9PSBucGZlY19raW5k X2luX2dwdCApCj4gPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tL3AybS1wdC5jIGIveGVu L2FyY2gveDg2L21tL3AybS1wdC5jCj4gPiBpbmRleCBiOGM1ZDJlLi40MzMwZDFmIDEwMDY0NAo+ ID4gLS0tIGEveGVuL2FyY2gveDg2L21tL3AybS1wdC5jCj4gPiArKysgYi94ZW4vYXJjaC94ODYv bW0vcDJtLXB0LmMKPiA+IEBAIC02OCw3ICs2OCw4IEBACj4gPiBzdGF0aWMgdW5zaWduZWQgbG9u ZyBwMm1fdHlwZV90b19mbGFncyhjb25zdCBzdHJ1Y3QgcDJtX2RvbWFpbgo+ID4gKnAybSwKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAybV90eXBlX3QgdCwKPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG1mbl90IG1mbiwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbGV2 ZWwpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGxldmVsLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHAybV9hY2Nlc3NfdCBhY2Nlc3MpCj4gPiB7Cj4gPiDCoMKgwqDC oHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiDCoMKgwqDCoC8qCj4gPiBAQCAtODcsMjMgKzg4LDI3 IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHAybV90eXBlX3RvX2ZsYWdzKGNvbnN0Cj4gPiBzdHJ1 Y3QgcDJtX2RvbWFpbiAqcDJtLAo+ID4gwqDCoMKgwqBjYXNlIHAybV9yYW1fcGFnZWQ6Cj4gPiDC oMKgwqDCoGNhc2UgcDJtX3JhbV9wYWdpbmdfaW46Cj4gPiDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiAt wqDCoMKgwqDCoMKgwqDCoHJldHVybiBmbGFncyB8IF9QQUdFX05YX0JJVDsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgZmxhZ3MgfD0gUDJNX0JBU0VfRkxBR1MgfCBfUEFHRV9OWF9CSVQ7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gwqDCoMKgwqBjYXNlIHAybV9ncmFudF9tYXBfcm86Cj4g PiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZsYWdzIHwgUDJNX0JBU0VfRkxBR1MgfCBfUEFHRV9O WF9CSVQ7Cj4gPiDCoMKgwqDCoGNhc2UgcDJtX2lvcmVxX3NlcnZlcjoKPiA+IMKgwqDCoMKgwqDC oMKgwqBmbGFncyB8PSBQMk1fQkFTRV9GTEFHUyB8IF9QQUdFX1JXIHwgX1BBR0VfTlhfQklUOwo+ ID4gwqDCoMKgwqDCoMKgwqDCoGlmICggcDJtLT5pb3JlcS5mbGFncyAmIFhFTl9ETU9QX0lPUkVR X01FTV9BQ0NFU1NfV1JJVEUgKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBm bGFncyAmIH5fUEFHRV9SVzsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZsYWdzOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYWdzICY9IH5fUEFHRV9SVzsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgYnJlYWs7Cj4gPiDCoMKgwqDCoGNhc2UgcDJtX3JhbV9ybzoKPiA+IMKgwqDCoMKg Y2FzZSBwMm1fcmFtX2xvZ2RpcnR5Ogo+ID4gwqDCoMKgwqBjYXNlIHAybV9yYW1fc2hhcmVkOgo+ ID4gLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmxhZ3MgfCBQMk1fQkFTRV9GTEFHUzsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgZmxhZ3MgfD0gUDJNX0JBU0VfRkxBR1M7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoGJyZWFrOwo+ID4gwqDCoMKgwqBjYXNlIHAybV9yYW1fcnc6Cj4gPiAtwqDCoMKgwqDCoMKg wqDCoHJldHVybiBmbGFncyB8IFAyTV9CQVNFX0ZMQUdTIHwgX1BBR0VfUlc7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoGZsYWdzIHw9IFAyTV9CQVNFX0ZMQUdTIHwgX1BBR0VfUlc7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoGJyZWFrOwo+ID4gwqDCoMKgwqBjYXNlIHAybV9ncmFudF9tYXBfcnc6Cj4gPiDC oMKgwqDCoGNhc2UgcDJtX21hcF9mb3JlaWduOgo+ID4gLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4g ZmxhZ3MgfCBQMk1fQkFTRV9GTEFHUyB8IF9QQUdFX1JXIHwgX1BBR0VfTlhfQklUOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBmbGFncyB8PSBQMk1fQkFTRV9GTEFHUyB8IF9QQUdFX1JXIHwgX1BBR0Vf TlhfQklUOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+IMKgwqDCoMKgY2FzZSBwMm1f bW1pb19kaXJlY3Q6Cj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCAhcmFuZ2VzZXRfY29udGFpbnNf c2luZ2xldG9uKG1taW9fcm9fcmFuZ2VzLAo+ID4gbWZuX3gobWZuKSkgKQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZmxhZ3MgfD0gX1BBR0VfUlc7Cj4gPiBAQCAtMTEyLDggKzExNywzNyBA QCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwMm1fdHlwZV90b19mbGFncyhjb25zdAo+ID4gc3RydWN0 IHAybV9kb21haW4gKnAybSwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYWdzIHw9IF9Q QUdFX1BXVDsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFTU0VSVCghbGV2ZWwpOwo+ID4g wqDCoMKgwqDCoMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZsYWdzIHwgUDJN X0JBU0VfRkxBR1MgfCBfUEFHRV9QQ0Q7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGZsYWdzIHw9IFAy TV9CQVNFX0ZMQUdTIHwgX1BBR0VfUENEOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ ICvCoMKgwqDCoH0KPiBJIHRoaW5rIHlvdSB3YW50IGEgYmxhbmsgbGluZSBoZXJlLgo+IAo+ID4g Cj4gPiArwqDCoMKgwqBzd2l0Y2ggKCBhY2Nlc3MgKQo+ID4gK8KgwqDCoMKgewo+ID4gK8KgwqDC oMKgwqDCoMKgwqBjYXNlIHAybV9hY2Nlc3NfcjoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgY2FzZSBw Mm1fYWNjZXNzX3c6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmxhZ3MgfD0gX1BBR0Vf TlhfQklUOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYWdzICY9IH5fUEFHRV9SVzsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg Y2FzZSBwMm1fYWNjZXNzX3J3Ogo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYWdzIHw9 IF9QQUdFX05YX0JJVDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgY2FzZSBwMm1fYWNjZXNzX246Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGNh c2UgcDJtX2FjY2Vzc19uMnJ3eDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFncyB8 PSBfUEFHRV9OWF9CSVQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmxhZ3MgJj0gfl9Q QUdFX1JXOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqBjYXNlIHAybV9hY2Nlc3Nfcng6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgcDJt X2FjY2Vzc193eDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgY2FzZSBwMm1fYWNjZXNzX3J4MnJ3Ogo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYWdzICY9IH4oX1BBR0VfTlhfQklUIHwgX1BB R0VfUlcpOwo+IFRoaXMgbG9va3MgbGlrZSBhIG1pc3Rha2Ug4oCUIHRoaXMgd2lsbCB1bmNvbmRp dGlvbmFsbHkgZW5hYmxlCj4gZXhlY3V0aW9uLCBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIHAybSB0 eXBlIGZvcmJpZHMgaXQuCj4gZXB0X3AybV90eXBlX3RvX2ZsYWdzKCkgZG9lc27igJl0IGRvIHRo YXQuCj4gCj4gPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgY2FzZSBwMm1fYWNjZXNzX3g6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZmxhZ3MgJj0gfl9QQUdFX1JXOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFr Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIHAybV9hY2Nlc3Nfcnd4Ogo+ID4gK8KgwqDCoMKg wqDCoMKgwqBkZWZhdWx0Ogo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4g wqDCoMKgwqB9Cj4gSSB0aGluayB5b3Ugd2FudCBhbm90aGVyIGJsYW5rIGxpbmUgaGVyZSB0b28u Cj4gCj4gQWxzbywgdGhpcyBkb2VzbuKAmXQgc2VlbSB0byBjYXB0dXJlIHRoZSDigJhy4oCZIHBh cnQgb2YgdGhlIGVxdWF0aW9uIOKAlAo+IHNob3VsZG7igJl0IHAybV9hY2Nlc3NfbiBlbmQgdXAg d2l0aCBhIG5vdC1wcmVzZW50IHAybSBlbnRyeT8KClNWTSBkb3Nlbid0IGV4cGxpY2l0bHkgcHJv dmlkZSBhIHJlYWQgYWNjZXNzIGJpdCBzbyB3ZSB0cmVhdCByZWFkIGFuZAp3cml0ZSB0aGUgc2Ft ZSB3YXkuCgpBbGV4Cj4gCj4gPiAKPiA+ICvCoMKgwqDCoHJldHVybiBmbGFnczsKPiA+IH0KPiA+ IAo+ID4gCj4gPiBAQCAtMTc0LDYgKzIwOCw0NCBAQCBzdGF0aWMgdm9pZCBwMm1fYWRkX2lvbW11 X2ZsYWdzKGwxX3BnZW50cnlfdAo+ID4gKnAybV9lbnRyeSwKPiA+IMKgwqDCoMKgwqDCoMKgwqBs MWVfYWRkX2ZsYWdzKCpwMm1fZW50cnksIGlvbW11X25sZXZlbF90b19mbGFncyhubGV2ZWwsCj4g PiBmbGFncykpOwo+ID4gfQo+ID4gCj4gPiArc3RhdGljIHAybV9hY2Nlc3NfdCBwMm1fZ2V0X2Fj Y2VzcyhzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLAo+ID4gdW5zaWduZWQgbG9uZyBnZm4pCj4gPiAr ewo+ID4gK8KgwqDCoMKgdm9pZCAqcHRyOwo+ID4gKwo+ID4gK8KgwqDCoMKgaWYgKCAhcDJtLT5t ZW1fYWNjZXNzX3NldHRpbmdzICkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHAybV9hY2Nl c3Nfcnd4Owo+ID4gKwo+ID4gK8KgwqDCoMKgcHRyID0gcmFkaXhfdHJlZV9sb29rdXAocDJtLT5t ZW1fYWNjZXNzX3NldHRpbmdzLCBnZm4pOwo+ID4gK8KgwqDCoMKgaWYgKCAhcHRyICkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHAybV9hY2Nlc3Nfcnd4Owo+ID4gK8KgwqDCoMKgZWxzZQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmFkaXhfdHJlZV9wdHJfdG9faW50KHB0cik7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHAybV9zZXRfYWNjZXNzKHN0cnVjdCBwMm1fZG9t YWluICpwMm0sIHVuc2lnbmVkIGxvbmcKPiA+IGdmbiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cDJtX2FjY2Vzc190IGEpCj4gPiArewo+ID4gK8KgwqDCoMKgaW50IHJjOwo+ID4gKwo+ID4gK8Kg wqDCoMKgaWYgKCAhcDJtLT5tZW1fYWNjZXNzX3NldHRpbmdzICkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgcmV0dXJuOwo+ID4gKwo+ID4gK8KgwqDCoMKgaWYgKCBwMm1fYWNjZXNzX3J3eCA9PSBhICkK PiA+ICvCoMKgwqDCoHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgcmFkaXhfdHJlZV9kZWxldGUocDJt LT5tZW1fYWNjZXNzX3NldHRpbmdzLCBnZm4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm47 Cj4gPiArwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqByYyA9IHJhZGl4X3RyZWVfaW5zZXJ0 KHAybS0+bWVtX2FjY2Vzc19zZXR0aW5ncywgZ2ZuLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhZGl4X3RyZWVfaW50X3RvX3B0cihh KSk7Cj4gPiArwqDCoMKgwqBpZiAoIHJjID09IC1FRVhJU1QgKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqAvKiBJZiBhIHNldHRpbmcgYWxyZWFkeSBleGlzdHMsIGNoYW5nZSBpdCB0byB0aGUgbmV3IG9u ZS4KPiA+ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoHJhZGl4X3RyZWVfcmVwbGFjZV9zbG90KAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhZGl4X3RyZWVfbG9va3VwX3Nsb3QoCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwMm0tPm1lbV9hY2Nlc3Nfc2V0dGluZ3Ms IGdmbiksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFkaXhfdHJlZV9pbnRfdG9fcHRy KGEpKTsKPiA+ICt9Cj4gPiArCj4gPiAvKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzLCAtZXJybm8g Zm9yIGZhaWx1cmUgKi8KPiA+IHN0YXRpYyBpbnQKPiA+IHAybV9uZXh0X2xldmVsKHN0cnVjdCBw Mm1fZG9tYWluICpwMm0sIHZvaWQgKip0YWJsZSwKPiA+IEBAIC0yMDEsNiArMjczLDcgQEAgcDJt X25leHRfbGV2ZWwoc3RydWN0IHAybV9kb21haW4gKnAybSwgdm9pZAo+ID4gKip0YWJsZSwKPiA+ IMKgwqDCoMKgwqDCoMKgwqBuZXdfZW50cnkgPSBsMWVfZnJvbV9tZm4obWZuLCBQMk1fQkFTRV9G TEFHUyB8IF9QQUdFX1JXKTsKPiA+IAo+ID4gwqDCoMKgwqDCoMKgwqDCoHAybV9hZGRfaW9tbXVf ZmxhZ3MoJm5ld19lbnRyeSwgbGV2ZWwsCj4gPiBJT01NVUZfcmVhZGFibGV8SU9NTVVGX3dyaXRh YmxlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgcDJtX3NldF9hY2Nlc3MocDJtLCBnZm4sIHAybS0+ ZGVmYXVsdF9hY2Nlc3MpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHAybS0+d3JpdGVfcDJtX2VudHJ5 KHAybSwgZ2ZuLCBwMm1fZW50cnksIG5ld19lbnRyeSwgbGV2ZWwKPiA+ICsgMSk7Cj4gPiDCoMKg wqDCoH0KPiA+IMKgwqDCoMKgZWxzZSBpZiAoIGZsYWdzICYgX1BBR0VfUFNFICkKPiA+IEBAIC0y NDksNiArMzIyLDcgQEAgcDJtX25leHRfbGV2ZWwoc3RydWN0IHAybV9kb21haW4gKnAybSwgdm9p ZAo+ID4gKip0YWJsZSwKPiA+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBuZXdfZW50cnkgPSBsMWVfZnJvbV9wZm4ocGZuIHwgKGkgPDwgKChsZXZlbCAtIDEp ICoKPiA+IFBBR0VUQUJMRV9PUkRFUikpLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFncyk7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcDJtX3NldF9hY2Nlc3MocDJtLCBnZm4sIHAybS0+ ZGVmYXVsdF9hY2Nlc3MpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcDJtLT53cml0ZV9w Mm1fZW50cnkocDJtLCBnZm4sIGwxX2VudHJ5ICsgaSwgbmV3X2VudHJ5LAo+ID4gbGV2ZWwpOwo+ ID4gwqDCoMKgwqDCoMKgwqDCoH0KPiA+IAo+ID4gQEAgLTI1Niw2ICszMzAsNyBAQCBwMm1fbmV4 dF9sZXZlbChzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCB2b2lkCj4gPiAqKnRhYmxlLAo+ID4gCj4g PiDCoMKgwqDCoMKgwqDCoMKgbmV3X2VudHJ5ID0gbDFlX2Zyb21fbWZuKG1mbiwgUDJNX0JBU0Vf RkxBR1MgfCBfUEFHRV9SVyk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcDJtX2FkZF9pb21tdV9mbGFn cygmbmV3X2VudHJ5LCBsZXZlbCwKPiA+IElPTU1VRl9yZWFkYWJsZXxJT01NVUZfd3JpdGFibGUp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqBwMm1fc2V0X2FjY2VzcyhwMm0sIGdmbiwgcDJtLT5kZWZh dWx0X2FjY2Vzcyk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcDJtLT53cml0ZV9wMm1fZW50cnkocDJt LCBnZm4sIHAybV9lbnRyeSwgbmV3X2VudHJ5LCBsZXZlbAo+ID4gKyAxKTsKPiA+IMKgwqDCoMKg fQo+ID4gwqDCoMKgwqBlbHNlCj4gPiBAQCAtNDIwLDggKzQ5NSw5IEBAIHN0YXRpYyBpbnQgZG9f cmVjYWxjKHN0cnVjdCBwMm1fZG9tYWluICpwMm0sCj4gPiB1bnNpZ25lZCBsb25nIGdmbikKPiA+ IMKgwqDCoMKgwqDCoMKgwqBpZiAoIG50ICE9IG90ICkKPiA+IMKgwqDCoMKgwqDCoMKgwqB7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIG1mbiA9IGwxZV9nZXRfcGZu KGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAybV9hY2Nlc3NfdCBhID0gcDJtX2dl dF9hY2Nlc3MocDJtLCBnZm4pOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQg bG9uZyBmbGFncyA9IHAybV90eXBlX3RvX2ZsYWdzKHAybSwgbnQsCj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfbWZuKG1mbiksCj4gPiBsZXZlbCk7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfbWZu KG1mbiksCj4gPiBsZXZlbCwgYSk7Cj4gPiAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm ICggbGV2ZWwgKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgewo+ID4gQEAgLTU2OSwxMyAr NjQ1LDE0IEBAIHAybV9wdF9zZXRfZW50cnkoc3RydWN0IHAybV9kb21haW4gKnAybSwKPiA+IGdm bl90IGdmbl8sIG1mbl90IG1mbiwKPiA+IMKgwqDCoMKgwqDCoMKgwqBBU1NFUlQoIW1mbl92YWxp ZChtZm4pIHx8IHAybXQgIT0gcDJtX21taW9fZGlyZWN0KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBs M2VfY29udGVudCA9IG1mbl92YWxpZChtZm4pIHx8Cj4gPiBwMm1fYWxsb3dzX2ludmFsaWRfbWZu KHAybXQpCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA/IHAybV9sM2VfZnJvbV9wZm4obWZu X3gobWZuKSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHAybV90eXBlX3RvX2ZsYWdzKHAybSwgcDJtdCwgbWZuLAo+ID4g MikpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwMm1fdHlwZV90b19mbGFncyhwMm0sIHAybXQsIG1mbiwKPiA+IDIsIHAy bWEpKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgOiBsM2VfZW1wdHkoKTsKPiA+IMKgwqDC oMKgwqDCoMKgwqBlbnRyeV9jb250ZW50LmwxID0gbDNlX2NvbnRlbnQubDM7Cj4gPiAKPiA+IMKg wqDCoMKgwqDCoMKgwqBpZiAoIGVudHJ5X2NvbnRlbnQubDEgIT0gMCApCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwMm1fYWRkX2lvbW11X2ZsYWdzKCZlbnRyeV9jb250ZW50LCAwLAo+ID4g aW9tbXVfcHRlX2ZsYWdzKTsKPiA+IAo+ID4gK8KgwqDCoMKgwqDCoMKgwqBwMm1fc2V0X2FjY2Vz cyhwMm0sIGdmbiwgcDJtYSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcDJtLT53cml0ZV9wMm1fZW50 cnkocDJtLCBnZm4sIHAybV9lbnRyeSwgZW50cnlfY29udGVudCwKPiA+IDMpOwo+ID4gwqDCoMKg wqDCoMKgwqDCoC8qIE5COiBwYWdpbmdfd3JpdGVfcDJtX2VudHJ5KCkgaGFuZGxlcyB0bGIgZmx1 c2hlcwo+ID4gcHJvcGVybHkgKi8KPiA+IMKgwqDCoMKgfQo+ID4gQEAgLTYwOCw3ICs2ODUsNyBA QCBwMm1fcHRfc2V0X2VudHJ5KHN0cnVjdCBwMm1fZG9tYWluICpwMm0sIGdmbl90Cj4gPiBnZm5f LCBtZm5fdCBtZm4sCj4gPiAKPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIG1mbl92YWxpZChtZm4p IHx8IHAybV9hbGxvd3NfaW52YWxpZF9tZm4ocDJtdCkgKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZW50cnlfY29udGVudCA9IHAybV9sMWVfZnJvbV9wZm4obWZuX3gobWZuKSwKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcDJtX3R5cGVfdG9fZmxhZ3MocDJtLAo+ID4gcDJtdCwg bWZuLCAwKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAybV90eXBlX3RvX2ZsYWdz KHAybSwKPiA+IHAybXQsIG1mbiwgMCwgcDJtYSkpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGVsc2UK PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVudHJ5X2NvbnRlbnQgPSBsMWVfZW1wdHkoKTsK PiA+IAo+ID4gQEAgLTYzMCw2ICs3MDcsNyBAQCBwMm1fcHRfc2V0X2VudHJ5KHN0cnVjdCBwMm1f ZG9tYWluICpwMm0sIGdmbl90Cj4gPiBnZm5fLCBtZm5fdCBtZm4sCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwMm0tPmlvcmVxLmVudHJ5X2NvdW50LS07Cj4gPiDCoMKgwqDCoMKgwqDCoMKg fQo+ID4gCj4gPiArwqDCoMKgwqDCoMKgwqDCoHAybV9zZXRfYWNjZXNzKHAybSwgZ2ZuLCBwMm1h KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqAvKiBsZXZlbCAxIGVudHJ5ICovCj4gPiDCoMKgwqDCoMKg wqDCoMKgcDJtLT53cml0ZV9wMm1fZW50cnkocDJtLCBnZm4sIHAybV9lbnRyeSwgZW50cnlfY29u dGVudCwKPiA+IDEpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoC8qIE5COiBwYWdpbmdfd3JpdGVfcDJt X2VudHJ5KCkgaGFuZGxlcyB0bGIgZmx1c2hlcwo+ID4gcHJvcGVybHkgKi8KPiA+IEBAIC02NjEs MTMgKzczOSwxNCBAQCBwMm1fcHRfc2V0X2VudHJ5KHN0cnVjdCBwMm1fZG9tYWluICpwMm0sCj4g PiBnZm5fdCBnZm5fLCBtZm5fdCBtZm4sCj4gPiDCoMKgwqDCoMKgwqDCoMKgQVNTRVJUKCFtZm5f dmFsaWQobWZuKSB8fCBwMm10ICE9IHAybV9tbWlvX2RpcmVjdCk7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgbDJlX2NvbnRlbnQgPSBtZm5fdmFsaWQobWZuKSB8fAo+ID4gcDJtX2FsbG93c19pbnZhbGlk X21mbihwMm10KQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPyBwMm1fbDJlX2Zyb21fcGZu KG1mbl94KG1mbiksCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwMm1fdHlwZV90b19mbGFncyhwMm0sIHAybXQsIG1mbiwK PiA+IDEpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcDJtX3R5cGVfdG9fZmxhZ3MocDJtLCBwMm10LCBtZm4sCj4gPiAx LCBwMm1hKSkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDogbDJlX2VtcHR5KCk7Cj4gPiDC oMKgwqDCoMKgwqDCoMKgZW50cnlfY29udGVudC5sMSA9IGwyZV9jb250ZW50LmwyOwo+ID4gCj4g PiDCoMKgwqDCoMKgwqDCoMKgaWYgKCBlbnRyeV9jb250ZW50LmwxICE9IDAgKQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcDJtX2FkZF9pb21tdV9mbGFncygmZW50cnlfY29udGVudCwgMCwK PiA+IGlvbW11X3B0ZV9mbGFncyk7Cj4gPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgcDJtX3NldF9h Y2Nlc3MocDJtLCBnZm4sIHAybWEpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHAybS0+d3JpdGVfcDJt X2VudHJ5KHAybSwgZ2ZuLCBwMm1fZW50cnksIGVudHJ5X2NvbnRlbnQsCj4gPiAyKTsKPiA+IMKg wqDCoMKgwqDCoMKgwqAvKiBOQjogcGFnaW5nX3dyaXRlX3AybV9lbnRyeSgpIGhhbmRsZXMgdGxi IGZsdXNoZXMKPiA+IHByb3Blcmx5ICovCj4gPiDCoMKgwqDCoH0KPiA+IEBAIC03NDksOCArODI4 LDcgQEAgcDJtX3B0X2dldF9lbnRyeShzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCBnZm5fdAo+ID4g Z2ZuXywKPiA+IMKgwqDCoMKgwqAqIFhYWCBPbmNlIHdlIHN0YXJ0IGV4cGxpY2l0bHkgcmVnaXN0 ZXJpbmcgTU1JTyByZWdpb25zIGluIHRoZQo+ID4gcDJtwqAKPiA+IMKgwqDCoMKgwqAqIFhYWCB3 ZSB3aWxsIHJldHVybiBwMm1faW52YWxpZCBmb3IgdW5tYXBwZWQgZ2ZucyAqLwo+ID4gwqDCoMKg wqAqdCA9IHAybV9tbWlvX2RtOwo+ID4gLcKgwqDCoMKgLyogTm90IGltcGxlbWVudGVkIGV4Y2Vw dCB3aXRoIEVQVCAqLwo+ID4gLcKgwqDCoMKgKmEgPSBwMm1fYWNjZXNzX3J3eDvCoAo+ID4gK8Kg wqDCoMKgKmEgPSBwMm1fYWNjZXNzX247Cj4gPiAKPiA+IMKgwqDCoMKgaWYgKCBnZm4gPiBwMm0t Pm1heF9tYXBwZWRfcGZuICkKPiA+IMKgwqDCoMKgewo+ID4gQEAgLTgxMyw2ICs4OTEsNyBAQCBw b2RfcmV0cnlfbDM6Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbDFfdGFibGVfb2Zmc2V0KGFkZHIpKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCp0ID0gcDJtX3JlY2FsY190eXBlKHJlY2FsYyB8fCBfbmVlZHNfcmVjYWxjKGZsYWdzKSwKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHAybV9mbGFnc190b190eXBlKGZsYWdzKSwgcDJtLAo+ID4gZ2ZuKTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqYSA9IHAybV9nZXRfYWNjZXNzKHAybSwgZ2ZuKTsKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVubWFwX2RvbWFpbl9wYWdlKGwzZSk7Cj4gPiAKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFTU0VSVChtZm5fdmFsaWQobWZuKSB8fCAhcDJtX2lz X3JhbSgqdCkpOwo+ID4gQEAgLTg1Miw2ICs5MzEsNyBAQCBwb2RfcmV0cnlfbDI6Cj4gPiDCoMKg wqDCoMKgwqDCoMKgbWZuID0gX21mbihsMmVfZ2V0X3BmbigqbDJlKSArIGwxX3RhYmxlX29mZnNl dChhZGRyKSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgKnQgPSBwMm1fcmVjYWxjX3R5cGUocmVjYWxj IHx8IF9uZWVkc19yZWNhbGMoZmxhZ3MpLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAybV9mbGFnc190b190eXBlKGZsYWdzKSwg cDJtLCBnZm4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqAqYSA9IHAybV9nZXRfYWNjZXNzKHAybSwg Z2ZuKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqB1bm1hcF9kb21haW5fcGFnZShsMmUpOwo+ID4gCj4g PiDCoMKgwqDCoMKgwqDCoMKgQVNTRVJUKG1mbl92YWxpZChtZm4pIHx8ICFwMm1faXNfcmFtKCp0 KSk7Cj4gPiBAQCAtODg4LDYgKzk2OCw3IEBAIHBvZF9yZXRyeV9sMToKPiA+IMKgwqDCoMKgfQo+ ID4gwqDCoMKgwqBtZm4gPSBsMWVfZ2V0X21mbigqbDFlKTsKPiA+IMKgwqDCoMKgKnQgPSBwMm1f cmVjYWxjX3R5cGUocmVjYWxjIHx8IF9uZWVkc19yZWNhbGMoZmxhZ3MpLCBsMXQsIHAybSwKPiA+ IGdmbik7Cj4gPiArwqDCoMKgwqAqYSA9IHAybV9nZXRfYWNjZXNzKHAybSwgZ2ZuKTsKPiA+IMKg wqDCoMKgdW5tYXBfZG9tYWluX3BhZ2UobDFlKTsKPiA+IAo+ID4gwqDCoMKgwqBBU1NFUlQobWZu X3ZhbGlkKG1mbikgfHwgIXAybV9pc19yYW0oKnQpIHx8IHAybV9pc19wYWdpbmcoKnQpKTsKPiA+ IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0vcDJtLmMgYi94ZW4vYXJjaC94ODYvbW0vcDJt LmMKPiA+IGluZGV4IGM1M2NhYjQuLjEyZTJkMjQgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vYXJjaC94 ODYvbW0vcDJtLmMKPiA+ICsrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwo+ID4gQEAgLTY3NSw2 ICs2NzUsMTIgQEAgdm9pZCBwMm1fdGVhcmRvd24oc3RydWN0IHAybV9kb21haW4gKnAybSkKPiA+ IAo+ID4gwqDCoMKgwqBkID0gcDJtLT5kb21haW47Cj4gPiAKPiA+ICvCoMKgwqDCoGlmICggcDJt LT5tZW1fYWNjZXNzX3NldHRpbmdzICkKPiA+ICvCoMKgwqDCoHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgcmFkaXhfdHJlZV9kZXN0cm95KHAybS0+bWVtX2FjY2Vzc19zZXR0aW5ncywgTlVMTCk7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoHhmcmVlKHAybS0+bWVtX2FjY2Vzc19zZXR0aW5ncyk7Cj4gPiAr wqDCoMKgwqB9Cj4gPiArCj4gPiDCoMKgwqDCoHAybV9sb2NrKHAybSk7Cj4gPiDCoMKgwqDCoEFT U0VSVChhdG9taWNfcmVhZCgmZC0+c2hyX3BhZ2VzKSA9PSAwKTsKPiA+IMKgwqDCoMKgcDJtLT5w aHlzX3RhYmxlID0gcGFnZXRhYmxlX251bGwoKTsKPiA+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYvbW9uaXRvci5jIGIveGVuL2FyY2gveDg2L21vbml0b3IuYwo+ID4gaW5kZXggM2ZiNjUzMS4u MThiODhhMSAxMDA2NDQKPiA+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tb25pdG9yLmMKPiA+ICsrKyBi L3hlbi9hcmNoL3g4Ni9tb25pdG9yLmMKPiA+IEBAIC0yMCwxMCArMjAsMTMgQEAKPiA+IMKgKi8K PiA+IAo+ID4gI2luY2x1ZGUgPGFzbS9tb25pdG9yLmg+Cj4gPiArI2luY2x1ZGUgPGFzbS9wMm0u aD4KPiA+ICNpbmNsdWRlIDxwdWJsaWMvdm1fZXZlbnQuaD4KPiA+IAo+ID4gaW50IGFyY2hfbW9u aXRvcl9pbml0X2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQo+ID4gewo+ID4gK8KgwqDCoMKgc3Ry dWN0IHAybV9kb21haW4gKnAybSA9IHAybV9nZXRfaG9zdHAybShkKTsKPiA+ICsKPiA+IMKgwqDC oMKgaWYgKCAhZC0+YXJjaC5tb25pdG9yLm1zcl9iaXRtYXAgKQo+ID4gwqDCoMKgwqDCoMKgwqDC oGQtPmFyY2gubW9uaXRvci5tc3JfYml0bWFwID0geHphbGxvY19hcnJheShzdHJ1Y3QKPiA+IG1v bml0b3JfbXNyX2JpdG1hcCwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDIpOwo+ID4gQEAgLTMxLDYgKzM0LDE2IEBAIGludCBhcmNoX21vbml0b3JfaW5p dF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKPiA+IMKgwqDCoMKgaWYgKCAhZC0+YXJjaC5tb25p dG9yLm1zcl9iaXRtYXAgKQo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ID4g Cj4gPiArwqDCoMKgwqBpZiAoIGNwdV9oYXNfc3ZtICYmICFwMm0tPm1lbV9hY2Nlc3Nfc2V0dGlu Z3MgKQo+ID4gK8KgwqDCoMKgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqBwMm0tPm1lbV9hY2Nlc3Nf c2V0dGluZ3MgPSB4bWFsbG9jKHN0cnVjdAo+ID4gcmFkaXhfdHJlZV9yb290KTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgaWYoICFwMm0tPm1lbV9hY2Nlc3Nfc2V0dGluZ3MgKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+IFRoaXMgd2lsbCBsZWFrIGQt PmFyY2gubW9uaXRvci5tc3JfYml0bWFwLsKgwqBZb3UgbmVlZCB0byB1c2UgdGhlIGBnb3RvCj4g b3V0X2ZyZWU6YCBwYXR0ZXJuLgo+IAo+IEV2ZXJ5dGhpbmcgZWxzZSBsb29rcyBPSy4KPiAKPiDC oC1HZW9yZ2UKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=