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 1DB4A4545C for ; Mon, 30 Jan 2023 10:48:48 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5BC9568BC6D; Mon, 30 Jan 2023 12:48:45 +0200 (EET) Received: from smtp.tiscali.it (santino-notr.mail.tiscali.it [213.205.33.215]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B05DA68BB33 for ; Mon, 30 Jan 2023 12:48:38 +0200 (EET) Received: from [192.168.20.100] ([95.243.137.154]) by santino.mail.tiscali.it with id Eyoc2901f3L3PKz01yodND; Mon, 30 Jan 2023 10:48:37 +0000 X-Spam-Final-Verdict: clean X-Spam-State: 0 X-Spam-Score: 0 X-Spam-Verdict: clean x-auth-user: klimklim@tiscali.it Content-Type: multipart/mixed; boundary="------------SnKAbDr88Sg0uZjUveMxbipJ" Message-ID: <9ae25c06-73ce-f3b6-7a29-3dd8e3e530c3@tiscali.it> Date: Mon, 30 Jan 2023 11:48:36 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Content-Language: it, en-US To: ffmpeg-devel@ffmpeg.org References: <8d713a21-f2f0-5c8d-fa93-0278965509e5@tiscali.it> <47ee718c-bce0-cffa-9c6a-2889a6547017@tiscali.it> From: Francesco Carusi In-Reply-To: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tiscali.it; s=smtp; t=1675075717; bh=ix4aru0UJJoHNz3jXv9LtV/YU0gp8koJr7DmykPucN4=; h=Date:Subject:To:References:From:In-Reply-To; b=G70UUWZIp0tV7o4D+4ljdDH8A5OFR50ib4k8i3nJ4quqqHM9+8N25FHEiXkcoC/LY yfU6OPy1e9WlpkLT+FsUJO8YXSqix80KW1c8rKQHX72zhsF6mq0w7MgM1Li17lSoT9 17WzsZ7g1DX5JH+7Xj8hdjT8/gjlzLOqaaiec13Q= Subject: Re: [FFmpeg-devel] drawtext filter 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------SnKAbDr88Sg0uZjUveMxbipJ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 28/01/2023 16:32, Paul B Mahol wrote: > On 1/28/23, Francesco Carusi wrote: >> On 27/01/2023 18:31, Paul B Mahol wrote: >>> On 1/27/23, Francesco Carusi wrote: >>>> On 26/01/2023 17:37, Paul B Mahol wrote: >>>>> On 1/26/23, Francesco Carusi wrote: >>>>>> On 26/01/2023 14:21, Paul B Mahol wrote: >>>>>>> On 1/26/23, Francesco Carusi wrote: >>>>>>>> The drawtext reinit command is also used in the docs as an example >>>>>>>> for >>>>>>>> the sendcmd filter, so I thought it was fine to use commands in that >>>>>>>> way. In my opinion it is also a convenient way to modify multiple >>>>>>>> options at the same time. >>>>>>>> Should the command match the name of a filter option instead? >>>>>>>> >>>>>>> Please do not top post. >>>>>>> >>>>>>> It is much better to use already existing options for commands that >>>>>>> is >>>>>>> more intuitive to users. Also multiple options can be set at runtime, >>>>>>> there is no such limitation. >>>>>> ok, I'm going to remove the "change" command and add commands that >>>>>> match >>>>>> the options that it included. >>>>> Thanks, feel free to ask questions on #ffmpeg-devel irc channel. >>>> I'm attaching the updated patch, I also updated the document at >>>> https://github.com/yethie/FFmpeg/blob/master/drawtext/CHANGES.md >>>> Thanks >>> Amazing, I like demos! >>> >>> Could improve code style of newly added/changed lines? >>> For example opening { put on separate line. So code style is in sync >>> with rest of codebase. >> Sure, I'll put opening { on a new line for functions, not for control >> statements, like in the rest of the code. Is it fine? > Yes. Thanks. > >>> The commands stuff does not need to use strcmp to detect if option >>> value have been changed, you could avoid strcmp by just caching old >>> value prior to calling function the picks new values, and after that >>> just compare old with new and then if it differs call needed code. >> I'll cache the numeric values. I think that caching string values is not >> the preferred solution because in addition to the strcmp needed to check >> the value, it would also need a strdup to cache the previous value, even >> when the command does not involve those options. Does it sound reasonable? > Yes. I'm attaching the patch that includes the changes we discussed. > >>>>>>>> On 26/01/2023 11:50, Paul B Mahol wrote: >>>>>>>>> On 1/26/23, Francesco Carusi wrote: >>>>>>>>>> Hi, I'm new to contributing to ffmpeg! >>>>>>>>>> >>>>>>>>>> I modified the drawtext filter to improve text rendering and add >>>>>>>>>> some >>>>>>>>>> features. You can find a high level description of the changes at >>>>>>>>>> this >>>>>>>>>> link: >>>>>>>>>> >>>>>>>>>> https://github.com/yethie/FFmpeg/blob/master/drawtext/CHANGES.md >>>>>>>>>> >>>>>>>>>> I'm also attaching the patch file. >>>>>>>>>> I looked for the filter maintainer to discuss about the changes I >>>>>>>>>> made >>>>>>>>>> but it looks like there isn't any, am I correct? >>>>>>>>>> >>>>>>>>>> Please let me know if this is the right way to submit my >>>>>>>>>> contribution. >>>>>>>>> Why filter can not support normal commands for options? Like >>>>>>>>> most/all >>>>>>>>> other filters that have support for changing options values at >>>>>>>>> runtime. >>>>>>>>> >>>>>>>>> The reinit and yours added change option(s) are very >>>>>>>>> strange/inconvenient things to do. >>>>>>>>> _______________________________________________ >>>>>>>>> ffmpeg-devel mailing list >>>>>>>>> ffmpeg-devel@ffmpeg.org >>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>>>>>>> >>>>>>>>> To unsubscribe, visit link above, or email >>>>>>>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >>>>>>>> _______________________________________________ >>>>>>>> ffmpeg-devel mailing list >>>>>>>> ffmpeg-devel@ffmpeg.org >>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>>>>>> >>>>>>>> To unsubscribe, visit link above, or email >>>>>>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> ffmpeg-devel mailing list >>>>>>> ffmpeg-devel@ffmpeg.org >>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>>>>> >>>>>>> To unsubscribe, visit link above, or email >>>>>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >>>>>> _______________________________________________ >>>>>> ffmpeg-devel mailing list >>>>>> ffmpeg-devel@ffmpeg.org >>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>>>> >>>>>> To unsubscribe, visit link above, or email >>>>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >>>>>> >>>>> _______________________________________________ >>>>> ffmpeg-devel mailing list >>>>> ffmpeg-devel@ffmpeg.org >>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>>> >>>>> To unsubscribe, visit link above, or email >>>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >>> _______________________________________________ >>> ffmpeg-devel mailing list >>> ffmpeg-devel@ffmpeg.org >>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>> >>> To unsubscribe, visit link above, or email >>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >> > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------SnKAbDr88Sg0uZjUveMxbipJ Content-Type: text/plain; charset=UTF-8; name="0001-enhanced-drawtext-filter.patch" Content-Disposition: attachment; filename="0001-enhanced-drawtext-filter.patch" Content-Transfer-Encoding: base64 RnJvbSA3YjAwNmQ5NThiMGQyMjYyNjkzNjJiOWE4MTFiZDIxMGFlNDFhZGNkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IE1vbiwgMzAgSmFuIDIwMjMgMTE6NDE6NTMgKzAxMDAKU3ViamVjdDogW1BBVENIIDEv MV0gZW5oYW5jZWQgZHJhd3RleHQgZmlsdGVyCgotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAg ICAgICAgfCAgICA1ICstCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgIHwgICA4NSArKy0K IGxpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMgfCAxMTgyICsrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgOTM4IGluc2VydGlvbnMoKyks IDMzNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUK aW5kZXggNDc3OTBkMTBmNS4uYmQyMTQwNzZlMCAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisr KyBiL2NvbmZpZ3VyZQpAQCAtMjM1LDYgKzIzNSw3IEBAIEV4dGVybmFsIGxpYnJhcnkgc3Vw cG9ydDoKICAgLS1lbmFibGUtbGliZm9udGNvbmZpZyAgIGVuYWJsZSBsaWJmb250Y29uZmln LCB1c2VmdWwgZm9yIGRyYXd0ZXh0IGZpbHRlciBbbm9dCiAgIC0tZW5hYmxlLWxpYmZyZWV0 eXBlICAgICBlbmFibGUgbGliZnJlZXR5cGUsIG5lZWRlZCBmb3IgZHJhd3RleHQgZmlsdGVy IFtub10KICAgLS1lbmFibGUtbGliZnJpYmlkaSAgICAgIGVuYWJsZSBsaWJmcmliaWRpLCBp bXByb3ZlcyBkcmF3dGV4dCBmaWx0ZXIgW25vXQorICAtLWVuYWJsZS1saWJoYXJmYnV6eiAg ICAgZW5hYmxlIGxpYmhhcmZidXp6LCBuZWVkZWQgZm9yIGRyYXd0ZXh0IGZpbHRlciBbbm9d CiAgIC0tZW5hYmxlLWxpYmdsc2xhbmcgICAgICBlbmFibGUgR0xTTC0+U1BJUlYgY29tcGls YXRpb24gdmlhIGxpYmdsc2xhbmcgW25vXQogICAtLWVuYWJsZS1saWJnbWUgICAgICAgICAg ZW5hYmxlIEdhbWUgTXVzaWMgRW11IHZpYSBsaWJnbWUgW25vXQogICAtLWVuYWJsZS1saWJn c20gICAgICAgICAgZW5hYmxlIEdTTSBkZS9lbmNvZGluZyB2aWEgbGliZ3NtIFtub10KQEAg LTE4MTgsNiArMTgxOSw3IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgbGliZm9u dGNvbmZpZwogICAgIGxpYmZyZWV0eXBlCiAgICAgbGliZnJpYmlkaQorICAgIGxpYmhhcmZi dXp6CiAgICAgbGliZ2xzbGFuZwogICAgIGxpYmdtZQogICAgIGxpYmdzbQpAQCAtMzY1OCw3 ICszNjYwLDcgQEAgZGlsYXRpb25fb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiBkbm5f Y2xhc3NpZnlfZmlsdGVyX3NlbGVjdD0iZG5uIgogZG5uX2RldGVjdF9maWx0ZXJfc2VsZWN0 PSJkbm4iCiBkbm5fcHJvY2Vzc2luZ19maWx0ZXJfc2VsZWN0PSJkbm4iCi1kcmF3dGV4dF9m aWx0ZXJfZGVwcz0ibGliZnJlZXR5cGUiCitkcmF3dGV4dF9maWx0ZXJfZGVwcz0ibGliZnJl ZXR5cGUgbGliaGFyZmJ1enoiCiBkcmF3dGV4dF9maWx0ZXJfc3VnZ2VzdD0ibGliZm9udGNv bmZpZyBsaWJmcmliaWRpIgogZWxiZ19maWx0ZXJfZGVwcz0iYXZjb2RlYyIKIGVxX2ZpbHRl cl9kZXBzPSJncGwiCkBAIC02NTgyLDYgKzY1ODQsNyBAQCBlbmFibGVkIGZvbnRjb25maWcg ICAgICAgICYmIGVuYWJsZSBsaWJmb250Y29uZmlnCiBlbmFibGVkIGxpYmZvbnRjb25maWcg ICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJmb250Y29uZmlnIGZvbnRjb25maWcgImZv bnRjb25maWcvZm9udGNvbmZpZy5oIiBGY0luaXQKIGVuYWJsZWQgbGliZnJlZXR5cGUgICAg ICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmZyZWV0eXBlIGZyZWV0eXBlMiAiZnQyYnVp bGQuaCBGVF9GUkVFVFlQRV9IIiBGVF9Jbml0X0ZyZWVUeXBlCiBlbmFibGVkIGxpYmZyaWJp ZGkgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJmcmliaWRpIGZyaWJpZGkgZnJp YmlkaS5oIGZyaWJpZGlfdmVyc2lvbl9pbmZvCitlbmFibGVkIGxpYmhhcmZidXp6ICAgICAg ICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJoYXJmYnV6eiBoYXJmYnV6eiBoYi5oIGhiX2J1 ZmZlcl9jcmVhdGUKIGVuYWJsZWQgbGliZ2xzbGFuZyAmJiB7IGNoZWNrX2xpYiBzcGlydl9j b21waWxlciBnbHNsYW5nL0luY2x1ZGUvZ2xzbGFuZ19jX2ludGVyZmFjZS5oIGdsc2xhbmdf aW5pdGlhbGl6ZV9wcm9jZXNzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbGds c2xhbmcgLWxNYWNoaW5lSW5kZXBlbmRlbnQgLWxPU0RlcGVuZGVudCAtbEhMU0wgLWxPR0xD b21waWxlciAtbEdlbmVyaWNDb2RlR2VuIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtbFNQVlJlbWFwcGVyIC1sU1BJUlYgLWxTUElSVi1Ub29scy1vcHQgLWxTUElSVi1Ub29s cyAtbHB0aHJlYWQgLWxzdGRjKysgLWxtIHx8CmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50 ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCAzYTU0YzY4ZjNlLi42Y2ExYWQ5YjI5IDEw MDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0ZXJzLnRleGkKQEAg LTEyMDMyLDcgKzEyMDMyLDcgQEAgRHJhdyBhIHRleHQgc3RyaW5nIG9yIHRleHQgZnJvbSBh IHNwZWNpZmllZCBmaWxlIG9uIHRvcCBvZiBhIHZpZGVvLCB1c2luZyB0aGUKIGxpYmZyZWV0 eXBlIGxpYnJhcnkuCiAKIFRvIGVuYWJsZSBjb21waWxhdGlvbiBvZiB0aGlzIGZpbHRlciwg eW91IG5lZWQgdG8gY29uZmlndXJlIEZGbXBlZyB3aXRoCi1AY29kZXstLWVuYWJsZS1saWJm cmVldHlwZX0uCitAY29kZXstLWVuYWJsZS1saWJmcmVldHlwZX0gYW5kIEBjb2Rley0tZW5h YmxlLWxpYmhhcmZidXp6fS4KIFRvIGVuYWJsZSBkZWZhdWx0IGZvbnQgZmFsbGJhY2sgYW5k IHRoZSBAdmFye2ZvbnR9IG9wdGlvbiB5b3UgbmVlZCB0bwogY29uZmlndXJlIEZGbXBlZyB3 aXRoIEBjb2Rley0tZW5hYmxlLWxpYmZvbnRjb25maWd9LgogVG8gZW5hYmxlIHRoZSBAdmFy e3RleHRfc2hhcGluZ30gb3B0aW9uLCB5b3UgbmVlZCB0byBjb25maWd1cmUgRkZtcGVnIHdp dGgKQEAgLTEyMDQ5LDkgKzEyMDQ5LDI3IEBAIFVzZWQgdG8gZHJhdyBhIGJveCBhcm91bmQg dGV4dCB1c2luZyB0aGUgYmFja2dyb3VuZCBjb2xvci4KIFRoZSB2YWx1ZSBtdXN0IGJlIGVp dGhlciAxIChlbmFibGUpIG9yIDAgKGRpc2FibGUpLgogVGhlIGRlZmF1bHQgdmFsdWUgb2Yg QHZhcntib3h9IGlzIDAuCiAKK0BpdGVtIGJveHcKK1NldCB0aGUgd2lkdGggb2YgdGhlIGJv eCB0byBiZSBkcmF3biBhcm91bmQgdGV4dC4KK1RoZSBkZWZhdWx0IHZhbHVlIG9mIEB2YXJ7 Ym94d30gaXMgY29tcHV0ZWQgYXV0b21hdGljYWxseSB0byBtYXRjaCB0aGUgdGV4dCB3aWR0 aAorCitAaXRlbSBib3hoCitTZXQgdGhlIGhlaWdodCBvZiB0aGUgYm94IHRvIGJlIGRyYXdu IGFyb3VuZCB0ZXh0LgorVGhlIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntib3hofSBpcyBjb21w dXRlZCBhdXRvbWF0aWNhbGx5IHRvIG1hdGNoIHRoZSB0ZXh0IGhlaWdodAorCiBAaXRlbSBi b3hib3JkZXJ3CiBTZXQgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIgdG8gYmUgZHJhd24gYXJv dW5kIHRoZSBib3ggdXNpbmcgQHZhcntib3hjb2xvcn0uCi1UaGUgZGVmYXVsdCB2YWx1ZSBv ZiBAdmFye2JveGJvcmRlcnd9IGlzIDAuCitUaGUgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQg dXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKK0BpdGVtaXplIEBidWxsZXQK K0BpdGVtIEBjb2Rle2JveGJvcmRlcnc9MTB9IHNldCB0aGUgd2lkdGggb2YgYWxsIHRoZSBi b3JkZXJzIHRvIDEwCitAaXRlbSBAY29kZXtib3hib3JkZXJ3PTEwfDIwfSBzZXQgdGhlIHdp ZHRoIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBib3JkZXJzIHRvIDEwCisgICAgYW5kIHRoZSB3 aWR0aCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYm9yZGVycyB0byAyMAorQGl0ZW0gQGNvZGV7 Ym94Ym9yZGVydz0xMHwyMHwzMH0gc2V0IHRoZSB3aWR0aCBvZiB0aGUgdG9wIGJvcmRlciB0 byAxMCwgdGhlIHdpZHRoCisgICAgb2YgdGhlIGJvdHRvbSBib3JkZXIgdG8gMzAgYW5kIHRo ZSB3aWR0aCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYm9yZGVycyB0byAyMAorQGl0ZW0gQGNv ZGV7Ym94Ym9yZGVydz0xMHwyMHwzMHw0MH0gc2V0IHRoZSBib3JkZXJzIHdpZHRoIHRvIDEw ICh0b3ApLCAyMCAocmlnaHQpLAorICAgIDMwIChib3R0b20pLCA0MCAobGVmdCkKK0BlbmQg aXRlbWl6ZQorVGhlIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntib3hib3JkZXJ3fSBpcyAiMCIu CiAKIEBpdGVtIGJveGNvbG9yCiBUaGUgY29sb3IgdG8gYmUgdXNlZCBmb3IgZHJhd2luZyBi b3ggYXJvdW5kIHRleHQuIEZvciB0aGUgc3ludGF4IG9mIHRoaXMKQEAgLTEyMDYwLDggKzEy MDc4LDIyIEBAIG9wdGlvbiwgY2hlY2sgdGhlIEByZWZ7Y29sb3Igc3ludGF4LCwiQ29sb3Ii IHNlY3Rpb24gaW4gdGhlIGZmbXBlZy11dGlscyBtYW51YWwsCiBUaGUgZGVmYXVsdCB2YWx1 ZSBvZiBAdmFye2JveGNvbG9yfSBpcyAid2hpdGUiLgogCiBAaXRlbSBsaW5lX3NwYWNpbmcK LVNldCB0aGUgbGluZSBzcGFjaW5nIGluIHBpeGVscyBvZiB0aGUgYm9yZGVyIHRvIGJlIGRy YXduIGFyb3VuZCB0aGUgYm94IHVzaW5nIEB2YXJ7Ym94fS4KLVRoZSBkZWZhdWx0IHZhbHVl IG9mIEB2YXJ7bGluZV9zcGFjaW5nfSBpcyAwLgorU2V0IHRoZSBsaW5lIHNwYWNpbmcgaW4g cGl4ZWxzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye2xpbmVfc3BhY2luZ30gaXMgMC4K KworQGl0ZW0gdGV4dF9hbGlnbgorU2V0IHRoZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBh bGlnbm1lbnQgb2YgdGhlIHRleHQgd2l0aCByZXNwZWN0IHRvIHRoZSBib3ggYm91bmRhcmll cy4KK1RoZSB2YWx1ZSBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28gbGV0dGVycywgb25lIGZv ciB0aGUgdmVydGljYWwgYWxpZ25tZW50IChUPXRvcCwKK009bWlkZGxlLCBCPWJvdHRvbSkg YW5kIG9uZSBmb3IgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IChMPWxlZnQsIEM9Y2VudGVy LCBSPXJpZ2h0KS4KKworQGl0ZW0geV9hbGlnbgorU3BlY2lmeSB3aGF0IHRoZSBAdmFye3l9 IHZhbHVlIGlzIHJlZmVycmVkIHRvLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorQGl0ZW1pemUg QGJ1bGxldAorQGl0ZW0gQGNvZGV7dGV4dH0gdGhlIHRvcCBvZiB0aGUgaGlnaGVzdCBnbHlw aCBvZiB0aGUgZmlyc3QgdGV4dCBsaW5lIGlzIHBsYWNlZCBhdCBAdmFye3l9CitAaXRlbSBA Y29kZXtiYXNlbGluZX0gdGhlIGJhc2VsaW5lIG9mIHRoZSBmaXJzdCB0ZXh0IGxpbmUgaXMg cGxhY2VkIGF0IEB2YXJ7eX0KK0BpdGVtIEBjb2Rle2ZvbnR9IHRoZSBiYXNlbGluZSBvZiB0 aGUgZmlyc3QgdGV4dCBsaW5lIGlzIHBsYWNlZCBhdCBAdmFye3l9IHBsdXMgdGhlCisgICAg YXNjZW50IChpbiBwaXhlbHMpIGRlZmluZWQgaW4gdGhlIGZvbnQgbWV0cmljcworQGVuZCBp dGVtaXplCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye3lfYWxpZ259IGlzICJ0ZXh0IiBm b3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogQGl0ZW0gYm9yZGVydwogU2V0IHRoZSB3 aWR0aCBvZiB0aGUgYm9yZGVyIHRvIGJlIGRyYXduIGFyb3VuZCB0aGUgdGV4dCB1c2luZyBA dmFye2JvcmRlcmNvbG9yfS4KQEAgLTEyMDcwLDcgKzEyMTAyLDYgQEAgVGhlIGRlZmF1bHQg dmFsdWUgb2YgQHZhcntib3JkZXJ3fSBpcyAwLgogQGl0ZW0gYm9yZGVyY29sb3IKIFNldCB0 aGUgY29sb3IgdG8gYmUgdXNlZCBmb3IgZHJhd2luZyBib3JkZXIgYXJvdW5kIHRleHQuIEZv ciB0aGUgc3ludGF4IG9mIHRoaXMKIG9wdGlvbiwgY2hlY2sgdGhlIEByZWZ7Y29sb3Igc3lu dGF4LCwiQ29sb3IiIHNlY3Rpb24gaW4gdGhlIGZmbXBlZy11dGlscyBtYW51YWwsZmZtcGVn LXV0aWxzfS4KLQogVGhlIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntib3JkZXJjb2xvcn0gaXMg ImJsYWNrIi4KIAogQGl0ZW0gZXhwYW5zaW9uCkBAIC0xMjE2OCwxMCArMTIxOTksNiBAQCB2 YWx1ZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBib3RoIGlzICIwIi4KIFRoZSBzdGFydGlu ZyBmcmFtZSBudW1iZXIgZm9yIHRoZSBuL2ZyYW1lX251bSB2YXJpYWJsZS4gVGhlIGRlZmF1 bHQgdmFsdWUKIGlzICIwIi4KIAotQGl0ZW0gdGFic2l6ZQotVGhlIHNpemUgaW4gbnVtYmVy IG9mIHNwYWNlcyB0byB1c2UgZm9yIHJlbmRlcmluZyB0aGUgdGFiLgotRGVmYXVsdCB2YWx1 ZSBpcyA0LgotCiBAaXRlbSB0aW1lY29kZQogU2V0IHRoZSBpbml0aWFsIHRpbWVjb2RlIHJl cHJlc2VudGF0aW9uIGluICJoaDptbTpzc1s6Oy5dZmYiCiBmb3JtYXQuIEl0IGNhbiBiZSB1 c2VkIHdpdGggb3Igd2l0aG91dCB0ZXh0IHBhcmFtZXRlci4gQHZhcnt0aW1lY29kZV9yYXRl fQpAQCAtMTIyNjksNiArMTIyOTYsMTggQEAgY29udGFpbmVkIGluIHRoZSByZW5kZXJlZCB0 ZXh0LCBpdCBpcyBlcXVpdmFsZW50IHRvIEB2YXJ7YXNjZW50fSAtCiBtYXhpbXVtIGdseXBo IHdpZHRoLCB0aGF0IGlzIHRoZSBtYXhpbXVtIHdpZHRoIGZvciBhbGwgdGhlIGdseXBocwog Y29udGFpbmVkIGluIHRoZSByZW5kZXJlZCB0ZXh0CiAKK0BpdGVtIGZvbnRfYQordGhlIGFz Y2VudCBzaXplIGRlZmluZWQgaW4gdGhlIGZvbnQgbWV0cmljcworCitAaXRlbSBmb250X2QK K3RoZSBkZXNjZW50IHNpemUgZGVmaW5lZCBpbiB0aGUgZm9udCBtZXRyaWNzCisKK0BpdGVt IHRvcF9hCit0aGUgbWF4aW11bSBhc2NlbmRlciBvZiB0aGUgZ2x5cGhzIG9mIHRoZSBmaXJz dCB0ZXh0IGxpbmUKKworQGl0ZW0gYm90dG9tX2QKK3RoZSBtYXhpbXVtIGRlc2NlbmRlciBv ZiB0aGUgZ2x5cGhzIG9mIHRoZSBsYXN0IHRleHQgbGluZQorCiBAaXRlbSBuCiB0aGUgbnVt YmVyIG9mIGlucHV0IGZyYW1lLCBzdGFydGluZyBmcm9tIDAKIApAQCAtMTI0MzMsMTEgKzEy NDcyLDM0IEBAIEZ1bGwgZmlsdGVyIGludm9jYXRpb24gd2l0aCBzZW5kY21kIHdvdWxkIGxv b2sgbGlrZSB0aGlzOgogQGV4YW1wbGUKIHNlbmRjbWQ9Yz0nNTYuMCBkcmF3dGV4dCByZWlu aXQgZm9udHNpemU9NTZcOmZvbnRjb2xvcj1ncmVlblw6dGV4dD1IZWxsb1xcIFdvcmxkJwog QGVuZCBleGFtcGxlCi1AZW5kIHRhYmxlCiAKIElmIHRoZSBlbnRpcmUgYXJndW1lbnQgY2Fu J3QgYmUgcGFyc2VkIG9yIGFwcGxpZWQgYXMgdmFsaWQgdmFsdWVzIHRoZW4gdGhlIGZpbHRl ciB3aWxsCiBjb250aW51ZSB3aXRoIGl0cyBleGlzdGluZyBwYXJhbWV0ZXJzLgogCitAZW5k IHRhYmxlCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQgYXMg QHJlZntjb21tYW5kc306CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIHgKK0BpdGVtIHkK K0BpdGVtIGFscGhhCitAaXRlbSBmb250c2l6ZQorQGl0ZW0gZm9udGNvbG9yCitAaXRlbSBi b3hjb2xvcgorQGl0ZW0gYm9yZGVyY29sb3IKK0BpdGVtIHNoYWRvd2NvbG9yCitAaXRlbSBi b3gKK0BpdGVtIGJveHcKK0BpdGVtIGJveGgKK0BpdGVtIGJveGJvcmRlcncKK0BpdGVtIGxp bmVfc3BhY2luZworQGl0ZW0gdGV4dF9hbGlnbgorQGl0ZW0gc2hhZG93eAorQGl0ZW0gc2hh ZG93eQorQGl0ZW0gYm9yZGVydworQGVuZCBpdGVtaXplCisKIEBzdWJzZWN0aW9uIEV4YW1w bGVzCiAKIEBpdGVtaXplCkBAIC0xMjU1OSw2ICsxMjYyMSw5IEBAIEZvciBtb3JlIGluZm9y bWF0aW9uIGFib3V0IGZvbnRjb25maWcsIGNoZWNrOgogRm9yIG1vcmUgaW5mb3JtYXRpb24g YWJvdXQgbGliZnJpYmlkaSwgY2hlY2s6CiBAdXJse2h0dHA6Ly9mcmliaWRpLm9yZy99Lgog CitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsaWJoYXJmYnV6eiwgY2hlY2s6CitAdXJs e2h0dHBzOi8vZ2l0aHViLmNvbS9oYXJmYnV6ei9oYXJmYnV6en0uCisKIEBzZWN0aW9uIGVk Z2VkZXRlY3QKIAogRGV0ZWN0IGFuZCBkcmF3IGVkZ2VzLiBUaGUgZmlsdGVyIHVzZXMgdGhl IENhbm55IEVkZ2UgRGV0ZWN0aW9uIGFsZ29yaXRobS4KZGlmZiAtLWdpdCBhL2xpYmF2Zmls dGVyL3ZmX2RyYXd0ZXh0LmMgYi9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jCmluZGV4IDUw MDEyYmIyNTguLjQzZGQzOGFlOGQgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0 ZXh0LmMKKysrIGIvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYwpAQCAtMSw0ICsxLDUgQEAK IC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgRnJhbmNlc2NvIENhcnVzaQogICogQ29weXJp Z2h0IChjKSAyMDExIFN0ZWZhbm8gU2FiYXRpbmkKICAqIENvcHlyaWdodCAoYykgMjAxMCBT Lk4uIEhlbWFudGggTWVlbmFrc2hpc3VuZGFyYW0KICAqIENvcHlyaWdodCAoYykgMjAwMyBH dXN0YXZvIFN2ZXJ6dXQgQmFyYmllcmkgPGdzYmFyYmllcmlAeWFob28uY29tLmJyPgpAQCAt MjAsNiArMjEsMjYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKICAqLwogCisvKgor ICogQ2hhbmdlbG9nIC0gMjAyMworICoKKyAqIC0gVGhpcyBmaWx0ZXIgbm93IGRlcGVuZHMg b24gbGliaGFyZmJ1enogZm9yIHRleHQgc2hhcGluZy4KKyAqIC0gR2x5cGhzIHBvc2l0aW9u IGlzIG5vdyBhY2N1cmF0ZSB0byAxLzQgcGl4ZWwgaW4gYm90aCBkaXJlY3Rpb25zCisgKiAt IFRoZSBzaXplIG9mIHRoZSBiYWNrZ3JvdW5kIGJveCBjYW4gbm93IGJlIGZvcmNlZCB3aXRo IHRoZSBib3h3CisgKiAgIGFuZCBib3hoIHBhcmFtZXRlcnMKKyAqIC0gVGV4dCBjYW4gYmUg YWxpZ25lZCBob3Jpem9udGFsbHkgKHRvcCwgbWlkZGxlLCBib3R0b20pIGFuZCB2ZXJ0aWNh bGx5CisgKiAgIChsZWZ0LCBjZW50ZXIsIHJpZ2h0KSByZWxhdGl2ZSB0byB0aGUgYmFja2dy b3VuZCBib3gKKyAqIC0gVGhlIGRlZmF1bHQgbGluZSBoZWlnaHQgaXMgbm93IHRoZSBvbmUg ZGVmaW5lZCBpbiB0aGUgZm9udAorICogLSBUaGUgbmV3IHlfYWxpZ24gcGFyYW1ldGVyIHNw ZWNpZmllcyBpZiB0aGUgdXNlciBwcm92aWRlZCB5IHZhbHVlIGlzCisgKiAgIHJlZmVycmVk IHRvIHRoZSB0b3Agb2YgdGhlIHRleHQsIHRvIHRoZSBmb250IGJhc2VsaW5lIG9yIHRvIHRo ZQorICogICB0b3Agb2YgdGhlIGZvbnQuCisgKiAtIFRoZSBib3hib3JkZXJ3IHBhcmFtZXRl ciBjYW4gbm93IGNvbnRhaW4gYSBkaWZmZXJlbnQgdmFsdWUgZm9yIGVhY2ggYm9yZGVyCisg KiAgIChlLmcuIGJveGJvcmRlcnc9dG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KQorICogLSBNYW55 IGZpbHRlciBwYXJhbWV0ZXJzIGFyZSBub3cgc3VwcG9ydGVkIGFzIGNvbW1hbmRzLgorICog LSBUaGUgZm9sbG93aW5nIG5ldyB2YXJpYWJsZXMgY2FuIGJlIHVzZWQgaW4gdGhlIHggYW5k IHkgZXhwcmVzc2lvbnM6CisgKiAgIGZvbnRfYSwgZm9udF9kLCB0b3BfYSwgYm90dG9tX2QK KyAqLworCiAvKioKICAqIEBmaWxlCiAgKiBkcmF3dGV4dCBmaWx0ZXIsIGJhc2VkIG9uIHRo ZSBvcmlnaW5hbCB2aG9vay9kcmF3dGV4dC5jCkBAIC03MiwxNiArOTMsMjYgQEAKICNpbmNs dWRlIEZUX0dMWVBIX0gKICNpbmNsdWRlIEZUX1NUUk9LRVJfSAogCisjaW5jbHVkZSA8aGIu aD4KKyNpbmNsdWRlIDxoYi1mdC5oPgorCisvLyBDZWlsaW5nIG9wZXJhdGlvbiBmb3IgcG9z aXRpdmUgaW50ZWdlcnMgZGl2aXNpb24KKyNkZWZpbmUgUE9TX0NFSUwoeCwgeSkgKCh4KS8o eSkgKyAoKHgpJSh5KSAhPSAwKSkKKwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZhcl9u YW1lc1tdID0gewogICAgICJkYXIiLAogICAgICJoc3ViIiwgInZzdWIiLAotICAgICJsaW5l X2giLCAibGgiLCAgICAgICAgICAgLy8vPCBsaW5lIGhlaWdodCwgc2FtZSBhcyBtYXhfZ2x5 cGhfaAorICAgICJsaW5lX2giLCAibGgiLCAgICAgICAgICAgLy8vPCBsaW5lIGhlaWdodAog ICAgICJtYWluX2giLCAiaCIsICJIIiwgICAgICAgLy8vPCBoZWlnaHQgb2YgdGhlIGlucHV0 IHZpZGVvCiAgICAgIm1haW5fdyIsICJ3IiwgIlciLCAgICAgICAvLy88IHdpZHRoICBvZiB0 aGUgaW5wdXQgdmlkZW8KLSAgICAibWF4X2dseXBoX2EiLCAiYXNjZW50IiwgIC8vLzwgbWF4 IGdseXBoIGFzY2VudAotICAgICJtYXhfZ2x5cGhfZCIsICJkZXNjZW50IiwgLy8vPCBtaW4g Z2x5cGggZGVzY2VudAorICAgICJtYXhfZ2x5cGhfYSIsICJhc2NlbnQiLCAgLy8vPCBtYXgg Z2x5cGggYXNjZW5kZXIKKyAgICAibWF4X2dseXBoX2QiLCAiZGVzY2VudCIsIC8vLzwgbWlu IGdseXBoIGRlc2NlbmRlcgogICAgICJtYXhfZ2x5cGhfaCIsICAgICAgICAgICAgLy8vPCBt YXggZ2x5cGggaGVpZ2h0CiAgICAgIm1heF9nbHlwaF93IiwgICAgICAgICAgICAvLy88IG1h eCBnbHlwaCB3aWR0aAorICAgICJmb250X2EiLCAgICAgICAgICAgICAgICAgLy8vPCBmb250 LWRlZmluZWQgYXNjZW50CisgICAgImZvbnRfZCIsICAgICAgICAgICAgICAgICAvLy88IGZv bnQtZGVmaW5lZCBkZXNjZW50CisgICAgInRvcF9hIiwgICAgICAgICAgICAgICAgICAvLy88 IG1heCBnbHlwaCBhc2NlbmRlciBvZiB0aGUgdG9wIGxpbmUKKyAgICAiYm90dG9tX2QiLCAg ICAgICAgICAgICAgIC8vLzwgbWF4IGdseXBoIGRlc2NlbmRlciBvZiB0aGUgYm90dG9tIGxp bmUKICAgICAibiIsICAgICAgICAgICAgICAgICAgICAgIC8vLzwgbnVtYmVyIG9mIGZyYW1l CiAgICAgInNhciIsCiAgICAgInQiLCAgICAgICAgICAgICAgICAgICAgICAvLy88IHRpbWVz dGFtcCBleHByZXNzZWQgaW4gc2Vjb25kcwpAQCAtMTI1LDYgKzE1NiwxMCBAQCBlbnVtIHZh cl9uYW1lIHsKICAgICBWQVJfTUFYX0dMWVBIX0QsIFZBUl9ERVNDRU5ULAogICAgIFZBUl9N QVhfR0xZUEhfSCwKICAgICBWQVJfTUFYX0dMWVBIX1csCisgICAgVkFSX0ZPTlRfQSwKKyAg ICBWQVJfRk9OVF9ELAorICAgIFZBUl9UT1BfQSwKKyAgICBWQVJfQk9UVE9NX0QsCiAgICAg VkFSX04sCiAgICAgVkFSX1NBUiwKICAgICBWQVJfVCwKQEAgLTE0OCwxMiArMTgzLDg0IEBA IGVudW0gZXhwYW5zaW9uX21vZGUgewogICAgIEVYUF9TVFJGVElNRSwKIH07CiAKK2VudW0g eV9hbGlnbm1lbnQgeworICAgIFlBX1RFWFQsCisgICAgWUFfQkFTRUxJTkUsCisgICAgWUFf Rk9OVCwKK307CisKK3R5cGVkZWYgc3RydWN0IEhhcmZidXp6RGF0YSB7CisgICAgaGJfYnVm ZmVyX3QqIGJ1ZjsKKyAgICBoYl9mb250X3QqIGZvbnQ7CisgICAgdW5zaWduZWQgaW50IGds eXBoX2NvdW50OworICAgIGhiX2dseXBoX2luZm9fdCogZ2x5cGhfaW5mbzsKKyAgICBoYl9n bHlwaF9wb3NpdGlvbl90KiBnbHlwaF9wb3M7Cit9IEhhcmZidXp6RGF0YTsKKworLyoqIElu Zm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGdseXBoIGluIGEgdGV4dCBsaW5lICovCit0eXBl ZGVmIHN0cnVjdCBHbHlwaEluZm8geworICAgIHVpbnQzMl90IGNvZGU7ICAgICAgICAgICAg ICAgICAgLy8vPCB0aGUgZ2x5cGggY29kZSBwb2ludAorICAgIGludCB4OyAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCB0aGUgeCBwb3NpdGlvbiBvZiB0aGUgZ2x5cGgKKyAgICBp bnQgeTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgdGhlIHkgcG9zaXRpb24gb2Yg dGhlIGdseXBoCisgICAgaW50IHNoaWZ0X3g2NDsgICAgICAgICAgICAgICAgICAvLy88IHRo ZSBob3Jpem9udGFsIHNoaWZ0IG9mIHRoZSBnbHlwaCBpbiAyNi42IHVuaXRzCisgICAgaW50 IHNoaWZ0X3k2NDsgICAgICAgICAgICAgICAgICAvLy88IHRoZSB2ZXJ0aWNhbCBzaGlmdCBv ZiB0aGUgZ2x5cGggaW4gMjYuNiB1bml0cworfSBHbHlwaEluZm87CisKKy8qKiBJbmZvcm1h dGlvbiBhYm91dCBhIHNpbmdsZSBsaW5lIG9mIHRleHQgKi8KK3R5cGVkZWYgc3RydWN0IFRl eHRMaW5lIHsKKyAgICBpbnQgb2Zmc2V0X2xlZnQ2NDsgICAgICAgICAgICAgIC8vLzwgb2Zm c2V0IGJldHdlZW4gdGhlIG9yaWdpbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLyAgdGhlIGxlZnRtb3N0IHBpeGVsIG9mIHRoZSBmaXJzdCBnbHlwaAor ICAgIGludCBvZmZzZXRfcmlnaHQ2NDsgICAgICAgICAgICAgLy8vPCBtYXhpbXVtIG9mZnNl dCBiZXR3ZWVuIHRoZSBvcmlnaW4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLy8gIHRoZSByaWdodG1vc3QgcGl4ZWwgb2YgdGhlIGxhc3QgZ2x5cGgKKyAg ICBpbnQgd2lkdGg2NDsgICAgICAgICAgICAgICAgICAgIC8vLzwgd2lkdGggb2YgdGhlIGxp bmUKKyAgICBIYXJmYnV6ekRhdGEgaGJfZGF0YTsgICAgICAgICAgIC8vLzwgbGliaGFyZmJ1 enogZGF0YSBvZiB0aGlzIHRleHQgbGluZQorICAgIEdseXBoSW5mbyogZ2x5cGhzOyAgICAg ICAgICAgICAgLy8vPCBhcnJheSBvZiBnbHlwaHMgaW4gdGhpcyB0ZXh0IGxpbmUKKyAgICBp bnQgY2x1c3Rlcl9vZmZzZXQ7ICAgICAgICAgICAgIC8vLzwgdGhlIG9mZnNldCBhdCB3aGlj aCB0aGlzIGxpbmUgYmVnaW5zCit9IFRleHRMaW5lOworCisvKiogQSBnbHlwaCBhcyBsb2Fk ZWQgYW5kIHJlbmRlcmVkIHVzaW5nIGxpYmZyZWV0eXBlICovCit0eXBlZGVmIHN0cnVjdCBH bHlwaCB7CisgICAgRlRfR2x5cGggZ2x5cGg7CisgICAgRlRfR2x5cGggYm9yZGVyX2dseXBo OworICAgIHVpbnQzMl90IGNvZGU7CisgICAgdW5zaWduZWQgaW50IGZvbnRzaXplOworICAg IC8qKiBHbHlwaCBiaXRtYXBzIHdpdGggMS80IHBpeGVsIHByZWNpc2lvbiBpbiBib3RoIGRp cmVjdGlvbnMgKi8KKyAgICBGVF9CaXRtYXBHbHlwaCBiZ2x5cGhbMTZdOworICAgIC8qKiBP dXRsaW5lZCBnbHlwaCBiaXRtYXBzIHdpdGggMS80IHBpeGVsIHByZWNpc2lvbiBpbiBib3Ro IGRpcmVjdGlvbnMgKi8KKyAgICBGVF9CaXRtYXBHbHlwaCBib3JkZXJfYmdseXBoWzE2XTsK KyAgICBGVF9CQm94IGJib3g7Cit9IEdseXBoOworCisvKiogR2xvYmFsIHRleHQgbWV0cmlj cyAqLwordHlwZWRlZiBzdHJ1Y3QgVGV4dE1ldHJpY3MgeworICAgIGludCBvZmZzZXRfdG9w NjQ7ICAgICAgICAgICAgICAgLy8vPCBhc2NlbmRlciBhbW91bnQgb2YgdGhlIGZpcnN0IGxp bmUgKGluIDI2LjYgdW5pdHMpCisgICAgaW50IG9mZnNldF9ib3R0b202NDsgICAgICAgICAg ICAvLy88IGRlc2NlbmRlciBhbW91bnQgb2YgdGhlIGxhc3QgbGluZSAoaW4gMjYuNiB1bml0 cykKKyAgICBpbnQgb2Zmc2V0X2xlZnQ2NDsgICAgICAgICAgICAgIC8vLzwgbWF4aW11bSBv ZmZzZXQgYmV0d2VlbiB0aGUgb3JpZ2luIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8vICB0aGUgbGVmdG1vc3QgcGl4ZWwgb2YgdGhlIGZpcnN0IGdseXBo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8gIG9mIGVhY2ggbGlu ZSAoaW4gMjYuNiB1bml0cykKKyAgICBpbnQgb2Zmc2V0X3JpZ2h0NjQ7ICAgICAgICAgICAg IC8vLzwgbWF4aW11bSBvZmZzZXQgYmV0d2VlbiB0aGUgb3JpZ2luIGFuZAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vICB0aGUgcmlnaHRtb3N0IHBpeGVsIG9m IHRoZSBsYXN0IGdseXBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly8gIG9mIGVhY2ggbGluZSAoaW4gMjYuNiB1bml0cykKKyAgICBpbnQgbGluZV9oZWlnaHQ2 NDsgICAgICAgICAgICAgIC8vLzwgdGhlIGZvbnQtZGVmaW5lZCBsaW5lIGhlaWdodAorICAg IGludCB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgLy8vPCB3aWR0aCBvZiB0aGUgbG9u Z2VzdCBsaW5lIC0gY2VpbCh3aWR0aDY0LzY0KQorICAgIGludCBoZWlnaHQ7ICAgICAgICAg ICAgICAgICAgICAgLy8vPCB0b3RhbCBoZWlnaHQgb2YgdGhlIHRleHQgLSBjZWlsKGhlaWdo dDY0LzY0KQorCisgICAgaW50IG1pbl95NjQ7ICAgICAgICAgICAgICAgICAgICAvLy88IG1p bmltdW0gdmFsdWUgb2YgYmJveC55TWluIGFtb25nIGdseXBocyAoaW4gMjYuNiB1bml0cykK KyAgICBpbnQgbWF4X3k2NDsgICAgICAgICAgICAgICAgICAgIC8vLzwgbWF4aW11bSB2YWx1 ZSBvZiBiYm94LnlNYXggYW1vbmcgZ2x5cGhzIChpbiAyNi42IHVuaXRzKQorICAgIGludCBt aW5feDY0OyAgICAgICAgICAgICAgICAgICAgLy8vPCBtaW5pbXVtIHZhbHVlIG9mIGJib3gu eE1pbiBhbW9uZyBnbHlwaHMgKGluIDI2LjYgdW5pdHMpCisgICAgaW50IG1heF94NjQ7ICAg ICAgICAgICAgICAgICAgICAvLy88IG1heGltdW0gdmFsdWUgb2YgYmJveC54TWF4IGFtb25n IGdseXBocyAoaW4gMjYuNiB1bml0cykKKworICAgIC8vIFBvc2l0aW9uIG9mIHRoZSBiYWNr Z3JvdW5kIGJveCAod2l0aG91dCBib3JkZXJzKQorICAgIGludCByZWN0X3g7ICAgICAgICAg ICAgICAgICAgICAgLy8vPCB4IHBvc2l0aW9uIG9mIHRoZSBib3gKKyAgICBpbnQgcmVjdF95 OyAgICAgICAgICAgICAgICAgICAgIC8vLzwgeSBwb3NpdGlvbiBvZiB0aGUgYm94Cit9IFRl eHRNZXRyaWNzOworCiB0eXBlZGVmIHN0cnVjdCBEcmF3VGV4dENvbnRleHQgewogICAgIGNv bnN0IEFWQ2xhc3MgKmNsYXNzOwogICAgIGludCBleHBfbW9kZTsgICAgICAgICAgICAgICAg ICAgLy8vPCBleHBhbnNpb24gbW9kZSB0byB1c2UgZm9yIHRoZSB0ZXh0CiAgICAgaW50IHJl aW5pdDsgICAgICAgICAgICAgICAgICAgICAvLy88IHRlbGxzIGlmIHRoZSBmaWx0ZXIgaXMg YmVpbmcgcmVpbml0ZWQKICNpZiBDT05GSUdfTElCRk9OVENPTkZJRwotICAgIHVpbnQ4X3Qg KmZvbnQ7ICAgICAgICAgICAgICAvLy88IGZvbnQgdG8gYmUgdXNlZAorICAgIHVpbnQ4X3Qg KmZvbnQ7ICAgICAgICAgICAgICAgICAgLy8vPCBmb250IHRvIGJlIHVzZWQKICNlbmRpZgog ICAgIHVpbnQ4X3QgKmZvbnRmaWxlOyAgICAgICAgICAgICAgLy8vPCBmb250IHRvIGJlIHVz ZWQKICAgICB1aW50OF90ICp0ZXh0OyAgICAgICAgICAgICAgICAgIC8vLzwgdGV4dCB0byBi ZSBkcmF3bgpAQCAtMTYxLDExICsyNjgsOSBAQCB0eXBlZGVmIHN0cnVjdCBEcmF3VGV4dENv bnRleHQgewogICAgIHVpbnQ4X3QgKmZvbnRjb2xvcl9leHByOyAgICAgICAgLy8vPCBmb250 Y29sb3IgZXhwcmVzc2lvbiB0byBldmFsdWF0ZQogICAgIEFWQlByaW50IGV4cGFuZGVkX2Zv bnRjb2xvcjsgICAgLy8vPCB1c2VkIHRvIGNvbnRhaW4gdGhlIGV4cGFuZGVkIGZvbnRjb2xv ciBzcGVjCiAgICAgaW50IGZ0X2xvYWRfZmxhZ3M7ICAgICAgICAgICAgICAvLy88IGZsYWdz IHVzZWQgZm9yIGxvYWRpbmcgZm9udHMsIHNlZSBGVF9MT0FEXyoKLSAgICBGVF9WZWN0b3Ig KnBvc2l0aW9uczsgICAgICAgICAgIC8vLzwgcG9zaXRpb25zIGZvciBlYWNoIGVsZW1lbnQg aW4gdGhlIHRleHQKLSAgICBzaXplX3QgbmJfcG9zaXRpb25zOyAgICAgICAgICAgIC8vLzwg bnVtYmVyIG9mIGVsZW1lbnRzIG9mIHBvc2l0aW9ucyBhcnJheQogICAgIGNoYXIgKnRleHRm aWxlOyAgICAgICAgICAgICAgICAgLy8vPCBmaWxlIHdpdGggdGV4dCB0byBiZSBkcmF3bgot ICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB4IHBvc2l0aW9uIHRv IHN0YXJ0IGRyYXdpbmcgdGV4dAotICAgIGludCB5OyAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8vPCB5IHBvc2l0aW9uIHRvIHN0YXJ0IGRyYXdpbmcgdGV4dAorICAgIGRvdWJsZSB4 OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB4IHBvc2l0aW9uIHRvIHN0YXJ0IGRyYXdp bmcgdGV4dAorICAgIGRvdWJsZSB5OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB5IHBv c2l0aW9uIHRvIHN0YXJ0IGRyYXdpbmcgdGV4dAogICAgIGludCBtYXhfZ2x5cGhfdzsgICAg ICAgICAgICAgICAgLy8vPCBtYXggZ2x5cGggd2lkdGgKICAgICBpbnQgbWF4X2dseXBoX2g7 ICAgICAgICAgICAgICAgIC8vLzwgbWF4IGdseXBoIGhlaWdodAogICAgIGludCBzaGFkb3d4 LCBzaGFkb3d5OwpAQCAtMTc3LDggKzI4MiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBEcmF3VGV4 dENvbnRleHQgewogCiAgICAgaW50IGxpbmVfc3BhY2luZzsgICAgICAgICAgICAgICAvLy88 IGxpbmVzIHNwYWNpbmcgaW4gcGl4ZWxzCiAgICAgc2hvcnQgaW50IGRyYXdfYm94OyAgICAg ICAgICAgICAvLy88IGRyYXcgYm94IGFyb3VuZCB0ZXh0IC0gdHJ1ZSBvciBmYWxzZQotICAg IGludCBib3hib3JkZXJ3OyAgICAgICAgICAgICAgICAgLy8vPCBib3ggYm9yZGVyIHdpZHRo Ci0gICAgaW50IHVzZV9rZXJuaW5nOyAgICAgICAgICAgICAgICAvLy88IGZvbnQga2Vybmlu ZyBpcyB1c2VkIC0gdHJ1ZS9mYWxzZQorICAgIGNoYXIqIGJveGJvcmRlcnc7ICAgICAgICAg ICAgICAgLy8vPCBib3ggYm9yZGVyIHdpZHRoIChwYWRkaW5nKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vICBhbGxvd2VkIGZvcm1hdHM6ICJhbGwiLCAidmVy dHxvcml6IiwgInRvcHxyaWdodHxib3R0b218bGVmdCIKKyAgICBpbnQgYmJfdG9wOyAgICAg ICAgICAgICAgICAgICAgIC8vLzwgdGhlIHNpemUgb2YgdGhlIHRvcCBib3ggYm9yZGVyCisg ICAgaW50IGJiX3JpZ2h0OyAgICAgICAgICAgICAgICAgICAvLy88IHRoZSBzaXplIG9mIHRo ZSByaWdodCBib3ggYm9yZGVyCisgICAgaW50IGJiX2JvdHRvbTsgICAgICAgICAgICAgICAg ICAvLy88IHRoZSBzaXplIG9mIHRoZSBib3R0b20gYm94IGJvcmRlcgorICAgIGludCBiYl9s ZWZ0OyAgICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgc2l6ZSBvZiB0aGUgbGVmdCBib3gg Ym9yZGVyCisgICAgaW50IGJveF93aWR0aDsgICAgICAgICAgICAgICAgICAvLy88IHRoZSB3 aWR0aCBvZiBib3gKKyAgICBpbnQgYm94X2hlaWdodDsgICAgICAgICAgICAgICAgIC8vLzwg dGhlIGhlaWdodCBvZiBib3gKICAgICBpbnQgdGFic2l6ZTsgICAgICAgICAgICAgICAgICAg IC8vLzwgdGFiIHNpemUKICAgICBpbnQgZml4X2JvdW5kczsgICAgICAgICAgICAgICAgIC8v LzwgZG8gd2UgbGV0IGl0IGdvIG91dCBvZiBmcmFtZSBib3VuZHMgLSB0L2YKIApAQCAtMjEz LDMxICszMjQsNDYgQEAgdHlwZWRlZiBzdHJ1Y3QgRHJhd1RleHRDb250ZXh0IHsKICAgICBp bnQgdGV4dF9zaGFwaW5nOyAgICAgICAgICAgICAgIC8vLzwgMSB0byBzaGFwZSB0aGUgdGV4 dCBiZWZvcmUgZHJhd2luZyBpdAogI2VuZGlmCiAgICAgQVZEaWN0aW9uYXJ5ICptZXRhZGF0 YTsKKworICAgIGludCBib3h3OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgdmFs dWUgb2YgdGhlIGJveHcgcGFyYW1ldGVyCisgICAgaW50IGJveGg7ICAgICAgICAgICAgICAg ICAgICAgICAvLy88IHRoZSB2YWx1ZSBvZiB0aGUgYm94aCBwYXJhbWV0ZXIKKyAgICB1aW50 OF90ICp0ZXh0X2FsaWduOyAgICAgICAgICAgIC8vLzwgdGhlIGhvcml6b250YWwgYW5kIHZl cnRpY2FsIHRleHQgYWxpZ25tZW50CisgICAgaW50IHlfYWxpZ247ICAgICAgICAgICAgICAg ICAgICAvLy88IHRoZSB2YWx1ZSBvZiB0aGUgeV9hbGlnbiBwYXJhbWV0ZXIKKworICAgIFRl eHRMaW5lICpsaW5lczsgICAgICAgICAgICAgICAgLy8vPCBjb21wdXRlZCBpbmZvcm1hdGlv biBhYm91dCB0ZXh0IGxpbmVzCisgICAgaW50IGxpbmVfY291bnQ7ICAgICAgICAgICAgICAg ICAvLy88IHRoZSBudW1iZXIgb2YgdGV4dCBsaW5lcworICAgIHVpbnQzMl90ICp0YWJfY2x1 c3RlcnM7ICAgICAgICAgLy8vPCB0aGUgcG9zaXRpb24gb2YgdGFiIGNoYXJhY3RlcnMgaW4g dGhlIHRleHQKKyAgICBpbnQgdGFiX2NvdW50OyAgICAgICAgICAgICAgICAgIC8vLzwgdGhl IG51bWJlciBvZiB0YWIgY2hhcmFjdGVycworICAgIGludCBibGFua19hZHZhbmNlNjQ7ICAg ICAgICAgICAgLy8vPCB0aGUgc2l6ZSBvZiB0aGUgc3BhY2UgY2hhcmFjdGVyCiB9IERyYXdU ZXh0Q29udGV4dDsKIAogI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoRHJhd1RleHRDb250 ZXh0LCB4KQogI2RlZmluZSBGTEFHUyBBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU18QVZf T1BUX0ZMQUdfVklERU9fUEFSQU0KKyNkZWZpbmUgVEZMQUdTIEFWX09QVF9GTEFHX0ZJTFRF UklOR19QQVJBTXxBVl9PUFRfRkxBR19WSURFT19QQVJBTXxBVl9PUFRfRkxBR19SVU5USU1F X1BBUkFNCiAKIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBkcmF3dGV4dF9vcHRpb25zW109IHsK LSAgICB7ImZvbnRmaWxlIiwgICAgInNldCBmb250IGZpbGUiLCAgICAgICAgT0ZGU0VUKGZv bnRmaWxlKSwgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sICAw LCAwLCBGTEFHU30sCi0gICAgeyJ0ZXh0IiwgICAgICAgICJzZXQgdGV4dCIsICAgICAgICAg ICAgIE9GRlNFVCh0ZXh0KSwgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsu c3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAotICAgIHsidGV4dGZpbGUiLCAgICAic2V0IHRl eHQgZmlsZSIsICAgICAgICBPRkZTRVQodGV4dGZpbGUpLCAgICAgICAgICAgQVZfT1BUX1RZ UEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAsIEZMQUdTfSwKLSAgICB7ImZvbnRjb2xv ciIsICAgInNldCBmb3JlZ3JvdW5kIGNvbG9yIiwgT0ZGU0VUKGZvbnRjb2xvci5yZ2JhKSwg ICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAsIDAsIEZMQUdTfSwK KyAgICB7ImZvbnRmaWxlIiwgICAgICAgInNldCBmb250IGZpbGUiLCAgICAgICAgIE9GRlNF VChmb250ZmlsZSksICAgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9 LCAgMCwgMCwgRkxBR1N9LAorICAgIHsidGV4dCIsICAgICAgICAgICAic2V0IHRleHQiLCAg ICAgICAgICAgICAgT0ZGU0VUKHRleHQpLCAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NU UklORywgey5zdHI9TlVMTH0sICAwLCAwLCBURkxBR1N9LAorICAgIHsidGV4dGZpbGUiLCAg ICAgICAic2V0IHRleHQgZmlsZSIsICAgICAgICAgT0ZGU0VUKHRleHRmaWxlKSwgICAgICAg ICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCisg ICAgeyJmb250Y29sb3IiLCAgICAgICJzZXQgZm9yZWdyb3VuZCBjb2xvciIsICBPRkZTRVQo Zm9udGNvbG9yLnJnYmEpLCAgICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2si fSwgMCwgMCwgVEZMQUdTfSwKICAgICB7ImZvbnRjb2xvcl9leHByIiwgInNldCBmb3JlZ3Jv dW5kIGNvbG9yIGV4cHJlc3Npb24iLCBPRkZTRVQoZm9udGNvbG9yX2V4cHIpLCBBVl9PUFRf VFlQRV9TVFJJTkcsIHsuc3RyPSIifSwgMCwgMCwgRkxBR1N9LAotICAgIHsiYm94Y29sb3Ii LCAgICAic2V0IGJveCBjb2xvciIsICAgICAgICBPRkZTRVQoYm94Y29sb3IucmdiYSksICAg ICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0id2hpdGUifSwgMCwgMCwgRkxBR1N9LAot ICAgIHsiYm9yZGVyY29sb3IiLCAic2V0IGJvcmRlciBjb2xvciIsICAgICBPRkZTRVQoYm9y ZGVyY29sb3IucmdiYSksICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2sifSwg MCwgMCwgRkxBR1N9LAotICAgIHsic2hhZG93Y29sb3IiLCAic2V0IHNoYWRvdyBjb2xvciIs ICAgICBPRkZTRVQoc2hhZG93Y29sb3IucmdiYSksICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7 LnN0cj0iYmxhY2sifSwgMCwgMCwgRkxBR1N9LAotICAgIHsiYm94IiwgICAgICAgICAic2V0 IGJveCIsICAgICAgICAgICAgICBPRkZTRVQoZHJhd19ib3gpLCAgICAgICAgICAgQVZfT1BU X1RZUEVfQk9PTCwgICB7Lmk2ND0wfSwgICAgIDAsICAgICAgICAxICAgICAgICwgRkxBR1N9 LAotICAgIHsiYm94Ym9yZGVydyIsICAic2V0IGJveCBib3JkZXIgd2lkdGgiLCBPRkZTRVQo Ym94Ym9yZGVydyksICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAg IElOVF9NSU4sICBJTlRfTUFYICwgRkxBR1N9LAotICAgIHsibGluZV9zcGFjaW5nIiwgICJz ZXQgbGluZSBzcGFjaW5nIGluIHBpeGVscyIsIE9GRlNFVChsaW5lX3NwYWNpbmcpLCAgIEFW X09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCAgSU5UX01BWCxGTEFH U30sCi0gICAgeyJmb250c2l6ZSIsICAgICJzZXQgZm9udCBzaXplIiwgICAgICAgIE9GRlNF VChmb250c2l6ZV9leHByKSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9 LCAgMCwgMCAsIEZMQUdTfSwKLSAgICB7IngiLCAgICAgICAgICAgInNldCB4IGV4cHJlc3Np b24iLCAgICAgT0ZGU0VUKHhfZXhwciksICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklO Rywgey5zdHI9IjAifSwgICAwLCAwLCBGTEFHU30sCi0gICAgeyJ5IiwgICAgICAgICAgICJz ZXQgeSBleHByZXNzaW9uIiwgICAgIE9GRlNFVCh5X2V4cHIpLCAgICAgICAgICAgICBBVl9P UFRfVFlQRV9TVFJJTkcsIHsuc3RyPSIwIn0sICAgMCwgMCwgRkxBR1N9LAotICAgIHsic2hh ZG93eCIsICAgICAic2V0IHNoYWRvdyB4IG9mZnNldCIsICBPRkZTRVQoc2hhZG93eCksICAg ICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sICBJ TlRfTUFYICwgRkxBR1N9LAotICAgIHsic2hhZG93eSIsICAgICAic2V0IHNoYWRvdyB5IG9m ZnNldCIsICBPRkZTRVQoc2hhZG93eSksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAg ICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sICBJTlRfTUFYICwgRkxBR1N9LAotICAgIHsiYm9y ZGVydyIsICAgICAic2V0IGJvcmRlciB3aWR0aCIsICAgICBPRkZTRVQoYm9yZGVydyksICAg ICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sICBJ TlRfTUFYICwgRkxBR1N9LAotICAgIHsidGFic2l6ZSIsICAgICAic2V0IHRhYiBzaXplIiwg ICAgICAgICBPRkZTRVQodGFic2l6ZSksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAg ICB7Lmk2ND00fSwgICAgIDAsICAgICAgICBJTlRfTUFYICwgRkxBR1N9LAotICAgIHsiYmFz ZXRpbWUiLCAgICAic2V0IGJhc2UgdGltZSIsICAgICAgICBPRkZTRVQoYmFzZXRpbWUpLCAg ICAgICAgICAgQVZfT1BUX1RZUEVfSU5UNjQsICB7Lmk2ND1BVl9OT1BUU19WQUxVRX0sIElO VDY0X01JTiwgSU5UNjRfTUFYICwgRkxBR1N9LAorICAgIHsiYm94Y29sb3IiLCAgICAgICAi c2V0IGJveCBjb2xvciIsICAgICAgICAgT0ZGU0VUKGJveGNvbG9yLnJnYmEpLCAgICAgIEFW X09QVF9UWVBFX0NPTE9SLCAgey5zdHI9IndoaXRlIn0sIDAsIDAsIFRGTEFHU30sCisgICAg eyJib3JkZXJjb2xvciIsICAgICJzZXQgYm9yZGVyIGNvbG9yIiwgICAgICBPRkZTRVQoYm9y ZGVyY29sb3IucmdiYSksICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2sifSwg MCwgMCwgVEZMQUdTfSwKKyAgICB7InNoYWRvd2NvbG9yIiwgICAgInNldCBzaGFkb3cgY29s b3IiLCAgICAgIE9GRlNFVChzaGFkb3djb2xvci5yZ2JhKSwgICBBVl9PUFRfVFlQRV9DT0xP UiwgIHsuc3RyPSJibGFjayJ9LCAwLCAwLCBURkxBR1N9LAorICAgIHsiYm94IiwgICAgICAg ICAgICAic2V0IGJveCIsICAgICAgICAgICAgICAgT0ZGU0VUKGRyYXdfYm94KSwgICAgICAg ICAgIEFWX09QVF9UWVBFX0JPT0wsICAgey5pNjQ9MH0sICAgICAwLCAxLCBURkxBR1N9LAor ICAgIHsiYm94Ym9yZGVydyIsICAgICAic2V0IGJveCBib3JkZXJzIHdpZHRoIiwgT0ZGU0VU KGJveGJvcmRlcncpLCAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IjAifSwg ICAwLCAwLCBURkxBR1N9LAorICAgIHsibGluZV9zcGFjaW5nIiwgICAic2V0IGxpbmUgc3Bh Y2luZyBpbiBwaXhlbHMiLCBPRkZTRVQobGluZV9zcGFjaW5nKSwgQVZfT1BUX1RZUEVfSU5U LCAgICB7Lmk2ND0tMX0sICAgIElOVF9NSU4sIElOVF9NQVgsIFRGTEFHU30sCisgICAgeyJm b250c2l6ZSIsICAgICAgICJzZXQgZm9udCBzaXplIiwgICAgICAgICBPRkZTRVQoZm9udHNp emVfZXhwciksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAs IFRGTEFHU30sCisgICAgeyJ0ZXh0X2FsaWduIiwgICAgICJzZXQgdGV4dCBhbGlnbm1lbnQi LCAgICBPRkZTRVQodGV4dF9hbGlnbiksICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7 LnN0cj0iVEwifSwgIDAsIDAsIFRGTEFHU30sCisgICAgeyJ4IiwgICAgICAgICAgICAgICJz ZXQgeCBleHByZXNzaW9uIiwgICAgICBPRkZTRVQoeF9leHByKSwgICAgICAgICAgICAgQVZf T1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAsIDAsIFRGTEFHU30sCisgICAgeyJ5 IiwgICAgICAgICAgICAgICJzZXQgeSBleHByZXNzaW9uIiwgICAgICBPRkZTRVQoeV9leHBy KSwgICAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAsIDAs IFRGTEFHU30sCisgICAgeyJib3h3IiwgICAgICAgICAgICJzZXQgYm94IHdpZHRoIiwgICAg ICAgICBPRkZTRVQoYm94dyksICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7 Lmk2ND0wfSwgICAgIDAsIElOVF9NQVgsIFRGTEFHU30sCisgICAgeyJib3hoIiwgICAgICAg ICAgICJzZXQgYm94IGhlaWdodCIsICAgICAgICBPRkZTRVQoYm94aCksICAgICAgICAgICAg ICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIDAsIElOVF9NQVgsIFRGTEFH U30sCisgICAgeyJzaGFkb3d4IiwgICAgICAgICJzZXQgc2hhZG93IHggb2Zmc2V0IiwgICBP RkZTRVQoc2hhZG93eCksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0w fSwgICAgIElOVF9NSU4sIElOVF9NQVgsIFRGTEFHU30sCisgICAgeyJzaGFkb3d5IiwgICAg ICAgICJzZXQgc2hhZG93IHkgb2Zmc2V0IiwgICBPRkZTRVQoc2hhZG93eSksICAgICAgICAg ICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sIElOVF9NQVgs IFRGTEFHU30sCisgICAgeyJib3JkZXJ3IiwgICAgICAgICJzZXQgYm9yZGVyIHdpZHRoIiwg ICAgICBPRkZTRVQoYm9yZGVydyksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7 Lmk2ND0wfSwgICAgIElOVF9NSU4sIElOVF9NQVgsIFRGTEFHU30sCisgICAgeyJ0YWJzaXpl IiwgICAgICAgICJzZXQgdGFiIHNpemUiLCAgICAgICAgICBPRkZTRVQodGFic2l6ZSksICAg ICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND00fSwgICAgIDAsIElOVF9NQVgs IFRGTEFHU30sCisgICAgeyJiYXNldGltZSIsICAgICAgICJzZXQgYmFzZSB0aW1lIiwgICAg ICAgICBPRkZTRVQoYmFzZXRpbWUpLCAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5UNjQsICB7 Lmk2ND1BVl9OT1BUU19WQUxVRX0sIElOVDY0X01JTiwgSU5UNjRfTUFYLCBGTEFHU30sCiAj aWYgQ09ORklHX0xJQkZPTlRDT05GSUcKICAgICB7ICJmb250IiwgICAgICAgICJGb250IG5h bWUiLCAgICAgICAgICAgIE9GRlNFVChmb250KSwgICAgICAgICAgICAgICBBVl9PUFRfVFlQ RV9TVFJJTkcsIHsgLnN0ciA9ICJTYW5zIiB9LCAgICAgICAgICAgLmZsYWdzID0gRkxBR1Mg fSwKICNlbmRpZgpAQCAtMjQ2LDE3ICszNzIsMjEgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9u IGRyYXd0ZXh0X29wdGlvbnNbXT0gewogICAgICAgICB7Im5vbmUiLCAgICAgInNldCBubyBl eHBhbnNpb24iLCAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKGV4cF9tb2RlKSwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0PUVYUF9OT05FfSwgICAgIDAsIDAsIEZMQUdTLCAiZXhwYW5z aW9uIn0sCiAgICAgICAgIHsibm9ybWFsIiwgICAic2V0IG5vcm1hbCBleHBhbnNpb24iLCAg ICAgICAgICAgICAgICBPRkZTRVQoZXhwX21vZGUpLCBBVl9PUFRfVFlQRV9DT05TVCwgey5p NjQ9RVhQX05PUk1BTH0sICAgMCwgMCwgRkxBR1MsICJleHBhbnNpb24ifSwKICAgICAgICAg eyJzdHJmdGltZSIsICJzZXQgc3RyZnRpbWUgZXhwYW5zaW9uIChkZXByZWNhdGVkKSIsIE9G RlNFVChleHBfbW9kZSksIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1FWFBfU1RSRlRJTUV9 LCAwLCAwLCBGTEFHUywgImV4cGFuc2lvbiJ9LAorICAgIHsieV9hbGlnbiIsICAgInNldCB0 aGUgeSBhbGlnbm1lbnQiLCAgICBPRkZTRVQoeV9hbGlnbiksIEFWX09QVF9UWVBFX0lOVCwg IHsuaTY0PVlBX1RFWFR9LCAwLCAyLCBURkxBR1MsICJ5X2FsaWduIn0sCisgICAgICAgIHsi dGV4dCIsICAgICAieSBpcyByZWZlcnJlZCB0byB0aGUgdG9wIG9mIHRoZSBmaXJzdCB0ZXh0 IGxpbmUiLCBPRkZTRVQoeV9hbGlnbiksIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1ZQV9U RVhUfSwgICAgIDAsIDAsIEZMQUdTLCAieV9hbGlnbiJ9LAorICAgICAgICB7ImJhc2VsaW5l IiwgInkgaXMgcmVmZXJyZWQgdG8gdGhlIGJhc2VsaW5lIG9mIHRoZSBmaXJzdCBsaW5lIiwg T0ZGU0VUKHlfYWxpZ24pLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9WUFfQkFTRUxJTkV9 LCAwLCAwLCBGTEFHUywgInlfYWxpZ24ifSwKKyAgICAgICAgeyJmb250IiwgICAgICJ5IGlz IHJlZmVycmVkIHRvIHRoZSBmb250IGRlZmluZWQgbGluZSBtZXRyaWNzIiwgIE9GRlNFVCh5 X2FsaWduKSwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVlBX0ZPTlR9LCAgICAgMCwgMCwg RkxBR1MsICJ5X2FsaWduIn0sCiAKICAgICB7InRpbWVjb2RlIiwgICAgICAgICJzZXQgaW5p dGlhbCB0aW1lY29kZSIsICAgICAgICAgICAgIE9GRlNFVCh0Y19vcHRfc3RyaW5nKSwgQVZf T1BUX1RZUEVfU1RSSU5HLCAgIHsuc3RyPU5VTEx9LCAwLCAwLCBGTEFHU30sCi0gICAgeyJ0 YzI0aG1heCIsICAgICAgICAic2V0IDI0IGhvdXJzIG1heCAodGltZWNvZGUgb25seSkiLCBP RkZTRVQodGMyNGhtYXgpLCAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgICB7Lmk2ND0wfSwg ICAgICAgICAgIDAsICAgICAgICAxLCBGTEFHU30sCi0gICAgeyJ0aW1lY29kZV9yYXRlIiwg ICAic2V0IHJhdGUgKHRpbWVjb2RlIG9ubHkpIiwgICAgICAgICBPRkZTRVQodGNfcmF0ZSks ICAgICAgIEFWX09QVF9UWVBFX1JBVElPTkFMLCB7LmRibD0wfSwgICAgICAgICAgIDAsICBJ TlRfTUFYLCBGTEFHU30sCi0gICAgeyJyIiwgICAgICAgICAgICAgICAic2V0IHJhdGUgKHRp bWVjb2RlIG9ubHkpIiwgICAgICAgICBPRkZTRVQodGNfcmF0ZSksICAgICAgIEFWX09QVF9U WVBFX1JBVElPTkFMLCB7LmRibD0wfSwgICAgICAgICAgIDAsICBJTlRfTUFYLCBGTEFHU30s Ci0gICAgeyJyYXRlIiwgICAgICAgICAgICAic2V0IHJhdGUgKHRpbWVjb2RlIG9ubHkpIiwg ICAgICAgICBPRkZTRVQodGNfcmF0ZSksICAgICAgIEFWX09QVF9UWVBFX1JBVElPTkFMLCB7 LmRibD0wfSwgICAgICAgICAgIDAsICBJTlRfTUFYLCBGTEFHU30sCi0gICAgeyJyZWxvYWQi LCAgICAgInJlbG9hZCB0ZXh0IGZpbGUgYXQgc3BlY2lmaWVkIGZyYW1lIGludGVydmFsIiwg T0ZGU0VUKHJlbG9hZCksICAgICBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PTB9LCAwLCBJTlRf TUFYLCBGTEFHU30sCi0gICAgeyAiYWxwaGEiLCAgICAgICAiYXBwbHkgYWxwaGEgd2hpbGUg cmVuZGVyaW5nIiwgT0ZGU0VUKGFfZXhwciksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7 IC5zdHIgPSAiMSIgICAgIH0sICAgICAgICAgIC5mbGFncyA9IEZMQUdTIH0sCi0gICAgeyJm aXhfYm91bmRzIiwgImNoZWNrIGFuZCBmaXggdGV4dCBjb29yZHMgdG8gYXZvaWQgY2xpcHBp bmciLCBPRkZTRVQoZml4X2JvdW5kcyksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9LCAw LCAxLCBGTEFHU30sCi0gICAgeyJzdGFydF9udW1iZXIiLCAic3RhcnQgZnJhbWUgbnVtYmVy IGZvciBuL2ZyYW1lX251bSB2YXJpYWJsZSIsIE9GRlNFVChzdGFydF9udW1iZXIpLCBBVl9P UFRfVFlQRV9JTlQsIHsuaTY0PTB9LCAwLCBJTlRfTUFYLCBGTEFHU30sCi0gICAgeyJ0ZXh0 X3NvdXJjZSIsICJ0aGUgc291cmNlIG9mIHRleHQiLCBPRkZTRVQodGV4dF9zb3VyY2Vfc3Ry aW5nKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgMCwgMSwgRkxBR1MgfSwK KyAgICB7InRjMjRobWF4IiwgICAgICAgICJzZXQgMjQgaG91cnMgbWF4ICh0aW1lY29kZSBv bmx5KSIsIE9GRlNFVCh0YzI0aG1heCksICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgICAgIHsu aTY0PTB9LCAgICAwLCAxLCBGTEFHU30sCisgICAgeyJ0aW1lY29kZV9yYXRlIiwgICAic2V0 IHJhdGUgKHRpbWVjb2RlIG9ubHkpIiwgICAgICAgICBPRkZTRVQodGNfcmF0ZSksICAgICAg IEFWX09QVF9UWVBFX1JBVElPTkFMLCB7LmRibD0wfSwgICAgMCwgSU5UX01BWCwgRkxBR1N9 LAorICAgIHsiciIsICAgICAgICAgICAgICAgInNldCByYXRlICh0aW1lY29kZSBvbmx5KSIs ICAgICAgICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRfVFlQRV9SQVRJT05BTCwg ey5kYmw9MH0sICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7InJhdGUiLCAgICAgICAg ICAgICJzZXQgcmF0ZSAodGltZWNvZGUgb25seSkiLCAgICAgICAgIE9GRlNFVCh0Y19yYXRl KSwgICAgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUwsIHsuZGJsPTB9LCAgICAwLCBJTlRfTUFY LCBGTEFHU30sCisgICAgeyJyZWxvYWQiLCAgICAgICAgICAicmVsb2FkIHRleHQgZmlsZSBh dCBzcGVjaWZpZWQgZnJhbWUgaW50ZXJ2YWwiLCBPRkZTRVQocmVsb2FkKSwgQVZfT1BUX1RZ UEVfSU5ULCB7Lmk2ND0wfSwgICAgMCwgSU5UX01BWCwgRkxBR1N9LAorICAgIHsiYWxwaGEi LCAgICAgICAgICAgImFwcGx5IGFscGhhIHdoaWxlIHJlbmRlcmluZyIsICAgICAgT0ZGU0VU KGFfZXhwciksICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsICAgey5zdHIgPSAiMSJ9LCAu ZmxhZ3MgPSBURkxBR1N9LAorICAgIHsiZml4X2JvdW5kcyIsICAgICAgImNoZWNrIGFuZCBm aXggdGV4dCBjb29yZHMgdG8gYXZvaWQgY2xpcHBpbmciLCBPRkZTRVQoZml4X2JvdW5kcyks IEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBGTEFHU30sCisgICAgeyJzdGFy dF9udW1iZXIiLCAgICAic3RhcnQgZnJhbWUgbnVtYmVyIGZvciBuL2ZyYW1lX251bSB2YXJp YWJsZSIsIE9GRlNFVChzdGFydF9udW1iZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PTB9 LCAwLCBJTlRfTUFYLCBGTEFHU30sCisgICAgeyJ0ZXh0X3NvdXJjZSIsICAgICAidGhlIHNv dXJjZSBvZiB0ZXh0IiwgT0ZGU0VUKHRleHRfc291cmNlX3N0cmluZyksIEFWX09QVF9UWVBF X1NUUklORywgey5zdHI9TlVMTH0sIDAsIDEsIEZMQUdTIH0sCiAKICNpZiBDT05GSUdfTElC RlJJQklESQogICAgIHsidGV4dF9zaGFwaW5nIiwgImF0dGVtcHQgdG8gc2hhcGUgdGV4dCBi ZWZvcmUgZHJhd2luZyIsIE9GRlNFVCh0ZXh0X3NoYXBpbmcpLCBBVl9PUFRfVFlQRV9CT09M LCB7Lmk2ND0xfSwgMCwgMSwgRkxBR1N9LApAQCAtMjk3LDE4ICs0MjcsMjQgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBmdF9lcnJvciB7CiAKICNkZWZpbmUgRlRfRVJSTVNHKGUpIGZ0X2Vy cm9yc1tlXS5lcnJfbXNnCiAKLXR5cGVkZWYgc3RydWN0IEdseXBoIHsKLSAgICBGVF9HbHlw aCBnbHlwaDsKLSAgICBGVF9HbHlwaCBib3JkZXJfZ2x5cGg7Ci0gICAgdWludDMyX3QgY29k ZTsKLSAgICB1bnNpZ25lZCBpbnQgZm9udHNpemU7Ci0gICAgRlRfQml0bWFwIGJpdG1hcDsg Ly8vPCBhcnJheSBob2xkaW5nIGJpdG1hcHMgb2YgZm9udAotICAgIEZUX0JpdG1hcCBib3Jk ZXJfYml0bWFwOyAvLy88IGFycmF5IGhvbGRpbmcgYml0bWFwcyBvZiBmb250IGJvcmRlcgot ICAgIEZUX0JCb3ggYmJveDsKLSAgICBpbnQgYWR2YW5jZTsKLSAgICBpbnQgYml0bWFwX2xl ZnQ7Ci0gICAgaW50IGJpdG1hcF90b3A7Ci19IEdseXBoOworCisvLyBMb2FkcyBhbmQgKG9w dGlvbmFsbHkpIHJlbmRlcnMgYSBnbHlwaAorc3RhdGljIGludCBsb2FkX2dseXBoKEFWRmls dGVyQ29udGV4dCAqY3R4LCBHbHlwaCAqKmdseXBoX3B0ciwgdWludDMyX3QgY29kZSwKKyAg ICAgaW50OF90IHNoaWZ0X3g2NCwgaW50OF90IHNoaWZ0X3k2NCk7CisKKy8vIFNoYXBlcyBh IGxpbmUgb2YgdGV4dCB1c2luZyBsaWJoYXJmYnV6egorc3RhdGljIHZvaWQgc2hhcGVfdGV4 dF9oYihEcmF3VGV4dENvbnRleHQgKnMsIEhhcmZidXp6RGF0YSogaGIsIGNvbnN0IGNoYXIq IHRleHQsIGludCB0ZXh0TGVuKTsKKworLy8gUGVyZm9ybXMgdGV4dCBtZWFzdXJlbWVudHMK K3N0YXRpYyBpbnQgbWVhc3VyZV90ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBUZXh0TWV0 cmljcyAqbWV0cmljcyk7CisKKy8vIERyYXdzIGdseXBocyBvbiB0aGUgZnJhbWUKK3N0YXRp YyBpbnQgZHJhd19nbHlwaHMoRHJhd1RleHRDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSwK KyAgICAgICAgICAgICAgICAgICAgICAgRkZEcmF3Q29sb3IgKmNvbG9yLCBUZXh0TWV0cmlj cyAqbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQg Ym9yZGVydyk7CisKKy8vIERyYXdzIHRleHQgb24gdGhlIGZyYW1lCitzdGF0aWMgaW50IGRy YXdfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpOwogCiBzdGF0 aWMgaW50IGdseXBoX2NtcChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmIpCiB7CkBA IC0zMTYsODAgKzQ1Miw5IEBAIHN0YXRpYyBpbnQgZ2x5cGhfY21wKGNvbnN0IHZvaWQgKmtl eSwgY29uc3Qgdm9pZCAqYikKICAgICBpbnQ2NF90IGRpZmYgPSAoaW50NjRfdClhLT5jb2Rl IC0gKGludDY0X3QpYmItPmNvZGU7CiAKICAgICBpZiAoZGlmZiAhPSAwKQotICAgICAgICAg cmV0dXJuIGRpZmYgPiAwID8gMSA6IC0xOworICAgICAgICByZXR1cm4gZGlmZiA+IDAgPyAx IDogLTE7CiAgICAgZWxzZQotICAgICAgICAgcmV0dXJuIEZGRElGRlNJR04oKGludDY0X3Qp YS0+Zm9udHNpemUsIChpbnQ2NF90KWJiLT5mb250c2l6ZSk7Ci19Ci0KLS8qKgotICogTG9h ZCBnbHlwaHMgY29ycmVzcG9uZGluZyB0byB0aGUgVVRGLTMyIGNvZGVwb2ludCBjb2RlLgot ICovCi1zdGF0aWMgaW50IGxvYWRfZ2x5cGgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEdseXBo ICoqZ2x5cGhfcHRyLCB1aW50MzJfdCBjb2RlKQotewotICAgIERyYXdUZXh0Q29udGV4dCAq cyA9IGN0eC0+cHJpdjsKLSAgICBGVF9CaXRtYXBHbHlwaCBiaXRtYXBnbHlwaDsKLSAgICBH bHlwaCAqZ2x5cGg7Ci0gICAgc3RydWN0IEFWVHJlZU5vZGUgKm5vZGUgPSBOVUxMOwotICAg IGludCByZXQ7Ci0KLSAgICAvKiBsb2FkIGdseXBoIGludG8gcy0+ZmFjZS0+Z2x5cGggKi8K LSAgICBpZiAoRlRfTG9hZF9DaGFyKHMtPmZhY2UsIGNvZGUsIHMtPmZ0X2xvYWRfZmxhZ3Mp KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotCi0gICAgZ2x5cGggPSBhdl9t YWxsb2N6KHNpemVvZigqZ2x5cGgpKTsKLSAgICBpZiAoIWdseXBoKSB7Ci0gICAgICAgIHJl dCA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAg Z2x5cGgtPmNvZGUgID0gY29kZTsKLSAgICBnbHlwaC0+Zm9udHNpemUgPSBzLT5mb250c2l6 ZTsKLQotICAgIGlmIChGVF9HZXRfR2x5cGgocy0+ZmFjZS0+Z2x5cGgsICZnbHlwaC0+Z2x5 cGgpKSB7Ci0gICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgZ290byBl cnJvcjsKLSAgICB9Ci0gICAgaWYgKHMtPmJvcmRlcncpIHsKLSAgICAgICAgZ2x5cGgtPmJv cmRlcl9nbHlwaCA9IGdseXBoLT5nbHlwaDsKLSAgICAgICAgaWYgKEZUX0dseXBoX1N0cm9r ZUJvcmRlcigmZ2x5cGgtPmJvcmRlcl9nbHlwaCwgcy0+c3Ryb2tlciwgMCwgMCkgfHwKLSAg ICAgICAgICAgIEZUX0dseXBoX1RvX0JpdG1hcCgmZ2x5cGgtPmJvcmRlcl9nbHlwaCwgRlRf UkVOREVSX01PREVfTk9STUFMLCAwLCAxKSkgewotICAgICAgICAgICAgcmV0ID0gQVZFUlJP Ul9FWFRFUk5BTDsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAg ICAgYml0bWFwZ2x5cGggPSAoRlRfQml0bWFwR2x5cGgpIGdseXBoLT5ib3JkZXJfZ2x5cGg7 Ci0gICAgICAgIGdseXBoLT5ib3JkZXJfYml0bWFwID0gYml0bWFwZ2x5cGgtPmJpdG1hcDsK LSAgICB9Ci0gICAgaWYgKEZUX0dseXBoX1RvX0JpdG1hcCgmZ2x5cGgtPmdseXBoLCBGVF9S RU5ERVJfTU9ERV9OT1JNQUwsIDAsIDEpKSB7Ci0gICAgICAgIHJldCA9IEFWRVJST1JfRVhU RVJOQUw7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGJpdG1hcGdseXBoID0g KEZUX0JpdG1hcEdseXBoKSBnbHlwaC0+Z2x5cGg7Ci0KLSAgICBnbHlwaC0+Yml0bWFwICAg ICAgPSBiaXRtYXBnbHlwaC0+Yml0bWFwOwotICAgIGdseXBoLT5iaXRtYXBfbGVmdCA9IGJp dG1hcGdseXBoLT5sZWZ0OwotICAgIGdseXBoLT5iaXRtYXBfdG9wICA9IGJpdG1hcGdseXBo LT50b3A7Ci0gICAgZ2x5cGgtPmFkdmFuY2UgICAgID0gcy0+ZmFjZS0+Z2x5cGgtPmFkdmFu Y2UueCA+PiA2OwotCi0gICAgLyogbWVhc3VyZSB0ZXh0IGhlaWdodCB0byBjYWxjdWxhdGUg dGV4dF9oZWlnaHQgKG9yIHRoZSBtYXhpbXVtIHRleHQgaGVpZ2h0KSAqLwotICAgIEZUX0ds eXBoX0dldF9DQm94KGdseXBoLT5nbHlwaCwgZnRfZ2x5cGhfYmJveF9waXhlbHMsICZnbHlw aC0+YmJveCk7Ci0KLSAgICAvKiBjYWNoZSB0aGUgbmV3bHkgY3JlYXRlZCBnbHlwaCAqLwot ICAgIGlmICghKG5vZGUgPSBhdl90cmVlX25vZGVfYWxsb2MoKSkpIHsKLSAgICAgICAgcmV0 ID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBh dl90cmVlX2luc2VydCgmcy0+Z2x5cGhzLCBnbHlwaCwgZ2x5cGhfY21wLCAmbm9kZSk7Ci0K LSAgICBpZiAoZ2x5cGhfcHRyKQotICAgICAgICAqZ2x5cGhfcHRyID0gZ2x5cGg7Ci0gICAg cmV0dXJuIDA7Ci0KLWVycm9yOgotICAgIGlmIChnbHlwaCkKLSAgICAgICAgYXZfZnJlZXAo JmdseXBoLT5nbHlwaCk7Ci0KLSAgICBhdl9mcmVlcCgmZ2x5cGgpOwotICAgIGF2X2ZyZWVw KCZub2RlKTsKLSAgICByZXR1cm4gcmV0OworICAgICAgICByZXR1cm4gRkZESUZGU0lHTigo aW50NjRfdClhLT5mb250c2l6ZSwgKGludDY0X3QpYmItPmZvbnRzaXplKTsKIH0KIAogc3Rh dGljIGF2X2NvbGQgaW50IHNldF9mb250c2l6ZShBVkZpbHRlckNvbnRleHQgKmN0eCwgdW5z aWduZWQgaW50IGZvbnRzaXplKQpAQCAtNDM5LDcgKzUwNCw2IEBAIHN0YXRpYyBhdl9jb2xk IGludCB1cGRhdGVfZm9udHNpemUoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAgICAgICAgICAg IHJldHVybiBlcnI7CiAKICAgICAgICAgc2l6ZSA9IGF2X2V4cHJfZXZhbChzLT5mb250c2l6 ZV9wZXhwciwgcy0+dmFyX3ZhbHVlcywgJnMtPnBybmcpOwotCiAgICAgICAgIGlmICghaXNu YW4oc2l6ZSkpIHsKICAgICAgICAgICAgIHJvdW5kZWRzaXplID0gcm91bmQoc2l6ZSk7CiAg ICAgICAgICAgICAvLyB0ZXN0IGZvciBvdmVyZmxvdyBiZWZvcmUgY2FzdApAQCAtNDQ3LDcg KzUxMSw2IEBAIHN0YXRpYyBhdl9jb2xkIGludCB1cGRhdGVfZm9udHNpemUoQVZGaWx0ZXJD b250ZXh0ICpjdHgpCiAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiZm9udHNpemUgb3ZlcmZsb3dcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvbnRzaXplID0g cm91bmRlZHNpemU7CiAgICAgICAgIH0KICAgICB9CkBAIC01NDgsNyArNjExLDcgQEAgc3Rh dGljIGludCBsb2FkX2ZvbnRfZm9udGNvbmZpZyhBVkZpbHRlckNvbnRleHQgKmN0eCkKICAg ICAgICAgZ290byBmYWlsOwogICAgIH0KIAotICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZP LCAiVXNpbmcgXCIlc1wiXG4iLCBmaWxlbmFtZSk7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9H X1ZFUkJPU0UsICJVc2luZyBcIiVzXCJcbiIsIGZpbGVuYW1lKTsKICAgICBpZiAocGFyc2Vf ZXJyKQogICAgICAgICBzLT5kZWZhdWx0X2ZvbnRzaXplID0gc2l6ZSArIDAuNTsKIApAQCAt NjkwLDYgKzc1Myw3IEBAIHN0YXRpYyBpbnQgc2hhcGVfdGV4dChBVkZpbHRlckNvbnRleHQg KmN0eCkKICAgICBzLT50ZXh0ID0gdG1wOwogICAgIGxlbiA9IGZyaWJpZGlfdW5pY29kZV90 b19jaGFyc2V0KEZSSUJJRElfQ0hBUl9TRVRfVVRGOCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bmljb2Rlc3RyLCBsZW4sIHMtPnRleHQpOworCiAgICAgcmV0 ID0gMDsKIAogb3V0OgpAQCAtNzExLDExICs3NzUsMzggQEAgc3RhdGljIGVudW0gQVZGcmFt ZVNpZGVEYXRhVHlwZSB0ZXh0X3NvdXJjZV9zdHJpbmdfcGFyc2UoY29uc3QgY2hhciAqdGV4 dF9zb3VyY2UKICAgICB9CiB9CiAKKy8vIENvbnZlcnQgYSBzdHJpbmcgZm9ybWF0dGVkIGFz ICJuMXxuMnwuLi58bk4iIGludG8gYW4gaW50ZWdlciBhcnJheQorc3RhdGljIGludCBzdHJp bmdfdG9fYXJyYXkoY29uc3QgY2hhciogc291cmNlLCBpbnQqIHJlc3VsdCwgaW50IHJlc3Vs dF9zaXplKQoreworICAgIGludCBjb3VudGVyID0gMCwgc2l6ZSA9IHN0cmxlbihzb3VyY2Up ICsgMTsKKyAgICBjaGFyICpzYXZlcHRyLCAqY3VydmFsLCAqZHVwID0gYXZfbWFsbG9jKHNp emUpOworICAgIGF2X3N0cmxjcHkoZHVwLCBzb3VyY2UsIHNpemUpOworICAgIGlmKHJlc3Vs dF9zaXplID4gMCAmJiAoY3VydmFsID0gYXZfc3RydG9rKGR1cCwgInwiLCAmc2F2ZXB0cikp KSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJlc3VsdFtjb3VudGVyKytdID0gYXRv aShjdXJ2YWwpOworICAgICAgICB9IHdoaWxlKChjdXJ2YWwgPSBhdl9zdHJ0b2soTlVMTCwg InwiLCAmc2F2ZXB0cikpICYmIGNvdW50ZXIgPCByZXN1bHRfc2l6ZSk7CisgICAgfQorICAg IGF2X2ZyZWUoZHVwKTsKKyAgICByZXR1cm4gY291bnRlcjsKK30KKworc3RhdGljIGludCB2 YWxpZGF0ZV90ZXh0X2FsaWduKGNoYXIqIHRleHRfYWxpZ24pCit7CisgICAgaW50IGVyciA9 IDA7CisgICAgaWYoc3RybGVuKHRleHRfYWxpZ24pICE9IDIKKyAgICAgICAgfHwgc3RyY2hy KCJMQ1JUTUIiLCB0ZXh0X2FsaWduWzBdKSA9PSBOVUxMIHx8IHN0cmNocigiTENSVE1CIiwg dGV4dF9hbGlnblsxXSkgPT0gTlVMTAorICAgICAgICB8fCAoc3RyY2hyKCJUTUIiLCB0ZXh0 X2FsaWduWzBdKSAhPSBOVUxMICYmIHN0cmNocigiTENSIiwgdGV4dF9hbGlnblsxXSkgPT0g TlVMTCkKKyAgICAgICAgfHwgKHN0cmNocigiTENSIiwgdGV4dF9hbGlnblswXSkgIT0gTlVM TCAmJiBzdHJjaHIoIlRNQiIsIHRleHRfYWxpZ25bMV0pID09IE5VTEwpKSB7CisgICAgICAg IGVyciA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOworfQor CiBzdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKIHsKICAg ICBpbnQgZXJyOwogICAgIERyYXdUZXh0Q29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBH bHlwaCAqZ2x5cGg7CiAKICAgICBhdl9leHByX2ZyZWUocy0+Zm9udHNpemVfcGV4cHIpOwog ICAgIHMtPmZvbnRzaXplX3BleHByID0gTlVMTDsKQEAgLTc3Nyw2ICs4NjgsMTQgQEAgc3Rh dGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7CiAgICAgfQogCisgICAgaWYoKGVyciA9IHZhbGlkYXRl X3RleHRfYWxpZ24ocy0+dGV4dF9hbGlnbikpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJUaGUgdmFsdWUgcHJvdmlkZWQgZm9yIHBh cmFtZXRlciAndGV4dF9hbGlnbicgaXMgbm90IHZhbGlkLFxuIik7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJwbGVhc2Ugc3BlY2lmeSBh IHR3byBjaGFyYWN0ZXJzIHN0cmluZyBjb250YWluaW5nIG9ubHkgb25lIGxldHRlciBmb3Ig aG9yaXpvbnRhbCBhbGlnbm1lbnQgKCdMQ1InKSBhbmQgb25lIGZvciB2ZXJ0aWNhbCBhbGln bm1lbnQgKCdUTUInKVxuIik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCiAjaWYg Q09ORklHX0xJQkZSSUJJREkKICAgICBpZiAocy0+dGV4dF9zaGFwaW5nKQogICAgICAgICBp ZiAoKGVyciA9IHNoYXBlX3RleHQoY3R4KSkgPCAwKQpAQCAtNzk1LDI2ICs4OTQsMTkgQEAg c3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAgICAgaWYg KChlcnIgPSB1cGRhdGVfZm9udHNpemUoY3R4KSkgPCAwKQogICAgICAgICByZXR1cm4gZXJy OwogCisgICAgLy8gQWx3YXlzIGluaXQgdGhlIHN0cm9rZXIsIG1heSBiZSBuZWVkZWQgaWYg Ym9yZGVydyBpcyBzZXQgdmlhIGNvbW1hbmQKKyAgICBpZiAoRlRfU3Ryb2tlcl9OZXcocy0+ bGlicmFyeSwgJnMtPnN0cm9rZXIpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIkNvdWx0IG5vdCBpbml0IEZUIHN0cm9rZXJcbiIpOworICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKICAgICBpZiAocy0+Ym9yZGVydykgewotICAg ICAgICBpZiAoRlRfU3Ryb2tlcl9OZXcocy0+bGlicmFyeSwgJnMtPnN0cm9rZXIpKSB7Ci0g ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJDb3VsdCBub3QgaW5pdCBG VCBzdHJva2VyXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwot ICAgICAgICB9CiAgICAgICAgIEZUX1N0cm9rZXJfU2V0KHMtPnN0cm9rZXIsIHMtPmJvcmRl cncgPDwgNiwgRlRfU1RST0tFUl9MSU5FQ0FQX1JPVU5ELAogICAgICAgICAgICAgICAgICAg ICAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5ELCAwKTsKICAgICB9CiAKLSAgICBzLT51 c2Vfa2VybmluZyA9IEZUX0hBU19LRVJOSU5HKHMtPmZhY2UpOwotCiAgICAgLyogbG9hZCB0 aGUgZmFsbGJhY2sgZ2x5cGggd2l0aCBjb2RlIDAgKi8KLSAgICBsb2FkX2dseXBoKGN0eCwg TlVMTCwgMCk7Ci0KLSAgICAvKiBzZXQgdGhlIHRhYnNpemUgaW4gcGl4ZWxzICovCi0gICAg aWYgKChlcnIgPSBsb2FkX2dseXBoKGN0eCwgJmdseXBoLCAnICcpKSA8IDApIHsKLSAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ291bGQgbm90IHNldCB0YWJzaXplLlxu Iik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHMtPnRhYnNpemUgKj0gZ2x5 cGgtPmFkdmFuY2U7CisgICAgbG9hZF9nbHlwaChjdHgsIE5VTEwsIDAsIDAsIDApOwogCiAg ICAgaWYgKHMtPmV4cF9tb2RlID09IEVYUF9TVFJGVElNRSAmJgogICAgICAgICAoc3RyY2hy KHMtPnRleHQsICclJykgfHwgc3RyY2hyKHMtPnRleHQsICdcXCcpKSkKQEAgLTgzMSwxMiAr OTIzLDM3IEBAIHN0YXRpYyBpbnQgcXVlcnlfZm9ybWF0cyhBVkZpbHRlckNvbnRleHQgKmN0 eCkKICAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9mb3JtYXRzKGN0eCwgZmZfZHJhd19zdXBw b3J0ZWRfcGl4ZWxfZm9ybWF0cygwKSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2x5cGhfZW51X2Jv cmRlcl9mcmVlKHZvaWQgKm9wYXF1ZSwgdm9pZCAqZWxlbSkKK3sKKyAgICBHbHlwaCAqZ2x5 cGggPSBlbGVtOworCisgICAgaWYoZ2x5cGgtPmJvcmRlcl9nbHlwaCAhPSBOVUxMKSB7Cisg ICAgICAgIGZvcihpbnQgdCA9IDA7IHQgPCAxNjsgKyt0KSB7CisgICAgICAgICAgICBpZihn bHlwaC0+Ym9yZGVyX2JnbHlwaFt0XSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgRlRf RG9uZV9HbHlwaCgoRlRfR2x5cGgpZ2x5cGgtPmJvcmRlcl9iZ2x5cGhbdF0pOworICAgICAg ICAgICAgICAgIGdseXBoLT5ib3JkZXJfYmdseXBoW3RdID0gTlVMTDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBGVF9Eb25lX0dseXBoKGdseXBoLT5ib3JkZXJfZ2x5 cGgpOworICAgICAgICBnbHlwaC0+Ym9yZGVyX2dseXBoID0gTlVMTDsKKyAgICB9CisgICAg cmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2x5cGhfZW51X2ZyZWUodm9pZCAqb3BhcXVl LCB2b2lkICplbGVtKQogewogICAgIEdseXBoICpnbHlwaCA9IGVsZW07CiAKICAgICBGVF9E b25lX0dseXBoKGdseXBoLT5nbHlwaCk7CiAgICAgRlRfRG9uZV9HbHlwaChnbHlwaC0+Ym9y ZGVyX2dseXBoKTsKKyAgICBmb3IoaW50IHQgPSAwOyB0IDwgMTY7ICsrdCkgeworICAgICAg ICBpZihnbHlwaC0+YmdseXBoW3RdICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEZUX0RvbmVf R2x5cGgoKEZUX0dseXBoKWdseXBoLT5iZ2x5cGhbdF0pOworICAgICAgICB9CisgICAgICAg IGlmKGdseXBoLT5ib3JkZXJfYmdseXBoW3RdICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEZU X0RvbmVfR2x5cGgoKEZUX0dseXBoKWdseXBoLT5ib3JkZXJfYmdseXBoW3RdKTsKKyAgICAg ICAgfQorICAgIH0KICAgICBhdl9mcmVlKGVsZW0pOwogICAgIHJldHVybiAwOwogfQpAQCAt ODUyLDkgKzk2OSw2IEBAIHN0YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29u dGV4dCAqY3R4KQogCiAgICAgcy0+eF9wZXhwciA9IHMtPnlfcGV4cHIgPSBzLT5hX3BleHBy ID0gcy0+Zm9udHNpemVfcGV4cHIgPSBOVUxMOwogCi0gICAgYXZfZnJlZXAoJnMtPnBvc2l0 aW9ucyk7Ci0gICAgcy0+bmJfcG9zaXRpb25zID0gMDsKLQogICAgIGF2X3RyZWVfZW51bWVy YXRlKHMtPmdseXBocywgTlVMTCwgTlVMTCwgZ2x5cGhfZW51X2ZyZWUpOwogICAgIGF2X3Ry ZWVfZGVzdHJveShzLT5nbHlwaHMpOwogICAgIHMtPmdseXBocyA9IE5VTEw7CkBAIC04ODAs MTUgKzk5NCwxNSBAQCBzdGF0aWMgaW50IGNvbmZpZ19pbnB1dChBVkZpbHRlckxpbmsgKmlu bGluaykKICAgICBmZl9kcmF3X2NvbG9yKCZzLT5kYywgJnMtPmJvcmRlcmNvbG9yLCBzLT5i b3JkZXJjb2xvci5yZ2JhKTsKICAgICBmZl9kcmF3X2NvbG9yKCZzLT5kYywgJnMtPmJveGNv bG9yLCAgICBzLT5ib3hjb2xvci5yZ2JhKTsKIAotICAgIHMtPnZhcl92YWx1ZXNbVkFSX3dd ICAgICA9IHMtPnZhcl92YWx1ZXNbVkFSX1ddICAgICA9IHMtPnZhcl92YWx1ZXNbVkFSX01B SU5fV10gPSBpbmxpbmstPnc7Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfaF0gICAgID0gcy0+ dmFyX3ZhbHVlc1tWQVJfSF0gICAgID0gcy0+dmFyX3ZhbHVlc1tWQVJfTUFJTl9IXSA9IGlu bGluay0+aDsKLSAgICBzLT52YXJfdmFsdWVzW1ZBUl9TQVJdICAgPSBpbmxpbmstPnNhbXBs ZV9hc3BlY3RfcmF0aW8ubnVtID8gYXZfcTJkKGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRp bykgOiAxOwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX0RBUl0gICA9IChkb3VibGUpaW5saW5r LT53IC8gaW5saW5rLT5oICogcy0+dmFyX3ZhbHVlc1tWQVJfU0FSXTsKLSAgICBzLT52YXJf dmFsdWVzW1ZBUl9IU1VCXSAgPSAxIDw8IHMtPmRjLmhzdWJfbWF4OwotICAgIHMtPnZhcl92 YWx1ZXNbVkFSX1ZTVUJdICA9IDEgPDwgcy0+ZGMudnN1Yl9tYXg7Ci0gICAgcy0+dmFyX3Zh bHVlc1tWQVJfWF0gICAgID0gTkFOOwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX1ldICAgICA9 IE5BTjsKLSAgICBzLT52YXJfdmFsdWVzW1ZBUl9UXSAgICAgPSBOQU47CisgICAgcy0+dmFy X3ZhbHVlc1tWQVJfd10gICAgPSBzLT52YXJfdmFsdWVzW1ZBUl9XXSA9IHMtPnZhcl92YWx1 ZXNbVkFSX01BSU5fV10gPSBpbmxpbmstPnc7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfaF0g ICAgPSBzLT52YXJfdmFsdWVzW1ZBUl9IXSA9IHMtPnZhcl92YWx1ZXNbVkFSX01BSU5fSF0g PSBpbmxpbmstPmg7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfU0FSXSAgPSBpbmxpbmstPnNh bXBsZV9hc3BlY3RfcmF0aW8ubnVtID8gYXZfcTJkKGlubGluay0+c2FtcGxlX2FzcGVjdF9y YXRpbykgOiAxOworICAgIHMtPnZhcl92YWx1ZXNbVkFSX0RBUl0gID0gKGRvdWJsZSlpbmxp bmstPncgLyBpbmxpbmstPmggKiBzLT52YXJfdmFsdWVzW1ZBUl9TQVJdOworICAgIHMtPnZh cl92YWx1ZXNbVkFSX0hTVUJdID0gMSA8PCBzLT5kYy5oc3ViX21heDsKKyAgICBzLT52YXJf dmFsdWVzW1ZBUl9WU1VCXSA9IDEgPDwgcy0+ZGMudnN1Yl9tYXg7CisgICAgcy0+dmFyX3Zh bHVlc1tWQVJfWF0gICAgPSBOQU47CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfWV0gICAgPSBO QU47CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfVF0gICAgPSBOQU47CiAKICAgICBhdl9sZmdf aW5pdCgmcy0+cHJuZywgYXZfZ2V0X3JhbmRvbV9zZWVkKCkpOwogCkBAIC05NDgsOCArMTA2 MiwyOCBAQCBzdGF0aWMgaW50IGNvbW1hbmQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0 IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqYXJnLCBjaGFyCiAKICAgICAgICAgY3R4LT5wcml2 ID0gbmV3OwogICAgICAgICByZXR1cm4gY29uZmlnX2lucHV0KGN0eC0+aW5wdXRzWzBdKTsK LSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKyAgICB9IGVs c2UgeworLy8gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkNvbW1hbmQgJyVz JyAnJXMnXG4iLCBjbWQsIGFyZyk7CisgICAgICAgIGludCBvbGRfYm9yZGVydyA9IG9sZC0+ Ym9yZGVydzsKKyAgICAgICAgaWYgKChyZXQgPSBmZl9maWx0ZXJfcHJvY2Vzc19jb21tYW5k KGN0eCwgY21kLCBhcmcsIHJlcywgcmVzX2xlbiwgZmxhZ3MpKSA8IDApIHsKKyAgICAgICAg ICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYob2xkLT5ib3JkZXJ3ICE9 IG9sZF9ib3JkZXJ3KSB7CisgICAgICAgICAgICBGVF9TdHJva2VyX1NldChvbGQtPnN0cm9r ZXIsIG9sZC0+Ym9yZGVydyA8PCA2LCBGVF9TVFJPS0VSX0xJTkVDQVBfUk9VTkQsCisgICAg ICAgICAgICAgICAgICAgICAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5ELCAwKTsKKyAg ICAgICAgICAgIC8vIERpc3Bvc2UgdGhlIG9sZCBib3JkZXIgZ2x5cGhzCisgICAgICAgICAg ICBhdl90cmVlX2VudW1lcmF0ZShvbGQtPmdseXBocywgTlVMTCwgTlVMTCwgZ2x5cGhfZW51 X2JvcmRlcl9mcmVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIH0g ZWxzZSBpZihzdHJjbXAoY21kLCAidGV4dF9hbGlnbiIpID09IDApIHsKKyAgICAgICAgICAg IGlmKHZhbGlkYXRlX3RleHRfYWxpZ24ob2xkLT50ZXh0X2FsaWduKSAhPSAwKSB7CisgICAg ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAg ICAgICAiSW52YWxpZCBjb21tYW5kIHZhbHVlICclcycgZm9yICd0ZXh0X2FsaWduJ1xuIiwg b2xkLT50ZXh0X2FsaWduKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmKHN0 cmNtcChjbWQsICJmb250c2l6ZSIpID09IDApIHsKKyAgICAgICAgICAgIGF2X2V4cHJfZnJl ZShvbGQtPmZvbnRzaXplX3BleHByKTsKKyAgICAgICAgICAgIG9sZC0+Zm9udHNpemVfcGV4 cHIgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb25maWdfaW5wdXQoY3R4 LT5pbnB1dHNbMF0pOworICAgIH0KIAogZmFpbDoKICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gcHJvY2VzcyBjb21tYW5kLiBDb250aW51aW5nIHdpdGggZXhp c3RpbmcgcGFyYW1ldGVycy5cbiIpOwpAQCAtMTMxOCw5MSArMTQ1Miw0MjYgQEAgc3RhdGlj IGludCBleHBhbmRfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCwgY2hhciAqdGV4dCwgQVZC UHJpbnQgKmJwKQogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVfY29s b3Jfd2l0aF9hbHBoYShEcmF3VGV4dENvbnRleHQgKnMsIEZGRHJhd0NvbG9yICpjb2xvciwg Y29uc3QgRkZEcmF3Q29sb3IgaW5jb2xvcikKK3sKKyAgICAqY29sb3IgPSBpbmNvbG9yOwor ICAgIGNvbG9yLT5yZ2JhWzNdID0gKGNvbG9yLT5yZ2JhWzNdICogcy0+YWxwaGEpIC8gMjU1 OworICAgIGZmX2RyYXdfY29sb3IoJnMtPmRjLCBjb2xvciwgY29sb3ItPnJnYmEpOworfQor CitzdGF0aWMgdm9pZCB1cGRhdGVfYWxwaGEoRHJhd1RleHRDb250ZXh0ICpzKQoreworICAg IGRvdWJsZSBhbHBoYSA9IGF2X2V4cHJfZXZhbChzLT5hX3BleHByLCBzLT52YXJfdmFsdWVz LCAmcy0+cHJuZyk7CisKKyAgICBpZiAoaXNuYW4oYWxwaGEpKQorICAgICAgICByZXR1cm47 CisKKyAgICBpZiAoYWxwaGEgPj0gMS4wKQorICAgICAgICBzLT5hbHBoYSA9IDI1NTsKKyAg ICBlbHNlIGlmIChhbHBoYSA8PSAwKQorICAgICAgICBzLT5hbHBoYSA9IDA7CisgICAgZWxz ZQorICAgICAgICBzLT5hbHBoYSA9IDI1NiAqIGFscGhhOworfQorCitzdGF0aWMgaW5saW5l IGludCBnZXRfc3VicGl4ZWxfaWR4KGludCBzaGlmdF94NjQsIGludCBzaGlmdF95NjQpCit7 CisgICAgaW50IGlkeCA9IChzaGlmdF94NjQgPj4gMikgKyAoc2hpZnRfeTY0ID4+IDQpOwor ICAgIHJldHVybiBpZHg7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF9nbHlwaChBVkZpbHRlckNv bnRleHQgKmN0eCwgR2x5cGggKipnbHlwaF9wdHIsIHVpbnQzMl90IGNvZGUsIGludDhfdCBz aGlmdF94NjQsIGludDhfdCBzaGlmdF95NjQpCit7CisgICAgRHJhd1RleHRDb250ZXh0ICpz ID0gY3R4LT5wcml2OworICAgIEdseXBoIGR1bW15ID0geyAwIH07CisgICAgR2x5cGggKmds eXBoOworICAgIEZUX1ZlY3RvciBzaGlmdDsKKyAgICBzdHJ1Y3QgQVZUcmVlTm9kZSAqbm9k ZSA9IE5VTEw7CisgICAgaW50IHJldCA9IDA7CisKKyAgICAvKiBnZXQgZ2x5cGggKi8KKyAg ICBkdW1teS5jb2RlID0gY29kZTsKKyAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXpl OworICAgIGdseXBoID0gYXZfdHJlZV9maW5kKHMtPmdseXBocywgJmR1bW15LCBnbHlwaF9j bXAsIE5VTEwpOworICAgIGlmKCFnbHlwaCkgeworLy8gICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19ERUJVRywgIkdseXBoOiAlZCBub3QgY2FjaGVkIC0+IGxvYWRpbmcuLi5cbiIsIGNv ZGUpOworICAgICAgICBpZiAoRlRfTG9hZF9HbHlwaChzLT5mYWNlLCBjb2RlLCBzLT5mdF9s b2FkX2ZsYWdzKSkgeworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAg ICAgICAgfQorICAgICAgICBnbHlwaCA9IGF2X21hbGxvY3ooc2l6ZW9mKCpnbHlwaCkpOwor ICAgICAgICBpZiAoIWdseXBoKSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGdseXBo LT5jb2RlICA9IGNvZGU7CisgICAgICAgIGdseXBoLT5mb250c2l6ZSA9IHMtPmZvbnRzaXpl OworICAgICAgICBpZiAoRlRfR2V0X0dseXBoKHMtPmZhY2UtPmdseXBoLCAmZ2x5cGgtPmds eXBoKSkgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAg ICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAocy0+Ym9yZGVydykgewor ICAgICAgICAgICAgZ2x5cGgtPmJvcmRlcl9nbHlwaCA9IGdseXBoLT5nbHlwaDsKKyAgICAg ICAgICAgIGlmIChGVF9HbHlwaF9TdHJva2VCb3JkZXIoJmdseXBoLT5ib3JkZXJfZ2x5cGgs IHMtPnN0cm9rZXIsIDAsIDApKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9F WFRFUk5BTDsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIC8qIG1lYXN1cmUgdGV4dCBoZWlnaHQgdG8gY2FsY3VsYXRl IHRleHRfaGVpZ2h0IChvciB0aGUgbWF4aW11bSB0ZXh0IGhlaWdodCkgKi8KKyAgICAgICAg RlRfR2x5cGhfR2V0X0NCb3goZ2x5cGgtPmdseXBoLCBGVF9HTFlQSF9CQk9YX1NVQlBJWEVM UywgJmdseXBoLT5iYm94KTsKKworICAgICAgICAvKiBjYWNoZSB0aGUgbmV3bHkgY3JlYXRl ZCBnbHlwaCAqLworICAgICAgICBpZiAoIShub2RlID0gYXZfdHJlZV9ub2RlX2FsbG9jKCkp KSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBn b3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGF2X3RyZWVfaW5zZXJ0KCZzLT5nbHlw aHMsIGdseXBoLCBnbHlwaF9jbXAsICZub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp ZihzLT5ib3JkZXJ3ICYmICFnbHlwaC0+Ym9yZGVyX2dseXBoKSB7CisgICAgICAgICAgICBn bHlwaC0+Ym9yZGVyX2dseXBoID0gZ2x5cGgtPmdseXBoOworICAgICAgICAgICAgaWYgKEZU X0dseXBoX1N0cm9rZUJvcmRlcigmZ2x5cGgtPmJvcmRlcl9nbHlwaCwgcy0+c3Ryb2tlciwg MCwgMCkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOworICAg ICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisKKyAgICAvLyBDaGVjayBpZiBhIGJpdG1hcCBpcyBuZWVkZWQKKyAgICBpZihzaGlm dF94NjQgPj0gMCAmJiBzaGlmdF95NjQgPj0gMCkgeworICAgICAgICAvLyBHZXQgdGhlIGJp dG1hcCBzdWJwaXhlbCBpbmRleCAoMCAtPiAxNSkKKyAgICAgICAgaW50IGlkeCA9IGdldF9z dWJwaXhlbF9pZHgoc2hpZnRfeDY0LCBzaGlmdF95NjQpOworICAgICAgICBzaGlmdC54ID0g c2hpZnRfeDY0OworICAgICAgICBzaGlmdC55ID0gc2hpZnRfeTY0OworCisgICAgICAgIGlm KCFnbHlwaC0+YmdseXBoW2lkeF0pIHsKKyAgICAgICAgICAgIEZUX0dseXBoIHRtcF9nbHlw aCA9IGdseXBoLT5nbHlwaDsKKyAgICAgICAgICAgIC8vIGF2X2xvZyhjdHgsIEFWX0xPR19E RUJVRywgIlJlbmRlcmluZyBiaXRtYXAgWyVkXSBmb3IgZ2x5cGg6ICVkXG4iLCBpZHgsIGNv ZGUpOworICAgICAgICAgICAgaWYoRlRfR2x5cGhfVG9fQml0bWFwKCZ0bXBfZ2x5cGgsIEZU X1JFTkRFUl9NT0RFX05PUk1BTCwgJnNoaWZ0LCAwKSkgeworICAgICAgICAgICAgICAgIHJl dCA9IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGdseXBoLT5iZ2x5cGhbaWR4XSA9IChGVF9CaXRt YXBHbHlwaCl0bXBfZ2x5cGg7CisgICAgICAgICAgICBpZihnbHlwaC0+YmdseXBoW2lkeF0t PmJpdG1hcC5waXhlbF9tb2RlID09IEZUX1BJWEVMX01PREVfTU9OTykgeworICAgICAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk1vbm9jcm9tYXRpYyAoMWJwcCkg Zm9udHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKyAgICAgICAgICAgICAgICByZXQgPSBB VkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocy0+Ym9yZGVydyAmJiAhZ2x5cGgtPmJv cmRlcl9iZ2x5cGhbaWR4XSkgeworICAgICAgICAgICAgRlRfR2x5cGggdG1wX2dseXBoID0g Z2x5cGgtPmJvcmRlcl9nbHlwaDsKKyAgICAgICAgICAgIC8vIGF2X2xvZyhjdHgsIEFWX0xP R19ERUJVRywgIlJlbmRlcmluZyBib3JkZXIgYml0bWFwIFslZF0gZm9yIGdseXBoOiAlZFxu IiwgaWR4LCBjb2RlKTsKKyAgICAgICAgICAgIGlmKEZUX0dseXBoX1RvX0JpdG1hcCgmdG1w X2dseXBoLCBGVF9SRU5ERVJfTU9ERV9OT1JNQUwsICZzaGlmdCwgMCkpIHsKKyAgICAgICAg ICAgICAgICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICAgICAgICAgIGdvdG8g ZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnbHlwaC0+Ym9yZGVyX2JnbHlw aFtpZHhdID0gKEZUX0JpdG1hcEdseXBoKXRtcF9nbHlwaDsKKyAgICAgICAgfQorICAgIH0K KyAgICBpZihnbHlwaF9wdHIpIHsKKyAgICAgICAgKmdseXBoX3B0ciA9IGdseXBoOworICAg IH0KKyAgICByZXR1cm4gMDsKKworZXJyb3I6CisgICAgaWYgKGdseXBoICYmIGdseXBoLT5n bHlwaCkKKyAgICAgICAgRlRfRG9uZV9HbHlwaChnbHlwaC0+Z2x5cGgpOworCisgICAgYXZf ZnJlZXAoJmdseXBoKTsKKyAgICBhdl9mcmVlcCgmbm9kZSk7CisgICAgcmV0dXJuIHJldDsK K30KKwogc3RhdGljIGludCBkcmF3X2dseXBocyhEcmF3VGV4dENvbnRleHQgKnMsIEFWRnJh bWUgKmZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln aHQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZGRHJhd0NvbG9yICpjb2xvciwKKyAgICAg ICAgICAgICAgICAgICAgICAgVGV4dE1ldHJpY3MgKm1ldHJpY3MsCiAgICAgICAgICAgICAg ICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IGJvcmRlcncpCiB7Ci0gICAgY2hhciAqdGV4 dCA9IHMtPmV4cGFuZGVkX3RleHQuc3RyOwotICAgIHVpbnQzMl90IGNvZGUgPSAwOwotICAg IGludCBpLCB4MSwgeTE7Ci0gICAgdWludDhfdCAqcDsKLSAgICBHbHlwaCAqZ2x5cGggPSBO VUxMOworICAgIGludCBnLCBsLCB4MSwgeTEsIHcxLCBoMSwgaWR4OworICAgIGludCBkeCA9 IDAsIGR5ID0gMCwgcGR4ID0gMDsKKyAgICBHbHlwaEluZm8gKmluZm87CisgICAgR2x5cGgg ZHVtbXkgPSB7IDAgfSwgKmdseXBoOworICAgIEZUX0JpdG1hcCBiaXRtYXA7CisgICAgRlRf Qml0bWFwR2x5cGggYl9nbHlwaDsKKyAgICB1aW50OF90IGpfY2VudGVyID0gMCwgal9yaWdo dCA9IDAsIGpfbWlkZGxlID0gMCwgal9ib3R0b20gPSAwOworICAgIGludCBsaW5lX3csIG9m ZnNldF95ID0gMDsKKyAgICBpbnQgY2xpcF94ID0gMCwgY2xpcF95ID0gMDsKKworICAgIGpf Y2VudGVyID0gc3Ryc3RyKHMtPnRleHRfYWxpZ24sICJDIikgPiAwOworICAgIGpfcmlnaHQg PSBzdHJzdHIocy0+dGV4dF9hbGlnbiwgIlIiKSA+IDA7CisgICAgal9taWRkbGUgPSBzdHJz dHIocy0+dGV4dF9hbGlnbiwgIk0iKSA+IDA7CisgICAgal9ib3R0b20gPSBzdHJzdHIocy0+ dGV4dF9hbGlnbiwgIkIiKSA+IDA7CisgICAgLy8gYXZfbG9nKHMsIEFWX0xPR19ERUJVRywg Ik91dGVyIHJlY3RhbmdsZSAtIHc6ICVkLCBoOiAlZFxuIiwgcy0+Ym94X3dpZHRoLCBzLT5i b3hfaGVpZ2h0KTsKKyAgICAvLyBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiVGV4dCBwb3Np dGlvbjogJXNcbiIsIHMtPnRleHRfYWxpZ24pOworCisgICAgaWYoal9taWRkbGUpIHsKKyAg ICAgICAgb2Zmc2V0X3kgPSAocy0+Ym94X2hlaWdodCAtIG1ldHJpY3MtPmhlaWdodCkgLyAy OworICAgIH0gZWxzZSBpZihqX2JvdHRvbSkgeworICAgICAgICBvZmZzZXRfeSA9IHMtPmJv eF9oZWlnaHQgLSBtZXRyaWNzLT5oZWlnaHQ7CisgICAgfQogCi0gICAgZm9yIChpID0gMCwg cCA9IHRleHQ7ICpwOyBpKyspIHsKLSAgICAgICAgRlRfQml0bWFwIGJpdG1hcDsKLSAgICAg ICAgR2x5cGggZHVtbXkgPSB7IDAgfTsKLSAgICAgICAgR0VUX1VURjgoY29kZSwgKnAgPyAq cCsrIDogMCwgY29kZSA9IDB4ZmZmZDsgZ290byBjb250aW51ZV9vbl9pbnZhbGlkOyk7Ci1j b250aW51ZV9vbl9pbnZhbGlkOgorICAgIGNsaXBfeCA9IEZGTUlOKG1ldHJpY3MtPnJlY3Rf eCArIHMtPmJveF93aWR0aCArIHMtPmJiX3JpZ2h0LCBmcmFtZS0+d2lkdGgpOworICAgIGNs aXBfeSA9IEZGTUlOKG1ldHJpY3MtPnJlY3RfeSArIHMtPmJveF9oZWlnaHQgKyBzLT5iYl9i b3R0b20sIGZyYW1lLT5oZWlnaHQpOworCisgICAgLy8gYXZfbG9nKHMsIEFWX0xPR19ERUJV RywgIkRyYXdpbmcgdGV4dCBhdCAoJWQsICVkKSAoY2xpcF94OiAlZCwgY2xpcF95OiAlZClc biIsCisgICAgLy8gICAgIHgsIHksIGNsaXBfeCwgY2xpcF95KTsKKworICAgIGZvcihsID0g MDsgbCA8IHMtPmxpbmVfY291bnQ7ICsrbCkgeworICAgICAgICBUZXh0TGluZSAqbGluZSA9 ICZzLT5saW5lc1tsXTsKKyAgICAgICAgbGluZV93ID0gUE9TX0NFSUwobGluZS0+d2lkdGg2 NCwgNjQpOworICAgICAgICBmb3IoZyA9IDA7IGcgPCBsaW5lLT5oYl9kYXRhLmdseXBoX2Nv dW50OyArK2cpIHsKKyAgICAgICAgICAgIGluZm8gPSAmbGluZS0+Z2x5cGhzW2ddOworICAg ICAgICAgICAgZHVtbXkuZm9udHNpemUgPSBzLT5mb250c2l6ZTsKKyAgICAgICAgICAgIGR1 bW15LmNvZGUgPSBpbmZvLT5jb2RlOworICAgICAgICAgICAgZ2x5cGggPSBhdl90cmVlX2Zp bmQocy0+Z2x5cGhzLCAmZHVtbXksIGdseXBoX2NtcCwgTlVMTCk7CisgICAgICAgICAgICBp ZighZ2x5cGgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwor ICAgICAgICAgICAgfQogCi0gICAgICAgIC8qIHNraXAgbmV3IGxpbmUgY2hhcnMsIGp1c3Qg Z28gdG8gbmV3IGxpbmUgKi8KLSAgICAgICAgaWYgKGNvZGUgPT0gJ1xuJyB8fCBjb2RlID09 ICdccicgfHwgY29kZSA9PSAnXHQnKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAg ICAgICBpZHggPSBnZXRfc3VicGl4ZWxfaWR4KGluZm8tPnNoaWZ0X3g2NCwgaW5mby0+c2hp ZnRfeTY0KTsKKyAgICAgICAgICAgIGJfZ2x5cGggPSBib3JkZXJ3ID8gZ2x5cGgtPmJvcmRl cl9iZ2x5cGhbaWR4XSA6IGdseXBoLT5iZ2x5cGhbaWR4XTsKKyAgICAgICAgICAgIGJpdG1h cCA9IGJfZ2x5cGgtPmJpdG1hcDsKKyAgICAgICAgICAgIHgxID0geCArIGluZm8tPnggKyBi X2dseXBoLT5sZWZ0OworICAgICAgICAgICAgeTEgPSB5ICsgaW5mby0+eSAtIGJfZ2x5cGgt PnRvcCArIG9mZnNldF95OworICAgICAgICAgICAgdzEgPSBiaXRtYXAud2lkdGg7CisgICAg ICAgICAgICBoMSA9IGJpdG1hcC5yb3dzOworCisgICAgICAgICAgICBpZihqX2NlbnRlcikg eworICAgICAgICAgICAgICAgIHgxICs9IChzLT5ib3hfd2lkdGggLSBsaW5lX3cpIC8gMjsK KyAgICAgICAgICAgIH0gZWxzZSBpZihqX3JpZ2h0KSB7CisgICAgICAgICAgICAgICAgeDEg Kz0gcy0+Ym94X3dpZHRoIC0gbGluZV93OworICAgICAgICAgICAgfQogCi0gICAgICAgIGR1 bW15LmNvZGUgPSBjb2RlOwotICAgICAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXpl OwotICAgICAgICBnbHlwaCA9IGF2X3RyZWVfZmluZChzLT5nbHlwaHMsICZkdW1teSwgZ2x5 cGhfY21wLCBOVUxMKTsKKyAgICAgICAgICAgIC8vIE9mZnNldCBvZiB0aGUgZ2x5cGgncyBi aXRtYXAgaW4gdGhlIHZpc2libGUgcmVnaW9uCisgICAgICAgICAgICBkeCA9IGR5ID0gMDsK KyAgICAgICAgICAgIGlmKHgxIDwgbWV0cmljcy0+cmVjdF94IC0gcy0+YmJfbGVmdCkgewor ICAgICAgICAgICAgICAgIGR4ID0gbWV0cmljcy0+cmVjdF94IC0gcy0+YmJfbGVmdCAtIHgx OworICAgICAgICAgICAgICAgIHgxID0gbWV0cmljcy0+cmVjdF94IC0gcy0+YmJfbGVmdDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKHkxIDwgbWV0cmljcy0+cmVjdF95IC0g cy0+YmJfdG9wKSB7CisgICAgICAgICAgICAgICAgZHkgPSBtZXRyaWNzLT5yZWN0X3kgLSBz LT5iYl90b3AgLSB5MTsKKyAgICAgICAgICAgICAgICB5MSA9IG1ldHJpY3MtPnJlY3RfeSAt IHMtPmJiX3RvcDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBiaXRtYXAgPSBib3JkZXJ3 ID8gZ2x5cGgtPmJvcmRlcl9iaXRtYXAgOiBnbHlwaC0+Yml0bWFwOworICAgICAgICAgICAg Ly8gY2hlY2sgaWYgdGhlIGdseXBoIGlzIGVtcHR5IG9yIG91dCBvZiB0aGUgY2xpcHBpbmcg cmVnaW9uCisgICAgICAgICAgICBpZihkeCA+PSB3MSB8fCBkeSA+PSBoMSB8fCB4MSA+PSBj bGlwX3ggfHwgeTEgPj0gY2xpcF95KSB7CisgICAgICAgICAgICAgICAgLy8gYXZfbG9nKHMs IEFWX0xPR19ERUJVRywgIkdseXBoIChjb2RlOiAlZCAtIGxpbmU6ICVkIC0gZ2x5cGg6ICVk IC0gZHg6ICVkIC0gd3g6ICVkKSBpcyBlbXB0eSBvciBvdXQgb2YgdGhlIGNsaXBwaW5nIHJl Z2lvblxuIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgaW5mby0+Y29kZSwgbCwgZywgZHgs IHcxKTsKKyAgICAgICAgICAgICAgICAvLyBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiR2x5 cGggJWQgLS0gZHg6ICVkLCBkeTogJWQsIHgxOiAlZCwgeTE6ICVkLCB3MTogJWQsIGgxOiAl ZFxuIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgaW5mby0+Y29kZSwgZHgsIGR5LCB4MSwg eTEsIHcxLCBoMSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9 CiAKLSAgICAgICAgaWYgKGdseXBoLT5iaXRtYXAucGl4ZWxfbW9kZSAhPSBGVF9QSVhFTF9N T0RFX01PTk8gJiYKLSAgICAgICAgICAgIGdseXBoLT5iaXRtYXAucGl4ZWxfbW9kZSAhPSBG VF9QSVhFTF9NT0RFX0dSQVkpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OworICAgICAgICAgICAgcGR4ID0gZHggKyBkeSAqIGJpdG1hcC5waXRjaDsKKyAgICAgICAg ICAgIHcxID0gRkZNSU4oY2xpcF94IC0geDEsIHcxIC0gZHgpOworICAgICAgICAgICAgaDEg PSBGRk1JTihjbGlwX3kgLSB5MSwgaDEgLSBkeSk7CiAKLSAgICAgICAgeDEgPSBzLT5wb3Np dGlvbnNbaV0ueCtzLT54K3ggLSBib3JkZXJ3OwotICAgICAgICB5MSA9IHMtPnBvc2l0aW9u c1tpXS55K3MtPnkreSAtIGJvcmRlcnc7CisgICAgICAgICAgICAvLyBhdl9sb2cocywgQVZf TE9HX0RFQlVHLCAiRHJhd2luZyBnbHlwaCAlZFslZF0gKGxpbmU6ICVkIG51bTogJWQpIGF0 ICglZCwgJWQpIChpbmZvLng6ICVkLCBpbmZvLnk6ICVkKVxuIiwKKyAgICAgICAgICAgIC8v ICAgICBpbmZvLT5jb2RlLCBpZHgsIGwsIGcsIHgxLCB5MSwgaW5mby0+eCwgaW5mby0+eSk7 CiAKLSAgICAgICAgZmZfYmxlbmRfbWFzaygmcy0+ZGMsIGNvbG9yLAotICAgICAgICAgICAg ICAgICAgICAgIGZyYW1lLT5kYXRhLCBmcmFtZS0+bGluZXNpemUsIHdpZHRoLCBoZWlnaHQs Ci0gICAgICAgICAgICAgICAgICAgICAgYml0bWFwLmJ1ZmZlciwgYml0bWFwLnBpdGNoLAot ICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC53aWR0aCwgYml0bWFwLnJvd3MsCi0gICAg ICAgICAgICAgICAgICAgICAgYml0bWFwLnBpeGVsX21vZGUgPT0gRlRfUElYRUxfTU9ERV9N T05PID8gMCA6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgMCwgeDEsIHkxKTsKKyAgICAg ICAgICAgIGZmX2JsZW5kX21hc2soJnMtPmRjLCBjb2xvciwgZnJhbWUtPmRhdGEsIGZyYW1l LT5saW5lc2l6ZSwgY2xpcF94LCBjbGlwX3ksCisgICAgICAgICAgICAgICAgYml0bWFwLmJ1 ZmZlciArIHBkeCwgYml0bWFwLnBpdGNoLCB3MSwgaDEsIDMsIDAsIHgxLCB5MSk7CisgICAg ICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2hhcGVf dGV4dF9oYihEcmF3VGV4dENvbnRleHQgKnMsIEhhcmZidXp6RGF0YSogaGIsIGNvbnN0IGNo YXIqIHRleHQsIGludCB0ZXh0TGVuKSAKK3sKKyAgICBoYi0+YnVmID0gaGJfYnVmZmVyX2Ny ZWF0ZSgpOworICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKGhiLT5idWYsIEhCX0RJUkVD VElPTl9MVFIpOworICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KGhiLT5idWYsIEhCX1NDUklQ VF9MQVRJTik7CisgICAgaGJfYnVmZmVyX3NldF9sYW5ndWFnZShoYi0+YnVmLCBoYl9sYW5n dWFnZV9mcm9tX3N0cmluZygiZW4iLCAtMSkpOworICAgIGhiX2J1ZmZlcl9ndWVzc19zZWdt ZW50X3Byb3BlcnRpZXMoaGItPmJ1Zik7CisgICAgaGItPmZvbnQgPSBoYl9mdF9mb250X2Ny ZWF0ZShzLT5mYWNlLCBOVUxMKTsKKyAgICBoYl9mdF9mb250X3NldF9mdW5jcyhoYi0+Zm9u dCk7CisgICAgaGJfYnVmZmVyX2FkZF91dGY4KGhiLT5idWYsIHRleHQsIHRleHRMZW4sIDAs IC0xKTsKKyAgICBoYl9zaGFwZShoYi0+Zm9udCwgaGItPmJ1ZiwgTlVMTCwgMCk7CisgICAg aGItPmdseXBoX2luZm8gPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zKGhiLT5idWYsICZo Yi0+Z2x5cGhfY291bnQpOworICAgIGhiLT5nbHlwaF9wb3MgPSBoYl9idWZmZXJfZ2V0X2ds eXBoX3Bvc2l0aW9ucyhoYi0+YnVmLCAmaGItPmdseXBoX2NvdW50KTsKK30KIAotc3RhdGlj IHZvaWQgdXBkYXRlX2NvbG9yX3dpdGhfYWxwaGEoRHJhd1RleHRDb250ZXh0ICpzLCBGRkRy YXdDb2xvciAqY29sb3IsIGNvbnN0IEZGRHJhd0NvbG9yIGluY29sb3IpCitzdGF0aWMgdm9p ZCBoYl9kZXN0cm95KEhhcmZidXp6RGF0YSAqaGIpIAogewotICAgICpjb2xvciA9IGluY29s b3I7Ci0gICAgY29sb3ItPnJnYmFbM10gPSAoY29sb3ItPnJnYmFbM10gKiBzLT5hbHBoYSkg LyAyNTU7Ci0gICAgZmZfZHJhd19jb2xvcigmcy0+ZGMsIGNvbG9yLCBjb2xvci0+cmdiYSk7 CisgICAgaGJfYnVmZmVyX2Rlc3Ryb3koaGItPmJ1Zik7CisgICAgaGJfZm9udF9kZXN0cm95 KGhiLT5mb250KTsKKyAgICBoYi0+YnVmID0gTlVMTDsKKyAgICBoYi0+Zm9udCA9IE5VTEw7 CisgICAgaGItPmdseXBoX2luZm8gPSBOVUxMOworICAgIGhiLT5nbHlwaF9wb3MgPSBOVUxM OwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfYWxwaGEoRHJhd1RleHRDb250ZXh0ICpzKQor c3RhdGljIGludCBtZWFzdXJlX3RleHQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIFRleHRNZXRy aWNzICptZXRyaWNzKQogewotICAgIGRvdWJsZSBhbHBoYSA9IGF2X2V4cHJfZXZhbChzLT5h X3BleHByLCBzLT52YXJfdmFsdWVzLCAmcy0+cHJuZyk7CisgICAgRHJhd1RleHRDb250ZXh0 ICpzID0gY3R4LT5wcml2OworICAgIGNoYXIqIHRleHQgPSBzLT5leHBhbmRlZF90ZXh0LnN0 cjsKKyAgICBjaGFyICp0ZXh0ZHVwID0gYXZfc3RyZHVwKHRleHQpLCAqc3RhcnQgPSB0ZXh0 ZHVwOworICAgIGludCBudW1fY2hhcnMgPSAwOworICAgIGludCB3aWR0aDY0ID0gMCwgdzY0 ID0gMDsKKyAgICBpbnQgY3VyX21pbl95NjQgPSAwLCBmaXJzdF9tYXhfeTY0ID0gLTMyMDAw OworICAgIGludCBmaXJzdF9taW5feDY0ID0gMzIwMDAsIGxhc3RfbWF4X3g2NCA9IC0zMjAw MDsKKyAgICBpbnQgbWluX3k2NCA9IDMyMDAwLCBtYXhfeTY0ID0gLTMyMDAwLCBtaW5feDY0 ID0gMzIwMDAsIG1heF94NjQgPSAtMzIwMDA7CisgICAgaW50IGxpbmVfY291bnQgPSAwOwor ICAgIHVpbnQzMl90IGNvZGUgPSAwOworICAgIEdseXBoICpnbHlwaCA9IE5VTEw7CiAKLSAg ICBpZiAoaXNuYW4oYWxwaGEpKQotICAgICAgICByZXR1cm47CisgICAgaW50IGksIHRhYl9p ZHggPSAwLCBsYXN0X3RhYl9pZHggPSAwLCBsaW5lX29mZnNldCA9IDA7CisgICAgY2hhciog cDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIC8vIENvdW50IHRoZSBsaW5lcyBhbmQgdGhl IHRhYiBjaGFyYWN0ZXJzCisgICAgcy0+dGFiX2NvdW50ID0gMDsKKyAgICBmb3IgKGkgPSAw LCBwID0gdGV4dDsgMTsgaSsrKSB7CisgICAgICAgIEdFVF9VVEY4KGNvZGUsICpwID8gKnAr KyA6IDAsIGNvZGUgPSAweGZmZmQ7IGdvdG8gY29udGludWVfb25fZmFpbGVkOyk7Citjb250 aW51ZV9vbl9mYWlsZWQ6CisgICAgICAgIGlmKGlzX25ld2xpbmUoY29kZSkgfHwgY29kZSA9 PSAwKSB7CisgICAgICAgICAgICArK2xpbmVfY291bnQ7CisgICAgICAgICAgICBpZihjb2Rl ID09IDApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIGlmKGNvZGUgPT0gJ1x0JykgeworICAgICAgICAgICAgKytzLT50YWJfY291 bnQ7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBpZiAoYWxwaGEgPj0gMS4wKQotICAgICAg ICBzLT5hbHBoYSA9IDI1NTsKLSAgICBlbHNlIGlmIChhbHBoYSA8PSAwKQotICAgICAgICBz LT5hbHBoYSA9IDA7Ci0gICAgZWxzZQotICAgICAgICBzLT5hbHBoYSA9IDI1NiAqIGFscGhh OworICAgIC8vIEV2YWx1YXRlIHRoZSB3aWR0aCBvZiB0aGUgc3BhY2UgY2hhcmFjdGVyIGlm IG5lZWRlZCB0byByZXBsYWNlIHRhYnMKKyAgICBpZihzLT50YWJfY291bnQgPiAwICYmICFz LT5ibGFua19hZHZhbmNlNjQpIHsKKyAgICAgICAgSGFyZmJ1enpEYXRhIGhiX2RhdGE7Cisg ICAgICAgIHNoYXBlX3RleHRfaGIocywgJmhiX2RhdGEsICIgIiwgMSk7CisgICAgICAgIHMt PmJsYW5rX2FkdmFuY2U2NCA9IGhiX2RhdGEuZ2x5cGhfcG9zWzBdLnhfYWR2YW5jZTsKKyAg ICAgICAgaGJfZGVzdHJveSgmaGJfZGF0YSk7CisgICAgfQorCisgICAgcy0+bGluZV9jb3Vu dCA9IGxpbmVfY291bnQ7CisgICAgcy0+bGluZXMgPSBhdl9tYWxsb2N6KGxpbmVfY291bnQg KiBzaXplb2YoVGV4dExpbmUpKTsKKyAgICBzLT50YWJfY2x1c3RlcnMgPSBhdl9tYWxsb2N6 KHMtPnRhYl9jb3VudCAqIHNpemVvZih1aW50MzJfdCkpOworICAgIGZvcihpID0gMDsgaSA8 IHMtPnRhYl9jb3VudDsgKytpKSB7CisgICAgICAgIHMtPnRhYl9jbHVzdGVyc1tpXSA9IC0x OworICAgIH0KKworICAgIC8vIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJTdGFydGluZyB0 ZXh0IG1lYXN1cmVtZW50Li4uXG4iKTsKKyAgICBsaW5lX2NvdW50ID0gMDsKKyAgICBmb3Ig KGkgPSAwLCBwID0gdGV4dGR1cDsgMTsgaSsrKSB7CisgICAgICAgIGlmKCpwID09ICdcdCcp IHsKKyAgICAgICAgICAgIHMtPnRhYl9jbHVzdGVyc1t0YWJfaWR4KytdID0gaTsKKyAgICAg ICAgICAgICpwID0gJyAnOworICAgICAgICB9CisgICAgICAgIEdFVF9VVEY4KGNvZGUsICpw ID8gKnArKyA6IDAsIGNvZGUgPSAweGZmZmQ7IGdvdG8gY29udGludWVfb25fZmFpbGVkMjsp OworY29udGludWVfb25fZmFpbGVkMjoKKyAgICAgICAgaWYoaXNfbmV3bGluZShjb2RlKSB8 fCBjb2RlID09IDApIHsKKyAgICAgICAgICAgIFRleHRMaW5lICpjdXJfbGluZSA9ICZzLT5s aW5lc1tsaW5lX2NvdW50XTsKKyAgICAgICAgICAgIEhhcmZidXp6RGF0YSAqaGIgPSAmY3Vy X2xpbmUtPmhiX2RhdGE7CisgICAgICAgICAgICBjdXJfbGluZS0+Y2x1c3Rlcl9vZmZzZXQg PSBsaW5lX29mZnNldDsKKyAgICAgICAgICAgIHNoYXBlX3RleHRfaGIocywgaGIsIHN0YXJ0 LCBudW1fY2hhcnMpOworICAgICAgICAgICAgdzY0ID0gMDsKKyAgICAgICAgICAgIGN1cl9t aW5feTY0ID0gMzIwMDA7CisgICAgICAgICAgICBmb3IoaW50IHQgPSAwOyB0IDwgaGItPmds eXBoX2NvdW50OyArK3QpIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGlzX3RhYiA9IGxh c3RfdGFiX2lkeCA8IHMtPnRhYl9jb3VudCAmJgorICAgICAgICAgICAgICAgICAgICBoYi0+ Z2x5cGhfaW5mb1t0XS5jbHVzdGVyID09IHMtPnRhYl9jbHVzdGVyc1tsYXN0X3RhYl9pZHhd IC0gbGluZV9vZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYoaXNfdGFiKSB7CisgICAgICAg ICAgICAgICAgICAgICsrbGFzdF90YWJfaWR4OworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICByZXQgPSBsb2FkX2dseXBoKGN0eCwgJmdseXBoLCBoYi0+Z2x5cGhfaW5m b1t0XS5jb2RlcG9pbnQsIC0xLCAtMSk7CisgICAgICAgICAgICAgICAgaWYocmV0ICE9IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmKGxpbmVfY291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAg ICBmaXJzdF9tYXhfeTY0ID0gRkZNQVgoZ2x5cGgtPmJib3gueU1heCwgZmlyc3RfbWF4X3k2 NCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKHQgPT0gMCkgewor ICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIChPRkZTRVQgTEVGVCkKKyAgICAgICAgICAg ICAgICAgICAgLy8gdzY0ICs9IGdseXBoLT5iYm94LnhNaW47CisgICAgICAgICAgICAgICAg ICAgIGN1cl9saW5lLT5vZmZzZXRfbGVmdDY0ID0gZ2x5cGgtPmJib3gueE1pbjsKKyAgICAg ICAgICAgICAgICAgICAgZmlyc3RfbWluX3g2NCA9IEZGTUlOKGdseXBoLT5iYm94LnhNaW4s IGZpcnN0X21pbl94NjQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp Zih0ID09IGhiLT5nbHlwaF9jb3VudCAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdzY0 ICs9IGdseXBoLT5iYm94LnhNYXg7CisgICAgICAgICAgICAgICAgICAgIGxhc3RfbWF4X3g2 NCA9IEZGTUFYKGdseXBoLT5iYm94LnhNYXgsIGxhc3RfbWF4X3g2NCk7CisgICAgICAgICAg ICAgICAgICAgIGN1cl9saW5lLT5vZmZzZXRfcmlnaHQ2NCA9IGdseXBoLT5iYm94LnhNYXg7 CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaXNf dGFiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHMtPmJsYW5rX2Fk dmFuY2U2NCAqIHMtPnRhYnNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICB3NjQgPSAo dzY0IC8gc2l6ZSArIDEpICogc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIHc2NCArPSBoYi0+Z2x5cGhfcG9zW3RdLnhfYWR2 YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBjdXJfbWluX3k2NCA9IEZGTUlOKGdseXBoLT5iYm94LnlNaW4sIGN1cl9t aW5feTY0KTsKKyAgICAgICAgICAgICAgICBtaW5feTY0ID0gRkZNSU4oZ2x5cGgtPmJib3gu eU1pbiwgbWluX3k2NCk7CisgICAgICAgICAgICAgICAgbWF4X3k2NCA9IEZGTUFYKGdseXBo LT5iYm94LnlNYXgsIG1heF95NjQpOworICAgICAgICAgICAgICAgIG1pbl94NjQgPSBGRk1J TihnbHlwaC0+YmJveC54TWluLCBtaW5feDY0KTsKKyAgICAgICAgICAgICAgICBtYXhfeDY0 ID0gRkZNQVgoZ2x5cGgtPmJib3gueE1heCwgbWF4X3g2NCk7CisKKyAgICAgICAgICAgICAg ICAvLyBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiICAgIEdseXBoOiAlZCAtLSB5TWluOiAl bGQgLS0geU1heDogJWxkIC0tIHhNaW46ICVsZCAtLSB4TWF4OiAlbGRcbiIsCisgICAgICAg ICAgICAgICAgLy8gICAgIGhiLT5nbHlwaF9pbmZvW3RdLmNvZGVwb2ludCwgZ2x5cGgtPmJi b3gueU1pbiwgZ2x5cGgtPmJib3gueU1heCwgZ2x5cGgtPmJib3gueE1pbiwgZ2x5cGgtPmJi b3gueE1heCk7CisgICAgICAgICAgICAgICAgLy8gYXZfbG9nKHMsIEFWX0xPR19ERUJVRywg IiAgICAgIG1pbl95NjQ6ICVkIC0tIG1heF95NjQ6ICVkIC0tIG1pbl94NjQ6ICVkIC0tIG1h eF94NjQ6ICVkXG4iLAorICAgICAgICAgICAgICAgIC8vICAgICBtaW5feTY0LCBtYXhfeTY0 LCBtaW5feDY0LCBtYXhfeDY0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYo cmV0ID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPIChPRkZTRVQgTEVGVCkKKyAg ICAgICAgICAgICAgICAvLyBjdXJfbGluZS0+d2lkdGg2NCA9IHc2NCAtIGN1cl9saW5lLT5v ZmZzZXRfbGVmdDY0OworICAgICAgICAgICAgICAgIGN1cl9saW5lLT53aWR0aDY0ID0gdzY0 OworCisgICAgICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIiAgTGluZTog JWQgLS0gZ2x5cGhzIGNvdW50OiAlZCAtIHdpZHRoNjQ6ICVkIC0gb2Zmc2V0X2xlZnQ2NDog JWQgLSBvZmZzZXRfcmlnaHQ2NDogJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBsaW5l X2NvdW50LCBoYi0+Z2x5cGhfY291bnQsIGN1cl9saW5lLT53aWR0aDY0LCBjdXJfbGluZS0+ b2Zmc2V0X2xlZnQ2NCwgY3VyX2xpbmUtPm9mZnNldF9yaWdodDY0KTsKKworICAgICAgICAg ICAgICAgIGlmKHc2NCA+IHdpZHRoNjQpIHsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg2 NCA9IHc2NDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbnVtX2NoYXJz ID0gLTE7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBwOworICAgICAgICAgICAgICAgICsr bGluZV9jb3VudDsKKyAgICAgICAgICAgICAgICBsaW5lX29mZnNldCA9IGkgKyAxOworICAg ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoY29kZSA9PSAwIHx8IHJldCAh PSAwKSBicmVhazsKKyAgICAgICAgKytudW1fY2hhcnM7CisgICAgfQorCisgICAgaWYocmV0 ID09IDApIHsKKyAgICAgICAgbWV0cmljcy0+bGluZV9oZWlnaHQ2NCA9IHMtPmZhY2UtPnNp emUtPm1ldHJpY3MuaGVpZ2h0OworICAgICAgICAKKyAgICAgICAgLy8gVE9ETyAoTEVGVCBP RkZTRVQpIAorICAgICAgICAvLyBtZXRyaWNzLT53aWR0aCA9IFBPU19DRUlMKHdpZHRoNjQg LSBmaXJzdF9taW5feDY0LCA2NCk7CisgICAgICAgIG1ldHJpY3MtPndpZHRoID0gUE9TX0NF SUwod2lkdGg2NCwgNjQpOworICAgICAgICBpZihzLT55X2FsaWduID09IFlBX0ZPTlQpIHsK KyAgICAgICAgICAgIG1ldHJpY3MtPmhlaWdodCA9IFBPU19DRUlMKG1ldHJpY3MtPmxpbmVf aGVpZ2h0NjQgKiBsaW5lX2NvdW50LCA2NCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBpbnQgaGVpZ2h0NjQgPSAobWV0cmljcy0+bGluZV9oZWlnaHQ2NCArIHMtPmxpbmVf c3BhY2luZyAqIDY0KSAqCisgICAgICAgICAgICAgICAgKEZGTUFYKDAsIGxpbmVfY291bnQg LSAxKSkgKyBmaXJzdF9tYXhfeTY0IC0gY3VyX21pbl95NjQ7CisgICAgICAgICAgICBtZXRy aWNzLT5oZWlnaHQgPSBQT1NfQ0VJTChoZWlnaHQ2NCwgNjQpOworICAgICAgICB9CisgICAg ICAgIG1ldHJpY3MtPm9mZnNldF90b3A2NCA9IGZpcnN0X21heF95NjQ7CisgICAgICAgIG1l dHJpY3MtPm9mZnNldF9yaWdodDY0ID0gbGFzdF9tYXhfeDY0OworICAgICAgICBtZXRyaWNz LT5vZmZzZXRfYm90dG9tNjQgPSBjdXJfbWluX3k2NDsKKyAgICAgICAgbWV0cmljcy0+b2Zm c2V0X2xlZnQ2NCA9IGZpcnN0X21pbl94NjQ7CisgICAgICAgIG1ldHJpY3MtPm1pbl94NjQg PSBtaW5feDY0OworICAgICAgICBtZXRyaWNzLT5taW5feTY0ID0gbWluX3k2NDsKKyAgICAg ICAgbWV0cmljcy0+bWF4X3g2NCA9IG1heF94NjQ7CisgICAgICAgIG1ldHJpY3MtPm1heF95 NjQgPSBtYXhfeTY0OworCisgICAgICAgIC8vIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICIg IFRleHQ6IHdpZHRoOiAlZCB8IGhlaWdodDogJWRcbiIsIG1ldHJpY3MtPndpZHRoLCBtZXRy aWNzLT5oZWlnaHQpOworICAgICAgICAvLyBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiICAg ICAgb2ZmX3Q2NDogJWQgfCBvZmZfcjY0OiAlZCB8IG9mZl9iNjQ6ICVkIHwgb2ZmX2w2NDog JWRcbiIsCisgICAgICAgIC8vICAgICBtZXRyaWNzLT5vZmZzZXRfdG9wNjQsIG1ldHJpY3Mt Pm9mZnNldF9yaWdodDY0LCBtZXRyaWNzLT5vZmZzZXRfYm90dG9tNjQsIG1ldHJpY3MtPm9m ZnNldF9sZWZ0NjQpOworICAgICAgICAvLyBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiICAg ICAgbWluX3g2NDogJWQgfCBtaW5feTY0OiAlZCB8IG1heF94NjQ6ICVkIHwgbWF4X3k2NDog JWRcbiIsCisgICAgICAgIC8vICAgICBtZXRyaWNzLT5taW5feDY0LCBtZXRyaWNzLT5taW5f eTY0LCBtZXRyaWNzLT5tYXhfeDY0LCBtZXRyaWNzLT5tYXhfeTY0KTsKKyAgICAgICAgLy8g YXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIlRleHQgbWVhc3VyZW1lbnQgY29tcGxldGVkXG4i KTsKKyAgICB9CisKKyAgICBhdl9mcmVlKHRleHRkdXApOworICAgIHJldHVybiByZXQ7CiB9 CiAKLXN0YXRpYyBpbnQgZHJhd190ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1l ICpmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkK K3N0YXRpYyBpbnQgZHJhd190ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICpm cmFtZSkKIHsKICAgICBEcmF3VGV4dENvbnRleHQgKnMgPSBjdHgtPnByaXY7CiAgICAgQVZG aWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsKLQotICAgIHVpbnQzMl90IGNv ZGUgPSAwLCBwcmV2X2NvZGUgPSAwOwotICAgIGludCB4ID0gMCwgeSA9IDAsIGkgPSAwLCBy ZXQ7Ci0gICAgaW50IG1heF90ZXh0X2xpbmVfdyA9IDAsIGxlbjsKLSAgICBpbnQgYm94X3cs IGJveF9oOwotICAgIGNoYXIgKnRleHQ7Ci0gICAgdWludDhfdCAqcDsKLSAgICBpbnQgeV9t aW4gPSAzMjAwMCwgeV9tYXggPSAtMzIwMDA7Ci0gICAgaW50IHhfbWluID0gMzIwMDAsIHhf bWF4ID0gLTMyMDAwOwotICAgIEZUX1ZlY3RvciBkZWx0YTsKLSAgICBHbHlwaCAqZ2x5cGgg PSBOVUxMLCAqcHJldl9nbHlwaCA9IE5VTEw7Ci0gICAgR2x5cGggZHVtbXkgPSB7IDAgfTsK KyAgICBpbnQgeCA9IDAsIHkgPSAwLCByZXQ7CisgICAgaW50IHNoaWZ0X3g2NCwgc2hpZnRf eTY0OworICAgIGludCB4NjQsIHk2NDsKKyAgICBpbnQgb2Zmc2V0X2xlZnQgPSAwOworICAg IEdseXBoICpnbHlwaCA9IE5VTEw7CiAKICAgICB0aW1lX3Qgbm93ID0gdGltZSgwKTsKICAg ICBzdHJ1Y3QgdG0gbHRpbWU7CkBAIC0xNDEzLDYgKzE4ODIsMTcgQEAgc3RhdGljIGludCBk cmF3X3RleHQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmZyYW1lLAogICAgIEZG RHJhd0NvbG9yIGJvcmRlcmNvbG9yOwogICAgIEZGRHJhd0NvbG9yIGJveGNvbG9yOwogCisg ICAgaW50IHdpZHRoID0gZnJhbWUtPndpZHRoOworICAgIGludCBoZWlnaHQgPSBmcmFtZS0+ aGVpZ2h0OworICAgIGludCByZWNfeCA9IDAsIHJlY195ID0gMCwgcmVjX3dpZHRoID0gMCwg cmVjX2hlaWdodCA9IDA7CisgICAgaW50IGlzX291dHNpZGUgPSAwOworICAgIGludCBsYXN0 X3RhYl9pZHggPSAwOworCisgICAgVGV4dE1ldHJpY3MgbWV0cmljczsKKworICAgIC8vIGF2 X2xvZyhzLCBBVl9MT0dfREVCVUcsICJhc2NlbmQ6ICVsZCBkZXNjZW50OiAlbGQgaGVpZ2h0 OiAlbGRcbiIsCisgICAgLy8gICAgIHMtPmZhY2UtPnNpemUtPm1ldHJpY3MuYXNjZW5kZXIs IHMtPmZhY2UtPnNpemUtPm1ldHJpY3MuZGVzY2VuZGVyLCBzLT5mYWNlLT5zaXplLT5tZXRy aWNzLmhlaWdodCk7CisKICAgICBhdl9icHJpbnRfY2xlYXIoYnApOwogCiAgICAgaWYocy0+ YmFzZXRpbWUgIT0gQVZfTk9QVFNfVkFMVUUpCkBAIC0xNDQxLDEzICsxOTIxLDYgQEAgc3Rh dGljIGludCBkcmF3X3RleHQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmZyYW1l LAogCiAgICAgaWYgKCFhdl9icHJpbnRfaXNfY29tcGxldGUoYnApKQogICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIHRleHQgPSBzLT5leHBhbmRlZF90ZXh0LnN0cjsK LSAgICBpZiAoKGxlbiA9IHMtPmV4cGFuZGVkX3RleHQubGVuKSA+IHMtPm5iX3Bvc2l0aW9u cykgewotICAgICAgICBpZiAoIShzLT5wb3NpdGlvbnMgPQotICAgICAgICAgICAgICBhdl9y ZWFsbG9jKHMtPnBvc2l0aW9ucywgbGVuKnNpemVvZigqcy0+cG9zaXRpb25zKSkpKQotICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgcy0+bmJfcG9zaXRp b25zID0gbGVuOwotICAgIH0KIAogICAgIGlmIChzLT5mb250Y29sb3JfZXhwclswXSkgewog ICAgICAgICAvKiBJZiBleHByZXNzaW9uIGlzIHNldCwgZXZhbHVhdGUgYW5kIHJlcGxhY2Ug dGhlIHN0YXRpYyB2YWx1ZSAqLwpAQCAtMTQ2Myw4NSArMTkzNiwyOCBAQCBzdGF0aWMgaW50 IGRyYXdfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAgICAg ICAgIGZmX2RyYXdfY29sb3IoJnMtPmRjLCAmcy0+Zm9udGNvbG9yLCBzLT5mb250Y29sb3Iu cmdiYSk7CiAgICAgfQogCi0gICAgeCA9IDA7Ci0gICAgeSA9IDA7Ci0KLSAgICBpZiAoKHJl dCA9IHVwZGF0ZV9mb250c2l6ZShjdHgpKSA8IDApCisgICAgaWYgKChyZXQgPSB1cGRhdGVf Zm9udHNpemUoY3R4KSkgPCAwKSB7CiAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAvKiBs b2FkIGFuZCBjYWNoZSBnbHlwaHMgKi8KLSAgICBmb3IgKGkgPSAwLCBwID0gdGV4dDsgKnA7 IGkrKykgewotICAgICAgICBHRVRfVVRGOChjb2RlLCAqcCA/ICpwKysgOiAwLCBjb2RlID0g MHhmZmZkOyBnb3RvIGNvbnRpbnVlX29uX2ludmFsaWQ7KTsKLWNvbnRpbnVlX29uX2ludmFs aWQ6Ci0KLSAgICAgICAgLyogZ2V0IGdseXBoICovCi0gICAgICAgIGR1bW15LmNvZGUgPSBj b2RlOwotICAgICAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXplOwotICAgICAgICBn bHlwaCA9IGF2X3RyZWVfZmluZChzLT5nbHlwaHMsICZkdW1teSwgZ2x5cGhfY21wLCBOVUxM KTsKLSAgICAgICAgaWYgKCFnbHlwaCkgewotICAgICAgICAgICAgcmV0ID0gbG9hZF9nbHlw aChjdHgsICZnbHlwaCwgY29kZSk7Ci0gICAgICAgICAgICBpZiAocmV0IDwgMCkKLSAgICAg ICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgeV9taW4gPSBG Rk1JTihnbHlwaC0+YmJveC55TWluLCB5X21pbik7Ci0gICAgICAgIHlfbWF4ID0gRkZNQVgo Z2x5cGgtPmJib3gueU1heCwgeV9tYXgpOwotICAgICAgICB4X21pbiA9IEZGTUlOKGdseXBo LT5iYm94LnhNaW4sIHhfbWluKTsKLSAgICAgICAgeF9tYXggPSBGRk1BWChnbHlwaC0+YmJv eC54TWF4LCB4X21heCk7CiAgICAgfQotICAgIHMtPm1heF9nbHlwaF9oID0geV9tYXggLSB5 X21pbjsKLSAgICBzLT5tYXhfZ2x5cGhfdyA9IHhfbWF4IC0geF9taW47Ci0KLSAgICAvKiBj b21wdXRlIGFuZCBzYXZlIHBvc2l0aW9uIGZvciBlYWNoIGdseXBoICovCi0gICAgZ2x5cGgg PSBOVUxMOwotICAgIGZvciAoaSA9IDAsIHAgPSB0ZXh0OyAqcDsgaSsrKSB7Ci0gICAgICAg IEdFVF9VVEY4KGNvZGUsICpwID8gKnArKyA6IDAsIGNvZGUgPSAweGZmZmQ7IGdvdG8gY29u dGludWVfb25faW52YWxpZDI7KTsKLWNvbnRpbnVlX29uX2ludmFsaWQyOgogCi0gICAgICAg IC8qIHNraXAgdGhlIFxuIGluIHRoZSBzZXF1ZW5jZSBcclxuICovCi0gICAgICAgIGlmIChw cmV2X2NvZGUgPT0gJ1xyJyAmJiBjb2RlID09ICdcbicpCi0gICAgICAgICAgICBjb250aW51 ZTsKLQotICAgICAgICBwcmV2X2NvZGUgPSBjb2RlOwotICAgICAgICBpZiAoaXNfbmV3bGlu ZShjb2RlKSkgewotCi0gICAgICAgICAgICBtYXhfdGV4dF9saW5lX3cgPSBGRk1BWChtYXhf dGV4dF9saW5lX3csIHgpOwotICAgICAgICAgICAgeSArPSBzLT5tYXhfZ2x5cGhfaCArIHMt PmxpbmVfc3BhY2luZzsKLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBnZXQgZ2x5cGggKi8KLSAgICAgICAgcHJl dl9nbHlwaCA9IGdseXBoOwotICAgICAgICBkdW1teS5jb2RlID0gY29kZTsKLSAgICAgICAg ZHVtbXkuZm9udHNpemUgPSBzLT5mb250c2l6ZTsKLSAgICAgICAgZ2x5cGggPSBhdl90cmVl X2ZpbmQocy0+Z2x5cGhzLCAmZHVtbXksIGdseXBoX2NtcCwgTlVMTCk7Ci0KLSAgICAgICAg Lyoga2VybmluZyAqLwotICAgICAgICBpZiAocy0+dXNlX2tlcm5pbmcgJiYgcHJldl9nbHlw aCAmJiBnbHlwaC0+Y29kZSkgewotICAgICAgICAgICAgRlRfR2V0X0tlcm5pbmcocy0+ZmFj ZSwgcHJldl9nbHlwaC0+Y29kZSwgZ2x5cGgtPmNvZGUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBmdF9rZXJuaW5nX2RlZmF1bHQsICZkZWx0YSk7Ci0gICAgICAgICAgICB4ICs9 IGRlbHRhLnggPj4gNjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHNhdmUgcG9zaXRpb24g Ki8KLSAgICAgICAgcy0+cG9zaXRpb25zW2ldLnggPSB4ICsgZ2x5cGgtPmJpdG1hcF9sZWZ0 OwotICAgICAgICBzLT5wb3NpdGlvbnNbaV0ueSA9IHkgLSBnbHlwaC0+Yml0bWFwX3RvcCAr IHlfbWF4OwotICAgICAgICBpZiAoY29kZSA9PSAnXHQnKSB4ICA9ICh4IC8gcy0+dGFic2l6 ZSArIDEpKnMtPnRhYnNpemU7Ci0gICAgICAgIGVsc2UgICAgICAgICAgICAgIHggKz0gZ2x5 cGgtPmFkdmFuY2U7Ci0gICAgfQorICAgIG1lYXN1cmVfdGV4dChjdHgsICZtZXRyaWNzKTsK IAotICAgIG1heF90ZXh0X2xpbmVfdyA9IEZGTUFYKHgsIG1heF90ZXh0X2xpbmVfdyk7Cisg ICAgcy0+bWF4X2dseXBoX2ggPSBQT1NfQ0VJTChtZXRyaWNzLm1heF95NjQgLSBtZXRyaWNz Lm1pbl95NjQsIDY0KTsKKyAgICBzLT5tYXhfZ2x5cGhfdyA9IFBPU19DRUlMKG1ldHJpY3Mu bWF4X3g2NCAtIG1ldHJpY3MubWluX3g2NCwgNjQpOwogCi0gICAgcy0+dmFyX3ZhbHVlc1tW QVJfVFddID0gcy0+dmFyX3ZhbHVlc1tWQVJfVEVYVF9XXSA9IG1heF90ZXh0X2xpbmVfdzsK LSAgICBzLT52YXJfdmFsdWVzW1ZBUl9USF0gPSBzLT52YXJfdmFsdWVzW1ZBUl9URVhUX0hd ID0geSArIHMtPm1heF9nbHlwaF9oOworICAgIHMtPnZhcl92YWx1ZXNbVkFSX1RXXSA9IHMt PnZhcl92YWx1ZXNbVkFSX1RFWFRfV10gPSBtZXRyaWNzLndpZHRoOworICAgIHMtPnZhcl92 YWx1ZXNbVkFSX1RIXSA9IHMtPnZhcl92YWx1ZXNbVkFSX1RFWFRfSF0gPSBtZXRyaWNzLmhl aWdodDsKIAogICAgIHMtPnZhcl92YWx1ZXNbVkFSX01BWF9HTFlQSF9XXSA9IHMtPm1heF9n bHlwaF93OwogICAgIHMtPnZhcl92YWx1ZXNbVkFSX01BWF9HTFlQSF9IXSA9IHMtPm1heF9n bHlwaF9oOwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX01BWF9HTFlQSF9BXSA9IHMtPnZhcl92 YWx1ZXNbVkFSX0FTQ0VOVCBdID0geV9tYXg7Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfTUFY X0dMWVBIX0RdID0gcy0+dmFyX3ZhbHVlc1tWQVJfREVTQ0VOVF0gPSB5X21pbjsKKyAgICBz LT52YXJfdmFsdWVzW1ZBUl9NQVhfR0xZUEhfQV0gPSBzLT52YXJfdmFsdWVzW1ZBUl9BU0NF TlRdID0gUE9TX0NFSUwobWV0cmljcy5tYXhfeTY0LCA2NCk7CisgICAgcy0+dmFyX3ZhbHVl c1tWQVJfRk9OVF9BXSA9IHMtPmZhY2UtPnNpemUtPm1ldHJpY3MuYXNjZW5kZXIgLyA2NDsK KyAgICBzLT52YXJfdmFsdWVzW1ZBUl9NQVhfR0xZUEhfRF0gPSBzLT52YXJfdmFsdWVzW1ZB Ul9ERVNDRU5UXSA9IFBPU19DRUlMKG1ldHJpY3MubWluX3k2NCwgNjQpOworICAgIHMtPnZh cl92YWx1ZXNbVkFSX0ZPTlRfRF0gPSAtcy0+ZmFjZS0+c2l6ZS0+bWV0cmljcy5kZXNjZW5k ZXIgLyA2NDsKIAotICAgIHMtPnZhcl92YWx1ZXNbVkFSX0xJTkVfSF0gPSBzLT52YXJfdmFs dWVzW1ZBUl9MSF0gPSBzLT5tYXhfZ2x5cGhfaDsKKyAgICBzLT52YXJfdmFsdWVzW1ZBUl9U T1BfQV0gPSBQT1NfQ0VJTChtZXRyaWNzLm9mZnNldF90b3A2NCwgNjQpOworICAgIHMtPnZh cl92YWx1ZXNbVkFSX0JPVFRPTV9EXSA9IFBPU19DRUlMKG1ldHJpY3Mub2Zmc2V0X2JvdHRv bTY0LCA2NCk7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfTElORV9IXSA9IHMtPnZhcl92YWx1 ZXNbVkFSX0xIXSA9IG1ldHJpY3MubGluZV9oZWlnaHQ2NCAvIDY0LjsKIAogICAgIGlmIChz LT50ZXh0X3NvdXJjZSA9PSBBVl9GUkFNRV9EQVRBX0RFVEVDVElPTl9CQk9YRVMpIHsKICAg ICAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfWF0gPSBzLT54OwpAQCAtMTU1OSw1NiArMTk3NSwx NzYgQEAgY29udGludWVfb25faW52YWxpZDI6CiAgICAgdXBkYXRlX2NvbG9yX3dpdGhfYWxw aGEocywgJmJvcmRlcmNvbG9yLCBzLT5ib3JkZXJjb2xvcik7CiAgICAgdXBkYXRlX2NvbG9y X3dpdGhfYWxwaGEocywgJmJveGNvbG9yICAgLCBzLT5ib3hjb2xvciAgICk7CiAKLSAgICBi b3hfdyA9IG1heF90ZXh0X2xpbmVfdzsKLSAgICBib3hfaCA9IHkgKyBzLT5tYXhfZ2x5cGhf aDsKKyAgICBpZiAocy0+ZHJhd19ib3ggJiYgcy0+Ym94Ym9yZGVydykgeworICAgICAgICBp bnQgYmJzaXplWzRdOworICAgICAgICBpbnQgY291bnQ7CisgICAgICAgIGNvdW50ID0gc3Ry aW5nX3RvX2FycmF5KHMtPmJveGJvcmRlcncsIGJic2l6ZSwgNCk7CisgICAgICAgIGlmKGNv dW50ID09IDEpIHsKKyAgICAgICAgICAgIHMtPmJiX3RvcCA9IHMtPmJiX3JpZ2h0ID0gcy0+ YmJfYm90dG9tID0gcy0+YmJfbGVmdCA9IGJic2l6ZVswXTsKKyAgICAgICAgfSBlbHNlIGlm KGNvdW50ID09IDIpIHsKKyAgICAgICAgICAgIHMtPmJiX3RvcCA9IHMtPmJiX2JvdHRvbSA9 IGJic2l6ZVswXTsKKyAgICAgICAgICAgIHMtPmJiX3JpZ2h0ID0gcy0+YmJfbGVmdCA9IGJi c2l6ZVsxXTsKKyAgICAgICAgfSBlbHNlIGlmKGNvdW50ID09IDMpIHsKKyAgICAgICAgICAg IHMtPmJiX3RvcCA9IGJic2l6ZVswXTsKKyAgICAgICAgICAgIHMtPmJiX3JpZ2h0ID0gcy0+ YmJfbGVmdCA9IGJic2l6ZVsxXTsKKyAgICAgICAgICAgIHMtPmJiX2JvdHRvbSA9IGJic2l6 ZVsyXTsKKyAgICAgICAgfSBlbHNlIGlmKGNvdW50ID09IDQpIHsKKyAgICAgICAgICAgIHMt PmJiX3RvcCA9IGJic2l6ZVswXTsKKyAgICAgICAgICAgIHMtPmJiX3JpZ2h0ID0gYmJzaXpl WzFdOworICAgICAgICAgICAgcy0+YmJfYm90dG9tID0gYmJzaXplWzJdOworICAgICAgICAg ICAgcy0+YmJfbGVmdCA9IGJic2l6ZVszXTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg ICAgICAgIHMtPmJiX3RvcCA9IHMtPmJiX3JpZ2h0ID0gcy0+YmJfYm90dG9tID0gcy0+YmJf bGVmdCA9IDA7CisgICAgfQogCiAgICAgaWYgKHMtPmZpeF9ib3VuZHMpIHsKLQogICAgICAg ICAvKiBjYWxjdWxhdGUgZm9vdHByaW50IG9mIHRleHQgZWZmZWN0cyAqLwotICAgICAgICBp bnQgYm94b2Zmc2V0ICAgICA9IHMtPmRyYXdfYm94ID8gRkZNQVgocy0+Ym94Ym9yZGVydywg MCkgOiAwOwogICAgICAgICBpbnQgYm9yZGVyb2Zmc2V0ICA9IHMtPmJvcmRlcncgID8gRkZN QVgocy0+Ym9yZGVydywgMCkgOiAwOwogCi0gICAgICAgIGludCBvZmZzZXRsZWZ0ID0gRkZN QVgzKGJveG9mZnNldCwgYm9yZGVyb2Zmc2V0LAorICAgICAgICBpbnQgb2Zmc2V0bGVmdCA9 IEZGTUFYMyhGRk1BWChzLT5iYl9sZWZ0LCAwKSwgYm9yZGVyb2Zmc2V0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocy0+c2hhZG93eCA8IDAgPyBGRkFCUyhzLT5zaGFk b3d4KSA6IDApKTsKLSAgICAgICAgaW50IG9mZnNldHRvcCA9IEZGTUFYMyhib3hvZmZzZXQs IGJvcmRlcm9mZnNldCwKKyAgICAgICAgaW50IG9mZnNldHRvcCA9IEZGTUFYMyhGRk1BWChz LT5iYl90b3AsIDApLCBib3JkZXJvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzLT5zaGFkb3d5IDwgMCA/IEZGQUJTKHMtPnNoYWRvd3kpIDogMCkpOwotCi0g ICAgICAgIGludCBvZmZzZXRyaWdodCA9IEZGTUFYMyhib3hvZmZzZXQsIGJvcmRlcm9mZnNl dCwKKyAgICAgICAgaW50IG9mZnNldHJpZ2h0ID0gRkZNQVgzKEZGTUFYKHMtPmJiX3JpZ2h0 LCAwKSwgYm9yZGVyb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHMtPnNoYWRvd3ggPiAwID8gcy0+c2hhZG93eCA6IDApKTsKLSAgICAgICAgaW50IG9mZnNl dGJvdHRvbSA9IEZGTUFYMyhib3hvZmZzZXQsIGJvcmRlcm9mZnNldCwKKyAgICAgICAgaW50 IG9mZnNldGJvdHRvbSA9IEZGTUFYMyhGRk1BWChzLT5iYl9ib3R0b20sIDApLCBib3JkZXJv ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPnNoYWRvd3kg PiAwID8gcy0+c2hhZG93eSA6IDApKTsKIAotCiAgICAgICAgIGlmIChzLT54IC0gb2Zmc2V0 bGVmdCA8IDApIHMtPnggPSBvZmZzZXRsZWZ0OwogICAgICAgICBpZiAocy0+eSAtIG9mZnNl dHRvcCA8IDApICBzLT55ID0gb2Zmc2V0dG9wOwogCi0gICAgICAgIGlmIChzLT54ICsgYm94 X3cgKyBvZmZzZXRyaWdodCA+IHdpZHRoKQotICAgICAgICAgICAgcy0+eCA9IEZGTUFYKHdp ZHRoIC0gYm94X3cgLSBvZmZzZXRyaWdodCwgMCk7Ci0gICAgICAgIGlmIChzLT55ICsgYm94 X2ggKyBvZmZzZXRib3R0b20gPiBoZWlnaHQpCi0gICAgICAgICAgICBzLT55ID0gRkZNQVgo aGVpZ2h0IC0gYm94X2ggLSBvZmZzZXRib3R0b20sIDApOworICAgICAgICBpZiAocy0+eCAr IG1ldHJpY3Mud2lkdGggKyBvZmZzZXRyaWdodCA+IHdpZHRoKQorICAgICAgICAgICAgcy0+ eCA9IEZGTUFYKHdpZHRoIC0gbWV0cmljcy53aWR0aCAtIG9mZnNldHJpZ2h0LCAwKTsKKyAg ICAgICAgaWYgKHMtPnkgKyBtZXRyaWNzLmhlaWdodCArIG9mZnNldGJvdHRvbSA+IGhlaWdo dCkKKyAgICAgICAgICAgIHMtPnkgPSBGRk1BWChoZWlnaHQgLSBtZXRyaWNzLmhlaWdodCAt IG9mZnNldGJvdHRvbSwgMCk7CiAgICAgfQogCi0gICAgLyogZHJhdyBib3ggKi8KLSAgICBp ZiAocy0+ZHJhd19ib3gpCi0gICAgICAgIGZmX2JsZW5kX3JlY3RhbmdsZSgmcy0+ZGMsICZi b3hjb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5kYXRhLCBmcmFt ZS0+bGluZXNpemUsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBzLT54IC0gcy0+Ym94Ym9yZGVydywgcy0+eSAtIHMtPmJveGJvcmRlcncsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBib3hfdyArIHMtPmJveGJvcmRlcncgKiAyLCBib3hfaCAr IHMtPmJveGJvcmRlcncgKiAyKTsKKyAgICB4ID0gMDsKKyAgICB5ID0gMDsKKyAgICB4NjQg PSAoaW50KShzLT54ICogNjQuKTsKKyAgICBpZihzLT55X2FsaWduID09IFlBX0ZPTlQpIHsK KyAgICAgICAgeTY0ID0gKGludCkocy0+eSAqIDY0LiArIHMtPmZhY2UtPnNpemUtPm1ldHJp Y3MuYXNjZW5kZXIpOworICAgIH0gZWxzZSBpZihzLT55X2FsaWduID09IFlBX0JBU0VMSU5F KSB7CisgICAgICAgIHk2NCA9IChpbnQpKHMtPnkgKiA2NC4pOworICAgIH0gZWxzZSB7Cisg ICAgICAgIHk2NCA9IChpbnQpKHMtPnkgKiA2NC4gKyBtZXRyaWNzLm9mZnNldF90b3A2NCk7 CisgICAgfQogCi0gICAgaWYgKHMtPnNoYWRvd3ggfHwgcy0+c2hhZG93eSkgewotICAgICAg ICBpZiAoKHJldCA9IGRyYXdfZ2x5cGhzKHMsIGZyYW1lLCB3aWR0aCwgaGVpZ2h0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFkb3djb2xvciwgcy0+c2hhZG93eCwg cy0+c2hhZG93eSwgMCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgZm9y KGludCBsID0gMDsgbCA8IHMtPmxpbmVfY291bnQ7ICsrbCkgeworICAgICAgICBUZXh0TGlu ZSAqbGluZSA9ICZzLT5saW5lc1tsXTsKKyAgICAgICAgSGFyZmJ1enpEYXRhICpoYiA9ICZs aW5lLT5oYl9kYXRhOworICAgICAgICBsaW5lLT5nbHlwaHMgPSBhdl9tYWxsb2N6KGhiLT5n bHlwaF9jb3VudCAqIHNpemVvZihHbHlwaEluZm8pKTsKKworICAgICAgICBmb3IoaW50IHQg PSAwOyB0IDwgaGItPmdseXBoX2NvdW50OyArK3QpIHsKKyAgICAgICAgICAgIEdseXBoSW5m byAqZ19pbmZvID0gJmxpbmUtPmdseXBoc1t0XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgaXNf dGFiID0gbGFzdF90YWJfaWR4IDwgcy0+dGFiX2NvdW50ICYmCisgICAgICAgICAgICAgICAg aGItPmdseXBoX2luZm9bdF0uY2x1c3RlciA9PSBzLT50YWJfY2x1c3RlcnNbbGFzdF90YWJf aWR4XSAtIGxpbmUtPmNsdXN0ZXJfb2Zmc2V0OworICAgICAgICAgICAgaW50IHRydWVfeCwg dHJ1ZV95OworICAgICAgICAgICAgaWYoaXNfdGFiKSB7CisgICAgICAgICAgICAgICAgKyts YXN0X3RhYl9pZHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnVlX3ggPSB4ICsg aGItPmdseXBoX3Bvc1t0XS54X29mZnNldDsKKyAgICAgICAgICAgIHRydWVfeSA9IHkgKyBo Yi0+Z2x5cGhfcG9zW3RdLnlfb2Zmc2V0OworICAgICAgICAgICAgc2hpZnRfeDY0ID0gKCgo eDY0ICsgdHJ1ZV94KSA+PiA0KSAmIDBiMDAxMSkgPDwgNDsKKyAgICAgICAgICAgIHNoaWZ0 X3k2NCA9ICgoNCAtICgoKHk2NCArIHRydWVfeSkgPj4gNCkgJiAwYjAwMTEpKSAmIDBiMDAx MSkgPDwgNDsKKworICAgICAgICAgICAgcmV0ID0gbG9hZF9nbHlwaChjdHgsICZnbHlwaCwg aGItPmdseXBoX2luZm9bdF0uY29kZXBvaW50LCBzaGlmdF94NjQsIHNoaWZ0X3k2NCk7Cisg ICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0 OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19pbmZvLT5jb2RlID0gaGItPmdseXBo X2luZm9bdF0uY29kZXBvaW50OworICAgICAgICAgICAgZ19pbmZvLT54ID0gKHg2NCArIHRy dWVfeCkgPj4gNjsKKyAgICAgICAgICAgIGdfaW5mby0+eSA9ICgoeTY0ICsgdHJ1ZV95KSA+ PiA2KSArIChzaGlmdF95NjQgPiAwID8gMSA6IDApOworICAgICAgICAgICAgZ19pbmZvLT5z aGlmdF94NjQgPSBzaGlmdF94NjQ7CisgICAgICAgICAgICBnX2luZm8tPnNoaWZ0X3k2NCA9 IHNoaWZ0X3k2NDsKKworICAgICAgICAgICAgaWYoIWlzX3RhYikgeworICAgICAgICAgICAg ICAgIHggKz0gaGItPmdseXBoX3Bvc1t0XS54X2FkdmFuY2U7CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIGludCBzaXplID0gcy0+YmxhbmtfYWR2YW5jZTY0ICog cy0+dGFic2l6ZTsKKyAgICAgICAgICAgICAgICB4ID0gKHggLyBzaXplICsgMSkgKiBzaXpl OworICAgICAgICAgICAgfQorICAgICAgICAgICAgeSArPSBoYi0+Z2x5cGhfcG9zW3RdLnlf YWR2YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIHkgKz0gbWV0cmljcy5saW5lX2hlaWdo dDY0ICsgcy0+bGluZV9zcGFjaW5nICogNjQ7CisgICAgICAgIHggPSAwOwogICAgIH0KIAot ICAgIGlmIChzLT5ib3JkZXJ3KSB7Ci0gICAgICAgIGlmICgocmV0ID0gZHJhd19nbHlwaHMo cywgZnJhbWUsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmJvcmRlcmNvbG9yLCAwLCAwLCBzLT5ib3JkZXJ3KSkgPCAwKQorLy8gVE9ETyAoTEVG VCBPRkZTRVQpCisvLyAgICBvZmZzZXRfbGVmdCA9IG1ldHJpY3Mub2Zmc2V0X2xlZnQ2NCAv IDY0OworICAgIG9mZnNldF9sZWZ0ID0gMDsKKyAgICBtZXRyaWNzLnJlY3RfeCA9IHMtPng7 CisgICAgaWYocy0+eV9hbGlnbiA9PSBZQV9CQVNFTElORSkgeworICAgICAgICBtZXRyaWNz LnJlY3RfeSA9IHMtPnkgLSBtZXRyaWNzLm9mZnNldF90b3A2NCAvIDY0OworICAgIH0gZWxz ZSB7CisgICAgICAgIG1ldHJpY3MucmVjdF95ID0gcy0+eTsKKyAgICB9CisgICAgCisgICAg cy0+Ym94X3dpZHRoID0gcy0+Ym94dyA9PSAwID8gbWV0cmljcy53aWR0aCA6IHMtPmJveHc7 CisgICAgcy0+Ym94X2hlaWdodCA9IHMtPmJveGggPT0gMCA/IG1ldHJpY3MuaGVpZ2h0IDog cy0+Ym94aDsKKworICAgIGlmKCFzLT5kcmF3X2JveCkgeworICAgICAgICAvLyBDcmVhdGUg YSBib3JkZXIgZm9yIHRoZSBjbGlwcGluZyByZWdpb24gdG8gdGFrZSBpbnRvIGFjY291bnQg c3VicGl4ZWwKKyAgICAgICAgLy8gZXJyb3JzIGluIHRleHQgbWVhc3VyZW1lbnQgYW5kIGVm ZmVjdHMuCisgICAgICAgIGludCBib3JkZXJvZmZzZXQgPSBzLT5ib3JkZXJ3ID8gRkZNQVgo cy0+Ym9yZGVydywgMCkgOiAwOworICAgICAgICBzLT5iYl9sZWZ0ID0gYm9yZGVyb2Zmc2V0 ICsgKHMtPnNoYWRvd3ggPCAwID8gRkZBQlMocy0+c2hhZG93eCkgOiAwKSArIDE7CisgICAg ICAgIHMtPmJiX3RvcCA9IGJvcmRlcm9mZnNldCArIChzLT5zaGFkb3d5IDwgMCA/IEZGQUJT KHMtPnNoYWRvd3kpIDogMCkgKyAxOworICAgICAgICBzLT5iYl9yaWdodCA9IGJvcmRlcm9m ZnNldCArIChzLT5zaGFkb3d4ID4gMCA/IHMtPnNoYWRvd3ggOiAwKSArIDE7CisgICAgICAg IHMtPmJiX2JvdHRvbSA9IGJvcmRlcm9mZnNldCArIChzLT5zaGFkb3d5ID4gMCA/IHMtPnNo YWRvd3kgOiAwKSArIDE7CisgICAgfQorCisgICAgLyogQ2hlY2sgaWYgdGhlIHdob2xlIGJv eCBpcyBvdXQgb2YgdGhlIGZyYW1lICovICAgICAgICAKKyAgICBpc19vdXRzaWRlID0gbWV0 cmljcy5yZWN0X3ggLSBzLT5iYl9sZWZ0ID49IHdpZHRoIHx8CisgICAgICAgICAgICAgICAg ICAgIG1ldHJpY3MucmVjdF95IC0gcy0+YmJfdG9wID49IGhlaWdodCB8fAorICAgICAgICAg ICAgICAgICAgICBtZXRyaWNzLnJlY3RfeCArIHMtPmJveF93aWR0aCArIHMtPmJiX3JpZ2h0 IDw9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5yZWN0X3kgKyBzLT5ib3hf aGVpZ2h0ICsgcy0+YmJfYm90dG9tIDw9IDA7CisKKyAgICBpZighaXNfb3V0c2lkZSkgewor ICAgICAgICAvKiBkcmF3IGJveCAqLworICAgICAgICBpZiAocy0+ZHJhd19ib3gpIHsKKyAg ICAgICAgICAgIHJlY194ID0gbWV0cmljcy5yZWN0X3ggLSBzLT5iYl9sZWZ0OworICAgICAg ICAgICAgcmVjX3kgPSBtZXRyaWNzLnJlY3RfeSAtIHMtPmJiX3RvcDsKKyAgICAgICAgICAg IHJlY193aWR0aCA9IHMtPmJveF93aWR0aCArIHMtPmJiX3JpZ2h0ICsgcy0+YmJfbGVmdDsK KyAgICAgICAgICAgIHJlY19oZWlnaHQgPSBzLT5ib3hfaGVpZ2h0ICsgcy0+YmJfYm90dG9t ICsgcy0+YmJfdG9wOworICAgICAgICAgICAgLy8gYXZfbG9nKHMsIEFWX0xPR19ERUJVRywg InJlY3RfeDogJWQgLT4gYmJfbGVmdDogJWRcbiIsCisgICAgICAgICAgICAvLyAgICAgbWV0 cmljcy5yZWN0X3gsIHMtPmJiX2xlZnQpOworICAgICAgICAgICAgLy8gYXZfbG9nKHMsIEFW X0xPR19ERUJVRywgIlJlY3QgLT4gKHg6ICVkIC0geTogJWQgLSBkeDogJWQgLSBkeTogJWQp XG4iLAorICAgICAgICAgICAgLy8gICAgIHJlY194LCByZWNfeSwgcmVjX3dpZHRoLCByZWNf aGVpZ2h0KTsKKyAgICAgICAgICAgIGZmX2JsZW5kX3JlY3RhbmdsZSgmcy0+ZGMsICZib3hj b2xvciwKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCB3 aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIHJlY194LCByZWNfeSwgcmVjX3dpZHRo LCByZWNfaGVpZ2h0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzLT5zaGFkb3d4IHx8 IHMtPnNoYWRvd3kpIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0gZHJhd19nbHlwaHMocywg ZnJhbWUsICZzaGFkb3djb2xvciwgJm1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgIHMt PnNoYWRvd3ggLSBvZmZzZXRfbGVmdCwgcy0+c2hhZG93eSwgcy0+Ym9yZGVydykpIDwgMCkg eworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKworICAgICAgICBpZiAocy0+Ym9yZGVydykgeworICAgICAgICAgICAgaWYgKChyZXQg PSBkcmF3X2dseXBocyhzLCBmcmFtZSwgJmJvcmRlcmNvbG9yLCAmbWV0cmljcywKKyAgICAg ICAgICAgICAgICAgICAgLW9mZnNldF9sZWZ0LCAwLCBzLT5ib3JkZXJ3KSkgPCAwKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor CisgICAgICAgIGlmICgocmV0ID0gZHJhd19nbHlwaHMocywgZnJhbWUsICZmb250Y29sb3Is ICZtZXRyaWNzLCAtb2Zmc2V0X2xlZnQsCisgICAgICAgICAgICAgICAgMCwgMCkpIDwgMCkg ewogICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAo KHJldCA9IGRyYXdfZ2x5cGhzKHMsIGZyYW1lLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmZvbnRjb2xvciwgMCwgMCwgMCkpIDwgMCkKLSAgICAgICAg cmV0dXJuIHJldDsKKworICAgIC8vIEZSRUUgZGF0YSBzdHJ1Y3R1cmVzCisgICAgZm9yKGlu dCBsID0gMDsgbCA8IHMtPmxpbmVfY291bnQ7ICsrbCkgeworICAgICAgICBUZXh0TGluZSAq bGluZSA9ICZzLT5saW5lc1tsXTsKKyAgICAgICAgYXZfZnJlZXAoJmxpbmUtPmdseXBocyk7 CisgICAgICAgIGhiX2Rlc3Ryb3koJmxpbmUtPmhiX2RhdGEpOworICAgIH0KKyAgICBhdl9m cmVlcCgmcy0+bGluZXMpOworICAgIGF2X2ZyZWVwKCZzLT50YWJfY2x1c3RlcnMpOwogCiAg ICAgcmV0dXJuIDA7CiB9CkBAIC0xNjgwLDEzICsyMjE2LDEzIEBAIEZGX0VOQUJMRV9ERVBS RUNBVElPTl9XQVJOSU5HUwogICAgICAgICAgICAgcy0+eCA9IGJib3gtPng7CiAgICAgICAg ICAgICBzLT55ID0gYmJveC0+eSAtIHMtPmZvbnRzaXplOwogICAgICAgICB9Ci0gICAgICAg IGRyYXdfdGV4dChjdHgsIGZyYW1lLCBmcmFtZS0+d2lkdGgsIGZyYW1lLT5oZWlnaHQpOwor ICAgICAgICBkcmF3X3RleHQoY3R4LCBmcmFtZSk7CiAgICAgfQogCi0gICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAibjolZCB0OiVmIHRleHRfdzolZCB0ZXh0X2g6JWQgeDolZCB5 OiVkXG4iLAotICAgICAgICAgICAoaW50KXMtPnZhcl92YWx1ZXNbVkFSX05dLCBzLT52YXJf dmFsdWVzW1ZBUl9UXSwKLSAgICAgICAgICAgKGludClzLT52YXJfdmFsdWVzW1ZBUl9URVhU X1ddLCAoaW50KXMtPnZhcl92YWx1ZXNbVkFSX1RFWFRfSF0sCi0gICAgICAgICAgIHMtPngs IHMtPnkpOworICAgIC8vIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIm46JWQgdDolZiB0 ZXh0X3c6JWQgdGV4dF9oOiVkIHg6JS4yZiB5OiUuMmZcbiIsCisgICAgLy8gICAgICAgIChp bnQpcy0+dmFyX3ZhbHVlc1tWQVJfTl0sIHMtPnZhcl92YWx1ZXNbVkFSX1RdLAorICAgIC8v ICAgICAgICAoaW50KXMtPnZhcl92YWx1ZXNbVkFSX1RFWFRfV10sIChpbnQpcy0+dmFyX3Zh bHVlc1tWQVJfVEVYVF9IXSwKKyAgICAvLyAgICAgICAgcy0+eCwgcy0+eSk7CiAKICAgICBy ZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIGZyYW1lKTsKIH0KLS0gCjIuMzAuMgoK --------------SnKAbDr88Sg0uZjUveMxbipJ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------SnKAbDr88Sg0uZjUveMxbipJ--