From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 01/10] xen/arm: vpl011: Add pl011 uart emulation in Xen Date: Wed, 19 Apr 2017 11:40:06 -0700 (PDT) Message-ID: References: <1491212673-13476-1-git-send-email-bhupinder.thakur@linaro.org> <1491212673-13476-2-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d0uWU-0000bE-Bf for xen-devel@lists.xenproject.org; Wed, 19 Apr 2017 18:40:14 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Bhupinder Thakur Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAxOSBBcHIgMjAxNywgQmh1cGluZGVyIFRoYWt1ciB3cm90ZToKPiBIaSBTdGVmYW5v LAo+IAo+IFRoYW5rcyBmb3IgeW91ciBjb21tZW50cy4KPiAKPiBPbiAxOSBBcHJpbCAyMDE3IGF0 IDA1OjQ1LCBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+IHdyb3Rl Ogo+ID4+ICtzdGF0aWMgdm9pZCB2cGwwMTFfcmVhZF9kYXRhKHN0cnVjdCBkb21haW4gKmQsIHVp bnQ4X3QgKmRhdGEpCj4gPj4gK3sKPiA+PiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPj4g KyAgICBzdHJ1Y3QgdnBsMDExX3MgKnZwbDAxMT0mZC0+YXJjaC52cGwwMTE7Cj4gPgo+ID4gVGhl IGNvZGUgc3R5bGUgaXM6Cj4gPgo+ID4gICAgIHZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMQo+ID4K PiA+Cj4gPj4gKyAgICBzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGY9KHN0cnVjdCB4ZW5j b25zX2ludGVyZmFjZSAqKXZwbDAxMS0+cmluZ19idWY7Cj4gPgo+ID4gU2FtZSBoZXJlLiBQbGVh c2UgZml4IGl0IGV2ZXJ5d2hlcmUuCj4gPgo+IEkgd2lsbCBmaXggdGhlIGNvZGluZyBzdHlsZSBo ZXJlLgo+IAo+ID4KPiA+PiArICAgIC8qCj4gPj4gKyAgICAgKiBJbml0aWFsaXplIHRoZSBkYXRh IHNvIHRoYXQgZXZlbiBpZiB0aGVyZSBpcyBubyBkYXRhIGluIHJpbmcgYnVmZmVyCj4gPj4gKyAg ICAgKiAwIGlzIHJldHVybmVkLgo+ID4+ICsgICAgICovCj4gPj4gKyAgICAqZGF0YSA9IDA7Cj4g Pj4gKwo+ID4+ICsgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ID4+ICsKPiA+PiArICAgIC8q Cj4gPj4gKyAgICAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZXJlIHdpbGwgYmUgZGF0YSBpbiB0 aGUgcmluZyBidWZmZXIgd2hlbiB0aGlzCj4gPj4gKyAgICAgKiBmdW5jdGlvbiBpcyBjYWxsZWQg c2luY2UgdGhlIGd1ZXN0IGlzIGV4cGVjdGVkIHRvIHJlYWQgdGhlIGRhdGEgcmVnaXN0ZXIKPiA+ PiArICAgICAqIG9ubHkgaWYgdGhlIFRYRkUgZmxhZyBpcyBub3Qgc2V0Lgo+ID4+ICsgICAgICog SWYgdGhlIGd1ZXN0IHN0aWxsIGRvZXMgcmVhZCBldmVudCB3aGVuIFRYRkUgYml0IGlzIHNldCB0 aGVuIDAgd2lsbAo+ID4+ICsgICAgICogYmUgcmV0dXJuZWQuCj4gPj4gKyAgICAgKi8KPiA+PiAr ICAgIGlmICggIVZQTDAxMV9JTl9SSU5HX0VNUFRZKGludGYpICkKPiA+PiArICAgIHsKPiA+PiAr ICAgICAgICAqZGF0YSA9IGludGYtPmluW01BU0tfWEVOQ09OU19JRFgoaW50Zi0+aW5fY29ucysr LCBpbnRmLT5pbildOwo+ID4KPiA+IEZvciBjb3JyZWN0bmVzcywgaXQgaXMgaW1wb3J0YW50IHRv IG1haW50YWluIHRoZSByaWdodCBvcmRlcmluZyBhbmQgdXNlCj4gPiBiYXJyaWVyczoKPiA+Cj4g PiAgICAgICAgIGluX2NvbnMgPSBpbnRmLT5pbl9jb25zOwo+ID4gICAgICAgICAqZGF0YSA9IGlu dGYtPmluW01BU0tfWEVOQ09OU19JRFgoaW5fY29ucywgaW50Zi0+aW4pXTsKPiA+ICAgICAgICAg c21iX21iKCk7Cj4gPiAgICAgICAgIGludGYtPmluX2NvbnMgPSBpbl9jb25zICsgMTsKPiA+Cj4g Pgo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIGlmICggVlBMMDExX0lOX1JJTkdfRU1QVFko aW50ZikgKQo+ID4+ICsgICAgewo+ID4+ICsgICAgICAgIHZwbDAxMS0+dWFydGZyIHw9IChSWEZF KTsKPiA+PiArICAgICAgICB2cGwwMTEtPnVhcnRyaXMgJj0gfihSWEkpOwo+ID4+ICsgICAgfQo+ ID4+ICsKPiA+PiArICAgIHZwbDAxMS0+dWFydGZyICY9IH4oUlhGRik7Cj4gPj4gKwo+ID4+ICsg ICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4gPgo+ID4gSSB0aGluayB3ZSBuZWVkIHRvIG5v dGlmeSB4ZW5jb25zb2xlZCBoZXJlLCBpbiBjYXNlIHRoZSByaW5nIHdhcwo+ID4gcHJldmlvc3Vs eSBmdWxsPyBOb3cgdGhhdCB3ZSBoYXZlIHJlYWQgc29tZSBkYXRhLCB4ZW5jb25zb2xlZCBjYW4g Z28KPiA+IGJhY2sgYW5kIHdyaXRlIG1vcmUuCj4gPgo+IFllcyB0aGlzIGlzIGEgdmFsaWQgcG9p bnQuIEkgd2lsbCBzZW5kIGFuIGV2ZW50IGhlcmUuCj4gCj4gPgo+ID4+ICt9Cj4gPj4gKwo+ID4+ ICtzdGF0aWMgdm9pZCB2cGwwMTFfd3JpdGVfZGF0YShzdHJ1Y3QgZG9tYWluICpkLCB1aW50OF90 IGRhdGEpCj4gPj4gK3sKPiA+PiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPj4gKyAgICBz dHJ1Y3QgdnBsMDExX3MgKnZwbDAxMT0mZC0+YXJjaC52cGwwMTE7Cj4gPj4gKyAgICBzdHJ1Y3Qg eGVuY29uc19pbnRlcmZhY2UgKmludGY9KHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqKXZwbDAx MS0+cmluZ19idWY7Cj4gPj4gKwo+ID4+ICsgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+ID4+ ICsKPiA+PiArICAgIC8qCj4gPj4gKyAgICAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSByaW5n IGlzIG5vdCBmdWxsIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKPiA+PiArICAgICAqIGFz IHRoZSBndWVzdCBpcyBleHBlY3RlZCB0byB3cml0ZSB0byB0aGUgZGF0YSByZWdpc3RlciBvbmx5 IHdoZW4gdGhlCj4gPj4gKyAgICAgKiBUWEZGIGZsYWcgaXMgbm90IHNldC4KPiA+PiArICAgICAq IEluIGNhc2UgdGhlIGd1ZXN0IGRvZXMgd3JpdGUgZXZlbiB3aGVuIHRoZSBUWEZGIGZsYWcgaXMg c2V0IHRoZW4gdGhlCj4gPj4gKyAgICAgKiBkYXRhIHdpbGwgYmUgc2lsZW50bHkgZHJvcHBlZC4K PiA+PiArICAgICAqLwo+ID4+ICsgICAgaWYgKCAhVlBMMDExX09VVF9SSU5HX0ZVTEwoaW50Zikg KQo+ID4+ICsgICAgewo+ID4+ICsgICAgICAgIGludGYtPm91dFtNQVNLX1hFTkNPTlNfSURYKGlu dGYtPm91dF9wcm9kKyssIGludGYtPm91dCldID0gZGF0YTsKPiA+PiArICAgICAgICBzbXBfd21i KCk7Cj4gPgo+ID4gU2ltaWxhcmx5LCB0aGUgb3JkZXIgc2hvdWxkIGJlOgo+ID4KPiA+ICAgICBv dXRfcHJvZCA9IGludGYtPm91dF9wcm9kOwo+ID4gICAgIGludGYtPm91dFtNQVNLX1hFTkNPTlNf SURYKG91dF9wcm9kLCBpbnRmLT5vdXQpXSA9IGRhdGE7Cj4gPiAgICAgc21iX3dtYigpOwo+ID4g ICAgIGludGYtPm91dF9wcm9kID0gb3V0X3Byb2QgKyAxOwo+ID4KPiBJIHdpbGwgdXNlIHRoZSBz dWdnZXN0ZWQgb3JkZXIuCj4gPgo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIGlmICggVlBM MDExX09VVF9SSU5HX0ZVTEwoaW50ZikgKQo+ID4+ICsgICAgewo+ID4+ICsgICAgICAgIHZwbDAx MS0+dWFydGZyIHw9IChUWEZGKTsKPiA+PiArICAgICAgICB2cGwwMTEtPnVhcnRyaXMgJj0gfihU WEkpOwo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIHZwbDAxMS0+dWFydGZyIHw9IChCVVNZ KTsKPiA+PiArCj4gPj4gKyAgICB2cGwwMTEtPnVhcnRmciAmPSB+KFRYRkUpOwo+ID4+ICsKPiA+ PiArICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOwo+ID4+ICsKPiA+PiArICAgIC8qIHJhaXNl IGFuIGV2ZW50IHRvIHhlbmNvbnNvbGVkIG9ubHkgaWYgaXQgaXMgdGhlIGZpcnN0IGNoYXJhY3Rl ciBpbiB0aGUgYnVmZmVyICovCj4gPj4gKyAgICBpZiAoIFZQTDAxMV9SSU5HX0RFUFRIKGludGYs IG91dCkgPT0gMSApCj4gPj4gKyAgICB7Cj4gPj4gKyAgICAgICAgbm90aWZ5X3ZpYV94ZW5fZXZl bnRfY2hhbm5lbChkLCBkLT5hcmNoLmh2bV9kb21haW4ucGFyYW1zW0hWTV9QQVJBTV9WQ09OU09M RV9FVlRDSE5dKTsKPiA+PiArICAgIH0KPiA+Cj4gPiBXaHkgb25seSBpbiBjYXNlIGlzIHRoZSBm aXJzdCBjaGFyYWN0ZXI/IHhlbmNvbnNvbGVkIHdpbGwgbWlzcyB1cGRhdGVzCj4gPiBpZiB3ZSBk b24ndCBzZW5kIGEgbm90aWZpY2F0aW9uLCByaWdodD8KPiA+Cj4gV2hlbmV2ZXIgeGVuY29uc29s ZWQgc2VuZHMgYW4gZXZlbnQsIHRoZSB2cGwwMTFfZGF0YV9hdmFpbCBmdW5jdGlvbgo+IHdpbGwg bWFrZSBzdXJlIHRoYXQgaWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgT1VUIHJpbmcgYnVmZmVyIHRo ZW4gaXQKPiBhZ2Fpbgo+IHNlbmRzIGFuIGV2ZW50IHRvIHhlbmNvbnNvbGVkLiBBbHNvIGl0IGF2 b2lkcyB0aGUgbmVlZCBvZiBzZW5kaW5nIGFuCj4gZXZlbnQgZm9yIGV2ZXJ5IGNoYXJhY3RlciB3 cml0dGVuIGluIHRoZSBPVVQgcmluZyBidWZmZXIuCgpXZSBkb24ndCBoYXZlIGEgZm9ybWFsIHBy b3RvY29sIHNwZWMgZm9yIFBWIGNvbnNvbGUsIGJ1dCBpZiB3ZSBoYWQsIGl0CndvdWxkIHNheSB0 aGF0IHRoZSBmcm9udGVuZCAoWGVuIGluIHRoaXMgY2FzZSkgc2hvdWxkIHNlbmQgbm90aWZpY2F0 aW9ucwpldmVyeSB0aW1lIHRoZXJlIGlzIG5ldyBkYXRhIHRvIHdyaXRlLiBUaHVzLCBvbmNlIHBl ciBjaGFyYWN0ZXIgaW4gdGhpcwpjYXNlLgoKSSB3b3VsZCBzdGFydCB3aXRoIGEgZHVtYiBpbXBs ZW1lbnRhdGlvbiBsaWtlIHRoYXQsIHNpbXBseSBub3RpZnkgdGhlCm90aGVyIGVuZCBldmVyeSB0 aW1lLiBUaGVuLCBpbiBhIHNlcGFyYXRlIHBhdGNoLCB3ZSBjYW4gY29uc2lkZXIKaW50cm9kdWNp bmcgb3B0aW1pemF0aW9ucywgd2hpY2ggbmVlZCB0byBiZSB3ZWxsIGV4cGxhaW5lZC4KCgpSZWdh cmRpbmcgdGhlIG9wdGltaXphdGlvbiB5b3UgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoLCBkZWxh eWluZyB3cml0ZQpub3RpZmljYXRpb25zIHVudGlsIHdlIHJlY2VpdmUgYSBub3RpZmljYXRpb24g ZnJvbSB4ZW5jb25zb2xlZCwgaG93IG1hbnkKbm90aWZpY2F0aW9ucyBmcm9tIHhlbiB0byB4ZW5j b25zb2xlZCBkb2VzIGl0IGFjdHVhbGx5IHNhdmU/IHhlbmNvbnNvbGVkCmlzIGdvaW5nIHRvIHNl bmQgYSBub3RpZmljYXRpb24gZm9yIGV2ZXJ5IHJlYWQ6IHdlIG1pZ2h0IGVuZCB1cCBzZW5kaW5n CnRoZSBzYW1lIG51bWJlciBvZiBub3RpZmljYXRpb25zLCBvbmx5IGRlbGF5ZWQuCgoKPiA+PiAr fQo+ID4+ICsKPiA+PiArc3RhdGljIGludCB2cGwwMTFfbW1pb19yZWFkKHN0cnVjdCB2Y3B1ICp2 LCBtbWlvX2luZm9fdCAqaW5mbywgcmVnaXN0ZXJfdCAqciwgdm9pZCAqcHJpdikKPiA+PiArewo+ ID4+ICsgICAgdWludDhfdCBjaDsKPiA+PiArICAgIHN0cnVjdCBoc3JfZGFidCBkYWJ0ID0gaW5m by0+ZGFidDsKPiA+PiArICAgIGludCB2cGwwMTFfcmVnID0gKGludCkoaW5mby0+Z3BhIC0gR1VF U1RfUEwwMTFfQkFTRSk7Cj4gPj4gKyAgICBzdHJ1Y3QgdnBsMDExX3MgKnZwbDAxMSA9ICZ2LT5k b21haW4tPmFyY2gudnBsMDExOwo+ID4+ICsKPiA+PiArICAgIHN3aXRjaCAoIHZwbDAxMV9yZWcg KQo+ID4+ICsgICAgewoKPiA+PiArICAgIGNhc2UgRFI6Cj4gPj4gKyAgICAgICAgaWYgKCAhVkFM SURfV19TSVpFKGRhYnQuc2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPiA+PiArICAgICAgICB2cGww MTFfcmVhZF9kYXRhKHYtPmRvbWFpbiwgJmNoKTsKPiA+PiArICAgICAgICAqciA9IGNoOwo+ID4+ ICsgICAgICAgIGJyZWFrOwo+ID4+ICsKPiA+PiArICAgIGNhc2UgUlNSOgo+ID4+ICsgICAgICAg IGlmICggIVZBTElEX0JXX1NJWkUoZGFidC5zaXplKSApIGdvdG8gYmFkX3dpZHRoOwo+ID4+ICsK PiA+PiArICAgICAgICAvKiBJdCBhbHdheXMgcmV0dXJucyAwIGFzIHRoZXJlIGFyZSBubyBwaHlz aWNhbCBlcnJvcnMuICovCj4gPj4gKyAgICAgICAgKnIgPSAwOwo+ID4+ICsgICAgICAgIGJyZWFr Owo+ID4+ICsKPiA+PiArICAgIGNhc2UgRlI6Cj4gPj4gKyAgICAgICAgaWYgKCAhVkFMSURfQldf U0laRShkYWJ0LnNpemUpICkgZ290byBiYWRfd2lkdGg7Cj4gPj4gKyAgICAgICAgKnIgPSAodnBs MDExLT51YXJ0ZnIgJiB2cGwwMTFfcmVnX21hc2tbZGFidC5zaXplXSk7Cj4gPj4gKyAgICAgICAg YnJlYWs7Cj4gPj4gKwo+ID4+ICsgICAgY2FzZSBSSVM6Cj4gPj4gKyAgICAgICAgaWYgKCAhVkFM SURfV19TSVpFKGRhYnQuc2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPiA+PiArICAgICAgICAqciA9 ICh2cGwwMTEtPnVhcnRyaXMgJiB2cGwwMTFfcmVnX21hc2tbZGFidC5zaXplXSk7Cj4gPj4gKyAg ICAgICAgYnJlYWs7Cj4gPj4gKwo+ID4+ICsgICAgY2FzZSBNSVM6Cj4gPj4gKyAgICAgICAgaWYg KCAhVkFMSURfV19TSVpFKGRhYnQuc2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPiA+PiArICAgICAg ICAqciA9ICh2cGwwMTEtPnVhcnRyaXMgJgo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnBsMDExLT51YXJ0aW1zYyAmIHZwbDAxMV9yZWdfbWFza1tkYWJ0LnNpemVdKTsKPiA+PiAr ICAgICAgICBicmVhazsKPiA+PiArCj4gPj4gKyAgICBjYXNlIElNU0M6Cj4gPj4gKyAgICAgICAg aWYgKCAhVkFMSURfV19TSVpFKGRhYnQuc2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPiA+PiArICAg ICAgICAqciA9ICh2cGwwMTEtPnVhcnRpbXNjICYgdnBsMDExX3JlZ19tYXNrW2RhYnQuc2l6ZV0p Owo+ID4+ICsgICAgICAgIGJyZWFrOwo+ID4+ICsKPiA+PiArICAgIGNhc2UgSUNSOgo+ID4+ICsg ICAgICAgIGlmICggIVZBTElEX1dfU0laRShkYWJ0LnNpemUpICkgZ290byBiYWRfd2lkdGg7Cj4g Pj4gKwo+ID4+ICsgICAgICAgIC8qIE9ubHkgd3JpdGUgaXMgdmFsaWQuICovCj4gPj4gKyAgICAg ICAgcmV0dXJuIDA7Cj4gPj4gKwo+ID4+ICsgICAgZGVmYXVsdDoKPiA+PiArICAgICAgICBncHJp bnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IHVuaGFuZGxlZCByZWFkIHIlZCBvZmZzZXQgJSMwOHhc biIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYWJ0LnJlZywgdnBsMDEx X3JlZyk7Cj4gPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsg ICAgcmV0dXJuIDE7Cj4gPj4gKwo+ID4+ICtiYWRfd2lkdGg6Cj4gPj4gKyAgICBncHJpbnRrKFhF TkxPR19FUlIsICJ2cGwwMTE6IGJhZCByZWFkIHdpZHRoICVkIHIlZCBvZmZzZXQgJSMwOHhcbiIs Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZGFidC5zaXplLCBkYWJ0LnJlZywgdnBsMDEx X3JlZyk7Cj4gPj4gKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25vdXMoKTsKPiA+PiArICAgIHJl dHVybiAwOwo+ID4+ICsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCB2cGwwMTFfbW1p b193cml0ZShzdHJ1Y3QgdmNwdSAqdiwgbW1pb19pbmZvX3QgKmluZm8sIHJlZ2lzdGVyX3Qgciwg dm9pZCAqcHJpdikKPiA+PiArewo+ID4+ICsgICAgdWludDhfdCBjaCA9ICgoc3RydWN0IHVhcnRk cl9yZWcgKikmciktPmRhdGE7Cj4gPj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8t PmRhYnQ7Cj4gPj4gKyAgICBpbnQgdnBsMDExX3JlZyA9IChpbnQpKGluZm8tPmdwYSAtIEdVRVNU X1BMMDExX0JBU0UpOwo+ID4+ICsgICAgc3RydWN0IHZwbDAxMV9zICp2cGwwMTEgPSAmdi0+ZG9t YWluLT5hcmNoLnZwbDAxMTsKPiA+PiArCj4gPj4gKyAgICBzd2l0Y2ggKCB2cGwwMTFfcmVnICkK PiA+PiArICAgIHsKPiA+PiArICAgIGNhc2UgRFI6Cj4gPj4gKwo+ID4+ICsgICAgICAgIGlmICgg IVZBTElEX0JXX1NJWkUoZGFidC5zaXplKSApIGdvdG8gYmFkX3dpZHRoOwo+ID4+ICsgICAgICAg IHZwbDAxMV93cml0ZV9kYXRhKHYtPmRvbWFpbiwgY2gpOwo+ID4+ICsgICAgICAgIGJyZWFrOwo+ ID4+ICsKPiA+PiArICAgIGNhc2UgUlNSOiAvKiBOb3RoaW5nIHRvIGNsZWFyLiAqLwo+ID4+ICsg ICAgICAgIGlmICggIVZBTElEX0JXX1NJWkUoZGFidC5zaXplKSApIGdvdG8gYmFkX3dpZHRoOwo+ ID4+ICsgICAgICAgIGJyZWFrOwo+ID4+ICsKPiA+PiArICAgIGNhc2UgRlI6Cj4gPj4gKyAgICAg ICAgZ290byB3cml0ZV9pZ25vcmU7Cj4gPj4gKyAgICBjYXNlIFJJUzoKPiA+PiArICAgIGNhc2Ug TUlTOgo+ID4+ICsgICAgICAgIGdvdG8gd29yZF93cml0ZV9pZ25vcmU7Cj4gPj4gKwo+ID4+ICsg ICAgY2FzZSBJTVNDOgo+ID4+ICsgICAgICAgIGlmICggIVZBTElEX1dfU0laRShkYWJ0LnNpemUp ICkgZ290byBiYWRfd2lkdGg7Cj4gPj4gKyAgICAgICAgdnBsMDExLT51YXJ0aW1zYyA9IChyICYg dnBsMDExX3JlZ19tYXNrW2RhYnQuc2l6ZV0pOwo+ID4+ICsgICAgICAgIHZnaWNfaW5qZWN0X3Zw bDAxMV9zcGkodi0+ZG9tYWluKTsKPiA+PiArICAgICAgICBicmVhazsKPiA+PiArCj4gPj4gKyAg ICBjYXNlIElDUjoKPiA+PiArICAgICAgICBpZiAoICFWQUxJRF9XX1NJWkUoZGFidC5zaXplKSAp IGdvdG8gYmFkX3dpZHRoOwo+ID4+ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyAmPSB+KHIgJiB2 cGwwMTFfcmVnX21hc2tbZGFidC5zaXplXSk7Cj4gPj4gKyAgICAgICAgdmdpY19pbmplY3RfdnBs MDExX3NwaSh2LT5kb21haW4pOwo+ID4+ICsgICAgICAgIGJyZWFrOwo+ID4+ICsKPiA+PiArICAg IGRlZmF1bHQ6Cj4gPj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiB1bmhh bmRsZWQgd3JpdGUgciVkIG9mZnNldCAlIzA4eFxuIiwKPiA+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRhYnQucmVnLCB2cGwwMTFfcmVnKTsKPiA+PiArICAgICAgICByZXR1cm4g MDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICByZXR1cm4gMTsKPiA+PiArCj4gPj4gK3dy aXRlX2lnbm9yZToKPiA+PiArICAgIGlmICggIVZBTElEX0JXX1NJWkUoZGFidC5zaXplKSApIGdv dG8gYmFkX3dpZHRoOwo+ID4+ICsgICAgcmV0dXJuIDE7Cj4gPj4gKwo+ID4+ICt3b3JkX3dyaXRl X2lnbm9yZToKPiA+PiArICAgIGlmICggIVZBTElEX1dfU0laRShkYWJ0LnNpemUpICkgZ290byBi YWRfd2lkdGg7Cj4gPj4gKyAgICByZXR1cm4gMTsKPiA+PiArCj4gPj4gK2JhZF93aWR0aDoKPiA+ PiArICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogYmFkIHdyaXRlIHdpZHRoICVkIHIl ZCBvZmZzZXQgJSMwOHhcbiIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZGFidC5zaXpl LCBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cj4gPj4gKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25v dXMoKTsKPiA+PiArICAgIHJldHVybiAwOwo+ID4+ICsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCBtbWlvX2hhbmRsZXJfb3BzIHZwbDAxMV9tbWlvX2hhbmRsZXIgPSB7 Cj4gPj4gKyAgICAucmVhZCA9IHZwbDAxMV9tbWlvX3JlYWQsCj4gPj4gKyAgICAud3JpdGUgPSB2 cGwwMTFfbW1pb193cml0ZSwKPiA+PiArfTsKPiA+PiArCj4gPj4gK2ludCB2cGwwMTFfbWFwX2d1 ZXN0X3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCkKPiA+PiArewo+ID4+ICsgICAgc3RydWN0IHZwbDAx MV9zICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7Cj4gPj4gKwo+ID4+ICsgICAgLyogTWFwIHRo ZSBndWVzdCBQRk4gdG8gWGVuIGFkZHJlc3Mgc3BhY2UuICovCj4gPj4gKyAgICByZXR1cm4gcHJl cGFyZV9yaW5nX2Zvcl9oZWxwZXIoZCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGFyYW1zW0hWTV9QQVJBTV9WQ09OU09MRV9QRk5d LAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cGwwMTEtPnJpbmdf cGFnZSwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnBsMDExLT5y aW5nX2J1Zik7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkIHZwbDAxMV9kYXRhX2F2 YWlsKHN0cnVjdCBkb21haW4gKmQpCj4gPj4gK3sKPiA+PiArICAgIHVuc2lnbmVkIGxvbmcgZmxh Z3M7Cj4gPj4gKyAgICBzdHJ1Y3QgdnBsMDExX3MgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsK PiA+PiArICAgIHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50Zj0oc3RydWN0IHhlbmNvbnNf aW50ZXJmYWNlICopdnBsMDExLT5yaW5nX2J1ZjsKPiA+PiArCj4gPj4gKyAgICBWUEwwMTFfTE9D SyhkLCBmbGFncyk7Cj4gPj4gKwo+ID4+ICsgICAgLyogVXBkYXRlIHRoZSB1YXJ0IHJ4IHN0YXRl IGlmIHRoZSBidWZmZXIgaXMgbm90IGVtcHR5LiAqLwo+ID4+ICsgICAgaWYgKCAhVlBMMDExX0lO X1JJTkdfRU1QVFkoaW50ZikgKQo+ID4+ICsgICAgewo+ID4+ICsgICAgICAgIHZwbDAxMS0+dWFy dGZyICY9IH4oUlhGRSk7Cj4gPj4gKyAgICAgICAgaWYgKCBWUEwwMTFfSU5fUklOR19GVUxMKGlu dGYpICkKPiA+PiArICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0gKFJYRkYpOwo+ID4+ICsg ICAgICAgIHZwbDAxMS0+dWFydHJpcyB8PSAoUlhJKTsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4g KyAgICAvKiBVcGRhdGUgdGhlIHVhcnQgdHggc3RhdGUgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZnVs bC4gKi8KPiA+PiArICAgIGlmICggIVZQTDAxMV9PVVRfUklOR19GVUxMKGludGYpICkKPiA+PiAr ICAgIHsKPiA+PiArICAgICAgICB2cGwwMTEtPnVhcnRmciAmPSB+KFRYRkYpOwo+ID4+ICsgICAg ICAgIHZwbDAxMS0+dWFydHJpcyB8PSAoVFhJKTsKPiA+PiArICAgICAgICBpZiAoIFZQTDAxMV9P VVRfUklOR19FTVBUWShpbnRmKSApCj4gPj4gKyAgICAgICAgewo+ID4+ICsgICAgICAgICAgICB2 cGwwMTEtPnVhcnRmciAmPSB+KEJVU1kpOwo+ID4+ICsgICAgICAgICAgICB2cGwwMTEtPnVhcnRm ciB8PSAoVFhGRSk7Cj4gPgo+ID4gSXQgaXMgbm90IGEgZ29vZCBpZGVhIHRvIGNoZWNrIHRoZSBp bnRmIHZhbHVlcyB0d2ljZTogeGVuY29uc29sZWQgbWlnaHQKPiA+IGJlIG1vZGlmeWluZyB0aGVt LCBzbyB3ZSBjYW4gZ2V0IGludG8gdGhlIHNpdHVhdGlvbiB3aGVyZSBpbnRmLT5vdXQqCj4gPiBj aGFuZ2UgaW4gYmV0d2VlbiB0aGUgdHdvIGNoZWNrcy4gUGxlYXNlIHJlYWQgb3V0X2NvbnMgYW5k IG91dF9wcm9kIG9ubHkKPiA+IG9uY2UgaW4gdGhpcyBmdW5jdGlvbi4KPiAKPiBTaW5jZSB0aGlz IGNvZGUgaXMgdW5kZXIgTE9DSywgdGhlIElOIGFuZCBPVVQgcmluZyBidWZmZXJzIHdpbGwgbm90 IGJlCj4gdXBkYXRlZCBieSB0aGUgZ3Vlc3QuIFNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZyB0 cmFuc2l0aW9ucyBhcmUKPiBydWxlZCBvdXQ6Cj4gCj4gSU4gcmluZyBidWZmZXIKPiBub24tZW1w dHkgLS0tLT4gZW1wdHkgKGFzIHRoZSByZWFkZXIgaXMgYmxvY2tlZCBkdWUgdG8gbG9jaykKPiAK PiBPVVQgcmluZyBidWZmZXIKPiBub3QtZnVsbCAtLS0tPiBmdWxsIChhcyB3cml0ZXIgaXMgYmxv Y2tlZCBkdWUgdG8gbG9jaykuCj4gCj4gU28gdGhlIGNvZGUgaW5zaWRlIHRoZSBJRiBibG9jayBy ZW1haW5zIHZhbGlkIGV2ZW4gaWYgdGhlIGJ1ZmZlciBzdGF0ZSBjaGFuZ2VzLgo+IEZvciB0aGUg SU4gcmluZyBidWZmZXIgaXQgY2FuIGdvIGZyb20gbm9uLWVtcHR5IHRvIGZ1bGwuIFNpbWlsYXJs eSBmb3IKPiBPVVQgcmluZyBidWZmZXIgaXQgY2FuIGdvIGZyb20gRlVMTCB0byBlbXB0eS4KPiAK PiBBbHNvIGNoZWNraW5nIHRoZSBsYXRlc3QgYnVmZmVyIGluZGV4IChpbnN0ZWFkIG9mIGNoZWNr aW5nIGJ1ZmZlcgo+IGluZGV4IHJlYWQgYXMgbG9jYWwgdmFyaWFibGVzKSBhbGxvd3MgdG8gdXBk YXRlIHRoZSBwbDAxMSBzdGF0ZSBhdCB0aGUKPiBlYXJsaWVzdC4KCkkgdW5kZXJzdGFuZCB0aGF0 IHRoZSBJTiBzdGF0ZSBzaG91bGRuJ3QgY2hhbmdlLiBIb3dldmVyLCBsaWtlIHlvdSBzYXksCnRo ZSBPVVQgc3RhdGUgY2FuIGNoYW5nZSBiZXR3ZWVuIHRoZSBWUEwwMTFfT1VUX1JJTkdfRlVMTCBh bmQgdGhlClZQTDAxMV9PVVRfUklOR19FTVBUWSBjaGVja3MuCgpJdCBpcyBhIGJhZCBpZGVhIHRv IHRyeSB0byB3cml0ZSBsb2NrbGVzcyBjb2RlIGFnYWluc3QgYSBwb3RlbnRpYWxseQpjaGFuZ2lu ZyBzdGF0ZS4gSXQgaXMgYWxyZWFkeSBoYXJkIGVub3VnaCB3aXRob3V0IGFkZGluZyB0aGF0CmNv bXBsZXhpdHk7IHRoZSBvdGhlciBlbmQgY2FuIGZpbmQgd2F5cyB0byBjYXVzZSBwcm9ibGVtcy4g UGxlYXNlIHRha2UKYSBzbmFwc2hvdCBvZiB0aGUgb3V0IGluZGV4ZXMgYW5kIHVzZSB0aGUgbG9j YWwgdmFyaWFibGVzLCByYXRoZXIgdGhhbgoiaW50ZiIsIHRvIGRvIHRoZSBjaGVja3MuCgoKPiA+ Cj4gPgo+ID4+ICsgICAgICAgIH0KPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBWUEwwMTFf VU5MT0NLKGQsIGZsYWdzKTsKPiA+PiArCj4gPj4gKyAgICB2Z2ljX2luamVjdF92cGwwMTFfc3Bp KGQpOwo+ID4+ICsKPiA+PiArICAgIGlmICggIVZQTDAxMV9PVVRfUklOR19FTVBUWShpbnRmKSAp Cj4gPj4gKyAgICB7Cj4gPj4gKyAgICAgICAgQVNTRVJUKCBkLT5hcmNoLmh2bV9kb21haW4ucGFy YW1zW0hWTV9QQVJBTV9WQ09OU09MRV9FVlRDSE5dICE9IDAgKTsKPiA+PiArICAgICAgICBub3Rp ZnlfdmlhX3hlbl9ldmVudF9jaGFubmVsKGQsIGQtPmFyY2guaHZtX2RvbWFpbi5wYXJhbXNbSFZN X1BBUkFNX1ZDT05TT0xFX0VWVENITl0pOwo+ID4KPiA+IFdoeSBhcmUgd2Ugc2VuZGluZyBub3Rp ZmljYXRpb25zIGF0IHRoaXMgcG9pbnQ/IFRoZSBvdXQgYnVmZmVyIGhhc24ndAo+ID4gY2hhbmdl ZCBzaW5jZSB4ZW5jb25zb2xlZCBzZW50IHRoZSBldnRjaG4gdG8gWGVuLCBzbyB4ZW5jb25zb2xl ZCBhbHJlYWR5Cj4gPiBrbm93cyBhdCB0aGlzIHBvaW50IHRoYXQgdGhlIG91dCByaW5nIGlzIG5v dCBlbXB0eS4KPiAKPiBUaGUgT1VUIGJ1ZmZlciBtYXkgYmUgZW1wdHkgd2hlbiB4ZW5jb25zb2xl ZCBzZW5kcyB0aGUgZXZlbnQuIEJ5IHRoZQo+IHRpbWUgdGhlIGV2ZW50IGlzIGhhbmRsZWQsIHRo ZSBndWVzdCBtYXkgd3JpdGUgbW9yZSBkYXRhIHRvIE9VVAo+IGJ1ZmZlci4gVGhpcyBjb25kaXRp b24gbWFrZXMgc3VyZSB0aGF0IGlmIHRoZSBPVVQgcmluZyBidWZmZXIgaXMgbm90Cj4gZW1wdHkg dGhlbiBpdCBzZW5kcyBhbiBldmVudCB0byB4ZW5jb25zb2xlZC4KCk9VVCBub3RpZmljYXRpb25z IGZyb20gWGVuIHRvIHhlbmNvbnNvbGVkIGFyZSBiZXN0IGhhbmRsZWQgd2hlcmUgd3JpdGVzCmFj dHVhbGx5IGhhcHBlbjogaW4gdnBsMDExX3dyaXRlX2RhdGEuIEkgY291bGQgYWNjZXB0IGFuIG9w dGltaXphdGlvbgpsaWtlIHRoZSBvbmUgeW91IGludHJvZHVjZWQsIGJ1dCBwbGVhc2UgZXhwbGFp biB0aGUgZGVzaWduIGFuZCB0aGUKYmVuZWZpdHMgaW4gZGV0YWlscy4KCgo+ID4KPiA+Cj4gPj4g KyAgICB9Cj4gPj4gK30KPiA+PiArCj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCB2cGwwMTFfbm90 aWZpY2F0aW9uKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBpbnQgcG9ydCkKPiA+PiArewo+ID4+ ICsgICAgdnBsMDExX2RhdGFfYXZhaWwodi0+ZG9tYWluKTsKPiA+PiArfQo+ID4+ICsKPiA+PiAr aW50IGRvbWFpbl92cGwwMTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgeGVuX2FyY2hf ZG9tYWluY29uZmlnICpjb25maWcpCj4gPj4gK3sKPiA+PiArICAgIGludCByYzsKPiA+PiArICAg IHN0cnVjdCB2cGwwMTFfcyAqdnBsMDExID0gJmQtPmFyY2gudnBsMDExOwo+ID4+ICsKPiA+PiAr ICAgIHJjID0gYWxsb2NfdW5ib3VuZF94ZW5fZXZlbnRfY2hhbm5lbChkLCAwLCBjb25maWctPmNv bnNvbGVfZG9taWQsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnBsMDExX25vdGlmaWNhdGlvbik7Cj4gPj4gKyAgICBpZiAocmMgPCAwKQo+ID4+ICsgICAg ewo+ID4+ICsgICAgICAgIHJldHVybiByYzsKPiA+PiArICAgIH0KPiA+PiArICAgIGQtPmFyY2gu aHZtX2RvbWFpbi5wYXJhbXNbSFZNX1BBUkFNX1ZDT05TT0xFX0VWVENITl0gPSByYzsKPiA+PiAr ICAgIHJjID0gdmdpY19yZXNlcnZlX3ZpcnEoZCwgR1VFU1RfVlBMMDExX1NQSSk7Cj4gPj4gKyAg ICBpZiAoICFyYyApCj4gPj4gKyAgICAgICAgcmV0dXJuIHJjOwo+ID4KPiA+IFdlIHNob3VsZCBm cmVlIHRoZSBhbGxvY2F0ZWQgZXZ0Y2huIGluIGNhc2Ugb2YgZXJyb3IgaGVyZQo+IEkgd2lsbCBm cmVlIHRoZSBldmVudCBjaGFubmVsLgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=