From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: pvops: Does PVOPS guest os support online "suspend/resume" Date: Mon, 12 Aug 2013 08:49:34 -0400 Message-ID: <20130812124934.GI2898@phenom.dumpdata.com> References: <33183CC9F5247A488A2544077AF1902080BFC3C6@szxeml538-mbx.china.huawei.com> <20130808191648.GA4513@konrad-lan.dumpdata.com> <33183CC9F5247A488A2544077AF1902081592D12@SZXEMA503-MBS.china.huawei.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <33183CC9F5247A488A2544077AF1902081592D12@SZXEMA503-MBS.china.huawei.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "Gonglei (Arei)" Cc: "ian.campbell@citrix.com" , "stefano.stabellini@eu.citrix.com" , "Zhangbo (Oscar)" , Yanqiangjun , Luonengjun , "xen-devel@lists.xen.org" , "rjw@sisk.pl" , "rshriram@cs.ubc.ca" , "Jinjian (Ken)" List-Id: xen-devel@lists.xenproject.org T24gU2F0LCBBdWcgMTAsIDIwMTMgYXQgMDg6Mjk6NDNBTSArMDAwMCwgR29uZ2xlaSAoQXJlaSkg d3JvdGU6Cj4gCj4gCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+ID4gRnJvbTogS29u cmFkIFJ6ZXN6dXRlayBXaWxrIFttYWlsdG86a29ucmFkLndpbGtAb3JhY2xlLmNvbV0KPiA+IFNl bnQ6IEZyaWRheSwgQXVndXN0IDA5LCAyMDEzIDM6MTcgQU0KPiA+IFRvOiBHb25nbGVpIChBcmVp KQo+ID4gQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnOyBaaGFuZ2JvIChPc2Nhcik7IEx1b25l bmdqdW47IEhhbndlaWRvbmcKPiA+IFN1YmplY3Q6IFJlOiBbWGVuLWRldmVsXSBwdm9wczogRG9l cyBQVk9QUyBndWVzdCBvcyBzdXBwb3J0IG9ubGluZQo+ID4gInN1c3BlbmQvcmVzdW1lIgo+ID4g Cj4gPiBPbiBUaHUsIEF1ZyAwOCwgMjAxMyBhdCAwMjoyMzowNlBNICswMDAwLCBHb25nbGVpIChB cmVpKSB3cm90ZToKPiA+ID4gSGkgYWxsLAo+ID4gPgo+ID4gPiBXaGlsZSBzdXNwZW5kIGFuZCBy ZXN1bWUgYSBQVk9QUyBndWVzdCBvcyB3aGlsZSBpdCdzIHJ1bm5pbmcsIHdlIGZvdW5kIHRoYXQK PiA+IGl0IHdvdWxkIGdldCBpdHMgYmxvY2svbmV0IGlvIHN0dWNrZWQuIEhvd2V2ZXIsIG5vbi1Q Vk9QUyBndWVzdCBvcyBoYXMgbm8gc3VjaAo+ID4gcHJvYmxlbS4KPiA+ID4KPiA+IAo+ID4gV2l0 aCB3aGF0IHZlcnNpb24gb2YgTGludXggaXMgdGhpcz8gSGF2ZSB5b3UgdHJpZWQgd2l0aCB2My4x MD8KPiAKPiBUaGFua3MgZm9yIHJlc3BvbmRpbmcuIFdlJ3ZlIHRyaWVkIGtlcm5lbCAiMy41LjAt MTcgZ2VuZXJpYyIgKHVidW50dSAxMi4xMCksIHRoZSBwcm9ibGVtIHN0aWxsIGV4aXN0cy4KClNv IHlvdSBoYXZlIG5vdCB0cmllZCB2My4xMC4gdjMuNSBpcyBhbmNpZW50IGZyb20gdGhlIHVwc3Ry ZWFtIHBlcnNwZWN0aXZlLgoKPiBBbHRob3VnaCB3ZSBhcmUgbm90IHN1cmUgYWJvdXQgdGhlIHJl c3VsdCBhYm91dCBrZXJuZWwgMy4xMCwgYnV0IHN1c3BpY2lvdXNseSBpdCB3b3VsZCBhbHNvIGhh dmUgdGhlIHNhbWUgcHJvYmxlbS4KClBvdGVudGlhbGx5LiBUaGVyZSB3ZXJlIGZpeGVzIGFkZGVk IGluIDMuNToKCmNvbW1pdCA1NjljYTViM2Y5NGNkMGIzMjk1ZWM1OTQzYWE0NTdjZjRhNGY2YTNh CkF1dGhvcjogSmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgpEYXRlOiAgIFRodSBBcHIg NSAxNjoxMDowNyAyMDEyICswMTAwCgogICAgeGVuL2dudHRhYjogYWRkIGRlZmVycmVkIGZyZWVp bmcgbG9naWMKICAgIAogICAgUmF0aGVyIHRoYW4ganVzdCBsZWFraW5nIHBhZ2VzIHRoYXQgY2Fu J3QgYmUgZnJlZWQgYXQgdGhlIHBvaW50IHdoZXJlCiAgICBhY2Nlc3MgcGVybWlzc2lvbiBmb3Ig dGhlIGJhY2tlbmQgZG9tYWluIGdldHMgcmV2b2tlZCwgcHV0IHRoZW0gb24gYQogICAgbGlzdCBh bmQgcnVuIGEgdGltZXIgdG8gKGluZnJlcXVlbnRseSkgcmV0cnkgZnJlZWluZyB0aGVtLiAoVGhp cyBjYW4KICAgIHBhcnRpY3VsYXJseSBoYXBwZW4gd2hlbiB1bmxvYWRpbmcgYSBmcm9udGVuZCBk cml2ZXIgd2hlbiBkZXZpY2VzIGFyZQogICAgc3RpbGwgcHJlc2VudCwgYW5kIHRoZSBiYWNrZW5k IHN0aWxsIGhhcyB0aGVtIGluIG5vbi1jbG9zZWQgc3RhdGUgb3IKICAgIGhhc24ndCBmaW5pc2hl ZCBjbG9zaW5nIHRoZW0geWV0LikKICAgIAphbmQgdGhhdCBzZWVtcyB0byBiZSB0cmlnZ2VyZWQu Cj4gCj4gWGVuIHZlcnNpb246ICA0LjMuMAo+IAo+IEFub3RoZXIgbWV0aG9kIHRvIHJlcHJvZHVj ZToKPiAxKSB4bCBjcmVhdGUgZG9tMS5jZmcKPiAyKSB4bCBzYXZlIC1jIGRvbTEgL3BhdGgvdG8v c2F2ZS9maWxlCj4gICAgKC1jICBMZWF2ZSBkb21haW4gcnVubmluZyBhZnRlciBjcmVhdGluZyB0 aGUgc25hcHNob3QuKQo+IAo+IEFzIEkgbWVudGlvbmVkIGJlZm9yZSwgdGhlIHByb2JsZW0gb2Nj dXJzIGJlY2F1c2UgUFZPUFMgZ3Vlc3Qgb3MgUkVTVU1FZXMgYmxrZnJvbnQgd2hlbiB0aGUgZ3Vl c3QgcmVzdW1lcy4gCj4gVGhlICJibGtmcm9udF9yZXN1bWUiIG1ldGhvZCBzZWVtcyB1bm5lY2Vz c2FyeSBoZXJlLiAKCkl0IGhhcyB0byBkbyB0aGF0IG90aGVyd2lzZSBpdCBjYW4ndCByZXBsYXkg dGhlIEkvT3MgdGhhdCBtaWdodCBub3QgaGF2ZQpoaXQgdGhlIHBsYXR0ZXIgd2hlbiBpdCBtaWdy YXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBob3N0LgoKQnV0IHlvdSBhcmUgZXhlcmNpc2luZyB0aGUg Y2FzZSB3aGVyZSBpdCBkb2VzIGEgY2hlY2twb2ludCwKbm90IGEgZnVsbCBzYXZlL3Jlc3RvcmUg Y3ljbGUuCgpJbiB3aGljaCBjYXNlIHlvdSBtaWdodCBiZSBpbmRlZWQgaGl0dGluZyBhIGJ1Zy4K Cj4gbm9uLVBWT1BTIGd1ZXN0IG9zIGRvZXNuJ3QgUkVTVU1FIGJsa2Zyb250LCB0aHVzIHRoZXkg d29ya3MgZmluZS4KClBvdGVudGlhbGx5LiBUaGUgbm9uLVBWT1BTIGd1ZXN0cyBhcmUgYmFzZWQg b24gYW4gYW5jaWVudCBrZXJuZWxzIGFuZAp0aGUgdXBzdHJlYW0gbG9naWMgaW4gdGhlIGdlbmVy aWMgc3VzcGVuZC9yZXN1bWUgbWFjaGluZXJ5IGhhcyBhbHNvCmNoYW5nZWQuCgo+IAo+IFNvLCBo ZXJlIGNvbWVzIHRoZSAyIHF1ZXN0aW9ucywgaXMgdGhlIHByb2JsZW0gY2F1c2VkIGJlY2F1c2U6 IAo+IDEpIFBWT1BTIGtlcm5lbCBkb2Vzbid0IHRha2UgdGhpcyBzaXR1YXRpb24gaW50byBhY2Nv bnQsIGFuZCBoYXMgYSBidWcgaGVyZT8KPiBvcgo+IDIpIFBWT1BTIGhhcyBvdGhlciB3YXlzIHRv IGF2b2lkIHN1Y2ggcHJvYmxlbT8KCkp1c3QgdG8gbWFrZSBzdXJlIEkgYW0gbm90IGNvbmZ1c2Vk IGhlcmUuIFRoZSBwcm9ibGVtIGRvZXMgbm90CmFwcGVhciBpZiB5b3UgZG8gTk9UIHVzZSAtYywg Y29ycmVjdD8KCj4gCj4gLUdvbmdsZWkKPiA+IAo+ID4gVGhhbmtzLgo+ID4gPiBIb3cgcmVwcm9k dWNpYmxlOgo+ID4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+IDEvMQo+ID4gPgo+ID4gPiBT dGVwcyB0byByZXByb2R1Y2U6Cj4gPiA+IC0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gPiAgIDEpc3Vz cGVuZCBndWVzdCBvcwo+ID4gPiAgICAgTm90ZTogZG8gbm90IG1pZ3JhdGUvc2h1dGRvd24gdGhl IGd1ZXN0IG9zLgo+ID4gPiAgIDIpcmVzdW1lIGd1ZXN0IG9zCj4gPiA+Cj4gPiA+IChUaGluayBh Ym91dCByb2xsaW5nLWJhY2socmVzdW1lKSBkdXJpbmcgY29yZS1kdW1waW5nKHN1c3BlbmQpIGEg Z3Vlc3QsCj4gPiBzdWNoIHByb2JsZW0gd291bGQgY2F1c2UgdGhlIGd1ZXN0IG9zIHVub3ByYXRp b25hYmxlLikKPiA+ID4KPiA+ID4KPiA+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ID09PT0KPiA+ID4gd2UgZm91bmQg d2FybmluZyBtZXNzYWdlcyBpbiBndWVzdCBvczoKPiA+ID4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gQXVn ICAyIDEwOjE3OjM0IGxvY2FsaG9zdCBrZXJuZWw6IFszODU5Mi45ODUxNTldIHBsYXRmb3JtIHBj c3BrcjogcmVzdW1lCj4gPiA+IEF1ZyAgMiAxMDoxNzozNCBsb2NhbGhvc3Qga2VybmVsOiBbMzg1 OTIuOTg5ODkwXSBwbGF0Zm9ybSB2ZXNhZmIuMDogcmVzdW1lCj4gPiA+IEF1ZyAgMiAxMDoxNzoz NCBsb2NhbGhvc3Qga2VybmVsOiBbMzg1OTIuOTk2MDc1XSBpbnB1dCBpbnB1dDA6IHR5cGUgcmVz dW1lCj4gPiA+IEF1ZyAgMiAxMDoxNzozNCBsb2NhbGhvc3Qga2VybmVsOiBbMzg1OTMuMDAxMzMw XSBpbnB1dCBpbnB1dDE6IHR5cGUgcmVzdW1lCj4gPiA+IEF1ZyAgMiAxMDoxNzozNCBsb2NhbGhv c3Qga2VybmVsOiBbMzg1OTMuMDA1NDk2XSB2YmQgdmJkLTUxNzEyOiBsZWdhY3kKPiA+IHJlc3Vt ZQo+ID4gPiBBdWcgIDIgMTA6MTc6MzQgbG9jYWxob3N0IGtlcm5lbDogWzM4NTkzLjAxMTUwNl0g V0FSTklORzogZy5lLiBzdGlsbCBpbiB1c2UhCj4gPiA+IEF1ZyAgMiAxMDoxNzozNCBsb2NhbGhv c3Qga2VybmVsOiBbMzg1OTMuMDE2OTA5XSBXQVJOSU5HOiBsZWFraW5nIGcuZS4KPiA+IGFuZCBw YWdlIHN0aWxsIGluIHVzZSEKPiA+ID4gQXVnICAyIDEwOjE3OjM0IGxvY2FsaG9zdCBrZXJuZWw6 IFszODU5My4wMjYyMDRdIHhlbiB2YmQtNTE3NjA6IGxlZ2FjeQo+ID4gcmVzdW1lCj4gPiA+IEF1 ZyAgMiAxMDoxNzozNCBsb2NhbGhvc3Qga2VybmVsOiBbMzg1OTMuMDMzMDcwXSB2aWYgdmlmLTA6 IGxlZ2FjeSByZXN1bWUKPiA+ID4gQXVnICAyIDEwOjE3OjM0IGxvY2FsaG9zdCBrZXJuZWw6IFsz ODU5My4wMzkzMjddIFdBUk5JTkc6IGcuZS4gc3RpbGwgaW4gdXNlIQo+ID4gPiBBdWcgIDIgMTA6 MTc6MzQgbG9jYWxob3N0IGtlcm5lbDogWzM4NTkzLjA0NTMwNF0gV0FSTklORzogbGVha2luZyBn LmUuCj4gPiBhbmQgcGFnZSBzdGlsbCBpbiB1c2UhCj4gPiA+IEF1ZyAgMiAxMDoxNzozNCBsb2Nh bGhvc3Qga2VybmVsOiBbMzg1OTMuMDUyMTAxXSBXQVJOSU5HOiBnLmUuIHN0aWxsIGluIHVzZSEK PiA+ID4gQXVnICAyIDEwOjE3OjM0IGxvY2FsaG9zdCBrZXJuZWw6IFszODU5My4wNTc5NjVdIFdB Uk5JTkc6IGxlYWtpbmcgZy5lLgo+ID4gYW5kIHBhZ2Ugc3RpbGwgaW4gdXNlIQo+ID4gPiBBdWcg IDIgMTA6MTc6MzQgbG9jYWxob3N0IGtlcm5lbDogWzM4NTkzLjA2Njc5NV0gc2VyaWFsODI1MCBz ZXJpYWw4MjUwOgo+ID4gcmVzdW1lCj4gPiA+IEF1ZyAgMiAxMDoxNzozNCBsb2NhbGhvc3Qga2Vy bmVsOiBbMzg1OTMuMDczNTU2XSBpbnB1dCBpbnB1dDI6IHR5cGUgcmVzdW1lCj4gPiA+IEF1ZyAg MiAxMDoxNzozNCBsb2NhbGhvc3Qga2VybmVsOiBbMzg1OTMuMDc5Mzg1XSBwbGF0Zm9ybSBGaXhl ZCBNRElPIGJ1cy4wOgo+ID4gcmVzdW1lCj4gPiA+IEF1ZyAgMiAxMDoxNzozNCBsb2NhbGhvc3Qg a2VybmVsOiBbMzg1OTMuMDg2Mjg1XSB1c2IgdXNiMTogdHlwZSByZXN1bWUKPiA+ID4gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+Cj4g PiA+IHdoaWNoIG1lYW5zIHRoYXQgd2UgcmVmZXJzIHRvIGEgZ3JhbnQtdGFibGUgd2hpbGUgaXQn cyBpbiB1c2UuCj4gPiA+Cj4gPiA+IFRoZSByZWFzb24gcmVzdWx0cyBpbiB0aGF0Ogo+ID4gPiBz dXNwZW5kL3Jlc3VtZSBjb2RlczoKPiA+ID4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gLy9kcml2ZXJzL3hlbi9tYW5hZ2UuYwo+ ID4gPiBzdGF0aWMgdm9pZCBkb19zdXNwZW5kKHZvaWQpCj4gPiA+IHsKPiA+ID4gCWludCBlcnI7 Cj4gPiA+IAlzdHJ1Y3Qgc3VzcGVuZF9pbmZvIHNpOwo+ID4gPgo+ID4gPiAJc2h1dHRpbmdfZG93 biA9IFNIVVRET1dOX1NVU1BFTkQ7Cj4gPiA+Cj4gPiA+IOKApuKApuKApuKApuKApuKApgo+ID4g PiAJZXJyID0gZHBtX3N1c3BlbmRfc3RhcnQoUE1TR19GUkVFWkUpOwo+ID4gPiDigKbigKbigKbi gKbigKbigKYKPiA+ID4gCWRwbV9yZXN1bWVfc3RhcnQoc2kuY2FuY2VsbGVkID8gUE1TR19USEFX IDogUE1TR19SRVNUT1JFKTsKPiA+ID4KPiA+ID4gCWlmIChlcnIpIHsKPiA+ID4gCQlwcl9lcnIo ImZhaWxlZCB0byBzdGFydCB4ZW5fc3VzcGVuZDogJWRcbiIsIGVycik7Cj4gPiA+IAkJc2kuY2Fu Y2VsbGVkID0gMTsKPiA+ID4gCX0KPiA+ID4gLy9OT1RFOiBzaS5jYW5jZWxsZWQgPSAxCj4gPiA+ Cj4gPiA+IG91dF9yZXN1bWU6Cj4gPiA+IAlpZiAoIXNpLmNhbmNlbGxlZCkgewo+ID4gPiAJCXhl bl9hcmNoX3Jlc3VtZSgpOwo+ID4gPiAJCXhzX3Jlc3VtZSgpOwo+ID4gPiAJfSBlbHNlCj4gPiA+ IAkJeHNfc3VzcGVuZF9jYW5jZWwoKTsKPiA+ID4KPiA+ID4gCWRwbV9yZXN1bWVfZW5kKHNpLmNh bmNlbGxlZCA/IFBNU0dfVEhBVyA6IFBNU0dfUkVTVE9SRSk7Cj4gPiAvL2Jsa2Zyb250IGRldmlj ZSBnb3QgcmVzdW1lZCBoZXJlLgo+ID4gPgo+ID4gPiBvdXRfdGhhdzoKPiA+ID4gI2lmZGVmIENP TkZJR19QUkVFTVBUCj4gPiA+IAl0aGF3X3Byb2Nlc3NlcygpOwo+ID4gPiBvdXQ6Cj4gPiA+ICNl bmRpZgo+ID4gPiAJc2h1dHRpbmdfZG93biA9IFNIVVRET1dOX0lOVkFMSUQ7Cj4gPiA+IH0KPiA+ ID4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+Cj4gPiA+IEZ1bmMg ImRwbV9zdXNwZW5kX3N0YXJ0IiBzdXNwZW5kcyBkZXZpY2VzLCBhbmQgImRwbV9yZXN1bWVfZW5k Igo+ID4gcmVzdW1lcyBkZXZpY2VzLgo+ID4gPiBIb3dldmVyLCB3ZSBmb3VuZCB0aGF0IHRoZSBk ZXZpY2UgImJsa2Zyb250IiBoYXMgbm8gU1VTUEVORCBtZXRob2QgYnV0Cj4gPiBSRVNVTUUgbWV0 aG9kLgo+ID4gPgo+ID4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g PiA+IC8vZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwo+ID4gPiBzdGF0aWMgREVGSU5FX1hF TkJVU19EUklWRVIoYmxrZnJvbnQsICwKPiA+ID4gCS5wcm9iZSA9IGJsa2Zyb250X3Byb2JlLAo+ ID4gPiAJLnJlbW92ZSA9IGJsa2Zyb250X3JlbW92ZSwKPiA+ID4gCS5yZXN1bWUgPSBibGtmcm9u dF9yZXN1bWUsICAvLyBvbmx5IFJFU1VNRSBtZXRob2QgZm91bmQgaGVyZS4KPiA+ID4gCS5vdGhl cmVuZF9jaGFuZ2VkID0gYmxrYmFja19jaGFuZ2VkLAo+ID4gPiAJLmlzX3JlYWR5ID0gYmxrZnJv bnRfaXNfcmVhZHksCj4gPiA+ICk7Cj4gPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gPiA+Cj4gPiA+IEl0IHJlc3VtZXMgYmxrZnJvbnQgZGV2aWNlIHdoZW4gaXQg ZGlkbid0IGdldCBzdXNwZW5kZWQsIHdoaWNoIGNhdXNlZCB0aGUKPiA+IHByb2xlbSBhYm92ZS4K PiA+ID4KPiA+ID4KPiA+ID4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KPiA+ID4gSW4gb3JkZXIgdG8gY2hlY2sgd2hldGhlciBpdCdzIHRoZSBwcm9ibGVtIG9mIFBW T1BTIG9yIGh5cGVydmlzb3IoeGVuKS9kb20wLAo+ID4gd2Ugc3VzcGVuZC9yZXN1bWUgb3RoZXIg bm9uLVBWT1BTIGd1ZXN0IG9zZXMsIG5vIHN1Y2ggcHJvYmxlbSBvY2N1cmVkLgo+ID4gPgo+ID4g PiBPdGhlciBub24tUFZPUFMgYXJlIHVzaW5nIHRoZWlyIG93biB4ZW4gZHJpdmVycywgYXMgc2hv d24gaW4KPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9qcGF0b24veGVuLTQuMS1MSlgxL2Jsb2IvbWFz dGVyL3VubW9kaWZpZWRfZHJpdmVycy9saW51eC0KPiA+IDIuNi9wbGF0Zm9ybS1wY2kvbWFjaGlu ZV9yZWJvb3QuYyA6Cj4gPiA+Cj4gPiA+IGludCBfX3hlbl9zdXNwZW5kKGludCBmYXN0X3N1c3Bl bmQsIHZvaWQgKCpyZXN1bWVfbm90aWZpZXIpKGludCkpCj4gPiA+IHsKPiA+ID4gICAgIGludCBl cnIsIHN1c3BlbmRfY2FuY2VsbGVkLCBucl9jcHVzOwo+ID4gPiAgICAgc3RydWN0IGFwX3N1c3Bl bmRfaW5mbyBpbmZvOwo+ID4gPgo+ID4gPiAgICAgeGVuYnVzX3N1c3BlbmQoKTsKPiA+ID4KPiA+ ID4g4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCj4gPiA+ICAgICBwcmVlbXB0X2VuYWJsZSgpOwo+ ID4gPgo+ID4gPiAgICAgaWYgKCFzdXNwZW5kX2NhbmNlbGxlZCkKPiA+ID4gICAgICAgICB4ZW5i dXNfcmVzdW1lKCk7ICAgICAvL3doZW4gdGhlIGd1ZXN0IG9zIGdldCByZXN1bWVkLAo+ID4gc3Vz cGVuZF9jYW5jZWxsZWQgPT0gMSwgdGh1cyBpdCB3b3VsZG4ndCBlbnRlciB4ZW5idXNfcmVzdW1l X3V2cCBoZXJlLgo+ID4gPiAgICAgZWxzZQo+ID4gPiAgICAgICAgIHhlbmJ1c19zdXNwZW5kX2Nh bmNlbCgpOyAgLy9JdCBnZXRzIGhlcmUuIHNvIHRoZSBibGtmcm9udAo+ID4gd291bGRuJ3QgcmVz dW1lLgo+ID4gPgo+ID4gPiAgICAgcmV0dXJuIDA7Cj4gPiA+IH0KPiA+ID4KPiA+ID4KPiA+ID4g SW4gbm9uLVBWT1BTIGd1ZXN0IG9zLCBhbHRob3VnaCB0aGV5IGRvbid0IGhhdmUgYmxrZnJvbnQg U1VTUEVORCBtZXRob2QKPiA+IGVpdGhlciwgdGhlaXIgeGVuLWRyaXZlciBkb2Vzbid0IHJlc3Vt ZSBibGtmcm9udCBkZXZpY2UsIHRodXMsIHRoZXkgd291bGQndCBoYXZlCj4gPiBhbnkgcHJvYmxl bSBhZnRlciBzdXNwZW5kL3Jlc3VtZS4KPiA+ID4KPiA+ID4KPiA+ID4gSSdtIHdvbmRlcmluZyB3 aHkgdGhlIDIgdHlwZXMgb2YgZHJpdmVyKFBWT1BTIGFuZCBub24tUFZPUFMpIGFyZSBkaWZmZXJl bnQKPiA+IGhlcmUuCj4gPiA+IElzIHRoYXQgYmVjYXVzZToKPiA+ID4gMSkgUFZPUFMga2VybmVs IGRvZXNuJ3QgdGFrZSB0aGlzIHNpdHVhdGlvbiBpbnRvIGFjY29udCwgYW5kIGhhcyBhIGJ1ZyBo ZXJlPwo+ID4gPiBvcgo+ID4gPiAyKSBQVk9QUyBoYXMgb3RoZXIgd2F5cyB0byBhdm9pZCBzdWNo IHByb2JsZW0/Cj4gPiA+Cj4gPiA+IHRoYW5rIHlvdSBpbiBhZHZhbmNlLgo+ID4gPgo+ID4gPiAt R29uZ2xlaQo+ID4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwo+ID4gPiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4gPiA+IFhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCj4gPiA+IGh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK