From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6603BC2BA83 for ; Fri, 14 Feb 2020 16:03:52 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2D68124689 for ; Fri, 14 Feb 2020 16:03:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2D68124689 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xen.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j2dR2-0002H8-1p; Fri, 14 Feb 2020 16:03:20 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j2dR0-0002H3-CY for xen-devel@lists.xenproject.org; Fri, 14 Feb 2020 16:03:18 +0000 X-Inumbo-ID: 8335c53a-4f43-11ea-ade5-bc764e2007e4 Received: from mail.xenproject.org (unknown [104.130.215.37]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 8335c53a-4f43-11ea-ade5-bc764e2007e4; Fri, 14 Feb 2020 16:03:17 +0000 (UTC) Received: from xenbits.xenproject.org ([104.239.192.120]) by mail.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j2dQy-0004Fj-7g; Fri, 14 Feb 2020 16:03:16 +0000 Received: from 41.142.6.51.dyn.plus.net ([51.6.142.41] helo=debian) by xenbits.xenproject.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1j2dQx-0003nO-Tu; Fri, 14 Feb 2020 16:03:16 +0000 Date: Fri, 14 Feb 2020 16:03:12 +0000 From: Wei Liu To: Roger Pau =?utf-8?B?TW9ubsOp?= Message-ID: <20200214160312.ixhgjqbcqtxyf3pb@debian> References: <20200214123430.4942-1-liuwe@microsoft.com> <20200214123430.4942-4-liuwe@microsoft.com> <20200214144217.GB4679@Air-de-Roger> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200214144217.GB4679@Air-de-Roger> User-Agent: NeoMutt/20180716 Subject: Re: [Xen-devel] [PATCH v2 3/3] x86/hyperv: L0 assisted TLB flush X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Wei Liu , Wei Liu , Andrew Cooper , Paul Durrant , Michael Kelley , Jan Beulich , Xen Development List Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" T24gRnJpLCBGZWIgMTQsIDIwMjAgYXQgMDM6NDI6MTdQTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKWy4uLl0KPiA+ICAjZW5kaWYgLyogX19YRU5fSFlQRVJWX1BSSVZJQVRFX0hfXyAg Ki8KPiA+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZ3Vlc3QvaHlwZXJ2L3RsYi5jIGIveGVu L2FyY2gveDg2L2d1ZXN0L2h5cGVydi90bGIuYwo+ID4gaW5kZXggNDhmNTI3MjI5ZS4uZjY4ZTE0 ZjE1MSAxMDA2NDQKPiA+IC0tLSBhL3hlbi9hcmNoL3g4Ni9ndWVzdC9oeXBlcnYvdGxiLmMKPiA+ ICsrKyBiL3hlbi9hcmNoL3g4Ni9ndWVzdC9oeXBlcnYvdGxiLmMKPiA+IEBAIC0xOSwxNSArMTks MTg1IEBACj4gPiAgICogQ29weXJpZ2h0IChjKSAyMDIwIE1pY3Jvc29mdC4KPiA+ICAgKi8KPiA+ ICAKPiA+ICsjaW5jbHVkZSA8eGVuL2NwdS5oPgo+ID4gICNpbmNsdWRlIDx4ZW4vY3B1bWFzay5o Pgo+ID4gICNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KPiA+ICAKPiA+ICsjaW5jbHVkZSA8YXNtL2d1 ZXN0L2h5cGVydi5oPgo+ID4gKyNpbmNsdWRlIDxhc20vZ3Vlc3QvaHlwZXJ2LWhjYWxsLmg+Cj4g PiArI2luY2x1ZGUgPGFzbS9ndWVzdC9oeXBlcnYtdGxmcy5oPgo+ID4gKwo+ID4gICNpbmNsdWRl ICJwcml2YXRlLmgiCj4gPiAgCj4gPiArLyoKPiA+ICsgKiBJdCBpcyBwb3NzaWJsZSB0byBlbmNv ZGUgdXAgdG8gNDA5NiBwYWdlcyB1c2luZyB0aGUgbG93ZXIgMTIgYml0cwo+ID4gKyAqIGluIGFu IGVsZW1lbnQgb2YgZ3ZhX2xpc3QKPiA+ICsgKi8KPiA+ICsjZGVmaW5lIEhWX1RMQl9GTFVTSF9V TklUICg0MDk2ICogUEFHRV9TSVpFKQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmls bF9ndmFfbGlzdCh1aW50NjRfdCAqZ3ZhX2xpc3QsIGNvbnN0IHZvaWQgKnZhLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpCj4gPiArewo+ ID4gKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdmE7Cj4gPiArICAg IHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKSAtIDE7Cj4g PiArICAgIHVuc2lnbmVkIGludCBuID0gMDsKPiA+ICsKPiA+ICsgICAgZG8gewo+ID4gKyAgICAg ICAgdW5zaWduZWQgbG9uZyByZW1haW4gPSBlbmQgLSBzdGFydDsKPiA+ICsKPiA+ICsgICAgICAg IGd2YV9saXN0W25dID0gc3RhcnQgJiBQQUdFX01BU0s7Cj4gPiArCj4gPiArICAgICAgICAvKgo+ ID4gKyAgICAgICAgICogVXNlIGxvd2VyIDEyIGJpdHMgdG8gZW5jb2RlIHRoZSBudW1iZXIgb2Yg YWRkaXRpb25hbCBwYWdlcwo+ID4gKyAgICAgICAgICogdG8gZmx1c2gKPiA+ICsgICAgICAgICAq Lwo+ID4gKyAgICAgICAgaWYgKCByZW1haW4gPj0gSFZfVExCX0ZMVVNIX1VOSVQgKQo+ID4gKyAg ICAgICAgewo+ID4gKyAgICAgICAgICAgIGd2YV9saXN0W25dIHw9IH5QQUdFX01BU0s7Cj4gPiAr ICAgICAgICAgICAgc3RhcnQgKz0gSFZfVExCX0ZMVVNIX1VOSVQ7Cj4gPiArICAgICAgICB9Cj4g PiArICAgICAgICBlbHNlIGlmICggcmVtYWluICkKPiAKPiByZW1haW4gaXMgYWx3YXlzIGdvaW5n IHRvIGJlID4gMCwgc2luY2UgdGhlIGxvb3AgY29uZGl0aW9uIGlzIGVuZCA+Cj4gc3RhcnQsIGFu ZCBoZW5jZSB0aGlzIGNhbiBiZSBhIHBsYWluIGVsc2UuCgpBY2suCgo+IAo+ID4gKyAgICAgICAg ewo+ID4gKyAgICAgICAgICAgIGd2YV9saXN0W25dIHw9IChyZW1haW4gLSAxKSA+PiBQQUdFX1NI SUZUOwo+ID4gKyAgICAgICAgICAgIHN0YXJ0ID0gZW5kOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ ID4gKyAgICAgICAgbisrOwo+ID4gKyAgICB9IHdoaWxlICggc3RhcnQgPCBlbmQgKTsKPiA+ICsK PiA+ICsgICAgcmV0dXJuIG47Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1aW50NjRfdCBmbHVz aF90bGJfZXgoY29uc3QgY3B1bWFza190ICptYXNrLCBjb25zdCB2b2lkICp2YSwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKPiA+ICt7Cj4gPiAr ICAgIHN0cnVjdCBodl90bGJfZmx1c2hfZXggKmZsdXNoID0gdGhpc19jcHUoaHZfaW5wdXRfcGFn ZSk7Cj4gPiArICAgIGludCBucl9iYW5rczsKPiA+ICsgICAgdW5zaWduZWQgaW50IG1heF9ndmFz LCBvcmRlciA9IGZsYWdzICYgRkxVU0hfT1JERVJfTUFTSzsKPiA+ICsgICAgdWludDY0X3QgcmV0 Owo+ID4gKwo+ID4gKyAgICBpZiAoICFmbHVzaCB8fCBsb2NhbF9pcnFfaXNfZW5hYmxlZCgpICkK PiA+ICsgICAgewo+ID4gKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7Cj4gPiArICAgICAg ICByZXR1cm4gfjBVTEw7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKCAhKG1zX2h5cGVy di5oaW50cyAmIEhWX1g2NF9FWF9QUk9DRVNTT1JfTUFTS1NfUkVDT01NRU5ERUQpICkKPiA+ICsg ICAgICAgIHJldHVybiB+MFVMTDsKPiA+ICsKPiA+ICsgICAgZmx1c2gtPmFkZHJlc3Nfc3BhY2Ug PSAwOwo+ID4gKyAgICBmbHVzaC0+ZmxhZ3MgPSBIVl9GTFVTSF9BTExfVklSVFVBTF9BRERSRVNT X1NQQUNFUzsKPiA+ICsgICAgaWYgKCAhKGZsYWdzICYgRkxVU0hfVExCX0dMT0JBTCkgKQo+ID4g KyAgICAgICAgZmx1c2gtPmZsYWdzIHw9IEhWX0ZMVVNIX05PTl9HTE9CQUxfTUFQUElOR1NfT05M WTsKPiA+ICsKPiA+ICsgICAgbnJfYmFua3MgPSBjcHVtYXNrX3RvX3Zwc2V0KCZmbHVzaC0+aHZf dnBfc2V0LCBtYXNrKTsKPiA+ICsgICAgaWYgKCBucl9iYW5rcyA8IDAgKQo+ID4gKyAgICAgICAg cmV0dXJuIH4wVUxMOwo+IAo+IEl0IHdvdWxkIGJlIG5pY2UgdG8gcHJvcGFnYXRlIHRoZSBlcnJv ciBjb2RlIGZyb20gY3B1bWFza190b192cHNldCwKPiBidXQgc2luY2UgdGhlIGZ1bmN0aW9uIGNh biBhbHNvIHJldHVybiBIeXBlclYgZXJyb3IgY29kZXMgdGhpcyBkb2Vzbid0Cj4gbWFrZSBtdWNo IHNlbnNlLgo+IAo+ID4gKwo+ID4gKyAgICBtYXhfZ3ZhcyA9Cj4gPiArICAgICAgICAoUEFHRV9T SVpFIC0gc2l6ZW9mKCpmbHVzaCkgLSBucl9iYW5rcyAqCj4gPiArICAgICAgICAgc2l6ZW9mKGZs dXNoLT5odl92cF9zZXQuYmFua19jb250ZW50c1swXSkpIC8KPiA+ICsgICAgICAgIHNpemVvZih1 aW50NjRfdCk7ICAgICAgIC8qIGd2YSBpcyByZXByZXNlbnRlZCBhcyB1aW50NjRfdCAqLwo+ID4g Kwo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBGbHVzaCB0aGUgZW50aXJlIGFkZHJlc3Mgc3BhY2Ug aWYgdmEgaXMgTlVMTCBvciBpZiB0aGVyZSBpcyBub3QKPiA+ICsgICAgICogZW5vdWdoIHNwYWNl IGZvciBndmFfbGlzdC4KPiA+ICsgICAgICovCj4gPiArICAgIGlmICggIXZhIHx8IChQQUdFX1NJ WkUgPDwgb3JkZXIpIC8gSFZfVExCX0ZMVVNIX1VOSVQgPiBtYXhfZ3ZhcyApCj4gPiArICAgICAg ICByZXQgPSBodl9kb19yZXBfaHlwZXJjYWxsKEhWQ0FMTF9GTFVTSF9WSVJUVUFMX0FERFJFU1Nf U1BBQ0VfRVgsIDAsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yX2Jh bmtzLCB2aXJ0X3RvX21hZGRyKGZsdXNoKSwgMCk7Cj4gCj4gWW91IGNvdWxkIGp1c3QgcmV0dXJu IGh2X2RvX3JlcF9oeXBlcmNhbGwoLi4uKTsgaGVyZSwgd2hpY2ggd2lsbCBhdm9pZAo+IHRoZSBl bHNlIGJyYW5jaCBiZWxvdyBhbmQgdGhlIGluZGVudGF0aW9uLgoKQWNrLgoKPiAKPiA+ICsgICAg ZWxzZQo+ID4gKyAgICB7Cj4gPiArICAgICAgICB1aW50NjRfdCAqZ3ZhX2xpc3QgPQo+ID4gKyAg ICAgICAgICAgICh1aW50NjRfdCAqKWZsdXNoICsgc2l6ZW9mKCpmbHVzaCkgLyBzaXplb2YodWlu dDY0X3QpICsgbnJfYmFua3M7Cj4gPiArICAgICAgICB1bnNpZ25lZCBpbnQgZ3ZhcyA9IGZpbGxf Z3ZhX2xpc3QoZ3ZhX2xpc3QsIHZhLCBvcmRlcik7Cj4gPiArCj4gPiArICAgICAgICBCVUlMRF9C VUdfT04oc2l6ZW9mKCpmbHVzaCkgJSBzaXplb2YodWludDY0X3QpKTsKPiA+ICsKPiA+ICsgICAg ICAgIHJldCA9IGh2X2RvX3JlcF9oeXBlcmNhbGwoSFZDQUxMX0ZMVVNIX1ZJUlRVQUxfQUREUkVT U19MSVNUX0VYLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndmFzLCBu cl9iYW5rcywgdmlydF90b19tYWRkcihmbHVzaCksIDApOwo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gIGludCBoeXBlcnZfZmx1c2hfdGxiKGNv bnN0IGNwdW1hc2tfdCAqbWFzaywgY29uc3Qgdm9pZCAqdmEsCj4gPiAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQo+ID4gIHsKPiA+IC0gICAgcmV0dXJuIC1FT1BOT1RT VVBQOwo+ID4gKyAgICB1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKPiA+ICsgICAgc3RydWN0IGh2 X3RsYl9mbHVzaCAqZmx1c2ggPSB0aGlzX2NwdShodl9pbnB1dF9wYWdlKTsKPiA+ICsgICAgdW5z aWduZWQgaW50IG1heF9ndmFzLCBvcmRlciA9IGZsYWdzICYgRkxVU0hfT1JERVJfTUFTSzsKPiA+ ICsgICAgdWludDY0X3QgcmV0Owo+ID4gKwo+ID4gKyAgICBBU1NFUlQoZmx1c2gpOwo+ID4gKyAg ICBBU1NFUlQoIWNwdW1hc2tfZW1wdHkobWFzaykpOwo+IAo+IEkgd291bGQgYWxzbyB0dXJuIHRo aXMgaW50byBhbiBpZiAoIC4uLiApIHsgQVNTRVJUOyByZXR1cm4gLUVGT087IH0KCkFjay4KCj4g Cj4gPiArCj4gPiArICAgIGxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Cj4gPiArCj4gPiArICAg IGZsdXNoLT5hZGRyZXNzX3NwYWNlID0gMDsKPiA+ICsgICAgZmx1c2gtPmZsYWdzID0gSFZfRkxV U0hfQUxMX1ZJUlRVQUxfQUREUkVTU19TUEFDRVM7Cj4gPiArICAgIGZsdXNoLT5wcm9jZXNzb3Jf bWFzayA9IDA7Cj4gPiArICAgIGlmICggIShmbGFncyAmIEZMVVNIX1RMQl9HTE9CQUwpICkKPiA+ ICsgICAgICAgIGZsdXNoLT5mbGFncyB8PSBIVl9GTFVTSF9OT05fR0xPQkFMX01BUFBJTkdTX09O TFk7Cj4gPiArCj4gPiArICAgIGlmICggY3B1bWFza19lcXVhbChtYXNrLCAmY3B1X29ubGluZV9t YXApICkKPiA+ICsgICAgICAgIGZsdXNoLT5mbGFncyB8PSBIVl9GTFVTSF9BTExfUFJPQ0VTU09S UzsKPiA+ICsgICAgZWxzZQo+ID4gKyAgICB7Cj4gPiArICAgICAgICB1bnNpZ25lZCBpbnQgY3B1 Owo+ID4gKwo+ID4gKyAgICAgICAgLyoKPiA+ICsgICAgICAgICAqIE5vcm1hbGx5IFZQIGluZGlj ZXMgYXJlIGluIGFzY2VuZGluZyBvcmRlciBhbmQgbWF0Y2ggWGVuJ3MKPiA+ICsgICAgICAgICAq IGlkZWEgb2YgQ1BVIGlkcy4gQ2hlY2sgdGhlIGxhc3QgaW5kZXggdG8gc2VlIGlmIFZQIGluZGV4 IGlzCj4gPiArICAgICAgICAgKiA+PSA2NC4gSWYgc28sIHdlIGNhbiBza2lwIHNldHRpbmcgdXAg cGFyYW1ldGVycyBmb3IKPiA+ICsgICAgICAgICAqIG5vbi1hcHBsaWNhYmxlIGh5cGVyY2FsbHMg d2l0aG91dCBsb29raW5nIGZ1cnRoZXIuCj4gPiArICAgICAgICAgKi8KPiA+ICsgICAgICAgIGlm ICggaHZfdnBfaW5kZXgoY3B1bWFza19sYXN0KG1hc2spKSA+PSA2NCApCj4gPiArICAgICAgICAg ICAgZ290byBkb19leF9oeXBlcmNhbGw7Cj4gPiArCj4gPiArICAgICAgICBmb3JfZWFjaF9jcHUg KCBjcHUsIG1hc2sgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIHVpbnQzMl90IHZw aWQgPSBodl92cF9pbmRleChjcHUpOwo+IAo+IFRoaXMgc2hvdWxkIGJlIHVuc2lnbmVkIGludCBu b3cuCgpHb29kIGNhdGNoLgoKPiAKPiA+ICsKPiA+ICsgICAgICAgICAgICBpZiAoIHZwaWQgPiBt c19oeXBlcnYubWF4X3ZwX2luZGV4ICkKPiA+ICsgICAgICAgICAgICB7Cj4gPiArICAgICAgICAg ICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Cj4gPiArICAgICAgICAgICAgICAg IHJldHVybiAtRU5YSU87Cj4gPiArICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAg IGlmICggdnBpZCA+PSA2NCApCj4gPiArICAgICAgICAgICAgICAgIGdvdG8gZG9fZXhfaHlwZXJj YWxsOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIF9fc2V0X2JpdCh2cGlkLCAmZmx1c2gtPnByb2Nl c3Nvcl9tYXNrKTsKPiA+ICsgICAgICAgIH0KPiAKPiBXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIGFi c3RyYWN0IHRoaXMgYXMgY3B1bWFza190b19wcm9jZXNzb3JfbWFzaywKPiBzaW5jZSB5b3UgYXJl IGFkZGluZyBjcHVtYXNrX3RvX3Zwc2V0IGJlbG93Lgo+IAoKVGhlcmUgaXMgb25seSBvbmUgdXNh Z2Ugc28gZmFyLCBzbyBJIGRvbid0IHRoaW5rIGl0IGlzIG5lY2Vzc2FyeS4KCj4gPiArICAgIH0K PiA+ICsKPiA+ICsgICAgbWF4X2d2YXMgPSAoUEFHRV9TSVpFIC0gc2l6ZW9mKCpmbHVzaCkpIC8g c2l6ZW9mKGZsdXNoLT5ndmFfbGlzdFswXSk7Cj4gCj4gWW91IGNvdWxkIGluaXQgdGhpcyBhdCBk ZWNsYXJhdGlvbiwgYW5kIG1ha2UgaXQgY29uc3Qgc3RhdGljIHNpbmNlIHRoZQo+IHZhbHVlIGNh biBiZSBjYWxjdWxhdGVkIGF0IGNvbXBpbGUgdGltZSBBRkFJQ1QuIE9yIGNyZWF0ZSBhIGRlZmlu ZQo+IHdpdGggaXQgKEhWX1RMQl9GTFVTSF9NQVhfR1ZBUz8pLiBUaGVyZSdzIG5vIG5lZWQgdG8g c3RvcmUgaXQgb24gdGhlCj4gc3RhY2suCgpJIGNhbiBpbnRyb2R1Y2UgYSBkZWZpbmUsIGJ1dCB0 aGUgbmFtZSB5b3Ugc3VnZ2VzdGVkIGlzIHRvbyBnZW5lcmljLiBJZiB0aGVyZQppcyB2YXJpYWJs ZSBzaXplZCBoZWFkZXIsIHRoZSBjYWxjdWxhdGlvbiBpcyBnb2luZyB0byBiZSBkaWZmZXJlbnQu Cgo+IAo+ID4gKwo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBGbHVzaCB0aGUgZW50aXJlIGFkZHJl c3Mgc3BhY2UgaWYgdmEgaXMgTlVMTCBvciBpZiB0aGVyZSBpcyBub3QKPiA+ICsgICAgICogZW5v dWdoIHNwYWNlIGZvciBndmFfbGlzdC4KPiA+ICsgICAgICovCj4gPiArICAgIGlmICggIXZhIHx8 IChQQUdFX1NJWkUgPDwgb3JkZXIpIC8gSFZfVExCX0ZMVVNIX1VOSVQgPiBtYXhfZ3ZhcyApCj4g PiArICAgICAgICByZXQgPSBodl9kb19oeXBlcmNhbGwoSFZDQUxMX0ZMVVNIX1ZJUlRVQUxfQURE UkVTU19TUEFDRSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0X3RvX21h ZGRyKGZsdXNoKSwgMCk7Cj4gPiArICAgIGVsc2UKPiA+ICsgICAgewo+ID4gKyAgICAgICAgdW5z aWduZWQgaW50IGd2YXMgPSBmaWxsX2d2YV9saXN0KGZsdXNoLT5ndmFfbGlzdCwgdmEsIG9yZGVy KTsKPiAKPiBObyBuZWVkIGZvciB0aGUgZ3ZhcyB2YXJpYWJsZSwgeW91IGNhbiBqdXN0IGNhbGwg ZmlsbF9ndmFfbGlzdCBhdAo+IGh2X2RvX3JlcF9oeXBlcmNhbGwuCj4gCgpTdXJlLgoKPiA+ICsK PiA+ICsgICAgICAgIHJldCA9IGh2X2RvX3JlcF9oeXBlcmNhbGwoSFZDQUxMX0ZMVVNIX1ZJUlRV QUxfQUREUkVTU19MSVNULCBndmFzLCAwLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2aXJ0X3RvX21hZGRyKGZsdXNoKSwgMCk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsg ICAgZ290byBkb25lOwo+ID4gKwo+ID4gKyBkb19leF9oeXBlcmNhbGw6Cj4gPiArICAgIHJldCA9 IGZsdXNoX3RsYl9leChtYXNrLCB2YSwgZmxhZ3MpOwo+ID4gKwo+ID4gKyBkb25lOgo+ID4gKyAg ICBsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gcmV0 ICYgSFZfSFlQRVJDQUxMX1JFU1VMVF9NQVNLID8gLUVOWElPIDogMDsKPiA+ICB9Cj4gPiAgCj4g PiAgLyoKPiA+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZ3Vlc3QvaHlwZXJ2L3V0aWwuYyBi L3hlbi9hcmNoL3g4Ni9ndWVzdC9oeXBlcnYvdXRpbC5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gaW5kZXggMDAwMDAwMDAwMC4uZTA5MjU5Mzc0Ngo+ID4gLS0tIC9kZXYvbnVsbAo+ID4g KysrIGIveGVuL2FyY2gveDg2L2d1ZXN0L2h5cGVydi91dGlsLmMKPiA+IEBAIC0wLDAgKzEsNzQg QEAKPiA+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gPiArICogYXJjaC94ODYvZ3Vlc3QvaHlw ZXJ2L3V0aWwuYwo+ID4gKyAqCj4gPiArICogSHlwZXItViB1dGlsaXR5IGZ1bmN0aW9ucwo+ID4g KyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiA+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ID4gKyAqIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yCj4gPiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiA+ICsgKgo+ ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICoKPiA+ICsgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQo+ID4gKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4gPiArICoKPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MjAgTWljcm9zb2Z0Lgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDx4ZW4vY3B1Lmg+Cj4g PiArI2luY2x1ZGUgPHhlbi9jcHVtYXNrLmg+Cj4gPiArI2luY2x1ZGUgPHhlbi9lcnJuby5oPgo+ ID4gKwo+ID4gKyNpbmNsdWRlIDxhc20vZ3Vlc3QvaHlwZXJ2Lmg+Cj4gPiArI2luY2x1ZGUgPGFz bS9ndWVzdC9oeXBlcnYtdGxmcy5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJwcml2YXRlLmgiCj4g PiArCj4gPiAraW50IGNwdW1hc2tfdG9fdnBzZXQoc3RydWN0IGh2X3Zwc2V0ICp2cHNldCwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcHVtYXNrX3QgKm1hc2spCj4gPiArewo+ID4g KyAgICBpbnQgbnIgPSAxOwo+ID4gKyAgICB1bnNpZ25lZCBpbnQgY3B1LCB2Y3B1X2JhbmssIHZj cHVfb2Zmc2V0Owo+ID4gKyAgICB1bnNpZ25lZCBpbnQgbWF4X2JhbmtzID0gbXNfaHlwZXJ2Lm1h eF92cF9pbmRleCAvIDY0Owo+ID4gKwo+ID4gKyAgICAvKiBVcCB0byA2NCBiYW5rcyBjYW4gYmUg cmVwcmVzZW50ZWQgYnkgdmFsaWRfYmFua19tYXNrICovCj4gPiArICAgIGlmICggbWF4X2Jhbmtz ID49IDY0ICkKPiA+ICsgICAgICAgIHJldHVybiAtRTJCSUc7Cj4gPiArCj4gPiArICAgIC8qIENs ZWFyIGFsbCBiYW5rcyB0byBhdm9pZCBmbHVzaGluZyB1bndhbnRlZCBDUFVzICovCj4gPiArICAg IGZvciAoIHZjcHVfYmFuayA9IDA7IHZjcHVfYmFuayA8PSBtYXhfYmFua3M7IHZjcHVfYmFuaysr ICkKPiAKPiBJIHRoaW5rIHRoaXMgaXMgb2ZmIGJ5IG9uZSBhbmQgc2hvdWxkIGJlIHZjcHVfYmFu ayA8IG1heF9iYW5rcz8gT3IKPiBlbHNlIHlvdSBhcmUgY2xlYXJpbmcgb25lIGV4dHJhIGJhbmsu CgpJZiBtYXhfdnBfaW5kZXggd2VyZSB0aGUgbWF4aW11bSB2cCBpbmRleCwgbWF4X2JhbmtzIHdv dWxkIGJlIGluY2x1c2l2ZQooZm9yIGV4YW1wbGUsIG1heF92cF9pbmRleCBpcyA2MywgNjMvNjQ9 MCkuICBUaGUgY29kZSBzaG91bGQgYmUgY29ycmVjdAppbiB0aGF0IGNhc2UuCgpIb3dldmVyLCB3 aGVuIEkgZGlkIGFub3RoZXIgcm91bmQgb2Ygc2VsZi1yZXZpZXcsIEkgZGlzY292ZXJlZCB0aGF0 CnRoZSB2YWx1ZSBzdG9yZWQgaW4gbWF4X3ZwX2luZGV4IHdhcyBhY3R1YWxseSAidGhlIG1heGlt dW0gbnVtYmVyIG9mCnZpcnR1YWwgcHJvY2Vzc29ycyBzdXBwb3J0ZWQiLCBzbyBpdCB3YXNuJ3Qg cmVhbGx5IHRoZSBtYXhpbXVtIGluZGV4LgoKVGhpcyBtZWFucyBJIHdpbGwgbmVlZCB0byBhZGp1 c3QgcGxhY2VzIHdoZXJlIG1heF92cF9pbmRleCBpcyB1c2VkLgoKSGVyZSwgbWF4X2JhbmtzIGlz IG5vdCBpbmNsdXNpdmUgYW55bW9yZS4KCkFuZCBhbiBlYXJsaWVyIHBsYWNlCgogKyAgICAgICAg ICAgIGlmICggdnBpZCA+IG1zX2h5cGVydi5tYXhfdnBfaW5kZXggKQogKyAgICAgICAgICAgIHsK CmFsc28gcmVxdWlyZXMgZml4aW5nLgoKSSB3aWxsIGFsc28gc2VlIGFib3V0IGNoYW5naW5nIG1h eF97bCx2fXBfaW5kZXggdG8gbW9yZSBzZW5zaWJsZSBuYW1lcwpvciBhZGQgc29tZSBjb21tZW50 cyB0byB0aGVpciBkZWZpbml0aW9ucy4KCldlaS4KCj4gCj4gVGhhbmtzLCBSb2dlci4KCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=