From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 124886 invoked by alias); 5 May 2016 07:16:54 -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 124856 invoked by uid 89); 5 May 2016 07:16:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.3 required=5.0 tests=BAYES_50,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=doctype, !doctype, DOCTYPE, !DOCTYPE X-HELO: mail-pf0-f173.google.com Received: from mail-pf0-f173.google.com (HELO mail-pf0-f173.google.com) (209.85.192.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 05 May 2016 07:16:34 +0000 Received: by mail-pf0-f173.google.com with SMTP id y69so34382540pfb.1 for ; Thu, 05 May 2016 00:16:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version; bh=Ab1ibhRxtzrtIdWw7leJxUnx3fex9n7qRTrdgAqDCxk=; b=UHyE+Klv5jbMiBHQpmnjUm2PsnC4xLvUN3CsM7FQtq9TyOIGj3klyA9d2cydVuzPgF 3knpwX3Qu3RRk7n0ikOGHjzcigVrgGrVx1oF0JQD6ONiaSFHr5BiOAiI1S1VQ4xgWU8Y d2LR2RFycRsxPwvdFbGsElubDMxESLs73OxWC+3RTS3h92flxLHs69BEzEXOeTjT8Cd3 BHdrOpB9Jav+PZocGSwDB+qKNac07Bnf8P6pPlhVnhswWSCVyM5Gbj4d+KGJLxEwB7cx xy/4ObkboSBbn+v2WZan6z/u2iX5pup0DewEn/vTBd8o6+0WivXT0k0b6kU7Y/iT+bMA M0KQ== X-Gm-Message-State: AOPr4FVwajQ4na8jwaXOpO7vBuXns8zIdY07zDqacrKZub2RRe8wddvtznzGVuMvJhwHZg== X-Received: by 10.98.3.135 with SMTP id 129mr18250536pfd.42.1462432592693; Thu, 05 May 2016 00:16:32 -0700 (PDT) Received: from [0.0.0.0] (alumni.cs.nctu.edu.tw. [140.113.235.116]) by smtp.gmail.com with ESMTPSA id c2sm10921080pfc.40.2016.05.05.00.16.31 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 05 May 2016 00:16:32 -0700 (PDT) To: gdb-patches@sourceware.org From: Yan-Ting Lin Subject: [PATCH v2] AndesTech NDS32 port Message-ID: <3561f390-ea41-2ee3-a5a9-d870429497c3@gmail.com> Date: Thu, 05 May 2016 07:16:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------20825A081DDF448ED6E96F8F" X-SW-Source: 2016-05/txt/msg00068.txt.bz2 This is a multi-part message in MIME format. --------------20825A081DDF448ED6E96F8F Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 1149 Hi GDB maintainers and reviewers, On behalf of Andes Technology Corporation, we are submitting a new port NDS32 for GDB contribution. This patch includes 1. code and target-description for target NDS32. 2. testsuite tweak. 3. configure setting to enable GDB building for target NDS32. We have already signed FSF agreement. Thanks for your time reviewing our patch. ChangeLog entries: /: 2016-05-05 Yan-Ting Lin * configure.ac: Enable GDB building for target NDS32. * configure: Regenerate. gdb/: 2016-05-05 Yan-Ting Lin * Makefile.in: Add NDS32. * NEWS: Mention new NDS32 port. * configure.tgt: Add NDS32. * nds32-tdep.c: New file. * nds32-tdep.h: New file. * features/Makefile: Add NDS32. * features/nds32-core.xml: New file. * features/nds32-fpu.xml: New file. * features/nds32-system.xml: New file. * features/nds32.xml: New file. * features/nds32.c: New file (generated). gdb/testsuite/: 2016-05-05 Yan-Ting Lin * testsuite/gdb.base/float.exp: Add target check for nds32*-*-*. * testsuite/gdb.xml/tdesc-regs.exp: Set core-regs for nds32*-*-*. --------------20825A081DDF448ED6E96F8F Content-Type: text/plain; charset=UTF-8; name="0001-gdb-new-AndesTech-NDS32-port.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-gdb-new-AndesTech-NDS32-port.patch" Content-length: 110500 RnJvbSBjN2UyMDYzMzZkNTQzOTJjNTkwYjU2MGM1NGQ4MjZhZDk2ZGUyMDQ0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZYW4tVGluZyBMaW4g PGN1cnJ5Z3Q1MkBnbWFpbC5jb20+CkRhdGU6IFRodSwgNSBNYXkgMjAxNiAx MToxOTo0NyArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGdkYjogbmV3IEFuZGVz VGVjaCBORFMzMiBwb3J0CgotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDIgKy0KIGNvbmZpZ3VyZS5hYyAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIGdkYi9NYWtlZmlsZS5pbiAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIGdkYi9ORVdTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogZ2RiL2NvbmZpZ3Vy ZS50Z3QgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBnZGIvZmVhdHVy ZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICAxICsKIGdkYi9mZWF0 dXJlcy9uZHMzMi1jb3JlLnhtbCAgICAgICAgICB8ICAgNDQgKwogZ2RiL2Zl YXR1cmVzL25kczMyLWZwdS54bWwgICAgICAgICAgIHwgICA0MiArCiBnZGIv ZmVhdHVyZXMvbmRzMzItc3lzdGVtLnhtbCAgICAgICAgfCAgIDE0ICsKIGdk Yi9mZWF0dXJlcy9uZHMzMi5jICAgICAgICAgICAgICAgICB8ICAgOTIgKysK IGdkYi9mZWF0dXJlcy9uZHMzMi54bWwgICAgICAgICAgICAgICB8ICAgMTQg KwogZ2RiL25kczMyLXRkZXAuYyAgICAgICAgICAgICAgICAgICAgIHwgMjE5 MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnZGIvbmRz MzItdGRlcC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDYxICsKIGdkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvZmxvYXQuZXhwICAgICB8ICAgIDkgKwogZ2Ri L3Rlc3RzdWl0ZS9nZGIueG1sL3RkZXNjLXJlZ3MuZXhwIHwgICAgMyArCiAx NSBmaWxlcyBjaGFuZ2VkLCAyNDg1IGluc2VydGlvbnMoKyksIDMgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL2ZlYXR1cmVzL25kczMy LWNvcmUueG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL2ZlYXR1cmVzL25k czMyLWZwdS54bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvZmVhdHVyZXMv bmRzMzItc3lzdGVtLnhtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9mZWF0 dXJlcy9uZHMzMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL2ZlYXR1cmVz L25kczMyLnhtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi9uZHMzMi10ZGVw LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvbmRzMzItdGRlcC5oCgpkaWZm IC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDM1ZjIzMWUu LjY3ZjcxZmEgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1 cmUKQEAgLTM5MzgsNyArMzkzOCw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4K ICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgZ3Byb2YiCiAgICAg OzsKICAgbmRzMzIqLSotKikKLSAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZp Z2RpcnMgZ2RiIgorICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyIK ICAgICA7OwogICBudnB0eCotKi0qKQogICAgIG5vY29uZmlnZGlycz0iJG5v Y29uZmlnZGlycyB0YXJnZXQtbGlic3NwIHRhcmdldC1saWJzdGRjKystdjMg dGFyZ2V0LWxpYm9iamMiCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9j b25maWd1cmUuYWMKaW5kZXggNzRiZjU4YS4uZjc0MjdiNSAxMDA2NDQKLS0t IGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMTI3NCw3 ICsxMjc0LDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgogICAgIG5vY29uZmln ZGlycz0iJG5vY29uZmlnZGlycyBncHJvZiIKICAgICA7OwogICBuZHMzMiot Ki0qKQotICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBnZGIiCisg ICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIgogICAgIDs7CiAgIG52 cHR4Ki0qLSopCiAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRh cmdldC1saWJzc3AgdGFyZ2V0LWxpYnN0ZGMrKy12MyB0YXJnZXQtbGlib2Jq YyIKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmls ZS5pbgppbmRleCAyYWY3OGE1Li40MDI2OTUwIDEwMDY0NAotLS0gYS9nZGIv TWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC02OTEsNiAr NjkxLDcgQEAgQUxMX1RBUkdFVF9PQlMgPSBcCiAJbW94aWUtdGRlcC5vIFwK IAltc3A0MzAtdGRlcC5vIFwKIAltdC10ZGVwLm8gXAorCW5kczMyLXRkZXAu byBcCiAJbmlvczItdGRlcC5vIG5pb3MyLWxpbnV4LXRkZXAubyBcCiAJbnRv LXRkZXAubyBcCiAJcHBjLWxpbnV4LXRkZXAubyBwcGNmYnNkLXRkZXAubyBw cGNuYnNkLXRkZXAubyBwcGNvYnNkLXRkZXAubyAgXApAQCAtOTY2LDcgKzk2 Nyw3IEBAIGFtZDY0LWRhcndpbi10ZGVwLmggY2hhcnNldC1saXN0LmggXAog Y29uZmlnL2RqZ3BwL2xhbmdpbmZvLmggY29uZmlnL2RqZ3BwL25sX3R5cGVz LmggZGFyd2luLW5hdC5oIFwKIGRpY29zLXRkZXAuaCBmaWxlc3lzdGVtLmgg Z2NvcmUuaCBnZGJfd2NoYXIuaCBocHBhYnNkLXRkZXAuaCBcCiBpMzg2LWRh cndpbi10ZGVwLmggeDg2LW5hdC5oIGxpbnV4LXJlY29yZC5oIG1veGllLXRk ZXAuaCBuaW9zMi10ZGVwLmggXAotZnQzMi10ZGVwLmggXAorZnQzMi10ZGVw LmggbmRzMzItdGRlcC5oIFwKIG9zZGF0YS5oIHByb2Nmcy5oIHB5dGhvbi9w eS1ldmVudC5oIHB5dGhvbi9weS1ldmVudHMuaCBweXRob24vcHktc3RvcGV2 ZW50LmggXAogcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oIHB5dGhvbi9weXRo b24uaCByYXZlbnNjYXItdGhyZWFkLmggcmVjb3JkLmggXAogcmVjb3JkLWZ1 bGwuaCBzb2xpYi1haXguaCBcCkBAIC0xNzIzLDYgKzE3MjQsNyBAQCBBTExE RVBGSUxFUyA9IFwKIAltaXBzbmJzZC1uYXQuYyBtaXBzbmJzZC10ZGVwLmMg XAogCW1pcHM2NG9ic2QtbmF0LmMgbWlwczY0b2JzZC10ZGVwLmMgXAogCW1z cDQzMC10ZGVwLmMgXAorCW5kczMyLXRkZXAuYyBcCiAJbmlvczItdGRlcC5j IG5pb3MyLWxpbnV4LXRkZXAuYyBcCiAJbmJzZC1uYXQuYyBuYnNkLXRkZXAu YyBvYnNkLW5hdC5jIG9ic2QtdGRlcC5jIFwKIAlwb3NpeC1oZGVwLmMgY29t bW9uL3Bvc2l4LXN0cmVycm9yLmMgXApkaWZmIC0tZ2l0IGEvZ2RiL05FV1Mg Yi9nZGIvTkVXUwppbmRleCA3YmYxZTFhLi43NWU4ZjEyIDEwMDY0NAotLS0g YS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpAQCAtNTksNiArNTksMTAgQEAg bWFpbnQgaW5mbyBsaW5lLXRhYmxlIFJFR0VYUAogICBpbmNsdWRpbmcgSklU IGNvbXBpbGluZyBmYXN0IHRyYWNlcG9pbnQncyBjb25kaXRpb25hbCBleHBy ZXNzaW9uCiAgIGJ5dGVjb2RlIGludG8gbmF0aXZlIGNvZGUuCiAKKyogTmV3 IHRhcmdldHMKKworQW5kZXMgTkRTMzIJCQluZHMzMiotKi1lbGYKKwogKioq IENoYW5nZXMgaW4gR0RCIDcuMTEKIAogKiBHREIgbm93IHN1cHBvcnRzIGRl YnVnZ2luZyBrZXJuZWwtYmFzZWQgdGhyZWFkcyBvbiBGcmVlQlNELgpkaWZm IC0tZ2l0IGEvZ2RiL2NvbmZpZ3VyZS50Z3QgYi9nZGIvY29uZmlndXJlLnRn dAppbmRleCBjZDhlMDVkLi43ZjFhYWMzIDEwMDY0NAotLS0gYS9nZGIvY29u ZmlndXJlLnRndAorKysgYi9nZGIvY29uZmlndXJlLnRndApAQCAtMzk0LDYg KzM5NCwxMSBAQCBtdC0qLSopCiAJZ2RiX3RhcmdldF9vYnM9Im10LXRkZXAu byIKIAk7OwogCituZHMzMiotKi1lbGYpCisJIyBUYXJnZXQ6IEFuZGVzVGVj aCBORFMzMiBjb3JlCisJZ2RiX3RhcmdldF9vYnM9Im5kczMyLXRkZXAubyIK Kwk7OworCiBuaW9zMiotKi1saW51eCopCiAJIyBUYXJnZXQ6IEFsdGVyYSBO aW9zIElJIHJ1bm5pbmcgTGludXgKIAlnZGJfdGFyZ2V0X29icz0ibmlvczIt dGRlcC5vIG5pb3MyLWxpbnV4LXRkZXAubyBzb2xpYi1zdnI0Lm8gXApkaWZm IC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlIGIvZ2RiL2ZlYXR1cmVz L01ha2VmaWxlCmluZGV4IGU1YzUxNTQuLjgwOWM4MTEgMTAwNjQ0Ci0tLSBh L2dkYi9mZWF0dXJlcy9NYWtlZmlsZQorKysgYi9nZGIvZmVhdHVyZXMvTWFr ZWZpbGUKQEAgLTE4OSw2ICsxODksNyBAQCBYTUxUT0MgPSBcCiAJbWlwcy1s aW51eC54bWwgXAogCW1pcHM2NC1kc3AtbGludXgueG1sIFwKIAltaXBzNjQt bGludXgueG1sIFwKKwluZHMzMi54bWwgXAogCW5pb3MyLWxpbnV4LnhtbCBc CiAJbmlvczIueG1sIFwKIAlyczYwMDAvcG93ZXJwYy0zMi54bWwgXApkaWZm IC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL25kczMyLWNvcmUueG1sIGIvZ2RiL2Zl YXR1cmVzL25kczMyLWNvcmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmM5OGQ5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIv ZmVhdHVyZXMvbmRzMzItY29yZS54bWwKQEAgLTAsMCArMSw0NCBAQAorPD94 bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMi0y MDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgIENv cHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Ig d2l0aG91dCBtb2RpZmljYXRpb24sCisgICAgIGFyZSBwZXJtaXR0ZWQgaW4g YW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHly aWdodAorICAgICBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2 ZWQuICAtLT4KKworPCFET0NUWVBFIGZlYXR1cmUgU1lTVEVNICJnZGItdGFy Z2V0LmR0ZCI+Cis8ZmVhdHVyZSBuYW1lPSJvcmcuZ251LmdkYi5uZHMzMi5j b3JlIj4KKyAgPHJlZyBuYW1lPSJyMCIgYml0c2l6ZT0iMzIiIHJlZ251bT0i MCIvPgorICA8cmVnIG5hbWU9InIxIiBiaXRzaXplPSIzMiIvPgorICA8cmVn IG5hbWU9InIyIiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIzIiBi aXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI0IiBiaXRzaXplPSIzMiIv PgorICA8cmVnIG5hbWU9InI1IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5h bWU9InI2IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI3IiBiaXRz aXplPSIzMiIvPgorICA8cmVnIG5hbWU9InI4IiBiaXRzaXplPSIzMiIvPgor ICA8cmVnIG5hbWU9InI5IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9 InIxMCIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMTEiIGJpdHNp emU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjEyIiBiaXRzaXplPSIzMiIvPgor ICA8cmVnIG5hbWU9InIxMyIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1l PSJyMTQiIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjE1IiBiaXRz aXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIxNiIgYml0c2l6ZT0iMzIiLz4K KyAgPHJlZyBuYW1lPSJyMTciIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFt ZT0icjE4IiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9InIxOSIgYml0 c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMjAiIGJpdHNpemU9IjMyIi8+ CisgIDxyZWcgbmFtZT0icjIxIiBiaXRzaXplPSIzMiIvPgorICA8cmVnIG5h bWU9InIyMiIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBuYW1lPSJyMjMiIGJp dHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjI0IiBiaXRzaXplPSIzMiIv PgorICA8cmVnIG5hbWU9InIyNSIgYml0c2l6ZT0iMzIiLz4KKyAgPHJlZyBu YW1lPSJyMjYiIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0icjI3IiBi aXRzaXplPSIzMiIvPgorICA8cmVnIG5hbWU9ImZwIiBiaXRzaXplPSIzMiIg dHlwZT0iZGF0YV9wdHIiLz4KKyAgPHJlZyBuYW1lPSJncCIgYml0c2l6ZT0i MzIiIHR5cGU9ImRhdGFfcHRyIi8+CisgIDxyZWcgbmFtZT0ibHAiIGJpdHNp emU9IjMyIiB0eXBlPSJjb2RlX3B0ciIvPgorICA8cmVnIG5hbWU9InNwIiBi aXRzaXplPSIzMiIgdHlwZT0iZGF0YV9wdHIiLz4KKworICA8cmVnIG5hbWU9 InBjIiBiaXRzaXplPSIzMiIgdHlwZT0iY29kZV9wdHIiLz4KKzwvZmVhdHVy ZT4KZGlmZiAtLWdpdCBhL2dkYi9mZWF0dXJlcy9uZHMzMi1mcHUueG1sIGIv Z2RiL2ZlYXR1cmVzL25kczMyLWZwdS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMGM2MGNhMwotLS0gL2Rldi9udWxsCisrKyBi L2dkYi9mZWF0dXJlcy9uZHMzMi1mcHUueG1sCkBAIC0wLDAgKzEsNDIgQEAK Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIw MTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAg ICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRo IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVk IGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBj b3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJl c2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2Ri LXRhcmdldC5kdGQiPgorPGZlYXR1cmUgbmFtZT0ib3JnLmdudS5nZGIubmRz MzIuZnB1Ij4KKyAgPHJlZyBuYW1lPSJmZDAiIGJpdHNpemU9IjY0IiB0eXBl PSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0i ZmQxIiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJm bG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMiIgYml0c2l6ZT0iNjQiIHR5cGU9 ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJm ZDMiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZs b2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQ0IiBiaXRzaXplPSI2NCIgdHlwZT0i aWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZk NSIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxv YXQiLz4KKyAgPHJlZyBuYW1lPSJmZDYiIGJpdHNpemU9IjY0IiB0eXBlPSJp ZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQ3 IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9h dCIvPgorICA8cmVnIG5hbWU9ImZkOCIgYml0c2l6ZT0iNjQiIHR5cGU9Imll ZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDki IGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0 Ii8+CisgIDxyZWcgbmFtZT0iZmQxMCIgYml0c2l6ZT0iNjQiIHR5cGU9Imll ZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDEx IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9h dCIvPgorICA8cmVnIG5hbWU9ImZkMTIiIGJpdHNpemU9IjY0IiB0eXBlPSJp ZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQx MyIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxv YXQiLz4KKyAgPHJlZyBuYW1lPSJmZDE0IiBiaXRzaXplPSI2NCIgdHlwZT0i aWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZk MTUiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZs b2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQxNiIgYml0c2l6ZT0iNjQiIHR5cGU9 ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJm ZDE3IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJm bG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMTgiIGJpdHNpemU9IjY0IiB0eXBl PSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0i ZmQxOSIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0i ZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDIwIiBiaXRzaXplPSI2NCIgdHlw ZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9 ImZkMjEiIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9 ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQyMiIgYml0c2l6ZT0iNjQiIHR5 cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1l PSJmZDIzIiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdyb3Vw PSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMjQiIGJpdHNpemU9IjY0IiB0 eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFt ZT0iZmQyNSIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBncm91 cD0iZmxvYXQiLz4KKyAgPHJlZyBuYW1lPSJmZDI2IiBiaXRzaXplPSI2NCIg dHlwZT0iaWVlZV9kb3VibGUiIGdyb3VwPSJmbG9hdCIvPgorICA8cmVnIG5h bWU9ImZkMjciIGJpdHNpemU9IjY0IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3Jv dXA9ImZsb2F0Ii8+CisgIDxyZWcgbmFtZT0iZmQyOCIgYml0c2l6ZT0iNjQi IHR5cGU9ImllZWVfZG91YmxlIiBncm91cD0iZmxvYXQiLz4KKyAgPHJlZyBu YW1lPSJmZDI5IiBiaXRzaXplPSI2NCIgdHlwZT0iaWVlZV9kb3VibGUiIGdy b3VwPSJmbG9hdCIvPgorICA8cmVnIG5hbWU9ImZkMzAiIGJpdHNpemU9IjY0 IiB0eXBlPSJpZWVlX2RvdWJsZSIgZ3JvdXA9ImZsb2F0Ii8+CisgIDxyZWcg bmFtZT0iZmQzMSIgYml0c2l6ZT0iNjQiIHR5cGU9ImllZWVfZG91YmxlIiBn cm91cD0iZmxvYXQiLz4KKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2dkYi9m ZWF0dXJlcy9uZHMzMi1zeXN0ZW0ueG1sIGIvZ2RiL2ZlYXR1cmVzL25kczMy LXN5c3RlbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYjc3MmRhYwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9mZWF0dXJlcy9u ZHMzMi1zeXN0ZW0ueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNp b249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFu ZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQg bW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRp dW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAg ICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+ CisKKzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQi PgorPGZlYXR1cmUgbmFtZT0ib3JnLmdudS5nZGIubmRzMzIuc3lzdGVtIj4K KyAgPHJlZyBuYW1lPSJpcjAiIGJpdHNpemU9IjMyIi8+CisKKyAgPHJlZyBu YW1lPSJpdGIiIGJpdHNpemU9IjMyIi8+CisgIDxyZWcgbmFtZT0iaWZjX2xw IiBiaXRzaXplPSIzMiIvPgorPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZ2Ri L2ZlYXR1cmVzL25kczMyLmMgYi9nZGIvZmVhdHVyZXMvbmRzMzIuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWY2M2Y1Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2RiL2ZlYXR1cmVzL25kczMyLmMKQEAgLTAsMCAr MSw5MiBAQAorLyogVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBidWZm ZXItcmVhZC1vbmx5OiB0IC0qLSB2aTpzZXQgcm86CisgIE9yaWdpbmFsOiBu ZHMzMi54bWwgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJv c2FiaS5oIgorI2luY2x1ZGUgInRhcmdldC1kZXNjcmlwdGlvbnMuaCIKKwor c3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY19uZHMzMjsKK3N0YXRpYyB2b2lk Citpbml0aWFsaXplX3RkZXNjX25kczMyICh2b2lkKQoreworICBzdHJ1Y3Qg dGFyZ2V0X2Rlc2MgKnJlc3VsdCA9IGFsbG9jYXRlX3RhcmdldF9kZXNjcmlw dGlvbiAoKTsKKyAgc3RydWN0IHRkZXNjX2ZlYXR1cmUgKmZlYXR1cmU7CisK KyAgc2V0X3RkZXNjX2FyY2hpdGVjdHVyZSAocmVzdWx0LCBiZmRfc2Nhbl9h cmNoICgibjFoIikpOworCisgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVfZmVh dHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIubmRzMzIuY29yZSIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjAiLCAwLCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEi LCAxLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjIiLCAyLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjMiLCAzLCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjQi LCA0LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjUiLCA1LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjYiLCA2LCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjci LCA3LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAicjgiLCA4LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjkiLCA5LCAxLCBOVUxMLCAz MiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjEw IiwgMTAsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9y ZWcgKGZlYXR1cmUsICJyMTEiLCAxMSwgMSwgTlVMTCwgMzIsICJpbnQiKTsK KyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxMiIsIDEyLCAxLCBO VUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJl LCAicjEzIiwgMTMsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2Ny ZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTQiLCAxNCwgMSwgTlVMTCwgMzIsICJp bnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxNSIsIDE1 LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChm ZWF0dXJlLCAicjE2IiwgMTYsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRk ZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTciLCAxNywgMSwgTlVMTCwg MzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIx OCIsIDE4LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVf cmVnIChmZWF0dXJlLCAicjE5IiwgMTksIDEsIE5VTEwsIDMyLCAiaW50Iik7 CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMjAiLCAyMCwgMSwg TlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVy ZSwgInIyMSIsIDIxLCAxLCBOVUxMLCAzMiwgImludCIpOworICB0ZGVzY19j cmVhdGVfcmVnIChmZWF0dXJlLCAicjIyIiwgMjIsIDEsIE5VTEwsIDMyLCAi aW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMjMiLCAy MywgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgInIyNCIsIDI0LCAxLCBOVUxMLCAzMiwgImludCIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjI1IiwgMjUsIDEsIE5VTEws IDMyLCAiaW50Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJy MjYiLCAyNiwgMSwgTlVMTCwgMzIsICJpbnQiKTsKKyAgdGRlc2NfY3JlYXRl X3JlZyAoZmVhdHVyZSwgInIyNyIsIDI3LCAxLCBOVUxMLCAzMiwgImludCIp OworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZnAiLCAyOCwgMSwg TlVMTCwgMzIsICJkYXRhX3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChm ZWF0dXJlLCAiZ3AiLCAyOSwgMSwgTlVMTCwgMzIsICJkYXRhX3B0ciIpOwor ICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAibHAiLCAzMCwgMSwgTlVM TCwgMzIsICJjb2RlX3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0 dXJlLCAic3AiLCAzMSwgMSwgTlVMTCwgMzIsICJkYXRhX3B0ciIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicGMiLCAzMiwgMSwgTlVMTCwg MzIsICJjb2RlX3B0ciIpOworCisgIGZlYXR1cmUgPSB0ZGVzY19jcmVhdGVf ZmVhdHVyZSAocmVzdWx0LCAib3JnLmdudS5nZGIubmRzMzIuZnB1Iik7Cisg IHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDAiLCAzMywgMSwgImZs b2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVn IChmZWF0dXJlLCAiZmQxIiwgMzQsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9k b3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMiIs IDM1LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNj X2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDMiLCAzNiwgMSwgImZsb2F0Iiwg NjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0 dXJlLCAiZmQ0IiwgMzcsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUi KTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkNSIsIDM4LCAx LCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0 ZV9yZWcgKGZlYXR1cmUsICJmZDYiLCAzOSwgMSwgImZsb2F0IiwgNjQsICJp ZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAi ZmQ3IiwgNDAsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUiKTsKKyAg dGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkOCIsIDQxLCAxLCAiZmxv YXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcg KGZlYXR1cmUsICJmZDkiLCA0MiwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2Rv dWJsZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQxMCIs IDQzLCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNj X2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDExIiwgNDQsIDEsICJmbG9hdCIs IDY0LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVh dHVyZSwgImZkMTIiLCA0NSwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJs ZSIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQxMyIsIDQ2 LCAxLCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2Ny ZWF0ZV9yZWcgKGZlYXR1cmUsICJmZDE0IiwgNDcsIDEsICJmbG9hdCIsIDY0 LCAiaWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVy ZSwgImZkMTUiLCA0OCwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIp OworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQxNiIsIDQ5LCAx LCAiZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0 ZV9yZWcgKGZlYXR1cmUsICJmZDE3IiwgNTAsIDEsICJmbG9hdCIsIDY0LCAi aWVlZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwg ImZkMTgiLCA1MSwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOwor ICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQxOSIsIDUyLCAxLCAi ZmxvYXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9y ZWcgKGZlYXR1cmUsICJmZDIwIiwgNTMsIDEsICJmbG9hdCIsIDY0LCAiaWVl ZV9kb3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZk MjEiLCA1NCwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0 ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQyMiIsIDU1LCAxLCAiZmxv YXQiLCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcg KGZlYXR1cmUsICJmZDIzIiwgNTYsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9k b3VibGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMjQi LCA1NywgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVz Y19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZmQyNSIsIDU4LCAxLCAiZmxvYXQi LCA2NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZl YXR1cmUsICJmZDI2IiwgNTksIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3Vi bGUiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMjciLCA2 MCwgMSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19j cmVhdGVfcmVnIChmZWF0dXJlLCAiZmQyOCIsIDYxLCAxLCAiZmxvYXQiLCA2 NCwgImllZWVfZG91YmxlIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1 cmUsICJmZDI5IiwgNjIsIDEsICJmbG9hdCIsIDY0LCAiaWVlZV9kb3VibGUi KTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImZkMzAiLCA2Mywg MSwgImZsb2F0IiwgNjQsICJpZWVlX2RvdWJsZSIpOworICB0ZGVzY19jcmVh dGVfcmVnIChmZWF0dXJlLCAiZmQzMSIsIDY0LCAxLCAiZmxvYXQiLCA2NCwg ImllZWVfZG91YmxlIik7CisKKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9m ZWF0dXJlIChyZXN1bHQsICJvcmcuZ251LmdkYi5uZHMzMi5zeXN0ZW0iKTsK KyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImlyMCIsIDY1LCAxLCBO VUxMLCAzMiwgImludCIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJl LCAiaXRiIiwgNjYsIDEsIE5VTEwsIDMyLCAiaW50Iik7CisgIHRkZXNjX2Ny ZWF0ZV9yZWcgKGZlYXR1cmUsICJpZmNfbHAiLCA2NywgMSwgTlVMTCwgMzIs ICJpbnQiKTsKKworICB0ZGVzY19uZHMzMiA9IHJlc3VsdDsKK30KZGlmZiAt LWdpdCBhL2dkYi9mZWF0dXJlcy9uZHMzMi54bWwgYi9nZGIvZmVhdHVyZXMv bmRzMzIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmE3MjhjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZmVhdHVyZXMvbmRz MzIueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/ PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmli dXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0 aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91 dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNl IGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9D VFlQRSB0YXJnZXQgU1lTVEVNICJnZGItdGFyZ2V0LmR0ZCI+Cis8dGFyZ2V0 PgorICA8YXJjaGl0ZWN0dXJlPm5kczMyPC9hcmNoaXRlY3R1cmU+CisgIDx4 aTppbmNsdWRlIGhyZWY9Im5kczMyLWNvcmUueG1sIi8+CisgIDx4aTppbmNs dWRlIGhyZWY9Im5kczMyLWZwdS54bWwiLz4KKyAgPHhpOmluY2x1ZGUgaHJl Zj0ibmRzMzItc3lzdGVtLnhtbCIvPgorPC90YXJnZXQ+CmRpZmYgLS1naXQg YS9nZGIvbmRzMzItdGRlcC5jIGIvZ2RiL25kczMyLXRkZXAuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFkZDVlCi0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL25kczMyLXRkZXAuYwpAQCAtMCwwICsxLDIxOTEg QEAKKy8qIFRhcmdldC1kZXBlbmRlbnQgY29kZSBmb3IgdGhlIE5EUzMyIGFy Y2hpdGVjdHVyZSwgZm9yIEdEQi4KKworICAgQ29weXJpZ2h0IChDKSAyMDEy LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250 cmlidXRlZCBieSBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAi ZnJhbWUuaCIKKyNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIKKyNpbmNsdWRl ICJmcmFtZS1iYXNlLmgiCisjaW5jbHVkZSAic3ltdGFiLmgiCisjaW5jbHVk ZSAiZ2RidHlwZXMuaCIKKyNpbmNsdWRlICJnZGJjb3JlLmgiCisjaW5jbHVk ZSAidmFsdWUuaCIKKyNpbmNsdWRlICJyZWdncm91cHMuaCIKKyNpbmNsdWRl ICJpbmZlcmlvci5oIgorI2luY2x1ZGUgIm9zYWJpLmgiCisjaW5jbHVkZSAi YXJjaC11dGlscy5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVk ZSAiZGlzLWFzbS5oIgorI2luY2x1ZGUgInVzZXItcmVncy5oIgorI2luY2x1 ZGUgImVsZi1iZmQuaCIKKyNpbmNsdWRlICJkd2FyZjItZnJhbWUuaCIKKyNp bmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRp b25zLmgiCisKKyNpbmNsdWRlICJuZHMzMi10ZGVwLmgiCisjaW5jbHVkZSAi ZWxmL25kczMyLmgiCisjaW5jbHVkZSAib3Bjb2RlL25kczMyLmgiCisjaW5j bHVkZSAiZmVhdHVyZXMvbmRzMzIuYyIKKworLyogU2ltcGxlIG1hY3JvcyBm b3IgaW5zdHJ1Y3Rpb24gYW5hbHlzaXMuICAqLworI2RlZmluZSBDSE9QX0JJ VFMoaW5zbiwgbikJKGluc24gJiB+X19NQVNLIChuKSkKKyNkZWZpbmUgTjMy X0xTTVdfRU5BQkxFNChpbnNuKQkoKChpbnNuKSA+PiA2KSAmIDB4ZikKKyNk ZWZpbmUgTjMyX1NNV19BRE0gXAorCU4zMl9UWVBFNCAoTFNNVywgMCwgMCwg MCwgMSwgKE4zMl9MU01XX0FETSA8PCAyKSB8IE4zMl9MU01XX0xTTVcpCisj ZGVmaW5lIE4zMl9MTVdfQklNIFwKKwlOMzJfVFlQRTQgKExTTVcsIDAsIDAs IDAsIDAsIChOMzJfTFNNV19CSU0gPDwgMikgfCBOMzJfTFNNV19MU01XKQor I2RlZmluZSBOMzJfRkxESV9TUCBcCisJTjMyX1RZUEUyIChMREMsIDAsIFJF R19TUCwgMCkKKworZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfbmRzMzJfdGRl cCAodm9pZCk7CisKKy8qIFVzZSBhbiBpbnZhbGlkIGFkZHJlc3MgdmFsdWUg YXMgJ25vdCBhdmFpbGFibGUnIG1hcmtlci4gICovCitlbnVtIHsgUkVHX1VO QVZBSUwgPSAoQ09SRV9BRERSKSAtMSB9OworCisvKiBJbnN0cnVjdGlvbiBn cm91cHMgZm9yIE5EUzMyIGVwaWxvZ3VlIGFuYWx5c2lzLiAgKi8KK2VudW0K K3sKKyAgLyogSW5zdHJ1Y3Rpb25zIHVzZWQgZXZlcnl3aGVyZSwgbm90IG9u bHkgaW4gZXBpbG9ndWUuICAqLworICBJTlNOX05PUk1BTCwKKyAgLyogSW5z dHJ1Y3Rpb25zIHVzZWQgdG8gcmVzZXQgc3AgZm9yIGxvY2FsIHZhcnMsIGFy Z3VtZW50cywgZXRjLiAgKi8KKyAgSU5TTl9SRVNFVF9TUCwKKyAgLyogSW5z dHJ1Y3Rpb25zIHVzZWQgdG8gcmVjb3ZlciBzYXZlZCByZWdzIGFuZCB0byBy ZWNvdmVyIHBhZGRpbmcuICAqLworICBJTlNOX1JFQ09WRVIsCisgIC8qIElu c3RydWN0aW9ucyB1c2VkIHRvIHJldHVybiB0byB0aGUgY2FsbGVyLiAgKi8K KyAgSU5TTl9SRVRVUk4sCisgIC8qIEluc3RydWN0aW9ucyB1c2VkIHRvIHJl Y292ZXIgc2F2ZWQgcmVncyBhbmQgdG8gcmV0dXJuIHRvIHRoZSBjYWxsZXIu ICAqLworICBJTlNOX1JFQ09WRVJfUkVUVVJOLAorfTsKKworc3RhdGljIGNv bnN0IGNoYXIgKmNvbnN0IG5kczMyX3JlZ2lzdGVyX25hbWVzW10gPQorewor ICAvKiAzMiBHUFJzLiAgKi8KKyAgInIwIiwgInIxIiwgInIyIiwgInIzIiwg InI0IiwgInI1IiwgInI2IiwgInI3IiwKKyAgInI4IiwgInI5IiwgInIxMCIs ICJyMTEiLCAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IiwKKyAgInIxNiIs ICJyMTciLCAicjE4IiwgInIxOSIsICJyMjAiLCAicjIxIiwgInIyMiIsICJy MjMiLAorICAicjI0IiwgInIyNSIsICJyMjYiLCAicjI3IiwgImZwIiwgImdw IiwgImxwIiwgInNwIiwKKyAgLyogUEMuICAqLworICAicGMiLAorfTsKKwor c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5kczMyX2Zkcl9yZWdpc3Rlcl9u YW1lc1tdID0KK3sKKyAgImZkMCIsICJmZDEiLCAiZmQyIiwgImZkMyIsICJm ZDQiLCAiZmQ1IiwgImZkNiIsICJmZDciLAorICAiZmQ4IiwgImZkOSIsICJm ZDEwIiwgImZkMTEiLCAiZmQxMiIsICJmZDEzIiwgImZkMTQiLCAiZmQxNSIs CisgICJmZDE2IiwgImZkMTciLCAiZmQxOCIsICJmZDE5IiwgImZkMjAiLCAi ZmQyMSIsICJmZDIyIiwgImZkMjMiLAorICAiZmQyNCIsICJmZDI1IiwgImZk MjYiLCAiZmQyNyIsICJmZDI4IiwgImZkMjkiLCAiZmQzMCIsICJmZDMxIgor fTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5kczMyX2Zzcl9yZWdp c3Rlcl9uYW1lc1tdID0KK3sKKyAgImZzMCIsICJmczEiLCAiZnMyIiwgImZz MyIsICJmczQiLCAiZnM1IiwgImZzNiIsICJmczciLAorICAiZnM4IiwgImZz OSIsICJmczEwIiwgImZzMTEiLCAiZnMxMiIsICJmczEzIiwgImZzMTQiLCAi ZnMxNSIsCisgICJmczE2IiwgImZzMTciLCAiZnMxOCIsICJmczE5IiwgImZz MjAiLCAiZnMyMSIsICJmczIyIiwgImZzMjMiLAorICAiZnMyNCIsICJmczI1 IiwgImZzMjYiLCAiZnMyNyIsICJmczI4IiwgImZzMjkiLCAiZnMzMCIsICJm czMxIgorfTsKKworLyogQWxpYXNlcyBmb3IgcmVnaXN0ZXJzLiAgKi8KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QKK3sKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAg Y29uc3QgY2hhciAqYWxpYXM7Cit9IG5kczMyX3JlZ2lzdGVyX2FsaWFzZXNb XSA9Cit7CisgIHsicjE1IiwgInRhIn0sCisgIHsicjI2IiwgInAwIn0sCisg IHsicjI3IiwgInAxIn0sCisgIHsiZnAiLCAicjI4In0sCisgIHsiZ3AiLCAi cjI5In0sCisgIHsibHAiLCAicjMwIn0sCisgIHsic3AiLCAicjMxIn0sCisK KyAgeyJjcjAiLCAiY3B1X3ZlciJ9LAorICB7ImNyMSIsICJpY21fY2ZnIn0s CisgIHsiY3IyIiwgImRjbV9jZmcifSwKKyAgeyJjcjMiLCAibW11X2NmZyJ9 LAorICB7ImNyNCIsICJtc2NfY2ZnIn0sCisgIHsiY3I1IiwgImNvcmVfaWQi fSwKKyAgeyJjcjYiLCAiZnVjb3BfZXhpc3QifSwKKyAgeyJjcjciLCAibXNj X2NmZzIifSwKKworICB7ImlyMCIsICJwc3cifSwKKyAgeyJpcjEiLCAiaXBz dyJ9LAorICB7ImlyMiIsICJwX3BzdyJ9LAorICB7ImlyMyIsICJpdmIifSwK KyAgeyJpcjQiLCAiZXZhIn0sCisgIHsiaXI1IiwgInBfZXZhIn0sCisgIHsi aXI2IiwgIml0eXBlIn0sCisgIHsiaXI3IiwgInBfaXR5cGUifSwKKyAgeyJp cjgiLCAibWVyciJ9LAorICB7ImlyOSIsICJpcGMifSwKKyAgeyJpcjEwIiwg InBfaXBjIn0sCisgIHsiaXIxMSIsICJvaXBjIn0sCisgIHsiaXIxMiIsICJw X3AwIn0sCisgIHsiaXIxMyIsICJwX3AxIn0sCisgIHsiaXIxNCIsICJpbnRf bWFzayJ9LAorICB7ImlyMTUiLCAiaW50X3BlbmQifSwKKyAgeyJpcjE2Iiwg InNwX3VzciJ9LAorICB7ImlyMTciLCAic3BfcHJpdiJ9LAorICB7ImlyMTgi LCAiaW50X3ByaSJ9LAorICB7ImlyMTkiLCAiaW50X2N0cmwifSwKKyAgeyJp cjIwIiwgInNwX3VzcjEifSwKKyAgeyJpcjIxIiwgInNwX3ByaXYxIn0sCisg IHsiaXIyMiIsICJzcF91c3IyIn0sCisgIHsiaXIyMyIsICJzcF9wcml2MiJ9 LAorICB7ImlyMjQiLCAic3BfdXNyMyJ9LAorICB7ImlyMjUiLCAic3BfcHJp djMifSwKKyAgeyJpcjI2IiwgImludF9tYXNrMiJ9LAorICB7ImlyMjciLCAi aW50X3BlbmQyIn0sCisgIHsiaXIyOCIsICJpbnRfcHJpMiJ9LAorICB7Imly MjkiLCAiaW50X3RyaWdnZXIifSwKKworICB7Im1yMCIsICJtbXVfY3RsIn0s CisgIHsibXIxIiwgImwxX3BwdGIifSwKKyAgeyJtcjIiLCAidGxiX3ZwbiJ9 LAorICB7Im1yMyIsICJ0bGJfZGF0YSJ9LAorICB7Im1yNCIsICJ0bGJfbWlz YyJ9LAorICB7Im1yNSIsICJ2bHB0X2lkeCJ9LAorICB7Im1yNiIsICJpbG1i In0sCisgIHsibXI3IiwgImRsbWIifSwKKyAgeyJtcjgiLCAiY2FjaGVfY3Rs In0sCisgIHsibXI5IiwgImhzbXBfc2FkZHIifSwKKyAgeyJtcjEwIiwgImhz bXBfZWFkZHIifSwKKyAgeyJtcjExIiwgImJnX3JlZ2lvbiJ9LAorCisgIHsi ZHIwIiwgImJwYzAifSwKKyAgeyJkcjEiLCAiYnBjMSJ9LAorICB7ImRyMiIs ICJicGMyIn0sCisgIHsiZHIzIiwgImJwYzMifSwKKyAgeyJkcjQiLCAiYnBj NCJ9LAorICB7ImRyNSIsICJicGM1In0sCisgIHsiZHI2IiwgImJwYzYifSwK KyAgeyJkcjciLCAiYnBjNyJ9LAorICB7ImRyOCIsICJicGEwIn0sCisgIHsi ZHI5IiwgImJwYTEifSwKKyAgeyJkcjEwIiwgImJwYTIifSwKKyAgeyJkcjEx IiwgImJwYTMifSwKKyAgeyJkcjEyIiwgImJwYTQifSwKKyAgeyJkcjEzIiwg ImJwYTUifSwKKyAgeyJkcjE0IiwgImJwYTYifSwKKyAgeyJkcjE1IiwgImJw YTcifSwKKyAgeyJkcjE2IiwgImJwYW0wIn0sCisgIHsiZHIxNyIsICJicGFt MSJ9LAorICB7ImRyMTgiLCAiYnBhbTIifSwKKyAgeyJkcjE5IiwgImJwYW0z In0sCisgIHsiZHIyMCIsICJicGFtNCJ9LAorICB7ImRyMjEiLCAiYnBhbTUi fSwKKyAgeyJkcjIyIiwgImJwYW02In0sCisgIHsiZHIyMyIsICJicGFtNyJ9 LAorICB7ImRyMjQiLCAiYnB2MCJ9LAorICB7ImRyMjUiLCAiYnB2MSJ9LAor ICB7ImRyMjYiLCAiYnB2MiJ9LAorICB7ImRyMjciLCAiYnB2MyJ9LAorICB7 ImRyMjgiLCAiYnB2NCJ9LAorICB7ImRyMjkiLCAiYnB2NSJ9LAorICB7ImRy MzAiLCAiYnB2NiJ9LAorICB7ImRyMzEiLCAiYnB2NyJ9LAorICB7ImRyMzIi LCAiYnBjaWQwIn0sCisgIHsiZHIzMyIsICJicGNpZDEifSwKKyAgeyJkcjM0 IiwgImJwY2lkMiJ9LAorICB7ImRyMzUiLCAiYnBjaWQzIn0sCisgIHsiZHIz NiIsICJicGNpZDQifSwKKyAgeyJkcjM3IiwgImJwY2lkNSJ9LAorICB7ImRy MzgiLCAiYnBjaWQ2In0sCisgIHsiZHIzOSIsICJicGNpZDcifSwKKyAgeyJk cjQwIiwgImVkbV9jZmcifSwKKyAgeyJkcjQxIiwgImVkbXN3In0sCisgIHsi ZHI0MiIsICJlZG1fY3RsIn0sCisgIHsiZHI0MyIsICJlZG1fZHRyIn0sCisg IHsiZHI0NCIsICJicG10YyJ9LAorICB7ImRyNDUiLCAiZGltYnIifSwKKyAg eyJkcjQ2IiwgInRlY3IwIn0sCisgIHsiZHI0NyIsICJ0ZWNyMSJ9LAorCisg IHsiaHNwcjAiLCAiaHNwX2N0bCJ9LAorICB7ImhzcHIxIiwgInNwX2JvdW5k In0sCisgIHsiaHNwcjIiLCAic3BfYm91bmRfcHJpdiJ9LAorCisgIHsicGZy MCIsICJwZm1jMCJ9LAorICB7InBmcjEiLCAicGZtYzEifSwKKyAgeyJwZnIy IiwgInBmbWMyIn0sCisgIHsicGZyMyIsICJwZm1fY3RsIn0sCisgIHsicGZy NCIsICJwZnRfY3RsIn0sCisKKyAgeyJkbWFyMCIsICJkbWFfY2ZnIn0sCisg IHsiZG1hcjEiLCAiZG1hX2djc3cifSwKKyAgeyJkbWFyMiIsICJkbWFfY2hu c2VsIn0sCisgIHsiZG1hcjMiLCAiZG1hX2FjdCJ9LAorICB7ImRtYXI0Iiwg ImRtYV9zZXR1cCJ9LAorICB7ImRtYXI1IiwgImRtYV9pc2FkZHIifSwKKyAg eyJkbWFyNiIsICJkbWFfZXNhZGRyIn0sCisgIHsiZG1hcjciLCAiZG1hX3Rj bnQifSwKKyAgeyJkbWFyOCIsICJkbWFfc3RhdHVzIn0sCisgIHsiZG1hcjki LCAiZG1hXzJkc2V0In0sCisgIHsiZG1hcjEwIiwgImRtYV8yZHNjdGwifSwK KyAgeyJkbWFyMTEiLCAiZG1hX3JjbnQifSwKKyAgeyJkbWFyMTIiLCAiZG1h X2hzdGF0dXMifSwKKworICB7InJhY3IwIiwgInBydXNyX2FjY19jdGwifSwK KyAgeyJmdWNwciIsICJmdWNvcF9jdGwifSwKKworICB7ImlkcjAiLCAic2R6 X2N0bCJ9LAorICB7ImlkcjEiLCAibWlzY19jdGwifSwKKyAgeyJpZHIyIiwg ImVjY19taXNjIn0sCisKKyAgeyJzZWN1cjAiLCAic2ZjciJ9LAorICB7InNl Y3VyMSIsICJzaWduIn0sCisgIHsic2VjdXIyIiwgImlzaWduIn0sCisgIHsi c2VjdXIzIiwgInBfaXNpZ24ifSwKK307CisKKy8qIFZhbHVlIG9mIGEgcmVn aXN0ZXIgYWxpYXMuICBCQVRPTiBpcyB0aGUgcmVnbnVtIG9mIHRoZSBjb3Jy ZXNwb25kaW5nCisgICByZWdpc3Rlci4gICovCisKK3N0YXRpYyBzdHJ1Y3Qg dmFsdWUgKgordmFsdWVfb2ZfbmRzMzJfcmVnIChzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWUsIGNvbnN0IHZvaWQgKmJhdG9uKQoreworICByZXR1cm4gdmFs dWVfb2ZfcmVnaXN0ZXIgKChpbnQpIChpbnRwdHJfdCkgYmF0b24sIGZyYW1l KTsKK30KKwwKKy8qIEltcGxlbWVudCB0aGUgImZyYW1lX2FsaWduIiBnZGJh cmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBDT1JFX0FERFIKK25kczMyX2Zy YW1lX2FsaWduIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERS IHNwKQoreworICAvKiA4LWJ5dGUgYWxpZ25lZC4gICovCisgIHJldHVybiBh bGlnbl9kb3duIChzcCwgOCk7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgImJy ZWFrcG9pbnRfZnJvbV9wYyIgZ2RiYXJjaCBtZXRob2QuCisKKyAgIFVzZSB0 aGUgcHJvZ3JhbSBjb3VudGVyIHRvIGRldGVybWluZSB0aGUgY29udGVudHMg YW5kIHNpemUgb2YgYQorICAgYnJlYWtwb2ludCBpbnN0cnVjdGlvbi4gIFJl dHVybiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgb2YgYnl0ZXMgdGhhdAorICAg ZW5jb2RlIGEgYnJlYWtwb2ludCBpbnN0cnVjdGlvbiwgc3RvcmUgdGhlIGxl bmd0aCBvZiB0aGUgc3RyaW5nIGluCisgICAqTEVOUFRSIGFuZCBvcHRpb25h bGx5IGFkanVzdCAqUENQVFIgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgbWVt b3J5CisgICBsb2NhdGlvbiBmb3IgaW5zZXJ0aW5nIHRoZSBicmVha3BvaW50 LiAgKi8KKworc3RhdGljIGNvbnN0IGdkYl9ieXRlICoKK25kczMyX2JyZWFr cG9pbnRfZnJvbV9wYyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVf QUREUiAqcGNwdHIsCisJCQkgIGludCAqbGVucHRyKQoreworICAvKiBUaGUg c2FtZSBpbnNuIG1hY2hpbmUgY29kZSBpcyB1c2VkIGZvciBsaXR0bGUtZW5k aWFuIGFuZCBiaWctZW5kaWFuLiAgKi8KKyAgc3RhdGljIGNvbnN0IGdkYl9i eXRlIGJyZWFrX2luc25bXSA9IHsgMHhFQSwgMHgwMCB9OworCisgICpsZW5w dHIgPSBzaXplb2YgKGJyZWFrX2luc24pOworICByZXR1cm4gYnJlYWtfaW5z bjsKK30KKworLyogSW1wbGVtZW50IHRoZSAiZHdhcmYyX3JlZ190b19yZWdu dW0iIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIGludAorbmRzMzJf ZHdhcmYyX3JlZ190b19yZWdudW0gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNo LCBpbnQgbnVtKQoreworICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0g Z2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKyAgY29uc3QgaW50IEZTUiA9IDM4 OworICBjb25zdCBpbnQgRkRSID0gRlNSICsgMzI7CisKKyAgaWYgKG51bSA+ PSAwICYmIG51bSA8IDMyKQorICAgIHsKKyAgICAgIC8qIEdlbmVyYWwtcHVy cG9zZSByZWdpc3RlcnMgKFIwIC0gUjMxKS4gICovCisgICAgICByZXR1cm4g bnVtOworICAgIH0KKyAgZWxzZSBpZiAobnVtID49IEZTUiAmJiBudW0gPCBG U1IgKyAzMikKKyAgICB7CisgICAgICAvKiBTaW5nbGUgcHJlY2lzaW9uIGZs b2F0aW5nLXBvaW50IHJlZ2lzdGVycyAoRlMwIC0gRlMzMSkuICAqLworICAg ICAgcmV0dXJuIG51bSAtIEZTUiArIHRkZXAtPmZzMF9yZWdudW07CisgICAg fQorICBlbHNlIGlmIChudW0gPj0gRkRSICYmIG51bSA8IEZEUiArIDMyKQor ICAgIHsKKyAgICAgIC8qIERvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmctcG9p bnQgcmVnaXN0ZXJzIChGRDAgLSBGRDMxKS4gICovCisgICAgICByZXR1cm4g bnVtIC0gRkRSICsgdGRlcC0+ZmQwX3JlZ251bTsKKyAgICB9CisKKyAgLyog Tm8gbWF0Y2gsIHJldHVybiBhIGluYWNjZXNzaWJsZSByZWdpc3RlciBudW1i ZXIuICAqLworICByZXR1cm4gLTE7Cit9CisMCisvKiBORFMzMiByZWdpc3Rl ciBncm91cHMuICAqLworc3RhdGljIHN0cnVjdCByZWdncm91cCAqbmRzMzJf Y3JfcmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMzMl9p cl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVnZ3JvdXAgKm5kczMyX21y X3JlZ2dyb3VwOworc3RhdGljIHN0cnVjdCByZWdncm91cCAqbmRzMzJfZHJf cmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMzMl9wZnJf cmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMzMl9oc3By X3JlZ2dyb3VwOworc3RhdGljIHN0cnVjdCByZWdncm91cCAqbmRzMzJfZG1h cl9yZWdncm91cDsKK3N0YXRpYyBzdHJ1Y3QgcmVnZ3JvdXAgKm5kczMyX3Jh Y3JfcmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMzMl9p ZHJfcmVnZ3JvdXA7CitzdGF0aWMgc3RydWN0IHJlZ2dyb3VwICpuZHMzMl9z ZWN1cl9yZWdncm91cDsKKworc3RhdGljIHZvaWQKK25kczMyX2luaXRfcmVn Z3JvdXBzICh2b2lkKQoreworICBuZHMzMl9jcl9yZWdncm91cCA9IHJlZ2dy b3VwX25ldyAoImNyIiwgVVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX2lyX3Jl Z2dyb3VwID0gcmVnZ3JvdXBfbmV3ICgiaXIiLCBVU0VSX1JFR0dST1VQKTsK KyAgbmRzMzJfbXJfcmVnZ3JvdXAgPSByZWdncm91cF9uZXcgKCJtciIsIFVT RVJfUkVHR1JPVVApOworICBuZHMzMl9kcl9yZWdncm91cCA9IHJlZ2dyb3Vw X25ldyAoImRyIiwgVVNFUl9SRUdHUk9VUCk7CisgIG5kczMyX3Bmcl9yZWdn cm91cCA9IHJlZ2dyb3VwX25ldyAoInBmciIsIFVTRVJfUkVHR1JPVVApOwor ICBuZHMzMl9oc3ByX3JlZ2dyb3VwID0gcmVnZ3JvdXBfbmV3ICgiaHNwciIs IFVTRVJfUkVHR1JPVVApOworICBuZHMzMl9kbWFyX3JlZ2dyb3VwID0gcmVn Z3JvdXBfbmV3ICgiZG1hciIsIFVTRVJfUkVHR1JPVVApOworICBuZHMzMl9y YWNyX3JlZ2dyb3VwID0gcmVnZ3JvdXBfbmV3ICgicmFjciIsIFVTRVJfUkVH R1JPVVApOworICBuZHMzMl9pZHJfcmVnZ3JvdXAgPSByZWdncm91cF9uZXcg KCJpZHIiLCBVU0VSX1JFR0dST1VQKTsKKyAgbmRzMzJfc2VjdXJfcmVnZ3Jv dXAgPSByZWdncm91cF9uZXcgKCJzZWN1ciIsIFVTRVJfUkVHR1JPVVApOwor fQorCitzdGF0aWMgdm9pZAorbmRzMzJfYWRkX3JlZ2dyb3VwcyAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gpCit7CisgIC8qIEFkZCBwcmUtZGVmaW5lZCBy ZWdpc3RlciBncm91cHMuICAqLworICByZWdncm91cF9hZGQgKGdkYmFyY2gs IGdlbmVyYWxfcmVnZ3JvdXApOworICByZWdncm91cF9hZGQgKGdkYmFyY2gs IGZsb2F0X3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBz eXN0ZW1fcmVnZ3JvdXApOworICByZWdncm91cF9hZGQgKGdkYmFyY2gsIGFs bF9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgc2F2ZV9y ZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgcmVzdG9yZV9y ZWdncm91cCk7CisKKyAgLyogQWRkIE5EUzMyIHJlZ2lzdGVyIGdyb3Vwcy4g ICovCisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgbmRzMzJfY3JfcmVnZ3Jv dXApOworICByZWdncm91cF9hZGQgKGdkYmFyY2gsIG5kczMyX2lyX3JlZ2dy b3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNoLCBuZHMzMl9tcl9yZWdn cm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgbmRzMzJfZHJfcmVn Z3JvdXApOworICByZWdncm91cF9hZGQgKGdkYmFyY2gsIG5kczMyX3Bmcl9y ZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgbmRzMzJfaHNw cl9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgbmRzMzJf ZG1hcl9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwgbmRz MzJfcmFjcl9yZWdncm91cCk7CisgIHJlZ2dyb3VwX2FkZCAoZ2RiYXJjaCwg bmRzMzJfaWRyX3JlZ2dyb3VwKTsKKyAgcmVnZ3JvdXBfYWRkIChnZGJhcmNo LCBuZHMzMl9zZWN1cl9yZWdncm91cCk7Cit9CisKKy8qIEltcGxlbWVudCB0 aGUgInJlZ2lzdGVyX3JlZ2dyb3VwX3AiIGdkYmFyY2ggbWV0aG9kLiAgKi8K Kworc3RhdGljIGludAorbmRzMzJfcmVnaXN0ZXJfcmVnZ3JvdXBfcCAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0sCisJCQkgICBzdHJ1 Y3QgcmVnZ3JvdXAgKnJlZ2dyb3VwKQoreworICBjb25zdCBjaGFyICpyZWdf bmFtZTsKKyAgY29uc3QgY2hhciAqZ3JvdXBfbmFtZTsKKyAgaW50IHJldDsK KworICBpZiAocmVnZ3JvdXAgPT0gYWxsX3JlZ2dyb3VwKQorICAgIHJldHVy biAxOworCisgIC8qIEdlbmVyYWwgcmVnZ3JvdXAgY29udGFpbnMgb25seSBH UFJzIGFuZCBQQy4gICovCisgIGlmIChyZWdncm91cCA9PSBnZW5lcmFsX3Jl Z2dyb3VwKQorICAgIHJldHVybiByZWdudW0gPD0gTkRTMzJfUENfUkVHTlVN OworCisgIGlmIChyZWdncm91cCA9PSBmbG9hdF9yZWdncm91cCB8fCByZWdn cm91cCA9PSBzYXZlX3JlZ2dyb3VwCisgICAgICB8fCByZWdncm91cCA9PSBy ZXN0b3JlX3JlZ2dyb3VwKQorICAgIHsKKyAgICAgIHJldCA9IHRkZXNjX3Jl Z2lzdGVyX2luX3JlZ2dyb3VwX3AgKGdkYmFyY2gsIHJlZ251bSwgcmVnZ3Jv dXApOworICAgICAgaWYgKHJldCAhPSAtMSkKKwlyZXR1cm4gcmV0OworCisg ICAgICByZXR1cm4gZGVmYXVsdF9yZWdpc3Rlcl9yZWdncm91cF9wIChnZGJh cmNoLCByZWdudW0sIHJlZ2dyb3VwKTsKKyAgICB9CisKKyAgaWYgKHJlZ2dy b3VwID09IHN5c3RlbV9yZWdncm91cCkKKyAgICByZXR1cm4gKHJlZ251bSA+ IE5EUzMyX1BDX1JFR05VTSkKKwkgICAgJiYgIW5kczMyX3JlZ2lzdGVyX3Jl Z2dyb3VwX3AgKGdkYmFyY2gsIHJlZ251bSwgZmxvYXRfcmVnZ3JvdXApOwor CisgIC8qIFRoZSBORFMzMiByZWdncm91cCBjb250YWlucyByZWdpc3RlcnMg d2hvc2UgbmFtZSBpcyBwcmVmaXhlZAorICAgICBieSByZWdncm91cCBuYW1l LiAgKi8KKyAgcmVnX25hbWUgPSBnZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGdk YmFyY2gsIHJlZ251bSk7CisgIGdyb3VwX25hbWUgPSByZWdncm91cF9uYW1l IChyZWdncm91cCk7CisgIHJldHVybiAhc3RybmNtcCAocmVnX25hbWUsIGdy b3VwX25hbWUsIHN0cmxlbiAoZ3JvdXBfbmFtZSkpOworfQorDAorLyogSW1w bGVtZW50IHRoZSAicHNldWRvX3JlZ2lzdGVyX3R5cGUiIHRkZXNjX2FyY2hf ZGF0YSBtZXRob2QuICAqLworCitzdGF0aWMgc3RydWN0IHR5cGUgKgorbmRz MzJfcHNldWRvX3JlZ2lzdGVyX3R5cGUgKHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoLCBpbnQgcmVnbnVtKQoreworICByZWdudW0gLT0gZ2RiYXJjaF9udW1f cmVncyAoZ2RiYXJjaCk7CisKKyAgLyogQ3VycmVudGx5LCBvbmx5IEZTUnMg Y291bGQgYmUgZGVmaW5lZCBhcyBwc2V1ZG8gcmVnaXN0ZXJzLiAgKi8KKyAg aWYgKHJlZ251bSA8IGdkYmFyY2hfbnVtX3BzZXVkb19yZWdzIChnZGJhcmNo KSkKKyAgICByZXR1cm4gYXJjaF9mbG9hdF90eXBlIChnZGJhcmNoLCAtMSwg ImJ1aWx0aW5fdHlwZV9pZWVlX3NpbmdsZSIsCisJCQkgICAgZmxvYXRmb3Jt YXRzX2llZWVfc2luZ2xlKTsKKworICB3YXJuaW5nIChfKCJVbmtub3duIG5k czMyIHBzZXVkbyByZWdpc3RlciAlZC4iKSwgcmVnbnVtKTsKKyAgcmV0dXJu IE5VTEw7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInBzZXVkb19yZWdpc3Rl cl9uYW1lIiB0ZGVzY19hcmNoX2RhdGEgbWV0aG9kLiAgKi8KKworc3RhdGlj IGNvbnN0IGNoYXIgKgorbmRzMzJfcHNldWRvX3JlZ2lzdGVyX25hbWUgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtKQoreworICByZWdu dW0gLT0gZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCk7CisKKyAgLyogQ3Vy cmVudGx5LCBvbmx5IEZTUnMgY291bGQgYmUgZGVmaW5lZCBhcyBwc2V1ZG8g cmVnaXN0ZXJzLiAgKi8KKyAgaWYgKHJlZ251bSA8IGdkYmFyY2hfbnVtX3Bz ZXVkb19yZWdzIChnZGJhcmNoKSkKKyAgICByZXR1cm4gbmRzMzJfZnNyX3Jl Z2lzdGVyX25hbWVzW3JlZ251bV07CisKKyAgd2FybmluZyAoXygiVW5rbm93 biBuZHMzMiBwc2V1ZG8gcmVnaXN0ZXIgJWQuIiksIHJlZ251bSk7CisgIHJl dHVybiBOVUxMOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJwc2V1ZG9fcmVn aXN0ZXJfcmVhZCIgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgZW51 bSByZWdpc3Rlcl9zdGF0dXMKK25kczMyX3BzZXVkb19yZWdpc3Rlcl9yZWFk IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKwkJCSAgICBzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVtLAorCQkJICAgIGdkYl9ieXRl ICpidWYpCit7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJh cmNoX3RkZXAgKGdkYmFyY2gpOworICBnZGJfYnl0ZSByZWdfYnVmWzhdOwor ICBpbnQgb2Zmc2V0LCBmZHJfcmVnbnVtOworICBlbnVtIHJlZ2lzdGVyX3N0 YXR1cyBzdGF0dXMgPSBSRUdfVU5LTk9XTjsKKworICAvKiBTYW5pdHkgY2hl Y2suICAqLworICBpZiAodGRlcC0+ZnB1X2ZyZWcgPT0gLTEgfHwgdGRlcC0+ dXNlX3BzZXVkb19mc3JzID09IDApCisgICAgcmV0dXJuIHN0YXR1czsKKwor ICByZWdudW0gLT0gZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCk7CisKKyAg LyogQ3VycmVudGx5LCBvbmx5IEZTUnMgY291bGQgYmUgZGVmaW5lZCBhcyBw c2V1ZG8gcmVnaXN0ZXJzLiAgKi8KKyAgaWYgKHJlZ251bSA8IGdkYmFyY2hf bnVtX3BzZXVkb19yZWdzIChnZGJhcmNoKSkKKyAgICB7CisgICAgICAvKiBm czAgaXMgYWx3YXlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGhhbGYgb2YgZmQw LiAgKi8KKyAgICAgIGlmIChnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gp ID09IEJGRF9FTkRJQU5fQklHKQorCW9mZnNldCA9IChyZWdudW0gJiAxKSA/ IDQgOiAwOworICAgICAgZWxzZQorCW9mZnNldCA9IChyZWdudW0gJiAxKSA/ IDAgOiA0OworCisgICAgICBmZHJfcmVnbnVtID0gdGRlcC0+ZmQwX3JlZ251 bSArIChyZWdudW0gPj4gMSk7CisgICAgICBzdGF0dXMgPSByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIGZkcl9yZWdudW0sIHJlZ19idWYpOworICAg ICAgaWYgKHN0YXR1cyA9PSBSRUdfVkFMSUQpCisJbWVtY3B5IChidWYsIHJl Z19idWYgKyBvZmZzZXQsIDQpOworICAgIH0KKworICByZXR1cm4gc3RhdHVz OworfQorCisvKiBJbXBsZW1lbnQgdGhlICJwc2V1ZG9fcmVnaXN0ZXJfd3Jp dGUiIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIHZvaWQKK25kczMy X3BzZXVkb19yZWdpc3Rlcl93cml0ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsCisJCQkgICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCBy ZWdudW0sCisJCQkgICAgIGNvbnN0IGdkYl9ieXRlICpidWYpCit7CisgIHN0 cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFy Y2gpOworICBnZGJfYnl0ZSByZWdfYnVmWzhdOworICBpbnQgb2Zmc2V0LCBm ZHJfcmVnbnVtOworCisgIC8qIFNhbml0eSBjaGVjay4gICovCisgIGlmICh0 ZGVwLT5mcHVfZnJlZyA9PSAtMSB8fCB0ZGVwLT51c2VfcHNldWRvX2ZzcnMg PT0gMCkKKyAgICByZXR1cm47CisKKyAgcmVnbnVtIC09IGdkYmFyY2hfbnVt X3JlZ3MgKGdkYmFyY2gpOworCisgIC8qIEN1cnJlbnRseSwgb25seSBGU1Jz IGNvdWxkIGJlIGRlZmluZWQgYXMgcHNldWRvIHJlZ2lzdGVycy4gICovCisg IGlmIChyZWdudW0gPCBnZGJhcmNoX251bV9wc2V1ZG9fcmVncyAoZ2RiYXJj aCkpCisgICAgeworICAgICAgLyogZnMwIGlzIGFsd2F5cyB0aGUgbW9zdCBz aWduaWZpY2FudCBoYWxmIG9mIGZkMC4gICovCisgICAgICBpZiAoZ2RiYXJj aF9ieXRlX29yZGVyIChnZGJhcmNoKSA9PSBCRkRfRU5ESUFOX0JJRykKKwlv ZmZzZXQgPSAocmVnbnVtICYgMSkgPyA0IDogMDsKKyAgICAgIGVsc2UKKwlv ZmZzZXQgPSAocmVnbnVtICYgMSkgPyAwIDogNDsKKworICAgICAgZmRyX3Jl Z251bSA9IHRkZXAtPmZkMF9yZWdudW0gKyAocmVnbnVtID4+IDEpOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCBmZHJfcmVnbnVtLCBy ZWdfYnVmKTsKKyAgICAgIG1lbWNweSAocmVnX2J1ZiArIG9mZnNldCwgYnVm LCA0KTsKKyAgICAgIHJlZ2NhY2hlX3Jhd193cml0ZSAocmVnY2FjaGUsIGZk cl9yZWdudW0sIHJlZ19idWYpOworICAgIH0KK30KKwwKKy8qIEhlbHBlciBm dW5jdGlvbiBmb3IgTkRTMzIgQUJJLiAgUmV0dXJuIHRydWUgaWYgRlBScyBj YW4gYmUgdXNlZAorICAgdG8gcGFzcyBmdW5jdGlvbiBhcmd1bWVudHMgYW5k IHJldHVybiB2YWx1ZS4gICovCisKK3N0YXRpYyBpbnQKK25kczMyX2FiaV91 c2VfZnByIChpbnQgYWJpKQoreworICByZXR1cm4gYWJpID09IEVfTkRTX0FC SV9WMkZQX1BMVVM7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgTkRT MzIgQUJJLiAgUmV0dXJuIHRydWUgaWYgR1BScyBhbmQgc3RhY2sKKyAgIGNh biBiZSB1c2VkIHRvZ2V0aGVyIHRvIHBhc3MgYW4gYXJndW1lbnQuICAqLwor CitzdGF0aWMgaW50CituZHMzMl9hYmlfc3BsaXQgKGludCBhYmkpCit7Cisg IHJldHVybiBhYmkgPT0gRV9ORFNfQUJJX0FBQkk7Cit9CisKKyNkZWZpbmUg TkRTMzJfTlVNX1NBVkVEX1JFR1MgKE5EUzMyX0xQX1JFR05VTSArIDEpCisK K3N0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZQoreworICAvKiBUaGUgcHJldmlv dXMgZnJhbWUncyBpbm5lciBtb3N0IHN0YWNrIGFkZHJlc3MuICBVc2VkIGFz IHRoaXMKKyAgICAgZnJhbWUgSUQncyBzdGFja19hZGRyLiAgKi8KKyAgQ09S RV9BRERSIHByZXZfc3A7CisKKyAgLyogVGhlIGZyYW1lJ3MgYmFzZSwgb3B0 aW9uYWxseSB1c2VkIGJ5IHRoZSBoaWdoLWxldmVsIGRlYnVnIGluZm8uICAq LworICBDT1JFX0FERFIgYmFzZTsKKworICAvKiBEdXJpbmcgcHJvbG9ndWUg YW5hbHlzaXMsIGtlZXAgaG93IGZhciB0aGUgU1AgYW5kIEZQIGhhdmUgYmVl biBvZmZzZXQKKyAgICAgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrIGZy YW1lIChhcyBkZWZpbmVkIGJ5IHRoZSBwcmV2aW91cyBmcmFtZSdzCisgICAg IHN0YWNrIHBvaW50ZXIpLgorICAgICBEdXJpbmcgZXBpbG9ndWUgYW5hbHlz aXMsIGtlZXAgaG93IGZhciB0aGUgU1AgaGFzIGJlZW4gb2Zmc2V0IGZyb20g dGhlCisgICAgIGN1cnJlbnQgc3RhY2sgcG9pbnRlci4gICovCisgIENPUkVf QUREUiBzcF9vZmZzZXQ7CisgIENPUkVfQUREUiBmcF9vZmZzZXQ7CisgIGlu dCB1c2VfZnJhbWU7CisKKyAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0 IGluc3RydWN0aW9uIGluIHRoaXMgZnVuY3Rpb24uICAqLworICBDT1JFX0FE RFIgcGM7CisKKyAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKyAgQ09SRV9B RERSIHNhdmVkX3JlZ3NbTkRTMzJfTlVNX1NBVkVEX1JFR1NdOworfTsKKwor c3RhdGljIHN0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqCituZHMzMl9hbGxv Y19mcmFtZV9jYWNoZSAodm9pZCkKK3sKKyAgc3RydWN0IG5kczMyX2ZyYW1l X2NhY2hlICpjYWNoZTsKKyAgaW50IGk7CisKKyAgY2FjaGUgPSBGUkFNRV9P QlNUQUNLX1pBTExPQyAoc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlKTsKKwor ICAvKiBTYXZlZCByZWdpc3RlcnMuICBXZSBpbml0aWFsaXplIHRoZXNlIHRv IC0xIHNpbmNlIHplcm8gaXMgYSB2YWxpZAorICAgICBvZmZzZXQuICAqLwor ICBmb3IgKGkgPSAwOyBpIDwgTkRTMzJfTlVNX1NBVkVEX1JFR1M7IGkrKykK KyAgICBjYWNoZS0+c2F2ZWRfcmVnc1tpXSA9IFJFR19VTkFWQUlMOworCisg IHJldHVybiBjYWNoZTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBp bnN0cnVjdGlvbnMgdXNlZCB0byBwdXNoIG11bHRpcGxlIHdvcmRzLiAgKi8K Kworc3RhdGljIHZvaWQKK25kczMyX3B1c2hfbXVsdGlwbGVfd29yZHMgKHN0 cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqY2FjaGUsIGludCByYiwgaW50IHJl LAorCQkJICAgaW50IGVuYWJsZTQpCit7CisgIENPUkVfQUREUiBzcF9vZmZz ZXQgPSBjYWNoZS0+c3Bfb2Zmc2V0OworICBpbnQgaTsKKworICAvKiBDaGVj ayBMUCwgR1AsIEZQIGluIGVuYWJsZTQuICAqLworICBmb3IgKGkgPSAxOyBp IDw9IDM7IGkrKykKKyAgICB7CisgICAgICBpZiAoKGVuYWJsZTQgPj4gaSkg JiAweDEpCisJeworCSAgc3Bfb2Zmc2V0ICs9IDQ7CisJICBjYWNoZS0+c2F2 ZWRfcmVnc1tORFMzMl9TUF9SRUdOVU0gLSBpXSA9IHNwX29mZnNldDsKKwl9 CisgICAgfQorCisgIC8qIFNraXAgY2FzZSB3aGVyZSByZSA9PSByYiA9PSBz cC4gICovCisgIGlmICgocmIgPCBSRUdfRlApICYmIChyZSA8IFJFR19GUCkp CisgICAgeworICAgICAgZm9yIChpID0gcmU7IGkgPj0gcmI7IGktLSkKKwl7 CisJICBzcF9vZmZzZXQgKz0gNDsKKwkgIGNhY2hlLT5zYXZlZF9yZWdzW2ld ID0gc3Bfb2Zmc2V0OworCX0KKyAgICB9CisKKyAgLyogRm9yIHNwLCB1cGRh dGUgdGhlIG9mZnNldC4gICovCisgIGNhY2hlLT5zcF9vZmZzZXQgPSBzcF9v ZmZzZXQ7Cit9CisKKy8qIEFuYWx5emUgdGhlIGluc3RydWN0aW9ucyB3aXRo aW4gdGhlIGdpdmVuIGFkZHJlc3MgcmFuZ2UuICBJZiBDQUNIRQorICAgaXMg bm9uLU5VTEwsIGZpbGwgaXQgaW4uICBSZXR1cm4gdGhlIGZpcnN0IGFkZHJl c3MgYmV5b25kIHRoZSBnaXZlbgorICAgYWRkcmVzcyByYW5nZS4gIElmIENB Q0hFIGlzIE5VTEwsIHJldHVybiB0aGUgZmlyc3QgYWRkcmVzcyBub3QKKyAg IHJlY29nbml6ZWQgYXMgYSBwcm9sb2d1ZSBpbnN0cnVjdGlvbi4gICovCisK K3N0YXRpYyBDT1JFX0FERFIKK25kczMyX2FuYWx5emVfcHJvbG9ndWUgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgcGMsCisJCQlDT1JF X0FERFIgbGltaXRfcGMsIHN0cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqY2Fj aGUpCit7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNo X3RkZXAgKGdkYmFyY2gpOworICBpbnQgYWJpX3VzZV9mcHIgPSBuZHMzMl9h YmlfdXNlX2ZwciAodGRlcC0+YWJpKTsKKyAgLyogQ3VycmVudCBzY2Fubmlu ZyBzdGF0dXMuICAqLworICBpbnQgaW5fcHJvbG9ndWVfYmIgPSAwOworICBp bnQgdmFsX3RhID0gMDsKKyAgdWludDMyX3QgaW5zbiwgaW5zbl9sZW47CisK KyAgZm9yICg7IHBjIDwgbGltaXRfcGM7IHBjICs9IGluc25fbGVuKQorICAg IHsKKyAgICAgIGluc24gPSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2Vy IChwYywgNCwgQkZEX0VORElBTl9CSUcpOworCisgICAgICBpZiAoKGluc24g JiAweDgwMDAwMDAwKSA9PSAwKQorCXsKKwkgIC8qIDMyLWJpdCBpbnN0cnVj dGlvbiAqLworCSAgaW5zbl9sZW4gPSA0OworCisJICBpZiAoQ0hPUF9CSVRT IChpbnNuLCAxNSkgPT0gTjMyX1RZUEUyIChBRERJLCBSRUdfU1AsIFJFR19T UCwgMCkpCisJICAgIHsKKwkgICAgICAvKiBhZGRpICRzcCwgJHNwLCBpbW0x NXMgKi8KKwkgICAgICBpbnQgaW1tMTVzID0gTjMyX0lNTTE1UyAoaW5zbik7 CisKKwkgICAgICBpZiAoaW1tMTVzIDwgMCkKKwkJeworCQkgIGlmIChjYWNo ZSAhPSBOVUxMKQorCQkgICAgY2FjaGUtPnNwX29mZnNldCArPSAtaW1tMTVz OworCisJCSAgaW5fcHJvbG9ndWVfYmIgPSAxOworCQkgIGNvbnRpbnVlOwor CQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMTUp ID09IE4zMl9UWVBFMiAoQURESSwgUkVHX0ZQLCBSRUdfU1AsIDApKQorCSAg ICB7CisJICAgICAgLyogYWRkaSAkZnAsICRzcCwgaW1tMTVzICovCisJICAg ICAgaW50IGltbTE1cyA9IE4zMl9JTU0xNVMgKGluc24pOworCisJICAgICAg aWYgKGltbTE1cyA+IDApCisJCXsKKwkJICBpZiAoY2FjaGUgIT0gTlVMTCkK KwkJICAgIHsKKwkJICAgICAgY2FjaGUtPmZwX29mZnNldCA9IGNhY2hlLT5z cF9vZmZzZXQgLSBpbW0xNXM7CisJCSAgICAgIGNhY2hlLT51c2VfZnJhbWUg PSAxOworCQkgICAgfQorCisJCSAgaW5fcHJvbG9ndWVfYmIgPSAxOworCQkg IGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKChpbnNuICYg fihfX01BU0sgKDE5KSA8PCA2KSkgPT0gTjMyX1NNV19BRE0KKwkJICAgJiYg TjMyX1JBNSAoaW5zbikgPT0gUkVHX1NQKQorCSAgICB7CisJICAgICAgLyog c213LmFkbSBSYiwgWyRzcF0sIFJlLCBlbmFibGU0ICovCisJICAgICAgaWYg KGNhY2hlICE9IE5VTEwpCisJCW5kczMyX3B1c2hfbXVsdGlwbGVfd29yZHMg KGNhY2hlLCBOMzJfUlQ1IChpbnNuKSwKKwkJCQkJICAgTjMyX1JCNSAoaW5z biksCisJCQkJCSAgIE4zMl9MU01XX0VOQUJMRTQgKGluc24pKTsKKwkgICAg ICBpbl9wcm9sb2d1ZV9iYiA9IDE7CisJICAgICAgY29udGludWU7CisJICAg IH0KKwkgIGVsc2UgaWYgKGluc24gPT0gTjMyX0FMVTEgKEFERCwgUkVHX1NQ LCBSRUdfU1AsIFJFR19UQSkKKwkJICAgfHwgaW5zbiA9PSBOMzJfQUxVMSAo QURELCBSRUdfU1AsIFJFR19UQSwgUkVHX1NQKSkKKwkgICAgeworCSAgICAg IC8qIGFkZCAkc3AsICRzcCwgJHRhICovCisJICAgICAgLyogYWRkICRzcCwg JHRhLCAkc3AgKi8KKwkgICAgICBpZiAodmFsX3RhIDwgMCkKKwkJeworCQkg IGlmIChjYWNoZSAhPSBOVUxMKQorCQkgICAgY2FjaGUtPnNwX29mZnNldCAr PSAtdmFsX3RhOworCisJCSAgaW5fcHJvbG9ndWVfYmIgPSAxOworCQkgIGNv bnRpbnVlOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKENIT1BfQklUUyAo aW5zbiwgMjApID09IE4zMl9UWVBFMSAoTU9WSSwgUkVHX1RBLCAwKSkKKwkg ICAgeworCSAgICAgIC8qIG1vdmkgJHRhLCBpbW0yMHMgKi8KKwkgICAgICBp ZiAoY2FjaGUgIT0gTlVMTCkKKwkJdmFsX3RhID0gTjMyX0lNTTIwUyAoaW5z bik7CisKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAo Q0hPUF9CSVRTIChpbnNuLCAyMCkgPT0gTjMyX1RZUEUxIChTRVRISSwgUkVH X1RBLCAwKSkKKwkgICAgeworCSAgICAgIC8qIHNldGhpICR0YSwgaW1tMjB1 ICovCisJICAgICAgaWYgKGNhY2hlICE9IE5VTEwpCisJCXZhbF90YSA9IE4z Ml9JTU0yMFUgKGluc24pIDw8IDEyOworCisJICAgICAgY29udGludWU7CisJ ICAgIH0KKwkgIGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4z Ml9UWVBFMiAoT1JJLCBSRUdfVEEsIFJFR19UQSwgMCkpCisJICAgIHsKKwkg ICAgICAvKiBvcmkgJHRhLCAkdGEsIGltbTE1dSAqLworCSAgICAgIGlmIChj YWNoZSAhPSBOVUxMKQorCQl2YWxfdGEgfD0gTjMyX0lNTTE1VSAoaW5zbik7 CisKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAoQ0hP UF9CSVRTIChpbnNuLCAxNSkgPT0gTjMyX1RZUEUyIChBRERJLCBSRUdfVEEs IFJFR19UQSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBhZGRpICR0YSwgJHRh LCBpbW0xNXMgKi8KKwkgICAgICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJdmFs X3RhICs9IE4zMl9JTU0xNVMgKGluc24pOworCisJICAgICAgY29udGludWU7 CisJICAgIH0KKwkgIGlmIChpbnNuID09IE4zMl9BTFUxIChBREQsIFJFR19H UCwgUkVHX1RBLCBSRUdfR1ApCisJICAgICAgfHwgaW5zbiA9PSBOMzJfQUxV MSAoQURELCBSRUdfR1AsIFJFR19HUCwgUkVHX1RBKSkKKwkgICAgeworCSAg ICAgIC8qIGFkZCAkZ3AsICR0YSwgJGdwICovCisJICAgICAgLyogYWRkICRn cCwgJGdwLCAkdGEgKi8KKwkgICAgICBpbl9wcm9sb2d1ZV9iYiA9IDE7CisJ ICAgICAgY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKENIT1BfQklU UyAoaW5zbiwgMjApID09IE4zMl9UWVBFMSAoTU9WSSwgUkVHX0dQLCAwKSkK KwkgICAgeworCSAgICAgIC8qIG1vdmkgJGdwLCBpbW0yMHMgKi8KKwkgICAg ICBpbl9wcm9sb2d1ZV9iYiA9IDE7CisJICAgICAgY29udGludWU7CisJICAg IH0KKwkgIGVsc2UgaWYgKENIT1BfQklUUyAoaW5zbiwgMjApID09IE4zMl9U WVBFMSAoU0VUSEksIFJFR19HUCwgMCkpCisJICAgIHsKKwkgICAgICAvKiBz ZXRoaSAkZ3AsIGltbTIwdSAqLworCSAgICAgIGluX3Byb2xvZ3VlX2JiID0g MTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAoQ0hP UF9CSVRTIChpbnNuLCAxNSkgPT0gTjMyX1RZUEUyIChPUkksIFJFR19HUCwg UkVHX0dQLCAwKSkKKwkgICAgeworCSAgICAgIC8qIG9yaSAkZ3AsICRncCwg aW1tMTV1ICovCisJICAgICAgaW5fcHJvbG9ndWVfYmIgPSAxOworCSAgICAg IGNvbnRpbnVlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAv KiBKdW1wL0JyYW5jaCBpbnNucyBuZXZlciBhcHBlYXIgaW4gcHJvbG9ndWUg YmFzaWMgYmxvY2suCisJCSBUaGUgbG9vcCBjYW4gYmUgZXNjYXBlZCBlYXJs eSB3aGVuIHRoZXNlIGluc25zIGFyZSBtZXQuICAqLworCSAgICAgIGlmIChp bl9wcm9sb2d1ZV9iYiA9PSAxKQorCQl7CisJCSAgaW50IG9wID0gTjMyX09Q NiAoaW5zbik7CisKKwkJICBpZiAob3AgPT0gTjMyX09QNl9KSQorCQkgICAg ICB8fCBvcCA9PSBOMzJfT1A2X0pSRUcKKwkJICAgICAgfHwgb3AgPT0gTjMy X09QNl9CUjEKKwkJICAgICAgfHwgb3AgPT0gTjMyX09QNl9CUjIKKwkJICAg ICAgfHwgb3AgPT0gTjMyX09QNl9CUjMpCisJCSAgICBicmVhazsKKwkJfQor CSAgICB9CisKKwkgIGlmIChhYmlfdXNlX2ZwciAmJiBOMzJfT1A2IChpbnNu KSA9PSBOMzJfT1A2X1NEQworCSAgICAgICYmIF9fR0YgKGluc24sIDEyLCAz KSA9PSAwKQorCSAgICB7CisJICAgICAgLyogRm9yIEZQVSBpbnNucywgQ1Ag KGJpdCBbMTM6MTRdKSBzaG91bGQgYmUgQ1AwLCAgYW5kIG9ubHkKKwkJIG5v cm1hbCBmb3JtIChiaXQgWzEyXSA9PSAwKSBpcyB1c2VkLiAgKi8KKworCSAg ICAgIC8qIGZzZGkgRkR0LCBbJHNwICsgKGltbTEycyA8PCAyKV0gKi8KKwkg ICAgICBpZiAoTjMyX1JBNSAoaW5zbikgPT0gUkVHX1NQKQorCQljb250aW51 ZTsKKwkgICAgfQorCisJICAvKiBUaGUgb3B0aW1pemVyIG1pZ2h0IHNob3Zl IGFueXRoaW5nIGludG8gdGhlIHByb2xvZ3VlLCBpZgorCSAgICAgd2UgYnVp bGQgdXAgY2FjaGUgKGNhY2hlICE9IE5VTEwpIGZyb20gYW5hbHl6aW5nIHBy b2xvZ3VlLAorCSAgICAgd2UganVzdCBza2lwIHdoYXQgd2UgZG9uJ3QgcmVj b2duaXplIGFuZCBhbmFseXplIGZ1cnRoZXIgdG8KKwkgICAgIG1ha2UgY2Fj aGUgYXMgY29tcGxldGUgYXMgcG9zc2libGUuICBIb3dldmVyLCBpZiB3ZSBz a2lwCisJICAgICBwcm9sb2d1ZSwgd2UnbGwgc3RvcCBpbW1lZGlhdGVseSBv biB1bnJlY29nbml6ZWQKKwkgICAgIGluc3RydWN0aW9uLiAgKi8KKwkgIGlm IChjYWNoZSA9PSBOVUxMKQorCSAgICBicmVhazsKKwl9CisgICAgICBlbHNl CisJeworCSAgLyogMTYtYml0IGluc3RydWN0aW9uICovCisJICBpbnNuX2xl biA9IDI7CisKKwkgIGluc24gPj49IDE2OworCisJICBpZiAoQ0hPUF9CSVRT IChpbnNuLCAxMCkgPT0gTjE2X1RZUEUxMCAoQURESTEwUywgMCkpCisJICAg IHsKKwkgICAgICAvKiBhZGRpMTBzLnNwICovCisJICAgICAgaW50IGltbTEw cyA9IE4xNl9JTU0xMFMgKGluc24pOworCisJICAgICAgaWYgKGltbTEwcyA8 IDApCisJCXsKKwkJICBpZiAoY2FjaGUgIT0gTlVMTCkKKwkJICAgIGNhY2hl LT5zcF9vZmZzZXQgKz0gLWltbTEwczsKKworCQkgIGluX3Byb2xvZ3VlX2Ji ID0gMTsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlm IChfX0dGIChpbnNuLCA3LCA4KSA9PSBOMTZfVDI1X1BVU0gyNSkKKwkgICAg eworCSAgICAgIC8qIHB1c2gyNSAqLworCSAgICAgIGlmIChjYWNoZSAhPSBO VUxMKQorCQl7CisJCSAgaW50IGltbTh1ID0gKGluc24gJiAweDFmKSA8PCAz OworCQkgIGludCByZSA9IChpbnNuID4+IDUpICYgMHgzOworCQkgIGludCBy ZWdfbWFwW10gPSB7IDYsIDgsIDEwLCAxNCB9OworCisJCSAgLyogT3BlcmF0 aW9uIDEgLS0gc213LmFkbSBSNiwgWyRzcF0sIFJlLCAjMHhlICovCisJCSAg bmRzMzJfcHVzaF9tdWx0aXBsZV93b3JkcyAoY2FjaGUsIDYsIHJlZ19tYXBb cmVdLCAweGUpOworCisJCSAgLyogT3BlcmF0aW9uIDIgLS0gc3AgPSBzcCAt IChpbW01dSA8PCAzKSAqLworCQkgIGNhY2hlLT5zcF9vZmZzZXQgKz0gaW1t OHU7CisJCX0KKworCSAgICAgIGluX3Byb2xvZ3VlX2JiID0gMTsKKwkgICAg ICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAoaW5zbiA9PSBOMTZf VFlQRTUgKEFERDVQQywgUkVHX0dQKSkKKwkgICAgeworCSAgICAgIC8qIGFk ZDUucGMgJGdwICovCisJICAgICAgaW5fcHJvbG9ndWVfYmIgPSAxOworCSAg ICAgIGNvbnRpbnVlOworCSAgICB9CisJICBlbHNlIGlmIChDSE9QX0JJVFMg KGluc24sIDUpID09IE4xNl9UWVBFNTUgKE1PVkk1NSwgUkVHX0dQLCAwKSkK KwkgICAgeworCSAgICAgIC8qIG1vdmk1NSAkZ3AsIGltbTVzICovCisJICAg ICAgaW5fcHJvbG9ndWVfYmIgPSAxOworCSAgICAgIGNvbnRpbnVlOworCSAg ICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBKdW1wL0JyYW5jaCBp bnNucyBuZXZlciBhcHBlYXIgaW4gcHJvbG9ndWUgYmFzaWMgYmxvY2suCisJ CSBUaGUgbG9vcCBjYW4gYmUgZXNjYXBlZCBlYXJseSB3aGVuIHRoZXNlIGlu c25zIGFyZSBtZXQuICAqLworCSAgICAgIGlmIChpbl9wcm9sb2d1ZV9iYiA9 PSAxKQorCQl7CisJCSAgdWludDMyX3QgaW5zbjUgPSBDSE9QX0JJVFMgKGlu c24sIDUpOworCQkgIHVpbnQzMl90IGluc244ID0gQ0hPUF9CSVRTIChpbnNu LCA4KTsKKwkJICB1aW50MzJfdCBpbnNuMzggPSBDSE9QX0JJVFMgKGluc24s IDExKTsKKworCQkgIGlmIChpbnNuNSA9PSBOMTZfVFlQRTUgKEpSNSwgMCkK KwkJICAgICAgfHwgaW5zbjUgPT0gTjE2X1RZUEU1IChKUkFMNSwgMCkKKwkJ ICAgICAgfHwgaW5zbjUgPT0gTjE2X1RZUEU1IChSRVQ1LCAwKQorCQkgICAg ICB8fCBpbnNuOCA9PSBOMTZfVFlQRTggKEo4LCAwKQorCQkgICAgICB8fCBp bnNuOCA9PSBOMTZfVFlQRTggKEJFUVpTOCwgMCkKKwkJICAgICAgfHwgaW5z bjggPT0gTjE2X1RZUEU4IChCTkVaUzgsIDApCisJCSAgICAgIHx8IGluc24z OCA9PSBOMTZfVFlQRTM4IChCRVFaMzgsIDAsIDApCisJCSAgICAgIHx8IGlu c24zOCA9PSBOMTZfVFlQRTM4IChCTkVaMzgsIDAsIDApCisJCSAgICAgIHx8 IGluc24zOCA9PSBOMTZfVFlQRTM4IChCRVFTMzgsIDAsIDApCisJCSAgICAg IHx8IGluc24zOCA9PSBOMTZfVFlQRTM4IChCTkVTMzgsIDAsIDApKQorCQkg ICAgYnJlYWs7CisJCX0KKwkgICAgfQorCisJICAvKiBUaGUgb3B0aW1pemVy IG1pZ2h0IHNob3ZlIGFueXRoaW5nIGludG8gdGhlIHByb2xvZ3VlLCBpZgor CSAgICAgd2UgYnVpbGQgdXAgY2FjaGUgKGNhY2hlICE9IE5VTEwpIGZyb20g YW5hbHl6aW5nIHByb2xvZ3VlLAorCSAgICAgd2UganVzdCBza2lwIHdoYXQg d2UgZG9uJ3QgcmVjb2duaXplIGFuZCBhbmFseXplIGZ1cnRoZXIgdG8KKwkg ICAgIG1ha2UgY2FjaGUgYXMgY29tcGxldGUgYXMgcG9zc2libGUuICBIb3dl dmVyLCBpZiB3ZSBza2lwCisJICAgICBwcm9sb2d1ZSwgd2UnbGwgc3RvcCBp bW1lZGlhdGVseSBvbiB1bnJlY29nbml6ZWQKKwkgICAgIGluc3RydWN0aW9u LiAgKi8KKwkgIGlmIChjYWNoZSA9PSBOVUxMKQorCSAgICBicmVhazsKKwl9 CisgICAgfQorCisgIHJldHVybiBwYzsKK30KKworLyogSW1wbGVtZW50IHRo ZSAic2tpcF9wcm9sb2d1ZSIgZ2RiYXJjaCBtZXRob2QuCisKKyAgIEZpbmQg dGhlIGVuZCBvZiBmdW5jdGlvbiBwcm9sb2d1ZS4gICovCisKK3N0YXRpYyBD T1JFX0FERFIKK25kczMyX3NraXBfcHJvbG9ndWUgKHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoLCBDT1JFX0FERFIgcGMpCit7CisgIENPUkVfQUREUiBmdW5j X2FkZHIsIGxpbWl0X3BjOworCisgIC8qIFNlZSBpZiB3ZSBjYW4gZGV0ZXJt aW5lIHRoZSBlbmQgb2YgdGhlIHByb2xvZ3VlIHZpYSB0aGUgc3ltYm9sIHRh YmxlLgorICAgICBJZiBzbywgdGhlbiByZXR1cm4gZWl0aGVyIFBDLCBvciB0 aGUgUEMgYWZ0ZXIgdGhlIHByb2xvZ3VlLCB3aGljaGV2ZXIKKyAgICAgaXMg Z3JlYXRlci4gICovCisgIGlmIChmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24g KHBjLCBOVUxMLCAmZnVuY19hZGRyLCBOVUxMKSkKKyAgICB7CisgICAgICBD T1JFX0FERFIgcG9zdF9wcm9sb2d1ZV9wYworCT0gc2tpcF9wcm9sb2d1ZV91 c2luZ19zYWwgKGdkYmFyY2gsIGZ1bmNfYWRkcik7CisgICAgICBpZiAocG9z dF9wcm9sb2d1ZV9wYyAhPSAwKQorCXJldHVybiBtYXggKHBjLCBwb3N0X3By b2xvZ3VlX3BjKTsKKyAgICB9CisKKyAgLyogQ2FuJ3QgZGV0ZXJtaW5lIHBy b2xvZ3VlIGZyb20gdGhlIHN5bWJvbCB0YWJsZSwgbmVlZCB0byBleGFtaW5l CisgICAgIGluc3RydWN0aW9ucy4gICovCisKKyAgLyogRmluZCBhbiB1cHBl ciBsaW1pdCBvbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgdXNpbmcgdGhlIGRl YnVnCisgICAgIGluZm9ybWF0aW9uLiAgSWYgdGhlIGRlYnVnIGluZm9ybWF0 aW9uIGNvdWxkIG5vdCBiZSB1c2VkIHRvIHByb3ZpZGUKKyAgICAgdGhhdCBi b3VuZCwgdGhlbiB1c2UgYW4gYXJiaXRyYXJ5IGxhcmdlIG51bWJlciBhcyB0 aGUgdXBwZXIgYm91bmQuICAqLworICBsaW1pdF9wYyA9IHNraXBfcHJvbG9n dWVfdXNpbmdfc2FsIChnZGJhcmNoLCBwYyk7CisgIGlmIChsaW1pdF9wYyA9 PSAwKQorICAgIGxpbWl0X3BjID0gcGMgKyAxMjg7CS8qIE1hZ2ljLiAgKi8K KworICAvKiBGaW5kIHRoZSBlbmQgb2YgcHJvbG9ndWUuICAqLworICByZXR1 cm4gbmRzMzJfYW5hbHl6ZV9wcm9sb2d1ZSAoZ2RiYXJjaCwgcGMsIGxpbWl0 X3BjLCBOVUxMKTsKK30KKworLyogQWxsb2NhdGUgYW5kIGZpbGwgaW4gKlRI SVNfQ0FDSEUgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvbG9ndWUg b2YKKyAgICpUSElTX0ZSQU1FLiAgRG8gbm90IGRvIHRoaXMgaWYgKlRISVNf Q0FDSEUgd2FzIGFscmVhZHkgYWxsb2NhdGVkLiAgUmV0dXJuCisgICBhIHBv aW50ZXIgdG8gdGhlIGN1cnJlbnQgbmRzMzJfZnJhbWVfY2FjaGUgaW4gKlRI SVNfQ0FDSEUuICAqLworCitzdGF0aWMgc3RydWN0IG5kczMyX2ZyYW1lX2Nh Y2hlICoKK25kczMyX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAq dGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCit7CisgIHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUp OworICBzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKmNhY2hlOworICBDT1JF X0FERFIgY3VycmVudF9wYzsKKyAgVUxPTkdFU1QgcHJldl9zcDsKKyAgVUxP TkdFU1QgdGhpc19iYXNlOworICBpbnQgaTsKKworICBpZiAoKnRoaXNfY2Fj aGUpCisgICAgcmV0dXJuIChzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKikg KnRoaXNfY2FjaGU7CisKKyAgY2FjaGUgPSBuZHMzMl9hbGxvY19mcmFtZV9j YWNoZSAoKTsKKyAgKnRoaXNfY2FjaGUgPSBjYWNoZTsKKworICBjYWNoZS0+ cGMgPSBnZXRfZnJhbWVfZnVuYyAodGhpc19mcmFtZSk7CisgIGN1cnJlbnRf cGMgPSBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpOworICBuZHMzMl9hbmFs eXplX3Byb2xvZ3VlIChnZGJhcmNoLCBjYWNoZS0+cGMsIGN1cnJlbnRfcGMs IGNhY2hlKTsKKworICAvKiBDb21wdXRlIHRoZSBwcmV2aW91cyBmcmFtZSdz IHN0YWNrIHBvaW50ZXIgKHdoaWNoIGlzIGFsc28gdGhlCisgICAgIGZyYW1l J3MgSUQncyBzdGFjayBhZGRyZXNzKSwgYW5kIHRoaXMgZnJhbWUncyBiYXNl IHBvaW50ZXIuICAqLworICBpZiAoY2FjaGUtPnVzZV9mcmFtZSkKKyAgICB7 CisgICAgICB0aGlzX2Jhc2UgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWdu ZWQgKHRoaXNfZnJhbWUsIE5EUzMyX0ZQX1JFR05VTSk7CisgICAgICBwcmV2 X3NwID0gdGhpc19iYXNlICsgY2FjaGUtPmZwX29mZnNldDsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICB0aGlzX2Jhc2UgPSBnZXRfZnJhbWVfcmVn aXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIE5EUzMyX1NQX1JFR05VTSk7 CisgICAgICBwcmV2X3NwID0gdGhpc19iYXNlICsgY2FjaGUtPnNwX29mZnNl dDsKKyAgICB9CisKKyAgY2FjaGUtPnByZXZfc3AgPSBwcmV2X3NwOworICBj YWNoZS0+YmFzZSA9IHRoaXNfYmFzZTsKKworICAvKiBBZGp1c3QgYWxsIHRo ZSBzYXZlZCByZWdpc3RlcnMgc3VjaCB0aGF0IHRoZXkgY29udGFpbiBhZGRy ZXNzZXMKKyAgICAgaW5zdGVhZCBvZiBvZmZzZXRzLiAgKi8KKyAgZm9yIChp ID0gMDsgaSA8IE5EUzMyX05VTV9TQVZFRF9SRUdTOyBpKyspCisgICAgaWYg KGNhY2hlLT5zYXZlZF9yZWdzW2ldICE9IFJFR19VTkFWQUlMKQorICAgICAg Y2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBjYWNoZS0+cHJldl9zcCAtIGNhY2hl LT5zYXZlZF9yZWdzW2ldOworCisgIHJldHVybiBjYWNoZTsKK30KKworLyog SW1wbGVtZW50IHRoZSAidGhpc19pZCIgZnJhbWVfdW53aW5kIG1ldGhvZC4K KworICAgT3VyIGZyYW1lIElEIGZvciBhIG5vcm1hbCBmcmFtZSBpcyB0aGUg Y3VycmVudCBmdW5jdGlvbidzIHN0YXJ0aW5nCisgICBQQyBhbmQgdGhlIGNh bGxlcidzIFNQIHdoZW4gd2Ugd2VyZSBjYWxsZWQuICAqLworCitzdGF0aWMg dm9pZAorbmRzMzJfZnJhbWVfdGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8g KnRoaXNfZnJhbWUsCisJCSAgICAgdm9pZCAqKnRoaXNfY2FjaGUsIHN0cnVj dCBmcmFtZV9pZCAqdGhpc19pZCkKK3sKKyAgc3RydWN0IG5kczMyX2ZyYW1l X2NhY2hlICpjYWNoZSA9IG5kczMyX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1l LCB0aGlzX2NhY2hlKTsKKworICAvKiBUaGlzIG1hcmtzIHRoZSBvdXRlcm1v c3QgZnJhbWUuICAqLworICBpZiAoY2FjaGUtPnByZXZfc3AgPT0gMCkKKyAg ICByZXR1cm47CisKKyAgKnRoaXNfaWQgPSBmcmFtZV9pZF9idWlsZCAoY2Fj aGUtPnByZXZfc3AsIGNhY2hlLT5wYyk7Cit9CisKKy8qIEltcGxlbWVudCB0 aGUgInByZXZfcmVnaXN0ZXIiIGZyYW1lX3Vud2luZCBtZXRob2QuICAqLwor CitzdGF0aWMgc3RydWN0IHZhbHVlICoKK25kczMyX2ZyYW1lX3ByZXZfcmVn aXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoq dGhpc19jYWNoZSwKKwkJCSAgIGludCByZWdudW0pCit7CisgIHN0cnVjdCBu ZHMzMl9mcmFtZV9jYWNoZSAqY2FjaGUgPSBuZHMzMl9mcmFtZV9jYWNoZSAo dGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisKKyAgaWYgKHJlZ251bSA9PSBO RFMzMl9TUF9SRUdOVU0pCisgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3Rf Y29uc3RhbnQgKHRoaXNfZnJhbWUsIHJlZ251bSwgY2FjaGUtPnByZXZfc3Ap OworCisgIC8qIFRoZSBQQyBvZiB0aGUgcHJldmlvdXMgZnJhbWUgaXMgc3Rv cmVkIGluIHRoZSBMUCByZWdpc3RlciBvZgorICAgICB0aGUgY3VycmVudCBm cmFtZS4gICovCisgIGlmIChyZWdudW0gPT0gTkRTMzJfUENfUkVHTlVNKQor ICAgIHJlZ251bSA9IE5EUzMyX0xQX1JFR05VTTsKKworICBpZiAocmVnbnVt IDwgTkRTMzJfTlVNX1NBVkVEX1JFR1MgJiYgY2FjaGUtPnNhdmVkX3JlZ3Nb cmVnbnVtXSAhPSBSRUdfVU5BVkFJTCkKKyAgICByZXR1cm4gZnJhbWVfdW53 aW5kX2dvdF9tZW1vcnkgKHRoaXNfZnJhbWUsIHJlZ251bSwKKwkJCQkgICAg Y2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSk7CisKKyAgcmV0dXJuIGZyYW1l X3Vud2luZF9nb3RfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIHJlZ251bSwgcmVn bnVtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQg bmRzMzJfZnJhbWVfdW53aW5kID0KK3sKKyAgTk9STUFMX0ZSQU1FLAorICBk ZWZhdWx0X2ZyYW1lX3Vud2luZF9zdG9wX3JlYXNvbiwKKyAgbmRzMzJfZnJh bWVfdGhpc19pZCwKKyAgbmRzMzJfZnJhbWVfcHJldl9yZWdpc3RlciwKKyAg TlVMTCwKKyAgZGVmYXVsdF9mcmFtZV9zbmlmZmVyLAorfTsKKworLyogUmV0 dXJuIHRoZSBmcmFtZSBiYXNlIGFkZHJlc3Mgb2YgKlRISVNfRlJBTUUuICAq LworCitzdGF0aWMgQ09SRV9BRERSCituZHMzMl9mcmFtZV9iYXNlX2FkZHJl c3MgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhp c19jYWNoZSkKK3sKKyAgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNo ZSA9IG5kczMyX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hl KTsKKworICByZXR1cm4gY2FjaGUtPmJhc2U7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZnJhbWVfYmFzZSBuZHMzMl9mcmFtZV9iYXNlID0KK3sKKyAg Jm5kczMyX2ZyYW1lX3Vud2luZCwKKyAgbmRzMzJfZnJhbWVfYmFzZV9hZGRy ZXNzLAorICBuZHMzMl9mcmFtZV9iYXNlX2FkZHJlc3MsCisgIG5kczMyX2Zy YW1lX2Jhc2VfYWRkcmVzcworfTsKKwwKKy8qIEhlbHBlciBmdW5jdGlvbiBm b3IgaW5zdHJ1Y3Rpb25zIHVzZWQgdG8gcG9wIG11bHRpcGxlIHdvcmRzLiAg Ki8KKworc3RhdGljIHZvaWQKK25kczMyX3BvcF9tdWx0aXBsZV93b3JkcyAo c3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZSwgaW50IHJiLCBpbnQg cmUsCisJCQkgIGludCBlbmFibGU0KQoreworICBDT1JFX0FERFIgc3Bfb2Zm c2V0ID0gY2FjaGUtPnNwX29mZnNldDsKKyAgaW50IGk7CisKKyAgLyogU2tp cCBjYXNlIHdoZXJlIHJlID09IHJiID09IHNwLiAgKi8KKyAgaWYgKChyYiA8 IFJFR19GUCkgJiYgKHJlIDwgUkVHX0ZQKSkKKyAgICB7CisgICAgICBmb3Ig KGkgPSByYjsgaSA8PSByZTsgaSsrKQorCXsKKwkgIGNhY2hlLT5zYXZlZF9y ZWdzW2ldID0gc3Bfb2Zmc2V0OworCSAgc3Bfb2Zmc2V0ICs9IDQ7CisJfQor ICAgIH0KKworICAvKiBDaGVjayBGUCwgR1AsIExQIGluIGVuYWJsZTQuICAq LworICBmb3IgKGkgPSAzOyBpID49IDE7IGktLSkKKyAgICB7CisgICAgICBp ZiAoKGVuYWJsZTQgPj4gaSkgJiAweDEpCisJeworCSAgY2FjaGUtPnNhdmVk X3JlZ3NbTkRTMzJfU1BfUkVHTlVNIC0gaV0gPSBzcF9vZmZzZXQ7CisJICBz cF9vZmZzZXQgKz0gNDsKKwl9CisgICAgfQorCisgIC8qIEZvciBzcCwgdXBk YXRlIHRoZSBvZmZzZXQuICAqLworICBjYWNoZS0+c3Bfb2Zmc2V0ID0gc3Bf b2Zmc2V0OworfQorCisvKiBUaGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIGlu IE5EUzMyIGVwaWxvZ3VlIGFyZQorCisgICBJTlNOX1JFU0VUX1NQICAob3B0 aW9uYWwpCisJCSAgKElmIGV4aXN0cywgdGhpcyBtdXN0IGJlIHRoZSBmaXJz dCBpbnN0cnVjdGlvbiBpbiBlcGlsb2d1ZQorCQkgICBhbmQgdGhlIHN0YWNr IGhhcyBub3QgYmVlbiBkZXN0cm95ZWQuKS4KKyAgIElOU05fUkVDT1ZFUiAg KG9wdGlvbmFsKS4KKyAgIElOU05fUkVUVVJOL0lOU05fUkVDT1ZFUl9SRVRV Uk4gIChyZXF1aXJlZCkuICAqLworCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9y IGFuYWx5emluZyB0aGUgZ2l2ZW4gSU5TTi4gIElmIENBQ0hFIGlzIG5vbi1O VUxMLAorICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB3aWxsIGJlIHJl Y29yZGVkLiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK25kczMyX2FuYWx5 emVfZXBpbG9ndWVfaW5zbjMyIChpbnQgYWJpX3VzZV9mcHIsIHVpbnQzMl90 IGluc24sCisJCQkgICAgICAgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpj YWNoZSkKK3sKKyAgaWYgKENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4zMl9U WVBFMiAoQURESSwgUkVHX1NQLCBSRUdfU1AsIDApCisgICAgICAmJiBOMzJf SU1NMTVTIChpbnNuKSA+IDApCisgICAgLyogYWRkaSAkc3AsICRzcCwgaW1t MTVzICovCisgICAgcmV0dXJuIElOU05fUkVTRVRfU1A7CisgIGVsc2UgaWYg KENIT1BfQklUUyAoaW5zbiwgMTUpID09IE4zMl9UWVBFMiAoQURESSwgUkVH X1NQLCBSRUdfRlAsIDApCisJICAgJiYgTjMyX0lNTTE1UyAoaW5zbikgPCAw KQorICAgIC8qIGFkZGkgJHNwLCAkZnAsIGltbTE1cyAqLworICAgIHJldHVy biBJTlNOX1JFU0VUX1NQOworICBlbHNlIGlmICgoaW5zbiAmIH4oX19NQVNL ICgxOSkgPDwgNikpID09IE4zMl9MTVdfQklNCisJICAgJiYgTjMyX1JBNSAo aW5zbikgPT0gUkVHX1NQKQorICAgIHsKKyAgICAgIC8qIGxtdy5iaW0gUmIs IFskc3BdLCBSZSwgZW5hYmxlNCAqLworICAgICAgaWYgKGNhY2hlICE9IE5V TEwpCisJbmRzMzJfcG9wX211bHRpcGxlX3dvcmRzIChjYWNoZSwgTjMyX1JU NSAoaW5zbiksCisJCQkJICBOMzJfUkI1IChpbnNuKSwgTjMyX0xTTVdfRU5B QkxFNCAoaW5zbikpOworCisgICAgICByZXR1cm4gSU5TTl9SRUNPVkVSOwor ICAgIH0KKyAgZWxzZSBpZiAoaW5zbiA9PSBOMzJfSlJFRyAoSlIsIDAsIFJF R19MUCwgMCwgMSkpCisgICAgLyogcmV0ICRscCAqLworICAgIHJldHVybiBJ TlNOX1JFVFVSTjsKKyAgZWxzZSBpZiAoaW5zbiA9PSBOMzJfQUxVMSAoQURE LCBSRUdfU1AsIFJFR19TUCwgUkVHX1RBKQorCSAgIHx8IGluc24gPT0gTjMy X0FMVTEgKEFERCwgUkVHX1NQLCBSRUdfVEEsIFJFR19TUCkpCisgICAgLyog YWRkICRzcCwgJHNwLCAkdGEgKi8KKyAgICAvKiBhZGQgJHNwLCAkdGEsICRz cCAqLworICAgIHJldHVybiBJTlNOX1JFU0VUX1NQOworICBlbHNlIGlmIChh YmlfdXNlX2ZwcgorCSAgICYmIChpbnNuICYgfihfX01BU0sgKDUpIDw8IDIw IHwgX19NQVNLICgxMykpKSA9PSBOMzJfRkxESV9TUCkKKyAgICB7CisgICAg ICBpZiAoX19HRiAoaW5zbiwgMTIsIDEpID09IDApCisJLyogZmxkaSBGRHQs IFskc3AgKyAoaW1tMTJzIDw8IDIpXSAqLworCXJldHVybiBJTlNOX1JFQ09W RVI7CisgICAgICBlbHNlCisJeworCSAgLyogZmxkaS5iaSBGRHQsIFskc3Bd LCAoaW1tMTJzIDw8IDIpICovCisJICBpbnQgb2Zmc2V0ID0gTjMyX0lNTTEy UyAoaW5zbikgPDwgMjsKKworCSAgaWYgKG9mZnNldCA9PSA4IHx8IG9mZnNl dCA9PSAxMikKKwkgICAgeworCSAgICAgIGlmIChjYWNoZSAhPSBOVUxMKQor CQljYWNoZS0+c3Bfb2Zmc2V0ICs9IG9mZnNldDsKKworCSAgICAgIHJldHVy biBJTlNOX1JFQ09WRVI7CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVy biBJTlNOX05PUk1BTDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25kczMy X2FuYWx5emVfZXBpbG9ndWVfaW5zbjE2ICh1aW50MzJfdCBpbnNuLCBzdHJ1 Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKmNhY2hlKQoreworICBpZiAoaW5zbiA9 PSBOMTZfVFlQRTUgKFJFVDUsIFJFR19MUCkpCisgICAgLyogcmV0NSAkbHAg Ki8KKyAgICByZXR1cm4gSU5TTl9SRVRVUk47CisgIGVsc2UgaWYgKENIT1Bf QklUUyAoaW5zbiwgMTApID09IE4xNl9UWVBFMTAgKEFEREkxMFMsIDApKQor ICAgIHsKKyAgICAgIC8qIGFkZGkxMHMuc3AgKi8KKyAgICAgIGludCBpbW0x MHMgPSBOMTZfSU1NMTBTIChpbnNuKTsKKworICAgICAgaWYgKGltbTEwcyA+ IDApCisJeworCSAgaWYgKGNhY2hlICE9IE5VTEwpCisJICAgIGNhY2hlLT5z cF9vZmZzZXQgKz0gaW1tMTBzOworCisJICByZXR1cm4gSU5TTl9SRUNPVkVS OworCX0KKyAgICB9CisgIGVsc2UgaWYgKF9fR0YgKGluc24sIDcsIDgpID09 IE4xNl9UMjVfUE9QMjUpCisgICAgeworICAgICAgLyogcG9wMjUgKi8KKyAg ICAgIGlmIChjYWNoZSAhPSBOVUxMKQorCXsKKwkgIGludCBpbW04dSA9IChp bnNuICYgMHgxZikgPDwgMzsKKwkgIGludCByZSA9IChpbnNuID4+IDUpICYg MHgzOworCSAgaW50IHJlZ19tYXBbXSA9IHsgNiwgOCwgMTAsIDE0IH07CisK KwkgIC8qIE9wZXJhdGlvbiAxIC0tIHNwID0gc3AgKyAoaW1tNXUgPDwgMykg Ki8KKwkgIGNhY2hlLT5zcF9vZmZzZXQgKz0gaW1tOHU7CisKKwkgIC8qIE9w ZXJhdGlvbiAyIC0tIGxtdy5iaW0gUjYsIFskc3BdLCBSZSwgIzB4ZSAqLwor CSAgbmRzMzJfcG9wX211bHRpcGxlX3dvcmRzIChjYWNoZSwgNiwgcmVnX21h cFtyZV0sIDB4ZSk7CisJfQorCisgICAgICAvKiBPcGVyYXRpb24gMyAtLSBy ZXQgJGxwICovCisgICAgICByZXR1cm4gSU5TTl9SRUNPVkVSX1JFVFVSTjsK KyAgICB9CisKKyAgcmV0dXJuIElOU05fTk9STUFMOworfQorCisvKiBBbmFs eXplIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIGZyb20g dGhlIGdpdmVuIFBDIHRvIGZpbmQKKyAgIHRoZSBpbnN0cnVjdGlvbiB1c2Vk IHRvIHJldHVybiB0byB0aGUgY2FsbGVyLiAgUmV0dXJuIDEgaWYgdGhlICdy ZXR1cm4nCisgICBpbnN0cnVjdGlvbiBjb3VsZCBiZSBmb3VuZCwgMCBvdGhl cndpc2UuCisKKyAgIElmIENBQ0hFIGlzIG5vbi1OVUxMLCBmaWxsIGl0IGlu LiAgKi8KKworc3RhdGljIGludAorbmRzMzJfYW5hbHl6ZV9lcGlsb2d1ZSAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBwYywKKwkJCXN0 cnVjdCBuZHMzMl9mcmFtZV9jYWNoZSAqY2FjaGUpCit7CisgIHN0cnVjdCBn ZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOwor ICBpbnQgYWJpX3VzZV9mcHIgPSBuZHMzMl9hYmlfdXNlX2ZwciAodGRlcC0+ YWJpKTsKKyAgQ09SRV9BRERSIGxpbWl0X3BjOworICB1aW50MzJfdCBpbnNu LCBpbnNuX2xlbjsKKyAgaW50IGluc25fdHlwZSA9IElOU05fTk9STUFMOwor CisgIGlmIChhYmlfdXNlX2ZwcikKKyAgICBsaW1pdF9wYyA9IHBjICsgNDg7 CisgIGVsc2UKKyAgICBsaW1pdF9wYyA9IHBjICsgMTY7CisKKyAgZm9yICg7 IHBjIDwgbGltaXRfcGM7IHBjICs9IGluc25fbGVuKQorICAgIHsKKyAgICAg IGluc24gPSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChwYywgNCwg QkZEX0VORElBTl9CSUcpOworCisgICAgICBpZiAoKGluc24gJiAweDgwMDAw MDAwKSA9PSAwKQorCXsKKwkgIC8qIDMyLWJpdCBpbnN0cnVjdGlvbiAqLwor CSAgaW5zbl9sZW4gPSA0OworCisJICBpbnNuX3R5cGUgPSBuZHMzMl9hbmFs eXplX2VwaWxvZ3VlX2luc24zMiAoYWJpX3VzZV9mcHIsIGluc24sIGNhY2hl KTsKKwkgIGlmIChpbnNuX3R5cGUgPT0gSU5TTl9SRVRVUk4pCisJICAgIHJl dHVybiAxOworCSAgZWxzZSBpZiAoaW5zbl90eXBlID09IElOU05fUkVDT1ZF UikKKwkgICAgY29udGludWU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8q IDE2LWJpdCBpbnN0cnVjdGlvbiAqLworCSAgaW5zbl9sZW4gPSAyOworCisJ ICBpbnNuID4+PSAxNjsKKwkgIGluc25fdHlwZSA9IG5kczMyX2FuYWx5emVf ZXBpbG9ndWVfaW5zbjE2IChpbnNuLCBjYWNoZSk7CisJICBpZiAoaW5zbl90 eXBlID09IElOU05fUkVUVVJOIHx8IGluc25fdHlwZSA9PSBJTlNOX1JFQ09W RVJfUkVUVVJOKQorCSAgICByZXR1cm4gMTsKKwkgIGVsc2UgaWYgKGluc25f dHlwZSA9PSBJTlNOX1JFQ09WRVIpCisJICAgIGNvbnRpbnVlOworCX0KKwor ICAgICAgLyogU3RvcCB0aGUgc2NhbiBpZiB0aGlzIGlzIGFuIHVuZXhwZWN0 ZWQgaW5zdHJ1Y3Rpb24uICAqLworICAgICAgYnJlYWs7CisgICAgfQorCisg IHJldHVybiAwOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJzdGFja19mcmFt ZV9kZXN0cm95ZWRfcCIgZ2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMg aW50CituZHMzMl9zdGFja19mcmFtZV9kZXN0cm95ZWRfcCAoc3RydWN0IGdk YmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBhZGRyKQoreworICBzdHJ1Y3Qg Z2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsK KyAgaW50IGFiaV91c2VfZnByID0gbmRzMzJfYWJpX3VzZV9mcHIgKHRkZXAt PmFiaSk7CisgIGludCBpbnNuX3R5cGUgPSBJTlNOX05PUk1BTDsKKyAgaW50 IHJldF9mb3VuZCA9IDA7CisgIHVpbnQzMl90IGluc247CisKKyAgaW5zbiA9 IHJlYWRfbWVtb3J5X3Vuc2lnbmVkX2ludGVnZXIgKGFkZHIsIDQsIEJGRF9F TkRJQU5fQklHKTsKKworICBpZiAoKGluc24gJiAweDgwMDAwMDAwKSA9PSAw KQorICAgIHsKKyAgICAgIC8qIDMyLWJpdCBpbnN0cnVjdGlvbiAqLworCisg ICAgICBpbnNuX3R5cGUgPSBuZHMzMl9hbmFseXplX2VwaWxvZ3VlX2luc24z MiAoYWJpX3VzZV9mcHIsIGluc24sIE5VTEwpOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIC8qIDE2LWJpdCBpbnN0cnVjdGlvbiAqLworCisgICAg ICBpbnNuID4+PSAxNjsKKyAgICAgIGluc25fdHlwZSA9IG5kczMyX2FuYWx5 emVfZXBpbG9ndWVfaW5zbjE2IChpbnNuLCBOVUxMKTsKKyAgICB9CisKKyAg aWYgKGluc25fdHlwZSA9PSBJTlNOX05PUk1BTCB8fCBpbnNuX3R5cGUgPT0g SU5TTl9SRVNFVF9TUCkKKyAgICByZXR1cm4gMDsKKworICAvKiBTZWFyY2gg dGhlIHJlcXVpcmVkICdyZXR1cm4nIGluc3RydWN0aW9uIHdpdGhpbiB0aGUg Zm9sbG93aW5nIHJlYXNvbmFibGUKKyAgICAgaW5zdHJ1Y3Rpb25zLiAgKi8K KyAgcmV0X2ZvdW5kID0gbmRzMzJfYW5hbHl6ZV9lcGlsb2d1ZSAoZ2RiYXJj aCwgYWRkciwgTlVMTCk7CisgIGlmIChyZXRfZm91bmQgPT0gMCkKKyAgICBy ZXR1cm4gMDsKKworICAvKiBTY2FuIGJhY2t3YXJkcyB0byBtYWtlIHN1cmUg dGhhdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBoYXMgYWRqdXN0ZWQKKyAgICAg c3RhY2suICBCb3RoIGEgMTYtYml0IGFuZCBhIDMyLWJpdCBpbnN0cnVjdGlv biB3aWxsIGJlIHRyaWVkLiAgVGhpcyBpcworICAgICBqdXN0IGEgaGV1cmlz dGljLCBzbyB0aGUgZmFsc2UgcG9zaXRpdmVzIHdpbGwgYmUgYWNjZXB0YWJs ZS4gICovCisgIGluc24gPSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2Vy IChhZGRyIC0gMiwgNCwgQkZEX0VORElBTl9CSUcpOworCisgIC8qIE9ubHkg MTYtYml0IGluc3RydWN0aW9ucyBhcmUgcG9zc2libGUgYXQgYWRkciAtIDIu ICAqLworICBpZiAoKGluc24gJiAweDgwMDAwMDAwKSAhPSAwKQorICAgIHsK KyAgICAgIC8qIFRoaXMgbWF5IGJlIGEgMTYtYml0IGluc3RydWN0aW9uIG9y IHBhcnQgb2YgYSAzMi1iaXQgaW5zdHJ1Y3Rpb24uICAqLworCisgICAgICBp bnNuX3R5cGUgPSBuZHMzMl9hbmFseXplX2VwaWxvZ3VlX2luc24xNiAoaW5z biA+PiAxNiwgTlVMTCk7CisgICAgICBpZiAoaW5zbl90eXBlID09IElOU05f UkVDT1ZFUikKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgaW5zbiA9IHJlYWRf bWVtb3J5X3Vuc2lnbmVkX2ludGVnZXIgKGFkZHIgLSA0LCA0LCBCRkRfRU5E SUFOX0JJRyk7CisKKyAgLyogSWYgdGhpcyBpcyBhIDE2LWJpdCBpbnN0cnVj dGlvbiBhdCBhZGRyIC0gNCwgdGhlbiB0aGVyZSBtdXN0IGJlIGFub3RoZXIK KyAgICAgMTYtYml0IGluc3RydWN0aW9uIGF0IGFkZHIgLSAyLCBzbyBvbmx5 IDMyLWJpdCBpbnN0cnVjdGlvbnMgbmVlZCB0bworICAgICBiZSBhbmFseXpl ZCBoZXJlLiAgKi8KKyAgaWYgKChpbnNuICYgMHg4MDAwMDAwMCkgPT0gMCkK KyAgICB7CisgICAgICAvKiBUaGlzIG1heSBiZSBhIDMyLWJpdCBpbnN0cnVj dGlvbiBvciBwYXJ0IG9mIGEgMzItYml0IGluc3RydWN0aW9uLiAgKi8KKwor ICAgICAgaW5zbl90eXBlID0gbmRzMzJfYW5hbHl6ZV9lcGlsb2d1ZV9pbnNu MzIgKGFiaV91c2VfZnByLCBpbnNuLCBOVUxMKTsKKyAgICAgIGlmIChpbnNu X3R5cGUgPT0gSU5TTl9SRUNPVkVSIHx8IGluc25fdHlwZSA9PSBJTlNOX1JF U0VUX1NQKQorCXJldHVybiAxOworICAgIH0KKworICByZXR1cm4gMDsKK30K KworLyogSW1wbGVtZW50IHRoZSAic25pZmZlciIgZnJhbWVfdW53aW5kIG1l dGhvZC4gICovCisKK3N0YXRpYyBpbnQKK25kczMyX2VwaWxvZ3VlX2ZyYW1l X3NuaWZmZXIgKGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgKnNlbGYsCisJ CQkgICAgICBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAq KnRoaXNfY2FjaGUpCit7CisgIGlmIChmcmFtZV9yZWxhdGl2ZV9sZXZlbCAo dGhpc19mcmFtZSkgPT0gMCkKKyAgICByZXR1cm4gbmRzMzJfc3RhY2tfZnJh bWVfZGVzdHJveWVkX3AgKGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKSwK KwkJCQkJICBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpKTsKKyAgZWxzZQor ICAgIHJldHVybiAwOworfQorCisvKiBBbGxvY2F0ZSBhbmQgZmlsbCBpbiAq VEhJU19DQUNIRSB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCB0byB1bndpbmQK KyAgICpUSElTX0ZSQU1FIHdpdGhpbiBlcGlsb2d1ZS4gIERvIG5vdCBkbyB0 aGlzIGlmICpUSElTX0NBQ0hFIHdhcyBhbHJlYWR5CisgICBhbGxvY2F0ZWQu ICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5kczMyX2ZyYW1l X2NhY2hlIGluCisgICAqVEhJU19DQUNIRS4gICovCisKK3N0YXRpYyBzdHJ1 Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKgorbmRzMzJfZXBpbG9ndWVfZnJhbWVf Y2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoq dGhpc19jYWNoZSkKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBn ZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7CisgIHN0cnVjdCBuZHMzMl9m cmFtZV9jYWNoZSAqY2FjaGU7CisgIENPUkVfQUREUiBjdXJyZW50X3BjLCBj dXJyZW50X3NwOworICBpbnQgaTsKKworICBpZiAoKnRoaXNfY2FjaGUpCisg ICAgcmV0dXJuIChzdHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKikgKnRoaXNf Y2FjaGU7CisKKyAgY2FjaGUgPSBuZHMzMl9hbGxvY19mcmFtZV9jYWNoZSAo KTsKKyAgKnRoaXNfY2FjaGUgPSBjYWNoZTsKKworICBjYWNoZS0+cGMgPSBn ZXRfZnJhbWVfZnVuYyAodGhpc19mcmFtZSk7CisgIGN1cnJlbnRfcGMgPSBn ZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpOworICBuZHMzMl9hbmFseXplX2Vw aWxvZ3VlIChnZGJhcmNoLCBjdXJyZW50X3BjLCBjYWNoZSk7CisKKyAgY3Vy cmVudF9zcCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19m cmFtZSwgTkRTMzJfU1BfUkVHTlVNKTsKKyAgY2FjaGUtPnByZXZfc3AgPSBj dXJyZW50X3NwICsgY2FjaGUtPnNwX29mZnNldDsKKworICAvKiBBZGp1c3Qg YWxsIHRoZSBzYXZlZCByZWdpc3RlcnMgc3VjaCB0aGF0IHRoZXkgY29udGFp biBhZGRyZXNzZXMKKyAgICAgaW5zdGVhZCBvZiBvZmZzZXRzLiAgKi8KKyAg Zm9yIChpID0gMDsgaSA8IE5EUzMyX05VTV9TQVZFRF9SRUdTOyBpKyspCisg ICAgaWYgKGNhY2hlLT5zYXZlZF9yZWdzW2ldICE9IFJFR19VTkFWQUlMKQor ICAgICAgY2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBjdXJyZW50X3NwICsgY2Fj aGUtPnNhdmVkX3JlZ3NbaV07CisKKyAgcmV0dXJuIGNhY2hlOworfQorCisv KiBJbXBsZW1lbnQgdGhlICJ0aGlzX2lkIiBmcmFtZV91bndpbmQgbWV0aG9k LiAgKi8KKworc3RhdGljIHZvaWQKK25kczMyX2VwaWxvZ3VlX2ZyYW1lX3Ro aXNfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorCQkJICAg ICAgdm9pZCAqKnRoaXNfY2FjaGUsIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19p ZCkKK3sKKyAgc3RydWN0IG5kczMyX2ZyYW1lX2NhY2hlICpjYWNoZQorICAg ID0gbmRzMzJfZXBpbG9ndWVfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRo aXNfY2FjaGUpOworCisgIC8qIFRoaXMgbWFya3MgdGhlIG91dGVybW9zdCBm cmFtZS4gICovCisgIGlmIChjYWNoZS0+cHJldl9zcCA9PSAwKQorICAgIHJl dHVybjsKKworICAqdGhpc19pZCA9IGZyYW1lX2lkX2J1aWxkIChjYWNoZS0+ cHJldl9zcCwgY2FjaGUtPnBjKTsKK30KKworLyogSW1wbGVtZW50IHRoZSAi cHJldl9yZWdpc3RlciIgZnJhbWVfdW53aW5kIG1ldGhvZC4gICovCisKK3N0 YXRpYyBzdHJ1Y3QgdmFsdWUgKgorbmRzMzJfZXBpbG9ndWVfZnJhbWVfcHJl dl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisJ CQkJICAgIHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQoreworICBz dHJ1Y3QgbmRzMzJfZnJhbWVfY2FjaGUgKmNhY2hlCisgICAgPSBuZHMzMl9l cGlsb2d1ZV9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7 CisKKyAgaWYgKHJlZ251bSA9PSBORFMzMl9TUF9SRUdOVU0pCisgICAgcmV0 dXJuIGZyYW1lX3Vud2luZF9nb3RfY29uc3RhbnQgKHRoaXNfZnJhbWUsIHJl Z251bSwgY2FjaGUtPnByZXZfc3ApOworCisgIC8qIFRoZSBQQyBvZiB0aGUg cHJldmlvdXMgZnJhbWUgaXMgc3RvcmVkIGluIHRoZSBMUCByZWdpc3RlciBv ZgorICAgICB0aGUgY3VycmVudCBmcmFtZS4gICovCisgIGlmIChyZWdudW0g PT0gTkRTMzJfUENfUkVHTlVNKQorICAgIHJlZ251bSA9IE5EUzMyX0xQX1JF R05VTTsKKworICBpZiAocmVnbnVtIDwgTkRTMzJfTlVNX1NBVkVEX1JFR1Mg JiYgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAhPSBSRUdfVU5BVkFJTCkK KyAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkgKHRoaXNfZnJh bWUsIHJlZ251bSwKKwkJCQkgICAgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVt XSk7CisKKyAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfcmVnaXN0ZXIgKHRo aXNfZnJhbWUsIHJlZ251bSwgcmVnbnVtKTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBmcmFtZV91bndpbmQgbmRzMzJfZXBpbG9ndWVfZnJhbWVfdW53 aW5kID0KK3sKKyAgTk9STUFMX0ZSQU1FLAorICBkZWZhdWx0X2ZyYW1lX3Vu d2luZF9zdG9wX3JlYXNvbiwKKyAgbmRzMzJfZXBpbG9ndWVfZnJhbWVfdGhp c19pZCwKKyAgbmRzMzJfZXBpbG9ndWVfZnJhbWVfcHJldl9yZWdpc3RlciwK KyAgTlVMTCwKKyAgbmRzMzJfZXBpbG9ndWVfZnJhbWVfc25pZmZlcgorfTsK KwwKKy8qIEltcGxlbWVudCB0aGUgImR1bW15X2lkIiBnZGJhcmNoIG1ldGhv ZC4gICovCisKK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfaWQKK25kczMyX2R1bW15 X2lkIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGZyYW1lX2lu Zm8gKnRoaXNfZnJhbWUpCit7CisgIENPUkVfQUREUiBzcCA9IGdldF9mcmFt ZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgTkRTMzJfU1BfUkVH TlVNKTsKKworICByZXR1cm4gZnJhbWVfaWRfYnVpbGQgKHNwLCBnZXRfZnJh bWVfcGMgKHRoaXNfZnJhbWUpKTsKK30KKworLyogSW1wbGVtZW50IHRoZSAi dW53aW5kX3BjIiBnZGJhcmNoIG1ldGhvZC4gICovCisKK3N0YXRpYyBDT1JF X0FERFIKK25kczMyX3Vud2luZF9wYyAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsIHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQoreworICByZXR1 cm4gZnJhbWVfdW53aW5kX3JlZ2lzdGVyX3Vuc2lnbmVkIChuZXh0X2ZyYW1l LCBORFMzMl9QQ19SRUdOVU0pOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJ1 bndpbmRfc3AiIGdkYmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIENPUkVf QUREUgorbmRzMzJfdW53aW5kX3NwIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCwgc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCit7CisgIHJldHVy biBmcmFtZV91bndpbmRfcmVnaXN0ZXJfdW5zaWduZWQgKG5leHRfZnJhbWUs IE5EUzMyX1NQX1JFR05VTSk7Cit9CisMCisvKiBGbG9hdGluZyB0eXBlIGFu ZCBzdHJ1Y3QgdHlwZSB0aGF0IGhhcyBvbmx5IG9uZSBmbG9hdGluZyB0eXBl IG1lbWJlcgorICAgY2FuIHBhc3MgdmFsdWUgdXNpbmcgRlBVIHJlZ2lzdGVy cyAod2hlbiBGUFUgQUJJIGlzIHVzZWQpLiAgKi8KKworc3RhdGljIGludAor bmRzMzJfY2hlY2tfY2FsbGluZ191c2VfZnByIChzdHJ1Y3QgdHlwZSAqdHlw ZSkKK3sKKyAgc3RydWN0IHR5cGUgKnQ7CisgIGVudW0gdHlwZV9jb2RlIHR5 cGVjb2RlOworCisgIHQgPSB0eXBlOworICB3aGlsZSAoMSkKKyAgICB7Cisg ICAgICB0ID0gY2hlY2tfdHlwZWRlZiAodCk7CisgICAgICB0eXBlY29kZSA9 IFRZUEVfQ09ERSAodCk7CisgICAgICBpZiAodHlwZWNvZGUgIT0gVFlQRV9D T0RFX1NUUlVDVCkKKwlicmVhazsKKyAgICAgIGVsc2UgaWYgKFRZUEVfTkZJ RUxEUyAodCkgIT0gMSkKKwlyZXR1cm4gMDsKKyAgICAgIGVsc2UKKwl0ID0g VFlQRV9GSUVMRF9UWVBFICh0LCAwKTsKKyAgICB9CisKKyAgcmV0dXJuIHR5 cGVjb2RlID09IFRZUEVfQ09ERV9GTFQ7Cit9CisKKy8qIFJldHVybiB0aGUg YWxpZ25tZW50IChpbiBieXRlcykgb2YgdGhlIGdpdmVuIHR5cGUuICAqLwor CitzdGF0aWMgaW50CituZHMzMl90eXBlX2FsaWduIChzdHJ1Y3QgdHlwZSAq dHlwZSkKK3sKKyAgaW50IG47CisgIGludCBhbGlnbjsKKyAgaW50IGZhbGln bjsKKworICB0eXBlID0gY2hlY2tfdHlwZWRlZiAodHlwZSk7CisgIHN3aXRj aCAoVFlQRV9DT0RFICh0eXBlKSkKKyAgICB7CisgICAgZGVmYXVsdDoKKyAg ICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4uICAqLworICAgICAgaW50ZXJu YWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywgXygidW5rbm93biB0eXBl IGFsaWdubWVudCIpKTsKKyAgICAgIHJldHVybiA0OworCisgICAgY2FzZSBU WVBFX0NPREVfUFRSOgorICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06CisgICAg Y2FzZSBUWVBFX0NPREVfSU5UOgorICAgIGNhc2UgVFlQRV9DT0RFX0ZMVDoK KyAgICBjYXNlIFRZUEVfQ09ERV9TRVQ6CisgICAgY2FzZSBUWVBFX0NPREVf UkFOR0U6CisgICAgY2FzZSBUWVBFX0NPREVfUkVGOgorICAgIGNhc2UgVFlQ RV9DT0RFX0NIQVI6CisgICAgY2FzZSBUWVBFX0NPREVfQk9PTDoKKyAgICAg IHJldHVybiBUWVBFX0xFTkdUSCAodHlwZSk7CisKKyAgICBjYXNlIFRZUEVf Q09ERV9BUlJBWToKKyAgICBjYXNlIFRZUEVfQ09ERV9DT01QTEVYOgorICAg ICAgcmV0dXJuIG5kczMyX3R5cGVfYWxpZ24gKFRZUEVfVEFSR0VUX1RZUEUg KHR5cGUpKTsKKworICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAgICBj YXNlIFRZUEVfQ09ERV9VTklPTjoKKyAgICAgIGFsaWduID0gMTsKKyAgICAg IGZvciAobiA9IDA7IG4gPCBUWVBFX05GSUVMRFMgKHR5cGUpOyBuKyspCisJ eworCSAgZmFsaWduID0gbmRzMzJfdHlwZV9hbGlnbiAoVFlQRV9GSUVMRF9U WVBFICh0eXBlLCBuKSk7CisJICBpZiAoZmFsaWduID4gYWxpZ24pCisJICAg IGFsaWduID0gZmFsaWduOworCX0KKyAgICAgIHJldHVybiBhbGlnbjsKKyAg ICB9Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInB1c2hfZHVtbXlfY2FsbCIg Z2RiYXJjaCBtZXRob2QuICAqLworCitzdGF0aWMgQ09SRV9BRERSCituZHMz Ml9wdXNoX2R1bW15X2NhbGwgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBz dHJ1Y3QgdmFsdWUgKmZ1bmN0aW9uLAorCQkgICAgICAgc3RydWN0IHJlZ2Nh Y2hlICpyZWdjYWNoZSwgQ09SRV9BRERSIGJwX2FkZHIsCisJCSAgICAgICBp bnQgbmFyZ3MsIHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIENPUkVfQUREUiBzcCwK KwkJICAgICAgIGludCBzdHJ1Y3RfcmV0dXJuLCBDT1JFX0FERFIgc3RydWN0 X2FkZHIpCit7CisgIGNvbnN0IGludCBSRU5EID0gNjsJCS8qIEVuZCBmb3Ig cmVnaXN0ZXIgb2Zmc2V0LiAgKi8KKyAgaW50IGdvZmYgPSAwOwkJCS8qIEN1 cnJlbnQgZ3ByIG9mZnNldCBmb3IgYXJndW1lbnQuICAqLworICBpbnQgZm9m ZiA9IDA7CQkJLyogQ3VycmVudCBmcHIgb2Zmc2V0IGZvciBhcmd1bWVudC4g ICovCisgIGludCBzb2ZmID0gMDsJCQkvKiBDdXJyZW50IHN0YWNrIG9mZnNl dCBmb3IgYXJndW1lbnQuICAqLworICBpbnQgaTsKKyAgVUxPTkdFU1QgcmVn dmFsOworICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hf Ynl0ZV9vcmRlciAoZ2RiYXJjaCk7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAg KnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworICBzdHJ1Y3QgdHlw ZSAqZnVuY190eXBlID0gdmFsdWVfdHlwZSAoZnVuY3Rpb24pOworICBpbnQg YWJpX3VzZV9mcHIgPSBuZHMzMl9hYmlfdXNlX2ZwciAodGRlcC0+YWJpKTsK KyAgaW50IGFiaV9zcGxpdCA9IG5kczMyX2FiaV9zcGxpdCAodGRlcC0+YWJp KTsKKworICAvKiBTZXQgdGhlIHJldHVybiBhZGRyZXNzLiAgRm9yIHRoZSBO RFMzMiwgdGhlIHJldHVybiBicmVha3BvaW50IGlzCisgICAgIGFsd2F5cyBh dCBCUF9BRERSLiAgKi8KKyAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2ln bmVkIChyZWdjYWNoZSwgTkRTMzJfTFBfUkVHTlVNLCBicF9hZGRyKTsKKwor ICAvKiBJZiBTVFJVQ1RfUkVUVVJOIGlzIHRydWUsIHRoZW4gdGhlIHN0cnVj dCByZXR1cm4gYWRkcmVzcyAoaW4KKyAgICAgU1RSVUNUX0FERFIpIHdpbGwg Y29uc3VtZSB0aGUgZmlyc3QgYXJndW1lbnQtcGFzc2luZyByZWdpc3Rlci4K KyAgICAgQm90aCBhZGp1c3QgdGhlIHJlZ2lzdGVyIGNvdW50IGFuZCBzdG9y ZSB0aGF0IHZhbHVlLiAgKi8KKyAgaWYgKHN0cnVjdF9yZXR1cm4pCisgICAg eworICAgICAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdj YWNoZSwgTkRTMzJfUjBfUkVHTlVNLCBzdHJ1Y3RfYWRkcik7CisgICAgICBn b2ZmKys7CisgICAgfQorCisgIC8qIE5vdyBtYWtlIHN1cmUgdGhlcmUncyBz cGFjZSBvbiB0aGUgc3RhY2sgKi8KKyAgZm9yIChpID0gMDsgaSA8IG5hcmdz OyBpKyspCisgICAgeworICAgICAgc3RydWN0IHR5cGUgKnR5cGUgPSB2YWx1 ZV90eXBlIChhcmdzW2ldKTsKKyAgICAgIGludCBhbGlnbiA9IG5kczMyX3R5 cGVfYWxpZ24gKHR5cGUpOworCisgICAgICAvKiBJZiBhbGlnbiBpcyB6ZXJv LCBpdCBtYXkgYmUgYW4gZW1wdHkgc3RydWN0LgorCSBKdXN0IGlnbm9yZSB0 aGUgYXJndW1lbnQgb2YgZW1wdHkgc3RydWN0LiAgKi8KKyAgICAgIGlmIChh bGlnbiA9PSAwKQorCWNvbnRpbnVlOworCisgICAgICBzcCAtPSBUWVBFX0xF TkdUSCAodHlwZSk7CisgICAgICBzcCA9IGFsaWduX2Rvd24gKHNwLCBhbGln bik7CisgICAgfQorCisgIC8qIFN0YWNrIG11c3QgYmUgOC1ieXRlIGFsaWdu ZWQuICAqLworICBzcCA9IGFsaWduX2Rvd24gKHNwLCA4KTsKKworICBzb2Zm ID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisgICAgewor ICAgICAgY29uc3QgZ2RiX2J5dGUgKnZhbDsKKyAgICAgIGludCBhbGlnbiwg bGVuOworICAgICAgc3RydWN0IHR5cGUgKnR5cGU7CisgICAgICBpbnQgY2Fs bGluZ191c2VfZnByOworICAgICAgaW50IHVzZV9mcHIgPSAwOworCisgICAg ICB0eXBlID0gdmFsdWVfdHlwZSAoYXJnc1tpXSk7CisgICAgICBjYWxsaW5n X3VzZV9mcHIgPSBuZHMzMl9jaGVja19jYWxsaW5nX3VzZV9mcHIgKHR5cGUp OworICAgICAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOworICAgICAgYWxp Z24gPSBuZHMzMl90eXBlX2FsaWduICh0eXBlKTsKKyAgICAgIHZhbCA9IHZh bHVlX2NvbnRlbnRzIChhcmdzW2ldKTsKKworICAgICAgLyogVGhlIHNpemUg b2YgYSBjb21wb3NpdGUgdHlwZSBsYXJnZXIgdGhhbiA0IGJ5dGVzIHdpbGwg YmUgcm91bmRlZAorCSB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiA0 LiAgKi8KKyAgICAgIGlmIChsZW4gPiA0KQorCWxlbiA9IGFsaWduX3VwIChs ZW4sIDQpOworCisgICAgICAvKiBWYXJpYWRpYyBmdW5jdGlvbnMgYXJlIGhh bmRsZWQgZGlmZmVyZW50bHkgYmV0d2VlbiBBQUJJIGFuZCBBQkkyRlArLgor CisJIEZvciBBQUJJLCB0aGUgY2FsbGVyIHB1c2hlcyBhcmd1bWVudHMgaW4g cmVnaXN0ZXJzLCBjYWxsZWUgc3RvcmVzCisJIHVubmFtZWQgYXJndW1lbnRz IGluIHN0YWNrLCBhbmQgdGhlbiB2YV9hcmcgZmV0Y2ggYXJndW1lbnRzIGlu IHN0YWNrLgorCSBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxl IHZhcmlhZGljIGZ1bmN0aW9ucyBzcGVjaWFsbHkuCisKKwkgRm9yIEFCSTJG UCssIHRoZSBjYWxsZXIgcHVzaGVzIG9ubHkgbmFtZWQgYXJndW1lbnRzIGlu IHJlZ2lzdGVycworCSBhbmQgcHVzaGVzIGFsbCB1bm5hbWVkIGFyZ3VtZW50 cyBpbiBzdGFjay4gICovCisKKyAgICAgIGlmIChhYmlfdXNlX2ZwciAmJiBU WVBFX1ZBUkFSR1MgKGZ1bmNfdHlwZSkKKwkgICYmIGkgPj0gVFlQRV9ORklF TERTIChmdW5jX3R5cGUpKQorCWdvdG8gdXNlX3N0YWNrOworCisgICAgICAv KiBUcnkgdG8gdXNlIEZQUnMgdG8gcGFzcyBhcmd1bWVudHMgb25seSB3aGVu CisJIDEuIFRoZSBwcm9ncmFtIGlzIGJ1aWx0IHVzaW5nIHRvb2xjaGFpbiB3 aXRoIEZQVSBzdXBwb3J0LgorCSAyLiBUaGUgdHlwZSBvZiB0aGlzIGFyZ3Vt ZW50IGNhbiB1c2UgRlBSIHRvIHBhc3MgdmFsdWUuICAqLworICAgICAgdXNl X2ZwciA9IGFiaV91c2VfZnByICYmIGNhbGxpbmdfdXNlX2ZwcjsKKworICAg ICAgaWYgKHVzZV9mcHIpCisJeworCSAgLyogQWRqdXN0IGFsaWdubWVudC4g ICovCisJICBpZiAoKGFsaWduID4+IDIpID4gMCkKKwkgICAgZm9mZiA9IGFs aWduX3VwIChmb2ZmLCBhbGlnbiA+PiAyKTsKKworCSAgaWYgKGZvZmYgPCBS RU5EKQorCSAgICB7CisJICAgICAgaW50IGZzMF9yZWdudW0gPSB0ZGVwLT5m czBfcmVnbnVtOworCSAgICAgIGludCBmZDBfcmVnbnVtID0gdGRlcC0+ZmQw X3JlZ251bTsKKworCSAgICAgIGlmIChmczBfcmVnbnVtID09IC0xKQorCQln b3RvIGVycm9yX25vX2ZwcjsKKworCSAgICAgIHN3aXRjaCAobGVuKQorCQl7 CisJCWNhc2UgNDoKKwkJICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2Nh Y2hlLCBmczBfcmVnbnVtICsgZm9mZiwgdmFsKTsKKwkJICBmb2ZmKys7CisJ CSAgYnJlYWs7CisJCWNhc2UgODoKKwkJICByZWdjYWNoZV9jb29rZWRfd3Jp dGUgKHJlZ2NhY2hlLCBmZDBfcmVnbnVtICsgZm9mZiAvIDIsIHZhbCk7CisJ CSAgZm9mZiArPSAyOworCQkgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgIC8q IExvbmcgZG91YmxlPyAgKi8KKwkJICBpbnRlcm5hbF9lcnJvciAoX19GSUxF X18sIF9fTElORV9fLAorCQkJCSAgIkRvIG5vdCBrbm93IGhvdyB0byBoYW5k bGUgJWQtYnl0ZSBkb3VibGUuXG4iLAorCQkJCSAgbGVuKTsKKwkJICBicmVh azsKKwkJfQorCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJfQorICAgICAg ZWxzZQorCXsKKwkgIC8qCisJICAgICBXaGVuIHBhc3NpbmcgYXJndW1lbnRz IHVzaW5nIEdQUnMsCisKKwkgICAgICogQSBjb21wb3NpdGUgdHlwZSBub3Qg bGFyZ2VyIHRoYW4gNCBieXRlcyBpcyBwYXNzZWQgaW4gJHJOLgorCSAgICAg ICBUaGUgZm9ybWF0IGlzIGFzIGlmIHRoZSB2YWx1ZSBpcyBsb2FkZWQgd2l0 aCBsb2FkIGluc3RydWN0aW9uCisJICAgICAgIG9mIGNvcnJlc3BvbmRpbmcg c2l6ZSAoZS5nLiwgTEIsIExILCBMVykuCisKKwkgICAgICAgRm9yIGV4YW1w bGUsCisKKwkJICAgICAgIHIwCisJCSAgICAgICAzMSAgICAgIDAKKwkgICAg ICAgTElUVExFOiBbeCB4IGIgYV0KKwkJICBCSUc6IFt4IHggYSBiXQorCisJ ICAgICAqIE90aGVyd2lzZSwgYSBjb21wb3NpdGUgdHlwZSBpcyBwYXNzZWQg aW4gY29uc2VjdXRpdmUgcmVnaXN0ZXJzLgorCSAgICAgICBUaGUgc2l6ZSBp cyByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIDQuCisJ ICAgICAgIFRoZSBzdWNjZXNzaXZlIHJlZ2lzdGVycyBob2xkIHRoZSBwYXJ0 cyBvZiB0aGUgYXJndW1lbnQgYXMgaWYKKwkgICAgICAgd2VyZSBsb2FkZWQg dXNpbmcgbG13IGluc3RydWN0aW9ucy4KKworCSAgICAgICBGb3IgZXhhbXBs ZSwKKworCQkgICAgICAgcjAJIHIxCisJCSAgICAgICAzMSAgICAgIDAgMzEg ICAgICAwCisJICAgICAgIExJVFRMRTogW2QgYyBiIGFdIFt4IHggeCBlXQor CQkgIEJJRzogW2EgYiBjIGRdIFtlIHggeCB4XQorCSAgICovCisKKwkgIC8q IEFkanVzdCBhbGlnbm1lbnQuICAqLworCSAgaWYgKChhbGlnbiA+PiAyKSA+ IDApCisJICAgIGdvZmYgPSBhbGlnbl91cCAoZ29mZiwgYWxpZ24gPj4gMik7 CisKKwkgIGlmIChsZW4gPD0gKFJFTkQgLSBnb2ZmKSAqIDQpCisJICAgIHsK KwkgICAgICAvKiBUaGlzIGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgd2hvbGx5 IHZpYSBHUFJzLiAgKi8KKwkgICAgICB3aGlsZSAobGVuID4gMCkKKwkJewor CQkgIHJlZ3ZhbCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAodmFsLCAo bGVuID4gNCkgPyA0IDogbGVuLAorCQkJCQkJICAgICBieXRlX29yZGVyKTsK KwkJICByZWdjYWNoZV9jb29rZWRfd3JpdGVfdW5zaWduZWQgKHJlZ2NhY2hl LAorCQkJCQkJICBORFMzMl9SMF9SRUdOVU0gKyBnb2ZmLAorCQkJCQkJICBy ZWd2YWwpOworCQkgIGxlbiAtPSA0OworCQkgIHZhbCArPSA0OworCQkgIGdv ZmYrKzsKKwkJfQorCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICBlbHNl IGlmIChhYmlfc3BsaXQpCisJICAgIHsKKwkgICAgICAvKiBTb21lIHBhcnRz IG9mIHRoaXMgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCB2aWEgR1BScy4gICov CisJICAgICAgd2hpbGUgKGdvZmYgPCBSRU5EKQorCQl7CisJCSAgcmVndmFs ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh2YWwsIChsZW4gPiA0KSA/ IDQgOiBsZW4sCisJCQkJCQkgICAgIGJ5dGVfb3JkZXIpOworCQkgIHJlZ2Nh Y2hlX2Nvb2tlZF93cml0ZV91bnNpZ25lZCAocmVnY2FjaGUsCisJCQkJCQkg IE5EUzMyX1IwX1JFR05VTSArIGdvZmYsCisJCQkJCQkgIHJlZ3ZhbCk7CisJ CSAgbGVuIC09IDQ7CisJCSAgdmFsICs9IDQ7CisJCSAgZ29mZisrOworCQl9 CisJICAgIH0KKwl9CisKK3VzZV9zdGFjazoKKyAgICAgIC8qCisJIFdoZW4g cHVzaGluZyAoc3BsaXQgcGFydHMgb2YpIGFuIGFyZ3VtZW50IGludG8gc3Rh Y2ssCisKKwkgKiBBIGNvbXBvc2l0ZSB0eXBlIG5vdCBsYXJnZXIgdGhhbiA0 IGJ5dGVzIGlzIGNvcGllZCB0byBkaWZmZXJlbnQKKwkgICBiYXNlIGFkZHJl c3MuCisJICAgSW4gbGl0dGxlLWVuZGlhbiwgdGhlIGZpcnN0IGJ5dGUgb2Yg dGhpcyBhcmd1bWVudCBpcyBhbGlnbmVkCisJICAgYXQgdGhlIGxvdyBhZGRy ZXNzIG9mIHRoZSBuZXh0IGZyZWUgd29yZC4KKwkgICBJbiBiaWctZW5kaWFu LCB0aGUgbGFzdCBieXRlIG9mIHRoaXMgYXJndW1lbnQgaXMgYWxpZ25lZAor CSAgIGF0IHRoZSBoaWdoIGFkZHJlc3Mgb2YgdGhlIG5leHQgZnJlZSB3b3Jk LgorCisJICAgRm9yIGV4YW1wbGUsCisKKwkgICBzcCBbIC0gXSAgWyBjIF0g aGkKKwkgICAgICBbIGMgXSAgWyBiIF0KKwkgICAgICBbIGIgXSAgWyBhIF0K KwkgICAgICBbIGEgXSAgWyAtIF0gbG8KKwkgICAgIExJVFRMRSAgIEJJRwor ICAgICAgICovCisKKyAgICAgIC8qIEFkanVzdCBhbGlnbm1lbnQuICAqLwor ICAgICAgc29mZiA9IGFsaWduX3VwIChzb2ZmLCBhbGlnbik7CisKKyAgICAg IHdoaWxlIChsZW4gPiAwKQorCXsKKwkgIGludCBybGVuID0gKGxlbiA+IDQp ID8gNCA6IGxlbjsKKworCSAgaWYgKGJ5dGVfb3JkZXIgPT0gQkZEX0VORElB Tl9CSUcpCisJICAgIHdyaXRlX21lbW9yeSAoc3AgKyBzb2ZmICsgNCAtIHJs ZW4sIHZhbCwgcmxlbik7CisJICBlbHNlCisJICAgIHdyaXRlX21lbW9yeSAo c3AgKyBzb2ZmLCB2YWwsIHJsZW4pOworCisJICBsZW4gLT0gNDsKKwkgIHZh bCArPSA0OworCSAgc29mZiArPSA0OworCX0KKyAgICB9CisKKyAgLyogRmlu YWxseSwgdXBkYXRlIHRoZSBTUCByZWdpc3Rlci4gICovCisgIHJlZ2NhY2hl X2Nvb2tlZF93cml0ZV91bnNpZ25lZCAocmVnY2FjaGUsIE5EUzMyX1NQX1JF R05VTSwgc3ApOworCisgIHJldHVybiBzcDsKKworZXJyb3Jfbm9fZnByOgor ICAvKiBJZiB1c2VfZnByLCBidXQgbm8gZmxvYXRpbmctcG9pbnQgcmVnaXN0 ZXIgZXhpc3RzLAorICAgICB0aGVuIGl0IGlzIGFuIGVycm9yLiAgKi8KKyAg ZXJyb3IgKF8oIkZhaWwgdG8gY2FsbC4gRlBVIHJlZ2lzdGVycyBhcmUgcmVx dWlyZWQuIikpOworfQorDAorLyogUmVhZCwgZm9yIGFyY2hpdGVjdHVyZSBH REJBUkNILCBhIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSBvZiBUWVBFCisgICBm cm9tIFJFR0NBQ0hFLCBhbmQgY29weSB0aGF0IGludG8gVkFMQlVGLiAgKi8K Kworc3RhdGljIHZvaWQKK25kczMyX2V4dHJhY3RfcmV0dXJuX3ZhbHVlIChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IHR5cGUgKnR5cGUsCisJ CQkgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgZ2RiX2J5dGUgKnZh bGJ1ZikKK3sKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJh cmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworICBzdHJ1Y3QgZ2RiYXJjaF90 ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKyAgaW50IGFi aV91c2VfZnByID0gbmRzMzJfYWJpX3VzZV9mcHIgKHRkZXAtPmFiaSk7Cisg IGludCBjYWxsaW5nX3VzZV9mcHI7CisgIGludCBsZW47CisKKyAgY2FsbGlu Z191c2VfZnByID0gbmRzMzJfY2hlY2tfY2FsbGluZ191c2VfZnByICh0eXBl KTsKKyAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOworCisgIGlmIChhYmlf dXNlX2ZwciAmJiBjYWxsaW5nX3VzZV9mcHIpCisgICAgeworICAgICAgaWYg KGxlbiA9PSA0KQorCXJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwg dGRlcC0+ZnMwX3JlZ251bSwgdmFsYnVmKTsKKyAgICAgIGVsc2UgaWYgKGxl biA9PSA4KQorCXJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgdGRl cC0+ZmQwX3JlZ251bSwgdmFsYnVmKTsKKyAgICAgIGVsc2UKKwlpbnRlcm5h bF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLAorCQkJXygiQ2Fubm90IGV4 dHJhY3QgcmV0dXJuIHZhbHVlIG9mICVkIGJ5dGVzICIKKwkJCSAgImxvbmcg ZmxvYXRpbmctcG9pbnQuIiksIGxlbik7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgLyoKKwkgV2hlbiByZXR1cm5pbmcgcmVzdWx0LAorCisJICog QSBjb21wb3NpdGUgdHlwZSBub3QgbGFyZ2VyIHRoYW4gNCBieXRlcyBpcyBy ZXR1cm5lZCBpbiAkcjAuCisJICAgVGhlIGZvcm1hdCBpcyBhcyBpZiB0aGUg cmVzdWx0IGlzIGxvYWRlZCB3aXRoIGxvYWQgaW5zdHJ1Y3Rpb24KKwkgICBv ZiBjb3JyZXNwb25kaW5nIHNpemUgKGUuZy4sIExCLCBMSCwgTFcpLgorCisJ ICAgRm9yIGV4YW1wbGUsCisKKwkJICAgcjAKKwkJICAgMzEgICAgICAwCisJ ICAgTElUVExFOiBbeCB4IGIgYV0KKwkgICAgICBCSUc6IFt4IHggYSBiXQor CisJICogT3RoZXJ3aXNlLCBhIGNvbXBvc2l0ZSB0eXBlIG5vdCBsYXJnZXIg dGhhbiA4IGJ5dGVzIGlzIHJldHVybmVkCisJICAgaW4gJHIwIGFuZCAkcjEu CisJICAgSW4gbGl0dGxlLWVuZGlhbiwgdGhlIGZpcnN0IHdvcmQgaXMgbG9h ZGVkIGluICRyMC4KKwkgICBJbiBiaWctZW5kaWFuLCB0aGUgbGFzdCB3b3Jk IGlzIGxvYWRlZCBpbiAkcjEuCisKKwkgICBGb3IgZXhhbXBsZSwKKworCQkg ICByMAkgICAgIHIxCisJCSAgIDMxICAgICAgMCAzMSAgICAgIDAKKwkgICBM SVRUTEU6IFtkIGMgYiBhXSBbeCB4IHggZV0KKwkgICAgICBCSUc6IFt4IHgg eCBhXSBbYiBjIGQgZV0KKyAgICAgICAqLworCisgICAgICBVTE9OR0VTVCB0 bXA7CisKKyAgICAgIGlmIChsZW4gPCA0KQorCXsKKwkgIC8qIEJ5IHVzaW5n IHN0b3JlX3Vuc2lnbmVkX2ludGVnZXIgd2UgYXZvaWQgaGF2aW5nIHRvIGRv CisJICAgICBhbnl0aGluZyBzcGVjaWFsIGZvciBzbWFsbCBiaWctZW5kaWFu IHZhbHVlcy4gICovCisJICByZWdjYWNoZV9jb29rZWRfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSwgJnRtcCk7CisJICBzdG9y ZV91bnNpZ25lZF9pbnRlZ2VyICh2YWxidWYsIGxlbiwgYnl0ZV9vcmRlciwg dG1wKTsKKwl9CisgICAgICBlbHNlIGlmIChsZW4gPT0gNCkKKwl7CisJICBy ZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05V TSwgdmFsYnVmKTsKKwl9CisgICAgICBlbHNlIGlmIChsZW4gPCA4KQorCXsK KwkgIGludCBsZW4xLCBsZW4yOworCisJICBsZW4xID0gYnl0ZV9vcmRlciA9 PSBCRkRfRU5ESUFOX0JJRyA/IGxlbiAtIDQgOiA0OworCSAgbGVuMiA9IGxl biAtIGxlbjE7CisKKwkgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCAmdG1wKTsKKwkgIHN0b3Jl X3Vuc2lnbmVkX2ludGVnZXIgKHZhbGJ1ZiwgbGVuMSwgYnl0ZV9vcmRlciwg dG1wKTsKKworCSAgcmVnY2FjaGVfY29va2VkX3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCBORFMzMl9SMF9SRUdOVU0gKyAxLCAmdG1wKTsKKwkgIHN0b3Jl X3Vuc2lnbmVkX2ludGVnZXIgKHZhbGJ1ZiArIGxlbjEsIGxlbjIsIGJ5dGVf b3JkZXIsIHRtcCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlZ2NhY2hl X2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCB2YWxi dWYpOworCSAgcmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hlLCBORFMz Ml9SMF9SRUdOVU0gKyAxLCB2YWxidWYgKyA0KTsKKwl9CisgICAgfQorfQor CisvKiBXcml0ZSwgZm9yIGFyY2hpdGVjdHVyZSBHREJBUkNILCBhIGZ1bmN0 aW9uIHJldHVybiB2YWx1ZSBvZiBUWVBFCisgICBmcm9tIFZBTEJVRiBpbnRv IFJFR0NBQ0hFLiAgKi8KKworc3RhdGljIHZvaWQKK25kczMyX3N0b3JlX3Jl dHVybl92YWx1ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0 eXBlICp0eXBlLAorCQkJICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBj b25zdCBnZGJfYnl0ZSAqdmFsYnVmKQoreworICBlbnVtIGJmZF9lbmRpYW4g Ynl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7Cisg IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdk YmFyY2gpOworICBpbnQgYWJpX3VzZV9mcHIgPSBuZHMzMl9hYmlfdXNlX2Zw ciAodGRlcC0+YWJpKTsKKyAgaW50IGNhbGxpbmdfdXNlX2ZwcjsKKyAgaW50 IGxlbjsKKworICBjYWxsaW5nX3VzZV9mcHIgPSBuZHMzMl9jaGVja19jYWxs aW5nX3VzZV9mcHIgKHR5cGUpOworICBsZW4gPSBUWVBFX0xFTkdUSCAodHlw ZSk7CisKKyAgaWYgKGFiaV91c2VfZnByICYmIGNhbGxpbmdfdXNlX2ZwcikK KyAgICB7CisgICAgICBpZiAobGVuID09IDQpCisJcmVnY2FjaGVfY29va2Vk X3dyaXRlIChyZWdjYWNoZSwgdGRlcC0+ZnMwX3JlZ251bSwgdmFsYnVmKTsK KyAgICAgIGVsc2UgaWYgKGxlbiA9PSA4KQorCXJlZ2NhY2hlX2Nvb2tlZF93 cml0ZSAocmVnY2FjaGUsIHRkZXAtPmZkMF9yZWdudW0sIHZhbGJ1Zik7Cisg ICAgICBlbHNlCisJaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVf XywKKwkJCV8oIkNhbm5vdCBzdG9yZSByZXR1cm4gdmFsdWUgb2YgJWQgYnl0 ZXMgIgorCQkJICAibG9uZyBmbG9hdGluZy1wb2ludC4iKSwgbGVuKTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBVTE9OR0VTVCByZWd2YWw7CisK KyAgICAgIGlmIChsZW4gPCA0KQorCXsKKwkgIHJlZ3ZhbCA9IGV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlciAodmFsYnVmLCBsZW4sIGJ5dGVfb3JkZXIpOwor CSAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwg TkRTMzJfUjBfUkVHTlVNLCByZWd2YWwpOworCX0KKyAgICAgIGVsc2UgaWYg KGxlbiA9PSA0KQorCXsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAocmVn Y2FjaGUsIE5EUzMyX1IwX1JFR05VTSwgdmFsYnVmKTsKKwl9CisgICAgICBl bHNlIGlmIChsZW4gPCA4KQorCXsKKwkgIGludCBsZW4xLCBsZW4yOworCisJ ICBsZW4xID0gYnl0ZV9vcmRlciA9PSBCRkRfRU5ESUFOX0JJRyA/IGxlbiAt IDQgOiA0OworCSAgbGVuMiA9IGxlbiAtIGxlbjE7CisKKwkgIHJlZ3ZhbCA9 IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAodmFsYnVmLCBsZW4xLCBieXRl X29yZGVyKTsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZV91bnNpZ25lZCAo cmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSwgcmVndmFsKTsKKworCSAgcmVn dmFsID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh2YWxidWYgKyBsZW4x LCBsZW4yLCBieXRlX29yZGVyKTsKKwkgIHJlZ2NhY2hlX2Nvb2tlZF93cml0 ZV91bnNpZ25lZCAocmVnY2FjaGUsIE5EUzMyX1IwX1JFR05VTSArIDEsCisJ CQkJCSAgcmVndmFsKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVnY2Fj aGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgTkRTMzJfUjBfUkVHTlVNLCB2 YWxidWYpOworCSAgcmVnY2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwg TkRTMzJfUjBfUkVHTlVNICsgMSwgdmFsYnVmICsgNCk7CisJfQorICAgIH0K K30KKworLyogSW1wbGVtZW50IHRoZSAicmV0dXJuX3ZhbHVlIiBnZGJhcmNo IG1ldGhvZC4KKworICAgRGV0ZXJtaW5lLCBmb3IgYXJjaGl0ZWN0dXJlIEdE QkFSQ0gsIGhvdyBhIHJldHVybiB2YWx1ZSBvZiBUWVBFCisgICBzaG91bGQg YmUgcmV0dXJuZWQuICBJZiBpdCBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5l ZCBpbiByZWdpc3RlcnMsCisgICBhbmQgUkVBREJVRiBpcyBub24temVybywg cmVhZCB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgZnJvbSBSRUdDQUNIRSwKKyAg IGFuZCBjb3B5IGl0IGludG8gUkVBREJVRi4gIElmIFdSSVRFQlVGIGlzIG5v bi16ZXJvLCB3cml0ZSB0aGUgdmFsdWUKKyAgIGZyb20gV1JJVEVCVUYgaW50 byBSRUdDQUNIRS4gICovCisKK3N0YXRpYyBlbnVtIHJldHVybl92YWx1ZV9j b252ZW50aW9uCituZHMzMl9yZXR1cm5fdmFsdWUgKHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoLCBzdHJ1Y3QgdmFsdWUgKmZ1bmNfdHlwZSwKKwkJICAgIHN0 cnVjdCB0eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAor CQkgICAgZ2RiX2J5dGUgKnJlYWRidWYsIGNvbnN0IGdkYl9ieXRlICp3cml0 ZWJ1ZikKK3sKKyAgaWYgKFRZUEVfTEVOR1RIICh0eXBlKSA+IDgpCisgICAg eworICAgICAgcmV0dXJuIFJFVFVSTl9WQUxVRV9TVFJVQ1RfQ09OVkVOVElP TjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVhZGJ1ZiAh PSBOVUxMKQorCW5kczMyX2V4dHJhY3RfcmV0dXJuX3ZhbHVlIChnZGJhcmNo LCB0eXBlLCByZWdjYWNoZSwgcmVhZGJ1Zik7CisgICAgICBpZiAod3JpdGVi dWYgIT0gTlVMTCkKKwluZHMzMl9zdG9yZV9yZXR1cm5fdmFsdWUgKGdkYmFy Y2gsIHR5cGUsIHJlZ2NhY2hlLCB3cml0ZWJ1Zik7CisKKyAgICAgIHJldHVy biBSRVRVUk5fVkFMVUVfUkVHSVNURVJfQ09OVkVOVElPTjsKKyAgICB9Cit9 CisMCisvKiBJbXBsZW1lbnQgdGhlICJnZXRfbG9uZ2ptcF90YXJnZXQiIGdk YmFyY2ggbWV0aG9kLiAgKi8KKworc3RhdGljIGludAorbmRzMzJfZ2V0X2xv bmdqbXBfdGFyZ2V0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIENPUkVf QUREUiAqcGMpCit7CisgIGdkYl9ieXRlIGJ1Zls0XTsKKyAgQ09SRV9BRERS IGpiX2FkZHI7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2Zy YW1lX2FyY2ggKGZyYW1lKTsKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3Jk ZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworCisgIGpiX2Fk ZHIgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKGZyYW1lLCBORFMz Ml9SMF9SRUdOVU0pOworCisgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGpi X2FkZHIgKyAxMSAqIDQsIGJ1ZiwgNCkpCisgICAgcmV0dXJuIDA7CisKKyAg KnBjID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChidWYsIDQsIGJ5dGVf b3JkZXIpOworICByZXR1cm4gMTsKK30KKwwKKy8qIFZhbGlkYXRlIHRoZSBn aXZlbiBUREVTQywgYW5kIGZpeGVkLW51bWJlciBzb21lIHJlZ2lzdGVycyBp biBpdC4KKyAgIFJldHVybiAwIGlmIHRoZSBnaXZlbiBUREVTQyBkb2VzIG5v dCBjb250YWluIHRoZSByZXF1aXJlZCBmZWF0dXJlCisgICBvciBub3QgY29u dGFpbiByZXF1aXJlZCByZWdpc3RlcnMuICAqLworCitzdGF0aWMgaW50Citu ZHMzMl92YWxpZGF0ZV90ZGVzY19wIChjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rl c2MgKnRkZXNjLAorCQkJc3RydWN0IHRkZXNjX2FyY2hfZGF0YSAqdGRlc2Nf ZGF0YSwKKwkJCXN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXApCit7CisgIGNv bnN0IHN0cnVjdCB0ZGVzY19mZWF0dXJlICpmZWF0dXJlOworICBpbnQgaSwg ZnJlZywgdmFsaWRfcDsKKworICBmZWF0dXJlID0gdGRlc2NfZmluZF9mZWF0 dXJlICh0ZGVzYywgIm9yZy5nbnUuZ2RiLm5kczMyLmNvcmUiKTsKKyAgaWYg KGZlYXR1cmUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICB2YWxpZF9w ID0gMTsKKyAgLyogVmFsaWRhdGUgYW5kIGZpeGVkLW51bWJlciBSMC1SMTAu ICAqLworICBmb3IgKGkgPSBORFMzMl9SMF9SRUdOVU07IGkgPD0gTkRTMzJf UjBfUkVHTlVNICsgMTA7IGkrKykKKyAgICB2YWxpZF9wICY9IHRkZXNjX251 bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCB0ZGVzY19kYXRhLCBpLAorCQkJ CQluZHMzMl9yZWdpc3Rlcl9uYW1lc1tpXSk7CisKKyAgLyogVmFsaWRhdGUg UjE1LiAgKi8KKyAgdmFsaWRfcCAmPSB0ZGVzY191bm51bWJlcmVkX3JlZ2lz dGVyIChmZWF0dXJlLAorCQkJCQluZHMzMl9yZWdpc3Rlcl9uYW1lc1tORFMz Ml9UQV9SRUdOVU1dKTsKKworICAvKiBWYWxpZGF0ZSBhbmQgZml4ZWQtbnVt YmVyIEZQLCBHUCwgTFAsIFNQLCBQQy4gICovCisgIGZvciAoaSA9IE5EUzMy X0ZQX1JFR05VTTsgaSA8PSBORFMzMl9QQ19SRUdOVU07IGkrKykKKyAgICB2 YWxpZF9wICY9IHRkZXNjX251bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCB0 ZGVzY19kYXRhLCBpLAorCQkJCQluZHMzMl9yZWdpc3Rlcl9uYW1lc1tpXSk7 CisKKyAgaWYgKCF2YWxpZF9wKQorICAgIHJldHVybiAwOworCisgIC8qIEZp eGVkLW51bWJlciBSMTEtUjI3LiAgKi8KKyAgZm9yIChpID0gTkRTMzJfUjBf UkVHTlVNICsgMTE7IGkgPD0gTkRTMzJfUjBfUkVHTlVNICsgMjc7IGkrKykK KyAgICB0ZGVzY19udW1iZXJlZF9yZWdpc3RlciAoZmVhdHVyZSwgdGRlc2Nf ZGF0YSwgaSwgbmRzMzJfcmVnaXN0ZXJfbmFtZXNbaV0pOworCisgIC8qIEd1 ZXNzIEZQVSBjb25maWd1cmF0aW9uIHZpYSBsaXN0ZWQgcmVnaXN0ZXJzLiAg Ki8KKyAgZnJlZyA9IC0xOworICBmZWF0dXJlID0gdGRlc2NfZmluZF9mZWF0 dXJlICh0ZGVzYywgIm9yZy5nbnUuZ2RiLm5kczMyLmZwdSIpOworICBpZiAo ZmVhdHVyZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmICh0ZGVzY191bm51 bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCAiZmQzMSIpKQorCWZyZWcgPSAz OworICAgICAgZWxzZSBpZiAodGRlc2NfdW5udW1iZXJlZF9yZWdpc3RlciAo ZmVhdHVyZSwgImZkMTUiKSkKKwlmcmVnID0gMjsKKyAgICAgIGVsc2UgaWYg KHRkZXNjX3VubnVtYmVyZWRfcmVnaXN0ZXIgKGZlYXR1cmUsICJmZDciKSkK KwlmcmVnID0gMTsKKyAgICAgIGVsc2UgaWYgKHRkZXNjX3VubnVtYmVyZWRf cmVnaXN0ZXIgKGZlYXR1cmUsICJmZDMiKSkKKwlmcmVnID0gMDsKKyAgICB9 CisKKyAgLyogUmVjb3JkIGd1ZXNzZWQgRlBVIGNvbmZpZ3VyYXRpb24uICAq LworICB0ZGVwLT5mcHVfZnJlZyA9IGZyZWc7CisKKyAgaWYgKGZyZWcgIT0g LTEpCisgICAgeworICAgICAgaW50IG51bV9mZHJfcmVncyA9ICgxIDw8IGZy ZWcpICogNDsKKworICAgICAgLyogVmFsaWRhdGUgYW5kIGZpeGVkLW51bWJl ciByZXF1aXJlZCBGRFJzLiAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBu dW1fZmRyX3JlZ3M7IGkrKykKKwl2YWxpZF9wICY9IHRkZXNjX251bWJlcmVk X3JlZ2lzdGVyIChmZWF0dXJlLCB0ZGVzY19kYXRhLAorCQkJCQkgICAgTkRT MzJfRkQwX1JFR05VTSArIGksCisJCQkJCSAgICBuZHMzMl9mZHJfcmVnaXN0 ZXJfbmFtZXNbaV0pOworICAgICAgaWYgKCF2YWxpZF9wKQorCXJldHVybiAw OworCisgICAgICB0ZGVwLT5udW1fZmRyX3JlZ3MgPSBudW1fZmRyX3JlZ3M7 CisgICAgfQorCisgIHRkZXAtPnVzZV9wc2V1ZG9fZnNycyA9IDA7CisgIGlm IChmcmVnICE9IC0xKQorICAgIHsKKyAgICAgIGludCBudW1fZnNyX3JlZ3Mg PSAoMSA8PCBmcmVnKSAqIDg7CisKKyAgICAgIGlmIChudW1fZnNyX3JlZ3Mg PiAzMikKKwludW1fZnNyX3JlZ3MgPSAzMjsKKworICAgICAgLyogQXNzdW1l IHRoYXQgd2hlbiBGU1JzIGFyZSBsaXN0ZWQgaW4gdGFyZ2V0IGRlc2NyaXB0 aW9uLCBGUzAgbXVzdAorCSBiZSBsaXN0ZWQuICAqLworICAgICAgaWYgKHRk ZXNjX3VubnVtYmVyZWRfcmVnaXN0ZXIgKGZlYXR1cmUsICJmczAiKSA9PSAw KQorCXsKKwkgIC8qIElmIEZTUnMgYXJlIG5vdCBsaXN0ZWQgaW4gdGFyZ2V0 LWRlc2NyaXB0aW9uLCBtYWtlIHRoZW0KKwkgICAgIHBzZXVkbyByZWdpc3Rl cnMgb2YgRkRScy4gICovCisJICB0ZGVwLT51c2VfcHNldWRvX2ZzcnMgPSAx OworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBWYWxpZGF0ZSBhbmQgZml4 ZWQtbnVtYmVyIHJlcXVpcmVkIEZTUnMuICAqLworCSAgZm9yIChpID0gMDsg aSA8IG51bV9mc3JfcmVnczsgaSsrKQorCSAgICB2YWxpZF9wICY9IHRkZXNj X251bWJlcmVkX3JlZ2lzdGVyIChmZWF0dXJlLCB0ZGVzY19kYXRhLAorCQkJ CQkJTkRTMzJfRlMwX1JFR05VTSArIGksCisJCQkJCQluZHMzMl9mc3JfcmVn aXN0ZXJfbmFtZXNbaV0pOworCSAgaWYgKCF2YWxpZF9wKQorCSAgICByZXR1 cm4gMDsKKwl9CisKKyAgICAgIHRkZXAtPm51bV9mc3JfcmVncyA9IG51bV9m c3JfcmVnczsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEluaXRp YWxpemUgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGJhc2VkIG9uIElORk8u ICBJZiBwb3NzaWJsZSwKKyAgIHJlLXVzZSBhbiBhcmNoaXRlY3R1cmUgZnJv bSBBUkNIRVMsIHdoaWNoIGlzIGEgbGlzdCBvZgorICAgYXJjaGl0ZWN0dXJl cyBhbHJlYWR5IGNyZWF0ZWQgZHVyaW5nIHRoaXMgZGVidWdnaW5nIHNlc3Np b24uCisKKyAgIENhbGxlZCBlLmcuIGF0IHByb2dyYW0gc3RhcnR1cCwgd2hl biByZWFkaW5nIGEgY29yZSBmaWxlLCBhbmQgd2hlbgorICAgcmVhZGluZyBh IGJpbmFyeSBmaWxlLiAgKi8KKworc3RhdGljIHN0cnVjdCBnZGJhcmNoICoK K25kczMyX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZv LCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCit7CisgIHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoOworICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVw OworICBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICpiZXN0X2FyY2g7CisgIHN0cnVj dCB0ZGVzY19hcmNoX2RhdGEgKnRkZXNjX2RhdGEgPSBOVUxMOworICBjb25z dCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjID0gaW5mby50YXJnZXRfZGVz YzsKKyAgaW50IGksIG1heHJlZ3M7CisKKyAgdGRlcCA9IFhDTkVXIChzdHJ1 Y3QgZ2RiYXJjaF90ZGVwKTsKKworICAvKiBFeHRyYWN0IHRoZSBlbGZfZmxh Z3MgaWYgYXZhaWxhYmxlLiAgKi8KKyAgdGRlcC0+YWJpID0gRV9ORFNfQUJJ X0FBQkk7CisgIGlmIChpbmZvLmFiZmQgJiYgYmZkX2dldF9mbGF2b3VyIChp bmZvLmFiZmQpID09IGJmZF90YXJnZXRfZWxmX2ZsYXZvdXIpCisgICAgewor ICAgICAgaW50IGVmbGFncyA9IGVsZl9lbGZoZWFkZXIgKGluZm8uYWJmZCkt PmVfZmxhZ3M7CisgICAgICB0ZGVwLT5hYmkgPSBlZmxhZ3MgJiBFRl9ORFNf QUJJOworICAgIH0KKworICAvKiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgY2Fu ZGlkYXRlLCB1c2UgaXQuICAqLworICBmb3IgKGJlc3RfYXJjaCA9IGdkYmFy Y2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYXJjaGVzLCAmaW5mbyk7CisgICAg ICAgYmVzdF9hcmNoICE9IE5VTEw7CisgICAgICAgYmVzdF9hcmNoID0gZ2Ri YXJjaF9saXN0X2xvb2t1cF9ieV9pbmZvIChiZXN0X2FyY2gtPm5leHQsICZp bmZvKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICppZGVw ID0gZ2RiYXJjaF90ZGVwIChiZXN0X2FyY2gtPmdkYmFyY2gpOworCisgICAg ICBpZiAoaWRlcC0+YWJpICE9IHRkZXAtPmFiaSkKKwljb250aW51ZTsKKwor ICAgICAgLyogRm91bmQgYSBtYXRjaC4gICovCisgICAgICBicmVhazsKKyAg ICB9CisKKyAgaWYgKGJlc3RfYXJjaCAhPSBOVUxMKQorICAgIHsKKyAgICAg IHhmcmVlICh0ZGVwKTsKKyAgICAgIHJldHVybiBiZXN0X2FyY2gtPmdkYmFy Y2g7CisgICAgfQorCisgIGlmICghdGRlc2NfaGFzX3JlZ2lzdGVycyAodGRl c2MpKQorICAgIHRkZXNjID0gdGRlc2NfbmRzMzI7CisKKyAgdGRlc2NfZGF0 YSA9IHRkZXNjX2RhdGFfYWxsb2MgKCk7CisKKyAgaWYgKCFuZHMzMl92YWxp ZGF0ZV90ZGVzY19wICh0ZGVzYywgdGRlc2NfZGF0YSwgdGRlcCkpCisgICAg eworICAgICAgdGRlc2NfZGF0YV9jbGVhbnVwICh0ZGVzY19kYXRhKTsKKyAg ICAgIHhmcmVlICh0ZGVwKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0K KworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIG5ldyBhcmNoaXRlY3R1 cmUuICAqLworICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRk ZXApOworCisgIGlmICh0ZGVwLT51c2VfcHNldWRvX2ZzcnMpCisgICAgewor ICAgICAgc2V0X2dkYmFyY2hfbnVtX3BzZXVkb19yZWdzIChnZGJhcmNoLCB0 ZGVwLT5udW1fZnNyX3JlZ3MpOworICAgICAgc2V0X2dkYmFyY2hfcHNldWRv X3JlZ2lzdGVyX3JlYWQgKGdkYmFyY2gsIG5kczMyX3BzZXVkb19yZWdpc3Rl cl9yZWFkKTsKKyAgICAgIHNldF9nZGJhcmNoX3BzZXVkb19yZWdpc3Rlcl93 cml0ZSAoZ2RiYXJjaCwgbmRzMzJfcHNldWRvX3JlZ2lzdGVyX3dyaXRlKTsK KyAgICAgIHNldF90ZGVzY19wc2V1ZG9fcmVnaXN0ZXJfbmFtZSAoZ2RiYXJj aCwgbmRzMzJfcHNldWRvX3JlZ2lzdGVyX25hbWUpOworICAgICAgc2V0X3Rk ZXNjX3BzZXVkb19yZWdpc3Rlcl90eXBlIChnZGJhcmNoLCBuZHMzMl9wc2V1 ZG9fcmVnaXN0ZXJfdHlwZSk7CisgICAgfQorCisgIGlmICh0ZGVwLT5mcHVf ZnJlZyA9PSAtMSkKKyAgICBzZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJj aCwgTkRTMzJfTlVNX1JFR1MpOworICBlbHNlIGlmICh0ZGVwLT51c2VfcHNl dWRvX2ZzcnMgPT0gMSkKKyAgICBzZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2Ri YXJjaCwgTkRTMzJfRkQwX1JFR05VTSArIHRkZXAtPm51bV9mZHJfcmVncyk7 CisgIGVsc2UKKyAgICBzZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCwg TkRTMzJfRlMwX1JFR05VTSArIHRkZXAtPm51bV9mc3JfcmVncyk7CisgIHRk ZXNjX3VzZV9yZWdpc3RlcnMgKGdkYmFyY2gsIHRkZXNjLCB0ZGVzY19kYXRh KTsKKworICAvKiBDYWNoZSB0aGUgcmVnaXN0ZXIgbnVtYmVyIG9mIGZzMCBh bmQgZmQwLiAgKi8KKyAgdGRlcC0+ZnMwX3JlZ251bSA9IC0xOworICB0ZGVw LT5mZDBfcmVnbnVtID0gLTE7CisgIGlmICh0ZGVwLT5mcHVfZnJlZyAhPSAt MSkKKyAgICB7CisgICAgICB0ZGVwLT5mczBfcmVnbnVtID0gdXNlcl9yZWdf bWFwX25hbWVfdG9fcmVnbnVtIChnZGJhcmNoLCAiZnMwIiwgLTEpOworICAg ICAgdGRlcC0+ZmQwX3JlZ251bSA9IHVzZXJfcmVnX21hcF9uYW1lX3RvX3Jl Z251bSAoZ2RiYXJjaCwgImZkMCIsIC0xKTsKKyAgICB9CisKKyAgLyogQWRk IE5EUzMyIHJlZ2lzdGVyIGFsaWFzZXMuICBUbyBhdm9pZCBzZWFyY2ggaW4g dXNlciByZWdpc3RlciBuYW1lIHNwYWNlLAorICAgICB1c2VyX3JlZ19tYXBf bmFtZV90b19yZWdudW0gaXMgbm90IHVzZWQuICAqLworICBtYXhyZWdzID0g KGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gpICsgZ2RiYXJjaF9udW1fcHNl dWRvX3JlZ3MgKGdkYmFyY2gpKTsKKyAgZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUgKG5kczMyX3JlZ2lzdGVyX2FsaWFzZXMpOyBpKyspCisgICAgewor ICAgICAgaW50IHJlZ251bSwgajsKKworICAgICAgcmVnbnVtID0gLTE7Cisg ICAgICAvKiBTZWFyY2ggcmVnaXN0ZXIgbmFtZSBzcGFjZS4gICovCisgICAg ICBmb3IgKGogPSAwOyBqIDwgbWF4cmVnczsgaisrKQorCXsKKwkgIGNvbnN0 IGNoYXIgKnJlZ25hbWUgPSBnZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGdkYmFy Y2gsIGopOworCisJICBpZiAocmVnbmFtZSAhPSBOVUxMCisJICAgICAgJiYg c3RyY21wIChyZWduYW1lLCBuZHMzMl9yZWdpc3Rlcl9hbGlhc2VzW2ldLm5h bWUpID09IDApCisJICAgIHsKKwkgICAgICByZWdudW0gPSBqOworCSAgICAg IGJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBUcnkgbmV4dCBhbGlh cyBlbnRyeSBpZiB0aGUgZ2l2ZW4gbmFtZSBjYW4gbm90IGJlIGZvdW5kIGlu IHJlZ2lzdGVyCisJIG5hbWUgc3BhY2UuICAqLworICAgICAgaWYgKHJlZ251 bSA9PSAtMSkKKwljb250aW51ZTsKKworICAgICAgdXNlcl9yZWdfYWRkIChn ZGJhcmNoLCBuZHMzMl9yZWdpc3Rlcl9hbGlhc2VzW2ldLmFsaWFzLAorCQkg ICAgdmFsdWVfb2ZfbmRzMzJfcmVnLCAoY29uc3Qgdm9pZCAqKSAoaW50cHRy X3QpIHJlZ251bSk7CisgICAgfQorCisgIG5kczMyX2FkZF9yZWdncm91cHMg KGdkYmFyY2gpOworCisgIC8qIEhvb2sgaW4gQUJJLXNwZWNpZmljIG92ZXJy aWRlcywgaWYgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gICovCisgIGlu Zm8udGRlcF9pbmZvID0gKHZvaWQgKikgdGRlc2NfZGF0YTsKKyAgZ2RiYXJj aF9pbml0X29zYWJpIChpbmZvLCBnZGJhcmNoKTsKKworICAvKiBPdmVycmlk ZSB0ZGVzY19yZWdpc3RlciBjYWxsYmFja3MgZm9yIHN5c3RlbSByZWdpc3Rl cnMuICAqLworICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl9yZWdncm91cF9wIChn ZGJhcmNoLCBuZHMzMl9yZWdpc3Rlcl9yZWdncm91cF9wKTsKKworICBzZXRf Z2RiYXJjaF9zcF9yZWdudW0gKGdkYmFyY2gsIE5EUzMyX1NQX1JFR05VTSk7 CisgIHNldF9nZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCwgTkRTMzJfUENf UkVHTlVNKTsKKyAgc2V0X2dkYmFyY2hfdW53aW5kX3NwIChnZGJhcmNoLCBu ZHMzMl91bndpbmRfc3ApOworICBzZXRfZ2RiYXJjaF91bndpbmRfcGMgKGdk YmFyY2gsIG5kczMyX3Vud2luZF9wYyk7CisgIHNldF9nZGJhcmNoX3N0YWNr X2ZyYW1lX2Rlc3Ryb3llZF9wIChnZGJhcmNoLCBuZHMzMl9zdGFja19mcmFt ZV9kZXN0cm95ZWRfcCk7CisgIHNldF9nZGJhcmNoX2R3YXJmMl9yZWdfdG9f cmVnbnVtIChnZGJhcmNoLCBuZHMzMl9kd2FyZjJfcmVnX3RvX3JlZ251bSk7 CisKKyAgc2V0X2dkYmFyY2hfcHVzaF9kdW1teV9jYWxsIChnZGJhcmNoLCBu ZHMzMl9wdXNoX2R1bW15X2NhbGwpOworICBzZXRfZ2RiYXJjaF9yZXR1cm5f dmFsdWUgKGdkYmFyY2gsIG5kczMyX3JldHVybl92YWx1ZSk7CisgIHNldF9n ZGJhcmNoX2R1bW15X2lkIChnZGJhcmNoLCBuZHMzMl9kdW1teV9pZCk7CisK KyAgc2V0X2dkYmFyY2hfc2tpcF9wcm9sb2d1ZSAoZ2RiYXJjaCwgbmRzMzJf c2tpcF9wcm9sb2d1ZSk7CisgIHNldF9nZGJhcmNoX2lubmVyX3RoYW4gKGdk YmFyY2gsIGNvcmVfYWRkcl9sZXNzdGhhbik7CisgIHNldF9nZGJhcmNoX2Jy ZWFrcG9pbnRfZnJvbV9wYyAoZ2RiYXJjaCwgbmRzMzJfYnJlYWtwb2ludF9m cm9tX3BjKTsKKworICBzZXRfZ2RiYXJjaF9mcmFtZV9hbGlnbiAoZ2RiYXJj aCwgbmRzMzJfZnJhbWVfYWxpZ24pOworICBmcmFtZV9iYXNlX3NldF9kZWZh dWx0IChnZGJhcmNoLCAmbmRzMzJfZnJhbWVfYmFzZSk7CisKKyAgc2V0X2dk YmFyY2hfcHJpbnRfaW5zbiAoZ2RiYXJjaCwgcHJpbnRfaW5zbl9uZHMzMik7 CisKKyAgLyogSGFuZGxlIGxvbmdqbXAuICAqLworICBzZXRfZ2RiYXJjaF9n ZXRfbG9uZ2ptcF90YXJnZXQgKGdkYmFyY2gsIG5kczMyX2dldF9sb25nam1w X3RhcmdldCk7CisKKyAgLyogVGhlIG9yZGVyIG9mIGFwcGVuZGluZyBpcyB0 aGUgb3JkZXIgaXQgY2hlY2sgZnJhbWUuICAqLworICBkd2FyZjJfYXBwZW5k X3Vud2luZGVycyAoZ2RiYXJjaCk7CisgIGZyYW1lX3Vud2luZF9hcHBlbmRf dW53aW5kZXIgKGdkYmFyY2gsICZuZHMzMl9lcGlsb2d1ZV9mcmFtZV91bndp bmQpOworICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJhcmNo LCAmbmRzMzJfZnJhbWVfdW53aW5kKTsKKworICByZXR1cm4gZ2RiYXJjaDsK K30KKwordm9pZAorX2luaXRpYWxpemVfbmRzMzJfdGRlcCAodm9pZCkKK3sK KyAgLyogSW5pdGlhbGl6ZSBnZGJhcmNoLiAgKi8KKyAgcmVnaXN0ZXJfZ2Ri YXJjaF9pbml0IChiZmRfYXJjaF9uZHMzMiwgbmRzMzJfZ2RiYXJjaF9pbml0 KTsKKworICBpbml0aWFsaXplX3RkZXNjX25kczMyICgpOworICBuZHMzMl9p bml0X3JlZ2dyb3VwcyAoKTsKKworICByZWdpc3Rlcl9yZW1vdGVfc3VwcG9y dF94bWwgKCJuZHMzMiIpOworfQpkaWZmIC0tZ2l0IGEvZ2RiL25kczMyLXRk ZXAuaCBiL2dkYi9uZHMzMi10ZGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYzc1ODMyNgotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi9uZHMzMi10ZGVwLmgKQEAgLTAsMCArMSw2MSBAQAorLyogVGFyZ2V0LWRl cGVuZGVudCBjb2RlIGZvciB0aGUgTkRTMzIgYXJjaGl0ZWN0dXJlLCBmb3Ig R0RCLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFuZGVz IFRlY2hub2xvZ3kgQ29ycG9yYXRpb24uCisKKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor I2lmbmRlZiBORFMzMl9UREVQX0gKKyNkZWZpbmUgTkRTMzJfVERFUF9ICisK K2VudW0gbmRzMzJfcmVnbnVtCit7CisgIC8qIEdlbmVyYWwgcHVycG9zZSBy ZWdpc3RlcnMuICAqLworICBORFMzMl9SMF9SRUdOVU0gPSAwLAorICBORFMz Ml9SNV9SRUdOVU0gPSA1LAorICBORFMzMl9UQV9SRUdOVU0gPSAxNSwJCS8q IFRlbXBvcmFyeSByZWdpc3Rlci4gICovCisgIE5EUzMyX0ZQX1JFR05VTSA9 IDI4LAkJLyogRnJhbWUgcG9pbnRlci4gICovCisgIE5EUzMyX0dQX1JFR05V TSA9IDI5LAkJLyogR2xvYmFsIHBvaW50ZXIuICAqLworICBORFMzMl9MUF9S RUdOVU0gPSAzMCwJCS8qIExpbmsgcG9pbnRlci4gICovCisgIE5EUzMyX1NQ X1JFR05VTSA9IDMxLAkJLyogU3RhY2sgcG9pbnRlci4gICovCisKKyAgTkRT MzJfUENfUkVHTlVNID0gMzIsCQkvKiBQcm9ncmFtIGNvdW50ZXIuICAqLwor CisgIE5EUzMyX05VTV9SRUdTLAorCisgIC8qIERvdWJsZSBwcmVjaXNpb24g ZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKyAgTkRTMzJfRkQwX1JF R05VTSA9IE5EUzMyX05VTV9SRUdTLAorCisgIC8qIFNpbmdsZSBwcmVjaXNp b24gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKyAgTkRTMzJfRlMw X1JFR05VTSA9IE5EUzMyX0ZEMF9SRUdOVU0gKyAzMiwKK307CisKK3N0cnVj dCBnZGJhcmNoX3RkZXAKK3sKKyAgLyogVGhlIGd1ZXNzZWQgRlBVIGNvbmZp Z3VyYXRpb24uICAqLworICBpbnQgZnB1X2ZyZWc7CisgIC8qIEZTUnMgYXJl IGRlZmluZWQgYXMgcHNldWRvIHJlZ2lzdGVycy4gICovCisgIGludCB1c2Vf cHNldWRvX2ZzcnM7CisgIGludCBmczBfcmVnbnVtOworICBpbnQgZmQwX3Jl Z251bTsKKyAgLyogVGhlIGd1ZXNzZWQgbnVtYmVyIG9mIEZEUnMgaW1wbGVt ZW50ZWQuICAqLworICBpbnQgbnVtX2Zkcl9yZWdzOworICAvKiBUaGUgZ3Vl c3NlZCBudW1iZXIgb2YgRlNScyBpbXBsZW1lbnRlZC4gICovCisgIGludCBu dW1fZnNyX3JlZ3M7CisKKyAgaW50IGFiaTsKK307CisjZW5kaWYgLyogTkRT MzJfVERFUF9IICovCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL2Zsb2F0LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZmxvYXQu ZXhwCmluZGV4IDkzOWYwN2YuLmJjM2UyMzAgMTAwNjQ0Ci0tLSBhL2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvZmxvYXQuZXhwCisrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvZmxvYXQuZXhwCkBAIC03Niw2ICs3NiwxNSBAQCBpZiB7 IFtpc19hYXJjaDY0X3RhcmdldF0gfSB0aGVuIHsKIAkgICAgICBwYXNzICJp bmZvIGZsb2F0ICh3aXRoIEZQVSkiCiAJICB9CiAgICAgfQorfSBlbHNlaWYg W2lzdGFyZ2V0ICJuZHMzMiotKi0qIl0gdGhlbiB7CisgICAgZ2RiX3Rlc3Rf bXVsdGlwbGUgImluZm8gZmxvYXQiICJpbmZvX2Zsb2F0IiB7CisgICAgICAg IC1yZSAiZmQwLipmZDMuKiRnZGJfcHJvbXB0ICQiIHsKKyAgICAgICAgICAg IHBhc3MgImluZm8gZmxvYXQgKHdpdGggRlBVKSIKKwl9CisgICAgICAgIC1y ZSAiTm8gZmxvYXRpbmcucG9pbnQgaW5mbyBhdmFpbGFibGUgZm9yIHRoaXMg cHJvY2Vzc29yLioiIHsKKyAgICAgICAgICAgIHBhc3MgImluZm8gZmxvYXQg KHdpdGhvdXQgRlBVKSIKKwl9CisgICAgfQogfSBlbHNlaWYgW2lzdGFyZ2V0 ICJwb3dlcnBjKi0qLSoiXSB0aGVuIHsKICAgICBnZGJfdGVzdF9tdWx0aXBs ZSAiaW5mbyBmbG9hdCIgImluZm9fZmxvYXQiIHsKICAgICAgICAgLXJlICJm MC4qZjEuKmYzMS4qZnBzY3IuKiRnZGJfcHJvbXB0ICQiIHsKZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnhtbC90ZGVzYy1yZWdzLmV4cCBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnhtbC90ZGVzYy1yZWdzLmV4cAppbmRleCA0ODIw NGNkLi5jMTk3ZTI4IDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi54 bWwvdGRlc2MtcmVncy5leHAKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIueG1s L3RkZXNjLXJlZ3MuZXhwCkBAIC0zOSw2ICszOSw5IEBAIHN3aXRjaCAtZ2xv YiAtLSBbaXN0YXJnZXRdIHsKICAgICAibWlwcyotKi0qIiB7CiAJc2V0IGNv cmUtcmVncyB7bWlwcy1jcHUueG1sIG1pcHMtY3AwLnhtbCBtaXBzLWZwdS54 bWwgbWlwcy1kc3AueG1sfQogICAgIH0KKyAgICAibmRzMzIqLSotKiIgewor CXNldCBjb3JlLXJlZ3Mge25kczMyLWNvcmUueG1sfQorICAgIH0KICAgICAi bmlvczItKi0qIiB7CiAJc2V0IGNvcmUtcmVncyB7bmlvczItY3B1LnhtbH0K ICAgICB9Ci0tIAoxLjcuOS41Cgo= --------------20825A081DDF448ED6E96F8F--