From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2399F45087 for ; Tue, 3 Jan 2023 19:06:44 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EA4D468BD94; Tue, 3 Jan 2023 21:06:41 +0200 (EET) Received: from mail-ua1-f47.google.com (mail-ua1-f47.google.com [209.85.222.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7FE6968BD4D for ; Tue, 3 Jan 2023 21:06:34 +0200 (EET) Received: by mail-ua1-f47.google.com with SMTP id t8so1372386uaj.5 for ; Tue, 03 Jan 2023 11:06:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=IAufd120lUtMic1B57kn1fKVFDxRHPXOmPgRk4dEGA4=; b=Tf5NTJaxOH/tvFlzSLs7pXs2LJfyirFi10g9OPuKatKLIxxnA9yg2P7GYHdKsLKa6B USLljgFJGFG+sBsynyyeOJlpygAlrqVuMaMvJ0Fh/GDG4zHtvA/Q8zgElcDVIPQWId2c f7OdfQIfo1SmWpVEH9bu7Nf1KDB7nV7qtRqqOCyRV4sjnN50NpK0tcrGf3gXTIKXXBfA t1Qm9THrtEOm8/eZwOxhFxADOWDHOasSRtAENqrlSVLXJHml/HFRjlCpi6vohzHV5m3Y dzKXLyYL25iXc62mqRGuQNK3rAMV14eyP/lVaGZSLXJnCeHDy5HqnKUxR4TkKhKTgGoi 7hAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=IAufd120lUtMic1B57kn1fKVFDxRHPXOmPgRk4dEGA4=; b=iIfEgzRZBD/Ru47yaJ9bq4FasSRNUwWvTVFlhWwZxNYxyDQefOJvQ+IvYDcqsmdQAV H3fQhX6856Grd94nbX+JICDIOq1b67ECxzvwNNVpueekKMNKZ7Eg6e0SWktaNiyclcwW rKbduySl8X6TDukP4vTHVbOSsXXOYaMNGMenkCPf4EKxfASfd8Koh+HJtBVXi1IFwT8b /T0SdBVdKIIBcESvidrVLOvzLSoC4zCj0hlcYAQxPyn5ylzuOuCg7lZZYg3XhPaIl3BZ JYeNhWGA1C3+WsiPUy3guVbkJMOvpvnryLQu/UfF4H+64z7qXH0QRkJ++b/wSxNQoRqr HHIw== X-Gm-Message-State: AFqh2kqQzWL4L1jbg/7hWWFG5ae6O+0HcWQVDvvQB0yqsjm+RzSxV0mi VyDGEEF5U31mu4UK0EMyBy/sy+Q4BTj4TwsmaztxCAwy X-Google-Smtp-Source: AMrXdXt9ytinw8YOxNXQegDv3vzeEZrvSuEQRcp4QT638Mx+xfmDZRLR4le6KrrpWMobTomWt77G8lQ828lXBWQKlwE= X-Received: by 2002:ab0:718d:0:b0:56d:b275:91d6 with SMTP id l13-20020ab0718d000000b0056db27591d6mr910365uao.42.1672772792457; Tue, 03 Jan 2023 11:06:32 -0800 (PST) MIME-Version: 1.0 References: <20221105152617.1809282-1-u@pkh.me> <20221227231814.2520181-1-u@pkh.me> <20221227231814.2520181-3-u@pkh.me> In-Reply-To: <20221227231814.2520181-3-u@pkh.me> From: Paul B Mahol Date: Tue, 3 Jan 2023 20:11:28 +0100 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v2 02/32] avfilter/palette{gen, use}: revert support palettes with alpha X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: =?UTF-8?B?Q2zDqW1lbnQgQsWTc2No?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: UGxlYXNlIGFkZCBhbHBoYSBzdXBwb3J0IGJhY2suCgpPbiBXZWQsIERlYyAyOCwgMjAyMiBhdCAx MjoxOCBBTSBDbMOpbWVudCBCxZNzY2ggPHVAcGtoLm1lPiB3cm90ZToKCj4gVGhpcyByZXZlcnRz IGNvbW1pdCBkZWE2NzNkMGQ1NDhjODY0ZWM4NWY5MjYwZDg5MDBkOTQ0ZWY3YTJhLgo+Cj4gVGhp cyBjaGFuZ2UgY2Fubm90IHdvcmsgZm9yIHNldmVyYWwgcmVhc29ucywgdGhlIG1vc3Qgb2J2aW91 cyBvbmVzIGFyZToKPgo+IC0gdGhlIGFscGhhIGlzIGJlaW5nIHBhcnQgb2YgdGhlIHNjb3Jpbmcg b2YgdGhlIGNvbG9yIGRpZmZlcmVuY2UsIGV2ZW4KPiAgIHRob3VnaCB3ZSBjYW4gbm90IGludGVy cHJldCB0aGUgYWxwaGEgYXMgcGFydCBvZiB0aGUgcGVyY2VwdGlvbiBvZiB0aGUKPiAgIGNvbG9y ICh3ZSBkb24ndCBldmVuIGtub3cgaWYgaXQncyBwcmVtdWx0aXBsaWVkIG9yIHBvc3RtdWx0aXBs aWVkKQo+IC0gdGhlIGNvbG9ycyBhcmUgYXZlcmFnZWQgd2l0aCB0aGVpciBhbHBoYSB2YWx1ZSB3 aGljaCBzaW1wbHkgY2Fubm90Cj4gICB3b3JrCj4KPiBUaGUgY29tbWFuZCBwcm9wb3NlZCBpbiB0 aGUgb3JpZ2luYWwgdGhyZWFkIG9mIHRoZSBwYXRjaCBhY3R1YWxseQo+IHByb2R1Y2VzIGEgY29t cGxldGVseSBicm9rZW4gZmlsZToKPgo+ICAgICBmZm1wZWcgLXkgLWxvZ2xldmVsIHZlcmJvc2Ug LWkgZmF0ZS1zdWl0ZS9hcG5nL29fc2FtcGxlLnBuZwo+IC1maWx0ZXJfY29tcGxleAo+ICJzcGxp dFtzcGxpdDFdW3NwbGl0Ml07W3NwbGl0MV1wYWxldHRlZ2VuPW1heF9jb2xvcnM9MjU0OnVzZV9h bHBoYT0xW3BhbDFdO1tzcGxpdDJdW3BhbDFdcGFsZXR0ZXVzZT11c2VfYWxwaGE9MSIKPiAtZnJh bWVzOnYgMSBvdXQucG5nCj4KPiBXZSBjYW4gc2VlIHRoYXQgbWFueSBjb2xvciBwaXhlbHMgYXJl IG9mZiwgYnV0IG1vcmUgaW1wb3J0YW50bHkgc29tZQo+IGNvbG9ycyBoYXZlIGEgcmFuZG9tIGFs cGhhIHZhbHVlOiBodHRwczovL2ltZ3VyLmNvbS9lRlEyVUs3Cj4KPiBJIGRvbid0IHNlZSBhbnkg ZWFzeSBmaXggZm9yIHRoaXMgdW5mb3J0dW5hdGVseSwgdGhlIGFwcHJvYWNoIGFwcGVhcnMgdG8K PiBiZSBmbGF3ZWQgYnkgZGVzaWduLgo+IC0tLQo+ICBkb2MvZmlsdGVycy50ZXhpICAgICAgICAg ICAgfCAgIDggLS0KPiAgbGliYXZmaWx0ZXIvdmZfcGFsZXR0ZWdlbi5jIHwgMTI3ICsrKysrKyst LS0tLS0tLS0tLS0tCj4gIGxpYmF2ZmlsdGVyL3ZmX3BhbGV0dGV1c2UuYyB8IDIyNSArKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAxMzggaW5z ZXJ0aW9ucygrKSwgMjIyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RvYy9maWx0ZXJz LnRleGkgYi9kb2MvZmlsdGVycy50ZXhpCj4gaW5kZXggOWI4NjZkZTVhZS4uZjUxNjIzZDE2YSAx MDA2NDQKPiAtLS0gYS9kb2MvZmlsdGVycy50ZXhpCj4gKysrIGIvZG9jL2ZpbHRlcnMudGV4aQo+ IEBAIC0xODQ3NCw5ICsxODQ3NCw2IEBAIENvbXB1dGUgbmV3IGhpc3RvZ3JhbSBmb3IgZWFjaCBm cmFtZS4KPiAgQGVuZCB0YWJsZQo+Cj4gIERlZmF1bHQgdmFsdWUgaXMgQHZhcntmdWxsfS4KPiAt QGl0ZW0gdXNlX2FscGhhCj4gLUNyZWF0ZSBhIHBhbGV0dGUgb2YgY29sb3JzIHdpdGggYWxwaGEg Y29tcG9uZW50cy4KPiAtU2V0dGluZyB0aGlzLCB3aWxsIGF1dG9tYXRpY2FsbHkgZGlzYWJsZSAn cmVzZXJ2ZV90cmFuc3BhcmVudCcuCj4gIEBlbmQgdGFibGUKPgo+ICBUaGUgZmlsdGVyIGFsc28g ZXhwb3J0cyB0aGUgZnJhbWUgbWV0YWRhdGEgQGNvZGV7bGF2ZmkuY29sb3JfcXVhbnRfcmF0aW99 Cj4gQEAgLTE4NTU1LDExICsxODU1Miw2IEBAIHdpbGwgYmUgdHJlYXRlZCBhcyBjb21wbGV0ZWx5 IG9wYXF1ZSwgYW5kIHZhbHVlcwo+IGJlbG93IHRoaXMgdGhyZXNob2xkIHdpbGwgYmUKPiAgdHJl YXRlZCBhcyBjb21wbGV0ZWx5IHRyYW5zcGFyZW50Lgo+Cj4gIFRoZSBvcHRpb24gbXVzdCBiZSBh biBpbnRlZ2VyIHZhbHVlIGluIHRoZSByYW5nZSBbMCwyNTVdLiBEZWZhdWx0IGlzCj4gQHZhcnsx Mjh9Lgo+IC0KPiAtQGl0ZW0gdXNlX2FscGhhCj4gLUFwcGx5IHRoZSBwYWxldHRlIGJ5IHRha2lu ZyBhbHBoYSB2YWx1ZXMgaW50byBhY2NvdW50LiBPbmx5IHVzZWZ1bCB3aXRoCj4gLXBhbGV0dGVz IHRoYXQgYXJlIGNvbnRhaW5pbmcgbXVsdGlwbGUgY29sb3JzIHdpdGggYWxwaGEgY29tcG9uZW50 cy4KPiAtU2V0dGluZyB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBkaXNhYmxlICdhbHBoYV90cmVz aG9sZCcuCj4gIEBlbmQgdGFibGUKPgo+ICBAc3Vic2VjdGlvbiBFeGFtcGxlcwo+IGRpZmYgLS1n aXQgYS9saWJhdmZpbHRlci92Zl9wYWxldHRlZ2VuLmMgYi9saWJhdmZpbHRlci92Zl9wYWxldHRl Z2VuLmMKPiBpbmRleCBjMDNmNjJiOTQyLi5iZWEzMjkyNzk2IDEwMDY0NAo+IC0tLSBhL2xpYmF2 ZmlsdGVyL3ZmX3BhbGV0dGVnZW4uYwo+ICsrKyBiL2xpYmF2ZmlsdGVyL3ZmX3BhbGV0dGVnZW4u Ywo+IEBAIC01OSw3ICs1OSw3IEBAIGVudW0gewo+ICB9Owo+Cj4gICNkZWZpbmUgTkJJVFMgNQo+ IC0jZGVmaW5lIEhJU1RfU0laRSAoMTw8KDQqTkJJVFMpKQo+ICsjZGVmaW5lIEhJU1RfU0laRSAo MTw8KDMqTkJJVFMpKQo+Cj4gIHR5cGVkZWYgc3RydWN0IFBhbGV0dGVHZW5Db250ZXh0IHsKPiAg ICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwo+IEBAIC02Nyw3ICs2Nyw2IEBAIHR5cGVkZWYgc3Ry dWN0IFBhbGV0dGVHZW5Db250ZXh0IHsKPiAgICAgIGludCBtYXhfY29sb3JzOwo+ICAgICAgaW50 IHJlc2VydmVfdHJhbnNwYXJlbnQ7Cj4gICAgICBpbnQgc3RhdHNfbW9kZTsKPiAtICAgIGludCB1 c2VfYWxwaGE7Cj4KPiAgICAgIEFWRnJhbWUgKnByZXZfZnJhbWU7ICAgICAgICAgICAgICAgICAg ICAvLyBwcmV2aW91cyBmcmFtZSB1c2VkIGZvcgo+IHRoZSBkaWZmIHN0YXRzX21vZGUKPiAgICAg IHN0cnVjdCBoaXN0X25vZGUgaGlzdG9ncmFtW0hJU1RfU0laRV07ICAvLyBoaXN0b2dyYW0vaGFz aHRhYmxlIG9mIHRoZQo+IGNvbG9ycwo+IEBAIC04OSw3ICs4OCw2IEBAIHN0YXRpYyBjb25zdCBB Vk9wdGlvbiBwYWxldHRlZ2VuX29wdGlvbnNbXSA9IHsKPiAgICAgICAgICB7ICJmdWxsIiwgImNv bXB1dGUgZnVsbCBmcmFtZSBoaXN0b2dyYW1zIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCj4gey5p NjQ9U1RBVFNfTU9ERV9BTExfRlJBTUVTfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJtb2Rl IiB9LAo+ICAgICAgICAgIHsgImRpZmYiLCAiY29tcHV0ZSBoaXN0b2dyYW1zIG9ubHkgZm9yIHRo ZSBwYXJ0IHRoYXQgZGlmZmVycyBmcm9tCj4gcHJldmlvdXMgZnJhbWUiLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQ9U1RBVFNfTU9ERV9ESUZGX0ZSQU1FU30sCj4gSU5UX01JTiwgSU5UX01B WCwgRkxBR1MsICJtb2RlIiB9LAo+ICAgICAgICAgIHsgInNpbmdsZSIsICJjb21wdXRlIG5ldyBo aXN0b2dyYW0gZm9yIGVhY2ggZnJhbWUiLCAwLAo+IEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1T VEFUU19NT0RFX1NJTkdMRV9GUkFNRVN9LCBJTlRfTUlOLCBJTlRfTUFYLAo+IEZMQUdTLCAibW9k ZSIgfSwKPiAtICAgIHsgInVzZV9hbHBoYSIsICJjcmVhdGUgYSBwYWxldHRlIGluY2x1ZGluZyBh bHBoYSB2YWx1ZXMiLAo+IE9GRlNFVCh1c2VfYWxwaGEpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2 NCA9IDB9LCAwLCAxLCBGTEFHUyB9LAo+ICAgICAgeyBOVUxMIH0KPiAgfTsKPgo+IEBAIC0xMTUs MTYgKzExMywxNSBAQCBzdGF0aWMgaW50IGNtcF8jI25hbWUoY29uc3Qgdm9pZCAqcGEsIGNvbnN0 IHZvaWQKPiAqcGIpICAgXAo+ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiAgICAgIGNvbnN0IHN0cnVjdCBjb2xvcl9yZWYgKiBjb25z dCAqYSA9IHBhOyAgICAgICAgICAgICBcCj4gICAgICBjb25zdCBzdHJ1Y3QgY29sb3JfcmVmICog Y29uc3QgKmIgPSBwYjsgICAgICAgICAgICAgXAo+IC0gICAgcmV0dXJuICAgKGludCkoKCphKS0+ Y29sb3IgPj4gKDggKiAoMyAtIChwb3MpKSkgJiAweGZmKSAgXAo+IC0gICAgICAgICAgIC0gKGlu dCkoKCpiKS0+Y29sb3IgPj4gKDggKiAoMyAtIChwb3MpKSkgJiAweGZmKTsgXAo+ICsgICAgcmV0 dXJuICAgKGludCkoKCphKS0+Y29sb3IgPj4gKDggKiAoMiAtIChwb3MpKSkgJiAweGZmKSAgXAo+ ICsgICAgICAgICAgIC0gKGludCkoKCpiKS0+Y29sb3IgPj4gKDggKiAoMiAtIChwb3MpKSkgJiAw eGZmKTsgXAo+ICB9Cj4KPiAtREVDTEFSRV9DTVBfRlVOQyhhLCAwKQo+IC1ERUNMQVJFX0NNUF9G VU5DKHIsIDEpCj4gLURFQ0xBUkVfQ01QX0ZVTkMoZywgMikKPiAtREVDTEFSRV9DTVBfRlVOQyhi LCAzKQo+ICtERUNMQVJFX0NNUF9GVU5DKHIsIDApCj4gK0RFQ0xBUkVfQ01QX0ZVTkMoZywgMSkK PiArREVDTEFSRV9DTVBfRlVOQyhiLCAyKQo+Cj4gLXN0YXRpYyBjb25zdCBjbXBfZnVuYyBjbXBf ZnVuY3NbXSA9IHtjbXBfYSwgY21wX3IsIGNtcF9nLCBjbXBfYn07Cj4gK3N0YXRpYyBjb25zdCBj bXBfZnVuYyBjbXBfZnVuY3NbXSA9IHtjbXBfciwgY21wX2csIGNtcF9ifTsKPgo+ICAvKioKPiAg ICogU2ltcGxlIGNvbG9yIGNvbXBhcmlzb24gZm9yIHNvcnRpbmcgdGhlIGZpbmFsIHBhbGV0dGUK PiBAQCAtMTQ2LDE3ICsxNDMsNiBAQCBzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgZGlmZihj b25zdCB1aW50MzJfdCBhLAo+IGNvbnN0IHVpbnQzMl90IGIpCj4gICAgICByZXR1cm4gZHIqZHIg KyBkZypkZyArIGRiKmRiOwo+ICB9Cj4KPiAtc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IGRp ZmZfYWxwaGEoY29uc3QgdWludDMyX3QgYSwgY29uc3QgdWludDMyX3QgYikKPiAtewo+IC0gICAg Y29uc3QgdWludDhfdCBjMVtdID0ge2EgPj4gMjQgJiAweGZmLCBhID4+IDE2ICYgMHhmZiwgYSA+ PiA4ICYgMHhmZiwKPiBhICYgMHhmZn07Cj4gLSAgICBjb25zdCB1aW50OF90IGMyW10gPSB7YiA+ PiAyNCAmIDB4ZmYsIGIgPj4gMTYgJiAweGZmLCBiID4+IDggJiAweGZmLAo+IGIgJiAweGZmfTsK PiAtICAgIGNvbnN0IGludCBkYSA9IGMxWzBdIC0gYzJbMF07Cj4gLSAgICBjb25zdCBpbnQgZHIg PSBjMVsxXSAtIGMyWzFdOwo+IC0gICAgY29uc3QgaW50IGRnID0gYzFbMl0gLSBjMlsyXTsKPiAt ICAgIGNvbnN0IGludCBkYiA9IGMxWzNdIC0gYzJbM107Cj4gLSAgICByZXR1cm4gZGEqZGEgKyBk cipkciArIGRnKmRnICsgZGIqZGI7Cj4gLX0KPiAtCj4gIC8qKgo+ICAgKiBGaW5kIHRoZSBuZXh0 IGJveCB0byBzcGxpdDogcGljayB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QgdmFyaWFuY2UKPiAg ICovCj4gQEAgLTE3OCwxMCArMTY0LDcgQEAgc3RhdGljIGludCBnZXRfbmV4dF9ib3hfaWRfdG9f c3BsaXQoUGFsZXR0ZUdlbkNvbnRleHQKPiAqcykKPgo+ICAgICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IGJveC0+bGVuOyBpKyspIHsKPiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgY29sb3JfcmVmICpyZWYgPSBzLT5yZWZzW2JveC0+c3RhcnQgKyBpXTsKPiAtICAgICAg ICAgICAgICAgICAgICBpZiAocy0+dXNlX2FscGhhKQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICB2YXJpYW5jZSArPSAoaW50NjRfdClkaWZmX2FscGhhKHJlZi0+Y29sb3IsCj4gYm94LT5jb2xv cikgKiByZWYtPmNvdW50Owo+IC0gICAgICAgICAgICAgICAgICAgIGVsc2UKPiAtICAgICAgICAg ICAgICAgICAgICAgICAgdmFyaWFuY2UgKz0gKGludDY0X3QpZGlmZihyZWYtPmNvbG9yLCBib3gt PmNvbG9yKQo+ICogcmVmLT5jb3VudDsKPiArICAgICAgICAgICAgICAgICAgICB2YXJpYW5jZSAr PSBkaWZmKHJlZi0+Y29sb3IsIGJveC0+Y29sb3IpICogcmVmLT5jb3VudDsKPiAgICAgICAgICAg ICAgICAgIH0KPiAgICAgICAgICAgICAgICAgIGJveC0+dmFyaWFuY2UgPSB2YXJpYW5jZTsKPiAg ICAgICAgICAgICAgfQo+IEBAIC0yMDEsMzEgKzE4NCwyNCBAQCBzdGF0aWMgaW50Cj4gZ2V0X25l eHRfYm94X2lkX3RvX3NwbGl0KFBhbGV0dGVHZW5Db250ZXh0ICpzKQo+ICAgKiBzcGVjaWZpZWQg Ym94LiBUYWtlcyBpbnRvIGFjY291bnQgdGhlIHdlaWdodCBvZiBlYWNoIGNvbG9yLgo+ICAgKi8K PiAgc3RhdGljIHVpbnQzMl90IGdldF9hdmdfY29sb3Ioc3RydWN0IGNvbG9yX3JlZiAqIGNvbnN0 ICpyZWZzLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmFu Z2VfYm94ICpib3gsIGludCB1c2VfYWxwaGEpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCByYW5nZV9ib3ggKmJveCkKPiAgewo+ICAgICAgaW50IGk7Cj4gICAg ICBjb25zdCBpbnQgbiA9IGJveC0+bGVuOwo+IC0gICAgdWludDY0X3QgYSA9IDAsIHIgPSAwLCBn ID0gMCwgYiA9IDAsIGRpdiA9IDA7Cj4gKyAgICB1aW50NjRfdCByID0gMCwgZyA9IDAsIGIgPSAw LCBkaXYgPSAwOwo+Cj4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gICAgICAgICAg Y29uc3Qgc3RydWN0IGNvbG9yX3JlZiAqcmVmID0gcmVmc1tib3gtPnN0YXJ0ICsgaV07Cj4gLSAg ICAgICAgaWYgKHVzZV9hbHBoYSkKPiAtICAgICAgICAgICAgYSArPSAocmVmLT5jb2xvciA+PiAy NCAmIDB4ZmYpICogcmVmLT5jb3VudDsKPiAtICAgICAgICByICs9IChyZWYtPmNvbG9yICAgICA+ PiAxNiAmIDB4ZmYpICogcmVmLT5jb3VudDsKPiAtICAgICAgICBnICs9IChyZWYtPmNvbG9yICAg ICA+PiAgOCAmIDB4ZmYpICogcmVmLT5jb3VudDsKPiAtICAgICAgICBiICs9IChyZWYtPmNvbG9y ICAgICAgICAgICAmIDB4ZmYpICogcmVmLT5jb3VudDsKPiArICAgICAgICByICs9IChyZWYtPmNv bG9yID4+IDE2ICYgMHhmZikgKiByZWYtPmNvdW50Owo+ICsgICAgICAgIGcgKz0gKHJlZi0+Y29s b3IgPj4gIDggJiAweGZmKSAqIHJlZi0+Y291bnQ7Cj4gKyAgICAgICAgYiArPSAocmVmLT5jb2xv ciAgICAgICAmIDB4ZmYpICogcmVmLT5jb3VudDsKPiAgICAgICAgICBkaXYgKz0gcmVmLT5jb3Vu dDsKPiAgICAgIH0KPgo+IC0gICAgaWYgKHVzZV9hbHBoYSkKPiAtICAgICAgICBhID0gYSAvIGRp djsKPiAgICAgIHIgPSByIC8gZGl2Owo+ICAgICAgZyA9IGcgLyBkaXY7Cj4gICAgICBiID0gYiAv IGRpdjsKPgo+IC0gICAgaWYgKHVzZV9hbHBoYSkKPiAtICAgICAgICByZXR1cm4gYTw8MjQgfCBy PDwxNiB8IGc8PDggfCBiOwo+IC0KPiAgICAgIHJldHVybiAweGZmVTw8MjQgfCByPDwxNiB8IGc8 PDggfCBiOwo+ICB9Cj4KPiBAQCAtMjQ0LDggKzIyMCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X2Jv eChQYWxldHRlR2VuQ29udGV4dCAqcywgc3RydWN0Cj4gcmFuZ2VfYm94ICpib3gsIGludCBuKQo+ ICAgICAgYXZfYXNzZXJ0MChib3gtPmxlbiAgICAgPj0gMSk7Cj4gICAgICBhdl9hc3NlcnQwKG5l d19ib3gtPmxlbiA+PSAxKTsKPgo+IC0gICAgYm94LT5jb2xvciAgICAgPSBnZXRfYXZnX2NvbG9y KHMtPnJlZnMsIGJveCwgcy0+dXNlX2FscGhhKTsKPiAtICAgIG5ld19ib3gtPmNvbG9yID0gZ2V0 X2F2Z19jb2xvcihzLT5yZWZzLCBuZXdfYm94LCBzLT51c2VfYWxwaGEpOwo+ICsgICAgYm94LT5j b2xvciAgICAgPSBnZXRfYXZnX2NvbG9yKHMtPnJlZnMsIGJveCk7Cj4gKyAgICBuZXdfYm94LT5j b2xvciA9IGdldF9hdmdfY29sb3Iocy0+cmVmcywgbmV3X2JveCk7Cj4gICAgICBib3gtPnZhcmlh bmNlICAgICA9IC0xOwo+ICAgICAgbmV3X2JveC0+dmFyaWFuY2UgPSAtMTsKPiAgfQo+IEBAIC0y NzUsNyArMjUxLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVfcGFsZXR0ZShBVkZpbHRlckNvbnRleHQg KmN0eCwKPiBBVkZyYW1lICpvdXQpCj4gICAgICAgICAgcGFsICs9IHBhbF9saW5lc2l6ZTsKPiAg ICAgIH0KPgo+IC0gICAgaWYgKHMtPnJlc2VydmVfdHJhbnNwYXJlbnQgJiYgIXMtPnVzZV9hbHBo YSkgewo+ICsgICAgaWYgKHMtPnJlc2VydmVfdHJhbnNwYXJlbnQpIHsKPiAgICAgICAgICBhdl9h c3NlcnQwKHMtPm5iX2JveGVzIDwgMjU2KTsKPiAgICAgICAgICBwYWxbb3V0LT53aWR0aCAtIHBh bF9saW5lc2l6ZSAtIDFdID0KPiBBVl9SQjMyKCZzLT50cmFuc3BhcmVuY3lfY29sb3IpID4+IDg7 Cj4gICAgICB9Cj4gQEAgLTM0Myw0OSArMzE5LDQwIEBAIHN0YXRpYyBBVkZyYW1lICpnZXRfcGFs ZXR0ZV9mcmFtZShBVkZpbHRlckNvbnRleHQKPiAqY3R4KQo+ICAgICAgYm94ID0gJnMtPmJveGVz W2JveF9pZF07Cj4gICAgICBib3gtPmxlbiA9IHMtPm5iX3JlZnM7Cj4gICAgICBib3gtPnNvcnRl ZF9ieSA9IC0xOwo+IC0gICAgYm94LT5jb2xvciA9IGdldF9hdmdfY29sb3Iocy0+cmVmcywgYm94 LCBzLT51c2VfYWxwaGEpOwo+ICsgICAgYm94LT5jb2xvciA9IGdldF9hdmdfY29sb3Iocy0+cmVm cywgYm94KTsKPiAgICAgIGJveC0+dmFyaWFuY2UgPSAtMTsKPiAgICAgIHMtPm5iX2JveGVzID0g MTsKPgo+ICAgICAgd2hpbGUgKGJveCAmJiBib3gtPmxlbiA+IDEpIHsKPiAtICAgICAgICBpbnQg aSwgYXIsIHJyLCBnciwgYnIsIGxvbmdlc3Q7Cj4gKyAgICAgICAgaW50IGksIHJyLCBnciwgYnIs IGxvbmdlc3Q7Cj4gICAgICAgICAgdWludDY0X3QgbWVkaWFuLCBib3hfd2VpZ2h0ID0gMDsKPgo+ ICAgICAgICAgIC8qIGNvbXB1dGUgdGhlIGJveCB3ZWlnaHQgKHN1bSBhbGwgdGhlIHdlaWdodHMg b2YgdGhlIGNvbG9ycyBpbgo+IHRoZQo+ICAgICAgICAgICAqIHJhbmdlKSBhbmQgaXRzIGJvdW5k aW5ncyAqLwo+IC0gICAgICAgIHVpbnQ4X3QgbWluWzRdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4 ZmZ9Owo+IC0gICAgICAgIHVpbnQ4X3QgbWF4WzRdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9 Owo+ICsgICAgICAgIHVpbnQ4X3QgbWluWzNdID0gezB4ZmYsIDB4ZmYsIDB4ZmZ9Owo+ICsgICAg ICAgIHVpbnQ4X3QgbWF4WzNdID0gezB4MDAsIDB4MDAsIDB4MDB9Owo+ICAgICAgICAgIGZvciAo aSA9IGJveC0+c3RhcnQ7IGkgPCBib3gtPnN0YXJ0ICsgYm94LT5sZW47IGkrKykgewo+ICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgY29sb3JfcmVmICpyZWYgPSBzLT5yZWZzW2ldOwo+ICAgICAg ICAgICAgICBjb25zdCB1aW50MzJfdCByZ2IgPSByZWYtPmNvbG9yOwo+IC0gICAgICAgICAgICBj b25zdCB1aW50OF90IGEgPSByZ2IgPj4gMjQgJiAweGZmLCByID0gcmdiID4+IDE2ICYgMHhmZiwg ZyA9Cj4gcmdiID4+IDggJiAweGZmLCBiID0gcmdiICYgMHhmZjsKPiAtICAgICAgICAgICAgbWlu WzBdID0gRkZNSU4oYSwgbWluWzBdKTsgbWF4WzBdID0gRkZNQVgoYSwgbWF4WzBdKTsKPiAtICAg ICAgICAgICAgbWluWzFdID0gRkZNSU4ociwgbWluWzFdKTsgbWF4WzFdID0gRkZNQVgociwgbWF4 WzFdKTsKPiAtICAgICAgICAgICAgbWluWzJdID0gRkZNSU4oZywgbWluWzJdKTsgbWF4WzJdID0g RkZNQVgoZywgbWF4WzJdKTsKPiAtICAgICAgICAgICAgbWluWzNdID0gRkZNSU4oYiwgbWluWzNd KTsgbWF4WzNdID0gRkZNQVgoYiwgbWF4WzNdKTsKPiArICAgICAgICAgICAgY29uc3QgdWludDhf dCByID0gcmdiID4+IDE2ICYgMHhmZiwgZyA9IHJnYiA+PiA4ICYgMHhmZiwgYiA9Cj4gcmdiICYg MHhmZjsKPiArICAgICAgICAgICAgbWluWzBdID0gRkZNSU4ociwgbWluWzBdKSwgbWF4WzBdID0g RkZNQVgociwgbWF4WzBdKTsKPiArICAgICAgICAgICAgbWluWzFdID0gRkZNSU4oZywgbWluWzFd KSwgbWF4WzFdID0gRkZNQVgoZywgbWF4WzFdKTsKPiArICAgICAgICAgICAgbWluWzJdID0gRkZN SU4oYiwgbWluWzJdKSwgbWF4WzJdID0gRkZNQVgoYiwgbWF4WzJdKTsKPiAgICAgICAgICAgICAg Ym94X3dlaWdodCArPSByZWYtPmNvdW50Owo+ICAgICAgICAgIH0KPgo+ICAgICAgICAgIC8qIGRl ZmluZSB0aGUgYXhpcyB0byBzb3J0IGJ5IGFjY29yZGluZyB0byB0aGUgd2lkZXN0IHJhbmdlIG9m Cj4gY29sb3JzICovCj4gLSAgICAgICAgYXIgPSBtYXhbMF0gLSBtaW5bMF07Cj4gLSAgICAgICAg cnIgPSBtYXhbMV0gLSBtaW5bMV07Cj4gLSAgICAgICAgZ3IgPSBtYXhbMl0gLSBtaW5bMl07Cj4g LSAgICAgICAgYnIgPSBtYXhbM10gLSBtaW5bM107Cj4gLSAgICAgICAgbG9uZ2VzdCA9IDI7IC8v IHBpY2sgZ3JlZW4gYnkgZGVmYXVsdCAodGhlIGNvbG9yIHRoZSBleWUgaXMgdGhlCj4gbW9zdCBz ZW5zaXRpdmUgdG8pCj4gLSAgICAgICAgaWYgKHMtPnVzZV9hbHBoYSkgewo+IC0gICAgICAgICAg ICBpZiAoYXIgPj0gcnIgJiYgYXIgPj0gYnIgJiYgYXIgPj0gZ3IpIGxvbmdlc3QgPSAwOwo+IC0g ICAgICAgICAgICBpZiAoYnIgPj0gcnIgJiYgYnIgPj0gZ3IgJiYgYnIgPj0gYXIpIGxvbmdlc3Qg PSAzOwo+IC0gICAgICAgICAgICBpZiAocnIgPj0gZ3IgJiYgcnIgPj0gYnIgJiYgcnIgPj0gYXIp IGxvbmdlc3QgPSAxOwo+IC0gICAgICAgICAgICBpZiAoZ3IgPj0gcnIgJiYgZ3IgPj0gYnIgJiYg Z3IgPj0gYXIpIGxvbmdlc3QgPSAyOyAvLyBwcmVmZXIKPiBncmVlbiBhZ2Fpbgo+IC0gICAgICAg IH0gZWxzZSB7Cj4gLSAgICAgICAgICAgIGlmIChiciA+PSByciAmJiBiciA+PSBncikgbG9uZ2Vz dCA9IDM7Cj4gLSAgICAgICAgICAgIGlmIChyciA+PSBnciAmJiByciA+PSBicikgbG9uZ2VzdCA9 IDE7Cj4gLSAgICAgICAgICAgIGlmIChnciA+PSByciAmJiBnciA+PSBicikgbG9uZ2VzdCA9IDI7 IC8vIHByZWZlciBncmVlbiBhZ2Fpbgo+IC0gICAgICAgIH0KPiAtCj4gLSAgICAgICAgZmZfZGxv ZyhjdHgsICJib3ggIyUwMlggWyU2ZC4uJS02ZF0gKCU2ZCkgdzolLTYiUFJJdTY0Igo+IHJhbmdl czpbJTJ4ICUyeCAlMnggJTJ4XSBzb3J0IGJ5ICVjIChhbHJlYWR5IHNvcnRlZDolYykgIiwKPiAr ICAgICAgICByciA9IG1heFswXSAtIG1pblswXTsKPiArICAgICAgICBnciA9IG1heFsxXSAtIG1p blsxXTsKPiArICAgICAgICBiciA9IG1heFsyXSAtIG1pblsyXTsKPiArICAgICAgICBsb25nZXN0 ID0gMTsgLy8gcGljayBncmVlbiBieSBkZWZhdWx0ICh0aGUgY29sb3IgdGhlIGV5ZSBpcyB0aGUK PiBtb3N0IHNlbnNpdGl2ZSB0bykKPiArICAgICAgICBpZiAoYnIgPj0gcnIgJiYgYnIgPj0gZ3Ip IGxvbmdlc3QgPSAyOwo+ICsgICAgICAgIGlmIChyciA+PSBnciAmJiByciA+PSBicikgbG9uZ2Vz dCA9IDA7Cj4gKyAgICAgICAgaWYgKGdyID49IHJyICYmIGdyID49IGJyKSBsb25nZXN0ID0gMTsg Ly8gcHJlZmVyIGdyZWVuIGFnYWluCj4gKwo+ICsgICAgICAgIGZmX2Rsb2coY3R4LCAiYm94ICMl MDJYIFslNmQuLiUtNmRdICglNmQpIHc6JS02IlBSSXU2NCIKPiByYW5nZXM6WyUyeCAlMnggJTJ4 XSBzb3J0IGJ5ICVjIChhbHJlYWR5IHNvcnRlZDolYykgIiwKPiAgICAgICAgICAgICAgICAgIGJv eF9pZCwgYm94LT5zdGFydCwgYm94LT5zdGFydCArIGJveC0+bGVuIC0gMSwgYm94LT5sZW4sCj4g Ym94X3dlaWdodCwKPiAtICAgICAgICAgICAgICAgIGFyLCByciwgZ3IsIGJyLCAiYXJnYiJbbG9u Z2VzdF0sIGJveC0+c29ydGVkX2J5ID09Cj4gbG9uZ2VzdCA/ICd5JyA6ICduJyk7Cj4gKyAgICAg ICAgICAgICAgICByciwgZ3IsIGJyLCAicmdiIltsb25nZXN0XSwgYm94LT5zb3J0ZWRfYnkgPT0g bG9uZ2VzdCA/Cj4gJ3knOiduJyk7Cj4KPiAgICAgICAgICAvKiBzb3J0IHRoZSByYW5nZSBieSBp dHMgbG9uZ2VzdCBheGlzIGlmIGl0J3Mgbm90IGFscmVhZHkgc29ydGVkCj4gKi8KPiAgICAgICAg ICBpZiAoYm94LT5zb3J0ZWRfYnkgIT0gbG9uZ2VzdCkgewo+IEBAIC00MjcsMjcgKzM5NCwyMiBA QCBzdGF0aWMgQVZGcmFtZSAqZ2V0X3BhbGV0dGVfZnJhbWUoQVZGaWx0ZXJDb250ZXh0Cj4gKmN0 eCkKPiAgICogSXQga2VlcHMgdGhlIE5CSVRTIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNo IGNvbXBvbmVudCB0byBtYWtlIGl0Cj4gICAqICJyYW5kb20iIGV2ZW4gaWYgdGhlIHNjZW5lIGRv ZXNuJ3QgaGF2ZSBtdWNoIGRpZmZlcmVudCBjb2xvcnMuCj4gICAqLwo+IC1zdGF0aWMgaW5saW5l IHVuc2lnbmVkIGNvbG9yX2hhc2godWludDMyX3QgY29sb3IsIGludCB1c2VfYWxwaGEpCj4gK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQgY29sb3JfaGFzaCh1aW50MzJfdCBjb2xvcikKPiAgewo+ICAg ICAgY29uc3QgdWludDhfdCByID0gY29sb3IgPj4gMTYgJiAoKDE8PE5CSVRTKS0xKTsKPiAgICAg IGNvbnN0IHVpbnQ4X3QgZyA9IGNvbG9yID4+ICA4ICYgKCgxPDxOQklUUyktMSk7Cj4gICAgICBj b25zdCB1aW50OF90IGIgPSBjb2xvciAgICAgICAmICgoMTw8TkJJVFMpLTEpOwo+Cj4gLSAgICBp ZiAodXNlX2FscGhhKSB7Cj4gLSAgICAgICAgY29uc3QgdWludDhfdCBhID0gY29sb3IgPj4gMjQg JiAoKDEgPDwgTkJJVFMpIC0gMSk7Cj4gLSAgICAgICAgcmV0dXJuIGEgPDwgKE5CSVRTICogMykg fCByIDw8IChOQklUUyAqIDIpIHwgZyA8PCBOQklUUyB8IGI7Cj4gLSAgICB9Cj4gLQo+ICAgICAg cmV0dXJuIHIgPDwgKE5CSVRTICogMikgfCBnIDw8IE5CSVRTIHwgYjsKPiAgfQo+Cj4gIC8qKgo+ ICAgKiBMb2NhdGUgdGhlIGNvbG9yIGluIHRoZSBoYXNoIHRhYmxlIGFuZCBpbmNyZW1lbnQgaXRz IGNvdW50ZXIuCj4gICAqLwo+IC1zdGF0aWMgaW50IGNvbG9yX2luYyhzdHJ1Y3QgaGlzdF9ub2Rl ICpoaXN0LCB1aW50MzJfdCBjb2xvciwgaW50Cj4gdXNlX2FscGhhKQo+ICtzdGF0aWMgaW50IGNv bG9yX2luYyhzdHJ1Y3QgaGlzdF9ub2RlICpoaXN0LCB1aW50MzJfdCBjb2xvcikKPiAgewo+ICAg ICAgaW50IGk7Cj4gLSAgICBjb25zdCB1bnNpZ25lZCBoYXNoID0gY29sb3JfaGFzaChjb2xvciwg dXNlX2FscGhhKTsKPiArICAgIGNvbnN0IHVuc2lnbmVkIGhhc2ggPSBjb2xvcl9oYXNoKGNvbG9y KTsKPiAgICAgIHN0cnVjdCBoaXN0X25vZGUgKm5vZGUgPSAmaGlzdFtoYXNoXTsKPiAgICAgIHN0 cnVjdCBjb2xvcl9yZWYgKmU7Cj4KPiBAQCAtNDcyLDcgKzQzNCw3IEBAIHN0YXRpYyBpbnQgY29s b3JfaW5jKHN0cnVjdCBoaXN0X25vZGUgKmhpc3QsIHVpbnQzMl90Cj4gY29sb3IsIGludCB1c2Vf YWxwaGEpCj4gICAqIFVwZGF0ZSBoaXN0b2dyYW0gd2hlbiBwaXhlbHMgZGlmZmVyIGZyb20gcHJl dmlvdXMgZnJhbWUuCj4gICAqLwo+ICBzdGF0aWMgaW50IHVwZGF0ZV9oaXN0b2dyYW1fZGlmZihz dHJ1Y3QgaGlzdF9ub2RlICpoaXN0LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBVkZyYW1lICpmMSwgY29uc3QgQVZGcmFtZSAqZjIsCj4gaW50IHVzZV9hbHBoYSkK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqZjEsIGNv bnN0IEFWRnJhbWUgKmYyKQo+ICB7Cj4gICAgICBpbnQgeCwgeSwgcmV0LCBuYl9kaWZmX2NvbG9y cyA9IDA7Cj4KPiBAQCAtNDgzLDcgKzQ0NSw3IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2hpc3RvZ3Jh bV9kaWZmKHN0cnVjdCBoaXN0X25vZGUKPiAqaGlzdCwKPiAgICAgICAgICBmb3IgKHggPSAwOyB4 IDwgZjEtPndpZHRoOyB4KyspIHsKPiAgICAgICAgICAgICAgaWYgKHBbeF0gPT0gcVt4XSkKPiAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+IC0gICAgICAgICAgICByZXQgPSBjb2xvcl9pbmMo aGlzdCwgcFt4XSwgdXNlX2FscGhhKTsKPiArICAgICAgICAgICAgcmV0ID0gY29sb3JfaW5jKGhp c3QsIHBbeF0pOwo+ICAgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gICAgICAgICAgICAgIG5iX2RpZmZfY29sb3JzICs9IHJldDsKPiBAQCAt NDk1LDcgKzQ1Nyw3IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2hpc3RvZ3JhbV9kaWZmKHN0cnVjdCBo aXN0X25vZGUKPiAqaGlzdCwKPiAgLyoqCj4gICAqIFNpbXBsZSBoaXN0b2dyYW0gb2YgdGhlIGZy YW1lLgo+ICAgKi8KPiAtc3RhdGljIGludCB1cGRhdGVfaGlzdG9ncmFtX2ZyYW1lKHN0cnVjdCBo aXN0X25vZGUgKmhpc3QsIGNvbnN0IEFWRnJhbWUKPiAqZiwgaW50IHVzZV9hbHBoYSkKPiArc3Rh dGljIGludCB1cGRhdGVfaGlzdG9ncmFtX2ZyYW1lKHN0cnVjdCBoaXN0X25vZGUgKmhpc3QsIGNv bnN0IEFWRnJhbWUKPiAqZikKPiAgewo+ICAgICAgaW50IHgsIHksIHJldCwgbmJfZGlmZl9jb2xv cnMgPSAwOwo+Cj4gQEAgLTUwMyw3ICs0NjUsNyBAQCBzdGF0aWMgaW50IHVwZGF0ZV9oaXN0b2dy YW1fZnJhbWUoc3RydWN0IGhpc3Rfbm9kZQo+ICpoaXN0LCBjb25zdCBBVkZyYW1lICpmLCBpbnQK PiAgICAgICAgICBjb25zdCB1aW50MzJfdCAqcCA9IChjb25zdCB1aW50MzJfdCAqKShmLT5kYXRh WzBdICsKPiB5KmYtPmxpbmVzaXplWzBdKTsKPgo+ICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBm LT53aWR0aDsgeCsrKSB7Cj4gLSAgICAgICAgICAgIHJldCA9IGNvbG9yX2luYyhoaXN0LCBwW3hd LCB1c2VfYWxwaGEpOwo+ICsgICAgICAgICAgICByZXQgPSBjb2xvcl9pbmMoaGlzdCwgcFt4XSk7 Cj4gICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiAgICAgICAgICAgICAgbmJfZGlmZl9jb2xvcnMgKz0gcmV0Owo+IEBAIC01MTksOCArNDgx LDggQEAgc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJh bWUKPiAqaW4pCj4gIHsKPiAgICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7 Cj4gICAgICBQYWxldHRlR2VuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKPiAtICAgIGludCByZXQg PSBzLT5wcmV2X2ZyYW1lID8gdXBkYXRlX2hpc3RvZ3JhbV9kaWZmKHMtPmhpc3RvZ3JhbSwKPiBz LT5wcmV2X2ZyYW1lLCBpbiwgcy0+dXNlX2FscGhhKQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiB1cGRhdGVfaGlzdG9ncmFtX2ZyYW1lKHMtPmhpc3RvZ3JhbSwgaW4sCj4gcy0+dXNl X2FscGhhKTsKPiArICAgIGludCByZXQgPSBzLT5wcmV2X2ZyYW1lID8gdXBkYXRlX2hpc3RvZ3Jh bV9kaWZmKHMtPmhpc3RvZ3JhbSwKPiBzLT5wcmV2X2ZyYW1lLCBpbikKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogdXBkYXRlX2hpc3RvZ3JhbV9mcmFtZShzLT5oaXN0b2dyYW0sIGlu KTsKPgo+ICAgICAgaWYgKHJldCA+IDApCj4gICAgICAgICAgcy0+bmJfcmVmcyArPSByZXQ7Cj4g QEAgLTU4Myw5ICs1NDUsNiBAQCBzdGF0aWMgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgp Cj4gIHsKPiAgICAgIFBhbGV0dGVHZW5Db250ZXh0KiBzID0gY3R4LT5wcml2Owo+Cj4gLSAgICBp ZiAocy0+dXNlX2FscGhhICYmIHMtPnJlc2VydmVfdHJhbnNwYXJlbnQpCj4gLSAgICAgICAgcy0+ cmVzZXJ2ZV90cmFuc3BhcmVudCA9IDA7Cj4gLQo+ICAgICAgaWYgKHMtPm1heF9jb2xvcnMgLSBz LT5yZXNlcnZlX3RyYW5zcGFyZW50IDwgMikgewo+ICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIm1heF9jb2xvcnM9MiBpcyBvbmx5IGFsbG93ZWQgd2l0aG91dAo+IHJlc2Vydmlu ZyBhIHRyYW5zcGFyZW50IGNvbG9yIHNsb3RcbiIpOwo+ICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX3BhbGV0dGV1c2UuYyBiL2xp YmF2ZmlsdGVyL3ZmX3BhbGV0dGV1c2UuYwo+IGluZGV4IGE2YjVkNWE1ZmEuLmNiMTgzMjliYjcg MTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIvdmZfcGFsZXR0ZXVzZS5jCj4gKysrIGIvbGliYXZm aWx0ZXIvdmZfcGFsZXR0ZXVzZS5jCj4gQEAgLTI5LDYgKzI5LDcgQEAKPiAgI2luY2x1ZGUgImxp YmF2dXRpbC9vcHQuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9xc29ydC5oIgo+ICAjaW5jbHVk ZSAiYXZmaWx0ZXIuaCIKPiArI2luY2x1ZGUgImZpbHRlcnMuaCIKPiAgI2luY2x1ZGUgImZyYW1l c3luYy5oIgo+ICAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPgo+IEBAIC02Myw3ICs2NCw3IEBAIHN0 cnVjdCBjb2xvcl9ub2RlIHsKPiAgfTsKPgo+ICAjZGVmaW5lIE5CSVRTIDUKPiAtI2RlZmluZSBD QUNIRV9TSVpFICgxPDwoNCpOQklUUykpCj4gKyNkZWZpbmUgQ0FDSEVfU0laRSAoMTw8KDMqTkJJ VFMpKQo+Cj4gIHN0cnVjdCBjYWNoZWRfY29sb3Igewo+ICAgICAgdWludDMyX3QgY29sb3I7Cj4g QEAgLTg4LDcgKzg5LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFsZXR0ZVVzZUNvbnRleHQgewo+ICAg ICAgdWludDMyX3QgcGFsZXR0ZVtBVlBBTEVUVEVfQ09VTlRdOwo+ICAgICAgaW50IHRyYW5zcGFy ZW5jeV9pbmRleDsgLyogaW5kZXggaW4gdGhlIHBhbGV0dGUgb2YgdHJhbnNwYXJlbmN5LiAtMQo+ IGlmIHRoZXJlIGlzIG5vIHRyYW5zcGFyZW5jeSBpbiB0aGUgcGFsZXR0ZS4gKi8KPiAgICAgIGlu dCB0cmFuc190aHJlc2g7Cj4gLSAgICBpbnQgdXNlX2FscGhhOwo+ICAgICAgaW50IHBhbGV0dGVf bG9hZGVkOwo+ICAgICAgaW50IGRpdGhlcjsKPiAgICAgIGludCBuZXc7Cj4gQEAgLTEwOCw3ICsx MDgsNyBAQCB0eXBlZGVmIHN0cnVjdCBQYWxldHRlVXNlQ29udGV4dCB7Cj4gIH0gUGFsZXR0ZVVz ZUNvbnRleHQ7Cj4KPiAgI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoUGFsZXR0ZVVzZUNvbnRl eHQsIHgpCj4gLSNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8IEFW X09QVF9GTEFHX1ZJREVPX1BBUkFNKQo+ICsjZGVmaW5lIEZMQUdTIEFWX09QVF9GTEFHX0ZJTFRF UklOR19QQVJBTXxBVl9PUFRfRkxBR19WSURFT19QQVJBTQo+ICBzdGF0aWMgY29uc3QgQVZPcHRp b24gcGFsZXR0ZXVzZV9vcHRpb25zW10gPSB7Cj4gICAgICB7ICJkaXRoZXIiLCAic2VsZWN0IGRp dGhlcmluZyBtb2RlIiwgT0ZGU0VUKGRpdGhlciksIEFWX09QVF9UWVBFX0lOVCwKPiB7Lmk2ND1E SVRIRVJJTkdfU0lFUlJBMl80QX0sIDAsIE5CX0RJVEhFUklORy0xLCBGTEFHUywgImRpdGhlcmlu Z19tb2RlIiB9LAo+ICAgICAgICAgIHsgImJheWVyIiwgICAgICAgICAgICJvcmRlcmVkIDh4OCBi YXllciBkaXRoZXJpbmcKPiAoZGV0ZXJtaW5pc3RpYykiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwKPiB7Lmk2ND1ESVRIRVJJTkdfQkFZRVJ9LCAgICAg ICAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJkaXRoZXJpbmdfbW9kZSIKPiB9LAo+IEBA IC0xMjEsNyArMTIxLDYgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIHBhbGV0dGV1c2Vfb3B0aW9u c1tdID0gewo+ICAgICAgICAgIHsgInJlY3RhbmdsZSIsICJwcm9jZXNzIHNtYWxsZXN0IGRpZmZl cmVudCByZWN0YW5nbGUiLCAwLAo+IEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1ESUZGX01PREVf UkVDVEFOR0xFfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsCj4gImRpZmZfbW9kZSIgfSwKPiAg ICAgIHsgIm5ldyIsICJ0YWtlIG5ldyBwYWxldHRlIGZvciBlYWNoIG91dHB1dCBmcmFtZSIsIE9G RlNFVChuZXcpLAo+IEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBGTEFHUyB9LAo+ ICAgICAgeyAiYWxwaGFfdGhyZXNob2xkIiwgInNldCB0aGUgYWxwaGEgdGhyZXNob2xkIGZvciB0 cmFuc3BhcmVuY3kiLAo+IE9GRlNFVCh0cmFuc190aHJlc2gpLCBBVl9PUFRfVFlQRV9JTlQsIHsu aTY0PTEyOH0sIDAsIDI1NSwgRkxBR1MgfSwKPiAtICAgIHsgInVzZV9hbHBoYSIsICJ1c2UgYWxw aGEgY2hhbm5lbCBmb3IgbWFwcGluZyIsIE9GRlNFVCh1c2VfYWxwaGEpLAo+IEFWX09QVF9UWVBF X0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBGTEFHUyB9LAo+Cj4gICAgICAvKiBmb2xsb3dpbmcgYXJl IHRoZSBkZWJ1ZyBvcHRpb25zLCBub3QgcGFydCBvZiB0aGUgb2ZmaWNpYWwgQVBJICovCj4gICAg ICB7ICJkZWJ1Z19rZHRyZWUiLCAic2F2ZSBHcmFwaHZpeiBncmFwaCBvZiB0aGUga2R0cmVlIGlu IHNwZWNpZmllZAo+IGZpbGUiLCBPRkZTRVQoZG90X2ZpbGVuYW1lKSwgQVZfT1BUX1RZUEVfU1RS SU5HLCB7LnN0cj1OVUxMfSwgMCwgMCwgRkxBR1MgfSwKPiBAQCAtMTYzLDQxICsxNjIsMzcgQEAg c3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdWludDMyX3QKPiBkaXRoZXJfY29sb3IodWludDMyX3Qg cHgsIGludCBlciwgaW50IGVnLAo+ICAgICAgICAgICB8IGF2X2NsaXBfdWludDgoKHB4ICAgICAg ICYgMHhmZikgKyAoKGViICogc2NhbGUpIC8gKDE8PHNoaWZ0KSkpOwo+ICB9Cj4KPiAtc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgaW50IGRpZmYoY29uc3QgdWludDhfdCAqYzEsIGNvbnN0IHVpbnQ4 X3QgKmMyLAo+IGNvbnN0IFBhbGV0dGVVc2VDb250ZXh0ICpzKQo+ICtzdGF0aWMgYXZfYWx3YXlz X2lubGluZSBpbnQgZGlmZihjb25zdCB1aW50OF90ICpjMSwgY29uc3QgdWludDhfdCAqYzIsCj4g Y29uc3QgaW50IHRyYW5zX3RocmVzaCkKPiAgewo+ICAgICAgLy8gWFhYOiB0cnkgTCphKmIgd2l0 aCBDSUU3NiAoZEwqZEwgKyBkYSpkYSArIGRiKmRiKQo+IC0gICAgY29uc3QgaW50IGRhID0gYzFb MF0gLSBjMlswXTsKPiAgICAgIGNvbnN0IGludCBkciA9IGMxWzFdIC0gYzJbMV07Cj4gICAgICBj b25zdCBpbnQgZGcgPSBjMVsyXSAtIGMyWzJdOwo+ICAgICAgY29uc3QgaW50IGRiID0gYzFbM10g LSBjMlszXTsKPgo+IC0gICAgaWYgKHMtPnVzZV9hbHBoYSkKPiAtICAgICAgICByZXR1cm4gZGEq ZGEgKyBkcipkciArIGRnKmRnICsgZGIqZGI7Cj4gLQo+IC0gICAgaWYgKGMxWzBdIDwgcy0+dHJh bnNfdGhyZXNoICYmIGMyWzBdIDwgcy0+dHJhbnNfdGhyZXNoKSB7Cj4gKyAgICBpZiAoYzFbMF0g PCB0cmFuc190aHJlc2ggJiYgYzJbMF0gPCB0cmFuc190aHJlc2gpIHsKPiAgICAgICAgICByZXR1 cm4gMDsKPiAtICAgIH0gZWxzZSBpZiAoYzFbMF0gPj0gcy0+dHJhbnNfdGhyZXNoICYmIGMyWzBd ID49IHMtPnRyYW5zX3RocmVzaCkgewo+ICsgICAgfSBlbHNlIGlmIChjMVswXSA+PSB0cmFuc190 aHJlc2ggJiYgYzJbMF0gPj0gdHJhbnNfdGhyZXNoKSB7Cj4gICAgICAgICAgcmV0dXJuIGRyKmRy ICsgZGcqZGcgKyBkYipkYjsKPiAgICAgIH0gZWxzZSB7Cj4gICAgICAgICAgcmV0dXJuIDI1NSoy NTUgKyAyNTUqMjU1ICsgMjU1KjI1NTsKPiAgICAgIH0KPiAgfQo+Cj4gLXN0YXRpYyBhdl9hbHdh eXNfaW5saW5lIHVpbnQ4X3QgY29sb3JtYXBfbmVhcmVzdF9icnV0ZWZvcmNlKGNvbnN0Cj4gUGFs ZXR0ZVVzZUNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmFyZ2IpCj4gK3N0YXRpYyBhdl9hbHdh eXNfaW5saW5lIHVpbnQ4X3QgY29sb3JtYXBfbmVhcmVzdF9icnV0ZWZvcmNlKGNvbnN0Cj4gdWlu dDMyX3QgKnBhbGV0dGUsIGNvbnN0IHVpbnQ4X3QgKmFyZ2IsIGNvbnN0IGludCB0cmFuc190aHJl c2gpCj4gIHsKPiAgICAgIGludCBpLCBwYWxfaWQgPSAtMSwgbWluX2Rpc3QgPSBJTlRfTUFYOwo+ Cj4gICAgICBmb3IgKGkgPSAwOyBpIDwgQVZQQUxFVFRFX0NPVU5UOyBpKyspIHsKPiAtICAgICAg ICBjb25zdCB1aW50MzJfdCBjID0gcy0+cGFsZXR0ZVtpXTsKPiArICAgICAgICBjb25zdCB1aW50 MzJfdCBjID0gcGFsZXR0ZVtpXTsKPgo+IC0gICAgICAgIGlmIChzLT51c2VfYWxwaGEgfHwgYyA+ PiAyNCA+PSBzLT50cmFuc190aHJlc2gpIHsgLy8gaWdub3JlCj4gdHJhbnNwYXJlbnQgZW50cnkK PiArICAgICAgICBpZiAoYyA+PiAyNCA+PSB0cmFuc190aHJlc2gpIHsgLy8gaWdub3JlIHRyYW5z cGFyZW50IGVudHJ5Cj4gICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGFsYXJnYltdID0gewo+ IC0gICAgICAgICAgICAgICAgcy0+cGFsZXR0ZVtpXT4+MjQgJiAweGZmLAo+IC0gICAgICAgICAg ICAgICAgcy0+cGFsZXR0ZVtpXT4+MTYgJiAweGZmLAo+IC0gICAgICAgICAgICAgICAgcy0+cGFs ZXR0ZVtpXT4+IDggJiAweGZmLAo+IC0gICAgICAgICAgICAgICAgcy0+cGFsZXR0ZVtpXSAgICAg JiAweGZmLAo+ICsgICAgICAgICAgICAgICAgcGFsZXR0ZVtpXT4+MjQgJiAweGZmLAo+ICsgICAg ICAgICAgICAgICAgcGFsZXR0ZVtpXT4+MTYgJiAweGZmLAo+ICsgICAgICAgICAgICAgICAgcGFs ZXR0ZVtpXT4+IDggJiAweGZmLAo+ICsgICAgICAgICAgICAgICAgcGFsZXR0ZVtpXSAgICAgJiAw eGZmLAo+ICAgICAgICAgICAgICB9Owo+IC0gICAgICAgICAgICBjb25zdCBpbnQgZCA9IGRpZmYo cGFsYXJnYiwgYXJnYiwgcyk7Cj4gKyAgICAgICAgICAgIGNvbnN0IGludCBkID0gZGlmZihwYWxh cmdiLCBhcmdiLCB0cmFuc190aHJlc2gpOwo+ICAgICAgICAgICAgICBpZiAoZCA8IG1pbl9kaXN0 KSB7Cj4gICAgICAgICAgICAgICAgICBwYWxfaWQgPSBpOwo+ICAgICAgICAgICAgICAgICAgbWlu X2Rpc3QgPSBkOwo+IEBAIC0yMTMsMTcgKzIwOCwxNyBAQCBzdHJ1Y3QgbmVhcmVzdF9jb2xvciB7 Cj4gICAgICBpbnQgZGlzdF9zcWQ7Cj4gIH07Cj4KPiAtc3RhdGljIHZvaWQgY29sb3JtYXBfbmVh cmVzdF9ub2RlKGNvbnN0IFBhbGV0dGVVc2VDb250ZXh0ICpzLAo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNvbG9yX25vZGUgKm1hcCwKPiArc3RhdGlj IHZvaWQgY29sb3JtYXBfbmVhcmVzdF9ub2RlKGNvbnN0IHN0cnVjdCBjb2xvcl9ub2RlICptYXAs Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbm9kZV9wb3Ms Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp0YXJn ZXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgdHJhbnNf dGhyZXNoLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5lYXJl c3RfY29sb3IgKm5lYXJlc3QpCj4gIHsKPiAgICAgIGNvbnN0IHN0cnVjdCBjb2xvcl9ub2RlICpr ZCA9IG1hcCArIG5vZGVfcG9zOwo+IC0gICAgY29uc3QgaW50IHNwbGl0ID0ga2QtPnNwbGl0Owo+ ICsgICAgY29uc3QgaW50IHMgPSBrZC0+c3BsaXQ7Cj4gICAgICBpbnQgZHgsIG5lYXJlcl9rZF9p ZCwgZnVydGhlcl9rZF9pZDsKPiAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1cnJlbnQgPSBrZC0+dmFs Owo+IC0gICAgY29uc3QgaW50IGN1cnJlbnRfdG9fdGFyZ2V0ID0gZGlmZih0YXJnZXQsIGN1cnJl bnQsIHMpOwo+ICsgICAgY29uc3QgaW50IGN1cnJlbnRfdG9fdGFyZ2V0ID0gZGlmZih0YXJnZXQs IGN1cnJlbnQsIHRyYW5zX3RocmVzaCk7Cj4KPiAgICAgIGlmIChjdXJyZW50X3RvX3RhcmdldCA8 IG5lYXJlc3QtPmRpc3Rfc3FkKSB7Cj4gICAgICAgICAgbmVhcmVzdC0+bm9kZV9wb3MgPSBub2Rl X3BvczsKPiBAQCAtMjMxLDIzICsyMjYsMjMgQEAgc3RhdGljIHZvaWQgY29sb3JtYXBfbmVhcmVz dF9ub2RlKGNvbnN0Cj4gUGFsZXR0ZVVzZUNvbnRleHQgKnMsCj4gICAgICB9Cj4KPiAgICAgIGlm IChrZC0+bGVmdF9pZCAhPSAtMSB8fCBrZC0+cmlnaHRfaWQgIT0gLTEpIHsKPiAtICAgICAgICBk eCA9IHRhcmdldFtzcGxpdF0gLSBjdXJyZW50W3NwbGl0XTsKPiArICAgICAgICBkeCA9IHRhcmdl dFtzXSAtIGN1cnJlbnRbc107Cj4KPiAgICAgICAgICBpZiAoZHggPD0gMCkgbmVhcmVyX2tkX2lk ID0ga2QtPmxlZnRfaWQsICBmdXJ0aGVyX2tkX2lkID0KPiBrZC0+cmlnaHRfaWQ7Cj4gICAgICAg ICAgZWxzZSAgICAgICAgIG5lYXJlcl9rZF9pZCA9IGtkLT5yaWdodF9pZCwgZnVydGhlcl9rZF9p ZCA9Cj4ga2QtPmxlZnRfaWQ7Cj4KPiAgICAgICAgICBpZiAobmVhcmVyX2tkX2lkICE9IC0xKQo+ IC0gICAgICAgICAgICBjb2xvcm1hcF9uZWFyZXN0X25vZGUocywgbWFwLCBuZWFyZXJfa2RfaWQs IHRhcmdldCwgbmVhcmVzdCk7Cj4gKyAgICAgICAgICAgIGNvbG9ybWFwX25lYXJlc3Rfbm9kZSht YXAsIG5lYXJlcl9rZF9pZCwgdGFyZ2V0LAo+IHRyYW5zX3RocmVzaCwgbmVhcmVzdCk7Cj4KPiAg ICAgICAgICBpZiAoZnVydGhlcl9rZF9pZCAhPSAtMSAmJiBkeCpkeCA8IG5lYXJlc3QtPmRpc3Rf c3FkKQo+IC0gICAgICAgICAgICBjb2xvcm1hcF9uZWFyZXN0X25vZGUocywgbWFwLCBmdXJ0aGVy X2tkX2lkLCB0YXJnZXQsIG5lYXJlc3QpOwo+ICsgICAgICAgICAgICBjb2xvcm1hcF9uZWFyZXN0 X25vZGUobWFwLCBmdXJ0aGVyX2tkX2lkLCB0YXJnZXQsCj4gdHJhbnNfdGhyZXNoLCBuZWFyZXN0 KTsKPiAgICAgIH0KPiAgfQo+Cj4gLXN0YXRpYyBhdl9hbHdheXNfaW5saW5lIHVpbnQ4X3QgY29s b3JtYXBfbmVhcmVzdF9yZWN1cnNpdmUoY29uc3QKPiBQYWxldHRlVXNlQ29udGV4dCAqcywgY29u c3Qgc3RydWN0IGNvbG9yX25vZGUgKm5vZGUsIGNvbnN0IHVpbnQ4X3QgKnJnYikKPiArc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgdWludDhfdCBjb2xvcm1hcF9uZWFyZXN0X3JlY3Vyc2l2ZShjb25z dCBzdHJ1Y3QKPiBjb2xvcl9ub2RlICpub2RlLCBjb25zdCB1aW50OF90ICpyZ2IsIGNvbnN0IGlu dCB0cmFuc190aHJlc2gpCj4gIHsKPiAgICAgIHN0cnVjdCBuZWFyZXN0X2NvbG9yIHJlcyA9IHsu ZGlzdF9zcWQgPSBJTlRfTUFYLCAubm9kZV9wb3MgPSAtMX07Cj4gLSAgICBjb2xvcm1hcF9uZWFy ZXN0X25vZGUocywgbm9kZSwgMCwgcmdiLCAmcmVzKTsKPiArICAgIGNvbG9ybWFwX25lYXJlc3Rf bm9kZShub2RlLCAwLCByZ2IsIHRyYW5zX3RocmVzaCwgJnJlcyk7Cj4gICAgICByZXR1cm4gbm9k ZVtyZXMubm9kZV9wb3NdLnBhbGV0dGVfaWQ7Cj4gIH0KPgo+IEBAIC0yNTYsNyArMjUxLDcgQEAg c3RydWN0IHN0YWNrX25vZGUgewo+ICAgICAgaW50IGR4MjsKPiAgfTsKPgo+IC1zdGF0aWMgYXZf YWx3YXlzX2lubGluZSB1aW50OF90IGNvbG9ybWFwX25lYXJlc3RfaXRlcmF0aXZlKGNvbnN0Cj4g UGFsZXR0ZVVzZUNvbnRleHQgKnMsIGNvbnN0IHN0cnVjdCBjb2xvcl9ub2RlICpyb290LCBjb25z dCB1aW50OF90ICp0YXJnZXQpCj4gK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHVpbnQ4X3QgY29s b3JtYXBfbmVhcmVzdF9pdGVyYXRpdmUoY29uc3Qgc3RydWN0Cj4gY29sb3Jfbm9kZSAqcm9vdCwg Y29uc3QgdWludDhfdCAqdGFyZ2V0LCBjb25zdCBpbnQgdHJhbnNfdGhyZXNoKQo+ICB7Cj4gICAg ICBpbnQgcG9zID0gMCwgYmVzdF9ub2RlX2lkID0gLTEsIGJlc3RfZGlzdCA9IElOVF9NQVgsIGN1 cl9jb2xvcl9pZCA9IDA7Cj4gICAgICBzdHJ1Y3Qgc3RhY2tfbm9kZSBub2Rlc1sxNl07Cj4gQEAg LTI2Niw3ICsyNjEsNyBAQCBzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB1aW50OF90Cj4gY29sb3Jt YXBfbmVhcmVzdF9pdGVyYXRpdmUoY29uc3QgUGFsZXR0ZVVzZUNvbnRlCj4KPiAgICAgICAgICBj b25zdCBzdHJ1Y3QgY29sb3Jfbm9kZSAqa2QgPSAmcm9vdFtjdXJfY29sb3JfaWRdOwo+ICAgICAg ICAgIGNvbnN0IHVpbnQ4X3QgKmN1cnJlbnQgPSBrZC0+dmFsOwo+IC0gICAgICAgIGNvbnN0IGlu dCBjdXJyZW50X3RvX3RhcmdldCA9IGRpZmYodGFyZ2V0LCBjdXJyZW50LCBzKTsKPiArICAgICAg ICBjb25zdCBpbnQgY3VycmVudF90b190YXJnZXQgPSBkaWZmKHRhcmdldCwgY3VycmVudCwgdHJh bnNfdGhyZXNoKTsKPgo+ICAgICAgICAgIC8qIENvbXBhcmUgY3VycmVudCBjb2xvciBub2RlIHRv IHRoZSB0YXJnZXQgYW5kIHVwZGF0ZSBvdXIgYmVzdAo+IG5vZGUgaWYKPiAgICAgICAgICAgKiBp dCdzIGFjdHVhbGx5IGJldHRlci4gKi8KPiBAQCAtMzI4LDEwICszMjMsMTAgQEAgZW5kOgo+ICAg ICAgcmV0dXJuIHJvb3RbYmVzdF9ub2RlX2lkXS5wYWxldHRlX2lkOwo+ICB9Cj4KPiAtI2RlZmlu ZSBDT0xPUk1BUF9ORUFSRVNUKHMsIHNlYXJjaCwgcm9vdCwgdGFyZ2V0KQo+ICAgICAgICAgICAg IFwKPiAtICAgIHNlYXJjaCA9PSBDT0xPUl9TRUFSQ0hfTk5TX0lURVJBVElWRSA/IGNvbG9ybWFw X25lYXJlc3RfaXRlcmF0aXZlKHMsCj4gcm9vdCwgdGFyZ2V0KSA6ICAgICAgXAo+IC0gICAgc2Vh cmNoID09IENPTE9SX1NFQVJDSF9OTlNfUkVDVVJTSVZFID8gY29sb3JtYXBfbmVhcmVzdF9yZWN1 cnNpdmUocywKPiByb290LCB0YXJnZXQpIDogICAgICBcCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb2xvcm1hcF9uZWFyZXN0X2JydXRlZm9yY2UocywKPiB0 YXJnZXQpCj4gKyNkZWZpbmUgQ09MT1JNQVBfTkVBUkVTVChzZWFyY2gsIHBhbGV0dGUsIHJvb3Qs IHRhcmdldCwgdHJhbnNfdGhyZXNoKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+ICsgICAgc2VhcmNoID09IENPTE9SX1NFQVJDSF9OTlNfSVRFUkFUSVZFID8KPiBjb2xvcm1h cF9uZWFyZXN0X2l0ZXJhdGl2ZShyb290LCB0YXJnZXQsIHRyYW5zX3RocmVzaCkgOiAgICAgIFwK PiArICAgIHNlYXJjaCA9PSBDT0xPUl9TRUFSQ0hfTk5TX1JFQ1VSU0lWRSA/Cj4gY29sb3JtYXBf bmVhcmVzdF9yZWN1cnNpdmUocm9vdCwgdGFyZ2V0LCB0cmFuc190aHJlc2gpIDogICAgICBcCj4g Kwo+ICBjb2xvcm1hcF9uZWFyZXN0X2JydXRlZm9yY2UocGFsZXR0ZSwgdGFyZ2V0LCB0cmFuc190 aHJlc2gpCj4KPiAgLyoqCj4gICAqIENoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgY29sb3IgaXMgaW4g dGhlIGNhY2hlIGFscmVhZHkuIElmIG5vdCwgZmluZCBpdAo+IGluIHRoZQo+IEBAIC0zNjgsMTMg KzM2MywxMyBAQCBzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQKPiBjb2xvcl9nZXQoUGFsZXR0 ZVVzZUNvbnRleHQgKnMsIHVpbnQzMl90IGNvbG9yLAo+ICAgICAgaWYgKCFlKQo+ICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gICAgICBlLT5jb2xvciA9IGNvbG9yOwo+IC0gICAg ZS0+cGFsX2VudHJ5ID0gQ09MT1JNQVBfTkVBUkVTVChzLCBzZWFyY2hfbWV0aG9kLCBzLT5tYXAs IGFyZ2JfZWx0cyk7Cj4gKyAgICBlLT5wYWxfZW50cnkgPSBDT0xPUk1BUF9ORUFSRVNUKHNlYXJj aF9tZXRob2QsIHMtPnBhbGV0dGUsIHMtPm1hcCwKPiBhcmdiX2VsdHMsIHMtPnRyYW5zX3RocmVz aCk7Cj4KPiAgICAgIHJldHVybiBlLT5wYWxfZW50cnk7Cj4gIH0KPgo+ICBzdGF0aWMgYXZfYWx3 YXlzX2lubGluZSBpbnQgZ2V0X2RzdF9jb2xvcl9lcnIoUGFsZXR0ZVVzZUNvbnRleHQgKnMsCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBj LCBpbnQgKmVhLCBpbnQKPiAqZXIsIGludCAqZWcsIGludCAqZWIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjLCBpbnQgKmVyLCBpbnQK PiAqZWcsIGludCAqZWIsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBlbnVtCj4gY29sb3Jfc2VhcmNoX21ldGhvZCBzZWFyY2hfbWV0aG9kKQo+ ICB7Cj4gICAgICBjb25zdCB1aW50OF90IGEgPSBjID4+IDI0ICYgMHhmZjsKPiBAQCAtMzg3LDkg KzM4Miw4IEBAIHN0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludAo+IGdldF9kc3RfY29sb3JfZXJy KFBhbGV0dGVVc2VDb250ZXh0ICpzLAo+ICAgICAgICAgIHJldHVybiBkc3R4Owo+ICAgICAgZHN0 YyA9IHMtPnBhbGV0dGVbZHN0eF07Cj4gICAgICBpZiAoZHN0eCA9PSBzLT50cmFuc3BhcmVuY3lf aW5kZXgpIHsKPiAtICAgICAgICAqZWEgPSplciA9ICplZyA9ICplYiA9IDA7Cj4gKyAgICAgICAg KmVyID0gKmVnID0gKmViID0gMDsKPiAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgKmVhID0gKGlu dClhIC0gKGludCkoZHN0YyA+PiAyNCAmIDB4ZmYpOwo+ICAgICAgICAgICplciA9IChpbnQpciAt IChpbnQpKGRzdGMgPj4gMTYgJiAweGZmKTsKPiAgICAgICAgICAqZWcgPSAoaW50KWcgLSAoaW50 KShkc3RjID4+ICA4ICYgMHhmZik7Cj4gICAgICAgICAgKmViID0gKGludCliIC0gKGludCkoZHN0 YyAgICAgICAmIDB4ZmYpOwo+IEBAIC00MTMsNyArNDA3LDcgQEAgc3RhdGljIGF2X2Fsd2F5c19p bmxpbmUgaW50Cj4gc2V0X2ZyYW1lKFBhbGV0dGVVc2VDb250ZXh0ICpzLCBBVkZyYW1lICpvdXQs IEFWRnJhbQo+Cj4gICAgICBmb3IgKHkgPSB5X3N0YXJ0OyB5IDwgaDsgeSsrKSB7Cj4gICAgICAg ICAgZm9yICh4ID0geF9zdGFydDsgeCA8IHc7IHgrKykgewo+IC0gICAgICAgICAgICBpbnQgZWEs IGVyLCBlZywgZWI7Cj4gKyAgICAgICAgICAgIGludCBlciwgZWcsIGViOwo+Cj4gICAgICAgICAg ICAgIGlmIChkaXRoZXIgPT0gRElUSEVSSU5HX0JBWUVSKSB7Cj4gICAgICAgICAgICAgICAgICBj b25zdCBpbnQgZCA9IHMtPm9yZGVyZWRfZGl0aGVyWyh5ICYgNyk8PDMgfCAoeCAmIDcpXTsKPiBA QCAtNDMzLDcgKzQyNyw3IEBAIHN0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludAo+IHNldF9mcmFt ZShQYWxldHRlVXNlQ29udGV4dCAqcywgQVZGcmFtZSAqb3V0LCBBVkZyYW0KPgo+ICAgICAgICAg ICAgICB9IGVsc2UgaWYgKGRpdGhlciA9PSBESVRIRVJJTkdfSEVDS0JFUlQpIHsKPiAgICAgICAg ICAgICAgICAgIGNvbnN0IGludCByaWdodCA9IHggPCB3IC0gMSwgZG93biA9IHkgPCBoIC0gMTsK PiAtICAgICAgICAgICAgICAgIGNvbnN0IGludCBjb2xvciA9IGdldF9kc3RfY29sb3JfZXJyKHMs IHNyY1t4XSwgJmVhLCAmZXIsCj4gJmVnLCAmZWIsIHNlYXJjaF9tZXRob2QpOwo+ICsgICAgICAg ICAgICAgICAgY29uc3QgaW50IGNvbG9yID0gZ2V0X2RzdF9jb2xvcl9lcnIocywgc3JjW3hdLCAm ZXIsICZlZywKPiAmZWIsIHNlYXJjaF9tZXRob2QpOwo+Cj4gICAgICAgICAgICAgICAgICBpZiAo Y29sb3IgPCAwKQo+ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcjsKPiBAQCAtNDQ1 LDcgKzQzOSw3IEBAIHN0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludAo+IHNldF9mcmFtZShQYWxl dHRlVXNlQ29udGV4dCAqcywgQVZGcmFtZSAqb3V0LCBBVkZyYW0KPgo+ICAgICAgICAgICAgICB9 IGVsc2UgaWYgKGRpdGhlciA9PSBESVRIRVJJTkdfRkxPWURfU1RFSU5CRVJHKSB7Cj4gICAgICAg ICAgICAgICAgICBjb25zdCBpbnQgcmlnaHQgPSB4IDwgdyAtIDEsIGRvd24gPSB5IDwgaCAtIDEs IGxlZnQgPSB4ID4KPiB4X3N0YXJ0Owo+IC0gICAgICAgICAgICAgICAgY29uc3QgaW50IGNvbG9y ID0gZ2V0X2RzdF9jb2xvcl9lcnIocywgc3JjW3hdLCAmZWEsICZlciwKPiAmZWcsICZlYiwgc2Vh cmNoX21ldGhvZCk7Cj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29sb3IgPSBnZXRfZHN0 X2NvbG9yX2VycihzLCBzcmNbeF0sICZlciwgJmVnLAo+ICZlYiwgc2VhcmNoX21ldGhvZCk7Cj4K PiAgICAgICAgICAgICAgICAgIGlmIChjb2xvciA8IDApCj4gICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGNvbG9yOwo+IEBAIC00NTksNyArNDUzLDcgQEAgc3RhdGljIGF2X2Fsd2F5c19pbmxp bmUgaW50Cj4gc2V0X2ZyYW1lKFBhbGV0dGVVc2VDb250ZXh0ICpzLCBBVkZyYW1lICpvdXQsIEFW RnJhbQo+ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpdGhlciA9PSBESVRIRVJJTkdfU0lFUlJB Mikgewo+ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0ICA9IHggPCB3IC0gMSwgZG93 biAgPSB5IDwgaCAtIDEsIGxlZnQgID0KPiB4ID4geF9zdGFydDsKPiAgICAgICAgICAgICAgICAg IGNvbnN0IGludCByaWdodDIgPSB4IDwgdyAtIDIsICAgICAgICAgICAgICAgICAgICBsZWZ0MiA9 Cj4geCA+IHhfc3RhcnQgKyAxOwo+IC0gICAgICAgICAgICAgICAgY29uc3QgaW50IGNvbG9yID0g Z2V0X2RzdF9jb2xvcl9lcnIocywgc3JjW3hdLCAmZWEsICZlciwKPiAmZWcsICZlYiwgc2VhcmNo X21ldGhvZCk7Cj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29sb3IgPSBnZXRfZHN0X2Nv bG9yX2VycihzLCBzcmNbeF0sICZlciwgJmVnLAo+ICZlYiwgc2VhcmNoX21ldGhvZCk7Cj4KPiAg ICAgICAgICAgICAgICAgIGlmIChjb2xvciA8IDApCj4gICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGNvbG9yOwo+IEBAIC00NzgsNyArNDcyLDcgQEAgc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUg aW50Cj4gc2V0X2ZyYW1lKFBhbGV0dGVVc2VDb250ZXh0ICpzLCBBVkZyYW1lICpvdXQsIEFWRnJh bQo+Cj4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGl0aGVyID09IERJVEhFUklOR19TSUVSUkEy XzRBKSB7Cj4gICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmlnaHQgPSB4IDwgdyAtIDEsIGRv d24gPSB5IDwgaCAtIDEsIGxlZnQgPSB4ID4KPiB4X3N0YXJ0Owo+IC0gICAgICAgICAgICAgICAg Y29uc3QgaW50IGNvbG9yID0gZ2V0X2RzdF9jb2xvcl9lcnIocywgc3JjW3hdLCAmZWEsICZlciwK PiAmZWcsICZlYiwgc2VhcmNoX21ldGhvZCk7Cj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQg Y29sb3IgPSBnZXRfZHN0X2NvbG9yX2VycihzLCBzcmNbeF0sICZlciwgJmVnLAo+ICZlYiwgc2Vh cmNoX21ldGhvZCk7Cj4KPiAgICAgICAgICAgICAgICAgIGlmIChjb2xvciA8IDApCj4gICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwo+IEBAIC01NjEsNyArNTU1LDggQEAgc3RhdGlj IGludCBkaXNwX3RyZWUoY29uc3Qgc3RydWN0IGNvbG9yX25vZGUgKm5vZGUsCj4gY29uc3QgY2hh ciAqZm5hbWUpCj4gICAgICByZXR1cm4gMDsKPiAgfQo+Cj4gLXN0YXRpYyBpbnQgZGVidWdfYWNj dXJhY3koY29uc3QgUGFsZXR0ZVVzZUNvbnRleHQgKnMpCj4gK3N0YXRpYyBpbnQgZGVidWdfYWNj dXJhY3koY29uc3Qgc3RydWN0IGNvbG9yX25vZGUgKm5vZGUsIGNvbnN0IHVpbnQzMl90Cj4gKnBh bGV0dGUsIGNvbnN0IGludCB0cmFuc190aHJlc2gsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgZW51bSBjb2xvcl9zZWFyY2hfbWV0aG9kIHNlYXJjaF9tZXRob2QpCj4gIHsKPiAg ICAgIGludCByLCBnLCBiLCByZXQgPSAwOwo+Cj4gQEAgLTU2OSwyNiArNTY0LDE5IEBAIHN0YXRp YyBpbnQgZGVidWdfYWNjdXJhY3koY29uc3QgUGFsZXR0ZVVzZUNvbnRleHQgKnMpCj4gICAgICAg ICAgZm9yIChnID0gMDsgZyA8IDI1NjsgZysrKSB7Cj4gICAgICAgICAgICAgIGZvciAoYiA9IDA7 IGIgPCAyNTY7IGIrKykgewo+ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhcmdiW10g PSB7MHhmZiwgciwgZywgYn07Cj4gLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgcjEgPSBDT0xP Uk1BUF9ORUFSRVNUKHMsCj4gcy0+Y29sb3Jfc2VhcmNoX21ldGhvZCwgcy0+bWFwLCBhcmdiKTsK PiAtICAgICAgICAgICAgICAgIGNvbnN0IGludCByMiA9IGNvbG9ybWFwX25lYXJlc3RfYnJ1dGVm b3JjZShzLCBhcmdiKTsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludCByMSA9IENPTE9STUFQ X05FQVJFU1Qoc2VhcmNoX21ldGhvZCwgcGFsZXR0ZSwKPiBub2RlLCBhcmdiLCB0cmFuc190aHJl c2gpOwo+ICsgICAgICAgICAgICAgICAgY29uc3QgaW50IHIyID0gY29sb3JtYXBfbmVhcmVzdF9i cnV0ZWZvcmNlKHBhbGV0dGUsIGFyZ2IsCj4gdHJhbnNfdGhyZXNoKTsKPiAgICAgICAgICAgICAg ICAgIGlmIChyMSAhPSByMikgewo+IC0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90 IGMxID0gcy0+cGFsZXR0ZVtyMV07Cj4gLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMy X3QgYzIgPSBzLT5wYWxldHRlW3IyXTsKPiAtICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 OF90IGExID0gcy0+dXNlX2FscGhhID8gYzE+PjI0ICYgMHhmZiA6Cj4gMHhmZjsKPiAtICAgICAg ICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGEyID0gcy0+dXNlX2FscGhhID8gYzI+PjI0ICYg MHhmZiA6Cj4gMHhmZjsKPiAtICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IHBhbGFy Z2IxW10gPSB7IGExLCBjMT4+MTYgJiAweGZmLCBjMT4+Cj4gOCAmIDB4ZmYsIGMxICYgMHhmZiB9 Owo+IC0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGFsYXJnYjJbXSA9IHsgYTIs IGMyPj4xNiAmIDB4ZmYsIGMyPj4KPiA4ICYgMHhmZiwgYzIgJiAweGZmIH07Cj4gLSAgICAgICAg ICAgICAgICAgICAgY29uc3QgaW50IGQxID0gZGlmZihwYWxhcmdiMSwgYXJnYiwgcyk7Cj4gLSAg ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGQyID0gZGlmZihwYWxhcmdiMiwgYXJnYiwgcyk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgYzEgPSBwYWxldHRlW3IxXTsK PiArICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBjMiA9IHBhbGV0dGVbcjJdOwo+ ICsgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGFsYXJnYjFbXSA9IHsgMHhmZiwg YzE+PjE2ICYgMHhmZiwKPiBjMT4+IDggJiAweGZmLCBjMSAmIDB4ZmYgfTsKPiArICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90IHBhbGFyZ2IyW10gPSB7IDB4ZmYsIGMyPj4xNiAmIDB4 ZmYsCj4gYzI+PiA4ICYgMHhmZiwgYzIgJiAweGZmIH07Cj4gKyAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50IGQxID0gZGlmZihwYWxhcmdiMSwgYXJnYiwgdHJhbnNfdGhyZXNoKTsKPiArICAg ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZDIgPSBkaWZmKHBhbGFyZ2IyLCBhcmdiLCB0cmFu c190aHJlc2gpOwo+ICAgICAgICAgICAgICAgICAgICAgIGlmIChkMSAhPSBkMikgewo+IC0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAocy0+dXNlX2FscGhhKQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwKPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiLyFcXCAlMDJYJTAyWCUwMlg6ICVkICEgJWQKPiAoJTA4IlBS SVgzMiIgISAlMDgiUFJJWDMyIikgLyBkaXN0OiAlZCAhICVkXG4iLAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIHIxLCByMiwgYzEsIGMyLCBkMSwgZDIpOwo+ IC0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLAo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIvIVxcICUwMlglMDJYJTAyWDogJWQgISAlZAo+ICglMDYiUFJJWDMyIiAh ICUwNiJQUklYMzIiKSAvIGRpc3Q6ICVkICEgJWRcbiIsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgciwgZywgYiwgcjEsIHIyLCBjMSAmIDB4ZmZmZmZmLCBjMiAmCj4gMHhm ZmZmZmYsIGQxLCBkMik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyFcXCAlMDJY JTAyWCUwMlg6ICVkICEgJWQgKCUwNiJQUklYMzIiICEKPiAlMDYiUFJJWDMyIikgLyBkaXN0OiAl ZCAhICVkXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgcjEs IHIyLCBjMSAmIDB4ZmZmZmZmLCBjMiAmCj4gMHhmZmZmZmYsIGQxLCBkMik7Cj4gICAgICAgICAg ICAgICAgICAgICAgICAgIHJldCA9IDE7Cj4gICAgICAgICAgICAgICAgICAgICAgfQo+ICAgICAg ICAgICAgICAgICAgfQo+IEBAIC02MDQsOCArNTkyLDggQEAgc3RydWN0IGNvbG9yIHsKPiAgfTsK Pgo+ICBzdHJ1Y3QgY29sb3JfcmVjdCB7Cj4gLSAgICB1aW50OF90IG1pbls0XTsKPiAtICAgIHVp bnQ4X3QgbWF4WzRdOwo+ICsgICAgdWludDhfdCBtaW5bM107Cj4gKyAgICB1aW50OF90IG1heFsz XTsKPiAgfTsKPgo+ICB0eXBlZGVmIGludCAoKmNtcF9mdW5jKShjb25zdCB2b2lkICosIGNvbnN0 IHZvaWQgKik7Cj4gQEAgLTYyNiw0NyArNjE0LDQzIEBAIERFQ0xBUkVfQ01QX0ZVTkMoYiwgMykK Pgo+ICBzdGF0aWMgY29uc3QgY21wX2Z1bmMgY21wX2Z1bmNzW10gPSB7Y21wX2EsIGNtcF9yLCBj bXBfZywgY21wX2J9Owo+Cj4gLXN0YXRpYyBpbnQgZ2V0X25leHRfY29sb3IoY29uc3QgdWludDhf dCAqY29sb3JfdXNlZCwgY29uc3QKPiBQYWxldHRlVXNlQ29udGV4dCAqcywKPiArc3RhdGljIGlu dCBnZXRfbmV4dF9jb2xvcihjb25zdCB1aW50OF90ICpjb2xvcl91c2VkLCBjb25zdCB1aW50MzJf dAo+ICpwYWxldHRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB0cmFu c190aHJlc2gsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb21wb25lbnQsIGNv bnN0IHN0cnVjdCBjb2xvcl9yZWN0ICpib3gpCj4gIHsKPiAtICAgIGludCB3YSwgd3IsIHdnLCB3 YjsKPiArICAgIGludCB3ciwgd2csIHdiOwo+ICAgICAgaW50IGksIGxvbmdlc3QgPSAwOwo+ICAg ICAgdW5zaWduZWQgbmJfY29sb3IgPSAwOwo+ICAgICAgc3RydWN0IGNvbG9yX3JlY3QgcmFuZ2Vz Owo+ICAgICAgc3RydWN0IGNvbG9yIHRtcF9wYWxbMjU2XTsKPiAgICAgIGNtcF9mdW5jIGNtcGY7 Cj4KPiAtICAgIHJhbmdlcy5taW5bMF0gPSByYW5nZXMubWluWzFdID0gcmFuZ2VzLm1pblsyXSAg PSByYW5nZXMubWluWzNdPSAweGZmOwo+IC0gICAgcmFuZ2VzLm1heFswXSA9IHJhbmdlcy5tYXhb MV0gPSByYW5nZXMubWF4WzJdICA9IHJhbmdlcy5tYXhbM109IDB4MDA7Cj4gKyAgICByYW5nZXMu bWluWzBdID0gcmFuZ2VzLm1pblsxXSA9IHJhbmdlcy5taW5bMl0gPSAweGZmOwo+ICsgICAgcmFu Z2VzLm1heFswXSA9IHJhbmdlcy5tYXhbMV0gPSByYW5nZXMubWF4WzJdID0gMHgwMDsKPgo+ICAg ICAgZm9yIChpID0gMDsgaSA8IEFWUEFMRVRURV9DT1VOVDsgaSsrKSB7Cj4gLSAgICAgICAgY29u c3QgdWludDMyX3QgYyA9IHMtPnBhbGV0dGVbaV07Cj4gKyAgICAgICAgY29uc3QgdWludDMyX3Qg YyA9IHBhbGV0dGVbaV07Cj4gICAgICAgICAgY29uc3QgdWludDhfdCBhID0gYyA+PiAyNCAmIDB4 ZmY7Cj4gICAgICAgICAgY29uc3QgdWludDhfdCByID0gYyA+PiAxNiAmIDB4ZmY7Cj4gICAgICAg ICAgY29uc3QgdWludDhfdCBnID0gYyA+PiAgOCAmIDB4ZmY7Cj4gICAgICAgICAgY29uc3QgdWlu dDhfdCBiID0gYyAgICAgICAmIDB4ZmY7Cj4KPiAtICAgICAgICBpZiAoIXMtPnVzZV9hbHBoYSAm JiBhIDwgcy0+dHJhbnNfdGhyZXNoKSB7Cj4gKyAgICAgICAgaWYgKGEgPCB0cmFuc190aHJlc2gp IHsKPiAgICAgICAgICAgICAgY29udGludWU7Cj4gICAgICAgICAgfQo+Cj4gLSAgICAgICAgaWYg KGNvbG9yX3VzZWRbaV0gfHwgKGEgIT0gMHhmZiAmJiAhcy0+dXNlX2FscGhhKSB8fAo+IC0gICAg ICAgICAgICByIDwgYm94LT5taW5bMV0gfHwgZyA8IGJveC0+bWluWzJdIHx8IGIgPCBib3gtPm1p blszXSB8fAo+IC0gICAgICAgICAgICByID4gYm94LT5tYXhbMV0gfHwgZyA+IGJveC0+bWF4WzJd IHx8IGIgPiBib3gtPm1heFszXSkKPiArICAgICAgICBpZiAoY29sb3JfdXNlZFtpXSB8fCAoYSAh PSAweGZmKSB8fAo+ICsgICAgICAgICAgICByIDwgYm94LT5taW5bMF0gfHwgZyA8IGJveC0+bWlu WzFdIHx8IGIgPCBib3gtPm1pblsyXSB8fAo+ICsgICAgICAgICAgICByID4gYm94LT5tYXhbMF0g fHwgZyA+IGJveC0+bWF4WzFdIHx8IGIgPiBib3gtPm1heFsyXSkKPiAgICAgICAgICAgICAgY29u dGludWU7Cj4KPiAtICAgICAgICBpZiAocy0+dXNlX2FscGhhICYmIChhIDwgYm94LT5taW5bMF0g fHwgYSA+IGJveC0+bWF4WzBdKSkKPiAtICAgICAgICAgICAgY29udGludWU7Cj4gLQo+IC0gICAg ICAgIGlmIChhIDwgcmFuZ2VzLm1pblswXSkgcmFuZ2VzLm1pblswXSA9IGE7Cj4gLSAgICAgICAg aWYgKHIgPCByYW5nZXMubWluWzFdKSByYW5nZXMubWluWzFdID0gcjsKPiAtICAgICAgICBpZiAo ZyA8IHJhbmdlcy5taW5bMl0pIHJhbmdlcy5taW5bMl0gPSBnOwo+IC0gICAgICAgIGlmIChiIDwg cmFuZ2VzLm1pblszXSkgcmFuZ2VzLm1pblszXSA9IGI7Cj4gKyAgICAgICAgaWYgKHIgPCByYW5n ZXMubWluWzBdKSByYW5nZXMubWluWzBdID0gcjsKPiArICAgICAgICBpZiAoZyA8IHJhbmdlcy5t aW5bMV0pIHJhbmdlcy5taW5bMV0gPSBnOwo+ICsgICAgICAgIGlmIChiIDwgcmFuZ2VzLm1pblsy XSkgcmFuZ2VzLm1pblsyXSA9IGI7Cj4KPiAtICAgICAgICBpZiAoYSA+IHJhbmdlcy5tYXhbMF0p IHJhbmdlcy5tYXhbMF0gPSBhOwo+IC0gICAgICAgIGlmIChyID4gcmFuZ2VzLm1heFsxXSkgcmFu Z2VzLm1heFsxXSA9IHI7Cj4gLSAgICAgICAgaWYgKGcgPiByYW5nZXMubWF4WzJdKSByYW5nZXMu bWF4WzJdID0gZzsKPiAtICAgICAgICBpZiAoYiA+IHJhbmdlcy5tYXhbM10pIHJhbmdlcy5tYXhb M10gPSBiOwo+ICsgICAgICAgIGlmIChyID4gcmFuZ2VzLm1heFswXSkgcmFuZ2VzLm1heFswXSA9 IHI7Cj4gKyAgICAgICAgaWYgKGcgPiByYW5nZXMubWF4WzFdKSByYW5nZXMubWF4WzFdID0gZzsK PiArICAgICAgICBpZiAoYiA+IHJhbmdlcy5tYXhbMl0pIHJhbmdlcy5tYXhbMl0gPSBiOwo+Cj4g ICAgICAgICAgdG1wX3BhbFtuYl9jb2xvcl0udmFsdWUgID0gYzsKPiAgICAgICAgICB0bXBfcGFs W25iX2NvbG9yXS5wYWxfaWQgPSBpOwo+IEBAIC02NzgsMjIgKzY2MiwxMiBAQCBzdGF0aWMgaW50 IGdldF9uZXh0X2NvbG9yKGNvbnN0IHVpbnQ4X3QgKmNvbG9yX3VzZWQsCj4gY29uc3QgUGFsZXR0 ZVVzZUNvbnRleHQgKnMsCj4gICAgICAgICAgcmV0dXJuIC0xOwo+Cj4gICAgICAvKiBkZWZpbmUg bG9uZ2VzdCBheGlzIHRoYXQgd2lsbCBiZSB0aGUgc3BsaXQgY29tcG9uZW50ICovCj4gLSAgICB3 YSA9IHJhbmdlcy5tYXhbMF0gLSByYW5nZXMubWluWzBdOwo+IC0gICAgd3IgPSByYW5nZXMubWF4 WzFdIC0gcmFuZ2VzLm1pblsxXTsKPiAtICAgIHdnID0gcmFuZ2VzLm1heFsyXSAtIHJhbmdlcy5t aW5bMl07Cj4gLSAgICB3YiA9IHJhbmdlcy5tYXhbM10gLSByYW5nZXMubWluWzNdOwo+IC0KPiAt ICAgIGlmIChzLT51c2VfYWxwaGEpIHsKPiAtICAgICAgICBpZiAod2EgPj0gd3IgJiYgd2EgPj0g d2IgJiYgd2EgPj0gd2cpIGxvbmdlc3QgPSAwOwo+IC0gICAgICAgIGlmICh3ciA+PSB3ZyAmJiB3 ciA+PSB3YiAmJiB3ciA+PSB3YSkgbG9uZ2VzdCA9IDE7Cj4gLSAgICAgICAgaWYgKHdnID49IHdy ICYmIHdnID49IHdiICYmIHdnID49IHdhKSBsb25nZXN0ID0gMjsKPiAtICAgICAgICBpZiAod2Ig Pj0gd3IgJiYgd2IgPj0gd2cgJiYgd2IgPj0gd2EpIGxvbmdlc3QgPSAzOwo+IC0gICAgfSBlbHNl IHsKPiAtICAgICAgICBpZiAod3IgPj0gd2cgJiYgd3IgPj0gd2IpIGxvbmdlc3QgPSAxOwo+IC0g ICAgICAgIGlmICh3ZyA+PSB3ciAmJiB3ZyA+PSB3YikgbG9uZ2VzdCA9IDI7Cj4gLSAgICAgICAg aWYgKHdiID49IHdyICYmIHdiID49IHdnKSBsb25nZXN0ID0gMzsKPiAtICAgIH0KPiAtCj4gKyAg ICB3ciA9IHJhbmdlcy5tYXhbMF0gLSByYW5nZXMubWluWzBdOwo+ICsgICAgd2cgPSByYW5nZXMu bWF4WzFdIC0gcmFuZ2VzLm1pblsxXTsKPiArICAgIHdiID0gcmFuZ2VzLm1heFsyXSAtIHJhbmdl cy5taW5bMl07Cj4gKyAgICBpZiAod3IgPj0gd2cgJiYgd3IgPj0gd2IpIGxvbmdlc3QgPSAxOwo+ ICsgICAgaWYgKHdnID49IHdyICYmIHdnID49IHdiKSBsb25nZXN0ID0gMjsKPiArICAgIGlmICh3 YiA+PSB3ciAmJiB3YiA+PSB3ZykgbG9uZ2VzdCA9IDM7Cj4gICAgICBjbXBmID0gY21wX2Z1bmNz W2xvbmdlc3RdOwo+ICAgICAgKmNvbXBvbmVudCA9IGxvbmdlc3Q7Cj4KPiBAQCAtNzA2LDcgKzY4 MCw4IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfY29sb3IoY29uc3QgdWludDhfdCAqY29sb3JfdXNl ZCwKPiBjb25zdCBQYWxldHRlVXNlQ29udGV4dCAqcywKPiAgc3RhdGljIGludCBjb2xvcm1hcF9p bnNlcnQoc3RydWN0IGNvbG9yX25vZGUgKm1hcCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCAqY29sb3JfdXNlZCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpuYl91c2VkLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYWxldHRlVXNl Q29udGV4dCAqcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qg KnBhbGV0dGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB0cmFuc190 aHJlc2gsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb2xvcl9y ZWN0ICpib3gpCj4gIHsKPiAgICAgIHVpbnQzMl90IGM7Cj4gQEAgLTcxNCwxNCArNjg5LDE0IEBA IHN0YXRpYyBpbnQgY29sb3JtYXBfaW5zZXJ0KHN0cnVjdCBjb2xvcl9ub2RlICptYXAsCj4gICAg ICBpbnQgbm9kZV9sZWZ0X2lkID0gLTEsIG5vZGVfcmlnaHRfaWQgPSAtMTsKPiAgICAgIHN0cnVj dCBjb2xvcl9ub2RlICpub2RlOwo+ICAgICAgc3RydWN0IGNvbG9yX3JlY3QgYm94MSwgYm94MjsK PiAtICAgIGNvbnN0IGludCBwYWxfaWQgPSBnZXRfbmV4dF9jb2xvcihjb2xvcl91c2VkLCBzLCAm Y29tcG9uZW50LCBib3gpOwo+ICsgICAgY29uc3QgaW50IHBhbF9pZCA9IGdldF9uZXh0X2NvbG9y KGNvbG9yX3VzZWQsIHBhbGV0dGUsIHRyYW5zX3RocmVzaCwKPiAmY29tcG9uZW50LCBib3gpOwo+ Cj4gICAgICBpZiAocGFsX2lkIDwgMCkKPiAgICAgICAgICByZXR1cm4gLTE7Cj4KPiAgICAgIC8q IGNyZWF0ZSBuZXcgbm9kZSB3aXRoIHRoYXQgY29sb3IgKi8KPiAgICAgIGN1cl9pZCA9ICgqbmJf dXNlZCkrKzsKPiAtICAgIGMgPSBzLT5wYWxldHRlW3BhbF9pZF07Cj4gKyAgICBjID0gcGFsZXR0 ZVtwYWxfaWRdOwo+ICAgICAgbm9kZSA9ICZtYXBbY3VyX2lkXTsKPiAgICAgIG5vZGUtPnNwbGl0 ID0gY29tcG9uZW50Owo+ICAgICAgbm9kZS0+cGFsZXR0ZV9pZCA9IHBhbF9pZDsKPiBAQCAtNzM0 LDEzICs3MDksMTMgQEAgc3RhdGljIGludCBjb2xvcm1hcF9pbnNlcnQoc3RydWN0IGNvbG9yX25v ZGUgKm1hcCwKPgo+ICAgICAgLyogZ2V0IHRoZSB0d28gYm94ZXMgdGhpcyBub2RlIGNyZWF0ZXMg Ki8KPiAgICAgIGJveDEgPSBib3gyID0gKmJveDsKPiAtICAgIGJveDEubWF4W2NvbXBvbmVudF0g PSBub2RlLT52YWxbY29tcG9uZW50XTsKPiAtICAgIGJveDIubWluW2NvbXBvbmVudF0gPSBGRk1J Tihub2RlLT52YWxbY29tcG9uZW50XSArIDEsIDI1NSk7Cj4gKyAgICBib3gxLm1heFtjb21wb25l bnQtMV0gPSBub2RlLT52YWxbY29tcG9uZW50XTsKPiArICAgIGJveDIubWluW2NvbXBvbmVudC0x XSA9IEZGTUlOKG5vZGUtPnZhbFtjb21wb25lbnRdICsgMSwgMjU1KTsKPgo+IC0gICAgbm9kZV9s ZWZ0X2lkID0gY29sb3JtYXBfaW5zZXJ0KG1hcCwgY29sb3JfdXNlZCwgbmJfdXNlZCwgcywgJmJv eDEpOwo+ICsgICAgbm9kZV9sZWZ0X2lkID0gY29sb3JtYXBfaW5zZXJ0KG1hcCwgY29sb3JfdXNl ZCwgbmJfdXNlZCwgcGFsZXR0ZSwKPiB0cmFuc190aHJlc2gsICZib3gxKTsKPgo+IC0gICAgaWYg KGJveDIubWluW2NvbXBvbmVudF0gPD0gYm94Mi5tYXhbY29tcG9uZW50XSkKPiAtICAgICAgICBu b2RlX3JpZ2h0X2lkID0gY29sb3JtYXBfaW5zZXJ0KG1hcCwgY29sb3JfdXNlZCwgbmJfdXNlZCwg cywKPiAmYm94Mik7Cj4gKyAgICBpZiAoYm94Mi5taW5bY29tcG9uZW50LTFdIDw9IGJveDIubWF4 W2NvbXBvbmVudC0xXSkKPiArICAgICAgICBub2RlX3JpZ2h0X2lkID0gY29sb3JtYXBfaW5zZXJ0 KG1hcCwgY29sb3JfdXNlZCwgbmJfdXNlZCwKPiBwYWxldHRlLCB0cmFuc190aHJlc2gsICZib3gy KTsKPgo+ICAgICAgbm9kZS0+bGVmdF9pZCAgPSBub2RlX2xlZnRfaWQ7Cj4gICAgICBub2RlLT5y aWdodF9pZCA9IG5vZGVfcmlnaHRfaWQ7Cj4gQEAgLTc1NSwxMyArNzMwLDYgQEAgc3RhdGljIGlu dCBjbXBfcGFsX2VudHJ5KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCj4gICAgICByZXR1 cm4gYzEgLSBjMjsKPiAgfQo+Cj4gLXN0YXRpYyBpbnQgY21wX3BhbF9lbnRyeV9hbHBoYShjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKQo+IC17Cj4gLSAgICBjb25zdCBpbnQgYzEgPSAqKGNv bnN0IHVpbnQzMl90ICopYTsKPiAtICAgIGNvbnN0IGludCBjMiA9ICooY29uc3QgdWludDMyX3Qg KiliOwo+IC0gICAgcmV0dXJuIGMxIC0gYzI7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGxvYWRf Y29sb3JtYXAoUGFsZXR0ZVVzZUNvbnRleHQgKnMpCj4gIHsKPiAgICAgIGludCBpLCBuYl91c2Vk ID0gMDsKPiBAQCAtNzY5LDEzICs3MzcsMTIgQEAgc3RhdGljIHZvaWQgbG9hZF9jb2xvcm1hcChQ YWxldHRlVXNlQ29udGV4dCAqcykKPiAgICAgIHVpbnQzMl90IGxhc3RfY29sb3IgPSAwOwo+ICAg ICAgc3RydWN0IGNvbG9yX3JlY3QgYm94Owo+Cj4gLSAgICBpZiAoIXMtPnVzZV9hbHBoYSAmJiBz LT50cmFuc3BhcmVuY3lfaW5kZXggPj0gMCkgewo+ICsgICAgaWYgKHMtPnRyYW5zcGFyZW5jeV9p bmRleCA+PSAwKSB7Cj4gICAgICAgICAgRkZTV0FQKHVpbnQzMl90LCBzLT5wYWxldHRlW3MtPnRy YW5zcGFyZW5jeV9pbmRleF0sCj4gcy0+cGFsZXR0ZVsyNTVdKTsKPiAgICAgIH0KPgo+ICAgICAg LyogZGlzYWJsZSB0cmFuc3BhcmVudCBjb2xvcnMgYW5kIGR1cHMgKi8KPiAtICAgIHFzb3J0KHMt PnBhbGV0dGUsIEFWUEFMRVRURV9DT1VOVC0ocy0+dHJhbnNwYXJlbmN5X2luZGV4ID49IDApLAo+ IHNpemVvZigqcy0+cGFsZXR0ZSksCj4gLSAgICAgICAgcy0+dXNlX2FscGhhID8gY21wX3BhbF9l bnRyeV9hbHBoYSA6IGNtcF9wYWxfZW50cnkpOwo+ICsgICAgcXNvcnQocy0+cGFsZXR0ZSwgQVZQ QUxFVFRFX0NPVU5ULShzLT50cmFuc3BhcmVuY3lfaW5kZXggPj0gMCksCj4gc2l6ZW9mKCpzLT5w YWxldHRlKSwgY21wX3BhbF9lbnRyeSk7Cj4KPiAgICAgIGZvciAoaSA9IDA7IGkgPCBBVlBBTEVU VEVfQ09VTlQ7IGkrKykgewo+ICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGMgPSBzLT5wYWxldHRl W2ldOwo+IEBAIC03ODQsMjIgKzc1MSwyMiBAQCBzdGF0aWMgdm9pZCBsb2FkX2NvbG9ybWFwKFBh bGV0dGVVc2VDb250ZXh0ICpzKQo+ICAgICAgICAgICAgICBjb250aW51ZTsKPiAgICAgICAgICB9 Cj4gICAgICAgICAgbGFzdF9jb2xvciA9IGM7Cj4gLSAgICAgICAgaWYgKCFzLT51c2VfYWxwaGEg JiYgYyA+PiAyNCA8IHMtPnRyYW5zX3RocmVzaCkgewo+ICsgICAgICAgIGlmIChjID4+IDI0IDwg cy0+dHJhbnNfdGhyZXNoKSB7Cj4gICAgICAgICAgICAgIGNvbG9yX3VzZWRbaV0gPSAxOyAvLyBp Z25vcmUgdHJhbnNwYXJlbnQgY29sb3IocykKPiAgICAgICAgICAgICAgY29udGludWU7Cj4gICAg ICAgICAgfQo+ICAgICAgfQo+Cj4gLSAgICBib3gubWluWzBdID0gYm94Lm1pblsxXSA9IGJveC5t aW5bMl0gPSBib3gubWluWzNdID0gMHgwMDsKPiAtICAgIGJveC5tYXhbMF0gPSBib3gubWF4WzFd ID0gYm94Lm1heFsyXSA9IGJveC5tYXhbM10gPSAweGZmOwo+ICsgICAgYm94Lm1pblswXSA9IGJv eC5taW5bMV0gPSBib3gubWluWzJdID0gMHgwMDsKPiArICAgIGJveC5tYXhbMF0gPSBib3gubWF4 WzFdID0gYm94Lm1heFsyXSA9IDB4ZmY7Cj4KPiAtICAgIGNvbG9ybWFwX2luc2VydChzLT5tYXAs IGNvbG9yX3VzZWQsICZuYl91c2VkLCBzLCAmYm94KTsKPiArICAgIGNvbG9ybWFwX2luc2VydChz LT5tYXAsIGNvbG9yX3VzZWQsICZuYl91c2VkLCBzLT5wYWxldHRlLAo+IHMtPnRyYW5zX3RocmVz aCwgJmJveCk7Cj4KPiAgICAgIGlmIChzLT5kb3RfZmlsZW5hbWUpCj4gICAgICAgICAgZGlzcF90 cmVlKHMtPm1hcCwgcy0+ZG90X2ZpbGVuYW1lKTsKPgo+ICAgICAgaWYgKHMtPmRlYnVnX2FjY3Vy YWN5KSB7Cj4gLSAgICAgICAgaWYgKCFkZWJ1Z19hY2N1cmFjeShzKSkKPiArICAgICAgICBpZiAo IWRlYnVnX2FjY3VyYWN5KHMtPm1hcCwgcy0+cGFsZXR0ZSwgcy0+dHJhbnNfdGhyZXNoLAo+IHMt PmNvbG9yX3NlYXJjaF9tZXRob2QpKQo+ICAgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0lORk8sICJBY2N1cmFjeSBjaGVjayBwYXNzZWRcbiIpOwo+ICAgICAgfQo+ICB9Cj4gQEAgLTgx MywxOCArNzgwLDE2IEBAIHN0YXRpYyB2b2lkIGRlYnVnX21lYW5fZXJyb3IoUGFsZXR0ZVVzZUNv bnRleHQgKnMsCj4gY29uc3QgQVZGcmFtZSAqaW4xLAo+ICAgICAgdWludDhfdCAgKnNyYzIgPSAg ICAgICAgICAgICBpbjItPmRhdGFbMF07Cj4gICAgICBjb25zdCBpbnQgc3JjMV9saW5lc2l6ZSA9 IGluMS0+bGluZXNpemVbMF0gPj4gMjsKPiAgICAgIGNvbnN0IGludCBzcmMyX2xpbmVzaXplID0g aW4yLT5saW5lc2l6ZVswXTsKPiAtICAgIGNvbnN0IGZsb2F0IGRpdiA9IGluMS0+d2lkdGggKiBp bjEtPmhlaWdodCAqIChzLT51c2VfYWxwaGEgPyA0IDogMyk7Cj4gKyAgICBjb25zdCBmbG9hdCBk aXYgPSBpbjEtPndpZHRoICogaW4xLT5oZWlnaHQgKiAzOwo+ICAgICAgdW5zaWduZWQgbWVhbl9l cnIgPSAwOwo+Cj4gICAgICBmb3IgKHkgPSAwOyB5IDwgaW4xLT5oZWlnaHQ7IHkrKykgewo+ICAg ICAgICAgIGZvciAoeCA9IDA7IHggPCBpbjEtPndpZHRoOyB4KyspIHsKPiAgICAgICAgICAgICAg Y29uc3QgdWludDMyX3QgYzEgPSBzcmMxW3hdOwo+ICAgICAgICAgICAgICBjb25zdCB1aW50MzJf dCBjMiA9IHBhbGV0dGVbc3JjMlt4XV07Cj4gLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgYTEg PSBzLT51c2VfYWxwaGEgPyBjMT4+MjQgJiAweGZmIDogMHhmZjsKPiAtICAgICAgICAgICAgY29u c3QgdWludDhfdCBhMiA9IHMtPnVzZV9hbHBoYSA/IGMyPj4yNCAmIDB4ZmYgOiAweGZmOwo+IC0g ICAgICAgICAgICBjb25zdCB1aW50OF90IGFyZ2IxW10gPSB7YTEsIGMxID4+IDE2ICYgMHhmZiwg YzEgPj4gOCAmIDB4ZmYsCj4gYzEgJiAweGZmfTsKPiAtICAgICAgICAgICAgY29uc3QgdWludDhf dCBhcmdiMltdID0ge2EyLCBjMiA+PiAxNiAmIDB4ZmYsIGMyID4+IDggJiAweGZmLAo+IGMyICYg MHhmZn07Cj4gLSAgICAgICAgICAgIG1lYW5fZXJyICs9IGRpZmYoYXJnYjEsIGFyZ2IyLCBzKTsK PiArICAgICAgICAgICAgY29uc3QgdWludDhfdCBhcmdiMVtdID0gezB4ZmYsIGMxID4+IDE2ICYg MHhmZiwgYzEgPj4gOCAmCj4gMHhmZiwgYzEgJiAweGZmfTsKPiArICAgICAgICAgICAgY29uc3Qg dWludDhfdCBhcmdiMltdID0gezB4ZmYsIGMyID4+IDE2ICYgMHhmZiwgYzIgPj4gOCAmCj4gMHhm ZiwgYzIgJiAweGZmfTsKPiArICAgICAgICAgICAgbWVhbl9lcnIgKz0gZGlmZihhcmdiMSwgYXJn YjIsIHMtPnRyYW5zX3RocmVzaCk7Cj4gICAgICAgICAgfQo+ICAgICAgICAgIHNyYzEgKz0gc3Jj MV9saW5lc2l6ZTsKPiAgICAgICAgICBzcmMyICs9IHNyYzJfbGluZXNpemU7Cj4gQEAgLTEwMjQs NyArOTg5LDcgQEAgc3RhdGljIHZvaWQgbG9hZF9wYWxldHRlKFBhbGV0dGVVc2VDb250ZXh0ICpz LCBjb25zdAo+IEFWRnJhbWUgKnBhbGV0dGVfZnJhbWUpCj4gICAgICBmb3IgKHkgPSAwOyB5IDwg cGFsZXR0ZV9mcmFtZS0+aGVpZ2h0OyB5KyspIHsKPiAgICAgICAgICBmb3IgKHggPSAwOyB4IDwg cGFsZXR0ZV9mcmFtZS0+d2lkdGg7IHgrKykgewo+ICAgICAgICAgICAgICBzLT5wYWxldHRlW2ld ID0gcFt4XTsKPiAtICAgICAgICAgICAgaWYgKCFzLT51c2VfYWxwaGEgJiYgcFt4XT4+MjQgPCBz LT50cmFuc190aHJlc2gpIHsKPiArICAgICAgICAgICAgaWYgKHBbeF0+PjI0IDwgcy0+dHJhbnNf dGhyZXNoKSB7Cj4gICAgICAgICAgICAgICAgICBzLT50cmFuc3BhcmVuY3lfaW5kZXggPSBpOyAv LyB3ZSBhcmUgYXNzdW1pbmcgYXQgbW9zdCBvbmUKPiB0cmFuc3BhcmVudCBjb2xvciBpbiBwYWxl dHRlCj4gICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgaSsrOwo+IC0tCj4gMi4zOS4wCj4K PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGZmbXBl Zy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3Jp YmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZt cGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KPgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZm bXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWls CmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmli ZSIuCg==