From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1G6o4u-0007J4-F2 for mharc-grub-devel@gnu.org; Sat, 29 Jul 2006 08:38:00 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1G6o4q-0007Gp-NC for grub-devel@gnu.org; Sat, 29 Jul 2006 08:37:56 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1G6o4o-0007Eh-1y for grub-devel@gnu.org; Sat, 29 Jul 2006 08:37:56 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1G6o4n-0007EU-Pm for grub-devel@gnu.org; Sat, 29 Jul 2006 08:37:53 -0400 Received: from [157.24.2.30] (helo=smtp1.cc.lut.fi) by monty-python.gnu.org with esmtp (Exim 4.52) id 1G6o6z-0004a1-41 for grub-devel@gnu.org; Sat, 29 Jul 2006 08:40:10 -0400 Received: from localhost (smtp1 [127.0.0.1]) by smtp1.cc.lut.fi (Postfix) with ESMTP id 087BF7049E for ; Sat, 29 Jul 2006 15:37:43 +0300 (EEST) Received: from smtp1.cc.lut.fi ([127.0.0.1]) by localhost (smtp1.cc.lut.fi [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 19069-06 for ; Sat, 29 Jul 2006 15:37:42 +0300 (EEST) Received: from [192.168.1.103] (lk4-a-4-1.lnet.lut.fi [157.24.102.107]) by smtp1.cc.lut.fi (Postfix) with ESMTP id F40AA702B2 for ; Sat, 29 Jul 2006 15:37:41 +0300 (EEST) Message-ID: <44CB56BA.40201@nic.fi> Date: Sat, 29 Jul 2006 15:38:18 +0300 From: =?UTF-8?B?VmVzYSBKw6TDpHNrZWzDpGluZW4=?= User-Agent: Thunderbird 1.5.0.5 (Windows/20060719) MIME-Version: 1.0 To: The development of GRUB 2 X-Enigmail-Version: 0.94.0.0 Content-Type: multipart/mixed; boundary="------------050805050904000304060307" X-Virus-Scanned: by lut.fi Subject: [patch] Added bitmap support to Video API X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Jul 2006 12:37:57 -0000 This is a multi-part message in MIME format. --------------050805050904000304060307 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, I have just made a patch to add bitmap support to Video API. It contains example bitmap loader for .tga files. At this point there is no real example how to use them, but I have tried to update wiki to reflect changes (except that bitmap handling is not there yet). New functionality was introduced to Video API to specify blitting operator. Now there is only two operators specified, replace and blend. Replace just uses source pixel data and blits it destination and blend uses source pixel alpha value to blend source and destination pixels. Reason why I wanted to give patch before better example how to use is ready is that I want it to get to next grub release and I don't want to block other development. And I didn't include that background bitmap loading to gfxterm in this patch as I would rather like some development to improve menu system than to stall it :). Patch is attached to this message, any comments are welcome. Thanks, Vesa J=C3=A4=C3=A4skel=C3=A4inen --------------050805050904000304060307 Content-Type: text/plain; name="grub2.bitmap.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2.bitmap.diff" SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9ncnVi L2dydWIyL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yODgKZGlmZiAtdSAt cjEuMjg4IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTI5IEp1bCAyMDA2IDExOjIyOjUyIC0w MDAwCTEuMjg4CisrKyBDaGFuZ2VMb2cJMjkgSnVsIDIwMDYgMTI6MTY6NTIgLTAwMDAKQEAg LTEsNSArMSw5MCBAQAogMjAwNi0wNy0yOSAgVmVzYSBKYWFza2VsYWluZW4gIDxjaGFhY0Bu aWMuZmk+CiAKKwkqIGluY2x1ZGUvZ3J1Yi9iaXRtYXAuaDogTmV3IGZpbGUuCisKKwkqIGlu Y2x1ZGUvZ3J1Yi9pMzg2L3BjL3ZiZXV0aWwuaDogTGlrZXdpc2UuCisKKwkqIHZpZGVvL2Jp dG1hcC5jOiBMaWtld2lzZS4KKworCSogdmlkZW8vcmVhZGVycy90Z2EuYzogTGlrZXdpc2Uu CisKKwkqIHZpZGVvL2kzODYvcGMvdmJldXRpbC5jOiBMaWtld2lzZS4KKworCSogY29tbWFu ZHMvdmlkZW90ZXN0LmM6IENvZGUgY2xlYW51cCBhbmQgdXBkYXRlZCB0byByZWZsZWN0IHRv IG5ldworCXZpZGVvIEFQSS4KKworCSogdGVybS9nZnh0ZXJtLmM6IExpa2V3aXNlLgorCisJ KiB2aWRlby92aWRlby5jOiBMaWtld2lzZS4KKworCSogY29uZi9pMzg2LXBjLnJtayAocGtn ZGF0YV9NT0RVTEVTKTogQWRkZWQgdGdhLm1vZCBhbmQgYml0bWFwLm1vZC4KKwkodmJlX21v ZF9TT1VSQ0VTKTogQWRkZWQgdmlkZW8vaTM4Ni9wYy92YmV1dGlsLmMuCisJKGJpdG1hcF9t b2RfU09VUkNFUyk6IE5ldyBlbnRyeS4KKwkoYml0bWFwX21vZF9DRkxBR1MpOiBMaWtld2lz ZS4KKwkoYml0bWFwX21vZF9MREZMQUdTKTogTGlrZXdpc2UuCisJKHRnYV9tb2RfU09VUkNF Uyk6IExpa2V3aXNlLgorCSh0Z2FfbW9kX0NGTEFHUyk6IExpa2V3aXNlLgorCSh0Z2FfbW9k X0xERkxBR1MpOiBMaWtld2lzZS4KKworCSogaW5jbHVkZS9ncnViL3ZpZGVvLmggKGdydWJf dmlkZW9fYmxpdF9vcGVyYXRvcnMpOiBOZXcgZW51bSB0eXBlLgorCShncnViX3ZpZGVvX3Jl bmRlcl90YXJnZXQpOiBDaGFuZ2VkIGFzIGZvcndhcmQgZGVjbGFyYXRpb24gYW5kIG1vdmVk CisJYWN0dWFsIGRlZmluaXRpb24gdG8gYmUgdmlkZW8gZHJpdmVyIHNwZWNpZmljLgorCShn cnViX3ZpZGVvX2FkYXB0ZXIuYmxpdF9iaXRtYXApOiBBZGRlZCBibGl0dGluZyBvcGVyYXRv ci4KKwkoZ3J1Yl92aWRlb19hZGFwdGVyLmJsaXRfcmVuZGVyX3RhcmdldCk6IExpa2V3aXNl LgorCShncnViX3ZpZGVvX2JsaXRfYml0bWFwKTogTGlrZXdpc2UuCisJKGdydWJfdmlkZW9f YmxpdF9yZW5kZXJfdGFyZ2V0KTogTGlrZXdpc2UuCisKKwkqIGluY2x1ZGUvZ3J1Yi9pMzg2 L3BjL3ZiZS5oIChncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQpOiBBZGRlZAorCWRyaXZlciBz cGVjaWZpYyByZW5kZXIgdGFyZ2V0IGRlZmluaXRpb24uCisJKGdydWJfdmlkZW9fdmJlX21h cF9yZ2JhKTogQWRkZWQgZHJpdmVyIGludGVybmFsIGhlbHBlci4KKwkoZ3J1Yl92aWRlb192 YmVfdW5tYXBfY29sb3IpOiBVcGRhdGVkIHRvIHVzZQorCWdydWJfdmlkZW9faTM4Nl92YmVi bGl0X2luZm8uCisJKGdydWJfdmlkZW9fdmJlX2dldF92aWRlb19wdHIpOiBMaWtld2lzZS4K KworCSogaW5jbHVkZS9ncnViL2kzODYvcGMvdmJlYmxpdC5oCisJKGdydWJfdmlkZW9faTM4 Nl92YmVibGl0X1I4RzhCOEE4X1I4RzhCOEE4KTogVXBkYXRlZCB0byB1c2UKKwlncnViX3Zp ZGVvX2kzODZfdmJlYmxpdF9pbmZvLgorCShncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4 QjhfUjhHOEI4QTgpOiBMaWtld2lzZS4KKwkoZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5k ZXhfUjhHOEI4QTgpOiBMaWtld2lzZS4KKwkoZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhH OEI4QThfUjhHOEI4KTogTGlrZXdpc2UuCisJKGdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4 RzhCOF9SOEc4QjgpOiBMaWtld2lzZS4KKwkoZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5k ZXhfUjhHOEI4KTogTGlrZXdpc2UuCisJKGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZGV4 X2luZGV4KTogTGlrZXdpc2UuCisJKGdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOFg4 X1I4RzhCOFg4KTogTmV3IGJsaXR0ZXIgZnVuY3Rpb24uCisJKGdydWJfdmlkZW9faTM4Nl92 YmVibGl0X1I4RzhCOF9SOEc4QjhYOCk6IExpa2V3aXNlLgorCShncnViX3ZpZGVvX2kzODZf dmJlYmxpdF9pbmRleF9SOEc4QjhYOCk6IExpa2V3aXNlLgorCShncnViX3ZpZGVvX2kzODZf dmJlYmxpdF9ibGVuZCk6IEFkZGVkIGdlbmVyaWMgYmxpdHRlciBmb3IgYmxlbmQKKwlvcGVy YXRvci4KKwkoZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfcmVwbGFjZSk6IEFkZGVkIGdlbmVy aWMgYmxpdHRlciBmb3IgcmVwbGFjZQorCW9wZXJhdG9yLgorCisJKiB2aWRlby9pMzg2L3Bj L3ZiZWJsaXQuYzogVXBkYXRlZCB0byByZWZsZWN0IGNoYW5nZXMgb24KKwlpbmNsdWRlL2dy dWIvaTM4Ni9wYy92YmVibGl0LmguCisKKwkqIGluY2x1ZGUvZ3J1Yi9pMzg2L3BjL3ZiZWZp bGwuaCAoZ3J1Yl92aWRlb19pMzg2X3ZiZWZpbGxfUjhHOEI4QTgpOgorCVVwZGF0ZWQgdG8g dXNlIGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8uCisJKGdydWJfdmlkZW9faTM4Nl92 YmVmaWxsX1I4RzhCOCk6IExpa2V3aXNlLgorCShncnViX3ZpZGVvX2kzODZfdmJlZmlsbF9p bmRleCk6IExpa2V3aXNlLgorCShncnViX3ZpZGVvX2kzODZfdmJlZmlsbCk6IEFkZGVkIGdl bmVyaWMgZmlsbGVyLgorCisJKiB2aWRlby9pMzg2L3BjL3ZiZWZpbGwuYzogVXBkYXRlZCB0 byByZWZsZWN0IGNoYW5nZXMgb24KKwlpbmNsdWRlL2dydWIvaTM4Ni9wYy92YmVmaWxsLmgu CisKKwkqIHZpZGVvL2kzODYvcGMvdmJlLmMgKGdydWJfdmlkZW9fdmJlX2dldF92aWRlb19w dHIpOiBVcGRhdGVkIHRvIHVzZQorCWdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8uCisJ KGdydWJfdmlkZW9fdmJlX3VubWFwX2NvbG9yKTogTGlrZXdpc2UuCisJKGdydWJfdmlkZW9f dmJlX2JsaXRfZ2x5cGgpOiBMaWtld2lzZS4KKwkoZ3J1Yl92aWRlb192YmVfc2Nyb2xsKTog TGlrZXdpc2UuCisJKGdydWJfdmlkZW9fdmJlX2RyYXdfcGl4ZWwpOiBSZW1vdmVkIGZ1bmN0 aW9uLgorCShncnViX3ZpZGVvX3ZiZV9nZXRfcGl4ZWwpOiBMaWtld2lzZS4KKwkoZ3J1Yl92 aWRlb192YmVfZmlsbF9yZWN0KTogTW92ZWQgYWxsIGJsaXR0ZXJzIHRvIHZiZWZpbGwuYyBh bmQKKwl1cGRhdGVkIGNvZGUgdG8gdXNlIGl0LgorCShjb21tb25fYmxpdHRlcik6IEFkZGVk IGNvbW1vbiBibGl0dGVyIGZvciByZW5kZXIgdGFyZ2V0IGFuZCBiaXRtYXAuCisJKGdydWJf dmlkZW9fdmJlX2JsaXRfYml0bWFwKTogVXBkYXRlZCB0byB1c2UgY29tbW9uX2JsaXR0ZXIu CisJKGdydWJfdmlkZW9fdmJlX2JsaXRfcmVuZGVyX3RhcmdldCk6IExpa2V3aXNlLgorCisy MDA2LTA3LTI5ICBWZXNhIEphYXNrZWxhaW5lbiAgPGNoYWFjQG5pYy5maT4KKwogCSogaW5j bHVkZS9ncnViL3ZpZGVvLmg6IENvZGUgY2xlYW51cC4KIAogCSogaW5jbHVkZS9ncnViL2kz ODYvcGMvdmJlLmg6IExpa2V3aXNlLgpJbmRleDogY29tbWFuZHMvdmlkZW90ZXN0LmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3J1Yi9ncnViMi9jb21tYW5kcy92aWRl b3Rlc3QuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXIxLjEgdmlkZW90 ZXN0LmMKLS0tIGNvbW1hbmRzL3ZpZGVvdGVzdC5jCTE0IE1hciAyMDA2IDE5OjA4OjMzIC0w MDAwCTEuMQorKysgY29tbWFuZHMvdmlkZW90ZXN0LmMJMjkgSnVsIDIwMDYgMTI6MTY6NTIg LTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAKICAgaWYgKGdydWJfdmlkZW9fc2V0dXAgKDEwMjQs IDc2OCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdSVUJfVklERU9fTU9ERV9UWVBFX0lO REVYX0NPTE9SKSAhPSBHUlVCX0VSUl9OT05FKQogICAgIHJldHVybiBncnViX2Vycm5vOwot ICAKKwogICBncnViX2dldGtleSAoKTsKIAogICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3I7 CkBAIC00OCwyMSArNDgsMjEgQEAKICAgc3RydWN0IGdydWJfZm9udF9nbHlwaCBnbHlwaDsK ICAgc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqdGV4dF9sYXllcjsKICAgZ3J1 Yl92aWRlb19jb2xvcl90IHBhbGV0dGVbMTZdOwotICAKKwogICBncnViX3ZpZGVvX2dldF92 aWV3cG9ydCAoJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgIGdydWJfdmlkZW9fY3Jl YXRlX3JlbmRlcl90YXJnZXQgKCZ0ZXh0X2xheWVyLCB3aWR0aCwgaGVpZ2h0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlVCX1ZJREVPX01PREVfVFlQRV9SR0IK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHUlVCX1ZJREVPX01PREVf VFlQRV9BTFBIQSk7CiAKLSAgZ3J1Yl92aWRlb19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQg KEdSVUJfVklERU9fUkVOREVSX1RBUkdFVF9ESVNQTEFZKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorICBncnViX3ZpZGVvX3NldF9hY3RpdmVfcmVuZGVyX3Rhcmdl dCAoR1JVQl9WSURFT19SRU5ERVJfVEFSR0VUX0RJU1BMQVkpOwogCiAgIGNvbG9yID0gZ3J1 Yl92aWRlb19tYXBfcmdiICgwLCAwLCAwKTsKICAgZ3J1Yl92aWRlb19maWxsX3JlY3QgKGNv bG9yLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgCisKICAgY29sb3IgPSBncnViX3ZpZGVv X21hcF9yZ2IgKDI1NSwgMCwgMCk7CiAgIGdydWJfdmlkZW9fZmlsbF9yZWN0IChjb2xvciwg MCwgMCwgMTAwLCAxMDApOwotICAKKwogICBjb2xvciA9IGdydWJfdmlkZW9fbWFwX3JnYiAo MCwgMjU1LCAyNTUpOwogICBncnViX3ZpZGVvX2ZpbGxfcmVjdCAoY29sb3IsIDEwMCwgMTAw LCAxMDAsIDEwMCk7CiAKQEAgLTczLDE4ICs3MywxOCBAQAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2lkdGggLSAxNTAgKiAyLCBoZWlnaHQgLSAxNTAgKiAyKTsKICAgY29sb3Ig PSBncnViX3ZpZGVvX21hcF9yZ2IgKDc3LCAzMywgNzcpOwogICBncnViX3ZpZGVvX2ZpbGxf cmVjdCAoY29sb3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAKKwogICBncnViX3ZpZGVv X3NldF9hY3RpdmVfcmVuZGVyX3RhcmdldCAodGV4dF9sYXllcik7Ci0gIAorCiAgIGNvbG9y ID0gZ3J1Yl92aWRlb19tYXBfcmdiICgyNTUsIDI1NSwgMjU1KTsKLSAgCi0gIGdydWJfZm9u dF9nZXRfZ2x5cGggKCdBJywgJmdseXBoKTsgIAorCisgIGdydWJfZm9udF9nZXRfZ2x5cGgg KCdBJywgJmdseXBoKTsKICAgZ3J1Yl92aWRlb19ibGl0X2dseXBoICgmZ2x5cGgsIGNvbG9y LCAxNiwgMTYpOwotICBncnViX2ZvbnRfZ2V0X2dseXBoICgnQicsICZnbHlwaCk7ICAKKyAg Z3J1Yl9mb250X2dldF9nbHlwaCAoJ0InLCAmZ2x5cGgpOwogICBncnViX3ZpZGVvX2JsaXRf Z2x5cGggKCZnbHlwaCwgY29sb3IsIDE2ICogMiwgMTYpOwogCi0gIGdydWJfZm9udF9nZXRf Z2x5cGggKCcqJywgJmdseXBoKTsgIAotICAKKyAgZ3J1Yl9mb250X2dldF9nbHlwaCAoJyon LCAmZ2x5cGgpOworCiAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogICAgIHsKICAgICAg IGNvbG9yID0gZ3J1Yl92aWRlb19tYXBfY29sb3IgKGkpOwpAQCAtOTgsMTggKzk4LDE5IEBA CiAgICAgewogICAgICAgY29sb3IgPSBncnViX3ZpZGVvX21hcF9yZ2IgKGksIDMzLCA3Nyk7 CiAgICAgICBncnViX3ZpZGVvX2ZpbGxfcmVjdCAoY29sb3IsIDAsIDAsIHdpZHRoLCBoZWln aHQpOwotICAgICAgZ3J1Yl92aWRlb19ibGl0X3JlbmRlcl90YXJnZXQgKHRleHRfbGF5ZXIs IDAsIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgZ3J1Yl92aWRlb19ibGl0X3Jl bmRlcl90YXJnZXQgKHRleHRfbGF5ZXIsIEdSVUJfVklERU9fQkxJVF9CTEVORCwgMCwgMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB3aWR0aCwgaGVp Z2h0KTsKICAgICB9Ci0gIAorCiAgIGdydWJfZ2V0a2V5ICgpOwotICAKKwogICBncnViX3Zp ZGVvX2RlbGV0ZV9yZW5kZXJfdGFyZ2V0ICh0ZXh0X2xheWVyKTsKLSAgCisKICAgZ3J1Yl92 aWRlb19yZXN0b3JlICgpOwotICAKKwogICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKICAg ICBncnViX3ByaW50ZigiY29sb3IgJWQ6ICUwOHhcbiIsIGksIHBhbGV0dGVbaV0pOwotICAK KwogICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKICAgcmV0dXJuIGdydWJfZXJybm87 CiB9CkluZGV4OiBjb25mL2kzODYtcGMucm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9z b3VyY2VzL2dydWIvZ3J1YjIvY29uZi9pMzg2LXBjLnJtayx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS42NgpkaWZmIC11IC1yMS42NiBpMzg2LXBjLnJtawotLS0gY29uZi9pMzg2LXBjLnJt awkyIEp1bCAyMDA2IDE1OjMwOjQzIC0wMDAwCTEuNjYKKysrIGNvbmYvaTM4Ni1wYy5ybWsJ MjkgSnVsIDIwMDYgMTI6MTY6NTIgLTAwMDAKQEAgLTExMiw3ICsxMTIsNyBAQAogcGtnZGF0 YV9NT0RVTEVTID0gX2NoYWluLm1vZCBfbGludXgubW9kIGxpbnV4Lm1vZCBub3JtYWwubW9k IFwKIAlfbXVsdGlib290Lm1vZCBjaGFpbi5tb2QgbXVsdGlib290Lm1vZCByZWJvb3QubW9k IGhhbHQubW9kCVwKIAl2YmUubW9kIHZiZXRlc3QubW9kIHZiZWluZm8ubW9kIHZpZGVvLm1v ZCBnZnh0ZXJtLm1vZCBcCi0JdmlkZW90ZXN0Lm1vZCBwbGF5Lm1vZAorCXZpZGVvdGVzdC5t b2QgcGxheS5tb2QgYml0bWFwLm1vZCB0Z2EubW9kCiAKICMgRm9yIF9jaGFpbi5tb2QuCiBf Y2hhaW5fbW9kX1NPVVJDRVMgPSBsb2FkZXIvaTM4Ni9wYy9jaGFpbmxvYWRlci5jCkBAIC0x NzEsNyArMTcxLDcgQEAKIAogIyBGb3IgdmJlLm1vZC4KIHZiZV9tb2RfU09VUkNFUyA9IHZp ZGVvL2kzODYvcGMvdmJlLmMgdmlkZW8vaTM4Ni9wYy92YmVibGl0LmMgXAotCQkgIHZpZGVv L2kzODYvcGMvdmJlZmlsbC5jCisJCSAgdmlkZW8vaTM4Ni9wYy92YmVmaWxsLmMgdmlkZW8v aTM4Ni9wYy92YmV1dGlsLmMKIHZiZV9tb2RfQ0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQog dmJlX21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykKIApAQCAtMjA1LDQgKzIwNSwx NCBAQAogdmlkZW90ZXN0X21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCiB2aWRlb3Rl c3RfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9MREZMQUdTKQogCisjIEZvciBiaXRtYXAubW9k CitiaXRtYXBfbW9kX1NPVVJDRVMgPSB2aWRlby9iaXRtYXAuYworYml0bWFwX21vZF9DRkxB R1MgPSAkKENPTU1PTl9DRkxBR1MpCitiaXRtYXBfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9M REZMQUdTKQorCisjIEZvciB0Z2EubW9kCit0Z2FfbW9kX1NPVVJDRVMgPSB2aWRlby9yZWFk ZXJzL3RnYS5jCit0Z2FfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKK3RnYV9tb2Rf TERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpCisKIGluY2x1ZGUgJChzcmNkaXIpL2NvbmYv Y29tbW9uLm1rCkluZGV4OiBpbmNsdWRlL2dydWIvYml0bWFwLmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogaW5jbHVkZS9ncnViL2JpdG1hcC5oCmRpZmYgLU4gaW5jbHVkZS9ncnViL2Jp dG1hcC5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgaW5j bHVkZS9ncnViL2JpdG1hcC5oCTI5IEp1bCAyMDA2IDEyOjE2OjUyIC0wMDAwCkBAIC0wLDAg KzEsNzEgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgor ICogIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK KyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog IGFsb25nIHdpdGggR1JVQjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEz OSwgVVNBLgorICovCisKKyNpZm5kZWYgR1JVQl9CSVRNQVBfSEVBREVSCisjZGVmaW5lIEdS VUJfQklUTUFQX0hFQURFUgkxCisKKyNpbmNsdWRlIDxncnViL2Vyci5oPgorI2luY2x1ZGUg PGdydWIvc3ltYm9sLmg+CisjaW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdy dWIvdmlkZW8uaD4KKworc3RydWN0IGdydWJfdmlkZW9fYml0bWFwCit7CisgIC8qIEJpdG1h cCBmb3JtYXQgZGVzY3JpcHRpb24uICAqLworICBzdHJ1Y3QgZ3J1Yl92aWRlb19tb2RlX2lu Zm8gbW9kZV9pbmZvOworCisgIC8qIFBvaW50ZXIgdG8gYml0bWFwIGRhdGEgZm9ybWF0dGVk IGFjY29yZGluZyB0byBtb2RlX2luZm8uICAqLworICB2b2lkICpkYXRhOworfTsKKworc3Ry dWN0IGdydWJfdmlkZW9fYml0bWFwX3JlYWRlcgoreworICAvKiBGaWxlIGV4dGVuc2lvbiBm b3IgdGhpcyBiaXRtYXAgdHlwZSAoaW5jbHVkaW5nIGRvdCkuICAqLworICBjb25zdCBjaGFy ICpleHRlbnNpb247CisKKyAgLyogUmVhZGVyIGZ1bmN0aW9uIHRvIGxvYWQgYml0bWFwLiAg Ki8KKyAgZ3J1Yl9lcnJfdCAoKnJlYWRlcikgKHN0cnVjdCBncnViX3ZpZGVvX2JpdG1hcCAq KmJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1l KTsKKworICAvKiBOZXh0IHJlYWRlci4gICovCisgIHN0cnVjdCBncnViX3ZpZGVvX2JpdG1h cF9yZWFkZXIgKm5leHQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXBf cmVhZGVyICpncnViX3ZpZGVvX2JpdG1hcF9yZWFkZXJfdDsKKwordm9pZCBncnViX3ZpZGVv X2JpdG1hcF9yZWFkZXJfcmVnaXN0ZXIgKGdydWJfdmlkZW9fYml0bWFwX3JlYWRlcl90IHJl YWRlcik7Cit2b2lkIGdydWJfdmlkZW9fYml0bWFwX3JlYWRlcl91bnJlZ2lzdGVyIChncnVi X3ZpZGVvX2JpdG1hcF9yZWFkZXJfdCByZWFkZXIpOworCitncnViX2Vycl90IGdydWJfdmlk ZW9fYml0bWFwX2NyZWF0ZSAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFwICoqYml0bWFwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0 aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIGdydWJfdmlkZW9fYmxpdF9mb3JtYXQgYmxpdF9mb3JtYXQpOworCitn cnViX2Vycl90IGdydWJfdmlkZW9fYml0bWFwX2Rlc3Ryb3kgKHN0cnVjdCBncnViX3ZpZGVv X2JpdG1hcCAqYml0bWFwKTsKKworZ3J1Yl9lcnJfdCBncnViX3ZpZGVvX2JpdG1hcF9sb2Fk IChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKipiaXRtYXAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKwordW5zaWduZWQg aW50IGdydWJfdmlkZW9fYml0bWFwX2dldF93aWR0aCAoc3RydWN0IGdydWJfdmlkZW9fYml0 bWFwICpiaXRtYXApOwordW5zaWduZWQgaW50IGdydWJfdmlkZW9fYml0bWFwX2dldF9oZWln aHQgKHN0cnVjdCBncnViX3ZpZGVvX2JpdG1hcCAqYml0bWFwKTsKKwordm9pZCBncnViX3Zp ZGVvX2JpdG1hcF9nZXRfbW9kZV9pbmZvIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKmJp dG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdy dWJfdmlkZW9fbW9kZV9pbmZvICptb2RlX2luZm8pOworCit2b2lkICpncnViX3ZpZGVvX2Jp dG1hcF9nZXRfZGF0YSAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFwICpiaXRtYXApOworCisj ZW5kaWYgLyogISBHUlVCX0JJVE1BUF9IRUFERVIgKi8KSW5kZXg6IGluY2x1ZGUvZ3J1Yi92 aWRlby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2dydWIvZ3J1YjIvaW5j bHVkZS9ncnViL3ZpZGVvLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1y MS40IHZpZGVvLmgKLS0tIGluY2x1ZGUvZ3J1Yi92aWRlby5oCTI5IEp1bCAyMDA2IDExOjIy OjUyIC0wMDAwCTEuNAorKysgaW5jbHVkZS9ncnViL3ZpZGVvLmgJMjkgSnVsIDIwMDYgMTI6 MTY6NTIgLTAwMDAKQEAgLTIzLDEwICsyMywxOCBAQAogI2luY2x1ZGUgPGdydWIvZXJyLmg+ CiAjaW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgogCisvKiBWaWRlbyBjb2xvciBpbiBoYXJkd2Fy ZSBkZXBlbmRhbnQgZm9ybWF0LiAgVXNlcnMgc2hvdWxkIG5vdCBhc3N1bWUgYW55CisgICBz cGVjaWZpYyBjb2RpbmcgZm9ybWF0LiAgKi8KIHR5cGVkZWYgZ3J1Yl91aW50MzJfdCBncnVi X3ZpZGVvX2NvbG9yX3Q7CiAKKy8qIFRoaXMgc3RydWN0dXJlIGlzIGRyaXZlciBzcGVjaWZp YyBhbmQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseSBieSAKKyAgIG91dHNpZGUg Y29kZS4gICovCiBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0OwogCisvKiBGb3J3 YXJkIGRlY2xhcmF0aW9ucyBmb3IgdXNlZCBkYXRhIHN0cnVjdHVyZXMuICAqLworc3RydWN0 IGdydWJfZm9udF9nbHlwaDsKK3N0cnVjdCBncnViX3ZpZGVvX2JpdG1hcDsKKwogLyogRGVm aW5lcyB1c2VkIHRvIGRlc2NyaWJlIHZpZGVvIG1vZGUgb3IgcmVuZGVyaW5nIHRhcmdldC4g ICovCiAjZGVmaW5lIEdSVUJfVklERU9fTU9ERV9UWVBFX0FMUEhBCQkweDAwMDAwMDA4CiAj ZGVmaW5lIEdSVUJfVklERU9fTU9ERV9UWVBFX0RPVUJMRV9CVUZGRVJFRAkweDAwMDAwMDA0 CkBAIC02MCw2ICs2OCwxNSBAQAogICAgIEdSVUJfVklERU9fQkxJVF9GT1JNQVRfSU5ERVhD T0xPUgogICB9OwogCisvKiBEZWZpbmUgYmxpdHRpbmcgb3BlcmF0b3JzLiAgKi8KK2VudW0g Z3J1Yl92aWRlb19ibGl0X29wZXJhdG9ycworICB7CisgICAgLyogUmVwbGFjZSB0YXJnZXQg Yml0bWFwIGRhdGEgd2l0aCBzb3VyY2UuICAqLworICAgIEdSVUJfVklERU9fQkxJVF9SRVBM QUNFLAorICAgIC8qIEJsZW5kIHRhcmdldCBhbmQgc291cmNlIGJhc2VkIG9uIHNvdXJjZSdz IGFscGhhIHZhbHVlLiAgKi8KKyAgICBHUlVCX1ZJREVPX0JMSVRfQkxFTkQKKyAgfTsKKwog c3RydWN0IGdydWJfdmlkZW9fbW9kZV9pbmZvCiB7CiAgIC8qIFdpZHRoIG9mIHRoZSBzY3Jl ZW4uICAqLwpAQCAtMTEzLDI5ICsxMzAsNiBAQAogICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRf ZmllbGRfcG9zOwogfTsKIAotc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldAotewot ICAvKiBDb3B5IG9mIHRoZSBzY3JlZW4ncyBtb2RlIGluZm8gc3RydWN0dXJlLCBleGNlcHQg dGhhdCB3aWR0aCwgaGVpZ2h0IGFuZAotICAgICBtb2RlX3R5cGUgaGFzIGJlZW4gcmUtYWRq dXN0ZWQgdG8gcmVxdWVzdGVkIHJlbmRlciB0YXJnZXQgc2V0dGluZ3MuICAqLwotICBzdHJ1 Y3QgZ3J1Yl92aWRlb19tb2RlX2luZm8gbW9kZV9pbmZvOwotCi0gIHN0cnVjdAotICB7Ci0g ICAgdW5zaWduZWQgaW50IHg7Ci0gICAgdW5zaWduZWQgaW50IHk7Ci0gICAgdW5zaWduZWQg aW50IHdpZHRoOwotICAgIHVuc2lnbmVkIGludCBoZWlnaHQ7CQotICB9IHZpZXdwb3J0Owot Ci0gIC8qIEluZGljYXRlcyB3ZXRoZXIgdGhlIGRhdGEgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5 IHVzIGFuZCBtdXN0IGJlIGZyZWVkIAotICAgICB3aGVuIHJlbmRlciB0YXJnZXQgaXMgZGVz dHJveWVkLiAgKi8KLSAgaW50IGlzX2FsbG9jYXRlZDsKLQotICAvKiBQb2ludGVyIHRvIGRh dGEuICBDYW4gZWl0aGVyIGJlIGluIHZpZGVvIGNhcmQgbWVtb3J5IG9yIGluIGxvY2FsIGhv c3QncwotICAgICBtZW1vcnkuICAqLwotICB2b2lkICpkYXRhOwotfTsKLQogc3RydWN0IGdy dWJfdmlkZW9fcGFsZXR0ZV9kYXRhCiB7CiAgIGdydWJfdWludDhfdCByOyAvKiBSZWQgY29s b3IgdmFsdWUgKDAtMjU1KS4gICovCkBAIC0xNDQsOSArMTM4LDYgQEAKICAgZ3J1Yl91aW50 OF90IGE7IC8qIFJlc2VydmVkIGJpdHMgdmFsdWUgKDAtMjU1KS4gICovCiB9OwogCi1zdHJ1 Y3QgZ3J1Yl9mb250X2dseXBoOwotc3RydWN0IGdydWJfdmlkZW9fYml0bWFwOwotCiBzdHJ1 Y3QgZ3J1Yl92aWRlb19hZGFwdGVyCiB7CiAgIC8qIFRoZSB2aWRlbyBhZGFwdGVyIG5hbWUu ICAqLwpAQCAtMTkwLDEwICsxODEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3IsIGludCB4LCBpbnQgeSk7CiAKICAgZ3J1Yl9l cnJfdCAoKmJsaXRfYml0bWFwKSAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFwICpiaXRtYXAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3J1Yl92aWRlb19ibGl0X29w ZXJhdG9ycyBvcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50 IHksIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpOwogCiAg IGdydWJfZXJyX3QgKCpibGl0X3JlbmRlcl90YXJnZXQpIChzdHJ1Y3QgZ3J1Yl92aWRlb19y ZW5kZXJfdGFyZ2V0ICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIGdydWJfdmlkZW9fYmxpdF9vcGVyYXRvcnMgb3BlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IG9mZnNldF94LCBp bnQgb2Zmc2V0X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpOwogCkBAIC0yNTQsMTAgKzI0 NywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdmlkZW9f Y29sb3JfdCBjb2xvciwgaW50IHgsIGludCB5KTsKIAogZ3J1Yl9lcnJfdCBncnViX3ZpZGVv X2JsaXRfYml0bWFwIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKmJpdG1hcCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBncnViX3ZpZGVvX2JsaXRfb3Bl cmF0b3JzIG9wZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4 LCBpbnQgeSwgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3ksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhl aWdodCk7CiAKIGdydWJfZXJyX3QgZ3J1Yl92aWRlb19ibGl0X3JlbmRlcl90YXJnZXQgKHN0 cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKnNvdXJjZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3J1Yl92aWRlb19ibGl0X29wZXJh dG9ycyBvcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHgsIGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3ksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCkluZGV4OiBpbmNsdWRl L2dydWIvaTM4Ni9wYy92YmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9n cnViL2dydWIyL2luY2x1ZGUvZ3J1Yi9pMzg2L3BjL3ZiZS5oLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjYKZGlmZiAtdSAtcjEuNiB2YmUuaAotLS0gaW5jbHVkZS9ncnViL2kzODYvcGMv dmJlLmgJMjkgSnVsIDIwMDYgMTE6MjI6NTIgLTAwMDAJMS42CisrKyBpbmNsdWRlL2dydWIv aTM4Ni9wYy92YmUuaAkyOSBKdWwgMjAwNiAxMjoxNjo1MiAtMDAwMApAQCAtMjA1LDEzICsy MDUsNDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGdydWJfdmJlX21vZGVfaW5mb19ibG9jayAqbW9kZV9pbmZvKTsKIAogLyogVkJFIG1v ZHVsZSBpbnRlcm5hbCBwcm90b3R5cGVzIChzaG91bGQgbm90IGJlIHVzZWQgZnJvbSBlbHNl d2hlcmUpLiAgKi8KLWdydWJfdWludDhfdCAqIGdydWJfdmlkZW9fdmJlX2dldF92aWRlb19w dHIgKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKnNvdXJjZSwKK3N0cnVjdCBn cnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvOworCitzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5k ZXJfdGFyZ2V0Cit7CisgIC8qIENvcHkgb2YgdGhlIHNjcmVlbidzIG1vZGUgaW5mbyBzdHJ1 Y3R1cmUsIGV4Y2VwdCB0aGF0IHdpZHRoLCBoZWlnaHQgYW5kCisgICAgIG1vZGVfdHlwZSBo YXMgYmVlbiByZS1hZGp1c3RlZCB0byByZXF1ZXN0ZWQgcmVuZGVyIHRhcmdldCBzZXR0aW5n cy4gICovCisgIHN0cnVjdCBncnViX3ZpZGVvX21vZGVfaW5mbyBtb2RlX2luZm87CisKKyAg c3RydWN0CisgIHsKKyAgICB1bnNpZ25lZCBpbnQgeDsKKyAgICB1bnNpZ25lZCBpbnQgeTsK KyAgICB1bnNpZ25lZCBpbnQgd2lkdGg7CisgICAgdW5zaWduZWQgaW50IGhlaWdodDsKKyAg fSB2aWV3cG9ydDsKKworICAvKiBJbmRpY2F0ZXMgd2V0aGVyIHRoZSBkYXRhIGhhcyBiZWVu IGFsbG9jYXRlZCBieSB1cyBhbmQgbXVzdCBiZSBmcmVlZAorICAgICB3aGVuIHJlbmRlciB0 YXJnZXQgaXMgZGVzdHJveWVkLiAgKi8KKyAgaW50IGlzX2FsbG9jYXRlZDsKKworICAvKiBQ b2ludGVyIHRvIGRhdGEuICBDYW4gZWl0aGVyIGJlIGluIHZpZGVvIGNhcmQgbWVtb3J5IG9y IGluIGxvY2FsIGhvc3QncworICAgICBtZW1vcnkuICAqLworICB2b2lkICpkYXRhOworfTsK KworZ3J1Yl91aW50OF90ICogZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAoc3RydWN0 IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKnNvdXJjZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDMyX3QgeCwgZ3J1Yl91 aW50MzJfdCB5KTsKIAogZ3J1Yl92aWRlb19jb2xvcl90IGdydWJfdmlkZW9fdmJlX21hcF9y Z2IgKGdydWJfdWludDhfdCByZWQsIGdydWJfdWludDhfdCBncmVlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX3VpbnQ4X3QgYmx1ZSk7CiAK LXZvaWQgZ3J1Yl92aWRlb192YmVfdW5tYXBfY29sb3IgKHN0cnVjdCBncnViX3ZpZGVvX3Jl bmRlcl90YXJnZXQgKiBzb3VyY2UsCitncnViX3ZpZGVvX2NvbG9yX3QgZ3J1Yl92aWRlb192 YmVfbWFwX3JnYmEgKGdydWJfdWludDhfdCByZWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCBncmVlbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90IGJsdWUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhf dCBhbHBoYSk7CisKK3ZvaWQgZ3J1Yl92aWRlb192YmVfdW5tYXBfY29sb3IgKHN0cnVjdCBn cnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpzb3VyY2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3IsIGdydWJfdWludDhf dCAqcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90 ICpncmVlbiwgZ3J1Yl91aW50OF90ICpibHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3J1Yl91aW50OF90ICphbHBoYSk7CkluZGV4OiBpbmNsdWRlL2dydWIvaTM4 Ni9wYy92YmVibGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3J1Yi9n cnViMi9pbmNsdWRlL2dydWIvaTM4Ni9wYy92YmVibGl0LmgsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMQpkaWZmIC11IC1yMS4xIHZiZWJsaXQuaAotLS0gaW5jbHVkZS9ncnViL2kzODYv cGMvdmJlYmxpdC5oCTMxIE1hciAyMDA2IDE0OjI2OjM0IC0wMDAwCTEuMQorKysgaW5jbHVk ZS9ncnViL2kzODYvcGMvdmJlYmxpdC5oCTI5IEp1bCAyMDA2IDEyOjE2OjUyIC0wMDAwCkBA IC0yMCw0NyArMjAsODEgQEAKICNpZm5kZWYgR1JVQl9WQkVCTElUX01BQ0hJTkVfSEVBREVS CiAjZGVmaW5lIEdSVUJfVkJFQkxJVF9NQUNISU5FX0hFQURFUgkxCiAKKy8qIE5PVEU6IFRo aXMgaGVhZGVyIGlzIHByaXZhdGUgaGVhZGVyIGZvciB2YmUgZHJpdmVyIGFuZCBzaG91bGQg bm90IGJlIHVzZWQKKyAgIGluIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiAgKi8KKworc3Ry dWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm87CisKIHZvaWQKLWdydWJfdmlkZW9f aTM4Nl92YmVibGl0X1I4RzhCOEE4X1I4RzhCOEE4IChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5k ZXJfdGFyZ2V0ICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqc3JjLAorZ3J1Yl92aWRl b19pMzg2X3ZiZWJsaXRfUjhHOEI4QThfUjhHOEI4QTggKHN0cnVjdCBncnViX3ZpZGVvX2kz ODZfdmJlYmxpdF9pbmZvICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKnNyYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50 IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0X3gsIGludCBvZmZzZXRfeSk7CiAKIHZvaWQK LWdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOF9SOEc4QjhBOCAoc3RydWN0IGdydWJf dmlkZW9fcmVuZGVyX3RhcmdldCAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpzcmMsCitn cnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4QjhYOF9SOEc4QjhYOCAoc3RydWN0IGdydWJf dmlkZW9faTM4Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5m byAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95KTsK Kwordm9pZAorZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4X1I4RzhCOEE4IChzdHJ1 Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJs aXRfaW5mbyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3kp OwogCiB2b2lkCi1ncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmRleF9SOEc4QjhBOCAoc3Ry dWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqZHN0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQg KnNyYywKK2dydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOF9SOEc4QjhYOCAoc3RydWN0 IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0 X2luZm8gKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95KTsK Kwordm9pZAorZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5kZXhfUjhHOEI4QTggKHN0cnVj dCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpkc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0 X2luZm8gKnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0X3gsIGludCBvZmZzZXRfeSk7CiAK K3ZvaWQKK2dydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZGV4X1I4RzhCOFg4IChzdHJ1Y3Qg Z3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9p bmZvICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3kpOwogCiB2 b2lkCi1ncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4QjhBOF9SOEc4QjggKHN0cnVjdCBn cnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqc3Jj LAorZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4QThfUjhHOEI4IChzdHJ1Y3QgZ3J1 Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5m byAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3kpOwogCiB2 b2lkCi1ncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4QjhfUjhHOEI4IChzdHJ1Y3QgZ3J1 Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpzcmMsCitn cnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4QjhfUjhHOEI4IChzdHJ1Y3QgZ3J1Yl92aWRl b19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKnNyYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwg aW50IHdpZHRoLCBpbnQgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3kpOwogCiB2b2lkCi1ncnViX3Zp ZGVvX2kzODZfdmJlYmxpdF9pbmRleF9SOEc4QjggKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRl cl90YXJnZXQgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqc3JjLAorZ3J1Yl92aWRlb19pMzg2 X3ZiZWJsaXRfaW5kZXhfUjhHOEI4IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRf aW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqc3JjLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNl dF94LCBpbnQgb2Zmc2V0X3kpOwogCiB2b2lkCi1ncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9p bmRleF9pbmRleCAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqZHN0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX3Jl bmRlcl90YXJnZXQgKnNyYywKK2dydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZGV4X2luZGV4 IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJl YmxpdF9pbmZvICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3kpOwogCit2 b2lkCitncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9ibGVuZCAoc3RydWN0IGdydWJfdmlkZW9f aTM4Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqc3JjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVp Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRfeCwgaW50 IG9mZnNldF95KTsKKwordm9pZAorZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfcmVwbGFjZSAo c3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9p bmZvICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50 IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95KTsKKwogI2VuZGlmIC8qICEgR1JV Ql9WQkVCTElUX01BQ0hJTkVfSEVBREVSICovCkluZGV4OiBpbmNsdWRlL2dydWIvaTM4Ni9w Yy92YmVmaWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3J1Yi9ncnVi Mi9pbmNsdWRlL2dydWIvaTM4Ni9wYy92YmVmaWxsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMQpkaWZmIC11IC1yMS4xIHZiZWZpbGwuaAotLS0gaW5jbHVkZS9ncnViL2kzODYvcGMv dmJlZmlsbC5oCTMxIE1hciAyMDA2IDE0OjI2OjM0IC0wMDAwCTEuMQorKysgaW5jbHVkZS9n cnViL2kzODYvcGMvdmJlZmlsbC5oCTI5IEp1bCAyMDA2IDEyOjE2OjUyIC0wMDAwCkBAIC0y MCwyMSArMjAsMjkgQEAKICNpZm5kZWYgR1JVQl9WQkVGSUxMX01BQ0hJTkVfSEVBREVSCiAj ZGVmaW5lIEdSVUJfVkJFRklMTF9NQUNISU5FX0hFQURFUgkxCiAKLSNpbmNsdWRlIDxncnVi L3ZpZGVvLmg+CisvKiBOT1RFOiBUaGlzIGhlYWRlciBpcyBwcml2YXRlIGhlYWRlciBmb3Ig dmJlIGRyaXZlciBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCisgICBpbiBvdGhlciBwYXJ0cyBv ZiB0aGUgY29kZS4gICovCisKK3N0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZv OwogCiB2b2lkCi1ncnViX3ZpZGVvX2kzODZfdmJlZmlsbF9SOEc4QjhBOCAoc3RydWN0IGdy dWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqZHN0LAorZ3J1Yl92aWRlb19pMzg2X3ZiZWZpbGxf UjhHOEI4QTggKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpkc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl92aWRlb19jb2xvcl90IGNv bG9yLCAgaW50IHgsIGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKIHZvaWQKLWdydWJfdmlkZW9faTM4Nl92YmVm aWxsX1I4RzhCOCAoc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqZHN0LAorZ3J1 Yl92aWRlb19pMzg2X3ZiZWZpbGxfUjhHOEI4IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3Zi ZWJsaXRfaW5mbyAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnVi X3ZpZGVvX2NvbG9yX3QgY29sb3IsIGludCB4LCBpbnQgeSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAogdm9pZAotZ3J1Yl92 aWRlb19pMzg2X3ZiZWZpbGxfaW5kZXggKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJn ZXQgKmRzdCwKK2dydWJfdmlkZW9faTM4Nl92YmVmaWxsX2luZGV4IChzdHJ1Y3QgZ3J1Yl92 aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBjb2xvciwgaW50IHgsIGludCB5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKK3Zv aWQKK2dydWJfdmlkZW9faTM4Nl92YmVmaWxsIChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3Zi ZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdmlkZW9f Y29sb3JfdCBjb2xvciwgaW50IHgsIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAg IGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKICNlbmRpZiAvKiAhIEdSVUJfVkJFRklMTF9N QUNISU5FX0hFQURFUiAqLwpJbmRleDogaW5jbHVkZS9ncnViL2kzODYvcGMvdmJldXRpbC5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGluY2x1ZGUvZ3J1Yi9pMzg2L3BjL3ZiZXV0aWwu aApkaWZmIC1OIGluY2x1ZGUvZ3J1Yi9pMzg2L3BjL3ZiZXV0aWwuaAotLS0gL2Rldi9udWxs CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGluY2x1ZGUvZ3J1Yi9pMzg2L3BjL3Zi ZXV0aWwuaAkyOSBKdWwgMjAwNiAxMjoxNjo1MiAtMDAwMApAQCAtMCwwICsxLDQ0IEBACisv KgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmln aHQgKEMpIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAq ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1B IDAyMTM5LCBVU0EuCisgKi8KKworLyogTk9URTogVGhpcyBoZWFkZXIgaXMgcHJpdmF0ZSBo ZWFkZXIgZm9yIHZiZSBkcml2ZXIgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorICAgaW4gb3Ro ZXIgcGFydHMgb2YgdGhlIGNvZGUuICAqLworCisjaWZuZGVmIEdSVUJfVkJFVVRJTF9NQUNI SU5FX0hFQURFUgorI2RlZmluZSBHUlVCX1ZCRVVUSUxfTUFDSElORV9IRUFERVIJMQorCisj aW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdydWIvdmlkZW8uaD4KKworc3Ry dWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8KK3sKKyAgc3RydWN0IGdydWJfdmlk ZW9fbW9kZV9pbmZvICptb2RlX2luZm87CisgIHZvaWQgKmRhdGE7Cit9OworCitncnViX3Vp bnQ4X3QgKmdldF9kYXRhX3B0ciAoc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2lu Zm8gKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg eCwgdW5zaWduZWQgaW50IHkpOworCitncnViX3ZpZGVvX2NvbG9yX3QgZ2V0X3BpeGVsIChz dHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqc291cmNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5KTsK Kwordm9pZCBzZXRfcGl4ZWwgKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZv ICpzb3VyY2UsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGlu dCB5LCBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3IpOworCisjZW5kaWYgLyogISBHUlVCX1ZC RVVUSUxfTUFDSElORV9IRUFERVIgKi8KSW5kZXg6IHRlcm0vZ2Z4dGVybS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2dydWIvZ3J1YjIvdGVybS9nZnh0ZXJtLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1yMS4yIGdmeHRlcm0uYwotLS0gdGVy bS9nZnh0ZXJtLmMJMjAgQXByIDIwMDYgMTU6MTk6MDEgLTAwMDAJMS4yCisrKyB0ZXJtL2dm eHRlcm0uYwkyOSBKdWwgMjAwNiAxMjoxNjo1MiAtMDAwMApAQCAtODksNyArODksNyBAQAog ICB1bnNpZ25lZCBpbnQgY3Vyc29yX3g7CiAgIHVuc2lnbmVkIGludCBjdXJzb3JfeTsKICAg aW50IGN1cnNvcl9zdGF0ZTsKLSAgCisKICAgLyogQ29sb3Igc2V0dGluZ3MuICAqLwogICBn cnViX3ZpZGVvX2NvbG9yX3QgZmdfY29sb3Jfc2V0dGluZzsKICAgZ3J1Yl92aWRlb19jb2xv cl90IGJnX2NvbG9yX3NldHRpbmc7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogICAvKiBSZXNl dCB2aXJ0dWFsIHNjcmVlbiBkYXRhLiAgKi8KICAgZ3J1Yl9tZW1zZXQgKCZ2aXJ0dWFsX3Nj cmVlbiwgMCwgc2l6ZW9mICh2aXJ0dWFsX3NjcmVlbikpOwotICAKKwogICAvKiBGcmVlIHJl bmRlciB0YXJnZXRzLiAgKi8KICAgZ3J1Yl92aWRlb19kZWxldGVfcmVuZGVyX3RhcmdldCAo dGV4dF9sYXllcik7CiAgIHRleHRfbGF5ZXIgPSAwOwpAQCAtMTU4LDggKzE1OCw4IEBACiAg IC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGV4dCBidWZmZXIuICAqLwogICB2aXJ0dWFsX3Nj cmVlbi50ZXh0X2J1ZmZlciA9CiAgICAgKHN0cnVjdCBncnViX2NvbG9yZWRfY2hhciAqKSBn cnViX21hbGxvYyAodmlydHVhbF9zY3JlZW4uY29sdW1ucwotCQkJCQkgICAgICAqIHZpcnR1 YWxfc2NyZWVuLnJvd3MKLQkJCQkJICAgICAgKiBzaXplb2YgKCp2aXJ0dWFsX3NjcmVlbi50 ZXh0X2J1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogdmlydHVhbF9zY3JlZW4ucm93cworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mICgqdmlydHVhbF9zY3JlZW4udGV4dF9i dWZmZXIpKTsKICAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkKICAgICByZXR1 cm4gZ3J1Yl9lcnJubzsKIApAQCAtMTcxLDE5ICsxNzEsMTkgQEAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCBHUlVCX1ZJREVPX01PREVfVFlQRV9BTFBIQSk7CiAg IGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCiAgICAgcmV0dXJuIGdydWJfZXJy bm87Ci0gIAorCiAgIC8qIEFzIHdlIHdhbnQgdG8gaGF2ZSBjb2xvcnMgY29tcGF0aWJsZSB3 aXRoIHJlbmRlcmluZyB0YXJnZXQsCi0gICAgIHdlIGNhbiBvbmx5IGhhdmUgdGhvc2UgYWZ0 ZXIgbW9kZSBpcyBpbml0aWFsaXplZC4gICovICAgIAorICAgICB3ZSBjYW4gb25seSBoYXZl IHRob3NlIGFmdGVyIG1vZGUgaXMgaW5pdGlhbGl6ZWQuICAqLwogICBncnViX3ZpZGVvX3Nl dF9hY3RpdmVfcmVuZGVyX3RhcmdldCAodGV4dF9sYXllcik7Ci0gIAorCiAgIHZpcnR1YWxf c2NyZWVuLmZnX2NvbG9yX3NldHRpbmcgPSBncnViX3ZpZGVvX21hcF9jb2xvciAoREVGQVVM VF9GR19DT0xPUik7CiAgIHZpcnR1YWxfc2NyZWVuLmJnX2NvbG9yX3NldHRpbmcgPSBncnVi X3ZpZGVvX21hcF9jb2xvciAoREVGQVVMVF9CR19DT0xPUik7CiAgIHZpcnR1YWxfc2NyZWVu LmZnX2NvbG9yID0gdmlydHVhbF9zY3JlZW4uZmdfY29sb3Jfc2V0dGluZzsKICAgdmlydHVh bF9zY3JlZW4uYmdfY29sb3IgPSB2aXJ0dWFsX3NjcmVlbi5iZ19jb2xvcl9zZXR0aW5nOwog ICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfY29sb3IgPSBncnViX3ZpZGVvX21hcF9jb2xvciAo REVGQVVMVF9DVVJTT1JfQ09MT1IpOwotICAKKwogICBncnViX3ZpZGVvX3NldF9hY3RpdmVf cmVuZGVyX3RhcmdldCAoR1JVQl9WSURFT19SRU5ERVJfVEFSR0VUX0RJU1BMQVkpOwotICAK KwogICByZXR1cm4gZ3J1Yl9lcnJubzsKIH0KIApAQCAtMTk2LDcgKzE5Niw3IEBACiAgIGlu dCBkZXB0aCA9IC0xOwogICBpbnQgZmxhZ3MgPSBERUZBVUxUX1ZJREVPX0ZMQUdTOwogICBn cnViX3ZpZGVvX2NvbG9yX3QgY29sb3I7Ci0gIAorCiAgIC8qIFBhcnNlIGdmeG1vZGUgZW52 aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAgKi8KICAgbW9kZXZhciA9IGdydWJfZW52X2dl dCAoImdmeG1vZGUiKTsKICAgaWYgKG1vZGV2YXIpCkBAIC0yMDQsMTggKzIwNCwxOCBAQAog ICAgICAgY2hhciAqdG1wOwogICAgICAgY2hhciAqcGFyYW07CiAgICAgICBjaGFyICp2YWx1 ZTsKLSAgICAgIAorCiAgICAgICAvKiBUYWtlIGNvcHkgb2YgZW52LnZhci4gYXMgd2UgZG9u J3Qgd2FudCB0byBtb2RpZnkgdGhhdC4gICovCiAgICAgICB0bXAgPSBncnViX3N0cmR1cCAo bW9kZXZhcik7CiAgICAgICBtb2RldmFyID0gdG1wOwotICAgICAgCisKICAgICAgIGlmIChn cnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCi0gICAgICAgIHJldHVybiBncnViX2Vycm5v OyAgICAgICAgCi0gICAgICAKKyAgICAgICAgcmV0dXJuIGdydWJfZXJybm87CisKICAgICAg IC8qIFNraXAgd2hpdGVzcGFjZS4gICovCiAgICAgICB3aGlsZSAoZ3J1Yl9pc3NwYWNlICgq dG1wKSkKICAgICAgICAgdG1wKys7Ci0gICAgICAKKwogICAgICAgLyogSW5pdGlhbGl6ZSB0 b2tlbiBob2xkZXJzLiAgKi8KICAgICAgIHBhcmFtID0gdG1wOwogICAgICAgdmFsdWUgPSBO VUxMOwpAQCAtMjMzLDEwICsyMzMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkludmFsaWQgYXJndW1lbnQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXJhbSk7CiAgICAgICAgIH0KLSAgICAgIAorCiAgICAgICAqcGFyYW0gPSAwOwog ICAgICAgcGFyYW0rKzsKLSAgICAgIAorCiAgICAgICB3aWR0aCA9IGdydWJfc3RydG91bCAo dmFsdWUsIDAsIDApOwogICAgICAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkK ICAgICAgICAgewpAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgLyogV2UgaGF2ZSBv cHRpb25hbCBjb2xvciBkZXB0aCB2YWx1ZS4gICovCiAgICAgICAgICAgKnBhcmFtID0gMDsK ICAgICAgICAgICBwYXJhbSsrOwotICAgICAgICAgIAorCiAgICAgICAgICAgaGVpZ2h0ID0g Z3J1Yl9zdHJ0b3VsICh2YWx1ZSwgMCwgMCk7CiAgICAgICAgICAgaWYgKGdydWJfZXJybm8g IT0gR1JVQl9FUlJfTk9ORSkKICAgICAgICAgICAgIHsKQEAgLTI3Nyw3ICsyNzcsNyBAQAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgYXJndW1lbnQ6ICVz XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0pOwogICAgICAg ICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgLyogQ29udmVydCBjb2xvciBkZXB0 aCB2YWx1ZS4gICovCiAgICAgICAgICAgdmFsdWUgPSBwYXJhbTsKICAgICAgICAgICBkZXB0 aCA9IGdydWJfc3RydG91bCAodmFsdWUsIDAsIDApOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbSk7CiAgICAgICAgICAgICB9 CiAgICAgICAgIH0KLSAgICAgIAorCiAgICAgICAvKiBGcmVlIG1lbW9yeS4gICovCiAgICAg ICBncnViX2ZyZWUgKG1vZGV2YXIpOwogICAgIH0KQEAgLTMyMyw3ICszMjMsNyBAQAogICAv KiBMZWF2ZSBib3JkZXJzIGZvciB2aXJ0dWFsIHNjcmVlbi4gICovCiAgIHdpZHRoID0gbW9k ZV9pbmZvLndpZHRoIC0gKDIgKiBERUZBVUxUX0JPUkRFUl9XSURUSCk7CiAgIGhlaWdodCA9 IG1vZGVfaW5mby5oZWlnaHQgLSAoMiAqIERFRkFVTFRfQk9SREVSX1dJRFRIKTsKLSAgCisK ICAgLyogQ3JlYXRlIHZpcnR1YWwgc2NyZWVuLiAgKi8KICAgaWYgKGdydWJfdmlydHVhbF9z Y3JlZW5fc2V0dXAgKERFRkFVTFRfQk9SREVSX1dJRFRILCBERUZBVUxUX0JPUkRFUl9XSURU SCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpICE9 IEdSVUJfRVJSX05PTkUpCkBAIC0zMzMsNyArMzMzLDcgQEAKICAgICB9CiAKICAgLyogTWFy ayB3aG9sZSBzY3JlZW4gYXMgZGlydHkuICAqLwotICBkaXJ0eV9yZWdpb25fcmVzZXQgKCk7 ICAKKyAgZGlydHlfcmVnaW9uX3Jlc2V0ICgpOwogICBkaXJ0eV9yZWdpb25fYWRkICgwLCAw LCBtb2RlX2luZm8ud2lkdGgsIG1vZGVfaW5mby5oZWlnaHQpOwogCiAgIHJldHVybiAoZ3J1 Yl9lcnJubyA9IEdSVUJfRVJSX05PTkUpOwpAQCAtMzU0LDE1ICszNTQsMTUgQEAKICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0 KQogewogICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3I7Ci0gIAorCiAgIGdydWJfdmlkZW9f c2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0IChHUlVCX1ZJREVPX1JFTkRFUl9UQVJHRVRfRElT UExBWSk7CiAKICAgLyogUmVuZGVyIGJhY2tncm91bmQgbGF5ZXIuICAqLwogICBjb2xvciA9 IHZpcnR1YWxfc2NyZWVuLmJnX2NvbG9yOwogICBncnViX3ZpZGVvX2ZpbGxfcmVjdCAoY29s b3IsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAKKwogICAvKiBSZW5kZXIgdGV4dCBsYXll ci4gICovCi0gIGdydWJfdmlkZW9fYmxpdF9yZW5kZXJfdGFyZ2V0ICh0ZXh0X2xheWVyLCB4 LCB5LAorICBncnViX3ZpZGVvX2JsaXRfcmVuZGVyX3RhcmdldCAodGV4dF9sYXllciwgR1JV Ql9WSURFT19CTElUX0JMRU5ELCB4LCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeCAtIHZpcnR1YWxfc2NyZWVuLm9mZnNldF94LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeSAtIHZpcnR1YWxfc2NyZWVuLm9mZnNldF95LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7CkBAIC0zOTMsNyArMzkz LDcgQEAKIHsKICAgaWYgKCh3aWR0aCA9PSAwKSB8fCAoaGVpZ2h0ID09IDApKQogICAgIHJl dHVybjsKLSAgICAKKwogICBpZiAoZGlydHlfcmVnaW9uX2lzX2VtcHR5ICgpKQogICAgIHsK ICAgICAgIGRpcnR5X3JlZ2lvbi50b3BfbGVmdF94ID0geDsKQEAgLTQzMCwxOCArNDMwLDE4 IEBACiAgIGludCB5OwogICBpbnQgd2lkdGg7CiAgIGludCBoZWlnaHQ7Ci0gIAorCiAgIGlm IChkaXJ0eV9yZWdpb25faXNfZW1wdHkgKCkpCiAgICAgcmV0dXJuOwotICAKKwogICB4ID0g ZGlydHlfcmVnaW9uLnRvcF9sZWZ0X3g7CiAgIHkgPSBkaXJ0eV9yZWdpb24udG9wX2xlZnRf eTsKLSAgCisKICAgd2lkdGggPSBkaXJ0eV9yZWdpb24uYm90dG9tX3JpZ2h0X3ggLSB4ICsg MTsKICAgaGVpZ2h0ID0gZGlydHlfcmVnaW9uLmJvdHRvbV9yaWdodF95IC0geSArIDE7Ci0g IAorCiAgIHJlZHJhd19zY3JlZW5fcmVjdCAoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gIAor CiAgIGRpcnR5X3JlZ2lvbl9yZXNldCAoKTsKIH0KIApAQCAtNDUxLDcgKzQ1MSw3IEBACiAg IHN0cnVjdCBncnViX2NvbG9yZWRfY2hhciAqcDsKICAgc3RydWN0IGdydWJfZm9udF9nbHlw aCBnbHlwaDsKICAgZ3J1Yl92aWRlb19jb2xvcl90IGNvbG9yOwotICBncnViX3ZpZGVvX2Nv bG9yX3QgYmdjb2xvcjsgICAgCisgIGdydWJfdmlkZW9fY29sb3JfdCBiZ2NvbG9yOwogICB1 bnNpZ25lZCBpbnQgeDsKICAgdW5zaWduZWQgaW50IHk7CiAKQEAgLTQ3NCw3ICs0NzQsNyBA QAogICAvKiBSZW5kZXIgZ2x5cGggdG8gdGV4dCBsYXllci4gICovCiAgIGdydWJfdmlkZW9f c2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0ICh0ZXh0X2xheWVyKTsKICAgZ3J1Yl92aWRlb19m aWxsX3JlY3QgKGJnY29sb3IsIHgsIHksIGdseXBoLndpZHRoLCBnbHlwaC5oZWlnaHQpOwot ICBncnViX3ZpZGVvX2JsaXRfZ2x5cGggKCZnbHlwaCwgY29sb3IsIHgsIHkpOyAgCisgIGdy dWJfdmlkZW9fYmxpdF9nbHlwaCAoJmdseXBoLCBjb2xvciwgeCwgeSk7CiAgIGdydWJfdmlk ZW9fc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0IChHUlVCX1ZJREVPX1JFTkRFUl9UQVJHRVRf RElTUExBWSk7CiAKICAgLyogTWFyayBjaGFyYWN0ZXIgdG8gYmUgZHJhd24uICAqLwpAQCAt NTE3LDcgKzUxNyw3IEBACiAKICAgLyogU2Nyb2xsIHRleHQgYnVmZmVyIHdpdGggb25lIGxp bmUgdG8gdXAuICAqLwogICBncnViX21lbW1vdmUgKHZpcnR1YWxfc2NyZWVuLnRleHRfYnVm ZmVyLAotCQl2aXJ0dWFsX3NjcmVlbi50ZXh0X2J1ZmZlciArIHZpcnR1YWxfc2NyZWVuLmNv bHVtbnMsCisgICAgICAgICAgICAgICAgdmlydHVhbF9zY3JlZW4udGV4dF9idWZmZXIgKyB2 aXJ0dWFsX3NjcmVlbi5jb2x1bW5zLAogICAgICAgICAgICAgICAgIHNpemVvZiAoKnZpcnR1 YWxfc2NyZWVuLnRleHRfYnVmZmVyKQogICAgICAgICAgICAgICAgICogdmlydHVhbF9zY3Jl ZW4uY29sdW1ucwogICAgICAgICAgICAgICAgICogKHZpcnR1YWxfc2NyZWVuLnJvd3MgLSAx KSk7CkBAIC01MzMsMTMgKzUzMywxMyBAQAogICAgICAgdmlydHVhbF9zY3JlZW4udGV4dF9i dWZmZXJbaV0ud2lkdGggPSAwOwogICAgICAgdmlydHVhbF9zY3JlZW4udGV4dF9idWZmZXJb aV0uaW5kZXggPSAwOwogICAgIH0KLSAgICAKKwogICAvKiBTY3JvbGwgcGh5c2ljYWwgc2Ny ZWVuLiAgKi8KICAgZ3J1Yl92aWRlb19zZXRfYWN0aXZlX3JlbmRlcl90YXJnZXQgKHRleHRf bGF5ZXIpOwogICBjb2xvciA9IHZpcnR1YWxfc2NyZWVuLmJnX2NvbG9yOwogICBncnViX3Zp ZGVvX3Njcm9sbCAoY29sb3IsIDAsIC12aXJ0dWFsX3NjcmVlbi5jaGFyX2hlaWdodCk7CiAg IGdydWJfdmlkZW9fc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0IChHUlVCX1ZJREVPX1JFTkRF Ul9UQVJHRVRfRElTUExBWSk7Ci0gIAorCiAgIC8qIE1hcmsgdmlydHVhbCBzY3JlZW4gdG8g YmUgcmVkcmF3bi4gICovCiAgIGRpcnR5X3JlZ2lvbl9hZGRfdmlydHVhbHNjcmVlbiAoKTsK IH0KQEAgLTU1NSw0NyArNTU1LDQ3IEBACiAgICAgewogICAgICAgLyogRXJhc2UgY3VycmVu dCBjdXJzb3IsIGlmIGFueS4gICovCiAgICAgICBpZiAodmlydHVhbF9zY3JlZW4uY3Vyc29y X3N0YXRlKQotCXdyaXRlX2NoYXIgKCk7CisgICAgICAgIHdyaXRlX2NoYXIgKCk7CiAKICAg ICAgIHN3aXRjaCAoYykKLQl7Ci0JY2FzZSAnXGInOgotCSAgaWYgKHZpcnR1YWxfc2NyZWVu LmN1cnNvcl94ID4gMCkKLQkgICAgdmlydHVhbF9zY3JlZW4uY3Vyc29yX3gtLTsKLQkgIGJy ZWFrOwotCSAgCi0JY2FzZSAnXG4nOgotCSAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95 ID49IHZpcnR1YWxfc2NyZWVuLnJvd3MgLSAxKQotCSAgICBzY3JvbGxfdXAgKCk7Ci0JICBl bHNlCi0JICAgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95Kys7Ci0JICBicmVhazsKLQkgIAot CWNhc2UgJ1xyJzoKLQkgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl94ID0gMDsKLQkgIGJyZWFr OwotCX0KKyAgICAgICAgeworICAgICAgICBjYXNlICdcYic6CisgICAgICAgICAgaWYgKHZp cnR1YWxfc2NyZWVuLmN1cnNvcl94ID4gMCkKKyAgICAgICAgICAgIHZpcnR1YWxfc2NyZWVu LmN1cnNvcl94LS07CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnXG4nOgor ICAgICAgICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeSA+PSB2aXJ0dWFsX3NjcmVl bi5yb3dzIC0gMSkKKyAgICAgICAgICAgIHNjcm9sbF91cCAoKTsKKyAgICAgICAgICBlbHNl CisgICAgICAgICAgICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeSsrOworICAgICAgICAgIGJy ZWFrOworCisgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgICB2aXJ0dWFsX3NjcmVlbi5j dXJzb3JfeCA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgLyog UmVkcmF3IGN1cnNvciBpZiB2aXNpYmxlLiAgKi8KICAgICAgIGlmICh2aXJ0dWFsX3NjcmVl bi5jdXJzb3Jfc3RhdGUpCi0Jd3JpdGVfY3Vyc29yICgpOworICAgICAgICB3cml0ZV9jdXJz b3IgKCk7CiAgICAgfQogICBlbHNlCiAgICAgewogICAgICAgc3RydWN0IGdydWJfZm9udF9n bHlwaCBnbHlwaDsKICAgICAgIHN0cnVjdCBncnViX2NvbG9yZWRfY2hhciAqcDsKLSAgCisK ICAgICAgIC8qIEdldCBwcm9wZXJ0aWVzIG9mIHRoZSBjaGFyYWN0ZXIuICAqLyAgICAKICAg ICAgIGdydWJfZm9udF9nZXRfZ2x5cGggKGMsICZnbHlwaCk7CiAKICAgICAgIC8qIElmIHdl IGFyZSBhYm91dCB0byBleGNlZWQgbGluZSBsZW5ndGgsIHdyYXAgdG8gbmV4dCBsaW5lLiAg Ki8KICAgICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCArIGdseXBoLmNoYXJfd2lk dGggPiB2aXJ0dWFsX3NjcmVlbi5jb2x1bW5zKQotCWdydWJfcHV0Y2hhciAoJ1xuJyk7Cisg ICAgICAgIGdydWJfcHV0Y2hhciAoJ1xuJyk7CiAKICAgICAgIC8qIEZpbmQgcG9zaXRpb24g b24gdmlydHVhbCBzY3JlZW4sIGFuZCBmaWxsIGluZm9ybWF0aW9uLiAgKi8KICAgICAgIHAg PSAodmlydHVhbF9zY3JlZW4udGV4dF9idWZmZXIgKwotCSAgIHZpcnR1YWxfc2NyZWVuLmN1 cnNvcl94ICsKLQkgICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeSAqIHZpcnR1YWxfc2NyZWVu LmNvbHVtbnMpOworICAgICAgICAgICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCArCisgICAg ICAgICAgIHZpcnR1YWxfc2NyZWVuLmN1cnNvcl95ICogdmlydHVhbF9zY3JlZW4uY29sdW1u cyk7CiAgICAgICBwLT5jb2RlID0gYzsKICAgICAgIHAtPmZnX2NvbG9yID0gdmlydHVhbF9z Y3JlZW4uZmdfY29sb3I7CiAgICAgICBwLT5iZ19jb2xvciA9IHZpcnR1YWxfc2NyZWVuLmJn X2NvbG9yOwpAQCAtNjA0LDM1ICs2MDQsMzUgQEAKIAogICAgICAgLyogSWYgd2UgaGF2ZSBs YXJnZSBnbHlwaCwgYWRkIGZpeHVwIGluZm8uICAqLwogICAgICAgaWYgKGdseXBoLmNoYXJf d2lkdGggPiAxKQotCXsKLQkgIHVuc2lnbmVkIGk7CisgICAgICAgIHsKKyAgICAgICAgICB1 bnNpZ25lZCBpOworCisgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGdseXBoLmNoYXJfd2lk dGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcFtpXS5jb2RlID0gJyAn OworICAgICAgICAgICAgICBwW2ldLndpZHRoID0gZ2x5cGguY2hhcl93aWR0aCAtIDE7Cisg ICAgICAgICAgICAgIHBbaV0uaW5kZXggPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9 CiAKLQkgIGZvciAoaSA9IDE7IGkgPCBnbHlwaC5jaGFyX3dpZHRoOyBpKyspCi0JICAgIHsK LQkgICAgICBwW2ldLmNvZGUgPSAnICc7Ci0JICAgICAgcFtpXS53aWR0aCA9IGdseXBoLmNo YXJfd2lkdGggLSAxOwotCSAgICAgIHBbaV0uaW5kZXggPSBpOwotCSAgICB9Ci0JfQotCSAg CiAgICAgICAvKiBEcmF3IGdseXBoLiAgKi8KICAgICAgIHdyaXRlX2NoYXIgKCk7Ci0gIAor CiAgICAgICAvKiBNYWtlIHN1cmUgd2Ugc2Nyb2xsIHNjcmVlbiB3aGVuIG5lZWRlZCBhbmQg d3JhcCBsaW5lIGNvcnJlY3RseS4gICovCiAgICAgICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jf eCArPSBnbHlwaC5jaGFyX3dpZHRoOwogICAgICAgaWYgKHZpcnR1YWxfc2NyZWVuLmN1cnNv cl94ID49IHZpcnR1YWxfc2NyZWVuLmNvbHVtbnMpCi0JewotCSAgdmlydHVhbF9zY3JlZW4u Y3Vyc29yX3ggPSAwOwotCSAgCi0JICBpZiAodmlydHVhbF9zY3JlZW4uY3Vyc29yX3kgPj0g dmlydHVhbF9zY3JlZW4ucm93cyAtIDEpCi0JICAgIHNjcm9sbF91cCAoKTsKLQkgIGVsc2UK LQkgICAgdmlydHVhbF9zY3JlZW4uY3Vyc29yX3krKzsKLQl9CisgICAgICAgIHsKKyAgICAg ICAgICB2aXJ0dWFsX3NjcmVlbi5jdXJzb3JfeCA9IDA7CisKKyAgICAgICAgICBpZiAodmly dHVhbF9zY3JlZW4uY3Vyc29yX3kgPj0gdmlydHVhbF9zY3JlZW4ucm93cyAtIDEpCisgICAg ICAgICAgICBzY3JvbGxfdXAgKCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdmly dHVhbF9zY3JlZW4uY3Vyc29yX3krKzsKKyAgICAgICAgfQogCiAgICAgICAvKiBEcmF3IGN1 cnNvciBpZiB2aXNpYmxlLiAgKi8KICAgICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jf c3RhdGUpCi0Jd3JpdGVfY3Vyc29yICgpOworICAgICAgICB3cml0ZV9jdXJzb3IgKCk7CiAg ICAgfQogfQogCkBAIC02NDAsNyArNjQwLDcgQEAKIGdydWJfZ2Z4dGVybV9nZXRjaGFyd2lk dGggKGdydWJfdWludDMyX3QgYykKIHsKICAgc3RydWN0IGdydWJfZm9udF9nbHlwaCBnbHlw aDsKLSAgCisKICAgZ3J1Yl9mb250X2dldF9nbHlwaCAoYywgJmdseXBoKTsKIAogICByZXR1 cm4gZ2x5cGguY2hhcl93aWR0aDsKQEAgLTY2Myw3ICs2NjMsNyBAQAogewogICBpZiAoeCA+ PSB2aXJ0dWFsX3NjcmVlbi5jb2x1bW5zKQogICAgIHggPSB2aXJ0dWFsX3NjcmVlbi5jb2x1 bW5zIC0gMTsKLSAgCisKICAgaWYgKHkgPj0gdmlydHVhbF9zY3JlZW4ucm93cykKICAgICB5 ID0gdmlydHVhbF9zY3JlZW4ucm93cyAtIDE7CiAKQEAgLTcwMSwxMyArNzAxLDEzIEBACiAK ICAgLyogQ2xlYXIgdmlydHVhbCBzY3JlZW4uICAqLwogICBncnViX3ZpcnR1YWxfc2NyZWVu X2NscyAoKTsKLSAgCisKICAgLyogQ2xlYXIgdGV4dCBsYXllci4gICovCiAgIGdydWJfdmlk ZW9fc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0ICh0ZXh0X2xheWVyKTsKICAgY29sb3IgPSB2 aXJ0dWFsX3NjcmVlbi5iZ19jb2xvcl9zZXR0aW5nOwogICBncnViX3ZpZGVvX2ZpbGxfcmVj dCAoY29sb3IsIDAsIDAsIG1vZGVfaW5mby53aWR0aCwgbW9kZV9pbmZvLmhlaWdodCk7CiAg IGdydWJfdmlkZW9fc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0IChHUlVCX1ZJREVPX1JFTkRF Ul9UQVJHRVRfRElTUExBWSk7Ci0gIAorCiAgIC8qIE1hcmsgdmlydHVhbCBzY3JlZW4gdG8g YmUgcmVkcmF3bi4gICovCiAgIGRpcnR5X3JlZ2lvbl9hZGRfdmlydHVhbHNjcmVlbiAoKTsK IH0KQEAgLTc0NSw5ICs3NDUsOSBAQAogICBpZiAodmlydHVhbF9zY3JlZW4uY3Vyc29yX3N0 YXRlICE9IG9uKQogICAgIHsKICAgICAgIGlmICh2aXJ0dWFsX3NjcmVlbi5jdXJzb3Jfc3Rh dGUpCi0Jd3JpdGVfY2hhciAoKTsKKyAgICAgICAgd3JpdGVfY2hhciAoKTsKICAgICAgIGVs c2UKLQl3cml0ZV9jdXJzb3IgKCk7CisgICAgICAgIHdyaXRlX2N1cnNvciAoKTsKIAogICAg ICAgdmlydHVhbF9zY3JlZW4uY3Vyc29yX3N0YXRlID0gb247CiAgICAgfQpAQCAtNzc2LDcg Kzc3Niw3IEBACiAgICAgLnNldGNvbG9yc3RhdGUgPSBncnViX3ZpcnR1YWxfc2NyZWVuX3Nl dGNvbG9yc3RhdGUsCiAgICAgLnNldGNvbG9yID0gZ3J1Yl92aXJ0dWFsX3NjcmVlbl9zZXRj b2xvciwKICAgICAuc2V0Y3Vyc29yID0gZ3J1Yl9nZnh0ZXJtX3NldGN1cnNvciwKLSAgICAu cmVmcmVzaCA9IGdydWJfZ2Z4dGVybV9yZWZyZXNoLCAgICAKKyAgICAucmVmcmVzaCA9IGdy dWJfZ2Z4dGVybV9yZWZyZXNoLAogICAgIC5mbGFncyA9IDAsCiAgICAgLm5leHQgPSAwCiAg IH07CkluZGV4OiB2aWRlby9iaXRtYXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB2aWRl by9iaXRtYXAuYwpkaWZmIC1OIHZpZGVvL2JpdG1hcC5jCi0tLSAvZGV2L251bGwJMSBKYW4g MTk3MCAwMDowMDowMCAtMDAwMAorKysgdmlkZW8vYml0bWFwLmMJMjkgSnVsIDIwMDYgMTI6 MTY6NTIgLTAwMDAKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5k IFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ bmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisj aW5jbHVkZSA8Z3J1Yi92aWRlby5oPgorI2luY2x1ZGUgPGdydWIvYml0bWFwLmg+CisjaW5j bHVkZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdydWIvZGwuaD4KKyNpbmNsdWRlIDxn cnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+CisKKy8qIExpc3Qgb2YgYml0bWFw IHJlYWRlcnMgcmVnaXN0ZXJlZCB0byBzeXN0ZW0uICAqLworc3RhdGljIGdydWJfdmlkZW9f Yml0bWFwX3JlYWRlcl90IGJpdG1hcF9yZWFkZXJzX2xpc3Q7CisKKy8qIFJlZ2lzdGVyIGJp dG1hcCByZWFkZXIuICAqLwordm9pZAorZ3J1Yl92aWRlb19iaXRtYXBfcmVhZGVyX3JlZ2lz dGVyIChncnViX3ZpZGVvX2JpdG1hcF9yZWFkZXJfdCByZWFkZXIpCit7CisgIHJlYWRlci0+ bmV4dCA9IGJpdG1hcF9yZWFkZXJzX2xpc3Q7CisgIGJpdG1hcF9yZWFkZXJzX2xpc3QgPSBy ZWFkZXI7Cit9CisKKy8qIFVucmVnaXN0ZXIgYml0bWFwIHJlYWRlci4gICovCit2b2lkCitn cnViX3ZpZGVvX2JpdG1hcF9yZWFkZXJfdW5yZWdpc3RlciAoZ3J1Yl92aWRlb19iaXRtYXBf cmVhZGVyX3QgcmVhZGVyKQoreworICBncnViX3ZpZGVvX2JpdG1hcF9yZWFkZXJfdCAqcCwg cTsKKworICBmb3IgKHAgPSAmYml0bWFwX3JlYWRlcnNfbGlzdCwgcSA9ICpwOyBxOyBwID0g JihxLT5uZXh0KSwgcSA9IHEtPm5leHQpCisgICAgaWYgKHEgPT0gcmVhZGVyKQorICAgICAg eworICAgICAgICAqcCA9IHEtPm5leHQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorfQor CisvKiBDcmVhdGVzIG5ldyBiaXRtYXAsIHNhdmVzIGNyZWF0ZWQgYml0bWFwIG9uIHN1Y2Nl c3MgdG8gKmJpdG1hcC4gICovCitncnViX2Vycl90CitncnViX3ZpZGVvX2JpdG1hcF9jcmVh dGUgKHN0cnVjdCBncnViX3ZpZGVvX2JpdG1hcCAqKmJpdG1hcCwgCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBncnViX3ZpZGVvX2JsaXRfZm9ybWF0 IGJsaXRfZm9ybWF0KQoreworICBzdHJ1Y3QgZ3J1Yl92aWRlb19tb2RlX2luZm8gKm1vZGVf aW5mbzsKKyAgdW5zaWduZWQgaW50IHNpemU7CisKKyAgaWYgKCFiaXRtYXApCisgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgIkludmFsaWQgYXJndW1l bnQuIik7CisKKyAgKmJpdG1hcCA9IDA7CisKKyAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0 ID09IDApCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwg IkludmFsaWQgYXJndW1lbnQuIik7CisKKyAgKmJpdG1hcCA9IChzdHJ1Y3QgZ3J1Yl92aWRl b19iaXRtYXAgKilncnViX21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRt YXApKTsKKyAgaWYgKCEgKmJpdG1hcCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICBt b2RlX2luZm8gPSAmKCgqYml0bWFwKS0+bW9kZV9pbmZvKTsKKworICAvKiBQb3B1bGF0ZSBt b2RlX2luZm8uICAqLworICBtb2RlX2luZm8tPndpZHRoID0gd2lkdGg7CisgIG1vZGVfaW5m by0+aGVpZ2h0ID0gaGVpZ2h0OworICBtb2RlX2luZm8tPmJsaXRfZm9ybWF0ID0gYmxpdF9m b3JtYXQ7CisKKyAgc3dpdGNoIChibGl0X2Zvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdS VUJfVklERU9fQkxJVF9GT1JNQVRfUjhHOEI4QTg6CisgICAgICAgIG1vZGVfaW5mby0+bW9k ZV90eXBlID0gR1JVQl9WSURFT19NT0RFX1RZUEVfUkdCIAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgR1JVQl9WSURFT19NT0RFX1RZUEVfQUxQSEE7CisgICAgICAgIG1v ZGVfaW5mby0+YnBwID0gMzI7CisgICAgICAgIG1vZGVfaW5mby0+Ynl0ZXNfcGVyX3BpeGVs ID0gNDsKKyAgICAgICAgbW9kZV9pbmZvLT5udW1iZXJfb2ZfY29sb3JzID0gMjU2OworICAg ICAgICBtb2RlX2luZm8tPnJlZF9tYXNrX3NpemUgPSA4OworICAgICAgICBtb2RlX2luZm8t PnJlZF9maWVsZF9wb3MgPSAwOworICAgICAgICBtb2RlX2luZm8tPmdyZWVuX21hc2tfc2l6 ZSA9IDg7CisgICAgICAgIG1vZGVfaW5mby0+Z3JlZW5fZmllbGRfcG9zID0gODsKKyAgICAg ICAgbW9kZV9pbmZvLT5ibHVlX21hc2tfc2l6ZSA9IDg7CisgICAgICAgIG1vZGVfaW5mby0+ Ymx1ZV9maWVsZF9wb3MgPSAxNjsKKyAgICAgICAgbW9kZV9pbmZvLT5yZXNlcnZlZF9tYXNr X3NpemUgPSA4OworICAgICAgICBtb2RlX2luZm8tPnJlc2VydmVkX2ZpZWxkX3BvcyA9IDI0 OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHUlVCX1ZJREVPX0JMSVRfRk9STUFU X1I4RzhCODoKKyAgICAgICAgbW9kZV9pbmZvLT5tb2RlX3R5cGUgPSBHUlVCX1ZJREVPX01P REVfVFlQRV9SR0I7CisgICAgICAgIG1vZGVfaW5mby0+YnBwID0gMjQ7CisgICAgICAgIG1v ZGVfaW5mby0+Ynl0ZXNfcGVyX3BpeGVsID0gMzsKKyAgICAgICAgbW9kZV9pbmZvLT5udW1i ZXJfb2ZfY29sb3JzID0gMjU2OworICAgICAgICBtb2RlX2luZm8tPnJlZF9tYXNrX3NpemUg PSA4OworICAgICAgICBtb2RlX2luZm8tPnJlZF9maWVsZF9wb3MgPSAwOworICAgICAgICBt b2RlX2luZm8tPmdyZWVuX21hc2tfc2l6ZSA9IDg7CisgICAgICAgIG1vZGVfaW5mby0+Z3Jl ZW5fZmllbGRfcG9zID0gODsKKyAgICAgICAgbW9kZV9pbmZvLT5ibHVlX21hc2tfc2l6ZSA9 IDg7CisgICAgICAgIG1vZGVfaW5mby0+Ymx1ZV9maWVsZF9wb3MgPSAxNjsKKyAgICAgICAg bW9kZV9pbmZvLT5yZXNlcnZlZF9tYXNrX3NpemUgPSAwOworICAgICAgICBtb2RlX2luZm8t PnJlc2VydmVkX2ZpZWxkX3BvcyA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfSU5ERVhDT0xPUjoKKyAgICAgICAgbW9kZV9pbmZv LT5tb2RlX3R5cGUgPSBHUlVCX1ZJREVPX01PREVfVFlQRV9JTkRFWF9DT0xPUjsKKyAgICAg ICAgbW9kZV9pbmZvLT5icHAgPSA4OworICAgICAgICBtb2RlX2luZm8tPmJ5dGVzX3Blcl9w aXhlbCA9IDE7CisgICAgICAgIG1vZGVfaW5mby0+bnVtYmVyX29mX2NvbG9ycyA9IDI1NjsK KyAgICAgICAgbW9kZV9pbmZvLT5yZWRfbWFza19zaXplID0gMDsKKyAgICAgICAgbW9kZV9p bmZvLT5yZWRfZmllbGRfcG9zID0gMDsKKyAgICAgICAgbW9kZV9pbmZvLT5ncmVlbl9tYXNr X3NpemUgPSAwOworICAgICAgICBtb2RlX2luZm8tPmdyZWVuX2ZpZWxkX3BvcyA9IDA7Cisg ICAgICAgIG1vZGVfaW5mby0+Ymx1ZV9tYXNrX3NpemUgPSAwOworICAgICAgICBtb2RlX2lu Zm8tPmJsdWVfZmllbGRfcG9zID0gMDsKKyAgICAgICAgbW9kZV9pbmZvLT5yZXNlcnZlZF9t YXNrX3NpemUgPSAwOworICAgICAgICBtb2RlX2luZm8tPnJlc2VydmVkX2ZpZWxkX3BvcyA9 IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBncnViX2Zy ZWUgKCpiaXRtYXApOworICAgICAgICAqYml0bWFwID0gMDsKKworICAgICAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlVuc3VwcG9ydGVkIGJpdG1hcCBmb3JtYXQiKTsKKyAgICB9CisKKyAgbW9k ZV9pbmZvLT5waXRjaCA9IHdpZHRoICogbW9kZV9pbmZvLT5ieXRlc19wZXJfcGl4ZWw7CisK KyAgLyogQ2FsY3VsYXRlIHNpemUgbmVlZGVkIGZvciB0aGUgZGF0YS4gICovCisgIHNpemUg PSAod2lkdGggKiBtb2RlX2luZm8tPmJ5dGVzX3Blcl9waXhlbCkgKiBoZWlnaHQ7CisKKyAg KCpiaXRtYXApLT5kYXRhID0gZ3J1Yl9tYWxsb2MgKHNpemUpOyAgCisgIGlmICghICgqYml0 bWFwKS0+ZGF0YSkKKyAgICB7CisgICAgICBncnViX2ZyZWUgKCpiaXRtYXApOworICAgICAg KmJpdG1hcCA9IDA7CisKKyAgICAgIHJldHVybiBncnViX2Vycm5vOworICAgIH0KKworICAv KiBDbGVhciBiaXRtYXAuICAqLworICBncnViX21lbXNldCAoKCpiaXRtYXApLT5kYXRhLCAw LCBzaXplKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyogRnJlZXMgYWxs IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgYml0bWFwLiAgKi8KK2dydWJfZXJyX3QKK2dydWJf dmlkZW9fYml0bWFwX2Rlc3Ryb3kgKHN0cnVjdCBncnViX3ZpZGVvX2JpdG1hcCAqYml0bWFw KQoreworICBpZiAoISBiaXRtYXApCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyAg Z3J1Yl9mcmVlIChiaXRtYXAtPmRhdGEpOworICBncnViX2ZyZWUgKGJpdG1hcCk7CisKKyAg cmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKKy8qIE1hdGNoIGV4dGVuc2lvbiB0byBmaWxl bmFtZS4gICovCitzdGF0aWMgaW50CittYXRjaF9leHRlbnNpb24gKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBjb25zdCBjaGFyICpleHQpCit7CisgIGludCBwb3M7CisgIGludCBleHRfbGVu OworCisgIHBvcyA9IGdydWJfc3RybGVuIChmaWxlbmFtZSk7CisgIGV4dF9sZW4gPSBncnVi X3N0cmxlbiAoZXh0KTsKKworICBpZiAoISBwb3MgfHwgISBleHRfbGVuIHx8IGV4dF9sZW4g PiBwb3MpCisgICAgcmV0dXJuIDA7CisKKyAgcG9zIC09IGV4dF9sZW47CisKKyAgcmV0dXJu IGdydWJfc3RyY21wIChmaWxlbmFtZSArIHBvcywgZXh0KSA9PSAwOworfQorCisvKiBMb2Fk cyBiaXRtYXAgdXNpbmcgcmVnaXN0ZXJlZCBiaXRtYXAgcmVhZGVycy4gICovCitncnViX2Vy cl90CitncnViX3ZpZGVvX2JpdG1hcF9sb2FkIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAg KipiaXRtYXAsIAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5h bWUpCit7CisgIGdydWJfdmlkZW9fYml0bWFwX3JlYWRlcl90IHJlYWRlciA9IGJpdG1hcF9y ZWFkZXJzX2xpc3Q7CisKKyAgaWYgKCFiaXRtYXApCisgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgIkludmFsaWQgYXJndW1lbnQuIik7CisKKyAgKmJp dG1hcCA9IDA7CisKKyAgd2hpbGUgKHJlYWRlcikKKyAgICB7CisgICAgICBpZiAobWF0Y2hf ZXh0ZW5zaW9uIChmaWxlbmFtZSwgcmVhZGVyLT5leHRlbnNpb24pKQorICAgICAgICByZXR1 cm4gcmVhZGVyLT5yZWFkZXIgKGJpdG1hcCwgZmlsZW5hbWUpOworCisgICAgICByZWFkZXIg PSByZWFkZXItPm5leHQ7CisgICAgfQorCisgIHJldHVybiBncnViX2Vycm9yKEdSVUJfRVJS X0JBRF9GSUxFX1RZUEUsICJ1bnN1cHBvcnRlZCBiaXRtYXAgZm9ybWF0Iik7Cit9CisKKy8q IFJldHVybiBiaXRtYXAgd2lkdGguICAqLwordW5zaWduZWQgaW50CitncnViX3ZpZGVvX2Jp dG1hcF9nZXRfd2lkdGggKHN0cnVjdCBncnViX3ZpZGVvX2JpdG1hcCAqYml0bWFwKQorewor ICBpZiAoIWJpdG1hcCkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gYml0bWFwLT5tb2Rl X2luZm8ud2lkdGg7Cit9CisKKy8qIFJldHVybiBiaXRtYXAgaGVpZ2h0LiAgKi8KK3Vuc2ln bmVkIGludAorZ3J1Yl92aWRlb19iaXRtYXBfZ2V0X2hlaWdodCAoc3RydWN0IGdydWJfdmlk ZW9fYml0bWFwICpiaXRtYXApCit7CisgIGlmICghYml0bWFwKQorICAgIHJldHVybiAwOwor CisgIHJldHVybiBiaXRtYXAtPm1vZGVfaW5mby5oZWlnaHQ7Cit9CisKKy8qIFJldHVybiBt b2RlIGluZm8gZm9yIGJpdG1hcC4gICovCit2b2lkIGdydWJfdmlkZW9fYml0bWFwX2dldF9t b2RlX2luZm8gKHN0cnVjdCBncnViX3ZpZGVvX2JpdG1hcCAqYml0bWFwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19tb2RlX2lu Zm8gKm1vZGVfaW5mbykKK3sKKyAgaWYgKCFiaXRtYXApCisgICAgcmV0dXJuOworCisgICpt b2RlX2luZm8gPSBiaXRtYXAtPm1vZGVfaW5mbzsKK30KKworLyogUmV0dXJuIHBvaW50ZXIg dG8gYml0bWFwJ3MgcmF3IGRhdGEuICAqLwordm9pZCAqZ3J1Yl92aWRlb19iaXRtYXBfZ2V0 X2RhdGEgKHN0cnVjdCBncnViX3ZpZGVvX2JpdG1hcCAqYml0bWFwKQoreworICBpZiAoIWJp dG1hcCkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gYml0bWFwLT5kYXRhOworfQorCisv KiBJbml0aWFsaXplIGJpdG1hcCBtb2R1bGUuICAqLworR1JVQl9NT0RfSU5JVCh2aWRlb19i aXRtYXApCit7Cit9CisKKy8qIEZpbmFsaXplIGJpdG1hcCBtb2R1bGUuICAqLworR1JVQl9N T0RfRklOSSh2aWRlb19iaXRtYXApCit7Cit9CkluZGV4OiB2aWRlby92aWRlby5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2dydWIvZ3J1YjIvdmlkZW8vdmlkZW8uYyx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXIxLjMgdmlkZW8uYwotLS0gdmlk ZW8vdmlkZW8uYwkyOSBKdWwgMjAwNiAxMToyMjo1MiAtMDAwMAkxLjMKKysrIHZpZGVvL3Zp ZGVvLmMJMjkgSnVsIDIwMDYgMTI6MTY6NTIgLTAwMDAKQEAgLTgyLDcgKzgyLDcgQEAKICAg LyogTG9vcCB0aHJ1IGFsbCBwb3NzaWJsZSB2aWRlbyBhZGFwdGVyIHRyeWluZyB0byBmaW5k IHJlcXVlc3RlZCBtb2RlLiAgKi8KICAgZm9yIChwID0gZ3J1Yl92aWRlb19hZGFwdGVyX2xp c3Q7IHA7IHAgPSBwLT5uZXh0KQogICAgIHsKLSAgICAgIC8qIFRyeSB0byBpbml0aWFsaXpl IGFkYXB0ZXIsIGlmIGNhbid0IHNraXAgdG8gbmV4dC4gICovCisgICAgICAvKiBUcnkgdG8g aW5pdGlhbGl6ZSBhZGFwdGVyLCBpZiBpdCBmYWlscywgc2tpcCB0byBuZXh0IGFkYXB0ZXIu ICAqLwogICAgICAgcC0+aW5pdCAoKTsKICAgICAgIGlmIChncnViX2Vycm5vICE9IEdSVUJf RVJSX05PTkUpCiAgICAgICAgIHsKQEAgLTE0Miw3ICsxNDIsNyBAQAogZW51bSBncnViX3Zp ZGVvX2JsaXRfZm9ybWF0CiBncnViX3ZpZGVvX2dldF9ibGl0X2Zvcm1hdCAoc3RydWN0IGdy dWJfdmlkZW9fbW9kZV9pbmZvICptb2RlX2luZm8pCiB7Ci0gIC8qIENoZWNrIGlmIHdlIGhh dmUgYW55IGtud29uIDMyIGJpdCBtb2Rlcy4gICovCisgIC8qIENoZWNrIGlmIHdlIGhhdmUg YW55IGtub3duIDMyIGJpdCBtb2Rlcy4gICovCiAgIGlmIChtb2RlX2luZm8tPmJwcCA9PSAz MikKICAgICB7CiAgICAgICBpZiAoKG1vZGVfaW5mby0+cmVkX21hc2tfc2l6ZSA9PSA4KQpA QCAtMjg2LDEzICsyODYsMTQgQEAKIC8qIEJsaXQgYml0bWFwIHRvIHNjcmVlbi4gICovCiBn cnViX2Vycl90CiBncnViX3ZpZGVvX2JsaXRfYml0bWFwIChzdHJ1Y3QgZ3J1Yl92aWRlb19i aXRtYXAgKmJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3J1Yl92aWRl b19ibGl0X29wZXJhdG9ycyBvcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgs IGludCB5LCBpbnQgb2Zmc2V0X3gsIGludCBvZmZzZXRfeSwKICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKIHsKICAg aWYgKCEgZ3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZSkKICAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0RFVklDRSwgIk5vIHZpZGVvIG1vZGUgYWN0aXZhdGVkIik7CiAK LSAgcmV0dXJuIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUtPmJsaXRfYml0bWFwIChiaXRt YXAsIHgsIHksCisgIHJldHVybiBncnViX3ZpZGVvX2FkYXB0ZXJfYWN0aXZlLT5ibGl0X2Jp dG1hcCAoYml0bWFwLCBvcGVyLCB4LCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsK IH0KQEAgLTMwMCwxNCArMzAxLDE1IEBACiAvKiBCbGl0IHJlbmRlciB0YXJnZXQgdG8gYWN0 aXZlIHJlbmRlciB0YXJnZXQuICAqLwogZ3J1Yl9lcnJfdAogZ3J1Yl92aWRlb19ibGl0X3Jl bmRlcl90YXJnZXQgKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKnRhcmdldCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGdydWJfdmlkZW9fYmxpdF9v cGVyYXRvcnMgb3BlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwg aW50IHksIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkK IHsKICAgaWYgKCEgZ3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZSkKICAgICByZXR1cm4gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0RFVklDRSwgIk5vIHZpZGVvIG1vZGUgYWN0aXZhdGVk Iik7CiAKLSAgcmV0dXJuIGdydWJfdmlkZW9fYWRhcHRlcl9hY3RpdmUtPmJsaXRfcmVuZGVy X3RhcmdldCAodGFyZ2V0LCB4LCB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3ksIAorICByZXR1 cm4gZ3J1Yl92aWRlb19hZGFwdGVyX2FjdGl2ZS0+YmxpdF9yZW5kZXJfdGFyZ2V0ICh0YXJn ZXQsIG9wZXIsIHgsIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdo dCk7CiB9CiAKSW5kZXg6IHZpZGVvL2kzODYvcGMvdmJlLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL3NvdXJjZXMvZ3J1Yi9ncnViMi92aWRlby9pMzg2L3BjL3ZiZS5jLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcjEuOCB2YmUuYwotLS0gdmlkZW8vaTM4Ni9w Yy92YmUuYwkyOSBKdWwgMjAwNiAxMToyMjo1MiAtMDAwMAkxLjgKKysrIHZpZGVvL2kzODYv cGMvdmJlLmMJMjkgSnVsIDIwMDYgMTI6MTY6NTIgLTAwMDAKQEAgLTIyLDEyICsyMiwxNCBA QAogI2luY2x1ZGUgPGdydWIvbWFjaGluZS92YmUuaD4KICNpbmNsdWRlIDxncnViL21hY2hp bmUvdmJlYmxpdC5oPgogI2luY2x1ZGUgPGdydWIvbWFjaGluZS92YmVmaWxsLmg+CisjaW5j bHVkZSA8Z3J1Yi9tYWNoaW5lL3ZiZXV0aWwuaD4KICNpbmNsdWRlIDxncnViL3R5cGVzLmg+ CiAjaW5jbHVkZSA8Z3J1Yi9kbC5oPgogI2luY2x1ZGUgPGdydWIvbWlzYy5oPgogI2luY2x1 ZGUgPGdydWIvZm9udC5oPgogI2luY2x1ZGUgPGdydWIvbW0uaD4KICNpbmNsdWRlIDxncnVi L3ZpZGVvLmg+CisjaW5jbHVkZSA8Z3J1Yi9iaXRtYXAuaD4KIAogLyogU3BlY2lmeSAic3Rh bmRhcmQiIFZHQSBwYWxldHRlLCBzb21lIHZpZGVvIGNhcmRzIG1heQogICAgbmVlZCB0aGlz IGFuZCB0aGlzIHdpbGwgYWxzbyBiZSB1c2VkIHdoZW4gdXNpbmcgUkdCIG1vZGVzLiAgKi8K QEAgLTc1LDEwICs3Nyw2IEBACiBzdGF0aWMgZ3J1Yl91aW50MzJfdCBtb2RlX2luX3VzZSA9 IDB4NTVhYTsKIHN0YXRpYyBncnViX3VpbnQxNl90ICptb2RlX2xpc3Q7CiAKLXN0YXRpYyBn cnViX3ZpZGVvX2NvbG9yX3QKLWdydWJfdmlkZW9fdmJlX21hcF9yZ2JhIChncnViX3VpbnQ4 X3QgcmVkLCBncnViX3VpbnQ4X3QgZ3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg Z3J1Yl91aW50OF90IGJsdWUsIGdydWJfdWludDhfdCBhbHBoYSk7Ci0KIHN0YXRpYyB2b2lk ICoKIHJlYWwycG0gKGdydWJfdmJlX2ZhcnB0cl90IHB0cikKIHsKQEAgLTE3Niw3ICsxNzQs NyBAQAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAidW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0IDB4JXgiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFjdGl2ZV9tb2RlX2luZm8ubWVtb3J5X21vZGVsKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX21vZGVfaW5mby5tZW1vcnlfbW9kZWwpOwog ICAgICAgICB9CiAgICAgfQogCkBAIC0yMjAsNyArMjE4LDcgQEAKICAgICBkZWZhdWx0Ogog ICAgICAgZ3J1Yl92YmVfYmlvc19zZXRfbW9kZSAob2xkX21vZGUsIDApOwogICAgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0UsIAotICAgICAgICAgICAgICAg ICAgICAgICAgICJjYW5ub3Qgc2V0IFZCRSBtb2RlICV4IiwgCisgICAgICAgICAgICAgICAg ICAgICAgICAgImNhbm5vdCBzZXQgVkJFIG1vZGUgJXgiLAogICAgICAgICAgICAgICAgICAg ICAgICAgIG1vZGUpOwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjM4LDcgKzIzNiw3IEBA CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRl KTsKIAotICAgICAgLyogSnVzdCBpZ25vcmUgdGhlIHN0YXR1cy4gKi8KKyAgICAgIC8qIEp1 c3QgaWdub3JlIHRoZSBzdGF0dXMuICAqLwogICAgIH0KIAogICAvKiBDb3B5IG1vZGUgaW5m byBmb3IgY2FsbGVyLiAgKi8KQEAgLTI5OSwzNSArMjk3LDM1IEBACiB9CiAKIGdydWJfdWlu dDhfdCAqCi1ncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChzdHJ1Y3QgZ3J1Yl92aWRl b19yZW5kZXJfdGFyZ2V0ICpzb3VyY2UsCitncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRy IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqc291cmNlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl91aW50MzJfdCB4LCBncnViX3VpbnQzMl90 IHkpCiB7CiAgIGdydWJfdWludDhfdCAqcHRyID0gMDsKIAotICBzd2l0Y2ggKHNvdXJjZS0+ bW9kZV9pbmZvLmJwcCkKKyAgc3dpdGNoIChzb3VyY2UtPm1vZGVfaW5mby0+YnBwKQogICAg IHsKICAgICBjYXNlIDMyOgogICAgICAgcHRyID0gKGdydWJfdWludDhfdCAqKXNvdXJjZS0+ ZGF0YQotICAgICAgICAgICAgKyB5ICogc291cmNlLT5tb2RlX2luZm8ucGl0Y2gKKyAgICAg ICAgICAgICsgeSAqIHNvdXJjZS0+bW9kZV9pbmZvLT5waXRjaAogICAgICAgICAgICAgKyB4 ICogNDsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAyNDoKICAgICAgIHB0ciA9IChncnVi X3VpbnQ4X3QgKilzb3VyY2UtPmRhdGEKLSAgICAgICAgICAgICsgeSAqIHNvdXJjZS0+bW9k ZV9pbmZvLnBpdGNoCisgICAgICAgICAgICArIHkgKiBzb3VyY2UtPm1vZGVfaW5mby0+cGl0 Y2gKICAgICAgICAgICAgICsgeCAqIDM7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgMTY6 CiAgICAgY2FzZSAxNToKICAgICAgIHB0ciA9IChncnViX3VpbnQ4X3QgKilzb3VyY2UtPmRh dGEKLSAgICAgICAgICAgICsgeSAqIHNvdXJjZS0+bW9kZV9pbmZvLnBpdGNoCisgICAgICAg ICAgICArIHkgKiBzb3VyY2UtPm1vZGVfaW5mby0+cGl0Y2gKICAgICAgICAgICAgICsgeCAq IDI7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgODoKICAgICAgIHB0ciA9IChncnViX3Vp bnQ4X3QgKilzb3VyY2UtPmRhdGEKLSAgICAgICAgICAgICsgeSAqIHNvdXJjZS0+bW9kZV9p bmZvLnBpdGNoCisgICAgICAgICAgICArIHkgKiBzb3VyY2UtPm1vZGVfaW5mby0+cGl0Y2gK ICAgICAgICAgICAgICsgeDsKICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzNSwxMTIgKzMz Myw2IEBACiAgIHJldHVybiBwdHI7CiB9CiAKLXN0YXRpYyB2b2lkCi1ncnViX3ZpZGVvX3Zi ZV9kcmF3X3BpeGVsIChncnViX3VpbnQzMl90IHgsIGdydWJfdWludDMyX3QgeSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBjb2xvcikKLXsKLSAg aWYgKHggPj0gcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLndpZHRoKQotICAgIHJldHVybjsK LQotICBpZiAoeSA+PSByZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8uaGVpZ2h0KQotICAgIHJl dHVybjsKLQotICBzd2l0Y2ggKHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5icHApCi0gICAg ewotICAgIGNhc2UgMzI6Ci0gICAgICB7Ci0gICAgICAgIGdydWJfdWludDMyX3QgKnB0cjsK LQotICAgICAgICBwdHIgPSAoZ3J1Yl91aW50MzJfdCAqKWdydWJfdmlkZW9fdmJlX2dldF92 aWRlb19wdHIgKHJlbmRlcl90YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSk7Ci0KLSAgICAgICAgKnB0 ciA9IGNvbG9yOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDI0OgotICAg ICAgewotICAgICAgICBncnViX3VpbnQ4X3QgKnB0cjsKLSAgICAgICAgZ3J1Yl91aW50OF90 ICpwdHIyID0gKGdydWJfdWludDhfdCAqKSAmY29sb3I7Ci0KLSAgICAgICAgcHRyID0gZ3J1 Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAocmVuZGVyX3RhcmdldCwgeCwgeSk7Ci0KLSAg ICAgICAgcHRyWzBdID0gcHRyMlswXTsKLSAgICAgICAgcHRyWzFdID0gcHRyMlsxXTsKLSAg ICAgICAgcHRyWzJdID0gcHRyMlsyXTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAg Y2FzZSAxNjoKLSAgICBjYXNlIDE1OgotICAgICAgewotICAgICAgICBncnViX3VpbnQxNl90 ICpwdHI7Ci0KLSAgICAgICAgcHRyID0gKGdydWJfdWludDE2X3QgKilncnViX3ZpZGVvX3Zi ZV9nZXRfdmlkZW9fcHRyIChyZW5kZXJfdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHkpOwotCi0gICAg ICAgICpwdHIgPSAoZ3J1Yl91aW50MTZfdCkgKGNvbG9yICYgMHhGRkZGKTsKLSAgICAgIH0K LSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSA4OgotICAgICAgewotICAgICAgICBncnViX3Vp bnQ4X3QgKnB0cjsKLQotICAgICAgICBwdHIgPSAoZ3J1Yl91aW50OF90ICopZ3J1Yl92aWRl b192YmVfZ2V0X3ZpZGVvX3B0ciAocmVuZGVyX3RhcmdldCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHkpOwotCi0g ICAgICAgICpwdHIgPSAoZ3J1Yl91aW50OF90KSAoY29sb3IgJiAweEZGKTsKLSAgICAgIH0K LSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0KLX0K LQotc3RhdGljIGdydWJfdmlkZW9fY29sb3JfdAotZ3J1Yl92aWRlb192YmVfZ2V0X3BpeGVs IChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpzb3VyY2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIGdydWJfdWludDMyX3QgeCwgZ3J1Yl91aW50MzJfdCB5KQotewot ICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3IgPSAwOwotCi0gIGlmICh4ID49IHNvdXJjZS0+ bW9kZV9pbmZvLndpZHRoKQotICAgIHJldHVybiAwOwotCi0gIGlmICh5ID49IHNvdXJjZS0+ bW9kZV9pbmZvLmhlaWdodCkKLSAgICByZXR1cm4gMDsKLQotICBzd2l0Y2ggKHNvdXJjZS0+ bW9kZV9pbmZvLmJwcCkKLSAgICB7Ci0gICAgY2FzZSAzMjoKLSAgICAgIGNvbG9yID0gKihn cnViX3VpbnQzMl90ICopZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAoc291cmNlLCB4 LCB5KTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAyNDoKLSAgICAgIHsKLSAgICAgICAg Z3J1Yl91aW50OF90ICpwdHI7Ci0gICAgICAgIHB0ciA9IGdydWJfdmlkZW9fdmJlX2dldF92 aWRlb19wdHIgKHNvdXJjZSwgeCwgeSk7Ci0gICAgICAgIGNvbG9yID0gcHRyWzBdIHwgKHB0 clsxXSA8PCA4KSB8IChwdHJbMl0gPDwgMTYpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0K LSAgICBjYXNlIDE2OgotICAgIGNhc2UgMTU6Ci0gICAgICBjb2xvciA9ICooZ3J1Yl91aW50 MTZfdCAqKWdydWJfdmlkZW9fdmJlX2dldF92aWRlb19wdHIgKHNvdXJjZSwgeCwgeSk7Ci0g ICAgICBicmVhazsKLQotICAgIGNhc2UgODoKLSAgICAgIGNvbG9yID0gKihncnViX3VpbnQ4 X3QgKilncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChzb3VyY2UsIHgsIHkpOwotICAg ICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gIHJl dHVybiBjb2xvcjsKLX0KLQogc3RhdGljIGdydWJfZXJyX3QKIGdydWJfdmlkZW9fdmJlX2lu aXQgKHZvaWQpCiB7CkBAIC00ODIsNyArMzc0LDcgQEAKICAgICB9CiAKICAgLyogUmVzZXQg ZnJhbWUgYnVmZmVyIGFuZCByZW5kZXIgdGFyZ2V0IHZhcmlhYmxlcy4gICovCi0gIGdydWJf bWVtc2V0ICgmZnJhbWVidWZmZXIsIDAsIHNpemVvZihmcmFtZWJ1ZmZlcikpOyAgCisgIGdy dWJfbWVtc2V0ICgmZnJhbWVidWZmZXIsIDAsIHNpemVvZihmcmFtZWJ1ZmZlcikpOwogICBy ZW5kZXJfdGFyZ2V0ID0gJmZyYW1lYnVmZmVyLnJlbmRlcl90YXJnZXQ7CiAKICAgcmV0dXJu IEdSVUJfRVJSX05PTkU7CkBAIC03MzgsNyArNjMwLDcgQEAKICAgcmVuZGVyX3RhcmdldC0+ dmlld3BvcnQueSA9IHk7CiAgIHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LndpZHRoID0gd2lk dGg7CiAgIHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LmhlaWdodCA9IGhlaWdodDsKLSAgCisK ICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CiB9CiAKQEAgLTgzNiw3ICs3MjgsNyBAQAogCiB9 CiAKLXN0YXRpYyBncnViX3ZpZGVvX2NvbG9yX3QKK2dydWJfdmlkZW9fY29sb3JfdAogZ3J1 Yl92aWRlb192YmVfbWFwX3JnYmEgKGdydWJfdWludDhfdCByZWQsIGdydWJfdWludDhfdCBn cmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX3VpbnQ4X3QgYmx1ZSwgZ3J1 Yl91aW50OF90IGFscGhhKQogewpAQCAtODY0LDEyICs3NTYsMTUgQEAKIH0KIAogdm9pZAot Z3J1Yl92aWRlb192YmVfdW5tYXBfY29sb3IgKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90 YXJnZXQgKiBzb3VyY2UsCitncnViX3ZpZGVvX3ZiZV91bm1hcF9jb2xvciAoc3RydWN0IGdy dWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKiBzb3VyY2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3J1Yl92aWRlb19jb2xvcl90IGNvbG9yLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdydWJfdWludDhfdCAqcmVkLCBncnViX3VpbnQ4X3QgKmdyZWVuLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfdWludDhfdCAqYmx1ZSwgZ3J1Yl91 aW50OF90ICphbHBoYSkKIHsKLSAgaWYgKChzb3VyY2UtPm1vZGVfaW5mby5tb2RlX3R5cGUg CisgIHN0cnVjdCBncnViX3ZpZGVvX21vZGVfaW5mbyAqbW9kZV9pbmZvOworICBtb2RlX2lu Zm8gPSBzb3VyY2UtPm1vZGVfaW5mbzsKKworICBpZiAoKG1vZGVfaW5mby0+bW9kZV90eXBl IAogICAgICAgICYgR1JVQl9WSURFT19NT0RFX1RZUEVfSU5ERVhfQ09MT1IpICE9IDApCiAg ICAgewogICAgICAgLyogSWYgd2UgaGF2ZSBvdXQgb2YgYm91bmRzIGNvbG9yLCByZXR1cm4g dHJhc25wYXJlbnQgYmxhY2suICAqLwpAQCAtODkzLDMzICs3ODgsMzMgQEAKICAgICAgIGdy dWJfdWludDMyX3QgdG1wOwogCiAgICAgICAvKiBHZXQgcmVkIGNvbXBvbmVudC4gICovCi0g ICAgICB0bXAgPSBjb2xvciA+PiBzb3VyY2UtPm1vZGVfaW5mby5yZWRfZmllbGRfcG9zOwot ICAgICAgdG1wICY9ICgxIDw8IHNvdXJjZS0+bW9kZV9pbmZvLnJlZF9tYXNrX3NpemUpIC0g MTsKLSAgICAgIHRtcCA8PD0gOCAtIHNvdXJjZS0+bW9kZV9pbmZvLnJlZF9tYXNrX3NpemU7 Ci0gICAgICB0bXAgfD0gKDEgPDwgKDggLSBzb3VyY2UtPm1vZGVfaW5mby5yZWRfbWFza19z aXplKSkgLSAxOworICAgICAgdG1wID0gY29sb3IgPj4gbW9kZV9pbmZvLT5yZWRfZmllbGRf cG9zOworICAgICAgdG1wICY9ICgxIDw8IG1vZGVfaW5mby0+cmVkX21hc2tfc2l6ZSkgLSAx OworICAgICAgdG1wIDw8PSA4IC0gbW9kZV9pbmZvLT5yZWRfbWFza19zaXplOworICAgICAg dG1wIHw9ICgxIDw8ICg4IC0gbW9kZV9pbmZvLT5yZWRfbWFza19zaXplKSkgLSAxOwogICAg ICAgKnJlZCA9IHRtcCAmIDB4RkY7CiAKICAgICAgIC8qIEdldCBncmVlbiBjb21wb25lbnQu ICAqLwotICAgICAgdG1wID0gY29sb3IgPj4gc291cmNlLT5tb2RlX2luZm8uZ3JlZW5fZmll bGRfcG9zOwotICAgICAgdG1wICY9ICgxIDw8IHNvdXJjZS0+bW9kZV9pbmZvLmdyZWVuX21h c2tfc2l6ZSkgLSAxOwotICAgICAgdG1wIDw8PSA4IC0gc291cmNlLT5tb2RlX2luZm8uZ3Jl ZW5fbWFza19zaXplOwotICAgICAgdG1wIHw9ICgxIDw8ICg4IC0gc291cmNlLT5tb2RlX2lu Zm8uZ3JlZW5fbWFza19zaXplKSkgLSAxOworICAgICAgdG1wID0gY29sb3IgPj4gbW9kZV9p bmZvLT5ncmVlbl9maWVsZF9wb3M7CisgICAgICB0bXAgJj0gKDEgPDwgbW9kZV9pbmZvLT5n cmVlbl9tYXNrX3NpemUpIC0gMTsKKyAgICAgIHRtcCA8PD0gOCAtIG1vZGVfaW5mby0+Z3Jl ZW5fbWFza19zaXplOworICAgICAgdG1wIHw9ICgxIDw8ICg4IC0gbW9kZV9pbmZvLT5ncmVl bl9tYXNrX3NpemUpKSAtIDE7CiAgICAgICAqZ3JlZW4gPSB0bXAgJiAweEZGOwogCiAgICAg ICAvKiBHZXQgYmx1ZSBjb21wb25lbnQuICAqLwotICAgICAgdG1wID0gY29sb3IgPj4gc291 cmNlLT5tb2RlX2luZm8uYmx1ZV9maWVsZF9wb3M7Ci0gICAgICB0bXAgJj0gKDEgPDwgc291 cmNlLT5tb2RlX2luZm8uYmx1ZV9tYXNrX3NpemUpIC0gMTsKLSAgICAgIHRtcCA8PD0gOCAt IHNvdXJjZS0+bW9kZV9pbmZvLmJsdWVfbWFza19zaXplOwotICAgICAgdG1wIHw9ICgxIDw8 ICg4IC0gc291cmNlLT5tb2RlX2luZm8uYmx1ZV9tYXNrX3NpemUpKSAtIDE7CisgICAgICB0 bXAgPSBjb2xvciA+PiBtb2RlX2luZm8tPmJsdWVfZmllbGRfcG9zOworICAgICAgdG1wICY9 ICgxIDw8IG1vZGVfaW5mby0+Ymx1ZV9tYXNrX3NpemUpIC0gMTsKKyAgICAgIHRtcCA8PD0g OCAtIG1vZGVfaW5mby0+Ymx1ZV9tYXNrX3NpemU7CisgICAgICB0bXAgfD0gKDEgPDwgKDgg LSBtb2RlX2luZm8tPmJsdWVfbWFza19zaXplKSkgLSAxOwogICAgICAgKmJsdWUgPSB0bXAg JiAweEZGOwogCiAgICAgICAvKiBHZXQgYWxwaGEgY29tcG9uZW50LiAgKi8KLSAgICAgIGlm IChzb3VyY2UtPm1vZGVfaW5mby5yZXNlcnZlZF9tYXNrX3NpemUgPiAwKQorICAgICAgaWYg KHNvdXJjZS0+bW9kZV9pbmZvLT5yZXNlcnZlZF9tYXNrX3NpemUgPiAwKQogICAgICAgICB7 Ci0gICAgICAgICAgdG1wID0gY29sb3IgPj4gc291cmNlLT5tb2RlX2luZm8ucmVzZXJ2ZWRf ZmllbGRfcG9zOwotICAgICAgICAgIHRtcCAmPSAoMSA8PCBzb3VyY2UtPm1vZGVfaW5mby5y ZXNlcnZlZF9tYXNrX3NpemUpIC0gMTsKLSAgICAgICAgICB0bXAgPDw9IDggLSBzb3VyY2Ut Pm1vZGVfaW5mby5yZXNlcnZlZF9tYXNrX3NpemU7Ci0gICAgICAgICAgdG1wIHw9ICgxIDw8 ICg4IC0gc291cmNlLT5tb2RlX2luZm8ucmVzZXJ2ZWRfbWFza19zaXplKSkgLSAxOworICAg ICAgICAgIHRtcCA9IGNvbG9yID4+IG1vZGVfaW5mby0+cmVzZXJ2ZWRfZmllbGRfcG9zOwor ICAgICAgICAgIHRtcCAmPSAoMSA8PCBtb2RlX2luZm8tPnJlc2VydmVkX21hc2tfc2l6ZSkg LSAxOworICAgICAgICAgIHRtcCA8PD0gOCAtIG1vZGVfaW5mby0+cmVzZXJ2ZWRfbWFza19z aXplOworICAgICAgICAgIHRtcCB8PSAoMSA8PCAoOCAtIG1vZGVfaW5mby0+cmVzZXJ2ZWRf bWFza19zaXplKSkgLSAxOwogICAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIC8qIElm IHRoZXJlIGlzIG5vIGFscGhhIGNvbXBvbmVudCwgYXNzdW1lIGl0IG9wYXF1ZS4gICovCkBA IC05MzMsNyArODI4LDcgQEAKIGdydWJfdmlkZW9fdmJlX2ZpbGxfcmVjdCAoZ3J1Yl92aWRl b19jb2xvcl90IGNvbG9yLCBpbnQgeCwgaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKIHsKLSAgdW5z aWduZWQgaW50IGksIGo7CisgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZv IHRhcmdldDsKIAogICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvLiAg Ki8KICAgaWYgKCh4ID49IChpbnQpcmVuZGVyX3RhcmdldC0+dmlld3BvcnQud2lkdGgpIHx8 ICh4ICsgKGludCl3aWR0aCA8IDApKQpAQCAtOTYyLDQwICs4NTcsNDQgQEAKICAgeCArPSBy ZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC54OwogICB5ICs9IHJlbmRlcl90YXJnZXQtPnZpZXdw b3J0Lnk7CiAKKyAgLyogVXNlIHZiZWJsaXRfaW5mbyB0byBlbmNhcHN1bGF0ZSByZW5kZXJp bmcuICAqLworICB0YXJnZXQubW9kZV9pbmZvID0gJnJlbmRlcl90YXJnZXQtPm1vZGVfaW5m bzsKKyAgdGFyZ2V0LmRhdGEgPSByZW5kZXJfdGFyZ2V0LT5kYXRhOworCiAgIC8qIFRyeSB0 byBmaWd1cmUgb3V0IG1vcmUgb3B0aW1pemVkIHZlcnNpb24uICAqLwotICBpZiAocmVuZGVy X3RhcmdldC0+bW9kZV9pbmZvLmJsaXRfZm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JN QVRfUjhHOEI4QTgpCisgIGlmICh0YXJnZXQubW9kZV9pbmZvLT5ibGl0X2Zvcm1hdCA9PSBH UlVCX1ZJREVPX0JMSVRfRk9STUFUX1I4RzhCOEE4KQogICAgIHsKLSAgICAgIGdydWJfdmlk ZW9faTM4Nl92YmVmaWxsX1I4RzhCOEE4IChyZW5kZXJfdGFyZ2V0LCBjb2xvciwgeCwgeSwg CisgICAgICBncnViX3ZpZGVvX2kzODZfdmJlZmlsbF9SOEc4QjhBOCAoJnRhcmdldCwgY29s b3IsIHgsIHksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp ZHRoLCBoZWlnaHQpOwogICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CiAgICAgfQogCi0g IGlmIChyZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8uYmxpdF9mb3JtYXQgPT0gR1JVQl9WSURF T19CTElUX0ZPUk1BVF9SOEc4QjgpCisgIGlmICh0YXJnZXQubW9kZV9pbmZvLT5ibGl0X2Zv cm1hdCA9PSBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX1I4RzhCOCkKICAgICB7Ci0gICAgICBn cnViX3ZpZGVvX2kzODZfdmJlZmlsbF9SOEc4QjggKHJlbmRlcl90YXJnZXQsIGNvbG9yLCB4 LCB5LAorICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWZpbGxfUjhHOEI4ICgmdGFyZ2V0LCBj b2xvciwgeCwgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk dGgsIGhlaWdodCk7CiAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKICAgICB9CiAKLSAg aWYgKHJlbmRlcl90YXJnZXQtPm1vZGVfaW5mby5ibGl0X2Zvcm1hdCA9PSBHUlVCX1ZJREVP X0JMSVRfRk9STUFUX0lOREVYQ09MT1IpCisgIGlmICh0YXJnZXQubW9kZV9pbmZvLT5ibGl0 X2Zvcm1hdCA9PSBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX0lOREVYQ09MT1IpCiAgICAgewot ICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWZpbGxfaW5kZXggKHJlbmRlcl90YXJnZXQsIGNv bG9yLCB4LCB5LAorICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWZpbGxfaW5kZXggKCZ0YXJn ZXQsIGNvbG9yLCB4LCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdpZHRoLCBoZWlnaHQpOwogICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CiAgICAgfQog Ci0gIC8qIFVzZSBiYWNrdXAgbWV0aG9kIHRvIGZpbGwgYXJlYS4gICovCi0gIGZvciAoaiA9 IDA7IGogPCBoZWlnaHQ7IGorKykKLSAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykK LSAgICAgIGdydWJfdmlkZW9fdmJlX2RyYXdfcGl4ZWwgKHgraSwgeStqLCBjb2xvcik7Cisg IC8qIE5vIG9wdGltaXplZCB2ZXJzaW9uIGZvdW5kLCB1c2UgZGVmYXVsdCAoc2xvdykgZmls bGVyLiAgKi8KKyAgZ3J1Yl92aWRlb19pMzg2X3ZiZWZpbGwgKCZ0YXJnZXQsIGNvbG9yLCB4 LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAogICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKIH0KIAor Ly8gVE9ETzogUmVtb3ZlIHRoaXMgbWV0aG9kIGFuZCByZXBsYWNlIHdpdGggYml0bWFwIGJh c2VkIGdseXBocwogc3RhdGljIGdydWJfZXJyX3QKIGdydWJfdmlkZW9fdmJlX2JsaXRfZ2x5 cGggKHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggKiBnbHlwaCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBjb2xvciwgaW50IHgsIGludCB5KQogewor ICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyB0YXJnZXQ7CiAgIHVuc2ln bmVkIGludCB3aWR0aDsKICAgdW5zaWduZWQgaW50IGNoYXJ3aWR0aDsKICAgdW5zaWduZWQg aW50IGhlaWdodDsKQEAgLTEwNDUsMjkgKzk0NCwyMDQgQEAKICAgeCArPSByZW5kZXJfdGFy Z2V0LT52aWV3cG9ydC54OwogICB5ICs9IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0Lnk7CiAK KyAgLyogVXNlIHZiZWJsaXRfaW5mbyB0byBlbmNhcHN1bGF0ZSByZW5kZXJpbmcuICAqLwor ICB0YXJnZXQubW9kZV9pbmZvID0gJnJlbmRlcl90YXJnZXQtPm1vZGVfaW5mbzsKKyAgdGFy Z2V0LmRhdGEgPSByZW5kZXJfdGFyZ2V0LT5kYXRhOworCiAgIC8qIERyYXcgZ2x5cGguICAq LwogICBmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspCiAgICAgZm9yIChpID0gMDsgaSA8 IHdpZHRoOyBpKyspCiAgICAgICBpZiAoKGdseXBoLT5iaXRtYXBbKChpICsgeF9vZmZzZXQp IC8gOCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoaiArIHlfb2Zmc2V0KSAqIChj aGFyd2lkdGggLyA4KV0gCiAgICAgICAgICAgICYgKDEgPDwgKChjaGFyd2lkdGggLSAoaSAr IHhfb2Zmc2V0KSAtIDEpICUgOCkpKSkKLSAgICAgICAgZ3J1Yl92aWRlb192YmVfZHJhd19w aXhlbCAoeCtpLCB5K2osIGNvbG9yKTsKKyAgICAgICAgc2V0X3BpeGVsICgmdGFyZ2V0LCB4 K2ksIHkraiwgY29sb3IpOwogCiAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogfQogCisvKiBO T1RFOiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBnaXZlbiBjb29yZGlhbnRlcyBhcmUg d2l0aGluIGJvdW5kcyBvZiAKKyAgIGhhbmRsZWQgZGF0YS4gICovCitzdGF0aWMgdm9pZAor Y29tbW9uX2JsaXR0ZXIgKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICp0 YXJnZXQsCisgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0 X2luZm8gKnNvdXJjZSwKKyAgICAgICAgICAgICAgICBlbnVtIGdydWJfdmlkZW9fYmxpdF9v cGVyYXRvcnMgb3BlciwgaW50IHgsIGludCB5LAorICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICBpbnQg b2Zmc2V0X3gsIGludCBvZmZzZXRfeSkKK3sKKyAgaWYgKG9wZXIgPT0gR1JVQl9WSURFT19C TElUX1JFUExBQ0UpCisgICAgeworICAgICAgLyogVHJ5IHRvIGZpZ3VyZSBvdXQgbW9yZSBv cHRpbWl6ZWQgdmVyc2lvbiBmb3IgcmVwbGFjZSBvcGVyYXRvci4gICovCisgICAgICBpZiAo c291cmNlLT5tb2RlX2luZm8tPmJsaXRfZm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JN QVRfUjhHOEI4QTgpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodGFyZ2V0LT5tb2RlX2lu Zm8tPmJsaXRfZm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfUjhHOEI4QTgpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4 RzhCOFg4X1I4RzhCOFg4ICh0YXJnZXQsIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWln aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3kpOworICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAodGFyZ2V0LT5tb2RlX2luZm8tPmJsaXRf Zm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfUjhHOEI4KQorICAgICAgICAgICAg eworICAgICAgICAgICAgICBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4QjhfUjhHOEI4 WDggKHRhcmdldCwgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3gs IG9mZnNldF95KTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgaWYgKHRhcmdldC0+bW9kZV9pbmZvLT5ibGl0X2Zvcm1hdCA9PSBHUlVCX1ZJ REVPX0JMSVRfRk9STUFUX0lOREVYQ09MT1IpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZGV4X1I4RzhCOFg4ICh0YXJnZXQsIHNv dXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3kpOworICAg ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg aWYgKHNvdXJjZS0+bW9kZV9pbmZvLT5ibGl0X2Zvcm1hdCA9PSBHUlVCX1ZJREVPX0JMSVRf Rk9STUFUX1I4RzhCOCkKKyAgICAgICAgeworICAgICAgICAgIGlmICh0YXJnZXQtPm1vZGVf aW5mby0+YmxpdF9mb3JtYXQgPT0gR1JVQl9WSURFT19CTElUX0ZPUk1BVF9SOEc4QjhBOCkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRf UjhHOEI4QThfUjhHOEI4ICh0YXJnZXQsIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9mZnNldF94LCBvZmZzZXRfeSk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgIGlmICh0YXJnZXQtPm1vZGVfaW5mby0+YmxpdF9mb3Jt YXQgPT0gR1JVQl9WSURFT19CTElUX0ZPUk1BVF9SOEc4QjgpCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIGdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOF9SOEc4QjggKHRh cmdldCwgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3kp OworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBp ZiAodGFyZ2V0LT5tb2RlX2luZm8tPmJsaXRfZm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9G T1JNQVRfSU5ERVhDT0xPUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ3J1Yl92 aWRlb19pMzg2X3ZiZWJsaXRfaW5kZXhfUjhHOEI4ICh0YXJnZXQsIHNvdXJjZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCB3 aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSk7CisgICAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAoc291cmNlLT5tb2Rl X2luZm8tPmJsaXRfZm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfSU5ERVhDT0xP UikKKyAgICAgICAgeworICAgICAgICAgIGlmICh0YXJnZXQtPm1vZGVfaW5mby0+YmxpdF9m b3JtYXQgPT0gR1JVQl9WSURFT19CTElUX0ZPUk1BVF9JTkRFWENPTE9SKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmRleF9pbmRl eCAodGFyZ2V0LCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3gsIG9mZnNldF95 KTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisK KyAgICAgIC8qIE5vIG9wdGltaXplZCByZXBsYWNlIG9wZXJhdG9yIGZvdW5kLCB1c2UgZGVm YXVsdCAoc2xvdykgYmxpdHRlci4gICovCisgICAgICBncnViX3ZpZGVvX2kzODZfdmJlYmxp dF9yZXBsYWNlICh0YXJnZXQsIHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSk7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVHJ5IHRvIGZpZ3VyZSBvdXQgbW9y ZSBvcHRpbWl6ZWQgYmxlbmQgb3BlcmF0b3IuICAqLworICAgICAgaWYgKHNvdXJjZS0+bW9k ZV9pbmZvLT5ibGl0X2Zvcm1hdCA9PSBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX1I4RzhCOEE4 KQorICAgICAgeworICAgICAgICBpZiAodGFyZ2V0LT5tb2RlX2luZm8tPmJsaXRfZm9ybWF0 ID09IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfUjhHOEI4QTgpCisgICAgICAgIHsKKyAgICAg ICAgICBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4QjhBOF9SOEc4QjhBOCAodGFyZ2V0 LCBzb3VyY2UsCisgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAg ICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAg ICB9CisKKyAgICAgICAgaWYgKHRhcmdldC0+bW9kZV9pbmZvLT5ibGl0X2Zvcm1hdCA9PSBH UlVCX1ZJREVPX0JMSVRfRk9STUFUX1I4RzhCOCkKKyAgICAgICAgeworICAgICAgICAgIGdy dWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOF9SOEc4QjhBOCAodGFyZ2V0LCBzb3VyY2Us CisgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgIG9m ZnNldF94LCBvZmZzZXRfeSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg ICAgICAgaWYgKHRhcmdldC0+bW9kZV9pbmZvLT5ibGl0X2Zvcm1hdCA9PSBHUlVCX1ZJREVP X0JMSVRfRk9STUFUX0lOREVYQ09MT1IpCisgICAgICAgIHsKKyAgICAgICAgICBncnViX3Zp ZGVvX2kzODZfdmJlYmxpdF9pbmRleF9SOEc4QjhBOCAodGFyZ2V0LCBzb3VyY2UsCisgICAg ICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgIG9mZnNldF94 LCBvZmZzZXRfeSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisK KyAgICAgIGlmIChzb3VyY2UtPm1vZGVfaW5mby0+YmxpdF9mb3JtYXQgPT0gR1JVQl9WSURF T19CTElUX0ZPUk1BVF9SOEc4QjgpCisgICAgICB7CisgICAgICAgIGlmICh0YXJnZXQtPm1v ZGVfaW5mby0+YmxpdF9mb3JtYXQgPT0gR1JVQl9WSURFT19CTElUX0ZPUk1BVF9SOEc4QjhB OCkKKyAgICAgICAgeworICAgICAgICAgIGdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhC OEE4X1I4RzhCOCAodGFyZ2V0LCBzb3VyY2UsCisgICAgICAgICAgICAgIHgsIHksIHdpZHRo LCBoZWlnaHQsCisgICAgICAgICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSk7CisgICAgICAg ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRhcmdldC0+bW9kZV9pbmZv LT5ibGl0X2Zvcm1hdCA9PSBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX1I4RzhCOCkKKyAgICAg ICAgeworICAgICAgICAgIGdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOF9SOEc4Qjgg KHRhcmdldCwgc291cmNlLAorICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LAor ICAgICAgICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3kpOworICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXJnZXQtPm1vZGVfaW5mby0+YmxpdF9mb3Jt YXQgPT0gR1JVQl9WSURFT19CTElUX0ZPUk1BVF9JTkRFWENPTE9SKQorICAgICAgICB7Cisg ICAgICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5kZXhfUjhHOEI4ICh0YXJnZXQs IHNvdXJjZSwKKyAgICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAg ICAgICAgb2Zmc2V0X3gsIG9mZnNldF95KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAg IH0KKyAgICAgIH0KKworICAgICAgaWYgKHNvdXJjZS0+bW9kZV9pbmZvLT5ibGl0X2Zvcm1h dCA9PSBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX0lOREVYQ09MT1IpCisgICAgICB7CisgICAg ICAgIGlmICh0YXJnZXQtPm1vZGVfaW5mby0+YmxpdF9mb3JtYXQgPT0gR1JVQl9WSURFT19C TElUX0ZPUk1BVF9JTkRFWENPTE9SKQorICAgICAgICB7CisgICAgICAgICAgZ3J1Yl92aWRl b19pMzg2X3ZiZWJsaXRfaW5kZXhfaW5kZXggKHRhcmdldCwgc291cmNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVp Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv ZmZzZXRfeCwgb2Zmc2V0X3kpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg ICAgfQorCisgICAgICAvKiBObyBvcHRpbWl6ZWQgYmxlbmQgb3BlcmF0aW9uIGZvdW5kLCB1 c2UgZGVmYXVsdCAoc2xvdykgYmxpdHRlci4gICovCisgICAgICBncnViX3ZpZGVvX2kzODZf dmJlYmxpdF9ibGVuZCAodGFyZ2V0LCBzb3VyY2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3gsIG9mZnNldF95 KTsKKyAgICB9Cit9CisKIHN0YXRpYyBncnViX2Vycl90Ci1ncnViX3ZpZGVvX3ZiZV9ibGl0 X2JpdG1hcCAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFwICogYml0bWFwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IG9mZnNldF94LCBpbnQgb2Zm c2V0X3ksCitncnViX3ZpZGVvX3ZiZV9ibGl0X2JpdG1hcCAoc3RydWN0IGdydWJfdmlkZW9f Yml0bWFwICpiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBncnVi X3ZpZGVvX2JsaXRfb3BlcmF0b3JzIG9wZXIsIGludCB4LCBpbnQgeSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0X3gsIGludCBvZmZzZXRfeSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBo ZWlnaHQpCiB7CisgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvIHNvdXJj ZTsKKyAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gdGFyZ2V0OworCiAg IC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZG8uICAqLworICBpZiAoKHdp ZHRoID09IDApIHx8IChoZWlnaHQgPT0gMCkpCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7 CiAgIGlmICgoeCA+PSAoaW50KXJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LndpZHRoKSB8fCAo eCArIChpbnQpd2lkdGggPCAwKSkKICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKICAgaWYg KCh5ID49IChpbnQpcmVuZGVyX3RhcmdldC0+dmlld3BvcnQuaGVpZ2h0KSB8fCAoeSArIChp bnQpaGVpZ2h0IDwgMCkpCiAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisgIGlmICgoeCAr IChpbnQpYml0bWFwLT5tb2RlX2luZm8ud2lkdGgpIDwgMCkKKyAgICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKKyAgaWYgKCh5ICsgKGludCliaXRtYXAtPm1vZGVfaW5mby5oZWlnaHQpIDwg MCkKKyAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKyAgaWYgKChvZmZzZXRfeCA+PSAoaW50 KWJpdG1hcC0+bW9kZV9pbmZvLndpZHRoKSAKKyAgICAgIHx8IChvZmZzZXRfeCArIChpbnQp d2lkdGggPCAwKSkKKyAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKyAgaWYgKChvZmZzZXRf eSA+PSAoaW50KWJpdG1hcC0+bW9kZV9pbmZvLmhlaWdodCkgCisgICAgICB8fCAob2Zmc2V0 X3kgKyAoaW50KWhlaWdodCA8IDApKQorICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogCi0g IC8qIERvIG5vdCBhbGxvdyBkcmF3aW5nIG91dCBvZiB2aWV3cG9ydC4gICovCisgIC8qIElm IHdlIGhhdmUgbmVnYXRpdmUgY29vcmRpbmF0ZXMsIG9wdGltaXplIGRyYXdpbmcgdG8gbWlu aW11bS4gICovCiAgIGlmIChvZmZzZXRfeCA8IDApCiAgICAgewogICAgICAgd2lkdGggKz0g b2Zmc2V0X3g7CkBAIC0xMDg1LDM5ICsxMTU5LDYwIEBACiAgIGlmICh4IDwgMCkKICAgICB7 CiAgICAgICB3aWR0aCArPSB4OwotICAgICAgb2Zmc2V0X3ggKz0gKHVuc2lnbmVkIGludCkt eDsKKyAgICAgIG9mZnNldF94IC09IHg7CiAgICAgICB4ID0gMDsKICAgICB9CisKICAgaWYg KHkgPCAwKQogICAgIHsKICAgICAgIGhlaWdodCArPSB5OwotICAgICAgb2Zmc2V0X3kgKz0g KHVuc2lnbmVkIGludCkteTsKKyAgICAgIG9mZnNldF95IC09IHk7CiAgICAgICB5ID0gMDsK ICAgICB9CiAKKyAgLyogRG8gbm90IGFsbG93IGRyYXdpbmcgb3V0IG9mIHZpZXdwb3J0LiAg Ki8KICAgaWYgKCh4ICsgd2lkdGgpID4gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQud2lkdGgp CiAgICAgd2lkdGggPSByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC53aWR0aCAtIHg7CiAgIGlm ICgoeSArIGhlaWdodCkgPiByZW5kZXJfdGFyZ2V0LT52aWV3cG9ydC5oZWlnaHQpCiAgICAg aGVpZ2h0ID0gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQuaGVpZ2h0IC0geTsKIAotICAvKiBU T0RPOiBMaW1pdCBkcmF3aW5nIHRvIGJpdG1hcCBkaW1lbnNpb25zLiAgKi8KKyAgaWYgKChv ZmZzZXRfeCArIHdpZHRoKSA+IGJpdG1hcC0+bW9kZV9pbmZvLndpZHRoKQorICAgIHdpZHRo ID0gYml0bWFwLT5tb2RlX2luZm8ud2lkdGggLSBvZmZzZXRfeDsKKyAgaWYgKChvZmZzZXRf eSArIGhlaWdodCkgPiBiaXRtYXAtPm1vZGVfaW5mby5oZWlnaHQpCisgICAgaGVpZ2h0ID0g Yml0bWFwLT5tb2RlX2luZm8uaGVpZ2h0IC0gb2Zmc2V0X3k7CisKKyAgLyogTGltaXQgZHJh d2luZyB0byBzb3VyY2UgcmVuZGVyIHRhcmdldCBkaW1lbnNpb25zLiAgKi8KKyAgaWYgKHdp ZHRoID4gYml0bWFwLT5tb2RlX2luZm8ud2lkdGgpCisgICAgd2lkdGggPSBiaXRtYXAtPm1v ZGVfaW5mby53aWR0aDsKKworICBpZiAoaGVpZ2h0ID4gYml0bWFwLT5tb2RlX2luZm8uaGVp Z2h0KQorICAgIGhlaWdodCA9IGJpdG1hcC0+bW9kZV9pbmZvLmhlaWdodDsKIAogICAvKiBB ZGQgdmlld3BvcnQgb2Zmc2V0LiAgKi8KICAgeCArPSByZW5kZXJfdGFyZ2V0LT52aWV3cG9y dC54OwogICB5ICs9IHJlbmRlcl90YXJnZXQtPnZpZXdwb3J0Lnk7CiAKLSAgLyogVE9ETzog UmVuZGVyIGJpdG1hcC4gICovCisgIC8qIFVzZSB2YmVibGl0X2luZm8gdG8gZW5jYXBzdWxh dGUgcmVuZGVyaW5nLiAgKi8KKyAgc291cmNlLm1vZGVfaW5mbyA9ICZiaXRtYXAtPm1vZGVf aW5mbzsKKyAgc291cmNlLmRhdGEgPSBiaXRtYXAtPmRhdGE7CisgIHRhcmdldC5tb2RlX2lu Zm8gPSAmcmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvOworICB0YXJnZXQuZGF0YSA9IHJlbmRl cl90YXJnZXQtPmRhdGE7CisKKyAgLyogRG8gYWN0dWFsIGJsaXR0aW5nLiAgKi8KKyAgY29t bW9uX2JsaXR0ZXIgKCZ0YXJnZXQsICZzb3VyY2UsIG9wZXIsIHgsIHksIHdpZHRoLCBoZWln aHQsCisgICAgICAgICAgICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3kpOwogCiAgIHJldHVy biBHUlVCX0VSUl9OT05FOwogfQogCiBzdGF0aWMgZ3J1Yl9lcnJfdAogZ3J1Yl92aWRlb192 YmVfYmxpdF9yZW5kZXJfdGFyZ2V0IChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0 ICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3J1 Yl92aWRlb19ibGl0X29wZXJhdG9ycyBvcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgs IHVuc2lnbmVkIGludCBoZWlnaHQpCiB7Ci0gIHVuc2lnbmVkIGludCBpOwotICB1bnNpZ25l ZCBpbnQgajsKKyAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gc291cmNl X2luZm87CisgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvIHRhcmdldF9p bmZvOwogCiAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZG8uICAqLwog ICBpZiAoKHdpZHRoID09IDApIHx8IChoZWlnaHQgPT0gMCkpCkBAIC0xMTI1LDE3ICsxMjIw LDE3IEBACiAgIGlmICgoeCA+PSAoaW50KXJlbmRlcl90YXJnZXQtPnZpZXdwb3J0LndpZHRo KSB8fCAoeCArIChpbnQpd2lkdGggPCAwKSkKICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsK ICAgaWYgKCh5ID49IChpbnQpcmVuZGVyX3RhcmdldC0+dmlld3BvcnQuaGVpZ2h0KSB8fCAo eSArIChpbnQpaGVpZ2h0IDwgMCkpCi0gICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7ICAgIAor ICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogICBpZiAoKHggKyAoaW50KXNvdXJjZS0+bW9k ZV9pbmZvLndpZHRoKSA8IDApCiAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CiAgIGlmICgo eSArIChpbnQpc291cmNlLT5tb2RlX2luZm8uaGVpZ2h0KSA8IDApCi0gICAgcmV0dXJuIEdS VUJfRVJSX05PTkU7ICAgIAorICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogICBpZiAoKG9m ZnNldF94ID49IChpbnQpc291cmNlLT5tb2RlX2luZm8ud2lkdGgpIAogICAgICAgfHwgKG9m ZnNldF94ICsgKGludCl3aWR0aCA8IDApKQogICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwog ICBpZiAoKG9mZnNldF95ID49IChpbnQpc291cmNlLT5tb2RlX2luZm8uaGVpZ2h0KSAKICAg ICAgIHx8IChvZmZzZXRfeSArIChpbnQpaGVpZ2h0IDwgMCkpCi0gICAgcmV0dXJuIEdSVUJf RVJSX05PTkU7ICAgIAorICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogCiAgIC8qIElmIHdl IGhhdmUgbmVnYXRpdmUgY29vcmRpbmF0ZXMsIG9wdGltaXplIGRyYXdpbmcgdG8gbWluaW11 bS4gICovCiAgIGlmIChvZmZzZXRfeCA8IDApCkBAIC0xMTU1LDE0ICsxMjUwLDE0IEBACiAg IGlmICh4IDwgMCkKICAgICB7CiAgICAgICB3aWR0aCArPSB4OwotICAgICAgb2Zmc2V0X3gg Kz0gKHVuc2lnbmVkIGludCkteDsKKyAgICAgIG9mZnNldF94IC09IHg7CiAgICAgICB4ID0g MDsKICAgICB9CiAKICAgaWYgKHkgPCAwKQogICAgIHsKICAgICAgIGhlaWdodCArPSB5Owot ICAgICAgb2Zmc2V0X3kgKz0gKHVuc2lnbmVkIGludCkteTsKKyAgICAgIG9mZnNldF95IC09 IHk7CiAgICAgICB5ID0gMDsKICAgICB9CiAKQEAgLTExODgsMTIyICsxMjgzLDE1IEBACiAg IHggKz0gcmVuZGVyX3RhcmdldC0+dmlld3BvcnQueDsKICAgeSArPSByZW5kZXJfdGFyZ2V0 LT52aWV3cG9ydC55OwogCi0gIC8qIFRyeSB0byBmaWd1cmUgb3V0IG1vcmUgb3B0aW1pemVk IHZlcnNpb24uICAqLwotICBpZiAoc291cmNlLT5tb2RlX2luZm8uYmxpdF9mb3JtYXQgPT0g R1JVQl9WSURFT19CTElUX0ZPUk1BVF9SOEc4QjhBOCkKLSAgICB7Ci0gICAgICBpZiAocmVu ZGVyX3RhcmdldC0+bW9kZV9pbmZvLmJsaXRfZm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9G T1JNQVRfUjhHOEI4QTgpCi0gICAgICAgIHsKLSAgICAgICAgICBncnViX3ZpZGVvX2kzODZf dmJlYmxpdF9SOEc4QjhBOF9SOEc4QjhBOCAocmVuZGVyX3RhcmdldCwgc291cmNlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5 LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3kpOwotICAgICAgICAgIHJldHVy biBHUlVCX0VSUl9OT05FOwotICAgICAgICB9Ci0KLSAgICAgIGlmIChyZW5kZXJfdGFyZ2V0 LT5tb2RlX2luZm8uYmxpdF9mb3JtYXQgPT0gR1JVQl9WSURFT19CTElUX0ZPUk1BVF9SOEc4 QjgpCi0gICAgICAgIHsKLSAgICAgICAgICBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4 QjhfUjhHOEI4QTggKHJlbmRlcl90YXJnZXQsIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv ZmZzZXRfeCwgb2Zmc2V0X3kpOwotICAgICAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwot ICAgICAgICB9Ci0KLSAgICAgIGlmIChyZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8uYmxpdF9m b3JtYXQgPT0gR1JVQl9WSURFT19CTElUX0ZPUk1BVF9JTkRFWENPTE9SKQotICAgICAgICB7 Ci0gICAgICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5kZXhfUjhHOEI4QTggKHJl bmRlcl90YXJnZXQsIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3gsIG9mZnNldF95 KTsKLSAgICAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKLSAgICAgICAgfQotICAgIH0K LQotICBpZiAoc291cmNlLT5tb2RlX2luZm8uYmxpdF9mb3JtYXQgPT0gR1JVQl9WSURFT19C TElUX0ZPUk1BVF9SOEc4QjgpCi0gICAgewotICAgICAgaWYgKHJlbmRlcl90YXJnZXQtPm1v ZGVfaW5mby5ibGl0X2Zvcm1hdCA9PSBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX1I4RzhCOEE4 KQotICAgICAgICB7Ci0gICAgICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4 QThfUjhHOEI4IChyZW5kZXJfdGFyZ2V0LCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zm c2V0X3gsIG9mZnNldF95KTsKLSAgICAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKLSAg ICAgICAgfQotCi0gICAgICBpZiAocmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmJsaXRfZm9y bWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfUjhHOEI4KQotICAgICAgICB7Ci0gICAg ICAgICAgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4X1I4RzhCOCAocmVuZGVyX3Rh cmdldCwgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3gsIG9mZnNldF95KTsKLSAgICAg ICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKLSAgICAgICAgfQotCi0gICAgICBpZiAocmVu ZGVyX3RhcmdldC0+bW9kZV9pbmZvLmJsaXRfZm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9G T1JNQVRfSU5ERVhDT0xPUikKLSAgICAgICAgewotICAgICAgICAgIGdydWJfdmlkZW9faTM4 Nl92YmVibGl0X2luZGV4X1I4RzhCOCAocmVuZGVyX3RhcmdldCwgc291cmNlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwgd2lkdGgs IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9mZnNldF94LCBvZmZzZXRfeSk7Ci0gICAgICAgICAgcmV0dXJuIEdSVUJfRVJSX05P TkU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgaWYgKHNvdXJjZS0+bW9kZV9pbmZvLmJsaXRf Zm9ybWF0ID09IEdSVUJfVklERU9fQkxJVF9GT1JNQVRfSU5ERVhDT0xPUikKLSAgICB7Ci0g ICAgICBpZiAocmVuZGVyX3RhcmdldC0+bW9kZV9pbmZvLmJsaXRfZm9ybWF0ID09IEdSVUJf VklERU9fQkxJVF9GT1JNQVRfSU5ERVhDT0xPUikKLSAgICAgICAgewotICAgICAgICAgIGdy dWJfdmlkZW9faTM4Nl92YmVibGl0X2luZGV4X2luZGV4IChyZW5kZXJfdGFyZ2V0LCBzb3Vy Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgs IHksIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9mZnNldF94LCBvZmZzZXRfeSk7Ci0gICAgICAgICAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgLyogVXNlIGJhY2t1cCBtZXRo b2QgdG8gcmVuZGVyLiAgKi8KLSAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisrKQotICAg IHsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQotICAgICAgICB7Ci0gICAg ICAgICAgZ3J1Yl91aW50OF90IHNyY19yZWQ7Ci0gICAgICAgICAgZ3J1Yl91aW50OF90IHNy Y19ncmVlbjsKLSAgICAgICAgICBncnViX3VpbnQ4X3Qgc3JjX2JsdWU7Ci0gICAgICAgICAg Z3J1Yl91aW50OF90IHNyY19hbHBoYTsKLSAgICAgICAgICBncnViX3VpbnQ4X3QgZHN0X3Jl ZDsKLSAgICAgICAgICBncnViX3VpbnQ4X3QgZHN0X2dyZWVuOwotICAgICAgICAgIGdydWJf dWludDhfdCBkc3RfYmx1ZTsKLSAgICAgICAgICBncnViX3VpbnQ4X3QgZHN0X2FscGhhOwot ICAgICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBzcmNfY29sb3I7Ci0gICAgICAgICAgZ3J1 Yl92aWRlb19jb2xvcl90IGRzdF9jb2xvcjsKLQotICAgICAgICAgIHNyY19jb2xvciA9IGdy dWJfdmlkZW9fdmJlX2dldF9waXhlbCAoc291cmNlLCBpICsgb2Zmc2V0X3gsIGogKyBvZmZz ZXRfeSk7Ci0gICAgICAgICAgZ3J1Yl92aWRlb192YmVfdW5tYXBfY29sb3IgKHNvdXJjZSwg c3JjX2NvbG9yLCAmc3JjX3JlZCwgJnNyY19ncmVlbiwgCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZzcmNfYmx1ZSwgJnNyY19hbHBoYSk7Ci0KLSAgICAgICAg ICBpZiAoc3JjX2FscGhhID09IDApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg ICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KQotICAgICAgICAgICAgewotICAgICAgICAgICAg ICBkc3RfY29sb3IgPSBncnViX3ZpZGVvX3ZiZV9tYXBfcmdiYSAoc3JjX3JlZCwgc3JjX2dy ZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3JjX2JsdWUsIHNyY19hbHBoYSk7Ci0gICAgICAgICAgICAgICBncnViX3ZpZGVvX3Zi ZV9kcmF3X3BpeGVsICh4ICsgaSwgeSArIGosIGRzdF9jb2xvcik7Ci0gICAgICAgICAgICAg ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIGRzdF9jb2xvciA9IGdy dWJfdmlkZW9fdmJlX2dldF9waXhlbCAocmVuZGVyX3RhcmdldCwgeCArIGksIHkgKyBqKTsK LQotICAgICAgICAgIGdydWJfdmlkZW9fdmJlX3VubWFwX2NvbG9yIChyZW5kZXJfdGFyZ2V0 LCAgZHN0X2NvbG9yLCAmZHN0X3JlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZkc3RfZ3JlZW4sICZkc3RfYmx1ZSwgJmRzdF9hbHBoYSk7Ci0KLSAgICAg ICAgICBkc3RfcmVkID0gKCgoc3JjX3JlZCAqIHNyY19hbHBoYSkKLSAgICAgICAgICAgICAg ICAgICAgICArIChkc3RfcmVkICogKDI1NSAtIHNyY19hbHBoYSkpKSAvIDI1NSk7Ci0gICAg ICAgICAgZHN0X2dyZWVuID0gKCgoc3JjX2dyZWVuICogc3JjX2FscGhhKQotICAgICAgICAg ICAgICAgICAgICAgICAgKyAoZHN0X2dyZWVuICogKDI1NSAtIHNyY19hbHBoYSkpKSAvIDI1 NSk7Ci0gICAgICAgICAgZHN0X2JsdWUgPSAoKChzcmNfYmx1ZSAqIHNyY19hbHBoYSkKLSAg ICAgICAgICAgICAgICAgICAgICAgKyAoZHN0X2JsdWUgKiAoMjU1IC0gc3JjX2FscGhhKSkp IC8gMjU1KTsKLQotICAgICAgICAgIGRzdF9hbHBoYSA9IHNyY19hbHBoYTsKLSAgICAgICAg ICBkc3RfY29sb3IgPSBncnViX3ZpZGVvX3ZiZV9tYXBfcmdiYSAoZHN0X3JlZCwgZHN0X2dy ZWVuLCBkc3RfYmx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHN0X2FscGhhKTsKLQotICAgICAgICAgIGdydWJfdmlkZW9fdmJlX2RyYXdf cGl4ZWwgKHggKyBpLCB5ICsgaiwgZHN0X2NvbG9yKTsKLSAgICAgICAgfQotICAgIH0KKyAg LyogVXNlIHZiZWJsaXRfaW5mbyB0byBlbmNhcHN1bGF0ZSByZW5kZXJpbmcuICAqLworICBz b3VyY2VfaW5mby5tb2RlX2luZm8gPSAmc291cmNlLT5tb2RlX2luZm87CisgIHNvdXJjZV9p bmZvLmRhdGEgPSBzb3VyY2UtPmRhdGE7CisgIHRhcmdldF9pbmZvLm1vZGVfaW5mbyA9ICZy ZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm87CisgIHRhcmdldF9pbmZvLmRhdGEgPSByZW5kZXJf dGFyZ2V0LT5kYXRhOworCisgIC8qIERvIGFjdHVhbCBibGl0dGluZy4gICovCisgIGNvbW1v bl9ibGl0dGVyICgmdGFyZ2V0X2luZm8sICZzb3VyY2VfaW5mbywgb3BlciwgeCwgeSwgd2lk dGgsIGhlaWdodCwgCisgICAgICAgICAgICAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3kpOwog CiAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogfQpAQCAtMTM1MiwxNiArMTM0MCwyMCBAQAog ICAgICAgICYmIChncnViX2FicyAoZHkpIDwgcmVuZGVyX3RhcmdldC0+dmlld3BvcnQuaGVp Z2h0KSkKICAgICB7CiAgICAgICAvKiAzLiBNb3ZlIGRhdGEgaW4gcmVuZGVyIHRhcmdldC4g ICovCisgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyB0YXJnZXQ7 CiAgICAgICBncnViX3VpbnQ4X3QgKnNyYzsKICAgICAgIGdydWJfdWludDhfdCAqZHN0Owog ICAgICAgaW50IGo7CiAKKyAgICAgIHRhcmdldC5tb2RlX2luZm8gPSAmcmVuZGVyX3Rhcmdl dC0+bW9kZV9pbmZvOworICAgICAgdGFyZ2V0LmRhdGEgPSByZW5kZXJfdGFyZ2V0LT5kYXRh OworCiAgICAgICBmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspCiAgICAgICAgIHsKLSAg ICAgICAgICBkc3QgPSBncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChyZW5kZXJfdGFy Z2V0LCBkc3RfeCwgZHN0X3kgKyBqKTsKLSAgICAgICAgICBzcmMgPSBncnViX3ZpZGVvX3Zi ZV9nZXRfdmlkZW9fcHRyIChyZW5kZXJfdGFyZ2V0LCBzcmNfeCwgc3JjX3kgKyBqKTsKKyAg ICAgICAgICBkc3QgPSBncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyICgmdGFyZ2V0LCBk c3RfeCwgZHN0X3kgKyBqKTsKKyAgICAgICAgICBzcmMgPSBncnViX3ZpZGVvX3ZiZV9nZXRf dmlkZW9fcHRyICgmdGFyZ2V0LCBzcmNfeCwgc3JjX3kgKyBqKTsKICAgICAgICAgICBncnVi X21lbW1vdmUgKGRzdCwgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggKiBy ZW5kZXJfdGFyZ2V0LT5tb2RlX2luZm8uYnl0ZXNfcGVyX3BpeGVsKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHdpZHRoICogdGFyZ2V0Lm1vZGVfaW5mby0+Ynl0ZXNfcGVyX3BpeGVs KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTU0NCw3ICsxNTM2LDcgQEAKICAgICAuZGVs ZXRlX3JlbmRlcl90YXJnZXQgPSBncnViX3ZpZGVvX3ZiZV9kZWxldGVfcmVuZGVyX3Rhcmdl dCwKICAgICAuc2V0X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0ID0gZ3J1Yl92aWRlb192YmVfc2V0 X2FjdGl2ZV9yZW5kZXJfdGFyZ2V0LAogCi0gICAgLm5leHQgPSAwICAKKyAgICAubmV4dCA9 IDAKICAgfTsKIAogR1JVQl9NT0RfSU5JVCh2aWRlb19pMzg2X3BjX3ZiZSkKSW5kZXg6IHZp ZGVvL2kzODYvcGMvdmJlYmxpdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2Vz L2dydWIvZ3J1YjIvdmlkZW8vaTM4Ni9wYy92YmVibGl0LmMsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMgpkaWZmIC11IC1yMS4yIHZiZWJsaXQuYwotLS0gdmlkZW8vaTM4Ni9wYy92YmVi bGl0LmMJMjkgSnVsIDIwMDYgMTE6MjI6NTIgLTAwMDAJMS4yCisrKyB2aWRlby9pMzg2L3Bj L3ZiZWJsaXQuYwkyOSBKdWwgMjAwNiAxMjoxNjo1MiAtMDAwMApAQCAtMTcsMjAgKzE3LDI3 IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1B IDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGdydWIvZXJyLmg+Ci0jaW5jbHVkZSA8 Z3J1Yi9tYWNoaW5lL21lbW9yeS5oPgorLyogU1BFQ0lBTCBOT1RFUyEKKworICAgUGxlYXNl IG5vdGUgZm9sbG93aW5nIHdoZW4gcmVhZGluZyB0aGUgY29kZSBiZWxvdzoKKworICAgLSBJ biB0aGlzIGRyaXZlciB3ZSBhc3N1bWUgdGhhdCBldmVyeSBtZW1vcnkgY2FuIGJlIGFjY2Vz c2VkIGJ5IHNhbWUgbWVtb3J5CisgICBidXMuICBJZiB0aGVyZSBhcmUgZGlmZmVyZW50IGFk ZHJlc3Mgc3BhY2VzIGRvIG5vdCB1c2UgdGhpcyBjb2RlIGFzIGEgYmFzZQorICAgY29kZSBm b3Igb3RoZXIgYXJjaHMuCisKKyAgIC0gRXZlcnkgZnVuY3Rpb24gaW4gdGhpcyBjb2RlIGFz c3VtZXMgdGhhdCBib3VuZHMgY2hlY2tpbmcgaGFzIGJlZW4gZG9uZSBpbgorICAgcHJldmlv dXMgcGhhc2UgYW5kIHRoZXkgYXJlIG9wdGVkIG91dCBpbiBoZXJlLiAgKi8KKwogI2luY2x1 ZGUgPGdydWIvbWFjaGluZS92YmUuaD4KICNpbmNsdWRlIDxncnViL21hY2hpbmUvdmJlYmxp dC5oPgotI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KLSNpbmNsdWRlIDxncnViL2RsLmg+Cisj aW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL3ZiZXV0aWwuaD4KICNpbmNsdWRlIDxncnViL21pc2Mu aD4KLSNpbmNsdWRlIDxncnViL2ZvbnQuaD4KLSNpbmNsdWRlIDxncnViL21tLmg+CisjaW5j bHVkZSA8Z3J1Yi90eXBlcy5oPgogI2luY2x1ZGUgPGdydWIvdmlkZW8uaD4KIAogdm9pZAot Z3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4QThfUjhHOEI4QTggKHN0cnVjdCBncnVi X3ZpZGVvX3JlbmRlcl90YXJnZXQgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpzcmMs CitncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9SOEc4QjhBOF9SOEc4QjhBOCAoc3RydWN0IGdy dWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRf aW5mbyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95 KQogewpAQCAtNTIsMTAgKzU5LDggQEAKIAogICBmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyBq KyspCiAgICAgewotICAgICAgc3JjcHRyID0gKGdydWJfdWludDMyX3QgKilncnViX3ZpZGVv X3ZiZV9nZXRfdmlkZW9fcHRyIChzcmMsIG9mZnNldF94LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICsgb2Zmc2V0 X3kpOwotCi0gICAgICBkc3RwdHIgPSAoZ3J1Yl91aW50MzJfdCAqKWdydWJfdmlkZW9fdmJl X2dldF92aWRlb19wdHIgKGRzdCwgeCwgeSArIGopOworICAgICAgc3JjcHRyID0gKGdydWJf dWludDMyX3QgKilnZXRfZGF0YV9wdHIgKHNyYywgb2Zmc2V0X3gsIGogKyBvZmZzZXRfeSk7 CisgICAgICBkc3RwdHIgPSAoZ3J1Yl91aW50MzJfdCAqKWdldF9kYXRhX3B0ciAoZHN0LCB4 LCB5ICsgaik7CiAKICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQogICAgICAg ICB7CkBAIC05Nyw4ICsxMDIsMzMgQEAKIH0KIAogdm9pZAotZ3J1Yl92aWRlb19pMzg2X3Zi ZWJsaXRfUjhHOEI4X1I4RzhCOEE4IChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0 ICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQgKnNyYywKK2dydWJfdmlkZW9faTM4Nl92YmVi bGl0X1I4RzhCOFg4X1I4RzhCOFg4IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRf aW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpzcmMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lk dGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG9mZnNldF94LCBpbnQgb2Zmc2V0X3kpCit7CisgIGludCBqOworICBncnVi X3VpbnQzMl90ICpzcmNwdHI7CisgIGdydWJfdWludDMyX3QgKmRzdHB0cjsKKyAgaW50IHBp dGNoOworCisgIHBpdGNoID0gc3JjLT5tb2RlX2luZm8tPmJ5dGVzX3Blcl9waXhlbDsKKwor ICAvKiBXZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBkYXRhIGJlaW5nIG91dCBvZiBi b3VuZHMKKyAgICAgYXMgd2UgYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBoYXMgYmVlbiBjaGVj a2VkIGJlZm9yZS4gICovCisKKyAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisrKQorICAg IHsKKyAgICAgIHNyY3B0ciA9IChncnViX3VpbnQzMl90ICopZ2V0X2RhdGFfcHRyIChzcmMs IG9mZnNldF94LCBqICsgb2Zmc2V0X3kpOworICAgICAgZHN0cHRyID0gKGdydWJfdWludDMy X3QgKilnZXRfZGF0YV9wdHIgKGRzdCwgeCwgeSArIGopOworCisgICAgICBncnViX21lbW1v dmUgKGRzdHB0ciwgc3JjcHRyLCB3aWR0aCAqIHBpdGNoKTsKKyAgICB9Cit9CisKK3ZvaWQK K2dydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOF9SOEc4QjhBOCAoc3RydWN0IGdydWJf dmlkZW9faTM4Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8g KnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgs IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95KQogewpAQCAt MTIwLDEwICsxNTAsOCBAQAogCiAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7IGorKykKICAg ICB7Ci0gICAgICBzcmNwdHIgPSAoZ3J1Yl91aW50MzJfdCAqKWdydWJfdmlkZW9fdmJlX2dl dF92aWRlb19wdHIgKHNyYywgb2Zmc2V0X3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKyBvZmZzZXRfeSk7Ci0K LSAgICAgIGRzdHB0ciA9IChncnViX3VpbnQ4X3QgKilncnViX3ZpZGVvX3ZiZV9nZXRfdmlk ZW9fcHRyIChkc3QsIHgsIHkgKyBqKTsKKyAgICAgIHNyY3B0ciA9IChncnViX3VpbnQzMl90 ICopZ2V0X2RhdGFfcHRyIChzcmMsIG9mZnNldF94LCBqICsgb2Zmc2V0X3kpOworICAgICAg ZHN0cHRyID0gKGdydWJfdWludDhfdCAqKWdldF9kYXRhX3B0ciAoZHN0LCB4LCB5ICsgaik7 CiAKICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQogICAgICAgICB7CkBAIC0x NjYsOCArMTk0LDQ2IEBACiB9CiAKIHZvaWQKLWdydWJfdmlkZW9faTM4Nl92YmVibGl0X2lu ZGV4X1I4RzhCOEE4IChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpkc3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfdmlk ZW9fcmVuZGVyX3RhcmdldCAqc3JjLAorZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4 X1I4RzhCOFg4IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92 aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldF94 LCBpbnQgb2Zmc2V0X3kpCit7CisgIGdydWJfdWludDMyX3QgY29sb3I7CisgIGludCBpOwor ICBpbnQgajsKKyAgZ3J1Yl91aW50MzJfdCAqc3JjcHRyOworICBncnViX3VpbnQ4X3QgKmRz dHB0cjsKKyAgdW5zaWduZWQgaW50IHNyOworICB1bnNpZ25lZCBpbnQgc2c7CisgIHVuc2ln bmVkIGludCBzYjsKKworICAvKiBXZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBkYXRh IGJlaW5nIG91dCBvZiBib3VuZHMKKyAgICAgYXMgd2UgYXNzdW1lIHRoYXQgZXZlcnl0aGlu ZyBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZS4gICovCisKKyAgZm9yIChqID0gMDsgaiA8IGhl aWdodDsgaisrKQorICB7CisgICAgc3JjcHRyID0gKGdydWJfdWludDMyX3QgKilnZXRfZGF0 YV9wdHIgKHNyYywgb2Zmc2V0X3gsIGogKyBvZmZzZXRfeSk7CisgICAgZHN0cHRyID0gKGdy dWJfdWludDhfdCAqKWdldF9kYXRhX3B0ciAoZHN0LCB4LCB5ICsgaik7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgd2lkdGg7IGkrKykKKyAgICB7CisgICAgICBjb2xvciA9ICpzcmNwdHIr KzsKKworICAgICAgc3IgPSAoY29sb3IgPj4gMCkgJiAweEZGOworICAgICAgc2cgPSAoY29s b3IgPj4gOCkgJiAweEZGOworICAgICAgc2IgPSAoY29sb3IgPj4gMTYpICYgMHhGRjsKKwor ICAgICAgKmRzdHB0cisrID0gc3I7CisgICAgICAqZHN0cHRyKysgPSBzZzsKKyAgICAgICpk c3RwdHIrKyA9IHNiOworICAgIH0KKyAgfQorfQorCit2b2lkCitncnViX3ZpZGVvX2kzODZf dmJlYmxpdF9pbmRleF9SOEc4QjhBOCAoc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0 X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqc3JjLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBp bnQgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBvZmZzZXRfeCwgaW50IG9mZnNldF95KQogewpAQCAtMTkwLDEwICsyNTYsOCBAQAogCiAg IGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7IGorKykKICAgICB7Ci0gICAgICBzcmNwdHIgPSAo Z3J1Yl91aW50MzJfdCAqKWdydWJfdmlkZW9fdmJlX2dldF92aWRlb19wdHIgKHNyYywgb2Zm c2V0X3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGogKyBvZmZzZXRfeSk7Ci0KLSAgICAgIGRzdHB0ciA9IChncnVi X3VpbnQ4X3QgKilncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChkc3QsIHgsIHkgKyBq KTsKKyAgICAgIHNyY3B0ciA9IChncnViX3VpbnQzMl90ICopZ2V0X2RhdGFfcHRyIChzcmMs IG9mZnNldF94LCBqICsgb2Zmc2V0X3kpOworICAgICAgZHN0cHRyID0gKGdydWJfdWludDhf dCAqKWdldF9kYXRhX3B0ciAoZHN0LCB4LCB5ICsgaik7CiAKICAgICAgIGZvciAoaSA9IDA7 IGkgPCB3aWR0aDsgaSsrKQogICAgICAgICB7CkBAIC0yMzIsOCArMjk2LDQ1IEBACiB9CiAK IHZvaWQKLWdydWJfdmlkZW9faTM4Nl92YmVibGl0X1I4RzhCOEE4X1I4RzhCOCAoc3RydWN0 IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqZHN0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpz cmMsCitncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmRleF9SOEc4QjhYOCAoc3RydWN0IGdy dWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5m byAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4 LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95KQoreworICBn cnViX3VpbnQzMl90IGNvbG9yOworICBpbnQgaTsKKyAgaW50IGo7CisgIGdydWJfdWludDMy X3QgKnNyY3B0cjsKKyAgZ3J1Yl91aW50OF90ICpkc3RwdHI7CisgIHVuc2lnbmVkIGludCBz cjsKKyAgdW5zaWduZWQgaW50IHNnOworICB1bnNpZ25lZCBpbnQgc2I7CisKKyAgLyogV2Ug ZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgZGF0YSBiZWluZyBvdXQgb2YgYm91bmRzCisg IGFzIHdlIGFzc3VtZSB0aGF0IGV2ZXJ5dGhpbmcgaGFzIGJlZW4gY2hlY2tlZCBiZWZvcmUu ICAqLworCisgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7IGorKykKKyAgeworICAgIHNyY3B0 ciA9IChncnViX3VpbnQzMl90ICopZ2V0X2RhdGFfcHRyIChzcmMsIG9mZnNldF94LCBqICsg b2Zmc2V0X3kpOworICAgIGRzdHB0ciA9IChncnViX3VpbnQ4X3QgKilnZXRfZGF0YV9wdHIg KGRzdCwgeCwgeSArIGopOworCisgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCisg ICAgeworICAgICAgY29sb3IgPSAqc3JjcHRyKys7CisKKyAgICAgIHNyID0gKGNvbG9yID4+ IDApICYgMHhGRjsKKyAgICAgIHNnID0gKGNvbG9yID4+IDgpICYgMHhGRjsKKyAgICAgIHNi ID0gKGNvbG9yID4+IDE2KSAmIDB4RkY7CisKKyAgICAgIGNvbG9yID0gZ3J1Yl92aWRlb192 YmVfbWFwX3JnYihzciwgc2csIHNiKTsKKyAgICAgICpkc3RwdHIrKyA9IGNvbG9yICYgMHhG RjsKKyAgICB9CisgIH0KK30KKwordm9pZAorZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhH OEI4QThfUjhHOEI4IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1 Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNl dF94LCBpbnQgb2Zmc2V0X3kpCiB7CkBAIC0yNTEsMTAgKzM1Miw4IEBACiAKICAgZm9yIChq ID0gMDsgaiA8IGhlaWdodDsgaisrKQogICAgIHsKLSAgICAgIHNyY3B0ciA9IChncnViX3Vp bnQ4X3QgKilncnViX3ZpZGVvX3ZiZV9nZXRfdmlkZW9fcHRyIChzcmMsIG9mZnNldF94LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGogKyBvZmZzZXRfeSk7Ci0KLSAgICAgIGRzdHB0ciA9IChncnViX3VpbnQzMl90 ICopZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAoZHN0LCB4LCB5ICsgaik7CisgICAg ICBzcmNwdHIgPSAoZ3J1Yl91aW50OF90ICopZ2V0X2RhdGFfcHRyIChzcmMsIG9mZnNldF94 LCBqICsgb2Zmc2V0X3kpOworICAgICAgZHN0cHRyID0gKGdydWJfdWludDMyX3QgKilnZXRf ZGF0YV9wdHIgKGRzdCwgeCwgeSArIGopOwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lk dGg7IGkrKykKICAgICAgICAgewpAQCAtMjcwLDQxICszNjksMzMgQEAKIH0KIAogdm9pZAot Z3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4X1I4RzhCOCAoc3RydWN0IGdydWJfdmlk ZW9fcmVuZGVyX3RhcmdldCAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqc3JjLAorZ3J1Yl92 aWRlb19pMzg2X3ZiZWJsaXRfUjhHOEI4X1I4RzhCOCAoc3RydWN0IGdydWJfdmlkZW9faTM4 Nl92YmVibGl0X2luZm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpzcmMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3 aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBvZmZzZXRfeCwgaW50IG9mZnNldF95KQogewotICBpbnQgaTsKICAgaW50IGo7 CiAgIGdydWJfdWludDhfdCAqc3JjcHRyOwogICBncnViX3VpbnQ4X3QgKmRzdHB0cjsKKyAg aW50IHBpdGNoOworCisgIHBpdGNoID0gc3JjLT5tb2RlX2luZm8tPmJ5dGVzX3Blcl9waXhl bDsKIAogICAvKiBXZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBkYXRhIGJlaW5nIG91 dCBvZiBib3VuZHMKICAgICAgYXMgd2UgYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBoYXMgYmVl biBjaGVja2VkIGJlZm9yZS4gICovCiAKICAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisr KQogICAgIHsKLSAgICAgIHNyY3B0ciA9IChncnViX3VpbnQ4X3QgKilncnViX3ZpZGVvX3Zi ZV9nZXRfdmlkZW9fcHRyIChzcmMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF94LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKyBv ZmZzZXRfeSk7Ci0KLSAgICAgIGRzdHB0ciA9IChncnViX3VpbnQ4X3QgKilncnViX3ZpZGVv X3ZiZV9nZXRfdmlkZW9fcHRyIChkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIGopOwor ICAgICAgc3JjcHRyID0gKGdydWJfdWludDhfdCAqKWdldF9kYXRhX3B0ciAoc3JjLCBvZmZz ZXRfeCwgaiArIG9mZnNldF95KTsKKyAgICAgIGRzdHB0ciA9IChncnViX3VpbnQ4X3QgKiln ZXRfZGF0YV9wdHIgKGRzdCwgeCwgeSArIGopOwogCi0gICAgICBmb3IgKGkgPSAwOyBpIDwg d2lkdGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICpkc3RwdHIgKysgPSAqc3JjcHRy Kys7Ci0gICAgICAgICAgKmRzdHB0ciArKyA9ICpzcmNwdHIrKzsKLSAgICAgICAgICAqZHN0 cHRyICsrID0gKnNyY3B0cisrOwotICAgICAgICB9CisgICAgICBncnViX21lbW1vdmUgKGRz dHB0ciwgc3JjcHRyLCB3aWR0aCAqIHBpdGNoKTsKICAgICB9CiB9CiAKIHZvaWQKLWdydWJf dmlkZW9faTM4Nl92YmVibGl0X2luZGV4X1I4RzhCOCAoc3RydWN0IGdydWJfdmlkZW9fcmVu ZGVyX3RhcmdldCAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpzcmMsCitncnViX3ZpZGVvX2kz ODZfdmJlYmxpdF9pbmRleF9SOEc4QjggKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxp dF9pbmZvICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpzcmMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zm c2V0X3gsIGludCBvZmZzZXRfeSkKIHsKQEAgLTMyMiwxMCArNDEzLDggQEAKIAogICBmb3Ig KGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspCiAgICAgewotICAgICAgc3JjcHRyID0gKGdydWJf dWludDhfdCAqKWdydWJfdmlkZW9fdmJlX2dldF92aWRlb19wdHIgKHNyYywgb2Zmc2V0X3gs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaiArIG9mZnNldF95KTsKLQotICAgICAgZHN0cHRyID0gKGdydWJfdWludDhf dCAqKWdydWJfdmlkZW9fdmJlX2dldF92aWRlb19wdHIgKGRzdCwgeCwgeSArIGopOworICAg ICAgc3JjcHRyID0gKGdydWJfdWludDhfdCAqKWdldF9kYXRhX3B0ciAoc3JjLCBvZmZzZXRf eCwgaiArIG9mZnNldF95KTsKKyAgICAgIGRzdHB0ciA9IChncnViX3VpbnQ4X3QgKilnZXRf ZGF0YV9wdHIgKGRzdCwgeCwgeSArIGopOwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lk dGg7IGkrKykKICAgICAgICAgewpAQCAtMzQxLDI3ICs0MzAsMTIyIEBACiB9CiAKIHZvaWQK LWdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZGV4X2luZGV4IChzdHJ1Y3QgZ3J1Yl92aWRl b19yZW5kZXJfdGFyZ2V0ICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGdydWJfdmlkZW9fcmVuZGVyX3RhcmdldCAqc3JjLAorZ3J1Yl92aWRl b19pMzg2X3ZiZWJsaXRfaW5kZXhfaW5kZXggKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJl YmxpdF9pbmZvICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKnNyYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50 IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zm c2V0X3gsIGludCBvZmZzZXRfeSkKIHsKLSAgaW50IGk7CiAgIGludCBqOwogICBncnViX3Vp bnQ4X3QgKnNyY3B0cjsKICAgZ3J1Yl91aW50OF90ICpkc3RwdHI7CisgIGludCBwaXRjaDsK KworICBwaXRjaCA9IHNyYy0+bW9kZV9pbmZvLT5ieXRlc19wZXJfcGl4ZWw7CiAKICAgLyog V2UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgZGF0YSBiZWluZyBvdXQgb2YgYm91bmRz CiAgICAgIGFzIHdlIGFzc3VtZSB0aGF0IGV2ZXJ5dGhpbmcgaGFzIGJlZW4gY2hlY2tlZCBi ZWZvcmUuICAqLwogCiAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7IGorKykKICAgICB7Ci0g ICAgICBzcmNwdHIgPSAoZ3J1Yl91aW50OF90ICopZ3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVv X3B0ciAoc3JjLCBvZmZzZXRfeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICsgb2Zmc2V0X3kpOworICAgICAgc3Jj cHRyID0gKGdydWJfdWludDhfdCAqKWdldF9kYXRhX3B0ciAoc3JjLCBvZmZzZXRfeCwgaiAr IG9mZnNldF95KTsKKyAgICAgIGRzdHB0ciA9IChncnViX3VpbnQ4X3QgKilnZXRfZGF0YV9w dHIgKGRzdCwgeCwgeSArIGopOwogCi0gICAgICBkc3RwdHIgPSAoZ3J1Yl91aW50OF90ICop Z3J1Yl92aWRlb192YmVfZ2V0X3ZpZGVvX3B0ciAoZHN0LCB4LCB5ICsgaik7CisgICAgICBn cnViX21lbW1vdmUgKGRzdHB0ciwgc3JjcHRyLCB3aWR0aCAqIHBpdGNoKTsKKyAgICB9Cit9 CisKK3ZvaWQKK2dydWJfdmlkZW9faTM4Nl92YmVibGl0X2JsZW5kIChzdHJ1Y3QgZ3J1Yl92 aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpzcmMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldF94 LCBpbnQgb2Zmc2V0X3kpCit7CisgIGludCBpOworICBpbnQgajsKIAorICAvKiBXZSBkbyBu b3QgbmVlZCB0byB3b3JyeSBhYm91dCBkYXRhIGJlaW5nIG91dCBvZiBib3VuZHMKKyAgICAg YXMgd2UgYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZS4g ICovCisKKyAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisrKQorICAgIHsKICAgICAgIGZv ciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQotICAgICAgICAgICpkc3RwdHIrKyA9ICpzcmNw dHIrKzsKKyAgICAgICAgeworICAgICAgICAgIGdydWJfdWludDhfdCBzcmNfcmVkOworICAg ICAgICAgIGdydWJfdWludDhfdCBzcmNfZ3JlZW47CisgICAgICAgICAgZ3J1Yl91aW50OF90 IHNyY19ibHVlOworICAgICAgICAgIGdydWJfdWludDhfdCBzcmNfYWxwaGE7CisgICAgICAg ICAgZ3J1Yl91aW50OF90IGRzdF9yZWQ7CisgICAgICAgICAgZ3J1Yl91aW50OF90IGRzdF9n cmVlbjsKKyAgICAgICAgICBncnViX3VpbnQ4X3QgZHN0X2JsdWU7CisgICAgICAgICAgZ3J1 Yl91aW50OF90IGRzdF9hbHBoYTsKKyAgICAgICAgICBncnViX3ZpZGVvX2NvbG9yX3Qgc3Jj X2NvbG9yOworICAgICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBkc3RfY29sb3I7CisKKyAg ICAgICAgICBzcmNfY29sb3IgPSBnZXRfcGl4ZWwgKHNyYywgaSArIG9mZnNldF94LCBqICsg b2Zmc2V0X3kpOworICAgICAgICAgIGdydWJfdmlkZW9fdmJlX3VubWFwX2NvbG9yIChzcmMs IHNyY19jb2xvciwgJnNyY19yZWQsICZzcmNfZ3JlZW4sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZzcmNfYmx1ZSwgJnNyY19hbHBoYSk7CisKKyAgICAgICAg ICBpZiAoc3JjX2FscGhhID09IDApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBkc3RfY29sb3IgPSBncnViX3ZpZGVvX3ZiZV9tYXBfcmdiYSAoc3JjX3JlZCwgc3JjX2dy ZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3JjX2JsdWUsIHNyY19hbHBoYSk7CisgICAgICAgICAgICAgIHNldF9waXhlbCAoZHN0 LCB4ICsgaSwgeSArIGosIGRzdF9jb2xvcik7CisgICAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgZHN0X2NvbG9yID0gZ2V0X3BpeGVsIChkc3Qs IHggKyBpLCB5ICsgaik7CisKKyAgICAgICAgICBncnViX3ZpZGVvX3ZiZV91bm1hcF9jb2xv ciAoZHN0LCBkc3RfY29sb3IsICZkc3RfcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZHN0X2dyZWVuLCAmZHN0X2JsdWUsICZkc3RfYWxwaGEpOworCisg ICAgICAgICAgZHN0X3JlZCA9ICgoKHNyY19yZWQgKiBzcmNfYWxwaGEpCisgICAgICAgICAg ICAgICAgICAgICAgKyAoZHN0X3JlZCAqICgyNTUgLSBzcmNfYWxwaGEpKSkgLyAyNTUpOwor ICAgICAgICAgIGRzdF9ncmVlbiA9ICgoKHNyY19ncmVlbiAqIHNyY19hbHBoYSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICsgKGRzdF9ncmVlbiAqICgyNTUgLSBzcmNfYWxwaGEpKSkg LyAyNTUpOworICAgICAgICAgIGRzdF9ibHVlID0gKCgoc3JjX2JsdWUgKiBzcmNfYWxwaGEp CisgICAgICAgICAgICAgICAgICAgICAgICsgKGRzdF9ibHVlICogKDI1NSAtIHNyY19hbHBo YSkpKSAvIDI1NSk7CisKKyAgICAgICAgICBkc3RfYWxwaGEgPSBzcmNfYWxwaGE7CisgICAg ICAgICAgZHN0X2NvbG9yID0gZ3J1Yl92aWRlb192YmVfbWFwX3JnYmEgKGRzdF9yZWQsIGRz dF9ncmVlbiwgZHN0X2JsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRzdF9hbHBoYSk7CisKKyAgICAgICAgICBzZXRfcGl4ZWwgKGRzdCwg eCArIGksIHkgKyBqLCBkc3RfY29sb3IpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk CitncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9yZXBsYWNlIChzdHJ1Y3QgZ3J1Yl92aWRlb19p Mzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKnNyYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldF94 LCBpbnQgb2Zmc2V0X3kpCit7CisgIGludCBpOworICBpbnQgajsKKyAgZ3J1Yl91aW50OF90 IHNyY19yZWQ7CisgIGdydWJfdWludDhfdCBzcmNfZ3JlZW47CisgIGdydWJfdWludDhfdCBz cmNfYmx1ZTsKKyAgZ3J1Yl91aW50OF90IHNyY19hbHBoYTsKKyAgZ3J1Yl92aWRlb19jb2xv cl90IHNyY19jb2xvcjsKKyAgZ3J1Yl92aWRlb19jb2xvcl90IGRzdF9jb2xvcjsKKworICAv KiBXZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBkYXRhIGJlaW5nIG91dCBvZiBib3Vu ZHMKKyAgICAgYXMgd2UgYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBoYXMgYmVlbiBjaGVja2Vk IGJlZm9yZS4gICovCisKKyAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisrKQorICB7Cisg ICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCisgICAgeworICAgICAgc3JjX2NvbG9y ID0gZ2V0X3BpeGVsIChzcmMsIGkgKyBvZmZzZXRfeCwgaiArIG9mZnNldF95KTsKKyAgICAg IGdydWJfdmlkZW9fdmJlX3VubWFwX2NvbG9yIChzcmMsIHNyY19jb2xvciwgJnNyY19yZWQs ICZzcmNfZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNyY19i bHVlLCAmc3JjX2FscGhhKTsKKworICAgICAgZHN0X2NvbG9yID0gZ3J1Yl92aWRlb192YmVf bWFwX3JnYmEgKHNyY19yZWQsIHNyY19ncmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcmNfYmx1ZSwgc3JjX2FscGhhKTsKKyAgICAgIHNldF9w aXhlbCAoZHN0LCB4ICsgaSwgeSArIGosIGRzdF9jb2xvcik7CiAgICAgfQorICB9CiB9Cklu ZGV4OiB2aWRlby9pMzg2L3BjL3ZiZWZpbGwuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv c291cmNlcy9ncnViL2dydWIyL3ZpZGVvL2kzODYvcGMvdmJlZmlsbC5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcjEuMiB2YmVmaWxsLmMKLS0tIHZpZGVvL2kzODYv cGMvdmJlZmlsbC5jCTI5IEp1bCAyMDA2IDExOjIyOjUyIC0wMDAwCTEuMgorKysgdmlkZW8v aTM4Ni9wYy92YmVmaWxsLmMJMjkgSnVsIDIwMDYgMTI6MTY6NTIgLTAwMDAKQEAgLTE3LDE5 ICsxNywyNSBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJp ZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxncnViL2Vyci5oPgotI2lu Y2x1ZGUgPGdydWIvbWFjaGluZS9tZW1vcnkuaD4KKy8qIFNQRUNJQUwgTk9URVMhCisKKyAg IFBsZWFzZSBub3RlIGZvbGxvd2luZyB3aGVuIHJlYWRpbmcgdGhlIGNvZGUgYmVsb3c6CisK KyAgIC0gSW4gdGhpcyBkcml2ZXIgd2UgYXNzdW1lIHRoYXQgZXZlcnkgbWVtb3J5IGNhbiBi ZSBhY2Nlc3NlZCBieSBzYW1lIG1lbW9yeQorICAgICBidXMuICBJZiB0aGVyZSBhcmUgZGlm ZmVyZW50IGFkZHJlc3Mgc3BhY2VzIGRvIG5vdCB1c2UgdGhpcyBjb2RlIGFzIGEgYmFzZQor ICAgICBjb2RlIGZvciBvdGhlciBhcmNocy4KKworICAgLSBFdmVyeSBmdW5jdGlvbiBpbiB0 aGlzIGNvZGUgYXNzdW1lcyB0aGF0IGJvdW5kcyBjaGVja2luZyBoYXMgYmVlbiBkb25lIGlu CisgICAgIHByZXZpb3VzIHBoYXNlIGFuZCB0aGV5IGFyZSBvcHRlZCBvdXQgaW4gaGVyZS4g ICovCisKICNpbmNsdWRlIDxncnViL21hY2hpbmUvdmJlLmg+CiAjaW5jbHVkZSA8Z3J1Yi9t YWNoaW5lL3ZiZWZpbGwuaD4KKyNpbmNsdWRlIDxncnViL21hY2hpbmUvdmJldXRpbC5oPgog I2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KLSNpbmNsdWRlIDxncnViL2RsLmg+Ci0jaW5jbHVk ZSA8Z3J1Yi9taXNjLmg+Ci0jaW5jbHVkZSA8Z3J1Yi9mb250Lmg+Ci0jaW5jbHVkZSA8Z3J1 Yi9tbS5oPgogI2luY2x1ZGUgPGdydWIvdmlkZW8uaD4KIAogdm9pZAotZ3J1Yl92aWRlb19p Mzg2X3ZiZWZpbGxfUjhHOEI4QTggKHN0cnVjdCBncnViX3ZpZGVvX3JlbmRlcl90YXJnZXQg KmRzdCwKK2dydWJfdmlkZW9faTM4Nl92YmVmaWxsX1I4RzhCOEE4IChzdHJ1Y3QgZ3J1Yl92 aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBjb2xvciwgaW50IHgsIGludCB5LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkK IHsKQEAgLTUwLDcgKzU2LDcgQEAKIH0KIAogdm9pZAotZ3J1Yl92aWRlb19pMzg2X3ZiZWZp bGxfUjhHOEI4IChzdHJ1Y3QgZ3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpkc3QsCitncnVi X3ZpZGVvX2kzODZfdmJlZmlsbF9SOEc4QjggKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJl YmxpdF9pbmZvICpkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJf dmlkZW9fY29sb3JfdCBjb2xvciwgaW50IHgsIGludCB5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CkBAIC03OCw3ICs4NCw3 IEBACiB9CiAKIHZvaWQKLWdydWJfdmlkZW9faTM4Nl92YmVmaWxsX2luZGV4IChzdHJ1Y3Qg Z3J1Yl92aWRlb19yZW5kZXJfdGFyZ2V0ICpkc3QsCitncnViX3ZpZGVvX2kzODZfdmJlZmls bF9pbmRleCAoc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKmRzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX3ZpZGVvX2NvbG9yX3QgY29sb3Is IGludCB4LCBpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lk dGgsIGludCBoZWlnaHQpCiB7CkBAIC05OCwzICsxMDQsMTkgQEAKICAgICAgICAgKmRzdHB0 cisrID0gZmlsbDsKICAgICB9CiB9CisKK3ZvaWQKK2dydWJfdmlkZW9faTM4Nl92YmVmaWxs IChzdHJ1Y3QgZ3J1Yl92aWRlb19pMzg2X3ZiZWJsaXRfaW5mbyAqZHN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgIGdydWJfdmlkZW9fY29sb3JfdCBjb2xvciwgaW50IHgsIGludCB5 LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sK KyAgaW50IGk7CisgIGludCBqOworCisgIC8qIFdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFi b3V0IGRhdGEgYmVpbmcgb3V0IG9mIGJvdW5kcworICAgICBhcyB3ZSBhc3N1bWUgdGhhdCBl dmVyeXRoaW5nIGhhcyBiZWVuIGNoZWNrZWQgYmVmb3JlLiAgKi8KKworICBmb3IgKGogPSAw OyBqIDwgaGVpZ2h0OyBqKyspCisgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCisg ICAgICBzZXRfcGl4ZWwgKGRzdCwgeCtpLCB5K2osIGNvbG9yKTsKK30KSW5kZXg6IHZpZGVv L2kzODYvcGMvdmJldXRpbC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHZpZGVvL2kzODYv cGMvdmJldXRpbC5jCmRpZmYgLU4gdmlkZW8vaTM4Ni9wYy92YmV1dGlsLmMKLS0tIC9kZXYv bnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB2aWRlby9pMzg2L3BjL3ZiZXV0 aWwuYwkyOSBKdWwgMjAwNiAxMjoxNjo1MiAtMDAwMApAQCAtMCwwICsxLDE1MCBAQAorLyoK KyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0 IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAw MjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxncnViL21hY2hpbmUvdmJldXRpbC5oPgor I2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKyNpbmNsdWRlIDxncnViL3ZpZGVvLmg+CisKK2dy dWJfdWludDhfdCAqCitnZXRfZGF0YV9wdHIgKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJl YmxpdF9pbmZvICpzb3VyY2UsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4LCB1bnNp Z25lZCBpbnQgeSkKK3sKKyAgZ3J1Yl91aW50OF90ICpwdHIgPSAwOworCisgIHN3aXRjaCAo c291cmNlLT5tb2RlX2luZm8tPmJwcCkKKyAgICB7CisgICAgY2FzZSAzMjoKKyAgICAgIHB0 ciA9IChncnViX3VpbnQ4X3QgKilzb3VyY2UtPmRhdGEKKyAgICAgICAgICAgICsgeSAqIHNv dXJjZS0+bW9kZV9pbmZvLT5waXRjaAorICAgICAgICAgICAgKyB4ICogNDsKKyAgICAgIGJy ZWFrOworCisgICAgY2FzZSAyNDoKKyAgICAgIHB0ciA9IChncnViX3VpbnQ4X3QgKilzb3Vy Y2UtPmRhdGEKKyAgICAgICAgICAgICsgeSAqIHNvdXJjZS0+bW9kZV9pbmZvLT5waXRjaAor ICAgICAgICAgICAgKyB4ICogMzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxNjoKKyAg ICBjYXNlIDE1OgorICAgICAgcHRyID0gKGdydWJfdWludDhfdCAqKXNvdXJjZS0+ZGF0YQor ICAgICAgICAgICAgKyB5ICogc291cmNlLT5tb2RlX2luZm8tPnBpdGNoCisgICAgICAgICAg ICArIHggKiAyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDg6CisgICAgICBwdHIgPSAo Z3J1Yl91aW50OF90ICopc291cmNlLT5kYXRhCisgICAgICAgICAgICArIHkgKiBzb3VyY2Ut Pm1vZGVfaW5mby0+cGl0Y2gKKyAgICAgICAgICAgICsgeDsKKyAgICAgIGJyZWFrOworICAg IH0KKworICByZXR1cm4gcHRyOworfQorCitncnViX3ZpZGVvX2NvbG9yX3QKK2dldF9waXhl bCAoc3RydWN0IGdydWJfdmlkZW9faTM4Nl92YmVibGl0X2luZm8gKnNvdXJjZSwKKyAgICAg ICAgICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5KQoreworICBncnViX3ZpZGVv X2NvbG9yX3QgY29sb3IgPSAwOworCisgIHN3aXRjaCAoc291cmNlLT5tb2RlX2luZm8tPmJw cCkKKyAgICB7CisgICAgY2FzZSAzMjoKKyAgICAgIGNvbG9yID0gKihncnViX3VpbnQzMl90 ICopZ2V0X2RhdGFfcHRyIChzb3VyY2UsIHgsIHkpOworICAgICAgYnJlYWs7CisKKyAgICBj YXNlIDI0OgorICAgICAgeworICAgICAgICBncnViX3VpbnQ4X3QgKnB0cjsKKyAgICAgICAg cHRyID0gZ2V0X2RhdGFfcHRyIChzb3VyY2UsIHgsIHkpOworICAgICAgICBjb2xvciA9IHB0 clswXSB8IChwdHJbMV0gPDwgOCkgfCAocHRyWzJdIDw8IDE2KTsKKyAgICAgIH0KKyAgICAg IGJyZWFrOworCisgICAgY2FzZSAxNjoKKyAgICBjYXNlIDE1OgorICAgICAgY29sb3IgPSAq KGdydWJfdWludDE2X3QgKilnZXRfZGF0YV9wdHIgKHNvdXJjZSwgeCwgeSk7CisgICAgICBi cmVhazsKKworICAgIGNhc2UgODoKKyAgICAgIGNvbG9yID0gKihncnViX3VpbnQ4X3QgKiln ZXRfZGF0YV9wdHIgKHNvdXJjZSwgeCwgeSk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1 bHQ6CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIGNvbG9yOworfQorCit2b2lk CitzZXRfcGl4ZWwgKHN0cnVjdCBncnViX3ZpZGVvX2kzODZfdmJlYmxpdF9pbmZvICpzb3Vy Y2UsCisgICAgICAgICAgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwgZ3J1Yl92 aWRlb19jb2xvcl90IGNvbG9yKQoreworICBzd2l0Y2ggKHNvdXJjZS0+bW9kZV9pbmZvLT5i cHApCisgICAgeworICAgIGNhc2UgMzI6CisgICAgICB7CisgICAgICAgIGdydWJfdWludDMy X3QgKnB0cjsKKworICAgICAgICBwdHIgPSAoZ3J1Yl91aW50MzJfdCAqKWdldF9kYXRhX3B0 ciAoc291cmNlLCB4LCB5KTsKKworICAgICAgICAqcHRyID0gY29sb3I7CisgICAgICB9Cisg ICAgICBicmVhazsKKworICAgIGNhc2UgMjQ6CisgICAgICB7CisgICAgICAgIGdydWJfdWlu dDhfdCAqcHRyOworICAgICAgICBncnViX3VpbnQ4X3QgKmNvbG9ycHRyID0gKGdydWJfdWlu dDhfdCAqKSZjb2xvcjsKKworICAgICAgICBwdHIgPSBnZXRfZGF0YV9wdHIgKHNvdXJjZSwg eCwgeSk7CisKKyAgICAgICAgcHRyWzBdID0gY29sb3JwdHJbMF07CisgICAgICAgIHB0clsx XSA9IGNvbG9ycHRyWzFdOworICAgICAgICBwdHJbMl0gPSBjb2xvcnB0clsyXTsKKyAgICAg IH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxNjoKKyAgICBjYXNlIDE1OgorICAgICAg eworICAgICAgICBncnViX3VpbnQxNl90ICpwdHI7CisKKyAgICAgICAgcHRyID0gKGdydWJf dWludDE2X3QgKilnZXRfZGF0YV9wdHIgKHNvdXJjZSwgeCwgeSk7CisKKyAgICAgICAgKnB0 ciA9IChncnViX3VpbnQxNl90KSAoY29sb3IgJiAweEZGRkYpOworICAgICAgfQorICAgICAg YnJlYWs7CisKKyAgICBjYXNlIDg6CisgICAgICB7CisgICAgICAgIGdydWJfdWludDhfdCAq cHRyOworCisgICAgICAgIHB0ciA9IChncnViX3VpbnQ4X3QgKilnZXRfZGF0YV9wdHIgKHNv dXJjZSwgeCwgeSk7CisKKyAgICAgICAgKnB0ciA9IChncnViX3VpbnQ4X3QpIChjb2xvciAm IDB4RkYpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAg YnJlYWs7CisgICAgfQorfQpJbmRleDogdmlkZW8vcmVhZGVycy90Z2EuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiB2aWRlby9yZWFkZXJzL3RnYS5jCmRpZmYgLU4gdmlkZW8vcmVhZGVy cy90Z2EuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHZp ZGVvL3JlYWRlcnMvdGdhLmMJMjkgSnVsIDIwMDYgMTI6MTY6NTIgLTAwMDAKQEAgLTAsMCAr MSw0OTYgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgor ICogIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENh bWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3J1Yi9iaXRtYXAu aD4KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+CisjaW5jbHVkZSA8Z3J1Yi9ub3JtYWwuaD4K KyNpbmNsdWRlIDxncnViL2RsLmg+CisjaW5jbHVkZSA8Z3J1Yi9tbS5oPgorI2luY2x1ZGUg PGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvYXJnLmg+CisjaW5jbHVkZSA8Z3J1Yi9m aWxlLmg+CisKKy8qIFVuY29tbWVudCBmb2xsb3dpbmcgZGVmaW5lIHRvIGVuYWJsZSBUR0Eg ZGVidWcuICAqLworLy8jZGVmaW5lIFRHQV9ERUJVRworCisjaWYgZGVmaW5lZChUR0FfREVC VUcpCisjZGVmaW5lIGR1bXBfaW50X2ZpZWxkKHgpIGdydWJfcHJpbnRmKCAjeCAiID0gJWQg KDB4JTA0eClcbiIsIHgsIHgpOworI2VuZGlmCisKK2VudW0KK3sKKyAgR1JVQl9UR0FfSU1B R0VfVFlQRV9OT05FID0gMCwKKyAgR1JVQl9UR0FfSU1BR0VfVFlQRV9VTkNPTVBSRVNTRURf SU5ERVhDT0xPUiA9IDEsCisgIEdSVUJfVEdBX0lNQUdFX1RZUEVfVU5DT01QUkVTU0VEX1RS VUVDT0xPUiA9IDIsCisgIEdSVUJfVEdBX0lNQUdFX1RZUEVfVU5DT01QUkVTU0VEX0JMQUNL X0FORF9XSElURSA9IDMsCisgIEdSVUJfVEdBX0lNQUdFX1RZUEVfUkxFX0lOREVYQ09MT1Ig PSA5LAorICBHUlVCX1RHQV9JTUFHRV9UWVBFX1JMRV9UUlVFQ09MT1IgPSAxMCwKKyAgR1JV Ql9UR0FfSU1BR0VfVFlQRV9STEVfQkxBQ0tfQU5EX1dISVRFID0gMTEsCit9OworCitlbnVt Cit7CisgIEdSVUJfVEdBX0NPTE9SX01BUF9UWVBFX05PTkUgPSAwLAorICBHUlVCX1RHQV9D T0xPUl9NQVBfVFlQRV9JTkNMVURFRCA9IDEKK307CisKK2VudW0KK3sKKyAgR1JVQl9UR0Ff SU1BR0VfT1JJR0lOX1JJR0hUID0gMHgxMCwKKyAgR1JVQl9UR0FfSU1BR0VfT1JJR0lOX1RP UCAgID0gMHgyMAorfTsKKworc3RydWN0IGdydWJfdGdhX2hlYWRlcgoreworICBncnViX3Vp bnQ4X3QgaWRfbGVuZ3RoOworICBncnViX3VpbnQ4X3QgY29sb3JfbWFwX3R5cGU7CisgIGdy dWJfdWludDhfdCBpbWFnZV90eXBlOworCisgIC8qIENvbG9yIE1hcCBTcGVjaWZpY2F0aW9u LiAgKi8KKyAgZ3J1Yl91aW50MTZfdCBjb2xvcl9tYXBfZmlyc3RfaW5kZXg7CisgIGdydWJf dWludDE2X3QgY29sb3JfbWFwX2xlbmd0aDsKKyAgZ3J1Yl91aW50OF90IGNvbG9yX21hcF9i cHA7CisKKyAgLyogSW1hZ2UgU3BlY2lmaWNhdGlvbi4gICovCisgIGdydWJfdWludDE2X3Qg aW1hZ2VfeF9vcmlnaW47CisgIGdydWJfdWludDE2X3QgaW1hZ2VfeV9vcmlnaW47CisgIGdy dWJfdWludDE2X3QgaW1hZ2Vfd2lkdGg7CisgIGdydWJfdWludDE2X3QgaW1hZ2VfaGVpZ2h0 OworICBncnViX3VpbnQ4X3QgaW1hZ2VfYnBwOworICBncnViX3VpbnQ4X3QgaW1hZ2VfZGVz Y3JpcHRvcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgZ3J1Yl9l cnJfdAordGdhX2xvYWRfdHJ1ZWNvbG9yX3JsZV9SOEc4QjggKHN0cnVjdCBncnViX3ZpZGVv X2JpdG1hcCAqYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBncnViX3RnYV9oZWFkZXIgKmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBncnViX2ZpbGVfdCBmaWxlKQoreworICB1bnNpZ25lZCBpbnQgeDsKKyAgdW5zaWdu ZWQgaW50IHk7CisgIGdydWJfdWludDhfdCB0eXBlOworICBncnViX3VpbnQ4X3QgKnB0cjsK KyAgZ3J1Yl91aW50OF90IHRtcFs0XTsgLyogU2l6ZSBzaG91bGQgYmUgbWF4X2JwcCAvIDgu ICAqLworICBncnViX3VpbnQ4X3QgYnl0ZXNfcGVyX3BpeGVsOworCisgIGJ5dGVzX3Blcl9w aXhlbCA9IGhlYWRlci0+aW1hZ2VfYnBwIC8gODsKKworICBmb3IgKHkgPSAwOyB5IDwgaGVh ZGVyLT5pbWFnZV9oZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICBwdHIgPSBiaXRtYXAtPmRh dGE7CisgICAgICBpZiAoKGhlYWRlci0+aW1hZ2VfZGVzY3JpcHRvciAmIEdSVUJfVEdBX0lN QUdFX09SSUdJTl9UT1ApICE9IDApCisgICAgICAgIHB0ciArPSB5ICogYml0bWFwLT5tb2Rl X2luZm8ucGl0Y2g7CisgICAgICBlbHNlCisgICAgICAgIHB0ciArPSAoaGVhZGVyLT5pbWFn ZV9oZWlnaHQgLSAxIC0geSkgKiBiaXRtYXAtPm1vZGVfaW5mby5waXRjaDsKKworICAgICAg Zm9yICh4ID0gMDsgeCA8IGhlYWRlci0+aW1hZ2Vfd2lkdGg7KQorICAgICAgICB7CisgICAg ICAgICAgaWYgKGdydWJfZmlsZV9yZWFkIChmaWxlLCAoY2hhciAqKSZ0eXBlLCBzaXplb2Yg KHR5cGUpKSAhPSBzaXplb2YodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJu bzsKKworICAgICAgICAgIGlmICh0eXBlICYgMHg4MCkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgLyogUkxFLWVuY29kZWQgcGFja2V0LiAgKi8KKyAgICAgICAgICAgICAgdHlw ZSAmPSAweDdmOworICAgICAgICAgICAgICB0eXBlKys7CisKKyAgICAgICAgICAgICAgaWYg KGdydWJfZmlsZV9yZWFkIChmaWxlLCAoY2hhciAqKSZ0bXBbMF0sIGJ5dGVzX3Blcl9waXhl bCkKKyAgICAgICAgICAgICAgICAgICE9IGJ5dGVzX3Blcl9waXhlbCkKKyAgICAgICAgICAg ICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICAgICAgICAgICAgICB3aGlsZSAodHlwZSkK KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAoeCA8IGhlYWRlci0+ aW1hZ2Vfd2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICBwdHJbMF0gPSB0bXBbMl07CisgICAgICAgICAgICAgICAgICAgICAgcHRyWzFdID0g dG1wWzFdOworICAgICAgICAgICAgICAgICAgICAgIHB0clsyXSA9IHRtcFswXTsKKyAgICAg ICAgICAgICAgICAgICAgICBwdHIgKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgICB0eXBlLS07CisgICAgICAgICAgICAgICAgICB4Kys7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgLyogUkFXLWVuY29kZWQgcGFja2V0LiAgKi8KKyAgICAg ICAgICAgICAgdHlwZSsrOworCisgICAgICAgICAgICAgIHdoaWxlICh0eXBlKQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChncnViX2ZpbGVfcmVhZCAoZmls ZSwgKGNoYXIgKikmdG1wWzBdLCBieXRlc19wZXJfcGl4ZWwpCisgICAgICAgICAgICAgICAg ICAgICAgIT0gYnl0ZXNfcGVyX3BpeGVsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g Z3J1Yl9lcnJubzsKKworICAgICAgICAgICAgICAgICAgaWYgKHggPCBoZWFkZXItPmltYWdl X3dpZHRoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg cHRyWzBdID0gdG1wWzJdOworICAgICAgICAgICAgICAgICAgICAgIHB0clsxXSA9IHRtcFsx XTsKKyAgICAgICAgICAgICAgICAgICAgICBwdHJbMl0gPSB0bXBbMF07CisgICAgICAgICAg ICAgICAgICAgICAgcHRyICs9IDM7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgICAgdHlwZS0tOworICAgICAgICAgICAgICAgICAgeCsrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90Cit0Z2FfbG9hZF90cnVlY29s b3JfcmxlX1I4RzhCOEE4IChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKmJpdG1hcCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3RnYV9oZWFkZXIg KmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfZmlsZV90 IGZpbGUpCit7CisgIHVuc2lnbmVkIGludCB4OworICB1bnNpZ25lZCBpbnQgeTsKKyAgZ3J1 Yl91aW50OF90IHR5cGU7CisgIGdydWJfdWludDhfdCAqcHRyOworICBncnViX3VpbnQ4X3Qg dG1wWzRdOyAvKiBTaXplIHNob3VsZCBiZSBtYXhfYnBwIC8gOC4gICovCisgIGdydWJfdWlu dDhfdCBieXRlc19wZXJfcGl4ZWw7CisKKyAgYnl0ZXNfcGVyX3BpeGVsID0gaGVhZGVyLT5p bWFnZV9icHAgLyA4OworCisgIGZvciAoeSA9IDA7IHkgPCBoZWFkZXItPmltYWdlX2hlaWdo dDsgeSsrKQorICAgIHsKKyAgICAgIHB0ciA9IGJpdG1hcC0+ZGF0YTsKKyAgICAgIGlmICgo aGVhZGVyLT5pbWFnZV9kZXNjcmlwdG9yICYgR1JVQl9UR0FfSU1BR0VfT1JJR0lOX1RPUCkg IT0gMCkKKyAgICAgICAgcHRyICs9IHkgKiBiaXRtYXAtPm1vZGVfaW5mby5waXRjaDsKKyAg ICAgIGVsc2UKKyAgICAgICAgcHRyICs9IChoZWFkZXItPmltYWdlX2hlaWdodCAtIDEgLSB5 KSAqIGJpdG1hcC0+bW9kZV9pbmZvLnBpdGNoOworCisgICAgICBmb3IgKHggPSAwOyB4IDwg aGVhZGVyLT5pbWFnZV93aWR0aDspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZ3J1Yl9m aWxlX3JlYWQgKGZpbGUsIChjaGFyICopJnR5cGUsIHNpemVvZiAodHlwZSkpICE9IHNpemVv Zih0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBncnViX2Vycm5vOworCisgICAgICAgICAg aWYgKHR5cGUgJiAweDgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBSTEUt ZW5jb2RlZCBwYWNrZXQuICAqLworICAgICAgICAgICAgICB0eXBlICY9IDB4N2Y7CisgICAg ICAgICAgICAgIHR5cGUrKzsKKworICAgICAgICAgICAgICBpZiAoZ3J1Yl9maWxlX3JlYWQg KGZpbGUsIChjaGFyICopJnRtcFswXSwgYnl0ZXNfcGVyX3BpeGVsKQorICAgICAgICAgICAg ICAgICAgIT0gYnl0ZXNfcGVyX3BpeGVsKQorICAgICAgICAgICAgICAgIHJldHVybiBncnVi X2Vycm5vOworCisgICAgICAgICAgICAgIHdoaWxlICh0eXBlKQorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgIGlmICh4IDwgaGVhZGVyLT5pbWFnZV93aWR0aCkKKyAg ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHB0clswXSA9IHRt cFsyXTsKKyAgICAgICAgICAgICAgICAgICAgICBwdHJbMV0gPSB0bXBbMV07CisgICAgICAg ICAgICAgICAgICAgICAgcHRyWzJdID0gdG1wWzBdOworICAgICAgICAgICAgICAgICAgICAg IHB0clszXSA9IHRtcFszXTsKKyAgICAgICAgICAgICAgICAgICAgICBwdHIgKz0gNDsKKyAg ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICB0eXBlLS07CisgICAg ICAgICAgICAgICAgICB4Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogUkFXLWVu Y29kZWQgcGFja2V0LiAgKi8KKyAgICAgICAgICAgICAgdHlwZSsrOworCisgICAgICAgICAg ICAgIHdoaWxlICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg IGlmIChncnViX2ZpbGVfcmVhZCAoZmlsZSwgKGNoYXIgKikmdG1wWzBdLCBieXRlc19wZXJf cGl4ZWwpCisgICAgICAgICAgICAgICAgICAgICAgIT0gYnl0ZXNfcGVyX3BpeGVsKQorICAg ICAgICAgICAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICAgICAgICAgICAgICAg ICAgaWYgKHggPCBoZWFkZXItPmltYWdlX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgcHRyWzBdID0gdG1wWzJdOworICAgICAgICAgICAg ICAgICAgICAgIHB0clsxXSA9IHRtcFsxXTsKKyAgICAgICAgICAgICAgICAgICAgICBwdHJb Ml0gPSB0bXBbMF07CisgICAgICAgICAgICAgICAgICAgICAgcHRyWzNdID0gdG1wWzNdOwor ICAgICAgICAgICAgICAgICAgICAgIHB0ciArPSA0OworICAgICAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICAgIHR5cGUtLTsKKyAgICAgICAgICAgICAgICAgIHgrKzsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg IHJldHVybiBHUlVCX0VSUl9OT05FOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAordGdhX2xv YWRfdHJ1ZWNvbG9yX1I4RzhCOCAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFwICpiaXRtYXAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3J1Yl90Z2FfaGVhZGVyICpo ZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX2ZpbGVfdCBmaWxlKQor eworICB1bnNpZ25lZCBpbnQgeDsKKyAgdW5zaWduZWQgaW50IHk7CisgIGdydWJfdWludDhf dCAqcHRyOworICBncnViX3VpbnQ4X3QgdG1wWzRdOyAvKiBTaXplIHNob3VsZCBiZSBtYXhf YnBwIC8gOC4gICovCisgIGdydWJfdWludDhfdCBieXRlc19wZXJfcGl4ZWw7CisKKyAgYnl0 ZXNfcGVyX3BpeGVsID0gaGVhZGVyLT5pbWFnZV9icHAgLyA4OworCisgIGZvciAoeSA9IDA7 IHkgPCBoZWFkZXItPmltYWdlX2hlaWdodDsgeSsrKQorICAgIHsKKyAgICAgIHB0ciA9IGJp dG1hcC0+ZGF0YTsKKyAgICAgIGlmICgoaGVhZGVyLT5pbWFnZV9kZXNjcmlwdG9yICYgR1JV Ql9UR0FfSU1BR0VfT1JJR0lOX1RPUCkgIT0gMCkKKyAgICAgICAgcHRyICs9IHkgKiBiaXRt YXAtPm1vZGVfaW5mby5waXRjaDsKKyAgICAgIGVsc2UKKyAgICAgICAgcHRyICs9IChoZWFk ZXItPmltYWdlX2hlaWdodCAtIDEgLSB5KSAqIGJpdG1hcC0+bW9kZV9pbmZvLnBpdGNoOwor CisgICAgICBmb3IgKHggPSAwOyB4IDwgaGVhZGVyLT5pbWFnZV93aWR0aDsgeCsrKQorICAg ICAgICB7CisgICAgICAgICAgaWYgKGdydWJfZmlsZV9yZWFkIChmaWxlLCAoY2hhciAqKSZ0 bXBbMF0sIGJ5dGVzX3Blcl9waXhlbCkKKyAgICAgICAgICAgICAgIT0gYnl0ZXNfcGVyX3Bp eGVsKQorICAgICAgICAgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAgICAgICAgICBwdHJb MF0gPSB0bXBbMl07CisgICAgICAgICAgcHRyWzFdID0gdG1wWzFdOworICAgICAgICAgIHB0 clsyXSA9IHRtcFswXTsKKworICAgICAgICAgIHB0ciArPSAzOworICAgICAgICB9CisgICAg fQorICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK3Rn YV9sb2FkX3RydWVjb2xvcl9SOEc4QjhBOCAoc3RydWN0IGdydWJfdmlkZW9fYml0bWFwICpi aXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncnViX3RnYV9o ZWFkZXIgKmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9maWxl X3QgZmlsZSkKK3sKKyAgdW5zaWduZWQgaW50IHg7CisgIHVuc2lnbmVkIGludCB5OworICBn cnViX3VpbnQ4X3QgKnB0cjsKKyAgZ3J1Yl91aW50OF90IHRtcFs0XTsgLyogU2l6ZSBzaG91 bGQgYmUgbWF4X2JwcCAvIDguICAqLworICBncnViX3VpbnQ4X3QgYnl0ZXNfcGVyX3BpeGVs OworCisgIGJ5dGVzX3Blcl9waXhlbCA9IGhlYWRlci0+aW1hZ2VfYnBwIC8gODsKKworICBm b3IgKHkgPSAwOyB5IDwgaGVhZGVyLT5pbWFnZV9oZWlnaHQ7IHkrKykKKyAgICB7CisgICAg ICBwdHIgPSBiaXRtYXAtPmRhdGE7CisgICAgICBpZiAoKGhlYWRlci0+aW1hZ2VfZGVzY3Jp cHRvciAmIEdSVUJfVEdBX0lNQUdFX09SSUdJTl9UT1ApICE9IDApCisgICAgICAgIHB0ciAr PSB5ICogYml0bWFwLT5tb2RlX2luZm8ucGl0Y2g7CisgICAgICBlbHNlCisgICAgICAgIHB0 ciArPSAoaGVhZGVyLT5pbWFnZV9oZWlnaHQgLSAxIC0geSkgKiBiaXRtYXAtPm1vZGVfaW5m by5waXRjaDsKKworICAgICAgZm9yICh4ID0gMDsgeCA8IGhlYWRlci0+aW1hZ2Vfd2lkdGg7 IHgrKykKKyAgICAgICAgeworICAgICAgICAgIGlmIChncnViX2ZpbGVfcmVhZCAoZmlsZSwg KGNoYXIgKikmdG1wWzBdLCBieXRlc19wZXJfcGl4ZWwpCisgICAgICAgICAgICAgICE9IGJ5 dGVzX3Blcl9waXhlbCkKKyAgICAgICAgICAgIHJldHVybiBncnViX2Vycm5vOworCisgICAg ICAgICAgcHRyWzBdID0gdG1wWzJdOworICAgICAgICAgIHB0clsxXSA9IHRtcFsxXTsKKyAg ICAgICAgICBwdHJbMl0gPSB0bXBbMF07CisgICAgICAgICAgcHRyWzNdID0gdG1wWzNdOwor CisgICAgICAgICAgcHRyICs9IDQ7CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBHUlVC X0VSUl9OT05FOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl92aWRlb19yZWFkZXJf dGdhIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKipiaXRtYXAsCisgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICBncnViX2ZpbGVfdCBmaWxl OworICBncnViX3NzaXplX3QgcG9zOworICBzdHJ1Y3QgZ3J1Yl90Z2FfaGVhZGVyIGhlYWRl cjsKKyAgaW50IGhhc19hbHBoYTsKKworICBmaWxlID0gZ3J1Yl9maWxlX29wZW4gKGZpbGVu YW1lKTsKKyAgaWYgKCEgZmlsZSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICAvKiBU R0EgU3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCB3ZSBTSE9VTEQgc3RhcnQgYnkgcmVhZGlu ZworICAgICBJRCBmcm9tIGVuZCBvZiBmaWxlLCBidXQgd2UgcmVhbGx5IGRvbid0IGNhcmUg YWJvdXQgdGhhdCBhcyB3ZSBhcmUKKyAgICAgbm90IGdvaW5nIHRvIHN1cHBvcnQgZGV2ZWxv cGVyIGFyZWEgJiBleHRlbnNpb25zIGF0IHRoaXMgcG9pbnQuICAqLworCisgIC8qIFJlYWQg VEdBIGhlYWRlciBmcm9tIGJlZ2luaW5nIG9mIGZpbGUuICAqLworICBpZiAoZ3J1Yl9maWxl X3JlYWQgKGZpbGUsIChjaGFyKikmaGVhZGVyLCBzaXplb2YgKGhlYWRlcikpIAorICAgICAg IT0gc2l6ZW9mIChoZWFkZXIpKQorICAgIHsKKyAgICAgIGdydWJfZmlsZV9jbG9zZSAoZmls ZSk7CisgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICB9CisKKyAgLyogU2tpcCBJRCBm aWVsZC4gICovCisgIHBvcyA9IGdydWJfZmlsZV90ZWxsIChmaWxlKTsKKyAgcG9zICs9IGhl YWRlci5pZF9sZW5ndGg7CisgIGdydWJfZmlsZV9zZWVrIChmaWxlLCBwb3MpOworICBpZiAo Z3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAgIHsKKyAgICAgIGdydWJfZmlsZV9j bG9zZSAoZmlsZSk7CisgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICB9CisKKyNpZiBk ZWZpbmVkKFRHQV9ERUJVRykKKyAgZ3J1Yl9wcmludGYoInRnYTogaGVhZGVyXG4iKTsKKyAg ZHVtcF9pbnRfZmllbGQoaGVhZGVyLmlkX2xlbmd0aCk7CisgIGR1bXBfaW50X2ZpZWxkKGhl YWRlci5jb2xvcl9tYXBfdHlwZSk7CisgIGR1bXBfaW50X2ZpZWxkKGhlYWRlci5pbWFnZV90 eXBlKTsKKyAgZHVtcF9pbnRfZmllbGQoaGVhZGVyLmNvbG9yX21hcF9maXJzdF9pbmRleCk7 CisgIGR1bXBfaW50X2ZpZWxkKGhlYWRlci5jb2xvcl9tYXBfbGVuZ3RoKTsKKyAgZHVtcF9p bnRfZmllbGQoaGVhZGVyLmNvbG9yX21hcF9icHApOworICBkdW1wX2ludF9maWVsZChoZWFk ZXIuaW1hZ2VfeF9vcmlnaW4pOworICBkdW1wX2ludF9maWVsZChoZWFkZXIuaW1hZ2VfeV9v cmlnaW4pOworICBkdW1wX2ludF9maWVsZChoZWFkZXIuaW1hZ2Vfd2lkdGgpOworICBkdW1w X2ludF9maWVsZChoZWFkZXIuaW1hZ2VfaGVpZ2h0KTsKKyAgZHVtcF9pbnRfZmllbGQoaGVh ZGVyLmltYWdlX2JwcCk7CisgIGR1bXBfaW50X2ZpZWxkKGhlYWRlci5pbWFnZV9kZXNjcmlw dG9yKTsKKyNlbmRpZgorCisgIC8qIENoZWNrIHRoYXQgYml0bWFwIGVuY29kaW5nIGlzIHN1 cHBvcnRlZC4gICovCisgIHN3aXRjaCAoaGVhZGVyLmltYWdlX3R5cGUpCisgICAgeworICAg ICAgY2FzZSBHUlVCX1RHQV9JTUFHRV9UWVBFX1VOQ09NUFJFU1NFRF9UUlVFQ09MT1I6Cisg ICAgICBjYXNlIEdSVUJfVEdBX0lNQUdFX1RZUEVfUkxFX1RSVUVDT0xPUjoKKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdydWJfZmlsZV9jbG9zZSAoZmls ZSk7CisgICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBF LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIGJpdG1hcCBmb3Jt YXQgKHVua25vd24gZW5jb2RpbmcpLiIpOworICAgIH0KKworICAvKiBDaGVjayB0aGF0IGJp dG1hcCBkZXB0aCBpcyBzdXBwb3J0ZWQuICAqLworICBzd2l0Y2ggKGhlYWRlci5pbWFnZV9i cHApCisgICAgeworICAgICAgY2FzZSAyNDoKKyAgICAgICAgaGFzX2FscGhhID0gMDsKKyAg ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMzI6CisgICAgICAgIGhhc19hbHBoYSA9IDE7 CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBncnViX2ZpbGVf Y2xvc2UgKGZpbGUpOworICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbnN1cHBvcnRlZCBi aXRtYXAgZm9ybWF0IChicHA9JWQpLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBo ZWFkZXIuaW1hZ2VfYnBwKTsKKyAgICB9CisKKyAgLyogQWxsb2NhdGUgYml0bWFwLiAgSWYg dGhlcmUgaXMgYWxwaGEgaW5mb3JtYXRpb24gc3RvcmUgaXQgdG9vLiAgKi8KKyAgaWYgKGhh c19hbHBoYSkKKyAgICB7CisgICAgICBncnViX3ZpZGVvX2JpdG1hcF9jcmVhdGUgKGJpdG1h cCwgaGVhZGVyLmltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBoZWFkZXIuaW1hZ2VfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHUlVCX1ZJREVPX0JMSVRfRk9STUFUX1I4RzhCOEE4KTsKKyAgICAgIGlmIChncnViX2Vy cm5vICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICBncnViX2ZpbGVf Y2xvc2UgKGZpbGUpOworICAgICAgICAgIHJldHVybiBncnViX2Vycm5vOworICAgICAgICB9 CisKKyAgICAgIC8qIExvYWQgYml0bWFwIGRhdGEuICAqLworICAgICAgc3dpdGNoIChoZWFk ZXIuaW1hZ2VfdHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR1JVQl9UR0FfSU1B R0VfVFlQRV9VTkNPTVBSRVNTRURfVFJVRUNPTE9SOgorICAgICAgICAgICAgdGdhX2xvYWRf dHJ1ZWNvbG9yX1I4RzhCOEE4ICgqYml0bWFwLCAmaGVhZGVyLCBmaWxlKTsKKyAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHUlVCX1RHQV9JTUFHRV9UWVBFX1JMRV9U UlVFQ09MT1I6CisgICAgICAgICAgICB0Z2FfbG9hZF90cnVlY29sb3JfcmxlX1I4RzhCOEE4 ICgqYml0bWFwLCAmaGVhZGVyLCBmaWxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZ3J1Yl92aWRlb19iaXRtYXBfY3Jl YXRlIChiaXRtYXAsIGhlYWRlci5pbWFnZV93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGVhZGVyLmltYWdlX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR1JVQl9WSURFT19CTElUX0ZPUk1BVF9SOEc4QjgpOworICAgICAgaWYg KGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgIGdy dWJfZmlsZV9jbG9zZSAoZmlsZSk7CisgICAgICAgICAgcmV0dXJuIGdydWJfZXJybm87Cisg ICAgICAgIH0KKworICAgICAgLyogTG9hZCBiaXRtYXAgZGF0YS4gICovCisgICAgICBzd2l0 Y2ggKGhlYWRlci5pbWFnZV90eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHUlVC X1RHQV9JTUFHRV9UWVBFX1VOQ09NUFJFU1NFRF9UUlVFQ09MT1I6CisgICAgICAgICAgICB0 Z2FfbG9hZF90cnVlY29sb3JfUjhHOEI4ICgqYml0bWFwLCAmaGVhZGVyLCBmaWxlKTsKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHUlVCX1RHQV9JTUFHRV9UWVBF X1JMRV9UUlVFQ09MT1I6CisgICAgICAgICAgICB0Z2FfbG9hZF90cnVlY29sb3JfcmxlX1I4 RzhCOCAoKmJpdG1hcCwgJmhlYWRlciwgZmlsZSk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgIH0KKworICAvKiBJZiB0aGVyZSB3ZXJlIGxvYWRpbmcgcHJvYmxlLCBk ZXN0cm95IGJpdG1hcC4gICovCisgIGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUp CisgICAgeworICAgICAgZ3J1Yl92aWRlb19iaXRtYXBfZGVzdHJveSAoKmJpdG1hcCk7Cisg ICAgICAqYml0bWFwID0gMDsKKyAgICB9CisKKyAgZ3J1Yl9maWxlX2Nsb3NlIChmaWxlKTsK KyAgcmV0dXJuIGdydWJfZXJybm87Cit9CisKKyNpZiBkZWZpbmVkKFRHQV9ERUJVRykKK3N0 YXRpYyBncnViX2Vycl90CitncnViX2NtZF90Z2F0ZXN0IChzdHJ1Y3QgZ3J1Yl9hcmdfbGlz dCAqc3RhdGUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgICAgICAgICAgICAg aW50IGFyZ2MsIGNoYXIgKiphcmdzKQoreworICBzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAg KmJpdG1hcCA9IDA7CisKKyAgaWYgKGFyZ2MgIT0gMSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiZmlsZSBuYW1lIHJlcXVpcmVkIik7CisKKyAg Z3J1Yl92aWRlb19yZWFkZXJfdGdhICgmYml0bWFwLCBhcmdzWzBdKTsgIAorICBpZiAoZ3J1 Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQorICAgIHJldHVybiBncnViX2Vycm5vOworCisg IGdydWJfdmlkZW9fYml0bWFwX2Rlc3Ryb3kgKGJpdG1hcCk7CisKKyAgcmV0dXJuIEdSVUJf RVJSX05PTkU7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBncnViX3ZpZGVvX2JpdG1h cF9yZWFkZXIgdGdhX3JlYWRlciA9IHsKKyAgLmV4dGVuc2lvbiA9ICIudGdhIiwKKyAgLnJl YWRlciA9IGdydWJfdmlkZW9fcmVhZGVyX3RnYSwKKyAgLm5leHQgPSAwCit9OworCitHUlVC X01PRF9JTklUKHZpZGVvX3JlYWRlcl90Z2EpCit7CisgIGdydWJfdmlkZW9fYml0bWFwX3Jl YWRlcl9yZWdpc3RlciAoJnRnYV9yZWFkZXIpOworI2lmIGRlZmluZWQoVEdBX0RFQlVHKQor ICBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJ0Z2F0ZXN0IiwgZ3J1Yl9jbWRfdGdhdGVzdCwg R1JVQl9DT01NQU5EX0ZMQUdfQk9USCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGdh dGVzdCBGSUxFIiwgIlRlc3RzIGxvYWRpbmcgb2YgVEdBIGJpdG1hcC4iLCAwKTsKKyNlbmRp ZgorfQorCitHUlVCX01PRF9GSU5JKHZpZGVvX3JlYWRlcl90Z2EpCit7CisjaWYgZGVmaW5l ZChUR0FfREVCVUcpCisgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kICgidGdhdGVzdCIpOwor I2VuZGlmCisgIGdydWJfdmlkZW9fYml0bWFwX3JlYWRlcl91bnJlZ2lzdGVyICgmdGdhX3Jl YWRlcik7Cit9Cg== --------------050805050904000304060307--