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 BB8934534F for ; Thu, 26 Jan 2023 10:40:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8626E68B14C; Thu, 26 Jan 2023 12:40:40 +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 5639F68B14C for ; Thu, 26 Jan 2023 12:40:33 +0200 (EET) Received: from [192.168.20.100] ([95.243.137.154]) by santino.mail.tiscali.it with id DNgW2902c3L3PKz01NgX1p; Thu, 26 Jan 2023 10:40:31 +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="------------BqOmGcEevhY2MhVJvzk2iN4F" Message-ID: <8d713a21-f2f0-5c8d-fa93-0278965509e5@tiscali.it> Date: Thu, 26 Jan 2023 11:40:30 +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 From: Francesco Carusi DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tiscali.it; s=smtp; t=1674729632; bh=U4u/Xdub1WGDUZhh/g5Uuzl8tigzaJC8UyVgyaKnQXM=; h=Date:To:From:Subject; b=Tvp12VQO7K+fpJsVxae5YbnMvwiDz17zObnaVxK0cOpSYf5sE1ReaiPo9jYKLQmMW d4YCRH10cu7UR7vlqQnpdsISDyQxzY+OoMte/HBbGbTZctXjHIqUZmYt1zyqFyKdeH 7qwX9dSucojog3iHtgSSAea5yNHLpiiwwm0tEDNc= X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [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. --------------BqOmGcEevhY2MhVJvzk2iN4F Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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. Thanks! --------------BqOmGcEevhY2MhVJvzk2iN4F 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 RnJvbSBlMDgxNDg5MTVhYjIwN2VkNDczNjY1ZGZlZjBmYTIwN2QzYjFhM2EwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IFdlZCwgMjUgSmFuIDIwMjMgMjM6NDA6MzcgKzAxMDAKU3ViamVjdDogW1BBVENIIDEv MV0gZW5oYW5jZWQgZHJhd3RleHQgZmlsdGVyCgotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAg ICAgICAgfCAgICA1ICstCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgIHwgICA4NyArKy0K IGxpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMgfCAxMjM4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgOTk2IGluc2VydGlvbnMoKyks IDMzNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUK aW5kZXggNmU4OGMzMjIyMy4uOGMyYzQzNGM2NiAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisr KyBiL2NvbmZpZ3VyZQpAQCAtMjM1LDYgKzIzNSw3IEBAIEV4dGVybmFsIGxpYnJhcnkgc3Vw cG9ydDoKICAgLS1lbmFibGUtbGliZm9udGNvbmZpZyAgIGVuYWJsZSBsaWJmb250Y29uZmln LCB1c2VmdWwgZm9yIGRyYXd0ZXh0IGZpbHRlciBbbm9dCiAgIC0tZW5hYmxlLWxpYmZyZWV0 eXBlICAgICBlbmFibGUgbGliZnJlZXR5cGUsIG5lZWRlZCBmb3IgZHJhd3RleHQgZmlsdGVy IFtub10KICAgLS1lbmFibGUtbGliZnJpYmlkaSAgICAgIGVuYWJsZSBsaWJmcmliaWRpLCBp bXByb3ZlcyBkcmF3dGV4dCBmaWx0ZXIgW25vXQorICAtLWVuYWJsZS1saWJoYXJmYnV6eiAg ICAgZW5hYmxlIGxpYmhhcmZidXp6LCBuZWVkZWQgZm9yIGRyYXd0ZXh0IGZpbHRlciBbbm9d CiAgIC0tZW5hYmxlLWxpYmdsc2xhbmcgICAgICBlbmFibGUgR0xTTC0+U1BJUlYgY29tcGls YXRpb24gdmlhIGxpYmdsc2xhbmcgW25vXQogICAtLWVuYWJsZS1saWJnbWUgICAgICAgICAg ZW5hYmxlIEdhbWUgTXVzaWMgRW11IHZpYSBsaWJnbWUgW25vXQogICAtLWVuYWJsZS1saWJn c20gICAgICAgICAgZW5hYmxlIEdTTSBkZS9lbmNvZGluZyB2aWEgbGliZ3NtIFtub10KQEAg LTE4MTgsNiArMTgxOSw3IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgbGliZm9u dGNvbmZpZwogICAgIGxpYmZyZWV0eXBlCiAgICAgbGliZnJpYmlkaQorICAgIGxpYmhhcmZi dXp6CiAgICAgbGliZ2xzbGFuZwogICAgIGxpYmdtZQogICAgIGxpYmdzbQpAQCAtMzY1Nyw3 ICszNjU5LDcgQEAgZGlsYXRpb25fb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiBkbm5f Y2xhc3NpZnlfZmlsdGVyX3NlbGVjdD0iZG5uIgogZG5uX2RldGVjdF9maWx0ZXJfc2VsZWN0 PSJkbm4iCiBkbm5fcHJvY2Vzc2luZ19maWx0ZXJfc2VsZWN0PSJkbm4iCi1kcmF3dGV4dF9m aWx0ZXJfZGVwcz0ibGliZnJlZXR5cGUiCitkcmF3dGV4dF9maWx0ZXJfZGVwcz0ibGliZnJl ZXR5cGUgbGliaGFyZmJ1enoiCiBkcmF3dGV4dF9maWx0ZXJfc3VnZ2VzdD0ibGliZm9udGNv bmZpZyBsaWJmcmliaWRpIgogZWxiZ19maWx0ZXJfZGVwcz0iYXZjb2RlYyIKIGVxX2ZpbHRl cl9kZXBzPSJncGwiCkBAIC02NTc3LDYgKzY1NzksNyBAQCBlbmFibGVkIGZvbnRjb25maWcg ICAgICAgICYmIGVuYWJsZSBsaWJmb250Y29uZmlnCiBlbmFibGVkIGxpYmZvbnRjb25maWcg ICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJmb250Y29uZmlnIGZvbnRjb25maWcgImZv bnRjb25maWcvZm9udGNvbmZpZy5oIiBGY0luaXQKIGVuYWJsZWQgbGliZnJlZXR5cGUgICAg ICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmZyZWV0eXBlIGZyZWV0eXBlMiAiZnQyYnVp bGQuaCBGVF9GUkVFVFlQRV9IIiBGVF9Jbml0X0ZyZWVUeXBlCiBlbmFibGVkIGxpYmZyaWJp ZGkgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJmcmliaWRpIGZyaWJpZGkgZnJp YmlkaS5oIGZyaWJpZGlfdmVyc2lvbl9pbmZvCitlbmFibGVkIGxpYmhhcmZidXp6ICAgICAg ICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJoYXJmYnV6eiBoYXJmYnV6eiBoYi5oIGhiX2J1 ZmZlcl9jcmVhdGUKIGVuYWJsZWQgbGliZ2xzbGFuZyAmJiB7IGNoZWNrX2xpYiBzcGlydl9j b21waWxlciBnbHNsYW5nL0luY2x1ZGUvZ2xzbGFuZ19jX2ludGVyZmFjZS5oIGdsc2xhbmdf aW5pdGlhbGl6ZV9wcm9jZXNzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbGds c2xhbmcgLWxNYWNoaW5lSW5kZXBlbmRlbnQgLWxPU0RlcGVuZGVudCAtbEhMU0wgLWxPR0xD b21waWxlciAtbEdlbmVyaWNDb2RlR2VuIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtbFNQVlJlbWFwcGVyIC1sU1BJUlYgLWxTUElSVi1Ub29scy1vcHQgLWxTUElSVi1Ub29s cyAtbHB0aHJlYWQgLWxzdGRjKysgLWxtIHx8CmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50 ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCA2MGU0ZDExM2ExLi5lYTJlNGYwZjRlIDEw MDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0ZXJzLnRleGkKQEAg LTEyMDE2LDcgKzEyMDE2LDcgQEAgRHJhdyBhIHRleHQgc3RyaW5nIG9yIHRleHQgZnJvbSBh IHNwZWNpZmllZCBmaWxlIG9uIHRvcCBvZiBhIHZpZGVvLCB1c2luZyB0aGUKIGxpYmZyZWV0 eXBlIGxpYnJhcnkuCiAKIFRvIGVuYWJsZSBjb21waWxhdGlvbiBvZiB0aGlzIGZpbHRlciwg eW91IG5lZWQgdG8gY29uZmlndXJlIEZGbXBlZyB3aXRoCi1AY29kZXstLWVuYWJsZS1saWJm cmVldHlwZX0uCitAY29kZXstLWVuYWJsZS1saWJmcmVldHlwZX0gYW5kIEBjb2Rley0tZW5h YmxlLWxpYmhhcmZidXp6fS4KIFRvIGVuYWJsZSBkZWZhdWx0IGZvbnQgZmFsbGJhY2sgYW5k IHRoZSBAdmFye2ZvbnR9IG9wdGlvbiB5b3UgbmVlZCB0bwogY29uZmlndXJlIEZGbXBlZyB3 aXRoIEBjb2Rley0tZW5hYmxlLWxpYmZvbnRjb25maWd9LgogVG8gZW5hYmxlIHRoZSBAdmFy e3RleHRfc2hhcGluZ30gb3B0aW9uLCB5b3UgbmVlZCB0byBjb25maWd1cmUgRkZtcGVnIHdp dGgKQEAgLTEyMDMzLDkgKzEyMDMzLDI3IEBAIFVzZWQgdG8gZHJhdyBhIGJveCBhcm91bmQg dGV4dCB1c2luZyB0aGUgYmFja2dyb3VuZCBjb2xvci4KIFRoZSB2YWx1ZSBtdXN0IGJlIGVp dGhlciAxIChlbmFibGUpIG9yIDAgKGRpc2FibGUpLgogVGhlIGRlZmF1bHQgdmFsdWUgb2Yg QHZhcntib3h9IGlzIDAuCiAKK0BpdGVtIGJveHcKK1NldCB0aGUgd2lkdGggb2YgdGhlIGJv eCB0byBiZSBkcmF3biBhcm91bmQgdGV4dC4KK1RoZSBkZWZhdWx0IHZhbHVlIG9mIEB2YXJ7 Ym94d30gaXMgY29tcHV0ZWQgYXV0b21hdGljYWxseSB0byBtYXRjaCB0aGUgdGV4dCB3aWR0 aAorCitAaXRlbSBib3hoCitTZXQgdGhlIGhlaWdodCBvZiB0aGUgYm94IHRvIGJlIGRyYXdu IGFyb3VuZCB0ZXh0LgorVGhlIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntib3hofSBpcyBjb21w dXRlZCBhdXRvbWF0aWNhbGx5IHRvIG1hdGNoIHRoZSB0ZXh0IGhlaWdodAorCiBAaXRlbSBi b3hib3JkZXJ3CiBTZXQgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIgdG8gYmUgZHJhd24gYXJv dW5kIHRoZSBib3ggdXNpbmcgQHZhcntib3hjb2xvcn0uCi1UaGUgZGVmYXVsdCB2YWx1ZSBv ZiBAdmFye2JveGJvcmRlcnd9IGlzIDAuCitUaGUgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQg dXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKK0BpdGVtaXplIEBidWxsZXQK K0BpdGVtIEBjb2Rle2JveGJvcmRlcnc9MTB9IHNldCB0aGUgd2lkdGggb2YgYWxsIHRoZSBi b3JkZXJzIHRvIDEwCitAaXRlbSBAY29kZXtib3hib3JkZXJ3PTEwfDIwfSBzZXQgdGhlIHdp ZHRoIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBib3JkZXJzIHRvIDEwCisgICAgYW5kIHRoZSB3 aWR0aCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYm9yZGVycyB0byAyMAorQGl0ZW0gQGNvZGV7 Ym94Ym9yZGVydz0xMHwyMHwzMH0gc2V0IHRoZSB3aWR0aCBvZiB0aGUgdG9wIGJvcmRlciB0 byAxMCwgdGhlIHdpZHRoCisgICAgb2YgdGhlIGJvdHRvbSBib3JkZXIgdG8gMzAgYW5kIHRo ZSB3aWR0aCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYm9yZGVycyB0byAyMAorQGl0ZW0gQGNv ZGV7Ym94Ym9yZGVydz0xMHwyMHwzMHw0MH0gc2V0IHRoZSBib3JkZXJzIHdpZHRoIHRvIDEw ICh0b3ApLCAyMCAocmlnaHQpLAorICAgIDMwIChib3R0b20pLCA0MCAobGVmdCkKK0BlbmQg aXRlbWl6ZQorVGhlIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntib3hib3JkZXJ3fSBpcyAiMCIu CiAKIEBpdGVtIGJveGNvbG9yCiBUaGUgY29sb3IgdG8gYmUgdXNlZCBmb3IgZHJhd2luZyBi b3ggYXJvdW5kIHRleHQuIEZvciB0aGUgc3ludGF4IG9mIHRoaXMKQEAgLTEyMDQ0LDggKzEy MDYyLDIyIEBAIG9wdGlvbiwgY2hlY2sgdGhlIEByZWZ7Y29sb3Igc3ludGF4LCwiQ29sb3Ii IHNlY3Rpb24gaW4gdGhlIGZmbXBlZy11dGlscyBtYW51YWwsCiBUaGUgZGVmYXVsdCB2YWx1 ZSBvZiBAdmFye2JveGNvbG9yfSBpcyAid2hpdGUiLgogCiBAaXRlbSBsaW5lX3NwYWNpbmcK LVNldCB0aGUgbGluZSBzcGFjaW5nIGluIHBpeGVscyBvZiB0aGUgYm9yZGVyIHRvIGJlIGRy YXduIGFyb3VuZCB0aGUgYm94IHVzaW5nIEB2YXJ7Ym94fS4KLVRoZSBkZWZhdWx0IHZhbHVl IG9mIEB2YXJ7bGluZV9zcGFjaW5nfSBpcyAwLgorU2V0IHRoZSBsaW5lIHNwYWNpbmcgaW4g cGl4ZWxzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye2xpbmVfc3BhY2luZ30gaXMgMC4K KworQGl0ZW0gdGV4dF9hbGlnbgorU2V0IHRoZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBh bGlnbm1lbnQgb2YgdGhlIHRleHQgd2l0aCByZXNwZWN0IHRvIHRoZSBib3ggYm91bmRhcmll cy4KK1RoZSB2YWx1ZSBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28gbGV0dGVycywgb25lIGZv ciB0aGUgdmVydGljYWwgYWxpZ25tZW50IChUPXRvcCwKK009bWlkZGxlLCBCPWJvdHRvbSkg YW5kIG9uZSBmb3IgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IChMPWxlZnQsIEM9Y2VudGVy LCBSPXJpZ2h0KS4KKworQGl0ZW0geV9hbGlnbgorU3BlY2lmeSB3aGF0IHRoZSBAdmFye3l9 IHZhbHVlIGlzIHJlZmVycmVkIHRvLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorQGl0ZW1pemUg QGJ1bGxldAorQGl0ZW0gQGNvZGV7dGV4dH0gdGhlIHRvcCBvZiB0aGUgaGlnaGVzdCBnbHlw aCBvZiB0aGUgZmlyc3QgdGV4dCBsaW5lIGlzIHBsYWNlZCBhdCBAdmFye3l9CitAaXRlbSBA Y29kZXtiYXNlbGluZX0gdGhlIGJhc2VsaW5lIG9mIHRoZSBmaXJzdCB0ZXh0IGxpbmUgaXMg cGxhY2VkIGF0IEB2YXJ7eX0KK0BpdGVtIEBjb2Rle2ZvbnR9IHRoZSBiYXNlbGluZSBvZiB0 aGUgZmlyc3QgdGV4dCBsaW5lIGlzIHBsYWNlZCBhdCBAdmFye3l9IHBsdXMgdGhlCisgICAg YXNjZW50IChpbiBwaXhlbHMpIGRlZmluZWQgaW4gdGhlIGZvbnQgbWV0cmljcworQGVuZCBp dGVtaXplCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye3lfYWxpZ259IGlzICJ0ZXh0IiBm b3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogQGl0ZW0gYm9yZGVydwogU2V0IHRoZSB3 aWR0aCBvZiB0aGUgYm9yZGVyIHRvIGJlIGRyYXduIGFyb3VuZCB0aGUgdGV4dCB1c2luZyBA dmFye2JvcmRlcmNvbG9yfS4KQEAgLTEyMDU0LDcgKzEyMDg2LDYgQEAgVGhlIGRlZmF1bHQg dmFsdWUgb2YgQHZhcntib3JkZXJ3fSBpcyAwLgogQGl0ZW0gYm9yZGVyY29sb3IKIFNldCB0 aGUgY29sb3IgdG8gYmUgdXNlZCBmb3IgZHJhd2luZyBib3JkZXIgYXJvdW5kIHRleHQuIEZv ciB0aGUgc3ludGF4IG9mIHRoaXMKIG9wdGlvbiwgY2hlY2sgdGhlIEByZWZ7Y29sb3Igc3lu dGF4LCwiQ29sb3IiIHNlY3Rpb24gaW4gdGhlIGZmbXBlZy11dGlscyBtYW51YWwsZmZtcGVn LXV0aWxzfS4KLQogVGhlIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntib3JkZXJjb2xvcn0gaXMg ImJsYWNrIi4KIAogQGl0ZW0gZXhwYW5zaW9uCkBAIC0xMjE1MiwxMCArMTIxODMsNiBAQCB2 YWx1ZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBib3RoIGlzICIwIi4KIFRoZSBzdGFydGlu ZyBmcmFtZSBudW1iZXIgZm9yIHRoZSBuL2ZyYW1lX251bSB2YXJpYWJsZS4gVGhlIGRlZmF1 bHQgdmFsdWUKIGlzICIwIi4KIAotQGl0ZW0gdGFic2l6ZQotVGhlIHNpemUgaW4gbnVtYmVy IG9mIHNwYWNlcyB0byB1c2UgZm9yIHJlbmRlcmluZyB0aGUgdGFiLgotRGVmYXVsdCB2YWx1 ZSBpcyA0LgotCiBAaXRlbSB0aW1lY29kZQogU2V0IHRoZSBpbml0aWFsIHRpbWVjb2RlIHJl cHJlc2VudGF0aW9uIGluICJoaDptbTpzc1s6Oy5dZmYiCiBmb3JtYXQuIEl0IGNhbiBiZSB1 c2VkIHdpdGggb3Igd2l0aG91dCB0ZXh0IHBhcmFtZXRlci4gQHZhcnt0aW1lY29kZV9yYXRl fQpAQCAtMTIyNTMsNiArMTIyODAsMTggQEAgY29udGFpbmVkIGluIHRoZSByZW5kZXJlZCB0 ZXh0LCBpdCBpcyBlcXVpdmFsZW50IHRvIEB2YXJ7YXNjZW50fSAtCiBtYXhpbXVtIGdseXBo IHdpZHRoLCB0aGF0IGlzIHRoZSBtYXhpbXVtIHdpZHRoIGZvciBhbGwgdGhlIGdseXBocwog Y29udGFpbmVkIGluIHRoZSByZW5kZXJlZCB0ZXh0CiAKK0BpdGVtIGZvbnRfYQordGhlIGFz Y2VudCBzaXplIGRlZmluZWQgaW4gdGhlIGZvbnQgbWV0cmljcworCitAaXRlbSBmb250X2QK K3RoZSBkZXNjZW50IHNpemUgZGVmaW5lZCBpbiB0aGUgZm9udCBtZXRyaWNzCisKK0BpdGVt IHRvcF9hCit0aGUgbWF4aW11bSBhc2NlbmRlciBvZiB0aGUgZ2x5cGhzIG9mIHRoZSBmaXJz dCB0ZXh0IGxpbmUKKworQGl0ZW0gYm90dG9tX2QKK3RoZSBtYXhpbXVtIGRlc2NlbmRlciBv ZiB0aGUgZ2x5cGhzIG9mIHRoZSBsYXN0IHRleHQgbGluZQorCiBAaXRlbSBuCiB0aGUgbnVt YmVyIG9mIGlucHV0IGZyYW1lLCBzdGFydGluZyBmcm9tIDAKIApAQCAtMTI0MTcsNiArMTI0 NTYsMzMgQEAgRnVsbCBmaWx0ZXIgaW52b2NhdGlvbiB3aXRoIHNlbmRjbWQgd291bGQgbG9v ayBsaWtlIHRoaXM6CiBAZXhhbXBsZQogc2VuZGNtZD1jPSc1Ni4wIGRyYXd0ZXh0IHJlaW5p dCBmb250c2l6ZT01Nlw6Zm9udGNvbG9yPWdyZWVuXDp0ZXh0PUhlbGxvXFwgV29ybGQnCiBA ZW5kIGV4YW1wbGUKKworQGl0ZW0gY2hhbmdlCitBbHRlciBhIHN1YnNldCBvZiB0aGUgZXhp c3RpbmcgZmlsdGVyIHBhcmFtZXRlcnMuIFVzaW5nIHRoaXMgY29tbWFuZCByZXN1bHRzIGlu IGEKK2Zhc3RlciBleGVjdXRpb24gb2YgdGhlIGZpbHRlciByYXRoZXIgdGhhbiB1c2luZyB0 aGUgJ3JlaW5pdCcgY29tbWFuZC4gVGhlIHN5bnRheAorZm9yIHRoZSBhcmd1bWVudCBpcyB0 aGUgc2FtZSBhcyBmb3IgZmlsdGVyIGludm9jYXRpb24sIHRoZSBmb2xsb3dpbmcgcGFyYW1l dGVycworY2FuIGJlIGFsdGVyZWQ6CitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSB4CitAaXRl bSB5CitAaXRlbSBhbHBoYQorQGl0ZW0gZm9udHNpemUKK0BpdGVtIGZvbnRjb2xvcgorQGl0 ZW0gYm94Y29sb3IKK0BpdGVtIGJvcmRlcmNvbG9yCitAaXRlbSBzaGFkb3djb2xvcgorQGl0 ZW0gZm9udGNvbG9yX2V4cHIKK0BpdGVtIGJveAorQGl0ZW0gYm94dworQGl0ZW0gYm94aAor QGl0ZW0gYm94Ym9yZGVydworQGl0ZW0gbGluZV9zcGFjaW5nCitAaXRlbSB0ZXh0X2FsaWdu CitAaXRlbSBzaGFkb3d4CitAaXRlbSBzaGFkb3d5CitAaXRlbSBib3JkZXJ3CitAZW5kIGl0 ZW1pemUKKwogQGVuZCB0YWJsZQogCiBJZiB0aGUgZW50aXJlIGFyZ3VtZW50IGNhbid0IGJl IHBhcnNlZCBvciBhcHBsaWVkIGFzIHZhbGlkIHZhbHVlcyB0aGVuIHRoZSBmaWx0ZXIgd2ls bApAQCAtMTI1NDMsNiArMTI2MDksOSBAQCBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBm b250Y29uZmlnLCBjaGVjazoKIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxpYmZyaWJp ZGksIGNoZWNrOgogQHVybHtodHRwOi8vZnJpYmlkaS5vcmcvfS4KIAorRm9yIG1vcmUgaW5m b3JtYXRpb24gYWJvdXQgbGliaGFyZmJ1enosIGNoZWNrOgorQHVybHtodHRwczovL2dpdGh1 Yi5jb20vaGFyZmJ1enovaGFyZmJ1enp9LgorCiBAc2VjdGlvbiBlZGdlZGV0ZWN0CiAKIERl dGVjdCBhbmQgZHJhdyBlZGdlcy4gVGhlIGZpbHRlciB1c2VzIHRoZSBDYW5ueSBFZGdlIERl dGVjdGlvbiBhbGdvcml0aG0uCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl9kcmF3dGV4 dC5jIGIvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYwppbmRleCA1MDAxMmJiMjU4Li45YzJj MmE0ZWZkIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jCisrKyBiL2xp YmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJp Z2h0IChjKSAyMDIzIEZyYW5jZXNjbyBDYXJ1c2kKICAqIENvcHlyaWdodCAoYykgMjAxMSBT dGVmYW5vIFNhYmF0aW5pCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUy5OLiBIZW1hbnRoIE1l ZW5ha3NoaXN1bmRhcmFtCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMgR3VzdGF2byBTdmVyenV0 IEJhcmJpZXJpIDxnc2JhcmJpZXJpQHlhaG9vLmNvbS5icj4KQEAgLTIwLDYgKzIxLDI3IEBA CiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCiAgKi8KIAorLyoKKyAqIENoYW5nZWxvZyAt IDIwMjMKKyAqCisgKiAtIFRoaXMgZmlsdGVyIG5vdyBkZXBlbmRzIG9uIGxpYmhhcmZidXp6 IGZvciB0ZXh0IHNoYXBpbmcuCisgKiAtIEdseXBocyBwb3NpdGlvbiBpcyBub3cgYWNjdXJh dGUgdG8gMS80IHBpeGVsIGluIGJvdGggZGlyZWN0aW9ucworICogLSBUaGUgc2l6ZSBvZiB0 aGUgYmFja2dyb3VuZCBib3ggY2FuIG5vdyBiZSBmb3JjZWQgd2l0aCB0aGUgYm94dworICog ICBhbmQgYm94aCBwYXJhbWV0ZXJzCisgKiAtIFRleHQgY2FuIGJlIGFsaWduZWQgaG9yaXpv bnRhbGx5ICh0b3AsIG1pZGRsZSwgYm90dG9tKSBhbmQgdmVydGljYWxseQorICogICAobGVm dCwgY2VudGVyLCByaWdodCkgcmVsYXRpdmUgdG8gdGhlIGJhY2tncm91bmQgYm94CisgKiAt IFRoZSBkZWZhdWx0IGxpbmUgaGVpZ2h0IGlzIG5vdyB0aGUgb25lIGRlZmluZWQgaW4gdGhl IGZvbnQKKyAqIC0gVGhlIG5ldyB5X2FsaWduIHBhcmFtZXRlciBzcGVjaWZpZXMgaWYgdGhl IHVzZXIgcHJvdmlkZWQgeSB2YWx1ZSBpcworICogICByZWZlcnJlZCB0byB0aGUgdG9wIG9m IHRoZSB0ZXh0LCB0byB0aGUgZm9udCBiYXNlbGluZSBvciB0byB0aGUKKyAqICAgdG9wIG9m IHRoZSBmb250LgorICogLSBUaGUgYm94Ym9yZGVydyBwYXJhbWV0ZXIgY2FuIG5vdyBjb250 YWluIGEgZGlmZmVyZW50IHZhbHVlIGZvciBlYWNoIGJvcmRlcgorICogICAoZS5nLiBib3hi b3JkZXJ3PXRvcHxyaWdodHxib3R0b218bGVmdCkKKyAqIC0gVGhlICJjaGFuZ2UiIGNvbW1h bmQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGEgc3Vic2V0IG9mIHRoZSBmaWx0ZXIgcGFyYW1l dGVycy4KKyAqICAgVXNpbmcgdGhlICJjaGFuZ2UiIGNvbW1hbmQgaXMgbXVjaCBmYXN0ZXIg dGhhbiB1c2luZyB0aGUgInJlaW5pdCIgY29tbWFuZC4KKyAqIC0gVGhlIGZvbGxvd2luZyBu ZXcgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGluIHRoZSB4IGFuZCB5IGV4cHJlc3Npb25zOgor ICogICBmb250X2EsIGZvbnRfZCwgdG9wX2EsIGJvdHRvbV9kCisgKi8KKwogLyoqCiAgKiBA ZmlsZQogICogZHJhd3RleHQgZmlsdGVyLCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgdmhvb2sv ZHJhd3RleHQuYwpAQCAtNzIsMTYgKzk0LDI2IEBACiAjaW5jbHVkZSBGVF9HTFlQSF9ICiAj aW5jbHVkZSBGVF9TVFJPS0VSX0gKIAorI2luY2x1ZGUgPGhiLmg+CisjaW5jbHVkZSA8aGIt ZnQuaD4KKworLy8gQ2VpbGluZyBvcGVyYXRpb24gZm9yIHBvc2l0aXZlIGludGVnZXJzIGRp dmlzaW9uCisjZGVmaW5lIFBPU19DRUlMKHgsIHkpICgoeCkvKHkpICsgKCh4KSUoeSkgIT0g MCkpCisKIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2YXJfbmFtZXNbXSA9IHsKICAgICAi ZGFyIiwKICAgICAiaHN1YiIsICJ2c3ViIiwKLSAgICAibGluZV9oIiwgImxoIiwgICAgICAg ICAgIC8vLzwgbGluZSBoZWlnaHQsIHNhbWUgYXMgbWF4X2dseXBoX2gKKyAgICAibGluZV9o IiwgImxoIiwgICAgICAgICAgIC8vLzwgbGluZSBoZWlnaHQKICAgICAibWFpbl9oIiwgImgi LCAiSCIsICAgICAgIC8vLzwgaGVpZ2h0IG9mIHRoZSBpbnB1dCB2aWRlbwogICAgICJtYWlu X3ciLCAidyIsICJXIiwgICAgICAgLy8vPCB3aWR0aCAgb2YgdGhlIGlucHV0IHZpZGVvCi0g ICAgIm1heF9nbHlwaF9hIiwgImFzY2VudCIsICAvLy88IG1heCBnbHlwaCBhc2NlbnQKLSAg ICAibWF4X2dseXBoX2QiLCAiZGVzY2VudCIsIC8vLzwgbWluIGdseXBoIGRlc2NlbnQKKyAg ICAibWF4X2dseXBoX2EiLCAiYXNjZW50IiwgIC8vLzwgbWF4IGdseXBoIGFzY2VuZGVyCisg ICAgIm1heF9nbHlwaF9kIiwgImRlc2NlbnQiLCAvLy88IG1pbiBnbHlwaCBkZXNjZW5kZXIK ICAgICAibWF4X2dseXBoX2giLCAgICAgICAgICAgIC8vLzwgbWF4IGdseXBoIGhlaWdodAog ICAgICJtYXhfZ2x5cGhfdyIsICAgICAgICAgICAgLy8vPCBtYXggZ2x5cGggd2lkdGgKKyAg ICAiZm9udF9hIiwgICAgICAgICAgICAgICAgIC8vLzwgZm9udC1kZWZpbmVkIGFzY2VudAor ICAgICJmb250X2QiLCAgICAgICAgICAgICAgICAgLy8vPCBmb250LWRlZmluZWQgZGVzY2Vu dAorICAgICJ0b3BfYSIsICAgICAgICAgICAgICAgICAgLy8vPCBtYXggZ2x5cGggYXNjZW5k ZXIgb2YgdGhlIHRvcCBsaW5lCisgICAgImJvdHRvbV9kIiwgICAgICAgICAgICAgICAvLy88 IG1heCBnbHlwaCBkZXNjZW5kZXIgb2YgdGhlIGJvdHRvbSBsaW5lCiAgICAgIm4iLCAgICAg ICAgICAgICAgICAgICAgICAvLy88IG51bWJlciBvZiBmcmFtZQogICAgICJzYXIiLAogICAg ICJ0IiwgICAgICAgICAgICAgICAgICAgICAgLy8vPCB0aW1lc3RhbXAgZXhwcmVzc2VkIGlu IHNlY29uZHMKQEAgLTEyNSw2ICsxNTcsMTAgQEAgZW51bSB2YXJfbmFtZSB7CiAgICAgVkFS X01BWF9HTFlQSF9ELCBWQVJfREVTQ0VOVCwKICAgICBWQVJfTUFYX0dMWVBIX0gsCiAgICAg VkFSX01BWF9HTFlQSF9XLAorICAgIFZBUl9GT05UX0EsCisgICAgVkFSX0ZPTlRfRCwKKyAg ICBWQVJfVE9QX0EsCisgICAgVkFSX0JPVFRPTV9ELAogICAgIFZBUl9OLAogICAgIFZBUl9T QVIsCiAgICAgVkFSX1QsCkBAIC0xNDgsMTIgKzE4NCw4NCBAQCBlbnVtIGV4cGFuc2lvbl9t b2RlIHsKICAgICBFWFBfU1RSRlRJTUUsCiB9OwogCitlbnVtIHlfYWxpZ25tZW50IHsKKyAg ICBZQV9URVhULAorICAgIFlBX0JBU0VMSU5FLAorICAgIFlBX0ZPTlQsCit9OworCit0eXBl ZGVmIHN0cnVjdCBIYXJmYnV6ekRhdGEgeworICAgIGhiX2J1ZmZlcl90KiBidWY7CisgICAg aGJfZm9udF90KiBmb250OworICAgIHVuc2lnbmVkIGludCBnbHlwaF9jb3VudDsKKyAgICBo Yl9nbHlwaF9pbmZvX3QqIGdseXBoX2luZm87CisgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCog Z2x5cGhfcG9zOworfSBIYXJmYnV6ekRhdGE7CisKKy8qKiBJbmZvcm1hdGlvbiBhYm91dCBh IHNpbmdsZSBnbHlwaCBpbiBhIHRleHQgbGluZSAqLwordHlwZWRlZiBzdHJ1Y3QgR2x5cGhJ bmZvIHsKKyAgICB1aW50MzJfdCBjb2RlOyAgICAgICAgICAgICAgICAgIC8vLzwgdGhlIGds eXBoIGNvZGUgcG9pbnQKKyAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgdGhlIHggcG9zaXRpb24gb2YgdGhlIGdseXBoCisgICAgaW50IHk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvLy88IHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBnbHlwaAorICAgIGlu dCBzaGlmdF94NjQ7ICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgaG9yaXpvbnRhbCBzaGlm dCBvZiB0aGUgZ2x5cGggaW4gMjYuNiB1bml0cworICAgIGludCBzaGlmdF95NjQ7ICAgICAg ICAgICAgICAgICAgLy8vPCB0aGUgdmVydGljYWwgc2hpZnQgb2YgdGhlIGdseXBoIGluIDI2 LjYgdW5pdHMKK30gR2x5cGhJbmZvOworCisvLyBJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmds ZSBsaW5lIG9mIHRleHQKK3R5cGVkZWYgc3RydWN0IFRleHRMaW5lIHsKKyAgICBpbnQgb2Zm c2V0X2xlZnQ2NDsgICAgICAgICAgICAgIC8vLzwgb2Zmc2V0IGJldHdlZW4gdGhlIG9yaWdp biBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLyAgdGhlIGxl ZnRtb3N0IHBpeGVsIG9mIHRoZSBmaXJzdCBnbHlwaAorICAgIGludCBvZmZzZXRfcmlnaHQ2 NDsgICAgICAgICAgICAgLy8vPCBtYXhpbXVtIG9mZnNldCBiZXR3ZWVuIHRoZSBvcmlnaW4g YW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8gIHRoZSByaWdo dG1vc3QgcGl4ZWwgb2YgdGhlIGxhc3QgZ2x5cGgKKyAgICBpbnQgd2lkdGg2NDsgICAgICAg ICAgICAgICAgICAgIC8vLzwgd2lkdGggb2YgdGhlIGxpbmUKKyAgICBIYXJmYnV6ekRhdGEg aGJfZGF0YTsgICAgICAgICAgIC8vLzwgbGliaGFyZmJ1enogZGF0YSBvZiB0aGlzIHRleHQg bGluZQorICAgIEdseXBoSW5mbyogZ2x5cGhzOyAgICAgICAgICAgICAgLy8vPCBhcnJheSBv ZiBnbHlwaHMgaW4gdGhpcyB0ZXh0IGxpbmUKKyAgICBpbnQgY2x1c3Rlcl9vZmZzZXQ7ICAg ICAgICAgICAgIC8vLzwgdGhlIG9mZnNldCBhdCB3aGljaCB0aGlzIGxpbmUgYmVnaW5zCit9 IFRleHRMaW5lOworCisvKiogQSBnbHlwaCBhcyBsb2FkZWQgYW5kIHJlbmRlcmVkIHVzaW5n IGxpYmZyZWV0eXBlICovCit0eXBlZGVmIHN0cnVjdCBHbHlwaCB7CisgICAgRlRfR2x5cGgg Z2x5cGg7CisgICAgRlRfR2x5cGggYm9yZGVyX2dseXBoOworICAgIHVpbnQzMl90IGNvZGU7 CisgICAgdW5zaWduZWQgaW50IGZvbnRzaXplOworICAgIC8qKiBHbHlwaCBiaXRtYXBzIHdp dGggMS80IHBpeGVsIHByZWNpc2lvbiBpbiBib3RoIGRpcmVjdGlvbnMgKi8KKyAgICBGVF9C aXRtYXBHbHlwaCBiZ2x5cGhbMTZdOworICAgIC8qKiBPdXRsaW5lZCBnbHlwaCBiaXRtYXBz IHdpdGggMS80IHBpeGVsIHByZWNpc2lvbiBpbiBib3RoIGRpcmVjdGlvbnMgKi8KKyAgICBG VF9CaXRtYXBHbHlwaCBib3JkZXJfYmdseXBoWzE2XTsKKyAgICBGVF9CQm94IGJib3g7Cit9 IEdseXBoOworCisvKiogR2xvYmFsIHRleHQgbWV0cmljcyAqLwordHlwZWRlZiBzdHJ1Y3Qg VGV4dE1ldHJpY3MgeworICAgIGludCBvZmZzZXRfdG9wNjQ7ICAgICAgICAgICAgICAgLy8v PCBhc2NlbmRlciBhbW91bnQgb2YgdGhlIGZpcnN0IGxpbmUgKGluIDI2LjYgdW5pdHMpCisg ICAgaW50IG9mZnNldF9ib3R0b202NDsgICAgICAgICAgICAvLy88IGRlc2NlbmRlciBhbW91 bnQgb2YgdGhlIGxhc3QgbGluZSAoaW4gMjYuNiB1bml0cykKKyAgICBpbnQgb2Zmc2V0X2xl ZnQ2NDsgICAgICAgICAgICAgIC8vLzwgbWF4aW11bSBvZmZzZXQgYmV0d2VlbiB0aGUgb3Jp Z2luIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vICB0aGUg bGVmdG1vc3QgcGl4ZWwgb2YgdGhlIGZpcnN0IGdseXBoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy8gIG9mIGVhY2ggbGluZSAoaW4gMjYuNiB1bml0cykKKyAg ICBpbnQgb2Zmc2V0X3JpZ2h0NjQ7ICAgICAgICAgICAgIC8vLzwgbWF4aW11bSBvZmZzZXQg YmV0d2VlbiB0aGUgb3JpZ2luIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8vICB0aGUgcmlnaHRtb3N0IHBpeGVsIG9mIHRoZSBsYXN0IGdseXBoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8gIG9mIGVhY2ggbGluZSAoaW4g MjYuNiB1bml0cykKKyAgICBpbnQgbGluZV9oZWlnaHQ2NDsgICAgICAgICAgICAgIC8vLzwg dGhlIGZvbnQtZGVmaW5lZCBsaW5lIGhlaWdodAorICAgIGludCB3aWR0aDsgICAgICAgICAg ICAgICAgICAgICAgLy8vPCB3aWR0aCBvZiB0aGUgbG9uZ2VzdCBsaW5lIC0gY2VpbCh3aWR0 aDY0LzY0KQorICAgIGludCBoZWlnaHQ7ICAgICAgICAgICAgICAgICAgICAgLy8vPCB0b3Rh bCBoZWlnaHQgb2YgdGhlIHRleHQgLSBjZWlsKGhlaWdodDY0LzY0KQorCisgICAgaW50IG1p bl95NjQ7ICAgICAgICAgICAgICAgICAgICAvLy88IG1pbmltdW0gdmFsdWUgb2YgYmJveC55 TWluIGFtb25nIGdseXBocyAoaW4gMjYuNiB1bml0cykKKyAgICBpbnQgbWF4X3k2NDsgICAg ICAgICAgICAgICAgICAgIC8vLzwgbWF4aW11bSB2YWx1ZSBvZiBiYm94LnlNYXggYW1vbmcg Z2x5cGhzIChpbiAyNi42IHVuaXRzKQorICAgIGludCBtaW5feDY0OyAgICAgICAgICAgICAg ICAgICAgLy8vPCBtaW5pbXVtIHZhbHVlIG9mIGJib3gueE1pbiBhbW9uZyBnbHlwaHMgKGlu IDI2LjYgdW5pdHMpCisgICAgaW50IG1heF94NjQ7ICAgICAgICAgICAgICAgICAgICAvLy88 IG1heGltdW0gdmFsdWUgb2YgYmJveC54TWF4IGFtb25nIGdseXBocyAoaW4gMjYuNiB1bml0 cykKKworICAgIC8vIFBvc2l0aW9uIGFuZCBzaXplIG9mIHRoZSBiYWNrZ3JvdW5kIGJveCAo d2l0aG91dCBib3JkZXJzKQorICAgIGludCByZWN0X3g7ICAgICAgICAgICAgICAgICAgICAg Ly8vPCB4IHBvc2l0aW9uIG9mIHRoZSBib3gKKyAgICBpbnQgcmVjdF95OyAgICAgICAgICAg ICAgICAgICAgIC8vLzwgeSBwb3NpdGlvbiBvZiB0aGUgYm94Cit9IFRleHRNZXRyaWNzOwor CiB0eXBlZGVmIHN0cnVjdCBEcmF3VGV4dENvbnRleHQgewogICAgIGNvbnN0IEFWQ2xhc3Mg KmNsYXNzOwogICAgIGludCBleHBfbW9kZTsgICAgICAgICAgICAgICAgICAgLy8vPCBleHBh bnNpb24gbW9kZSB0byB1c2UgZm9yIHRoZSB0ZXh0CiAgICAgaW50IHJlaW5pdDsgICAgICAg ICAgICAgICAgICAgICAvLy88IHRlbGxzIGlmIHRoZSBmaWx0ZXIgaXMgYmVpbmcgcmVpbml0 ZWQKICNpZiBDT05GSUdfTElCRk9OVENPTkZJRwotICAgIHVpbnQ4X3QgKmZvbnQ7ICAgICAg ICAgICAgICAvLy88IGZvbnQgdG8gYmUgdXNlZAorICAgIHVpbnQ4X3QgKmZvbnQ7ICAgICAg ICAgICAgICAgICAgLy8vPCBmb250IHRvIGJlIHVzZWQKICNlbmRpZgogICAgIHVpbnQ4X3Qg KmZvbnRmaWxlOyAgICAgICAgICAgICAgLy8vPCBmb250IHRvIGJlIHVzZWQKICAgICB1aW50 OF90ICp0ZXh0OyAgICAgICAgICAgICAgICAgIC8vLzwgdGV4dCB0byBiZSBkcmF3bgpAQCAt MTYxLDExICsyNjksOSBAQCB0eXBlZGVmIHN0cnVjdCBEcmF3VGV4dENvbnRleHQgewogICAg IHVpbnQ4X3QgKmZvbnRjb2xvcl9leHByOyAgICAgICAgLy8vPCBmb250Y29sb3IgZXhwcmVz c2lvbiB0byBldmFsdWF0ZQogICAgIEFWQlByaW50IGV4cGFuZGVkX2ZvbnRjb2xvcjsgICAg Ly8vPCB1c2VkIHRvIGNvbnRhaW4gdGhlIGV4cGFuZGVkIGZvbnRjb2xvciBzcGVjCiAgICAg aW50IGZ0X2xvYWRfZmxhZ3M7ICAgICAgICAgICAgICAvLy88IGZsYWdzIHVzZWQgZm9yIGxv YWRpbmcgZm9udHMsIHNlZSBGVF9MT0FEXyoKLSAgICBGVF9WZWN0b3IgKnBvc2l0aW9uczsg ICAgICAgICAgIC8vLzwgcG9zaXRpb25zIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHRleHQK LSAgICBzaXplX3QgbmJfcG9zaXRpb25zOyAgICAgICAgICAgIC8vLzwgbnVtYmVyIG9mIGVs ZW1lbnRzIG9mIHBvc2l0aW9ucyBhcnJheQogICAgIGNoYXIgKnRleHRmaWxlOyAgICAgICAg ICAgICAgICAgLy8vPCBmaWxlIHdpdGggdGV4dCB0byBiZSBkcmF3bgotICAgIGludCB4OyAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB4IHBvc2l0aW9uIHRvIHN0YXJ0IGRyYXdp bmcgdGV4dAotICAgIGludCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB5IHBv c2l0aW9uIHRvIHN0YXJ0IGRyYXdpbmcgdGV4dAorICAgIGRvdWJsZSB4OyAgICAgICAgICAg ICAgICAgICAgICAgLy8vPCB4IHBvc2l0aW9uIHRvIHN0YXJ0IGRyYXdpbmcgdGV4dAorICAg IGRvdWJsZSB5OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB5IHBvc2l0aW9uIHRvIHN0 YXJ0IGRyYXdpbmcgdGV4dAogICAgIGludCBtYXhfZ2x5cGhfdzsgICAgICAgICAgICAgICAg Ly8vPCBtYXggZ2x5cGggd2lkdGgKICAgICBpbnQgbWF4X2dseXBoX2g7ICAgICAgICAgICAg ICAgIC8vLzwgbWF4IGdseXBoIGhlaWdodAogICAgIGludCBzaGFkb3d4LCBzaGFkb3d5OwpA QCAtMTc3LDggKzI4MywxNCBAQCB0eXBlZGVmIHN0cnVjdCBEcmF3VGV4dENvbnRleHQgewog CiAgICAgaW50IGxpbmVfc3BhY2luZzsgICAgICAgICAgICAgICAvLy88IGxpbmVzIHNwYWNp bmcgaW4gcGl4ZWxzCiAgICAgc2hvcnQgaW50IGRyYXdfYm94OyAgICAgICAgICAgICAvLy88 IGRyYXcgYm94IGFyb3VuZCB0ZXh0IC0gdHJ1ZSBvciBmYWxzZQotICAgIGludCBib3hib3Jk ZXJ3OyAgICAgICAgICAgICAgICAgLy8vPCBib3ggYm9yZGVyIHdpZHRoCi0gICAgaW50IHVz ZV9rZXJuaW5nOyAgICAgICAgICAgICAgICAvLy88IGZvbnQga2VybmluZyBpcyB1c2VkIC0g dHJ1ZS9mYWxzZQorICAgIGNoYXIqIGJveGJvcmRlcnc7ICAgICAgICAgICAgICAgLy8vPCBi b3ggYm9yZGVyIHdpZHRoIChwYWRkaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vICBhbGxvd2VkIGZvcm1hdHM6ICJhbGwiLCAidmVydHxvcml6IiwgInRv cHxyaWdodHxib3R0b218bGVmdCIKKyAgICBpbnQgYmJfdG9wOyAgICAgICAgICAgICAgICAg ICAgIC8vLzwgdGhlIHNpemUgb2YgdGhlIHRvcCBib3ggYm9yZGVyCisgICAgaW50IGJiX3Jp Z2h0OyAgICAgICAgICAgICAgICAgICAvLy88IHRoZSBzaXplIG9mIHRoZSByaWdodCBib3gg Ym9yZGVyCisgICAgaW50IGJiX2JvdHRvbTsgICAgICAgICAgICAgICAgICAvLy88IHRoZSBz aXplIG9mIHRoZSBib3R0b20gYm94IGJvcmRlcgorICAgIGludCBiYl9sZWZ0OyAgICAgICAg ICAgICAgICAgICAgLy8vPCB0aGUgc2l6ZSBvZiB0aGUgbGVmdCBib3ggYm9yZGVyCisgICAg aW50IGJveF93aWR0aDsgICAgICAgICAgICAgICAgICAvLy88IHRoZSB3aWR0aCBvZiBib3gK KyAgICBpbnQgYm94X2hlaWdodDsgICAgICAgICAgICAgICAgIC8vLzwgdGhlIGhlaWdodCBv ZiBib3gKICAgICBpbnQgdGFic2l6ZTsgICAgICAgICAgICAgICAgICAgIC8vLzwgdGFiIHNp emUKICAgICBpbnQgZml4X2JvdW5kczsgICAgICAgICAgICAgICAgIC8vLzwgZG8gd2UgbGV0 IGl0IGdvIG91dCBvZiBmcmFtZSBib3VuZHMgLSB0L2YKIApAQCAtMjEzLDMxICszMjUsNDUg QEAgdHlwZWRlZiBzdHJ1Y3QgRHJhd1RleHRDb250ZXh0IHsKICAgICBpbnQgdGV4dF9zaGFw aW5nOyAgICAgICAgICAgICAgIC8vLzwgMSB0byBzaGFwZSB0aGUgdGV4dCBiZWZvcmUgZHJh d2luZyBpdAogI2VuZGlmCiAgICAgQVZEaWN0aW9uYXJ5ICptZXRhZGF0YTsKKworICAgIGlu dCBib3h3OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgdmFsdWUgb2YgdGhlIGJv eHcgcGFyYW1ldGVyCisgICAgaW50IGJveGg7ICAgICAgICAgICAgICAgICAgICAgICAvLy88 IHRoZSB2YWx1ZSBvZiB0aGUgYm94aCBwYXJhbWV0ZXIKKyAgICB1aW50OF90ICp0ZXh0X2Fs aWduOyAgICAgICAgICAgIC8vLzwgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHRleHQg YWxpZ25tZW50CisgICAgaW50IHlfYWxpZ247ICAgICAgICAgICAgICAgICAgICAvLy88IHRo ZSB2YWx1ZSBvZiB0aGUgeV9hbGlnbiBwYXJhbWV0ZXIKKworICAgIFRleHRMaW5lICpsaW5l czsgICAgICAgICAgICAgICAgLy8vPCBjb21wdXRlZCBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0 IGxpbmVzCisgICAgaW50IGxpbmVfY291bnQ7ICAgICAgICAgICAgICAgICAvLy88IHRoZSBu dW1iZXIgb2YgdGV4dCBsaW5lcworICAgIHVpbnQzMl90ICp0YWJfY2x1c3RlcnM7ICAgICAg ICAgLy8vPCB0aGUgcG9zaXRpb24gb2YgdGFiIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQKKyAg ICBpbnQgdGFiX2NvdW50OyAgICAgICAgICAgICAgICAgIC8vLzwgdGhlIG51bWJlciBvZiB0 YWIgY2hhcmFjdGVycworICAgIGludCBibGFua19hZHZhbmNlNjQ7ICAgICAgICAgICAgLy8v PCB0aGUgc2l6ZSBvZiB0aGUgc3BhY2UgY2hhcmFjdGVyCiB9IERyYXdUZXh0Q29udGV4dDsK IAogI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoRHJhd1RleHRDb250ZXh0LCB4KQogI2Rl ZmluZSBGTEFHUyBBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU18QVZfT1BUX0ZMQUdfVklE RU9fUEFSQU0KIAogc3RhdGljIGNvbnN0IEFWT3B0aW9uIGRyYXd0ZXh0X29wdGlvbnNbXT0g ewotICAgIHsiZm9udGZpbGUiLCAgICAic2V0IGZvbnQgZmlsZSIsICAgICAgICBPRkZTRVQo Zm9udGZpbGUpLCAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwg IDAsIDAsIEZMQUdTfSwKLSAgICB7InRleHQiLCAgICAgICAgInNldCB0ZXh0IiwgICAgICAg ICAgICAgT0ZGU0VUKHRleHQpLCAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywg ey5zdHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCi0gICAgeyJ0ZXh0ZmlsZSIsICAgICJzZXQg dGV4dCBmaWxlIiwgICAgICAgIE9GRlNFVCh0ZXh0ZmlsZSksICAgICAgICAgICBBVl9PUFRf VFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAotICAgIHsiZm9udGNv bG9yIiwgICAic2V0IGZvcmVncm91bmQgY29sb3IiLCBPRkZTRVQoZm9udGNvbG9yLnJnYmEp LCAgICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2sifSwgMCwgMCwgRkxBR1N9 LAorICAgIHsiZm9udGZpbGUiLCAgICAgICAic2V0IGZvbnQgZmlsZSIsICAgICAgICAgT0ZG U0VUKGZvbnRmaWxlKSwgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVM TH0sICAwLCAwLCBGTEFHU30sCisgICAgeyJ0ZXh0IiwgICAgICAgICAgICJzZXQgdGV4dCIs ICAgICAgICAgICAgICBPRkZTRVQodGV4dCksICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVf U1RSSU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAsIEZMQUdTfSwKKyAgICB7InRleHRmaWxlIiwg ICAgICAgInNldCB0ZXh0IGZpbGUiLCAgICAgICAgIE9GRlNFVCh0ZXh0ZmlsZSksICAgICAg ICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAor ICAgIHsiZm9udGNvbG9yIiwgICAgICAic2V0IGZvcmVncm91bmQgY29sb3IiLCAgT0ZGU0VU KGZvbnRjb2xvci5yZ2JhKSwgICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9ImJsYWNr In0sIDAsIDAsIEZMQUdTfSwKICAgICB7ImZvbnRjb2xvcl9leHByIiwgInNldCBmb3JlZ3Jv 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 X09QVF9UWVBFX0NPTE9SLCAgey5zdHI9IndoaXRlIn0sIDAsIDAsIEZMQUdTfSwKKyAgICB7 ImJvcmRlcmNvbG9yIiwgICAgInNldCBib3JkZXIgY29sb3IiLCAgICAgIE9GRlNFVChib3Jk ZXJjb2xvci5yZ2JhKSwgICBBVl9PUFRfVFlQRV9DT0xPUiwgIHsuc3RyPSJibGFjayJ9LCAw LCAwLCBGTEFHU30sCisgICAgeyJzaGFkb3djb2xvciIsICAgICJzZXQgc2hhZG93IGNvbG9y IiwgICAgICBPRkZTRVQoc2hhZG93Y29sb3IucmdiYSksICAgQVZfT1BUX1RZUEVfQ09MT1Is ICB7LnN0cj0iYmxhY2sifSwgMCwgMCwgRkxBR1N9LAorICAgIHsiYm94IiwgICAgICAgICAg ICAic2V0IGJveCIsICAgICAgICAgICAgICAgT0ZGU0VUKGRyYXdfYm94KSwgICAgICAgICAg IEFWX09QVF9UWVBFX0JPT0wsICAgey5pNjQ9MH0sICAgICAwLCAxLCBGTEFHU30sCisgICAg eyJib3hib3JkZXJ3IiwgICAgICJzZXQgYm94IGJvcmRlcnMgd2lkdGgiLCBPRkZTRVQoYm94 Ym9yZGVydyksICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAs IDAsIEZMQUdTfSwKKyAgICB7ImxpbmVfc3BhY2luZyIsICAgInNldCBsaW5lIHNwYWNpbmcg aW4gcGl4ZWxzIiwgT0ZGU0VUKGxpbmVfc3BhY2luZyksIEFWX09QVF9UWVBFX0lOVCwgICAg ey5pNjQ9LTF9LCAgICBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHU30sCisgICAgeyJmb250c2l6 ZSIsICAgICAgICJzZXQgZm9udCBzaXplIiwgICAgICAgICBPRkZTRVQoZm9udHNpemVfZXhw ciksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAsIEZMQUdT fSwKKyAgICB7InRleHRfYWxpZ24iLCAgICAgInNldCB0ZXh0IGFsaWdubWVudCIsICAgIE9G RlNFVCh0ZXh0X2FsaWduKSwgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPSJU TCJ9LCAgMCwgMCwgRkxBR1N9LAorICAgIHsieCIsICAgICAgICAgICAgICAic2V0IHggZXhw cmVzc2lvbiIsICAgICAgT0ZGU0VUKHhfZXhwciksICAgICAgICAgICAgIEFWX09QVF9UWVBF X1NUUklORywgey5zdHI9IjAifSwgICAwLCAwLCBGTEFHU30sCisgICAgeyJ5IiwgICAgICAg ICAgICAgICJzZXQgeSBleHByZXNzaW9uIiwgICAgICBPRkZTRVQoeV9leHByKSwgICAgICAg ICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAsIDAsIEZMQUdTfSwK KyAgICB7ImJveHciLCAgICAgICAgICAgInNldCBib3ggd2lkdGgiLCAgICAgICAgIE9GRlNF VChib3h3KSwgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PTB9LCAg ICAgMCwgSU5UX01BWCwgRkxBR1N9LAorICAgIHsiYm94aCIsICAgICAgICAgICAic2V0IGJv eCBoZWlnaHQiLCAgICAgICAgT0ZGU0VUKGJveGgpLCAgICAgICAgICAgICAgIEFWX09QVF9U WVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICAwLCBJTlRfTUFYLCBGTEFHU30sCisgICAgeyJz aGFkb3d4IiwgICAgICAgICJzZXQgc2hhZG93IHggb2Zmc2V0IiwgICBPRkZTRVQoc2hhZG93 eCksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIElOVF9N SU4sIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7InNoYWRvd3kiLCAgICAgICAgInNldCBzaGFk b3cgeSBvZmZzZXQiLCAgIE9GRlNFVChzaGFkb3d5KSwgICAgICAgICAgICBBVl9PUFRfVFlQ RV9JTlQsICAgIHsuaTY0PTB9LCAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1N9LAorICAg IHsiYm9yZGVydyIsICAgICAgICAic2V0IGJvcmRlciB3aWR0aCIsICAgICAgT0ZGU0VUKGJv cmRlcncpLCAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJ TlRfTUlOLCBJTlRfTUFYLCBGTEFHU30sCisgICAgeyJ0YWJzaXplIiwgICAgICAgICJzZXQg dGFiIHNpemUiLCAgICAgICAgICBPRkZTRVQodGFic2l6ZSksICAgICAgICAgICAgQVZfT1BU X1RZUEVfSU5ULCAgICB7Lmk2ND00fSwgICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7 ImJhc2V0aW1lIiwgICAgICAgInNldCBiYXNlIHRpbWUiLCAgICAgICAgIE9GRlNFVChiYXNl dGltZSksICAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQ2NCwgIHsuaTY0PUFWX05PUFRTX1ZB TFVFfSwgSU5UNjRfTUlOLCBJTlQ2NF9NQVgsIEZMQUdTfSwKICNpZiBDT05GSUdfTElCRk9O VENPTkZJRwogICAgIHsgImZvbnQiLCAgICAgICAgIkZvbnQgbmFtZSIsICAgICAgICAgICAg T0ZGU0VUKGZvbnQpLCAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3Ry ID0gIlNhbnMiIH0sICAgICAgICAgICAuZmxhZ3MgPSBGTEFHUyB9LAogI2VuZGlmCkBAIC0y NDYsMTcgKzM3MiwyMSBAQCBzdGF0aWMgY29uc3QgQVZPcHRpb24gZHJhd3RleHRfb3B0aW9u c1tdPSB7CiAgICAgICAgIHsibm9uZSIsICAgICAic2V0IG5vIGV4cGFuc2lvbiIsICAgICAg ICAgICAgICAgICAgICBPRkZTRVQoZXhwX21vZGUpLCBBVl9PUFRfVFlQRV9DT05TVCwgey5p NjQ9RVhQX05PTkV9LCAgICAgMCwgMCwgRkxBR1MsICJleHBhbnNpb24ifSwKICAgICAgICAg eyJub3JtYWwiLCAgICJzZXQgbm9ybWFsIGV4cGFuc2lvbiIsICAgICAgICAgICAgICAgIE9G RlNFVChleHBfbW9kZSksIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1FWFBfTk9STUFMfSwg ICAwLCAwLCBGTEFHUywgImV4cGFuc2lvbiJ9LAogICAgICAgICB7InN0cmZ0aW1lIiwgInNl dCBzdHJmdGltZSBleHBhbnNpb24gKGRlcHJlY2F0ZWQpIiwgT0ZGU0VUKGV4cF9tb2RlKSwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUVYUF9TVFJGVElNRX0sIDAsIDAsIEZMQUdTLCAi ZXhwYW5zaW9uIn0sCisgICAgeyJ5X2FsaWduIiwgICAic2V0IHRoZSB5IGFsaWdubWVudCIs ICAgIE9GRlNFVCh5X2FsaWduKSwgQVZfT1BUX1RZUEVfSU5ULCAgey5pNjQ9WUFfVEVYVH0s IDAsIDIsIEZMQUdTLCAieV9hbGlnbiJ9LAorICAgICAgICB7InRleHQiLCAgICAgInkgaXMg cmVmZXJyZWQgdG8gdGhlIHRvcCBvZiB0aGUgZmlyc3QgdGV4dCBsaW5lIiwgT0ZGU0VUKHlf YWxpZ24pLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9WUFfVEVYVH0sICAgICAwLCAwLCBG TEFHUywgInlfYWxpZ24ifSwKKyAgICAgICAgeyJiYXNlbGluZSIsICJ5IGlzIHJlZmVycmVk IHRvIHRoZSBiYXNlbGluZSBvZiB0aGUgZmlyc3QgbGluZSIsIE9GRlNFVCh5X2FsaWduKSwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVlBX0JBU0VMSU5FfSwgMCwgMCwgRkxBR1MsICJ5 X2FsaWduIn0sCisgICAgICAgIHsiZm9udCIsICAgICAieSBpcyByZWZlcnJlZCB0byB0aGUg Zm9udCBkZWZpbmVkIGxpbmUgbWV0cmljcyIsICBPRkZTRVQoeV9hbGlnbiksIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2ND1ZQV9GT05UfSwgICAgIDAsIDAsIEZMQUdTLCAieV9hbGlnbiJ9 LAogCiAgICAgeyJ0aW1lY29kZSIsICAgICAgICAic2V0IGluaXRpYWwgdGltZWNvZGUiLCAg ICAgICAgICAgICBPRkZTRVQodGNfb3B0X3N0cmluZyksIEFWX09QVF9UWVBFX1NUUklORywg ICB7LnN0cj1OVUxMfSwgMCwgMCwgRkxBR1N9LAotICAgIHsidGMyNGhtYXgiLCAgICAgICAg InNldCAyNCBob3VycyBtYXggKHRpbWVjb2RlIG9ubHkpIiwgT0ZGU0VUKHRjMjRobWF4KSwg ICAgICBBVl9PUFRfVFlQRV9CT09MLCAgICAgey5pNjQ9MH0sICAgICAgICAgICAwLCAgICAg ICAgMSwgRkxBR1N9LAotICAgIHsidGltZWNvZGVfcmF0ZSIsICAgInNldCByYXRlICh0aW1l Y29kZSBvbmx5KSIsICAgICAgICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRfVFlQ RV9SQVRJT05BTCwgey5kYmw9MH0sICAgICAgICAgICAwLCAgSU5UX01BWCwgRkxBR1N9LAot ICAgIHsiciIsICAgICAgICAgICAgICAgInNldCByYXRlICh0aW1lY29kZSBvbmx5KSIsICAg ICAgICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRfVFlQRV9SQVRJT05BTCwgey5k Ymw9MH0sICAgICAgICAgICAwLCAgSU5UX01BWCwgRkxBR1N9LAotICAgIHsicmF0ZSIsICAg ICAgICAgICAgInNldCByYXRlICh0aW1lY29kZSBvbmx5KSIsICAgICAgICAgT0ZGU0VUKHRj X3JhdGUpLCAgICAgICBBVl9PUFRfVFlQRV9SQVRJT05BTCwgey5kYmw9MH0sICAgICAgICAg ICAwLCAgSU5UX01BWCwgRkxBR1N9LAotICAgIHsicmVsb2FkIiwgICAgICJyZWxvYWQgdGV4 dCBmaWxlIGF0IHNwZWNpZmllZCBmcmFtZSBpbnRlcnZhbCIsIE9GRlNFVChyZWxvYWQpLCAg ICAgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND0wfSwgMCwgSU5UX01BWCwgRkxBR1N9LAotICAg IHsgImFscGhhIiwgICAgICAgImFwcGx5IGFscGhhIHdoaWxlIHJlbmRlcmluZyIsIE9GRlNF VChhX2V4cHIpLCAgICAgIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gIjEiICAgICB9 LCAgICAgICAgICAuZmxhZ3MgPSBGTEFHUyB9LAotICAgIHsiZml4X2JvdW5kcyIsICJjaGVj ayBhbmQgZml4IHRleHQgY29vcmRzIHRvIGF2b2lkIGNsaXBwaW5nIiwgT0ZGU0VUKGZpeF9i b3VuZHMpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2ND0wfSwgMCwgMSwgRkxBR1N9LAotICAg IHsic3RhcnRfbnVtYmVyIiwgInN0YXJ0IGZyYW1lIG51bWJlciBmb3Igbi9mcmFtZV9udW0g dmFyaWFibGUiLCBPRkZTRVQoc3RhcnRfbnVtYmVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2 ND0wfSwgMCwgSU5UX01BWCwgRkxBR1N9LAotICAgIHsidGV4dF9zb3VyY2UiLCAidGhlIHNv dXJjZSBvZiB0ZXh0IiwgT0ZGU0VUKHRleHRfc291cmNlX3N0cmluZyksIEFWX09QVF9UWVBF X1NUUklORywgey5zdHI9TlVMTH0sIDAsIDEsIEZMQUdTIH0sCisgICAgeyJ0YzI0aG1heCIs ICAgICAgICAic2V0IDI0IGhvdXJzIG1heCAodGltZWNvZGUgb25seSkiLCBPRkZTRVQodGMy NGhtYXgpLCAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgICB7Lmk2ND0wfSwgICAgMCwgMSwg RkxBR1N9LAorICAgIHsidGltZWNvZGVfcmF0ZSIsICAgInNldCByYXRlICh0aW1lY29kZSBv bmx5KSIsICAgICAgICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRfVFlQRV9SQVRJ T05BTCwgey5kYmw9MH0sICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7InIiLCAgICAg ICAgICAgICAgICJzZXQgcmF0ZSAodGltZWNvZGUgb25seSkiLCAgICAgICAgIE9GRlNFVCh0 Y19yYXRlKSwgICAgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUwsIHsuZGJsPTB9LCAgICAwLCBJ TlRfTUFYLCBGTEFHU30sCisgICAgeyJyYXRlIiwgICAgICAgICAgICAic2V0IHJhdGUgKHRp bWVjb2RlIG9ubHkpIiwgICAgICAgICBPRkZTRVQodGNfcmF0ZSksICAgICAgIEFWX09QVF9U WVBFX1JBVElPTkFMLCB7LmRibD0wfSwgICAgMCwgSU5UX01BWCwgRkxBR1N9LAorICAgIHsi cmVsb2FkIiwgICAgICAgICAgInJlbG9hZCB0ZXh0IGZpbGUgYXQgc3BlY2lmaWVkIGZyYW1l IGludGVydmFsIiwgT0ZGU0VUKHJlbG9hZCksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQ9MH0s ICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7ImFscGhhIiwgICAgICAgICAgICJhcHBs eSBhbHBoYSB3aGlsZSByZW5kZXJpbmciLCAgICAgIE9GRlNFVChhX2V4cHIpLCAgICAgICAg QVZfT1BUX1RZUEVfU1RSSU5HLCAgIHsuc3RyID0gIjEifSwgLmZsYWdzID0gRkxBR1N9LAor ICAgIHsiZml4X2JvdW5kcyIsICAgICAgImNoZWNrIGFuZCBmaXggdGV4dCBjb29yZHMgdG8g YXZvaWQgY2xpcHBpbmciLCBPRkZTRVQoZml4X2JvdW5kcyksIEFWX09QVF9UWVBFX0JPT0ws IHsuaTY0PTB9LCAwLCAxLCBGTEFHU30sCisgICAgeyJzdGFydF9udW1iZXIiLCAgICAic3Rh cnQgZnJhbWUgbnVtYmVyIGZvciBuL2ZyYW1lX251bSB2YXJpYWJsZSIsIE9GRlNFVChzdGFy dF9udW1iZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PTB9LCAwLCBJTlRfTUFYLCBGTEFH U30sCisgICAgeyJ0ZXh0X3NvdXJjZSIsICAgICAidGhlIHNvdXJjZSBvZiB0ZXh0IiwgT0ZG U0VUKHRleHRfc291cmNlX3N0cmluZyksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVM TH0sIDAsIDEsIEZMQUdTIH0sCiAKICNpZiBDT05GSUdfTElCRlJJQklESQogICAgIHsidGV4 dF9zaGFwaW5nIiwgImF0dGVtcHQgdG8gc2hhcGUgdGV4dCBiZWZvcmUgZHJhd2luZyIsIE9G RlNFVCh0ZXh0X3NoYXBpbmcpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2ND0xfSwgMCwgMSwg RkxBR1N9LApAQCAtMjk3LDE4ICs0MjcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmdF9l cnJvciB7CiAKICNkZWZpbmUgRlRfRVJSTVNHKGUpIGZ0X2Vycm9yc1tlXS5lcnJfbXNnCiAK LXR5cGVkZWYgc3RydWN0IEdseXBoIHsKLSAgICBGVF9HbHlwaCBnbHlwaDsKLSAgICBGVF9H bHlwaCBib3JkZXJfZ2x5cGg7Ci0gICAgdWludDMyX3QgY29kZTsKLSAgICB1bnNpZ25lZCBp bnQgZm9udHNpemU7Ci0gICAgRlRfQml0bWFwIGJpdG1hcDsgLy8vPCBhcnJheSBob2xkaW5n IGJpdG1hcHMgb2YgZm9udAotICAgIEZUX0JpdG1hcCBib3JkZXJfYml0bWFwOyAvLy88IGFy cmF5IGhvbGRpbmcgYml0bWFwcyBvZiBmb250IGJvcmRlcgotICAgIEZUX0JCb3ggYmJveDsK LSAgICBpbnQgYWR2YW5jZTsKLSAgICBpbnQgYml0bWFwX2xlZnQ7Ci0gICAgaW50IGJpdG1h cF90b3A7Ci19IEdseXBoOworCisvLyBMb2FkcyBhbmQgKG9wdGlvbmFsbHkpIHJlbmRlcnMg YSBnbHlwaAorc3RhdGljIGludCBsb2FkX2dseXBoKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBH bHlwaCAqKmdseXBoX3B0ciwgdWludDMyX3QgY29kZSwKKyAgICAgaW50OF90IHNoaWZ0X3g2 NCwgaW50OF90IHNoaWZ0X3k2NCk7CisKKy8vIFNoYXBlcyBhIGxpbmUgb2YgdGV4dCB1c2lu ZyBsaWJoYXJmYnV6egorc3RhdGljIHZvaWQgc2hhcGVfdGV4dF9oYihEcmF3VGV4dENvbnRl eHQgKnMsIEhhcmZidXp6RGF0YSogaGIsIGNvbnN0IGNoYXIqIHRleHQsIGludCB0ZXh0TGVu KTsKKworLy8gUGVyZm9ybXMgdGV4dCBtZWFzdXJlbWVudHMKK3N0YXRpYyBpbnQgbWVhc3Vy ZV90ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBUZXh0TWV0cmljcyAqbWV0cmljcyk7CisK Ky8vIERyYXdzIGdseXBocyBvbiB0aGUgZnJhbWUKK3N0YXRpYyBpbnQgZHJhd19nbHlwaHMo RHJhd1RleHRDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgRkZEcmF3Q29sb3IgKmNvbG9yLCBUZXh0TWV0cmljcyAqbWV0cmljcywKKyAgICAg ICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgYm9yZGVydyk7CisKKy8vIERy YXdzIHRleHQgb24gdGhlIGZyYW1lCitzdGF0aWMgaW50IGRyYXdfdGV4dChBVkZpbHRlckNv bnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpOwogCiBzdGF0aWMgaW50IGdseXBoX2NtcChj b25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmIpCiB7CkBAIC0zMTYsODAgKzQ1Miw5IEBA IHN0YXRpYyBpbnQgZ2x5cGhfY21wKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqYikK ICAgICBpbnQ2NF90IGRpZmYgPSAoaW50NjRfdClhLT5jb2RlIC0gKGludDY0X3QpYmItPmNv ZGU7CiAKICAgICBpZiAoZGlmZiAhPSAwKQotICAgICAgICAgcmV0dXJuIGRpZmYgPiAwID8g MSA6IC0xOworICAgICAgICByZXR1cm4gZGlmZiA+IDAgPyAxIDogLTE7CiAgICAgZWxzZQot ICAgICAgICAgcmV0dXJuIEZGRElGRlNJR04oKGludDY0X3QpYS0+Zm9udHNpemUsIChpbnQ2 NF90KWJiLT5mb250c2l6ZSk7Ci19Ci0KLS8qKgotICogTG9hZCBnbHlwaHMgY29ycmVzcG9u ZGluZyB0byB0aGUgVVRGLTMyIGNvZGVwb2ludCBjb2RlLgotICovCi1zdGF0aWMgaW50IGxv YWRfZ2x5cGgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEdseXBoICoqZ2x5cGhfcHRyLCB1aW50 MzJfdCBjb2RlKQotewotICAgIERyYXdUZXh0Q29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAg ICBGVF9CaXRtYXBHbHlwaCBiaXRtYXBnbHlwaDsKLSAgICBHbHlwaCAqZ2x5cGg7Ci0gICAg c3RydWN0IEFWVHJlZU5vZGUgKm5vZGUgPSBOVUxMOwotICAgIGludCByZXQ7Ci0KLSAgICAv KiBsb2FkIGdseXBoIGludG8gcy0+ZmFjZS0+Z2x5cGggKi8KLSAgICBpZiAoRlRfTG9hZF9D aGFyKHMtPmZhY2UsIGNvZGUsIHMtPmZ0X2xvYWRfZmxhZ3MpKQotICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOwotCi0gICAgZ2x5cGggPSBhdl9tYWxsb2N6KHNpemVvZigqZ2x5 cGgpKTsKLSAgICBpZiAoIWdseXBoKSB7Ci0gICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVN KTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgZ2x5cGgtPmNvZGUgID0gY29k ZTsKLSAgICBnbHlwaC0+Zm9udHNpemUgPSBzLT5mb250c2l6ZTsKLQotICAgIGlmIChGVF9H ZXRfR2x5cGgocy0+ZmFjZS0+Z2x5cGgsICZnbHlwaC0+Z2x5cGgpKSB7Ci0gICAgICAgIHJl dCA9IEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAg aWYgKHMtPmJvcmRlcncpIHsKLSAgICAgICAgZ2x5cGgtPmJvcmRlcl9nbHlwaCA9IGdseXBo LT5nbHlwaDsKLSAgICAgICAgaWYgKEZUX0dseXBoX1N0cm9rZUJvcmRlcigmZ2x5cGgtPmJv cmRlcl9nbHlwaCwgcy0+c3Ryb2tlciwgMCwgMCkgfHwKLSAgICAgICAgICAgIEZUX0dseXBo X1RvX0JpdG1hcCgmZ2x5cGgtPmJvcmRlcl9nbHlwaCwgRlRfUkVOREVSX01PREVfTk9STUFM LCAwLCAxKSkgewotICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICAg ICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgYml0bWFwZ2x5cGggPSAo RlRfQml0bWFwR2x5cGgpIGdseXBoLT5ib3JkZXJfZ2x5cGg7Ci0gICAgICAgIGdseXBoLT5i b3JkZXJfYml0bWFwID0gYml0bWFwZ2x5cGgtPmJpdG1hcDsKLSAgICB9Ci0gICAgaWYgKEZU X0dseXBoX1RvX0JpdG1hcCgmZ2x5cGgtPmdseXBoLCBGVF9SRU5ERVJfTU9ERV9OT1JNQUws IDAsIDEpKSB7Ci0gICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgIGdv dG8gZXJyb3I7Ci0gICAgfQotICAgIGJpdG1hcGdseXBoID0gKEZUX0JpdG1hcEdseXBoKSBn bHlwaC0+Z2x5cGg7Ci0KLSAgICBnbHlwaC0+Yml0bWFwICAgICAgPSBiaXRtYXBnbHlwaC0+ Yml0bWFwOwotICAgIGdseXBoLT5iaXRtYXBfbGVmdCA9IGJpdG1hcGdseXBoLT5sZWZ0Owot ICAgIGdseXBoLT5iaXRtYXBfdG9wICA9IGJpdG1hcGdseXBoLT50b3A7Ci0gICAgZ2x5cGgt PmFkdmFuY2UgICAgID0gcy0+ZmFjZS0+Z2x5cGgtPmFkdmFuY2UueCA+PiA2OwotCi0gICAg LyogbWVhc3VyZSB0ZXh0IGhlaWdodCB0byBjYWxjdWxhdGUgdGV4dF9oZWlnaHQgKG9yIHRo ZSBtYXhpbXVtIHRleHQgaGVpZ2h0KSAqLwotICAgIEZUX0dseXBoX0dldF9DQm94KGdseXBo LT5nbHlwaCwgZnRfZ2x5cGhfYmJveF9waXhlbHMsICZnbHlwaC0+YmJveCk7Ci0KLSAgICAv KiBjYWNoZSB0aGUgbmV3bHkgY3JlYXRlZCBnbHlwaCAqLwotICAgIGlmICghKG5vZGUgPSBh dl90cmVlX25vZGVfYWxsb2MoKSkpIHsKLSAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0p OwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBhdl90cmVlX2luc2VydCgmcy0+ Z2x5cGhzLCBnbHlwaCwgZ2x5cGhfY21wLCAmbm9kZSk7Ci0KLSAgICBpZiAoZ2x5cGhfcHRy KQotICAgICAgICAqZ2x5cGhfcHRyID0gZ2x5cGg7Ci0gICAgcmV0dXJuIDA7Ci0KLWVycm9y OgotICAgIGlmIChnbHlwaCkKLSAgICAgICAgYXZfZnJlZXAoJmdseXBoLT5nbHlwaCk7Ci0K LSAgICBhdl9mcmVlcCgmZ2x5cGgpOwotICAgIGF2X2ZyZWVwKCZub2RlKTsKLSAgICByZXR1 cm4gcmV0OworICAgICAgICByZXR1cm4gRkZESUZGU0lHTigoaW50NjRfdClhLT5mb250c2l6 ZSwgKGludDY0X3QpYmItPmZvbnRzaXplKTsKIH0KIAogc3RhdGljIGF2X2NvbGQgaW50IHNl dF9mb250c2l6ZShBVkZpbHRlckNvbnRleHQgKmN0eCwgdW5zaWduZWQgaW50IGZvbnRzaXpl KQpAQCAtNDM5LDcgKzUwNCw2IEBAIHN0YXRpYyBhdl9jb2xkIGludCB1cGRhdGVfZm9udHNp emUoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAgICAgICAgICAgIHJldHVybiBlcnI7CiAKICAg ICAgICAgc2l6ZSA9IGF2X2V4cHJfZXZhbChzLT5mb250c2l6ZV9wZXhwciwgcy0+dmFyX3Zh bHVlcywgJnMtPnBybmcpOwotCiAgICAgICAgIGlmICghaXNuYW4oc2l6ZSkpIHsKICAgICAg ICAgICAgIHJvdW5kZWRzaXplID0gcm91bmQoc2l6ZSk7CiAgICAgICAgICAgICAvLyB0ZXN0 IGZvciBvdmVyZmxvdyBiZWZvcmUgY2FzdApAQCAtNDQ3LDcgKzUxMSw2IEBAIHN0YXRpYyBh dl9jb2xkIGludCB1cGRhdGVfZm9udHNpemUoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAgICAg ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiZm9udHNpemUgb3ZlcmZs b3dcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CiAgICAg ICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvbnRzaXplID0gcm91bmRlZHNpemU7CiAgICAg ICAgIH0KICAgICB9CkBAIC01NDgsNyArNjExLDcgQEAgc3RhdGljIGludCBsb2FkX2ZvbnRf Zm9udGNvbmZpZyhBVkZpbHRlckNvbnRleHQgKmN0eCkKICAgICAgICAgZ290byBmYWlsOwog ICAgIH0KIAotICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiVXNpbmcgXCIlc1wiXG4i LCBmaWxlbmFtZSk7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBc IiVzXCJcbiIsIGZpbGVuYW1lKTsKICAgICBpZiAocGFyc2VfZXJyKQogICAgICAgICBzLT5k ZWZhdWx0X2ZvbnRzaXplID0gc2l6ZSArIDAuNTsKIApAQCAtNjkwLDYgKzc1Myw3IEBAIHN0 YXRpYyBpbnQgc2hhcGVfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCkKICAgICBzLT50ZXh0 ID0gdG1wOwogICAgIGxlbiA9IGZyaWJpZGlfdW5pY29kZV90b19jaGFyc2V0KEZSSUJJRElf Q0hBUl9TRVRfVVRGOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bmljb2Rlc3RyLCBsZW4sIHMtPnRleHQpOworCiAgICAgcmV0ID0gMDsKIAogb3V0OgpAQCAt NzExLDExICs3NzUsMzkgQEAgc3RhdGljIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0ZXh0 X3NvdXJjZV9zdHJpbmdfcGFyc2UoY29uc3QgY2hhciAqdGV4dF9zb3VyY2UKICAgICB9CiB9 CiAKKy8vIENvbnZlcnQgYSBzdHJpbmcgZm9ybWF0dGVkIGFzICJuMXxuMnwuLi58bk4iIGlu dG8gYW4gaW50ZWdlciBhcnJheQorc3RhdGljIGludCBzdHJpbmdfdG9fYXJyYXkoY29uc3Qg Y2hhciogc291cmNlLCBpbnQqIHJlc3VsdCwgaW50IHJlc3VsdF9zaXplKSB7CisgICAgaW50 IGNvdW50ZXIgPSAwLCBzaXplID0gc3RybGVuKHNvdXJjZSkgKyAxOworICAgIGNoYXIgKnNh dmVwdHIsICpjdXJ2YWwsICpkdXAgPSBhdl9tYWxsb2Moc2l6ZSk7CisgICAgYXZfc3RybGNw eShkdXAsIHNvdXJjZSwgc2l6ZSk7CisgICAgaWYocmVzdWx0X3NpemUgPiAwICYmIChjdXJ2 YWwgPSBhdl9zdHJ0b2soZHVwLCAifCIsICZzYXZlcHRyKSkpIHsKKyAgICAgICAgZG8gewor ICAgICAgICAgICAgaWYoY291bnRlciA9PSByZXN1bHRfc2l6ZSkgeworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0W2NvdW50ZXIr K10gPSBhdG9pKGN1cnZhbCk7CisgICAgICAgIH0gd2hpbGUoKGN1cnZhbCA9IGF2X3N0cnRv ayhOVUxMLCAifCIsICZzYXZlcHRyKSkgJiYgY291bnRlciA8IHJlc3VsdF9zaXplKTsKKyAg ICB9CisgICAgYXZfZnJlZShkdXApOworICAgIHJldHVybiBjb3VudGVyOworfQorCitzdGF0 aWMgaW50IHZhbGlkYXRlX3RleHRfYWxpZ24oY2hhciogdGV4dF9hbGlnbikgeworICAgIGlu dCBlcnIgPSAwOworICAgIGlmKHN0cmxlbih0ZXh0X2FsaWduKSAhPSAyCisgICAgICAgIHx8 IHN0cmNocigiTENSVE1CIiwgdGV4dF9hbGlnblswXSkgPT0gTlVMTCB8fCBzdHJjaHIoIkxD UlRNQiIsIHRleHRfYWxpZ25bMV0pID09IE5VTEwKKyAgICAgICAgfHwgKHN0cmNocigiVE1C IiwgdGV4dF9hbGlnblswXSkgIT0gTlVMTCAmJiBzdHJjaHIoIkxDUiIsIHRleHRfYWxpZ25b MV0pID09IE5VTEwpCisgICAgICAgIHx8IChzdHJjaHIoIkxDUiIsIHRleHRfYWxpZ25bMF0p ICE9IE5VTEwgJiYgc3RyY2hyKCJUTUIiLCB0ZXh0X2FsaWduWzFdKSA9PSBOVUxMKSkgewor ICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAgcmV0dXJuIGVy cjsKK30KKwogc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgp CiB7CiAgICAgaW50IGVycjsKICAgICBEcmF3VGV4dENvbnRleHQgKnMgPSBjdHgtPnByaXY7 Ci0gICAgR2x5cGggKmdseXBoOwogCiAgICAgYXZfZXhwcl9mcmVlKHMtPmZvbnRzaXplX3Bl eHByKTsKICAgICBzLT5mb250c2l6ZV9wZXhwciA9IE5VTEw7CkBAIC03MjgsNiArODIwLDgg QEAgc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CiAgICAgfQogCisvLyAgICBpbml0X3RleHQo Y3R4KTsKKwogICAgIGlmIChzLT50ZXh0ZmlsZSkgewogICAgICAgICBpZiAocy0+dGV4dCkg ewogICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLApAQCAtNzc3LDYgKzg3 MSwxNCBAQCBzdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkK ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICB9CiAKKyAgICBpZigoZXJy ID0gdmFsaWRhdGVfdGV4dF9hbGlnbihzLT50ZXh0X2FsaWduKSkpIHsKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIlRoZSB2YWx1ZSBwcm92 aWRlZCBmb3IgcGFyYW1ldGVyICd0ZXh0X2FsaWduJyBpcyBub3QgdmFsaWQsXG4iKTsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgInBsZWFz ZSBzcGVjaWZ5IGEgdHdvIGNoYXJhY3RlcnMgc3RyaW5nIGNvbnRhaW5pbmcgb25seSBvbmUg bGV0dGVyIGZvciBob3Jpem9udGFsIGFsaWdubWVudCAoJ0xDUicpIGFuZCBvbmUgZm9yIHZl cnRpY2FsIGFsaWdubWVudCAoJ1RNQicpXG4iKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAg ICB9CisKICNpZiBDT05GSUdfTElCRlJJQklESQogICAgIGlmIChzLT50ZXh0X3NoYXBpbmcp CiAgICAgICAgIGlmICgoZXJyID0gc2hhcGVfdGV4dChjdHgpKSA8IDApCkBAIC03OTUsMjYg Kzg5NywxOSBAQCBzdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0 eCkKICAgICBpZiAoKGVyciA9IHVwZGF0ZV9mb250c2l6ZShjdHgpKSA8IDApCiAgICAgICAg IHJldHVybiBlcnI7CiAKKyAgICAvLyBBbHdheXMgaW5pdCB0aGUgc3Ryb2tlciwgbWF5IGJl IG5lZWRlZCBpZiBib3JkZXJ3IGlzIHNldCB2aWEgdGhlICJjaGFuZ2UiIGNvbW1hbmQKKyAg ICBpZiAoRlRfU3Ryb2tlcl9OZXcocy0+bGlicmFyeSwgJnMtPnN0cm9rZXIpKSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNvdWx0IG5vdCBpbml0IEZUIHN0cm9r ZXJcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKICAg ICBpZiAocy0+Ym9yZGVydykgewotICAgICAgICBpZiAoRlRfU3Ryb2tlcl9OZXcocy0+bGli cmFyeSwgJnMtPnN0cm9rZXIpKSB7Ci0gICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJDb3VsdCBub3QgaW5pdCBGVCBzdHJva2VyXG4iKTsKLSAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgICAgICB9CiAgICAgICAgIEZUX1N0cm9rZXJf U2V0KHMtPnN0cm9rZXIsIHMtPmJvcmRlcncgPDwgNiwgRlRfU1RST0tFUl9MSU5FQ0FQX1JP VU5ELAogICAgICAgICAgICAgICAgICAgICAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5E LCAwKTsKICAgICB9CiAKLSAgICBzLT51c2Vfa2VybmluZyA9IEZUX0hBU19LRVJOSU5HKHMt PmZhY2UpOwotCiAgICAgLyogbG9hZCB0aGUgZmFsbGJhY2sgZ2x5cGggd2l0aCBjb2RlIDAg Ki8KLSAgICBsb2FkX2dseXBoKGN0eCwgTlVMTCwgMCk7Ci0KLSAgICAvKiBzZXQgdGhlIHRh YnNpemUgaW4gcGl4ZWxzICovCi0gICAgaWYgKChlcnIgPSBsb2FkX2dseXBoKGN0eCwgJmds eXBoLCAnICcpKSA8IDApIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi Q291bGQgbm90IHNldCB0YWJzaXplLlxuIik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAg fQotICAgIHMtPnRhYnNpemUgKj0gZ2x5cGgtPmFkdmFuY2U7CisgICAgbG9hZF9nbHlwaChj dHgsIE5VTEwsIDAsIDAsIDApOwogCiAgICAgaWYgKHMtPmV4cF9tb2RlID09IEVYUF9TVFJG VElNRSAmJgogICAgICAgICAoc3RyY2hyKHMtPnRleHQsICclJykgfHwgc3RyY2hyKHMtPnRl eHQsICdcXCcpKSkKQEAgLTgzNyw2ICs5MzIsMTQgQEAgc3RhdGljIGludCBnbHlwaF9lbnVf ZnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKmVsZW0pCiAKICAgICBGVF9Eb25lX0dseXBoKGds eXBoLT5nbHlwaCk7CiAgICAgRlRfRG9uZV9HbHlwaChnbHlwaC0+Ym9yZGVyX2dseXBoKTsK KyAgICBmb3IoaW50IHQgPSAwOyB0IDwgMTY7ICsrdCkgeworICAgICAgICBpZihnbHlwaC0+ YmdseXBoW3RdICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEZUX0RvbmVfR2x5cGgoKEZUX0ds eXBoKWdseXBoLT5iZ2x5cGhbdF0pOworICAgICAgICB9CisgICAgICAgIGlmKGdseXBoLT5i b3JkZXJfYmdseXBoW3RdICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEZUX0RvbmVfR2x5cGgo KEZUX0dseXBoKWdseXBoLT5ib3JkZXJfYmdseXBoW3RdKTsKKyAgICAgICAgfQorICAgIH0K ICAgICBhdl9mcmVlKGVsZW0pOwogICAgIHJldHVybiAwOwogfQpAQCAtODUyLDkgKzk1NSw2 IEBAIHN0YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQog CiAgICAgcy0+eF9wZXhwciA9IHMtPnlfcGV4cHIgPSBzLT5hX3BleHByID0gcy0+Zm9udHNp emVfcGV4cHIgPSBOVUxMOwogCi0gICAgYXZfZnJlZXAoJnMtPnBvc2l0aW9ucyk7Ci0gICAg cy0+bmJfcG9zaXRpb25zID0gMDsKLQogICAgIGF2X3RyZWVfZW51bWVyYXRlKHMtPmdseXBo cywgTlVMTCwgTlVMTCwgZ2x5cGhfZW51X2ZyZWUpOwogICAgIGF2X3RyZWVfZGVzdHJveShz LT5nbHlwaHMpOwogICAgIHMtPmdseXBocyA9IE5VTEw7CkBAIC04ODAsMTUgKzk4MCwxNSBA QCBzdGF0aWMgaW50IGNvbmZpZ19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKICAgICBm Zl9kcmF3X2NvbG9yKCZzLT5kYywgJnMtPmJvcmRlcmNvbG9yLCBzLT5ib3JkZXJjb2xvci5y Z2JhKTsKICAgICBmZl9kcmF3X2NvbG9yKCZzLT5kYywgJnMtPmJveGNvbG9yLCAgICBzLT5i b3hjb2xvci5yZ2JhKTsKIAotICAgIHMtPnZhcl92YWx1ZXNbVkFSX3ddICAgICA9IHMtPnZh cl92YWx1ZXNbVkFSX1ddICAgICA9IHMtPnZhcl92YWx1ZXNbVkFSX01BSU5fV10gPSBpbmxp bmstPnc7Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfaF0gICAgID0gcy0+dmFyX3ZhbHVlc1tW QVJfSF0gICAgID0gcy0+dmFyX3ZhbHVlc1tWQVJfTUFJTl9IXSA9IGlubGluay0+aDsKLSAg ICBzLT52YXJfdmFsdWVzW1ZBUl9TQVJdICAgPSBpbmxpbmstPnNhbXBsZV9hc3BlY3RfcmF0 aW8ubnVtID8gYXZfcTJkKGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRpbykgOiAxOwotICAg IHMtPnZhcl92YWx1ZXNbVkFSX0RBUl0gICA9IChkb3VibGUpaW5saW5rLT53IC8gaW5saW5r LT5oICogcy0+dmFyX3ZhbHVlc1tWQVJfU0FSXTsKLSAgICBzLT52YXJfdmFsdWVzW1ZBUl9I U1VCXSAgPSAxIDw8IHMtPmRjLmhzdWJfbWF4OwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX1ZT VUJdICA9IDEgPDwgcy0+ZGMudnN1Yl9tYXg7Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfWF0g ICAgID0gTkFOOwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX1ldICAgICA9IE5BTjsKLSAgICBz LT52YXJfdmFsdWVzW1ZBUl9UXSAgICAgPSBOQU47CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJf d10gICAgPSBzLT52YXJfdmFsdWVzW1ZBUl9XXSA9IHMtPnZhcl92YWx1ZXNbVkFSX01BSU5f V10gPSBpbmxpbmstPnc7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfaF0gICAgPSBzLT52YXJf dmFsdWVzW1ZBUl9IXSA9IHMtPnZhcl92YWx1ZXNbVkFSX01BSU5fSF0gPSBpbmxpbmstPmg7 CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfU0FSXSAgPSBpbmxpbmstPnNhbXBsZV9hc3BlY3Rf cmF0aW8ubnVtID8gYXZfcTJkKGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRpbykgOiAxOwor ICAgIHMtPnZhcl92YWx1ZXNbVkFSX0RBUl0gID0gKGRvdWJsZSlpbmxpbmstPncgLyBpbmxp bmstPmggKiBzLT52YXJfdmFsdWVzW1ZBUl9TQVJdOworICAgIHMtPnZhcl92YWx1ZXNbVkFS X0hTVUJdID0gMSA8PCBzLT5kYy5oc3ViX21heDsKKyAgICBzLT52YXJfdmFsdWVzW1ZBUl9W U1VCXSA9IDEgPDwgcy0+ZGMudnN1Yl9tYXg7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfWF0g ICAgPSBOQU47CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfWV0gICAgPSBOQU47CisgICAgcy0+ dmFyX3ZhbHVlc1tWQVJfVF0gICAgPSBOQU47CiAKICAgICBhdl9sZmdfaW5pdCgmcy0+cHJu ZywgYXZfZ2V0X3JhbmRvbV9zZWVkKCkpOwogCkBAIC05NDgsOCArMTA0OCwxMDAgQEAgc3Rh dGljIGludCBjb21tYW5kKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpjbWQs IGNvbnN0IGNoYXIgKmFyZywgY2hhcgogCiAgICAgICAgIGN0eC0+cHJpdiA9IG5ldzsKICAg ICAgICAgcmV0dXJuIGNvbmZpZ19pbnB1dChjdHgtPmlucHV0c1swXSk7Ci0gICAgfSBlbHNl CisgICAgfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImNoYW5nZSIpKSB7CisgICAgICAgIGNo YXIgKmtleSwgKnZhbHVlOworICAgICAgICBjb25zdCBjaGFyICphcmd2ID0gYXJnOworICAg ICAgICBuZXcgPSBhdl9tYWxsb2N6KHNpemVvZihEcmF3VGV4dENvbnRleHQpKTsKKyAgICAg ICAgaWYgKCFuZXcpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAg ICAgICBuZXctPmNsYXNzID0gJmRyYXd0ZXh0X2NsYXNzOworICAgICAgICBjdHgtPnByaXYg PSBuZXc7CisgICAgICAgIHJldCA9IGF2X3NldF9vcHRpb25zX3N0cmluZyhjdHgsIGFyZywg Ij0iLCAiOiIpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgY3R4LT5w cml2ID0gb2xkOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAg IGRvIHsKKyAgICAgICAgICAgIGludCBlcnIgPSBhdl9vcHRfZ2V0X2tleV92YWx1ZSgmYXJn diwgIj0iLCAiOiIsIDAsICZrZXksICZ2YWx1ZSk7CisgICAgICAgICAgICBpZihlcnIgPT0g QVZFUlJPUihFSU5WQUwpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9IGVsc2UgaWYoZXJyID49IDApIHsKKyAgICAgICAgICAgICAgICBpZihzdHJjbXAoa2V5 LCAidGV4dCIpID09IDApIHsKKy8vICAgICAgICAgICAgICAgICAgICBpbml0X3RleHQoY3R4 KTsKKyAgICAgICAgICAgICAgICAgICAgRkZTV0FQKHVpbnQ4X3QqLCBuZXctPnRleHQsIG9s ZC0+dGV4dCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJ4Iikg PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBGRlNXQVAoY2hhciosIG5ldy0+eF9leHBy LCBvbGQtPnhfZXhwcik7CisgICAgICAgICAgICAgICAgICAgIEZGU1dBUChBVkV4cHIqLCBu ZXctPnhfcGV4cHIsIG9sZC0+eF9wZXhwcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm KHN0cmNtcChrZXksICJ5IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBGRlNXQVAo Y2hhciosIG5ldy0+eV9leHByLCBvbGQtPnlfZXhwcik7CisgICAgICAgICAgICAgICAgICAg IEZGU1dBUChBVkV4cHIqLCBuZXctPnlfcGV4cHIsIG9sZC0+eV9wZXhwcik7CisgICAgICAg ICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJhbHBoYSIpID09IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgRkZTV0FQKGNoYXIqLCBuZXctPmFfZXhwciwgb2xkLT5hX2V4cHIp OworICAgICAgICAgICAgICAgICAgICBGRlNXQVAoQVZFeHByKiwgbmV3LT5hX3BleHByLCBv bGQtPmFfcGV4cHIpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZihzdHJjbXAoa2V5LCAi Zm9udHNpemUiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIEZGU1dBUChjaGFyKiwg bmV3LT5mb250c2l6ZV9leHByLCBvbGQtPmZvbnRzaXplX2V4cHIpOworICAgICAgICAgICAg ICAgICAgICBGRlNXQVAoQVZFeHByKiwgbmV3LT5mb250c2l6ZV9wZXhwciwgb2xkLT5mb250 c2l6ZV9wZXhwcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJm b250Y29sb3IiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZC0+Zm9udGNvbG9y ID0gbmV3LT5mb250Y29sb3I7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChr ZXksICJib3hjb2xvciIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb2xkLT5ib3hj b2xvciA9IG5ldy0+Ym94Y29sb3I7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNt cChrZXksICJib3JkZXJjb2xvciIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb2xk LT5ib3JkZXJjb2xvciA9IG5ldy0+Ym9yZGVyY29sb3I7CisgICAgICAgICAgICAgICAgfSBl bHNlIGlmKHN0cmNtcChrZXksICJzaGFkb3djb2xvciIpID09IDApIHsKKyAgICAgICAgICAg ICAgICAgICAgb2xkLT5zaGFkb3djb2xvciA9IG5ldy0+c2hhZG93Y29sb3I7CisgICAgICAg ICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJmb250Y29sb3JfZXhwciIpID09IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgRkZTV0FQKHVpbnQ4X3QqLCBuZXctPmZvbnRjb2xv cl9leHByLCBvbGQtPmZvbnRjb2xvcl9leHByKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYoc3RyY21wKGtleSwgImJveCIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb2xk LT5kcmF3X2JveCA9IG5ldy0+ZHJhd19ib3g7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm KHN0cmNtcChrZXksICJib3h3IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvbGQt PmJveHcgPSBuZXctPmJveHc7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChr ZXksICJib3hoIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvbGQtPmJveGggPSBu ZXctPmJveGg7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJib3hi b3JkZXJ3IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBGRlNXQVAoY2hhciosIG5l dy0+Ym94Ym9yZGVydywgb2xkLT5ib3hib3JkZXJ3KTsKKyAgICAgICAgICAgICAgICB9IGVs c2UgaWYoc3RyY21wKGtleSwgImxpbmVfc3BhY2luZyIpID09IDApIHsKKyAgICAgICAgICAg ICAgICAgICAgb2xkLT5saW5lX3NwYWNpbmcgPSBuZXctPmxpbmVfc3BhY2luZzsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgaWYoc3RyY21wKGtleSwgInRleHRfYWxpZ24iKSA9PSAwKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmKCF2YWxpZGF0ZV90ZXh0X2FsaWduKHZhbHVlKSkg eworICAgICAgICAgICAgICAgICAgICAgICAgRkZTV0FQKHVpbnQ4X3QqLCBuZXctPnRleHRf YWxpZ24sIG9sZC0+dGV4dF9hbGlnbik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIklnbm9yaW5nIGludmFsaWQgcGFyYW1ldGVy IHZhbHVlICclcycgZm9yICd0ZXh0X2FsaWduJ1xuIiwgdmFsdWUpOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJzaGFk b3d4IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvbGQtPnNoYWRvd3ggPSBuZXct PnNoYWRvd3g7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJzaGFk b3d5IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvbGQtPnNoYWRvd3kgPSBuZXct PnNoYWRvd3k7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNtcChrZXksICJib3Jk ZXJ3IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvbGQtPmJvcmRlcncgPSBuZXct PmJvcmRlcnc7CisgICAgICAgICAgICAgICAgICAgIGlmKG9sZC0+Ym9yZGVydykgeworICAg ICAgICAgICAgICAgICAgICAgICAgRlRfU3Ryb2tlcl9TZXQob2xkLT5zdHJva2VyLCBvbGQt PmJvcmRlcncgPDwgNiwgRlRfU1RST0tFUl9MSU5FQ0FQX1JPVU5ELAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRlRfU1RST0tFUl9MSU5FSk9JTl9ST1VORCwgMCk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJPcHRpb24gJyVz JyBjYW5ub3QgYmUgbW9kaWZpZWQgd2l0aCB0aGUgJ2NoYW5nZScgY29tbWFuZCwgdXNlICdy ZWluaXQnIGluc3RlYWRcbiIsIGtleSk7CisgICAgICAgICAgICAgICAgfQorLy8gICAgICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAib3B0aW9uOiAlcyAlc1xuIiwg a2V5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYXZfZnJlZShrZXkpOworICAgICAgICAg ICAgICAgIGF2X2ZyZWUodmFsdWUpOworICAgICAgICAgICAgICAgIGlmKCphcmd2ID09ICc6 JykgeworICAgICAgICAgICAgICAgICAgICArK2FyZ3Y7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdHgtPnByaXYgPSBvbGQ7 CisgICAgICAgICAgICAgICAgYXZfb3B0X2ZyZWUobmV3KTsKKyAgICAgICAgICAgICAgICBy ZXQgPSBlcnI7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQor ICAgICAgICB9IHdoaWxlKDEpOworICAgICAgICB1bmluaXQoY3R4KTsKKyAgICAgICAgY3R4 LT5wcml2ID0gb2xkOworICAgICAgICBhdl9vcHRfZnJlZShuZXcpOworICAgICAgICBhdl9m cmVlcCgmbmV3KTsKKyAgICAgICAgcmV0dXJuIGNvbmZpZ19pbnB1dChjdHgtPmlucHV0c1sw XSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKyAg ICB9CiAKIGZhaWw6CiAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IHByb2Nlc3MgY29tbWFuZC4gQ29udGludWluZyB3aXRoIGV4aXN0aW5nIHBhcmFtZXRlcnMu XG4iKTsKQEAgLTEzMTgsOTEgKzE1MTAsNDIyIEBAIHN0YXRpYyBpbnQgZXhwYW5kX3RleHQo QVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNoYXIgKnRleHQsIEFWQlByaW50ICpicCkKICAgICBy ZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlX2NvbG9yX3dpdGhfYWxwaGEoRHJh d1RleHRDb250ZXh0ICpzLCBGRkRyYXdDb2xvciAqY29sb3IsIGNvbnN0IEZGRHJhd0NvbG9y IGluY29sb3IpCit7CisgICAgKmNvbG9yID0gaW5jb2xvcjsKKyAgICBjb2xvci0+cmdiYVsz XSA9IChjb2xvci0+cmdiYVszXSAqIHMtPmFscGhhKSAvIDI1NTsKKyAgICBmZl9kcmF3X2Nv bG9yKCZzLT5kYywgY29sb3IsIGNvbG9yLT5yZ2JhKTsKK30KKworc3RhdGljIHZvaWQgdXBk YXRlX2FscGhhKERyYXdUZXh0Q29udGV4dCAqcykKK3sKKyAgICBkb3VibGUgYWxwaGEgPSBh dl9leHByX2V2YWwocy0+YV9wZXhwciwgcy0+dmFyX3ZhbHVlcywgJnMtPnBybmcpOworCisg ICAgaWYgKGlzbmFuKGFscGhhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGFscGhh ID49IDEuMCkKKyAgICAgICAgcy0+YWxwaGEgPSAyNTU7CisgICAgZWxzZSBpZiAoYWxwaGEg PD0gMCkKKyAgICAgICAgcy0+YWxwaGEgPSAwOworICAgIGVsc2UKKyAgICAgICAgcy0+YWxw aGEgPSAyNTYgKiBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X3N1YnBpeGVs X2lkeChpbnQgc2hpZnRfeDY0LCBpbnQgc2hpZnRfeTY0KSB7CisgICAgaW50IGlkeCA9IChz aGlmdF94NjQgPj4gMikgKyAoc2hpZnRfeTY0ID4+IDQpOworICAgIHJldHVybiBpZHg7Cit9 CisKK3N0YXRpYyBpbnQgbG9hZF9nbHlwaChBVkZpbHRlckNvbnRleHQgKmN0eCwgR2x5cGgg KipnbHlwaF9wdHIsIHVpbnQzMl90IGNvZGUsIGludDhfdCBzaGlmdF94NjQsIGludDhfdCBz aGlmdF95NjQpCit7CisgICAgRHJhd1RleHRDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAg IEdseXBoIGR1bW15ID0geyAwIH07CisgICAgR2x5cGggKmdseXBoOworICAgIEZUX1ZlY3Rv ciBzaGlmdDsKKyAgICBzdHJ1Y3QgQVZUcmVlTm9kZSAqbm9kZSA9IE5VTEw7CisgICAgaW50 IHJldCA9IDA7CisKKyAgICAvKiBnZXQgZ2x5cGggKi8KKyAgICBkdW1teS5jb2RlID0gY29k ZTsKKyAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXplOworICAgIGdseXBoID0gYXZf dHJlZV9maW5kKHMtPmdseXBocywgJmR1bW15LCBnbHlwaF9jbXAsIE5VTEwpOworICAgIGlm KCFnbHlwaCkgeworLy8gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkdseXBo OiAlZCBub3QgY2FjaGVkIC0+IGxvYWRpbmcuLi5cbiIsIGNvZGUpOworICAgICAgICBpZiAo RlRfTG9hZF9HbHlwaChzLT5mYWNlLCBjb2RlLCBzLT5mdF9sb2FkX2ZsYWdzKSkgeworICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgfQorICAgICAgICBn bHlwaCA9IGF2X21hbGxvY3ooc2l6ZW9mKCpnbHlwaCkpOworICAgICAgICBpZiAoIWdseXBo KSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBn b3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGdseXBoLT5jb2RlICA9IGNvZGU7Cisg ICAgICAgIGdseXBoLT5mb250c2l6ZSA9IHMtPmZvbnRzaXplOworICAgICAgICBpZiAoRlRf R2V0X0dseXBoKHMtPmZhY2UtPmdseXBoLCAmZ2x5cGgtPmdseXBoKSkgeworICAgICAgICAg ICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAg ICAgICAgfQorICAgICAgICBpZiAocy0+Ym9yZGVydykgeworLy8gICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfREVCVUcsICJTdHJva2luZyBnbHlwaDogJWRcbiIsIGNvZGUpOwor ICAgICAgICAgICAgZ2x5cGgtPmJvcmRlcl9nbHlwaCA9IGdseXBoLT5nbHlwaDsKKyAgICAg ICAgICAgIGlmIChGVF9HbHlwaF9TdHJva2VCb3JkZXIoJmdseXBoLT5ib3JkZXJfZ2x5cGgs IHMtPnN0cm9rZXIsIDAsIDApKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9F WFRFUk5BTDsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIC8qIG1lYXN1cmUgdGV4dCBoZWlnaHQgdG8gY2FsY3VsYXRl IHRleHRfaGVpZ2h0IChvciB0aGUgbWF4aW11bSB0ZXh0IGhlaWdodCkgKi8KKyAgICAgICAg RlRfR2x5cGhfR2V0X0NCb3goZ2x5cGgtPmdseXBoLCBGVF9HTFlQSF9CQk9YX1NVQlBJWEVM UywgJmdseXBoLT5iYm94KTsKKworICAgICAgICAvKiBjYWNoZSB0aGUgbmV3bHkgY3JlYXRl ZCBnbHlwaCAqLworICAgICAgICBpZiAoIShub2RlID0gYXZfdHJlZV9ub2RlX2FsbG9jKCkp KSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBn b3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGF2X3RyZWVfaW5zZXJ0KCZzLT5nbHlw aHMsIGdseXBoLCBnbHlwaF9jbXAsICZub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp ZihzLT5ib3JkZXJ3ICYmICFnbHlwaC0+Ym9yZGVyX2dseXBoKSB7CisgICAgICAgICAgICBn bHlwaC0+Ym9yZGVyX2dseXBoID0gZ2x5cGgtPmdseXBoOworICAgICAgICAgICAgaWYgKEZU X0dseXBoX1N0cm9rZUJvcmRlcigmZ2x5cGgtPmJvcmRlcl9nbHlwaCwgcy0+c3Ryb2tlciwg MCwgMCkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOworICAg ICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisKKyAgICAvLyBDaGVjayBpZiBhIGJpdG1hcCBpcyBuZWVkZWQKKyAgICBpZihzaGlm dF94NjQgPj0gMCAmJiBzaGlmdF95NjQgPj0gMCkgeworICAgICAgICAvLyBHZXQgdGhlIGJp dG1hcCBzdWJwaXhlbCBpbmRleCAoMCAtPiAxNSkKKyAgICAgICAgaW50IGlkeCA9IGdldF9z dWJwaXhlbF9pZHgoc2hpZnRfeDY0LCBzaGlmdF95NjQpOworCisgICAgICAgIGlmKCFnbHlw aC0+YmdseXBoW2lkeF0pIHsKKyAgICAgICAgICAgIEZUX0dseXBoIHRtcF9nbHlwaCA9IGds eXBoLT5nbHlwaDsKKyAgICAgICAgICAgIC8vIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywg IlJlbmRlcmluZyBiaXRtYXAgWyVkXSBmb3IgZ2x5cGg6ICVkXG4iLCBpZHgsIGNvZGUpOwor ICAgICAgICAgICAgc2hpZnQueCA9IHNoaWZ0X3g2NDsKKyAgICAgICAgICAgIHNoaWZ0Lnkg PSBzaGlmdF95NjQ7CisgICAgICAgICAgICBpZihGVF9HbHlwaF9Ub19CaXRtYXAoJnRtcF9n bHlwaCwgRlRfUkVOREVSX01PREVfTk9STUFMLCAmc2hpZnQsIDApKSB7CisgICAgICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAgICAgICBnb3RvIGVy cm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2x5cGgtPmJnbHlwaFtpZHhdID0g KEZUX0JpdG1hcEdseXBoKXRtcF9nbHlwaDsKKyAgICAgICAgICAgIGlmKGdseXBoLT5iZ2x5 cGhbaWR4XS0+Yml0bWFwLnBpeGVsX21vZGUgPT0gRlRfUElYRUxfTU9ERV9NT05PKSB7Cisg ICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiTW9ub2Nyb21hdGlj ICgxYnBwKSBmb250cyBhcmUgbm90IHN1cHBvcnRlZC5cbiIpOworICAgICAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzLT5ib3JkZXJ3ICYmICFn bHlwaC0+Ym9yZGVyX2JnbHlwaFtpZHhdKSB7CisgICAgICAgICAgICBGVF9HbHlwaCB0bXBf Z2x5cGggPSBnbHlwaC0+Ym9yZGVyX2dseXBoOworICAgICAgICAgICAgLy8gYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAiUmVuZGVyaW5nIGJvcmRlciBiaXRtYXAgWyVkXSBmb3IgZ2x5 cGg6ICVkXG4iLCBpZHgsIGNvZGUpOworICAgICAgICAgICAgaWYoRlRfR2x5cGhfVG9fQml0 bWFwKCZ0bXBfZ2x5cGgsIEZUX1JFTkRFUl9NT0RFX05PUk1BTCwgJnNoaWZ0LCAwKSkgewor ICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICAg ICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdseXBoLT5ib3Jk ZXJfYmdseXBoW2lkeF0gPSAoRlRfQml0bWFwR2x5cGgpdG1wX2dseXBoOworICAgICAgICB9 CisgICAgfQorICAgIGlmKGdseXBoX3B0cikgeworICAgICAgICAqZ2x5cGhfcHRyID0gZ2x5 cGg7CisgICAgfQorICAgIHJldHVybiAwOworCitlcnJvcjoKKyAgICBpZiAoZ2x5cGggJiYg Z2x5cGgtPmdseXBoKQorICAgICAgICBGVF9Eb25lX0dseXBoKGdseXBoLT5nbHlwaCk7CisK KyAgICBhdl9mcmVlcCgmZ2x5cGgpOworICAgIGF2X2ZyZWVwKCZub2RlKTsKKyAgICByZXR1 cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGRyYXdfZ2x5cGhzKERyYXdUZXh0Q29udGV4dCAq cywgQVZGcmFtZSAqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwg aW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgRkZEcmF3Q29sb3IgKmNvbG9y LAorICAgICAgICAgICAgICAgICAgICAgICBUZXh0TWV0cmljcyAqbWV0cmljcywKICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgYm9yZGVydykKIHsKLSAgICBj aGFyICp0ZXh0ID0gcy0+ZXhwYW5kZWRfdGV4dC5zdHI7Ci0gICAgdWludDMyX3QgY29kZSA9 IDA7Ci0gICAgaW50IGksIHgxLCB5MTsKLSAgICB1aW50OF90ICpwOwotICAgIEdseXBoICpn bHlwaCA9IE5VTEw7CisgICAgaW50IGcsIGwsIHgxLCB5MSwgdzEsIGgxLCBpZHg7CisgICAg aW50IGR4ID0gMCwgZHkgPSAwLCBwZHggPSAwOworICAgIEdseXBoSW5mbyAqaW5mbzsKKyAg ICBHbHlwaCBkdW1teSA9IHsgMCB9LCAqZ2x5cGg7CisgICAgRlRfQml0bWFwIGJpdG1hcDsK KyAgICBGVF9CaXRtYXBHbHlwaCBiX2dseXBoOworICAgIHVpbnQ4X3Qgal9jZW50ZXIgPSAw LCBqX3JpZ2h0ID0gMCwgal9taWRkbGUgPSAwLCBqX2JvdHRvbSA9IDA7CisgICAgaW50IGxp bmVfdywgb2Zmc2V0X3kgPSAwOworICAgIGludCBjbGlwX3ggPSAwLCBjbGlwX3kgPSAwOwor CisgICAgal9jZW50ZXIgPSBzdHJzdHIocy0+dGV4dF9hbGlnbiwgIkMiKSA+IDA7CisgICAg al9yaWdodCA9IHN0cnN0cihzLT50ZXh0X2FsaWduLCAiUiIpID4gMDsKKyAgICBqX21pZGRs ZSA9IHN0cnN0cihzLT50ZXh0X2FsaWduLCAiTSIpID4gMDsKKyAgICBqX2JvdHRvbSA9IHN0 cnN0cihzLT50ZXh0X2FsaWduLCAiQiIpID4gMDsKKyAgICAvLyBhdl9sb2cocywgQVZfTE9H X0RFQlVHLCAiT3V0ZXIgcmVjdGFuZ2xlIC0gdzogJWQsIGg6ICVkXG4iLCBzLT5ib3hfd2lk dGgsIHMtPmJveF9oZWlnaHQpOworICAgIC8vIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJU ZXh0IHBvc2l0aW9uOiAlc1xuIiwgcy0+dGV4dF9hbGlnbik7CisKKyAgICBpZihqX21pZGRs ZSkgeworICAgICAgICBvZmZzZXRfeSA9IChzLT5ib3hfaGVpZ2h0IC0gbWV0cmljcy0+aGVp Z2h0KSAvIDI7CisgICAgfSBlbHNlIGlmKGpfYm90dG9tKSB7CisgICAgICAgIG9mZnNldF95 ID0gcy0+Ym94X2hlaWdodCAtIG1ldHJpY3MtPmhlaWdodDsKKyAgICB9CiAKLSAgICBmb3Ig KGkgPSAwLCBwID0gdGV4dDsgKnA7IGkrKykgewotICAgICAgICBGVF9CaXRtYXAgYml0bWFw OwotICAgICAgICBHbHlwaCBkdW1teSA9IHsgMCB9OwotICAgICAgICBHRVRfVVRGOChjb2Rl LCAqcCA/ICpwKysgOiAwLCBjb2RlID0gMHhmZmZkOyBnb3RvIGNvbnRpbnVlX29uX2ludmFs aWQ7KTsKLWNvbnRpbnVlX29uX2ludmFsaWQ6CisgICAgY2xpcF94ID0gRkZNSU4obWV0cmlj cy0+cmVjdF94ICsgcy0+Ym94X3dpZHRoICsgcy0+YmJfcmlnaHQsIGZyYW1lLT53aWR0aCk7 CisgICAgY2xpcF95ID0gRkZNSU4obWV0cmljcy0+cmVjdF95ICsgcy0+Ym94X2hlaWdodCAr IHMtPmJiX2JvdHRvbSwgZnJhbWUtPmhlaWdodCk7CisKKyAgICAvLyBhdl9sb2cocywgQVZf TE9HX0RFQlVHLCAiRHJhd2luZyB0ZXh0IGF0ICglZCwgJWQpIChjbGlwX3g6ICVkLCBjbGlw X3k6ICVkKVxuIiwKKyAgICAvLyAgICAgeCwgeSwgY2xpcF94LCBjbGlwX3kpOworCisgICAg Zm9yKGwgPSAwOyBsIDwgcy0+bGluZV9jb3VudDsgKytsKSB7CisgICAgICAgIFRleHRMaW5l ICpsaW5lID0gJnMtPmxpbmVzW2xdOworICAgICAgICBsaW5lX3cgPSBQT1NfQ0VJTChsaW5l LT53aWR0aDY0LCA2NCk7CisgICAgICAgIGZvcihnID0gMDsgZyA8IGxpbmUtPmhiX2RhdGEu Z2x5cGhfY291bnQ7ICsrZykgeworICAgICAgICAgICAgaW5mbyA9ICZsaW5lLT5nbHlwaHNb Z107CisgICAgICAgICAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXplOworICAgICAg ICAgICAgZHVtbXkuY29kZSA9IGluZm8tPmNvZGU7CisgICAgICAgICAgICBnbHlwaCA9IGF2 X3RyZWVfZmluZChzLT5nbHlwaHMsICZkdW1teSwgZ2x5cGhfY21wLCBOVUxMKTsKKyAgICAg ICAgICAgIGlmKCFnbHlwaCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgLyogc2tpcCBuZXcgbGluZSBjaGFy cywganVzdCBnbyB0byBuZXcgbGluZSAqLwotICAgICAgICBpZiAoY29kZSA9PSAnXG4nIHx8 IGNvZGUgPT0gJ1xyJyB8fCBjb2RlID09ICdcdCcpCi0gICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgIGlkeCA9IGdldF9zdWJwaXhlbF9pZHgoaW5mby0+c2hpZnRfeDY0LCBp bmZvLT5zaGlmdF95NjQpOworICAgICAgICAgICAgYl9nbHlwaCA9IGJvcmRlcncgPyBnbHlw aC0+Ym9yZGVyX2JnbHlwaFtpZHhdIDogZ2x5cGgtPmJnbHlwaFtpZHhdOworICAgICAgICAg ICAgYml0bWFwID0gYl9nbHlwaC0+Yml0bWFwOworICAgICAgICAgICAgeDEgPSB4ICsgaW5m by0+eCArIGJfZ2x5cGgtPmxlZnQ7CisgICAgICAgICAgICB5MSA9IHkgKyBpbmZvLT55IC0g Yl9nbHlwaC0+dG9wICsgb2Zmc2V0X3k7CisgICAgICAgICAgICB3MSA9IGJpdG1hcC53aWR0 aDsKKyAgICAgICAgICAgIGgxID0gYml0bWFwLnJvd3M7CisKKyAgICAgICAgICAgIGlmKGpf Y2VudGVyKSB7CisgICAgICAgICAgICAgICAgeDEgKz0gKHMtPmJveF93aWR0aCAtIGxpbmVf dykgLyAyOworICAgICAgICAgICAgfSBlbHNlIGlmKGpfcmlnaHQpIHsKKyAgICAgICAgICAg ICAgICB4MSArPSBzLT5ib3hfd2lkdGggLSBsaW5lX3c7CisgICAgICAgICAgICB9CiAKLSAg ICAgICAgZHVtbXkuY29kZSA9IGNvZGU7Ci0gICAgICAgIGR1bW15LmZvbnRzaXplID0gcy0+ Zm9udHNpemU7Ci0gICAgICAgIGdseXBoID0gYXZfdHJlZV9maW5kKHMtPmdseXBocywgJmR1 bW15LCBnbHlwaF9jbXAsIE5VTEwpOworICAgICAgICAgICAgLy8gT2Zmc2V0IG9mIHRoZSBn bHlwaCdzIGJpdG1hcCBpbiB0aGUgdmlzaWJsZSByZWdpb24KKyAgICAgICAgICAgIGR4ID0g ZHkgPSAwOworICAgICAgICAgICAgaWYoeDEgPCBtZXRyaWNzLT5yZWN0X3ggLSBzLT5iYl9s ZWZ0KSB7CisgICAgICAgICAgICAgICAgZHggPSBtZXRyaWNzLT5yZWN0X3ggLSBzLT5iYl9s ZWZ0IC0geDE7CisgICAgICAgICAgICAgICAgeDEgPSBtZXRyaWNzLT5yZWN0X3ggLSBzLT5i Yl9sZWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoeTEgPCBtZXRyaWNzLT5y ZWN0X3kgLSBzLT5iYl90b3ApIHsKKyAgICAgICAgICAgICAgICBkeSA9IG1ldHJpY3MtPnJl Y3RfeSAtIHMtPmJiX3RvcCAtIHkxOworICAgICAgICAgICAgICAgIHkxID0gbWV0cmljcy0+ cmVjdF95IC0gcy0+YmJfdG9wOworICAgICAgICAgICAgfQogCi0gICAgICAgIGJpdG1hcCA9 IGJvcmRlcncgPyBnbHlwaC0+Ym9yZGVyX2JpdG1hcCA6IGdseXBoLT5iaXRtYXA7CisgICAg ICAgICAgICAvLyBjaGVjayBpZiB0aGUgZ2x5cGggaXMgZW1wdHkgb3Igb3V0IG9mIHRoZSBj bGlwcGluZyByZWdpb24KKyAgICAgICAgICAgIGlmKGR4ID49IHcxIHx8IGR5ID49IGgxIHx8 IHgxID49IGNsaXBfeCB8fCB5MSA+PSBjbGlwX3kpIHsKKyAgICAgICAgICAgICAgICAvLyBh dl9sb2cocywgQVZfTE9HX0RFQlVHLCAiR2x5cGggKGNvZGU6ICVkIC0gbGluZTogJWQgLSBn bHlwaDogJWQgLSBkeDogJWQgLSB3eDogJWQpIGlzIGVtcHR5IG9yIG91dCBvZiB0aGUgY2xp cHBpbmcgcmVnaW9uXG4iLAorICAgICAgICAgICAgICAgIC8vICAgICBpbmZvLT5jb2RlLCBs LCBnLCBkeCwgdzEpOworICAgICAgICAgICAgICAgIC8vIGF2X2xvZyhzLCBBVl9MT0dfREVC VUcsICJHbHlwaCAlZCAtLSBkeDogJWQsIGR5OiAlZCwgeDE6ICVkLCB5MTogJWQsIHcxOiAl ZCwgaDE6ICVkXG4iLAorICAgICAgICAgICAgICAgIC8vICAgICBpbmZvLT5jb2RlLCBkeCwg ZHksIHgxLCB5MSwgdzEsIGgxKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgICAgIH0KIAotICAgICAgICBpZiAoZ2x5cGgtPmJpdG1hcC5waXhlbF9tb2RlICE9IEZU X1BJWEVMX01PREVfTU9OTyAmJgotICAgICAgICAgICAgZ2x5cGgtPmJpdG1hcC5waXhlbF9t b2RlICE9IEZUX1BJWEVMX01PREVfR1JBWSkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7CisgICAgICAgICAgICBwZHggPSBkeCArIGR5ICogYml0bWFwLnBpdGNoOwor ICAgICAgICAgICAgdzEgPSBGRk1JTihjbGlwX3ggLSB4MSwgdzEgLSBkeCk7CisgICAgICAg ICAgICBoMSA9IEZGTUlOKGNsaXBfeSAtIHkxLCBoMSAtIGR5KTsKIAotICAgICAgICB4MSA9 IHMtPnBvc2l0aW9uc1tpXS54K3MtPngreCAtIGJvcmRlcnc7Ci0gICAgICAgIHkxID0gcy0+ cG9zaXRpb25zW2ldLnkrcy0+eSt5IC0gYm9yZGVydzsKKyAgICAgICAgICAgIC8vIGF2X2xv ZyhzLCBBVl9MT0dfREVCVUcsICJEcmF3aW5nIGdseXBoICVkWyVkXSAobGluZTogJWQgbnVt OiAlZCkgYXQgKCVkLCAlZCkgKGluZm8ueDogJWQsIGluZm8ueTogJWQpXG4iLAorICAgICAg ICAgICAgLy8gICAgIGluZm8tPmNvZGUsIGlkeCwgbCwgZywgeDEsIHkxLCBpbmZvLT54LCBp bmZvLT55KTsKIAotICAgICAgICBmZl9ibGVuZF9tYXNrKCZzLT5kYywgY29sb3IsCi0gICAg ICAgICAgICAgICAgICAgICAgZnJhbWUtPmRhdGEsIGZyYW1lLT5saW5lc2l6ZSwgd2lkdGgs IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAuYnVmZmVyLCBiaXRtYXAu cGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgYml0bWFwLndpZHRoLCBiaXRtYXAucm93 cywKLSAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucGl4ZWxfbW9kZSA9PSBGVF9QSVhF TF9NT0RFX01PTk8gPyAwIDogMywKLSAgICAgICAgICAgICAgICAgICAgICAwLCB4MSwgeTEp OworICAgICAgICAgICAgZmZfYmxlbmRfbWFzaygmcy0+ZGMsIGNvbG9yLCBmcmFtZS0+ZGF0 YSwgZnJhbWUtPmxpbmVzaXplLCBjbGlwX3gsIGNsaXBfeSwKKyAgICAgICAgICAgICAgICBi aXRtYXAuYnVmZmVyICsgcGR4LCBiaXRtYXAucGl0Y2gsIHcxLCBoMSwgMywgMCwgeDEsIHkx KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9p ZCBzaGFwZV90ZXh0X2hiKERyYXdUZXh0Q29udGV4dCAqcywgSGFyZmJ1enpEYXRhKiBoYiwg Y29uc3QgY2hhciogdGV4dCwgaW50IHRleHRMZW4pIHsKKyAgICBoYi0+YnVmID0gaGJfYnVm ZmVyX2NyZWF0ZSgpOworICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKGhiLT5idWYsIEhC X0RJUkVDVElPTl9MVFIpOworICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KGhiLT5idWYsIEhC X1NDUklQVF9MQVRJTik7CisgICAgaGJfYnVmZmVyX3NldF9sYW5ndWFnZShoYi0+YnVmLCBo Yl9sYW5ndWFnZV9mcm9tX3N0cmluZygiZW4iLCAtMSkpOworICAgIGhiX2J1ZmZlcl9ndWVz c19zZWdtZW50X3Byb3BlcnRpZXMoaGItPmJ1Zik7CisgICAgaGItPmZvbnQgPSBoYl9mdF9m b250X2NyZWF0ZShzLT5mYWNlLCBOVUxMKTsKKyAgICBoYl9mdF9mb250X3NldF9mdW5jcyho Yi0+Zm9udCk7CisgICAgaGJfYnVmZmVyX2FkZF91dGY4KGhiLT5idWYsIHRleHQsIHRleHRM ZW4sIDAsIC0xKTsKKyAgICBoYl9zaGFwZShoYi0+Zm9udCwgaGItPmJ1ZiwgTlVMTCwgMCk7 CisgICAgaGItPmdseXBoX2luZm8gPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zKGhiLT5i dWYsICZoYi0+Z2x5cGhfY291bnQpOworICAgIGhiLT5nbHlwaF9wb3MgPSBoYl9idWZmZXJf Z2V0X2dseXBoX3Bvc2l0aW9ucyhoYi0+YnVmLCAmaGItPmdseXBoX2NvdW50KTsKK30KIAot c3RhdGljIHZvaWQgdXBkYXRlX2NvbG9yX3dpdGhfYWxwaGEoRHJhd1RleHRDb250ZXh0ICpz LCBGRkRyYXdDb2xvciAqY29sb3IsIGNvbnN0IEZGRHJhd0NvbG9yIGluY29sb3IpCi17Ci0g ICAgKmNvbG9yID0gaW5jb2xvcjsKLSAgICBjb2xvci0+cmdiYVszXSA9IChjb2xvci0+cmdi YVszXSAqIHMtPmFscGhhKSAvIDI1NTsKLSAgICBmZl9kcmF3X2NvbG9yKCZzLT5kYywgY29s b3IsIGNvbG9yLT5yZ2JhKTsKK3N0YXRpYyB2b2lkIGhiX2Rlc3Ryb3koSGFyZmJ1enpEYXRh ICpoYikgeworICAgIGhiX2J1ZmZlcl9kZXN0cm95KGhiLT5idWYpOworICAgIGhiX2ZvbnRf ZGVzdHJveShoYi0+Zm9udCk7CisgICAgaGItPmJ1ZiA9IE5VTEw7CisgICAgaGItPmZvbnQg PSBOVUxMOworICAgIGhiLT5nbHlwaF9pbmZvID0gTlVMTDsKKyAgICBoYi0+Z2x5cGhfcG9z ID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX2FscGhhKERyYXdUZXh0Q29udGV4 dCAqcykKLXsKLSAgICBkb3VibGUgYWxwaGEgPSBhdl9leHByX2V2YWwocy0+YV9wZXhwciwg cy0+dmFyX3ZhbHVlcywgJnMtPnBybmcpOworc3RhdGljIGludCBtZWFzdXJlX3RleHQoQVZG aWx0ZXJDb250ZXh0ICpjdHgsIFRleHRNZXRyaWNzICptZXRyaWNzKSB7CisgICAgRHJhd1Rl eHRDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGNoYXIqIHRleHQgPSBzLT5leHBhbmRl ZF90ZXh0LnN0cjsKKyAgICBjaGFyICp0ZXh0ZHVwID0gYXZfc3RyZHVwKHRleHQpLCAqc3Rh cnQgPSB0ZXh0ZHVwOworICAgIGludCBudW1fY2hhcnMgPSAwOworICAgIGludCB3aWR0aDY0 ID0gMCwgdzY0ID0gMCwgaGVpZ2h0NjQgPSAwOworICAgIGludCBjdXJfbWluX3k2NCA9IDAs IGZpcnN0X21heF95NjQgPSAtMzIwMDA7CisgICAgaW50IGZpcnN0X21pbl94NjQgPSAzMjAw MCwgbGFzdF9tYXhfeDY0ID0gLTMyMDAwOworICAgIGludCBtaW5feTY0ID0gMzIwMDAsIG1h eF95NjQgPSAtMzIwMDAsIG1pbl94NjQgPSAzMjAwMCwgbWF4X3g2NCA9IC0zMjAwMDsKKyAg ICBpbnQgbGluZV9jb3VudCA9IDA7CisgICAgdWludDMyX3QgY29kZSA9IDA7CisgICAgR2x5 cGggKmdseXBoID0gTlVMTDsKIAotICAgIGlmIChpc25hbihhbHBoYSkpCi0gICAgICAgIHJl dHVybjsKKyAgICBpbnQgaSwgdGFiX2lkeCA9IDAsIGxhc3RfdGFiX2lkeCA9IDAsIGxpbmVf b2Zmc2V0ID0gMDsKKyAgICBjaGFyKiBwOworICAgIGludCByZXQgPSAwOworCisgICAgLy8g Q291bnQgdGhlIGxpbmVzIGFuZCB0aGUgdGFiIGNoYXJhY3RlcnMKKyAgICBzLT50YWJfY291 bnQgPSAwOworICAgIGZvciAoaSA9IDAsIHAgPSB0ZXh0OyAxOyBpKyspIHsKKyAgICAgICAg R0VUX1VURjgoY29kZSwgKnAgPyAqcCsrIDogMCwgY29kZSA9IDB4ZmZmZDsgZ290byBjb250 aW51ZV9vbl9mYWlsZWQ7KTsKK2NvbnRpbnVlX29uX2ZhaWxlZDoKKyAgICAgICAgaWYoaXNf bmV3bGluZShjb2RlKSB8fCBjb2RlID09IDApIHsKKyAgICAgICAgICAgICsrbGluZV9jb3Vu dDsKKyAgICAgICAgICAgIGlmKGNvZGUgPT0gMCkgeworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYoY29kZSA9PSAnXHQnKSB7Cisg ICAgICAgICAgICArK3MtPnRhYl9jb3VudDsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlm IChhbHBoYSA+PSAxLjApCi0gICAgICAgIHMtPmFscGhhID0gMjU1OwotICAgIGVsc2UgaWYg KGFscGhhIDw9IDApCi0gICAgICAgIHMtPmFscGhhID0gMDsKLSAgICBlbHNlCi0gICAgICAg IHMtPmFscGhhID0gMjU2ICogYWxwaGE7CisgICAgLy8gRXZhbHVhdGUgdGhlIHdpZHRoIG9m IHRoZSBzcGFjZSBjaGFyYWN0ZXIgaWYgbmVlZGVkIHRvIHJlcGxhY2UgdGFicworICAgIGlm KHMtPnRhYl9jb3VudCA+IDAgJiYgIXMtPmJsYW5rX2FkdmFuY2U2NCkgeworICAgICAgICBI YXJmYnV6ekRhdGEgaGJfZGF0YTsKKyAgICAgICAgc2hhcGVfdGV4dF9oYihzLCAmaGJfZGF0 YSwgIiAiLCAxKTsKKyAgICAgICAgcy0+YmxhbmtfYWR2YW5jZTY0ID0gaGJfZGF0YS5nbHlw aF9wb3NbMF0ueF9hZHZhbmNlOworICAgICAgICBoYl9kZXN0cm95KCZoYl9kYXRhKTsKKyAg ICB9CisKKyAgICBzLT5saW5lX2NvdW50ID0gbGluZV9jb3VudDsKKyAgICBzLT5saW5lcyA9 IGF2X21hbGxvY3oobGluZV9jb3VudCAqIHNpemVvZihUZXh0TGluZSkpOworICAgIHMtPnRh Yl9jbHVzdGVycyA9IGF2X21hbGxvY3oocy0+dGFiX2NvdW50ICogc2l6ZW9mKHVpbnQzMl90 KSk7CisgICAgZm9yKGkgPSAwOyBpIDwgcy0+dGFiX2NvdW50OyArK2kpIHsKKyAgICAgICAg cy0+dGFiX2NsdXN0ZXJzW2ldID0gLTE7CisgICAgfQorCisgICAgLy8gYXZfbG9nKHMsIEFW X0xPR19ERUJVRywgIlN0YXJ0aW5nIHRleHQgbWVhc3VyZW1lbnQuLi5cbiIpOworICAgIGxp bmVfY291bnQgPSAwOworICAgIGZvciAoaSA9IDAsIHAgPSB0ZXh0ZHVwOyAxOyBpKyspIHsK KyAgICAgICAgaWYoKnAgPT0gJ1x0JykgeworICAgICAgICAgICAgcy0+dGFiX2NsdXN0ZXJz W3RhYl9pZHgrK10gPSBpOworICAgICAgICAgICAgKnAgPSAnICc7CisgICAgICAgIH0KKyAg ICAgICAgR0VUX1VURjgoY29kZSwgKnAgPyAqcCsrIDogMCwgY29kZSA9IDB4ZmZmZDsgZ290 byBjb250aW51ZV9vbl9mYWlsZWQyOyk7Citjb250aW51ZV9vbl9mYWlsZWQyOgorICAgICAg ICBpZihpc19uZXdsaW5lKGNvZGUpIHx8IGNvZGUgPT0gMCkgeworICAgICAgICAgICAgVGV4 dExpbmUgKmN1cl9saW5lID0gJnMtPmxpbmVzW2xpbmVfY291bnRdOworICAgICAgICAgICAg SGFyZmJ1enpEYXRhICpoYiA9ICZjdXJfbGluZS0+aGJfZGF0YTsKKyAgICAgICAgICAgIGN1 cl9saW5lLT5jbHVzdGVyX29mZnNldCA9IGxpbmVfb2Zmc2V0OworICAgICAgICAgICAgc2hh cGVfdGV4dF9oYihzLCBoYiwgc3RhcnQsIG51bV9jaGFycyk7CisgICAgICAgICAgICB3NjQg PSAwOworICAgICAgICAgICAgY3VyX21pbl95NjQgPSAzMjAwMDsKKyAgICAgICAgICAgIGZv cihpbnQgdCA9IDA7IHQgPCBoYi0+Z2x5cGhfY291bnQ7ICsrdCkgeworICAgICAgICAgICAg ICAgIHVpbnQ4X3QgaXNfdGFiID0gbGFzdF90YWJfaWR4IDwgcy0+dGFiX2NvdW50ICYmCisg ICAgICAgICAgICAgICAgICAgIGhiLT5nbHlwaF9pbmZvW3RdLmNsdXN0ZXIgPT0gcy0+dGFi X2NsdXN0ZXJzW2xhc3RfdGFiX2lkeF0gLSBsaW5lX29mZnNldDsKKyAgICAgICAgICAgICAg ICBpZihpc190YWIpIHsKKyAgICAgICAgICAgICAgICAgICAgKytsYXN0X3RhYl9pZHg7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldCA9IGxvYWRfZ2x5cGgoY3R4 LCAmZ2x5cGgsIGhiLT5nbHlwaF9pbmZvW3RdLmNvZGVwb2ludCwgLTEsIC0xKTsKKyAgICAg ICAgICAgICAgICBpZihyZXQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYobGluZV9jb3VudCA9PSAw KSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0X21heF95NjQgPSBGRk1BWChnbHlwaC0+ YmJveC55TWF4LCBmaXJzdF9tYXhfeTY0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgaWYodCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gKE9G RlNFVCBMRUZUKQorICAgICAgICAgICAgICAgICAgICAvLyB3NjQgKz0gZ2x5cGgtPmJib3gu eE1pbjsKKyAgICAgICAgICAgICAgICAgICAgY3VyX2xpbmUtPm9mZnNldF9sZWZ0NjQgPSBn bHlwaC0+YmJveC54TWluOworICAgICAgICAgICAgICAgICAgICBmaXJzdF9taW5feDY0ID0g RkZNSU4oZ2x5cGgtPmJib3gueE1pbiwgZmlyc3RfbWluX3g2NCk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGlmKHQgPT0gaGItPmdseXBoX2NvdW50IC0gMSkgewor ICAgICAgICAgICAgICAgICAgICB3NjQgKz0gZ2x5cGgtPmJib3gueE1heDsKKyAgICAgICAg ICAgICAgICAgICAgbGFzdF9tYXhfeDY0ID0gRkZNQVgoZ2x5cGgtPmJib3gueE1heCwgbGFz dF9tYXhfeDY0KTsKKyAgICAgICAgICAgICAgICAgICAgY3VyX2xpbmUtPm9mZnNldF9yaWdo dDY0ID0gZ2x5cGgtPmJib3gueE1heDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICBpZihpc190YWIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGludCBzaXplID0gcy0+YmxhbmtfYWR2YW5jZTY0ICogcy0+dGFic2l6ZTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHc2NCA9ICh3NjQgLyBzaXplICsgMSkgKiBzaXplOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdzY0ICs9 IGhiLT5nbHlwaF9wb3NbdF0ueF9hZHZhbmNlOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cl9taW5feTY0ID0gRkZNSU4o Z2x5cGgtPmJib3gueU1pbiwgY3VyX21pbl95NjQpOworICAgICAgICAgICAgICAgIG1pbl95 NjQgPSBGRk1JTihnbHlwaC0+YmJveC55TWluLCBtaW5feTY0KTsKKyAgICAgICAgICAgICAg ICBtYXhfeTY0ID0gRkZNQVgoZ2x5cGgtPmJib3gueU1heCwgbWF4X3k2NCk7CisgICAgICAg ICAgICAgICAgbWluX3g2NCA9IEZGTUlOKGdseXBoLT5iYm94LnhNaW4sIG1pbl94NjQpOwor ICAgICAgICAgICAgICAgIG1heF94NjQgPSBGRk1BWChnbHlwaC0+YmJveC54TWF4LCBtYXhf eDY0KTsKKworICAgICAgICAgICAgICAgIC8vIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICIg ICAgR2x5cGg6ICVkIC0tIHlNaW46ICVsZCAtLSB5TWF4OiAlbGQgLS0geE1pbjogJWxkIC0t IHhNYXg6ICVsZFxuIiwKKyAgICAgICAgICAgICAgICAvLyAgICAgaGItPmdseXBoX2luZm9b dF0uY29kZXBvaW50LCBnbHlwaC0+YmJveC55TWluLCBnbHlwaC0+YmJveC55TWF4LCBnbHlw aC0+YmJveC54TWluLCBnbHlwaC0+YmJveC54TWF4KTsKKyAgICAgICAgICAgICAgICAvLyBh dl9sb2cocywgQVZfTE9HX0RFQlVHLCAiICAgICAgbWluX3k2NDogJWQgLS0gbWF4X3k2NDog JWQgLS0gbWluX3g2NDogJWQgLS0gbWF4X3g2NDogJWRcbiIsCisgICAgICAgICAgICAgICAg Ly8gICAgIG1pbl95NjQsIG1heF95NjQsIG1pbl94NjQsIG1heF94NjQpOworICAgICAgICAg ICAgfQorCisgICAgICAgICAgICBpZihyZXQgPT0gMCkgeworICAgICAgICAgICAgICAgIC8v IFRPRE8gKE9GRlNFVCBMRUZUKQorICAgICAgICAgICAgICAgIC8vIGN1cl9saW5lLT53aWR0 aDY0ID0gdzY0IC0gY3VyX2xpbmUtPm9mZnNldF9sZWZ0NjQ7CisgICAgICAgICAgICAgICAg Y3VyX2xpbmUtPndpZHRoNjQgPSB3NjQ7CisKKyAgICAgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX0RFQlVHLCAiICBMaW5lOiAlZCAtLSBnbHlwaHMgY291bnQ6ICVkIC0gd2lkdGg2 NDogJWQgLSBvZmZzZXRfbGVmdDY0OiAlZCAtIG9mZnNldF9yaWdodDY0OiAlZClcbiIsCisg ICAgICAgICAgICAgICAgICAgIGxpbmVfY291bnQsIGhiLT5nbHlwaF9jb3VudCwgY3VyX2xp bmUtPndpZHRoNjQsIGN1cl9saW5lLT5vZmZzZXRfbGVmdDY0LCBjdXJfbGluZS0+b2Zmc2V0 X3JpZ2h0NjQpOworCisgICAgICAgICAgICAgICAgaWYodzY0ID4gd2lkdGg2NCkgeworICAg ICAgICAgICAgICAgICAgICB3aWR0aDY0ID0gdzY0OworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBudW1fY2hhcnMgPSAtMTsKKyAgICAgICAgICAgICAgICBzdGFydCA9 IHA7CisgICAgICAgICAgICAgICAgKytsaW5lX2NvdW50OworICAgICAgICAgICAgICAgIGxp bmVfb2Zmc2V0ID0gaSArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg ICBpZihjb2RlID09IDAgfHwgcmV0ICE9IDApIGJyZWFrOworICAgICAgICArK251bV9jaGFy czsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkgeworICAgICAgICBtZXRyaWNzLT5saW5l X2hlaWdodDY0ID0gcy0+ZmFjZS0+c2l6ZS0+bWV0cmljcy5oZWlnaHQ7CisgICAgICAgIGhl aWdodDY0ID0gKG1ldHJpY3MtPmxpbmVfaGVpZ2h0NjQgKyBzLT5saW5lX3NwYWNpbmcgKiA2 NCkgKgorICAgICAgICAgICAgKEZGTUFYKDAsIGxpbmVfY291bnQgLSAxKSkgKyBmaXJzdF9t YXhfeTY0IC0gY3VyX21pbl95NjQ7CisgICAgICAgIC8vIFRPRE8gKExFRlQgT0ZGU0VUKSAK KyAgICAgICAgLy8gbWV0cmljcy0+d2lkdGggPSBQT1NfQ0VJTCh3aWR0aDY0IC0gZmlyc3Rf bWluX3g2NCwgNjQpOworICAgICAgICBtZXRyaWNzLT53aWR0aCA9IFBPU19DRUlMKHdpZHRo NjQsIDY0KTsKKyAgICAgICAgaWYocy0+eV9hbGlnbiA9PSBZQV9GT05UKSB7CisgICAgICAg ICAgICBtZXRyaWNzLT5oZWlnaHQgPSBQT1NfQ0VJTChtZXRyaWNzLT5saW5lX2hlaWdodDY0 ICogbGluZV9jb3VudCwgNjQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWV0 cmljcy0+aGVpZ2h0ID0gUE9TX0NFSUwoaGVpZ2h0NjQsIDY0KTsKKyAgICAgICAgfQorICAg ICAgICBtZXRyaWNzLT5vZmZzZXRfdG9wNjQgPSBmaXJzdF9tYXhfeTY0OworICAgICAgICBt ZXRyaWNzLT5vZmZzZXRfcmlnaHQ2NCA9IGxhc3RfbWF4X3g2NDsKKyAgICAgICAgbWV0cmlj cy0+b2Zmc2V0X2JvdHRvbTY0ID0gY3VyX21pbl95NjQ7CisgICAgICAgIG1ldHJpY3MtPm9m ZnNldF9sZWZ0NjQgPSBmaXJzdF9taW5feDY0OworICAgICAgICBtZXRyaWNzLT5taW5feDY0 ID0gbWluX3g2NDsKKyAgICAgICAgbWV0cmljcy0+bWluX3k2NCA9IG1pbl95NjQ7CisgICAg ICAgIG1ldHJpY3MtPm1heF94NjQgPSBtYXhfeDY0OworICAgICAgICBtZXRyaWNzLT5tYXhf eTY0ID0gbWF4X3k2NDsKKworICAgICAgICAvLyBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAi ICBUZXh0OiB3aWR0aDogJWQgfCBoZWlnaHQ6ICVkXG4iLCBtZXRyaWNzLT53aWR0aCwgbWV0 cmljcy0+aGVpZ2h0KTsKKyAgICAgICAgLy8gYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIiAg ICAgIG9mZl90NjQ6ICVkIHwgb2ZmX3I2NDogJWQgfCBvZmZfYjY0OiAlZCB8IG9mZl9sNjQ6 ICVkXG4iLAorICAgICAgICAvLyAgICAgbWV0cmljcy0+b2Zmc2V0X3RvcDY0LCBtZXRyaWNz LT5vZmZzZXRfcmlnaHQ2NCwgbWV0cmljcy0+b2Zmc2V0X2JvdHRvbTY0LCBtZXRyaWNzLT5v ZmZzZXRfbGVmdDY0KTsKKyAgICAgICAgLy8gYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIiAg ICAgIG1pbl94NjQ6ICVkIHwgbWluX3k2NDogJWQgfCBtYXhfeDY0OiAlZCB8IG1heF95NjQ6 ICVkXG4iLAorICAgICAgICAvLyAgICAgbWV0cmljcy0+bWluX3g2NCwgbWV0cmljcy0+bWlu X3k2NCwgbWV0cmljcy0+bWF4X3g2NCwgbWV0cmljcy0+bWF4X3k2NCk7CisgICAgICAgIC8v IGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJUZXh0IG1lYXN1cmVtZW50IGNvbXBsZXRlZFxu Iik7CisgICAgfQorCisgICAgYXZfZnJlZSh0ZXh0ZHVwKTsKKyAgICByZXR1cm4gcmV0Owog fQogCi1zdGF0aWMgaW50IGRyYXdfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFt ZSAqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQp CitzdGF0aWMgaW50IGRyYXdfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAq ZnJhbWUpCiB7CiAgICAgRHJhd1RleHRDb250ZXh0ICpzID0gY3R4LT5wcml2OwogICAgIEFW RmlsdGVyTGluayAqaW5saW5rID0gY3R4LT5pbnB1dHNbMF07Ci0KLSAgICB1aW50MzJfdCBj b2RlID0gMCwgcHJldl9jb2RlID0gMDsKLSAgICBpbnQgeCA9IDAsIHkgPSAwLCBpID0gMCwg cmV0OwotICAgIGludCBtYXhfdGV4dF9saW5lX3cgPSAwLCBsZW47Ci0gICAgaW50IGJveF93 LCBib3hfaDsKLSAgICBjaGFyICp0ZXh0OwotICAgIHVpbnQ4X3QgKnA7Ci0gICAgaW50IHlf bWluID0gMzIwMDAsIHlfbWF4ID0gLTMyMDAwOwotICAgIGludCB4X21pbiA9IDMyMDAwLCB4 X21heCA9IC0zMjAwMDsKLSAgICBGVF9WZWN0b3IgZGVsdGE7Ci0gICAgR2x5cGggKmdseXBo ID0gTlVMTCwgKnByZXZfZ2x5cGggPSBOVUxMOwotICAgIEdseXBoIGR1bW15ID0geyAwIH07 CisgICAgaW50IHggPSAwLCB5ID0gMCwgcmV0OworICAgIGludCBzaGlmdF94NjQsIHNoaWZ0 X3k2NDsKKyAgICBpbnQgeDY0LCB5NjQ7CisgICAgaW50IG9mZnNldF9sZWZ0ID0gMDsKKyAg ICBHbHlwaCAqZ2x5cGggPSBOVUxMOwogCiAgICAgdGltZV90IG5vdyA9IHRpbWUoMCk7CiAg ICAgc3RydWN0IHRtIGx0aW1lOwpAQCAtMTQxMyw2ICsxOTM2LDE3IEBAIHN0YXRpYyBpbnQg ZHJhd190ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICpmcmFtZSwKICAgICBG RkRyYXdDb2xvciBib3JkZXJjb2xvcjsKICAgICBGRkRyYXdDb2xvciBib3hjb2xvcjsKIAor ICAgIGludCB3aWR0aCA9IGZyYW1lLT53aWR0aDsKKyAgICBpbnQgaGVpZ2h0ID0gZnJhbWUt PmhlaWdodDsKKyAgICBpbnQgcmVjX3ggPSAwLCByZWNfeSA9IDAsIHJlY193aWR0aCA9IDAs IHJlY19oZWlnaHQgPSAwOworICAgIGludCBpc19vdXRzaWRlID0gMDsKKyAgICBpbnQgbGFz dF90YWJfaWR4ID0gMDsKKworICAgIFRleHRNZXRyaWNzIG1ldHJpY3M7CisKKyAgICAvLyBh dl9sb2cocywgQVZfTE9HX0RFQlVHLCAiYXNjZW5kOiAlbGQgZGVzY2VudDogJWxkIGhlaWdo dDogJWxkXG4iLAorICAgIC8vICAgICBzLT5mYWNlLT5zaXplLT5tZXRyaWNzLmFzY2VuZGVy LCBzLT5mYWNlLT5zaXplLT5tZXRyaWNzLmRlc2NlbmRlciwgcy0+ZmFjZS0+c2l6ZS0+bWV0 cmljcy5oZWlnaHQpOworCiAgICAgYXZfYnByaW50X2NsZWFyKGJwKTsKIAogICAgIGlmKHMt PmJhc2V0aW1lICE9IEFWX05PUFRTX1ZBTFVFKQpAQCAtMTQ0MSwxMyArMTk3NSw2IEBAIHN0 YXRpYyBpbnQgZHJhd190ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICpmcmFt ZSwKIAogICAgIGlmICghYXZfYnByaW50X2lzX2NvbXBsZXRlKGJwKSkKICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB0ZXh0ID0gcy0+ZXhwYW5kZWRfdGV4dC5zdHI7 Ci0gICAgaWYgKChsZW4gPSBzLT5leHBhbmRlZF90ZXh0LmxlbikgPiBzLT5uYl9wb3NpdGlv bnMpIHsKLSAgICAgICAgaWYgKCEocy0+cG9zaXRpb25zID0KLSAgICAgICAgICAgICAgYXZf cmVhbGxvYyhzLT5wb3NpdGlvbnMsIGxlbipzaXplb2YoKnMtPnBvc2l0aW9ucykpKSkKLSAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIHMtPm5iX3Bvc2l0 aW9ucyA9IGxlbjsKLSAgICB9CiAKICAgICBpZiAocy0+Zm9udGNvbG9yX2V4cHJbMF0pIHsK ICAgICAgICAgLyogSWYgZXhwcmVzc2lvbiBpcyBzZXQsIGV2YWx1YXRlIGFuZCByZXBsYWNl IHRoZSBzdGF0aWMgdmFsdWUgKi8KQEAgLTE0NjMsODUgKzE5OTAsMjggQEAgc3RhdGljIGlu dCBkcmF3X3RleHQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmZyYW1lLAogICAg ICAgICBmZl9kcmF3X2NvbG9yKCZzLT5kYywgJnMtPmZvbnRjb2xvciwgcy0+Zm9udGNvbG9y LnJnYmEpOwogICAgIH0KIAotICAgIHggPSAwOwotICAgIHkgPSAwOwotCi0gICAgaWYgKChy ZXQgPSB1cGRhdGVfZm9udHNpemUoY3R4KSkgPCAwKQorICAgIGlmICgocmV0ID0gdXBkYXRl X2ZvbnRzaXplKGN0eCkpIDwgMCkgewogICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgLyog bG9hZCBhbmQgY2FjaGUgZ2x5cGhzICovCi0gICAgZm9yIChpID0gMCwgcCA9IHRleHQ7ICpw OyBpKyspIHsKLSAgICAgICAgR0VUX1VURjgoY29kZSwgKnAgPyAqcCsrIDogMCwgY29kZSA9 IDB4ZmZmZDsgZ290byBjb250aW51ZV9vbl9pbnZhbGlkOyk7Ci1jb250aW51ZV9vbl9pbnZh bGlkOgotCi0gICAgICAgIC8qIGdldCBnbHlwaCAqLwotICAgICAgICBkdW1teS5jb2RlID0g Y29kZTsKLSAgICAgICAgZHVtbXkuZm9udHNpemUgPSBzLT5mb250c2l6ZTsKLSAgICAgICAg Z2x5cGggPSBhdl90cmVlX2ZpbmQocy0+Z2x5cGhzLCAmZHVtbXksIGdseXBoX2NtcCwgTlVM TCk7Ci0gICAgICAgIGlmICghZ2x5cGgpIHsKLSAgICAgICAgICAgIHJldCA9IGxvYWRfZ2x5 cGgoY3R4LCAmZ2x5cGgsIGNvZGUpOwotICAgICAgICAgICAgaWYgKHJldCA8IDApCi0gICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIHlfbWluID0g RkZNSU4oZ2x5cGgtPmJib3gueU1pbiwgeV9taW4pOwotICAgICAgICB5X21heCA9IEZGTUFY KGdseXBoLT5iYm94LnlNYXgsIHlfbWF4KTsKLSAgICAgICAgeF9taW4gPSBGRk1JTihnbHlw aC0+YmJveC54TWluLCB4X21pbik7Ci0gICAgICAgIHhfbWF4ID0gRkZNQVgoZ2x5cGgtPmJi b3gueE1heCwgeF9tYXgpOwogICAgIH0KLSAgICBzLT5tYXhfZ2x5cGhfaCA9IHlfbWF4IC0g eV9taW47Ci0gICAgcy0+bWF4X2dseXBoX3cgPSB4X21heCAtIHhfbWluOwotCi0gICAgLyog Y29tcHV0ZSBhbmQgc2F2ZSBwb3NpdGlvbiBmb3IgZWFjaCBnbHlwaCAqLwotICAgIGdseXBo ID0gTlVMTDsKLSAgICBmb3IgKGkgPSAwLCBwID0gdGV4dDsgKnA7IGkrKykgewotICAgICAg ICBHRVRfVVRGOChjb2RlLCAqcCA/ICpwKysgOiAwLCBjb2RlID0gMHhmZmZkOyBnb3RvIGNv bnRpbnVlX29uX2ludmFsaWQyOyk7Ci1jb250aW51ZV9vbl9pbnZhbGlkMjoKLQotICAgICAg ICAvKiBza2lwIHRoZSBcbiBpbiB0aGUgc2VxdWVuY2UgXHJcbiAqLwotICAgICAgICBpZiAo cHJldl9jb2RlID09ICdccicgJiYgY29kZSA9PSAnXG4nKQotICAgICAgICAgICAgY29udGlu dWU7Ci0KLSAgICAgICAgcHJldl9jb2RlID0gY29kZTsKLSAgICAgICAgaWYgKGlzX25ld2xp bmUoY29kZSkpIHsKLQotICAgICAgICAgICAgbWF4X3RleHRfbGluZV93ID0gRkZNQVgobWF4 X3RleHRfbGluZV93LCB4KTsKLSAgICAgICAgICAgIHkgKz0gcy0+bWF4X2dseXBoX2ggKyBz LT5saW5lX3NwYWNpbmc7Ci0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIGNvbnRp bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogZ2V0IGdseXBoICovCi0gICAgICAgIHBy ZXZfZ2x5cGggPSBnbHlwaDsKLSAgICAgICAgZHVtbXkuY29kZSA9IGNvZGU7Ci0gICAgICAg IGR1bW15LmZvbnRzaXplID0gcy0+Zm9udHNpemU7Ci0gICAgICAgIGdseXBoID0gYXZfdHJl ZV9maW5kKHMtPmdseXBocywgJmR1bW15LCBnbHlwaF9jbXAsIE5VTEwpOwotCi0gICAgICAg IC8qIGtlcm5pbmcgKi8KLSAgICAgICAgaWYgKHMtPnVzZV9rZXJuaW5nICYmIHByZXZfZ2x5 cGggJiYgZ2x5cGgtPmNvZGUpIHsKLSAgICAgICAgICAgIEZUX0dldF9LZXJuaW5nKHMtPmZh Y2UsIHByZXZfZ2x5cGgtPmNvZGUsIGdseXBoLT5jb2RlLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnRfa2VybmluZ19kZWZhdWx0LCAmZGVsdGEpOwotICAgICAgICAgICAgeCAr PSBkZWx0YS54ID4+IDY7Ci0gICAgICAgIH0KIAotICAgICAgICAvKiBzYXZlIHBvc2l0aW9u ICovCi0gICAgICAgIHMtPnBvc2l0aW9uc1tpXS54ID0geCArIGdseXBoLT5iaXRtYXBfbGVm dDsKLSAgICAgICAgcy0+cG9zaXRpb25zW2ldLnkgPSB5IC0gZ2x5cGgtPmJpdG1hcF90b3Ag KyB5X21heDsKLSAgICAgICAgaWYgKGNvZGUgPT0gJ1x0JykgeCAgPSAoeCAvIHMtPnRhYnNp emUgKyAxKSpzLT50YWJzaXplOwotICAgICAgICBlbHNlICAgICAgICAgICAgICB4ICs9IGds eXBoLT5hZHZhbmNlOwotICAgIH0KKyAgICBtZWFzdXJlX3RleHQoY3R4LCAmbWV0cmljcyk7 CiAKLSAgICBtYXhfdGV4dF9saW5lX3cgPSBGRk1BWCh4LCBtYXhfdGV4dF9saW5lX3cpOwor ICAgIHMtPm1heF9nbHlwaF9oID0gUE9TX0NFSUwobWV0cmljcy5tYXhfeTY0IC0gbWV0cmlj cy5taW5feTY0LCA2NCk7CisgICAgcy0+bWF4X2dseXBoX3cgPSBQT1NfQ0VJTChtZXRyaWNz Lm1heF94NjQgLSBtZXRyaWNzLm1pbl94NjQsIDY0KTsKIAotICAgIHMtPnZhcl92YWx1ZXNb VkFSX1RXXSA9IHMtPnZhcl92YWx1ZXNbVkFSX1RFWFRfV10gPSBtYXhfdGV4dF9saW5lX3c7 Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfVEhdID0gcy0+dmFyX3ZhbHVlc1tWQVJfVEVYVF9I XSA9IHkgKyBzLT5tYXhfZ2x5cGhfaDsKKyAgICBzLT52YXJfdmFsdWVzW1ZBUl9UV10gPSBz LT52YXJfdmFsdWVzW1ZBUl9URVhUX1ddID0gbWV0cmljcy53aWR0aDsKKyAgICBzLT52YXJf dmFsdWVzW1ZBUl9USF0gPSBzLT52YXJfdmFsdWVzW1ZBUl9URVhUX0hdID0gbWV0cmljcy5o ZWlnaHQ7CiAKICAgICBzLT52YXJfdmFsdWVzW1ZBUl9NQVhfR0xZUEhfV10gPSBzLT5tYXhf Z2x5cGhfdzsKICAgICBzLT52YXJfdmFsdWVzW1ZBUl9NQVhfR0xZUEhfSF0gPSBzLT5tYXhf Z2x5cGhfaDsKLSAgICBzLT52YXJfdmFsdWVzW1ZBUl9NQVhfR0xZUEhfQV0gPSBzLT52YXJf dmFsdWVzW1ZBUl9BU0NFTlQgXSA9IHlfbWF4OwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX01B WF9HTFlQSF9EXSA9IHMtPnZhcl92YWx1ZXNbVkFSX0RFU0NFTlRdID0geV9taW47CisgICAg cy0+dmFyX3ZhbHVlc1tWQVJfTUFYX0dMWVBIX0FdID0gcy0+dmFyX3ZhbHVlc1tWQVJfQVND RU5UXSA9IFBPU19DRUlMKG1ldHJpY3MubWF4X3k2NCwgNjQpOworICAgIHMtPnZhcl92YWx1 ZXNbVkFSX0ZPTlRfQV0gPSBzLT5mYWNlLT5zaXplLT5tZXRyaWNzLmFzY2VuZGVyIC8gNjQ7 CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfTUFYX0dMWVBIX0RdID0gcy0+dmFyX3ZhbHVlc1tW QVJfREVTQ0VOVF0gPSBQT1NfQ0VJTChtZXRyaWNzLm1pbl95NjQsIDY0KTsKKyAgICBzLT52 YXJfdmFsdWVzW1ZBUl9GT05UX0RdID0gLXMtPmZhY2UtPnNpemUtPm1ldHJpY3MuZGVzY2Vu ZGVyIC8gNjQ7CiAKLSAgICBzLT52YXJfdmFsdWVzW1ZBUl9MSU5FX0hdID0gcy0+dmFyX3Zh bHVlc1tWQVJfTEhdID0gcy0+bWF4X2dseXBoX2g7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJf VE9QX0FdID0gUE9TX0NFSUwobWV0cmljcy5vZmZzZXRfdG9wNjQsIDY0KTsKKyAgICBzLT52 YXJfdmFsdWVzW1ZBUl9CT1RUT01fRF0gPSBQT1NfQ0VJTChtZXRyaWNzLm9mZnNldF9ib3R0 b202NCwgNjQpOworICAgIHMtPnZhcl92YWx1ZXNbVkFSX0xJTkVfSF0gPSBzLT52YXJfdmFs dWVzW1ZBUl9MSF0gPSBtZXRyaWNzLmxpbmVfaGVpZ2h0NjQgLyA2NC47CiAKICAgICBpZiAo cy0+dGV4dF9zb3VyY2UgPT0gQVZfRlJBTUVfREFUQV9ERVRFQ1RJT05fQkJPWEVTKSB7CiAg ICAgICAgIHMtPnZhcl92YWx1ZXNbVkFSX1hdID0gcy0+eDsKQEAgLTE1NTksNTYgKzIwMjks MTc2IEBAIGNvbnRpbnVlX29uX2ludmFsaWQyOgogICAgIHVwZGF0ZV9jb2xvcl93aXRoX2Fs cGhhKHMsICZib3JkZXJjb2xvciwgcy0+Ym9yZGVyY29sb3IpOwogICAgIHVwZGF0ZV9jb2xv cl93aXRoX2FscGhhKHMsICZib3hjb2xvciAgICwgcy0+Ym94Y29sb3IgICApOwogCi0gICAg Ym94X3cgPSBtYXhfdGV4dF9saW5lX3c7Ci0gICAgYm94X2ggPSB5ICsgcy0+bWF4X2dseXBo X2g7CisgICAgaWYgKHMtPmRyYXdfYm94ICYmIHMtPmJveGJvcmRlcncpIHsKKyAgICAgICAg aW50IGJic2l6ZVs0XTsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBjb3VudCA9IHN0 cmluZ190b19hcnJheShzLT5ib3hib3JkZXJ3LCBiYnNpemUsIDQpOworICAgICAgICBpZihj b3VudCA9PSAxKSB7CisgICAgICAgICAgICBzLT5iYl90b3AgPSBzLT5iYl9yaWdodCA9IHMt PmJiX2JvdHRvbSA9IHMtPmJiX2xlZnQgPSBiYnNpemVbMF07CisgICAgICAgIH0gZWxzZSBp Zihjb3VudCA9PSAyKSB7CisgICAgICAgICAgICBzLT5iYl90b3AgPSBzLT5iYl9ib3R0b20g PSBiYnNpemVbMF07CisgICAgICAgICAgICBzLT5iYl9yaWdodCA9IHMtPmJiX2xlZnQgPSBi YnNpemVbMV07CisgICAgICAgIH0gZWxzZSBpZihjb3VudCA9PSAzKSB7CisgICAgICAgICAg ICBzLT5iYl90b3AgPSBiYnNpemVbMF07CisgICAgICAgICAgICBzLT5iYl9yaWdodCA9IHMt PmJiX2xlZnQgPSBiYnNpemVbMV07CisgICAgICAgICAgICBzLT5iYl9ib3R0b20gPSBiYnNp emVbMl07CisgICAgICAgIH0gZWxzZSBpZihjb3VudCA9PSA0KSB7CisgICAgICAgICAgICBz LT5iYl90b3AgPSBiYnNpemVbMF07CisgICAgICAgICAgICBzLT5iYl9yaWdodCA9IGJic2l6 ZVsxXTsKKyAgICAgICAgICAgIHMtPmJiX2JvdHRvbSA9IGJic2l6ZVsyXTsKKyAgICAgICAg ICAgIHMtPmJiX2xlZnQgPSBiYnNpemVbM107CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgICBzLT5iYl90b3AgPSBzLT5iYl9yaWdodCA9IHMtPmJiX2JvdHRvbSA9IHMtPmJi X2xlZnQgPSAwOworICAgIH0KIAogICAgIGlmIChzLT5maXhfYm91bmRzKSB7Ci0KICAgICAg ICAgLyogY2FsY3VsYXRlIGZvb3RwcmludCBvZiB0ZXh0IGVmZmVjdHMgKi8KLSAgICAgICAg aW50IGJveG9mZnNldCAgICAgPSBzLT5kcmF3X2JveCA/IEZGTUFYKHMtPmJveGJvcmRlcncs IDApIDogMDsKICAgICAgICAgaW50IGJvcmRlcm9mZnNldCAgPSBzLT5ib3JkZXJ3ICA/IEZG TUFYKHMtPmJvcmRlcncsIDApIDogMDsKIAotICAgICAgICBpbnQgb2Zmc2V0bGVmdCA9IEZG TUFYMyhib3hvZmZzZXQsIGJvcmRlcm9mZnNldCwKKyAgICAgICAgaW50IG9mZnNldGxlZnQg PSBGRk1BWDMoRkZNQVgocy0+YmJfbGVmdCwgMCksIGJvcmRlcm9mZnNldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHMtPnNoYWRvd3ggPCAwID8gRkZBQlMocy0+c2hh ZG93eCkgOiAwKSk7Ci0gICAgICAgIGludCBvZmZzZXR0b3AgPSBGRk1BWDMoYm94b2Zmc2V0 LCBib3JkZXJvZmZzZXQsCisgICAgICAgIGludCBvZmZzZXR0b3AgPSBGRk1BWDMoRkZNQVgo cy0+YmJfdG9wLCAwKSwgYm9yZGVyb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocy0+c2hhZG93eSA8IDAgPyBGRkFCUyhzLT5zaGFkb3d5KSA6IDApKTsKLQot ICAgICAgICBpbnQgb2Zmc2V0cmlnaHQgPSBGRk1BWDMoYm94b2Zmc2V0LCBib3JkZXJvZmZz ZXQsCisgICAgICAgIGludCBvZmZzZXRyaWdodCA9IEZGTUFYMyhGRk1BWChzLT5iYl9yaWdo dCwgMCksIGJvcmRlcm9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzLT5zaGFkb3d4ID4gMCA/IHMtPnNoYWRvd3ggOiAwKSk7Ci0gICAgICAgIGludCBvZmZz ZXRib3R0b20gPSBGRk1BWDMoYm94b2Zmc2V0LCBib3JkZXJvZmZzZXQsCisgICAgICAgIGlu dCBvZmZzZXRib3R0b20gPSBGRk1BWDMoRkZNQVgocy0+YmJfYm90dG9tLCAwKSwgYm9yZGVy b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5zaGFkb3d5 ID4gMCA/IHMtPnNoYWRvd3kgOiAwKSk7CiAKLQogICAgICAgICBpZiAocy0+eCAtIG9mZnNl dGxlZnQgPCAwKSBzLT54ID0gb2Zmc2V0bGVmdDsKICAgICAgICAgaWYgKHMtPnkgLSBvZmZz ZXR0b3AgPCAwKSAgcy0+eSA9IG9mZnNldHRvcDsKIAotICAgICAgICBpZiAocy0+eCArIGJv eF93ICsgb2Zmc2V0cmlnaHQgPiB3aWR0aCkKLSAgICAgICAgICAgIHMtPnggPSBGRk1BWCh3 aWR0aCAtIGJveF93IC0gb2Zmc2V0cmlnaHQsIDApOwotICAgICAgICBpZiAocy0+eSArIGJv eF9oICsgb2Zmc2V0Ym90dG9tID4gaGVpZ2h0KQotICAgICAgICAgICAgcy0+eSA9IEZGTUFY KGhlaWdodCAtIGJveF9oIC0gb2Zmc2V0Ym90dG9tLCAwKTsKKyAgICAgICAgaWYgKHMtPngg KyBtZXRyaWNzLndpZHRoICsgb2Zmc2V0cmlnaHQgPiB3aWR0aCkKKyAgICAgICAgICAgIHMt PnggPSBGRk1BWCh3aWR0aCAtIG1ldHJpY3Mud2lkdGggLSBvZmZzZXRyaWdodCwgMCk7Cisg ICAgICAgIGlmIChzLT55ICsgbWV0cmljcy5oZWlnaHQgKyBvZmZzZXRib3R0b20gPiBoZWln aHQpCisgICAgICAgICAgICBzLT55ID0gRkZNQVgoaGVpZ2h0IC0gbWV0cmljcy5oZWlnaHQg LSBvZmZzZXRib3R0b20sIDApOwogICAgIH0KIAotICAgIC8qIGRyYXcgYm94ICovCi0gICAg aWYgKHMtPmRyYXdfYm94KQotICAgICAgICBmZl9ibGVuZF9yZWN0YW5nbGUoJnMtPmRjLCAm Ym94Y29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZGF0YSwgZnJh bWUtPmxpbmVzaXplLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgcy0+eCAtIHMtPmJveGJvcmRlcncsIHMtPnkgLSBzLT5ib3hib3JkZXJ3LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm94X3cgKyBzLT5ib3hib3JkZXJ3ICogMiwgYm94X2gg KyBzLT5ib3hib3JkZXJ3ICogMik7CisgICAgeCA9IDA7CisgICAgeSA9IDA7CisgICAgeDY0 ID0gKGludCkocy0+eCAqIDY0Lik7CisgICAgaWYocy0+eV9hbGlnbiA9PSBZQV9GT05UKSB7 CisgICAgICAgIHk2NCA9IChpbnQpKHMtPnkgKiA2NC4gKyBzLT5mYWNlLT5zaXplLT5tZXRy aWNzLmFzY2VuZGVyKTsKKyAgICB9IGVsc2UgaWYocy0+eV9hbGlnbiA9PSBZQV9CQVNFTElO RSkgeworICAgICAgICB5NjQgPSAoaW50KShzLT55ICogNjQuKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICB5NjQgPSAoaW50KShzLT55ICogNjQuICsgbWV0cmljcy5vZmZzZXRfdG9wNjQp OworICAgIH0KIAotICAgIGlmIChzLT5zaGFkb3d4IHx8IHMtPnNoYWRvd3kpIHsKLSAgICAg ICAgaWYgKChyZXQgPSBkcmF3X2dseXBocyhzLCBmcmFtZSwgd2lkdGgsIGhlaWdodCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhZG93Y29sb3IsIHMtPnNoYWRvd3gs IHMtPnNoYWRvd3ksIDApKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gcmV0OworICAgIGZv cihpbnQgbCA9IDA7IGwgPCBzLT5saW5lX2NvdW50OyArK2wpIHsKKyAgICAgICAgVGV4dExp bmUgKmxpbmUgPSAmcy0+bGluZXNbbF07CisgICAgICAgIEhhcmZidXp6RGF0YSAqaGIgPSAm bGluZS0+aGJfZGF0YTsKKyAgICAgICAgbGluZS0+Z2x5cGhzID0gYXZfbWFsbG9jeihoYi0+ Z2x5cGhfY291bnQgKiBzaXplb2YoR2x5cGhJbmZvKSk7CisKKyAgICAgICAgZm9yKGludCB0 ID0gMDsgdCA8IGhiLT5nbHlwaF9jb3VudDsgKyt0KSB7CisgICAgICAgICAgICBHbHlwaElu Zm8gKmdfaW5mbyA9ICZsaW5lLT5nbHlwaHNbdF07CisgICAgICAgICAgICB1aW50OF90IGlz X3RhYiA9IGxhc3RfdGFiX2lkeCA8IHMtPnRhYl9jb3VudCAmJgorICAgICAgICAgICAgICAg IGhiLT5nbHlwaF9pbmZvW3RdLmNsdXN0ZXIgPT0gcy0+dGFiX2NsdXN0ZXJzW2xhc3RfdGFi X2lkeF0gLSBsaW5lLT5jbHVzdGVyX29mZnNldDsKKyAgICAgICAgICAgIGludCB0cnVlX3gs IHRydWVfeTsKKyAgICAgICAgICAgIGlmKGlzX3RhYikgeworICAgICAgICAgICAgICAgICsr bGFzdF90YWJfaWR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ1ZV94ID0geCAr IGhiLT5nbHlwaF9wb3NbdF0ueF9vZmZzZXQ7CisgICAgICAgICAgICB0cnVlX3kgPSB5ICsg aGItPmdseXBoX3Bvc1t0XS55X29mZnNldDsKKyAgICAgICAgICAgIHNoaWZ0X3g2NCA9ICgo KHg2NCArIHRydWVfeCkgPj4gNCkgJiAwYjAwMTEpIDw8IDQ7CisgICAgICAgICAgICBzaGlm dF95NjQgPSAoKDQgLSAoKCh5NjQgKyB0cnVlX3kpID4+IDQpICYgMGIwMDExKSkgJiAwYjAw MTEpIDw8IDQ7CisKKyAgICAgICAgICAgIHJldCA9IGxvYWRfZ2x5cGgoY3R4LCAmZ2x5cGgs IGhiLT5nbHlwaF9pbmZvW3RdLmNvZGVwb2ludCwgc2hpZnRfeDY0LCBzaGlmdF95NjQpOwor ICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdfaW5mby0+Y29kZSA9IGhiLT5nbHlw aF9pbmZvW3RdLmNvZGVwb2ludDsKKyAgICAgICAgICAgIGdfaW5mby0+eCA9ICh4NjQgKyB0 cnVlX3gpID4+IDY7CisgICAgICAgICAgICBnX2luZm8tPnkgPSAoKHk2NCArIHRydWVfeSkg Pj4gNikgKyAoc2hpZnRfeTY0ID4gMCA/IDEgOiAwKTsKKyAgICAgICAgICAgIGdfaW5mby0+ c2hpZnRfeDY0ID0gc2hpZnRfeDY0OworICAgICAgICAgICAgZ19pbmZvLT5zaGlmdF95NjQg PSBzaGlmdF95NjQ7CisKKyAgICAgICAgICAgIGlmKCFpc190YWIpIHsKKyAgICAgICAgICAg ICAgICB4ICs9IGhiLT5nbHlwaF9wb3NbdF0ueF9hZHZhbmNlOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHMtPmJsYW5rX2FkdmFuY2U2NCAq IHMtPnRhYnNpemU7CisgICAgICAgICAgICAgICAgeCA9ICh4IC8gc2l6ZSArIDEpICogc2l6 ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHkgKz0gaGItPmdseXBoX3Bvc1t0XS55 X2FkdmFuY2U7CisgICAgICAgIH0KKworICAgICAgICB5ICs9IG1ldHJpY3MubGluZV9oZWln aHQ2NCArIHMtPmxpbmVfc3BhY2luZyAqIDY0OworICAgICAgICB4ID0gMDsKICAgICB9CiAK LSAgICBpZiAocy0+Ym9yZGVydykgewotICAgICAgICBpZiAoKHJldCA9IGRyYXdfZ2x5cGhz KHMsIGZyYW1lLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZib3JkZXJjb2xvciwgMCwgMCwgcy0+Ym9yZGVydykpIDwgMCkKKy8vIFRPRE8gKExF RlQgT0ZGU0VUKQorLy8gICAgb2Zmc2V0X2xlZnQgPSBtZXRyaWNzLm9mZnNldF9sZWZ0NjQg LyA2NDsKKyAgICBvZmZzZXRfbGVmdCA9IDA7CisgICAgbWV0cmljcy5yZWN0X3ggPSBzLT54 OworICAgIGlmKHMtPnlfYWxpZ24gPT0gWUFfQkFTRUxJTkUpIHsKKyAgICAgICAgbWV0cmlj cy5yZWN0X3kgPSBzLT55IC0gbWV0cmljcy5vZmZzZXRfdG9wNjQgLyA2NDsKKyAgICB9IGVs c2UgeworICAgICAgICBtZXRyaWNzLnJlY3RfeSA9IHMtPnk7CisgICAgfQorICAgIAorICAg IHMtPmJveF93aWR0aCA9IHMtPmJveHcgPT0gMCA/IG1ldHJpY3Mud2lkdGggOiBzLT5ib3h3 OworICAgIHMtPmJveF9oZWlnaHQgPSBzLT5ib3hoID09IDAgPyBtZXRyaWNzLmhlaWdodCA6 IHMtPmJveGg7CisKKyAgICBpZighcy0+ZHJhd19ib3gpIHsKKyAgICAgICAgLy8gQ3JlYXRl IGEgYm9yZGVyIGZvciB0aGUgY2xpcHBpbmcgcmVnaW9uIHRvIHRha2UgaW50byBhY2NvdW50 IHN1YnBpeGVsCisgICAgICAgIC8vIGVycm9ycyBpbiB0ZXh0IG1lYXN1cmVtZW50IGFuZCBl ZmZlY3RzLgorICAgICAgICBpbnQgYm9yZGVyb2Zmc2V0ID0gcy0+Ym9yZGVydyA/IEZGTUFY KHMtPmJvcmRlcncsIDApIDogMDsKKyAgICAgICAgcy0+YmJfbGVmdCA9IGJvcmRlcm9mZnNl dCArIChzLT5zaGFkb3d4IDwgMCA/IEZGQUJTKHMtPnNoYWRvd3gpIDogMCkgKyAxOworICAg ICAgICBzLT5iYl90b3AgPSBib3JkZXJvZmZzZXQgKyAocy0+c2hhZG93eSA8IDAgPyBGRkFC UyhzLT5zaGFkb3d5KSA6IDApICsgMTsKKyAgICAgICAgcy0+YmJfcmlnaHQgPSBib3JkZXJv ZmZzZXQgKyAocy0+c2hhZG93eCA+IDAgPyBzLT5zaGFkb3d4IDogMCkgKyAxOworICAgICAg ICBzLT5iYl9ib3R0b20gPSBib3JkZXJvZmZzZXQgKyAocy0+c2hhZG93eSA+IDAgPyBzLT5z aGFkb3d5IDogMCkgKyAxOworICAgIH0KKworICAgIC8qIENoZWNrIGlmIHRoZSB3aG9sZSBi b3ggaXMgb3V0IG9mIHRoZSBmcmFtZSAqLyAgICAgICAgCisgICAgaXNfb3V0c2lkZSA9IG1l dHJpY3MucmVjdF94IC0gcy0+YmJfbGVmdCA+PSB3aWR0aCB8fAorICAgICAgICAgICAgICAg ICAgICBtZXRyaWNzLnJlY3RfeSAtIHMtPmJiX3RvcCA+PSBoZWlnaHQgfHwKKyAgICAgICAg ICAgICAgICAgICAgbWV0cmljcy5yZWN0X3ggKyBzLT5ib3hfd2lkdGggKyBzLT5iYl9yaWdo dCA8PSAwIHx8CisgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MucmVjdF95ICsgcy0+Ym94 X2hlaWdodCArIHMtPmJiX2JvdHRvbSA8PSAwOworCisgICAgaWYoIWlzX291dHNpZGUpIHsK KyAgICAgICAgLyogZHJhdyBib3ggKi8KKyAgICAgICAgaWYgKHMtPmRyYXdfYm94KSB7Cisg ICAgICAgICAgICByZWNfeCA9IG1ldHJpY3MucmVjdF94IC0gcy0+YmJfbGVmdDsKKyAgICAg ICAgICAgIHJlY195ID0gbWV0cmljcy5yZWN0X3kgLSBzLT5iYl90b3A7CisgICAgICAgICAg ICByZWNfd2lkdGggPSBzLT5ib3hfd2lkdGggKyBzLT5iYl9yaWdodCArIHMtPmJiX2xlZnQ7 CisgICAgICAgICAgICByZWNfaGVpZ2h0ID0gcy0+Ym94X2hlaWdodCArIHMtPmJiX2JvdHRv bSArIHMtPmJiX3RvcDsKKyAgICAgICAgICAgIC8vIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcs ICJyZWN0X3g6ICVkIC0+IGJiX2xlZnQ6ICVkXG4iLAorICAgICAgICAgICAgLy8gICAgIG1l dHJpY3MucmVjdF94LCBzLT5iYl9sZWZ0KTsKKyAgICAgICAgICAgIC8vIGF2X2xvZyhzLCBB Vl9MT0dfREVCVUcsICJSZWN0IC0+ICh4OiAlZCAtIHk6ICVkIC0gZHg6ICVkIC0gZHk6ICVk KVxuIiwKKyAgICAgICAgICAgIC8vICAgICByZWNfeCwgcmVjX3ksIHJlY193aWR0aCwgcmVj X2hlaWdodCk7CisgICAgICAgICAgICBmZl9ibGVuZF9yZWN0YW5nbGUoJnMtPmRjLCAmYm94 Y29sb3IsCisgICAgICAgICAgICAgICAgZnJhbWUtPmRhdGEsIGZyYW1lLT5saW5lc2l6ZSwg d2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICByZWNfeCwgcmVjX3ksIHJlY193aWR0 aCwgcmVjX2hlaWdodCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocy0+c2hhZG93eCB8 fCBzLT5zaGFkb3d5KSB7CisgICAgICAgICAgICBpZiAoKHJldCA9IGRyYXdfZ2x5cGhzKHMs IGZyYW1lLCAmc2hhZG93Y29sb3IsICZtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICBz LT5zaGFkb3d4IC0gb2Zmc2V0X2xlZnQsIHMtPnNoYWRvd3ksIHMtPmJvcmRlcncpKSA8IDAp IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorICAgICAg ICB9CisKKyAgICAgICAgaWYgKHMtPmJvcmRlcncpIHsKKyAgICAgICAgICAgIGlmICgocmV0 ID0gZHJhd19nbHlwaHMocywgZnJhbWUsICZib3JkZXJjb2xvciwgJm1ldHJpY3MsCisgICAg ICAgICAgICAgICAgICAgIC1vZmZzZXRfbGVmdCwgMCwgcy0+Ym9yZGVydykpIDwgMCkgewor ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgICAgICBpZiAoKHJldCA9IGRyYXdfZ2x5cGhzKHMsIGZyYW1lLCAmZm9udGNvbG9y LCAmbWV0cmljcywgLW9mZnNldF9sZWZ0LAorICAgICAgICAgICAgICAgIDAsIDApKSA8IDAp IHsKICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KICAgICB9Ci0gICAgaWYg KChyZXQgPSBkcmF3X2dseXBocyhzLCBmcmFtZSwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICZmb250Y29sb3IsIDAsIDAsIDApKSA8IDApCi0gICAgICAg IHJldHVybiByZXQ7CisKKyAgICAvLyBGUkVFIGRhdGEgc3RydWN0dXJlcworICAgIGZvcihp bnQgbCA9IDA7IGwgPCBzLT5saW5lX2NvdW50OyArK2wpIHsKKyAgICAgICAgVGV4dExpbmUg KmxpbmUgPSAmcy0+bGluZXNbbF07CisgICAgICAgIGF2X2ZyZWVwKCZsaW5lLT5nbHlwaHMp OworICAgICAgICBoYl9kZXN0cm95KCZsaW5lLT5oYl9kYXRhKTsKKyAgICB9CisgICAgYXZf ZnJlZXAoJnMtPmxpbmVzKTsKKyAgICBhdl9mcmVlcCgmcy0+dGFiX2NsdXN0ZXJzKTsKIAog ICAgIHJldHVybiAwOwogfQpAQCAtMTY4MCwxMyArMjI3MCwxMyBAQCBGRl9FTkFCTEVfREVQ UkVDQVRJT05fV0FSTklOR1MKICAgICAgICAgICAgIHMtPnggPSBiYm94LT54OwogICAgICAg ICAgICAgcy0+eSA9IGJib3gtPnkgLSBzLT5mb250c2l6ZTsKICAgICAgICAgfQotICAgICAg ICBkcmF3X3RleHQoY3R4LCBmcmFtZSwgZnJhbWUtPndpZHRoLCBmcmFtZS0+aGVpZ2h0KTsK KyAgICAgICAgZHJhd190ZXh0KGN0eCwgZnJhbWUpOwogICAgIH0KIAotICAgIGF2X2xvZyhj dHgsIEFWX0xPR19ERUJVRywgIm46JWQgdDolZiB0ZXh0X3c6JWQgdGV4dF9oOiVkIHg6JWQg eTolZFxuIiwKLSAgICAgICAgICAgKGludClzLT52YXJfdmFsdWVzW1ZBUl9OXSwgcy0+dmFy X3ZhbHVlc1tWQVJfVF0sCi0gICAgICAgICAgIChpbnQpcy0+dmFyX3ZhbHVlc1tWQVJfVEVY VF9XXSwgKGludClzLT52YXJfdmFsdWVzW1ZBUl9URVhUX0hdLAotICAgICAgICAgICBzLT54 LCBzLT55KTsKKyAgICAvLyBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJuOiVkIHQ6JWYg dGV4dF93OiVkIHRleHRfaDolZCB4OiUuMmYgeTolLjJmXG4iLAorICAgIC8vICAgICAgICAo aW50KXMtPnZhcl92YWx1ZXNbVkFSX05dLCBzLT52YXJfdmFsdWVzW1ZBUl9UXSwKKyAgICAv LyAgICAgICAgKGludClzLT52YXJfdmFsdWVzW1ZBUl9URVhUX1ddLCAoaW50KXMtPnZhcl92 YWx1ZXNbVkFSX1RFWFRfSF0sCisgICAgLy8gICAgICAgIHMtPngsIHMtPnkpOwogCiAgICAg cmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBmcmFtZSk7CiB9Ci0tIAoyLjMwLjIK Cg== --------------BqOmGcEevhY2MhVJvzk2iN4F 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". --------------BqOmGcEevhY2MhVJvzk2iN4F--