From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 67AF389319 for ; Thu, 16 May 2019 12:59:16 +0000 (UTC) References: <20190510123349.5072-1-maarten.lankhorst@linux.intel.com> <0857cfca-743f-b83a-67f1-72d925700f2c@linux.intel.com> <2c3e93c8f8659a9050668211c751d1d5116d3516.camel@bootlin.com> <4e955d61-6dac-cbd8-0ac5-ac73e4430f13@linux.intel.com> From: Maarten Lankhorst Message-ID: <15f51fe5-0a6b-7f4a-4711-ecaf5e6627a8@linux.intel.com> Date: Thu, 16 May 2019 14:59:12 +0200 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t 1/2] lib/igt_fb: Use cairo conversion in igt_fb_convert_with_stride, v3. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: juhapekka.heikkila@gmail.com, Paul Kocialkowski , igt-dev@lists.freedesktop.org List-ID: T3AgMTQtMDUtMjAxOSBvbSAwODozNCBzY2hyZWVmIEp1aGEtUGVra2EgSGVpa2tpbGE6Cj4gVGhp cyBjaGFuZ2UgbG9vayBvayB0byBtZS4gVG8gbWUgaXQgbG9vayB2YzQgdGlsaW5nIGhhbmRsaW5n IHN0YXkgb24gc2FtZSBsZXZlbCBhcyB3aGF0IGl0IHdhcyBiZWZvcmUgYXMgd2hhdCBQYXVsIHdh cyB3b3JyaWVkIGFib3V0Lgo+Cj4gUmV2aWV3ZWQtYnk6IEp1aGEtUGVra2EgSGVpa2tpbGEgPGp1 aGFwZWtrYS5oZWlra2lsYUBnbWFpbC5jb20+Cj4KVGhhbmtzLCBwdXNoZWQgYW5kIDIvMiBhcyB3 ZWxsLiA6KQoKPiBPbiAxMC41LjIwMTkgMTkuMDIsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ PiBPcCAxMC0wNS0yMDE5IG9tIDE3OjEwIHNjaHJlZWYgUGF1bCBLb2NpYWxrb3dza2k6Cj4+PiBI aSwKPj4+Cj4+PiBPbiBGcmksIDIwMTktMDUtMTAgYXQgMTY6MTkgKzAyMDAsIE1hYXJ0ZW4gTGFu a2hvcnN0IHdyb3RlOgo+Pj4+IE9wIDEwLTA1LTIwMTkgb20gMTU6NDMgc2NocmVlZiBQYXVsIEtv Y2lhbGtvd3NraToKPj4+Pj4gSGksCj4+Pj4+Cj4+Pj4+IEl0IGxvb2tzIGxpa2UgSSBmZWxsIGJl aGluZCBvbiByZXZpZXdpbmcgZWFybGllciB2ZXJzaW9uIGhlcmUsIHNvcnJ5Cj4+Pj4+IGFib3V0 IHRoYXQuCj4+Pj4+Cj4+Pj4+IE9uIEZyaSwgMjAxOS0wNS0xMCBhdCAxNDozMyArMDIwMCwgTWFh cnRlbiBMYW5raG9yc3Qgd3JvdGU6Cj4+Pj4+PiBFdmVyIHNpbmNlIGNvbW1pdCAzZmE2NWY0YjUz MmJkOWE1YiAoImZiOiBBZGQgc3VwcG9ydCBmb3IgY29udmVyc2lvbnMKPj4+Pj4+IHRocm91Z2gg cGl4bWFuIikgd2UgY2FuIGdlbmVyYXRlIGEgdmFsaWQgY2Fpcm8gc3VyZmFjZSBmb3IgYW55IHBs YW5lLAo+Pj4+Pj4gdXNlIHRoaXMgdG8gYXZvaWQgaGF2aW5nIHRvIGltcGxlbWVudCBvdXIgb3du IGNvbnZlcnNpb24gcm91dGluZS4KPj4+Pj4+Cj4+Pj4+PiBJbnN0ZWFkIG9mIGR1cGxpY2F0aW5n IHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBpZ3RfZmJfY29udmVydF93aXRoX3N0cmlkZSwKPj4+Pj4+ IHdlIGNhbiBzaW1wbHkgY29udmVydCB0aGlzIHRvIGEgZmV3IGNhaXJvIGNhbGxzLCBiZWNhdXNl IHdlIG5vdyBzdXBwb3J0Cj4+Pj4+PiBjYWlybyBjYWxscyB0byBhbnkgb2YgdGhlIHN1cHBvcnRl ZCBmcmFtZWJ1ZmZlciBmb3JtYXRzLgo+Pj4+PiBJIGRvbid0IHNlZSBob3cgdGhhdCBpcyB0aGUg Y2FzZS4gQ2Fpcm8gZGVmaW5pdGVseSBkb2VzIG5vdCBzdXBwb3J0IG91cgo+Pj4+PiB0aWxlZCBm b3JtYXRzLCBzbyB3ZSBjYW4ndCBqdXN0IHBpcGUgdGhlbSBpbnRvIGl0Lgo+Pj4+Pgo+Pj4+PiBB bmQgd2UgYWxyZWFkeSB1c2UgcGl4bWFuIGZvciBjb252ZXJ0aW5nIHRocm91Z2ggdGhlIGZiX2Nv bnZlcnQgY2FsbCB0bwo+Pj4+PiBjb252ZXJ0X3BpeG1hbiB3aGVuIHBvc3NpYmxlLiBBbHNvLCBt eSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgY2Fpcm8gaXMKPj4+Pj4gdmVyeSBsaW1pdGVkIGZvcm1h dC13aXNlLCBzbyB3ZSdyZSBtdWNoIGJldHRlciBvZmYgdXNpbmcgcGl4bWFuCj4+Pj4+IGRpcmVj dGx5ICh3aGljaCBpcyBpcyB3aGF0IGEgbm9uLWFjY2VsZXJhdGVkIGNhaXJvIHN1cmZhY2Ugd2ls bCBkbwo+Pj4+PiBhbnl3YXkpLgo+Pj4+Pgo+Pj4+Pj4gVGhpcyBpcyByZXF1aXJlZCB0byBtYWtl IHRoaXMgZnVuY3Rpb24gbW9yZSBnZW5lcmljLCBhbmQgY29udmVydCBmcm9tIGFueQo+Pj4+Pj4g Zm9ybWF0L21vZGlmaWVyIHRvIGFueSBvdGhlciBmb3JtYXQvbW9kaWZpZXIuCj4+Pj4+IFdlJ3Zl IGFscmVhZHkgZGVzaWduZWQgaXQgdG8gYmUgZ2VuZXJpYywgd2UganVzdCBuZWVkIGNvbnZlcnNp b24KPj4+Pj4gaGVscGVycyBmcm9tL3RvIChjdXJyZW50bHkgb25seSB0bykgaGFyZHdhcmUtc3Bl Y2lmaWMgdGlsaW5nIG1vZGlmaWVycy4KPj4+Pj4KPj4+Pj4gV2UgY2FuJ3QgZXhwZWN0IGNhaXJv IG9yIHBpeG1hbiB0byBkbyB0aGF0IGpvYiBhbmQgdGhpcyBjaGFuZ2UgcHJldHR5Cj4+Pj4+IG11 Y2gga2lsbHMgc3VwcG9ydCBmb3IgdGhlIHZjNCB0aWxpbmcgbW9kZXMgd2UndmUgYWRkZWQuCj4+ Pj4+Cj4+Pj4+IFVubGVzcyBJJ20gbWlzc2luZyBzb21ldGhpbmcsIHRoYXQncyBhIE5BQ0sgb24g bXkgc2lkZS4KPj4+PiBZb3UgaGF2ZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIGNvbnZlcnQgYSB1bnRp bGVkIGZiIHRvIHRpbGVkLCBidXQgbm90Cj4+Pj4gdGhlIG90aGVyIHdheSBhcm91bmQgaW4gaWd0 X3ZjNC5jCj4+PiBXZSBkb24ndCBuZWVkIGl0IGZvciBhbnl0aGluZyBhdCB0aGUgbW9tZW50IGJ1 dCBpdCB3b3VsZG4ndCBiZSBhCj4+PiBwcm9ibGVtIHRvIGNvbWUgdXAgd2l0aCBvbmUsIHN1cmUu Cj4+Pgo+Pj4+IElmIHlvdSBjb3VsZCBwcm92aWRlIHRoYXQsIHdlIGNvdWxkIGNvbnZlcnQgZnJv bSBhbnkgZmIvbW9kaWZpZXIKPj4+PiBmb3JtYXQgdG8gYW55IGZiL21vZGlmaWVyIGZvcm1hdCwg ZXZlbiB3aXRoIFZDNCB0aWxpbmcuCj4+PiBJIGRvbid0IGZ1bGx5IGdldCB0aGUgcG9pbnQgb2Yg dGhhdCBpZiBvdXIgdGVzdHMgYXJlIG5vdCBnb2luZyB0byB1c2UKPj4+IGl0LCBidXQgaXQgZG9l c24ndCBodXJ0IGVpdGhlciA6KQo+Pj4KPj4+PiBPdXIgaW50ZXJuYWwgY2Fpcm8gaG9va3MgYWxy ZWFkeSBwcm92aWRlIGhlbHBlcnMgZm9yIGNvbnZlcnNpb24sIHNlZQo+Pj4+IGlndF9nZXRfY2Fp cm9fc3VyZmFjZSgpIHdoaWNoIGNhbGxzCj4+Pj4gY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZl cnQoKQo+Pj4gTXkgZmVlbGluZyBpcyB0aGF0IHdlIHNob3VsZCBraWxsIHVzZSBvZiBjYWlybyBm b3JtYXRzIGFuZCBnbyB3aXRoCj4+PiBwaXhtYW4gZGlyZWN0bHkuCj4+Pgo+Pj4+IFNvbWUgY29u dmVyc2lvbnMgY2FuIG9ubHkgYmUgZG9uZSB0aHJvdWdoIGNhaXJvLCBjb252ZXJ0aW5nIGJldHdl ZW4KPj4+PiBQMDF4IGFuZCBYUkdCODg4OCBjYW5ub3QgYmUgZG9uZSBkaXJlY3RseSwKPj4+PiBv dXIgcGl4bWFuIHJlcHJlc2VudGF0aW9uIGZvciB0aGF0IGFyZSBkb25lIGluIHRoZSBmbG9hdGlu ZyBwb2ludAo+Pj4+IGZvcm1hdHMuCj4+PiBJJ20gbm90IHN1cmUgSSdtIGZvbGxvd2luZyB0aGlz IHBvaW50LCBidXQgaWYgdGhlcmUncyBhIGNvbnZlcnNpb24gdGhhdAo+Pj4gY2Fpcm8gY2FuIGRv IGFuZCBwaXhtYW4gY2FuJ3QsIGl0IGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHRoaW5nIHdvdWxkIGJl Cj4+PiB0byBmaXggcGl4bWFuIHRvIHN1cHBvcnQgaXQuIElzIHRoZXJlIGEgcmVhc29uIGluIHBh cnRpY3VsYXIgd2h5IHRoaXMKPj4+IHdvdWxkbid0IHdvcms/Cj4+Pgo+Pj4+IFRoZSBvbmx5IHdh eSB0byBjb252ZXJ0IGJldHdlZW4gc29tZSBmcmFtZWJ1ZmZlciBmb3JtYXRzIGFuZAo+Pj4+IG1v ZGlmaWVycyBpbiBpOTE1IGlzIGJ5IHVzaW5nIHRob3NlIGNvbnZlcnNpb24gZnVuY3Rpb25zLAo+ Pj4+IHRoZSBmYWN0IHRoYXQgaWd0X2ZiX2NvbnZlcnRfd2l0aF9zdHJpZGUgZG9lc24ndCBkbyB0 aG9zZSwgbWFrZXMgYQo+Pj4+IHRydWx5IHJhbmRvbSBoZG1pLWNtcC1wbGFuZXMtcmFuZG9tIHVz ZWxlc3MuCj4+PiBTbyBpdCBib2lscyBkb3duIHRvIGEgbWlzc2luZyBmb3JtYXQgc3VwcG9ydCBp c3N1ZSwgbm90IHJlYWxseSB0byBhbgo+Pj4gaXNzdWUgd2l0aCB0aGUgZXhpc3RpbmcgZmxvdy4K Pj4+Cj4+Pj4gSSB3YXMgZ2V0dGluZyBDUkMgbWlzbWF0Y2hlcyBiZWNhdXNlIHRoZSBpOTE1IG1v ZGlmaWVycyB3ZXJlbid0Cj4+Pj4gcmVzcGVjdGVkLiBXaGVuIEkgbWFkZSBzdXJlIHRoZXkgd2Vy ZSBiZWluZyByZXNwZWN0ZWQKPj4+PiBJIGVuZGVkIHVwIHdpdGggYSBkdXBsaWNhdGUgb2YgdGhl IGNhaXJvIGNvbnRleHQgc3R1ZmYuIFNvIHdoeSBub3QKPj4+PiBsb3NlIGEgbGl0dGxlIHNwZWVk IGFuZCB1c2UgdGhhdD8KPj4+IE15IGNvdW50ZXItc3VnZ2VzdGlvbiB3b3VsZCBiZSB0byBkbyB0 aGUgb3Bwb3NpdGUgYW5kIG1ha2Ugc3VyZSBwaXhtYW4KPj4+IGNhbiBkZWFsIHdpdGggdGhlc2Ug Y2FzZXMgb24gaXRzIG93bi4KPj4+Cj4+Pj4gSWYgeW91IHdyaXRlIGFuZCB0ZXN0IGEgZGV0aWxl ciBmdW5jdGlvbiwgSSBjYW4gaG9vayBpdCB1cCBmb3IgeW91Lgo+Pj4+IDopCj4+Pj4gSWYgbmVj ZXNzYXJ5IEkgY2FuIGRvIGl0IG15c2VsZiwgdG8gbW92ZSB0aGlzIHBhdGNoIGZvcndhcmQuCj4+ Pj4KPj4+PiBDYWlybyBzaG91bGRuJ3QgYmUgbXVjaCBzbG93ZXIgdGhhbiBwaXhtYW4sIGJlY2F1 c2UgaW50ZXJuYWxseSBpdAo+Pj4+IGFscmVhZHkgdXNlcyBwaXhtYW4gY2FsbHMgZm9yIHRoZSBi YWNrZW5kLgo+Pj4gU3VyZSwgYnV0IHRoYXQncyBub3QgY2Fpcm8ncyByb2xlOiBjYWlybyBpcyBh Ym91dCBkcmF3aW5nLCB3aGlsZSBwaXhtYW4KPj4+IGlzIGFib3V0IHBpeGVsIGNvbnZlcnNpb24u IEkgdGhpbmsgaXQgd291bGQgYmUgYmVzdCB0byBzdGljayB0byB0aGF0Lgo+Pj4KPj4+IENoZWVy cywKPj4+Cj4+PiBQYXVsCj4+Pgo+PiBXaGF0IGFib3V0IHRoaXM/Cj4+Cj4+IFdlIGNvdWxkIGRy YXcgcmVmZXJlbmNlIEZCJ3MgaW4gdmM0IHQgdGlsZWQgZm9ybWF0cyBub3cgdG9vLi4KPj4KPj4g LS0tODwtLS0tCj4+IMKgRnJvbSA3MjQyZWRkMmNkMDA5NjU1NjA4MGUwY2RhOGQ0ZWNlYTRlM2Zj NThkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQo+PiBGcm9tOiBNYWFydGVuIExhbmtob3JzdCA8 bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+PiBEYXRlOiBUdWUsIDIgQXByIDIw MTkgMTY6NTQ6MzAgKzAyMDAKPj4gU3ViamVjdDogW1BBVENIIGktZy10XSBsaWIvaWd0X2ZiOiBV c2UgY2Fpcm8gY29udmVyc2lvbiBpbgo+PiDCoCBpZ3RfZmJfY29udmVydF93aXRoX3N0cmlkZSwg djQuCj4+Cj4+IEV2ZXIgc2luY2UgY29tbWl0IDNmYTY1ZjRiNTMyYmQ5YTViICgiZmI6IEFkZCBz dXBwb3J0IGZvciBjb252ZXJzaW9ucwo+PiB0aHJvdWdoIHBpeG1hbiIpIHdlIGNhbiBnZW5lcmF0 ZSBhIHZhbGlkIGNhaXJvIHN1cmZhY2UgZm9yIGFueSBwbGFuZSwKPj4gdXNlIHRoaXMgdG8gYXZv aWQgaGF2aW5nIHRvIGltcGxlbWVudCBvdXIgb3duIGNvbnZlcnNpb24gcm91dGluZS4KPj4KPj4g SW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gaWd0X2ZiX2NvbnZl cnRfd2l0aF9zdHJpZGUsCj4+IHdlIGNhbiBzaW1wbHkgY29udmVydCB0aGlzIHRvIGEgZmV3IGNh aXJvIGNhbGxzLCBiZWNhdXNlIHdlIG5vdyBzdXBwb3J0Cj4+IGNhaXJvIGNhbGxzIHRvIGFueSBv ZiB0aGUgc3VwcG9ydGVkIGZyYW1lYnVmZmVyIGZvcm1hdHMuCj4+Cj4+IFRoaXMgaXMgcmVxdWly ZWQgdG8gbWFrZSB0aGlzIGZ1bmN0aW9uIG1vcmUgZ2VuZXJpYywgYW5kIGNvbnZlcnQgZnJvbSBh bnkKPj4gZm9ybWF0L21vZGlmaWVyIHRvIGFueSBvdGhlciBmb3JtYXQvbW9kaWZpZXIuCj4+Cj4+ IENoYW5nZXMgc2luY2UgdjE6Cj4+IC0gUmV0dXJuIGZiX2lkIGluIHRoZSBjYWlybyBjYXNlLgo+ PiBDaGFuZ2VzIHNpbmNlIHYyOgo+PiAtIFJlbW92ZSB0aGUgbWFudWFsIGNvbnZlcnNpb24gZmFs bGJhY2suCj4+IENoYW5nZXMgc2luY2UgdjM6Cj4+IC0gSW50ZWdyYXRlIFZDNCBjb252ZXJzaW9u IHJvdXRpbmVzLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRl bi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+PiBDYzogUGF1bCBLb2NpYWxrb3dza2kgPHBh dWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgo+PiAtLS0KPj4gwqAgbGliL2lndF9mYi5jwqAg fCAxMjkgKysrKysrKysrKystLS0tLS0tLS0tLS0KPj4gwqAgbGliL2lndF92YzQuYyB8IDI3OCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQo+PiDCoCBs aWIvaWd0X3ZjNC5oIHzCoCAxMiArLS0KPj4gwqAgMyBmaWxlcyBjaGFuZ2VkLCAyNDIgaW5zZXJ0 aW9ucygrKSwgMTc3IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9mYi5j IGIvbGliL2lndF9mYi5jCj4+IGluZGV4IGQ0OTI5MDE5OTcxYy4uYzZlMTgzOTdiNzU0IDEwMDY0 NAo+PiAtLS0gYS9saWIvaWd0X2ZiLmMKPj4gKysrIGIvbGliL2lndF9mYi5jCj4+IEBAIC0xNzE2 LDE3ICsxNzE2LDI1IEBAIHN0YXRpYyB2b2lkIGZyZWVfbGluZWFyX21hcHBpbmcoc3RydWN0IGZi X2JsaXRfdXBsb2FkICpibGl0KQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpZ3RfZmIgKmZiID0gYmxp dC0+ZmI7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGZiX2JsaXRfbGluZWFyICpsaW5lYXIgPSAmYmxp dC0+bGluZWFyOwo+PiDCoCAtwqDCoMKgIGdlbV9tdW5tYXAobGluZWFyLT5tYXAsIGxpbmVhci0+ ZmIuc2l6ZSk7Cj4+IC3CoMKgwqAgZ2VtX3NldF9kb21haW4oZmQsIGxpbmVhci0+ZmIuZ2VtX2hh bmRsZSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSTkxNV9HRU1fRE9NQUlOX0dU VCwgMCk7Cj4+ICvCoMKgwqAgaWYgKGlndF92YzRfaXNfdGlsZWQoZmItPm1vZGlmaWVyKSkgewo+ PiArwqDCoMKgwqDCoMKgwqAgdm9pZCAqbWFwID0gaWd0X3ZjNF9tbWFwX2JvKGZkLCBmYi0+Z2Vt X2hhbmRsZSwgZmItPnNpemUsIFBST1RfV1JJVEUpOwo+PiDCoCAtwqDCoMKgIGlmIChibGl0LT5i YXRjaCkKPj4gLcKgwqDCoMKgwqDCoMKgIHJlbmRlcmNvcHkoYmxpdCwgZmIsICZsaW5lYXItPmZi KTsKPj4gLcKgwqDCoCBlbHNlCj4+IC3CoMKgwqDCoMKgwqDCoCBibGl0Y29weShmYiwgJmxpbmVh ci0+ZmIpOwo+PiArwqDCoMKgwqDCoMKgwqAgdmM0X2ZiX2NvbnZlcnRfcGxhbmVfdG9fdGlsZWQo ZmIsIG1hcCwgJmxpbmVhci0+ZmIsICZsaW5lYXItPm1hcCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgIG11bm1hcChtYXAsIGZiLT5zaXplKTsKPj4gK8KgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKg wqDCoMKgwqAgZ2VtX211bm1hcChsaW5lYXItPm1hcCwgbGluZWFyLT5mYi5zaXplKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXItPmZiLmdlbV9oYW5kbGUsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoYmxpdC0+YmF0Y2gpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJlbmRlcmNvcHkoYmxpdCwgZmIsICZsaW5lYXItPmZiKTsKPj4gK8KgwqDCoMKgwqDCoMKg IGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmxpdGNvcHkoZmIsICZsaW5lYXItPmZi KTsKPj4gwqAgLcKgwqDCoCBnZW1fc3luYyhmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPj4g LcKgwqDCoCBnZW1fY2xvc2UoZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSk7Cj4+ICvCoMKgwqDC oMKgwqDCoCBnZW1fc3luYyhmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPj4gK8KgwqDCoMKg wqDCoMKgIGdlbV9jbG9zZShmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPj4gK8KgwqDCoCB9 Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKGJsaXQtPmJhdGNoKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJsaXQtPmJhdGNoKTsKPj4gQEAgLTE3NTEsNyArMTc1 OSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX2xpbmVhcl9tYXBwaW5nKHN0cnVjdCBmYl9ibGl0X3Vw bG9hZCAqYmxpdCkKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaWd0X2ZiICpmYiA9IGJsaXQtPmZiOwo+ PiDCoMKgwqDCoMKgIHN0cnVjdCBmYl9ibGl0X2xpbmVhciAqbGluZWFyID0gJmJsaXQtPmxpbmVh cjsKPj4gwqAgLcKgwqDCoCBpZiAodXNlX3JlbmRlcmNvcHkoZmIpKSB7Cj4+ICvCoMKgwqAgaWYg KCFpZ3RfdmM0X2lzX3RpbGVkKGZiLT5tb2RpZmllcikgJiYgdXNlX3JlbmRlcmNvcHkoZmIpKSB7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBibGl0LT5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dl bV9pbml0KGZkLCA0MDk2KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJsaXQtPmJhdGNoID0gaW50 ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYmxpdC0+YnVmbWdyLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9nZXRfZHJt X2RldmlkKGZkKSk7Cj4+IEBAIC0xNzcxLDIzICsxNzc5LDM1IEBAIHN0YXRpYyB2b2lkIHNldHVw X2xpbmVhcl9tYXBwaW5nKHN0cnVjdCBmYl9ibGl0X3VwbG9hZCAqYmxpdCkKPj4gwqAgwqDCoMKg wqDCoCBpZ3RfYXNzZXJ0KGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSA+IDApOwo+PiDCoCAtwqDCoMKg IC8qIENvcHkgZmIgY29udGVudCB0byBsaW5lYXIgQk8gKi8KPj4gLcKgwqDCoCBnZW1fc2V0X2Rv bWFpbihmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKPj4gK8KgwqDCoCBpZiAoaWd0X3ZjNF9pc190aWxl ZChmYi0+bW9kaWZpZXIpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2b2lkICptYXAgPSBpZ3RfdmM0 X21tYXBfYm8oZmQsIGZiLT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgUFJPVF9SRUFEKTsKPj4gwqAg LcKgwqDCoCBpZiAoYmxpdC0+YmF0Y2gpCj4+IC3CoMKgwqDCoMKgwqDCoCByZW5kZXJjb3B5KGJs aXQsICZsaW5lYXItPmZiLCBmYik7Cj4+IC3CoMKgwqAgZWxzZQo+PiAtwqDCoMKgwqDCoMKgwqAg YmxpdGNvcHkoJmxpbmVhci0+ZmIsIGZiKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGxpbmVhci0+bWFw ID0gaWd0X3ZjNF9tbWFwX2JvKGZkLCBsaW5lYXItPmZiLmdlbV9oYW5kbGUsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5lYXItPmZiLnNp emUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPj4gwqAgLcKgwqDCoCBnZW1fc3luYyhmZCwgbGlu ZWFyLT5mYi5nZW1faGFuZGxlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHZjNF9mYl9jb252ZXJ0X3Bs YW5lX2Zyb21fdGlsZWQoJmxpbmVhci0+ZmIsICZsaW5lYXItPm1hcCwgZmIsIG1hcCk7Cj4+IMKg IC3CoMKgwqAgZ2VtX3NldF9kb21haW4oZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1f RE9NQUlOX0NQVSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBtdW5tYXAobWFwLCBmYi0+c2l6ZSk7Cj4+ ICvCoMKgwqAgfSBlbHNlIHsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIENvcHkgZmIgY29udGVudCB0 byBsaW5lYXIgQk8gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGdlbV9zZXRfZG9tYWluKGZkLCBsaW5l YXItPmZiLmdlbV9oYW5kbGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSTkx NV9HRU1fRE9NQUlOX0dUVCwgMCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChibGl0LT5i YXRjaCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVuZGVyY29weShibGl0LCAmbGluZWFy LT5mYiwgZmIpOwo+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBibGl0Y29weSgmbGluZWFyLT5mYiwgZmIpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBn ZW1fc3luYyhmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAgZ2VtX3NldF9kb21haW4oZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7 Cj4+IMKgIC3CoMKgwqAgLyogU2V0dXAgY2Fpcm8gY29udGV4dCAqLwo+PiAtwqDCoMKgIGxpbmVh ci0+bWFwID0gZ2VtX21tYXBfX2NwdShmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlLAo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwgbGluZWFyLT5mYi5zaXplLCBQ Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIFNldHVwIGNhaXJv IGNvbnRleHQgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGxpbmVhci0+bWFwID0gZ2VtX21tYXBfX2Nw dShmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgMCwgbGluZWFyLT5mYi5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF KTsKPj4gK8KgwqDCoCB9Cj4+IMKgIH0KPj4gwqAgwqAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJv X3N1cmZhY2VfX2dwdShpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+PiBAQCAtMjkwMiw3ICsy OTIyLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZlcnQoaW50IGZk LCBzdHJ1Y3QgaWd0X2ZiICpmYikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmJsaXQtPnNoYWRvd19mYik7Cj4+ IMKgwqDCoMKgwqAgaWd0X2Fzc2VydChibGl0LT5zaGFkb3dfcHRyKTsKPj4gwqAgLcKgwqDCoCBp ZiAodXNlX3JlbmRlcmNvcHkoZmIpIHx8IHVzZV9ibGl0dGVyKGZiKSkgewo+PiArwqDCoMKgIGlm ICh1c2VfcmVuZGVyY29weShmYikgfHwgdXNlX2JsaXR0ZXIoZmIpIHx8IGlndF92YzRfaXNfdGls ZWQoZmItPm1vZGlmaWVyKSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0dXBfbGluZWFyX21h cHBpbmcoJmJsaXQtPmJhc2UpOwo+PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBibGl0LT5iYXNlLmxpbmVhci5mYiA9ICpmYjsKPj4gQEAgLTI5ODMsNyArMzAwMyw3 IEBAIGNhaXJvX3N1cmZhY2VfdCAqaWd0X2dldF9jYWlyb19zdXJmYWNlKGludCBmZCwgc3RydWN0 IGlndF9mYiAqZmIpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgoZi0+Y2Fpcm9faWQg PT0gQ0FJUk9fRk9STUFUX0lOVkFMSUQpICYmCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKGYtPnBpeG1hbl9pZCAhPSBQSVhNQU5faW52YWxpZCkpKQo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fY29udmVydChmZCwgZmIpOwo+PiAtwqDC oMKgwqDCoMKgwqAgZWxzZSBpZiAodXNlX2JsaXR0ZXIoZmIpIHx8IHVzZV9yZW5kZXJjb3B5KGZi KSkKPj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKHVzZV9ibGl0dGVyKGZiKSB8fCB1c2VfcmVu ZGVyY29weShmYikgfHwgaWd0X3ZjNF9pc190aWxlZChmYi0+bW9kaWZpZXIpKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3B1KGZkLCBmYik7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNy ZWF0ZV9jYWlyb19zdXJmYWNlX19ndHQoZmQsIGZiKTsKPj4gQEAgLTMxMDIsNTggKzMxMjIsMjMg QEAgdW5zaWduZWQgaW50IGlndF9mYl9jb252ZXJ0X3dpdGhfc3RyaWRlKHN0cnVjdCBpZ3RfZmIg KmRzdCwgc3RydWN0IGlndF9mYiAqc3JjLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdWludDY0X3QgZHN0X21vZGlmaWVyLAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGRzdF9zdHJpZGUpCj4+IMKg IHsKPj4gLcKgwqDCoCBzdHJ1Y3QgZmJfY29udmVydCBjdnQgPSB7IH07Cj4+IC3CoMKgwqAgc3Ry dWN0IGlndF9mYiBsaW5lYXI7Cj4+IC3CoMKgwqAgdm9pZCAqZHN0X3B0ciwgKnNyY19wdHI7Cj4+ IC3CoMKgwqAgdWludDY0X3QgYmFzZV9tb2RpZmllcjsKPj4gK8KgwqDCoCAvKiBVc2UgdGhlIGNh aXJvIGFwaSB0byBjb252ZXJ0ICovCj4+ICvCoMKgwqAgY2Fpcm9fc3VyZmFjZV90ICpzdXJmID0g aWd0X2dldF9jYWlyb19zdXJmYWNlKHNyYy0+ZmQsIHNyYyk7Cj4+ICvCoMKgwqAgY2Fpcm9fdCAq Y3I7Cj4+IMKgwqDCoMKgwqAgaW50IGZiX2lkOwo+PiDCoCAtwqDCoMKgIGlmIChpc192YzRfZGV2 aWNlKHNyYy0+ZmQpKQo+PiAtwqDCoMKgwqDCoMKgwqAgYmFzZV9tb2RpZmllciA9IGZvdXJjY19t b2RfYnJvYWRjb21fbW9kKGRzdF9tb2RpZmllcik7Cj4+IC3CoMKgwqAgZWxzZQo+PiAtwqDCoMKg wqDCoMKgwqAgYmFzZV9tb2RpZmllciA9IGRzdF9tb2RpZmllcjsKPj4gLQo+PiAtwqDCoMKgIGZi X2lkID0gaWd0X2NyZWF0ZV9mYl93aXRoX2JvX3NpemUoc3JjLT5mZCwgc3JjLT53aWR0aCwgc3Jj LT5oZWlnaHQsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkc3RfZm91cmNjLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwgJmxpbmVhciwKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsIGRzdF9zdHJpZGUpOwo+PiArwqDC oMKgIGZiX2lkID0gaWd0X2NyZWF0ZV9mYl93aXRoX2JvX3NpemUoc3JjLT5mZCwgc3JjLT53aWR0 aCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNyYy0+ aGVpZ2h0LCBkc3RfZm91cmNjLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZHN0X21vZGlmaWVyLCBkc3QsIDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkc3Rfc3RyaWRlKTsKPj4gwqDCoMKgwqDCoCBpZ3Rf YXNzZXJ0KGZiX2lkID4gMCk7Cj4+IMKgIC3CoMKgwqAgc3JjX3B0ciA9IGlndF9mYl9tYXBfYnVm ZmVyKHNyYy0+ZmQsIHNyYyk7Cj4+IC3CoMKgwqAgaWd0X2Fzc2VydChzcmNfcHRyKTsKPj4gLQo+ PiAtwqDCoMKgIGRzdF9wdHIgPSBpZ3RfZmJfbWFwX2J1ZmZlcihsaW5lYXIuZmQsICZsaW5lYXIp Owo+PiAtwqDCoMKgIGlndF9hc3NlcnQoZHN0X3B0cik7Cj4+IC0KPj4gLcKgwqDCoCBjdnQuZHN0 LnB0ciA9IGRzdF9wdHI7Cj4+IC3CoMKgwqAgY3Z0LmRzdC5mYiA9ICZsaW5lYXI7Cj4+IC3CoMKg wqAgY3Z0LnNyYy5wdHIgPSBzcmNfcHRyOwo+PiAtwqDCoMKgIGN2dC5zcmMuZmIgPSBzcmM7Cj4+ IC3CoMKgwqAgZmJfY29udmVydCgmY3Z0KTsKPj4gLQo+PiAtwqDCoMKgIGlndF9mYl91bm1hcF9i dWZmZXIoZHN0LCBkc3RfcHRyKTsKPj4gLcKgwqDCoCBpZ3RfZmJfdW5tYXBfYnVmZmVyKHNyYywg c3JjX3B0cik7Cj4+IC0KPj4gLcKgwqDCoCBzd2l0Y2ggKGJhc2VfbW9kaWZpZXIpIHsKPj4gLcKg wqDCoCBjYXNlIERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1ZDNF9UX1RJTEVEOgo+PiAtwqDCoMKg wqDCoMKgwqAgZmJfaWQgPSBpZ3RfdmM0X2ZiX3RfdGlsZWRfY29udmVydChkc3QsICZsaW5lYXIp Owo+PiAtwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IC3CoMKgwqAgY2FzZSBEUk1fRk9STUFUX01P RF9CUk9BRENPTV9TQU5EMzI6Cj4+IC3CoMKgwqAgY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENP TV9TQU5ENjQ6Cj4+IC3CoMKgwqAgY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5EMTI4 Ogo+PiAtwqDCoMKgIGNhc2UgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fU0FORDI1NjoKPj4gLcKg wqDCoMKgwqDCoMKgIGZiX2lkID0gdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVydChkc3QsICZsaW5l YXIsIGRzdF9tb2RpZmllcik7Cj4+IC3CoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gLcKgwqDCoCBk ZWZhdWx0Ogo+PiAtwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydChkc3RfbW9kaWZpZXIgPT0gTE9D QUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSk7Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgaWd0 X2Fzc2VydChmYl9pZCA+IDApOwo+PiArwqDCoMKgIGNyID0gaWd0X2dldF9jYWlyb19jdHgoZHN0 LT5mZCwgZHN0KTsKPj4gK8KgwqDCoCBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmYs IDAsIDApOwo+PiArwqDCoMKgIGNhaXJvX3BhaW50KGNyKTsKPj4gK8KgwqDCoCBpZ3RfcHV0X2Nh aXJvX2N0eChkc3QtPmZkLCBkc3QsIGNyKTsKPj4gwqAgLcKgwqDCoCBpZiAoZHN0X21vZGlmaWVy ID09IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUpCj4+IC3CoMKgwqDCoMKgwqDCoCAqZHN0ID0g bGluZWFyOwo+PiAtwqDCoMKgIGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgIGlndF9yZW1vdmVfZmIo bGluZWFyLmZkLCAmbGluZWFyKTsKPj4gK8KgwqDCoCBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3Vy Zik7Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIGZiX2lkOwo+PiDCoCB9Cj4+IGRpZmYgLS1naXQg YS9saWIvaWd0X3ZjNC5jIGIvbGliL2lndF92YzQuYwo+PiBpbmRleCA5YTBiYTMwYjQ0MjAuLjQ0 MTVmYTMyMWNlYiAxMDA2NDQKPj4gLS0tIGEvbGliL2lndF92YzQuYwo+PiArKysgYi9saWIvaWd0 X3ZjNC5jCj4+IEBAIC01Niw2ICs1NiwyMyBAQAo+PiDCoMKgICogdGVzdHMuCj4+IMKgwqAgKi8K Pj4gwqAgK2Jvb2wgaWd0X3ZjNF9pc190aWxlZCh1aW50NjRfdCBtb2RpZmllcikKPj4gK3sKPj4g K8KgwqDCoCBpZiAobW9kaWZpZXIgPj4gNTZVTEwgIT0gRFJNX0ZPUk1BVF9NT0RfVkVORE9SX0JS T0FEQ09NKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+PiArCj4+ICvCoMKgwqAg c3dpdGNoIChmb3VyY2NfbW9kX2Jyb2FkY29tX21vZChtb2RpZmllcikpIHsKPj4gK8KgwqDCoCBj YXNlIERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQzMjoKPj4gK8KgwqDCoCBjYXNlIERSTV9G T1JNQVRfTU9EX0JST0FEQ09NX1NBTkQ2NDoKPj4gK8KgwqDCoCBjYXNlIERSTV9GT1JNQVRfTU9E X0JST0FEQ09NX1NBTkQxMjg6Cj4+ICvCoMKgwqAgY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENP TV9TQU5EMjU2Ogo+PiArwqDCoMKgIGNhc2UgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fVkM0X1Rf VElMRUQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsKPj4gK8KgwqDCoCBkZWZhdWx0 Ogo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+PiArwqDCoMKgIH0KPj4gK30KPj4g Kwo+PiDCoCAvKioKPj4gwqDCoCAqIGlndF92YzRfZ2V0X2NsZWFyZWRfYm86Cj4+IMKgwqAgKiBA ZmQ6IGRldmljZSBmaWxlIGRlc2NyaXB0b3IKPj4gQEAgLTE3OCw2MyArMTk1LDEyIEBAIGJvb2wg aWd0X3ZjNF9wdXJnZWFibGVfYm8oaW50IGZkLCBpbnQgaGFuZGxlLCBib29sIHB1cmdlYWJsZSkK Pj4gwqDCoMKgwqDCoCByZXR1cm4gYXJnLnJldGFpbmVkOwo+PiDCoCB9Cj4+IMKgIC11bnNpZ25l ZCBpbnQgaWd0X3ZjNF9mYl90X3RpbGVkX2NvbnZlcnQoc3RydWN0IGlndF9mYiAqZHN0LCBzdHJ1 Y3QgaWd0X2ZiICpzcmMpCj4+IC17Cj4+IC3CoMKgwqAgdW5zaWduZWQgaW50IGZiX2lkOwo+PiAt wqDCoMKgIHVuc2lnbmVkIGludCBpLCBqOwo+PiAtwqDCoMKgIHZvaWQgKnNyY19idWY7Cj4+IC3C oMKgwqAgdm9pZCAqZHN0X2J1ZjsKPj4gLcKgwqDCoCBzaXplX3QgYnBwID0gc3JjLT5wbGFuZV9i cHBbMF07Cj4+IC3CoMKgwqAgc2l6ZV90IGRzdF9zdHJpZGUgPSBBTElHTihzcmMtPnN0cmlkZXNb MF0sIDEyOCk7Cj4+IC0KPj4gLcKgwqDCoCBmYl9pZCA9IGlndF9jcmVhdGVfZmJfd2l0aF9ib19z aXplKHNyYy0+ZmQsIHNyYy0+d2lkdGgsIHNyYy0+aGVpZ2h0LAo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3JjLT5kcm1fZm9ybWF0LAo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0ZPUk1BVF9NT0RfQlJP QURDT01fVkM0X1RfVElMRUQsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkc3QsIDAsIGRzdF9zdHJpZGUpOwo+PiAtwqDCoMKgIGlndF9hc3NlcnQoZmJf aWQgPiAwKTsKPj4gLQo+PiAtwqDCoMKgIGlndF9hc3NlcnQoYnBwID09IDE2IHx8IGJwcCA9PSAz Mik7Cj4+IC0KPj4gLcKgwqDCoCBzcmNfYnVmID0gaWd0X2ZiX21hcF9idWZmZXIoc3JjLT5mZCwg c3JjKTsKPj4gLcKgwqDCoCBpZ3RfYXNzZXJ0KHNyY19idWYpOwo+PiAtCj4+IC3CoMKgwqAgZHN0 X2J1ZiA9IGlndF9mYl9tYXBfYnVmZmVyKGRzdC0+ZmQsIGRzdCk7Cj4+IC3CoMKgwqAgaWd0X2Fz c2VydChkc3RfYnVmKTsKPj4gLQo+PiAtwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBzcmMtPmhlaWdo dDsgaSsrKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAwOyBqIDwgc3JjLT53aWR0aDsg aisrKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBzcmNfb2Zmc2V0ID0gc3Jj LT5vZmZzZXRzWzBdOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgZHN0X29mZnNl dCA9IGRzdC0+b2Zmc2V0c1swXTsKPj4gLQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcmNf b2Zmc2V0ICs9IHNyYy0+c3RyaWRlc1swXSAqIGkgKyBqICogYnBwIC8gODsKPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZHN0X29mZnNldCArPSBpZ3RfdmM0X3RfdGlsZWRfb2Zmc2V0KGRzdF9z dHJpZGUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNyYy0+aGVpZ2h0LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicHAsIGosIGkpOwo+ PiAtCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN3aXRjaCAoYnBwKSB7Cj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNhc2UgMTY6Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKih1aW50MTZfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1aW50MTZfdCAqKShzcmNfYnVmICsgc3JjX29m ZnNldCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNhc2UgMzI6Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKih1aW50MzJfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1aW50MzJfdCAqKShzcmNfYnVmICsgc3Jj X29mZnNldCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gLcKgwqDCoMKgwqDCoMKgIH0KPj4gLcKgwqDCoCB9 Cj4+IC0KPj4gLcKgwqDCoCBpZ3RfZmJfdW5tYXBfYnVmZmVyKHNyYywgc3JjX2J1Zik7Cj4+IC3C oMKgwqAgaWd0X2ZiX3VubWFwX2J1ZmZlcihkc3QsIGRzdF9idWYpOwo+PiAtCj4+IC3CoMKgwqAg cmV0dXJuIGZiX2lkOwo+PiAtfQo+PiDCoCDCoCAvKiBDYWxjdWxhdGUgdGhlIHQtdGlsZSB3aWR0 aCBzbyB0aGF0IHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIGJwcCAvIDguICovCj4+IMKgICNkZWZp bmUgVkM0X1RfVElMRV9XKHNpemUsIGhlaWdodCwgYnBwKSAoKHNpemUpIC8gKGhlaWdodCkgLyAo KGJwcCkgLyA4KSkKPj4gwqAgLXNpemVfdCBpZ3RfdmM0X3RfdGlsZWRfb2Zmc2V0KHNpemVfdCBz dHJpZGUsIHNpemVfdCBoZWlnaHQsIHNpemVfdCBicHAsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNpemVfdCB4LCBzaXplX3QgeSkKPj4gK3N0YXRpYyBzaXplX3QgaWd0 X3ZjNF90X3RpbGVkX29mZnNldChzaXplX3Qgc3RyaWRlLCBzaXplX3QgaGVpZ2h0LCBzaXplX3Qg YnBwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3Qg eCwgc2l6ZV90IHkpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBjb25zdCBzaXplX3QgdDFrX21hcF9l dmVuW10gPSB7IDAsIDMsIDEsIDIgfTsKPj4gwqDCoMKgwqDCoCBjb25zdCBzaXplX3QgdDFrX21h cF9vZGRbXSA9IHsgMiwgMSwgMywgMCB9Owo+PiBAQCAtMzA4LDE4ICsyNzQsMTE2IEBAIHNpemVf dCBpZ3RfdmM0X3RfdGlsZWRfb2Zmc2V0KHNpemVfdCBzdHJpZGUsIHNpemVfdCBoZWlnaHQsIHNp emVfdCBicHAsCj4+IMKgwqDCoMKgwqAgcmV0dXJuIG9mZnNldDsKPj4gwqAgfQo+PiDCoCAtc3Rh dGljIHZvaWQgdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVydF9wbGFuZShzdHJ1Y3QgaWd0X2ZiICpk c3QsIHZvaWQgKmRzdF9idWYsCj4+ICtzdGF0aWMgdm9pZCB2YzRfZmJfY29udmVydF9wbGFuZV90 b190X3RpbGVkKHN0cnVjdCBpZ3RfZmIgKmRzdCwgdm9pZCAqZHN0X2J1ZiwKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlndF9mYiAq c3JjLCB2b2lkICpzcmNfYnVmLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzaXplX3QgY29sdW1uX3dpZHRoX2J5dGVzLAo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgY29sdW1uX2hlaWdodCwK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgaW50IHBsYW5lKQo+PiDCoCB7Cj4+ICvCoMKgwqAgc2l6ZV90IGJwcCA9IHNyYy0+cGxh bmVfYnBwW3BsYW5lXTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgaSwgajsKPj4gKwo+PiArwqDC oMKgIGZvciAoaSA9IDA7IGkgPCBzcmMtPmhlaWdodDsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBmb3IgKGogPSAwOyBqIDwgc3JjLT53aWR0aDsgaisrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNpemVfdCBzcmNfb2Zmc2V0ID0gc3JjLT5vZmZzZXRzW3BsYW5lXTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGRzdF9vZmZzZXQgPSBkc3QtPm9mZnNldHNbcGxhbmVd Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNyY19vZmZzZXQgKz0gc3JjLT5zdHJp ZGVzW3BsYW5lXSAqIGkgKyBqICogYnBwIC8gODsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZHN0X29mZnNldCArPSBpZ3RfdmM0X3RfdGlsZWRfb2Zmc2V0KGRzdC0+c3RyaWRlc1twbGFuZV0s Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRzdC0+aGVpZ2h0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicHAsIGosIGkpOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN3aXRjaCAoYnBwKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNhc2UgMTY6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1 aW50MTZfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1aW50MTZfdCAqKShzcmNfYnVmICsgc3JjX29mZnNldCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNhc2UgMzI6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Kih1aW50MzJfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1aW50MzJfdCAqKShzcmNfYnVmICsgc3JjX29mZnNl dCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHZjNF9mYl9jb252ZXJ0X3BsYW5lX2Zyb21fdF90aWxlZChz dHJ1Y3QgaWd0X2ZiICpkc3QsIHZvaWQgKmRzdF9idWYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaWd0X2ZiICpzcmMsIHZvaWQg KnNyY19idWYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1bnNpZ25lZCBpbnQgcGxhbmUpCj4+ICt7Cj4+ICvCoMKgwqAgc2l6ZV90IGJwcCA9 IHNyYy0+cGxhbmVfYnBwW3BsYW5lXTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgaSwgajsKPj4g Kwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBzcmMtPmhlaWdodDsgaSsrKSB7Cj4+ICvCoMKg wqDCoMKgwqDCoCBmb3IgKGogPSAwOyBqIDwgc3JjLT53aWR0aDsgaisrKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNpemVfdCBzcmNfb2Zmc2V0ID0gc3JjLT5vZmZzZXRzW3BsYW5lXTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGRzdF9vZmZzZXQgPSBkc3QtPm9mZnNl dHNbcGxhbmVdOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNyY19vZmZzZXQgKz0g aWd0X3ZjNF90X3RpbGVkX29mZnNldChzcmMtPnN0cmlkZXNbcGxhbmVdLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz cmMtPmhlaWdodCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnBwLCBqLCBpKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3JjX29mZnNldCArPSBkc3QtPnN0cmlkZXNbcGxhbmVdICogaSArIGogKiBicHAgLyA4 Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN3aXRjaCAoYnBwKSB7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNhc2UgMTY6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKih1aW50MTZfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1aW50MTZfdCAqKShzcmNfYnVmICsgc3Jj X29mZnNldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNhc2UgMzI6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKih1aW50MzJfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1aW50MzJfdCAqKShzcmNfYnVmICsg c3JjX29mZnNldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDC oCB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzaXplX3QgdmM0X3NhbmRfdGlsZWRfb2Zmc2V0KHNp emVfdCBjb2x1bW5fd2lkdGgsIHNpemVfdCBjb2x1bW5fc2l6ZSwgc2l6ZV90IHgsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgeSwgc2l6ZV90IGJwcCkK Pj4gK3sKPj4gK8KgwqDCoCBzaXplX3Qgb2Zmc2V0ID0gMDsKPj4gK8KgwqDCoCBzaXplX3QgY29s c194Owo+PiArwqDCoMKgIHNpemVfdCBwaXhfeDsKPj4gKwo+PiArwqDCoMKgIC8qIE9mZnNldCB0 byB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWxldmFudCBjb2x1bW4uICovCj4+ICvCoMKgwqAgY29s c194ID0geCAvIGNvbHVtbl93aWR0aDsKPj4gK8KgwqDCoCBvZmZzZXQgKz0gY29sc194ICogY29s dW1uX3NpemU7Cj4+ICsKPj4gK8KgwqDCoCAvKiBPZmZzZXQgdG8gdGhlIHJlbGV2YW50IHBpeGVs LiAqLwo+PiArwqDCoMKgIHBpeF94ID0geCAlIGNvbHVtbl93aWR0aDsKPj4gK8KgwqDCoCBvZmZz ZXQgKz0gKGNvbHVtbl93aWR0aCAqIHkgKyBwaXhfeCkgKiBicHAgLyA4Owo+PiArCj4+ICvCoMKg wqAgcmV0dXJuIG9mZnNldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdmM0X2ZiX2NvbnZl cnRfcGxhbmVfdG9fc2FuZF90aWxlZChzdHJ1Y3QgaWd0X2ZiICpkc3QsIHZvaWQgKmRzdF9idWYs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBpZ3RfZmIgKnNyYywgdm9pZCAqc3JjX2J1ZiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHBsYW5lKQo+ PiArewo+PiArwqDCoMKgIHVpbnQ2NF90IG1vZGlmaWVyX2Jhc2UgPSBmb3VyY2NfbW9kX2Jyb2Fk Y29tX21vZChkc3QtPm1vZGlmaWVyKTsKPj4gK8KgwqDCoCB1aW50MzJfdCBjb2x1bW5faGVpZ2h0 ID0gZm91cmNjX21vZF9icm9hZGNvbV9wYXJhbShkc3QtPm1vZGlmaWVyKTsKPj4gK8KgwqDCoCB1 aW50MzJfdCBjb2x1bW5fd2lkdGhfYnl0ZXMsIGNvbHVtbl93aWR0aCwgY29sdW1uX3NpemU7Cj4+ IMKgwqDCoMKgwqAgc2l6ZV90IGJwcCA9IGRzdC0+cGxhbmVfYnBwW3BsYW5lXTsKPj4gLcKgwqDC oCBzaXplX3QgY29sdW1uX3dpZHRoID0gY29sdW1uX3dpZHRoX2J5dGVzICogZHN0LT5wbGFuZV93 aWR0aFtwbGFuZV0gLwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkc3Qt PndpZHRoOwo+PiAtwqDCoMKgIHNpemVfdCBjb2x1bW5fc2l6ZSA9IGNvbHVtbl93aWR0aF9ieXRl cyAqIGNvbHVtbl9oZWlnaHQ7Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGksIGo7Cj4+IMKg ICvCoMKgwqAgc3dpdGNoIChtb2RpZmllcl9iYXNlKSB7Cj4+ICvCoMKgwqAgY2FzZSBEUk1fRk9S TUFUX01PRF9CUk9BRENPTV9TQU5EMzI6Cj4+ICvCoMKgwqDCoMKgwqDCoCBjb2x1bW5fd2lkdGhf Ynl0ZXMgPSAzMjsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgRFJN X0ZPUk1BVF9NT0RfQlJPQURDT01fU0FORDY0Ogo+PiArwqDCoMKgwqDCoMKgwqAgY29sdW1uX3dp ZHRoX2J5dGVzID0gNjQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBjYXNl IERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQxMjg6Cj4+ICvCoMKgwqDCoMKgwqDCoCBjb2x1 bW5fd2lkdGhfYnl0ZXMgPSAxMjg7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDC oCBjYXNlIERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQyNTY6Cj4+ICvCoMKgwqDCoMKgwqDC oCBjb2x1bW5fd2lkdGhfYnl0ZXMgPSAyNTY7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4g K8KgwqDCoCBkZWZhdWx0Ogo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydChmYWxzZSk7Cj4+ ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgY29sdW1uX3dpZHRoID0gY29sdW1uX3dpZHRoX2J5 dGVzICogZHN0LT5wbGFuZV93aWR0aFtwbGFuZV0gLyBkc3QtPndpZHRoOwo+PiArwqDCoMKgIGNv bHVtbl9zaXplID0gY29sdW1uX3dpZHRoX2J5dGVzICogY29sdW1uX2hlaWdodDsKPj4gKwo+PiDC oMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBkc3QtPnBsYW5lX2hlaWdodFtwbGFuZV07IGkrKykg ewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChqID0gMDsgaiA8IHNyYy0+cGxhbmVfd2lkdGhb cGxhbmVdOyBqKyspIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHNyY19v ZmZzZXQgPSBzcmMtPm9mZnNldHNbcGxhbmVdOwo+PiBAQCAtMzQ2LDE5ICs0MTAsMTUgQEAgc3Rh dGljIHZvaWQgdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVydF9wbGFuZShzdHJ1Y3QgaWd0X2ZiICpk c3QsIHZvaWQgKmRzdF9idWYsCj4+IMKgwqDCoMKgwqAgfQo+PiDCoCB9Cj4+IMKgIC11bnNpZ25l ZCBpbnQgdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVydChzdHJ1Y3QgaWd0X2ZiICpkc3QsIHN0cnVj dCBpZ3RfZmIgKnNyYywKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHVpbnQ2NF90IG1vZGlmaWVyKQo+PiArc3RhdGljIHZvaWQgdmM0X2ZiX2NvbnZlcnRf cGxhbmVfZnJvbV9zYW5kX3RpbGVkKHN0cnVjdCBpZ3RfZmIgKmRzdCwgdm9pZCAqZHN0X2J1ZiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgaWd0X2ZiICpzcmMsIHZvaWQgKnNyY19idWYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHBsYW5lKQo+PiDCoCB7Cj4+ IC3CoMKgwqAgdWludDY0X3QgbW9kaWZpZXJfYmFzZTsKPj4gLcKgwqDCoCBzaXplX3QgY29sdW1u X3dpZHRoX2J5dGVzOwo+PiAtwqDCoMKgIHNpemVfdCBjb2x1bW5faGVpZ2h0Owo+PiAtwqDCoMKg IHVuc2lnbmVkIGludCBmYl9pZDsKPj4gLcKgwqDCoCB1bnNpZ25lZCBpbnQgaTsKPj4gLcKgwqDC oCB2b2lkICpzcmNfYnVmOwo+PiAtwqDCoMKgIHZvaWQgKmRzdF9idWY7Cj4+IC0KPj4gLcKgwqDC oCBtb2RpZmllcl9iYXNlID0gZm91cmNjX21vZF9icm9hZGNvbV9tb2QobW9kaWZpZXIpOwo+PiAt wqDCoMKgIGNvbHVtbl9oZWlnaHQgPSBmb3VyY2NfbW9kX2Jyb2FkY29tX3BhcmFtKG1vZGlmaWVy KTsKPj4gK8KgwqDCoCB1aW50NjRfdCBtb2RpZmllcl9iYXNlID0gZm91cmNjX21vZF9icm9hZGNv bV9tb2Qoc3JjLT5tb2RpZmllcik7Cj4+ICvCoMKgwqAgdWludDMyX3QgY29sdW1uX2hlaWdodCA9 IGZvdXJjY19tb2RfYnJvYWRjb21fcGFyYW0oc3JjLT5tb2RpZmllcik7Cj4+ICvCoMKgwqAgdWlu dDMyX3QgY29sdW1uX3dpZHRoX2J5dGVzLCBjb2x1bW5fd2lkdGgsIGNvbHVtbl9zaXplOwo+PiAr wqDCoMKgIHNpemVfdCBicHAgPSBzcmMtPnBsYW5lX2JwcFtwbGFuZV07Cj4+ICvCoMKgwqAgdW5z aWduZWQgaW50IGksIGo7Cj4+IMKgIMKgwqDCoMKgwqAgc3dpdGNoIChtb2RpZmllcl9iYXNlKSB7 Cj4+IMKgwqDCoMKgwqAgY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5EMzI6Cj4+IEBA IC0zNzcsNDEgKzQzNyw2MyBAQCB1bnNpZ25lZCBpbnQgdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVy dChzdHJ1Y3QgaWd0X2ZiICpkc3QsIHN0cnVjdCBpZ3RfZmIgKnNyYywKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIGlndF9hc3NlcnQoZmFsc2UpOwo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgLcKgwqDCoCBm Yl9pZCA9IGlndF9jcmVhdGVfZmIoc3JjLT5mZCwgc3JjLT53aWR0aCwgc3JjLT5oZWlnaHQsIHNy Yy0+ZHJtX2Zvcm1hdCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbW9k aWZpZXIsIGRzdCk7Cj4+IC3CoMKgwqAgaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+PiArwqDCoMKg IGNvbHVtbl93aWR0aCA9IGNvbHVtbl93aWR0aF9ieXRlcyAqIHNyYy0+cGxhbmVfd2lkdGhbcGxh bmVdIC8gc3JjLT53aWR0aDsKPj4gK8KgwqDCoCBjb2x1bW5fc2l6ZSA9IGNvbHVtbl93aWR0aF9i eXRlcyAqIGNvbHVtbl9oZWlnaHQ7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgZHN0 LT5wbGFuZV9oZWlnaHRbcGxhbmVdOyBpKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaiA9 IDA7IGogPCBzcmMtPnBsYW5lX3dpZHRoW3BsYW5lXTsgaisrKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNpemVfdCBzcmNfb2Zmc2V0ID0gc3JjLT5vZmZzZXRzW3BsYW5lXTsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGRzdF9vZmZzZXQgPSBkc3QtPm9mZnNldHNbcGxh bmVdOwo+PiDCoCAtwqDCoMKgIHNyY19idWYgPSBpZ3RfZmJfbWFwX2J1ZmZlcihzcmMtPmZkLCBz cmMpOwo+PiAtwqDCoMKgIGlndF9hc3NlcnQoc3JjX2J1Zik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNyY19vZmZzZXQgKz0gdmM0X3NhbmRfdGlsZWRfb2Zmc2V0KGNvbHVtbl93aWR0aCwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbHVtbl9zaXplLCBqLCBpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnBwKTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZHN0X29mZnNldCArPSBkc3QtPnN0cmlkZXNbcGxhbmVdICogaSArIGog KiBicHAgLyA4Owo+PiDCoCAtwqDCoMKgIGRzdF9idWYgPSBpZ3RfZmJfbWFwX2J1ZmZlcihkc3Qt PmZkLCBkc3QpOwo+PiAtwqDCoMKgIGlndF9hc3NlcnQoZHN0X2J1Zik7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN3aXRjaCAoYnBwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNh c2UgODoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqKHVpbnQ4X3QgKikoZHN0 X2J1ZiArIGRzdF9vZmZzZXQpID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICoodWludDhfdCAqKShzcmNfYnVmICsgc3JjX29mZnNldCk7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNh c2UgMTY6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKih1aW50MTZfdCAqKShk c3RfYnVmICsgZHN0X29mZnNldCkgPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKih1aW50MTZfdCAqKShzcmNfYnVmICsgc3JjX29mZnNldCk7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydChm YWxzZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0K Pj4gK8KgwqDCoCB9Cj4+ICt9Cj4+IMKgIC3CoMKgwqAgZm9yIChpID0gMDsgaSA8IGRzdC0+bnVt X3BsYW5lczsgaSsrKQo+PiAtwqDCoMKgwqDCoMKgwqAgdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVy dF9wbGFuZShkc3QsIGRzdF9idWYsIHNyYywgc3JjX2J1ZiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29sdW1uX3dpZHRoX2J5dGVzLAo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb2x1bW5faGVpZ2h0 LCBpKTsKPj4gK3ZvaWQgdmM0X2ZiX2NvbnZlcnRfcGxhbmVfdG9fdGlsZWQoc3RydWN0IGlndF9m YiAqZHN0LCB2b2lkICpkc3RfYnVmLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgaWd0X2ZiICpzcmMsIHZvaWQgKnNyY19idWYpCj4+ICt7Cj4+ICvC oMKgwqAgdW5zaWduZWQgaW50IHBsYW5lOwo+PiDCoCAtwqDCoMKgIGlndF9mYl91bm1hcF9idWZm ZXIoc3JjLCBzcmNfYnVmKTsKPj4gLcKgwqDCoCBpZ3RfZmJfdW5tYXBfYnVmZmVyKGRzdCwgZHN0 X2J1Zik7Cj4+ICvCoMKgwqAgaWd0X2Fzc2VydChzcmMtPm1vZGlmaWVyID09IERSTV9GT1JNQVRf TU9EX0xJTkVBUik7Cj4+ICvCoMKgwqAgaWd0X2Fzc2VydChpZ3RfdmM0X2lzX3RpbGVkKGRzdC0+ bW9kaWZpZXIpKTsKPj4gwqAgLcKgwqDCoCByZXR1cm4gZmJfaWQ7Cj4+ICvCoMKgwqAgZm9yIChw bGFuZSA9IDA7IHBsYW5lIDwgc3JjLT5udW1fcGxhbmVzOyBwbGFuZSsrKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoZHN0LT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9WQzRf VF9USUxFRCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmM0X2ZiX2NvbnZlcnRfcGxhbmVf dG9fdF90aWxlZChkc3QsIGRzdF9idWYsIHNyYywgc3JjX2J1ZiwgcGxhbmUpOwo+PiArwqDCoMKg wqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YzRfZmJfY29udmVydF9w bGFuZV90b19zYW5kX3RpbGVkKGRzdCwgZHN0X2J1Ziwgc3JjLCBzcmNfYnVmLCBwbGFuZSk7Cj4+ ICvCoMKgwqAgfQo+PiDCoCB9Cj4+IMKgIC1zaXplX3QgdmM0X3NhbmRfdGlsZWRfb2Zmc2V0KHNp emVfdCBjb2x1bW5fd2lkdGgsIHNpemVfdCBjb2x1bW5fc2l6ZSwgc2l6ZV90IHgsCj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgeSwgc2l6ZV90IGJwcCkKPj4gK3Zv aWQgdmM0X2ZiX2NvbnZlcnRfcGxhbmVfZnJvbV90aWxlZChzdHJ1Y3QgaWd0X2ZiICpkc3QsIHZv aWQgKmRzdF9idWYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgaWd0X2ZiICpzcmMsIHZvaWQgKnNyY19idWYpCj4+IMKgIHsKPj4gLcKgwqDC oCBzaXplX3Qgb2Zmc2V0ID0gMDsKPj4gLcKgwqDCoCBzaXplX3QgY29sc194Owo+PiAtwqDCoMKg IHNpemVfdCBwaXhfeDsKPj4gLQo+PiAtwqDCoMKgIC8qIE9mZnNldCB0byB0aGUgYmVnaW5uaW5n IG9mIHRoZSByZWxldmFudCBjb2x1bW4uICovCj4+IC3CoMKgwqAgY29sc194ID0geCAvIGNvbHVt bl93aWR0aDsKPj4gLcKgwqDCoCBvZmZzZXQgKz0gY29sc194ICogY29sdW1uX3NpemU7Cj4+ICvC oMKgwqAgdW5zaWduZWQgaW50IHBsYW5lOwo+PiDCoCAtwqDCoMKgIC8qIE9mZnNldCB0byB0aGUg cmVsZXZhbnQgcGl4ZWwuICovCj4+IC3CoMKgwqAgcGl4X3ggPSB4ICUgY29sdW1uX3dpZHRoOwo+ PiAtwqDCoMKgIG9mZnNldCArPSAoY29sdW1uX3dpZHRoICogeSArIHBpeF94KSAqIGJwcCAvIDg7 Cj4+ICvCoMKgwqAgaWd0X2Fzc2VydChpZ3RfdmM0X2lzX3RpbGVkKHNyYy0+bW9kaWZpZXIpKTsK Pj4gK8KgwqDCoCBpZ3RfYXNzZXJ0KGRzdC0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElO RUFSKTsKPj4gwqAgLcKgwqDCoCByZXR1cm4gb2Zmc2V0Owo+PiArwqDCoMKgIGZvciAocGxhbmUg PSAwOyBwbGFuZSA8IHNyYy0+bnVtX3BsYW5lczsgcGxhbmUrKykgewo+PiArwqDCoMKgwqDCoMKg wqAgaWYgKHNyYy0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fVkM0X1RfVElM RUQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZjNF9mYl9jb252ZXJ0X3BsYW5lX2Zyb21f dF90aWxlZChkc3QsIGRzdF9idWYsIHNyYywgc3JjX2J1ZiwgcGxhbmUpOwo+PiArwqDCoMKgwqDC oMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YzRfZmJfY29udmVydF9wbGFu ZV9mcm9tX3NhbmRfdGlsZWQoZHN0LCBkc3RfYnVmLCBzcmMsIHNyY19idWYsIHBsYW5lKTsKPj4g K8KgwqDCoCB9Cj4+IMKgIH0KPj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfdmM0LmggYi9saWIvaWd0 X3ZjNC5oCj4+IGluZGV4IGExNzgxMjY5OGZlNS4uZjMyYmYzOThiM2ViIDEwMDY0NAo+PiAtLS0g YS9saWIvaWd0X3ZjNC5oCj4+ICsrKyBiL2xpYi9pZ3RfdmM0LmgKPj4gQEAgLTI5LDE2ICsyOSwx NCBAQCBpbnQgaWd0X3ZjNF9jcmVhdGVfYm8oaW50IGZkLCBzaXplX3Qgc2l6ZSk7Cj4+IMKgIHZv aWQgKmlndF92YzRfbW1hcF9ibyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3Qgc2l6 ZSwgdW5zaWduZWQgcHJvdCk7Cj4+IMKgIGludCBpZ3RfdmM0X2dldF9wYXJhbShpbnQgZmQsIHVp bnQzMl90IHBhcmFtLCB1aW50NjRfdCAqdmFsKTsKPj4gwqAgYm9vbCBpZ3RfdmM0X3B1cmdlYWJs ZV9ibyhpbnQgZmQsIGludCBoYW5kbGUsIGJvb2wgcHVyZ2VhYmxlKTsKPj4gK2Jvb2wgaWd0X3Zj NF9pc190aWxlZCh1aW50NjRfdCBtb2RpZmllcik7Cj4+IMKgIMKgIHZvaWQgaWd0X3ZjNF9zZXRf dGlsaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBtb2RpZmllcik7Cj4+IMKg IHVpbnQ2NF90IGlndF92YzRfZ2V0X3RpbGluZyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7Cj4+ IMKgIC11bnNpZ25lZCBpbnQgaWd0X3ZjNF9mYl90X3RpbGVkX2NvbnZlcnQoc3RydWN0IGlndF9m YiAqZHN0LCBzdHJ1Y3QgaWd0X2ZiICpzcmMpOwo+PiAtc2l6ZV90IGlndF92YzRfdF90aWxlZF9v ZmZzZXQoc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IGJwcCwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHgsIHNpemVfdCB5KTsKPj4gLXVu c2lnbmVkIGludCB2YzRfZmJfc2FuZF90aWxlZF9jb252ZXJ0KHN0cnVjdCBpZ3RfZmIgKmRzdCwg c3RydWN0IGlndF9mYiAqc3JjLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdWludDY0X3QgbW9kaWZpZXIpOwo+PiAtc2l6ZV90IHZjNF9zYW5kX3RpbGVk X29mZnNldChzaXplX3QgY29sdW1uX3dpZHRoLCBzaXplX3QgY29sdW1uX3NpemUsIHNpemVfdCB4 LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHksIHNpemVfdCBi cHApOwo+PiArdm9pZCB2YzRfZmJfY29udmVydF9wbGFuZV90b190aWxlZChzdHJ1Y3QgaWd0X2Zi ICpkc3QsIHZvaWQgKmRzdF9idWYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBpZ3RfZmIgKnNyYywgdm9pZCAqc3JjX2J1Zik7Cj4+ICt2b2lkIHZj NF9mYl9jb252ZXJ0X3BsYW5lX2Zyb21fdGlsZWQoc3RydWN0IGlndF9mYiAqZHN0LCB2b2lkICpk c3RfYnVmLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGlndF9mYiAqc3JjLCB2b2lkICpzcmNfYnVmKTsKPj4gwqAgwqAgI2VuZGlmIC8qIElH VF9WQzRfSCAqLwo+Pgo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=