From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 110772 invoked by alias); 15 May 2016 09:39:33 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 110731 invoked by uid 89); 15 May 2016 09:39:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.5 required=5.0 tests=BAYES_40,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=ta, bytecode, H*r:140.113.235, rn X-HELO: mail-pa0-f47.google.com Received: from mail-pa0-f47.google.com (HELO mail-pa0-f47.google.com) (209.85.220.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 15 May 2016 09:39:21 +0000 Received: by mail-pa0-f47.google.com with SMTP id qo8so12409173pab.1 for ; Sun, 15 May 2016 02:39:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to; bh=vfk0G5NWkZrMtR+lVR98+1pv5S8hF8V4jm1ej2n/hXo=; b=g4p44B2OUB7OheU+dnxqwhePi8KLWqs7RleMeiYRGIgmR1cW82ruPdnAxgmoSrZXXC cQ426Z3J16/3XUY8by6hv0rYsCtmYVczEjwP74DfxhZ9kW93ANtLN78dqzMsRmYLULgr Z6umHB5NdUw4uTx3MITK4f6WJ49Q/yvAsU3mE4Oyb/ISuIhtp7q8feo+Ij+oYnCpkOI/ yRQeT1OXJdn8CDXS9gumihLEVxUY0mUgwiMJAWd4l9Cidb22Vxp+V6vkRBZZytHtxJTU n3dHy7Ej09/XlNdoNiTXFTa4iGoilsZRyCpzsdpu14uAXoWg+8ku1F3UAwCh92aFkt5S JwPA== X-Gm-Message-State: AOPr4FU/bd4DkcOaLnSiLN6D2+mxGicl2dULZR3ZD5jQR5tGAhluhYXkYLlppx2G6tzTmQ== X-Received: by 10.66.65.133 with SMTP id x5mr36995148pas.108.1463305159675; Sun, 15 May 2016 02:39:19 -0700 (PDT) Received: from [0.0.0.0] (alumni.cs.nctu.edu.tw. [140.113.235.116]) by smtp.gmail.com with ESMTPSA id o6sm39466806pfo.64.2016.05.15.02.39.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 May 2016 02:39:18 -0700 (PDT) Subject: Re: [PATCH v2] AndesTech NDS32 port To: gdb-patches@sourceware.org References: <3561f390-ea41-2ee3-a5a9-d870429497c3@gmail.com> From: Yan-Ting Lin Message-ID: Date: Sun, 15 May 2016 09:39:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------66E61FD5D15298DDC4C82F70" X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg00237.txt.bz2 This is a multi-part message in MIME format. --------------66E61FD5D15298DDC4C82F70 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 1636 Hi GDB maintainers and reviewers, Thanks for the review. After reworking, we submit a new patch here. The main modification includes: 1. Document about NDS32 Features in target description is provided. 2. The code to validate FPU registers in target description is rewritten for better match with document. 3. Some unused elements due to this rewrite are removed. 4. Add missing comments for some functions. 5. Use fp_offset to check if reg FP is set in prologue, so unused var use_frame is removed. 6. The unnecessary call to register_remote_support_xml() is removed. 7. Year in copyright declaration is changed to start from 2013, and that is the year we submitted our first patch. 8. Change to top-level configure.ac/configure is removed. They need to be changed manually to enable gdb building. Thanks for your time reviewing our patch again. ChangeLog entries: gdb/: 2016-05-15 Yan-Ting Lin * Makefile.in: Add NDS32. * NEWS: Mention new NDS32 port. * configure.tgt: Add NDS32. * nds32-tdep.c: New file. * nds32-tdep.h: New file. * features/Makefile: Add NDS32. * features/nds32-core.xml: New file. * features/nds32-fpu.xml: New file. * features/nds32-system.xml: New file. * features/nds32.xml: New file. * features/nds32.c: New file (generated). gdb/testsuite/: 2016-05-15 Yan-Ting Lin * gdb.base/float.exp: Add target check for nds32*-*-*. * gdb.xml/tdesc-regs.exp: Set core-regs for nds32*-*-*. gdb/doc/: 2016-05-15 Yan-Ting Lin * gdb.texinfo (Standard Target Features): Document NDS32 features. (NDS32 Features): New Section. --------------66E61FD5D15298DDC4C82F70 Content-Type: text/plain; charset=UTF-8; name="0001-gdb-new-AndesTech-NDS32-port.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-gdb-new-AndesTech-NDS32-port.patch" Content-length: 112322 RnJvbSA0MWVhYmRkZTFhNmYxODNmYzBlNWM2OWNmYTMyZmU5OTExMTdjODg2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZYW4tVGluZyBMaW4g PGN1cnJ5Z3Q1MkBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTQgTWF5IDIwMTYg MjI6Mzc6NTYgKzA4MDAKU3ViamVjdDogW1BBVENIXSBnZGI6IG5ldyBBbmRl c1RlY2ggTkRTMzIgcG9ydAoKLS0tCiBnZGIvTWFrZWZpbGUuaW4gICAgICAg ICAgICAgICAgICAgICAgfCAgICA0ICstCiBnZGIvTkVXUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIGdkYi9jb25maWd1cmUudGd0 ICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKwogZ2RiL2RvYy9nZGIudGV4 aW5mbyAgICAgICAgICAgICAgICAgIHwgICAyMyArCiBnZGIvZmVhdHVyZXMv TWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICAxICsKIGdkYi9mZWF0dXJl cy9uZHMzMi1jb3JlLnhtbCAgICAgICAgICB8ICAgNDQgKwogZ2RiL2ZlYXR1 cmVzL25kczMyLWZwdS54bWwgICAgICAgICAgIHwgICA0MiArCiBnZGIvZmVh dHVyZXMvbmRzMzItc3lzdGVtLnhtbCAgICAgICAgfCAgIDE0ICsKIGdkYi9m ZWF0dXJlcy9uZHMzMi5jICAgICAgICAgICAgICAgICB8ICAgOTIgKysKIGdk Yi9mZWF0dXJlcy9uZHMzMi54bWwgICAgICAgICAgICAgICB8ICAgMTQgKwog Z2RiL25kczMyLXRkZXAuYyAgICAgICAgICAgICAgICAgICAgIHwgMjE5NCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnZGIvbmRzMzIt dGRlcC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDU2ICsKIGdkYi90ZXN0 c3VpdGUvZ2RiLmJhc2UvZmxvYXQuZXhwICAgICB8ICAgIDkgKwogZ2RiL3Rl c3RzdWl0ZS9nZGIueG1sL3RkZXNjLXJlZ3MuZXhwIHwgICAgMyArCiAxNCBm aWxlcyBjaGFuZ2VkLCAyNTA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvZmVhdHVyZXMvbmRzMzItY29y ZS54bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvZmVhdHVyZXMvbmRzMzIt ZnB1LnhtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9mZWF0dXJlcy9uZHMz Mi1zeXN0ZW0ueG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL2ZlYXR1cmVz L25kczMyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvZmVhdHVyZXMvbmRz MzIueG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL25kczMyLXRkZXAuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9uZHMzMi10ZGVwLmgKCmRpZmYgLS1n aXQgYS9nZGIvTWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KaW5kZXgg MmFmNzhhNS4uNDAyNjk1MCAxMDA2NDQKLS0tIGEvZ2RiL01ha2VmaWxlLmlu CisrKyBiL2dkYi9NYWtlZmlsZS5pbgpAQCAtNjkxLDYgKzY5MSw3IEBAIEFM TF9UQVJHRVRfT0JTID0gXAogCW1veGllLXRkZXAubyBcCiAJbXNwNDMwLXRk ZXAubyBcCiAJbXQtdGRlcC5vIFwKKwluZHMzMi10ZGVwLm8gXAogCW5pb3My LXRkZXAubyBuaW9zMi1saW51eC10ZGVwLm8gXAogCW50by10ZGVwLm8gXAog CXBwYy1saW51eC10ZGVwLm8gcHBjZmJzZC10ZGVwLm8gcHBjbmJzZC10ZGVw Lm8gcHBjb2JzZC10ZGVwLm8gIFwKQEAgLTk2Niw3ICs5NjcsNyBAQCBhbWQ2 NC1kYXJ3aW4tdGRlcC5oIGNoYXJzZXQtbGlzdC5oIFwKIGNvbmZpZy9kamdw cC9sYW5naW5mby5oIGNvbmZpZy9kamdwcC9ubF90eXBlcy5oIGRhcndpbi1u YXQuaCBcCiBkaWNvcy10ZGVwLmggZmlsZXN5c3RlbS5oIGdjb3JlLmggZ2Ri X3djaGFyLmggaHBwYWJzZC10ZGVwLmggXAogaTM4Ni1kYXJ3aW4tdGRlcC5o IHg4Ni1uYXQuaCBsaW51eC1yZWNvcmQuaCBtb3hpZS10ZGVwLmggbmlvczIt dGRlcC5oIFwKLWZ0MzItdGRlcC5oIFwKK2Z0MzItdGRlcC5oIG5kczMyLXRk ZXAuaCBcCiBvc2RhdGEuaCBwcm9jZnMuaCBweXRob24vcHktZXZlbnQuaCBw eXRob24vcHktZXZlbnRzLmggcHl0aG9uL3B5LXN0b3BldmVudC5oIFwKIHB5 dGhvbi9weXRob24taW50ZXJuYWwuaCBweXRob24vcHl0aG9uLmggcmF2ZW5z Y2FyLXRocmVhZC5oIHJlY29yZC5oIFwKIHJlY29yZC1mdWxsLmggc29saWIt YWl4LmggXApAQCAtMTcyMyw2ICsxNzI0LDcgQEAgQUxMREVQRklMRVMgPSBc CiAJbWlwc25ic2QtbmF0LmMgbWlwc25ic2QtdGRlcC5jIFwKIAltaXBzNjRv YnNkLW5hdC5jIG1pcHM2NG9ic2QtdGRlcC5jIFwKIAltc3A0MzAtdGRlcC5j IFwKKwluZHMzMi10ZGVwLmMgXAogCW5pb3MyLXRkZXAuYyBuaW9zMi1saW51 eC10ZGVwLmMgXAogCW5ic2QtbmF0LmMgbmJzZC10ZGVwLmMgb2JzZC1uYXQu YyBvYnNkLXRkZXAuYyBcCiAJcG9zaXgtaGRlcC5jIGNvbW1vbi9wb3NpeC1z dHJlcnJvci5jIFwKZGlmZiAtLWdpdCBhL2dkYi9ORVdTIGIvZ2RiL05FV1MK aW5kZXggN2JmMWUxYS4uNzVlOGYxMiAxMDA2NDQKLS0tIGEvZ2RiL05FV1MK KysrIGIvZ2RiL05FV1MKQEAgLTU5LDYgKzU5LDEwIEBAIG1haW50IGluZm8g bGluZS10YWJsZSBSRUdFWFAKICAgaW5jbHVkaW5nIEpJVCBjb21waWxpbmcg ZmFzdCB0cmFjZXBvaW50J3MgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogICBi eXRlY29kZSBpbnRvIG5hdGl2ZSBjb2RlLgogCisqIE5ldyB0YXJnZXRzCisK K0FuZGVzIE5EUzMyCQkJbmRzMzIqLSotZWxmCisKICoqKiBDaGFuZ2VzIGlu IEdEQiA3LjExCiAKICogR0RCIG5vdyBzdXBwb3J0cyBkZWJ1Z2dpbmcga2Vy bmVsLWJhc2VkIHRocmVhZHMgb24gRnJlZUJTRC4KZGlmZiAtLWdpdCBhL2dk Yi9jb25maWd1cmUudGd0IGIvZ2RiL2NvbmZpZ3VyZS50Z3QKaW5kZXggY2Q4 ZTA1ZC4uN2YxYWFjMyAxMDA2NDQKLS0tIGEvZ2RiL2NvbmZpZ3VyZS50Z3QK KysrIGIvZ2RiL2NvbmZpZ3VyZS50Z3QKQEAgLTM5NCw2ICszOTQsMTEgQEAg bXQtKi0qKQogCWdkYl90YXJnZXRfb2JzPSJtdC10ZGVwLm8iCiAJOzsKIAor bmRzMzIqLSotZWxmKQorCSMgVGFyZ2V0OiBBbmRlc1RlY2ggTkRTMzIgY29y ZQorCWdkYl90YXJnZXRfb2JzPSJuZHMzMi10ZGVwLm8iCisJOzsKKwogbmlv czIqLSotbGludXgqKQogCSMgVGFyZ2V0OiBBbHRlcmEgTmlvcyBJSSBydW5u aW5nIExpbnV4CiAJZ2RiX3RhcmdldF9vYnM9Im5pb3MyLXRkZXAubyBuaW9z Mi1saW51eC10ZGVwLm8gc29saWItc3ZyNC5vIFwKZGlmZiAtLWdpdCBhL2dk Yi9kb2MvZ2RiLnRleGluZm8gYi9nZGIvZG9jL2dkYi50ZXhpbmZvCmluZGV4 IGY3NGM0MWMuLmIwNDVlYzkgMTAwNjQ0Ci0tLSBhL2dkYi9kb2MvZ2RiLnRl eGluZm8KKysrIGIvZ2RiL2RvYy9nZGIudGV4aW5mbwpAQCAtNDA3MDEsNiAr NDA3MDEsNyBAQCByZWdpc3RlcnMgdXNpbmcgdGhlIGNhcGl0YWxpemF0aW9u IHVzZWQgaW4gdGhlIGRlc2NyaXB0aW9uLgogKiBNaWNyb0JsYXplIEZlYXR1 cmVzOjoKICogTUlQUyBGZWF0dXJlczo6CiAqIE02OEsgRmVhdHVyZXM6Ogor KiBORFMzMiBGZWF0dXJlczo6CiAqIE5pb3MgSUkgRmVhdHVyZXM6OgogKiBQ b3dlclBDIEZlYXR1cmVzOjoKICogUy8zOTAgYW5kIFN5c3RlbSB6IEZlYXR1 cmVzOjoKQEAgLTQwOTA5LDYgKzQwOTEwLDI4IEBAIFRoaXMgZmVhdHVyZSBp cyBvcHRpb25hbC4gIElmIHByZXNlbnQsIGl0IHNob3VsZCBjb250YWluIHJl Z2lzdGVycwogQHNhbXB7ZnBpYWRkcn0uCiBAZW5kIHRhYmxlCiAKK0Bub2Rl IE5EUzMyIEZlYXR1cmVzCitAc3Vic2VjdGlvbiBORFMzMiBGZWF0dXJlcwor QGNpbmRleCB0YXJnZXQgZGVzY3JpcHRpb25zLCBORFMzMiBmZWF0dXJlcwor CitUaGUgQHNhbXB7b3JnLmdudS5nZGIubmRzMzIuY29yZX0gZmVhdHVyZSBp cyByZXF1aXJlZCBmb3IgTkRTMzIKK3RhcmdldHMuICBJdCBzaG91bGQgY29u dGFpbiBhdCBsZWFzdCByZWdpc3RlcnMgQHNhbXB7cjB9IHRocm91Z2gKK0Bz YW1we3IxMH0sIEBzYW1we3IxNX0sIEBzYW1we2ZwfSwgQHNhbXB7Z3B9LCBA c2FtcHtscH0sIEBzYW1we3NwfSwKK2FuZCBAc2FtcHtwY30uCisKK1RoZSBA c2FtcHtvcmcuZ251LmdkYi5uZHMzMi5mcHV9IGZlYXR1cmUgaXMgb3B0aW9u YWwuICBJZiBwcmVzZW50LAoraXQgc2hvdWxkIGNvbnRhaW4gNjQtYml0IGRv dWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzCitAc2Ft cHtmZDB9IHRocm91Z2ggQGVtcGh7ZmROfSwgd2hpY2ggc2hvdWxkIGJlIEBz YW1we2ZkM30sIEBzYW1we2ZkN30sCitAc2FtcHtmZDE1fSwgb3IgQHNhbXB7 ZmQzMX0gYmFzZWQgb24gdGhlIEZQVSBjb25maWd1cmF0aW9uIGltcGxlbWVu dGVkLgorCitAZW1waHtOb3RlOn0gVGhlIGZpcnN0IHNpeHRlZW4gNjQtYml0 IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQKK3JlZ2lzdGVycyBh cmUgb3ZlcmxhcHBlZCB3aXRoIHRoZSB0aGlydHktdHdvIDMyLWJpdCBzaW5n bGUtcHJlY2lzaW9uCitmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICBUaGUg MzItYml0IHNpbmdsZS1wcmVjaXNpb24gcmVnaXN0ZXJzLCBpZgorbm90IGJl aW5nIGxpc3RlZCBleHBsaWNpdGx5LCB3aWxsIGJlIHN5bnRoZXNpemVkIGZy b20gaGFsdmVzIG9mIHRoZQorb3ZlcmxhcHBpbmcgNjQtYml0IGRvdWJsZS1w cmVjaXNpb24gcmVnaXN0ZXJzLiAgTGlzdGluZyAzMi1iaXQKK3NpbmdsZS1w cmVjaXNpb24gcmVnaXN0ZXJzIGV4cGxpY2l0bHkgaXMgZGVwcmVjYXRlZCwg YW5kIHRoZQorc3VwcG9ydCB0byBpdCBjb3VsZCBiZSB0b3RhbGx5IHJlbW92 ZWQgc29tZSBkYXkuCisKIEBub2RlIE5pb3MgSUkgRmVhdHVyZXMKIEBzdWJz ZWN0aW9uIE5pb3MgSUkgRmVhdHVyZXMKIEBjaW5kZXggdGFyZ2V0IGRlc2Ny aXB0aW9ucywgTmlvcyBJSSBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvZ2RiL2Zl YXR1cmVzL01ha2VmaWxlIGIvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlCmluZGV4 IGU1YzUxNTQuLjgwOWM4MTEgMTAwNjQ0Ci0tLSBhL2dkYi9mZWF0dXJlcy9N YWtlZmlsZQorKysgYi9nZGIvZmVhdHVyZXMvTWFrZWZpbGUKQEAgLTE4OSw2 ICsxODksNyBAQCBYTUxUT0MgPSBcCiAJbWlwcy1saW51eC54bWwgXAogCW1p cHM2NC1kc3AtbGludXgueG1sIFwKIAltaXBzNjQtbGludXgueG1sIFwKKwlu ZHMzMi54bWwgXAogCW5pb3MyLWxpbnV4LnhtbCBcCiAJbmlvczIueG1sIFwK IAlyczYwMDAvcG93ZXJwYy0zMi54bWwgXApkaWZmIC0tZ2l0IGEvZ2RiL2Zl YXR1cmVzL25kczMyLWNvcmUueG1sIGIvZ2RiL2ZlYXR1cmVzL25kczMyLWNv cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjll YTE2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZmVhdHVyZXMvbmRzMzIt Y29yZS54bWwKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4w Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgIENvcHlpbmcgYW5kIGRpc3Ry aWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmlj YXRpb24sCisgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRo b3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorICAgICBub3Rp Y2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICAtLT4KKworPCFE T0NUWVBFIGZlYXR1cmUgU1lTVEVNICJnZGItdGFyZ2V0LmR0ZCI+Cis8ZmVh dHVyZSBuYW1lPSJvcmcuZ251LmdkYi5uZHMzMi5jb3JlIj4KKyAgPHJlZyBu YW1lPSJyMCIgYml0c2l6ZT0iMzIiIHJlZ251bT0iMCIvPgorICA8cmVnIG5h bWU9InIxIiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIyIiBiaXRz aXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIzIiBiaXRzaXplPSIzMiIvPgor ICA8cmVnIG5hbWU9InI0IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9 InI1IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI2IiBiaXRzaXpl PSIzMiIvPgorICA8cmVnIG5hbWU9InI3IiBiaXRzaXplPSIzMiIvPgorICA8 cmVnIG5hbWU9InI4IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI5 IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIxMCIgYml0c2l6ZT0i MzIiLz4KKyAgPHJlZyBuYW1lPSJyMTEiIGJpdHNpemU9IjMyIi8+CisgIDxy ZWcgbmFtZT0icjEyIiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIx MyIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMTQiIGJpdHNpemU9 IjMyIi8+CisgIDxyZWcgbmFtZT0icjE1IiBiaXRzaXplPSIzMiIvPgorICA8 cmVnIG5hbWU9InIxNiIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJy MTciIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjE4IiBiaXRzaXpl PSIzMiIvPgorICA8cmVnIG5hbWU9InIxOSIgYml0c2l6ZT0iMzIiLz4KKyAg PHJlZyBuYW1lPSJyMjAiIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0i cjIxIiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIyMiIgYml0c2l6 ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMjMiIGJpdHNpemU9IjMyIi8+Cisg IDxyZWcgbmFtZT0icjI0IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9 InIyNSIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMjYiIGJpdHNp emU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjI3IiBiaXRzaXplPSIzMiIvPgor ICA8cmVnIG5hbWU9ImZwIiBiaXRzaXplPSIzMiIgdHlwZT0iZGF0YV9wdHIi Lz4KKyAgPHJlZyBuYW1lPSJncCIgYml0c2l6ZT0iMzIiIHR5cGU9ImRhdGFf cHRyIi8+CisgIDxyZWcgbmFtZT0ibHAiIGJpdHNpemU9IjMyIiB0eXBlPSJj b2RlX3B0ciIvPgorICA8cmVnIG5hbWU9InNwIiBiaXRzaXplPSIzMiIgdHlw ZT0iZGF0YV9wdHIiLz4KKworICA8cmVnIG5hbWU9InBjIiBiaXRzaXplPSIz MiIgdHlwZT0iY29kZV9wdHIiLz4KKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBh L2dkYi9mZWF0dXJlcy9uZHMzMi1mcHUueG1sIGIvZ2RiL2ZlYXR1cmVzL25k czMyLWZwdS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYjAxYTRjMAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9mZWF0dXJlcy9u ZHMzMi1mcHUueG1sCkBAIC0wLDAgKzEsNDIgQEAKKzw/eG1sIHZlcnNpb249 IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBk aXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9k aWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0g d2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAg bm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisK KzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgor PGZlYXR1cmUgbmFtZT0ib3JnLmdudS5nZGIubmRzMzIuZnB1Ij4KKyAgPHJl ZyBuYW1lPSJmZDAiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIg Z3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQxIiBiaXRzaXplPSI2 NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVn IG5hbWU9ImZkMiIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBn cm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDMiIGJpdHNpemU9IjY0 IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcg bmFtZT0iZmQ0IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdy b3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkNSIgYml0c2l6ZT0iNjQi IHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBu YW1lPSJmZDYiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3Jv dXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQ3IiBiaXRzaXplPSI2NCIg dHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5h bWU9ImZkOCIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91 cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDkiIGJpdHNpemU9IjY0IiB0 eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFt ZT0iZmQxMCIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91 cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDExIiBiaXRzaXplPSI2NCIg dHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5h bWU9ImZkMTIiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3Jv dXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQxMyIgYml0c2l6ZT0iNjQi IHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBu YW1lPSJmZDE0IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdy b3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMTUiIGJpdHNpemU9IjY0 IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcg bmFtZT0iZmQxNiIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBn cm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDE3IiBiaXRzaXplPSI2 NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVn IG5hbWU9ImZkMTgiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIg Z3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQxOSIgYml0c2l6ZT0i NjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJl ZyBuYW1lPSJmZDIwIiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUi IGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMjEiIGJpdHNpemU9 IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxy ZWcgbmFtZT0iZmQyMiIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91Ymxl IiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDIzIiBiaXRzaXpl PSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8 cmVnIG5hbWU9ImZkMjQiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJs ZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQyNSIgYml0c2l6 ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAg PHJlZyBuYW1lPSJmZDI2IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3Vi bGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMjciIGJpdHNp emU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+Cisg IDxyZWcgbmFtZT0iZmQyOCIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91 YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDI5IiBiaXRz aXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgor ICA8cmVnIG5hbWU9ImZkMzAiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2Rv dWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQzMSIgYml0 c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4K KzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9uZHMzMi1z eXN0ZW0ueG1sIGIvZ2RiL2ZlYXR1cmVzL25kczMyLXN5c3RlbS54bWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlYThhYwotLS0g L2Rldi9udWxsCisrKyBiL2dkYi9mZWF0dXJlcy9uZHMzMi1zeXN0ZW0ueG1s CkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEt LSBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24g b2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAor ICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lh bHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0 aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBm ZWF0dXJlIFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgorPGZlYXR1cmUgbmFt ZT0ib3JnLmdudS5nZGIubmRzMzIuc3lzdGVtIj4KKyAgPHJlZyBuYW1lPSJp cjAiIGJpdHNpemU9IjMyIi8+CisKKyAgPHJlZyBuYW1lPSJpdGIiIGJpdHNp emU9IjMyIi8+CisgIDxyZWcgbmFtZT0iaWZjX2xwIiBiaXRzaXplPSIzMiIv PgorPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL25kczMy LmMgYi9nZGIvZmVhdHVyZXMvbmRzMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4yMWY2M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIv Z2RiL2ZlYXR1cmVzL25kczMyLmMKQEAgLTAsMCArMSw5MiBAQAorLyogVEhJ UyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0 IC0qLSB2aTpzZXQgcm86CisgIE9yaWdpbmFsOiBuZHMzMi54bWwgKi8KKwor I2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJvc2FiaS5oIgorI2luY2x1 ZGUgInRhcmdldC1kZXNjcmlwdGlvbnMuaCIKKworc3RydWN0IHRhcmdldF9k ZXNjICp0ZGVzY19uZHMzMjsKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplX3Rk ZXNjX25kczMyICh2b2lkKQoreworICBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnJl c3VsdCA9IGFsbG9jYXRlX3RhcmdldF9kZXNjcmlwdGlvbiAoKTsKKyAgc3Ry dWN0IHRkZXNjX2ZlYXR1cmUgKmZlYXR1cmU7CisKKyAgc2V0X3RkZXNjX2Fy Y2hpdGVjdHVyZSAocmVzdWx0LCBiZmRfc2Nhbl9hcmNoICgibjFoIikpOwor CisgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAi b3JnLmdudS5nZGIubmRzMzIuY29yZSIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjAiLCAwLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEiLCAxLCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjIi LCAyLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjMiLCAzLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjQiLCA0LCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjUi LCA1LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjYiLCA2LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjciLCA3LCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjgi LCA4LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjkiLCA5LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEwIiwgMTAsIDEsIE5VTEws IDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJy MTEiLCAxMSwgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRl X3JlZyAoZmVhdHVyZSwgInIxMiIsIDEyLCAxLCBOVUxMLCAzMiwgImludCIp OworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEzIiwgMTMsIDEs IE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1 cmUsICJyMTQiLCAxNCwgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2Nf Y3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxNSIsIDE1LCAxLCBOVUxMLCAzMiwg ImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjE2Iiwg MTYsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcg KGZlYXR1cmUsICJyMTciLCAxNywgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAg dGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxOCIsIDE4LCAxLCBOVUxM LCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAi cjE5IiwgMTksIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0 ZV9yZWcgKGZlYXR1cmUsICJyMjAiLCAyMCwgMSwgTlVMTCwgMzIsICJpbnQi KTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIyMSIsIDIxLCAx LCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0 dXJlLCAicjIyIiwgMjIsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNj X2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMjMiLCAyMywgMSwgTlVMTCwgMzIs ICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIyNCIs IDI0LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjI1IiwgMjUsIDEsIE5VTEwsIDMyLCAiaW50Iik7Cisg IHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMjYiLCAyNiwgMSwgTlVM TCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwg InIyNyIsIDI3LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVh dGVfcmVnIChmZWF0dXJlLCAiZnAiLCAyOCwgMSwgTlVMTCwgMzIsICJkYXRh X3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZ3AiLCAy OSwgMSwgTlVMTCwgMzIsICJkYXRhX3B0ciIpOworICB0ZGVzY19jcmVhdGVf cmVnIChmZWF0dXJlLCAibHAiLCAzMCwgMSwgTlVMTCwgMzIsICJjb2RlX3B0 ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAic3AiLCAzMSwg MSwgTlVMTCwgMzIsICJkYXRhX3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicGMiLCAzMiwgMSwgTlVMTCwgMzIsICJjb2RlX3B0ciIp OworCisgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0 LCAib3JnLmdudS5nZGIubmRzMzIuZnB1Iik7CisgIHRkZXNjX2NyZWF0ZV9y ZWcgKGZlYXR1cmUsICJmZDAiLCAzMywgMSwgImZsb2F0IiwgNjQsICJpZWVl X2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQx IiwgMzQsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRl c2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMiIsIDM1LCAxLCAiZmxvYXQi LCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZl YXR1cmUsICJmZDMiLCAzNiwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJs ZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQ0IiwgMzcs IDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3Jl YXRlX3JlZyAoZmVhdHVyZSwgImZkNSIsIDM4LCAxLCAiZmxvYXQiLCA2NCwg ImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUs ICJmZDYiLCAzOSwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOwor ICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQ3IiwgNDAsIDEsICJm bG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3Jl ZyAoZmVhdHVyZSwgImZkOCIsIDQxLCAxLCAiZmxvYXQiLCA2NCwgImllZWVf ZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDki LCA0MiwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVz Y19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQxMCIsIDQzLCAxLCAiZmxvYXQi LCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZl YXR1cmUsICJmZDExIiwgNDQsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3Vi bGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMTIiLCA0 NSwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19j cmVhdGVfcmVnIChmZWF0dXJlLCAiZmQxMyIsIDQ2LCAxLCAiZmxvYXQiLCA2 NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1 cmUsICJmZDE0IiwgNDcsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUi KTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMTUiLCA0OCwg MSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVh dGVfcmVnIChmZWF0dXJlLCAiZmQxNiIsIDQ5LCAxLCAiZmxvYXQiLCA2NCwg ImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUs ICJmZDE3IiwgNTAsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsK KyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMTgiLCA1MSwgMSwg ImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVf cmVnIChmZWF0dXJlLCAiZmQxOSIsIDUyLCAxLCAiZmxvYXQiLCA2NCwgImll ZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJm ZDIwIiwgNTMsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAg dGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMjEiLCA1NCwgMSwgImZs b2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAiZmQyMiIsIDU1LCAxLCAiZmxvYXQiLCA2NCwgImllZWVf ZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDIz IiwgNTYsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRl c2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMjQiLCA1NywgMSwgImZsb2F0 IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChm ZWF0dXJlLCAiZmQyNSIsIDU4LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91 YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDI2Iiwg NTksIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2Nf Y3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMjciLCA2MCwgMSwgImZsb2F0Iiwg NjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0 dXJlLCAiZmQyOCIsIDYxLCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91Ymxl Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDI5IiwgNjIs IDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3Jl YXRlX3JlZyAoZmVhdHVyZSwgImZkMzAiLCA2MywgMSwgImZsb2F0IiwgNjQs ICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJl LCAiZmQzMSIsIDY0LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7 CisKKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQs ICJvcmcuZ251LmdkYi5uZHMzMi5zeXN0ZW0iKTsKKyAgdGRlc2NfY3JlYXRl X3JlZyAoZmVhdHVyZSwgImlyMCIsIDY1LCAxLCBOVUxMLCAzMiwgImludCIp OworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiaXRiIiwgNjYsIDEs IE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1 cmUsICJpZmNfbHAiLCA2NywgMSwgTlVMTCwgMzIsICJpbnQiKTsKKworICB0 ZGVzY19uZHMzMiA9IHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2dkYi9mZWF0 dXJlcy9uZHMzMi54bWwgYi9nZGIvZmVhdHVyZXMvbmRzMzIueG1sCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTkzMTcKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvZmVhdHVyZXMvbmRzMzIueG1sCkBAIC0wLDAg KzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmln aHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBm aWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUg cGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3Zp ZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGlj ZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSB0YXJnZXQgU1lT VEVNICJnZGItdGFyZ2V0LmR0ZCI+Cis8dGFyZ2V0PgorICA8YXJjaGl0ZWN0 dXJlPm5kczMyPC9hcmNoaXRlY3R1cmU+CisgIDx4aTppbmNsdWRlIGhyZWY9 Im5kczMyLWNvcmUueG1sIi8+CisgIDx4aTppbmNsdWRlIGhyZWY9Im5kczMy LWZwdS54bWwiLz4KKyAgPHhpOmluY2x1ZGUgaHJlZj0ibmRzMzItc3lzdGVt LnhtbCIvPgorPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9nZGIvbmRzMzItdGRl cC5jIGIvZ2RiL25kczMyLXRkZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi40OGRkYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L25kczMyLXRkZXAuYwpAQCAtMCwwICsxLDIxOTQgQEAKKy8qIFRhcmdldC1k ZXBlbmRlbnQgY29kZSBmb3IgdGhlIE5EUzMyIGFyY2hpdGVjdHVyZSwgZm9y IEdEQi4KKworICAgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBBbmRl cyBUZWNobm9sb2d5IENvcnBvcmF0aW9uLgorCisgICBUaGlzIGZpbGUgaXMg cGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisK KyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZnJhbWUuaCIKKyNpbmNs dWRlICJmcmFtZS11bndpbmQuaCIKKyNpbmNsdWRlICJmcmFtZS1iYXNlLmgi CisjaW5jbHVkZSAic3ltdGFiLmgiCisjaW5jbHVkZSAiZ2RidHlwZXMuaCIK KyNpbmNsdWRlICJnZGJjb3JlLmgiCisjaW5jbHVkZSAidmFsdWUuaCIKKyNp bmNsdWRlICJyZWdncm91cHMuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgor I2luY2x1ZGUgIm9zYWJpLmgiCisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgor I2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVkZSAiZGlzLWFzbS5oIgor I2luY2x1ZGUgInVzZXItcmVncy5oIgorI2luY2x1ZGUgImVsZi1iZmQuaCIK KyNpbmNsdWRlICJkd2FyZjItZnJhbWUuaCIKKyNpbmNsdWRlICJyZW1vdGUu aCIKKyNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRpb25zLmgiCisKKyNpbmNs dWRlICJuZHMzMi10ZGVwLmgiCisjaW5jbHVkZSAiZWxmL25kczMyLmgiCisj aW5jbHVkZSAib3Bjb2RlL25kczMyLmgiCisjaW5jbHVkZSAiZmVhdHVyZXMv bmRzMzIuYyIKKworLyogU2ltcGxlIG1hY3JvcyBmb3IgaW5zdHJ1Y3Rpb24g YW5hbHlzaXMuICAqLworI2RlZmluZSBDSE9QX0JJVFMoaW5zbiwgbikJKGlu c24gJiB+X19NQVNLIChuKSkKKyNkZWZpbmUgTjMyX0xTTVdfRU5BQkxFNChp bnNuKQkoKChpbnNuKSA+PiA2KSAmIDB4ZikKKyNkZWZpbmUgTjMyX1NNV19B RE0gXAorCU4zMl9UWVBFNCAoTFNNVywgMCwgMCwgMCwgMSwgKE4zMl9MU01X X0FETSA8PCAyKSB8IE4zMl9MU01XX0xTTVcpCisjZGVmaW5lIE4zMl9MTVdf QklNIFwKKwlOMzJfVFlQRTQgKExTTVcsIDAsIDAsIDAsIDAsIChOMzJfTFNN V19CSU0gPDwgMikgfCBOMzJfTFNNV19MU01XKQorI2RlZmluZSBOMzJfRkxE SV9TUCBcCisJTjMyX1RZUEUyIChMREMsIDAsIFJFR19TUCwgMCkKKworZXh0 ZXJuIHZvaWQgX2luaXRpYWxpemVfbmRzMzJfdGRlcCAodm9pZCk7CisKKy8q IFVzZSBhbiBpbnZhbGlkIGFkZHJlc3MgdmFsdWUgYXMgJ25vdCBhdmFpbGFi bGUnIG1hcmtlci4gICovCitlbnVtIHsgUkVHX1VOQVZBSUwgPSAoQ09SRV9B RERSKSAtMSB9OworCisvKiBVc2UgYW4gaW1wb3NzaWJsZSB2YWx1ZSBhcyBp bnZhbGlkIG9mZnNldC4gICovCitlbnVtIHsgSU5WQUxJRF9PRkZTRVQgPSAo Q09SRV9BRERSKSAtMSB9OworCisvKiBJbnN0cnVjdGlvbiBncm91cHMgZm9y IE5EUzMyIGVwaWxvZ3VlIGFuYWx5c2lzLiAgKi8KK2VudW0KK3sKKyAgLyog SW5zdHJ1Y3Rpb25zIHVzZWQgZXZlcnl3aGVyZSwgbm90IG9ubHkgaW4gZXBp bG9ndWUuICAqLworICBJTlNOX05PUk1BTCwKKyAgLyogSW5zdHJ1Y3Rpb25z IHVzZWQgdG8gcmVzZXQgc3AgZm9yIGxvY2FsIHZhcnMsIGFyZ3VtZW50cywg ZXRjLiAgKi8KKyAgSU5TTl9SRVNFVF9TUCwKKyAgLyogSW5zdHJ1Y3Rpb25z IHVzZWQgdG8gcmVjb3ZlciBzYXZlZCByZWdzIGFuZCB0byByZWNvdmVyIHBh ZGRpbmcuICAqLworICBJTlNOX1JFQ09WRVIsCisgIC8qIEluc3RydWN0aW9u cyB1c2VkIHRvIHJldHVybiB0byB0aGUgY2FsbGVyLiAgKi8KKyAgSU5TTl9S RVRVUk4sCisgIC8qIEluc3RydWN0aW9ucyB1c2VkIHRvIHJlY292ZXIgc2F2 ZWQgcmVncyBhbmQgdG8gcmV0dXJuIHRvIHRoZSBjYWxsZXIuICAqLworICBJ TlNOX1JFQ09WRVJfUkVUVVJOLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIg KmNvbnN0IG5kczMyX3JlZ2lzdGVyX25hbWVzW10gPQoreworICAvKiAzMiBH UFJzLiAgKi8KKyAgInIwIiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1 IiwgInI2IiwgInI3IiwKKyAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAi cjEyIiwgInIxMyIsICJyMTQiLCAicjE1IiwKKyAgInIxNiIsICJyMTciLCAi cjE4IiwgInIxOSIsICJyMjAiLCAicjIxIiwgInIyMiIsICJyMjMiLAorICAi cjI0IiwgInIyNSIsICJyMjYiLCAicjI3IiwgImZwIiwgImdwIiwgImxwIiwg InNwIiwKKyAgLyogUEMuICAqLworICAicGMiLAorfTsKKworc3RhdGljIGNv bnN0IGNoYXIgKmNvbnN0IG5kczMyX2Zkcl9yZWdpc3Rlcl9uYW1lc1tdID0K K3sKKyAgImZkMCIsICJmZDEiLCAiZmQyIiwgImZkMyIsICJmZDQiLCAiZmQ1 IiwgImZkNiIsICJmZDciLAorICAiZmQ4IiwgImZkOSIsICJmZDEwIiwgImZk MTEiLCAiZmQxMiIsICJmZDEzIiwgImZkMTQiLCAiZmQxNSIsCisgICJmZDE2 IiwgImZkMTciLCAiZmQxOCIsICJmZDE5IiwgImZkMjAiLCAiZmQyMSIsICJm ZDIyIiwgImZkMjMiLAorICAiZmQyNCIsICJmZDI1IiwgImZkMjYiLCAiZmQy NyIsICJmZDI4IiwgImZkMjkiLCAiZmQzMCIsICJmZDMxIgorfTsKKworc3Rh dGljIGNvbnN0IGNoYXIgKmNvbnN0IG5kczMyX2Zzcl9yZWdpc3Rlcl9uYW1l c1tdID0KK3sKKyAgImZzMCIsICJmczEiLCAiZnMyIiwgImZzMyIsICJmczQi LCAiZnM1IiwgImZzNiIsICJmczciLAorICAiZnM4IiwgImZzOSIsICJmczEw IiwgImZzMTEiLCAiZnMxMiIsICJmczEzIiwgImZzMTQiLCAiZnMxNSIsCisg ICJmczE2IiwgImZzMTciLCAiZnMxOCIsICJmczE5IiwgImZzMjAiLCAiZnMy MSIsICJmczIyIiwgImZzMjMiLAorICAiZnMyNCIsICJmczI1IiwgImZzMjYi LCAiZnMyNyIsICJmczI4IiwgImZzMjkiLCAiZnMzMCIsICJmczMxIgorfTsK KworLyogVGhlIG51bWJlciBvZiByZWdpc3RlcnMgZm9yIGZvdXIgRlBVIGNv bmZpZ3VyYXRpb24gb3B0aW9ucy4gICovCitjb25zdCBpbnQgbnVtX2Zkcl9t YXBbXSA9IHsgNCwgOCwgMTYsIDMyIH07Citjb25zdCBpbnQgbnVtX2Zzcl9t YXBbXSA9IHsgOCwgMTYsIDMyLCAzMiB9OworCisvKiBBbGlhc2VzIGZvciBy ZWdpc3RlcnMuICAqLworc3RhdGljIGNvbnN0IHN0cnVjdAoreworICBjb25z dCBjaGFyICpuYW1lOworICBjb25zdCBjaGFyICphbGlhczsKK30gbmRzMzJf cmVnaXN0ZXJfYWxpYXNlc1tdID0KK3sKKyAgeyJyMTUiLCAidGEifSwKKyAg eyJyMjYiLCAicDAifSwKKyAgeyJyMjciLCAicDEifSwKKyAgeyJmcCIsICJy MjgifSwKKyAgeyJncCIsICJyMjkifSwKKyAgeyJscCIsICJyMzAifSwKKyAg eyJzcCIsICJyMzEifSwKKworICB7ImNyMCIsICJjcHVfdmVyIn0sCisgIHsi Y3IxIiwgImljbV9jZmcifSwKKyAgeyJjcjIiLCAiZGNtX2NmZyJ9LAorICB7 ImNyMyIsICJtbXVfY2ZnIn0sCisgIHsiY3I0IiwgIm1zY19jZmcifSwKKyAg eyJjcjUiLCAiY29yZV9pZCJ9LAorICB7ImNyNiIsICJmdWNvcF9leGlzdCJ9 LAorICB7ImNyNyIsICJtc2NfY2ZnMiJ9LAorCisgIHsiaXIwIiwgInBzdyJ9 LAorICB7ImlyMSIsICJpcHN3In0sCisgIHsiaXIyIiwgInBfcHN3In0sCisg IHsiaXIzIiwgIml2YiJ9LAorICB7ImlyNCIsICJldmEifSwKKyAgeyJpcjUi LCAicF9ldmEifSwKKyAgeyJpcjYiLCAiaXR5cGUifSwKKyAgeyJpcjciLCAi cF9pdHlwZSJ9LAorICB7ImlyOCIsICJtZXJyIn0sCisgIHsiaXI5IiwgImlw YyJ9LAorICB7ImlyMTAiLCAicF9pcGMifSwKKyAgeyJpcjExIiwgIm9pcGMi fSwKKyAgeyJpcjEyIiwgInBfcDAifSwKKyAgeyJpcjEzIiwgInBfcDEifSwK KyAgeyJpcjE0IiwgImludF9tYXNrIn0sCisgIHsiaXIxNSIsICJpbnRfcGVu ZCJ9LAorICB7ImlyMTYiLCAic3BfdXNyIn0sCisgIHsiaXIxNyIsICJzcF9w cml2In0sCisgIHsiaXIxOCIsICJpbnRfcHJpIn0sCisgIHsiaXIxOSIsICJp bnRfY3RybCJ9LAorICB7ImlyMjAiLCAic3BfdXNyMSJ9LAorICB7ImlyMjEi LCAic3BfcHJpdjEifSwKKyAgeyJpcjIyIiwgInNwX3VzcjIifSwKKyAgeyJp cjIzIiwgInNwX3ByaXYyIn0sCisgIHsiaXIyNCIsICJzcF91c3IzIn0sCisg IHsiaXIyNSIsICJzcF9wcml2MyJ9LAorICB7ImlyMjYiLCAiaW50X21hc2sy In0sCisgIHsiaXIyNyIsICJpbnRfcGVuZDIifSwKKyAgeyJpcjI4IiwgImlu dF9wcmkyIn0sCisgIHsiaXIyOSIsICJpbnRfdHJpZ2dlciJ9LAorCisgIHsi bXIwIiwgIm1tdV9jdGwifSwKKyAgeyJtcjEiLCAibDFfcHB0YiJ9LAorICB7 Im1yMiIsICJ0bGJfdnBuIn0sCisgIHsibXIzIiwgInRsYl9kYXRhIn0sCisg IHsibXI0IiwgInRsYl9taXNjIn0sCisgIHsibXI1IiwgInZscHRfaWR4In0s CisgIHsibXI2IiwgImlsbWIifSwKKyAgeyJtcjciLCAiZGxtYiJ9LAorICB7 Im1yOCIsICJjYWNoZV9jdGwifSwKKyAgeyJtcjkiLCAiaHNtcF9zYWRkciJ9 LAorICB7Im1yMTAiLCAiaHNtcF9lYWRkciJ9LAorICB7Im1yMTEiLCAiYmdf cmVnaW9uIn0sCisKKyAgeyJkcjAiLCAiYnBjMCJ9LAorICB7ImRyMSIsICJi cGMxIn0sCisgIHsiZHIyIiwgImJwYzIifSwKKyAgeyJkcjMiLCAiYnBjMyJ9 LAorICB7ImRyNCIsICJicGM0In0sCisgIHsiZHI1IiwgImJwYzUifSwKKyAg eyJkcjYiLCAiYnBjNiJ9LAorICB7ImRyNyIsICJicGM3In0sCisgIHsiZHI4 IiwgImJwYTAifSwKKyAgeyJkcjkiLCAiYnBhMSJ9LAorICB7ImRyMTAiLCAi YnBhMiJ9LAorICB7ImRyMTEiLCAiYnBhMyJ9LAorICB7ImRyMTIiLCAiYnBh NCJ9LAorICB7ImRyMTMiLCAiYnBhNSJ9LAorICB7ImRyMTQiLCAiYnBhNiJ9 LAorICB7ImRyMTUiLCAiYnBhNyJ9LAorICB7ImRyMTYiLCAiYnBhbTAifSwK KyAgeyJkcjE3IiwgImJwYW0xIn0sCisgIHsiZHIxOCIsICJicGFtMiJ9LAor ICB7ImRyMTkiLCAiYnBhbTMifSwKKyAgeyJkcjIwIiwgImJwYW00In0sCisg IHsiZHIyMSIsICJicGFtNSJ9LAorICB7ImRyMjIiLCAiYnBhbTYifSwKKyAg eyJkcjIzIiwgImJwYW03In0sCisgIHsiZHIyNCIsICJicHYwIn0sCisgIHsi ZHIyNSIsICJicHYxIn0sCisgIHsiZHIyNiIsICJicHYyIn0sCisgIHsiZHIy NyIsICJicHYzIn0sCisgIHsiZHIyOCIsICJicHY0In0sCisgIHsiZHIyOSIs ICJicHY1In0sCisgIHsiZHIzMCIsICJicHY2In0sCisgIHsiZHIzMSIsICJi cHY3In0sCisgIHsiZHIzMiIsICJicGNpZDAifSwKKyAgeyJkcjMzIiwgImJw Y2lkMSJ9LAorICB7ImRyMzQiLCAiYnBjaWQyIn0sCisgIHsiZHIzNSIsICJi cGNpZDMifSwKKyAgeyJkcjM2IiwgImJwY2lkNCJ9LAorICB7ImRyMzciLCAi YnBjaWQ1In0sCisgIHsiZHIzOCIsICJicGNpZDYifSwKKyAgeyJkcjM5Iiwg ImJwY2lkNyJ9LAorICB7ImRyNDAiLCAiZWRtX2NmZyJ9LAorICB7ImRyNDEi LCAiZWRtc3cifSwKKyAgeyJkcjQyIiwgImVkbV9jdGwifSwKKyAgeyJkcjQz IiwgImVkbV9kdHIifSwKKyAgeyJkcjQ0IiwgImJwbXRjIn0sCisgIHsiZHI0 NSIsICJkaW1iciJ9LAorICB7ImRyNDYiLCAidGVjcjAifSwKKyAgeyJkcjQ3 IiwgInRlY3IxIn0sCisKKyAgeyJoc3ByMCIsICJoc3BfY3RsIn0sCisgIHsi aHNwcjEiLCAic3BfYm91bmQifSwKKyAgeyJoc3ByMiIsICJzcF9ib3VuZF9w cml2In0sCisKKyAgeyJwZnIwIiwgInBmbWMwIn0sCisgIHsicGZyMSIsICJw Zm1jMSJ9LAorICB7InBmcjIiLCAicGZtYzIifSwKKyAgeyJwZnIzIiwgInBm bV9jdGwifSwKKyAgeyJwZnI0IiwgInBmdF9jdGwifSwKKworICB7ImRtYXIw IiwgImRtYV9jZmcifSwKKyAgeyJkbWFyMSIsICJkbWFfZ2NzdyJ9LAorICB7 ImRtYXIyIiwgImRtYV9jaG5zZWwifSwKKyAgeyJkbWFyMyIsICJkbWFfYWN0 In0sCisgIHsiZG1hcjQiLCAiZG1hX3NldHVwIn0sCisgIHsiZG1hcjUiLCAi ZG1hX2lzYWRkciJ9LAorICB7ImRtYXI2IiwgImRtYV9lc2FkZHIifSwKKyAg eyJkbWFyNyIsICJkbWFfdGNudCJ9LAorICB7ImRtYXI4IiwgImRtYV9zdGF0 dXMifSwKKyAgeyJkbWFyOSIsICJkbWFfMmRzZXQifSwKKyAgeyJkbWFyMTAi LCAiZG1hXzJkc2N0bCJ9LAorICB7ImRtYXIxMSIsICJkbWFfcmNudCJ9LAor ICB7ImRtYXIxMiIsICJkbWFfaHN0YXR1cyJ9LAorCisgIHsicmFjcjAiLCAi cHJ1c3JfYWNjX2N0bCJ9LAorICB7ImZ1Y3ByIiwgImZ1Y29wX2N0bCJ9LAor CisgIHsiaWRyMCIsICJzZHpfY3RsIn0sCisgIHsiaWRyMSIsICJtaXNjX2N0 bCJ9LAorICB7ImlkcjIiLCAiZWNjX21pc2MifSwKKworICB7InNlY3VyMCIs ICJzZmNyIn0sCisgIHsic2VjdXIxIiwgInNpZ24ifSwKKyAgeyJzZWN1cjIi LCAiaXNpZ24ifSwKKyAgeyJzZWN1cjMiLCAicF9pc2lnbiJ9LAorfTsKKwor LyogVmFsdWUgb2YgYSByZWdpc3RlciBhbGlhcy4gIEJBVE9OIGlzIHRoZSBy ZWdudW0gb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAgIHJlZ2lzdGVyLiAgKi8K Kworc3RhdGljIHN0cnVjdCB2YWx1ZSAqCit2YWx1ZV9vZl9uZHMzMl9yZWcg KHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgY29uc3Qgdm9pZCAqYmF0b24p Cit7CisgIHJldHVybiB2YWx1ZV9vZl9yZWdpc3RlciAoKGludCkgKGludHB0 cl90KSBiYXRvbiwgZnJhbWUpOworfQorDAorLyogSW1wbGVtZW50IHRoZSAi ZnJhbWVfYWxpZ24iIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIENP UkVfQUREUgorbmRzMzJfZnJhbWVfYWxpZ24gKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLCBDT1JFX0FERFIgc3ApCit7CisgIC8qIDgtYnl0ZSBhbGlnbmVk LiAgKi8KKyAgcmV0dXJuIGFsaWduX2Rvd24gKHNwLCA4KTsKK30KKworLyog SW1wbGVtZW50IHRoZSAiYnJlYWtwb2ludF9mcm9tX3BjIiBnZGJhcmNoIG1l dGhvZC4KKworICAgVXNlIHRoZSBwcm9ncmFtIGNvdW50ZXIgdG8gZGV0ZXJt aW5lIHRoZSBjb250ZW50cyBhbmQgc2l6ZSBvZiBhCisgICBicmVha3BvaW50 IGluc3RydWN0aW9uLiAgUmV0dXJuIGEgcG9pbnRlciB0byBhIHN0cmluZyBv ZiBieXRlcyB0aGF0CisgICBlbmNvZGUgYSBicmVha3BvaW50IGluc3RydWN0 aW9uLCBzdG9yZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4KKyAgICpM RU5QVFIgYW5kIG9wdGlvbmFsbHkgYWRqdXN0ICpQQ1BUUiB0byBwb2ludCB0 byB0aGUgY29ycmVjdCBtZW1vcnkKKyAgIGxvY2F0aW9uIGZvciBpbnNlcnRp bmcgdGhlIGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgY29uc3QgZ2RiX2J5 dGUgKgorbmRzMzJfYnJlYWtwb2ludF9mcm9tX3BjIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwgQ09SRV9BRERSICpwY3B0ciwKKwkJCSAgaW50ICpsZW5w dHIpCit7CisgIC8qIFRoZSBzYW1lIGluc24gbWFjaGluZSBjb2RlIGlzIHVz ZWQgZm9yIGxpdHRsZS1lbmRpYW4gYW5kIGJpZy1lbmRpYW4uICAqLworICBz dGF0aWMgY29uc3QgZ2RiX2J5dGUgYnJlYWtfaW5zbltdID0geyAweEVBLCAw eDAwIH07CisKKyAgKmxlbnB0ciA9IHNpemVvZiAoYnJlYWtfaW5zbik7Cisg IHJldHVybiBicmVha19pbnNuOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJk d2FyZjJfcmVnX3RvX3JlZ251bSIgZ2RiYXJjaCBtZXRob2QuICAqLworCitz dGF0aWMgaW50CituZHMzMl9kd2FyZjJfcmVnX3RvX3JlZ251bSAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsIGludCBudW0pCit7CisgIHN0cnVjdCBnZGJh cmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworICBj b25zdCBpbnQgRlNSID0gMzg7CisgIGNvbnN0IGludCBGRFIgPSBGU1IgKyAz MjsKKworICBpZiAobnVtID49IDAgJiYgbnVtIDwgMzIpCisgICAgeworICAg ICAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyAoUjAgLSBSMzEpLiAg Ki8KKyAgICAgIHJldHVybiBudW07CisgICAgfQorICBlbHNlIGlmIChudW0g Pj0gRlNSICYmIG51bSA8IEZTUiArIDMyKQorICAgIHsKKyAgICAgIC8qIFNp bmdsZSBwcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIChGUzAg LSBGUzMxKS4gICovCisgICAgICByZXR1cm4gbnVtIC0gRlNSICsgdGRlcC0+ ZnMwX3JlZ251bTsKKyAgICB9CisgIGVsc2UgaWYgKG51bSA+PSBGRFIgJiYg bnVtIDwgRkRSICsgMzIpCisgICAgeworICAgICAgLyogRG91YmxlIHByZWNp c2lvbiBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgKEZEMCAtIEZEMzEpLiAg Ki8KKyAgICAgIHJldHVybiBudW0gLSBGRFIgKyB0ZGVwLT5mZDBfcmVnbnVt OworICAgIH0KKworICAvKiBObyBtYXRjaCwgcmV0dXJuIGEgaW5hY2Nlc3Np YmxlIHJlZ2lzdGVyIG51bWJlci4gICovCisgIHJldHVybiAtMTsKK30KKwwK Ky8qIE5EUzMyIHJlZ2lzdGVyIGdyb3Vwcy4gICovCitzdGF0aWMgc3RydWN0 IHJlZ2dyb3VwICpuZHMzMl9jcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3Qg cmVnZ3JvdXAgKm5kczMyX2lyX3JlZ2dyb3VwOworc3RhdGljIHN0cnVjdCBy ZWdncm91cCAqbmRzMzJfbXJfcmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJl Z2dyb3VwICpuZHMzMl9kcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVn Z3JvdXAgKm5kczMyX3Bmcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVn Z3JvdXAgKm5kczMyX2hzcHJfcmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJl Z2dyb3VwICpuZHMzMl9kbWFyX3JlZ2dyb3VwOworc3RhdGljIHN0cnVjdCBy ZWdncm91cCAqbmRzMzJfcmFjcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3Qg cmVnZ3JvdXAgKm5kczMyX2lkcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3Qg cmVnZ3JvdXAgKm5kczMyX3NlY3VyX3JlZ2dyb3VwOworCitzdGF0aWMgdm9p ZAorbmRzMzJfaW5pdF9yZWdncm91cHMgKHZvaWQpCit7CisgIG5kczMyX2Ny X3JlZ2dyb3VwID0gcmVnZ3JvdXBfbmV3ICgiY3IiLCBVU0VSX1JFR0dST1VQ KTsKKyAgbmRzMzJfaXJfcmVnZ3JvdXAgPSByZWdncm91cF9uZXcgKCJpciIs IFVTRVJfUkVHR1JPVVApOworICBuZHMzMl9tcl9yZWdncm91cCA9IHJlZ2dy b3VwX25ldyAoIm1yIiwgVVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX2RyX3Jl Z2dyb3VwID0gcmVnZ3JvdXBfbmV3ICgiZHIiLCBVU0VSX1JFR0dST1VQKTsK KyAgbmRzMzJfcGZyX3JlZ2dyb3VwID0gcmVnZ3JvdXBfbmV3ICgicGZyIiwg VVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX2hzcHJfcmVnZ3JvdXAgPSByZWdn cm91cF9uZXcgKCJoc3ByIiwgVVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX2Rt YXJfcmVnZ3JvdXAgPSByZWdncm91cF9uZXcgKCJkbWFyIiwgVVNFUl9SRUdH Uk9VUCk7CisgIG5kczMyX3JhY3JfcmVnZ3JvdXAgPSByZWdncm91cF9uZXcg KCJyYWNyIiwgVVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX2lkcl9yZWdncm91 cCA9IHJlZ2dyb3VwX25ldyAoImlkciIsIFVTRVJfUkVHR1JPVVApOworICBu ZHMzMl9zZWN1cl9yZWdncm91cCA9IHJlZ2dyb3VwX25ldyAoInNlY3VyIiwg VVNFUl9SRUdHUk9VUCk7Cit9CisKK3N0YXRpYyB2b2lkCituZHMzMl9hZGRf cmVnZ3JvdXBzIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sKKyAgLyog QWRkIHByZS1kZWZpbmVkIHJlZ2lzdGVyIGdyb3Vwcy4gICovCisgIHJlZ2dy b3VwX2FkZCAoZ2RiYXJjaCwgZ2VuZXJhbF9yZWdncm91cCk7CisgIHJlZ2dy b3VwX2FkZCAoZ2RiYXJjaCwgZmxvYXRfcmVnZ3JvdXApOworICByZWdncm91 cF9hZGQgKGdkYmFyY2gsIHN5c3RlbV9yZWdncm91cCk7CisgIHJlZ2dyb3Vw X2FkZCAoZ2RiYXJjaCwgYWxsX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRk IChnZGJhcmNoLCBzYXZlX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChn ZGJhcmNoLCByZXN0b3JlX3JlZ2dyb3VwKTsKKworICAvKiBBZGQgTkRTMzIg cmVnaXN0ZXIgZ3JvdXBzLiAgKi8KKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNo LCBuZHMzMl9jcl9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJj aCwgbmRzMzJfaXJfcmVnZ3JvdXApOworICByZWdncm91cF9hZGQgKGdkYmFy Y2gsIG5kczMyX21yX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJh cmNoLCBuZHMzMl9kcl9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2Ri YXJjaCwgbmRzMzJfcGZyX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChn ZGJhcmNoLCBuZHMzMl9oc3ByX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRk IChnZGJhcmNoLCBuZHMzMl9kbWFyX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBf YWRkIChnZGJhcmNoLCBuZHMzMl9yYWNyX3JlZ2dyb3VwKTsKKyAgcmVnZ3Jv dXBfYWRkIChnZGJhcmNoLCBuZHMzMl9pZHJfcmVnZ3JvdXApOworICByZWdn cm91cF9hZGQgKGdkYmFyY2gsIG5kczMyX3NlY3VyX3JlZ2dyb3VwKTsKK30K KworLyogSW1wbGVtZW50IHRoZSAicmVnaXN0ZXJfcmVnZ3JvdXBfcCIgZ2Ri YXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgaW50CituZHMzMl9yZWdpc3Rl cl9yZWdncm91cF9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJl Z251bSwKKwkJCSAgIHN0cnVjdCByZWdncm91cCAqcmVnZ3JvdXApCit7Cisg IGNvbnN0IGNoYXIgKnJlZ19uYW1lOworICBjb25zdCBjaGFyICpncm91cF9u YW1lOworICBpbnQgcmV0OworCisgIGlmIChyZWdncm91cCA9PSBhbGxfcmVn Z3JvdXApCisgICAgcmV0dXJuIDE7CisKKyAgLyogR2VuZXJhbCByZWdncm91 cCBjb250YWlucyBvbmx5IEdQUnMgYW5kIFBDLiAgKi8KKyAgaWYgKHJlZ2dy b3VwID09IGdlbmVyYWxfcmVnZ3JvdXApCisgICAgcmV0dXJuIHJlZ251bSA8 PSBORFMzMl9QQ19SRUdOVU07CisKKyAgaWYgKHJlZ2dyb3VwID09IGZsb2F0 X3JlZ2dyb3VwIHx8IHJlZ2dyb3VwID09IHNhdmVfcmVnZ3JvdXAKKyAgICAg IHx8IHJlZ2dyb3VwID09IHJlc3RvcmVfcmVnZ3JvdXApCisgICAgeworICAg ICAgcmV0ID0gdGRlc2NfcmVnaXN0ZXJfaW5fcmVnZ3JvdXBfcCAoZ2RiYXJj aCwgcmVnbnVtLCByZWdncm91cCk7CisgICAgICBpZiAocmV0ICE9IC0xKQor CXJldHVybiByZXQ7CisKKyAgICAgIHJldHVybiBkZWZhdWx0X3JlZ2lzdGVy X3JlZ2dyb3VwX3AgKGdkYmFyY2gsIHJlZ251bSwgcmVnZ3JvdXApOworICAg IH0KKworICBpZiAocmVnZ3JvdXAgPT0gc3lzdGVtX3JlZ2dyb3VwKQorICAg IHJldHVybiAocmVnbnVtID4gTkRTMzJfUENfUkVHTlVNKQorCSAgICAmJiAh bmRzMzJfcmVnaXN0ZXJfcmVnZ3JvdXBfcCAoZ2RiYXJjaCwgcmVnbnVtLCBm bG9hdF9yZWdncm91cCk7CisKKyAgLyogVGhlIE5EUzMyIHJlZ2dyb3VwIGNv bnRhaW5zIHJlZ2lzdGVycyB3aG9zZSBuYW1lIGlzIHByZWZpeGVkCisgICAg IGJ5IHJlZ2dyb3VwIG5hbWUuICAqLworICByZWdfbmFtZSA9IGdkYmFyY2hf cmVnaXN0ZXJfbmFtZSAoZ2RiYXJjaCwgcmVnbnVtKTsKKyAgZ3JvdXBfbmFt ZSA9IHJlZ2dyb3VwX25hbWUgKHJlZ2dyb3VwKTsKKyAgcmV0dXJuICFzdHJu Y21wIChyZWdfbmFtZSwgZ3JvdXBfbmFtZSwgc3RybGVuIChncm91cF9uYW1l KSk7Cit9CisMCisvKiBJbXBsZW1lbnQgdGhlICJwc2V1ZG9fcmVnaXN0ZXJf dHlwZSIgdGRlc2NfYXJjaF9kYXRhIG1ldGhvZC4gICovCisKK3N0YXRpYyBz dHJ1Y3QgdHlwZSAqCituZHMzMl9wc2V1ZG9fcmVnaXN0ZXJfdHlwZSAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0pCit7CisgIHJlZ251 bSAtPSBnZGJhcmNoX251bV9yZWdzIChnZGJhcmNoKTsKKworICAvKiBDdXJy ZW50bHksIG9ubHkgRlNScyBjb3VsZCBiZSBkZWZpbmVkIGFzIHBzZXVkbyBy ZWdpc3RlcnMuICAqLworICBpZiAocmVnbnVtIDwgZ2RiYXJjaF9udW1fcHNl dWRvX3JlZ3MgKGdkYmFyY2gpKQorICAgIHJldHVybiBhcmNoX2Zsb2F0X3R5 cGUgKGdkYmFyY2gsIC0xLCAiYnVpbHRpbl90eXBlX2llZWVfc2luZ2xlIiwK KwkJCSAgICBmbG9hdGZvcm1hdHNfaWVlZV9zaW5nbGUpOworCisgIHdhcm5p bmcgKF8oIlVua25vd24gbmRzMzIgcHNldWRvIHJlZ2lzdGVyICVkLiIpLCBy ZWdudW0pOworICByZXR1cm4gTlVMTDsKK30KKworLyogSW1wbGVtZW50IHRo ZSAicHNldWRvX3JlZ2lzdGVyX25hbWUiIHRkZXNjX2FyY2hfZGF0YSBtZXRo b2QuICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCituZHMzMl9wc2V1ZG9f cmVnaXN0ZXJfbmFtZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCBy ZWdudW0pCit7CisgIHJlZ251bSAtPSBnZGJhcmNoX251bV9yZWdzIChnZGJh cmNoKTsKKworICAvKiBDdXJyZW50bHksIG9ubHkgRlNScyBjb3VsZCBiZSBk ZWZpbmVkIGFzIHBzZXVkbyByZWdpc3RlcnMuICAqLworICBpZiAocmVnbnVt IDwgZ2RiYXJjaF9udW1fcHNldWRvX3JlZ3MgKGdkYmFyY2gpKQorICAgIHJl dHVybiBuZHMzMl9mc3JfcmVnaXN0ZXJfbmFtZXNbcmVnbnVtXTsKKworICB3 YXJuaW5nIChfKCJVbmtub3duIG5kczMyIHBzZXVkbyByZWdpc3RlciAlZC4i KSwgcmVnbnVtKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEltcGxlbWVu dCB0aGUgInBzZXVkb19yZWdpc3Rlcl9yZWFkIiBnZGJhcmNoIG1ldGhvZC4g ICovCisKK3N0YXRpYyBlbnVtIHJlZ2lzdGVyX3N0YXR1cworbmRzMzJfcHNl dWRvX3JlZ2lzdGVyX3JlYWQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAor CQkJICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0s CisJCQkgICAgZ2RiX2J5dGUgKmJ1ZikKK3sKKyAgc3RydWN0IGdkYmFyY2hf dGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisgIGdkYl9i eXRlIHJlZ19idWZbOF07CisgIGludCBvZmZzZXQsIGZkcl9yZWdudW07Cisg IGVudW0gcmVnaXN0ZXJfc3RhdHVzIHN0YXR1cyA9IFJFR19VTktOT1dOOwor CisgIC8qIFNhbml0eSBjaGVjay4gICovCisgIGlmICh0ZGVwLT5mcHVfZnJl ZyA9PSAtMSB8fCB0ZGVwLT51c2VfcHNldWRvX2ZzcnMgPT0gMCkKKyAgICBy ZXR1cm4gc3RhdHVzOworCisgIHJlZ251bSAtPSBnZGJhcmNoX251bV9yZWdz IChnZGJhcmNoKTsKKworICAvKiBDdXJyZW50bHksIG9ubHkgRlNScyBjb3Vs ZCBiZSBkZWZpbmVkIGFzIHBzZXVkbyByZWdpc3RlcnMuICAqLworICBpZiAo cmVnbnVtIDwgZ2RiYXJjaF9udW1fcHNldWRvX3JlZ3MgKGdkYmFyY2gpKQor ICAgIHsKKyAgICAgIC8qIGZzMCBpcyBhbHdheXMgdGhlIG1vc3Qgc2lnbmlm aWNhbnQgaGFsZiBvZiBmZDAuICAqLworICAgICAgaWYgKGdkYmFyY2hfYnl0 ZV9vcmRlciAoZ2RiYXJjaCkgPT0gQkZEX0VORElBTl9CSUcpCisJb2Zmc2V0 ID0gKHJlZ251bSAmIDEpID8gNCA6IDA7CisgICAgICBlbHNlCisJb2Zmc2V0 ID0gKHJlZ251bSAmIDEpID8gMCA6IDQ7CisKKyAgICAgIGZkcl9yZWdudW0g PSB0ZGVwLT5mZDBfcmVnbnVtICsgKHJlZ251bSA+PiAxKTsKKyAgICAgIHN0 YXR1cyA9IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgZmRyX3JlZ251 bSwgcmVnX2J1Zik7CisgICAgICBpZiAoc3RhdHVzID09IFJFR19WQUxJRCkK KwltZW1jcHkgKGJ1ZiwgcmVnX2J1ZiArIG9mZnNldCwgNCk7CisgICAgfQor CisgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInBz ZXVkb19yZWdpc3Rlcl93cml0ZSIgZ2RiYXJjaCBtZXRob2QuICAqLworCitz dGF0aWMgdm9pZAorbmRzMzJfcHNldWRvX3JlZ2lzdGVyX3dyaXRlIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKwkJCSAgICAgc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgaW50IHJlZ251bSwKKwkJCSAgICAgY29uc3QgZ2RiX2J5 dGUgKmJ1ZikKK3sKKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdk YmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisgIGdkYl9ieXRlIHJlZ19idWZbOF07 CisgIGludCBvZmZzZXQsIGZkcl9yZWdudW07CisKKyAgLyogU2FuaXR5IGNo ZWNrLiAgKi8KKyAgaWYgKHRkZXAtPmZwdV9mcmVnID09IC0xIHx8IHRkZXAt PnVzZV9wc2V1ZG9fZnNycyA9PSAwKQorICAgIHJldHVybjsKKworICByZWdu dW0gLT0gZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCk7CisKKyAgLyogQ3Vy cmVudGx5LCBvbmx5IEZTUnMgY291bGQgYmUgZGVmaW5lZCBhcyBwc2V1ZG8g cmVnaXN0ZXJzLiAgKi8KKyAgaWYgKHJlZ251bSA8IGdkYmFyY2hfbnVtX3Bz ZXVkb19yZWdzIChnZGJhcmNoKSkKKyAgICB7CisgICAgICAvKiBmczAgaXMg YWx3YXlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGhhbGYgb2YgZmQwLiAgKi8K KyAgICAgIGlmIChnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpID09IEJG RF9FTkRJQU5fQklHKQorCW9mZnNldCA9IChyZWdudW0gJiAxKSA/IDQgOiAw OworICAgICAgZWxzZQorCW9mZnNldCA9IChyZWdudW0gJiAxKSA/IDAgOiA0 OworCisgICAgICBmZHJfcmVnbnVtID0gdGRlcC0+ZmQwX3JlZ251bSArIChy ZWdudW0gPj4gMSk7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIGZkcl9yZWdudW0sIHJlZ19idWYpOworICAgICAgbWVtY3B5IChyZWdf YnVmICsgb2Zmc2V0LCBidWYsIDQpOworICAgICAgcmVnY2FjaGVfcmF3X3dy aXRlIChyZWdjYWNoZSwgZmRyX3JlZ251bSwgcmVnX2J1Zik7CisgICAgfQor fQorDAorLyogSGVscGVyIGZ1bmN0aW9uIGZvciBORFMzMiBBQkkuICBSZXR1 cm4gdHJ1ZSBpZiBGUFJzIGNhbiBiZSB1c2VkCisgICB0byBwYXNzIGZ1bmN0 aW9uIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlLiAgKi8KKworc3RhdGlj IGludAorbmRzMzJfYWJpX3VzZV9mcHIgKGludCBhYmkpCit7CisgIHJldHVy biBhYmkgPT0gRV9ORFNfQUJJX1YyRlBfUExVUzsKK30KKworLyogSGVscGVy IGZ1bmN0aW9uIGZvciBORFMzMiBBQkkuICBSZXR1cm4gdHJ1ZSBpZiBHUFJz IGFuZCBzdGFjaworICAgY2FuIGJlIHVzZWQgdG9nZXRoZXIgdG8gcGFzcyBh biBhcmd1bWVudC4gICovCisKK3N0YXRpYyBpbnQKK25kczMyX2FiaV9zcGxp dCAoaW50IGFiaSkKK3sKKyAgcmV0dXJuIGFiaSA9PSBFX05EU19BQklfQUFC STsKK30KKworI2RlZmluZSBORFMzMl9OVU1fU0FWRURfUkVHUyAoTkRTMzJf TFBfUkVHTlVNICsgMSkKKworc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlCit7 CisgIC8qIFRoZSBwcmV2aW91cyBmcmFtZSdzIGlubmVyIG1vc3Qgc3RhY2sg YWRkcmVzcy4gIFVzZWQgYXMgdGhpcworICAgICBmcmFtZSBJRCdzIHN0YWNr X2FkZHIuICAqLworICBDT1JFX0FERFIgcHJldl9zcDsKKworICAvKiBUaGUg ZnJhbWUncyBiYXNlLCBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGhpZ2gtbGV2 ZWwgZGVidWcgaW5mby4gICovCisgIENPUkVfQUREUiBiYXNlOworCisgIC8q IER1cmluZyBwcm9sb2d1ZSBhbmFseXNpcywga2VlcCBob3cgZmFyIHRoZSBT UCBhbmQgRlAgaGF2ZSBiZWVuIG9mZnNldAorICAgICBmcm9tIHRoZSBzdGFy dCBvZiB0aGUgc3RhY2sgZnJhbWUgKGFzIGRlZmluZWQgYnkgdGhlIHByZXZp b3VzIGZyYW1lJ3MKKyAgICAgc3RhY2sgcG9pbnRlcikuCisgICAgIER1cmlu ZyBlcGlsb2d1ZSBhbmFseXNpcywga2VlcCBob3cgZmFyIHRoZSBTUCBoYXMg YmVlbiBvZmZzZXQgZnJvbSB0aGUKKyAgICAgY3VycmVudCBzdGFjayBwb2lu dGVyLiAgKi8KKyAgQ09SRV9BRERSIHNwX29mZnNldDsKKyAgQ09SRV9BRERS IGZwX29mZnNldDsKKworICAvKiBUaGUgYWRkcmVzcyBvZiB0aGUgZmlyc3Qg aW5zdHJ1Y3Rpb24gaW4gdGhpcyBmdW5jdGlvbi4gICovCisgIENPUkVfQURE UiBwYzsKKworICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLworICBDT1JFX0FE RFIgc2F2ZWRfcmVnc1tORFMzMl9OVU1fU0FWRURfUkVHU107Cit9OworCisv KiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGZyYW1lIGNhY2hlLiAgKi8K Kworc3RhdGljIHN0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqCituZHMzMl9h bGxvY19mcmFtZV9jYWNoZSAodm9pZCkKK3sKKyAgc3RydWN0IG5kczMyX2Zy YW1lX2NhY2hlICpjYWNoZTsKKyAgaW50IGk7CisKKyAgY2FjaGUgPSBGUkFN RV9PQlNUQUNLX1pBTExPQyAoc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlKTsK KworICAvKiBJbml0aWFsaXplIGZwX29mZnNldCB0byBjaGVjayBpZiBGUCBp cyBzZXQgaW4gcHJvbG9ndWUuICAqLworICBjYWNoZS0+ZnBfb2Zmc2V0ID0g SU5WQUxJRF9PRkZTRVQ7CisKKyAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgV2Ug aW5pdGlhbGl6ZSB0aGVzZSB0byAtMSBzaW5jZSB6ZXJvIGlzIGEgdmFsaWQK KyAgICAgb2Zmc2V0LiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5EUzMyX05V TV9TQVZFRF9SRUdTOyBpKyspCisgICAgY2FjaGUtPnNhdmVkX3JlZ3NbaV0g PSBSRUdfVU5BVkFJTDsKKworICByZXR1cm4gY2FjaGU7Cit9CisKKy8qIEhl bHBlciBmdW5jdGlvbiBmb3IgaW5zdHJ1Y3Rpb25zIHVzZWQgdG8gcHVzaCBt dWx0aXBsZSB3b3Jkcy4gICovCisKK3N0YXRpYyB2b2lkCituZHMzMl9wdXNo X211bHRpcGxlX3dvcmRzIChzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKmNh Y2hlLCBpbnQgcmIsIGludCByZSwKKwkJCSAgIGludCBlbmFibGU0KQorewor ICBDT1JFX0FERFIgc3Bfb2Zmc2V0ID0gY2FjaGUtPnNwX29mZnNldDsKKyAg aW50IGk7CisKKyAgLyogQ2hlY2sgTFAsIEdQLCBGUCBpbiBlbmFibGU0LiAg Ki8KKyAgZm9yIChpID0gMTsgaSA8PSAzOyBpKyspCisgICAgeworICAgICAg aWYgKChlbmFibGU0ID4+IGkpICYgMHgxKQorCXsKKwkgIHNwX29mZnNldCAr PSA0OworCSAgY2FjaGUtPnNhdmVkX3JlZ3NbTkRTMzJfU1BfUkVHTlVNIC0g aV0gPSBzcF9vZmZzZXQ7CisJfQorICAgIH0KKworICAvKiBTa2lwIGNhc2Ug d2hlcmUgcmUgPT0gcmIgPT0gc3AuICAqLworICBpZiAoKHJiIDwgUkVHX0ZQ KSAmJiAocmUgPCBSRUdfRlApKQorICAgIHsKKyAgICAgIGZvciAoaSA9IHJl OyBpID49IHJiOyBpLS0pCisJeworCSAgc3Bfb2Zmc2V0ICs9IDQ7CisJICBj YWNoZS0+c2F2ZWRfcmVnc1tpXSA9IHNwX29mZnNldDsKKwl9CisgICAgfQor CisgIC8qIEZvciBzcCwgdXBkYXRlIHRoZSBvZmZzZXQuICAqLworICBjYWNo ZS0+c3Bfb2Zmc2V0ID0gc3Bfb2Zmc2V0OworfQorCisvKiBBbmFseXplIHRo ZSBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBnaXZlbiBhZGRyZXNzIHJhbmdl LiAgSWYgQ0FDSEUKKyAgIGlzIG5vbi1OVUxMLCBmaWxsIGl0IGluLiAgUmV0 dXJuIHRoZSBmaXJzdCBhZGRyZXNzIGJleW9uZCB0aGUgZ2l2ZW4KKyAgIGFk ZHJlc3MgcmFuZ2UuICBJZiBDQUNIRSBpcyBOVUxMLCByZXR1cm4gdGhlIGZp cnN0IGFkZHJlc3Mgbm90CisgICByZWNvZ25pemVkIGFzIGEgcHJvbG9ndWUg aW5zdHJ1Y3Rpb24uICAqLworCitzdGF0aWMgQ09SRV9BRERSCituZHMzMl9h bmFseXplX3Byb2xvZ3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09S RV9BRERSIHBjLAorCQkJQ09SRV9BRERSIGxpbWl0X3BjLCBzdHJ1Y3QgbmRz MzJfZnJhbWVfY2FjaGUgKmNhY2hlKQoreworICBzdHJ1Y3QgZ2RiYXJjaF90 ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKyAgaW50IGFi aV91c2VfZnByID0gbmRzMzJfYWJpX3VzZV9mcHIgKHRkZXAtPmFiaSk7Cisg IC8qIEN1cnJlbnQgc2Nhbm5pbmcgc3RhdHVzLiAgKi8KKyAgaW50IGluX3By b2xvZ3VlX2JiID0gMDsKKyAgaW50IHZhbF90YSA9IDA7CisgIHVpbnQzMl90 IGluc24sIGluc25fbGVuOworCisgIGZvciAoOyBwYyA8IGxpbWl0X3BjOyBw YyArPSBpbnNuX2xlbikKKyAgICB7CisgICAgICBpbnNuID0gcmVhZF9tZW1v cnlfdW5zaWduZWRfaW50ZWdlciAocGMsIDQsIEJGRF9FTkRJQU5fQklHKTsK KworICAgICAgaWYgKChpbnNuICYgMHg4MDAwMDAwMCkgPT0gMCkKKwl7CisJ ICAvKiAzMi1iaXQgaW5zdHJ1Y3Rpb24gKi8KKwkgIGluc25fbGVuID0gNDsK KworCSAgaWYgKENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAo QURESSwgUkVHX1NQLCBSRUdfU1AsIDApKQorCSAgICB7CisJICAgICAgLyog YWRkaSAkc3AsICRzcCwgaW1tMTVzICovCisJICAgICAgaW50IGltbTE1cyA9 IE4zMl9JTU0xNVMgKGluc24pOworCisJICAgICAgaWYgKGltbTE1cyA8IDAp CisJCXsKKwkJICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJICAgIGNhY2hlLT5z cF9vZmZzZXQgKz0gLWltbTE1czsKKworCQkgIGluX3Byb2xvZ3VlX2JiID0g MTsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChD SE9QX0JJVFMgKGluc24sIDE1KSA9PSBOMzJfVFlQRTIgKEFEREksIFJFR19G UCwgUkVHX1NQLCAwKSkKKwkgICAgeworCSAgICAgIC8qIGFkZGkgJGZwLCAk c3AsIGltbTE1cyAqLworCSAgICAgIGludCBpbW0xNXMgPSBOMzJfSU1NMTVT IChpbnNuKTsKKworCSAgICAgIGlmIChpbW0xNXMgPiAwKQorCQl7CisJCSAg aWYgKGNhY2hlICE9IE5VTEwpCisJCSAgICBjYWNoZS0+ZnBfb2Zmc2V0ID0g Y2FjaGUtPnNwX29mZnNldCAtIGltbTE1czsKKworCQkgIGluX3Byb2xvZ3Vl X2JiID0gMTsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICBlbHNl IGlmICgoaW5zbiAmIH4oX19NQVNLICgxOSkgPDwgNikpID09IE4zMl9TTVdf QURNCisJCSAgICYmIE4zMl9SQTUgKGluc24pID09IFJFR19TUCkKKwkgICAg eworCSAgICAgIC8qIHNtdy5hZG0gUmIsIFskc3BdLCBSZSwgZW5hYmxlNCAq LworCSAgICAgIGlmIChjYWNoZSAhPSBOVUxMKQorCQluZHMzMl9wdXNoX211 bHRpcGxlX3dvcmRzIChjYWNoZSwgTjMyX1JUNSAoaW5zbiksCisJCQkJCSAg IE4zMl9SQjUgKGluc24pLAorCQkJCQkgICBOMzJfTFNNV19FTkFCTEU0IChp bnNuKSk7CisJICAgICAgaW5fcHJvbG9ndWVfYmIgPSAxOworCSAgICAgIGNv bnRpbnVlOworCSAgICB9CisJICBlbHNlIGlmIChpbnNuID09IE4zMl9BTFUx IChBREQsIFJFR19TUCwgUkVHX1NQLCBSRUdfVEEpCisJCSAgIHx8IGluc24g PT0gTjMyX0FMVTEgKEFERCwgUkVHX1NQLCBSRUdfVEEsIFJFR19TUCkpCisJ ICAgIHsKKwkgICAgICAvKiBhZGQgJHNwLCAkc3AsICR0YSAqLworCSAgICAg IC8qIGFkZCAkc3AsICR0YSwgJHNwICovCisJICAgICAgaWYgKHZhbF90YSA8 IDApCisJCXsKKwkJICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJICAgIGNhY2hl LT5zcF9vZmZzZXQgKz0gLXZhbF90YTsKKworCQkgIGluX3Byb2xvZ3VlX2Ji ID0gMTsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlm IChDSE9QX0JJVFMgKGluc24sIDIwKSA9PSBOMzJfVFlQRTEgKE1PVkksIFJF R19UQSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBtb3ZpICR0YSwgaW1tMjBz ICovCisJICAgICAgaWYgKGNhY2hlICE9IE5VTEwpCisJCXZhbF90YSA9IE4z Ml9JTU0yMFMgKGluc24pOworCisJICAgICAgY29udGludWU7CisJICAgIH0K KwkgIGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMjApID09IE4zMl9UWVBF MSAoU0VUSEksIFJFR19UQSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBzZXRo aSAkdGEsIGltbTIwdSAqLworCSAgICAgIGlmIChjYWNoZSAhPSBOVUxMKQor CQl2YWxfdGEgPSBOMzJfSU1NMjBVIChpbnNuKSA8PCAxMjsKKworCSAgICAg IGNvbnRpbnVlOworCSAgICB9CisJICBlbHNlIGlmIChDSE9QX0JJVFMgKGlu c24sIDE1KSA9PSBOMzJfVFlQRTIgKE9SSSwgUkVHX1RBLCBSRUdfVEEsIDAp KQorCSAgICB7CisJICAgICAgLyogb3JpICR0YSwgJHRhLCBpbW0xNXUgKi8K KwkgICAgICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJdmFsX3RhIHw9IE4zMl9J TU0xNVUgKGluc24pOworCisJICAgICAgY29udGludWU7CisJICAgIH0KKwkg IGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAo QURESSwgUkVHX1RBLCBSRUdfVEEsIDApKQorCSAgICB7CisJICAgICAgLyog YWRkaSAkdGEsICR0YSwgaW1tMTVzICovCisJICAgICAgaWYgKGNhY2hlICE9 IE5VTEwpCisJCXZhbF90YSArPSBOMzJfSU1NMTVTIChpbnNuKTsKKworCSAg ICAgIGNvbnRpbnVlOworCSAgICB9CisJICBpZiAoaW5zbiA9PSBOMzJfQUxV MSAoQURELCBSRUdfR1AsIFJFR19UQSwgUkVHX0dQKQorCSAgICAgIHx8IGlu c24gPT0gTjMyX0FMVTEgKEFERCwgUkVHX0dQLCBSRUdfR1AsIFJFR19UQSkp CisJICAgIHsKKwkgICAgICAvKiBhZGQgJGdwLCAkdGEsICRncCAqLworCSAg ICAgIC8qIGFkZCAkZ3AsICRncCwgJHRhICovCisJICAgICAgaW5fcHJvbG9n dWVfYmIgPSAxOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICBlbHNl IGlmIChDSE9QX0JJVFMgKGluc24sIDIwKSA9PSBOMzJfVFlQRTEgKE1PVkks IFJFR19HUCwgMCkpCisJICAgIHsKKwkgICAgICAvKiBtb3ZpICRncCwgaW1t MjBzICovCisJICAgICAgaW5fcHJvbG9ndWVfYmIgPSAxOworCSAgICAgIGNv bnRpbnVlOworCSAgICB9CisJICBlbHNlIGlmIChDSE9QX0JJVFMgKGluc24s IDIwKSA9PSBOMzJfVFlQRTEgKFNFVEhJLCBSRUdfR1AsIDApKQorCSAgICB7 CisJICAgICAgLyogc2V0aGkgJGdwLCBpbW0yMHUgKi8KKwkgICAgICBpbl9w cm9sb2d1ZV9iYiA9IDE7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkg IGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAo T1JJLCBSRUdfR1AsIFJFR19HUCwgMCkpCisJICAgIHsKKwkgICAgICAvKiBv cmkgJGdwLCAkZ3AsIGltbTE1dSAqLworCSAgICAgIGluX3Byb2xvZ3VlX2Ji ID0gMTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZQorCSAg ICB7CisJICAgICAgLyogSnVtcC9CcmFuY2ggaW5zbnMgbmV2ZXIgYXBwZWFy IGluIHByb2xvZ3VlIGJhc2ljIGJsb2NrLgorCQkgVGhlIGxvb3AgY2FuIGJl IGVzY2FwZWQgZWFybHkgd2hlbiB0aGVzZSBpbnNucyBhcmUgbWV0LiAgKi8K KwkgICAgICBpZiAoaW5fcHJvbG9ndWVfYmIgPT0gMSkKKwkJeworCQkgIGlu dCBvcCA9IE4zMl9PUDYgKGluc24pOworCisJCSAgaWYgKG9wID09IE4zMl9P UDZfSkkKKwkJICAgICAgfHwgb3AgPT0gTjMyX09QNl9KUkVHCisJCSAgICAg IHx8IG9wID09IE4zMl9PUDZfQlIxCisJCSAgICAgIHx8IG9wID09IE4zMl9P UDZfQlIyCisJCSAgICAgIHx8IG9wID09IE4zMl9PUDZfQlIzKQorCQkgICAg YnJlYWs7CisJCX0KKwkgICAgfQorCisJICBpZiAoYWJpX3VzZV9mcHIgJiYg TjMyX09QNiAoaW5zbikgPT0gTjMyX09QNl9TREMKKwkgICAgICAmJiBfX0dG IChpbnNuLCAxMiwgMykgPT0gMCkKKwkgICAgeworCSAgICAgIC8qIEZvciBG UFUgaW5zbnMsIENQIChiaXQgWzEzOjE0XSkgc2hvdWxkIGJlIENQMCwgIGFu ZCBvbmx5CisJCSBub3JtYWwgZm9ybSAoYml0IFsxMl0gPT0gMCkgaXMgdXNl ZC4gICovCisKKwkgICAgICAvKiBmc2RpIEZEdCwgWyRzcCArIChpbW0xMnMg PDwgMildICovCisJICAgICAgaWYgKE4zMl9SQTUgKGluc24pID09IFJFR19T UCkKKwkJY29udGludWU7CisJICAgIH0KKworCSAgLyogVGhlIG9wdGltaXpl ciBtaWdodCBzaG92ZSBhbnl0aGluZyBpbnRvIHRoZSBwcm9sb2d1ZSwgaWYK KwkgICAgIHdlIGJ1aWxkIHVwIGNhY2hlIChjYWNoZSAhPSBOVUxMKSBmcm9t IGFuYWx5emluZyBwcm9sb2d1ZSwKKwkgICAgIHdlIGp1c3Qgc2tpcCB3aGF0 IHdlIGRvbid0IHJlY29nbml6ZSBhbmQgYW5hbHl6ZSBmdXJ0aGVyIHRvCisJ ICAgICBtYWtlIGNhY2hlIGFzIGNvbXBsZXRlIGFzIHBvc3NpYmxlLiAgSG93 ZXZlciwgaWYgd2Ugc2tpcAorCSAgICAgcHJvbG9ndWUsIHdlJ2xsIHN0b3Ag aW1tZWRpYXRlbHkgb24gdW5yZWNvZ25pemVkCisJICAgICBpbnN0cnVjdGlv bi4gICovCisJICBpZiAoY2FjaGUgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJ fQorICAgICAgZWxzZQorCXsKKwkgIC8qIDE2LWJpdCBpbnN0cnVjdGlvbiAq LworCSAgaW5zbl9sZW4gPSAyOworCisJICBpbnNuID4+PSAxNjsKKworCSAg aWYgKENIT1BfQklUUyAoaW5zbiwgMTApID09IE4xNl9UWVBFMTAgKEFEREkx MFMsIDApKQorCSAgICB7CisJICAgICAgLyogYWRkaTEwcy5zcCAqLworCSAg ICAgIGludCBpbW0xMHMgPSBOMTZfSU1NMTBTIChpbnNuKTsKKworCSAgICAg IGlmIChpbW0xMHMgPCAwKQorCQl7CisJCSAgaWYgKGNhY2hlICE9IE5VTEwp CisJCSAgICBjYWNoZS0+c3Bfb2Zmc2V0ICs9IC1pbW0xMHM7CisKKwkJICBp bl9wcm9sb2d1ZV9iYiA9IDE7CisJCSAgY29udGludWU7CisJCX0KKwkgICAg fQorCSAgZWxzZSBpZiAoX19HRiAoaW5zbiwgNywgOCkgPT0gTjE2X1QyNV9Q VVNIMjUpCisJICAgIHsKKwkgICAgICAvKiBwdXNoMjUgKi8KKwkgICAgICBp ZiAoY2FjaGUgIT0gTlVMTCkKKwkJeworCQkgIGludCBpbW04dSA9IChpbnNu ICYgMHgxZikgPDwgMzsKKwkJICBpbnQgcmUgPSAoaW5zbiA+PiA1KSAmIDB4 MzsKKwkJICBjb25zdCBpbnQgcmVnX21hcFtdID0geyA2LCA4LCAxMCwgMTQg fTsKKworCQkgIC8qIE9wZXJhdGlvbiAxIC0tIHNtdy5hZG0gUjYsIFskc3Bd LCBSZSwgIzB4ZSAqLworCQkgIG5kczMyX3B1c2hfbXVsdGlwbGVfd29yZHMg KGNhY2hlLCA2LCByZWdfbWFwW3JlXSwgMHhlKTsKKworCQkgIC8qIE9wZXJh dGlvbiAyIC0tIHNwID0gc3AgLSAoaW1tNXUgPDwgMykgKi8KKwkJICBjYWNo ZS0+c3Bfb2Zmc2V0ICs9IGltbTh1OworCQl9CisKKwkgICAgICBpbl9wcm9s b2d1ZV9iYiA9IDE7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkgIGVs c2UgaWYgKGluc24gPT0gTjE2X1RZUEU1IChBREQ1UEMsIFJFR19HUCkpCisJ ICAgIHsKKwkgICAgICAvKiBhZGQ1LnBjICRncCAqLworCSAgICAgIGluX3By b2xvZ3VlX2JiID0gMTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAg ZWxzZSBpZiAoQ0hPUF9CSVRTIChpbnNuLCA1KSA9PSBOMTZfVFlQRTU1IChN T1ZJNTUsIFJFR19HUCwgMCkpCisJICAgIHsKKwkgICAgICAvKiBtb3ZpNTUg JGdwLCBpbW01cyAqLworCSAgICAgIGluX3Byb2xvZ3VlX2JiID0gMTsKKwkg ICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAg ICAgLyogSnVtcC9CcmFuY2ggaW5zbnMgbmV2ZXIgYXBwZWFyIGluIHByb2xv Z3VlIGJhc2ljIGJsb2NrLgorCQkgVGhlIGxvb3AgY2FuIGJlIGVzY2FwZWQg ZWFybHkgd2hlbiB0aGVzZSBpbnNucyBhcmUgbWV0LiAgKi8KKwkgICAgICBp ZiAoaW5fcHJvbG9ndWVfYmIgPT0gMSkKKwkJeworCQkgIHVpbnQzMl90IGlu c241ID0gQ0hPUF9CSVRTIChpbnNuLCA1KTsKKwkJICB1aW50MzJfdCBpbnNu OCA9IENIT1BfQklUUyAoaW5zbiwgOCk7CisJCSAgdWludDMyX3QgaW5zbjM4 ID0gQ0hPUF9CSVRTIChpbnNuLCAxMSk7CisKKwkJICBpZiAoaW5zbjUgPT0g TjE2X1RZUEU1IChKUjUsIDApCisJCSAgICAgIHx8IGluc241ID09IE4xNl9U WVBFNSAoSlJBTDUsIDApCisJCSAgICAgIHx8IGluc241ID09IE4xNl9UWVBF NSAoUkVUNSwgMCkKKwkJICAgICAgfHwgaW5zbjggPT0gTjE2X1RZUEU4IChK OCwgMCkKKwkJICAgICAgfHwgaW5zbjggPT0gTjE2X1RZUEU4IChCRVFaUzgs IDApCisJCSAgICAgIHx8IGluc244ID09IE4xNl9UWVBFOCAoQk5FWlM4LCAw KQorCQkgICAgICB8fCBpbnNuMzggPT0gTjE2X1RZUEUzOCAoQkVRWjM4LCAw LCAwKQorCQkgICAgICB8fCBpbnNuMzggPT0gTjE2X1RZUEUzOCAoQk5FWjM4 LCAwLCAwKQorCQkgICAgICB8fCBpbnNuMzggPT0gTjE2X1RZUEUzOCAoQkVR UzM4LCAwLCAwKQorCQkgICAgICB8fCBpbnNuMzggPT0gTjE2X1RZUEUzOCAo Qk5FUzM4LCAwLCAwKSkKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwor CSAgLyogVGhlIG9wdGltaXplciBtaWdodCBzaG92ZSBhbnl0aGluZyBpbnRv IHRoZSBwcm9sb2d1ZSwgaWYKKwkgICAgIHdlIGJ1aWxkIHVwIGNhY2hlIChj YWNoZSAhPSBOVUxMKSBmcm9tIGFuYWx5emluZyBwcm9sb2d1ZSwKKwkgICAg IHdlIGp1c3Qgc2tpcCB3aGF0IHdlIGRvbid0IHJlY29nbml6ZSBhbmQgYW5h bHl6ZSBmdXJ0aGVyIHRvCisJICAgICBtYWtlIGNhY2hlIGFzIGNvbXBsZXRl IGFzIHBvc3NpYmxlLiAgSG93ZXZlciwgaWYgd2Ugc2tpcAorCSAgICAgcHJv bG9ndWUsIHdlJ2xsIHN0b3AgaW1tZWRpYXRlbHkgb24gdW5yZWNvZ25pemVk CisJICAgICBpbnN0cnVjdGlvbi4gICovCisJICBpZiAoY2FjaGUgPT0gTlVM TCkKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICByZXR1cm4gcGM7Cit9 CisKKy8qIEltcGxlbWVudCB0aGUgInNraXBfcHJvbG9ndWUiIGdkYmFyY2gg bWV0aG9kLgorCisgICBGaW5kIHRoZSBlbmQgb2YgZnVuY3Rpb24gcHJvbG9n dWUuICAqLworCitzdGF0aWMgQ09SRV9BRERSCituZHMzMl9za2lwX3Byb2xv Z3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHBjKQor eworICBDT1JFX0FERFIgZnVuY19hZGRyLCBsaW1pdF9wYzsKKworICAvKiBT ZWUgaWYgd2UgY2FuIGRldGVybWluZSB0aGUgZW5kIG9mIHRoZSBwcm9sb2d1 ZSB2aWEgdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgSWYgc28sIHRoZW4gcmV0 dXJuIGVpdGhlciBQQywgb3IgdGhlIFBDIGFmdGVyIHRoZSBwcm9sb2d1ZSwg d2hpY2hldmVyCisgICAgIGlzIGdyZWF0ZXIuICAqLworICBpZiAoZmluZF9w Y19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgTlVMTCwgJmZ1bmNfYWRkciwgTlVM TCkpCisgICAgeworICAgICAgQ09SRV9BRERSIHBvc3RfcHJvbG9ndWVfcGMK Kwk9IHNraXBfcHJvbG9ndWVfdXNpbmdfc2FsIChnZGJhcmNoLCBmdW5jX2Fk ZHIpOworICAgICAgaWYgKHBvc3RfcHJvbG9ndWVfcGMgIT0gMCkKKwlyZXR1 cm4gbWF4IChwYywgcG9zdF9wcm9sb2d1ZV9wYyk7CisgICAgfQorCisgIC8q IENhbid0IGRldGVybWluZSBwcm9sb2d1ZSBmcm9tIHRoZSBzeW1ib2wgdGFi bGUsIG5lZWQgdG8gZXhhbWluZQorICAgICBpbnN0cnVjdGlvbnMuICAqLwor CisgIC8qIEZpbmQgYW4gdXBwZXIgbGltaXQgb24gdGhlIGZ1bmN0aW9uIHBy b2xvZ3VlIHVzaW5nIHRoZSBkZWJ1ZworICAgICBpbmZvcm1hdGlvbi4gIElm IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBjb3VsZCBub3QgYmUgdXNlZCB0byBw cm92aWRlCisgICAgIHRoYXQgYm91bmQsIHRoZW4gdXNlIGFuIGFyYml0cmFy eSBsYXJnZSBudW1iZXIgYXMgdGhlIHVwcGVyIGJvdW5kLiAgKi8KKyAgbGlt aXRfcGMgPSBza2lwX3Byb2xvZ3VlX3VzaW5nX3NhbCAoZ2RiYXJjaCwgcGMp OworICBpZiAobGltaXRfcGMgPT0gMCkKKyAgICBsaW1pdF9wYyA9IHBjICsg MTI4OwkvKiBNYWdpYy4gICovCisKKyAgLyogRmluZCB0aGUgZW5kIG9mIHBy b2xvZ3VlLiAgKi8KKyAgcmV0dXJuIG5kczMyX2FuYWx5emVfcHJvbG9ndWUg KGdkYmFyY2gsIHBjLCBsaW1pdF9wYywgTlVMTCk7Cit9CisKKy8qIEFsbG9j YXRlIGFuZCBmaWxsIGluICpUSElTX0NBQ0hFIHdpdGggaW5mb3JtYXRpb24g YWJvdXQgdGhlIHByb2xvZ3VlIG9mCisgICAqVEhJU19GUkFNRS4gIERvIG5v dCBkbyB0aGlzIGlmICpUSElTX0NBQ0hFIHdhcyBhbHJlYWR5IGFsbG9jYXRl ZC4gIFJldHVybgorICAgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5kczMy X2ZyYW1lX2NhY2hlIGluICpUSElTX0NBQ0hFLiAgKi8KKworc3RhdGljIHN0 cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqCituZHMzMl9mcmFtZV9jYWNoZSAo c3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2Nh Y2hlKQoreworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFt ZV9hcmNoICh0aGlzX2ZyYW1lKTsKKyAgc3RydWN0IG5kczMyX2ZyYW1lX2Nh Y2hlICpjYWNoZTsKKyAgQ09SRV9BRERSIGN1cnJlbnRfcGM7CisgIFVMT05H RVNUIHByZXZfc3A7CisgIFVMT05HRVNUIHRoaXNfYmFzZTsKKyAgaW50IGk7 CisKKyAgaWYgKCp0aGlzX2NhY2hlKQorICAgIHJldHVybiAoc3RydWN0IG5k czMyX2ZyYW1lX2NhY2hlICopICp0aGlzX2NhY2hlOworCisgIGNhY2hlID0g bmRzMzJfYWxsb2NfZnJhbWVfY2FjaGUgKCk7CisgICp0aGlzX2NhY2hlID0g Y2FjaGU7CisKKyAgY2FjaGUtPnBjID0gZ2V0X2ZyYW1lX2Z1bmMgKHRoaXNf ZnJhbWUpOworICBjdXJyZW50X3BjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2Zy YW1lKTsKKyAgbmRzMzJfYW5hbHl6ZV9wcm9sb2d1ZSAoZ2RiYXJjaCwgY2Fj aGUtPnBjLCBjdXJyZW50X3BjLCBjYWNoZSk7CisKKyAgLyogQ29tcHV0ZSB0 aGUgcHJldmlvdXMgZnJhbWUncyBzdGFjayBwb2ludGVyICh3aGljaCBpcyBh bHNvIHRoZQorICAgICBmcmFtZSdzIElEJ3Mgc3RhY2sgYWRkcmVzcyksIGFu ZCB0aGlzIGZyYW1lJ3MgYmFzZSBwb2ludGVyLiAgKi8KKyAgaWYgKGNhY2hl LT5mcF9vZmZzZXQgIT0gSU5WQUxJRF9PRkZTRVQpCisgICAgeworICAgICAg LyogRlAgaXMgc2V0IGluIHByb2xvZ3VlLCBzbyBpdCBjYW4gYmUgdXNlZCB0 byBjYWxjdWxhdGUgb3RoZXIgaW5mby4gICovCisgICAgICB0aGlzX2Jhc2Ug PSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIE5E UzMyX0ZQX1JFR05VTSk7CisgICAgICBwcmV2X3NwID0gdGhpc19iYXNlICsg Y2FjaGUtPmZwX29mZnNldDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICB0aGlzX2Jhc2UgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRo aXNfZnJhbWUsIE5EUzMyX1NQX1JFR05VTSk7CisgICAgICBwcmV2X3NwID0g dGhpc19iYXNlICsgY2FjaGUtPnNwX29mZnNldDsKKyAgICB9CisKKyAgY2Fj aGUtPnByZXZfc3AgPSBwcmV2X3NwOworICBjYWNoZS0+YmFzZSA9IHRoaXNf YmFzZTsKKworICAvKiBBZGp1c3QgYWxsIHRoZSBzYXZlZCByZWdpc3RlcnMg c3VjaCB0aGF0IHRoZXkgY29udGFpbiBhZGRyZXNzZXMKKyAgICAgaW5zdGVh ZCBvZiBvZmZzZXRzLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5EUzMyX05V TV9TQVZFRF9SRUdTOyBpKyspCisgICAgaWYgKGNhY2hlLT5zYXZlZF9yZWdz W2ldICE9IFJFR19VTkFWQUlMKQorICAgICAgY2FjaGUtPnNhdmVkX3JlZ3Nb aV0gPSBjYWNoZS0+cHJldl9zcCAtIGNhY2hlLT5zYXZlZF9yZWdzW2ldOwor CisgIHJldHVybiBjYWNoZTsKK30KKworLyogSW1wbGVtZW50IHRoZSAidGhp c19pZCIgZnJhbWVfdW53aW5kIG1ldGhvZC4KKworICAgT3VyIGZyYW1lIElE IGZvciBhIG5vcm1hbCBmcmFtZSBpcyB0aGUgY3VycmVudCBmdW5jdGlvbidz IHN0YXJ0aW5nCisgICBQQyBhbmQgdGhlIGNhbGxlcidzIFNQIHdoZW4gd2Ug d2VyZSBjYWxsZWQuICAqLworCitzdGF0aWMgdm9pZAorbmRzMzJfZnJhbWVf dGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisJCSAg ICAgdm9pZCAqKnRoaXNfY2FjaGUsIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19p ZCkKK3sKKyAgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZSA9IG5k czMyX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKwor ICAvKiBUaGlzIG1hcmtzIHRoZSBvdXRlcm1vc3QgZnJhbWUuICAqLworICBp ZiAoY2FjaGUtPnByZXZfc3AgPT0gMCkKKyAgICByZXR1cm47CisKKyAgKnRo aXNfaWQgPSBmcmFtZV9pZF9idWlsZCAoY2FjaGUtPnByZXZfc3AsIGNhY2hl LT5wYyk7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInByZXZfcmVnaXN0ZXIi IGZyYW1lX3Vud2luZCBtZXRob2QuICAqLworCitzdGF0aWMgc3RydWN0IHZh bHVlICoKK25kczMyX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFt ZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKKwkJCSAg IGludCByZWdudW0pCit7CisgIHN0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAq Y2FjaGUgPSBuZHMzMl9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19j YWNoZSk7CisKKyAgaWYgKHJlZ251bSA9PSBORFMzMl9TUF9SRUdOVU0pCisg ICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfY29uc3RhbnQgKHRoaXNfZnJh bWUsIHJlZ251bSwgY2FjaGUtPnByZXZfc3ApOworCisgIC8qIFRoZSBQQyBv ZiB0aGUgcHJldmlvdXMgZnJhbWUgaXMgc3RvcmVkIGluIHRoZSBMUCByZWdp c3RlciBvZgorICAgICB0aGUgY3VycmVudCBmcmFtZS4gICovCisgIGlmIChy ZWdudW0gPT0gTkRTMzJfUENfUkVHTlVNKQorICAgIHJlZ251bSA9IE5EUzMy X0xQX1JFR05VTTsKKworICBpZiAocmVnbnVtIDwgTkRTMzJfTlVNX1NBVkVE X1JFR1MgJiYgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAhPSBSRUdfVU5B VkFJTCkKKyAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkgKHRo aXNfZnJhbWUsIHJlZ251bSwKKwkJCQkgICAgY2FjaGUtPnNhdmVkX3JlZ3Nb cmVnbnVtXSk7CisKKyAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfcmVnaXN0 ZXIgKHRoaXNfZnJhbWUsIHJlZ251bSwgcmVnbnVtKTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgbmRzMzJfZnJhbWVfdW53aW5k ID0KK3sKKyAgTk9STUFMX0ZSQU1FLAorICBkZWZhdWx0X2ZyYW1lX3Vud2lu ZF9zdG9wX3JlYXNvbiwKKyAgbmRzMzJfZnJhbWVfdGhpc19pZCwKKyAgbmRz MzJfZnJhbWVfcHJldl9yZWdpc3RlciwKKyAgTlVMTCwKKyAgZGVmYXVsdF9m cmFtZV9zbmlmZmVyLAorfTsKKworLyogUmV0dXJuIHRoZSBmcmFtZSBiYXNl IGFkZHJlc3Mgb2YgKlRISVNfRlJBTUUuICAqLworCitzdGF0aWMgQ09SRV9B RERSCituZHMzMl9mcmFtZV9iYXNlX2FkZHJlc3MgKHN0cnVjdCBmcmFtZV9p bmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKK3sKKyAgc3Ry dWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZSA9IG5kczMyX2ZyYW1lX2Nh Y2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKworICByZXR1cm4gY2Fj aGUtPmJhc2U7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfYmFz ZSBuZHMzMl9mcmFtZV9iYXNlID0KK3sKKyAgJm5kczMyX2ZyYW1lX3Vud2lu ZCwKKyAgbmRzMzJfZnJhbWVfYmFzZV9hZGRyZXNzLAorICBuZHMzMl9mcmFt ZV9iYXNlX2FkZHJlc3MsCisgIG5kczMyX2ZyYW1lX2Jhc2VfYWRkcmVzcwor fTsKKwwKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgaW5zdHJ1Y3Rpb25zIHVz ZWQgdG8gcG9wIG11bHRpcGxlIHdvcmRzLiAgKi8KKworc3RhdGljIHZvaWQK K25kczMyX3BvcF9tdWx0aXBsZV93b3JkcyAoc3RydWN0IG5kczMyX2ZyYW1l X2NhY2hlICpjYWNoZSwgaW50IHJiLCBpbnQgcmUsCisJCQkgIGludCBlbmFi bGU0KQoreworICBDT1JFX0FERFIgc3Bfb2Zmc2V0ID0gY2FjaGUtPnNwX29m ZnNldDsKKyAgaW50IGk7CisKKyAgLyogU2tpcCBjYXNlIHdoZXJlIHJlID09 IHJiID09IHNwLiAgKi8KKyAgaWYgKChyYiA8IFJFR19GUCkgJiYgKHJlIDwg UkVHX0ZQKSkKKyAgICB7CisgICAgICBmb3IgKGkgPSByYjsgaSA8PSByZTsg aSsrKQorCXsKKwkgIGNhY2hlLT5zYXZlZF9yZWdzW2ldID0gc3Bfb2Zmc2V0 OworCSAgc3Bfb2Zmc2V0ICs9IDQ7CisJfQorICAgIH0KKworICAvKiBDaGVj ayBGUCwgR1AsIExQIGluIGVuYWJsZTQuICAqLworICBmb3IgKGkgPSAzOyBp ID49IDE7IGktLSkKKyAgICB7CisgICAgICBpZiAoKGVuYWJsZTQgPj4gaSkg JiAweDEpCisJeworCSAgY2FjaGUtPnNhdmVkX3JlZ3NbTkRTMzJfU1BfUkVH TlVNIC0gaV0gPSBzcF9vZmZzZXQ7CisJICBzcF9vZmZzZXQgKz0gNDsKKwl9 CisgICAgfQorCisgIC8qIEZvciBzcCwgdXBkYXRlIHRoZSBvZmZzZXQuICAq LworICBjYWNoZS0+c3Bfb2Zmc2V0ID0gc3Bfb2Zmc2V0OworfQorCisvKiBU aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIGluIE5EUzMyIGVwaWxvZ3VlIGFy ZQorCisgICBJTlNOX1JFU0VUX1NQICAob3B0aW9uYWwpCisJCSAgKElmIGV4 aXN0cywgdGhpcyBtdXN0IGJlIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBpbiBl cGlsb2d1ZQorCQkgICBhbmQgdGhlIHN0YWNrIGhhcyBub3QgYmVlbiBkZXN0 cm95ZWQuKS4KKyAgIElOU05fUkVDT1ZFUiAgKG9wdGlvbmFsKS4KKyAgIElO U05fUkVUVVJOL0lOU05fUkVDT1ZFUl9SRVRVUk4gIChyZXF1aXJlZCkuICAq LworCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFuYWx5emluZyB0aGUgZ2l2 ZW4gMzItYml0IElOU04uICBJZiBDQUNIRSBpcyBub24tTlVMTCwKKyAgIHRo ZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gd2lsbCBiZSByZWNvcmRlZC4gICov CisKK3N0YXRpYyBpbmxpbmUgaW50CituZHMzMl9hbmFseXplX2VwaWxvZ3Vl X2luc24zMiAoaW50IGFiaV91c2VfZnByLCB1aW50MzJfdCBpbnNuLAorCQkJ ICAgICAgIHN0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqY2FjaGUpCit7Cisg IGlmIChDSE9QX0JJVFMgKGluc24sIDE1KSA9PSBOMzJfVFlQRTIgKEFEREks IFJFR19TUCwgUkVHX1NQLCAwKQorICAgICAgJiYgTjMyX0lNTTE1UyAoaW5z bikgPiAwKQorICAgIC8qIGFkZGkgJHNwLCAkc3AsIGltbTE1cyAqLworICAg IHJldHVybiBJTlNOX1JFU0VUX1NQOworICBlbHNlIGlmIChDSE9QX0JJVFMg KGluc24sIDE1KSA9PSBOMzJfVFlQRTIgKEFEREksIFJFR19TUCwgUkVHX0ZQ LCAwKQorCSAgICYmIE4zMl9JTU0xNVMgKGluc24pIDwgMCkKKyAgICAvKiBh ZGRpICRzcCwgJGZwLCBpbW0xNXMgKi8KKyAgICByZXR1cm4gSU5TTl9SRVNF VF9TUDsKKyAgZWxzZSBpZiAoKGluc24gJiB+KF9fTUFTSyAoMTkpIDw8IDYp KSA9PSBOMzJfTE1XX0JJTQorCSAgICYmIE4zMl9SQTUgKGluc24pID09IFJF R19TUCkKKyAgICB7CisgICAgICAvKiBsbXcuYmltIFJiLCBbJHNwXSwgUmUs IGVuYWJsZTQgKi8KKyAgICAgIGlmIChjYWNoZSAhPSBOVUxMKQorCW5kczMy X3BvcF9tdWx0aXBsZV93b3JkcyAoY2FjaGUsIE4zMl9SVDUgKGluc24pLAor CQkJCSAgTjMyX1JCNSAoaW5zbiksIE4zMl9MU01XX0VOQUJMRTQgKGluc24p KTsKKworICAgICAgcmV0dXJuIElOU05fUkVDT1ZFUjsKKyAgICB9CisgIGVs c2UgaWYgKGluc24gPT0gTjMyX0pSRUcgKEpSLCAwLCBSRUdfTFAsIDAsIDEp KQorICAgIC8qIHJldCAkbHAgKi8KKyAgICByZXR1cm4gSU5TTl9SRVRVUk47 CisgIGVsc2UgaWYgKGluc24gPT0gTjMyX0FMVTEgKEFERCwgUkVHX1NQLCBS RUdfU1AsIFJFR19UQSkKKwkgICB8fCBpbnNuID09IE4zMl9BTFUxIChBREQs IFJFR19TUCwgUkVHX1RBLCBSRUdfU1ApKQorICAgIC8qIGFkZCAkc3AsICRz cCwgJHRhICovCisgICAgLyogYWRkICRzcCwgJHRhLCAkc3AgKi8KKyAgICBy ZXR1cm4gSU5TTl9SRVNFVF9TUDsKKyAgZWxzZSBpZiAoYWJpX3VzZV9mcHIK KwkgICAmJiAoaW5zbiAmIH4oX19NQVNLICg1KSA8PCAyMCB8IF9fTUFTSyAo MTMpKSkgPT0gTjMyX0ZMRElfU1ApCisgICAgeworICAgICAgaWYgKF9fR0Yg KGluc24sIDEyLCAxKSA9PSAwKQorCS8qIGZsZGkgRkR0LCBbJHNwICsgKGlt bTEycyA8PCAyKV0gKi8KKwlyZXR1cm4gSU5TTl9SRUNPVkVSOworICAgICAg ZWxzZQorCXsKKwkgIC8qIGZsZGkuYmkgRkR0LCBbJHNwXSwgKGltbTEycyA8 PCAyKSAqLworCSAgaW50IG9mZnNldCA9IE4zMl9JTU0xMlMgKGluc24pIDw8 IDI7CisKKwkgIGlmIChvZmZzZXQgPT0gOCB8fCBvZmZzZXQgPT0gMTIpCisJ ICAgIHsKKwkgICAgICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJY2FjaGUtPnNw X29mZnNldCArPSBvZmZzZXQ7CisKKwkgICAgICByZXR1cm4gSU5TTl9SRUNP VkVSOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gSU5TTl9OT1JN QUw7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgYW5hbHl6aW5nIHRo ZSBnaXZlbiAxNi1iaXQgSU5TTi4gIElmIENBQ0hFIGlzIG5vbi1OVUxMLAor ICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY29yZGVk LiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK25kczMyX2FuYWx5emVfZXBp bG9ndWVfaW5zbjE2ICh1aW50MzJfdCBpbnNuLCBzdHJ1Y3QgbmRzMzJfZnJh bWVfY2FjaGUgKmNhY2hlKQoreworICBpZiAoaW5zbiA9PSBOMTZfVFlQRTUg KFJFVDUsIFJFR19MUCkpCisgICAgLyogcmV0NSAkbHAgKi8KKyAgICByZXR1 cm4gSU5TTl9SRVRVUk47CisgIGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwg MTApID09IE4xNl9UWVBFMTAgKEFEREkxMFMsIDApKQorICAgIHsKKyAgICAg IC8qIGFkZGkxMHMuc3AgKi8KKyAgICAgIGludCBpbW0xMHMgPSBOMTZfSU1N MTBTIChpbnNuKTsKKworICAgICAgaWYgKGltbTEwcyA+IDApCisJeworCSAg aWYgKGNhY2hlICE9IE5VTEwpCisJICAgIGNhY2hlLT5zcF9vZmZzZXQgKz0g aW1tMTBzOworCisJICByZXR1cm4gSU5TTl9SRUNPVkVSOworCX0KKyAgICB9 CisgIGVsc2UgaWYgKF9fR0YgKGluc24sIDcsIDgpID09IE4xNl9UMjVfUE9Q MjUpCisgICAgeworICAgICAgLyogcG9wMjUgKi8KKyAgICAgIGlmIChjYWNo ZSAhPSBOVUxMKQorCXsKKwkgIGludCBpbW04dSA9IChpbnNuICYgMHgxZikg PDwgMzsKKwkgIGludCByZSA9IChpbnNuID4+IDUpICYgMHgzOworCSAgY29u c3QgaW50IHJlZ19tYXBbXSA9IHsgNiwgOCwgMTAsIDE0IH07CisKKwkgIC8q IE9wZXJhdGlvbiAxIC0tIHNwID0gc3AgKyAoaW1tNXUgPDwgMykgKi8KKwkg IGNhY2hlLT5zcF9vZmZzZXQgKz0gaW1tOHU7CisKKwkgIC8qIE9wZXJhdGlv biAyIC0tIGxtdy5iaW0gUjYsIFskc3BdLCBSZSwgIzB4ZSAqLworCSAgbmRz MzJfcG9wX211bHRpcGxlX3dvcmRzIChjYWNoZSwgNiwgcmVnX21hcFtyZV0s IDB4ZSk7CisJfQorCisgICAgICAvKiBPcGVyYXRpb24gMyAtLSByZXQgJGxw ICovCisgICAgICByZXR1cm4gSU5TTl9SRUNPVkVSX1JFVFVSTjsKKyAgICB9 CisKKyAgcmV0dXJuIElOU05fTk9STUFMOworfQorCisvKiBBbmFseXplIGEg cmVhc29uYWJsZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGdp dmVuIFBDIHRvIGZpbmQKKyAgIHRoZSBpbnN0cnVjdGlvbiB1c2VkIHRvIHJl dHVybiB0byB0aGUgY2FsbGVyLiAgUmV0dXJuIDEgaWYgdGhlICdyZXR1cm4n CisgICBpbnN0cnVjdGlvbiBjb3VsZCBiZSBmb3VuZCwgMCBvdGhlcndpc2Uu CisKKyAgIElmIENBQ0hFIGlzIG5vbi1OVUxMLCBmaWxsIGl0IGluLiAgKi8K Kworc3RhdGljIGludAorbmRzMzJfYW5hbHl6ZV9lcGlsb2d1ZSAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBwYywKKwkJCXN0cnVjdCBu ZHMzMl9mcmFtZV9jYWNoZSAqY2FjaGUpCit7CisgIHN0cnVjdCBnZGJhcmNo X3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworICBpbnQg YWJpX3VzZV9mcHIgPSBuZHMzMl9hYmlfdXNlX2ZwciAodGRlcC0+YWJpKTsK KyAgQ09SRV9BRERSIGxpbWl0X3BjOworICB1aW50MzJfdCBpbnNuLCBpbnNu X2xlbjsKKyAgaW50IGluc25fdHlwZSA9IElOU05fTk9STUFMOworCisgIGlm IChhYmlfdXNlX2ZwcikKKyAgICBsaW1pdF9wYyA9IHBjICsgNDg7CisgIGVs c2UKKyAgICBsaW1pdF9wYyA9IHBjICsgMTY7CisKKyAgZm9yICg7IHBjIDwg bGltaXRfcGM7IHBjICs9IGluc25fbGVuKQorICAgIHsKKyAgICAgIGluc24g PSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChwYywgNCwgQkZEX0VO RElBTl9CSUcpOworCisgICAgICBpZiAoKGluc24gJiAweDgwMDAwMDAwKSA9 PSAwKQorCXsKKwkgIC8qIDMyLWJpdCBpbnN0cnVjdGlvbiAqLworCSAgaW5z bl9sZW4gPSA0OworCisJICBpbnNuX3R5cGUgPSBuZHMzMl9hbmFseXplX2Vw aWxvZ3VlX2luc24zMiAoYWJpX3VzZV9mcHIsIGluc24sIGNhY2hlKTsKKwkg IGlmIChpbnNuX3R5cGUgPT0gSU5TTl9SRVRVUk4pCisJICAgIHJldHVybiAx OworCSAgZWxzZSBpZiAoaW5zbl90eXBlID09IElOU05fUkVDT1ZFUikKKwkg ICAgY29udGludWU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIDE2LWJp dCBpbnN0cnVjdGlvbiAqLworCSAgaW5zbl9sZW4gPSAyOworCisJICBpbnNu ID4+PSAxNjsKKwkgIGluc25fdHlwZSA9IG5kczMyX2FuYWx5emVfZXBpbG9n dWVfaW5zbjE2IChpbnNuLCBjYWNoZSk7CisJICBpZiAoaW5zbl90eXBlID09 IElOU05fUkVUVVJOIHx8IGluc25fdHlwZSA9PSBJTlNOX1JFQ09WRVJfUkVU VVJOKQorCSAgICByZXR1cm4gMTsKKwkgIGVsc2UgaWYgKGluc25fdHlwZSA9 PSBJTlNOX1JFQ09WRVIpCisJICAgIGNvbnRpbnVlOworCX0KKworICAgICAg LyogU3RvcCB0aGUgc2NhbiBpZiB0aGlzIGlzIGFuIHVuZXhwZWN0ZWQgaW5z dHJ1Y3Rpb24uICAqLworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVy biAwOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJzdGFja19mcmFtZV9kZXN0 cm95ZWRfcCIgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgaW50Citu ZHMzMl9zdGFja19mcmFtZV9kZXN0cm95ZWRfcCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIENPUkVfQUREUiBhZGRyKQoreworICBzdHJ1Y3QgZ2RiYXJj aF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKyAgaW50 IGFiaV91c2VfZnByID0gbmRzMzJfYWJpX3VzZV9mcHIgKHRkZXAtPmFiaSk7 CisgIGludCBpbnNuX3R5cGUgPSBJTlNOX05PUk1BTDsKKyAgaW50IHJldF9m b3VuZCA9IDA7CisgIHVpbnQzMl90IGluc247CisKKyAgaW5zbiA9IHJlYWRf bWVtb3J5X3Vuc2lnbmVkX2ludGVnZXIgKGFkZHIsIDQsIEJGRF9FTkRJQU5f QklHKTsKKworICBpZiAoKGluc24gJiAweDgwMDAwMDAwKSA9PSAwKQorICAg IHsKKyAgICAgIC8qIDMyLWJpdCBpbnN0cnVjdGlvbiAqLworCisgICAgICBp bnNuX3R5cGUgPSBuZHMzMl9hbmFseXplX2VwaWxvZ3VlX2luc24zMiAoYWJp X3VzZV9mcHIsIGluc24sIE5VTEwpOworICAgIH0KKyAgZWxzZQorICAgIHsK KyAgICAgIC8qIDE2LWJpdCBpbnN0cnVjdGlvbiAqLworCisgICAgICBpbnNu ID4+PSAxNjsKKyAgICAgIGluc25fdHlwZSA9IG5kczMyX2FuYWx5emVfZXBp bG9ndWVfaW5zbjE2IChpbnNuLCBOVUxMKTsKKyAgICB9CisKKyAgaWYgKGlu c25fdHlwZSA9PSBJTlNOX05PUk1BTCB8fCBpbnNuX3R5cGUgPT0gSU5TTl9S RVNFVF9TUCkKKyAgICByZXR1cm4gMDsKKworICAvKiBTZWFyY2ggdGhlIHJl cXVpcmVkICdyZXR1cm4nIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgZm9sbG93 aW5nIHJlYXNvbmFibGUKKyAgICAgaW5zdHJ1Y3Rpb25zLiAgKi8KKyAgcmV0 X2ZvdW5kID0gbmRzMzJfYW5hbHl6ZV9lcGlsb2d1ZSAoZ2RiYXJjaCwgYWRk ciwgTlVMTCk7CisgIGlmIChyZXRfZm91bmQgPT0gMCkKKyAgICByZXR1cm4g MDsKKworICAvKiBTY2FuIGJhY2t3YXJkcyB0byBtYWtlIHN1cmUgdGhhdCB0 aGUgbGFzdCBpbnN0cnVjdGlvbiBoYXMgYWRqdXN0ZWQKKyAgICAgc3RhY2su ICBCb3RoIGEgMTYtYml0IGFuZCBhIDMyLWJpdCBpbnN0cnVjdGlvbiB3aWxs IGJlIHRyaWVkLiAgVGhpcyBpcworICAgICBqdXN0IGEgaGV1cmlzdGljLCBz byB0aGUgZmFsc2UgcG9zaXRpdmVzIHdpbGwgYmUgYWNjZXB0YWJsZS4gICov CisgIGluc24gPSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChhZGRy IC0gMiwgNCwgQkZEX0VORElBTl9CSUcpOworCisgIC8qIE9ubHkgMTYtYml0 IGluc3RydWN0aW9ucyBhcmUgcG9zc2libGUgYXQgYWRkciAtIDIuICAqLwor ICBpZiAoKGluc24gJiAweDgwMDAwMDAwKSAhPSAwKQorICAgIHsKKyAgICAg IC8qIFRoaXMgbWF5IGJlIGEgMTYtYml0IGluc3RydWN0aW9uIG9yIHBhcnQg b2YgYSAzMi1iaXQgaW5zdHJ1Y3Rpb24uICAqLworCisgICAgICBpbnNuX3R5 cGUgPSBuZHMzMl9hbmFseXplX2VwaWxvZ3VlX2luc24xNiAoaW5zbiA+PiAx NiwgTlVMTCk7CisgICAgICBpZiAoaW5zbl90eXBlID09IElOU05fUkVDT1ZF UikKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgaW5zbiA9IHJlYWRfbWVtb3J5 X3Vuc2lnbmVkX2ludGVnZXIgKGFkZHIgLSA0LCA0LCBCRkRfRU5ESUFOX0JJ Ryk7CisKKyAgLyogSWYgdGhpcyBpcyBhIDE2LWJpdCBpbnN0cnVjdGlvbiBh dCBhZGRyIC0gNCwgdGhlbiB0aGVyZSBtdXN0IGJlIGFub3RoZXIKKyAgICAg MTYtYml0IGluc3RydWN0aW9uIGF0IGFkZHIgLSAyLCBzbyBvbmx5IDMyLWJp dCBpbnN0cnVjdGlvbnMgbmVlZCB0bworICAgICBiZSBhbmFseXplZCBoZXJl LiAgKi8KKyAgaWYgKChpbnNuICYgMHg4MDAwMDAwMCkgPT0gMCkKKyAgICB7 CisgICAgICAvKiBUaGlzIG1heSBiZSBhIDMyLWJpdCBpbnN0cnVjdGlvbiBv ciBwYXJ0IG9mIGEgMzItYml0IGluc3RydWN0aW9uLiAgKi8KKworICAgICAg aW5zbl90eXBlID0gbmRzMzJfYW5hbHl6ZV9lcGlsb2d1ZV9pbnNuMzIgKGFi aV91c2VfZnByLCBpbnNuLCBOVUxMKTsKKyAgICAgIGlmIChpbnNuX3R5cGUg PT0gSU5TTl9SRUNPVkVSIHx8IGluc25fdHlwZSA9PSBJTlNOX1JFU0VUX1NQ KQorCXJldHVybiAxOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyog SW1wbGVtZW50IHRoZSAic25pZmZlciIgZnJhbWVfdW53aW5kIG1ldGhvZC4g ICovCisKK3N0YXRpYyBpbnQKK25kczMyX2VwaWxvZ3VlX2ZyYW1lX3NuaWZm ZXIgKGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgKnNlbGYsCisJCQkgICAg ICBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNf Y2FjaGUpCit7CisgIGlmIChmcmFtZV9yZWxhdGl2ZV9sZXZlbCAodGhpc19m cmFtZSkgPT0gMCkKKyAgICByZXR1cm4gbmRzMzJfc3RhY2tfZnJhbWVfZGVz dHJveWVkX3AgKGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKSwKKwkJCQkJ ICBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpKTsKKyAgZWxzZQorICAgIHJl dHVybiAwOworfQorCisvKiBBbGxvY2F0ZSBhbmQgZmlsbCBpbiAqVEhJU19D QUNIRSB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCB0byB1bndpbmQKKyAgICpU SElTX0ZSQU1FIHdpdGhpbiBlcGlsb2d1ZS4gIERvIG5vdCBkbyB0aGlzIGlm ICpUSElTX0NBQ0hFIHdhcyBhbHJlYWR5CisgICBhbGxvY2F0ZWQuICBSZXR1 cm4gYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5kczMyX2ZyYW1lX2NhY2hl IGluCisgICAqVEhJU19DQUNIRS4gICovCisKK3N0YXRpYyBzdHJ1Y3QgbmRz MzJfZnJhbWVfY2FjaGUgKgorbmRzMzJfZXBpbG9ndWVfZnJhbWVfY2FjaGUg KHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19j YWNoZSkKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJh bWVfYXJjaCAodGhpc19mcmFtZSk7CisgIHN0cnVjdCBuZHMzMl9mcmFtZV9j YWNoZSAqY2FjaGU7CisgIENPUkVfQUREUiBjdXJyZW50X3BjLCBjdXJyZW50 X3NwOworICBpbnQgaTsKKworICBpZiAoKnRoaXNfY2FjaGUpCisgICAgcmV0 dXJuIChzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKikgKnRoaXNfY2FjaGU7 CisKKyAgY2FjaGUgPSBuZHMzMl9hbGxvY19mcmFtZV9jYWNoZSAoKTsKKyAg KnRoaXNfY2FjaGUgPSBjYWNoZTsKKworICBjYWNoZS0+cGMgPSBnZXRfZnJh bWVfZnVuYyAodGhpc19mcmFtZSk7CisgIGN1cnJlbnRfcGMgPSBnZXRfZnJh bWVfcGMgKHRoaXNfZnJhbWUpOworICBuZHMzMl9hbmFseXplX2VwaWxvZ3Vl IChnZGJhcmNoLCBjdXJyZW50X3BjLCBjYWNoZSk7CisKKyAgY3VycmVudF9z cCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwg TkRTMzJfU1BfUkVHTlVNKTsKKyAgY2FjaGUtPnByZXZfc3AgPSBjdXJyZW50 X3NwICsgY2FjaGUtPnNwX29mZnNldDsKKworICAvKiBBZGp1c3QgYWxsIHRo ZSBzYXZlZCByZWdpc3RlcnMgc3VjaCB0aGF0IHRoZXkgY29udGFpbiBhZGRy ZXNzZXMKKyAgICAgaW5zdGVhZCBvZiBvZmZzZXRzLiAgKi8KKyAgZm9yIChp ID0gMDsgaSA8IE5EUzMyX05VTV9TQVZFRF9SRUdTOyBpKyspCisgICAgaWYg KGNhY2hlLT5zYXZlZF9yZWdzW2ldICE9IFJFR19VTkFWQUlMKQorICAgICAg Y2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBjdXJyZW50X3NwICsgY2FjaGUtPnNh dmVkX3JlZ3NbaV07CisKKyAgcmV0dXJuIGNhY2hlOworfQorCisvKiBJbXBs ZW1lbnQgdGhlICJ0aGlzX2lkIiBmcmFtZV91bndpbmQgbWV0aG9kLiAgKi8K Kworc3RhdGljIHZvaWQKK25kczMyX2VwaWxvZ3VlX2ZyYW1lX3RoaXNfaWQg KHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorCQkJICAgICAgdm9p ZCAqKnRoaXNfY2FjaGUsIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKK3sK KyAgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZQorICAgID0gbmRz MzJfZXBpbG9ndWVfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2Fj aGUpOworCisgIC8qIFRoaXMgbWFya3MgdGhlIG91dGVybW9zdCBmcmFtZS4g ICovCisgIGlmIChjYWNoZS0+cHJldl9zcCA9PSAwKQorICAgIHJldHVybjsK KworICAqdGhpc19pZCA9IGZyYW1lX2lkX2J1aWxkIChjYWNoZS0+cHJldl9z cCwgY2FjaGUtPnBjKTsKK30KKworLyogSW1wbGVtZW50IHRoZSAicHJldl9y ZWdpc3RlciIgZnJhbWVfdW53aW5kIG1ldGhvZC4gICovCisKK3N0YXRpYyBz dHJ1Y3QgdmFsdWUgKgorbmRzMzJfZXBpbG9ndWVfZnJhbWVfcHJldl9yZWdp c3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisJCQkJICAg IHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQoreworICBzdHJ1Y3Qg bmRzMzJfZnJhbWVfY2FjaGUgKmNhY2hlCisgICAgPSBuZHMzMl9lcGlsb2d1 ZV9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisKKyAg aWYgKHJlZ251bSA9PSBORFMzMl9TUF9SRUdOVU0pCisgICAgcmV0dXJuIGZy YW1lX3Vud2luZF9nb3RfY29uc3RhbnQgKHRoaXNfZnJhbWUsIHJlZ251bSwg Y2FjaGUtPnByZXZfc3ApOworCisgIC8qIFRoZSBQQyBvZiB0aGUgcHJldmlv dXMgZnJhbWUgaXMgc3RvcmVkIGluIHRoZSBMUCByZWdpc3RlciBvZgorICAg ICB0aGUgY3VycmVudCBmcmFtZS4gICovCisgIGlmIChyZWdudW0gPT0gTkRT MzJfUENfUkVHTlVNKQorICAgIHJlZ251bSA9IE5EUzMyX0xQX1JFR05VTTsK KworICBpZiAocmVnbnVtIDwgTkRTMzJfTlVNX1NBVkVEX1JFR1MgJiYgY2Fj aGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAhPSBSRUdfVU5BVkFJTCkKKyAgICBy ZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkgKHRoaXNfZnJhbWUsIHJl Z251bSwKKwkJCQkgICAgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSk7CisK KyAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfcmVnaXN0ZXIgKHRoaXNfZnJh bWUsIHJlZ251bSwgcmVnbnVtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBmcmFtZV91bndpbmQgbmRzMzJfZXBpbG9ndWVfZnJhbWVfdW53aW5kID0K K3sKKyAgTk9STUFMX0ZSQU1FLAorICBkZWZhdWx0X2ZyYW1lX3Vud2luZF9z dG9wX3JlYXNvbiwKKyAgbmRzMzJfZXBpbG9ndWVfZnJhbWVfdGhpc19pZCwK KyAgbmRzMzJfZXBpbG9ndWVfZnJhbWVfcHJldl9yZWdpc3RlciwKKyAgTlVM TCwKKyAgbmRzMzJfZXBpbG9ndWVfZnJhbWVfc25pZmZlcgorfTsKKwwKKy8q IEltcGxlbWVudCB0aGUgImR1bW15X2lkIiBnZGJhcmNoIG1ldGhvZC4gICov CisKK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfaWQKK25kczMyX2R1bW15X2lkIChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGZyYW1lX2luZm8gKnRo aXNfZnJhbWUpCit7CisgIENPUkVfQUREUiBzcCA9IGdldF9mcmFtZV9yZWdp c3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgTkRTMzJfU1BfUkVHTlVNKTsK KworICByZXR1cm4gZnJhbWVfaWRfYnVpbGQgKHNwLCBnZXRfZnJhbWVfcGMg KHRoaXNfZnJhbWUpKTsKK30KKworLyogSW1wbGVtZW50IHRoZSAidW53aW5k X3BjIiBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBDT1JFX0FERFIK K25kczMyX3Vud2luZF9wYyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0 cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQoreworICByZXR1cm4gZnJh bWVfdW53aW5kX3JlZ2lzdGVyX3Vuc2lnbmVkIChuZXh0X2ZyYW1lLCBORFMz Ml9QQ19SRUdOVU0pOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJ1bndpbmRf c3AiIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIENPUkVfQUREUgor bmRzMzJfdW53aW5kX3NwIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3Ry dWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCit7CisgIHJldHVybiBmcmFt ZV91bndpbmRfcmVnaXN0ZXJfdW5zaWduZWQgKG5leHRfZnJhbWUsIE5EUzMy X1NQX1JFR05VTSk7Cit9CisMCisvKiBGbG9hdGluZyB0eXBlIGFuZCBzdHJ1 Y3QgdHlwZSB0aGF0IGhhcyBvbmx5IG9uZSBmbG9hdGluZyB0eXBlIG1lbWJl cgorICAgY2FuIHBhc3MgdmFsdWUgdXNpbmcgRlBVIHJlZ2lzdGVycyAod2hl biBGUFUgQUJJIGlzIHVzZWQpLiAgKi8KKworc3RhdGljIGludAorbmRzMzJf Y2hlY2tfY2FsbGluZ191c2VfZnByIChzdHJ1Y3QgdHlwZSAqdHlwZSkKK3sK KyAgc3RydWN0IHR5cGUgKnQ7CisgIGVudW0gdHlwZV9jb2RlIHR5cGVjb2Rl OworCisgIHQgPSB0eXBlOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICB0 ID0gY2hlY2tfdHlwZWRlZiAodCk7CisgICAgICB0eXBlY29kZSA9IFRZUEVf Q09ERSAodCk7CisgICAgICBpZiAodHlwZWNvZGUgIT0gVFlQRV9DT0RFX1NU UlVDVCkKKwlicmVhazsKKyAgICAgIGVsc2UgaWYgKFRZUEVfTkZJRUxEUyAo dCkgIT0gMSkKKwlyZXR1cm4gMDsKKyAgICAgIGVsc2UKKwl0ID0gVFlQRV9G SUVMRF9UWVBFICh0LCAwKTsKKyAgICB9CisKKyAgcmV0dXJuIHR5cGVjb2Rl ID09IFRZUEVfQ09ERV9GTFQ7Cit9CisKKy8qIFJldHVybiB0aGUgYWxpZ25t ZW50IChpbiBieXRlcykgb2YgdGhlIGdpdmVuIHR5cGUuICAqLworCitzdGF0 aWMgaW50CituZHMzMl90eXBlX2FsaWduIChzdHJ1Y3QgdHlwZSAqdHlwZSkK K3sKKyAgaW50IG47CisgIGludCBhbGlnbjsKKyAgaW50IGZhbGlnbjsKKwor ICB0eXBlID0gY2hlY2tfdHlwZWRlZiAodHlwZSk7CisgIHN3aXRjaCAoVFlQ RV9DT0RFICh0eXBlKSkKKyAgICB7CisgICAgZGVmYXVsdDoKKyAgICAgIC8q IFNob3VsZCBuZXZlciBoYXBwZW4uICAqLworICAgICAgaW50ZXJuYWxfZXJy b3IgKF9fRklMRV9fLCBfX0xJTkVfXywgXygidW5rbm93biB0eXBlIGFsaWdu bWVudCIpKTsKKyAgICAgIHJldHVybiA0OworCisgICAgY2FzZSBUWVBFX0NP REVfUFRSOgorICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06CisgICAgY2FzZSBU WVBFX0NPREVfSU5UOgorICAgIGNhc2UgVFlQRV9DT0RFX0ZMVDoKKyAgICBj YXNlIFRZUEVfQ09ERV9TRVQ6CisgICAgY2FzZSBUWVBFX0NPREVfUkFOR0U6 CisgICAgY2FzZSBUWVBFX0NPREVfUkVGOgorICAgIGNhc2UgVFlQRV9DT0RF X0NIQVI6CisgICAgY2FzZSBUWVBFX0NPREVfQk9PTDoKKyAgICAgIHJldHVy biBUWVBFX0xFTkdUSCAodHlwZSk7CisKKyAgICBjYXNlIFRZUEVfQ09ERV9B UlJBWToKKyAgICBjYXNlIFRZUEVfQ09ERV9DT01QTEVYOgorICAgICAgcmV0 dXJuIG5kczMyX3R5cGVfYWxpZ24gKFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUp KTsKKworICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAgICBjYXNlIFRZ UEVfQ09ERV9VTklPTjoKKyAgICAgIGFsaWduID0gMTsKKyAgICAgIGZvciAo biA9IDA7IG4gPCBUWVBFX05GSUVMRFMgKHR5cGUpOyBuKyspCisJeworCSAg ZmFsaWduID0gbmRzMzJfdHlwZV9hbGlnbiAoVFlQRV9GSUVMRF9UWVBFICh0 eXBlLCBuKSk7CisJICBpZiAoZmFsaWduID4gYWxpZ24pCisJICAgIGFsaWdu ID0gZmFsaWduOworCX0KKyAgICAgIHJldHVybiBhbGlnbjsKKyAgICB9Cit9 CisKKy8qIEltcGxlbWVudCB0aGUgInB1c2hfZHVtbXlfY2FsbCIgZ2RiYXJj aCBtZXRob2QuICAqLworCitzdGF0aWMgQ09SRV9BRERSCituZHMzMl9wdXNo X2R1bW15X2NhbGwgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3Qg dmFsdWUgKmZ1bmN0aW9uLAorCQkgICAgICAgc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgQ09SRV9BRERSIGJwX2FkZHIsCisJCSAgICAgICBpbnQgbmFy Z3MsIHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIENPUkVfQUREUiBzcCwKKwkJICAg ICAgIGludCBzdHJ1Y3RfcmV0dXJuLCBDT1JFX0FERFIgc3RydWN0X2FkZHIp Cit7CisgIGNvbnN0IGludCBSRU5EID0gNjsJCS8qIEVuZCBmb3IgcmVnaXN0 ZXIgb2Zmc2V0LiAgKi8KKyAgaW50IGdvZmYgPSAwOwkJCS8qIEN1cnJlbnQg Z3ByIG9mZnNldCBmb3IgYXJndW1lbnQuICAqLworICBpbnQgZm9mZiA9IDA7 CQkJLyogQ3VycmVudCBmcHIgb2Zmc2V0IGZvciBhcmd1bWVudC4gICovCisg IGludCBzb2ZmID0gMDsJCQkvKiBDdXJyZW50IHN0YWNrIG9mZnNldCBmb3Ig YXJndW1lbnQuICAqLworICBpbnQgaTsKKyAgVUxPTkdFU1QgcmVndmFsOwor ICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9v cmRlciAoZ2RiYXJjaCk7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAg PSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworICBzdHJ1Y3QgdHlwZSAqZnVu Y190eXBlID0gdmFsdWVfdHlwZSAoZnVuY3Rpb24pOworICBpbnQgYWJpX3Vz ZV9mcHIgPSBuZHMzMl9hYmlfdXNlX2ZwciAodGRlcC0+YWJpKTsKKyAgaW50 IGFiaV9zcGxpdCA9IG5kczMyX2FiaV9zcGxpdCAodGRlcC0+YWJpKTsKKwor ICAvKiBTZXQgdGhlIHJldHVybiBhZGRyZXNzLiAgRm9yIHRoZSBORFMzMiwg dGhlIHJldHVybiBicmVha3BvaW50IGlzCisgICAgIGFsd2F5cyBhdCBCUF9B RERSLiAgKi8KKyAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChy ZWdjYWNoZSwgTkRTMzJfTFBfUkVHTlVNLCBicF9hZGRyKTsKKworICAvKiBJ ZiBTVFJVQ1RfUkVUVVJOIGlzIHRydWUsIHRoZW4gdGhlIHN0cnVjdCByZXR1 cm4gYWRkcmVzcyAoaW4KKyAgICAgU1RSVUNUX0FERFIpIHdpbGwgY29uc3Vt ZSB0aGUgZmlyc3QgYXJndW1lbnQtcGFzc2luZyByZWdpc3Rlci4KKyAgICAg Qm90aCBhZGp1c3QgdGhlIHJlZ2lzdGVyIGNvdW50IGFuZCBzdG9yZSB0aGF0 IHZhbHVlLiAgKi8KKyAgaWYgKHN0cnVjdF9yZXR1cm4pCisgICAgeworICAg ICAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwg TkRTMzJfUjBfUkVHTlVNLCBzdHJ1Y3RfYWRkcik7CisgICAgICBnb2ZmKys7 CisgICAgfQorCisgIC8qIE5vdyBtYWtlIHN1cmUgdGhlcmUncyBzcGFjZSBv biB0aGUgc3RhY2sgKi8KKyAgZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKysp CisgICAgeworICAgICAgc3RydWN0IHR5cGUgKnR5cGUgPSB2YWx1ZV90eXBl IChhcmdzW2ldKTsKKyAgICAgIGludCBhbGlnbiA9IG5kczMyX3R5cGVfYWxp Z24gKHR5cGUpOworCisgICAgICAvKiBJZiBhbGlnbiBpcyB6ZXJvLCBpdCBt YXkgYmUgYW4gZW1wdHkgc3RydWN0LgorCSBKdXN0IGlnbm9yZSB0aGUgYXJn dW1lbnQgb2YgZW1wdHkgc3RydWN0LiAgKi8KKyAgICAgIGlmIChhbGlnbiA9 PSAwKQorCWNvbnRpbnVlOworCisgICAgICBzcCAtPSBUWVBFX0xFTkdUSCAo dHlwZSk7CisgICAgICBzcCA9IGFsaWduX2Rvd24gKHNwLCBhbGlnbik7Cisg ICAgfQorCisgIC8qIFN0YWNrIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuICAq LworICBzcCA9IGFsaWduX2Rvd24gKHNwLCA4KTsKKworICBzb2ZmID0gMDsK KyAgZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisgICAgeworICAgICAg Y29uc3QgZ2RiX2J5dGUgKnZhbDsKKyAgICAgIGludCBhbGlnbiwgbGVuOwor ICAgICAgc3RydWN0IHR5cGUgKnR5cGU7CisgICAgICBpbnQgY2FsbGluZ191 c2VfZnByOworICAgICAgaW50IHVzZV9mcHIgPSAwOworCisgICAgICB0eXBl ID0gdmFsdWVfdHlwZSAoYXJnc1tpXSk7CisgICAgICBjYWxsaW5nX3VzZV9m cHIgPSBuZHMzMl9jaGVja19jYWxsaW5nX3VzZV9mcHIgKHR5cGUpOworICAg ICAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOworICAgICAgYWxpZ24gPSBu ZHMzMl90eXBlX2FsaWduICh0eXBlKTsKKyAgICAgIHZhbCA9IHZhbHVlX2Nv bnRlbnRzIChhcmdzW2ldKTsKKworICAgICAgLyogVGhlIHNpemUgb2YgYSBj b21wb3NpdGUgdHlwZSBsYXJnZXIgdGhhbiA0IGJ5dGVzIHdpbGwgYmUgcm91 bmRlZAorCSB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiA0LiAgKi8K KyAgICAgIGlmIChsZW4gPiA0KQorCWxlbiA9IGFsaWduX3VwIChsZW4sIDQp OworCisgICAgICAvKiBWYXJpYWRpYyBmdW5jdGlvbnMgYXJlIGhhbmRsZWQg ZGlmZmVyZW50bHkgYmV0d2VlbiBBQUJJIGFuZCBBQkkyRlArLgorCisJIEZv ciBBQUJJLCB0aGUgY2FsbGVyIHB1c2hlcyBhcmd1bWVudHMgaW4gcmVnaXN0 ZXJzLCBjYWxsZWUgc3RvcmVzCisJIHVubmFtZWQgYXJndW1lbnRzIGluIHN0 YWNrLCBhbmQgdGhlbiB2YV9hcmcgZmV0Y2ggYXJndW1lbnRzIGluIHN0YWNr LgorCSBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHZhcmlh ZGljIGZ1bmN0aW9ucyBzcGVjaWFsbHkuCisKKwkgRm9yIEFCSTJGUCssIHRo ZSBjYWxsZXIgcHVzaGVzIG9ubHkgbmFtZWQgYXJndW1lbnRzIGluIHJlZ2lz dGVycworCSBhbmQgcHVzaGVzIGFsbCB1bm5hbWVkIGFyZ3VtZW50cyBpbiBz dGFjay4gICovCisKKyAgICAgIGlmIChhYmlfdXNlX2ZwciAmJiBUWVBFX1ZB UkFSR1MgKGZ1bmNfdHlwZSkKKwkgICYmIGkgPj0gVFlQRV9ORklFTERTIChm dW5jX3R5cGUpKQorCWdvdG8gdXNlX3N0YWNrOworCisgICAgICAvKiBUcnkg dG8gdXNlIEZQUnMgdG8gcGFzcyBhcmd1bWVudHMgb25seSB3aGVuCisJIDEu IFRoZSBwcm9ncmFtIGlzIGJ1aWx0IHVzaW5nIHRvb2xjaGFpbiB3aXRoIEZQ VSBzdXBwb3J0LgorCSAyLiBUaGUgdHlwZSBvZiB0aGlzIGFyZ3VtZW50IGNh biB1c2UgRlBSIHRvIHBhc3MgdmFsdWUuICAqLworICAgICAgdXNlX2ZwciA9 IGFiaV91c2VfZnByICYmIGNhbGxpbmdfdXNlX2ZwcjsKKworICAgICAgaWYg KHVzZV9mcHIpCisJeworCSAgLyogQWRqdXN0IGFsaWdubWVudC4gICovCisJ ICBpZiAoKGFsaWduID4+IDIpID4gMCkKKwkgICAgZm9mZiA9IGFsaWduX3Vw IChmb2ZmLCBhbGlnbiA+PiAyKTsKKworCSAgaWYgKGZvZmYgPCBSRU5EKQor CSAgICB7CisJICAgICAgaW50IGZzMF9yZWdudW0gPSB0ZGVwLT5mczBfcmVn bnVtOworCSAgICAgIGludCBmZDBfcmVnbnVtID0gdGRlcC0+ZmQwX3JlZ251 bTsKKworCSAgICAgIGlmIChmczBfcmVnbnVtID09IC0xKQorCQlnb3RvIGVy cm9yX25vX2ZwcjsKKworCSAgICAgIHN3aXRjaCAobGVuKQorCQl7CisJCWNh c2UgNDoKKwkJICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2NhY2hlLCBm czBfcmVnbnVtICsgZm9mZiwgdmFsKTsKKwkJICBmb2ZmKys7CisJCSAgYnJl YWs7CisJCWNhc2UgODoKKwkJICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJl Z2NhY2hlLCBmZDBfcmVnbnVtICsgZm9mZiAvIDIsIHZhbCk7CisJCSAgZm9m ZiArPSAyOworCQkgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgIC8qIExvbmcg ZG91YmxlPyAgKi8KKwkJICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9f TElORV9fLAorCQkJCSAgIkRvIG5vdCBrbm93IGhvdyB0byBoYW5kbGUgJWQt Ynl0ZSBkb3VibGUuXG4iLAorCQkJCSAgbGVuKTsKKwkJICBicmVhazsKKwkJ fQorCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJfQorICAgICAgZWxzZQor CXsKKwkgIC8qCisJICAgICBXaGVuIHBhc3NpbmcgYXJndW1lbnRzIHVzaW5n IEdQUnMsCisKKwkgICAgICogQSBjb21wb3NpdGUgdHlwZSBub3QgbGFyZ2Vy IHRoYW4gNCBieXRlcyBpcyBwYXNzZWQgaW4gJHJOLgorCSAgICAgICBUaGUg Zm9ybWF0IGlzIGFzIGlmIHRoZSB2YWx1ZSBpcyBsb2FkZWQgd2l0aCBsb2Fk IGluc3RydWN0aW9uCisJICAgICAgIG9mIGNvcnJlc3BvbmRpbmcgc2l6ZSAo ZS5nLiwgTEIsIExILCBMVykuCisKKwkgICAgICAgRm9yIGV4YW1wbGUsCisK KwkJICAgICAgIHIwCisJCSAgICAgICAzMSAgICAgIDAKKwkgICAgICAgTElU VExFOiBbeCB4IGIgYV0KKwkJICBCSUc6IFt4IHggYSBiXQorCisJICAgICAq IE90aGVyd2lzZSwgYSBjb21wb3NpdGUgdHlwZSBpcyBwYXNzZWQgaW4gY29u c2VjdXRpdmUgcmVnaXN0ZXJzLgorCSAgICAgICBUaGUgc2l6ZSBpcyByb3Vu ZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIDQuCisJICAgICAg IFRoZSBzdWNjZXNzaXZlIHJlZ2lzdGVycyBob2xkIHRoZSBwYXJ0cyBvZiB0 aGUgYXJndW1lbnQgYXMgaWYKKwkgICAgICAgd2VyZSBsb2FkZWQgdXNpbmcg bG13IGluc3RydWN0aW9ucy4KKworCSAgICAgICBGb3IgZXhhbXBsZSwKKwor CQkgICAgICAgcjAJIHIxCisJCSAgICAgICAzMSAgICAgIDAgMzEgICAgICAw CisJICAgICAgIExJVFRMRTogW2QgYyBiIGFdIFt4IHggeCBlXQorCQkgIEJJ RzogW2EgYiBjIGRdIFtlIHggeCB4XQorCSAgICovCisKKwkgIC8qIEFkanVz dCBhbGlnbm1lbnQuICAqLworCSAgaWYgKChhbGlnbiA+PiAyKSA+IDApCisJ ICAgIGdvZmYgPSBhbGlnbl91cCAoZ29mZiwgYWxpZ24gPj4gMik7CisKKwkg IGlmIChsZW4gPD0gKFJFTkQgLSBnb2ZmKSAqIDQpCisJICAgIHsKKwkgICAg ICAvKiBUaGlzIGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgd2hvbGx5IHZpYSBH UFJzLiAgKi8KKwkgICAgICB3aGlsZSAobGVuID4gMCkKKwkJeworCQkgIHJl Z3ZhbCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAodmFsLCAobGVuID4g NCkgPyA0IDogbGVuLAorCQkJCQkJICAgICBieXRlX29yZGVyKTsKKwkJICBy ZWdjYWNoZV9jb29rZWRfd3JpdGVfdW5zaWduZWQgKHJlZ2NhY2hlLAorCQkJ CQkJICBORFMzMl9SMF9SRUdOVU0gKyBnb2ZmLAorCQkJCQkJICByZWd2YWwp OworCQkgIGxlbiAtPSA0OworCQkgIHZhbCArPSA0OworCQkgIGdvZmYrKzsK KwkJfQorCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICBlbHNlIGlmIChh Ymlfc3BsaXQpCisJICAgIHsKKwkgICAgICAvKiBTb21lIHBhcnRzIG9mIHRo aXMgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCB2aWEgR1BScy4gICovCisJICAg ICAgd2hpbGUgKGdvZmYgPCBSRU5EKQorCQl7CisJCSAgcmVndmFsID0gZXh0 cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh2YWwsIChsZW4gPiA0KSA/IDQgOiBs ZW4sCisJCQkJCQkgICAgIGJ5dGVfb3JkZXIpOworCQkgIHJlZ2NhY2hlX2Nv b2tlZF93cml0ZV91bnNpZ25lZCAocmVnY2FjaGUsCisJCQkJCQkgIE5EUzMy X1IwX1JFR05VTSArIGdvZmYsCisJCQkJCQkgIHJlZ3ZhbCk7CisJCSAgbGVu IC09IDQ7CisJCSAgdmFsICs9IDQ7CisJCSAgZ29mZisrOworCQl9CisJICAg IH0KKwl9CisKK3VzZV9zdGFjazoKKyAgICAgIC8qCisJIFdoZW4gcHVzaGlu ZyAoc3BsaXQgcGFydHMgb2YpIGFuIGFyZ3VtZW50IGludG8gc3RhY2ssCisK KwkgKiBBIGNvbXBvc2l0ZSB0eXBlIG5vdCBsYXJnZXIgdGhhbiA0IGJ5dGVz IGlzIGNvcGllZCB0byBkaWZmZXJlbnQKKwkgICBiYXNlIGFkZHJlc3MuCisJ ICAgSW4gbGl0dGxlLWVuZGlhbiwgdGhlIGZpcnN0IGJ5dGUgb2YgdGhpcyBh cmd1bWVudCBpcyBhbGlnbmVkCisJICAgYXQgdGhlIGxvdyBhZGRyZXNzIG9m IHRoZSBuZXh0IGZyZWUgd29yZC4KKwkgICBJbiBiaWctZW5kaWFuLCB0aGUg bGFzdCBieXRlIG9mIHRoaXMgYXJndW1lbnQgaXMgYWxpZ25lZAorCSAgIGF0 IHRoZSBoaWdoIGFkZHJlc3Mgb2YgdGhlIG5leHQgZnJlZSB3b3JkLgorCisJ ICAgRm9yIGV4YW1wbGUsCisKKwkgICBzcCBbIC0gXSAgWyBjIF0gaGkKKwkg ICAgICBbIGMgXSAgWyBiIF0KKwkgICAgICBbIGIgXSAgWyBhIF0KKwkgICAg ICBbIGEgXSAgWyAtIF0gbG8KKwkgICAgIExJVFRMRSAgIEJJRworICAgICAg ICovCisKKyAgICAgIC8qIEFkanVzdCBhbGlnbm1lbnQuICAqLworICAgICAg c29mZiA9IGFsaWduX3VwIChzb2ZmLCBhbGlnbik7CisKKyAgICAgIHdoaWxl IChsZW4gPiAwKQorCXsKKwkgIGludCBybGVuID0gKGxlbiA+IDQpID8gNCA6 IGxlbjsKKworCSAgaWYgKGJ5dGVfb3JkZXIgPT0gQkZEX0VORElBTl9CSUcp CisJICAgIHdyaXRlX21lbW9yeSAoc3AgKyBzb2ZmICsgNCAtIHJsZW4sIHZh bCwgcmxlbik7CisJICBlbHNlCisJICAgIHdyaXRlX21lbW9yeSAoc3AgKyBz b2ZmLCB2YWwsIHJsZW4pOworCisJICBsZW4gLT0gNDsKKwkgIHZhbCArPSA0 OworCSAgc29mZiArPSA0OworCX0KKyAgICB9CisKKyAgLyogRmluYWxseSwg dXBkYXRlIHRoZSBTUCByZWdpc3Rlci4gICovCisgIHJlZ2NhY2hlX2Nvb2tl ZF93cml0ZV91bnNpZ25lZCAocmVnY2FjaGUsIE5EUzMyX1NQX1JFR05VTSwg c3ApOworCisgIHJldHVybiBzcDsKKworZXJyb3Jfbm9fZnByOgorICAvKiBJ ZiB1c2VfZnByLCBidXQgbm8gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgZXhp c3RzLAorICAgICB0aGVuIGl0IGlzIGFuIGVycm9yLiAgKi8KKyAgZXJyb3Ig KF8oIkZhaWwgdG8gY2FsbC4gRlBVIHJlZ2lzdGVycyBhcmUgcmVxdWlyZWQu IikpOworfQorDAorLyogUmVhZCwgZm9yIGFyY2hpdGVjdHVyZSBHREJBUkNI LCBhIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSBvZiBUWVBFCisgICBmcm9tIFJF R0NBQ0hFLCBhbmQgY29weSB0aGF0IGludG8gVkFMQlVGLiAgKi8KKworc3Rh dGljIHZvaWQKK25kczMyX2V4dHJhY3RfcmV0dXJuX3ZhbHVlIChzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IHR5cGUgKnR5cGUsCisJCQkgICAg c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgZ2RiX2J5dGUgKnZhbGJ1ZikK K3sKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5 dGVfb3JkZXIgKGdkYmFyY2gpOworICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0 ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKyAgaW50IGFiaV91c2Vf ZnByID0gbmRzMzJfYWJpX3VzZV9mcHIgKHRkZXAtPmFiaSk7CisgIGludCBj YWxsaW5nX3VzZV9mcHI7CisgIGludCBsZW47CisKKyAgY2FsbGluZ191c2Vf ZnByID0gbmRzMzJfY2hlY2tfY2FsbGluZ191c2VfZnByICh0eXBlKTsKKyAg bGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOworCisgIGlmIChhYmlfdXNlX2Zw ciAmJiBjYWxsaW5nX3VzZV9mcHIpCisgICAgeworICAgICAgaWYgKGxlbiA9 PSA0KQorCXJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgdGRlcC0+ ZnMwX3JlZ251bSwgdmFsYnVmKTsKKyAgICAgIGVsc2UgaWYgKGxlbiA9PSA4 KQorCXJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgdGRlcC0+ZmQw X3JlZ251bSwgdmFsYnVmKTsKKyAgICAgIGVsc2UKKwlpbnRlcm5hbF9lcnJv ciAoX19GSUxFX18sIF9fTElORV9fLAorCQkJXygiQ2Fubm90IGV4dHJhY3Qg cmV0dXJuIHZhbHVlIG9mICVkIGJ5dGVzICIKKwkJCSAgImxvbmcgZmxvYXRp bmctcG9pbnQuIiksIGxlbik7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgLyoKKwkgV2hlbiByZXR1cm5pbmcgcmVzdWx0LAorCisJICogQSBjb21w b3NpdGUgdHlwZSBub3QgbGFyZ2VyIHRoYW4gNCBieXRlcyBpcyByZXR1cm5l ZCBpbiAkcjAuCisJICAgVGhlIGZvcm1hdCBpcyBhcyBpZiB0aGUgcmVzdWx0 IGlzIGxvYWRlZCB3aXRoIGxvYWQgaW5zdHJ1Y3Rpb24KKwkgICBvZiBjb3Jy ZXNwb25kaW5nIHNpemUgKGUuZy4sIExCLCBMSCwgTFcpLgorCisJICAgRm9y IGV4YW1wbGUsCisKKwkJICAgcjAKKwkJICAgMzEgICAgICAwCisJICAgTElU VExFOiBbeCB4IGIgYV0KKwkgICAgICBCSUc6IFt4IHggYSBiXQorCisJICog T3RoZXJ3aXNlLCBhIGNvbXBvc2l0ZSB0eXBlIG5vdCBsYXJnZXIgdGhhbiA4 IGJ5dGVzIGlzIHJldHVybmVkCisJICAgaW4gJHIwIGFuZCAkcjEuCisJICAg SW4gbGl0dGxlLWVuZGlhbiwgdGhlIGZpcnN0IHdvcmQgaXMgbG9hZGVkIGlu ICRyMC4KKwkgICBJbiBiaWctZW5kaWFuLCB0aGUgbGFzdCB3b3JkIGlzIGxv YWRlZCBpbiAkcjEuCisKKwkgICBGb3IgZXhhbXBsZSwKKworCQkgICByMAkg ICAgIHIxCisJCSAgIDMxICAgICAgMCAzMSAgICAgIDAKKwkgICBMSVRUTEU6 IFtkIGMgYiBhXSBbeCB4IHggZV0KKwkgICAgICBCSUc6IFt4IHggeCBhXSBb YiBjIGQgZV0KKyAgICAgICAqLworCisgICAgICBVTE9OR0VTVCB0bXA7CisK KyAgICAgIGlmIChsZW4gPCA0KQorCXsKKwkgIC8qIEJ5IHVzaW5nIHN0b3Jl X3Vuc2lnbmVkX2ludGVnZXIgd2UgYXZvaWQgaGF2aW5nIHRvIGRvCisJICAg ICBhbnl0aGluZyBzcGVjaWFsIGZvciBzbWFsbCBiaWctZW5kaWFuIHZhbHVl cy4gICovCisJICByZWdjYWNoZV9jb29rZWRfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIE5EUzMyX1IwX1JFR05VTSwgJnRtcCk7CisJICBzdG9yZV91bnNp Z25lZF9pbnRlZ2VyICh2YWxidWYsIGxlbiwgYnl0ZV9vcmRlciwgdG1wKTsK Kwl9CisgICAgICBlbHNlIGlmIChsZW4gPT0gNCkKKwl7CisJICByZWdjYWNo ZV9jb29rZWRfcmVhZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSwgdmFs YnVmKTsKKwl9CisgICAgICBlbHNlIGlmIChsZW4gPCA4KQorCXsKKwkgIGlu dCBsZW4xLCBsZW4yOworCisJICBsZW4xID0gYnl0ZV9vcmRlciA9PSBCRkRf RU5ESUFOX0JJRyA/IGxlbiAtIDQgOiA0OworCSAgbGVuMiA9IGxlbiAtIGxl bjE7CisKKwkgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgTkRTMzJfUjBfUkVHTlVNLCAmdG1wKTsKKwkgIHN0b3JlX3Vuc2ln bmVkX2ludGVnZXIgKHZhbGJ1ZiwgbGVuMSwgYnl0ZV9vcmRlciwgdG1wKTsK KworCSAgcmVnY2FjaGVfY29va2VkX3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCBORFMzMl9SMF9SRUdOVU0gKyAxLCAmdG1wKTsKKwkgIHN0b3JlX3Vuc2ln bmVkX2ludGVnZXIgKHZhbGJ1ZiArIGxlbjEsIGxlbjIsIGJ5dGVfb3JkZXIs IHRtcCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlZ2NhY2hlX2Nvb2tl ZF9yZWFkIChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCB2YWxidWYpOwor CSAgcmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hlLCBORFMzMl9SMF9S RUdOVU0gKyAxLCB2YWxidWYgKyA0KTsKKwl9CisgICAgfQorfQorCisvKiBX cml0ZSwgZm9yIGFyY2hpdGVjdHVyZSBHREJBUkNILCBhIGZ1bmN0aW9uIHJl dHVybiB2YWx1ZSBvZiBUWVBFCisgICBmcm9tIFZBTEJVRiBpbnRvIFJFR0NB Q0hFLiAgKi8KKworc3RhdGljIHZvaWQKK25kczMyX3N0b3JlX3JldHVybl92 YWx1ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0eXBlICp0 eXBlLAorCQkJICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjb25zdCBn ZGJfYnl0ZSAqdmFsYnVmKQoreworICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9v cmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7CisgIHN0cnVj dCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gp OworICBpbnQgYWJpX3VzZV9mcHIgPSBuZHMzMl9hYmlfdXNlX2ZwciAodGRl cC0+YWJpKTsKKyAgaW50IGNhbGxpbmdfdXNlX2ZwcjsKKyAgaW50IGxlbjsK KworICBjYWxsaW5nX3VzZV9mcHIgPSBuZHMzMl9jaGVja19jYWxsaW5nX3Vz ZV9mcHIgKHR5cGUpOworICBsZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7CisK KyAgaWYgKGFiaV91c2VfZnByICYmIGNhbGxpbmdfdXNlX2ZwcikKKyAgICB7 CisgICAgICBpZiAobGVuID09IDQpCisJcmVnY2FjaGVfY29va2VkX3dyaXRl IChyZWdjYWNoZSwgdGRlcC0+ZnMwX3JlZ251bSwgdmFsYnVmKTsKKyAgICAg IGVsc2UgaWYgKGxlbiA9PSA4KQorCXJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAo cmVnY2FjaGUsIHRkZXAtPmZkMF9yZWdudW0sIHZhbGJ1Zik7CisgICAgICBl bHNlCisJaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJ CV8oIkNhbm5vdCBzdG9yZSByZXR1cm4gdmFsdWUgb2YgJWQgYnl0ZXMgIgor CQkJICAibG9uZyBmbG9hdGluZy1wb2ludC4iKSwgbGVuKTsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICBVTE9OR0VTVCByZWd2YWw7CisKKyAgICAg IGlmIChsZW4gPCA0KQorCXsKKwkgIHJlZ3ZhbCA9IGV4dHJhY3RfdW5zaWdu ZWRfaW50ZWdlciAodmFsYnVmLCBsZW4sIGJ5dGVfb3JkZXIpOworCSAgcmVn Y2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwgTkRTMzJf UjBfUkVHTlVNLCByZWd2YWwpOworCX0KKyAgICAgIGVsc2UgaWYgKGxlbiA9 PSA0KQorCXsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAocmVnY2FjaGUs IE5EUzMyX1IwX1JFR05VTSwgdmFsYnVmKTsKKwl9CisgICAgICBlbHNlIGlm IChsZW4gPCA4KQorCXsKKwkgIGludCBsZW4xLCBsZW4yOworCisJICBsZW4x ID0gYnl0ZV9vcmRlciA9PSBCRkRfRU5ESUFOX0JJRyA/IGxlbiAtIDQgOiA0 OworCSAgbGVuMiA9IGxlbiAtIGxlbjE7CisKKwkgIHJlZ3ZhbCA9IGV4dHJh Y3RfdW5zaWduZWRfaW50ZWdlciAodmFsYnVmLCBsZW4xLCBieXRlX29yZGVy KTsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZV91bnNpZ25lZCAocmVnY2Fj aGUsIE5EUzMyX1IwX1JFR05VTSwgcmVndmFsKTsKKworCSAgcmVndmFsID0g ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh2YWxidWYgKyBsZW4xLCBsZW4y LCBieXRlX29yZGVyKTsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZV91bnNp Z25lZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSArIDEsCisJCQkJCSAg cmVndmFsKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVnY2FjaGVfY29v a2VkX3dyaXRlIChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCB2YWxidWYp OworCSAgcmVnY2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgTkRTMzJf UjBfUkVHTlVNICsgMSwgdmFsYnVmICsgNCk7CisJfQorICAgIH0KK30KKwor LyogSW1wbGVtZW50IHRoZSAicmV0dXJuX3ZhbHVlIiBnZGJhcmNoIG1ldGhv ZC4KKworICAgRGV0ZXJtaW5lLCBmb3IgYXJjaGl0ZWN0dXJlIEdEQkFSQ0gs IGhvdyBhIHJldHVybiB2YWx1ZSBvZiBUWVBFCisgICBzaG91bGQgYmUgcmV0 dXJuZWQuICBJZiBpdCBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCBpbiBy ZWdpc3RlcnMsCisgICBhbmQgUkVBREJVRiBpcyBub24temVybywgcmVhZCB0 aGUgYXBwcm9wcmlhdGUgdmFsdWUgZnJvbSBSRUdDQUNIRSwKKyAgIGFuZCBj b3B5IGl0IGludG8gUkVBREJVRi4gIElmIFdSSVRFQlVGIGlzIG5vbi16ZXJv LCB3cml0ZSB0aGUgdmFsdWUKKyAgIGZyb20gV1JJVEVCVUYgaW50byBSRUdD QUNIRS4gICovCisKK3N0YXRpYyBlbnVtIHJldHVybl92YWx1ZV9jb252ZW50 aW9uCituZHMzMl9yZXR1cm5fdmFsdWUgKHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoLCBzdHJ1Y3QgdmFsdWUgKmZ1bmNfdHlwZSwKKwkJICAgIHN0cnVjdCB0 eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorCQkgICAg Z2RiX2J5dGUgKnJlYWRidWYsIGNvbnN0IGdkYl9ieXRlICp3cml0ZWJ1ZikK K3sKKyAgaWYgKFRZUEVfTEVOR1RIICh0eXBlKSA+IDgpCisgICAgeworICAg ICAgcmV0dXJuIFJFVFVSTl9WQUxVRV9TVFJVQ1RfQ09OVkVOVElPTjsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVhZGJ1ZiAhPSBOVUxM KQorCW5kczMyX2V4dHJhY3RfcmV0dXJuX3ZhbHVlIChnZGJhcmNoLCB0eXBl LCByZWdjYWNoZSwgcmVhZGJ1Zik7CisgICAgICBpZiAod3JpdGVidWYgIT0g TlVMTCkKKwluZHMzMl9zdG9yZV9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIHR5 cGUsIHJlZ2NhY2hlLCB3cml0ZWJ1Zik7CisKKyAgICAgIHJldHVybiBSRVRV Uk5fVkFMVUVfUkVHSVNURVJfQ09OVkVOVElPTjsKKyAgICB9Cit9CisMCisv KiBJbXBsZW1lbnQgdGhlICJnZXRfbG9uZ2ptcF90YXJnZXQiIGdkYmFyY2gg bWV0aG9kLiAgKi8KKworc3RhdGljIGludAorbmRzMzJfZ2V0X2xvbmdqbXBf dGFyZ2V0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIENPUkVfQUREUiAq cGMpCit7CisgIGdkYl9ieXRlIGJ1Zls0XTsKKyAgQ09SRV9BRERSIGpiX2Fk ZHI7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2Fy Y2ggKGZyYW1lKTsKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBn ZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworCisgIGpiX2FkZHIgPSBn ZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKGZyYW1lLCBORFMzMl9SMF9S RUdOVU0pOworCisgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGpiX2FkZHIg KyAxMSAqIDQsIGJ1ZiwgNCkpCisgICAgcmV0dXJuIDA7CisKKyAgKnBjID0g ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChidWYsIDQsIGJ5dGVfb3JkZXIp OworICByZXR1cm4gMTsKK30KKwwKKy8qIFZhbGlkYXRlIHRoZSBnaXZlbiBU REVTQywgYW5kIGZpeGVkLW51bWJlciBzb21lIHJlZ2lzdGVycyBpbiBpdC4K KyAgIFJldHVybiAwIGlmIHRoZSBnaXZlbiBUREVTQyBkb2VzIG5vdCBjb250 YWluIHRoZSByZXF1aXJlZCBmZWF0dXJlCisgICBvciBub3QgY29udGFpbiBy ZXF1aXJlZCByZWdpc3RlcnMuICAqLworCitzdGF0aWMgaW50CituZHMzMl92 YWxpZGF0ZV90ZGVzY19wIChjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRk ZXNjLAorCQkJc3RydWN0IHRkZXNjX2FyY2hfZGF0YSAqdGRlc2NfZGF0YSwK KwkJCXN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXApCit7CisgIGNvbnN0IHN0 cnVjdCB0ZGVzY19mZWF0dXJlICpmZWF0dXJlOworICBpbnQgaSwgdmFsaWRf cDsKKworICBmZWF0dXJlID0gdGRlc2NfZmluZF9mZWF0dXJlICh0ZGVzYywg Im9yZy5nbnUuZ2RiLm5kczMyLmNvcmUiKTsKKyAgaWYgKGZlYXR1cmUgPT0g TlVMTCkKKyAgICByZXR1cm4gMDsKKworICB2YWxpZF9wID0gMTsKKyAgLyog VmFsaWRhdGUgYW5kIGZpeGVkLW51bWJlciBSMC1SMTAuICAqLworICBmb3Ig KGkgPSBORFMzMl9SMF9SRUdOVU07IGkgPD0gTkRTMzJfUjBfUkVHTlVNICsg MTA7IGkrKykKKyAgICB2YWxpZF9wICY9IHRkZXNjX251bWJlcmVkX3JlZ2lz dGVyIChmZWF0dXJlLCB0ZGVzY19kYXRhLCBpLAorCQkJCQluZHMzMl9yZWdp c3Rlcl9uYW1lc1tpXSk7CisKKyAgLyogVmFsaWRhdGUgUjE1LiAgKi8KKyAg dmFsaWRfcCAmPSB0ZGVzY191bm51bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJl LAorCQkJCQluZHMzMl9yZWdpc3Rlcl9uYW1lc1tORFMzMl9UQV9SRUdOVU1d KTsKKworICAvKiBWYWxpZGF0ZSBhbmQgZml4ZWQtbnVtYmVyIEZQLCBHUCwg TFAsIFNQLCBQQy4gICovCisgIGZvciAoaSA9IE5EUzMyX0ZQX1JFR05VTTsg aSA8PSBORFMzMl9QQ19SRUdOVU07IGkrKykKKyAgICB2YWxpZF9wICY9IHRk ZXNjX251bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCB0ZGVzY19kYXRhLCBp LAorCQkJCQluZHMzMl9yZWdpc3Rlcl9uYW1lc1tpXSk7CisKKyAgaWYgKCF2 YWxpZF9wKQorICAgIHJldHVybiAwOworCisgIC8qIEZpeGVkLW51bWJlciBS MTEtUjI3LiAgKi8KKyAgZm9yIChpID0gTkRTMzJfUjBfUkVHTlVNICsgMTE7 IGkgPD0gTkRTMzJfUjBfUkVHTlVNICsgMjc7IGkrKykKKyAgICB0ZGVzY19u dW1iZXJlZF9yZWdpc3RlciAoZmVhdHVyZSwgdGRlc2NfZGF0YSwgaSwgbmRz MzJfcmVnaXN0ZXJfbmFtZXNbaV0pOworCisgIHRkZXAtPmZwdV9mcmVnID0g LTE7CisgIGZlYXR1cmUgPSB0ZGVzY19maW5kX2ZlYXR1cmUgKHRkZXNjLCAi b3JnLmdudS5nZGIubmRzMzIuZnB1Iik7CisgIGlmIChmZWF0dXJlICE9IE5V TEwpCisgICAgeworICAgICAgaW50IG51bV9mZHJfcmVncywgbnVtX2Zzcl9y ZWdzLCBmczBfcmVnbnVtLCBudW1fbGlzdGVkX2ZzcjsKKyAgICAgIGludCBm cmVnID0gLTE7CisKKyAgICAgIC8qIEd1ZXNzIEZQVSBjb25maWd1cmF0aW9u IHZpYSBsaXN0ZWQgcmVnaXN0ZXJzLiAgKi8KKyAgICAgIGlmICh0ZGVzY191 bm51bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCAiZmQzMSIpKQorCWZyZWcg PSAzOworICAgICAgZWxzZSBpZiAodGRlc2NfdW5udW1iZXJlZF9yZWdpc3Rl ciAoZmVhdHVyZSwgImZkMTUiKSkKKwlmcmVnID0gMjsKKyAgICAgIGVsc2Ug aWYgKHRkZXNjX3VubnVtYmVyZWRfcmVnaXN0ZXIgKGZlYXR1cmUsICJmZDci KSkKKwlmcmVnID0gMTsKKyAgICAgIGVsc2UgaWYgKHRkZXNjX3VubnVtYmVy ZWRfcmVnaXN0ZXIgKGZlYXR1cmUsICJmZDMiKSkKKwlmcmVnID0gMDsKKwor ICAgICAgaWYgKGZyZWcgPT0gLTEpCisJLyogUmVxdWlyZWQgRkRSIGlzIG5v dCBmb3VuZC4gICovCisJcmV0dXJuIDA7CisKKyAgICAgIC8qIFJlY29yZCBn dWVzc2VkIEZQVSBjb25maWd1cmF0aW9uLiAgKi8KKyAgICAgIHRkZXAtPmZw dV9mcmVnID0gZnJlZzsKKworICAgICAgLyogVmFsaWRhdGUgYW5kIGZpeGVk LW51bWJlciByZXF1aXJlZCBGRFJzLiAgKi8KKyAgICAgIG51bV9mZHJfcmVn cyA9IG51bV9mZHJfbWFwW2ZyZWddOworICAgICAgZm9yIChpID0gMDsgaSA8 IG51bV9mZHJfcmVnczsgaSsrKQorCXZhbGlkX3AgJj0gdGRlc2NfbnVtYmVy ZWRfcmVnaXN0ZXIgKGZlYXR1cmUsIHRkZXNjX2RhdGEsCisJCQkJCSAgICBO RFMzMl9GRDBfUkVHTlVNICsgaSwKKwkJCQkJICAgIG5kczMyX2Zkcl9yZWdp c3Rlcl9uYW1lc1tpXSk7CisgICAgICBpZiAoIXZhbGlkX3ApCisJcmV0dXJu IDA7CisKKyAgICAgIC8qIENvdW50IHRoZSBudW1iZXIgb2YgbGlzdGVkIEZT UnMsIGFuZCBmaXhlZC1udW1iZXIgdGhlbSBpZiBwcmVzZW50LiAgKi8KKyAg ICAgIG51bV9mc3JfcmVncyA9IG51bV9mc3JfbWFwW2ZyZWddOworICAgICAg ZnMwX3JlZ251bSA9IE5EUzMyX0ZEMF9SRUdOVU0gKyBudW1fZmRyX3JlZ3M7 CisgICAgICBudW1fbGlzdGVkX2ZzciA9IDA7CisgICAgICBmb3IgKGkgPSAw OyBpIDwgbnVtX2Zzcl9yZWdzOyBpKyspCisJbnVtX2xpc3RlZF9mc3IgKz0g dGRlc2NfbnVtYmVyZWRfcmVnaXN0ZXIgKGZlYXR1cmUsIHRkZXNjX2RhdGEs CisJCQkJCQkgICBmczBfcmVnbnVtICsgaSwKKwkJCQkJCSAgIG5kczMyX2Zz cl9yZWdpc3Rlcl9uYW1lc1tpXSk7CisKKyAgICAgIGlmIChudW1fbGlzdGVk X2ZzciA9PSAwKQorCS8qIE5vIHJlcXVpcmVkIEZTUnMgYXJlIGxpc3RlZCBl eHBsaWNpdGx5LCAgbWFrZSB0aGVtIHBzZXVkbyByZWdpc3RlcnMKKwkgICBv ZiBGRFJzLiAgKi8KKwl0ZGVwLT51c2VfcHNldWRvX2ZzcnMgPSAxOworICAg ICAgZWxzZSBpZiAobnVtX2xpc3RlZF9mc3IgPT0gbnVtX2Zzcl9yZWdzKQor CS8qIEFsbCByZXF1aXJlZCBGU1JzIGFyZSBsaXN0ZWQgZXhwbGljaXRseS4g ICovCisJdGRlcC0+dXNlX3BzZXVkb19mc3JzID0gMDsKKyAgICAgIGVsc2UK KwkvKiBTb21lIHJlcXVpcmVkIEZTUnMgYXJlIG1pc3NpbmcuICAqLworCXJl dHVybiAwOworICAgIH0KKworICByZXR1cm4gMTsKK30KKworLyogSW5pdGlh bGl6ZSB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgYmFzZWQgb24gSU5GTy4g IElmIHBvc3NpYmxlLAorICAgcmUtdXNlIGFuIGFyY2hpdGVjdHVyZSBmcm9t IEFSQ0hFUywgd2hpY2ggaXMgYSBsaXN0IG9mCisgICBhcmNoaXRlY3R1cmVz IGFscmVhZHkgY3JlYXRlZCBkdXJpbmcgdGhpcyBkZWJ1Z2dpbmcgc2Vzc2lv bi4KKworICAgQ2FsbGVkIGUuZy4gYXQgcHJvZ3JhbSBzdGFydHVwLCB3aGVu IHJlYWRpbmcgYSBjb3JlIGZpbGUsIGFuZCB3aGVuCisgICByZWFkaW5nIGEg YmluYXJ5IGZpbGUuICAqLworCitzdGF0aWMgc3RydWN0IGdkYmFyY2ggKgor bmRzMzJfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8s IHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKK3sKKyAgc3RydWN0IGdk YmFyY2ggKmdkYmFyY2g7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7 CisgIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmJlc3RfYXJjaDsKKyAgc3RydWN0 IHRkZXNjX2FyY2hfZGF0YSAqdGRlc2NfZGF0YSA9IE5VTEw7CisgIGNvbnN0 IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2MgPSBpbmZvLnRhcmdldF9kZXNj OworICBpbnQgaSwgbnVtX3JlZ3MsIG1heHJlZ3M7CisKKyAgdGRlcCA9IFhD TkVXIChzdHJ1Y3QgZ2RiYXJjaF90ZGVwKTsKKworICAvKiBFeHRyYWN0IHRo ZSBlbGZfZmxhZ3MgaWYgYXZhaWxhYmxlLiAgKi8KKyAgdGRlcC0+YWJpID0g RV9ORFNfQUJJX0FBQkk7CisgIGlmIChpbmZvLmFiZmQgJiYgYmZkX2dldF9m bGF2b3VyIChpbmZvLmFiZmQpID09IGJmZF90YXJnZXRfZWxmX2ZsYXZvdXIp CisgICAgeworICAgICAgaW50IGVmbGFncyA9IGVsZl9lbGZoZWFkZXIgKGlu Zm8uYWJmZCktPmVfZmxhZ3M7CisgICAgICB0ZGVwLT5hYmkgPSBlZmxhZ3Mg JiBFRl9ORFNfQUJJOworICAgIH0KKworICAvKiBJZiB0aGVyZSBpcyBhbHJl YWR5IGEgY2FuZGlkYXRlLCB1c2UgaXQuICAqLworICBmb3IgKGJlc3RfYXJj aCA9IGdkYmFyY2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYXJjaGVzLCAmaW5m byk7CisgICAgICAgYmVzdF9hcmNoICE9IE5VTEw7CisgICAgICAgYmVzdF9h cmNoID0gZ2RiYXJjaF9saXN0X2xvb2t1cF9ieV9pbmZvIChiZXN0X2FyY2gt Pm5leHQsICZpbmZvKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZ2RiYXJjaF90 ZGVwICppZGVwID0gZ2RiYXJjaF90ZGVwIChiZXN0X2FyY2gtPmdkYmFyY2gp OworCisgICAgICBpZiAoaWRlcC0+YWJpICE9IHRkZXAtPmFiaSkKKwljb250 aW51ZTsKKworICAgICAgLyogRm91bmQgYSBtYXRjaC4gICovCisgICAgICBi cmVhazsKKyAgICB9CisKKyAgaWYgKGJlc3RfYXJjaCAhPSBOVUxMKQorICAg IHsKKyAgICAgIHhmcmVlICh0ZGVwKTsKKyAgICAgIHJldHVybiBiZXN0X2Fy Y2gtPmdkYmFyY2g7CisgICAgfQorCisgIGlmICghdGRlc2NfaGFzX3JlZ2lz dGVycyAodGRlc2MpKQorICAgIHRkZXNjID0gdGRlc2NfbmRzMzI7CisKKyAg dGRlc2NfZGF0YSA9IHRkZXNjX2RhdGFfYWxsb2MgKCk7CisKKyAgaWYgKCFu ZHMzMl92YWxpZGF0ZV90ZGVzY19wICh0ZGVzYywgdGRlc2NfZGF0YSwgdGRl cCkpCisgICAgeworICAgICAgdGRlc2NfZGF0YV9jbGVhbnVwICh0ZGVzY19k YXRhKTsKKyAgICAgIHhmcmVlICh0ZGVwKTsKKyAgICAgIHJldHVybiBOVUxM OworICAgIH0KKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIG5ldyBh cmNoaXRlY3R1cmUuICAqLworICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAo JmluZm8sIHRkZXApOworCisgIGlmICh0ZGVwLT5mcHVfZnJlZyA9PSAtMSkK KyAgICBudW1fcmVncyA9IE5EUzMyX05VTV9SRUdTOworICBlbHNlIGlmICh0 ZGVwLT51c2VfcHNldWRvX2ZzcnMgPT0gMSkKKyAgICB7CisgICAgICBzZXRf Z2RiYXJjaF9wc2V1ZG9fcmVnaXN0ZXJfcmVhZCAoZ2RiYXJjaCwgbmRzMzJf cHNldWRvX3JlZ2lzdGVyX3JlYWQpOworICAgICAgc2V0X2dkYmFyY2hfcHNl dWRvX3JlZ2lzdGVyX3dyaXRlIChnZGJhcmNoLCBuZHMzMl9wc2V1ZG9fcmVn aXN0ZXJfd3JpdGUpOworICAgICAgc2V0X3RkZXNjX3BzZXVkb19yZWdpc3Rl cl9uYW1lIChnZGJhcmNoLCBuZHMzMl9wc2V1ZG9fcmVnaXN0ZXJfbmFtZSk7 CisgICAgICBzZXRfdGRlc2NfcHNldWRvX3JlZ2lzdGVyX3R5cGUgKGdkYmFy Y2gsIG5kczMyX3BzZXVkb19yZWdpc3Rlcl90eXBlKTsKKyAgICAgIHNldF9n ZGJhcmNoX251bV9wc2V1ZG9fcmVncyAoZ2RiYXJjaCwgbnVtX2Zzcl9tYXBb dGRlcC0+ZnB1X2ZyZWddKTsKKworICAgICAgbnVtX3JlZ3MgPSBORFMzMl9G RDBfUkVHTlVNICsgbnVtX2Zkcl9tYXBbdGRlcC0+ZnB1X2ZyZWddOworICAg IH0KKyAgZWxzZQorICAgIG51bV9yZWdzID0gTkRTMzJfRkQwX1JFR05VTSAr IG51bV9mZHJfbWFwW3RkZXAtPmZwdV9mcmVnXQorCSAgICAgICArIG51bV9m c3JfbWFwW3RkZXAtPmZwdV9mcmVnXTsKKworICBzZXRfZ2RiYXJjaF9udW1f cmVncyAoZ2RiYXJjaCwgbnVtX3JlZ3MpOworICB0ZGVzY191c2VfcmVnaXN0 ZXJzIChnZGJhcmNoLCB0ZGVzYywgdGRlc2NfZGF0YSk7CisKKyAgLyogQ2Fj aGUgdGhlIHJlZ2lzdGVyIG51bWJlciBvZiBmczAgYW5kIGZkMC4gICovCisg IHRkZXAtPmZzMF9yZWdudW0gPSAtMTsKKyAgdGRlcC0+ZmQwX3JlZ251bSA9 IC0xOworICBpZiAodGRlcC0+ZnB1X2ZyZWcgIT0gLTEpCisgICAgeworICAg ICAgdGRlcC0+ZnMwX3JlZ251bSA9IHVzZXJfcmVnX21hcF9uYW1lX3RvX3Jl Z251bSAoZ2RiYXJjaCwgImZzMCIsIC0xKTsKKyAgICAgIHRkZXAtPmZkMF9y ZWdudW0gPSB1c2VyX3JlZ19tYXBfbmFtZV90b19yZWdudW0gKGdkYmFyY2gs ICJmZDAiLCAtMSk7CisgICAgfQorCisgIC8qIEFkZCBORFMzMiByZWdpc3Rl ciBhbGlhc2VzLiAgVG8gYXZvaWQgc2VhcmNoIGluIHVzZXIgcmVnaXN0ZXIg bmFtZSBzcGFjZSwKKyAgICAgdXNlcl9yZWdfbWFwX25hbWVfdG9fcmVnbnVt IGlzIG5vdCB1c2VkLiAgKi8KKyAgbWF4cmVncyA9IChnZGJhcmNoX251bV9y ZWdzIChnZGJhcmNoKSArIGdkYmFyY2hfbnVtX3BzZXVkb19yZWdzIChnZGJh cmNoKSk7CisgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFIChuZHMzMl9y ZWdpc3Rlcl9hbGlhc2VzKTsgaSsrKQorICAgIHsKKyAgICAgIGludCByZWdu dW0sIGo7CisKKyAgICAgIHJlZ251bSA9IC0xOworICAgICAgLyogU2VhcmNo IHJlZ2lzdGVyIG5hbWUgc3BhY2UuICAqLworICAgICAgZm9yIChqID0gMDsg aiA8IG1heHJlZ3M7IGorKykKKwl7CisJICBjb25zdCBjaGFyICpyZWduYW1l ID0gZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChnZGJhcmNoLCBqKTsKKworCSAg aWYgKHJlZ25hbWUgIT0gTlVMTAorCSAgICAgICYmIHN0cmNtcCAocmVnbmFt ZSwgbmRzMzJfcmVnaXN0ZXJfYWxpYXNlc1tpXS5uYW1lKSA9PSAwKQorCSAg ICB7CisJICAgICAgcmVnbnVtID0gajsKKwkgICAgICBicmVhazsKKwkgICAg fQorCX0KKworICAgICAgLyogVHJ5IG5leHQgYWxpYXMgZW50cnkgaWYgdGhl IGdpdmVuIG5hbWUgY2FuIG5vdCBiZSBmb3VuZCBpbiByZWdpc3RlcgorCSBu YW1lIHNwYWNlLiAgKi8KKyAgICAgIGlmIChyZWdudW0gPT0gLTEpCisJY29u dGludWU7CisKKyAgICAgIHVzZXJfcmVnX2FkZCAoZ2RiYXJjaCwgbmRzMzJf cmVnaXN0ZXJfYWxpYXNlc1tpXS5hbGlhcywKKwkJICAgIHZhbHVlX29mX25k czMyX3JlZywgKGNvbnN0IHZvaWQgKikgKGludHB0cl90KSByZWdudW0pOwor ICAgIH0KKworICBuZHMzMl9hZGRfcmVnZ3JvdXBzIChnZGJhcmNoKTsKKwor ICAvKiBIb29rIGluIEFCSS1zcGVjaWZpYyBvdmVycmlkZXMsIGlmIHRoZXkg aGF2ZSBiZWVuIHJlZ2lzdGVyZWQuICAqLworICBpbmZvLnRkZXBfaW5mbyA9 ICh2b2lkICopIHRkZXNjX2RhdGE7CisgIGdkYmFyY2hfaW5pdF9vc2FiaSAo aW5mbywgZ2RiYXJjaCk7CisKKyAgLyogT3ZlcnJpZGUgdGRlc2NfcmVnaXN0 ZXIgY2FsbGJhY2tzIGZvciBzeXN0ZW0gcmVnaXN0ZXJzLiAgKi8KKyAgc2V0 X2dkYmFyY2hfcmVnaXN0ZXJfcmVnZ3JvdXBfcCAoZ2RiYXJjaCwgbmRzMzJf cmVnaXN0ZXJfcmVnZ3JvdXBfcCk7CisKKyAgc2V0X2dkYmFyY2hfc3BfcmVn bnVtIChnZGJhcmNoLCBORFMzMl9TUF9SRUdOVU0pOworICBzZXRfZ2RiYXJj aF9wY19yZWdudW0gKGdkYmFyY2gsIE5EUzMyX1BDX1JFR05VTSk7CisgIHNl dF9nZGJhcmNoX3Vud2luZF9zcCAoZ2RiYXJjaCwgbmRzMzJfdW53aW5kX3Nw KTsKKyAgc2V0X2dkYmFyY2hfdW53aW5kX3BjIChnZGJhcmNoLCBuZHMzMl91 bndpbmRfcGMpOworICBzZXRfZ2RiYXJjaF9zdGFja19mcmFtZV9kZXN0cm95 ZWRfcCAoZ2RiYXJjaCwgbmRzMzJfc3RhY2tfZnJhbWVfZGVzdHJveWVkX3Ap OworICBzZXRfZ2RiYXJjaF9kd2FyZjJfcmVnX3RvX3JlZ251bSAoZ2RiYXJj aCwgbmRzMzJfZHdhcmYyX3JlZ190b19yZWdudW0pOworCisgIHNldF9nZGJh cmNoX3B1c2hfZHVtbXlfY2FsbCAoZ2RiYXJjaCwgbmRzMzJfcHVzaF9kdW1t eV9jYWxsKTsKKyAgc2V0X2dkYmFyY2hfcmV0dXJuX3ZhbHVlIChnZGJhcmNo LCBuZHMzMl9yZXR1cm5fdmFsdWUpOworICBzZXRfZ2RiYXJjaF9kdW1teV9p ZCAoZ2RiYXJjaCwgbmRzMzJfZHVtbXlfaWQpOworCisgIHNldF9nZGJhcmNo X3NraXBfcHJvbG9ndWUgKGdkYmFyY2gsIG5kczMyX3NraXBfcHJvbG9ndWUp OworICBzZXRfZ2RiYXJjaF9pbm5lcl90aGFuIChnZGJhcmNoLCBjb3JlX2Fk ZHJfbGVzc3RoYW4pOworICBzZXRfZ2RiYXJjaF9icmVha3BvaW50X2Zyb21f cGMgKGdkYmFyY2gsIG5kczMyX2JyZWFrcG9pbnRfZnJvbV9wYyk7CisKKyAg c2V0X2dkYmFyY2hfZnJhbWVfYWxpZ24gKGdkYmFyY2gsIG5kczMyX2ZyYW1l X2FsaWduKTsKKyAgZnJhbWVfYmFzZV9zZXRfZGVmYXVsdCAoZ2RiYXJjaCwg Jm5kczMyX2ZyYW1lX2Jhc2UpOworCisgIHNldF9nZGJhcmNoX3ByaW50X2lu c24gKGdkYmFyY2gsIHByaW50X2luc25fbmRzMzIpOworCisgIC8qIEhhbmRs ZSBsb25nam1wLiAgKi8KKyAgc2V0X2dkYmFyY2hfZ2V0X2xvbmdqbXBfdGFy Z2V0IChnZGJhcmNoLCBuZHMzMl9nZXRfbG9uZ2ptcF90YXJnZXQpOworCisg IC8qIFRoZSBvcmRlciBvZiBhcHBlbmRpbmcgaXMgdGhlIG9yZGVyIGl0IGNo ZWNrIGZyYW1lLiAgKi8KKyAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdk YmFyY2gpOworICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJh cmNoLCAmbmRzMzJfZXBpbG9ndWVfZnJhbWVfdW53aW5kKTsKKyAgZnJhbWVf dW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJm5kczMyX2ZyYW1l X3Vud2luZCk7CisKKyAgcmV0dXJuIGdkYmFyY2g7Cit9CisKK3ZvaWQKK19p bml0aWFsaXplX25kczMyX3RkZXAgKHZvaWQpCit7CisgIC8qIEluaXRpYWxp emUgZ2RiYXJjaC4gICovCisgIHJlZ2lzdGVyX2dkYmFyY2hfaW5pdCAoYmZk X2FyY2hfbmRzMzIsIG5kczMyX2dkYmFyY2hfaW5pdCk7CisKKyAgaW5pdGlh bGl6ZV90ZGVzY19uZHMzMiAoKTsKKyAgbmRzMzJfaW5pdF9yZWdncm91cHMg KCk7Cit9CmRpZmYgLS1naXQgYS9nZGIvbmRzMzItdGRlcC5oIGIvZ2RiL25k czMyLXRkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xY2FiYzMzCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL25kczMyLXRkZXAu aApAQCAtMCwwICsxLDU2IEBACisvKiBUYXJnZXQtZGVwZW5kZW50IGNvZGUg Zm9yIHRoZSBORFMzMiBhcmNoaXRlY3R1cmUsIGZvciBHREIuCisKKyAgIENv cHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQW5kZXMgVGVjaG5vbG9neSBD b3Jwb3JhdGlvbi4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIE5EUzMy X1RERVBfSAorI2RlZmluZSBORFMzMl9UREVQX0gKKworZW51bSBuZHMzMl9y ZWdudW0KK3sKKyAgLyogR2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gICov CisgIE5EUzMyX1IwX1JFR05VTSA9IDAsCisgIE5EUzMyX1I1X1JFR05VTSA9 IDUsCisgIE5EUzMyX1RBX1JFR05VTSA9IDE1LAkJLyogVGVtcG9yYXJ5IHJl Z2lzdGVyLiAgKi8KKyAgTkRTMzJfRlBfUkVHTlVNID0gMjgsCQkvKiBGcmFt ZSBwb2ludGVyLiAgKi8KKyAgTkRTMzJfR1BfUkVHTlVNID0gMjksCQkvKiBH bG9iYWwgcG9pbnRlci4gICovCisgIE5EUzMyX0xQX1JFR05VTSA9IDMwLAkJ LyogTGluayBwb2ludGVyLiAgKi8KKyAgTkRTMzJfU1BfUkVHTlVNID0gMzEs CQkvKiBTdGFjayBwb2ludGVyLiAgKi8KKworICBORFMzMl9QQ19SRUdOVU0g PSAzMiwJCS8qIFByb2dyYW0gY291bnRlci4gICovCisKKyAgTkRTMzJfTlVN X1JFR1MsCisKKyAgLyogRG91YmxlIHByZWNpc2lvbiBmbG9hdGluZy1wb2lu dCByZWdpc3RlcnMuICAqLworICBORFMzMl9GRDBfUkVHTlVNID0gTkRTMzJf TlVNX1JFR1MsCit9OworCitzdHJ1Y3QgZ2RiYXJjaF90ZGVwCit7CisgIC8q IFRoZSBndWVzc2VkIEZQVSBjb25maWd1cmF0aW9uLiAgKi8KKyAgaW50IGZw dV9mcmVnOworICAvKiBGU1JzIGFyZSBkZWZpbmVkIGFzIHBzZXVkbyByZWdp c3RlcnMuICAqLworICBpbnQgdXNlX3BzZXVkb19mc3JzOworICAvKiBDYWNo ZWQgcmVnbnVtIG9mIHRoZSBmaXJzdCBGU1IgKEZTMCkuICAqLworICBpbnQg ZnMwX3JlZ251bTsKKyAgLyogQ2FjaGVkIHJlZ251bSBvZiB0aGUgZmlyc3Qg RkRSIChGRDApLiAgKi8KKyAgaW50IGZkMF9yZWdudW07CisgIC8qIEFCSSBp bmZvLiAgKi8KKyAgaW50IGFiaTsKK307CisjZW5kaWYgLyogTkRTMzJfVERF UF9IICovCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Zs b2F0LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZmxvYXQuZXhwCmlu ZGV4IDkzOWYwN2YuLmJjM2UyMzAgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvZmxvYXQuZXhwCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LmJhc2UvZmxvYXQuZXhwCkBAIC03Niw2ICs3NiwxNSBAQCBpZiB7IFtpc19h YXJjaDY0X3RhcmdldF0gfSB0aGVuIHsKIAkgICAgICBwYXNzICJpbmZvIGZs b2F0ICh3aXRoIEZQVSkiCiAJICB9CiAgICAgfQorfSBlbHNlaWYgW2lzdGFy Z2V0ICJuZHMzMiotKi0qIl0gdGhlbiB7CisgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgImluZm8gZmxvYXQiICJpbmZvX2Zsb2F0IiB7CisgICAgICAgIC1yZSAi ZmQwLipmZDMuKiRnZGJfcHJvbXB0ICQiIHsKKyAgICAgICAgICAgIHBhc3Mg ImluZm8gZmxvYXQgKHdpdGggRlBVKSIKKwl9CisgICAgICAgIC1yZSAiTm8g ZmxvYXRpbmcucG9pbnQgaW5mbyBhdmFpbGFibGUgZm9yIHRoaXMgcHJvY2Vz c29yLioiIHsKKyAgICAgICAgICAgIHBhc3MgImluZm8gZmxvYXQgKHdpdGhv dXQgRlBVKSIKKwl9CisgICAgfQogfSBlbHNlaWYgW2lzdGFyZ2V0ICJwb3dl cnBjKi0qLSoiXSB0aGVuIHsKICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiaW5m byBmbG9hdCIgImluZm9fZmxvYXQiIHsKICAgICAgICAgLXJlICJmMC4qZjEu KmYzMS4qZnBzY3IuKiRnZGJfcHJvbXB0ICQiIHsKZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLnhtbC90ZGVzYy1yZWdzLmV4cCBiL2dkYi90ZXN0 c3VpdGUvZ2RiLnhtbC90ZGVzYy1yZWdzLmV4cAppbmRleCA0ODIwNGNkLi5j MTk3ZTI4IDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi54bWwvdGRl c2MtcmVncy5leHAKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIueG1sL3RkZXNj LXJlZ3MuZXhwCkBAIC0zOSw2ICszOSw5IEBAIHN3aXRjaCAtZ2xvYiAtLSBb aXN0YXJnZXRdIHsKICAgICAibWlwcyotKi0qIiB7CiAJc2V0IGNvcmUtcmVn cyB7bWlwcy1jcHUueG1sIG1pcHMtY3AwLnhtbCBtaXBzLWZwdS54bWwgbWlw cy1kc3AueG1sfQogICAgIH0KKyAgICAibmRzMzIqLSotKiIgeworCXNldCBj b3JlLXJlZ3Mge25kczMyLWNvcmUueG1sfQorICAgIH0KICAgICAibmlvczIt Ki0qIiB7CiAJc2V0IGNvcmUtcmVncyB7bmlvczItY3B1LnhtbH0KICAgICB9 Ci0tIAoxLjcuOS41Cgo= --------------66E61FD5D15298DDC4C82F70--