From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH hwc v2 17/18] drm_hwcomposer: Flatten scene synchronously Date: Wed, 18 Apr 2018 10:49:27 -0400 Message-ID: <20180418144927.GY73214@art_vandelay> References: <1523460149-1740-1-git-send-email-alexandru-cosmin.gheorghe@arm.com> <1523460149-1740-18-git-send-email-alexandru-cosmin.gheorghe@arm.com> <20180417174746.GM73214@art_vandelay> <20180418111403.GE10633@e114479-lin.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yb0-x244.google.com (mail-yb0-x244.google.com [IPv6:2607:f8b0:4002:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 79F186E58F for ; Wed, 18 Apr 2018 14:49:29 +0000 (UTC) Received: by mail-yb0-x244.google.com with SMTP id y5-v6so681836ybg.0 for ; Wed, 18 Apr 2018 07:49:29 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180418111403.GE10633@e114479-lin.cambridge.arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandru-Cosmin Gheorghe Cc: ayan.halder@arm.com, liviu.dudau@arm.com, dri-devel@lists.freedesktop.org, nd@arm.com List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBBcHIgMTgsIDIwMTggYXQgMTI6MTQ6MDNQTSArMDEwMCwgQWxleGFuZHJ1LUNvc21p biBHaGVvcmdoZSB3cm90ZToKPiBPbiBUdWUsIEFwciAxNywgMjAxOCBhdCAwMTo0Nzo0NlBNIC0w NDAwLCBTZWFuIFBhdWwgd3JvdGU6Cj4gPiBPbiBXZWQsIEFwciAxMSwgMjAxOCBhdCAwNDoyMjoy OFBNICswMTAwLCBBbGV4YW5kcnUgR2hlb3JnaGUgd3JvdGU6Cj4gPiA+IEZsYXR0ZW4gc2NlbmUg b24gdGhlIHNhbWUgQ1JUQyBhcyB0aGUgb25lIGRyaXZpbmcgdGhlIGRpc3BsYXkuCj4gPiA+IFRo ZSBhY3RpdmUgY29tcG9zaXRpb24gaXMgcGxheWVkIGJhY2sgdG8gdGhlIGRpc3BsYXkgd2l0aCBh IGJ1ZmZlcgo+ID4gPiBhdHRhY2hlZCB0byB0aGUgd3JpdGViYWNrIGNvbm5lY3Rvci4KPiA+ID4g VGhlbiB3ZSBidWlsZCBhIGNvbXBvc2l0aW9uIHRoYXQgaGFzIG9ubHkgb25lIHBsYW5lIGVuYWJs ZWQgYW5kIHRoYXQKPiA+ID4gdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSB3cml0ZWJhY2sgYXMgdGhl IGlucHV0Lgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1IEdoZW9yZ2hlIDxh bGV4YW5kcnUtY29zbWluLmdoZW9yZ2hlQGFybS5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgZHJtZGlz cGxheWNvbXBvc2l0b3IuY3BwIHwgMjAzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tCj4gPiA+ICBkcm1kaXNwbGF5Y29tcG9zaXRvci5oICAgfCAgIDcgKy0K PiA+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMjA0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0p Cj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJtZGlzcGxheWNvbXBvc2l0b3IuY3BwIGIvZHJt ZGlzcGxheWNvbXBvc2l0b3IuY3BwCj4gPiA+IGluZGV4IGU1MzVlOGEuLmNiNjcwZTYgMTAwNjQ0 Cj4gPiA+IC0tLSBhL2RybWRpc3BsYXljb21wb3NpdG9yLmNwcAo+ID4gPiArKysgYi9kcm1kaXNw bGF5Y29tcG9zaXRvci5jcHAKPiA+ID4gQEAgLTM2LDYgKzM2LDcgQEAKPiA+ID4gICNpbmNsdWRl ICJkcm1wbGFuZS5oIgo+ID4gPiAgI2luY2x1ZGUgImRybXJlc291cmNlcy5oIgo+ID4gPiAgI2lu Y2x1ZGUgImdsd29ya2VyLmgiCj4gPiA+ICtzdGF0aWMgY29uc3QgdWludDMyX3Qga1dhaXRXcml0 ZWJhY2tGZW5jZSA9IDEwMDsgIC8vIG1zCj4gPiA+ICAKPiA+ID4gIG5hbWVzcGFjZSBhbmRyb2lk IHsKPiA+ID4gIAo+ID4gPiBAQCAtNTIzLDcgKzUyNCw5IEBAIGludCBEcm1EaXNwbGF5Q29tcG9z aXRvcjo6UHJlcGFyZUZyYW1lKERybURpc3BsYXlDb21wb3NpdGlvbiAqZGlzcGxheV9jb21wKSB7 Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIGludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6Q29tbWl0 RnJhbWUoRHJtRGlzcGxheUNvbXBvc2l0aW9uICpkaXNwbGF5X2NvbXAsCj4gPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGVzdF9vbmx5KSB7Cj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGVzdF9vbmx5LAo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcm1EaXNwbGF5Q29tcG9z aXRpb24gKndyaXRlYmFja19jb21wLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEcm1Db25uZWN0b3IgKndyaXRlYmFja19jb25uKSB7Cj4gPiA+ICAgIEFUUkFD RV9DQUxMKCk7Cj4gPiA+ICAKPiA+ID4gICAgaW50IHJldCA9IDA7Cj4gPiA+IEBAIC01MzIsNiAr NTM1LDcgQEAgaW50IERybURpc3BsYXlDb21wb3NpdG9yOjpDb21taXRGcmFtZShEcm1EaXNwbGF5 Q29tcG9zaXRpb24gKmRpc3BsYXlfY29tcCwKPiA+ID4gICAgc3RkOjp2ZWN0b3I8RHJtQ29tcG9z aXRpb25QbGFuZT4gJmNvbXBfcGxhbmVzID0KPiA+ID4gICAgICAgIGRpc3BsYXlfY29tcC0+Y29t cG9zaXRpb25fcGxhbmVzKCk7Cj4gPiA+ICAgIHVpbnQ2NF90IG91dF9mZW5jZXNbZHJtXy0+Y3J0 Y3MoKS5zaXplKCldOwo+ID4gPiArICBpbnQgd3JpdGViYWNrX2ZlbmNlID0gLTE7Cj4gPiA+ICAK PiA+ID4gICAgRHJtQ29ubmVjdG9yICpjb25uZWN0b3IgPSBkcm1fLT5HZXRDb25uZWN0b3JGb3JE aXNwbGF5KGRpc3BsYXlfKTsKPiA+ID4gICAgaWYgKCFjb25uZWN0b3IpIHsKPiA+ID4gQEAgLTU1 MCw5ICs1NTQsMzcgQEAgaW50IERybURpc3BsYXlDb21wb3NpdG9yOjpDb21taXRGcmFtZShEcm1E aXNwbGF5Q29tcG9zaXRpb24gKmRpc3BsYXlfY29tcCwKPiA+ID4gICAgICByZXR1cm4gLUVOT01F TTsKPiA+ID4gICAgfQo+ID4gPiAgCj4gPiA+ICsgIGlmICh3cml0ZWJhY2tfY29tcCAhPSBOVUxM KSB7Cj4gPiA+ICsgICAgaWYgKHdyaXRlYmFja19jb25uID09IE5VTEwpCj4gPiA+ICsgICAgICBy ZXR1cm4gLUVJTlZBTDsKPiA+ID4gKyAgICBpZiAod3JpdGViYWNrX2Nvbm4tPndyaXRlYmFja19m Yl9pZCgpLmlkKCkgPT0gMCB8fAo+ID4gPiArICAgICAgICB3cml0ZWJhY2tfY29ubi0+d3JpdGVi YWNrX291dF9mZW5jZSgpLmlkKCkgPT0gMCkgewo+ID4gPiArICAgICAgQUxPR0UoIldyaXRlYmFj ayBwcm9wZXJ0aWVzIGRvbid0IGV4aXQiKTsKPiA+ID4gKyAgICAgIHJldHVybiAtRUlOVkFMOwo+ ID4gPiArICAgIH0KPiA+ID4gKyAgICBpZiAod3JpdGViYWNrX2NvbXAtPmxheWVycygpLnNpemUo KSAhPSAxKSB7Cj4gPiA+ICsgICAgICBBTE9HRSgiSW52YWxpZCBudW1iZXIgb2YgbGF5ZXJzIGZv ciB3cml0ZWJhY2sgY29tcG9zaXRpb24iKTsKPiA+ID4gKyAgICAgIHJldHVybiAtRUlOVkFMOwo+ ID4gPiArICAgIH0KPiA+ID4gKyAgICByZXQgPSBkcm1Nb2RlQXRvbWljQWRkUHJvcGVydHkoCj4g PiA+ICsgICAgICAgIHBzZXQsIHdyaXRlYmFja19jb25uLT5pZCgpLCB3cml0ZWJhY2tfY29ubi0+ d3JpdGViYWNrX2ZiX2lkKCkuaWQoKSwKPiA+ID4gKyAgICAgICAgd3JpdGViYWNrX2NvbXAtPmxh eWVycygpLmJhY2soKS5idWZmZXItPmZiX2lkKTsKPiA+ID4gKyAgICBpZiAocmV0IDwgMCkgewo+ ID4gPiArICAgICAgQUxPR0UoIkZhaWxlZCB0byBhZGQgd3JpdGViYWNrX2ZiX2lkIik7Cj4gPiA+ ICsgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgIH0KPiA+ID4gKyAgICByZXQgPSBkcm1Nb2Rl QXRvbWljQWRkUHJvcGVydHkocHNldCwgd3JpdGViYWNrX2Nvbm4tPmlkKCksCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlYmFja19jb25uLT53cml0ZWJhY2tf b3V0X2ZlbmNlKCkuaWQoKSwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHVpbnQ2NF90KSZ3cml0ZWJhY2tfZmVuY2UpOwo+ID4gCj4gPiBVcGNhc3RpbmcgaW50IHRv IHU2NCBpc24ndCBhIGdyZWF0IGlkZWEsIHBsZWFzZSBnbyB0aGUgb3RoZXIgd2F5IChhcyB3ZSBk byB3aXRoCj4gPiBvdXRfZmVuY2VzKS4KPiAKPiBHZW51aW5lbHkgY3VyaW91cyBhYm91dCB0aGlz LCB3aHkgZG9lcyBpdCBtYWtlIGEgZGlmZmVyZW5jZSBJJ20KPiB1cGNhc3RpbmcgdGhlIGFkZHJl c3Mgbm90IHRoZSBpbnQgaXRzZWxmLgoKUmlnaHQsIGZvciBzb21lIHJlYXNvbiBJIGhhZCBpbnNl cnRlZCBhICogaW5zaWRlIHRoZSBwYXJlbnMgd2l0aCBteSBoZWFkLiBQbGVhc2UKaWdub3JlIDop Cgo+IE1vcmUsIHRoZSBrZXJuZWwgZG9lcyB0aGlzIHMzMiBfX3VzZXIgKmZlbmNlX3B0ciA9IHU2 NF90b191c2VyX3B0cih2YWwpOwo+IFRvIGJlIGNvbXBsZXRseSBmYWlyIGl0IHNob3VsZCBoYXZl IGJlZW4gaW50MzJfdC4KPiAKPiAKPiA+IAo+ID4gPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gPiA+ ICsgICAgICBBTE9HRSgiRmFpbGVkIHRvIGFkZCB3cml0ZWJhY2tfb3V0X2ZlbmNlIik7Cj4gPiA+ ICsgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgIH0KPiA+ID4gKyAgfQo+ID4gCj4gPiBUaGlz IHdvdWxkIGJlIG1vcmUgcmVhZGFibGUgaWYgaXQgd2FzIHNwbGl0IG9mZiBpbnRvIGEgZnVuY3Rp b24uCj4gPiAKPiA+ID4gICAgaWYgKGNydGMtPm91dF9mZW5jZV9wdHJfcHJvcGVydHkoKS5pZCgp ICE9IDApIHsKPiA+ID4gLSAgICByZXQgPSBkcm1Nb2RlQXRvbWljQWRkUHJvcGVydHkocHNldCwg Y3J0Yy0+aWQoKSwgY3J0Yy0+b3V0X2ZlbmNlX3B0cl9wcm9wZXJ0eSgpLmlkKCksCj4gPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCkgJm91dF9mZW5jZXNb Y3J0Yy0+cGlwZSgpXSk7Cj4gPiA+ICsgICAgcmV0ID0gZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5 KHBzZXQsIGNydGMtPmlkKCksCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNydGMtPm91dF9mZW5jZV9wdHJfcHJvcGVydHkoKS5pZCgpLAo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpJm91dF9mZW5jZXNbY3J0Yy0+cGlw ZSgpXSk7Cj4gPiA+ICAgICAgaWYgKHJldCA8IDApIHsKPiA+ID4gICAgICAgIEFMT0dFKCJGYWls ZWQgdG8gYWRkIE9VVF9GRU5DRV9QVFIgcHJvcGVydHkgdG8gcHNldDogJWQiLCByZXQpOwo+ID4g PiAgICAgICAgZHJtTW9kZUF0b21pY0ZyZWUocHNldCk7Cj4gPiA+IEBAIC01ODAsNiArNjEyLDE1 IEBAIGludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6Q29tbWl0RnJhbWUoRHJtRGlzcGxheUNvbXBv c2l0aW9uICpkaXNwbGF5X2NvbXAsCj4gPiA+ICAgICAgfQo+ID4gPiAgICB9Cj4gPiA+ICAKPiA+ ID4gKyAgaWYgKHdyaXRlYmFja19jb25uICE9IE5VTEwpIHsKPiA+ID4gKyAgICByZXQgPSBkcm1N b2RlQXRvbWljQWRkUHJvcGVydHkocHNldCwgd3JpdGViYWNrX2Nvbm4tPmlkKCksCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlYmFja19jb25uLT5jcnRjX2lk X3Byb3BlcnR5KCkuaWQoKSwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3J0Yy0+aWQoKSk7Cj4gPiA+ICsgICAgaWYgKHJldCA8IDApIHsKPiA+ID4gKyAgICAgIEFM T0dFKCJGYWlsZWQgdG8gIGF0dGFjaCB3cml0ZWJhY2siKTsKPiA+ID4gKyAgICB9Cj4gPiA+ICsg IH0KPiA+IAo+ID4gQ2FuIHlvdSBkbyB0aGlzIGFib3ZlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdy aXRlYmFjayBwcm9wZXJ0aWVzPwo+ID4gCj4gPiA+ICsKPiA+ID4gICAgZm9yIChEcm1Db21wb3Np dGlvblBsYW5lICZjb21wX3BsYW5lIDogY29tcF9wbGFuZXMpIHsKPiA+ID4gICAgICBEcm1QbGFu ZSAqcGxhbmUgPSBjb21wX3BsYW5lLnBsYW5lKCk7Cj4gPiA+ICAgICAgRHJtQ3J0YyAqY3J0YyA9 IGNvbXBfcGxhbmUuY3J0YygpOwo+ID4gPiBAQCAtNzI5LDggKzc3MCwxOCBAQCBpbnQgRHJtRGlz cGxheUNvbXBvc2l0b3I6OkNvbW1pdEZyYW1lKERybURpc3BsYXlDb21wb3NpdGlvbiAqZGlzcGxh eV9jb21wLAo+ID4gPiAgCj4gPiA+ICAgIGlmICghcmV0KSB7Cj4gPiA+ICAgICAgdWludDMyX3Qg ZmxhZ3MgPSBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVDsKPiA+ID4gLSAgICBpZiAodGVz dF9vbmx5KQo+ID4gPiArICAgIGlmICh0ZXN0X29ubHkpIHsKPiA+ID4gICAgICAgIGZsYWdzIHw9 IERSTV9NT0RFX0FUT01JQ19URVNUX09OTFk7Cj4gPiA+ICsgICAgfSBlbHNlIHsKPiA+ID4gKyAg ICAgIGlmICh3cml0ZWJhY2tfY29tcCAhPSBOVUxMKSB7Cj4gPiA+ICsgICAgICAgIGlmICghQ291 bnRkb3duRXhwaXJlZCgpICYmIGFjdGl2ZV9jb21wb3NpdGlvbl8pIHsKPiA+IAo+ID4gR2l2ZW4g dGhhdCB3ZSdyZSBob2xkaW5nIHRoZSBsb2NrIHRocm91Z2hvdXQgdGhpcyBmdW5jdGlvbiwgY2Fu J3QgeW91IGp1c3QKPiA+IGFib3J0IGF0IHRoZSBzdGFydD8KPiAKPiBZZXMsIHdlIGNvdWxkL3No b3VsZC4KPiAKPiA+IAo+ID4gPiArICAgICAgICAgIEFMT0dFKCJXcml0ZWJhY2sgY29tcG9zaXRp b24gbm90IG5lZWRlZCwgYWJvcnQgY29tbWl0Iik7Cj4gPiA+ICsgICAgICAgICAgZHJtTW9kZUF0 b21pY0ZyZWUocHNldCk7Cj4gPiA+ICsgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsg ICAgICAgIH07Cj4gPiA+ICsgICAgICAgIGZsYWdzIHw9IERSTV9NT0RFX0FUT01JQ19OT05CTE9D SzsKPiA+IAo+ID4gSSdtIGd1ZXNzaW5nIHRoaXMgaXMgdGhlIGNhdXNlIG9mIHRoZSBhY3RpdmVf Y29tcG9zaXRpb24gcmFjZSB5b3UncmUgZml4aW5nCj4gPiBlYXJsaWVyIGluIHRoZSBzZXJpZXM/ IENvdWxkIHlvdSBwbGVhc2UgcHVsbCB0aGlzIG91dCBhbmQgc3F1YXNoIGl0IGludG8gdGhhdAo+ ID4gcGF0Y2ggYXMgYSAiVXNlIG5vbi1ibG9ja2luZyBjb21taXRzIiBzdGFuZGFsb25lPyBJdCBt aWdodCBiZSB1c2VmdWwgZm9yCj4gPiB0ZXN0aW5nLCBhbmQgdGhpcyBpcyBzb21ldGhpbmcgdGhh dCdzIHN1YnN0YW50aWFsIGVub3VnaCB0byB3YXJyYW50IHRoZQo+ID4gYWRkaXRpb25hbCB2aXNp YmlsaXR5IG9mIGl0cyBvd24gcGF0Y2guCj4gCj4gTm90IHJlYWxseSwgdGhhdCByYWNlIGNvdWxk IGhhcHBlbiAgZXZlbiB3aXRob3V0IG5vbiBibG9ja2luZy4gVGhlCj4gY3VycmVudCBpbXBsZW1l bnRhdGlvbiBpczoKPiAxLiBDb21taXQKPiAyLiBsb2NrLgo+IDMuIFNldCBhY3RpdmVfY29tcG9z aXRpb24KPiA0LiBVbmxvY2suCj4gCj4gV2l0aCB0d28gdGhyZWFkcyB0aGVyZSBpcyBubyBndWFy YW50ZWUgYWN0aXZlX2NvbXBvc2l0aW9uIHdpbGwgY29udGFpbgo+IHdoYXQgaXQncyBiZWVuIGNv bWl0dGVkLgo+IAoKTWFrZXMgc2Vuc2UsIHRoYW5rcyBmb3IgbGF5aW5nIGl0IG91dC4KClNlYW4K PiAKPiA+IAo+ID4gPiArICAgICAgfQo+ID4gPiArICAgIH0KPiA+ID4gIAo+ID4gPiAgICAgIHJl dCA9IGRybU1vZGVBdG9taWNDb21taXQoZHJtXy0+ZmQoKSwgcHNldCwgZmxhZ3MsIGRybV8pOwo+ ID4gPiAgICAgIGlmIChyZXQpIHsKPiA+ID4gQEAgLTc2OSw2ICs4MjAsMTMgQEAgaW50IERybURp c3BsYXlDb21wb3NpdG9yOjpDb21taXRGcmFtZShEcm1EaXNwbGF5Q29tcG9zaXRpb24gKmRpc3Bs YXlfY29tcCwKPiA+ID4gICAgaWYgKGNydGMtPm91dF9mZW5jZV9wdHJfcHJvcGVydHkoKS5pZCgp KSB7Cj4gPiA+ICAgICAgZGlzcGxheV9jb21wLT5zZXRfb3V0X2ZlbmNlKChpbnQpIG91dF9mZW5j ZXNbY3J0Yy0+cGlwZSgpXSk7Cj4gPiA+ICAgIH0KPiA+ID4gKyAgaWYgKHdyaXRlYmFja19mZW5j ZSA+PSAwKSB7Cj4gPiA+ICsgICAgaWYgKHdyaXRlYmFja19jb21wLT5sYXllcnMoKS5zaXplKCkg IT0gMSkgewo+ID4gPiArICAgICAgQUxPR0UoIkludmFsaWQgbnVtYmVycyBvZiBsYXllciBmb3Ig d3JpdGViYWNrX2NvbXAiKTsKPiA+ID4gKyAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gPiArICAg IH0KPiA+IAo+ID4gWW91IGFscmVhZHkgdGVzdCB0aGlzIGFib3ZlPwo+ID4gCj4gPiA+ICsgICAg d3JpdGViYWNrX2NvbXAtPmxheWVycygpWzBdLmFjcXVpcmVfZmVuY2UuU2V0KHdyaXRlYmFja19m ZW5jZSk7Cj4gPiA+ICsgIH0KPiA+ID4gIAo+ID4gPiAgICByZXR1cm4gcmV0Owo+ID4gPiAgfQo+ ID4gPiBAQCAtODM3LDYgKzg5NSw4IEBAIHZvaWQgRHJtRGlzcGxheUNvbXBvc2l0b3I6OkFwcGx5 RnJhbWUoCj4gPiA+ICAgICAgICBpZiAoYWN0aXZlX2NvbXBvc2l0aW9uXykKPiA+ID4gICAgICAg ICAgYWN0aXZlX2NvbXBvc2l0aW9uXy0+U2lnbmFsQ29tcG9zaXRpb25Eb25lKCk7Cj4gPiA+ICAg ICAgICBhY3RpdmVfY29tcG9zaXRpb25fLnN3YXAoY29tcG9zaXRpb24pOwo+ID4gPiArICAgICAg ZmxhdHRlbl9jb3VudGRvd25fID0gRkxBVFRFTl9DT1VOVERPV05fSU5JVDsKPiA+ID4gKyAgICAg IHZzeW5jX3dvcmtlcl8uVlN5bmNDb250cm9sKCF3cml0ZWJhY2spOwo+ID4gPiAgICAgIH0KPiA+ ID4gICAgfQo+ID4gPiAgCj4gPiA+IEBAIC05MTMsOCArOTczLDE0MSBAQCBpbnQgRHJtRGlzcGxh eUNvbXBvc2l0b3I6OkFwcGx5Q29tcG9zaXRpb24oCj4gPiA+ICAgIHJldHVybiByZXQ7Cj4gPiA+ ICB9Cj4gPiA+ICAKPiA+ID4gK2ludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6V3JpdGViYWNrQ29t cG9zaXRlKERybURpc3BsYXlDb21wb3NpdGlvbiAqc3JjLAo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJtRGlzcGxheUNvbXBvc2l0aW9uICpkc3Qs Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcm1D b25uZWN0b3IgKndyaXRlYmFja19jb25uKSB7Cj4gPiA+ICsgIGludCByZXQgPSAwOwo+ID4gPiAr ICBpZiAoc3JjID09IE5VTEwgfHwgZHN0ID09IE5VTEwpCj4gPiA+ICsgICAgcmV0dXJuIC1FSU5W QUw7Cj4gPiA+ICsgIHN0ZDo6dmVjdG9yPERybUNvbXBvc2l0aW9uUGxhbmU+ICZzcmNfcGxhbmVz ID0gc3JjLT5jb21wb3NpdGlvbl9wbGFuZXMoKTsKPiA+ID4gKyAgRHJtQ29tcG9zaXRpb25QbGFu ZSBzcXVhc2hlZF9jb21wKERybUNvbXBvc2l0aW9uUGxhbmU6OlR5cGU6OmtQcmVjb21wLCBOVUxM LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5jcnRjKCkp Owo+ID4gPiArICBmb3IgKERybUNvbXBvc2l0aW9uUGxhbmUgJmNvbXBfcGxhbmUgOiBzcmNfcGxh bmVzKSB7Cj4gPiA+ICsgICAgaWYgKGNvbXBfcGxhbmUucGxhbmUoKSA9PSBOVUxMKSB7Cj4gPiA+ ICsgICAgICBBTE9HRSgiU2tpcHBpbmcgc3F1YXNoIGFsbCBiZWNhdXNlIG9mIE5VTEwgcGxhbmUi KTsKPiA+ID4gKyAgICAgIHJldCA9IC1FSU5WQUw7Cj4gPiA+ICsgICAgfQo+ID4gPiArICAgIGlm ICghc3F1YXNoZWRfY29tcC5wbGFuZSgpICYmCj4gPiA+ICsgICAgICAgIGNvbXBfcGxhbmUucGxh bmUoKS0+dHlwZSgpID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCj4gPiA+ICsgICAgICBzcXVh c2hlZF9jb21wLnNldF9wbGFuZShjb21wX3BsYW5lLnBsYW5lKCkpOwo+ID4gPiArICAgIGVsc2UK PiA+ID4gKyAgICAgIGRzdC0+QWRkUGxhbmVEaXNhYmxlKGNvbXBfcGxhbmUucGxhbmUoKSk7Cj4g PiA+ICsgIH0KPiA+ID4gKwo+ID4gPiArICBEcm1GcmFtZWJ1ZmZlciAqd3JpdGViYWNrX2ZiID0g TlVMTDsKPiA+ID4gKyAgQXV0b0xvY2sgbG9jaygmbG9ja18sIF9fRlVOQ1RJT05fXyk7Cj4gPiA+ ICsgIGlmICgocmV0ID0gbG9jay5Mb2NrKCkpKQo+ID4gCj4gPiBTYW1lIGNvbW1lbnRzIHJlZ2Fy ZGluZyBhc3NpZ25tZW50IGluIGEgY29uZGl0aW9uYWwuCj4gPiAKPiA+ID4gKyAgICByZXR1cm4g cmV0Owo+ID4gPiArICB3cml0ZWJhY2tfZmIgPSAmZnJhbWVidWZmZXJzX1tmcmFtZWJ1ZmZlcl9p bmRleF9dOwo+ID4gPiArICBmcmFtZWJ1ZmZlcl9pbmRleF8gPSAoZnJhbWVidWZmZXJfaW5kZXhf ICsgMSkgJSBEUk1fRElTUExBWV9CVUZGRVJTOwo+ID4gPiArICByZXQgPSBQcmVwYXJlRnJhbWVi dWZmZXIoKndyaXRlYmFja19mYiwgZHN0LCBtb2RlXy5tb2RlLmhfZGlzcGxheSgpLAo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV8ubW9kZS52X2Rpc3BsYXkoKSk7Cj4gPiA+ ICsgIGlmIChyZXQpIHsKPiA+ID4gKyAgICBBTE9HRSgiRmFpbGVkIHRvIHByZXBhcmUgZGVzdGlu YXRpb24gYnVmZmVyIik7Cj4gPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ID4gKyAgfQo+ID4gPiAr ICBsb2NrLlVubG9jaygpOwo+ID4gPiArICByZXQgPSBDb21taXRGcmFtZShzcmMsIHRydWUsIGRz dCwgd3JpdGViYWNrX2Nvbm4pOwo+ID4gPiArICBpZiAocmV0KSB7Cj4gPiA+ICsgICAgQUxPR0Uo IkF0b21pYyBjaGVjayBmYWlsZWQiKTsKPiA+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gPiArICB9 Cj4gPiA+ICsgIGlmICgocmV0ID0gbG9jay5Mb2NrKCkpKQo+ID4gCj4gPiBBbGwgb2YgdGhlc2Ug bG9ja3MgYW5kIHVubG9ja3MgYXJlIGdvaW5nIHRvIGNhdXNlIHJhY2VzLCBhcyBtZW50aW9uZWQg YmVsb3csCj4gPiBwbGVhc2UgcmUtZXZhbHVhdGUuCj4gPiAKPiA+ID4gKyAgICByZXR1cm4gcmV0 Owo+ID4gPiArICBpZiAoIUNvdW50ZG93bkV4cGlyZWQoKSAmJiBhY3RpdmVfY29tcG9zaXRpb25f KSB7Cj4gPiA+ICsgICAgQUxPR0UoIldyaXRlYmFjayBjb21wb3NpdGlvbiBub3QgbmVlZGVkIGFi b3J0Iik7Cj4gPiA+ICsgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsgIH0KPiA+ID4gKyAgcmV0 ID0gQ29tbWl0RnJhbWUoc3JjLCBmYWxzZSwgZHN0LCB3cml0ZWJhY2tfY29ubik7Cj4gPiA+ICsg IGxvY2suVW5sb2NrKCk7Cj4gPiA+ICsgIGlmIChyZXQgfHwgZHN0LT5sYXllcnMoKS5zaXplKCkg IT0gMSkgewo+ID4gPiArICAgIEFMT0dFKCJGYWlsZWQgdG8gZmxhdHRlbiBzY2VuZSB1c2luZyB3 cml0ZWJhY2siKTsKPiA+ID4gKyAgICByZXR1cm4gLUVJTlZBTDsKPiA+ID4gKyAgfQo+ID4gPiAr ICBzcXVhc2hlZF9jb21wLnNvdXJjZV9sYXllcnMoKS5wdXNoX2JhY2soMCk7Cj4gPiA+ICsgIHJl dCA9Cj4gPiA+ICsgICAgICBzeW5jX3dhaXQoZHN0LT5sYXllcnMoKVswXS5hY3F1aXJlX2ZlbmNl LlJlbGVhc2UoKSwga1dhaXRXcml0ZWJhY2tGZW5jZSk7Cj4gPiAKPiA+IGxpbmUgYnJlYWsKPiA+ IAo+ID4gPiArICBpZiAocmV0KSB7Cj4gPiA+ICsgICAgQUxPR0UoIkZhaWxlZCB0byB3YWl0IG9u IHdyaXRlYmFjayBmZW5jZSIpOwo+ID4gPiArICAgIHJldHVybiByZXQ7Cj4gPiA+ICsgIH0KPiA+ ID4gKyAgcmV0ID0gZHN0LT5BZGRQbGFuZUNvbXBvc2l0aW9uKHN0ZDo6bW92ZShzcXVhc2hlZF9j b21wKSk7Cj4gPiA+ICsgIGlmIChyZXQpIHsKPiA+ID4gKyAgICBBTE9HRSgiRmFpbGVkIHRvIGFk ZCBmbGF0dGVuIHNjZW5lIik7Cj4gPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ID4gKyAgfQo+ID4g PiArICByZXQgPSBkc3QtPkZpbmFsaXplQ29tcG9zaXRpb24oKTsKPiA+ID4gKyAgaWYgKHJldCkg ewo+ID4gPiArICAgIEFMT0dFKCJGYWlsZWQgdG8gZmluYWxpemUgY29tcG9zaXRpb24iKTsKPiA+ ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gPiArICB9Cj4gPiA+ICsgIHJldHVybiAwOwo+ID4gPiAr fQo+ID4gPiArCj4gPiA+ICtpbnQgRHJtRGlzcGxheUNvbXBvc2l0b3I6OkZsYXR0ZW5TeW5jaHJv bm91c2x5KERybUNvbm5lY3RvciAqd3JpdGViYWNrX2Nvbm4pIHsKPiA+ID4gKyAgaWYgKHdyaXRl YmFja19jb25uLT5kaXNwbGF5KCkgIT0gZGlzcGxheV8pIHsKPiA+ID4gKyAgICBBTE9HRSgiQ2Fu bm90IGZsYXR0ZW4gc3luY2hyb25vdXNseSBvbiBkaWZmZXJlbnQgZGlzcGxheSIpOwo+ID4gPiAr ICAgIHJldHVybiAtRUlOVkFMOwo+ID4gPiArICB9Cj4gPiAKPiA+IFlvdSBjaGVjayB0aGlzIHJp Z2h0IGJlZm9yZSBjYWxsaW5nLCBzbyB0aGlzIGlzbid0IG5lZWRlZC4KPiA+IAo+ID4gPiArICBB TE9HSSgiRmxhdHRlblN5bmNocm9ub3VzbHkgdXNpbmcgdGhlIHNhbWUgZGlzcGxheSIpOwo+ID4g Cj4gPiBJIHRoaW5rIHlvdSBzaG91bGQgZG93bmdyYWRlIHRoaXMgbG9nIGxldmVsLgo+ID4gCj4g PiA+ICsgIGludCByZXQgPSAwOwo+ID4gPiArICAvKiBGbGF0dGVuZWQgY29tcG9zaXRpb24gd2l0 aCBvbmx5IG9uZSBsYXllciB0aGF0IGlzIGJ1aWx0Cj4gPiA+ICsgICAqIHVzaW5nIHRoZSB3cml0 ZWJhY2sgY29ubmVjdG9yCj4gPiA+ICsgICAqLwo+ID4gPiArICBzdGQ6OnVuaXF1ZV9wdHI8RHJt RGlzcGxheUNvbXBvc2l0aW9uPiB3cml0ZWJhY2tfY29tcCA9Cj4gPiA+ICsgICAgICBDcmVhdGVJ bml0aWFsaXplZENvbXBvc2l0aW9uKCk7Cj4gPiA+ICsgIC8qIENvcHkgb2YgdGhlIGFjdGl2ZV9j b21wb3NpdGlvbl8sIHdlIG5lZWQgYSBjb3B5IGJlY2F1c2UKPiA+ID4gKyAgICogaWYgd2UgdXNl IHRoZSBhY3RpdmUgY29tcG9zaXRpb24gd2UgaGF2ZSB0byBob2xkIHRoZSBsb2NrCj4gPiA+ICsg ICAqIGZvciB0aGUgZW50aXJlIHNlcXVlbmNlIG9mIGZsYXR0ZW5pbmcuCj4gPiA+ICsgICAqLwo+ ID4gPiArICBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0aW9uPiBjb3B5X2NvbXAg PQo+ID4gPiArICAgICAgQ3JlYXRlSW5pdGlhbGl6ZWRDb21wb3NpdGlvbigpOwo+ID4gPiArCj4g PiA+ICsgIGlmICghY29weV9jb21wIHx8ICF3cml0ZWJhY2tfY29tcCkKPiA+ID4gKyAgICByZXR1 cm4gLUVJTlZBTDsKPiA+ID4gKyAgQXV0b0xvY2sgbG9jaygmbG9ja18sIF9fRlVOQ1RJT05fXyk7 Cj4gPiA+ICsgIGlmICgocmV0ID0gbG9jay5Mb2NrKCkpKQo+ID4gCj4gPiBBc3NpZ25tZW50cyBp biBpZiBzdGF0ZW1lbnRzIG1ha2UgbWUgbmVydm91cy4gU2luY2UgeW91IGRvbid0IG5lZWQgdGhl Cj4gPiBkZWNsYXJhdGlvbiBhYm92ZSwganVzdCBkbzoKPiA+IAo+ID4gICBpbnQgcmV0ID0gbG9j ay5Mb2NrKCk7Cj4gPiAgIGlmIChyZXQpCj4gPiAKPiA+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4g PiArICBpZiAoQ291bnRkb3duRXhwaXJlZCgpKSB7Cj4gPiA+ICsgICAgcmV0ID0gY29weV9jb21w LT5Db3B5TGF5ZXJzKGFjdGl2ZV9jb21wb3NpdGlvbl8uZ2V0KCkpOwo+ID4gPiArICAgIGlmIChy ZXQpCj4gPiA+ICsgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgIGNvcHlfY29tcC0+Q29weUNv bXBQbGFuZXMoYWN0aXZlX2NvbXBvc2l0aW9uXy5nZXQoKSk7Cj4gPiA+ICsgIH0gZWxzZSB7Cj4g PiA+ICsgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsgIH0KPiA+IAo+ID4gICBpZiAoIUNvdW50 ZG93bkV4cGlyZWQoKSkKPiA+ICAgICByZXR1cm4gLUVJTlZBTDsKPiA+IAo+ID4gICByZXQgPSBj b3B5X2NvbXAtPkNvcHlMYXllcnMoYWN0aXZlX2NvbXBvc2l0aW9uXy5nZXQoKSk7Cj4gPiAgIGlm IChyZXQpCj4gPiAgICAgcmV0dXJuIHJldDsKPiA+ICAgY29weV9jb21wLT5Db3B5Q29tcFBsYW5l cyhhY3RpdmVfY29tcG9zaXRpb25fLmdldCgpKTsKPiA+IAo+ID4gCj4gPiA+ICsgIGxvY2suVW5s b2NrKCk7Cj4gPiAKPiA+IEp1c3QgaG9sZCB0aGUgbG9jayB0aHJvdWdoIFdyaXRlYmFja0NvbXBv c2l0ZSgpLCBhbmQgY29uc2lkZXIgY3JlYXRpbmcgYQo+ID4gQXBwbHlGcmFtZUxvY2tlZCgpIHRv IGhvbGQgaXQgdGhyb3VnaCBBcHBseUZyYW1lKCkuIFlvdSBzaG91bGQgYmUgYWJsZSB0byByZWR1 Y2UKPiA+IHRoZSBudW1iZXIgb2YgdGltZXMgeW91IGhhdmUgdG8gY2hlY2sgQ291bnRkb3duRXhw aXJlZCgpIChvciByZW1vdmUgaXQpCj4gPiBzaWduaWZpY2FudGx5IGJ5IGp1c3QgY29uc2lzdGVu dGx5IGxvY2tpbmcgdGhpbmdzLgo+ID4gCj4gPiA+ICsgIHJldCA9Cj4gPiA+ICsgICAgICBXcml0 ZWJhY2tDb21wb3NpdGUoY29weV9jb21wLmdldCgpLCB3cml0ZWJhY2tfY29tcC5nZXQoKSwgd3Jp dGViYWNrX2Nvbm4pOwo+ID4gPiArICBpZiAocmV0KSB7Cj4gPiA+ICsgICAgQUxPR0UoIkZhaWxl ZCB0byBwcmVwYXJlIHdyaXRlYmFja1NjZW5lIik7Cj4gPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ ID4gKyAgfQo+ID4gPiArCj4gPiA+ICsgIEFwcGx5RnJhbWUoc3RkOjptb3ZlKHdyaXRlYmFja19j b21wKSwgMCwgdHJ1ZSk7Cj4gPiA+ICsgIHJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICBpbnQgRHJtRGlzcGxheUNvbXBvc2l0b3I6OkZsYXR0ZW5TY2VuZSgpIHsKPiA+ID4gLSAgcmV0 dXJuIC1FSU5WQUw7Cj4gPiA+ICsgIERybUNvbm5lY3RvciAqd3JpdGViYWNrX2Nvbm4gPQo+ID4g PiArICAgICAgZHJtXy0+cmVzb3VyY2VfbWFuYWdlcigpLT5BdmFpbGFibGVXcml0ZWJhY2tDb25u ZWN0b3IoZGlzcGxheV8pOwo+ID4gPiArICBpZiAoIWFjdGl2ZV9jb21wb3NpdGlvbl8gfHwgIXdy aXRlYmFja19jb25uKQo+ID4gPiArICAgIHJldHVybiAtRUlOVkFMOwo+ID4gPiArICBzdGQ6OnZl Y3RvcjxEcm1Db21wb3NpdGlvblBsYW5lPiAmc3JjX3BsYW5lcyA9Cj4gPiA+ICsgICAgICBhY3Rp dmVfY29tcG9zaXRpb25fLT5jb21wb3NpdGlvbl9wbGFuZXMoKTsKPiA+ID4gKyAgc2l6ZV90IHNy Y19wbGFuZXNfd2l0aF9sYXllciA9IHN0ZDo6Y291bnRfaWYoCj4gPiA+ICsgICAgICBzcmNfcGxh bmVzLmJlZ2luKCksIHNyY19wbGFuZXMuZW5kKCksIFtdKERybUNvbXBvc2l0aW9uUGxhbmUgJnAp IHsKPiA+ID4gKyAgICAgICAgcmV0dXJuIHAudHlwZSgpICE9IERybUNvbXBvc2l0aW9uUGxhbmU6 OlR5cGU6OmtEaXNhYmxlOwo+ID4gPiArICAgICAgfSk7Cj4gPiA+ICsKPiA+ID4gKyAgaWYgKHNy Y19wbGFuZXNfd2l0aF9sYXllciA8PSAxKQo+ID4gPiArICAgIHJldHVybiAtRUFMUkVBRFk7Cj4g PiA+ICsKPiA+ID4gKyAgaWYgKHdyaXRlYmFja19jb25uLT5kaXNwbGF5KCkgPT0gZGlzcGxheV8p IHsKPiA+ID4gKyAgICByZXR1cm4gRmxhdHRlblN5bmNocm9ub3VzbHkod3JpdGViYWNrX2Nvbm4p Owo+ID4gPiArICB9Cj4gPiA+ICsKPiA+ID4gKyAgcmV0dXJuIDA7Cj4gPiA+ICB9Cj4gPiA+ICAK PiA+ID4gIGludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6U3F1YXNoQWxsKCkgewo+ID4gPiBkaWZm IC0tZ2l0IGEvZHJtZGlzcGxheWNvbXBvc2l0b3IuaCBiL2RybWRpc3BsYXljb21wb3NpdG9yLmgK PiA+ID4gaW5kZXggMjYyMDFiOS4uNGNjNGE1ZSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJtZGlzcGxh eWNvbXBvc2l0b3IuaAo+ID4gPiArKysgYi9kcm1kaXNwbGF5Y29tcG9zaXRvci5oCj4gPiA+IEBA IC0xMjUsNyArMTI1LDkgQEAgY2xhc3MgRHJtRGlzcGxheUNvbXBvc2l0b3Igewo+ID4gPiAgICBp bnQgQXBwbHlTcXVhc2goRHJtRGlzcGxheUNvbXBvc2l0aW9uICpkaXNwbGF5X2NvbXApOwo+ID4g PiAgICBpbnQgQXBwbHlQcmVDb21wb3NpdGUoRHJtRGlzcGxheUNvbXBvc2l0aW9uICpkaXNwbGF5 X2NvbXApOwo+ID4gPiAgICBpbnQgUHJlcGFyZUZyYW1lKERybURpc3BsYXlDb21wb3NpdGlvbiAq ZGlzcGxheV9jb21wKTsKPiA+ID4gLSAgaW50IENvbW1pdEZyYW1lKERybURpc3BsYXlDb21wb3Np dGlvbiAqZGlzcGxheV9jb21wLCBib29sIHRlc3Rfb25seSk7Cj4gPiA+ICsgIGludCBDb21taXRG cmFtZShEcm1EaXNwbGF5Q29tcG9zaXRpb24gKmRpc3BsYXlfY29tcCwgYm9vbCB0ZXN0X29ubHks Cj4gPiA+ICsgICAgICAgICAgICAgICAgICBEcm1EaXNwbGF5Q29tcG9zaXRpb24gKndyaXRlYmFj a19jb21wID0gTlVMTCwKPiA+ID4gKyAgICAgICAgICAgICAgICAgIERybUNvbm5lY3RvciAqd3Jp dGViYWNrX2Nvbm4gPSBOVUxMKTsKPiA+ID4gICAgaW50IFNxdWFzaEZyYW1lKERybURpc3BsYXlD b21wb3NpdGlvbiAqc3JjLCBEcm1EaXNwbGF5Q29tcG9zaXRpb24gKmRzdCk7Cj4gPiA+ICAgIGlu dCBBcHBseURwbXMoRHJtRGlzcGxheUNvbXBvc2l0aW9uICpkaXNwbGF5X2NvbXApOwo+ID4gPiAg ICBpbnQgRGlzYWJsZVBsYW5lcyhEcm1EaXNwbGF5Q29tcG9zaXRpb24gKmRpc3BsYXlfY29tcCk7 Cj4gPiA+IEBAIC0xMzQsNyArMTM2LDEwIEBAIGNsYXNzIERybURpc3BsYXlDb21wb3NpdG9yIHsK PiA+ID4gICAgdm9pZCBBcHBseUZyYW1lKHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9z aXRpb24+IGNvbXBvc2l0aW9uLAo+ID4gPiAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cywg Ym9vbCB3cml0ZWJhY2sgPSBmYWxzZSk7Cj4gPiA+ICAgIGludCBGbGF0dGVuU2NlbmUoKTsKPiA+ ID4gKyAgaW50IEZsYXR0ZW5TeW5jaHJvbm91c2x5KERybUNvbm5lY3RvciAqd3JpdGViYWNrX2Nv bm4pOwo+ID4gCj4gPiBDYW4gd2UgY29tZSB1cCB3aXRoIGEgYmV0dGVyIG5hbWUgdGhhbiBTeW5j aG9ucm91cy9Bc3luY2hyb25vdXM/IE9yIGF0IHRoZSB2ZXJ5Cj4gPiBsZWFzdCBjb21tZW50IG9u IHdoYXQgdGhhdCBtZWFucz8KPiA+IAo+ID4gPiAgCj4gPiA+ICsgIGludCBXcml0ZWJhY2tDb21w b3NpdGUoRHJtRGlzcGxheUNvbXBvc2l0aW9uICpzcmMsIERybURpc3BsYXlDb21wb3NpdGlvbiAq ZHN0LAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIERybUNvbm5lY3RvciAqd3JpdGVi YWNrX2Nvbm4pOwo+ID4gPiAgICBib29sIENvdW50ZG93bkV4cGlyZWQoKSBjb25zdDsKPiA+ID4g IAo+ID4gPiAgICBzdGQ6OnR1cGxlPGludCwgdWludDMyX3Q+IENyZWF0ZU1vZGVCbG9iKGNvbnN0 IERybU1vZGUgJm1vZGUpOwo+ID4gPiAtLSAKPiA+ID4gMi43LjQKPiA+ID4gCj4gPiAKPiA+IC0t IAo+ID4gU2VhbiBQYXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MK PiAKPiAtLSAKPiBDaGVlcnMsCj4gQWxleCBHCgotLSAKU2VhbiBQYXVsLCBTb2Z0d2FyZSBFbmdp bmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==