From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 100265 invoked by alias); 6 Jun 2016 15:13:55 -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 100212 invoked by uid 89); 6 Jun 2016 15:13:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-vk0-f48.google.com Received: from mail-vk0-f48.google.com (HELO mail-vk0-f48.google.com) (209.85.213.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 06 Jun 2016 15:13:52 +0000 Received: by mail-vk0-f48.google.com with SMTP id d127so203547911vkh.2 for ; Mon, 06 Jun 2016 08:13:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=XDXFgK0e/XbyyLzdfrjy5UzcJazMs9MTkq6PNiE77W4=; b=QvGYjTSV1wWgW7rhrunoIPYSaiRcnJaKkrmRCoctshvaC4fltiPfNVtVU2sk5IAeFt O02YqxM0Ep05MvPiYPh3wosiGw9kcZBgQp2JK5zrGkyT65WJPyZVsJLAGMzX5/AxmEft o2lttmN1bC+QFjCEgo1wtfDQEULZYecbobcF3WYNh8oT44Q5TiBygLc9GC9gwIomXMdA 73cQwuJ+4Azbvu9yOPn3hMAS8LKod/0LfRiLgbcRafYufKiZOYpSm/46ftZGeyxR8fh0 MRAUWNmyi1dEBeoHpgLgH1Eh5/ip+ySCS+ejZEwcBTG9j3L4iKzzLYWLhypBz/y+iYXN TsGg== X-Gm-Message-State: ALyK8tKdSxzFK7eBlT9p2QDU87lEKggjPgR+hz7ERU69vRjlzonEm9bJHmvLGwweHdQyM9ECjrS6+NSmEpskoA== X-Received: by 10.31.169.85 with SMTP id s82mr8024716vke.95.1465226030348; Mon, 06 Jun 2016 08:13:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.159.39.66 with HTTP; Mon, 6 Jun 2016 08:13:49 -0700 (PDT) In-Reply-To: <868typxi5r.fsf@gmail.com> References: <3561f390-ea41-2ee3-a5a9-d870429497c3@gmail.com> <868typxi5r.fsf@gmail.com> From: Yan-Ting Lin Date: Mon, 06 Jun 2016 15:13:00 -0000 Message-ID: Subject: Re: [PATCH v2] AndesTech NDS32 port To: Yao Qi Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001a1141623e0e207a05349d85c1 X-IsSubscribed: yes X-SW-Source: 2016-06/txt/msg00101.txt.bz2 --001a1141623e0e207a05349d85c1 Content-Type: text/plain; charset=UTF-8 Content-length: 649 > We can either use NDS32_FD0_REGNUM or gdbarch_tdep.fd0_regnum, IMO. If > the register number of fd0 is fixed, we can use NDS32_FD0_REGNUM, > otherwise, we need to use gdbarch_tdep.fd0_regnum. If so, we can remove > one of them. > Hi Yao, Thanks for the review. Currently, the register number of fd0, if present, is always fixed, so all usage of gdbarch_tdep.fd0_regnum is replaced with NDS32_FD0_REGNUM. In addition, after reviewing the flow to initialize gdbarch_tdep, the allocation and initialization of gdbarch_tdep is put just before the allocation of gdbarch. The modified patch is attached, please help to review again. Thanks a lot. --001a1141623e0e207a05349d85c1 Content-Type: application/octet-stream; name="0001-gdb-new-AndesTech-NDS32-port.patch" Content-Disposition: attachment; filename="0001-gdb-new-AndesTech-NDS32-port.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ip45jrl70 Content-length: 111976 RnJvbSBkNGY1YTQ1MTZmYWM1MGE4MjE2M2EzOTc4ZDQ3ZDdkMWFkOTE1MGEx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZYW4tVGluZyBMaW4g PGN1cnJ5Z3Q1MkBnbWFpbC5jb20+CkRhdGU6IE1vbiwgNiBKdW4gMjAxNiAy Mjo0NDoyOCArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGdkYjogbmV3IEFuZGVz VGVjaCBORFMzMiBwb3J0CgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDQgKy0KIGdkYi9ORVdTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDQgKwogZ2RiL2NvbmZpZ3VyZS50Z3Qg ICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBnZGIvZG9jL2dkYi50ZXhp bmZvICAgICAgICAgICAgICAgICAgfCAgIDIzICsKIGdkYi9mZWF0dXJlcy9N YWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgIDEgKwogZ2RiL2ZlYXR1cmVz L25kczMyLWNvcmUueG1sICAgICAgICAgIHwgICA0NCArCiBnZGIvZmVhdHVy ZXMvbmRzMzItZnB1LnhtbCAgICAgICAgICAgfCAgIDQyICsKIGdkYi9mZWF0 dXJlcy9uZHMzMi1zeXN0ZW0ueG1sICAgICAgICB8ICAgMTQgKwogZ2RiL2Zl YXR1cmVzL25kczMyLmMgICAgICAgICAgICAgICAgIHwgICA5MiArKwogZ2Ri L2ZlYXR1cmVzL25kczMyLnhtbCAgICAgICAgICAgICAgIHwgICAxNCArCiBn ZGIvbmRzMzItdGRlcC5jICAgICAgICAgICAgICAgICAgICAgfCAyMTg0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGdkYi9uZHMzMi10 ZGVwLmggICAgICAgICAgICAgICAgICAgICB8ICAgNTQgKwogZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9mbG9hdC5leHAgICAgIHwgICAgOSArCiBnZGIvdGVz dHN1aXRlL2dkYi54bWwvdGRlc2MtcmVncy5leHAgfCAgICAzICsKIDE0IGZp bGVzIGNoYW5nZWQsIDI0OTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9mZWF0dXJlcy9uZHMzMi1jb3Jl LnhtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9mZWF0dXJlcy9uZHMzMi1m cHUueG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL2ZlYXR1cmVzL25kczMy LXN5c3RlbS54bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvZmVhdHVyZXMv bmRzMzIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9mZWF0dXJlcy9uZHMz Mi54bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvbmRzMzItdGRlcC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2RiL25kczMyLXRkZXAuaAoKZGlmZiAtLWdp dCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgppbmRleCA2 MGNmYzk3Li43OTYwNmE2IDEwMDY0NAotLS0gYS9nZGIvTWFrZWZpbGUuaW4K KysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC02OTEsNiArNjkxLDcgQEAgQUxM X1RBUkdFVF9PQlMgPSBcCiAJbW94aWUtdGRlcC5vIFwKIAltc3A0MzAtdGRl cC5vIFwKIAltdC10ZGVwLm8gXAorCW5kczMyLXRkZXAubyBcCiAJbmlvczIt dGRlcC5vIG5pb3MyLWxpbnV4LXRkZXAubyBcCiAJbnRvLXRkZXAubyBcCiAJ cHBjLWxpbnV4LXRkZXAubyBwcGNmYnNkLXRkZXAubyBwcGNuYnNkLXRkZXAu byBwcGNvYnNkLXRkZXAubyAgXApAQCAtOTY3LDcgKzk2OCw3IEBAIGFtZDY0 LWRhcndpbi10ZGVwLmggY2hhcnNldC1saXN0LmggXAogY29uZmlnL2RqZ3Bw L2xhbmdpbmZvLmggY29uZmlnL2RqZ3BwL25sX3R5cGVzLmggZGFyd2luLW5h dC5oIFwKIGRpY29zLXRkZXAuaCBmaWxlc3lzdGVtLmggZ2NvcmUuaCBnZGJf d2NoYXIuaCBocHBhYnNkLXRkZXAuaCBcCiBpMzg2LWRhcndpbi10ZGVwLmgg eDg2LW5hdC5oIGxpbnV4LXJlY29yZC5oIG1veGllLXRkZXAuaCBuaW9zMi10 ZGVwLmggXAotZnQzMi10ZGVwLmggXAorZnQzMi10ZGVwLmggbmRzMzItdGRl cC5oIFwKIG9zZGF0YS5oIHByb2Nmcy5oIHB5dGhvbi9weS1ldmVudC5oIHB5 dGhvbi9weS1ldmVudHMuaCBweXRob24vcHktc3RvcGV2ZW50LmggXAogcHl0 aG9uL3B5dGhvbi1pbnRlcm5hbC5oIHB5dGhvbi9weXRob24uaCByYXZlbnNj YXItdGhyZWFkLmggcmVjb3JkLmggXAogcmVjb3JkLWZ1bGwuaCBzb2xpYi1h aXguaCBcCkBAIC0xNzI2LDYgKzE3MjcsNyBAQCBBTExERVBGSUxFUyA9IFwK IAltaXBzbmJzZC1uYXQuYyBtaXBzbmJzZC10ZGVwLmMgXAogCW1pcHM2NG9i c2QtbmF0LmMgbWlwczY0b2JzZC10ZGVwLmMgXAogCW1zcDQzMC10ZGVwLmMg XAorCW5kczMyLXRkZXAuYyBcCiAJbmlvczItdGRlcC5jIG5pb3MyLWxpbnV4 LXRkZXAuYyBcCiAJbmJzZC1uYXQuYyBuYnNkLXRkZXAuYyBvYnNkLW5hdC5j IG9ic2QtdGRlcC5jIFwKIAlwb3NpeC1oZGVwLmMgY29tbW9uL3Bvc2l4LXN0 cmVycm9yLmMgXApkaWZmIC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwpp bmRleCBkY2U3OWEyLi5jZmI0NTMzIDEwMDY0NAotLS0gYS9nZGIvTkVXUwor KysgYi9nZGIvTkVXUwpAQCAtNjcsNiArNjcsMTAgQEAgbWFpbnQgc2VsZnRl c3QKICAgaW5jbHVkaW5nIEpJVCBjb21waWxpbmcgZmFzdCB0cmFjZXBvaW50 J3MgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogICBieXRlY29kZSBpbnRvIG5h dGl2ZSBjb2RlLgogCisqIE5ldyB0YXJnZXRzCisKK0FuZGVzIE5EUzMyCQkJ bmRzMzIqLSotZWxmCisKICoqKiBDaGFuZ2VzIGluIEdEQiA3LjExCiAKICog R0RCIG5vdyBzdXBwb3J0cyBkZWJ1Z2dpbmcga2VybmVsLWJhc2VkIHRocmVh ZHMgb24gRnJlZUJTRC4KZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUudGd0 IGIvZ2RiL2NvbmZpZ3VyZS50Z3QKaW5kZXggY2Q4ZTA1ZC4uN2YxYWFjMyAx MDA2NDQKLS0tIGEvZ2RiL2NvbmZpZ3VyZS50Z3QKKysrIGIvZ2RiL2NvbmZp Z3VyZS50Z3QKQEAgLTM5NCw2ICszOTQsMTEgQEAgbXQtKi0qKQogCWdkYl90 YXJnZXRfb2JzPSJtdC10ZGVwLm8iCiAJOzsKIAorbmRzMzIqLSotZWxmKQor CSMgVGFyZ2V0OiBBbmRlc1RlY2ggTkRTMzIgY29yZQorCWdkYl90YXJnZXRf b2JzPSJuZHMzMi10ZGVwLm8iCisJOzsKKwogbmlvczIqLSotbGludXgqKQog CSMgVGFyZ2V0OiBBbHRlcmEgTmlvcyBJSSBydW5uaW5nIExpbnV4CiAJZ2Ri X3RhcmdldF9vYnM9Im5pb3MyLXRkZXAubyBuaW9zMi1saW51eC10ZGVwLm8g c29saWItc3ZyNC5vIFwKZGlmZiAtLWdpdCBhL2dkYi9kb2MvZ2RiLnRleGlu Zm8gYi9nZGIvZG9jL2dkYi50ZXhpbmZvCmluZGV4IDdlODkwMDMuLjBjYjUx MDAgMTAwNjQ0Ci0tLSBhL2dkYi9kb2MvZ2RiLnRleGluZm8KKysrIGIvZ2Ri L2RvYy9nZGIudGV4aW5mbwpAQCAtNDA4MDAsNiArNDA4MDAsNyBAQCByZWdp c3RlcnMgdXNpbmcgdGhlIGNhcGl0YWxpemF0aW9uIHVzZWQgaW4gdGhlIGRl c2NyaXB0aW9uLgogKiBNaWNyb0JsYXplIEZlYXR1cmVzOjoKICogTUlQUyBG ZWF0dXJlczo6CiAqIE02OEsgRmVhdHVyZXM6OgorKiBORFMzMiBGZWF0dXJl czo6CiAqIE5pb3MgSUkgRmVhdHVyZXM6OgogKiBQb3dlclBDIEZlYXR1cmVz OjoKICogUy8zOTAgYW5kIFN5c3RlbSB6IEZlYXR1cmVzOjoKQEAgLTQxMDA4 LDYgKzQxMDA5LDI4IEBAIFRoaXMgZmVhdHVyZSBpcyBvcHRpb25hbC4gIElm IHByZXNlbnQsIGl0IHNob3VsZCBjb250YWluIHJlZ2lzdGVycwogQHNhbXB7 ZnBpYWRkcn0uCiBAZW5kIHRhYmxlCiAKK0Bub2RlIE5EUzMyIEZlYXR1cmVz CitAc3Vic2VjdGlvbiBORFMzMiBGZWF0dXJlcworQGNpbmRleCB0YXJnZXQg ZGVzY3JpcHRpb25zLCBORFMzMiBmZWF0dXJlcworCitUaGUgQHNhbXB7b3Jn LmdudS5nZGIubmRzMzIuY29yZX0gZmVhdHVyZSBpcyByZXF1aXJlZCBmb3Ig TkRTMzIKK3RhcmdldHMuICBJdCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBy ZWdpc3RlcnMgQHNhbXB7cjB9IHRocm91Z2gKK0BzYW1we3IxMH0sIEBzYW1w e3IxNX0sIEBzYW1we2ZwfSwgQHNhbXB7Z3B9LCBAc2FtcHtscH0sIEBzYW1w e3NwfSwKK2FuZCBAc2FtcHtwY30uCisKK1RoZSBAc2FtcHtvcmcuZ251Lmdk Yi5uZHMzMi5mcHV9IGZlYXR1cmUgaXMgb3B0aW9uYWwuICBJZiBwcmVzZW50 LAoraXQgc2hvdWxkIGNvbnRhaW4gNjQtYml0IGRvdWJsZS1wcmVjaXNpb24g ZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzCitAc2FtcHtmZDB9IHRocm91Z2gg QGVtcGh7ZmROfSwgd2hpY2ggc2hvdWxkIGJlIEBzYW1we2ZkM30sIEBzYW1w e2ZkN30sCitAc2FtcHtmZDE1fSwgb3IgQHNhbXB7ZmQzMX0gYmFzZWQgb24g dGhlIEZQVSBjb25maWd1cmF0aW9uIGltcGxlbWVudGVkLgorCitAZW1waHtO b3RlOn0gVGhlIGZpcnN0IHNpeHRlZW4gNjQtYml0IGRvdWJsZS1wcmVjaXNp b24gZmxvYXRpbmctcG9pbnQKK3JlZ2lzdGVycyBhcmUgb3ZlcmxhcHBlZCB3 aXRoIHRoZSB0aGlydHktdHdvIDMyLWJpdCBzaW5nbGUtcHJlY2lzaW9uCitm bG9hdGluZy1wb2ludCByZWdpc3RlcnMuICBUaGUgMzItYml0IHNpbmdsZS1w cmVjaXNpb24gcmVnaXN0ZXJzLCBpZgorbm90IGJlaW5nIGxpc3RlZCBleHBs aWNpdGx5LCB3aWxsIGJlIHN5bnRoZXNpemVkIGZyb20gaGFsdmVzIG9mIHRo ZQorb3ZlcmxhcHBpbmcgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gcmVnaXN0 ZXJzLiAgTGlzdGluZyAzMi1iaXQKK3NpbmdsZS1wcmVjaXNpb24gcmVnaXN0 ZXJzIGV4cGxpY2l0bHkgaXMgZGVwcmVjYXRlZCwgYW5kIHRoZQorc3VwcG9y dCB0byBpdCBjb3VsZCBiZSB0b3RhbGx5IHJlbW92ZWQgc29tZSBkYXkuCisK IEBub2RlIE5pb3MgSUkgRmVhdHVyZXMKIEBzdWJzZWN0aW9uIE5pb3MgSUkg RmVhdHVyZXMKIEBjaW5kZXggdGFyZ2V0IGRlc2NyaXB0aW9ucywgTmlvcyBJ SSBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL01ha2VmaWxl IGIvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlCmluZGV4IGU1YzUxNTQuLjgwOWM4 MTEgMTAwNjQ0Ci0tLSBhL2dkYi9mZWF0dXJlcy9NYWtlZmlsZQorKysgYi9n ZGIvZmVhdHVyZXMvTWFrZWZpbGUKQEAgLTE4OSw2ICsxODksNyBAQCBYTUxU T0MgPSBcCiAJbWlwcy1saW51eC54bWwgXAogCW1pcHM2NC1kc3AtbGludXgu eG1sIFwKIAltaXBzNjQtbGludXgueG1sIFwKKwluZHMzMi54bWwgXAogCW5p b3MyLWxpbnV4LnhtbCBcCiAJbmlvczIueG1sIFwKIAlyczYwMDAvcG93ZXJw Yy0zMi54bWwgXApkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL25kczMyLWNv cmUueG1sIGIvZ2RiL2ZlYXR1cmVzL25kczMyLWNvcmUueG1sCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTE2NDAKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvZmVhdHVyZXMvbmRzMzItY29yZS54bWwKQEAgLTAs MCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHly aWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlz IGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICAgIGFy ZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJv dmlkZWQgdGhlIGNvcHlyaWdodAorICAgICBub3RpY2UgYW5kIHRoaXMgbm90 aWNlIGFyZSBwcmVzZXJ2ZWQuICAtLT4KKworPCFET0NUWVBFIGZlYXR1cmUg U1lTVEVNICJnZGItdGFyZ2V0LmR0ZCI+Cis8ZmVhdHVyZSBuYW1lPSJvcmcu Z251LmdkYi5uZHMzMi5jb3JlIj4KKyAgPHJlZyBuYW1lPSJyMCIgYml0c2l6 ZT0iMzIiIHJlZ251bT0iMCIvPgorICA8cmVnIG5hbWU9InIxIiBiaXRzaXpl PSIzMiIvPgorICA8cmVnIG5hbWU9InIyIiBiaXRzaXplPSIzMiIvPgorICA8 cmVnIG5hbWU9InIzIiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI0 IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI1IiBiaXRzaXplPSIz MiIvPgorICA8cmVnIG5hbWU9InI2IiBiaXRzaXplPSIzMiIvPgorICA8cmVn IG5hbWU9InI3IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI4IiBi aXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI5IiBiaXRzaXplPSIzMiIv PgorICA8cmVnIG5hbWU9InIxMCIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBu YW1lPSJyMTEiIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjEyIiBi aXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIxMyIgYml0c2l6ZT0iMzIi Lz4KKyAgPHJlZyBuYW1lPSJyMTQiIGJpdHNpemU9IjMyIi8+CisgIDxyZWcg bmFtZT0icjE1IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIxNiIg Yml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMTciIGJpdHNpemU9IjMy Ii8+CisgIDxyZWcgbmFtZT0icjE4IiBiaXRzaXplPSIzMiIvPgorICA8cmVn IG5hbWU9InIxOSIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMjAi IGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjIxIiBiaXRzaXplPSIz MiIvPgorICA8cmVnIG5hbWU9InIyMiIgYml0c2l6ZT0iMzIiLz4KKyAgPHJl ZyBuYW1lPSJyMjMiIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjI0 IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIyNSIgYml0c2l6ZT0i MzIiLz4KKyAgPHJlZyBuYW1lPSJyMjYiIGJpdHNpemU9IjMyIi8+CisgIDxy ZWcgbmFtZT0icjI3IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9ImZw IiBiaXRzaXplPSIzMiIgdHlwZT0iZGF0YV9wdHIiLz4KKyAgPHJlZyBuYW1l PSJncCIgYml0c2l6ZT0iMzIiIHR5cGU9ImRhdGFfcHRyIi8+CisgIDxyZWcg bmFtZT0ibHAiIGJpdHNpemU9IjMyIiB0eXBlPSJjb2RlX3B0ciIvPgorICA8 cmVnIG5hbWU9InNwIiBiaXRzaXplPSIzMiIgdHlwZT0iZGF0YV9wdHIiLz4K KworICA8cmVnIG5hbWU9InBjIiBiaXRzaXplPSIzMiIgdHlwZT0iY29kZV9w dHIiLz4KKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9u ZHMzMi1mcHUueG1sIGIvZ2RiL2ZlYXR1cmVzL25kczMyLWZwdS54bWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxYTRjMAotLS0g L2Rldi9udWxsCisrKyBiL2dkYi9mZWF0dXJlcy9uZHMzMi1mcHUueG1sCkBA IC0wLDAgKzEsNDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBD b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2Yg dGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAg ICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5 IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlz IG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBmZWF0 dXJlIFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgorPGZlYXR1cmUgbmFtZT0i b3JnLmdudS5nZGIubmRzMzIuZnB1Ij4KKyAgPHJlZyBuYW1lPSJmZDAiIGJp dHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+ CisgIDxyZWcgbmFtZT0iZmQxIiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9k b3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMiIgYml0 c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4K KyAgPHJlZyBuYW1lPSJmZDMiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2Rv dWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQ0IiBiaXRz aXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgor ICA8cmVnIG5hbWU9ImZkNSIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91 YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDYiIGJpdHNp emU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+Cisg IDxyZWcgbmFtZT0iZmQ3IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3Vi bGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkOCIgYml0c2l6 ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAg PHJlZyBuYW1lPSJmZDkiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJs ZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQxMCIgYml0c2l6 ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAg PHJlZyBuYW1lPSJmZDExIiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3Vi bGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMTIiIGJpdHNp emU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+Cisg IDxyZWcgbmFtZT0iZmQxMyIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91 YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDE0IiBiaXRz aXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgor ICA8cmVnIG5hbWU9ImZkMTUiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2Rv dWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQxNiIgYml0 c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4K KyAgPHJlZyBuYW1lPSJmZDE3IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9k b3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMTgiIGJp dHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+ CisgIDxyZWcgbmFtZT0iZmQxOSIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVf ZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDIwIiBi aXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIv PgorICA8cmVnIG5hbWU9ImZkMjEiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVl X2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQyMiIg Yml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQi Lz4KKyAgPHJlZyBuYW1lPSJmZDIzIiBiaXRzaXplPSI2NCIgdHlwZT0iaWVl ZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMjQi IGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0 Ii8+CisgIDxyZWcgbmFtZT0iZmQyNSIgYml0c2l6ZT0iNjQiIHR5cGU9Imll ZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDI2 IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9h dCIvPgorICA8cmVnIG5hbWU9ImZkMjciIGJpdHNpemU9IjY0IiB0eXBlPSJp ZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQy OCIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxv YXQiLz4KKyAgPHJlZyBuYW1lPSJmZDI5IiBiaXRzaXplPSI2NCIgdHlwZT0i aWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZk MzAiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZs b2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQzMSIgYml0c2l6ZT0iNjQiIHR5cGU9 ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKzwvZmVhdHVyZT4KZGlm ZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9uZHMzMi1zeXN0ZW0ueG1sIGIvZ2Ri L2ZlYXR1cmVzL25kczMyLXN5c3RlbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYzJlYThhYwotLS0gL2Rldi9udWxsCisrKyBi L2dkYi9mZWF0dXJlcy9uZHMzMi1zeXN0ZW0ueG1sCkBAIC0wLDAgKzEsMTQg QEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMp IDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3 aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0 dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRo ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUg cHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAi Z2RiLXRhcmdldC5kdGQiPgorPGZlYXR1cmUgbmFtZT0ib3JnLmdudS5nZGIu bmRzMzIuc3lzdGVtIj4KKyAgPHJlZyBuYW1lPSJpcjAiIGJpdHNpemU9IjMy Ii8+CisKKyAgPHJlZyBuYW1lPSJpdGIiIGJpdHNpemU9IjMyIi8+CisgIDxy ZWcgbmFtZT0iaWZjX2xwIiBiaXRzaXplPSIzMiIvPgorPC9mZWF0dXJlPgpk aWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL25kczMyLmMgYi9nZGIvZmVhdHVy ZXMvbmRzMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4yMWY2M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2ZlYXR1cmVzL25k czMyLmMKQEAgLTAsMCArMSw5MiBAQAorLyogVEhJUyBGSUxFIElTIEdFTkVS QVRFRC4gIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aTpzZXQgcm86 CisgIE9yaWdpbmFsOiBuZHMzMi54bWwgKi8KKworI2luY2x1ZGUgImRlZnMu aCIKKyNpbmNsdWRlICJvc2FiaS5oIgorI2luY2x1ZGUgInRhcmdldC1kZXNj cmlwdGlvbnMuaCIKKworc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19uZHMz MjsKK3N0YXRpYyB2b2lkCitpbml0aWFsaXplX3RkZXNjX25kczMyICh2b2lk KQoreworICBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnJlc3VsdCA9IGFsbG9jYXRl X3RhcmdldF9kZXNjcmlwdGlvbiAoKTsKKyAgc3RydWN0IHRkZXNjX2ZlYXR1 cmUgKmZlYXR1cmU7CisKKyAgc2V0X3RkZXNjX2FyY2hpdGVjdHVyZSAocmVz dWx0LCBiZmRfc2Nhbl9hcmNoICgibjFoIikpOworCisgIGZlYXR1cmUgPSB0 ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIubmRz MzIuY29yZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjAi LCAwLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjEiLCAxLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjIiLCAyLCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjMi LCAzLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjQiLCA0LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjUiLCA1LCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjYi LCA2LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjciLCA3LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjgiLCA4LCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjki LCA5LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjEwIiwgMTAsIDEsIE5VTEwsIDMyLCAiaW50Iik7Cisg IHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTEiLCAxMSwgMSwgTlVM TCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwg InIxMiIsIDEyLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVh dGVfcmVnIChmZWF0dXJlLCAicjEzIiwgMTMsIDEsIE5VTEwsIDMyLCAiaW50 Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTQiLCAxNCwg MSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVh dHVyZSwgInIxNSIsIDE1LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVz Y19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjE2IiwgMTYsIDEsIE5VTEwsIDMy LCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTci LCAxNywgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3Jl ZyAoZmVhdHVyZSwgInIxOCIsIDE4LCAxLCBOVUxMLCAzMiwgImludCIpOwor ICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjE5IiwgMTksIDEsIE5V TEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUs ICJyMjAiLCAyMCwgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3Jl YXRlX3JlZyAoZmVhdHVyZSwgInIyMSIsIDIxLCAxLCBOVUxMLCAzMiwgImlu dCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjIyIiwgMjIs IDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZl YXR1cmUsICJyMjMiLCAyMywgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRl c2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIyNCIsIDI0LCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjI1 IiwgMjUsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9y ZWcgKGZlYXR1cmUsICJyMjYiLCAyNiwgMSwgTlVMTCwgMzIsICJpbnQiKTsK KyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIyNyIsIDI3LCAxLCBO VUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJl LCAiZnAiLCAyOCwgMSwgTlVMTCwgMzIsICJkYXRhX3B0ciIpOworICB0ZGVz Y19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZ3AiLCAyOSwgMSwgTlVMTCwgMzIs ICJkYXRhX3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAi bHAiLCAzMCwgMSwgTlVMTCwgMzIsICJjb2RlX3B0ciIpOworICB0ZGVzY19j cmVhdGVfcmVnIChmZWF0dXJlLCAic3AiLCAzMSwgMSwgTlVMTCwgMzIsICJk YXRhX3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicGMi LCAzMiwgMSwgTlVMTCwgMzIsICJjb2RlX3B0ciIpOworCisgIGZlYXR1cmUg PSB0ZGVzY19jcmVhdGVfZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIu bmRzMzIuZnB1Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJm ZDAiLCAzMywgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQxIiwgMzQsIDEsICJmbG9h dCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgImZkMiIsIDM1LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91 YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDMiLCAz NiwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19j cmVhdGVfcmVnIChmZWF0dXJlLCAiZmQ0IiwgMzcsIDEsICJmbG9hdCIsIDY0 LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVy ZSwgImZkNSIsIDM4LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7 CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDYiLCAzOSwgMSwg ImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVf cmVnIChmZWF0dXJlLCAiZmQ3IiwgNDAsIDEsICJmbG9hdCIsIDY0LCAiaWVl ZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZk OCIsIDQxLCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRk ZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDkiLCA0MiwgMSwgImZsb2F0 IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChm ZWF0dXJlLCAiZmQxMCIsIDQzLCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91 YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDExIiwg NDQsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2Nf Y3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMTIiLCA0NSwgMSwgImZsb2F0Iiwg NjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0 dXJlLCAiZmQxMyIsIDQ2LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91Ymxl Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDE0IiwgNDcs IDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3Jl YXRlX3JlZyAoZmVhdHVyZSwgImZkMTUiLCA0OCwgMSwgImZsb2F0IiwgNjQs ICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJl LCAiZmQxNiIsIDQ5LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7 CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDE3IiwgNTAsIDEs ICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRl X3JlZyAoZmVhdHVyZSwgImZkMTgiLCA1MSwgMSwgImZsb2F0IiwgNjQsICJp ZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAi ZmQxOSIsIDUyLCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7Cisg IHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDIwIiwgNTMsIDEsICJm bG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3Jl ZyAoZmVhdHVyZSwgImZkMjEiLCA1NCwgMSwgImZsb2F0IiwgNjQsICJpZWVl X2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQy MiIsIDU1LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRk ZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDIzIiwgNTYsIDEsICJmbG9h dCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgImZkMjQiLCA1NywgMSwgImZsb2F0IiwgNjQsICJpZWVlX2Rv dWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQyNSIs IDU4LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNj X2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDI2IiwgNTksIDEsICJmbG9hdCIs IDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVh dHVyZSwgImZkMjciLCA2MCwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJs ZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQyOCIsIDYx LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2Ny ZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDI5IiwgNjIsIDEsICJmbG9hdCIsIDY0 LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVy ZSwgImZkMzAiLCA2MywgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIp OworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQzMSIsIDY0LCAx LCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisKKyAgZmVhdHVyZSA9 IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5u ZHMzMi5zeXN0ZW0iKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwg ImlyMCIsIDY1LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVh dGVfcmVnIChmZWF0dXJlLCAiaXRiIiwgNjYsIDEsIE5VTEwsIDMyLCAiaW50 Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJpZmNfbHAiLCA2 NywgMSwgTlVMTCwgMzIsICJpbnQiKTsKKworICB0ZGVzY19uZHMzMiA9IHJl c3VsdDsKK30KZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9uZHMzMi54bWwg Yi9nZGIvZmVhdHVyZXMvbmRzMzIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjQ4MTkzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9n ZGIvZmVhdHVyZXMvbmRzMzIueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1s IHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5 aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdp dGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFu eSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmln aHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVk LiAgLS0+CisKKzwhRE9DVFlQRSB0YXJnZXQgU1lTVEVNICJnZGItdGFyZ2V0 LmR0ZCI+Cis8dGFyZ2V0PgorICA8YXJjaGl0ZWN0dXJlPm5kczMyPC9hcmNo aXRlY3R1cmU+CisgIDx4aTppbmNsdWRlIGhyZWY9Im5kczMyLWNvcmUueG1s Ii8+CisgIDx4aTppbmNsdWRlIGhyZWY9Im5kczMyLWZwdS54bWwiLz4KKyAg PHhpOmluY2x1ZGUgaHJlZj0ibmRzMzItc3lzdGVtLnhtbCIvPgorPC90YXJn ZXQ+CmRpZmYgLS1naXQgYS9nZGIvbmRzMzItdGRlcC5jIGIvZ2RiL25kczMy LXRkZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k ZTcyNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL25kczMyLXRkZXAuYwpA QCAtMCwwICsxLDIxODQgQEAKKy8qIFRhcmdldC1kZXBlbmRlbnQgY29kZSBm b3IgdGhlIE5EUzMyIGFyY2hpdGVjdHVyZSwgZm9yIEdEQi4KKworICAgQ29w eXJpZ2h0IChDKSAyMDEzLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisgICBDb250cmlidXRlZCBieSBBbmRlcyBUZWNobm9sb2d5IENv cnBvcmF0aW9uLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZz LmgiCisjaW5jbHVkZSAiZnJhbWUuaCIKKyNpbmNsdWRlICJmcmFtZS11bndp bmQuaCIKKyNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisjaW5jbHVkZSAic3lt dGFiLmgiCisjaW5jbHVkZSAiZ2RidHlwZXMuaCIKKyNpbmNsdWRlICJnZGJj b3JlLmgiCisjaW5jbHVkZSAidmFsdWUuaCIKKyNpbmNsdWRlICJyZWdncm91 cHMuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgorI2luY2x1ZGUgIm9zYWJp LmgiCisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1ZGUgInJlZ2Nh Y2hlLmgiCisjaW5jbHVkZSAiZGlzLWFzbS5oIgorI2luY2x1ZGUgInVzZXIt cmVncy5oIgorI2luY2x1ZGUgImVsZi1iZmQuaCIKKyNpbmNsdWRlICJkd2Fy ZjItZnJhbWUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ0 YXJnZXQtZGVzY3JpcHRpb25zLmgiCisKKyNpbmNsdWRlICJuZHMzMi10ZGVw LmgiCisjaW5jbHVkZSAiZWxmL25kczMyLmgiCisjaW5jbHVkZSAib3Bjb2Rl L25kczMyLmgiCisjaW5jbHVkZSAiZmVhdHVyZXMvbmRzMzIuYyIKKworLyog U2ltcGxlIG1hY3JvcyBmb3IgaW5zdHJ1Y3Rpb24gYW5hbHlzaXMuICAqLwor I2RlZmluZSBDSE9QX0JJVFMoaW5zbiwgbikJKGluc24gJiB+X19NQVNLIChu KSkKKyNkZWZpbmUgTjMyX0xTTVdfRU5BQkxFNChpbnNuKQkoKChpbnNuKSA+ PiA2KSAmIDB4ZikKKyNkZWZpbmUgTjMyX1NNV19BRE0gXAorCU4zMl9UWVBF NCAoTFNNVywgMCwgMCwgMCwgMSwgKE4zMl9MU01XX0FETSA8PCAyKSB8IE4z Ml9MU01XX0xTTVcpCisjZGVmaW5lIE4zMl9MTVdfQklNIFwKKwlOMzJfVFlQ RTQgKExTTVcsIDAsIDAsIDAsIDAsIChOMzJfTFNNV19CSU0gPDwgMikgfCBO MzJfTFNNV19MU01XKQorI2RlZmluZSBOMzJfRkxESV9TUCBcCisJTjMyX1RZ UEUyIChMREMsIDAsIFJFR19TUCwgMCkKKworZXh0ZXJuIHZvaWQgX2luaXRp YWxpemVfbmRzMzJfdGRlcCAodm9pZCk7CisKKy8qIFVzZSBhbiBpbnZhbGlk IGFkZHJlc3MgdmFsdWUgYXMgJ25vdCBhdmFpbGFibGUnIG1hcmtlci4gICov CitlbnVtIHsgUkVHX1VOQVZBSUwgPSAoQ09SRV9BRERSKSAtMSB9OworCisv KiBVc2UgYW4gaW1wb3NzaWJsZSB2YWx1ZSBhcyBpbnZhbGlkIG9mZnNldC4g ICovCitlbnVtIHsgSU5WQUxJRF9PRkZTRVQgPSAoQ09SRV9BRERSKSAtMSB9 OworCisvKiBJbnN0cnVjdGlvbiBncm91cHMgZm9yIE5EUzMyIGVwaWxvZ3Vl IGFuYWx5c2lzLiAgKi8KK2VudW0KK3sKKyAgLyogSW5zdHJ1Y3Rpb25zIHVz ZWQgZXZlcnl3aGVyZSwgbm90IG9ubHkgaW4gZXBpbG9ndWUuICAqLworICBJ TlNOX05PUk1BTCwKKyAgLyogSW5zdHJ1Y3Rpb25zIHVzZWQgdG8gcmVzZXQg c3AgZm9yIGxvY2FsIHZhcnMsIGFyZ3VtZW50cywgZXRjLiAgKi8KKyAgSU5T Tl9SRVNFVF9TUCwKKyAgLyogSW5zdHJ1Y3Rpb25zIHVzZWQgdG8gcmVjb3Zl ciBzYXZlZCByZWdzIGFuZCB0byByZWNvdmVyIHBhZGRpbmcuICAqLworICBJ TlNOX1JFQ09WRVIsCisgIC8qIEluc3RydWN0aW9ucyB1c2VkIHRvIHJldHVy biB0byB0aGUgY2FsbGVyLiAgKi8KKyAgSU5TTl9SRVRVUk4sCisgIC8qIElu c3RydWN0aW9ucyB1c2VkIHRvIHJlY292ZXIgc2F2ZWQgcmVncyBhbmQgdG8g cmV0dXJuIHRvIHRoZSBjYWxsZXIuICAqLworICBJTlNOX1JFQ09WRVJfUkVU VVJOLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5kczMyX3Jl Z2lzdGVyX25hbWVzW10gPQoreworICAvKiAzMiBHUFJzLiAgKi8KKyAgInIw IiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1IiwgInI2IiwgInI3IiwK KyAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAicjEyIiwgInIxMyIsICJy MTQiLCAicjE1IiwKKyAgInIxNiIsICJyMTciLCAicjE4IiwgInIxOSIsICJy MjAiLCAicjIxIiwgInIyMiIsICJyMjMiLAorICAicjI0IiwgInIyNSIsICJy MjYiLCAicjI3IiwgImZwIiwgImdwIiwgImxwIiwgInNwIiwKKyAgLyogUEMu ICAqLworICAicGMiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0 IG5kczMyX2Zkcl9yZWdpc3Rlcl9uYW1lc1tdID0KK3sKKyAgImZkMCIsICJm ZDEiLCAiZmQyIiwgImZkMyIsICJmZDQiLCAiZmQ1IiwgImZkNiIsICJmZDci LAorICAiZmQ4IiwgImZkOSIsICJmZDEwIiwgImZkMTEiLCAiZmQxMiIsICJm ZDEzIiwgImZkMTQiLCAiZmQxNSIsCisgICJmZDE2IiwgImZkMTciLCAiZmQx OCIsICJmZDE5IiwgImZkMjAiLCAiZmQyMSIsICJmZDIyIiwgImZkMjMiLAor ICAiZmQyNCIsICJmZDI1IiwgImZkMjYiLCAiZmQyNyIsICJmZDI4IiwgImZk MjkiLCAiZmQzMCIsICJmZDMxIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIg KmNvbnN0IG5kczMyX2Zzcl9yZWdpc3Rlcl9uYW1lc1tdID0KK3sKKyAgImZz MCIsICJmczEiLCAiZnMyIiwgImZzMyIsICJmczQiLCAiZnM1IiwgImZzNiIs ICJmczciLAorICAiZnM4IiwgImZzOSIsICJmczEwIiwgImZzMTEiLCAiZnMx MiIsICJmczEzIiwgImZzMTQiLCAiZnMxNSIsCisgICJmczE2IiwgImZzMTci LCAiZnMxOCIsICJmczE5IiwgImZzMjAiLCAiZnMyMSIsICJmczIyIiwgImZz MjMiLAorICAiZnMyNCIsICJmczI1IiwgImZzMjYiLCAiZnMyNyIsICJmczI4 IiwgImZzMjkiLCAiZnMzMCIsICJmczMxIgorfTsKKworLyogVGhlIG51bWJl ciBvZiByZWdpc3RlcnMgZm9yIGZvdXIgRlBVIGNvbmZpZ3VyYXRpb24gb3B0 aW9ucy4gICovCitjb25zdCBpbnQgbnVtX2Zkcl9tYXBbXSA9IHsgNCwgOCwg MTYsIDMyIH07Citjb25zdCBpbnQgbnVtX2Zzcl9tYXBbXSA9IHsgOCwgMTYs IDMyLCAzMiB9OworCisvKiBBbGlhc2VzIGZvciByZWdpc3RlcnMuICAqLwor c3RhdGljIGNvbnN0IHN0cnVjdAoreworICBjb25zdCBjaGFyICpuYW1lOwor ICBjb25zdCBjaGFyICphbGlhczsKK30gbmRzMzJfcmVnaXN0ZXJfYWxpYXNl c1tdID0KK3sKKyAgeyJyMTUiLCAidGEifSwKKyAgeyJyMjYiLCAicDAifSwK KyAgeyJyMjciLCAicDEifSwKKyAgeyJmcCIsICJyMjgifSwKKyAgeyJncCIs ICJyMjkifSwKKyAgeyJscCIsICJyMzAifSwKKyAgeyJzcCIsICJyMzEifSwK KworICB7ImNyMCIsICJjcHVfdmVyIn0sCisgIHsiY3IxIiwgImljbV9jZmci fSwKKyAgeyJjcjIiLCAiZGNtX2NmZyJ9LAorICB7ImNyMyIsICJtbXVfY2Zn In0sCisgIHsiY3I0IiwgIm1zY19jZmcifSwKKyAgeyJjcjUiLCAiY29yZV9p ZCJ9LAorICB7ImNyNiIsICJmdWNvcF9leGlzdCJ9LAorICB7ImNyNyIsICJt c2NfY2ZnMiJ9LAorCisgIHsiaXIwIiwgInBzdyJ9LAorICB7ImlyMSIsICJp cHN3In0sCisgIHsiaXIyIiwgInBfcHN3In0sCisgIHsiaXIzIiwgIml2YiJ9 LAorICB7ImlyNCIsICJldmEifSwKKyAgeyJpcjUiLCAicF9ldmEifSwKKyAg eyJpcjYiLCAiaXR5cGUifSwKKyAgeyJpcjciLCAicF9pdHlwZSJ9LAorICB7 ImlyOCIsICJtZXJyIn0sCisgIHsiaXI5IiwgImlwYyJ9LAorICB7ImlyMTAi LCAicF9pcGMifSwKKyAgeyJpcjExIiwgIm9pcGMifSwKKyAgeyJpcjEyIiwg InBfcDAifSwKKyAgeyJpcjEzIiwgInBfcDEifSwKKyAgeyJpcjE0IiwgImlu dF9tYXNrIn0sCisgIHsiaXIxNSIsICJpbnRfcGVuZCJ9LAorICB7ImlyMTYi LCAic3BfdXNyIn0sCisgIHsiaXIxNyIsICJzcF9wcml2In0sCisgIHsiaXIx OCIsICJpbnRfcHJpIn0sCisgIHsiaXIxOSIsICJpbnRfY3RybCJ9LAorICB7 ImlyMjAiLCAic3BfdXNyMSJ9LAorICB7ImlyMjEiLCAic3BfcHJpdjEifSwK KyAgeyJpcjIyIiwgInNwX3VzcjIifSwKKyAgeyJpcjIzIiwgInNwX3ByaXYy In0sCisgIHsiaXIyNCIsICJzcF91c3IzIn0sCisgIHsiaXIyNSIsICJzcF9w cml2MyJ9LAorICB7ImlyMjYiLCAiaW50X21hc2syIn0sCisgIHsiaXIyNyIs ICJpbnRfcGVuZDIifSwKKyAgeyJpcjI4IiwgImludF9wcmkyIn0sCisgIHsi aXIyOSIsICJpbnRfdHJpZ2dlciJ9LAorCisgIHsibXIwIiwgIm1tdV9jdGwi fSwKKyAgeyJtcjEiLCAibDFfcHB0YiJ9LAorICB7Im1yMiIsICJ0bGJfdnBu In0sCisgIHsibXIzIiwgInRsYl9kYXRhIn0sCisgIHsibXI0IiwgInRsYl9t aXNjIn0sCisgIHsibXI1IiwgInZscHRfaWR4In0sCisgIHsibXI2IiwgImls bWIifSwKKyAgeyJtcjciLCAiZGxtYiJ9LAorICB7Im1yOCIsICJjYWNoZV9j dGwifSwKKyAgeyJtcjkiLCAiaHNtcF9zYWRkciJ9LAorICB7Im1yMTAiLCAi aHNtcF9lYWRkciJ9LAorICB7Im1yMTEiLCAiYmdfcmVnaW9uIn0sCisKKyAg eyJkcjAiLCAiYnBjMCJ9LAorICB7ImRyMSIsICJicGMxIn0sCisgIHsiZHIy IiwgImJwYzIifSwKKyAgeyJkcjMiLCAiYnBjMyJ9LAorICB7ImRyNCIsICJi cGM0In0sCisgIHsiZHI1IiwgImJwYzUifSwKKyAgeyJkcjYiLCAiYnBjNiJ9 LAorICB7ImRyNyIsICJicGM3In0sCisgIHsiZHI4IiwgImJwYTAifSwKKyAg eyJkcjkiLCAiYnBhMSJ9LAorICB7ImRyMTAiLCAiYnBhMiJ9LAorICB7ImRy MTEiLCAiYnBhMyJ9LAorICB7ImRyMTIiLCAiYnBhNCJ9LAorICB7ImRyMTMi LCAiYnBhNSJ9LAorICB7ImRyMTQiLCAiYnBhNiJ9LAorICB7ImRyMTUiLCAi YnBhNyJ9LAorICB7ImRyMTYiLCAiYnBhbTAifSwKKyAgeyJkcjE3IiwgImJw YW0xIn0sCisgIHsiZHIxOCIsICJicGFtMiJ9LAorICB7ImRyMTkiLCAiYnBh bTMifSwKKyAgeyJkcjIwIiwgImJwYW00In0sCisgIHsiZHIyMSIsICJicGFt NSJ9LAorICB7ImRyMjIiLCAiYnBhbTYifSwKKyAgeyJkcjIzIiwgImJwYW03 In0sCisgIHsiZHIyNCIsICJicHYwIn0sCisgIHsiZHIyNSIsICJicHYxIn0s CisgIHsiZHIyNiIsICJicHYyIn0sCisgIHsiZHIyNyIsICJicHYzIn0sCisg IHsiZHIyOCIsICJicHY0In0sCisgIHsiZHIyOSIsICJicHY1In0sCisgIHsi ZHIzMCIsICJicHY2In0sCisgIHsiZHIzMSIsICJicHY3In0sCisgIHsiZHIz MiIsICJicGNpZDAifSwKKyAgeyJkcjMzIiwgImJwY2lkMSJ9LAorICB7ImRy MzQiLCAiYnBjaWQyIn0sCisgIHsiZHIzNSIsICJicGNpZDMifSwKKyAgeyJk cjM2IiwgImJwY2lkNCJ9LAorICB7ImRyMzciLCAiYnBjaWQ1In0sCisgIHsi ZHIzOCIsICJicGNpZDYifSwKKyAgeyJkcjM5IiwgImJwY2lkNyJ9LAorICB7 ImRyNDAiLCAiZWRtX2NmZyJ9LAorICB7ImRyNDEiLCAiZWRtc3cifSwKKyAg eyJkcjQyIiwgImVkbV9jdGwifSwKKyAgeyJkcjQzIiwgImVkbV9kdHIifSwK KyAgeyJkcjQ0IiwgImJwbXRjIn0sCisgIHsiZHI0NSIsICJkaW1iciJ9LAor ICB7ImRyNDYiLCAidGVjcjAifSwKKyAgeyJkcjQ3IiwgInRlY3IxIn0sCisK KyAgeyJoc3ByMCIsICJoc3BfY3RsIn0sCisgIHsiaHNwcjEiLCAic3BfYm91 bmQifSwKKyAgeyJoc3ByMiIsICJzcF9ib3VuZF9wcml2In0sCisKKyAgeyJw ZnIwIiwgInBmbWMwIn0sCisgIHsicGZyMSIsICJwZm1jMSJ9LAorICB7InBm cjIiLCAicGZtYzIifSwKKyAgeyJwZnIzIiwgInBmbV9jdGwifSwKKyAgeyJw ZnI0IiwgInBmdF9jdGwifSwKKworICB7ImRtYXIwIiwgImRtYV9jZmcifSwK KyAgeyJkbWFyMSIsICJkbWFfZ2NzdyJ9LAorICB7ImRtYXIyIiwgImRtYV9j aG5zZWwifSwKKyAgeyJkbWFyMyIsICJkbWFfYWN0In0sCisgIHsiZG1hcjQi LCAiZG1hX3NldHVwIn0sCisgIHsiZG1hcjUiLCAiZG1hX2lzYWRkciJ9LAor ICB7ImRtYXI2IiwgImRtYV9lc2FkZHIifSwKKyAgeyJkbWFyNyIsICJkbWFf dGNudCJ9LAorICB7ImRtYXI4IiwgImRtYV9zdGF0dXMifSwKKyAgeyJkbWFy OSIsICJkbWFfMmRzZXQifSwKKyAgeyJkbWFyMTAiLCAiZG1hXzJkc2N0bCJ9 LAorICB7ImRtYXIxMSIsICJkbWFfcmNudCJ9LAorICB7ImRtYXIxMiIsICJk bWFfaHN0YXR1cyJ9LAorCisgIHsicmFjcjAiLCAicHJ1c3JfYWNjX2N0bCJ9 LAorICB7ImZ1Y3ByIiwgImZ1Y29wX2N0bCJ9LAorCisgIHsiaWRyMCIsICJz ZHpfY3RsIn0sCisgIHsiaWRyMSIsICJtaXNjX2N0bCJ9LAorICB7ImlkcjIi LCAiZWNjX21pc2MifSwKKworICB7InNlY3VyMCIsICJzZmNyIn0sCisgIHsi c2VjdXIxIiwgInNpZ24ifSwKKyAgeyJzZWN1cjIiLCAiaXNpZ24ifSwKKyAg eyJzZWN1cjMiLCAicF9pc2lnbiJ9LAorfTsKKworLyogVmFsdWUgb2YgYSBy ZWdpc3RlciBhbGlhcy4gIEJBVE9OIGlzIHRoZSByZWdudW0gb2YgdGhlIGNv cnJlc3BvbmRpbmcKKyAgIHJlZ2lzdGVyLiAgKi8KKworc3RhdGljIHN0cnVj dCB2YWx1ZSAqCit2YWx1ZV9vZl9uZHMzMl9yZWcgKHN0cnVjdCBmcmFtZV9p bmZvICpmcmFtZSwgY29uc3Qgdm9pZCAqYmF0b24pCit7CisgIHJldHVybiB2 YWx1ZV9vZl9yZWdpc3RlciAoKGludCkgKGludHB0cl90KSBiYXRvbiwgZnJh bWUpOworfQorDAorLyogSW1wbGVtZW50IHRoZSAiZnJhbWVfYWxpZ24iIGdk YmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIENPUkVfQUREUgorbmRzMzJf ZnJhbWVfYWxpZ24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FE RFIgc3ApCit7CisgIC8qIDgtYnl0ZSBhbGlnbmVkLiAgKi8KKyAgcmV0dXJu IGFsaWduX2Rvd24gKHNwLCA4KTsKK30KKworLyogSW1wbGVtZW50IHRoZSAi YnJlYWtwb2ludF9mcm9tX3BjIiBnZGJhcmNoIG1ldGhvZC4KKworICAgVXNl IHRoZSBwcm9ncmFtIGNvdW50ZXIgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZW50 cyBhbmQgc2l6ZSBvZiBhCisgICBicmVha3BvaW50IGluc3RydWN0aW9uLiAg UmV0dXJuIGEgcG9pbnRlciB0byBhIHN0cmluZyBvZiBieXRlcyB0aGF0Cisg ICBlbmNvZGUgYSBicmVha3BvaW50IGluc3RydWN0aW9uLCBzdG9yZSB0aGUg bGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4KKyAgICpMRU5QVFIgYW5kIG9wdGlv bmFsbHkgYWRqdXN0ICpQQ1BUUiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBt ZW1vcnkKKyAgIGxvY2F0aW9uIGZvciBpbnNlcnRpbmcgdGhlIGJyZWFrcG9p bnQuICAqLworCitzdGF0aWMgY29uc3QgZ2RiX2J5dGUgKgorbmRzMzJfYnJl YWtwb2ludF9mcm9tX3BjIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09S RV9BRERSICpwY3B0ciwKKwkJCSAgaW50ICpsZW5wdHIpCit7CisgIC8qIFRo ZSBzYW1lIGluc24gbWFjaGluZSBjb2RlIGlzIHVzZWQgZm9yIGxpdHRsZS1l bmRpYW4gYW5kIGJpZy1lbmRpYW4uICAqLworICBzdGF0aWMgY29uc3QgZ2Ri X2J5dGUgYnJlYWtfaW5zbltdID0geyAweEVBLCAweDAwIH07CisKKyAgKmxl bnB0ciA9IHNpemVvZiAoYnJlYWtfaW5zbik7CisgIHJldHVybiBicmVha19p bnNuOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJkd2FyZjJfcmVnX3RvX3Jl Z251bSIgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgaW50CituZHMz Ml9kd2FyZjJfcmVnX3RvX3JlZ251bSAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsIGludCBudW0pCit7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAg PSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworICBjb25zdCBpbnQgRlNSID0g Mzg7CisgIGNvbnN0IGludCBGRFIgPSBGU1IgKyAzMjsKKworICBpZiAobnVt ID49IDAgJiYgbnVtIDwgMzIpCisgICAgeworICAgICAgLyogR2VuZXJhbC1w dXJwb3NlIHJlZ2lzdGVycyAoUjAgLSBSMzEpLiAgKi8KKyAgICAgIHJldHVy biBudW07CisgICAgfQorICBlbHNlIGlmIChudW0gPj0gRlNSICYmIG51bSA8 IEZTUiArIDMyKQorICAgIHsKKyAgICAgIC8qIFNpbmdsZSBwcmVjaXNpb24g ZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIChGUzAgLSBGUzMxKS4gICovCisg ICAgICByZXR1cm4gbnVtIC0gRlNSICsgdGRlcC0+ZnMwX3JlZ251bTsKKyAg ICB9CisgIGVsc2UgaWYgKG51bSA+PSBGRFIgJiYgbnVtIDwgRkRSICsgMzIp CisgICAgeworICAgICAgLyogRG91YmxlIHByZWNpc2lvbiBmbG9hdGluZy1w b2ludCByZWdpc3RlcnMgKEZEMCAtIEZEMzEpLiAgKi8KKyAgICAgIHJldHVy biBudW0gLSBGRFIgKyBORFMzMl9GRDBfUkVHTlVNOworICAgIH0KKworICAv KiBObyBtYXRjaCwgcmV0dXJuIGEgaW5hY2Nlc3NpYmxlIHJlZ2lzdGVyIG51 bWJlci4gICovCisgIHJldHVybiAtMTsKK30KKwwKKy8qIE5EUzMyIHJlZ2lz dGVyIGdyb3Vwcy4gICovCitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMz Ml9jcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVnZ3JvdXAgKm5kczMy X2lyX3JlZ2dyb3VwOworc3RhdGljIHN0cnVjdCByZWdncm91cCAqbmRzMzJf bXJfcmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMzMl9k cl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVnZ3JvdXAgKm5kczMyX3Bm cl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVnZ3JvdXAgKm5kczMyX2hz cHJfcmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMzMl9k bWFyX3JlZ2dyb3VwOworc3RhdGljIHN0cnVjdCByZWdncm91cCAqbmRzMzJf cmFjcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVnZ3JvdXAgKm5kczMy X2lkcl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVnZ3JvdXAgKm5kczMy X3NlY3VyX3JlZ2dyb3VwOworCitzdGF0aWMgdm9pZAorbmRzMzJfaW5pdF9y ZWdncm91cHMgKHZvaWQpCit7CisgIG5kczMyX2NyX3JlZ2dyb3VwID0gcmVn Z3JvdXBfbmV3ICgiY3IiLCBVU0VSX1JFR0dST1VQKTsKKyAgbmRzMzJfaXJf cmVnZ3JvdXAgPSByZWdncm91cF9uZXcgKCJpciIsIFVTRVJfUkVHR1JPVVAp OworICBuZHMzMl9tcl9yZWdncm91cCA9IHJlZ2dyb3VwX25ldyAoIm1yIiwg VVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX2RyX3JlZ2dyb3VwID0gcmVnZ3Jv dXBfbmV3ICgiZHIiLCBVU0VSX1JFR0dST1VQKTsKKyAgbmRzMzJfcGZyX3Jl Z2dyb3VwID0gcmVnZ3JvdXBfbmV3ICgicGZyIiwgVVNFUl9SRUdHUk9VUCk7 CisgIG5kczMyX2hzcHJfcmVnZ3JvdXAgPSByZWdncm91cF9uZXcgKCJoc3By IiwgVVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX2RtYXJfcmVnZ3JvdXAgPSBy ZWdncm91cF9uZXcgKCJkbWFyIiwgVVNFUl9SRUdHUk9VUCk7CisgIG5kczMy X3JhY3JfcmVnZ3JvdXAgPSByZWdncm91cF9uZXcgKCJyYWNyIiwgVVNFUl9S RUdHUk9VUCk7CisgIG5kczMyX2lkcl9yZWdncm91cCA9IHJlZ2dyb3VwX25l dyAoImlkciIsIFVTRVJfUkVHR1JPVVApOworICBuZHMzMl9zZWN1cl9yZWdn cm91cCA9IHJlZ2dyb3VwX25ldyAoInNlY3VyIiwgVVNFUl9SRUdHUk9VUCk7 Cit9CisKK3N0YXRpYyB2b2lkCituZHMzMl9hZGRfcmVnZ3JvdXBzIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sKKyAgLyogQWRkIHByZS1kZWZpbmVk IHJlZ2lzdGVyIGdyb3Vwcy4gICovCisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJj aCwgZ2VuZXJhbF9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJj aCwgZmxvYXRfcmVnZ3JvdXApOworICByZWdncm91cF9hZGQgKGdkYmFyY2gs IHN5c3RlbV9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwg YWxsX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBzYXZl X3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCByZXN0b3Jl X3JlZ2dyb3VwKTsKKworICAvKiBBZGQgTkRTMzIgcmVnaXN0ZXIgZ3JvdXBz LiAgKi8KKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBuZHMzMl9jcl9yZWdn cm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgbmRzMzJfaXJfcmVn Z3JvdXApOworICByZWdncm91cF9hZGQgKGdkYmFyY2gsIG5kczMyX21yX3Jl Z2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBuZHMzMl9kcl9y ZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgbmRzMzJfcGZy X3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBuZHMzMl9o c3ByX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBuZHMz Ml9kbWFyX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBu ZHMzMl9yYWNyX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNo LCBuZHMzMl9pZHJfcmVnZ3JvdXApOworICByZWdncm91cF9hZGQgKGdkYmFy Y2gsIG5kczMyX3NlY3VyX3JlZ2dyb3VwKTsKK30KKworLyogSW1wbGVtZW50 IHRoZSAicmVnaXN0ZXJfcmVnZ3JvdXBfcCIgZ2RiYXJjaCBtZXRob2QuICAq LworCitzdGF0aWMgaW50CituZHMzMl9yZWdpc3Rlcl9yZWdncm91cF9wIChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSwKKwkJCSAgIHN0 cnVjdCByZWdncm91cCAqcmVnZ3JvdXApCit7CisgIGNvbnN0IGNoYXIgKnJl Z19uYW1lOworICBjb25zdCBjaGFyICpncm91cF9uYW1lOworICBpbnQgcmV0 OworCisgIGlmIChyZWdncm91cCA9PSBhbGxfcmVnZ3JvdXApCisgICAgcmV0 dXJuIDE7CisKKyAgLyogR2VuZXJhbCByZWdncm91cCBjb250YWlucyBvbmx5 IEdQUnMgYW5kIFBDLiAgKi8KKyAgaWYgKHJlZ2dyb3VwID09IGdlbmVyYWxf cmVnZ3JvdXApCisgICAgcmV0dXJuIHJlZ251bSA8PSBORFMzMl9QQ19SRUdO VU07CisKKyAgaWYgKHJlZ2dyb3VwID09IGZsb2F0X3JlZ2dyb3VwIHx8IHJl Z2dyb3VwID09IHNhdmVfcmVnZ3JvdXAKKyAgICAgIHx8IHJlZ2dyb3VwID09 IHJlc3RvcmVfcmVnZ3JvdXApCisgICAgeworICAgICAgcmV0ID0gdGRlc2Nf cmVnaXN0ZXJfaW5fcmVnZ3JvdXBfcCAoZ2RiYXJjaCwgcmVnbnVtLCByZWdn cm91cCk7CisgICAgICBpZiAocmV0ICE9IC0xKQorCXJldHVybiByZXQ7CisK KyAgICAgIHJldHVybiBkZWZhdWx0X3JlZ2lzdGVyX3JlZ2dyb3VwX3AgKGdk YmFyY2gsIHJlZ251bSwgcmVnZ3JvdXApOworICAgIH0KKworICBpZiAocmVn Z3JvdXAgPT0gc3lzdGVtX3JlZ2dyb3VwKQorICAgIHJldHVybiAocmVnbnVt ID4gTkRTMzJfUENfUkVHTlVNKQorCSAgICAmJiAhbmRzMzJfcmVnaXN0ZXJf cmVnZ3JvdXBfcCAoZ2RiYXJjaCwgcmVnbnVtLCBmbG9hdF9yZWdncm91cCk7 CisKKyAgLyogVGhlIE5EUzMyIHJlZ2dyb3VwIGNvbnRhaW5zIHJlZ2lzdGVy cyB3aG9zZSBuYW1lIGlzIHByZWZpeGVkCisgICAgIGJ5IHJlZ2dyb3VwIG5h bWUuICAqLworICByZWdfbmFtZSA9IGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAo Z2RiYXJjaCwgcmVnbnVtKTsKKyAgZ3JvdXBfbmFtZSA9IHJlZ2dyb3VwX25h bWUgKHJlZ2dyb3VwKTsKKyAgcmV0dXJuICFzdHJuY21wIChyZWdfbmFtZSwg Z3JvdXBfbmFtZSwgc3RybGVuIChncm91cF9uYW1lKSk7Cit9CisMCisvKiBJ bXBsZW1lbnQgdGhlICJwc2V1ZG9fcmVnaXN0ZXJfdHlwZSIgdGRlc2NfYXJj aF9kYXRhIG1ldGhvZC4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdHlwZSAqCitu ZHMzMl9wc2V1ZG9fcmVnaXN0ZXJfdHlwZSAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gsIGludCByZWdudW0pCit7CisgIHJlZ251bSAtPSBnZGJhcmNoX251 bV9yZWdzIChnZGJhcmNoKTsKKworICAvKiBDdXJyZW50bHksIG9ubHkgRlNS cyBjb3VsZCBiZSBkZWZpbmVkIGFzIHBzZXVkbyByZWdpc3RlcnMuICAqLwor ICBpZiAocmVnbnVtIDwgZ2RiYXJjaF9udW1fcHNldWRvX3JlZ3MgKGdkYmFy Y2gpKQorICAgIHJldHVybiBhcmNoX2Zsb2F0X3R5cGUgKGdkYmFyY2gsIC0x LCAiYnVpbHRpbl90eXBlX2llZWVfc2luZ2xlIiwKKwkJCSAgICBmbG9hdGZv cm1hdHNfaWVlZV9zaW5nbGUpOworCisgIHdhcm5pbmcgKF8oIlVua25vd24g bmRzMzIgcHNldWRvIHJlZ2lzdGVyICVkLiIpLCByZWdudW0pOworICByZXR1 cm4gTlVMTDsKK30KKworLyogSW1wbGVtZW50IHRoZSAicHNldWRvX3JlZ2lz dGVyX25hbWUiIHRkZXNjX2FyY2hfZGF0YSBtZXRob2QuICAqLworCitzdGF0 aWMgY29uc3QgY2hhciAqCituZHMzMl9wc2V1ZG9fcmVnaXN0ZXJfbmFtZSAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0pCit7CisgIHJl Z251bSAtPSBnZGJhcmNoX251bV9yZWdzIChnZGJhcmNoKTsKKworICAvKiBD dXJyZW50bHksIG9ubHkgRlNScyBjb3VsZCBiZSBkZWZpbmVkIGFzIHBzZXVk byByZWdpc3RlcnMuICAqLworICBpZiAocmVnbnVtIDwgZ2RiYXJjaF9udW1f cHNldWRvX3JlZ3MgKGdkYmFyY2gpKQorICAgIHJldHVybiBuZHMzMl9mc3Jf cmVnaXN0ZXJfbmFtZXNbcmVnbnVtXTsKKworICB3YXJuaW5nIChfKCJVbmtu b3duIG5kczMyIHBzZXVkbyByZWdpc3RlciAlZC4iKSwgcmVnbnVtKTsKKyAg cmV0dXJuIE5VTEw7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInBzZXVkb19y ZWdpc3Rlcl9yZWFkIiBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBl bnVtIHJlZ2lzdGVyX3N0YXR1cworbmRzMzJfcHNldWRvX3JlZ2lzdGVyX3Jl YWQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorCQkJICAgIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0sCisJCQkgICAgZ2RiX2J5 dGUgKmJ1ZikKK3sKKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdk YmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisgIGdkYl9ieXRlIHJlZ19idWZbOF07 CisgIGludCBvZmZzZXQsIGZkcl9yZWdudW07CisgIGVudW0gcmVnaXN0ZXJf c3RhdHVzIHN0YXR1cyA9IFJFR19VTktOT1dOOworCisgIC8qIFNhbml0eSBj aGVjay4gICovCisgIGlmICh0ZGVwLT5mcHVfZnJlZyA9PSAtMSB8fCB0ZGVw LT51c2VfcHNldWRvX2ZzcnMgPT0gMCkKKyAgICByZXR1cm4gc3RhdHVzOwor CisgIHJlZ251bSAtPSBnZGJhcmNoX251bV9yZWdzIChnZGJhcmNoKTsKKwor ICAvKiBDdXJyZW50bHksIG9ubHkgRlNScyBjb3VsZCBiZSBkZWZpbmVkIGFz IHBzZXVkbyByZWdpc3RlcnMuICAqLworICBpZiAocmVnbnVtIDwgZ2RiYXJj aF9udW1fcHNldWRvX3JlZ3MgKGdkYmFyY2gpKQorICAgIHsKKyAgICAgIC8q IGZzMCBpcyBhbHdheXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiBm ZDAuICAqLworICAgICAgaWYgKGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJj aCkgPT0gQkZEX0VORElBTl9CSUcpCisJb2Zmc2V0ID0gKHJlZ251bSAmIDEp ID8gNCA6IDA7CisgICAgICBlbHNlCisJb2Zmc2V0ID0gKHJlZ251bSAmIDEp ID8gMCA6IDQ7CisKKyAgICAgIGZkcl9yZWdudW0gPSBORFMzMl9GRDBfUkVH TlVNICsgKHJlZ251bSA+PiAxKTsKKyAgICAgIHN0YXR1cyA9IHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgZmRyX3JlZ251bSwgcmVnX2J1Zik7Cisg ICAgICBpZiAoc3RhdHVzID09IFJFR19WQUxJRCkKKwltZW1jcHkgKGJ1Ziwg cmVnX2J1ZiArIG9mZnNldCwgNCk7CisgICAgfQorCisgIHJldHVybiBzdGF0 dXM7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInBzZXVkb19yZWdpc3Rlcl93 cml0ZSIgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgdm9pZAorbmRz MzJfcHNldWRvX3JlZ2lzdGVyX3dyaXRlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwKKwkJCSAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50 IHJlZ251bSwKKwkJCSAgICAgY29uc3QgZ2RiX2J5dGUgKmJ1ZikKK3sKKyAg c3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2Ri YXJjaCk7CisgIGdkYl9ieXRlIHJlZ19idWZbOF07CisgIGludCBvZmZzZXQs IGZkcl9yZWdudW07CisKKyAgLyogU2FuaXR5IGNoZWNrLiAgKi8KKyAgaWYg KHRkZXAtPmZwdV9mcmVnID09IC0xIHx8IHRkZXAtPnVzZV9wc2V1ZG9fZnNy cyA9PSAwKQorICAgIHJldHVybjsKKworICByZWdudW0gLT0gZ2RiYXJjaF9u dW1fcmVncyAoZ2RiYXJjaCk7CisKKyAgLyogQ3VycmVudGx5LCBvbmx5IEZT UnMgY291bGQgYmUgZGVmaW5lZCBhcyBwc2V1ZG8gcmVnaXN0ZXJzLiAgKi8K KyAgaWYgKHJlZ251bSA8IGdkYmFyY2hfbnVtX3BzZXVkb19yZWdzIChnZGJh cmNoKSkKKyAgICB7CisgICAgICAvKiBmczAgaXMgYWx3YXlzIHRoZSBtb3N0 IHNpZ25pZmljYW50IGhhbGYgb2YgZmQwLiAgKi8KKyAgICAgIGlmIChnZGJh cmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpID09IEJGRF9FTkRJQU5fQklHKQor CW9mZnNldCA9IChyZWdudW0gJiAxKSA/IDQgOiAwOworICAgICAgZWxzZQor CW9mZnNldCA9IChyZWdudW0gJiAxKSA/IDAgOiA0OworCisgICAgICBmZHJf cmVnbnVtID0gTkRTMzJfRkQwX1JFR05VTSArIChyZWdudW0gPj4gMSk7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIGZkcl9yZWdudW0s IHJlZ19idWYpOworICAgICAgbWVtY3B5IChyZWdfYnVmICsgb2Zmc2V0LCBi dWYsIDQpOworICAgICAgcmVnY2FjaGVfcmF3X3dyaXRlIChyZWdjYWNoZSwg ZmRyX3JlZ251bSwgcmVnX2J1Zik7CisgICAgfQorfQorDAorLyogSGVscGVy IGZ1bmN0aW9uIGZvciBORFMzMiBBQkkuICBSZXR1cm4gdHJ1ZSBpZiBGUFJz IGNhbiBiZSB1c2VkCisgICB0byBwYXNzIGZ1bmN0aW9uIGFyZ3VtZW50cyBh bmQgcmV0dXJuIHZhbHVlLiAgKi8KKworc3RhdGljIGludAorbmRzMzJfYWJp X3VzZV9mcHIgKGludCBlbGZfYWJpKQoreworICByZXR1cm4gZWxmX2FiaSA9 PSBFX05EU19BQklfVjJGUF9QTFVTOworfQorCisvKiBIZWxwZXIgZnVuY3Rp b24gZm9yIE5EUzMyIEFCSS4gIFJldHVybiB0cnVlIGlmIEdQUnMgYW5kIHN0 YWNrCisgICBjYW4gYmUgdXNlZCB0b2dldGhlciB0byBwYXNzIGFuIGFyZ3Vt ZW50LiAgKi8KKworc3RhdGljIGludAorbmRzMzJfYWJpX3NwbGl0IChpbnQg ZWxmX2FiaSkKK3sKKyAgcmV0dXJuIGVsZl9hYmkgPT0gRV9ORFNfQUJJX0FB Qkk7Cit9CisKKyNkZWZpbmUgTkRTMzJfTlVNX1NBVkVEX1JFR1MgKE5EUzMy X0xQX1JFR05VTSArIDEpCisKK3N0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZQor eworICAvKiBUaGUgcHJldmlvdXMgZnJhbWUncyBpbm5lciBtb3N0IHN0YWNr IGFkZHJlc3MuICBVc2VkIGFzIHRoaXMKKyAgICAgZnJhbWUgSUQncyBzdGFj a19hZGRyLiAgKi8KKyAgQ09SRV9BRERSIHByZXZfc3A7CisKKyAgLyogVGhl IGZyYW1lJ3MgYmFzZSwgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBoaWdoLWxl dmVsIGRlYnVnIGluZm8uICAqLworICBDT1JFX0FERFIgYmFzZTsKKworICAv KiBEdXJpbmcgcHJvbG9ndWUgYW5hbHlzaXMsIGtlZXAgaG93IGZhciB0aGUg U1AgYW5kIEZQIGhhdmUgYmVlbiBvZmZzZXQKKyAgICAgZnJvbSB0aGUgc3Rh cnQgb2YgdGhlIHN0YWNrIGZyYW1lIChhcyBkZWZpbmVkIGJ5IHRoZSBwcmV2 aW91cyBmcmFtZSdzCisgICAgIHN0YWNrIHBvaW50ZXIpLgorICAgICBEdXJp bmcgZXBpbG9ndWUgYW5hbHlzaXMsIGtlZXAgaG93IGZhciB0aGUgU1AgaGFz IGJlZW4gb2Zmc2V0IGZyb20gdGhlCisgICAgIGN1cnJlbnQgc3RhY2sgcG9p bnRlci4gICovCisgIENPUkVfQUREUiBzcF9vZmZzZXQ7CisgIENPUkVfQURE UiBmcF9vZmZzZXQ7CisKKyAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0 IGluc3RydWN0aW9uIGluIHRoaXMgZnVuY3Rpb24uICAqLworICBDT1JFX0FE RFIgcGM7CisKKyAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKyAgQ09SRV9B RERSIHNhdmVkX3JlZ3NbTkRTMzJfTlVNX1NBVkVEX1JFR1NdOworfTsKKwor LyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBmcmFtZSBjYWNoZS4gICov CisKK3N0YXRpYyBzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKgorbmRzMzJf YWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCit7CisgIHN0cnVjdCBuZHMzMl9m cmFtZV9jYWNoZSAqY2FjaGU7CisgIGludCBpOworCisgIGNhY2hlID0gRlJB TUVfT0JTVEFDS19aQUxMT0MgKHN0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSk7 CisKKyAgLyogSW5pdGlhbGl6ZSBmcF9vZmZzZXQgdG8gY2hlY2sgaWYgRlAg aXMgc2V0IGluIHByb2xvZ3VlLiAgKi8KKyAgY2FjaGUtPmZwX29mZnNldCA9 IElOVkFMSURfT0ZGU0VUOworCisgIC8qIFNhdmVkIHJlZ2lzdGVycy4gIFdl IGluaXRpYWxpemUgdGhlc2UgdG8gLTEgc2luY2UgemVybyBpcyBhIHZhbGlk CisgICAgIG9mZnNldC4gICovCisgIGZvciAoaSA9IDA7IGkgPCBORFMzMl9O VU1fU0FWRURfUkVHUzsgaSsrKQorICAgIGNhY2hlLT5zYXZlZF9yZWdzW2ld ID0gUkVHX1VOQVZBSUw7CisKKyAgcmV0dXJuIGNhY2hlOworfQorCisvKiBI ZWxwZXIgZnVuY3Rpb24gZm9yIGluc3RydWN0aW9ucyB1c2VkIHRvIHB1c2gg bXVsdGlwbGUgd29yZHMuICAqLworCitzdGF0aWMgdm9pZAorbmRzMzJfcHVz aF9tdWx0aXBsZV93b3JkcyAoc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpj YWNoZSwgaW50IHJiLCBpbnQgcmUsCisJCQkgICBpbnQgZW5hYmxlNCkKK3sK KyAgQ09SRV9BRERSIHNwX29mZnNldCA9IGNhY2hlLT5zcF9vZmZzZXQ7Cisg IGludCBpOworCisgIC8qIENoZWNrIExQLCBHUCwgRlAgaW4gZW5hYmxlNC4g ICovCisgIGZvciAoaSA9IDE7IGkgPD0gMzsgaSsrKQorICAgIHsKKyAgICAg IGlmICgoZW5hYmxlNCA+PiBpKSAmIDB4MSkKKwl7CisJICBzcF9vZmZzZXQg Kz0gNDsKKwkgIGNhY2hlLT5zYXZlZF9yZWdzW05EUzMyX1NQX1JFR05VTSAt IGldID0gc3Bfb2Zmc2V0OworCX0KKyAgICB9CisKKyAgLyogU2tpcCBjYXNl IHdoZXJlIHJlID09IHJiID09IHNwLiAgKi8KKyAgaWYgKChyYiA8IFJFR19G UCkgJiYgKHJlIDwgUkVHX0ZQKSkKKyAgICB7CisgICAgICBmb3IgKGkgPSBy ZTsgaSA+PSByYjsgaS0tKQorCXsKKwkgIHNwX29mZnNldCArPSA0OworCSAg Y2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBzcF9vZmZzZXQ7CisJfQorICAgIH0K KworICAvKiBGb3Igc3AsIHVwZGF0ZSB0aGUgb2Zmc2V0LiAgKi8KKyAgY2Fj aGUtPnNwX29mZnNldCA9IHNwX29mZnNldDsKK30KKworLyogQW5hbHl6ZSB0 aGUgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUgZ2l2ZW4gYWRkcmVzcyByYW5n ZS4gIElmIENBQ0hFCisgICBpcyBub24tTlVMTCwgZmlsbCBpdCBpbi4gIFJl dHVybiB0aGUgZmlyc3QgYWRkcmVzcyBiZXlvbmQgdGhlIGdpdmVuCisgICBh ZGRyZXNzIHJhbmdlLiAgSWYgQ0FDSEUgaXMgTlVMTCwgcmV0dXJuIHRoZSBm aXJzdCBhZGRyZXNzIG5vdAorICAgcmVjb2duaXplZCBhcyBhIHByb2xvZ3Vl IGluc3RydWN0aW9uLiAgKi8KKworc3RhdGljIENPUkVfQUREUgorbmRzMzJf YW5hbHl6ZV9wcm9sb2d1ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENP UkVfQUREUiBwYywKKwkJCUNPUkVfQUREUiBsaW1pdF9wYywgc3RydWN0IG5k czMyX2ZyYW1lX2NhY2hlICpjYWNoZSkKK3sKKyAgc3RydWN0IGdkYmFyY2hf dGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisgIGludCBh YmlfdXNlX2ZwciA9IG5kczMyX2FiaV91c2VfZnByICh0ZGVwLT5lbGZfYWJp KTsKKyAgLyogQ3VycmVudCBzY2FubmluZyBzdGF0dXMuICAqLworICBpbnQg aW5fcHJvbG9ndWVfYmIgPSAwOworICBpbnQgdmFsX3RhID0gMDsKKyAgdWlu dDMyX3QgaW5zbiwgaW5zbl9sZW47CisKKyAgZm9yICg7IHBjIDwgbGltaXRf cGM7IHBjICs9IGluc25fbGVuKQorICAgIHsKKyAgICAgIGluc24gPSByZWFk X21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChwYywgNCwgQkZEX0VORElBTl9C SUcpOworCisgICAgICBpZiAoKGluc24gJiAweDgwMDAwMDAwKSA9PSAwKQor CXsKKwkgIC8qIDMyLWJpdCBpbnN0cnVjdGlvbiAqLworCSAgaW5zbl9sZW4g PSA0OworCisJICBpZiAoQ0hPUF9CSVRTIChpbnNuLCAxNSkgPT0gTjMyX1RZ UEUyIChBRERJLCBSRUdfU1AsIFJFR19TUCwgMCkpCisJICAgIHsKKwkgICAg ICAvKiBhZGRpICRzcCwgJHNwLCBpbW0xNXMgKi8KKwkgICAgICBpbnQgaW1t MTVzID0gTjMyX0lNTTE1UyAoaW5zbik7CisKKwkgICAgICBpZiAoaW1tMTVz IDwgMCkKKwkJeworCQkgIGlmIChjYWNoZSAhPSBOVUxMKQorCQkgICAgY2Fj aGUtPnNwX29mZnNldCArPSAtaW1tMTVzOworCisJCSAgaW5fcHJvbG9ndWVf YmIgPSAxOworCQkgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgIGVsc2Ug aWYgKENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAoQURESSwg UkVHX0ZQLCBSRUdfU1AsIDApKQorCSAgICB7CisJICAgICAgLyogYWRkaSAk ZnAsICRzcCwgaW1tMTVzICovCisJICAgICAgaW50IGltbTE1cyA9IE4zMl9J TU0xNVMgKGluc24pOworCisJICAgICAgaWYgKGltbTE1cyA+IDApCisJCXsK KwkJICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJICAgIGNhY2hlLT5mcF9vZmZz ZXQgPSBjYWNoZS0+c3Bfb2Zmc2V0IC0gaW1tMTVzOworCisJCSAgaW5fcHJv bG9ndWVfYmIgPSAxOworCQkgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkg IGVsc2UgaWYgKChpbnNuICYgfihfX01BU0sgKDE5KSA8PCA2KSkgPT0gTjMy X1NNV19BRE0KKwkJICAgJiYgTjMyX1JBNSAoaW5zbikgPT0gUkVHX1NQKQor CSAgICB7CisJICAgICAgLyogc213LmFkbSBSYiwgWyRzcF0sIFJlLCBlbmFi bGU0ICovCisJICAgICAgaWYgKGNhY2hlICE9IE5VTEwpCisJCW5kczMyX3B1 c2hfbXVsdGlwbGVfd29yZHMgKGNhY2hlLCBOMzJfUlQ1IChpbnNuKSwKKwkJ CQkJICAgTjMyX1JCNSAoaW5zbiksCisJCQkJCSAgIE4zMl9MU01XX0VOQUJM RTQgKGluc24pKTsKKwkgICAgICBpbl9wcm9sb2d1ZV9iYiA9IDE7CisJICAg ICAgY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKGluc24gPT0gTjMy X0FMVTEgKEFERCwgUkVHX1NQLCBSRUdfU1AsIFJFR19UQSkKKwkJICAgfHwg aW5zbiA9PSBOMzJfQUxVMSAoQURELCBSRUdfU1AsIFJFR19UQSwgUkVHX1NQ KSkKKwkgICAgeworCSAgICAgIC8qIGFkZCAkc3AsICRzcCwgJHRhICovCisJ ICAgICAgLyogYWRkICRzcCwgJHRhLCAkc3AgKi8KKwkgICAgICBpZiAodmFs X3RhIDwgMCkKKwkJeworCQkgIGlmIChjYWNoZSAhPSBOVUxMKQorCQkgICAg Y2FjaGUtPnNwX29mZnNldCArPSAtdmFsX3RhOworCisJCSAgaW5fcHJvbG9n dWVfYmIgPSAxOworCQkgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgIGVs c2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMjApID09IE4zMl9UWVBFMSAoTU9W SSwgUkVHX1RBLCAwKSkKKwkgICAgeworCSAgICAgIC8qIG1vdmkgJHRhLCBp bW0yMHMgKi8KKwkgICAgICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJdmFsX3Rh ID0gTjMyX0lNTTIwUyAoaW5zbik7CisKKwkgICAgICBjb250aW51ZTsKKwkg ICAgfQorCSAgZWxzZSBpZiAoQ0hPUF9CSVRTIChpbnNuLCAyMCkgPT0gTjMy X1RZUEUxIChTRVRISSwgUkVHX1RBLCAwKSkKKwkgICAgeworCSAgICAgIC8q IHNldGhpICR0YSwgaW1tMjB1ICovCisJICAgICAgaWYgKGNhY2hlICE9IE5V TEwpCisJCXZhbF90YSA9IE4zMl9JTU0yMFUgKGluc24pIDw8IDEyOworCisJ ICAgICAgY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKENIT1BfQklU UyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAoT1JJLCBSRUdfVEEsIFJFR19U QSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBvcmkgJHRhLCAkdGEsIGltbTE1 dSAqLworCSAgICAgIGlmIChjYWNoZSAhPSBOVUxMKQorCQl2YWxfdGEgfD0g TjMyX0lNTTE1VSAoaW5zbik7CisKKwkgICAgICBjb250aW51ZTsKKwkgICAg fQorCSAgZWxzZSBpZiAoQ0hPUF9CSVRTIChpbnNuLCAxNSkgPT0gTjMyX1RZ UEUyIChBRERJLCBSRUdfVEEsIFJFR19UQSwgMCkpCisJICAgIHsKKwkgICAg ICAvKiBhZGRpICR0YSwgJHRhLCBpbW0xNXMgKi8KKwkgICAgICBpZiAoY2Fj aGUgIT0gTlVMTCkKKwkJdmFsX3RhICs9IE4zMl9JTU0xNVMgKGluc24pOwor CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkgIGlmIChpbnNuID09IE4z Ml9BTFUxIChBREQsIFJFR19HUCwgUkVHX1RBLCBSRUdfR1ApCisJICAgICAg fHwgaW5zbiA9PSBOMzJfQUxVMSAoQURELCBSRUdfR1AsIFJFR19HUCwgUkVH X1RBKSkKKwkgICAgeworCSAgICAgIC8qIGFkZCAkZ3AsICR0YSwgJGdwICov CisJICAgICAgLyogYWRkICRncCwgJGdwLCAkdGEgKi8KKwkgICAgICBpbl9w cm9sb2d1ZV9iYiA9IDE7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkg IGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMjApID09IE4zMl9UWVBFMSAo TU9WSSwgUkVHX0dQLCAwKSkKKwkgICAgeworCSAgICAgIC8qIG1vdmkgJGdw LCBpbW0yMHMgKi8KKwkgICAgICBpbl9wcm9sb2d1ZV9iYiA9IDE7CisJICAg ICAgY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKENIT1BfQklUUyAo aW5zbiwgMjApID09IE4zMl9UWVBFMSAoU0VUSEksIFJFR19HUCwgMCkpCisJ ICAgIHsKKwkgICAgICAvKiBzZXRoaSAkZ3AsIGltbTIwdSAqLworCSAgICAg IGluX3Byb2xvZ3VlX2JiID0gMTsKKwkgICAgICBjb250aW51ZTsKKwkgICAg fQorCSAgZWxzZSBpZiAoQ0hPUF9CSVRTIChpbnNuLCAxNSkgPT0gTjMyX1RZ UEUyIChPUkksIFJFR19HUCwgUkVHX0dQLCAwKSkKKwkgICAgeworCSAgICAg IC8qIG9yaSAkZ3AsICRncCwgaW1tMTV1ICovCisJICAgICAgaW5fcHJvbG9n dWVfYmIgPSAxOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICBlbHNl CisJICAgIHsKKwkgICAgICAvKiBKdW1wL0JyYW5jaCBpbnNucyBuZXZlciBh cHBlYXIgaW4gcHJvbG9ndWUgYmFzaWMgYmxvY2suCisJCSBUaGUgbG9vcCBj YW4gYmUgZXNjYXBlZCBlYXJseSB3aGVuIHRoZXNlIGluc25zIGFyZSBtZXQu ICAqLworCSAgICAgIGlmIChpbl9wcm9sb2d1ZV9iYiA9PSAxKQorCQl7CisJ CSAgaW50IG9wID0gTjMyX09QNiAoaW5zbik7CisKKwkJICBpZiAob3AgPT0g TjMyX09QNl9KSQorCQkgICAgICB8fCBvcCA9PSBOMzJfT1A2X0pSRUcKKwkJ ICAgICAgfHwgb3AgPT0gTjMyX09QNl9CUjEKKwkJICAgICAgfHwgb3AgPT0g TjMyX09QNl9CUjIKKwkJICAgICAgfHwgb3AgPT0gTjMyX09QNl9CUjMpCisJ CSAgICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgIGlmIChhYmlfdXNlX2Zw ciAmJiBOMzJfT1A2IChpbnNuKSA9PSBOMzJfT1A2X1NEQworCSAgICAgICYm IF9fR0YgKGluc24sIDEyLCAzKSA9PSAwKQorCSAgICB7CisJICAgICAgLyog Rm9yIEZQVSBpbnNucywgQ1AgKGJpdCBbMTM6MTRdKSBzaG91bGQgYmUgQ1Aw LCAgYW5kIG9ubHkKKwkJIG5vcm1hbCBmb3JtIChiaXQgWzEyXSA9PSAwKSBp cyB1c2VkLiAgKi8KKworCSAgICAgIC8qIGZzZGkgRkR0LCBbJHNwICsgKGlt bTEycyA8PCAyKV0gKi8KKwkgICAgICBpZiAoTjMyX1JBNSAoaW5zbikgPT0g UkVHX1NQKQorCQljb250aW51ZTsKKwkgICAgfQorCisJICAvKiBUaGUgb3B0 aW1pemVyIG1pZ2h0IHNob3ZlIGFueXRoaW5nIGludG8gdGhlIHByb2xvZ3Vl LCBpZgorCSAgICAgd2UgYnVpbGQgdXAgY2FjaGUgKGNhY2hlICE9IE5VTEwp IGZyb20gYW5hbHl6aW5nIHByb2xvZ3VlLAorCSAgICAgd2UganVzdCBza2lw IHdoYXQgd2UgZG9uJ3QgcmVjb2duaXplIGFuZCBhbmFseXplIGZ1cnRoZXIg dG8KKwkgICAgIG1ha2UgY2FjaGUgYXMgY29tcGxldGUgYXMgcG9zc2libGUu ICBIb3dldmVyLCBpZiB3ZSBza2lwCisJICAgICBwcm9sb2d1ZSwgd2UnbGwg c3RvcCBpbW1lZGlhdGVseSBvbiB1bnJlY29nbml6ZWQKKwkgICAgIGluc3Ry dWN0aW9uLiAgKi8KKwkgIGlmIChjYWNoZSA9PSBOVUxMKQorCSAgICBicmVh azsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogMTYtYml0IGluc3RydWN0 aW9uICovCisJICBpbnNuX2xlbiA9IDI7CisKKwkgIGluc24gPj49IDE2Owor CisJICBpZiAoQ0hPUF9CSVRTIChpbnNuLCAxMCkgPT0gTjE2X1RZUEUxMCAo QURESTEwUywgMCkpCisJICAgIHsKKwkgICAgICAvKiBhZGRpMTBzLnNwICov CisJICAgICAgaW50IGltbTEwcyA9IE4xNl9JTU0xMFMgKGluc24pOworCisJ ICAgICAgaWYgKGltbTEwcyA8IDApCisJCXsKKwkJICBpZiAoY2FjaGUgIT0g TlVMTCkKKwkJICAgIGNhY2hlLT5zcF9vZmZzZXQgKz0gLWltbTEwczsKKwor CQkgIGluX3Byb2xvZ3VlX2JiID0gMTsKKwkJICBjb250aW51ZTsKKwkJfQor CSAgICB9CisJICBlbHNlIGlmIChfX0dGIChpbnNuLCA3LCA4KSA9PSBOMTZf VDI1X1BVU0gyNSkKKwkgICAgeworCSAgICAgIC8qIHB1c2gyNSAqLworCSAg ICAgIGlmIChjYWNoZSAhPSBOVUxMKQorCQl7CisJCSAgaW50IGltbTh1ID0g KGluc24gJiAweDFmKSA8PCAzOworCQkgIGludCByZSA9IChpbnNuID4+IDUp ICYgMHgzOworCQkgIGNvbnN0IGludCByZWdfbWFwW10gPSB7IDYsIDgsIDEw LCAxNCB9OworCisJCSAgLyogT3BlcmF0aW9uIDEgLS0gc213LmFkbSBSNiwg WyRzcF0sIFJlLCAjMHhlICovCisJCSAgbmRzMzJfcHVzaF9tdWx0aXBsZV93 b3JkcyAoY2FjaGUsIDYsIHJlZ19tYXBbcmVdLCAweGUpOworCisJCSAgLyog T3BlcmF0aW9uIDIgLS0gc3AgPSBzcCAtIChpbW01dSA8PCAzKSAqLworCQkg IGNhY2hlLT5zcF9vZmZzZXQgKz0gaW1tOHU7CisJCX0KKworCSAgICAgIGlu X3Byb2xvZ3VlX2JiID0gMTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQor CSAgZWxzZSBpZiAoaW5zbiA9PSBOMTZfVFlQRTUgKEFERDVQQywgUkVHX0dQ KSkKKwkgICAgeworCSAgICAgIC8qIGFkZDUucGMgJGdwICovCisJICAgICAg aW5fcHJvbG9ndWVfYmIgPSAxOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9 CisJICBlbHNlIGlmIChDSE9QX0JJVFMgKGluc24sIDUpID09IE4xNl9UWVBF NTUgKE1PVkk1NSwgUkVHX0dQLCAwKSkKKwkgICAgeworCSAgICAgIC8qIG1v dmk1NSAkZ3AsIGltbTVzICovCisJICAgICAgaW5fcHJvbG9ndWVfYmIgPSAx OworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICBlbHNlCisJICAgIHsK KwkgICAgICAvKiBKdW1wL0JyYW5jaCBpbnNucyBuZXZlciBhcHBlYXIgaW4g cHJvbG9ndWUgYmFzaWMgYmxvY2suCisJCSBUaGUgbG9vcCBjYW4gYmUgZXNj YXBlZCBlYXJseSB3aGVuIHRoZXNlIGluc25zIGFyZSBtZXQuICAqLworCSAg ICAgIGlmIChpbl9wcm9sb2d1ZV9iYiA9PSAxKQorCQl7CisJCSAgdWludDMy X3QgaW5zbjUgPSBDSE9QX0JJVFMgKGluc24sIDUpOworCQkgIHVpbnQzMl90 IGluc244ID0gQ0hPUF9CSVRTIChpbnNuLCA4KTsKKwkJICB1aW50MzJfdCBp bnNuMzggPSBDSE9QX0JJVFMgKGluc24sIDExKTsKKworCQkgIGlmIChpbnNu NSA9PSBOMTZfVFlQRTUgKEpSNSwgMCkKKwkJICAgICAgfHwgaW5zbjUgPT0g TjE2X1RZUEU1IChKUkFMNSwgMCkKKwkJICAgICAgfHwgaW5zbjUgPT0gTjE2 X1RZUEU1IChSRVQ1LCAwKQorCQkgICAgICB8fCBpbnNuOCA9PSBOMTZfVFlQ RTggKEo4LCAwKQorCQkgICAgICB8fCBpbnNuOCA9PSBOMTZfVFlQRTggKEJF UVpTOCwgMCkKKwkJICAgICAgfHwgaW5zbjggPT0gTjE2X1RZUEU4IChCTkVa UzgsIDApCisJCSAgICAgIHx8IGluc24zOCA9PSBOMTZfVFlQRTM4IChCRVFa MzgsIDAsIDApCisJCSAgICAgIHx8IGluc24zOCA9PSBOMTZfVFlQRTM4IChC TkVaMzgsIDAsIDApCisJCSAgICAgIHx8IGluc24zOCA9PSBOMTZfVFlQRTM4 IChCRVFTMzgsIDAsIDApCisJCSAgICAgIHx8IGluc24zOCA9PSBOMTZfVFlQ RTM4IChCTkVTMzgsIDAsIDApKQorCQkgICAgYnJlYWs7CisJCX0KKwkgICAg fQorCisJICAvKiBUaGUgb3B0aW1pemVyIG1pZ2h0IHNob3ZlIGFueXRoaW5n IGludG8gdGhlIHByb2xvZ3VlLCBpZgorCSAgICAgd2UgYnVpbGQgdXAgY2Fj aGUgKGNhY2hlICE9IE5VTEwpIGZyb20gYW5hbHl6aW5nIHByb2xvZ3VlLAor CSAgICAgd2UganVzdCBza2lwIHdoYXQgd2UgZG9uJ3QgcmVjb2duaXplIGFu ZCBhbmFseXplIGZ1cnRoZXIgdG8KKwkgICAgIG1ha2UgY2FjaGUgYXMgY29t cGxldGUgYXMgcG9zc2libGUuICBIb3dldmVyLCBpZiB3ZSBza2lwCisJICAg ICBwcm9sb2d1ZSwgd2UnbGwgc3RvcCBpbW1lZGlhdGVseSBvbiB1bnJlY29n bml6ZWQKKwkgICAgIGluc3RydWN0aW9uLiAgKi8KKwkgIGlmIChjYWNoZSA9 PSBOVUxMKQorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgIHJldHVybiBw YzsKK30KKworLyogSW1wbGVtZW50IHRoZSAic2tpcF9wcm9sb2d1ZSIgZ2Ri YXJjaCBtZXRob2QuCisKKyAgIEZpbmQgdGhlIGVuZCBvZiBmdW5jdGlvbiBw cm9sb2d1ZS4gICovCisKK3N0YXRpYyBDT1JFX0FERFIKK25kczMyX3NraXBf cHJvbG9ndWUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIg cGMpCit7CisgIENPUkVfQUREUiBmdW5jX2FkZHIsIGxpbWl0X3BjOworCisg IC8qIFNlZSBpZiB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBlbmQgb2YgdGhlIHBy b2xvZ3VlIHZpYSB0aGUgc3ltYm9sIHRhYmxlLgorICAgICBJZiBzbywgdGhl biByZXR1cm4gZWl0aGVyIFBDLCBvciB0aGUgUEMgYWZ0ZXIgdGhlIHByb2xv Z3VlLCB3aGljaGV2ZXIKKyAgICAgaXMgZ3JlYXRlci4gICovCisgIGlmIChm aW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCBOVUxMLCAmZnVuY19hZGRy LCBOVUxMKSkKKyAgICB7CisgICAgICBDT1JFX0FERFIgcG9zdF9wcm9sb2d1 ZV9wYworCT0gc2tpcF9wcm9sb2d1ZV91c2luZ19zYWwgKGdkYmFyY2gsIGZ1 bmNfYWRkcik7CisgICAgICBpZiAocG9zdF9wcm9sb2d1ZV9wYyAhPSAwKQor CXJldHVybiBtYXggKHBjLCBwb3N0X3Byb2xvZ3VlX3BjKTsKKyAgICB9CisK KyAgLyogQ2FuJ3QgZGV0ZXJtaW5lIHByb2xvZ3VlIGZyb20gdGhlIHN5bWJv bCB0YWJsZSwgbmVlZCB0byBleGFtaW5lCisgICAgIGluc3RydWN0aW9ucy4g ICovCisKKyAgLyogRmluZCBhbiB1cHBlciBsaW1pdCBvbiB0aGUgZnVuY3Rp b24gcHJvbG9ndWUgdXNpbmcgdGhlIGRlYnVnCisgICAgIGluZm9ybWF0aW9u LiAgSWYgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGNvdWxkIG5vdCBiZSB1c2Vk IHRvIHByb3ZpZGUKKyAgICAgdGhhdCBib3VuZCwgdGhlbiB1c2UgYW4gYXJi aXRyYXJ5IGxhcmdlIG51bWJlciBhcyB0aGUgdXBwZXIgYm91bmQuICAqLwor ICBsaW1pdF9wYyA9IHNraXBfcHJvbG9ndWVfdXNpbmdfc2FsIChnZGJhcmNo LCBwYyk7CisgIGlmIChsaW1pdF9wYyA9PSAwKQorICAgIGxpbWl0X3BjID0g cGMgKyAxMjg7CS8qIE1hZ2ljLiAgKi8KKworICAvKiBGaW5kIHRoZSBlbmQg b2YgcHJvbG9ndWUuICAqLworICByZXR1cm4gbmRzMzJfYW5hbHl6ZV9wcm9s b2d1ZSAoZ2RiYXJjaCwgcGMsIGxpbWl0X3BjLCBOVUxMKTsKK30KKworLyog QWxsb2NhdGUgYW5kIGZpbGwgaW4gKlRISVNfQ0FDSEUgd2l0aCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgcHJvbG9ndWUgb2YKKyAgICpUSElTX0ZSQU1FLiAg RG8gbm90IGRvIHRoaXMgaWYgKlRISVNfQ0FDSEUgd2FzIGFscmVhZHkgYWxs b2NhdGVkLiAgUmV0dXJuCisgICBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQg bmRzMzJfZnJhbWVfY2FjaGUgaW4gKlRISVNfQ0FDSEUuICAqLworCitzdGF0 aWMgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICoKK25kczMyX2ZyYW1lX2Nh Y2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRo aXNfY2FjaGUpCit7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0 X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworICBzdHJ1Y3QgbmRzMzJfZnJh bWVfY2FjaGUgKmNhY2hlOworICBDT1JFX0FERFIgY3VycmVudF9wYzsKKyAg VUxPTkdFU1QgcHJldl9zcDsKKyAgVUxPTkdFU1QgdGhpc19iYXNlOworICBp bnQgaTsKKworICBpZiAoKnRoaXNfY2FjaGUpCisgICAgcmV0dXJuIChzdHJ1 Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKikgKnRoaXNfY2FjaGU7CisKKyAgY2Fj aGUgPSBuZHMzMl9hbGxvY19mcmFtZV9jYWNoZSAoKTsKKyAgKnRoaXNfY2Fj aGUgPSBjYWNoZTsKKworICBjYWNoZS0+cGMgPSBnZXRfZnJhbWVfZnVuYyAo dGhpc19mcmFtZSk7CisgIGN1cnJlbnRfcGMgPSBnZXRfZnJhbWVfcGMgKHRo aXNfZnJhbWUpOworICBuZHMzMl9hbmFseXplX3Byb2xvZ3VlIChnZGJhcmNo LCBjYWNoZS0+cGMsIGN1cnJlbnRfcGMsIGNhY2hlKTsKKworICAvKiBDb21w dXRlIHRoZSBwcmV2aW91cyBmcmFtZSdzIHN0YWNrIHBvaW50ZXIgKHdoaWNo IGlzIGFsc28gdGhlCisgICAgIGZyYW1lJ3MgSUQncyBzdGFjayBhZGRyZXNz KSwgYW5kIHRoaXMgZnJhbWUncyBiYXNlIHBvaW50ZXIuICAqLworICBpZiAo Y2FjaGUtPmZwX29mZnNldCAhPSBJTlZBTElEX09GRlNFVCkKKyAgICB7Cisg ICAgICAvKiBGUCBpcyBzZXQgaW4gcHJvbG9ndWUsIHNvIGl0IGNhbiBiZSB1 c2VkIHRvIGNhbGN1bGF0ZSBvdGhlciBpbmZvLiAgKi8KKyAgICAgIHRoaXNf YmFzZSA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFt ZSwgTkRTMzJfRlBfUkVHTlVNKTsKKyAgICAgIHByZXZfc3AgPSB0aGlzX2Jh c2UgKyBjYWNoZS0+ZnBfb2Zmc2V0OworICAgIH0KKyAgZWxzZQorICAgIHsK KyAgICAgIHRoaXNfYmFzZSA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25l ZCAodGhpc19mcmFtZSwgTkRTMzJfU1BfUkVHTlVNKTsKKyAgICAgIHByZXZf c3AgPSB0aGlzX2Jhc2UgKyBjYWNoZS0+c3Bfb2Zmc2V0OworICAgIH0KKwor ICBjYWNoZS0+cHJldl9zcCA9IHByZXZfc3A7CisgIGNhY2hlLT5iYXNlID0g dGhpc19iYXNlOworCisgIC8qIEFkanVzdCBhbGwgdGhlIHNhdmVkIHJlZ2lz dGVycyBzdWNoIHRoYXQgdGhleSBjb250YWluIGFkZHJlc3NlcworICAgICBp bnN0ZWFkIG9mIG9mZnNldHMuICAqLworICBmb3IgKGkgPSAwOyBpIDwgTkRT MzJfTlVNX1NBVkVEX1JFR1M7IGkrKykKKyAgICBpZiAoY2FjaGUtPnNhdmVk X3JlZ3NbaV0gIT0gUkVHX1VOQVZBSUwpCisgICAgICBjYWNoZS0+c2F2ZWRf cmVnc1tpXSA9IGNhY2hlLT5wcmV2X3NwIC0gY2FjaGUtPnNhdmVkX3JlZ3Nb aV07CisKKyAgcmV0dXJuIGNhY2hlOworfQorCisvKiBJbXBsZW1lbnQgdGhl ICJ0aGlzX2lkIiBmcmFtZV91bndpbmQgbWV0aG9kLgorCisgICBPdXIgZnJh bWUgSUQgZm9yIGEgbm9ybWFsIGZyYW1lIGlzIHRoZSBjdXJyZW50IGZ1bmN0 aW9uJ3Mgc3RhcnRpbmcKKyAgIFBDIGFuZCB0aGUgY2FsbGVyJ3MgU1Agd2hl biB3ZSB3ZXJlIGNhbGxlZC4gICovCisKK3N0YXRpYyB2b2lkCituZHMzMl9m cmFtZV90aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwK KwkJICAgICB2b2lkICoqdGhpc19jYWNoZSwgc3RydWN0IGZyYW1lX2lkICp0 aGlzX2lkKQoreworICBzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKmNhY2hl ID0gbmRzMzJfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUp OworCisgIC8qIFRoaXMgbWFya3MgdGhlIG91dGVybW9zdCBmcmFtZS4gICov CisgIGlmIChjYWNoZS0+cHJldl9zcCA9PSAwKQorICAgIHJldHVybjsKKwor ICAqdGhpc19pZCA9IGZyYW1lX2lkX2J1aWxkIChjYWNoZS0+cHJldl9zcCwg Y2FjaGUtPnBjKTsKK30KKworLyogSW1wbGVtZW50IHRoZSAicHJldl9yZWdp c3RlciIgZnJhbWVfdW53aW5kIG1ldGhvZC4gICovCisKK3N0YXRpYyBzdHJ1 Y3QgdmFsdWUgKgorbmRzMzJfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0 IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlLAor CQkJICAgaW50IHJlZ251bSkKK3sKKyAgc3RydWN0IG5kczMyX2ZyYW1lX2Nh Y2hlICpjYWNoZSA9IG5kczMyX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0 aGlzX2NhY2hlKTsKKworICBpZiAocmVnbnVtID09IE5EUzMyX1NQX1JFR05V TSkKKyAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9jb25zdGFudCAodGhp c19mcmFtZSwgcmVnbnVtLCBjYWNoZS0+cHJldl9zcCk7CisKKyAgLyogVGhl IFBDIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBpcyBzdG9yZWQgaW4gdGhlIExQ IHJlZ2lzdGVyIG9mCisgICAgIHRoZSBjdXJyZW50IGZyYW1lLiAgKi8KKyAg aWYgKHJlZ251bSA9PSBORFMzMl9QQ19SRUdOVU0pCisgICAgcmVnbnVtID0g TkRTMzJfTFBfUkVHTlVNOworCisgIGlmIChyZWdudW0gPCBORFMzMl9OVU1f U0FWRURfUkVHUyAmJiBjYWNoZS0+c2F2ZWRfcmVnc1tyZWdudW1dICE9IFJF R19VTkFWQUlMKQorICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X21lbW9y eSAodGhpc19mcmFtZSwgcmVnbnVtLAorCQkJCSAgICBjYWNoZS0+c2F2ZWRf cmVnc1tyZWdudW1dKTsKKworICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9y ZWdpc3RlciAodGhpc19mcmFtZSwgcmVnbnVtLCByZWdudW0pOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCBuZHMzMl9mcmFtZV91 bndpbmQgPQoreworICBOT1JNQUxfRlJBTUUsCisgIGRlZmF1bHRfZnJhbWVf dW53aW5kX3N0b3BfcmVhc29uLAorICBuZHMzMl9mcmFtZV90aGlzX2lkLAor ICBuZHMzMl9mcmFtZV9wcmV2X3JlZ2lzdGVyLAorICBOVUxMLAorICBkZWZh dWx0X2ZyYW1lX3NuaWZmZXIsCit9OworCisvKiBSZXR1cm4gdGhlIGZyYW1l IGJhc2UgYWRkcmVzcyBvZiAqVEhJU19GUkFNRS4gICovCisKK3N0YXRpYyBD T1JFX0FERFIKK25kczMyX2ZyYW1lX2Jhc2VfYWRkcmVzcyAoc3RydWN0IGZy YW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorewor ICBzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKmNhY2hlID0gbmRzMzJfZnJh bWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOworCisgIHJldHVy biBjYWNoZS0+YmFzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFt ZV9iYXNlIG5kczMyX2ZyYW1lX2Jhc2UgPQoreworICAmbmRzMzJfZnJhbWVf dW53aW5kLAorICBuZHMzMl9mcmFtZV9iYXNlX2FkZHJlc3MsCisgIG5kczMy X2ZyYW1lX2Jhc2VfYWRkcmVzcywKKyAgbmRzMzJfZnJhbWVfYmFzZV9hZGRy ZXNzCit9OworDAorLyogSGVscGVyIGZ1bmN0aW9uIGZvciBpbnN0cnVjdGlv bnMgdXNlZCB0byBwb3AgbXVsdGlwbGUgd29yZHMuICAqLworCitzdGF0aWMg dm9pZAorbmRzMzJfcG9wX211bHRpcGxlX3dvcmRzIChzdHJ1Y3QgbmRzMzJf ZnJhbWVfY2FjaGUgKmNhY2hlLCBpbnQgcmIsIGludCByZSwKKwkJCSAgaW50 IGVuYWJsZTQpCit7CisgIENPUkVfQUREUiBzcF9vZmZzZXQgPSBjYWNoZS0+ c3Bfb2Zmc2V0OworICBpbnQgaTsKKworICAvKiBTa2lwIGNhc2Ugd2hlcmUg cmUgPT0gcmIgPT0gc3AuICAqLworICBpZiAoKHJiIDwgUkVHX0ZQKSAmJiAo cmUgPCBSRUdfRlApKQorICAgIHsKKyAgICAgIGZvciAoaSA9IHJiOyBpIDw9 IHJlOyBpKyspCisJeworCSAgY2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBzcF9v ZmZzZXQ7CisJICBzcF9vZmZzZXQgKz0gNDsKKwl9CisgICAgfQorCisgIC8q IENoZWNrIEZQLCBHUCwgTFAgaW4gZW5hYmxlNC4gICovCisgIGZvciAoaSA9 IDM7IGkgPj0gMTsgaS0tKQorICAgIHsKKyAgICAgIGlmICgoZW5hYmxlNCA+ PiBpKSAmIDB4MSkKKwl7CisJICBjYWNoZS0+c2F2ZWRfcmVnc1tORFMzMl9T UF9SRUdOVU0gLSBpXSA9IHNwX29mZnNldDsKKwkgIHNwX29mZnNldCArPSA0 OworCX0KKyAgICB9CisKKyAgLyogRm9yIHNwLCB1cGRhdGUgdGhlIG9mZnNl dC4gICovCisgIGNhY2hlLT5zcF9vZmZzZXQgPSBzcF9vZmZzZXQ7Cit9CisK Ky8qIFRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgaW4gTkRTMzIgZXBpbG9n dWUgYXJlCisKKyAgIElOU05fUkVTRVRfU1AgIChvcHRpb25hbCkKKwkJICAo SWYgZXhpc3RzLCB0aGlzIG11c3QgYmUgdGhlIGZpcnN0IGluc3RydWN0aW9u IGluIGVwaWxvZ3VlCisJCSAgIGFuZCB0aGUgc3RhY2sgaGFzIG5vdCBiZWVu IGRlc3Ryb3llZC4pLgorICAgSU5TTl9SRUNPVkVSICAob3B0aW9uYWwpLgor ICAgSU5TTl9SRVRVUk4vSU5TTl9SRUNPVkVSX1JFVFVSTiAgKHJlcXVpcmVk KS4gICovCisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgYW5hbHl6aW5nIHRo ZSBnaXZlbiAzMi1iaXQgSU5TTi4gIElmIENBQ0hFIGlzIG5vbi1OVUxMLAor ICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY29yZGVk LiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK25kczMyX2FuYWx5emVfZXBp bG9ndWVfaW5zbjMyIChpbnQgYWJpX3VzZV9mcHIsIHVpbnQzMl90IGluc24s CisJCQkgICAgICAgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZSkK K3sKKyAgaWYgKENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAo QURESSwgUkVHX1NQLCBSRUdfU1AsIDApCisgICAgICAmJiBOMzJfSU1NMTVT IChpbnNuKSA+IDApCisgICAgLyogYWRkaSAkc3AsICRzcCwgaW1tMTVzICov CisgICAgcmV0dXJuIElOU05fUkVTRVRfU1A7CisgIGVsc2UgaWYgKENIT1Bf QklUUyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAoQURESSwgUkVHX1NQLCBS RUdfRlAsIDApCisJICAgJiYgTjMyX0lNTTE1UyAoaW5zbikgPCAwKQorICAg IC8qIGFkZGkgJHNwLCAkZnAsIGltbTE1cyAqLworICAgIHJldHVybiBJTlNO X1JFU0VUX1NQOworICBlbHNlIGlmICgoaW5zbiAmIH4oX19NQVNLICgxOSkg PDwgNikpID09IE4zMl9MTVdfQklNCisJICAgJiYgTjMyX1JBNSAoaW5zbikg PT0gUkVHX1NQKQorICAgIHsKKyAgICAgIC8qIGxtdy5iaW0gUmIsIFskc3Bd LCBSZSwgZW5hYmxlNCAqLworICAgICAgaWYgKGNhY2hlICE9IE5VTEwpCisJ bmRzMzJfcG9wX211bHRpcGxlX3dvcmRzIChjYWNoZSwgTjMyX1JUNSAoaW5z biksCisJCQkJICBOMzJfUkI1IChpbnNuKSwgTjMyX0xTTVdfRU5BQkxFNCAo aW5zbikpOworCisgICAgICByZXR1cm4gSU5TTl9SRUNPVkVSOworICAgIH0K KyAgZWxzZSBpZiAoaW5zbiA9PSBOMzJfSlJFRyAoSlIsIDAsIFJFR19MUCwg MCwgMSkpCisgICAgLyogcmV0ICRscCAqLworICAgIHJldHVybiBJTlNOX1JF VFVSTjsKKyAgZWxzZSBpZiAoaW5zbiA9PSBOMzJfQUxVMSAoQURELCBSRUdf U1AsIFJFR19TUCwgUkVHX1RBKQorCSAgIHx8IGluc24gPT0gTjMyX0FMVTEg KEFERCwgUkVHX1NQLCBSRUdfVEEsIFJFR19TUCkpCisgICAgLyogYWRkICRz cCwgJHNwLCAkdGEgKi8KKyAgICAvKiBhZGQgJHNwLCAkdGEsICRzcCAqLwor ICAgIHJldHVybiBJTlNOX1JFU0VUX1NQOworICBlbHNlIGlmIChhYmlfdXNl X2ZwcgorCSAgICYmIChpbnNuICYgfihfX01BU0sgKDUpIDw8IDIwIHwgX19N QVNLICgxMykpKSA9PSBOMzJfRkxESV9TUCkKKyAgICB7CisgICAgICBpZiAo X19HRiAoaW5zbiwgMTIsIDEpID09IDApCisJLyogZmxkaSBGRHQsIFskc3Ag KyAoaW1tMTJzIDw8IDIpXSAqLworCXJldHVybiBJTlNOX1JFQ09WRVI7Cisg ICAgICBlbHNlCisJeworCSAgLyogZmxkaS5iaSBGRHQsIFskc3BdLCAoaW1t MTJzIDw8IDIpICovCisJICBpbnQgb2Zmc2V0ID0gTjMyX0lNTTEyUyAoaW5z bikgPDwgMjsKKworCSAgaWYgKG9mZnNldCA9PSA4IHx8IG9mZnNldCA9PSAx MikKKwkgICAgeworCSAgICAgIGlmIChjYWNoZSAhPSBOVUxMKQorCQljYWNo ZS0+c3Bfb2Zmc2V0ICs9IG9mZnNldDsKKworCSAgICAgIHJldHVybiBJTlNO X1JFQ09WRVI7CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiBJTlNO X05PUk1BTDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBhbmFseXpp bmcgdGhlIGdpdmVuIDE2LWJpdCBJTlNOLiAgSWYgQ0FDSEUgaXMgbm9uLU5V TEwsCisgICB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHdpbGwgYmUgcmVj b3JkZWQuICAqLworCitzdGF0aWMgaW5saW5lIGludAorbmRzMzJfYW5hbHl6 ZV9lcGlsb2d1ZV9pbnNuMTYgKHVpbnQzMl90IGluc24sIHN0cnVjdCBuZHMz Ml9mcmFtZV9jYWNoZSAqY2FjaGUpCit7CisgIGlmIChpbnNuID09IE4xNl9U WVBFNSAoUkVUNSwgUkVHX0xQKSkKKyAgICAvKiByZXQ1ICRscCAqLworICAg IHJldHVybiBJTlNOX1JFVFVSTjsKKyAgZWxzZSBpZiAoQ0hPUF9CSVRTIChp bnNuLCAxMCkgPT0gTjE2X1RZUEUxMCAoQURESTEwUywgMCkpCisgICAgewor ICAgICAgLyogYWRkaTEwcy5zcCAqLworICAgICAgaW50IGltbTEwcyA9IE4x Nl9JTU0xMFMgKGluc24pOworCisgICAgICBpZiAoaW1tMTBzID4gMCkKKwl7 CisJICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkgICAgY2FjaGUtPnNwX29mZnNl dCArPSBpbW0xMHM7CisKKwkgIHJldHVybiBJTlNOX1JFQ09WRVI7CisJfQor ICAgIH0KKyAgZWxzZSBpZiAoX19HRiAoaW5zbiwgNywgOCkgPT0gTjE2X1Qy NV9QT1AyNSkKKyAgICB7CisgICAgICAvKiBwb3AyNSAqLworICAgICAgaWYg KGNhY2hlICE9IE5VTEwpCisJeworCSAgaW50IGltbTh1ID0gKGluc24gJiAw eDFmKSA8PCAzOworCSAgaW50IHJlID0gKGluc24gPj4gNSkgJiAweDM7CisJ ICBjb25zdCBpbnQgcmVnX21hcFtdID0geyA2LCA4LCAxMCwgMTQgfTsKKwor CSAgLyogT3BlcmF0aW9uIDEgLS0gc3AgPSBzcCArIChpbW01dSA8PCAzKSAq LworCSAgY2FjaGUtPnNwX29mZnNldCArPSBpbW04dTsKKworCSAgLyogT3Bl cmF0aW9uIDIgLS0gbG13LmJpbSBSNiwgWyRzcF0sIFJlLCAjMHhlICovCisJ ICBuZHMzMl9wb3BfbXVsdGlwbGVfd29yZHMgKGNhY2hlLCA2LCByZWdfbWFw W3JlXSwgMHhlKTsKKwl9CisKKyAgICAgIC8qIE9wZXJhdGlvbiAzIC0tIHJl dCAkbHAgKi8KKyAgICAgIHJldHVybiBJTlNOX1JFQ09WRVJfUkVUVVJOOwor ICAgIH0KKworICByZXR1cm4gSU5TTl9OT1JNQUw7Cit9CisKKy8qIEFuYWx5 emUgYSByZWFzb25hYmxlIGFtb3VudCBvZiBpbnN0cnVjdGlvbnMgZnJvbSB0 aGUgZ2l2ZW4gUEMgdG8gZmluZAorICAgdGhlIGluc3RydWN0aW9uIHVzZWQg dG8gcmV0dXJuIHRvIHRoZSBjYWxsZXIuICBSZXR1cm4gMSBpZiB0aGUgJ3Jl dHVybicKKyAgIGluc3RydWN0aW9uIGNvdWxkIGJlIGZvdW5kLCAwIG90aGVy d2lzZS4KKworICAgSWYgQ0FDSEUgaXMgbm9uLU5VTEwsIGZpbGwgaXQgaW4u ICAqLworCitzdGF0aWMgaW50CituZHMzMl9hbmFseXplX2VwaWxvZ3VlIChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHBjLAorCQkJc3Ry dWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZSkKK3sKKyAgc3RydWN0IGdk YmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7Cisg IGludCBhYmlfdXNlX2ZwciA9IG5kczMyX2FiaV91c2VfZnByICh0ZGVwLT5l bGZfYWJpKTsKKyAgQ09SRV9BRERSIGxpbWl0X3BjOworICB1aW50MzJfdCBp bnNuLCBpbnNuX2xlbjsKKyAgaW50IGluc25fdHlwZSA9IElOU05fTk9STUFM OworCisgIGlmIChhYmlfdXNlX2ZwcikKKyAgICBsaW1pdF9wYyA9IHBjICsg NDg7CisgIGVsc2UKKyAgICBsaW1pdF9wYyA9IHBjICsgMTY7CisKKyAgZm9y ICg7IHBjIDwgbGltaXRfcGM7IHBjICs9IGluc25fbGVuKQorICAgIHsKKyAg ICAgIGluc24gPSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChwYywg NCwgQkZEX0VORElBTl9CSUcpOworCisgICAgICBpZiAoKGluc24gJiAweDgw MDAwMDAwKSA9PSAwKQorCXsKKwkgIC8qIDMyLWJpdCBpbnN0cnVjdGlvbiAq LworCSAgaW5zbl9sZW4gPSA0OworCisJICBpbnNuX3R5cGUgPSBuZHMzMl9h bmFseXplX2VwaWxvZ3VlX2luc24zMiAoYWJpX3VzZV9mcHIsIGluc24sIGNh Y2hlKTsKKwkgIGlmIChpbnNuX3R5cGUgPT0gSU5TTl9SRVRVUk4pCisJICAg IHJldHVybiAxOworCSAgZWxzZSBpZiAoaW5zbl90eXBlID09IElOU05fUkVD T1ZFUikKKwkgICAgY29udGludWU7CisJfQorICAgICAgZWxzZQorCXsKKwkg IC8qIDE2LWJpdCBpbnN0cnVjdGlvbiAqLworCSAgaW5zbl9sZW4gPSAyOwor CisJICBpbnNuID4+PSAxNjsKKwkgIGluc25fdHlwZSA9IG5kczMyX2FuYWx5 emVfZXBpbG9ndWVfaW5zbjE2IChpbnNuLCBjYWNoZSk7CisJICBpZiAoaW5z bl90eXBlID09IElOU05fUkVUVVJOIHx8IGluc25fdHlwZSA9PSBJTlNOX1JF Q09WRVJfUkVUVVJOKQorCSAgICByZXR1cm4gMTsKKwkgIGVsc2UgaWYgKGlu c25fdHlwZSA9PSBJTlNOX1JFQ09WRVIpCisJICAgIGNvbnRpbnVlOworCX0K KworICAgICAgLyogU3RvcCB0aGUgc2NhbiBpZiB0aGlzIGlzIGFuIHVuZXhw ZWN0ZWQgaW5zdHJ1Y3Rpb24uICAqLworICAgICAgYnJlYWs7CisgICAgfQor CisgIHJldHVybiAwOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJzdGFja19m cmFtZV9kZXN0cm95ZWRfcCIgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0 aWMgaW50CituZHMzMl9zdGFja19mcmFtZV9kZXN0cm95ZWRfcCAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBhZGRyKQoreworICBzdHJ1 Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNo KTsKKyAgaW50IGFiaV91c2VfZnByID0gbmRzMzJfYWJpX3VzZV9mcHIgKHRk ZXAtPmVsZl9hYmkpOworICBpbnQgaW5zbl90eXBlID0gSU5TTl9OT1JNQUw7 CisgIGludCByZXRfZm91bmQgPSAwOworICB1aW50MzJfdCBpbnNuOworCisg IGluc24gPSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChhZGRyLCA0 LCBCRkRfRU5ESUFOX0JJRyk7CisKKyAgaWYgKChpbnNuICYgMHg4MDAwMDAw MCkgPT0gMCkKKyAgICB7CisgICAgICAvKiAzMi1iaXQgaW5zdHJ1Y3Rpb24g Ki8KKworICAgICAgaW5zbl90eXBlID0gbmRzMzJfYW5hbHl6ZV9lcGlsb2d1 ZV9pbnNuMzIgKGFiaV91c2VfZnByLCBpbnNuLCBOVUxMKTsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICAvKiAxNi1iaXQgaW5zdHJ1Y3Rpb24gKi8K KworICAgICAgaW5zbiA+Pj0gMTY7CisgICAgICBpbnNuX3R5cGUgPSBuZHMz Ml9hbmFseXplX2VwaWxvZ3VlX2luc24xNiAoaW5zbiwgTlVMTCk7CisgICAg fQorCisgIGlmIChpbnNuX3R5cGUgPT0gSU5TTl9OT1JNQUwgfHwgaW5zbl90 eXBlID09IElOU05fUkVTRVRfU1ApCisgICAgcmV0dXJuIDA7CisKKyAgLyog U2VhcmNoIHRoZSByZXF1aXJlZCAncmV0dXJuJyBpbnN0cnVjdGlvbiB3aXRo aW4gdGhlIGZvbGxvd2luZyByZWFzb25hYmxlCisgICAgIGluc3RydWN0aW9u cy4gICovCisgIHJldF9mb3VuZCA9IG5kczMyX2FuYWx5emVfZXBpbG9ndWUg KGdkYmFyY2gsIGFkZHIsIE5VTEwpOworICBpZiAocmV0X2ZvdW5kID09IDAp CisgICAgcmV0dXJuIDA7CisKKyAgLyogU2NhbiBiYWNrd2FyZHMgdG8gbWFr ZSBzdXJlIHRoYXQgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaGFzIGFkanVzdGVk CisgICAgIHN0YWNrLiAgQm90aCBhIDE2LWJpdCBhbmQgYSAzMi1iaXQgaW5z dHJ1Y3Rpb24gd2lsbCBiZSB0cmllZC4gIFRoaXMgaXMKKyAgICAganVzdCBh IGhldXJpc3RpYywgc28gdGhlIGZhbHNlIHBvc2l0aXZlcyB3aWxsIGJlIGFj Y2VwdGFibGUuICAqLworICBpbnNuID0gcmVhZF9tZW1vcnlfdW5zaWduZWRf aW50ZWdlciAoYWRkciAtIDIsIDQsIEJGRF9FTkRJQU5fQklHKTsKKworICAv KiBPbmx5IDE2LWJpdCBpbnN0cnVjdGlvbnMgYXJlIHBvc3NpYmxlIGF0IGFk ZHIgLSAyLiAgKi8KKyAgaWYgKChpbnNuICYgMHg4MDAwMDAwMCkgIT0gMCkK KyAgICB7CisgICAgICAvKiBUaGlzIG1heSBiZSBhIDE2LWJpdCBpbnN0cnVj dGlvbiBvciBwYXJ0IG9mIGEgMzItYml0IGluc3RydWN0aW9uLiAgKi8KKwor ICAgICAgaW5zbl90eXBlID0gbmRzMzJfYW5hbHl6ZV9lcGlsb2d1ZV9pbnNu MTYgKGluc24gPj4gMTYsIE5VTEwpOworICAgICAgaWYgKGluc25fdHlwZSA9 PSBJTlNOX1JFQ09WRVIpCisJcmV0dXJuIDE7CisgICAgfQorCisgIGluc24g PSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChhZGRyIC0gNCwgNCwg QkZEX0VORElBTl9CSUcpOworCisgIC8qIElmIHRoaXMgaXMgYSAxNi1iaXQg aW5zdHJ1Y3Rpb24gYXQgYWRkciAtIDQsIHRoZW4gdGhlcmUgbXVzdCBiZSBh bm90aGVyCisgICAgIDE2LWJpdCBpbnN0cnVjdGlvbiBhdCBhZGRyIC0gMiwg c28gb25seSAzMi1iaXQgaW5zdHJ1Y3Rpb25zIG5lZWQgdG8KKyAgICAgYmUg YW5hbHl6ZWQgaGVyZS4gICovCisgIGlmICgoaW5zbiAmIDB4ODAwMDAwMDAp ID09IDApCisgICAgeworICAgICAgLyogVGhpcyBtYXkgYmUgYSAzMi1iaXQg aW5zdHJ1Y3Rpb24gb3IgcGFydCBvZiBhIDMyLWJpdCBpbnN0cnVjdGlvbi4g ICovCisKKyAgICAgIGluc25fdHlwZSA9IG5kczMyX2FuYWx5emVfZXBpbG9n dWVfaW5zbjMyIChhYmlfdXNlX2ZwciwgaW5zbiwgTlVMTCk7CisgICAgICBp ZiAoaW5zbl90eXBlID09IElOU05fUkVDT1ZFUiB8fCBpbnNuX3R5cGUgPT0g SU5TTl9SRVNFVF9TUCkKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgcmV0dXJu IDA7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInNuaWZmZXIiIGZyYW1lX3Vu d2luZCBtZXRob2QuICAqLworCitzdGF0aWMgaW50CituZHMzMl9lcGlsb2d1 ZV9mcmFtZV9zbmlmZmVyIChjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICpz ZWxmLAorCQkJICAgICAgc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUs IHZvaWQgKip0aGlzX2NhY2hlKQoreworICBpZiAoZnJhbWVfcmVsYXRpdmVf bGV2ZWwgKHRoaXNfZnJhbWUpID09IDApCisgICAgcmV0dXJuIG5kczMyX3N0 YWNrX2ZyYW1lX2Rlc3Ryb3llZF9wIChnZXRfZnJhbWVfYXJjaCAodGhpc19m cmFtZSksCisJCQkJCSAgZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKSk7Cisg IGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworLyogQWxsb2NhdGUgYW5kIGZp bGwgaW4gKlRISVNfQ0FDSEUgd2l0aCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8g dW53aW5kCisgICAqVEhJU19GUkFNRSB3aXRoaW4gZXBpbG9ndWUuICBEbyBu b3QgZG8gdGhpcyBpZiAqVEhJU19DQUNIRSB3YXMgYWxyZWFkeQorICAgYWxs b2NhdGVkLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBuZHMz Ml9mcmFtZV9jYWNoZSBpbgorICAgKlRISVNfQ0FDSEUuICAqLworCitzdGF0 aWMgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICoKK25kczMyX2VwaWxvZ3Vl X2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwg dm9pZCAqKnRoaXNfY2FjaGUpCit7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworICBzdHJ1Y3Qg bmRzMzJfZnJhbWVfY2FjaGUgKmNhY2hlOworICBDT1JFX0FERFIgY3VycmVu dF9wYywgY3VycmVudF9zcDsKKyAgaW50IGk7CisKKyAgaWYgKCp0aGlzX2Nh Y2hlKQorICAgIHJldHVybiAoc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICop ICp0aGlzX2NhY2hlOworCisgIGNhY2hlID0gbmRzMzJfYWxsb2NfZnJhbWVf Y2FjaGUgKCk7CisgICp0aGlzX2NhY2hlID0gY2FjaGU7CisKKyAgY2FjaGUt PnBjID0gZ2V0X2ZyYW1lX2Z1bmMgKHRoaXNfZnJhbWUpOworICBjdXJyZW50 X3BjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKKyAgbmRzMzJfYW5h bHl6ZV9lcGlsb2d1ZSAoZ2RiYXJjaCwgY3VycmVudF9wYywgY2FjaGUpOwor CisgIGN1cnJlbnRfc3AgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQg KHRoaXNfZnJhbWUsIE5EUzMyX1NQX1JFR05VTSk7CisgIGNhY2hlLT5wcmV2 X3NwID0gY3VycmVudF9zcCArIGNhY2hlLT5zcF9vZmZzZXQ7CisKKyAgLyog QWRqdXN0IGFsbCB0aGUgc2F2ZWQgcmVnaXN0ZXJzIHN1Y2ggdGhhdCB0aGV5 IGNvbnRhaW4gYWRkcmVzc2VzCisgICAgIGluc3RlYWQgb2Ygb2Zmc2V0cy4g ICovCisgIGZvciAoaSA9IDA7IGkgPCBORFMzMl9OVU1fU0FWRURfUkVHUzsg aSsrKQorICAgIGlmIChjYWNoZS0+c2F2ZWRfcmVnc1tpXSAhPSBSRUdfVU5B VkFJTCkKKyAgICAgIGNhY2hlLT5zYXZlZF9yZWdzW2ldID0gY3VycmVudF9z cCArIGNhY2hlLT5zYXZlZF9yZWdzW2ldOworCisgIHJldHVybiBjYWNoZTsK K30KKworLyogSW1wbGVtZW50IHRoZSAidGhpc19pZCIgZnJhbWVfdW53aW5k IG1ldGhvZC4gICovCisKK3N0YXRpYyB2b2lkCituZHMzMl9lcGlsb2d1ZV9m cmFtZV90aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwK KwkJCSAgICAgIHZvaWQgKip0aGlzX2NhY2hlLCBzdHJ1Y3QgZnJhbWVfaWQg KnRoaXNfaWQpCit7CisgIHN0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqY2Fj aGUKKyAgICA9IG5kczMyX2VwaWxvZ3VlX2ZyYW1lX2NhY2hlICh0aGlzX2Zy YW1lLCB0aGlzX2NhY2hlKTsKKworICAvKiBUaGlzIG1hcmtzIHRoZSBvdXRl cm1vc3QgZnJhbWUuICAqLworICBpZiAoY2FjaGUtPnByZXZfc3AgPT0gMCkK KyAgICByZXR1cm47CisKKyAgKnRoaXNfaWQgPSBmcmFtZV9pZF9idWlsZCAo Y2FjaGUtPnByZXZfc3AsIGNhY2hlLT5wYyk7Cit9CisKKy8qIEltcGxlbWVu dCB0aGUgInByZXZfcmVnaXN0ZXIiIGZyYW1lX3Vud2luZCBtZXRob2QuICAq LworCitzdGF0aWMgc3RydWN0IHZhbHVlICoKK25kczMyX2VwaWxvZ3VlX2Zy YW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2Zy YW1lLAorCQkJCSAgICB2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkK K3sKKyAgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZQorICAgID0g bmRzMzJfZXBpbG9ndWVfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNf Y2FjaGUpOworCisgIGlmIChyZWdudW0gPT0gTkRTMzJfU1BfUkVHTlVNKQor ICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X2NvbnN0YW50ICh0aGlzX2Zy YW1lLCByZWdudW0sIGNhY2hlLT5wcmV2X3NwKTsKKworICAvKiBUaGUgUEMg b2YgdGhlIHByZXZpb3VzIGZyYW1lIGlzIHN0b3JlZCBpbiB0aGUgTFAgcmVn aXN0ZXIgb2YKKyAgICAgdGhlIGN1cnJlbnQgZnJhbWUuICAqLworICBpZiAo cmVnbnVtID09IE5EUzMyX1BDX1JFR05VTSkKKyAgICByZWdudW0gPSBORFMz Ml9MUF9SRUdOVU07CisKKyAgaWYgKHJlZ251bSA8IE5EUzMyX05VTV9TQVZF RF9SRUdTICYmIGNhY2hlLT5zYXZlZF9yZWdzW3JlZ251bV0gIT0gUkVHX1VO QVZBSUwpCisgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfbWVtb3J5ICh0 aGlzX2ZyYW1lLCByZWdudW0sCisJCQkJICAgIGNhY2hlLT5zYXZlZF9yZWdz W3JlZ251bV0pOworCisgIHJldHVybiBmcmFtZV91bndpbmRfZ290X3JlZ2lz dGVyICh0aGlzX2ZyYW1lLCByZWdudW0sIHJlZ251bSk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIG5kczMyX2VwaWxvZ3VlX2Zy YW1lX3Vud2luZCA9Cit7CisgIE5PUk1BTF9GUkFNRSwKKyAgZGVmYXVsdF9m cmFtZV91bndpbmRfc3RvcF9yZWFzb24sCisgIG5kczMyX2VwaWxvZ3VlX2Zy YW1lX3RoaXNfaWQsCisgIG5kczMyX2VwaWxvZ3VlX2ZyYW1lX3ByZXZfcmVn aXN0ZXIsCisgIE5VTEwsCisgIG5kczMyX2VwaWxvZ3VlX2ZyYW1lX3NuaWZm ZXIKK307CisMCisvKiBJbXBsZW1lbnQgdGhlICJkdW1teV9pZCIgZ2RiYXJj aCBtZXRob2QuICAqLworCitzdGF0aWMgc3RydWN0IGZyYW1lX2lkCituZHMz Ml9kdW1teV9pZCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCBm cmFtZV9pbmZvICp0aGlzX2ZyYW1lKQoreworICBDT1JFX0FERFIgc3AgPSBn ZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIE5EUzMy X1NQX1JFR05VTSk7CisKKyAgcmV0dXJuIGZyYW1lX2lkX2J1aWxkIChzcCwg Z2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKSk7Cit9CisKKy8qIEltcGxlbWVu dCB0aGUgInVud2luZF9wYyIgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0 aWMgQ09SRV9BRERSCituZHMzMl91bndpbmRfcGMgKHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoLCBzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKK3sK KyAgcmV0dXJuIGZyYW1lX3Vud2luZF9yZWdpc3Rlcl91bnNpZ25lZCAobmV4 dF9mcmFtZSwgTkRTMzJfUENfUkVHTlVNKTsKK30KKworLyogSW1wbGVtZW50 IHRoZSAidW53aW5kX3NwIiBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRp YyBDT1JFX0FERFIKK25kczMyX3Vud2luZF9zcCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQorewor ICByZXR1cm4gZnJhbWVfdW53aW5kX3JlZ2lzdGVyX3Vuc2lnbmVkIChuZXh0 X2ZyYW1lLCBORFMzMl9TUF9SRUdOVU0pOworfQorDAorLyogRmxvYXRpbmcg dHlwZSBhbmQgc3RydWN0IHR5cGUgdGhhdCBoYXMgb25seSBvbmUgZmxvYXRp bmcgdHlwZSBtZW1iZXIKKyAgIGNhbiBwYXNzIHZhbHVlIHVzaW5nIEZQVSBy ZWdpc3RlcnMgKHdoZW4gRlBVIEFCSSBpcyB1c2VkKS4gICovCisKK3N0YXRp YyBpbnQKK25kczMyX2NoZWNrX2NhbGxpbmdfdXNlX2ZwciAoc3RydWN0IHR5 cGUgKnR5cGUpCit7CisgIHN0cnVjdCB0eXBlICp0OworICBlbnVtIHR5cGVf Y29kZSB0eXBlY29kZTsKKworICB0ID0gdHlwZTsKKyAgd2hpbGUgKDEpCisg ICAgeworICAgICAgdCA9IGNoZWNrX3R5cGVkZWYgKHQpOworICAgICAgdHlw ZWNvZGUgPSBUWVBFX0NPREUgKHQpOworICAgICAgaWYgKHR5cGVjb2RlICE9 IFRZUEVfQ09ERV9TVFJVQ1QpCisJYnJlYWs7CisgICAgICBlbHNlIGlmIChU WVBFX05GSUVMRFMgKHQpICE9IDEpCisJcmV0dXJuIDA7CisgICAgICBlbHNl CisJdCA9IFRZUEVfRklFTERfVFlQRSAodCwgMCk7CisgICAgfQorCisgIHJl dHVybiB0eXBlY29kZSA9PSBUWVBFX0NPREVfRkxUOworfQorCisvKiBSZXR1 cm4gdGhlIGFsaWdubWVudCAoaW4gYnl0ZXMpIG9mIHRoZSBnaXZlbiB0eXBl LiAgKi8KKworc3RhdGljIGludAorbmRzMzJfdHlwZV9hbGlnbiAoc3RydWN0 IHR5cGUgKnR5cGUpCit7CisgIGludCBuOworICBpbnQgYWxpZ247CisgIGlu dCBmYWxpZ247CisKKyAgdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHR5cGUpOwor ICBzd2l0Y2ggKFRZUEVfQ09ERSAodHlwZSkpCisgICAgeworICAgIGRlZmF1 bHQ6CisgICAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAgKi8KKyAgICAg IGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sIF8oInVua25v d24gdHlwZSBhbGlnbm1lbnQiKSk7CisgICAgICByZXR1cm4gNDsKKworICAg IGNhc2UgVFlQRV9DT0RFX1BUUjoKKyAgICBjYXNlIFRZUEVfQ09ERV9FTlVN OgorICAgIGNhc2UgVFlQRV9DT0RFX0lOVDoKKyAgICBjYXNlIFRZUEVfQ09E RV9GTFQ6CisgICAgY2FzZSBUWVBFX0NPREVfU0VUOgorICAgIGNhc2UgVFlQ RV9DT0RFX1JBTkdFOgorICAgIGNhc2UgVFlQRV9DT0RFX1JFRjoKKyAgICBj YXNlIFRZUEVfQ09ERV9DSEFSOgorICAgIGNhc2UgVFlQRV9DT0RFX0JPT0w6 CisgICAgICByZXR1cm4gVFlQRV9MRU5HVEggKHR5cGUpOworCisgICAgY2Fz ZSBUWVBFX0NPREVfQVJSQVk6CisgICAgY2FzZSBUWVBFX0NPREVfQ09NUExF WDoKKyAgICAgIHJldHVybiBuZHMzMl90eXBlX2FsaWduIChUWVBFX1RBUkdF VF9UWVBFICh0eXBlKSk7CisKKyAgICBjYXNlIFRZUEVfQ09ERV9TVFJVQ1Q6 CisgICAgY2FzZSBUWVBFX0NPREVfVU5JT046CisgICAgICBhbGlnbiA9IDE7 CisgICAgICBmb3IgKG4gPSAwOyBuIDwgVFlQRV9ORklFTERTICh0eXBlKTsg bisrKQorCXsKKwkgIGZhbGlnbiA9IG5kczMyX3R5cGVfYWxpZ24gKFRZUEVf RklFTERfVFlQRSAodHlwZSwgbikpOworCSAgaWYgKGZhbGlnbiA+IGFsaWdu KQorCSAgICBhbGlnbiA9IGZhbGlnbjsKKwl9CisgICAgICByZXR1cm4gYWxp Z247CisgICAgfQorfQorCisvKiBJbXBsZW1lbnQgdGhlICJwdXNoX2R1bW15 X2NhbGwiIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIENPUkVfQURE UgorbmRzMzJfcHVzaF9kdW1teV9jYWxsIChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwgc3RydWN0IHZhbHVlICpmdW5jdGlvbiwKKwkJICAgICAgIHN0cnVj dCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBicF9hZGRyLAorCQkg ICAgICAgaW50IG5hcmdzLCBzdHJ1Y3QgdmFsdWUgKiphcmdzLCBDT1JFX0FE RFIgc3AsCisJCSAgICAgICBpbnQgc3RydWN0X3JldHVybiwgQ09SRV9BRERS IHN0cnVjdF9hZGRyKQoreworICBjb25zdCBpbnQgUkVORCA9IDY7CQkvKiBF bmQgZm9yIHJlZ2lzdGVyIG9mZnNldC4gICovCisgIGludCBnb2ZmID0gMDsJ CQkvKiBDdXJyZW50IGdwciBvZmZzZXQgZm9yIGFyZ3VtZW50LiAgKi8KKyAg aW50IGZvZmYgPSAwOwkJCS8qIEN1cnJlbnQgZnByIG9mZnNldCBmb3IgYXJn dW1lbnQuICAqLworICBpbnQgc29mZiA9IDA7CQkJLyogQ3VycmVudCBzdGFj ayBvZmZzZXQgZm9yIGFyZ3VtZW50LiAgKi8KKyAgaW50IGk7CisgIFVMT05H RVNUIHJlZ3ZhbDsKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBn ZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworICBzdHJ1Y3QgZ2RiYXJj aF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKyAgc3Ry dWN0IHR5cGUgKmZ1bmNfdHlwZSA9IHZhbHVlX3R5cGUgKGZ1bmN0aW9uKTsK KyAgaW50IGFiaV91c2VfZnByID0gbmRzMzJfYWJpX3VzZV9mcHIgKHRkZXAt PmVsZl9hYmkpOworICBpbnQgYWJpX3NwbGl0ID0gbmRzMzJfYWJpX3NwbGl0 ICh0ZGVwLT5lbGZfYWJpKTsKKworICAvKiBTZXQgdGhlIHJldHVybiBhZGRy ZXNzLiAgRm9yIHRoZSBORFMzMiwgdGhlIHJldHVybiBicmVha3BvaW50IGlz CisgICAgIGFsd2F5cyBhdCBCUF9BRERSLiAgKi8KKyAgcmVnY2FjaGVfY29v a2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwgTkRTMzJfTFBfUkVHTlVN LCBicF9hZGRyKTsKKworICAvKiBJZiBTVFJVQ1RfUkVUVVJOIGlzIHRydWUs IHRoZW4gdGhlIHN0cnVjdCByZXR1cm4gYWRkcmVzcyAoaW4KKyAgICAgU1RS VUNUX0FERFIpIHdpbGwgY29uc3VtZSB0aGUgZmlyc3QgYXJndW1lbnQtcGFz c2luZyByZWdpc3Rlci4KKyAgICAgQm90aCBhZGp1c3QgdGhlIHJlZ2lzdGVy IGNvdW50IGFuZCBzdG9yZSB0aGF0IHZhbHVlLiAgKi8KKyAgaWYgKHN0cnVj dF9yZXR1cm4pCisgICAgeworICAgICAgcmVnY2FjaGVfY29va2VkX3dyaXRl X3Vuc2lnbmVkIChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCBzdHJ1Y3Rf YWRkcik7CisgICAgICBnb2ZmKys7CisgICAgfQorCisgIC8qIE5vdyBtYWtl IHN1cmUgdGhlcmUncyBzcGFjZSBvbiB0aGUgc3RhY2sgKi8KKyAgZm9yIChp ID0gMDsgaSA8IG5hcmdzOyBpKyspCisgICAgeworICAgICAgc3RydWN0IHR5 cGUgKnR5cGUgPSB2YWx1ZV90eXBlIChhcmdzW2ldKTsKKyAgICAgIGludCBh bGlnbiA9IG5kczMyX3R5cGVfYWxpZ24gKHR5cGUpOworCisgICAgICAvKiBJ ZiBhbGlnbiBpcyB6ZXJvLCBpdCBtYXkgYmUgYW4gZW1wdHkgc3RydWN0Lgor CSBKdXN0IGlnbm9yZSB0aGUgYXJndW1lbnQgb2YgZW1wdHkgc3RydWN0LiAg Ki8KKyAgICAgIGlmIChhbGlnbiA9PSAwKQorCWNvbnRpbnVlOworCisgICAg ICBzcCAtPSBUWVBFX0xFTkdUSCAodHlwZSk7CisgICAgICBzcCA9IGFsaWdu X2Rvd24gKHNwLCBhbGlnbik7CisgICAgfQorCisgIC8qIFN0YWNrIG11c3Qg YmUgOC1ieXRlIGFsaWduZWQuICAqLworICBzcCA9IGFsaWduX2Rvd24gKHNw LCA4KTsKKworICBzb2ZmID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IG5hcmdz OyBpKyspCisgICAgeworICAgICAgY29uc3QgZ2RiX2J5dGUgKnZhbDsKKyAg ICAgIGludCBhbGlnbiwgbGVuOworICAgICAgc3RydWN0IHR5cGUgKnR5cGU7 CisgICAgICBpbnQgY2FsbGluZ191c2VfZnByOworICAgICAgaW50IHVzZV9m cHIgPSAwOworCisgICAgICB0eXBlID0gdmFsdWVfdHlwZSAoYXJnc1tpXSk7 CisgICAgICBjYWxsaW5nX3VzZV9mcHIgPSBuZHMzMl9jaGVja19jYWxsaW5n X3VzZV9mcHIgKHR5cGUpOworICAgICAgbGVuID0gVFlQRV9MRU5HVEggKHR5 cGUpOworICAgICAgYWxpZ24gPSBuZHMzMl90eXBlX2FsaWduICh0eXBlKTsK KyAgICAgIHZhbCA9IHZhbHVlX2NvbnRlbnRzIChhcmdzW2ldKTsKKworICAg ICAgLyogVGhlIHNpemUgb2YgYSBjb21wb3NpdGUgdHlwZSBsYXJnZXIgdGhh biA0IGJ5dGVzIHdpbGwgYmUgcm91bmRlZAorCSB1cCB0byB0aGUgbmVhcmVz dCBtdWx0aXBsZSBvZiA0LiAgKi8KKyAgICAgIGlmIChsZW4gPiA0KQorCWxl biA9IGFsaWduX3VwIChsZW4sIDQpOworCisgICAgICAvKiBWYXJpYWRpYyBm dW5jdGlvbnMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgYmV0d2VlbiBBQUJJ IGFuZCBBQkkyRlArLgorCisJIEZvciBBQUJJLCB0aGUgY2FsbGVyIHB1c2hl cyBhcmd1bWVudHMgaW4gcmVnaXN0ZXJzLCBjYWxsZWUgc3RvcmVzCisJIHVu bmFtZWQgYXJndW1lbnRzIGluIHN0YWNrLCBhbmQgdGhlbiB2YV9hcmcgZmV0 Y2ggYXJndW1lbnRzIGluIHN0YWNrLgorCSBUaGVyZWZvcmUsIHdlIGRvbid0 IGhhdmUgdG8gaGFuZGxlIHZhcmlhZGljIGZ1bmN0aW9ucyBzcGVjaWFsbHku CisKKwkgRm9yIEFCSTJGUCssIHRoZSBjYWxsZXIgcHVzaGVzIG9ubHkgbmFt ZWQgYXJndW1lbnRzIGluIHJlZ2lzdGVycworCSBhbmQgcHVzaGVzIGFsbCB1 bm5hbWVkIGFyZ3VtZW50cyBpbiBzdGFjay4gICovCisKKyAgICAgIGlmIChh YmlfdXNlX2ZwciAmJiBUWVBFX1ZBUkFSR1MgKGZ1bmNfdHlwZSkKKwkgICYm IGkgPj0gVFlQRV9ORklFTERTIChmdW5jX3R5cGUpKQorCWdvdG8gdXNlX3N0 YWNrOworCisgICAgICAvKiBUcnkgdG8gdXNlIEZQUnMgdG8gcGFzcyBhcmd1 bWVudHMgb25seSB3aGVuCisJIDEuIFRoZSBwcm9ncmFtIGlzIGJ1aWx0IHVz aW5nIHRvb2xjaGFpbiB3aXRoIEZQVSBzdXBwb3J0LgorCSAyLiBUaGUgdHlw ZSBvZiB0aGlzIGFyZ3VtZW50IGNhbiB1c2UgRlBSIHRvIHBhc3MgdmFsdWUu ICAqLworICAgICAgdXNlX2ZwciA9IGFiaV91c2VfZnByICYmIGNhbGxpbmdf dXNlX2ZwcjsKKworICAgICAgaWYgKHVzZV9mcHIpCisJeworCSAgaWYgKHRk ZXAtPmZwdV9mcmVnID09IC0xKQorCSAgICBnb3RvIGVycm9yX25vX2ZwcjsK KworCSAgLyogQWRqdXN0IGFsaWdubWVudC4gICovCisJICBpZiAoKGFsaWdu ID4+IDIpID4gMCkKKwkgICAgZm9mZiA9IGFsaWduX3VwIChmb2ZmLCBhbGln biA+PiAyKTsKKworCSAgaWYgKGZvZmYgPCBSRU5EKQorCSAgICB7CisJICAg ICAgc3dpdGNoIChsZW4pCisJCXsKKwkJY2FzZSA0OgorCQkgIHJlZ2NhY2hl X2Nvb2tlZF93cml0ZSAocmVnY2FjaGUsCisJCQkJCSB0ZGVwLT5mczBfcmVn bnVtICsgZm9mZiwgdmFsKTsKKwkJICBmb2ZmKys7CisJCSAgYnJlYWs7CisJ CWNhc2UgODoKKwkJICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2NhY2hl LAorCQkJCQkgTkRTMzJfRkQwX1JFR05VTSArIChmb2ZmID4+IDEpLCB2YWwp OworCQkgIGZvZmYgKz0gMjsKKwkJICBicmVhazsKKwkJZGVmYXVsdDoKKwkJ ICAvKiBMb25nIGRvdWJsZT8gICovCisJCSAgaW50ZXJuYWxfZXJyb3IgKF9f RklMRV9fLCBfX0xJTkVfXywKKwkJCQkgICJEbyBub3Qga25vdyBob3cgdG8g aGFuZGxlICVkLWJ5dGUgZG91YmxlLlxuIiwKKwkJCQkgIGxlbik7CisJCSAg YnJlYWs7CisJCX0KKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCX0KKyAg ICAgIGVsc2UKKwl7CisJICAvKgorCSAgICAgV2hlbiBwYXNzaW5nIGFyZ3Vt ZW50cyB1c2luZyBHUFJzLAorCisJICAgICAqIEEgY29tcG9zaXRlIHR5cGUg bm90IGxhcmdlciB0aGFuIDQgYnl0ZXMgaXMgcGFzc2VkIGluICRyTi4KKwkg ICAgICAgVGhlIGZvcm1hdCBpcyBhcyBpZiB0aGUgdmFsdWUgaXMgbG9hZGVk IHdpdGggbG9hZCBpbnN0cnVjdGlvbgorCSAgICAgICBvZiBjb3JyZXNwb25k aW5nIHNpemUgKGUuZy4sIExCLCBMSCwgTFcpLgorCisJICAgICAgIEZvciBl eGFtcGxlLAorCisJCSAgICAgICByMAorCQkgICAgICAgMzEgICAgICAwCisJ ICAgICAgIExJVFRMRTogW3ggeCBiIGFdCisJCSAgQklHOiBbeCB4IGEgYl0K KworCSAgICAgKiBPdGhlcndpc2UsIGEgY29tcG9zaXRlIHR5cGUgaXMgcGFz c2VkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycy4KKwkgICAgICAgVGhlIHNp emUgaXMgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiA0 LgorCSAgICAgICBUaGUgc3VjY2Vzc2l2ZSByZWdpc3RlcnMgaG9sZCB0aGUg cGFydHMgb2YgdGhlIGFyZ3VtZW50IGFzIGlmCisJICAgICAgIHdlcmUgbG9h ZGVkIHVzaW5nIGxtdyBpbnN0cnVjdGlvbnMuCisKKwkgICAgICAgRm9yIGV4 YW1wbGUsCisKKwkJICAgICAgIHIwCSByMQorCQkgICAgICAgMzEgICAgICAw IDMxICAgICAgMAorCSAgICAgICBMSVRUTEU6IFtkIGMgYiBhXSBbeCB4IHgg ZV0KKwkJICBCSUc6IFthIGIgYyBkXSBbZSB4IHggeF0KKwkgICAqLworCisJ ICAvKiBBZGp1c3QgYWxpZ25tZW50LiAgKi8KKwkgIGlmICgoYWxpZ24gPj4g MikgPiAwKQorCSAgICBnb2ZmID0gYWxpZ25fdXAgKGdvZmYsIGFsaWduID4+ IDIpOworCisJICBpZiAobGVuIDw9IChSRU5EIC0gZ29mZikgKiA0KQorCSAg ICB7CisJICAgICAgLyogVGhpcyBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIHdo b2xseSB2aWEgR1BScy4gICovCisJICAgICAgd2hpbGUgKGxlbiA+IDApCisJ CXsKKwkJICByZWd2YWwgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKHZh bCwgKGxlbiA+IDQpID8gNCA6IGxlbiwKKwkJCQkJCSAgICAgYnl0ZV9vcmRl cik7CisJCSAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdj YWNoZSwKKwkJCQkJCSAgTkRTMzJfUjBfUkVHTlVNICsgZ29mZiwKKwkJCQkJ CSAgcmVndmFsKTsKKwkJICBsZW4gLT0gNDsKKwkJICB2YWwgKz0gNDsKKwkJ ICBnb2ZmKys7CisJCX0KKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAg ZWxzZSBpZiAoYWJpX3NwbGl0KQorCSAgICB7CisJICAgICAgLyogU29tZSBw YXJ0cyBvZiB0aGlzIGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgdmlhIEdQUnMu ICAqLworCSAgICAgIHdoaWxlIChnb2ZmIDwgUkVORCkKKwkJeworCQkgIHJl Z3ZhbCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAodmFsLCAobGVuID4g NCkgPyA0IDogbGVuLAorCQkJCQkJICAgICBieXRlX29yZGVyKTsKKwkJICBy ZWdjYWNoZV9jb29rZWRfd3JpdGVfdW5zaWduZWQgKHJlZ2NhY2hlLAorCQkJ CQkJICBORFMzMl9SMF9SRUdOVU0gKyBnb2ZmLAorCQkJCQkJICByZWd2YWwp OworCQkgIGxlbiAtPSA0OworCQkgIHZhbCArPSA0OworCQkgIGdvZmYrKzsK KwkJfQorCSAgICB9CisJfQorCit1c2Vfc3RhY2s6CisgICAgICAvKgorCSBX aGVuIHB1c2hpbmcgKHNwbGl0IHBhcnRzIG9mKSBhbiBhcmd1bWVudCBpbnRv IHN0YWNrLAorCisJICogQSBjb21wb3NpdGUgdHlwZSBub3QgbGFyZ2VyIHRo YW4gNCBieXRlcyBpcyBjb3BpZWQgdG8gZGlmZmVyZW50CisJICAgYmFzZSBh ZGRyZXNzLgorCSAgIEluIGxpdHRsZS1lbmRpYW4sIHRoZSBmaXJzdCBieXRl IG9mIHRoaXMgYXJndW1lbnQgaXMgYWxpZ25lZAorCSAgIGF0IHRoZSBsb3cg YWRkcmVzcyBvZiB0aGUgbmV4dCBmcmVlIHdvcmQuCisJICAgSW4gYmlnLWVu ZGlhbiwgdGhlIGxhc3QgYnl0ZSBvZiB0aGlzIGFyZ3VtZW50IGlzIGFsaWdu ZWQKKwkgICBhdCB0aGUgaGlnaCBhZGRyZXNzIG9mIHRoZSBuZXh0IGZyZWUg d29yZC4KKworCSAgIEZvciBleGFtcGxlLAorCisJICAgc3AgWyAtIF0gIFsg YyBdIGhpCisJICAgICAgWyBjIF0gIFsgYiBdCisJICAgICAgWyBiIF0gIFsg YSBdCisJICAgICAgWyBhIF0gIFsgLSBdIGxvCisJICAgICBMSVRUTEUgICBC SUcKKyAgICAgICAqLworCisgICAgICAvKiBBZGp1c3QgYWxpZ25tZW50LiAg Ki8KKyAgICAgIHNvZmYgPSBhbGlnbl91cCAoc29mZiwgYWxpZ24pOworCisg ICAgICB3aGlsZSAobGVuID4gMCkKKwl7CisJICBpbnQgcmxlbiA9IChsZW4g PiA0KSA/IDQgOiBsZW47CisKKwkgIGlmIChieXRlX29yZGVyID09IEJGRF9F TkRJQU5fQklHKQorCSAgICB3cml0ZV9tZW1vcnkgKHNwICsgc29mZiArIDQg LSBybGVuLCB2YWwsIHJsZW4pOworCSAgZWxzZQorCSAgICB3cml0ZV9tZW1v cnkgKHNwICsgc29mZiwgdmFsLCBybGVuKTsKKworCSAgbGVuIC09IDQ7CisJ ICB2YWwgKz0gNDsKKwkgIHNvZmYgKz0gNDsKKwl9CisgICAgfQorCisgIC8q IEZpbmFsbHksIHVwZGF0ZSB0aGUgU1AgcmVnaXN0ZXIuICAqLworICByZWdj YWNoZV9jb29rZWRfd3JpdGVfdW5zaWduZWQgKHJlZ2NhY2hlLCBORFMzMl9T UF9SRUdOVU0sIHNwKTsKKworICByZXR1cm4gc3A7CisKK2Vycm9yX25vX2Zw cjoKKyAgLyogSWYgdXNlX2ZwciwgYnV0IG5vIGZsb2F0aW5nLXBvaW50IHJl Z2lzdGVyIGV4aXN0cywKKyAgICAgdGhlbiBpdCBpcyBhbiBlcnJvci4gICov CisgIGVycm9yIChfKCJGYWlsIHRvIGNhbGwuIEZQVSByZWdpc3RlcnMgYXJl IHJlcXVpcmVkLiIpKTsKK30KKwwKKy8qIFJlYWQsIGZvciBhcmNoaXRlY3R1 cmUgR0RCQVJDSCwgYSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgb2YgVFlQRQor ICAgZnJvbSBSRUdDQUNIRSwgYW5kIGNvcHkgdGhhdCBpbnRvIFZBTEJVRi4g ICovCisKK3N0YXRpYyB2b2lkCituZHMzMl9leHRyYWN0X3JldHVybl92YWx1 ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0eXBlICp0eXBl LAorCQkJICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGdkYl9ieXRl ICp2YWxidWYpCit7CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0g Z2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKTsKKyAgc3RydWN0IGdkYmFy Y2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisgIGlu dCBhYmlfdXNlX2ZwciA9IG5kczMyX2FiaV91c2VfZnByICh0ZGVwLT5lbGZf YWJpKTsKKyAgaW50IGNhbGxpbmdfdXNlX2ZwcjsKKyAgaW50IGxlbjsKKwor ICBjYWxsaW5nX3VzZV9mcHIgPSBuZHMzMl9jaGVja19jYWxsaW5nX3VzZV9m cHIgKHR5cGUpOworICBsZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7CisKKyAg aWYgKGFiaV91c2VfZnByICYmIGNhbGxpbmdfdXNlX2ZwcikKKyAgICB7Cisg ICAgICBpZiAobGVuID09IDQpCisJcmVnY2FjaGVfY29va2VkX3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5mczBfcmVnbnVtLCB2YWxidWYpOworICAgICAgZWxz ZSBpZiAobGVuID09IDgpCisJcmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2Nh Y2hlLCBORFMzMl9GRDBfUkVHTlVNLCB2YWxidWYpOworICAgICAgZWxzZQor CWludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sCisJCQlfKCJD YW5ub3QgZXh0cmFjdCByZXR1cm4gdmFsdWUgb2YgJWQgYnl0ZXMgIgorCQkJ ICAibG9uZyBmbG9hdGluZy1wb2ludC4iKSwgbGVuKTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICAvKgorCSBXaGVuIHJldHVybmluZyByZXN1bHQs CisKKwkgKiBBIGNvbXBvc2l0ZSB0eXBlIG5vdCBsYXJnZXIgdGhhbiA0IGJ5 dGVzIGlzIHJldHVybmVkIGluICRyMC4KKwkgICBUaGUgZm9ybWF0IGlzIGFz IGlmIHRoZSByZXN1bHQgaXMgbG9hZGVkIHdpdGggbG9hZCBpbnN0cnVjdGlv bgorCSAgIG9mIGNvcnJlc3BvbmRpbmcgc2l6ZSAoZS5nLiwgTEIsIExILCBM VykuCisKKwkgICBGb3IgZXhhbXBsZSwKKworCQkgICByMAorCQkgICAzMSAg ICAgIDAKKwkgICBMSVRUTEU6IFt4IHggYiBhXQorCSAgICAgIEJJRzogW3gg eCBhIGJdCisKKwkgKiBPdGhlcndpc2UsIGEgY29tcG9zaXRlIHR5cGUgbm90 IGxhcmdlciB0aGFuIDggYnl0ZXMgaXMgcmV0dXJuZWQKKwkgICBpbiAkcjAg YW5kICRyMS4KKwkgICBJbiBsaXR0bGUtZW5kaWFuLCB0aGUgZmlyc3Qgd29y ZCBpcyBsb2FkZWQgaW4gJHIwLgorCSAgIEluIGJpZy1lbmRpYW4sIHRoZSBs YXN0IHdvcmQgaXMgbG9hZGVkIGluICRyMS4KKworCSAgIEZvciBleGFtcGxl LAorCisJCSAgIHIwCSAgICAgcjEKKwkJICAgMzEgICAgICAwIDMxICAgICAg MAorCSAgIExJVFRMRTogW2QgYyBiIGFdIFt4IHggeCBlXQorCSAgICAgIEJJ RzogW3ggeCB4IGFdIFtiIGMgZCBlXQorICAgICAgICovCisKKyAgICAgIFVM T05HRVNUIHRtcDsKKworICAgICAgaWYgKGxlbiA8IDQpCisJeworCSAgLyog QnkgdXNpbmcgc3RvcmVfdW5zaWduZWRfaW50ZWdlciB3ZSBhdm9pZCBoYXZp bmcgdG8gZG8KKwkgICAgIGFueXRoaW5nIHNwZWNpYWwgZm9yIHNtYWxsIGJp Zy1lbmRpYW4gdmFsdWVzLiAgKi8KKwkgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCAmdG1wKTsK KwkgIHN0b3JlX3Vuc2lnbmVkX2ludGVnZXIgKHZhbGJ1ZiwgbGVuLCBieXRl X29yZGVyLCB0bXApOworCX0KKyAgICAgIGVsc2UgaWYgKGxlbiA9PSA0KQor CXsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgTkRTMzJf UjBfUkVHTlVNLCB2YWxidWYpOworCX0KKyAgICAgIGVsc2UgaWYgKGxlbiA8 IDgpCisJeworCSAgaW50IGxlbjEsIGxlbjI7CisKKwkgIGxlbjEgPSBieXRl X29yZGVyID09IEJGRF9FTkRJQU5fQklHID8gbGVuIC0gNCA6IDQ7CisJICBs ZW4yID0gbGVuIC0gbGVuMTsKKworCSAgcmVnY2FjaGVfY29va2VkX3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCBORFMzMl9SMF9SRUdOVU0sICZ0bXApOwor CSAgc3RvcmVfdW5zaWduZWRfaW50ZWdlciAodmFsYnVmLCBsZW4xLCBieXRl X29yZGVyLCB0bXApOworCisJICByZWdjYWNoZV9jb29rZWRfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSArIDEsICZ0bXApOwor CSAgc3RvcmVfdW5zaWduZWRfaW50ZWdlciAodmFsYnVmICsgbGVuMSwgbGVu MiwgYnl0ZV9vcmRlciwgdG1wKTsKKwl9CisgICAgICBlbHNlCisJeworCSAg cmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hlLCBORFMzMl9SMF9SRUdO VU0sIHZhbGJ1Zik7CisJICByZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2Fj aGUsIE5EUzMyX1IwX1JFR05VTSArIDEsIHZhbGJ1ZiArIDQpOworCX0KKyAg ICB9Cit9CisKKy8qIFdyaXRlLCBmb3IgYXJjaGl0ZWN0dXJlIEdEQkFSQ0gs IGEgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIG9mIFRZUEUKKyAgIGZyb20gVkFM QlVGIGludG8gUkVHQ0FDSEUuICAqLworCitzdGF0aWMgdm9pZAorbmRzMzJf c3RvcmVfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwg c3RydWN0IHR5cGUgKnR5cGUsCisJCQkgIHN0cnVjdCByZWdjYWNoZSAqcmVn Y2FjaGUsIGNvbnN0IGdkYl9ieXRlICp2YWxidWYpCit7CisgIGVudW0gYmZk X2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyIChnZGJh cmNoKTsKKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hf dGRlcCAoZ2RiYXJjaCk7CisgIGludCBhYmlfdXNlX2ZwciA9IG5kczMyX2Fi aV91c2VfZnByICh0ZGVwLT5lbGZfYWJpKTsKKyAgaW50IGNhbGxpbmdfdXNl X2ZwcjsKKyAgaW50IGxlbjsKKworICBjYWxsaW5nX3VzZV9mcHIgPSBuZHMz Ml9jaGVja19jYWxsaW5nX3VzZV9mcHIgKHR5cGUpOworICBsZW4gPSBUWVBF X0xFTkdUSCAodHlwZSk7CisKKyAgaWYgKGFiaV91c2VfZnByICYmIGNhbGxp bmdfdXNlX2ZwcikKKyAgICB7CisgICAgICBpZiAobGVuID09IDQpCisJcmVn Y2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgdGRlcC0+ZnMwX3JlZ251 bSwgdmFsYnVmKTsKKyAgICAgIGVsc2UgaWYgKGxlbiA9PSA4KQorCXJlZ2Nh Y2hlX2Nvb2tlZF93cml0ZSAocmVnY2FjaGUsIE5EUzMyX0ZEMF9SRUdOVU0s IHZhbGJ1Zik7CisgICAgICBlbHNlCisJaW50ZXJuYWxfZXJyb3IgKF9fRklM RV9fLCBfX0xJTkVfXywKKwkJCV8oIkNhbm5vdCBzdG9yZSByZXR1cm4gdmFs dWUgb2YgJWQgYnl0ZXMgIgorCQkJICAibG9uZyBmbG9hdGluZy1wb2ludC4i KSwgbGVuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBVTE9OR0VT VCByZWd2YWw7CisKKyAgICAgIGlmIChsZW4gPCA0KQorCXsKKwkgIHJlZ3Zh bCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAodmFsYnVmLCBsZW4sIGJ5 dGVfb3JkZXIpOworCSAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVk IChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCByZWd2YWwpOworCX0KKyAg ICAgIGVsc2UgaWYgKGxlbiA9PSA0KQorCXsKKwkgIHJlZ2NhY2hlX2Nvb2tl ZF93cml0ZSAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSwgdmFsYnVmKTsK Kwl9CisgICAgICBlbHNlIGlmIChsZW4gPCA4KQorCXsKKwkgIGludCBsZW4x LCBsZW4yOworCisJICBsZW4xID0gYnl0ZV9vcmRlciA9PSBCRkRfRU5ESUFO X0JJRyA/IGxlbiAtIDQgOiA0OworCSAgbGVuMiA9IGxlbiAtIGxlbjE7CisK KwkgIHJlZ3ZhbCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAodmFsYnVm LCBsZW4xLCBieXRlX29yZGVyKTsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF93cml0 ZV91bnNpZ25lZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSwgcmVndmFs KTsKKworCSAgcmVndmFsID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh2 YWxidWYgKyBsZW4xLCBsZW4yLCBieXRlX29yZGVyKTsKKwkgIHJlZ2NhY2hl X2Nvb2tlZF93cml0ZV91bnNpZ25lZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JF R05VTSArIDEsCisJCQkJCSAgcmVndmFsKTsKKwl9CisgICAgICBlbHNlCisJ eworCSAgcmVnY2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgTkRTMzJf UjBfUkVHTlVNLCB2YWxidWYpOworCSAgcmVnY2FjaGVfY29va2VkX3dyaXRl IChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNICsgMSwgdmFsYnVmICsgNCk7 CisJfQorICAgIH0KK30KKworLyogSW1wbGVtZW50IHRoZSAicmV0dXJuX3Zh bHVlIiBnZGJhcmNoIG1ldGhvZC4KKworICAgRGV0ZXJtaW5lLCBmb3IgYXJj aGl0ZWN0dXJlIEdEQkFSQ0gsIGhvdyBhIHJldHVybiB2YWx1ZSBvZiBUWVBF CisgICBzaG91bGQgYmUgcmV0dXJuZWQuICBJZiBpdCBpcyBzdXBwb3NlZCB0 byBiZSByZXR1cm5lZCBpbiByZWdpc3RlcnMsCisgICBhbmQgUkVBREJVRiBp cyBub24temVybywgcmVhZCB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgZnJvbSBS RUdDQUNIRSwKKyAgIGFuZCBjb3B5IGl0IGludG8gUkVBREJVRi4gIElmIFdS SVRFQlVGIGlzIG5vbi16ZXJvLCB3cml0ZSB0aGUgdmFsdWUKKyAgIGZyb20g V1JJVEVCVUYgaW50byBSRUdDQUNIRS4gICovCisKK3N0YXRpYyBlbnVtIHJl dHVybl92YWx1ZV9jb252ZW50aW9uCituZHMzMl9yZXR1cm5fdmFsdWUgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3QgdmFsdWUgKmZ1bmNfdHlw ZSwKKwkJICAgIHN0cnVjdCB0eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2NhY2hlLAorCQkgICAgZ2RiX2J5dGUgKnJlYWRidWYsIGNvbnN0IGdk Yl9ieXRlICp3cml0ZWJ1ZikKK3sKKyAgaWYgKFRZUEVfTEVOR1RIICh0eXBl KSA+IDgpCisgICAgeworICAgICAgcmV0dXJuIFJFVFVSTl9WQUxVRV9TVFJV Q1RfQ09OVkVOVElPTjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBp ZiAocmVhZGJ1ZiAhPSBOVUxMKQorCW5kczMyX2V4dHJhY3RfcmV0dXJuX3Zh bHVlIChnZGJhcmNoLCB0eXBlLCByZWdjYWNoZSwgcmVhZGJ1Zik7CisgICAg ICBpZiAod3JpdGVidWYgIT0gTlVMTCkKKwluZHMzMl9zdG9yZV9yZXR1cm5f dmFsdWUgKGdkYmFyY2gsIHR5cGUsIHJlZ2NhY2hlLCB3cml0ZWJ1Zik7CisK KyAgICAgIHJldHVybiBSRVRVUk5fVkFMVUVfUkVHSVNURVJfQ09OVkVOVElP TjsKKyAgICB9Cit9CisMCisvKiBJbXBsZW1lbnQgdGhlICJnZXRfbG9uZ2pt cF90YXJnZXQiIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIGludAor bmRzMzJfZ2V0X2xvbmdqbXBfdGFyZ2V0IChzdHJ1Y3QgZnJhbWVfaW5mbyAq ZnJhbWUsIENPUkVfQUREUiAqcGMpCit7CisgIGdkYl9ieXRlIGJ1Zls0XTsK KyAgQ09SRV9BRERSIGpiX2FkZHI7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1lKTsKKyAgZW51bSBiZmRfZW5k aWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gp OworCisgIGpiX2FkZHIgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQg KGZyYW1lLCBORFMzMl9SMF9SRUdOVU0pOworCisgIGlmICh0YXJnZXRfcmVh ZF9tZW1vcnkgKGpiX2FkZHIgKyAxMSAqIDQsIGJ1ZiwgNCkpCisgICAgcmV0 dXJuIDA7CisKKyAgKnBjID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChi dWYsIDQsIGJ5dGVfb3JkZXIpOworICByZXR1cm4gMTsKK30KKwwKKy8qIFZh bGlkYXRlIHRoZSBnaXZlbiBUREVTQywgYW5kIGZpeGVkLW51bWJlciBzb21l IHJlZ2lzdGVycyBpbiBpdC4KKyAgIFJldHVybiAwIGlmIHRoZSBnaXZlbiBU REVTQyBkb2VzIG5vdCBjb250YWluIHRoZSByZXF1aXJlZCBmZWF0dXJlCisg ICBvciBub3QgY29udGFpbiByZXF1aXJlZCByZWdpc3RlcnMuICAqLworCitz dGF0aWMgaW50CituZHMzMl92YWxpZGF0ZV90ZGVzY19wIChjb25zdCBzdHJ1 Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjLAorCQkJc3RydWN0IHRkZXNjX2FyY2hf ZGF0YSAqdGRlc2NfZGF0YSwKKwkJCWludCAqZnB1X2ZyZWcsIGludCAqdXNl X3BzZXVkb19mc3JzKQoreworICBjb25zdCBzdHJ1Y3QgdGRlc2NfZmVhdHVy ZSAqZmVhdHVyZTsKKyAgaW50IGksIHZhbGlkX3A7CisKKyAgZmVhdHVyZSA9 IHRkZXNjX2ZpbmRfZmVhdHVyZSAodGRlc2MsICJvcmcuZ251LmdkYi5uZHMz Mi5jb3JlIik7CisgIGlmIChmZWF0dXJlID09IE5VTEwpCisgICAgcmV0dXJu IDA7CisKKyAgdmFsaWRfcCA9IDE7CisgIC8qIFZhbGlkYXRlIGFuZCBmaXhl ZC1udW1iZXIgUjAtUjEwLiAgKi8KKyAgZm9yIChpID0gTkRTMzJfUjBfUkVH TlVNOyBpIDw9IE5EUzMyX1IwX1JFR05VTSArIDEwOyBpKyspCisgICAgdmFs aWRfcCAmPSB0ZGVzY19udW1iZXJlZF9yZWdpc3RlciAoZmVhdHVyZSwgdGRl c2NfZGF0YSwgaSwKKwkJCQkJbmRzMzJfcmVnaXN0ZXJfbmFtZXNbaV0pOwor CisgIC8qIFZhbGlkYXRlIFIxNS4gICovCisgIHZhbGlkX3AgJj0gdGRlc2Nf dW5udW1iZXJlZF9yZWdpc3RlciAoZmVhdHVyZSwKKwkJCQkJbmRzMzJfcmVn aXN0ZXJfbmFtZXNbTkRTMzJfVEFfUkVHTlVNXSk7CisKKyAgLyogVmFsaWRh dGUgYW5kIGZpeGVkLW51bWJlciBGUCwgR1AsIExQLCBTUCwgUEMuICAqLwor ICBmb3IgKGkgPSBORFMzMl9GUF9SRUdOVU07IGkgPD0gTkRTMzJfUENfUkVH TlVNOyBpKyspCisgICAgdmFsaWRfcCAmPSB0ZGVzY19udW1iZXJlZF9yZWdp c3RlciAoZmVhdHVyZSwgdGRlc2NfZGF0YSwgaSwKKwkJCQkJbmRzMzJfcmVn aXN0ZXJfbmFtZXNbaV0pOworCisgIGlmICghdmFsaWRfcCkKKyAgICByZXR1 cm4gMDsKKworICAvKiBGaXhlZC1udW1iZXIgUjExLVIyNy4gICovCisgIGZv ciAoaSA9IE5EUzMyX1IwX1JFR05VTSArIDExOyBpIDw9IE5EUzMyX1IwX1JF R05VTSArIDI3OyBpKyspCisgICAgdGRlc2NfbnVtYmVyZWRfcmVnaXN0ZXIg KGZlYXR1cmUsIHRkZXNjX2RhdGEsIGksIG5kczMyX3JlZ2lzdGVyX25hbWVz W2ldKTsKKworICBmZWF0dXJlID0gdGRlc2NfZmluZF9mZWF0dXJlICh0ZGVz YywgIm9yZy5nbnUuZ2RiLm5kczMyLmZwdSIpOworICBpZiAoZmVhdHVyZSAh PSBOVUxMKQorICAgIHsKKyAgICAgIGludCBudW1fZmRyX3JlZ3MsIG51bV9m c3JfcmVncywgZnMwX3JlZ251bSwgbnVtX2xpc3RlZF9mc3I7CisgICAgICBp bnQgZnJlZyA9IC0xOworCisgICAgICAvKiBHdWVzcyBGUFUgY29uZmlndXJh dGlvbiB2aWEgbGlzdGVkIHJlZ2lzdGVycy4gICovCisgICAgICBpZiAodGRl c2NfdW5udW1iZXJlZF9yZWdpc3RlciAoZmVhdHVyZSwgImZkMzEiKSkKKwlm cmVnID0gMzsKKyAgICAgIGVsc2UgaWYgKHRkZXNjX3VubnVtYmVyZWRfcmVn aXN0ZXIgKGZlYXR1cmUsICJmZDE1IikpCisJZnJlZyA9IDI7CisgICAgICBl bHNlIGlmICh0ZGVzY191bm51bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCAi ZmQ3IikpCisJZnJlZyA9IDE7CisgICAgICBlbHNlIGlmICh0ZGVzY191bm51 bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCAiZmQzIikpCisJZnJlZyA9IDA7 CisKKyAgICAgIGlmIChmcmVnID09IC0xKQorCS8qIFJlcXVpcmVkIEZEUiBp cyBub3QgZm91bmQuICAqLworCXJldHVybiAwOworICAgICAgZWxzZQorCSpm cHVfZnJlZyA9IGZyZWc7CisKKyAgICAgIC8qIFZhbGlkYXRlIGFuZCBmaXhl ZC1udW1iZXIgcmVxdWlyZWQgRkRScy4gICovCisgICAgICBudW1fZmRyX3Jl Z3MgPSBudW1fZmRyX21hcFtmcmVnXTsKKyAgICAgIGZvciAoaSA9IDA7IGkg PCBudW1fZmRyX3JlZ3M7IGkrKykKKwl2YWxpZF9wICY9IHRkZXNjX251bWJl cmVkX3JlZ2lzdGVyIChmZWF0dXJlLCB0ZGVzY19kYXRhLAorCQkJCQkgICAg TkRTMzJfRkQwX1JFR05VTSArIGksCisJCQkJCSAgICBuZHMzMl9mZHJfcmVn aXN0ZXJfbmFtZXNbaV0pOworICAgICAgaWYgKCF2YWxpZF9wKQorCXJldHVy biAwOworCisgICAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGxpc3RlZCBG U1JzLCBhbmQgZml4ZWQtbnVtYmVyIHRoZW0gaWYgcHJlc2VudC4gICovCisg ICAgICBudW1fZnNyX3JlZ3MgPSBudW1fZnNyX21hcFtmcmVnXTsKKyAgICAg IGZzMF9yZWdudW0gPSBORFMzMl9GRDBfUkVHTlVNICsgbnVtX2Zkcl9yZWdz OworICAgICAgbnVtX2xpc3RlZF9mc3IgPSAwOworICAgICAgZm9yIChpID0g MDsgaSA8IG51bV9mc3JfcmVnczsgaSsrKQorCW51bV9saXN0ZWRfZnNyICs9 IHRkZXNjX251bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCB0ZGVzY19kYXRh LAorCQkJCQkJICAgZnMwX3JlZ251bSArIGksCisJCQkJCQkgICBuZHMzMl9m c3JfcmVnaXN0ZXJfbmFtZXNbaV0pOworCisgICAgICBpZiAobnVtX2xpc3Rl ZF9mc3IgPT0gMCkKKwkvKiBObyByZXF1aXJlZCBGU1JzIGFyZSBsaXN0ZWQg ZXhwbGljaXRseSwgIG1ha2UgdGhlbSBwc2V1ZG8gcmVnaXN0ZXJzCisJICAg b2YgRkRScy4gICovCisJKnVzZV9wc2V1ZG9fZnNycyA9IDE7CisgICAgICBl bHNlIGlmIChudW1fbGlzdGVkX2ZzciA9PSBudW1fZnNyX3JlZ3MpCisJLyog QWxsIHJlcXVpcmVkIEZTUnMgYXJlIGxpc3RlZCBleHBsaWNpdGx5LiAgKi8K KwkqdXNlX3BzZXVkb19mc3JzID0gMDsKKyAgICAgIGVsc2UKKwkvKiBTb21l IHJlcXVpcmVkIEZTUnMgYXJlIG1pc3NpbmcuICAqLworCXJldHVybiAwOwor ICAgIH0KKworICByZXR1cm4gMTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUg Y3VycmVudCBhcmNoaXRlY3R1cmUgYmFzZWQgb24gSU5GTy4gIElmIHBvc3Np YmxlLAorICAgcmUtdXNlIGFuIGFyY2hpdGVjdHVyZSBmcm9tIEFSQ0hFUywg d2hpY2ggaXMgYSBsaXN0IG9mCisgICBhcmNoaXRlY3R1cmVzIGFscmVhZHkg Y3JlYXRlZCBkdXJpbmcgdGhpcyBkZWJ1Z2dpbmcgc2Vzc2lvbi4KKworICAg Q2FsbGVkIGUuZy4gYXQgcHJvZ3JhbSBzdGFydHVwLCB3aGVuIHJlYWRpbmcg YSBjb3JlIGZpbGUsIGFuZCB3aGVuCisgICByZWFkaW5nIGEgYmluYXJ5IGZp bGUuICAqLworCitzdGF0aWMgc3RydWN0IGdkYmFyY2ggKgorbmRzMzJfZ2Ri YXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBn ZGJhcmNoX2xpc3QgKmFyY2hlcykKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdk YmFyY2g7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7CisgIHN0cnVj dCBnZGJhcmNoX2xpc3QgKmJlc3RfYXJjaDsKKyAgc3RydWN0IHRkZXNjX2Fy Y2hfZGF0YSAqdGRlc2NfZGF0YSA9IE5VTEw7CisgIGNvbnN0IHN0cnVjdCB0 YXJnZXRfZGVzYyAqdGRlc2MgPSBpbmZvLnRhcmdldF9kZXNjOworICBpbnQg ZWxmX2FiaSA9IEVfTkRTX0FCSV9BQUJJOworICBpbnQgZnB1X2ZyZWcgPSAt MTsKKyAgaW50IHVzZV9wc2V1ZG9fZnNycyA9IDA7CisgIGludCBpLCBudW1f cmVncywgbWF4cmVnczsKKworICAvKiBFeHRyYWN0IHRoZSBlbGZfZmxhZ3Mg aWYgYXZhaWxhYmxlLiAgKi8KKyAgaWYgKGluZm8uYWJmZCAmJiBiZmRfZ2V0 X2ZsYXZvdXIgKGluZm8uYWJmZCkgPT0gYmZkX3RhcmdldF9lbGZfZmxhdm91 cikKKyAgICBlbGZfYWJpID0gZWxmX2VsZmhlYWRlciAoaW5mby5hYmZkKS0+ ZV9mbGFncyAmIEVGX05EU19BQkk7CisKKyAgLyogSWYgdGhlcmUgaXMgYWxy ZWFkeSBhIGNhbmRpZGF0ZSwgdXNlIGl0LiAgKi8KKyAgZm9yIChiZXN0X2Fy Y2ggPSBnZGJhcmNoX2xpc3RfbG9va3VwX2J5X2luZm8gKGFyY2hlcywgJmlu Zm8pOworICAgICAgIGJlc3RfYXJjaCAhPSBOVUxMOworICAgICAgIGJlc3Rf YXJjaCA9IGdkYmFyY2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYmVzdF9hcmNo LT5uZXh0LCAmaW5mbykpCisgICAgeworICAgICAgc3RydWN0IGdkYmFyY2hf dGRlcCAqaWRlcCA9IGdkYmFyY2hfdGRlcCAoYmVzdF9hcmNoLT5nZGJhcmNo KTsKKworICAgICAgaWYgKGlkZXAtPmVsZl9hYmkgIT0gZWxmX2FiaSkKKwlj b250aW51ZTsKKworICAgICAgLyogRm91bmQgYSBtYXRjaC4gICovCisgICAg ICBicmVhazsKKyAgICB9CisKKyAgaWYgKGJlc3RfYXJjaCAhPSBOVUxMKQor ICAgIHJldHVybiBiZXN0X2FyY2gtPmdkYmFyY2g7CisKKyAgaWYgKCF0ZGVz Y19oYXNfcmVnaXN0ZXJzICh0ZGVzYykpCisgICAgdGRlc2MgPSB0ZGVzY19u ZHMzMjsKKworICB0ZGVzY19kYXRhID0gdGRlc2NfZGF0YV9hbGxvYyAoKTsK KworICBpZiAoIW5kczMyX3ZhbGlkYXRlX3RkZXNjX3AgKHRkZXNjLCB0ZGVz Y19kYXRhLCAmZnB1X2ZyZWcsICZ1c2VfcHNldWRvX2ZzcnMpKQorICAgIHsK KyAgICAgIHRkZXNjX2RhdGFfY2xlYW51cCAodGRlc2NfZGF0YSk7CisgICAg ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgLyogQWxsb2NhdGUgc3BhY2Ug Zm9yIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLiAgKi8KKyAgdGRlcCA9IFhDTkVX IChzdHJ1Y3QgZ2RiYXJjaF90ZGVwKTsKKyAgdGRlcC0+ZnB1X2ZyZWcgPSBm cHVfZnJlZzsKKyAgdGRlcC0+dXNlX3BzZXVkb19mc3JzID0gdXNlX3BzZXVk b19mc3JzOworICB0ZGVwLT5mczBfcmVnbnVtID0gLTE7CisgIHRkZXAtPmVs Zl9hYmkgPSBlbGZfYWJpOworCisgIGdkYmFyY2ggPSBnZGJhcmNoX2FsbG9j ICgmaW5mbywgdGRlcCk7CisKKyAgaWYgKGZwdV9mcmVnID09IC0xKQorICAg IG51bV9yZWdzID0gTkRTMzJfTlVNX1JFR1M7CisgIGVsc2UgaWYgKHVzZV9w c2V1ZG9fZnNycyA9PSAxKQorICAgIHsKKyAgICAgIHNldF9nZGJhcmNoX3Bz ZXVkb19yZWdpc3Rlcl9yZWFkIChnZGJhcmNoLCBuZHMzMl9wc2V1ZG9fcmVn aXN0ZXJfcmVhZCk7CisgICAgICBzZXRfZ2RiYXJjaF9wc2V1ZG9fcmVnaXN0 ZXJfd3JpdGUgKGdkYmFyY2gsIG5kczMyX3BzZXVkb19yZWdpc3Rlcl93cml0 ZSk7CisgICAgICBzZXRfdGRlc2NfcHNldWRvX3JlZ2lzdGVyX25hbWUgKGdk YmFyY2gsIG5kczMyX3BzZXVkb19yZWdpc3Rlcl9uYW1lKTsKKyAgICAgIHNl dF90ZGVzY19wc2V1ZG9fcmVnaXN0ZXJfdHlwZSAoZ2RiYXJjaCwgbmRzMzJf cHNldWRvX3JlZ2lzdGVyX3R5cGUpOworICAgICAgc2V0X2dkYmFyY2hfbnVt X3BzZXVkb19yZWdzIChnZGJhcmNoLCBudW1fZnNyX21hcFtmcHVfZnJlZ10p OworCisgICAgICBudW1fcmVncyA9IE5EUzMyX05VTV9SRUdTICsgbnVtX2Zk cl9tYXBbZnB1X2ZyZWddOworICAgIH0KKyAgZWxzZQorICAgIG51bV9yZWdz ID0gTkRTMzJfTlVNX1JFR1MgKyBudW1fZmRyX21hcFtmcHVfZnJlZ10gKyBu dW1fZnNyX21hcFtmcHVfZnJlZ107CisKKyAgc2V0X2dkYmFyY2hfbnVtX3Jl Z3MgKGdkYmFyY2gsIG51bV9yZWdzKTsKKyAgdGRlc2NfdXNlX3JlZ2lzdGVy cyAoZ2RiYXJjaCwgdGRlc2MsIHRkZXNjX2RhdGEpOworCisgIC8qIENhY2hl IHRoZSByZWdpc3RlciBudW1iZXIgb2YgZnMwLiAgKi8KKyAgaWYgKGZwdV9m cmVnICE9IC0xKQorICAgIHRkZXAtPmZzMF9yZWdudW0gPSB1c2VyX3JlZ19t YXBfbmFtZV90b19yZWdudW0gKGdkYmFyY2gsICJmczAiLCAtMSk7CisKKyAg LyogQWRkIE5EUzMyIHJlZ2lzdGVyIGFsaWFzZXMuICBUbyBhdm9pZCBzZWFy Y2ggaW4gdXNlciByZWdpc3RlciBuYW1lIHNwYWNlLAorICAgICB1c2VyX3Jl Z19tYXBfbmFtZV90b19yZWdudW0gaXMgbm90IHVzZWQuICAqLworICBtYXhy ZWdzID0gKGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gpICsgZ2RiYXJjaF9u dW1fcHNldWRvX3JlZ3MgKGdkYmFyY2gpKTsKKyAgZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUgKG5kczMyX3JlZ2lzdGVyX2FsaWFzZXMpOyBpKyspCisg ICAgeworICAgICAgaW50IHJlZ251bSwgajsKKworICAgICAgcmVnbnVtID0g LTE7CisgICAgICAvKiBTZWFyY2ggcmVnaXN0ZXIgbmFtZSBzcGFjZS4gICov CisgICAgICBmb3IgKGogPSAwOyBqIDwgbWF4cmVnczsgaisrKQorCXsKKwkg IGNvbnN0IGNoYXIgKnJlZ25hbWUgPSBnZGJhcmNoX3JlZ2lzdGVyX25hbWUg KGdkYmFyY2gsIGopOworCisJICBpZiAocmVnbmFtZSAhPSBOVUxMCisJICAg ICAgJiYgc3RyY21wIChyZWduYW1lLCBuZHMzMl9yZWdpc3Rlcl9hbGlhc2Vz W2ldLm5hbWUpID09IDApCisJICAgIHsKKwkgICAgICByZWdudW0gPSBqOwor CSAgICAgIGJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBUcnkgbmV4 dCBhbGlhcyBlbnRyeSBpZiB0aGUgZ2l2ZW4gbmFtZSBjYW4gbm90IGJlIGZv dW5kIGluIHJlZ2lzdGVyCisJIG5hbWUgc3BhY2UuICAqLworICAgICAgaWYg KHJlZ251bSA9PSAtMSkKKwljb250aW51ZTsKKworICAgICAgdXNlcl9yZWdf YWRkIChnZGJhcmNoLCBuZHMzMl9yZWdpc3Rlcl9hbGlhc2VzW2ldLmFsaWFz LAorCQkgICAgdmFsdWVfb2ZfbmRzMzJfcmVnLCAoY29uc3Qgdm9pZCAqKSAo aW50cHRyX3QpIHJlZ251bSk7CisgICAgfQorCisgIG5kczMyX2FkZF9yZWdn cm91cHMgKGdkYmFyY2gpOworCisgIC8qIEhvb2sgaW4gQUJJLXNwZWNpZmlj IG92ZXJyaWRlcywgaWYgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gICov CisgIGluZm8udGRlcF9pbmZvID0gKHZvaWQgKikgdGRlc2NfZGF0YTsKKyAg Z2RiYXJjaF9pbml0X29zYWJpIChpbmZvLCBnZGJhcmNoKTsKKworICAvKiBP dmVycmlkZSB0ZGVzY19yZWdpc3RlciBjYWxsYmFja3MgZm9yIHN5c3RlbSBy ZWdpc3RlcnMuICAqLworICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl9yZWdncm91 cF9wIChnZGJhcmNoLCBuZHMzMl9yZWdpc3Rlcl9yZWdncm91cF9wKTsKKwor ICBzZXRfZ2RiYXJjaF9zcF9yZWdudW0gKGdkYmFyY2gsIE5EUzMyX1NQX1JF R05VTSk7CisgIHNldF9nZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCwgTkRT MzJfUENfUkVHTlVNKTsKKyAgc2V0X2dkYmFyY2hfdW53aW5kX3NwIChnZGJh cmNoLCBuZHMzMl91bndpbmRfc3ApOworICBzZXRfZ2RiYXJjaF91bndpbmRf cGMgKGdkYmFyY2gsIG5kczMyX3Vud2luZF9wYyk7CisgIHNldF9nZGJhcmNo X3N0YWNrX2ZyYW1lX2Rlc3Ryb3llZF9wIChnZGJhcmNoLCBuZHMzMl9zdGFj a19mcmFtZV9kZXN0cm95ZWRfcCk7CisgIHNldF9nZGJhcmNoX2R3YXJmMl9y ZWdfdG9fcmVnbnVtIChnZGJhcmNoLCBuZHMzMl9kd2FyZjJfcmVnX3RvX3Jl Z251bSk7CisKKyAgc2V0X2dkYmFyY2hfcHVzaF9kdW1teV9jYWxsIChnZGJh cmNoLCBuZHMzMl9wdXNoX2R1bW15X2NhbGwpOworICBzZXRfZ2RiYXJjaF9y ZXR1cm5fdmFsdWUgKGdkYmFyY2gsIG5kczMyX3JldHVybl92YWx1ZSk7Cisg IHNldF9nZGJhcmNoX2R1bW15X2lkIChnZGJhcmNoLCBuZHMzMl9kdW1teV9p ZCk7CisKKyAgc2V0X2dkYmFyY2hfc2tpcF9wcm9sb2d1ZSAoZ2RiYXJjaCwg bmRzMzJfc2tpcF9wcm9sb2d1ZSk7CisgIHNldF9nZGJhcmNoX2lubmVyX3Ro YW4gKGdkYmFyY2gsIGNvcmVfYWRkcl9sZXNzdGhhbik7CisgIHNldF9nZGJh cmNoX2JyZWFrcG9pbnRfZnJvbV9wYyAoZ2RiYXJjaCwgbmRzMzJfYnJlYWtw b2ludF9mcm9tX3BjKTsKKworICBzZXRfZ2RiYXJjaF9mcmFtZV9hbGlnbiAo Z2RiYXJjaCwgbmRzMzJfZnJhbWVfYWxpZ24pOworICBmcmFtZV9iYXNlX3Nl dF9kZWZhdWx0IChnZGJhcmNoLCAmbmRzMzJfZnJhbWVfYmFzZSk7CisKKyAg c2V0X2dkYmFyY2hfcHJpbnRfaW5zbiAoZ2RiYXJjaCwgcHJpbnRfaW5zbl9u ZHMzMik7CisKKyAgLyogSGFuZGxlIGxvbmdqbXAuICAqLworICBzZXRfZ2Ri YXJjaF9nZXRfbG9uZ2ptcF90YXJnZXQgKGdkYmFyY2gsIG5kczMyX2dldF9s b25nam1wX3RhcmdldCk7CisKKyAgLyogVGhlIG9yZGVyIG9mIGFwcGVuZGlu ZyBpcyB0aGUgb3JkZXIgaXQgY2hlY2sgZnJhbWUuICAqLworICBkd2FyZjJf YXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7CisgIGZyYW1lX3Vud2luZF9h cHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZuZHMzMl9lcGlsb2d1ZV9mcmFt ZV91bndpbmQpOworICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChn ZGJhcmNoLCAmbmRzMzJfZnJhbWVfdW53aW5kKTsKKworICByZXR1cm4gZ2Ri YXJjaDsKK30KKwordm9pZAorX2luaXRpYWxpemVfbmRzMzJfdGRlcCAodm9p ZCkKK3sKKyAgLyogSW5pdGlhbGl6ZSBnZGJhcmNoLiAgKi8KKyAgcmVnaXN0 ZXJfZ2RiYXJjaF9pbml0IChiZmRfYXJjaF9uZHMzMiwgbmRzMzJfZ2RiYXJj aF9pbml0KTsKKworICBpbml0aWFsaXplX3RkZXNjX25kczMyICgpOworICBu ZHMzMl9pbml0X3JlZ2dyb3VwcyAoKTsKK30KZGlmZiAtLWdpdCBhL2dkYi9u ZHMzMi10ZGVwLmggYi9nZGIvbmRzMzItdGRlcC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWQ3YjIKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvbmRzMzItdGRlcC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIFRh cmdldC1kZXBlbmRlbnQgY29kZSBmb3IgdGhlIE5EUzMyIGFyY2hpdGVjdHVy ZSwgZm9yIEdEQi4KKworICAgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBi eSBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uLgorCisgICBUaGlzIGZp bGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKyNpZm5kZWYgTkRTMzJfVERFUF9ICisjZGVmaW5lIE5EUzMyX1RE RVBfSAorCitlbnVtIG5kczMyX3JlZ251bQoreworICAvKiBHZW5lcmFsIHB1 cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKyAgTkRTMzJfUjBfUkVHTlVNID0gMCwK KyAgTkRTMzJfUjVfUkVHTlVNID0gNSwKKyAgTkRTMzJfVEFfUkVHTlVNID0g MTUsCQkvKiBUZW1wb3JhcnkgcmVnaXN0ZXIuICAqLworICBORFMzMl9GUF9S RUdOVU0gPSAyOCwJCS8qIEZyYW1lIHBvaW50ZXIuICAqLworICBORFMzMl9H UF9SRUdOVU0gPSAyOSwJCS8qIEdsb2JhbCBwb2ludGVyLiAgKi8KKyAgTkRT MzJfTFBfUkVHTlVNID0gMzAsCQkvKiBMaW5rIHBvaW50ZXIuICAqLworICBO RFMzMl9TUF9SRUdOVU0gPSAzMSwJCS8qIFN0YWNrIHBvaW50ZXIuICAqLwor CisgIE5EUzMyX1BDX1JFR05VTSA9IDMyLAkJLyogUHJvZ3JhbSBjb3VudGVy LiAgKi8KKworICBORFMzMl9OVU1fUkVHUywKKworICAvKiBUaGUgZmlyc3Qg ZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZy1wb2ludCByZWdpc3Rlci4gICov CisgIE5EUzMyX0ZEMF9SRUdOVU0gPSBORFMzMl9OVU1fUkVHUywKK307CisK K3N0cnVjdCBnZGJhcmNoX3RkZXAKK3sKKyAgLyogVGhlIGd1ZXNzZWQgRlBV IGNvbmZpZ3VyYXRpb24uICAqLworICBpbnQgZnB1X2ZyZWc7CisgIC8qIEZT UnMgYXJlIGRlZmluZWQgYXMgcHNldWRvIHJlZ2lzdGVycy4gICovCisgIGlu dCB1c2VfcHNldWRvX2ZzcnM7CisgIC8qIENhY2hlZCByZWdudW0gb2YgdGhl IGZpcnN0IEZTUiAoRlMwKS4gICovCisgIGludCBmczBfcmVnbnVtOworICAv KiBFTEYgQUJJIGluZm8uICAqLworICBpbnQgZWxmX2FiaTsKK307CisjZW5k aWYgLyogTkRTMzJfVERFUF9IICovCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL2Zsb2F0LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJh c2UvZmxvYXQuZXhwCmluZGV4IDkzOWYwN2YuLmJjM2UyMzAgMTAwNjQ0Ci0t LSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZmxvYXQuZXhwCisrKyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2UvZmxvYXQuZXhwCkBAIC03Niw2ICs3Niwx NSBAQCBpZiB7IFtpc19hYXJjaDY0X3RhcmdldF0gfSB0aGVuIHsKIAkgICAg ICBwYXNzICJpbmZvIGZsb2F0ICh3aXRoIEZQVSkiCiAJICB9CiAgICAgfQor fSBlbHNlaWYgW2lzdGFyZ2V0ICJuZHMzMiotKi0qIl0gdGhlbiB7CisgICAg Z2RiX3Rlc3RfbXVsdGlwbGUgImluZm8gZmxvYXQiICJpbmZvX2Zsb2F0IiB7 CisgICAgICAgIC1yZSAiZmQwLipmZDMuKiRnZGJfcHJvbXB0ICQiIHsKKyAg ICAgICAgICAgIHBhc3MgImluZm8gZmxvYXQgKHdpdGggRlBVKSIKKwl9Cisg ICAgICAgIC1yZSAiTm8gZmxvYXRpbmcucG9pbnQgaW5mbyBhdmFpbGFibGUg Zm9yIHRoaXMgcHJvY2Vzc29yLioiIHsKKyAgICAgICAgICAgIHBhc3MgImlu Zm8gZmxvYXQgKHdpdGhvdXQgRlBVKSIKKwl9CisgICAgfQogfSBlbHNlaWYg W2lzdGFyZ2V0ICJwb3dlcnBjKi0qLSoiXSB0aGVuIHsKICAgICBnZGJfdGVz dF9tdWx0aXBsZSAiaW5mbyBmbG9hdCIgImluZm9fZmxvYXQiIHsKICAgICAg ICAgLXJlICJmMC4qZjEuKmYzMS4qZnBzY3IuKiRnZGJfcHJvbXB0ICQiIHsK ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnhtbC90ZGVzYy1yZWdz LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnhtbC90ZGVzYy1yZWdzLmV4cApp bmRleCA0ODIwNGNkLi5jMTk3ZTI4IDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1 aXRlL2dkYi54bWwvdGRlc2MtcmVncy5leHAKKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIueG1sL3RkZXNjLXJlZ3MuZXhwCkBAIC0zOSw2ICszOSw5IEBAIHN3 aXRjaCAtZ2xvYiAtLSBbaXN0YXJnZXRdIHsKICAgICAibWlwcyotKi0qIiB7 CiAJc2V0IGNvcmUtcmVncyB7bWlwcy1jcHUueG1sIG1pcHMtY3AwLnhtbCBt aXBzLWZwdS54bWwgbWlwcy1kc3AueG1sfQogICAgIH0KKyAgICAibmRzMzIq LSotKiIgeworCXNldCBjb3JlLXJlZ3Mge25kczMyLWNvcmUueG1sfQorICAg IH0KICAgICAibmlvczItKi0qIiB7CiAJc2V0IGNvcmUtcmVncyB7bmlvczIt Y3B1LnhtbH0KICAgICB9Ci0tIAoxLjcuOS41Cgo= --001a1141623e0e207a05349d85c1--