From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5639 invoked by alias); 6 Nov 2018 23:56:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 5594 invoked by uid 89); 6 Nov 2018 23:56:56 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=drives, interaction, 75, joseph's X-HELO: mail-qt1-f193.google.com Received: from mail-qt1-f193.google.com (HELO mail-qt1-f193.google.com) (209.85.160.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 06 Nov 2018 23:56:49 +0000 Received: by mail-qt1-f193.google.com with SMTP id l9-v6so4805293qtj.12 for ; Tue, 06 Nov 2018 15:56:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to; bh=PXR1Gy/pggJSuMtFOP4EjZw1CmamsCLUnzyT6RzSoy4=; b=QTfW5kki/8+npqeOnJjD81n0LSR3PHeQHxfZTafQ4NrbIeAf019dOkDrMAi25+lgEC HOhf5KjxYF52UIVkZ9pTbR7gmAzOUyNcWYmCZlvZt2kJmKevfLx0hbMjnYA/gAp9PkPF u7lhXZU9STqSk5qeoAAIgYdU0z7WiFH123ep27+nw5xWNYNMviDssAXPbAqVX6Q0ZICG pb8hVBWzMZKCRrS2CBJwJaEj0HyvcUYplXmC7uPEQwGpjT8UtnUnwaFRJAiZXaN+Vkmh GAHaHpZYh5cp0zr+92vrhKU7mnY9SPKk7Xy9kAK8/YF2LJZGLsPkR/t0uXK0Y+s8YUzE tyig== Return-Path: Received: from localhost.localdomain (184-96-239-209.hlrn.qwest.net. [184.96.239.209]) by smtp.gmail.com with ESMTPSA id r49-v6sm9973723qte.21.2018.11.06.15.56.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 06 Nov 2018 15:56:44 -0800 (PST) Subject: Re: [PATCH] diagnose built-in declarations without prototype (PR 83656) To: Joseph Myers References: <393ca33b-647d-c180-311b-5e89c98ae34e@gmail.com> <20180627152728.GB7166@tucnak> <95fd48a4-2323-8b05-8196-870e8d56c94a@redhat.com> <4cf3ad40-9df8-41df-37d1-cbc3a41adc80@gmail.com> <0bbabf25-e727-163f-623a-7cc194bc7829@redhat.com> <5c4a50fc-6415-ee93-7435-6dbd3de7d1a6@gmail.com> <83825920-1535-a02c-1256-86bace24bccf@redhat.com> <0c668da8-9b19-854d-1fc7-634d1c340c18@redhat.com> <07abe7a5-62d6-a9f0-f47a-2769021ee688@gmail.com> Cc: Jeff Law , Jakub Jelinek , Gcc Patch List From: Martin Sebor Message-ID: <39ce7a25-20eb-488d-ced9-ed6041275e3b@gmail.com> Date: Tue, 06 Nov 2018 23:56:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <07abe7a5-62d6-a9f0-f47a-2769021ee688@gmail.com> Content-Type: multipart/mixed; boundary="------------84F812BE4E350E4020A0E1B8" X-IsSubscribed: yes X-SW-Source: 2018-11/txt/msg00396.txt.bz2 This is a multi-part message in MIME format. --------------84F812BE4E350E4020A0E1B8 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Content-length: 2883 In response to Joseph's comment I've removed the interaction with -Wpedantic from the updated patch. In addition, to help detect bugs like the one in the test case for pr87886, I have also enhanced the detection of incompatible calls to include integer/real type mismatches so that calls like the one below are diagnosed: extern double sqrt (); int f (int x) { return sqrt (x); // passing int where double is expected } With the removal of the -Wpedantic interaction declaring abort() without a prototype is no longer diagnosed and so the test suite changes to add the prototype are not necessary. I decided not to back them out because Jeff indicated a preference for making these kinds of improvements in general in an unrelated discussion. On 11/02/2018 05:40 PM, Martin Sebor wrote: > On 11/02/2018 04:52 PM, Joseph Myers wrote: >> On Fri, 2 Nov 2018, Martin Sebor wrote: >> >>> I have reworked the patch to resolve any lingering concerns about >>> warnings in configure tests. The attached revision only warns >>> with -Wextra and only for incompatible declarations of built-ins >>> that take arguments. For void built-ins like abort() it only >>> warns with -Wpedantic (this required adjustments to several >>> tests that are being compiled with -pedantic-errors). >> >> I don't think this use of -Wpedantic is appropriate. -Wpedantic is not a >> catch-all for warnings we don't want to enable with some other option; >> it's specifically for programs doing something that is disallowed by >> ISO C >> (such warnings may or may not also be enabled by other relevant options). >> >> Since this declaration is not disallowed by ISO C, -Wpedantic should not >> result in a warning for it. >> >> (I do consider declarations with () for built-in functions without >> arguments to be more dubious than for user-defined functions without >> arguments, simply because good practice would be to include the standard >> header to get declarations of those functions, whereas for user-defined >> functions the code might simply be using C++ style for declaring >> functions >> without arguments.) > > -Wpedantic alone doesn't cause a warning, only in conjunction > with -Wno-builtin-declaration-mismatch. > > But I have no preference for what option to put it under, or > necessarily think that using -Wpedantic (or any other "group" > option) like this is a great idea (it doesn't work with #pragma > GCC diagnostic that way I think it should). In fact, with > the latest approach of diagnosing unsafe calls to these functions > regardless of the declaration form it doesn't seem that important > that declarations of built-ins with no arguments be diagnosed at > all. Either way, there aren't enough of them for it to matter > much. I think there's just one: abort. I'm fine with removing > this part of the patch. > > Is there anything else? > > Martin --------------84F812BE4E350E4020A0E1B8 Content-Type: text/x-patch; name="gcc-83656.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gcc-83656.diff" Content-length: 82464 UFIgYy84MzY1NiAtIG1pc3NpbmcgLVdidWlsdGluLWRlY2xhcmF0aW9uLW1p c21hdGNoIG9uIGRlY2xhcmF0aW9uIHdpdGhvdXQgcHJvdG90eXBlCgpnY2Mv Yy9DaGFuZ2VMb2c6CgoJUFIgYy84MzY1NgoJKiBjLWRlY2wuYyAoaGVhZGVy X2Zvcl9idWlsdGluX2ZuKTogRGVjbGFyZS4KCShkaWFnbm9zZV9taXNtYXRj aGVkX2RlY2xzKTogRGlhZ25vc2UgZGVjbGFyYXRpb25zIG9mIGJ1aWx0LWlu CglmdW5jdGlvbnMgd2l0aG91dCBhIHByb3RvdHlwZS4KCSogYy10eXBlY2su YyAobWF5YmVfd2Fybl9idWlsdGluX25vX3Byb3RvX2FyZyk6IE5ldyBmdW5j dGlvbi4KCShjb252ZXJ0X2FyZ3VtZW50KTogU2FtZS4KCShjb252ZXJ0X2Fy Z3VtZW50cyk6IEZhY3RvciBjb2RlIG91dCBpbnRvIGNvbnZlcnRfYXJndW1l bnQuCglEZXRlY3QgbWlzbWF0Y2hlcyBiZXR3ZWVuIGJ1aWx0LWluIGZvcm1h bCBhcmd1bWVudHMgaW4gY2FsbHMKCXRvIGJ1aWx0LWluIHdpdGhvdXQgcHJv dG90eXBlLgoJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBTYW1lLgoJKHR5 cGVfb3JfYnVpbHRpbl90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNvbnZlcnRf Zm9yX2Fzc2lnbm1lbnQpOiBBZGQgYXJndW1lbnQuICBDb25kaXRpb25hbGx5 IGlzc3VlCgl3YXJuaW5ncyBpbnN0ZWFkIG9mIGVycm9ycyBmb3IgbWlzbWF0 Y2hlcy4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCVBSIGMvODM2NTYK CSogZ2NjLmRnLzIwMDIxMDA2LTEuYwoJKiBnY2MuZGcvV2J1aWx0aW4tZGVj bGFyYXRpb24tbWlzbWF0Y2guYzogTmV3IHRlc3QuCgkqIGdjYy5kZy9XYnVp bHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaC0yLmM6IE5ldyB0ZXN0LgoJKiBn Y2MuZGcvV2J1aWx0aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2gtMy5jOiBOZXcg dGVzdC4KCSogZ2NjLmRnL1didWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNo LTQuYzogTmV3IHRlc3QuCgkqIGdjYy5kZy9XYWxsb2NhLTE2LmM6IEFkanVz dC4KCSogZ2NjLmRnL1dyZXN0cmljdC00LmM6IEFkanVzdC4KCSogZ2NjLmRn L1dyZXN0cmljdC01LmM6IEFkanVzdC4KCSogZ2NjLmRnL2F0b21pYy9zdGRh dG9taWMtZ2VuZXJpYy5jOiBBZGp1c3QuCgkqIGdjYy5kZy9hdG9taWMvc3Rk YXRvbWljLWxvY2tmcmVlLmM6IEFkanVzdC4KCSogZ2NjLmRnL2luaXRwcmkx LmM6IEFkanVzdC4KCSogZ2NjLmRnL3ByMTU2OTgtMS5jOiBBZGp1c3QuCgkq IGdjYy5kZy9wcjY5MTU2LmM6IEFkanVzdC4KCSogZ2NjLmRnL3ByODM0NjMu YzogQWRqdXN0LgoJKiBnY2MuZGcvcmVkZWNsLTQuYzogQWRqdXN0LgoJKiBn Y2MuZGcvdGxzL3Roci1pbml0LTIuYzogQWRqdXN0LgoJKiBnY2MuZGcvdG9y dHVyZS9wcjU1ODkwLTIuYzogQWRqdXN0LgoJKiBnY2MuZGcvdG9ydHVyZS9w cjU1ODkwLTMuYzogQWRqdXN0LgoJKiBnY2MuZGcvdG9ydHVyZS9wcjY3NzQx LmM6IEFkanVzdC4KCSogZ2NjLmRnL3RvcnR1cmUvc3RhY2thbGlnbi9zaWJj YWxsLTEuYzogQWRqdXN0LgoJKiBnY2MuZGcvdG9ydHVyZS90bHMvdGhyLWlu aXQtMS5jOiBBZGp1c3QuCgkqIGdjYy5kZy90cmVlLXNzYS9idWlsdGlucy1m b2xkaW5nLWdpbXBsZS11Yi5jOiBBZGp1c3QuCgpkaWZmIC0tZ2l0IGEvZ2Nj L2MvYy1kZWNsLmMgYi9nY2MvYy9jLWRlY2wuYwppbmRleCBjYmJmN2ViLi41 MjRhYzgzIDEwMDY0NAotLS0gYS9nY2MvYy9jLWRlY2wuYworKysgYi9nY2Mv Yy9jLWRlY2wuYwpAQCAtNjA0LDYgKzYwNCw3IEBAIHN0YXRpYyB0cmVlIGdy b2twYXJtcyAoc3RydWN0IGNfYXJnX2luZm8gKiwgYm9vbCk7CiBzdGF0aWMg dm9pZCBsYXlvdXRfYXJyYXlfdHlwZSAodHJlZSk7CiBzdGF0aWMgdm9pZCB3 YXJuX2RlZmF1bHRzX3RvIChsb2NhdGlvbl90LCBpbnQsIGNvbnN0IGNoYXIg KiwgLi4uKQogICAgIEFUVFJJQlVURV9HQ0NfRElBRygzLDQpOworc3RhdGlj IGNvbnN0IGNoYXIgKmhlYWRlcl9mb3JfYnVpbHRpbl9mbiAoZW51bSBidWls dF9pbl9mdW5jdGlvbik7CiAMCiAvKiBUIGlzIGEgc3RhdGVtZW50LiAgQWRk IGl0IHRvIHRoZSBzdGF0ZW1lbnQtdHJlZS4gIFRoaXMgaXMgdGhlCiAgICBD L09iakMgdmVyc2lvbi0tQysrIGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCB2 ZXJzaW9uIG9mIHRoaXMKQEAgLTE4ODcsMTIgKzE4ODgsMjUgQEAgZGlhZ25v c2VfbWlzbWF0Y2hlZF9kZWNscyAodHJlZSBuZXdkZWNsLCB0cmVlIG9sZGRl Y2wsCiAJICAgICpvbGR0eXBlcCA9IG9sZHR5cGUgPSB0cnl0eXBlOwogCSAg ZWxzZQogCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqaGVhZGVyCisJCT0g aGVhZGVyX2Zvcl9idWlsdGluX2ZuIChERUNMX0ZVTkNUSU9OX0NPREUgKG9s ZGRlY2wpKTsKKwkgICAgICBsb2NhdGlvbl90IGxvYyA9IERFQ0xfU09VUkNF X0xPQ0FUSU9OIChuZXdkZWNsKTsKKwkgICAgICBpZiAod2FybmluZ19hdCAo bG9jLCBPUFRfV2J1aWx0aW5fZGVjbGFyYXRpb25fbWlzbWF0Y2gsCisJCQkg ICAgICAiY29uZmxpY3RpbmcgdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9u ICVxK0Q7ICIKKwkJCSAgICAgICJleHBlY3RlZCAlcVQiLAorCQkJICAgICAg bmV3ZGVjbCwgb2xkdHlwZSkKKwkJICAmJiBoZWFkZXIpCisJCXsKKwkJICAv KiBTdWdnZXN0IHRoZSByaWdodCBoZWFkZXIgdG8gaW5jbHVkZSBhcyB0aGUg cHJlZmVycmVkCisJCSAgICAgc29sdXRpb24gcmF0aGVyIHRoYW4gdGhlIHNw ZWxsaW5nIG9mIHRoZSBkZWNsYXJhdGlvbi4gICovCisJCSAgcmljaF9sb2Nh dGlvbiByaWNobG9jIChsaW5lX3RhYmxlLCBsb2MpOworCQkgIG1heWJlX2Fk ZF9pbmNsdWRlX2ZpeGl0ICgmcmljaGxvYywgaGVhZGVyLCB0cnVlKTsKKwkJ ICBpbmZvcm0gKCZyaWNobG9jLAorCQkJICAiJXFEIGlzIGRlY2xhcmVkIGlu IGhlYWRlciAlcXMiLCBvbGRkZWNsLCBoZWFkZXIpOworCQl9CiAJICAgICAg LyogSWYgdHlwZXMgZG9uJ3QgbWF0Y2ggZm9yIGEgYnVpbHQtaW4sIHRocm93 IGF3YXkgdGhlCiAJCSBidWlsdC1pbi4gIE5vIHBvaW50IGluIGNhbGxpbmcg bG9jYXRlX29sZF9kZWNsIGhlcmUsIGl0CiAJCSB3b24ndCBwcmludCBhbnl0 aGluZy4gICovCi0JICAgICAgd2FybmluZyAoT1BUX1didWlsdGluX2RlY2xh cmF0aW9uX21pc21hdGNoLAotCQkgICAgICAgImNvbmZsaWN0aW5nIHR5cGVz IGZvciBidWlsdC1pbiBmdW5jdGlvbiAlcStEIiwKLQkJICAgICAgIG5ld2Rl Y2wpOwogCSAgICAgIHJldHVybiBmYWxzZTsKIAkgICAgfQogCX0KQEAgLTIw MjYsMTUgKzIwNDAsMzMgQEAgZGlhZ25vc2VfbWlzbWF0Y2hlZF9kZWNscyAo dHJlZSBuZXdkZWNsLCB0cmVlIG9sZGRlY2wsCiAJIGNhbid0IHZhbGlkYXRl IHRoZSBhcmd1bWVudCBsaXN0KSB0aGUgYnVpbHQtaW4gZGVmaW5pdGlvbiBp cwogCSBvdmVycmlkZGVuLCBidXQgb3B0aW9uYWxseSB3YXJuIHRoaXMgd2Fz IGEgYmFkIGNob2ljZSBvZiBuYW1lLiAgKi8KICAgICAgIGlmIChmbmRlY2xf YnVpbHRfaW5fcCAob2xkZGVjbCkKLQkgICYmICFDX0RFQ0xfREVDTEFSRURf QlVJTFRJTiAob2xkZGVjbCkKLQkgICYmICghVFJFRV9QVUJMSUMgKG5ld2Rl Y2wpCi0JICAgICAgfHwgKERFQ0xfSU5JVElBTCAobmV3ZGVjbCkKLQkJICAm JiAhcHJvdG90eXBlX3AgKFRSRUVfVFlQRSAobmV3ZGVjbCkpKSkpCisJICAm JiAhQ19ERUNMX0RFQ0xBUkVEX0JVSUxUSU4gKG9sZGRlY2wpKQogCXsKLQkg IHdhcm5pbmcgKE9QVF9Xc2hhZG93LCAiZGVjbGFyYXRpb24gb2YgJXErRCBz aGFkb3dzICIKLQkJICAgImEgYnVpbHQtaW4gZnVuY3Rpb24iLCBuZXdkZWNs KTsKLQkgIC8qIERpc2NhcmQgdGhlIG9sZCBidWlsdC1pbiBmdW5jdGlvbi4g ICovCi0JICByZXR1cm4gZmFsc2U7CisJICBpZiAoIVRSRUVfUFVCTElDIChu ZXdkZWNsKQorCSAgICAgIHx8IChERUNMX0lOSVRJQUwgKG5ld2RlY2wpCisJ CSAgJiYgIXByb3RvdHlwZV9wIChUUkVFX1RZUEUgKG5ld2RlY2wpKSkpCisJ ICAgIHsKKwkgICAgICB3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElP TiAobmV3ZGVjbCksCisJCQkgIE9QVF9Xc2hhZG93LCAiZGVjbGFyYXRpb24g b2YgJXFEIHNoYWRvd3MgIgorCQkJICAiYSBidWlsdC1pbiBmdW5jdGlvbiIs IG5ld2RlY2wpOworCSAgICAgIC8qIERpc2NhcmQgdGhlIG9sZCBidWlsdC1p biBmdW5jdGlvbi4gICovCisJICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9 CisKKwkgIGlmICghcHJvdG90eXBlX3AgKFRSRUVfVFlQRSAobmV3ZGVjbCkp KQorCSAgICB7CisJICAgICAgLyogU2V0IGZvciBidWlsdC1pbnMgdGhhdCB0 YWtlIG5vIGFyZ3VtZW50cy4gICovCisJICAgICAgYm9vbCBmdW5jX3ZvaWRf YXJncyA9IGZhbHNlOworCSAgICAgIGlmICh0cmVlIGF0ID0gVFlQRV9BUkdf VFlQRVMgKG9sZHR5cGUpKQorCQlmdW5jX3ZvaWRfYXJncyA9IFZPSURfVFlQ RV9QIChUUkVFX1ZBTFVFIChhdCkpOworCisJICAgICAgaWYgKGV4dHJhX3dh cm5pbmdzICYmICFmdW5jX3ZvaWRfYXJncykKKwkJd2FybmluZ19hdCAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKG5ld2RlY2wpLAorCQkJICAgIE9QVF9XYnVp bHRpbl9kZWNsYXJhdGlvbl9taXNtYXRjaCwKKwkJCSAgICAiZGVjbGFyYXRp b24gb2YgYnVpbHQtaW4gZnVuY3Rpb24gJXFEIHdpdGhvdXQgIgorCQkJICAg ICJhIHByb3RvdHlwZTsgZXhwZWN0ZWQgJXFUIiwKKwkJCSAgICBuZXdkZWNs LCBUUkVFX1RZUEUgKG9sZGRlY2wpKTsKKwkgICAgfQogCX0KIAogICAgICAg aWYgKERFQ0xfSU5JVElBTCAobmV3ZGVjbCkpCmRpZmYgLS1naXQgYS9nY2Mv Yy9jLXR5cGVjay5jIGIvZ2NjL2MvYy10eXBlY2suYwppbmRleCA5ZDA5Yjhk Li40NTMzMWJlIDEwMDY0NAotLS0gYS9nY2MvYy9jLXR5cGVjay5jCisrKyBi L2djYy9jL2MtdHlwZWNrLmMKQEAgLTk3LDcgKzk3LDggQEAgc3RhdGljIGlu dCBjb252ZXJ0X2FyZ3VtZW50cyAobG9jYXRpb25fdCwgdmVjPGxvY2F0aW9u X3Q+LCB0cmVlLAogCQkJICAgICAgdHJlZSk7CiBzdGF0aWMgdHJlZSBwb2lu dGVyX2RpZmYgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUgKik7CiBz dGF0aWMgdHJlZSBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50IChsb2NhdGlvbl90 LCBsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlLAotCQkJCSAgICBlbnVt IGltcGxfY29udiwgYm9vbCwgdHJlZSwgdHJlZSwgaW50KTsKKwkJCQkgICAg ZW51bSBpbXBsX2NvbnYsIGJvb2wsIHRyZWUsIHRyZWUsIGludCwKKwkJCQkg ICAgaW50ID0gMCk7CiBzdGF0aWMgdHJlZSB2YWxpZF9jb21wb3VuZF9leHBy X2luaXRpYWxpemVyICh0cmVlLCB0cmVlKTsKIHN0YXRpYyB2b2lkIHB1c2hf c3RyaW5nIChjb25zdCBjaGFyICopOwogc3RhdGljIHZvaWQgcHVzaF9tZW1i ZXJfbmFtZSAodHJlZSk7CkBAIC0zMTgzLDYgKzMxODQsMTg4IEBAIGNfYnVp bGRfZnVuY3Rpb25fY2FsbF92ZWMgKGxvY2F0aW9uX3QgbG9jLCB2ZWM8bG9j YXRpb25fdD4gYXJnX2xvYywKICAgcmV0dXJuIGJ1aWxkX2Z1bmN0aW9uX2Nh bGxfdmVjIChsb2MsIGFyZ19sb2MsIGZ1bmN0aW9uLCBwYXJhbXMsIG9yaWd0 eXBlcyk7CiB9CiAMCisvKiBIZWxwZXIgZm9yIGNvbnZlcnRfYXJndW1lbnRz IGNhbGxlZCB0byBjb252ZXJ0IHRoZSBWQUx1ZSBvZiBhcmd1bWVudAorICAg bnVtYmVyIEFSR05VTSBmcm9tIE9SSUdUWVBFIHRvIHRoZSBjb3JyZXNwb25k aW5nIHBhcmFtZXRlciBudW1iZXIKKyAgIFBBUk1OVUwgYW5kIFRZUEUuICAq LworCitzdGF0aWMgdHJlZQorY29udmVydF9hcmd1bWVudCAobG9jYXRpb25f dCBwbG9jLCB0cmVlIGZ1bmN0aW9uLCB0cmVlIGZ1bmRlY2wsCisJCSAgdHJl ZSB0eXBlLCB0cmVlIG9yaWd0eXBlLCB0cmVlIHZhbCwgYm9vbCBucGMsCisJ CSAgdHJlZSBybmFtZSwgaW50IHBhcm1udW0sIGludCBhcmdudW0sCisJCSAg Ym9vbCBleGNlc3NfcHJlY2lzaW9uLCBpbnQgd2Fybm9wdCkKK3sKKyAgdHJl ZSB2YWx0eXBlID0gVFJFRV9UWVBFICh2YWwpOworCisgIHRyZWUgcGFybXZh bDsKKworICAvKiBGb3JtYWwgcGFybSB0eXBlIGlzIHNwZWNpZmllZCBieSBh IGZ1bmN0aW9uIHByb3RvdHlwZS4gICovCisKKyAgaWYgKHR5cGUgPT0gZXJy b3JfbWFya19ub2RlIHx8ICFDT01QTEVURV9UWVBFX1AgKHR5cGUpKQorICAg IHsKKyAgICAgIGVycm9yX2F0IChwbG9jLCAidHlwZSBvZiBmb3JtYWwgcGFy YW1ldGVyICVkIGlzIGluY29tcGxldGUiLAorCQlwYXJtbnVtICsgMSk7Cisg ICAgICBwYXJtdmFsID0gdmFsOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIC8qIE9wdGlvbmFsbHkgd2FybiBhYm91dCBjb252ZXJzaW9ucyB0aGF0 IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0CisJIGNvbnZlcnNpb25zLiAgKi8K KyAgICAgIGlmICh3YXJuX3RyYWRpdGlvbmFsX2NvbnZlcnNpb24gfHwgd2Fy bl90cmFkaXRpb25hbCkKKwl7CisJICB1bnNpZ25lZCBpbnQgZm9ybWFsX3By ZWMgPSBUWVBFX1BSRUNJU0lPTiAodHlwZSk7CisKKwkgIGlmIChJTlRFR1JB TF9UWVBFX1AgKHR5cGUpCisJICAgICAgJiYgVFJFRV9DT0RFICh2YWx0eXBl KSA9PSBSRUFMX1RZUEUpCisJICAgIHdhcm5pbmdfYXQgKHBsb2MsIE9QVF9X dHJhZGl0aW9uYWxfY29udmVyc2lvbiwKKwkJCSJwYXNzaW5nIGFyZ3VtZW50 ICVkIG9mICVxRSBhcyBpbnRlZ2VyIHJhdGhlciAiCisJCQkidGhhbiBmbG9h dGluZyBkdWUgdG8gcHJvdG90eXBlIiwKKwkJCWFyZ251bSwgcm5hbWUpOwor CSAgaWYgKElOVEVHUkFMX1RZUEVfUCAodHlwZSkKKwkgICAgICAmJiBUUkVF X0NPREUgKHZhbHR5cGUpID09IENPTVBMRVhfVFlQRSkKKwkgICAgd2Fybmlu Z19hdCAocGxvYywgT1BUX1d0cmFkaXRpb25hbF9jb252ZXJzaW9uLAorCQkJ InBhc3NpbmcgYXJndW1lbnQgJWQgb2YgJXFFIGFzIGludGVnZXIgcmF0aGVy ICIKKwkJCSJ0aGFuIGNvbXBsZXggZHVlIHRvIHByb3RvdHlwZSIsCisJCQlh cmdudW0sIHJuYW1lKTsKKwkgIGVsc2UgaWYgKFRSRUVfQ09ERSAodHlwZSkg PT0gQ09NUExFWF9UWVBFCisJCSAgICYmIFRSRUVfQ09ERSAodmFsdHlwZSkg PT0gUkVBTF9UWVBFKQorCSAgICB3YXJuaW5nX2F0IChwbG9jLCBPUFRfV3Ry YWRpdGlvbmFsX2NvbnZlcnNpb24sCisJCQkicGFzc2luZyBhcmd1bWVudCAl ZCBvZiAlcUUgYXMgY29tcGxleCByYXRoZXIgIgorCQkJInRoYW4gZmxvYXRp bmcgZHVlIHRvIHByb3RvdHlwZSIsCisJCQlhcmdudW0sIHJuYW1lKTsKKwkg IGVsc2UgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gUkVBTF9UWVBFCisJCSAg ICYmIElOVEVHUkFMX1RZUEVfUCAodmFsdHlwZSkpCisJICAgIHdhcm5pbmdf YXQgKHBsb2MsIE9QVF9XdHJhZGl0aW9uYWxfY29udmVyc2lvbiwKKwkJCSJw YXNzaW5nIGFyZ3VtZW50ICVkIG9mICVxRSBhcyBmbG9hdGluZyByYXRoZXIg IgorCQkJInRoYW4gaW50ZWdlciBkdWUgdG8gcHJvdG90eXBlIiwKKwkJCWFy Z251bSwgcm5hbWUpOworCSAgZWxzZSBpZiAoVFJFRV9DT0RFICh0eXBlKSA9 PSBDT01QTEVYX1RZUEUKKwkJICAgJiYgSU5URUdSQUxfVFlQRV9QICh2YWx0 eXBlKSkKKwkgICAgd2FybmluZ19hdCAocGxvYywgT1BUX1d0cmFkaXRpb25h bF9jb252ZXJzaW9uLAorCQkJInBhc3NpbmcgYXJndW1lbnQgJWQgb2YgJXFF IGFzIGNvbXBsZXggcmF0aGVyICIKKwkJCSJ0aGFuIGludGVnZXIgZHVlIHRv IHByb3RvdHlwZSIsCisJCQlhcmdudW0sIHJuYW1lKTsKKwkgIGVsc2UgaWYg KFRSRUVfQ09ERSAodHlwZSkgPT0gUkVBTF9UWVBFCisJCSAgICYmIFRSRUVf Q09ERSAodmFsdHlwZSkgPT0gQ09NUExFWF9UWVBFKQorCSAgICB3YXJuaW5n X2F0IChwbG9jLCBPUFRfV3RyYWRpdGlvbmFsX2NvbnZlcnNpb24sCisJCQki cGFzc2luZyBhcmd1bWVudCAlZCBvZiAlcUUgYXMgZmxvYXRpbmcgcmF0aGVy ICIKKwkJCSJ0aGFuIGNvbXBsZXggZHVlIHRvIHByb3RvdHlwZSIsCisJCQlh cmdudW0sIHJuYW1lKTsKKwkgIC8qID8/PyBBdCBzb21lIHBvaW50LCBtZXNz YWdlcyBzaG91bGQgYmUgd3JpdHRlbiBhYm91dAorCSAgICAgY29udmVyc2lv bnMgYmV0d2VlbiBjb21wbGV4IHR5cGVzLCBidXQgdGhhdCdzIHRvbyBtZXNz eQorCSAgICAgdG8gZG8gbm93LiAgKi8KKwkgIGVsc2UgaWYgKFRSRUVfQ09E RSAodHlwZSkgPT0gUkVBTF9UWVBFCisJCSAgICYmIFRSRUVfQ09ERSAodmFs dHlwZSkgPT0gUkVBTF9UWVBFKQorCSAgICB7CisJICAgICAgLyogV2FybiBp ZiBhbnkgYXJndW1lbnQgaXMgcGFzc2VkIGFzIGBmbG9hdCcsCisJCSBzaW5j ZSB3aXRob3V0IGEgcHJvdG90eXBlIGl0IHdvdWxkIGJlIGBkb3VibGUnLiAg Ki8KKwkgICAgICBpZiAoZm9ybWFsX3ByZWMgPT0gVFlQRV9QUkVDSVNJT04g KGZsb2F0X3R5cGVfbm9kZSkKKwkJICAmJiB0eXBlICE9IGRmbG9hdDMyX3R5 cGVfbm9kZSkKKwkJd2FybmluZ19hdCAocGxvYywgMCwKKwkJCSAgICAicGFz c2luZyBhcmd1bWVudCAlZCBvZiAlcUUgYXMgJTxmbG9hdCU+ICIKKwkJCSAg ICAicmF0aGVyIHRoYW4gJTxkb3VibGUlPiBkdWUgdG8gcHJvdG90eXBlIiwK KwkJCSAgICBhcmdudW0sIHJuYW1lKTsKKworCSAgICAgIC8qIFdhcm4gaWYg bWlzbWF0Y2ggYmV0d2VlbiBhcmd1bWVudCBhbmQgcHJvdG90eXBlCisJCSBm b3IgZGVjaW1hbCBmbG9hdCB0eXBlcy4gIFdhcm4gb2YgY29udmVyc2lvbnMg d2l0aAorCQkgYmluYXJ5IGZsb2F0IHR5cGVzIGFuZCBvZiBwcmVjaXNpb24g bmFycm93aW5nIGR1ZSB0bworCQkgcHJvdG90eXBlLiAqLworCSAgICAgIGVs c2UgaWYgKHR5cGUgIT0gdmFsdHlwZQorCQkgICAgICAgJiYgKHR5cGUgPT0g ZGZsb2F0MzJfdHlwZV9ub2RlCisJCQkgICB8fCB0eXBlID09IGRmbG9hdDY0 X3R5cGVfbm9kZQorCQkJICAgfHwgdHlwZSA9PSBkZmxvYXQxMjhfdHlwZV9u b2RlCisJCQkgICB8fCB2YWx0eXBlID09IGRmbG9hdDMyX3R5cGVfbm9kZQor CQkJICAgfHwgdmFsdHlwZSA9PSBkZmxvYXQ2NF90eXBlX25vZGUKKwkJCSAg IHx8IHZhbHR5cGUgPT0gZGZsb2F0MTI4X3R5cGVfbm9kZSkKKwkJICAgICAg ICYmIChmb3JtYWxfcHJlYworCQkJICAgPD0gVFlQRV9QUkVDSVNJT04gKHZh bHR5cGUpCisJCQkgICB8fCAodHlwZSA9PSBkZmxvYXQxMjhfdHlwZV9ub2Rl CisJCQkgICAgICAgJiYgKHZhbHR5cGUKKwkJCQkgICAhPSBkZmxvYXQ2NF90 eXBlX25vZGUKKwkJCQkgICAmJiAodmFsdHlwZQorCQkJCSAgICAgICAhPSBk ZmxvYXQzMl90eXBlX25vZGUpKSkKKwkJCSAgIHx8ICh0eXBlID09IGRmbG9h dDY0X3R5cGVfbm9kZQorCQkJICAgICAgICYmICh2YWx0eXBlCisJCQkJICAg IT0gZGZsb2F0MzJfdHlwZV9ub2RlKSkpKQorCQl3YXJuaW5nX2F0IChwbG9j LCAwLAorCQkJICAgICJwYXNzaW5nIGFyZ3VtZW50ICVkIG9mICVxRSBhcyAl cVQgIgorCQkJICAgICJyYXRoZXIgdGhhbiAlcVQgZHVlIHRvIHByb3RvdHlw ZSIsCisJCQkgICAgYXJnbnVtLCBybmFtZSwgdHlwZSwgdmFsdHlwZSk7CisK KwkgICAgfQorCSAgLyogRGV0ZWN0IGludGVnZXIgY2hhbmdpbmcgaW4gd2lk dGggb3Igc2lnbmVkbmVzcy4KKwkgICAgIFRoZXNlIHdhcm5pbmdzIGFyZSBv bmx5IGFjdGl2YXRlZCB3aXRoCisJICAgICAtV3RyYWRpdGlvbmFsLWNvbnZl cnNpb24sIG5vdCB3aXRoIC1XdHJhZGl0aW9uYWwuICAqLworCSAgZWxzZSBp ZiAod2Fybl90cmFkaXRpb25hbF9jb252ZXJzaW9uCisJCSAgICYmIElOVEVH UkFMX1RZUEVfUCAodHlwZSkKKwkJICAgJiYgSU5URUdSQUxfVFlQRV9QICh2 YWx0eXBlKSkKKwkgICAgeworCSAgICAgIHRyZWUgd291bGRfaGF2ZV9iZWVu ID0gZGVmYXVsdF9jb252ZXJzaW9uICh2YWwpOworCSAgICAgIHRyZWUgdHlw ZTEgPSBUUkVFX1RZUEUgKHdvdWxkX2hhdmVfYmVlbik7CisKKwkgICAgICBp ZiAodmFsID09IGVycm9yX21hcmtfbm9kZSkKKwkJLyogVkFMIGNvdWxkIGhh dmUgYmVlbiBvZiBpbmNvbXBsZXRlIHR5cGUuICAqLzsKKwkgICAgICBlbHNl IGlmIChUUkVFX0NPREUgKHR5cGUpID09IEVOVU1FUkFMX1RZUEUKKwkJICAg ICAgICYmIChUWVBFX01BSU5fVkFSSUFOVCAodHlwZSkKKwkJCSAgID09IFRZ UEVfTUFJTl9WQVJJQU5UICh2YWx0eXBlKSkpCisJCS8qIE5vIHdhcm5pbmcg aWYgZnVuY3Rpb24gYXNrcyBmb3IgZW51bQorCQkgICBhbmQgdGhlIGFjdHVh bCBhcmcgaXMgdGhhdCBlbnVtIHR5cGUuICAqLworCQk7CisJICAgICAgZWxz ZSBpZiAoZm9ybWFsX3ByZWMgIT0gVFlQRV9QUkVDSVNJT04gKHR5cGUxKSkK KwkJd2FybmluZ19hdCAocGxvYywgT1BUX1d0cmFkaXRpb25hbF9jb252ZXJz aW9uLAorCQkJICAgICJwYXNzaW5nIGFyZ3VtZW50ICVkIG9mICVxRSAiCisJ CQkgICAgIndpdGggZGlmZmVyZW50IHdpZHRoIGR1ZSB0byBwcm90b3R5cGUi LAorCQkJICAgIGFyZ251bSwgcm5hbWUpOworCSAgICAgIGVsc2UgaWYgKFRZ UEVfVU5TSUdORUQgKHR5cGUpID09IFRZUEVfVU5TSUdORUQgKHR5cGUxKSkK KwkJOworCSAgICAgIC8qIERvbid0IGNvbXBsYWluIGlmIHRoZSBmb3JtYWwg cGFyYW1ldGVyIHR5cGUKKwkJIGlzIGFuIGVudW0sIGJlY2F1c2Ugd2UgY2Fu J3QgdGVsbCBub3cgd2hldGhlcgorCQkgdGhlIHZhbHVlIHdhcyBhbiBlbnVt LS1ldmVuIHRoZSBzYW1lIGVudW0uICAqLworCSAgICAgIGVsc2UgaWYgKFRS RUVfQ09ERSAodHlwZSkgPT0gRU5VTUVSQUxfVFlQRSkKKwkJOworCSAgICAg IGVsc2UgaWYgKFRSRUVfQ09ERSAodmFsKSA9PSBJTlRFR0VSX0NTVAorCQkg ICAgICAgJiYgaW50X2ZpdHNfdHlwZV9wICh2YWwsIHR5cGUpKQorCQkvKiBD aGFuZ2UgaW4gc2lnbmVkbmVzcyBkb2Vzbid0IG1hdHRlcgorCQkgICBpZiBh IGNvbnN0YW50IHZhbHVlIGlzIHVuYWZmZWN0ZWQuICAqLworCQk7CisJICAg ICAgLyogSWYgdGhlIHZhbHVlIGlzIGV4dGVuZGVkIGZyb20gYSBuYXJyb3dl cgorCQkgdW5zaWduZWQgdHlwZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hldGhl ciB3ZQorCQkgcGFzcyBpdCBhcyBzaWduZWQgb3IgdW5zaWduZWQ7IHRoZSB2 YWx1ZQorCQkgY2VydGFpbmx5IGlzIHRoZSBzYW1lIGVpdGhlciB3YXkuICAq LworCSAgICAgIGVsc2UgaWYgKFRZUEVfUFJFQ0lTSU9OICh2YWx0eXBlKSA8 IFRZUEVfUFJFQ0lTSU9OICh0eXBlKQorCQkgICAgICAgJiYgVFlQRV9VTlNJ R05FRCAodmFsdHlwZSkpCisJCTsKKwkgICAgICBlbHNlIGlmIChUWVBFX1VO U0lHTkVEICh0eXBlKSkKKwkJd2FybmluZ19hdCAocGxvYywgT1BUX1d0cmFk aXRpb25hbF9jb252ZXJzaW9uLAorCQkJICAgICJwYXNzaW5nIGFyZ3VtZW50 ICVkIG9mICVxRSAiCisJCQkgICAgImFzIHVuc2lnbmVkIGR1ZSB0byBwcm90 b3R5cGUiLAorCQkJICAgIGFyZ251bSwgcm5hbWUpOworCSAgICAgIGVsc2UK KwkJd2FybmluZ19hdCAocGxvYywgT1BUX1d0cmFkaXRpb25hbF9jb252ZXJz aW9uLAorCQkJICAgICJwYXNzaW5nIGFyZ3VtZW50ICVkIG9mICVxRSAiCisJ CQkgICAgImFzIHNpZ25lZCBkdWUgdG8gcHJvdG90eXBlIiwKKwkJCSAgICBh cmdudW0sIHJuYW1lKTsKKwkgICAgfQorCX0KKworICAgICAgLyogUG9zc2li bHkgcmVzdG9yZSBhbiBFWENFU1NfUFJFQ0lTSU9OX0VYUFIgZm9yIHRoZQor CSBzYWtlIG9mIGJldHRlciB3YXJuaW5ncyBmcm9tIGNvbnZlcnRfYW5kX2No ZWNrLiAgKi8KKyAgICAgIGlmIChleGNlc3NfcHJlY2lzaW9uKQorCXZhbCA9 IGJ1aWxkMSAoRVhDRVNTX1BSRUNJU0lPTl9FWFBSLCB2YWx0eXBlLCB2YWwp OworCisgICAgICBwYXJtdmFsID0gY29udmVydF9mb3JfYXNzaWdubWVudCAo cGxvYywgcGxvYywgdHlwZSwKKwkJCQkJdmFsLCBvcmlndHlwZSwgaWNfYXJn cGFzcywKKwkJCQkJbnBjLCBmdW5kZWNsLCBmdW5jdGlvbiwKKwkJCQkJcGFy bW51bSArIDEsIHdhcm5vcHQpOworCisgICAgICBpZiAodGFyZ2V0bS5jYWxs cy5wcm9tb3RlX3Byb3RvdHlwZXMgKGZ1bmRlY2wgPyBUUkVFX1RZUEUgKGZ1 bmRlY2wpIDogMCkKKwkgICYmIElOVEVHUkFMX1RZUEVfUCAodHlwZSkKKwkg ICYmIChUWVBFX1BSRUNJU0lPTiAodHlwZSkgPCBUWVBFX1BSRUNJU0lPTiAo aW50ZWdlcl90eXBlX25vZGUpKSkKKwlwYXJtdmFsID0gZGVmYXVsdF9jb252 ZXJzaW9uIChwYXJtdmFsKTsKKyAgICB9CisKKyAgcmV0dXJuIHBhcm12YWw7 Cit9CisKIC8qIENvbnZlcnQgdGhlIGFyZ3VtZW50IGV4cHJlc3Npb25zIGlu IHRoZSB2ZWN0b3IgVkFMVUVTCiAgICB0byB0aGUgdHlwZXMgaW4gdGhlIGxp c3QgVFlQRUxJU1QuCiAKQEAgLTMyMDksNyArMzM5Miw2IEBAIGNvbnZlcnRf YXJndW1lbnRzIChsb2NhdGlvbl90IGxvYywgdmVjPGxvY2F0aW9uX3Q+IGFy Z19sb2MsIHRyZWUgdHlwZWxpc3QsCiAJCSAgIHZlYzx0cmVlLCB2YV9nYz4g KnZhbHVlcywgdmVjPHRyZWUsIHZhX2djPiAqb3JpZ3R5cGVzLAogCQkgICB0 cmVlIGZ1bmN0aW9uLCB0cmVlIGZ1bmRlY2wpCiB7Ci0gIHRyZWUgdHlwZXRh aWwsIHZhbDsKICAgdW5zaWduZWQgaW50IHBhcm1udW07CiAgIGJvb2wgZXJy b3JfYXJncyA9IGZhbHNlOwogICBjb25zdCBib29sIHR5cGVfZ2VuZXJpYyA9 IGZ1bmRlY2wKQEAgLTMyMjcsNTAgKzM0MDksNjkgQEAgY29udmVydF9hcmd1 bWVudHMgKGxvY2F0aW9uX3QgbG9jLCB2ZWM8bG9jYXRpb25fdD4gYXJnX2xv YywgdHJlZSB0eXBlbGlzdCwKICAgLyogSGFuZGxlIGFuIE9iakMgc2VsZWN0 b3Igc3BlY2lhbGx5IGZvciBkaWFnbm9zdGljcy4gICovCiAgIHNlbGVjdG9y ID0gb2JqY19tZXNzYWdlX3NlbGVjdG9yICgpOwogCisgIC8qIEZvciBhIGNh bGwgdG8gYSBidWlsdC1pbiBmdW5jdGlvbiBkZWNsYXJlZCB3aXRob3V0IGEg cHJvdG90eXBlLAorICAgICBzZXQgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9u J3MgYXJndW1lbnQgbGlzdC4gICovCisgIHRyZWUgYnVpbHRpbl90eXBlbGlz dCA9IE5VTExfVFJFRTsKKwogICAvKiBGb3IgdHlwZS1nZW5lcmljIGJ1aWx0 LWluIGZ1bmN0aW9ucywgZGV0ZXJtaW5lIHdoZXRoZXIgZXhjZXNzCiAgICAg IHByZWNpc2lvbiBzaG91bGQgYmUgcmVtb3ZlZCAoY2xhc3NpZmljYXRpb24p IG9yIG5vdAogICAgICAoY29tcGFyaXNvbikuICAqLwotICBpZiAodHlwZV9n ZW5lcmljCisgIGlmIChmdW5kZWNsCiAgICAgICAmJiBmbmRlY2xfYnVpbHRf aW5fcCAoZnVuZGVjbCwgQlVJTFRfSU5fTk9STUFMKSkKICAgICB7Ci0gICAg ICBzd2l0Y2ggKERFQ0xfRlVOQ1RJT05fQ09ERSAoZnVuZGVjbCkpCisgICAg ICBidWlsdF9pbl9mdW5jdGlvbiBjb2RlID0gREVDTF9GVU5DVElPTl9DT0RF IChmdW5kZWNsKTsKKyAgICAgIGlmIChDX0RFQ0xfQlVJTFRJTl9QUk9UT1RZ UEUgKGZ1bmRlY2wpKQogCXsKLQljYXNlIEJVSUxUX0lOX0lTRklOSVRFOgot CWNhc2UgQlVJTFRfSU5fSVNJTkY6Ci0JY2FzZSBCVUlMVF9JTl9JU0lORl9T SUdOOgotCWNhc2UgQlVJTFRfSU5fSVNOQU46Ci0JY2FzZSBCVUlMVF9JTl9J U05PUk1BTDoKLQljYXNlIEJVSUxUX0lOX0ZQQ0xBU1NJRlk6Ci0JICB0eXBl X2dlbmVyaWNfcmVtb3ZlX2V4Y2Vzc19wcmVjaXNpb24gPSB0cnVlOwotCSAg YnJlYWs7CisJICBpZiAodHJlZSBiZGVjbCA9IGJ1aWx0aW5fZGVjbF9pbXBs aWNpdCAoY29kZSkpCisJICAgIGJ1aWx0aW5fdHlwZWxpc3QgPSBUWVBFX0FS R19UWVBFUyAoVFJFRV9UWVBFIChiZGVjbCkpOworCX0KIAotCWNhc2UgQlVJ TFRfSU5fQUREX09WRVJGTE9XX1A6Ci0JY2FzZSBCVUlMVF9JTl9TVUJfT1ZF UkZMT1dfUDoKLQljYXNlIEJVSUxUX0lOX01VTF9PVkVSRkxPV19QOgotCSAg LyogVGhlIGxhc3QgYXJndW1lbnQgb2YgdGhlc2UgdHlwZS1nZW5lcmljIGJ1 aWx0aW5zCi0JICAgICBzaG91bGQgbm90IGJlIHByb21vdGVkLiAgKi8KLQkg IHR5cGVfZ2VuZXJpY19vdmVyZmxvd19wID0gdHJ1ZTsKLQkgIGJyZWFrOwor ICAgICAgLyogRm9yIHR5cGUtZ2VuZXJpYyBidWlsdC1pbiBmdW5jdGlvbnMs IGRldGVybWluZSB3aGV0aGVyIGV4Y2VzcworCSBwcmVjaXNpb24gc2hvdWxk IGJlIHJlbW92ZWQgKGNsYXNzaWZpY2F0aW9uKSBvciBub3QKKwkgKGNvbXBh cmlzb24pLiAgKi8KKyAgICAgIGlmICh0eXBlX2dlbmVyaWMpCisJc3dpdGNo IChjb2RlKQorCSAgeworCSAgY2FzZSBCVUlMVF9JTl9JU0ZJTklURToKKwkg IGNhc2UgQlVJTFRfSU5fSVNJTkY6CisJICBjYXNlIEJVSUxUX0lOX0lTSU5G X1NJR046CisJICBjYXNlIEJVSUxUX0lOX0lTTkFOOgorCSAgY2FzZSBCVUlM VF9JTl9JU05PUk1BTDoKKwkgIGNhc2UgQlVJTFRfSU5fRlBDTEFTU0lGWToK KwkgICAgdHlwZV9nZW5lcmljX3JlbW92ZV9leGNlc3NfcHJlY2lzaW9uID0g dHJ1ZTsKKwkgICAgYnJlYWs7CiAKLQlkZWZhdWx0OgotCSAgYnJlYWs7Ci0J fQorCSAgY2FzZSBCVUlMVF9JTl9BRERfT1ZFUkZMT1dfUDoKKwkgIGNhc2Ug QlVJTFRfSU5fU1VCX09WRVJGTE9XX1A6CisJICBjYXNlIEJVSUxUX0lOX01V TF9PVkVSRkxPV19QOgorCSAgICAvKiBUaGUgbGFzdCBhcmd1bWVudCBvZiB0 aGVzZSB0eXBlLWdlbmVyaWMgYnVpbHRpbnMKKwkgICAgICAgc2hvdWxkIG5v dCBiZSBwcm9tb3RlZC4gICovCisJICAgIHR5cGVfZ2VuZXJpY19vdmVyZmxv d19wID0gdHJ1ZTsKKwkgICAgYnJlYWs7CisKKwkgIGRlZmF1bHQ6CisJICAg IGJyZWFrOworCSAgfQogICAgIH0KIAogICAvKiBTY2FuIHRoZSBnaXZlbiBl eHByZXNzaW9ucyBhbmQgdHlwZXMsIHByb2R1Y2luZyBpbmRpdmlkdWFsCiAg ICAgIGNvbnZlcnRlZCBhcmd1bWVudHMuICAqLwogCi0gIGZvciAodHlwZXRh aWwgPSB0eXBlbGlzdCwgcGFybW51bSA9IDA7CisgIHRyZWUgdHlwZXRhaWws IGJ1aWx0aW5fdHlwZXRhaWwsIHZhbDsKKyAgZm9yICh0eXBldGFpbCA9IHR5 cGVsaXN0LAorCSBidWlsdGluX3R5cGV0YWlsID0gYnVpbHRpbl90eXBlbGlz dCwKKwkgcGFybW51bSA9IDA7CiAgICAgICAgdmFsdWVzICYmIHZhbHVlcy0+ aXRlcmF0ZSAocGFybW51bSwgJnZhbCk7CiAgICAgICAgKytwYXJtbnVtKQog ICAgIHsKLSAgICAgIHRyZWUgdHlwZSA9IHR5cGV0YWlsID8gVFJFRV9WQUxV RSAodHlwZXRhaWwpIDogMDsKKyAgICAgIHRyZWUgdHlwZSA9IHR5cGV0YWls ID8gVFJFRV9WQUxVRSAodHlwZXRhaWwpIDogTlVMTF9UUkVFOworICAgICAg dHJlZSBidWlsdGluX3R5cGUgPSAoYnVpbHRpbl90eXBldGFpbAorCQkJICAg PyBUUkVFX1ZBTFVFIChidWlsdGluX3R5cGV0YWlsKSA6IE5VTExfVFJFRSk7 CiAgICAgICB0cmVlIHZhbHR5cGUgPSBUUkVFX1RZUEUgKHZhbCk7CiAgICAg ICB0cmVlIHJuYW1lID0gZnVuY3Rpb247CiAgICAgICBpbnQgYXJnbnVtID0g cGFybW51bSArIDE7CiAgICAgICBjb25zdCBjaGFyICppbnZhbGlkX2Z1bmNf ZGlhZzsKICAgICAgIGJvb2wgZXhjZXNzX3ByZWNpc2lvbiA9IGZhbHNlOwot ICAgICAgYm9vbCBucGM7CiAgICAgICB0cmVlIHBhcm12YWw7CiAgICAgICAv KiBTb21lIF9fYXRvbWljXyogYnVpbHRpbnMgaGF2ZSBhZGRpdGlvbmFsIGhp ZGRlbiBhcmd1bWVudCBhdAogCSBwb3NpdGlvbiAwLiAgKi8KQEAgLTMyODks MTMgKzM0OTAsMjUgQEAgY29udmVydF9hcmd1bWVudHMgKGxvY2F0aW9uX3Qg bG9jLCB2ZWM8bG9jYXRpb25fdD4gYXJnX2xvYywgdHJlZSB0eXBlbGlzdCwK IAkgIHJldHVybiBlcnJvcl9hcmdzID8gLTEgOiAoaW50KSBwYXJtbnVtOwog CX0KIAorICAgICAgaWYgKGJ1aWx0aW5fdHlwZSA9PSB2b2lkX3R5cGVfbm9k ZSkKKwl7CisJICB3YXJuaW5nX2F0IChsb2MsIE9QVF9XYnVpbHRpbl9kZWNs YXJhdGlvbl9taXNtYXRjaCwKKwkJICAgICAgInRvbyBtYW55IGFyZ3VtZW50 cyB0byBidWlsdC1pbiBmdW5jdGlvbiAlcUUgIgorCQkgICAgICAiZXhwZWN0 aW5nICVkIiwKKwkJICAgICAgZnVuY3Rpb24sIHBhcm1udW0pOworCisJICBp bmZvcm1fZGVjbGFyYXRpb24gKGZ1bmRlY2wpOworCSAgYnVpbHRpbl90eXBl dGFpbCA9IE5VTExfVFJFRTsKKwl9CisKICAgICAgIGlmIChzZWxlY3RvciAm JiBhcmdudW0gPiAyKQogCXsKIAkgIHJuYW1lID0gc2VsZWN0b3I7CiAJICBh cmdudW0gLT0gMjsKIAl9CiAKLSAgICAgIG5wYyA9IG51bGxfcG9pbnRlcl9j b25zdGFudF9wICh2YWwpOworICAgICAgLyogRGV0ZXJtaW5lIGlmIFZBTCBp cyBhIG51bGwgcG9pbnRlciBjb25zdGFudCBiZWZvcmUgZm9sZGluZyBpdC4g ICovCisgICAgICBib29sIG5wYyA9IG51bGxfcG9pbnRlcl9jb25zdGFudF9w ICh2YWwpOwogCiAgICAgICAvKiBJZiB0aGVyZSBpcyBleGNlc3MgcHJlY2lz aW9uIGFuZCBhIHByb3RvdHlwZSwgY29udmVydCBvbmNlIHRvCiAJIHRoZSBy ZXF1aXJlZCB0eXBlIHJhdGhlciB0aGFuIGNvbnZlcnRpbmcgdmlhIHRoZSBz ZW1hbnRpYwpAQCAtMzM0MCwxNzIgKzM1NTMsMTAgQEAgY29udmVydF9hcmd1 bWVudHMgKGxvY2F0aW9uX3QgbG9jLCB2ZWM8bG9jYXRpb25fdD4gYXJnX2xv YywgdHJlZSB0eXBlbGlzdCwKIAogICAgICAgaWYgKHR5cGUgIT0gTlVMTF9U UkVFKQogCXsKLQkgIC8qIEZvcm1hbCBwYXJtIHR5cGUgaXMgc3BlY2lmaWVk IGJ5IGEgZnVuY3Rpb24gcHJvdG90eXBlLiAgKi8KLQotCSAgaWYgKHR5cGUg PT0gZXJyb3JfbWFya19ub2RlIHx8ICFDT01QTEVURV9UWVBFX1AgKHR5cGUp KQotCSAgICB7Ci0JICAgICAgZXJyb3JfYXQgKHBsb2MsICJ0eXBlIG9mIGZv cm1hbCBwYXJhbWV0ZXIgJWQgaXMgaW5jb21wbGV0ZSIsCi0JCQlwYXJtbnVt ICsgMSk7Ci0JICAgICAgcGFybXZhbCA9IHZhbDsKLQkgICAgfQotCSAgZWxz ZQotCSAgICB7Ci0JICAgICAgdHJlZSBvcmlndHlwZTsKLQotCSAgICAgIC8q IE9wdGlvbmFsbHkgd2FybiBhYm91dCBjb252ZXJzaW9ucyB0aGF0Ci0JCSBk aWZmZXIgZnJvbSB0aGUgZGVmYXVsdCBjb252ZXJzaW9ucy4gICovCi0JICAg ICAgaWYgKHdhcm5fdHJhZGl0aW9uYWxfY29udmVyc2lvbiB8fCB3YXJuX3Ry YWRpdGlvbmFsKQotCQl7Ci0JCSAgdW5zaWduZWQgaW50IGZvcm1hbF9wcmVj ID0gVFlQRV9QUkVDSVNJT04gKHR5cGUpOwotCi0JCSAgaWYgKElOVEVHUkFM X1RZUEVfUCAodHlwZSkKLQkJICAgICAgJiYgVFJFRV9DT0RFICh2YWx0eXBl KSA9PSBSRUFMX1RZUEUpCi0JCSAgICB3YXJuaW5nX2F0IChwbG9jLCBPUFRf V3RyYWRpdGlvbmFsX2NvbnZlcnNpb24sCi0JCQkJInBhc3NpbmcgYXJndW1l bnQgJWQgb2YgJXFFIGFzIGludGVnZXIgcmF0aGVyICIKLQkJCQkidGhhbiBm bG9hdGluZyBkdWUgdG8gcHJvdG90eXBlIiwKLQkJCQlhcmdudW0sIHJuYW1l KTsKLQkJICBpZiAoSU5URUdSQUxfVFlQRV9QICh0eXBlKQotCQkgICAgICAm JiBUUkVFX0NPREUgKHZhbHR5cGUpID09IENPTVBMRVhfVFlQRSkKLQkJICAg IHdhcm5pbmdfYXQgKHBsb2MsIE9QVF9XdHJhZGl0aW9uYWxfY29udmVyc2lv biwKLQkJCQkicGFzc2luZyBhcmd1bWVudCAlZCBvZiAlcUUgYXMgaW50ZWdl ciByYXRoZXIgIgotCQkJCSJ0aGFuIGNvbXBsZXggZHVlIHRvIHByb3RvdHlw ZSIsCi0JCQkJYXJnbnVtLCBybmFtZSk7Ci0JCSAgZWxzZSBpZiAoVFJFRV9D T0RFICh0eXBlKSA9PSBDT01QTEVYX1RZUEUKLQkJCSAgICYmIFRSRUVfQ09E RSAodmFsdHlwZSkgPT0gUkVBTF9UWVBFKQotCQkgICAgd2FybmluZ19hdCAo cGxvYywgT1BUX1d0cmFkaXRpb25hbF9jb252ZXJzaW9uLAotCQkJCSJwYXNz aW5nIGFyZ3VtZW50ICVkIG9mICVxRSBhcyBjb21wbGV4IHJhdGhlciAiCi0J CQkJInRoYW4gZmxvYXRpbmcgZHVlIHRvIHByb3RvdHlwZSIsCi0JCQkJYXJn bnVtLCBybmFtZSk7Ci0JCSAgZWxzZSBpZiAoVFJFRV9DT0RFICh0eXBlKSA9 PSBSRUFMX1RZUEUKLQkJCSAgICYmIElOVEVHUkFMX1RZUEVfUCAodmFsdHlw ZSkpCi0JCSAgICB3YXJuaW5nX2F0IChwbG9jLCBPUFRfV3RyYWRpdGlvbmFs X2NvbnZlcnNpb24sCi0JCQkJInBhc3NpbmcgYXJndW1lbnQgJWQgb2YgJXFF IGFzIGZsb2F0aW5nIHJhdGhlciAiCi0JCQkJInRoYW4gaW50ZWdlciBkdWUg dG8gcHJvdG90eXBlIiwKLQkJCQlhcmdudW0sIHJuYW1lKTsKLQkJICBlbHNl IGlmIChUUkVFX0NPREUgKHR5cGUpID09IENPTVBMRVhfVFlQRQotCQkJICAg JiYgSU5URUdSQUxfVFlQRV9QICh2YWx0eXBlKSkKLQkJICAgIHdhcm5pbmdf YXQgKHBsb2MsIE9QVF9XdHJhZGl0aW9uYWxfY29udmVyc2lvbiwKLQkJCQki cGFzc2luZyBhcmd1bWVudCAlZCBvZiAlcUUgYXMgY29tcGxleCByYXRoZXIg IgotCQkJCSJ0aGFuIGludGVnZXIgZHVlIHRvIHByb3RvdHlwZSIsCi0JCQkJ YXJnbnVtLCBybmFtZSk7Ci0JCSAgZWxzZSBpZiAoVFJFRV9DT0RFICh0eXBl KSA9PSBSRUFMX1RZUEUKLQkJCSAgICYmIFRSRUVfQ09ERSAodmFsdHlwZSkg PT0gQ09NUExFWF9UWVBFKQotCQkgICAgd2FybmluZ19hdCAocGxvYywgT1BU X1d0cmFkaXRpb25hbF9jb252ZXJzaW9uLAotCQkJCSJwYXNzaW5nIGFyZ3Vt ZW50ICVkIG9mICVxRSBhcyBmbG9hdGluZyByYXRoZXIgIgotCQkJCSJ0aGFu IGNvbXBsZXggZHVlIHRvIHByb3RvdHlwZSIsCi0JCQkJYXJnbnVtLCBybmFt ZSk7Ci0JCSAgLyogPz8/IEF0IHNvbWUgcG9pbnQsIG1lc3NhZ2VzIHNob3Vs ZCBiZSB3cml0dGVuIGFib3V0Ci0JCSAgICAgY29udmVyc2lvbnMgYmV0d2Vl biBjb21wbGV4IHR5cGVzLCBidXQgdGhhdCdzIHRvbyBtZXNzeQotCQkgICAg IHRvIGRvIG5vdy4gICovCi0JCSAgZWxzZSBpZiAoVFJFRV9DT0RFICh0eXBl KSA9PSBSRUFMX1RZUEUKLQkJCSAgICYmIFRSRUVfQ09ERSAodmFsdHlwZSkg PT0gUkVBTF9UWVBFKQotCQkgICAgewotCQkgICAgICAvKiBXYXJuIGlmIGFu eSBhcmd1bWVudCBpcyBwYXNzZWQgYXMgYGZsb2F0JywKLQkJCSBzaW5jZSB3 aXRob3V0IGEgcHJvdG90eXBlIGl0IHdvdWxkIGJlIGBkb3VibGUnLiAgKi8K LQkJICAgICAgaWYgKGZvcm1hbF9wcmVjID09IFRZUEVfUFJFQ0lTSU9OIChm bG9hdF90eXBlX25vZGUpCi0JCQkgICYmIHR5cGUgIT0gZGZsb2F0MzJfdHlw ZV9ub2RlKQotCQkJd2FybmluZ19hdCAocGxvYywgMCwKLQkJCQkgICAgInBh c3NpbmcgYXJndW1lbnQgJWQgb2YgJXFFIGFzICU8ZmxvYXQlPiAiCi0JCQkJ ICAgICJyYXRoZXIgdGhhbiAlPGRvdWJsZSU+IGR1ZSB0byBwcm90b3R5cGUi LAotCQkJCSAgICBhcmdudW0sIHJuYW1lKTsKLQotCQkgICAgICAvKiBXYXJu IGlmIG1pc21hdGNoIGJldHdlZW4gYXJndW1lbnQgYW5kIHByb3RvdHlwZQot CQkJIGZvciBkZWNpbWFsIGZsb2F0IHR5cGVzLiAgV2FybiBvZiBjb252ZXJz aW9ucyB3aXRoCi0JCQkgYmluYXJ5IGZsb2F0IHR5cGVzIGFuZCBvZiBwcmVj aXNpb24gbmFycm93aW5nIGR1ZSB0bwotCQkJIHByb3RvdHlwZS4gKi8KLSAJ CSAgICAgIGVsc2UgaWYgKHR5cGUgIT0gdmFsdHlwZQotCQkJICAgICAgICYm ICh0eXBlID09IGRmbG9hdDMyX3R5cGVfbm9kZQotCQkJCSAgIHx8IHR5cGUg PT0gZGZsb2F0NjRfdHlwZV9ub2RlCi0JCQkJICAgfHwgdHlwZSA9PSBkZmxv YXQxMjhfdHlwZV9ub2RlCi0JCQkJICAgfHwgdmFsdHlwZSA9PSBkZmxvYXQz Ml90eXBlX25vZGUKLQkJCQkgICB8fCB2YWx0eXBlID09IGRmbG9hdDY0X3R5 cGVfbm9kZQotCQkJCSAgIHx8IHZhbHR5cGUgPT0gZGZsb2F0MTI4X3R5cGVf bm9kZSkKLQkJCSAgICAgICAmJiAoZm9ybWFsX3ByZWMKLQkJCQkgICA8PSBU WVBFX1BSRUNJU0lPTiAodmFsdHlwZSkKLQkJCQkgICB8fCAodHlwZSA9PSBk ZmxvYXQxMjhfdHlwZV9ub2RlCi0JCQkJICAgICAgICYmICh2YWx0eXBlCi0J CQkJCSAgICE9IGRmbG9hdDY0X3R5cGVfbm9kZQotCQkJCQkgICAmJiAodmFs dHlwZQotCQkJCQkgICAgICAgIT0gZGZsb2F0MzJfdHlwZV9ub2RlKSkpCi0J CQkJICAgfHwgKHR5cGUgPT0gZGZsb2F0NjRfdHlwZV9ub2RlCi0JCQkJICAg ICAgICYmICh2YWx0eXBlCi0JCQkJCSAgICE9IGRmbG9hdDMyX3R5cGVfbm9k ZSkpKSkKLQkJCXdhcm5pbmdfYXQgKHBsb2MsIDAsCi0JCQkJICAgICJwYXNz aW5nIGFyZ3VtZW50ICVkIG9mICVxRSBhcyAlcVQgIgotCQkJCSAgICAicmF0 aGVyIHRoYW4gJXFUIGR1ZSB0byBwcm90b3R5cGUiLAotCQkJCSAgICBhcmdu dW0sIHJuYW1lLCB0eXBlLCB2YWx0eXBlKTsKLQotCQkgICAgfQotCQkgIC8q IERldGVjdCBpbnRlZ2VyIGNoYW5naW5nIGluIHdpZHRoIG9yIHNpZ25lZG5l c3MuCi0JCSAgICAgVGhlc2Ugd2FybmluZ3MgYXJlIG9ubHkgYWN0aXZhdGVk IHdpdGgKLQkJICAgICAtV3RyYWRpdGlvbmFsLWNvbnZlcnNpb24sIG5vdCB3 aXRoIC1XdHJhZGl0aW9uYWwuICAqLwotCQkgIGVsc2UgaWYgKHdhcm5fdHJh ZGl0aW9uYWxfY29udmVyc2lvbgotCQkJICAgJiYgSU5URUdSQUxfVFlQRV9Q ICh0eXBlKQotCQkJICAgJiYgSU5URUdSQUxfVFlQRV9QICh2YWx0eXBlKSkK LQkJICAgIHsKLQkJICAgICAgdHJlZSB3b3VsZF9oYXZlX2JlZW4gPSBkZWZh dWx0X2NvbnZlcnNpb24gKHZhbCk7Ci0JCSAgICAgIHRyZWUgdHlwZTEgPSBU UkVFX1RZUEUgKHdvdWxkX2hhdmVfYmVlbik7Ci0KLQkJICAgICAgaWYgKHZh bCA9PSBlcnJvcl9tYXJrX25vZGUpCi0JCQkvKiBWQUwgY291bGQgaGF2ZSBi ZWVuIG9mIGluY29tcGxldGUgdHlwZS4gICovOwotCQkgICAgICBlbHNlIGlm IChUUkVFX0NPREUgKHR5cGUpID09IEVOVU1FUkFMX1RZUEUKLQkJCSAgICAg ICAmJiAoVFlQRV9NQUlOX1ZBUklBTlQgKHR5cGUpCi0JCQkJICAgPT0gVFlQ RV9NQUlOX1ZBUklBTlQgKHZhbHR5cGUpKSkKLQkJCS8qIE5vIHdhcm5pbmcg aWYgZnVuY3Rpb24gYXNrcyBmb3IgZW51bQotCQkJICAgYW5kIHRoZSBhY3R1 YWwgYXJnIGlzIHRoYXQgZW51bSB0eXBlLiAgKi8KLQkJCTsKLQkJICAgICAg ZWxzZSBpZiAoZm9ybWFsX3ByZWMgIT0gVFlQRV9QUkVDSVNJT04gKHR5cGUx KSkKLQkJCXdhcm5pbmdfYXQgKHBsb2MsIE9QVF9XdHJhZGl0aW9uYWxfY29u dmVyc2lvbiwKLQkJCQkgICAgInBhc3NpbmcgYXJndW1lbnQgJWQgb2YgJXFF ICIKLQkJCQkgICAgIndpdGggZGlmZmVyZW50IHdpZHRoIGR1ZSB0byBwcm90 b3R5cGUiLAotCQkJCSAgICBhcmdudW0sIHJuYW1lKTsKLQkJICAgICAgZWxz ZSBpZiAoVFlQRV9VTlNJR05FRCAodHlwZSkgPT0gVFlQRV9VTlNJR05FRCAo dHlwZTEpKQotCQkJOwotCQkgICAgICAvKiBEb24ndCBjb21wbGFpbiBpZiB0 aGUgZm9ybWFsIHBhcmFtZXRlciB0eXBlCi0JCQkgaXMgYW4gZW51bSwgYmVj YXVzZSB3ZSBjYW4ndCB0ZWxsIG5vdyB3aGV0aGVyCi0JCQkgdGhlIHZhbHVl IHdhcyBhbiBlbnVtLS1ldmVuIHRoZSBzYW1lIGVudW0uICAqLwotCQkgICAg ICBlbHNlIGlmIChUUkVFX0NPREUgKHR5cGUpID09IEVOVU1FUkFMX1RZUEUp Ci0JCQk7Ci0JCSAgICAgIGVsc2UgaWYgKFRSRUVfQ09ERSAodmFsKSA9PSBJ TlRFR0VSX0NTVAotCQkJICAgICAgICYmIGludF9maXRzX3R5cGVfcCAodmFs LCB0eXBlKSkKLQkJCS8qIENoYW5nZSBpbiBzaWduZWRuZXNzIGRvZXNuJ3Qg bWF0dGVyCi0JCQkgICBpZiBhIGNvbnN0YW50IHZhbHVlIGlzIHVuYWZmZWN0 ZWQuICAqLwotCQkJOwotCQkgICAgICAvKiBJZiB0aGUgdmFsdWUgaXMgZXh0 ZW5kZWQgZnJvbSBhIG5hcnJvd2VyCi0JCQkgdW5zaWduZWQgdHlwZSwgaXQg ZG9lc24ndCBtYXR0ZXIgd2hldGhlciB3ZQotCQkJIHBhc3MgaXQgYXMgc2ln bmVkIG9yIHVuc2lnbmVkOyB0aGUgdmFsdWUKLQkJCSBjZXJ0YWlubHkgaXMg dGhlIHNhbWUgZWl0aGVyIHdheS4gICovCi0JCSAgICAgIGVsc2UgaWYgKFRZ UEVfUFJFQ0lTSU9OICh2YWx0eXBlKSA8IFRZUEVfUFJFQ0lTSU9OICh0eXBl KQotCQkJICAgICAgICYmIFRZUEVfVU5TSUdORUQgKHZhbHR5cGUpKQotCQkJ OwotCQkgICAgICBlbHNlIGlmIChUWVBFX1VOU0lHTkVEICh0eXBlKSkKLQkJ CXdhcm5pbmdfYXQgKHBsb2MsIE9QVF9XdHJhZGl0aW9uYWxfY29udmVyc2lv biwKLQkJCQkgICAgInBhc3NpbmcgYXJndW1lbnQgJWQgb2YgJXFFICIKLQkJ CQkgICAgImFzIHVuc2lnbmVkIGR1ZSB0byBwcm90b3R5cGUiLAotCQkJCSAg ICBhcmdudW0sIHJuYW1lKTsKLQkJICAgICAgZWxzZQotCQkJd2FybmluZ19h dCAocGxvYywgT1BUX1d0cmFkaXRpb25hbF9jb252ZXJzaW9uLAotCQkJCSAg ICAicGFzc2luZyBhcmd1bWVudCAlZCBvZiAlcUUgIgotCQkJCSAgICAiYXMg c2lnbmVkIGR1ZSB0byBwcm90b3R5cGUiLAotCQkJCSAgICBhcmdudW0sIHJu YW1lKTsKLQkJICAgIH0KLQkJfQotCi0JICAgICAgLyogUG9zc2libHkgcmVz dG9yZSBhbiBFWENFU1NfUFJFQ0lTSU9OX0VYUFIgZm9yIHRoZQotCQkgc2Fr ZSBvZiBiZXR0ZXIgd2FybmluZ3MgZnJvbSBjb252ZXJ0X2FuZF9jaGVjay4g ICovCi0JICAgICAgaWYgKGV4Y2Vzc19wcmVjaXNpb24pCi0JCXZhbCA9IGJ1 aWxkMSAoRVhDRVNTX1BSRUNJU0lPTl9FWFBSLCB2YWx0eXBlLCB2YWwpOwot CSAgICAgIG9yaWd0eXBlID0gKCFvcmlndHlwZXMpID8gTlVMTF9UUkVFIDog KCpvcmlndHlwZXMpW3Bhcm1udW1dOwotCSAgICAgIHBhcm12YWwgPSBjb252 ZXJ0X2Zvcl9hc3NpZ25tZW50IChsb2MsIHBsb2MsIHR5cGUsCi0JCQkJCQl2 YWwsIG9yaWd0eXBlLCBpY19hcmdwYXNzLAotCQkJCQkJbnBjLCBmdW5kZWNs LCBmdW5jdGlvbiwKLQkJCQkJCXBhcm1udW0gKyAxKTsKLQotCSAgICAgIGlm ICh0YXJnZXRtLmNhbGxzLnByb21vdGVfcHJvdG90eXBlcyAoZnVuZGVjbCA/ IFRSRUVfVFlQRSAoZnVuZGVjbCkgOiAwKQotCQkgICYmIElOVEVHUkFMX1RZ UEVfUCAodHlwZSkKLQkJICAmJiAoVFlQRV9QUkVDSVNJT04gKHR5cGUpIDwg VFlQRV9QUkVDSVNJT04gKGludGVnZXJfdHlwZV9ub2RlKSkpCi0JCXBhcm12 YWwgPSBkZWZhdWx0X2NvbnZlcnNpb24gKHBhcm12YWwpOwotCSAgICB9CisJ ICB0cmVlIG9yaWd0eXBlID0gKCFvcmlndHlwZXMpID8gTlVMTF9UUkVFIDog KCpvcmlndHlwZXMpW3Bhcm1udW1dOworCSAgcGFybXZhbCA9IGNvbnZlcnRf YXJndW1lbnQgKHBsb2MsIGZ1bmN0aW9uLCBmdW5kZWNsLCB0eXBlLCBvcmln dHlwZSwKKwkJCQkgICAgICB2YWwsIG5wYywgcm5hbWUsIHBhcm1udW0sIGFy Z251bSwKKwkJCQkgICAgICBleGNlc3NfcHJlY2lzaW9uLCAwKTsKIAl9CiAg ICAgICBlbHNlIGlmIChwcm9tb3RlX2Zsb2F0X2FyZykKICAgICAgICAgewpA QCAtMzU0Nyw4ICszNTk4LDI0IEBAIGNvbnZlcnRfYXJndW1lbnRzIChsb2Nh dGlvbl90IGxvYywgdmVjPGxvY2F0aW9uX3Q+IGFyZ19sb2MsIHRyZWUgdHlw ZWxpc3QsCiAgICAgICBpZiAocGFybXZhbCA9PSBlcnJvcl9tYXJrX25vZGUp CiAJZXJyb3JfYXJncyA9IHRydWU7CiAKKyAgICAgIGlmICghdHlwZSAmJiBi dWlsdGluX3R5cGUgJiYgVFJFRV9DT0RFIChidWlsdGluX3R5cGUpICE9IFZP SURfVFlQRSkKKwl7CisJICAvKiBGb3IgYSBjYWxsIHRvIGEgYnVpbHQtaW4g ZnVuY3Rpb24gZGVjbGFyZWQgd2l0aG91dCBhIHByb3RvdHlwZSwKKwkgICAg IHBlcmZvcm0gdGhlIGNvdmVyc2lvbnMgZnJvbSB0aGUgYXJndW1lbnQgdG8g dGhlIGV4cGVjdGVkIHR5cGUKKwkgICAgIGJ1dCBpc3N1ZSB3YXJuaW5ncyBy YXRoZXIgdGhhbiBlcnJvcnMgZm9yIGFueSBtaXNtYXRjaGVzLgorCSAgICAg SWdub3JlIHRoZSBjb252ZXJ0ZWQgYXJndW1lbnQgYW5kIHVzZSB0aGUgUEFS TVZBTCBvYnRhaW5lZAorCSAgICAgYWJvdmUgYnkgYXBwbHlpbmcgZGVmYXVs dCBjb3ZlcnNpb25zIGluc3RlYWQuICAqLworCSAgdHJlZSBvcmlndHlwZSA9 ICghb3JpZ3R5cGVzKSA/IE5VTExfVFJFRSA6ICgqb3JpZ3R5cGVzKVtwYXJt bnVtXTsKKwkgIGNvbnZlcnRfYXJndW1lbnQgKHBsb2MsIGZ1bmN0aW9uLCBm dW5kZWNsLCBidWlsdGluX3R5cGUsIG9yaWd0eXBlLAorCQkJICAgIHZhbCwg bnBjLCBybmFtZSwgcGFybW51bSwgYXJnbnVtLCBleGNlc3NfcHJlY2lzaW9u LAorCQkJICAgIE9QVF9XYnVpbHRpbl9kZWNsYXJhdGlvbl9taXNtYXRjaCk7 CisJfQorCiAgICAgICBpZiAodHlwZXRhaWwpCiAJdHlwZXRhaWwgPSBUUkVF X0NIQUlOICh0eXBldGFpbCk7CisKKyAgICAgIGlmIChidWlsdGluX3R5cGV0 YWlsKQorCWJ1aWx0aW5fdHlwZXRhaWwgPSBUUkVFX0NIQUlOIChidWlsdGlu X3R5cGV0YWlsKTsKICAgICB9CiAKICAgZ2NjX2Fzc2VydCAocGFybW51bSA9 PSB2ZWNfc2FmZV9sZW5ndGggKHZhbHVlcykpOwpAQCAtMzU2MCw2ICszNjI3 LDE4IEBAIGNvbnZlcnRfYXJndW1lbnRzIChsb2NhdGlvbl90IGxvYywgdmVj PGxvY2F0aW9uX3Q+IGFyZ19sb2MsIHRyZWUgdHlwZWxpc3QsCiAgICAgICBy ZXR1cm4gLTE7CiAgICAgfQogCisgIGlmIChidWlsdGluX3R5cGV0YWlsICYm IFRSRUVfVkFMVUUgKGJ1aWx0aW5fdHlwZXRhaWwpICE9IHZvaWRfdHlwZV9u b2RlKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIG5hcmdzID0gcGFybW51bTsK KyAgICAgIGZvciAodHJlZSB0ID0gYnVpbHRpbl90eXBldGFpbDsgdDsgdCA9 IFRSRUVfQ0hBSU4gKHQpKQorCSsrbmFyZ3M7CisKKyAgICAgIHdhcm5pbmdf YXQgKGxvYywgT1BUX1didWlsdGluX2RlY2xhcmF0aW9uX21pc21hdGNoLAor CQkgICJ0b28gZmV3IGFyZ3VtZW50cyB0byBidWlsdC1pbiBmdW5jdGlvbiAl cUUgZXhwZWN0aW5nICV1IiwKKwkJICBmdW5jdGlvbiwgbmFyZ3MgLSAxKTsK KyAgICAgIGluZm9ybV9kZWNsYXJhdGlvbiAoZnVuZGVjbCk7CisgICAgfQor CiAgIHJldHVybiBlcnJvcl9hcmdzID8gLTEgOiAoaW50KSBwYXJtbnVtOwog fQogDApAQCAtNDkyMiw2ICs1MDAxLDQwIEBAIGVwX2NvbnZlcnRfYW5kX2No ZWNrIChsb2NhdGlvbl90IGxvYywgdHJlZSB0eXBlLCB0cmVlIGV4cHIsCiAg IHJldHVybiBjb252ZXJ0ICh0eXBlLCBleHByKTsKIH0KIAorLyogSWYgRVhQ UiByZWZlcnMgdG8gYSBidWlsdC1pbiBkZWNsYXJlZCB3aXRob3V0IGEgcHJv dG90eXBlIHJldHVybnMKKyAgIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgYnVp bHQtaW4gYW5kLCBpZiBub24tbnVsbCwgc2V0ICpCTFRJTiB0bworICAgYSBw b2ludGVyIHRvIHRoZSBidWlsdC1pbi4gIE90aGVyd2lzZSByZXR1cm4gdGhl IHR5cGUgb2YgRVhQUgorICAgYW5kIGNsZWFyICpCTFRJTiBpZiBub24tbnVs bC4gKi8KKworc3RhdGljIHRyZWUKK3R5cGVfb3JfYnVpbHRpbl90eXBlICh0 cmVlIGV4cHIsIHRyZWUgKmJsdGluID0gTlVMTCkKK3sKKyAgdHJlZSBkdW1t eTsKKyAgaWYgKCFibHRpbikKKyAgICBibHRpbiA9ICZkdW1teTsKKworICAq Ymx0aW4gPSBOVUxMX1RSRUU7CisKKyAgdHJlZSB0eXBlID0gVFJFRV9UWVBF IChleHByKTsKKyAgaWYgKFRSRUVfQ09ERSAoZXhwcikgIT0gQUREUl9FWFBS KQorICAgIHJldHVybiB0eXBlOworCisgIHRyZWUgb3BlciA9IFRSRUVfT1BF UkFORCAoZXhwciwgMCk7CisgIGlmICghREVDTF9QIChvcGVyKQorICAgICAg fHwgVFJFRV9DT0RFIChvcGVyKSAhPSBGVU5DVElPTl9ERUNMCisgICAgICB8 fCAhZm5kZWNsX2J1aWx0X2luX3AgKG9wZXIsIEJVSUxUX0lOX05PUk1BTCkp CisgICAgcmV0dXJuIHR5cGU7CisKKyAgYnVpbHRfaW5fZnVuY3Rpb24gY29k ZSA9IERFQ0xfRlVOQ1RJT05fQ09ERSAob3Blcik7CisgIGlmICghQ19ERUNM X0JVSUxUSU5fUFJPVE9UWVBFIChvcGVyKSkKKyAgICByZXR1cm4gdHlwZTsK KworICBpZiAoKCpibHRpbiA9IGJ1aWx0aW5fZGVjbF9pbXBsaWNpdCAoY29k ZSkpKQorICAgIHR5cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKFRSRUVfVFlQ RSAoKmJsdGluKSk7CisKKyAgcmV0dXJuIHR5cGU7Cit9CisKIC8qIEJ1aWxk IGFuZCByZXR1cm4gYSBjb25kaXRpb25hbCBleHByZXNzaW9uIElGRVhQID8g T1AxIDogT1AyLiAgSWYKICAgIElGRVhQX0JDUCB0aGVuIHRoZSBjb25kaXRp b24gaXMgYSBjYWxsIHRvIF9fYnVpbHRpbl9jb25zdGFudF9wLCBhbmQKICAg IGlmIGZvbGRlZCB0byBhbiBpbnRlZ2VyIGNvbnN0YW50IHRoZW4gdGhlIHVu c2VsZWN0ZWQgaGFsZiBtYXkKQEAgLTQ5NjYsOSArNTA3OSwxMSBAQCBidWls ZF9jb25kaXRpb25hbF9leHByIChsb2NhdGlvbl90IGNvbG9uX2xvYywgdHJl ZSBpZmV4cCwgYm9vbCBpZmV4cF9iY3AsCiAgICAgICB8fCBUUkVFX0NPREUg KFRSRUVfVFlQRSAob3AyKSkgPT0gRVJST1JfTUFSSykKICAgICByZXR1cm4g ZXJyb3JfbWFya19ub2RlOwogCi0gIHR5cGUxID0gVFJFRV9UWVBFIChvcDEp OworICB0cmVlIGJsdGluMSA9IE5VTExfVFJFRTsKKyAgdHJlZSBibHRpbjIg PSBOVUxMX1RSRUU7CisgIHR5cGUxID0gdHlwZV9vcl9idWlsdGluX3R5cGUg KG9wMSwgJmJsdGluMSk7CiAgIGNvZGUxID0gVFJFRV9DT0RFICh0eXBlMSk7 Ci0gIHR5cGUyID0gVFJFRV9UWVBFIChvcDIpOworICB0eXBlMiA9IHR5cGVf b3JfYnVpbHRpbl90eXBlIChvcDIsICZibHRpbjIpOwogICBjb2RlMiA9IFRS RUVfQ09ERSAodHlwZTIpOwogCiAgIGlmIChjb2RlMSA9PSBQT0lOVEVSX1RZ UEUgJiYgcmVqZWN0X2djY19idWlsdGluIChvcDEpKQpAQCAtNTIwNiw5ICs1 MzIxLDE0IEBAIGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIgKGxvY2F0aW9uX3Qg Y29sb25fbG9jLCB0cmVlIGlmZXhwLCBib29sIGlmZXhwX2JjcCwKICAgICAg IGVsc2UKIAl7CiAJICBpbnQgcXVhbCA9IEVOQ09ERV9RVUFMX0FERFJfU1BB Q0UgKGFzX2NvbW1vbik7Ci0KLQkgIHBlZHdhcm4gKGNvbG9uX2xvYywgMCwK LQkJICAgInBvaW50ZXIgdHlwZSBtaXNtYXRjaCBpbiBjb25kaXRpb25hbCBl eHByZXNzaW9uIik7CisJICBpZiAoYmx0aW4xICYmIGJsdGluMikJCisJICAg IHdhcm5pbmdfYXQgKGNvbG9uX2xvYywgT1BUX1dpbmNvbXBhdGlibGVfcG9p bnRlcl90eXBlcywKKwkJCSJwb2ludGVyIHR5cGUgbWlzbWF0Y2ggYmV0d2Vl biAlcVQgYW5kICVxVCAiCisJCQkib2YgJXFEIGFuZCAlcUQgaW4gY29uZGl0 aW9uYWwgZXhwcmVzc2lvbiIsCisJCQl0eXBlMSwgdHlwZTIsIGJsdGluMSwg Ymx0aW4yKTsKKwkgIGVsc2UKKwkgICAgcGVkd2FybiAoY29sb25fbG9jLCAw LAorCQkgICAgICJwb2ludGVyIHR5cGUgbWlzbWF0Y2ggaW4gY29uZGl0aW9u YWwgZXhwcmVzc2lvbiIpOwogCSAgcmVzdWx0X3R5cGUgPSBidWlsZF9wb2lu dGVyX3R5cGUKIAkJCSAgKGJ1aWxkX3F1YWxpZmllZF90eXBlICh2b2lkX3R5 cGVfbm9kZSwgcXVhbCkpOwogCX0KQEAgLTYzMjIsNiArNjQ0Miw0NiBAQCBp bmZvcm1fZm9yX2FyZyAodHJlZSBmdW5kZWNsLCBsb2NhdGlvbl90IHBsb2Ms IGludCBwYXJtbnVtLAogCSAgZXhwZWN0ZWRfdHlwZSwgYWN0dWFsX3R5cGUp OwogfQogCisvKiBJc3N1ZSBhIHdhcm5pbmcgd2hlbiBhbiBhcmd1bWVudCBv ZiBBUkdUWVBFIGlzIHBhc3NlZCB0byBhIGJ1aWx0LWluCisgICBmdW5jdGlv biBGVU5ERUNMIGRlY2xhcmVkIHdpdGhvdXQgcHJvdG90eXBlIHRvIHBhcmFt ZXRlciBQQVJNTlVNIG9mCisgICBQQVJNVFlQRSB3aGVuIEFSR1RZUEUgZG9l cyBub3QgcHJvbW90ZSB0byBQQVJNVFlQRS4gICovCisKK3N0YXRpYyB2b2lk CittYXliZV93YXJuX2J1aWx0aW5fbm9fcHJvdG9fYXJnIChsb2NhdGlvbl90 IGxvYywgdHJlZSBmdW5kZWNsLCBpbnQgcGFybW51bSwKKwkJCQkgdHJlZSBw YXJtdHlwZSwgdHJlZSBhcmd0eXBlKQoreworICB0cmVlX2NvZGUgcGFybWNv ZGUgPSBUUkVFX0NPREUgKHBhcm10eXBlKTsKKyAgdHJlZV9jb2RlIGFyZ2Nv ZGUgPSBUUkVFX0NPREUgKGFyZ3R5cGUpOworICB0cmVlIHByb21vdGVkID0g Y190eXBlX3Byb21vdGVzX3RvIChhcmd0eXBlKTsKKworICAvKiBBdm9pZCB3 YXJuaW5nIGZvciBlbnVtIGFyZ3VtZW50cyB0aGF0IHByb21vdGUgdG8gYW4g aW50ZWdlciB0eXBlCisgICAgIG9mIHRoZSBzYW1lIHNpemUvbW9kZS4gICov CisgIGlmIChwYXJtY29kZSA9PSBJTlRFR0VSX1RZUEUKKyAgICAgICYmIGFy Z2NvZGUgPT0gRU5VTUVSQUxfVFlQRQorICAgICAgJiYgVFlQRV9NT0RFIChw YXJtdHlwZSkgPT0gVFlQRV9NT0RFIChhcmd0eXBlKSkKKyAgICByZXR1cm47 CisKKyAgaWYgKHBhcm1jb2RlID09IGFyZ2NvZGUKKyAgICAgICYmIFRZUEVf TUFJTl9WQVJJQU5UIChwYXJtdHlwZSkgPT0gVFlQRV9NQUlOX1ZBUklBTlQg KHByb21vdGVkKSkKKyAgICByZXR1cm47CisKKyAgLyogVGhpcyBkaWFnbm9z ZXMgZXZlbiBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2hlcy4gIFRob3NlIG1p Z2h0IGJlCisgICAgIHNhZmUgaW4gbWFueSBjYXNlcyBidXQgR0NDIG1heSBl bWl0IHN1Ym9wdGltYWwgY29kZSBmb3IgdGhlbSBzbworICAgICB3YXJuaW5n IG9uIHRob3NlIGNhc2VzIGRyaXZlcyBlZmZpY2llbmN5IGltcHJvdmVtZW50 cy4gICovCisgIGlmICh3YXJuaW5nX2F0IChsb2MsIE9QVF9XYnVpbHRpbl9k ZWNsYXJhdGlvbl9taXNtYXRjaCwKKwkJICBUWVBFX01BSU5fVkFSSUFOVCAo cHJvbW90ZWQpID09IGFyZ3R5cGUKKwkJICA/IEdfKCIlcUQgYXJndW1lbnQg JWQgdHlwZSBpcyAlcVQgd2hlcmUgJXFUIGlzIGV4cGVjdGVkICIKKwkJICAg ICAgICJpbiBhIGNhbGwgdG8gYnVpbHQtaW4gZnVuY3Rpb24gZGVjbGFyZWQg d2l0aG91dCAiCisJCSAgICAgICAicHJvdG90eXBlIikKKwkJICA6IEdfKCIl cUQgYXJndW1lbnQgJWQgcHJvbW90ZXMgdG8gJXFUIHdoZXJlICVxVCBpcyBl eHBlY3RlZCAiCisJCSAgICAgICAiaW4gYSBjYWxsIHRvIGJ1aWx0LWluIGZ1 bmN0aW9uIGRlY2xhcmVkIHdpdGhvdXQgIgorCQkgICAgICAgInByb3RvdHlw ZSIpLAorCQkgIGZ1bmRlY2wsIHBhcm1udW0sIHByb21vdGVkLCBwYXJtdHlw ZSkpCisgICAgaW5mb3JtIChERUNMX1NPVVJDRV9MT0NBVElPTiAoZnVuZGVj bCksCisJICAgICJidWlsdC1pbiAlcUQgZGVjbGFyZWQgaGVyZSIsCisJICAg IGZ1bmRlY2wpOworfQorCiAvKiBDb252ZXJ0IHZhbHVlIFJIUyB0byB0eXBl IFRZUEUgYXMgcHJlcGFyYXRpb24gZm9yIGFuIGFzc2lnbm1lbnQgdG8KICAg IGFuIGx2YWx1ZSBvZiB0eXBlIFRZUEUuICBJZiBPUklHVFlQRSBpcyBub3Qg TlVMTF9UUkVFLCBpdCBpcyB0aGUKICAgIG9yaWdpbmFsIHR5cGUgb2YgUkhT OyB0aGlzIGRpZmZlcnMgZnJvbSBUUkVFX1RZUEUgKFJIUykgZm9yIGVudW0K QEAgLTYzNDYsMTMgKzY1MDYsMTYgQEAgaW5mb3JtX2Zvcl9hcmcgKHRyZWUg ZnVuZGVjbCwgbG9jYXRpb25fdCBwbG9jLCBpbnQgcGFybW51bSwKIAkgICAg XgogCiAgICBGVU5DVElPTiBpcyBhIHRyZWUgZm9yIHRoZSBmdW5jdGlvbiBi ZWluZyBjYWxsZWQuCi0gICBQQVJNTlVNIGlzIHRoZSBudW1iZXIgb2YgdGhl IGFyZ3VtZW50LCBmb3IgcHJpbnRpbmcgaW4gZXJyb3IgbWVzc2FnZXMuICAq LworICAgUEFSTU5VTSBpcyB0aGUgbnVtYmVyIG9mIHRoZSBhcmd1bWVudCwg Zm9yIHByaW50aW5nIGluIGVycm9yIG1lc3NhZ2VzLgorICAgV0FSTk9QVCBt YXkgYmUgc2V0IHRvIGEgd2FybmluZyBvcHRpb24gdG8gaXNzdWUgdGhlIGNv cnJlc3BvbmRpbmcgd2FybmluZworICAgcmF0aGVyIHRoYW4gYW4gZXJyb3Ig Zm9yIGludmFsaWQgY29udmVyc2lvbnMuICBVc2VkIGZvciBjYWxscyB0byBi dWlsdC1pbgorICAgZnVuY3Rpb25zIGRlY2xhcmVkIHdpdGhvdXQgYSBwcm90 b3R5cGUuICAqLwogCiBzdGF0aWMgdHJlZQogY29udmVydF9mb3JfYXNzaWdu bWVudCAobG9jYXRpb25fdCBsb2NhdGlvbiwgbG9jYXRpb25fdCBleHByX2xv YywgdHJlZSB0eXBlLAogCQkJdHJlZSByaHMsIHRyZWUgb3JpZ3R5cGUsIGVu dW0gaW1wbF9jb252IGVycnR5cGUsCiAJCQlib29sIG51bGxfcG9pbnRlcl9j b25zdGFudCwgdHJlZSBmdW5kZWNsLAotCQkJdHJlZSBmdW5jdGlvbiwgaW50 IHBhcm1udW0pCisJCQl0cmVlIGZ1bmN0aW9uLCBpbnQgcGFybW51bSwgaW50 IHdhcm5vcHQgLyogPSAwICovKQogewogICBlbnVtIHRyZWVfY29kZSBjb2Rl bCA9IFRSRUVfQ09ERSAodHlwZSk7CiAgIHRyZWUgb3JpZ19yaHMgPSByaHM7 CkBAIC02NTUwLDcgKzY3MTMsMTEgQEAgY29udmVydF9mb3JfYXNzaWdubWVu dCAobG9jYXRpb25fdCBsb2NhdGlvbiwgbG9jYXRpb25fdCBleHByX2xvYywg dHJlZSB0eXBlLAogCSBhbiB1bnByb3RvdHlwZWQgZnVuY3Rpb24sIGl0IGlz IGNvbXBpbGUtdGltZSB1bmRlZmluZWQ7CiAJIG1ha2luZyBpdCBhIGNvbnN0 cmFpbnQgaW4gdGhhdCBjYXNlIHdhcyByZWplY3RlZCBpbgogCSBEUiMyNTIu ICAqLwotICAgICAgZXJyb3JfYXQgKGxvY2F0aW9uLCAidm9pZCB2YWx1ZSBu b3QgaWdub3JlZCBhcyBpdCBvdWdodCB0byBiZSIpOworICAgICAgY29uc3Qg Y2hhciBtc2dbXSA9ICJ2b2lkIHZhbHVlIG5vdCBpZ25vcmVkIGFzIGl0IG91 Z2h0IHRvIGJlIjsKKyAgICAgIGlmICh3YXJub3B0KQorCXdhcm5pbmdfYXQg KGxvY2F0aW9uLCB3YXJub3B0LCBtc2cpOworICAgICAgZWxzZQorCWVycm9y X2F0IChsb2NhdGlvbiwgbXNnKTsKICAgICAgIHJldHVybiBlcnJvcl9tYXJr X25vZGU7CiAgICAgfQogICByaHMgPSByZXF1aXJlX2NvbXBsZXRlX3R5cGUg KGxvY2F0aW9uLCByaHMpOwpAQCAtNjU2Niw3ICs2NzMzLDExIEBAIGNvbnZl cnRfZm9yX2Fzc2lnbm1lbnQgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGxvY2F0 aW9uX3QgZXhwcl9sb2MsIHRyZWUgdHlwZSwKICAgICB7CiAgICAgICBpZiAo IWx2YWx1ZV9wIChyaHMpKQogCXsKLQkgIGVycm9yX2F0IChsb2NhdGlvbiwg ImNhbm5vdCBwYXNzIHJ2YWx1ZSB0byByZWZlcmVuY2UgcGFyYW1ldGVyIik7 CisJICBjb25zdCBjaGFyIG1zZ1tdID0gImNhbm5vdCBwYXNzIHJ2YWx1ZSB0 byByZWZlcmVuY2UgcGFyYW1ldGVyIjsKKwkgIGlmICh3YXJub3B0KQorCSAg ICB3YXJuaW5nX2F0IChsb2NhdGlvbiwgd2Fybm9wdCwgbXNnKTsKKwkgIGVs c2UKKwkgICAgZXJyb3JfYXQgKGxvY2F0aW9uLCBtc2cpOwogCSAgcmV0dXJu IGVycm9yX21hcmtfbm9kZTsKIAl9CiAgICAgICBpZiAoIWNfbWFya19hZGRy ZXNzYWJsZSAocmhzKSkKQEAgLTY1NzgsNyArNjc0OSw3IEBAIGNvbnZlcnRf Zm9yX2Fzc2lnbm1lbnQgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGxvY2F0aW9u X3QgZXhwcl9sb2MsIHRyZWUgdHlwZSwKIAkJCQkgICAgYnVpbGRfcG9pbnRl cl90eXBlIChUUkVFX1RZUEUgKHR5cGUpKSwKIAkJCQkgICAgcmhzLCBvcmln dHlwZSwgZXJydHlwZSwKIAkJCQkgICAgbnVsbF9wb2ludGVyX2NvbnN0YW50 LCBmdW5kZWNsLCBmdW5jdGlvbiwKLQkJCQkgICAgcGFybW51bSk7CisJCQkJ ICAgIHBhcm1udW0sIHdhcm5vcHQpOwogICAgICAgaWYgKHJocyA9PSBlcnJv cl9tYXJrX25vZGUpCiAJcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIApAQCAt NjYwMCwxNSArNjc3MSwxOCBAQCBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50IChs b2NhdGlvbl90IGxvY2F0aW9uLCBsb2NhdGlvbl90IGV4cHJfbG9jLCB0cmVl IHR5cGUsCiAJICAgICAgIHx8IGNvZGVyID09IEVOVU1FUkFMX1RZUEUgfHwg Y29kZXIgPT0gQ09NUExFWF9UWVBFCiAJICAgICAgIHx8IGNvZGVyID09IEJP T0xFQU5fVFlQRSkpCiAgICAgewotICAgICAgdHJlZSByZXQ7CisgICAgICBp ZiAod2Fybm9wdCAmJiBlcnJ0eXBlID09IGljX2FyZ3Bhc3MpCisJbWF5YmVf d2Fybl9idWlsdGluX25vX3Byb3RvX2FyZyAoZXhwcl9sb2MsIGZ1bmRlY2ws IHBhcm1udW0sIHR5cGUsCisJCQkJCSByaHN0eXBlKTsKKwogICAgICAgYm9v bCBzYXZlID0gaW5fbGF0ZV9iaW5hcnlfb3A7CiAgICAgICBpZiAoY29kZWwg PT0gQk9PTEVBTl9UWVBFIHx8IGNvZGVsID09IENPTVBMRVhfVFlQRQogCSAg fHwgKGNvZGVyID09IFJFQUxfVFlQRQogCSAgICAgICYmIChjb2RlbCA9PSBJ TlRFR0VSX1RZUEUgfHwgY29kZWwgPT0gRU5VTUVSQUxfVFlQRSkKIAkgICAg ICAmJiBzYW5pdGl6ZV9mbGFnc19wIChTQU5JVElaRV9GTE9BVF9DQVNUKSkp CiAJaW5fbGF0ZV9iaW5hcnlfb3AgPSB0cnVlOwotICAgICAgcmV0ID0gY29u dmVydF9hbmRfY2hlY2sgKGV4cHJfbG9jICE9IFVOS05PV05fTE9DQVRJT04K LQkJCSAgICAgICA/IGV4cHJfbG9jIDogbG9jYXRpb24sIHR5cGUsIG9yaWdf cmhzKTsKKyAgICAgIHRyZWUgcmV0ID0gY29udmVydF9hbmRfY2hlY2sgKGV4 cHJfbG9jICE9IFVOS05PV05fTE9DQVRJT04KKwkJCQkgICAgPyBleHByX2xv YyA6IGxvY2F0aW9uLCB0eXBlLCBvcmlnX3Jocyk7CiAgICAgICBpbl9sYXRl X2JpbmFyeV9vcCA9IHNhdmU7CiAgICAgICByZXR1cm4gcmV0OwogICAgIH0K QEAgLTY3NDIsNiArNjkxNiwxMiBAQCBjb252ZXJ0X2Zvcl9hc3NpZ25tZW50 IChsb2NhdGlvbl90IGxvY2F0aW9uLCBsb2NhdGlvbl90IGV4cHJfbG9jLCB0 cmVlIHR5cGUsCiAgIGVsc2UgaWYgKChjb2RlbCA9PSBQT0lOVEVSX1RZUEUg fHwgY29kZWwgPT0gUkVGRVJFTkNFX1RZUEUpCiAJICAgJiYgKGNvZGVyID09 IGNvZGVsKSkKICAgICB7CisgICAgICAvKiBJZiBSSFMgcmVmZXJzIHRvIGEg YnVpbHQtaW4gZGVjbGFyZWQgd2l0aG91dCBhIHByb3RvdHlwZQorCSBCTFRJ TiBpcyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGJ1aWx0LWluIHdpdGggYSBw cm90b3R5cGUKKwkgYW5kIFJIU1RZUEUgaXMgc2V0IHRvIHRoZSBhY3R1YWwg dHlwZSBvZiB0aGUgYnVpbHQtaW4uICAqLworICAgICAgdHJlZSBibHRpbjsK KyAgICAgIHJoc3R5cGUgPSB0eXBlX29yX2J1aWx0aW5fdHlwZSAocmhzLCAm Ymx0aW4pOworCiAgICAgICB0cmVlIHR0bCA9IFRSRUVfVFlQRSAodHlwZSk7 CiAgICAgICB0cmVlIHR0ciA9IFRSRUVfVFlQRSAocmhzdHlwZSk7CiAgICAg ICB0cmVlIG12bCA9IHR0bDsKQEAgLTY4MDUsMjEgKzY5ODUsNDUgQEAgY29u dmVydF9mb3JfYXNzaWdubWVudCAobG9jYXRpb25fdCBsb2NhdGlvbiwgbG9j YXRpb25fdCBleHByX2xvYywgdHJlZSB0eXBlLAogCSAgc3dpdGNoIChlcnJ0 eXBlKQogCSAgICB7CiAJICAgIGNhc2UgaWNfYXJncGFzczoKLQkgICAgICBl cnJvcl9hdCAoZXhwcl9sb2MsICJwYXNzaW5nIGFyZ3VtZW50ICVkIG9mICVx RSBmcm9tIHBvaW50ZXIgdG8gIgotCQkJIm5vbi1lbmNsb3NlZCBhZGRyZXNz IHNwYWNlIiwgcGFybW51bSwgcm5hbWUpOworCSAgICAgIHsKKwkJY29uc3Qg Y2hhciBtc2dbXSA9IEdfKCJwYXNzaW5nIGFyZ3VtZW50ICVkIG9mICVxRSBm cm9tICIKKwkJCQkgICAgICAicG9pbnRlciB0byBub24tZW5jbG9zZWQgYWRk cmVzcyBzcGFjZSIpOworCQlpZiAod2Fybm9wdCkKKwkJICB3YXJuaW5nX2F0 IChleHByX2xvYywgd2Fybm9wdCwgbXNnLCBwYXJtbnVtLCBybmFtZSk7CisJ CWVsc2UKKwkJICBlcnJvcl9hdCAoZXhwcl9sb2MsIG1zZywgcGFybW51bSwg cm5hbWUpOwogCSAgICAgIGJyZWFrOworCSAgICAgIH0KIAkgICAgY2FzZSBp Y19hc3NpZ246Ci0JICAgICAgZXJyb3JfYXQgKGxvY2F0aW9uLCAiYXNzaWdu bWVudCBmcm9tIHBvaW50ZXIgdG8gIgotCQkJIm5vbi1lbmNsb3NlZCBhZGRy ZXNzIHNwYWNlIik7Ci0JICAgICAgYnJlYWs7CisJICAgICAgeworCQljb25z dCBjaGFyIG1zZ1tdID0gR18oImFzc2lnbm1lbnQgZnJvbSBwb2ludGVyIHRv ICIKKwkJCQkgICAgICAibm9uLWVuY2xvc2VkIGFkZHJlc3Mgc3BhY2UiKTsK KwkJaWYgKHdhcm5vcHQpCisJCSAgd2FybmluZ19hdCAobG9jYXRpb24sIHdh cm5vcHQsIG1zZyk7CisJCWVsc2UKKwkJICBlcnJvcl9hdCAobG9jYXRpb24s IG1zZyk7CisJCWJyZWFrOworCSAgICAgIH0KIAkgICAgY2FzZSBpY19pbml0 OgotCSAgICAgIGVycm9yX2F0IChsb2NhdGlvbiwgImluaXRpYWxpemF0aW9u IGZyb20gcG9pbnRlciB0byAiCi0JCQkibm9uLWVuY2xvc2VkIGFkZHJlc3Mg c3BhY2UiKTsKLQkgICAgICBicmVhazsKKwkgICAgICB7CisJCWNvbnN0IGNo YXIgbXNnW10gPSBHXygiaW5pdGlhbGl6YXRpb24gZnJvbSBwb2ludGVyIHRv ICIKKwkJCQkgICAgICAibm9uLWVuY2xvc2VkIGFkZHJlc3Mgc3BhY2UiKTsK KwkJaWYgKHdhcm5vcHQpCisJCSAgd2FybmluZ19hdCAobG9jYXRpb24sIHdh cm5vcHQsIG1zZyk7CisJCWVsc2UKKwkJICBlcnJvcl9hdCAobG9jYXRpb24s IG1zZyk7CisJCWJyZWFrOworCSAgICAgIH0KIAkgICAgY2FzZSBpY19yZXR1 cm46Ci0JICAgICAgZXJyb3JfYXQgKGxvY2F0aW9uLCAicmV0dXJuIGZyb20g cG9pbnRlciB0byAiCi0JCQkibm9uLWVuY2xvc2VkIGFkZHJlc3Mgc3BhY2Ui KTsKLQkgICAgICBicmVhazsKKwkgICAgICB7CisJCWNvbnN0IGNoYXIgbXNn W10gPSBHXygicmV0dXJuIGZyb20gcG9pbnRlciB0byAiCisJCQkJICAgICAg Im5vbi1lbmNsb3NlZCBhZGRyZXNzIHNwYWNlIik7CisJCWlmICh3YXJub3B0 KQorCQkgIHdhcm5pbmdfYXQgKGxvY2F0aW9uLCB3YXJub3B0LCBtc2cpOwor CQllbHNlCisJCSAgZXJyb3JfYXQgKGxvY2F0aW9uLCBtc2cpOworCQlicmVh azsKKwkgICAgICB9CiAJICAgIGRlZmF1bHQ6CiAJICAgICAgZ2NjX3VucmVh Y2hhYmxlICgpOwogCSAgICB9CkBAIC03MDE3LDE5ICs3MjIxLDM4IEBAIGNv bnZlcnRfZm9yX2Fzc2lnbm1lbnQgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGxv Y2F0aW9uX3QgZXhwcl9sb2MsIHRyZWUgdHlwZSwKIAkgICAgICB9CiAJICAg ICAgYnJlYWs7CiAJICAgIGNhc2UgaWNfYXNzaWduOgotCSAgICAgIHBlZHdh cm4gKGxvY2F0aW9uLCBPUFRfV2luY29tcGF0aWJsZV9wb2ludGVyX3R5cGVz LAotCQkgICAgICAgImFzc2lnbm1lbnQgdG8gJXFUIGZyb20gaW5jb21wYXRp YmxlIHBvaW50ZXIgdHlwZSAlcVQiLAotCQkgICAgICAgdHlwZSwgcmhzdHlw ZSk7CisJICAgICAgaWYgKGJsdGluKQorCQlwZWR3YXJuIChsb2NhdGlvbiwg T1BUX1dpbmNvbXBhdGlibGVfcG9pbnRlcl90eXBlcywKKwkJCSAiYXNzaWdu bWVudCB0byAlcVQgZnJvbSBwb2ludGVyIHRvICIKKwkJCSAiJXFEIHdpdGgg aW5jb21wYXRpYmxlIHR5cGUgJXFUIiwKKwkJCSB0eXBlLCBibHRpbiwgcmhz dHlwZSk7CisJICAgICAgZWxzZQorCQlwZWR3YXJuIChsb2NhdGlvbiwgT1BU X1dpbmNvbXBhdGlibGVfcG9pbnRlcl90eXBlcywKKwkJCSAiYXNzaWdubWVu dCB0byAlcVQgZnJvbSBpbmNvbXBhdGlibGUgcG9pbnRlciB0eXBlICVxVCIs CisJCQkgdHlwZSwgcmhzdHlwZSk7CiAJICAgICAgYnJlYWs7CiAJICAgIGNh c2UgaWNfaW5pdDoKLQkgICAgICBwZWR3YXJuX2luaXQgKGxvY2F0aW9uLCBP UFRfV2luY29tcGF0aWJsZV9wb2ludGVyX3R5cGVzLAotCQkJICAgICJpbml0 aWFsaXphdGlvbiBvZiAlcVQgZnJvbSBpbmNvbXBhdGlibGUgcG9pbnRlciAi Ci0JCQkgICAgInR5cGUgJXFUIiwgdHlwZSwgcmhzdHlwZSk7CisJICAgICAg aWYgKGJsdGluKQorCQlwZWR3YXJuX2luaXQgKGxvY2F0aW9uLCBPUFRfV2lu Y29tcGF0aWJsZV9wb2ludGVyX3R5cGVzLAorCQkJICAgICAgImluaXRpYWxp emF0aW9uIG9mICVxVCBmcm9tIHBvaW50ZXIgdG8gIgorCQkJICAgICAgIiVx RCB3aXRoIGluY29tcGF0aWJsZSB0eXBlICVxVCIsCisJCQkgICAgICB0eXBl LCBibHRpbiwgcmhzdHlwZSk7CisJICAgICAgZWxzZQorCQlwZWR3YXJuX2lu aXQgKGxvY2F0aW9uLCBPUFRfV2luY29tcGF0aWJsZV9wb2ludGVyX3R5cGVz LAorCQkJICAgICAgImluaXRpYWxpemF0aW9uIG9mICVxVCBmcm9tIGluY29t cGF0aWJsZSAiCisJCQkgICAgICAicG9pbnRlciB0eXBlICVxVCIsCisJCQkg ICAgICB0eXBlLCByaHN0eXBlKTsKIAkgICAgICBicmVhazsKIAkgICAgY2Fz ZSBpY19yZXR1cm46Ci0JICAgICAgcGVkd2FybiAobG9jYXRpb24sIE9QVF9X aW5jb21wYXRpYmxlX3BvaW50ZXJfdHlwZXMsCi0JCSAgICAgICAicmV0dXJu aW5nICVxVCBmcm9tIGEgZnVuY3Rpb24gd2l0aCBpbmNvbXBhdGlibGUgIgot CQkgICAgICAgInJldHVybiB0eXBlICVxVCIsIHJoc3R5cGUsIHR5cGUpOwor CSAgICAgIGlmIChibHRpbikKKwkJcGVkd2FybiAobG9jYXRpb24sIE9QVF9X aW5jb21wYXRpYmxlX3BvaW50ZXJfdHlwZXMsCisJCQkgInJldHVybmluZyBw b2ludGVyIHRvICVxRCBvZiB0eXBlICVxVCBmcm9tICIKKwkJCSAiYSBmdW5j dGlvbiB3aXRoIGluY29tcGF0aWJsZSB0eXBlICVxVCIsCisJCQkgYmx0aW4s IHJoc3R5cGUsIHR5cGUpOworCSAgICAgIGVsc2UKKwkJcGVkd2FybiAobG9j YXRpb24sIE9QVF9XaW5jb21wYXRpYmxlX3BvaW50ZXJfdHlwZXMsCisJCQkg InJldHVybmluZyAlcVQgZnJvbSBhIGZ1bmN0aW9uIHdpdGggaW5jb21wYXRp YmxlICIKKwkJCSAicmV0dXJuIHR5cGUgJXFUIiwgcmhzdHlwZSwgdHlwZSk7 CiAJICAgICAgYnJlYWs7CiAJICAgIGRlZmF1bHQ6CiAJICAgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOwpAQCAtNzA0Miw3ICs3MjY1LDExIEBAIGNvbnZlcnRf Zm9yX2Fzc2lnbm1lbnQgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGxvY2F0aW9u X3QgZXhwcl9sb2MsIHRyZWUgdHlwZSwKICAgICB7CiAgICAgICAvKiA/Pz8g VGhpcyBzaG91bGQgbm90IGJlIGFuIGVycm9yIHdoZW4gaW5saW5pbmcgY2Fs bHMgdG8KIAkgdW5wcm90b3R5cGVkIGZ1bmN0aW9ucy4gICovCi0gICAgICBl cnJvcl9hdCAobG9jYXRpb24sICJpbnZhbGlkIHVzZSBvZiBub24tbHZhbHVl IGFycmF5Iik7CisgICAgICBjb25zdCBjaGFyIG1zZ1tdID0gImludmFsaWQg dXNlIG9mIG5vbi1sdmFsdWUgYXJyYXkiOworICAgICAgaWYgKHdhcm5vcHQp CisJd2FybmluZ19hdCAobG9jYXRpb24sIHdhcm5vcHQsIG1zZyk7CisgICAg ICBlbHNlCisJZXJyb3JfYXQgKGxvY2F0aW9uLCBtc2cpOwogICAgICAgcmV0 dXJuIGVycm9yX21hcmtfbm9kZTsKICAgICB9CiAgIGVsc2UgaWYgKGNvZGVs ID09IFBPSU5URVJfVFlQRSAmJiBjb2RlciA9PSBJTlRFR0VSX1RZUEUpCkBA IC03MTM4LDI1ICs3MzY1LDQ0IEBAIGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQg KGxvY2F0aW9uX3QgbG9jYXRpb24sIGxvY2F0aW9uX3QgZXhwcl9sb2MsIHRy ZWUgdHlwZSwKIAlhdXRvX2RpYWdub3N0aWNfZ3JvdXAgZDsKIAlyYW5nZV9s YWJlbF9mb3JfdHlwZV9taXNtYXRjaCByaHNfbGFiZWwgKHJoc3R5cGUsIHR5 cGUpOwogCWdjY19yaWNoX2xvY2F0aW9uIHJpY2hsb2MgKGV4cHJfbG9jLCAm cmhzX2xhYmVsKTsKLQllcnJvcl9hdCAoJnJpY2hsb2MsICJpbmNvbXBhdGli bGUgdHlwZSBmb3IgYXJndW1lbnQgJWQgb2YgJXFFIiwgcGFybW51bSwKLQkJ ICBybmFtZSk7CisJY29uc3QgY2hhciBtc2dbXSA9IEdfKCJpbmNvbXBhdGli bGUgdHlwZSBmb3IgYXJndW1lbnQgJWQgb2YgJXFFIik7CisJaWYgKHdhcm5v cHQpCisJICB3YXJuaW5nX2F0IChleHByX2xvYywgd2Fybm9wdCwgbXNnLCBw YXJtbnVtLCBybmFtZSk7CisJZWxzZQorCSAgZXJyb3JfYXQgKCZyaWNobG9j LCBtc2csIHBhcm1udW0sIHJuYW1lKTsKIAlpbmZvcm1fZm9yX2FyZyAoZnVu ZGVjbCwgZXhwcl9sb2MsIHBhcm1udW0sIHR5cGUsIHJoc3R5cGUpOwogICAg ICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBpY19hc3NpZ246Ci0gICAg ICBlcnJvcl9hdCAobG9jYXRpb24sICJpbmNvbXBhdGlibGUgdHlwZXMgd2hl biBhc3NpZ25pbmcgdG8gdHlwZSAlcVQgZnJvbSAiCi0JCSJ0eXBlICVxVCIs IHR5cGUsIHJoc3R5cGUpOwotICAgICAgYnJlYWs7CisgICAgICB7CisJY29u c3QgY2hhciBtc2dbXQorCSAgPSBHXygiaW5jb21wYXRpYmxlIHR5cGVzIHdo ZW4gYXNzaWduaW5nIHRvIHR5cGUgJXFUIGZyb20gdHlwZSAlcVQiKTsKKwlp ZiAod2Fybm9wdCkKKwkgIHdhcm5pbmdfYXQgKGV4cHJfbG9jLCAwLCBtc2cs IHR5cGUsIHJoc3R5cGUpOworCWVsc2UKKwkgIGVycm9yX2F0IChleHByX2xv YywgbXNnLCB0eXBlLCByaHN0eXBlKTsKKwlicmVhazsKKyAgICAgIH0KICAg ICBjYXNlIGljX2luaXQ6Ci0gICAgICBlcnJvcl9hdCAobG9jYXRpb24sCi0J CSJpbmNvbXBhdGlibGUgdHlwZXMgd2hlbiBpbml0aWFsaXppbmcgdHlwZSAl cVQgdXNpbmcgdHlwZSAlcVQiLAotCQl0eXBlLCByaHN0eXBlKTsKLSAgICAg IGJyZWFrOworICAgICAgeworCWNvbnN0IGNoYXIgbXNnW10KKwkgID0gR18o ImluY29tcGF0aWJsZSB0eXBlcyB3aGVuIGluaXRpYWxpemluZyB0eXBlICVx VCB1c2luZyB0eXBlICVxVCIpOworCWlmICh3YXJub3B0KQorCSAgd2Fybmlu Z19hdCAobG9jYXRpb24sIDAsIG1zZywgdHlwZSwgcmhzdHlwZSk7CisJZWxz ZQorCSAgZXJyb3JfYXQgKGxvY2F0aW9uLCBtc2csIHR5cGUsIHJoc3R5cGUp OworCWJyZWFrOworICAgICAgfQogICAgIGNhc2UgaWNfcmV0dXJuOgotICAg ICAgZXJyb3JfYXQgKGxvY2F0aW9uLAotCQkiaW5jb21wYXRpYmxlIHR5cGVz IHdoZW4gcmV0dXJuaW5nIHR5cGUgJXFUIGJ1dCAlcVQgd2FzICIKLQkJImV4 cGVjdGVkIiwgcmhzdHlwZSwgdHlwZSk7Ci0gICAgICBicmVhazsKKyAgICAg IHsKKwljb25zdCBjaGFyIG1zZ1tdCisJICA9IEdfKCJpbmNvbXBhdGlibGUg dHlwZXMgd2hlbiByZXR1cm5pbmcgdHlwZSAlcVQgYnV0ICVxVCB3YXMgZXhw ZWN0ZWQiKTsKKwlpZiAod2Fybm9wdCkKKwkgIHdhcm5pbmdfYXQgKGxvY2F0 aW9uLCAwLCBtc2csIHJoc3R5cGUsIHR5cGUpOworCWVsc2UKKwkgIGVycm9y X2F0IChsb2NhdGlvbiwgbXNnLCByaHN0eXBlLCB0eXBlKTsKKwlicmVhazsK KyAgICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgZ2NjX3VucmVhY2hhYmxl ICgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkg Yi9nY2MvZG9jL2ludm9rZS50ZXhpCmluZGV4IDI4NDU5NGQuLjQ1Y2IyMjIg MTAwNjQ0Ci0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2Rv Yy9pbnZva2UudGV4aQpAQCAtNjgwOSw5ICs2ODA5LDI2IEBAIGF0dHJpYnV0 ZXMuCiBAaXRlbSAtV25vLWJ1aWx0aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2gK IEBvcGluZGV4IFduby1idWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNoCiBA b3BpbmRleCBXYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaAotV2FybiBp ZiBhIGJ1aWx0LWluIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHdpdGggdGhlIHdy b25nIHNpZ25hdHVyZSBvciAKLWFzIG5vbi1mdW5jdGlvbi4KLVRoaXMgd2Fy bmluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCitXYXJuIGlmIGEgYnVpbHQt aW4gZnVuY3Rpb24gaXMgZGVjbGFyZWQgd2l0aCBhbiBpbmNvbXBhdGlibGUg c2lnbmF0dXJlCitvciBhcyBhIG5vbi1mdW5jdGlvbiwgb3Igd2hlbiBhIGJ1 aWx0LWluIGZ1bmN0aW9uIGRlY2xhcmVkIHdpdGggYSB0eXBlCit0aGF0IGRv ZXMgbm90IGluY2x1ZGUgYSBwcm90b3R5cGUgaXMgY2FsbGVkIHdpdGggYXJn dW1lbnRzIHdob3NlIHByb21vdGVkCit0eXBlcyBkbyBub3QgbWF0Y2ggdGhv c2UgZXhwZWN0ZWQgYnkgdGhlIGZ1bmN0aW9uLiAgV2hlbiBAb3B0aW9uey1X ZXh0cmF9CitpcyBzcGVjaWZpZWQsIGFsc28gd2FybiB3aGVuIGEgYnVpbHQt aW4gZnVuY3Rpb24gdGhhdCB0YWtlcyBhcmd1bWVudHMgaXMKK2RlY2xhcmVk IHdpdGhvdXQgYSBwcm90b3R5cGUuICBUaGUgQG9wdGlvbnstV25vLWJ1aWx0 aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2h9Cit3YXJuaW5nIGlzIGVuYWJsZWQg YnkgZGVmYXVsdC4gIFRvIGF2b2lkIHRoZSB3YXJuaW5nIGluY2x1ZGUgdGhl IGFwcHJvcHJpYXRlCitoZWFkZXIgdG8gYnJpbmcgdGhlIHByb3RvdHlwZXMg b2YgYnVpbHQtaW4gZnVuY3Rpb25zIGludG8gc2NvcGUuCisKK0ZvciBleGFt cGxlLCB0aGUgY2FsbCB0byBAY29kZXttZW1zZXR9IGJlbG93IGlzIGRpYWdu b3NlZCBieSB0aGUgd2FybmluZworYmVjYXVzZSB0aGUgZnVuY3Rpb24gZXhw ZWN0cyBhIHZhbHVlIG9mIHR5cGUgQGNvZGV7c2l6ZV90fSBhcyBpdHMgYXJn dW1lbnQKK2J1dCB0aGUgdHlwZSBvZiBAY29kZXszMn0gaXMgQGNvZGV7aW50 fS4gIFdpdGggQG9wdGlvbnstV2V4dHJhfSwKK3RoZSBkZWNsYXJhdGlvbiBv ZiB0aGUgZnVuY3Rpb24gaXMgZGlhZ25vc2VkIGFzIHdlbGwuCitAc21hbGxl eGFtcGxlCitleHRlcm4gdm9pZCogbWVtc2V0ICgpOwordm9pZCBmICh2b2lk ICpkKQorQHsKKyAgbWVtc2V0IChkLCAnXDAnLCAzMik7CitAfQorQGVuZCBz bWFsbGV4YW1wbGUKIAogQGl0ZW0gLVduby1idWlsdGluLW1hY3JvLXJlZGVm aW5lZAogQG9waW5kZXggV25vLWJ1aWx0aW4tbWFjcm8tcmVkZWZpbmVkCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy8yMDAyMTAwNi0xLmMg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy8yMDAyMTAwNi0xLmMKaW5kZXggNjNj YzhhNS4uOTJkZjJjNSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvMjAwMjEwMDYtMS5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnLzIw MDIxMDA2LTEuYwpAQCAtMiw3ICsyLDcgQEAKICAgIFRoaXMgdGVzdGNhc2Ug d2FzIG1pc2NvbXBpbGVkIG9uIHg4Ni02NCBkdWUgdG8gd3JvbmcgYWNjZXNz IHRvIHRoZSBzdHJ1Y3QKICAgIG1lbWJlcnMuICAqLwogCi1leHRlcm4gdm9p ZCBhYm9ydCgpOworZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CiAKIHN0cnVj dCBBIHsKICAgbG9uZyB4OwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvV2FsbG9jYS0xNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV2Fs bG9jYS0xNi5jCmluZGV4IDNlZTk2YTkuLjg2NjU5NGMgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dhbGxvY2EtMTYuYworKysgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy9XYWxsb2NhLTE2LmMKQEAgLTQsMyArNCw1IEBA CiAKIHZvaWQgKmFsbG9jYSAoKTsKIF9fdHlwZW9mX18oYWxsb2NhICgpKSBh ICgpIHsgcmV0dXJuIGFsbG9jYSAoKTsgfQorCisvKiB7IGRnLXBydW5lLW91 dHB1dCAiXFxcWy1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaF0iIH0g Ki8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL1didWlsdGlu LWRlY2xhcmF0aW9uLW1pc21hdGNoLTIuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL1didWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNoLTIuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc1Y2Q4Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV2J1aWx0aW4tZGVj bGFyYXRpb24tbWlzbWF0Y2gtMi5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIFBS IGMvODM2NTYgLSBtaXNzaW5nIC1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNt YXRjaCBvbiBkZWNsYXJhdGlvbgorICAgd2l0aG91dCBwcm90b3R5cGUKKyAg IHsgZGctZG8gY29tcGlsZSB9CisgICB7IGRnLW9wdGlvbnMgIi1XYWxsIC1X ZXh0cmEiIH0gKi8KKwordHlwZWRlZiBfX1NJWkVfVFlQRV9fIHNpemVfdDsK KworLyogVmVyaWZ5IHRoYXQgb3JkaW5hcnkgbGlicmFyeSBidWlsdC1pbnMg YXJlIG5vdCBkaWFnbm9zZWQgd2l0aCAtV2V4dHJhCisgICB3aGVuIHRoZXkg dGFrZSBubyBhcmd1bWVudHMgKGV4Y2VwdCBpbiBjYXNlcyBvZiByZXR1cm4g dHlwZSBtaXNtYXRjaGVzKS4KKyAgIFRoaXMgaXMgaW4gYW50aWNpcGF0aW9u IHRoYXQgQyBtYXkgc29tZSBkYXkgYWRvcHQgdGhlIHNhbWUgc3ludGF4IGFz CisgICBDKysgZm9yIGRlY2xhcmluZyBmdW5jdGlvbnMgdGhhdCB0YWtlIG5v IGFyZ3VtZW50cy4gICovCisKK3ZvaWQgYWJvcnQgKCk7CisKKy8qIFZlcmlm eSB0aGF0IG9yZGluYXJ5IGxpYnJhcnkgYnVpbHQtaW5zIGFyZSBkaWFnbm9z ZWQgd2l0aCAtV2V4dHJhCisgICB3aGVuIHRoZXkgdGFrZSBhcmd1bWVudHMu ICAqLworCit2b2lkKiBtZW1jcHkgKCk7ICAgIC8qIHsgZGctd2FybmluZyAi ZGVjbGFyYXRpb24gb2YgYnVpbHQtaW4gZnVuY3Rpb24gLm1lbWNweS4gd2l0 aG91dCBhIHByb3RvdHlwZTsgZXhwZWN0ZWQgLnZvaWQgXFxcKlxcXCh2b2lk IFxcXCosIGNvbnN0IHZvaWQgXFxcKiwgXChsb25nIFwpKnVuc2lnbmVkIGlu dFxcXCkuIiB9ICovCit2b2lkKiBtZW1zZXQgKCk7ICAgIC8qIHsgZGctd2Fy bmluZyAiZGVjbGFyYXRpb24gb2YgYnVpbHQtaW4gZnVuY3Rpb24gLm1lbXNl dC4gd2l0aG91dCBhIHByb3RvdHlwZTsgZXhwZWN0ZWQgLnZvaWQgXFxcKlxc XCh2b2lkIFxcXCosIGludCwgKlwobG9uZyBcKSp1bnNpZ25lZCBpbnRcXFwp LiIgfSAqLworc2l6ZV90IHN0cmxlbiAoKTsgICAvKiB7IGRnLXdhcm5pbmcg ImRlY2xhcmF0aW9uIG9mIGJ1aWx0LWluIGZ1bmN0aW9uIC5zdHJsZW4uIHdp dGhvdXQgYSBwcm90b3R5cGU7IGV4cGVjdGVkIC5cKGxvbmcgXCkqdW5zaWdu ZWQgaW50XFxcKGNvbnN0IGNoYXIgXFxcKlxcXCkuIiB9ICovCisKKy8qIFZh cmlhZGljIGJ1aWx0LWlucyBhcmUgZGlhZ25vc2VkIGV2ZW4gd2l0aG91dCAt V2V4dHJhICh0aGV5IGFyZSwKKyAgIGluIGZhY3QsIGRpYWdub3NlZCBieSBk ZWZhdWx0KS4gICovCitpbnQgcHJpbnRmICgpOyAgICAgIC8qIHsgZGctd2Fy bmluZyAiXFxcWy1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaF0iIH0g Ki8KK2ludCBzcHJpbnRmICgpOyAgICAgLyogeyBkZy13YXJuaW5nICJcXFxb LVdidWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNoXSIgfSAqLwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV2J1aWx0aW4tZGVjbGFyYXRp b24tbWlzbWF0Y2gtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV2J1aWx0 aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2gtMy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmYyZWMzMjUKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy9XYnVpbHRpbi1kZWNsYXJhdGlvbi1t aXNtYXRjaC0zLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qIFBSIGMvODM2NTYg LSBtaXNzaW5nIC1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaCBvbiBk ZWNsYXJhdGlvbgorICAgd2l0aG91dCBwcm90b3R5cGUKKyAgIHsgZGctZG8g Y29tcGlsZSB9CisgICB7IGRnLW9wdGlvbnMgIi1XYnVpbHRpbi1kZWNsYXJh dGlvbi1taXNtYXRjaCIgfSAqLworCit0eXBlZGVmIF9fU0laRV9UWVBFX18g c2l6ZV90OworCisvKiBCdWlsdC1pbnMgZGVjbGFyZWQgd2l0aG91dCBhIHBy b3RvdHlwZSBhcmUgbm90IGRpYWdub3NlZCBieSBkZWZhdWx0CisgICAod2l0 aG91dCAtV2V4dHJhKSBleGNlcHQgd2hlbiB0aGVpciByZXR1cm4gdHlwZSBk b2Vzbid0IG1hdGNoLiAgKi8KK2ludCBhYm9ydCAoKTsgICAgICAgLyogeyBk Zy13YXJuaW5nICJcXFxbLVdidWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNo XSIgfSAqLworCisvKiBCdWlsdC1pbnMgZGVjbGFyZWQgd2l0aG91dCBhIHBy b3RvdHlwZSBhcmUgbm90IGRpYWdub3NlZCB3aXRob3V0IC1XZXh0cmEuICAq Lwordm9pZCBleGl0ICgpOwordm9pZCogbWVtY3B5ICgpOwordm9pZCogbWVt c2V0ICgpOworCisKK3ZvaWQgdGVzdF9jYWxsX2Fib3J0ICh2b2lkKQorewor ICAvKiBWZXJpZnkgdGhhdCBhIHZhbGlkIGNhbGwgdG8gYWJvcnQoKSBpcyBu b3QgZGlhZ25vc2VkLiAgKi8KKyAgYWJvcnQgKCk7CisKKyAgLyogVW5mb3J0 dW5hdGVseSwgdGhlIGluY29tcGF0aWJsZSBkZWNsYXJhdGlvbiBhYm92ZSBt YWtlcyBHQ0MgImZvcmdldCIKKyAgICAgdGhhdCBhYm9ydCgpIGlzIGEgYnVp bHQtaW4gYW5kIHNvIHRoZSBpbnZhbGlkIGNhbGxzIGJlbG93IGFyZW4ndAor ICAgICBkaWFnbm9zZWQuICBUaGUgb25seSBzYXZpbmcgZ3JhY2UgaXMgdGhh dCB0aGUgaW52YWxpZCBkZWNsYXJhdGlvbgorICAgICB0aGF0IGRpZmZlcnMg aW4gdGhlIHJldHVybiB0eXBlIGlzIGRpYWdub3NlZCBieSBkZWZhdWx0LiAq LworICBhYm9ydCAoMSk7ICAgICAgICAvKiB7IGRnLXdhcm5pbmcgInRvbyBt YW55IGFyZ3VtZW50cyB0byBidWlsdC1pbiBmdW5jdGlvbiAuYWJvcnQuIGV4 cGVjdGluZyAwIiAicHI/Pz8/PyIgeyB4ZmFpbCAqLSotKiB9IH0gKi8KKwor ICBhYm9ydCAoMSwgMik7ICAgICAvKiB7IGRnLXdhcm5pbmcgInRvbyBtYW55 IGFyZ3VtZW50cyIgInByPz8/Pz8iIHsgeGZhaWwgKi0qLSogfSB9ICovCit9 CisKKwordm9pZCB0ZXN0X2NhbGxfZXhpdCAodm9pZCkKK3sKKyAgLyogVmVy aWZ5IHRoYXQgdmFsaWQgY2FsbHMgdG8gZXhpdCBhcmUgbm90IGRpYWdub3Nl ZC4gICovCisgIGV4aXQgKCdcMCcpOworICBleGl0ICgwKTsKKworICAvKiBB bHNvIHZlcmlmeSBjYWxscyB0byB0aGUgYnVpbHQtaW4uICAqLworICBfX2J1 aWx0aW5fZXhpdCAoJ1wwJyk7CisgIF9fYnVpbHRpbl9leGl0ICgwKTsKKyAg X19idWlsdGluX2V4aXQgKDAuMCk7CisKKyAgZXhpdCAoKTsgICAgICAgICAg LyogeyBkZy13YXJuaW5nICJ0b28gZmV3IGFyZ3VtZW50cyB0byBidWlsdC1p biBmdW5jdGlvbiAnZXhpdCcgZXhwZWN0aW5nIDEiIH0gKi8KKworICBleGl0 ICgxLCAyKTsgICAgICAvKiB7IGRnLXdhcm5pbmcgInRvbyBtYW55IGFyZ3Vt ZW50cyIgfSAqLworCisgIC8qIFZlcmlmeSB0aGF0IHBhc3NpbmcgaW5jb21w YXRpYmxlIGFyZ3VtZW50cyB0cmlnZ2VycyBhIHdhcm5pbmcuICAqLworICBl eGl0ICgiIik7ICAgICAgICAvKiB7IGRnLXdhcm5pbmcgIlxcXFstV2ludC1j b252ZXJzaW9uXSIgfSAqLworCisgIHN0cnVjdCBTIHsgaW50IGk7IH0gcyA9 IHsgMCB9OworICBleGl0IChzKTsgICAgICAgICAvKiB7IGRnLXdhcm5pbmcg ImluY29tcGF0aWJsZSB0eXBlIGZvciBhcmd1bWVudCAxIiB9ICovCit9CisK Kwordm9pZCB0ZXN0X2NhbGxfbWVtY3B5ICh2b2lkICpwLCBjb25zdCB2b2lk ICpxLCBzaXplX3QgbikKK3sKKyAgbWVtY3B5IChwLCBxLCBuKTsKKworICBt ZW1jcHkgKCk7ICAgICAgICAvKiB7IGRnLXdhcm5pbmcgInRvbyBmZXcgYXJn dW1lbnRzIHRvIGJ1aWx0LWluIGZ1bmN0aW9uICdtZW1jcHknIGV4cGVjdGlu ZyAzIiB9ICovCisKKyAgbWVtY3B5IChwKTsgICAgICAgLyogeyBkZy13YXJu aW5nICJ0b28gZmV3IGFyZ3VtZW50cyB0byBidWlsdC1pbiBmdW5jdGlvbiAn bWVtY3B5JyBleHBlY3RpbmcgMyIgfSAqLworCisgIG1lbWNweSAocCwgcSk7 ICAgICAvKiB7IGRnLXdhcm5pbmcgInRvbyBmZXcgYXJndW1lbnRzIHRvIGJ1 aWx0LWluIGZ1bmN0aW9uICdtZW1jcHknIGV4cGVjdGluZyAzIiB9ICovCisK KyAgbWVtY3B5IChxLCBwLCBuKTsgLyogeyBkZy13YXJuaW5nICJcXFxbLVdk aXNjYXJkZWQtcXVhbGlmaWVyc10iIH0gKi8KKworICBtZW1jcHkgKHAsIG4s IHEpOyAvKiB7IGRnLXdhcm5pbmcgIlxcXFstV2ludC1jb252ZXJzaW9uXSIg fSAqLworCisgIG1lbWNweSAocCwgcSwgbiwgMCk7IC8qIHsgZGctd2Fybmlu ZyAidG9vIG1hbnkgYXJndW1lbnRzIHRvIGJ1aWx0LWluIGZ1bmN0aW9uICdt ZW1jcHknIGV4cGVjdGluZyAzIiB9ICovCit9CisKKwordHlwZWRlZiB2b2lk KiAobWVtY3B5X3QpKHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKK3R5 cGVkZWYgdm9pZCogKG1lbXNldF90KSh2b2lkKiwgaW50LCBzaXplX3QpOwor Cit2b2lkIHRlc3RfaW5pdCAodm9pZCkKK3sKKyAgLyogVmVyaWZ5IHRoYXQg aW5pdGlhbGl6YXRpb24gb2YgYSBwb2ludGVyIGJ5IHRoZSBhZGRyZXNzIG9m IGEgYnVpbHQtaW4KKyAgICAgZnVuY3Rpb24gb2YgYSBtYXRjaGluZyB0eXBl IGRlY2xhcmVkIHdpdGhvdXQgYSBwcm90b3R5cGUgZG9lc24ndAorICAgICB0 cmlnZ2VyIGEgd2FybmluZy4uLiAgKi8KKyAgbWVtc2V0X3QgKnBtZW1zZXQg PSBtZW1zZXQ7CisKKyAgLyogLi4uYnV0IGluaXRpYWxpemF0aW9uIGJ5IHRo ZSBhZGRyZXNzIG9mIGFuIGluY29tcGF0aWJsZSBidWlsdC1pbgorICAgICBk b2VzIGV2ZW4gd2l0aG91dCAtV2V4dHJhLiAgKi8KKyAgbWVtY3B5X3QgKnBt ZW1jcHkgPSBtZW1zZXQ7ICAgICAgICAgICAvKiB7IGRnLXdhcm5pbmcgIlxc XFstV2luY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzXSIgfSAqLworfQorCisK K3ZvaWQgdGVzdF9hc3NpZ24gKHZvaWQpCit7CisgIC8qIFNhbWUgYXMgYWJv dmUgYnV0IGZvciBhc3NpZ25tZW50LiAgKi8KKyAgbWVtc2V0X3QgKnBtZW1z ZXQ7CisgIHBtZW1zZXQgPSBtZW1zZXQ7CisKKyAgbWVtY3B5X3QgKnBtZW1j cHk7CisgIHBtZW1jcHkgPSBtZW1zZXQ7ICAgICAgICAgICAgICAgICAgICAg LyogeyBkZy13YXJuaW5nICJcXFxbLVdpbmNvbXBhdGlibGUtcG9pbnRlci10 eXBlc10iIH0gKi8KK30KKworCisvKiBWZXJpZnkgdGhhdCBwYXNzaW5nIGJ1 aWx0LWlucyBkZWNsYXJlZCB3aXRob3V0IGEgcHJvdG90eXBlIHRvCisgICBm dW5jdGlvbnMgdGhhdCBleHBlY3QgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24g b2YgYSBzcGVjaWZpYyB0eXBlCisgICBpcyBkaWFnbm9zZWQuICBEaXR0byBm b3IgcmV0dXJuIHN0YXRlbWVudHMuICAqLworCit2b2lkIHRha2VfbWVtY3B5 IChtZW1jcHlfdCopOwordm9pZCB0YWtlX2FueSAoaW50LCAuLi4pOworCitt ZW1zZXRfdCogcGFzc19hcmdzIChpbnQgaSkKK3sKKyAgdGFrZV9tZW1jcHkg KG1lbWNweSk7CisgIHRha2VfbWVtY3B5IChtZW1zZXQpOyAgICAgICAgICAg ICAgICAgLyogeyBkZy13YXJuaW5nICJcXFxbLVdpbmNvbXBhdGlibGUtcG9p bnRlci10eXBlc10iIH0gKi8KKworICB0YWtlX2FueSAoMCwgaSA/IG1lbWNw eSA6IG1lbXNldCk7ICAgIC8qIHsgZGctd2FybmluZyAiXFxcWy1XaW5jb21w YXRpYmxlLXBvaW50ZXItdHlwZXNdIiB9ICovCisKKyAgcmV0dXJuIG1lbWNw eTsgICAgICAgICAgICAgICAgICAgICAgICAvKiB7IGRnLXdhcm5pbmcgIlxc XFstV2luY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzXSIgfSAqLworfQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV2J1aWx0aW4tZGVjbGFy YXRpb24tbWlzbWF0Y2gtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV2J1 aWx0aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2gtNC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODJlOWQKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9XYnVpbHRpbi1kZWNsYXJhdGlv bi1taXNtYXRjaC00LmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qIFBSIGMvODM2 NTYgLSBtaXNzaW5nIC1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaCBv biBkZWNsYXJhdGlvbgorICAgd2l0aG91dCBwcm90b3R5cGUKKyAgIHsgZGct ZG8gY29tcGlsZSB9CisgICB7IGRnLW9wdGlvbnMgIi1XYnVpbHRpbi1kZWNs YXJhdGlvbi1taXNtYXRjaCIgfSAqLworCit0eXBlZGVmIF9fUFRSRElGRl9U WVBFX18gcHRyZGlmZl90OwordHlwZWRlZiBfX1NJWkVfVFlQRV9fICAgIHNp emVfdDsKKworY2hhciBjOworc2lnbmVkIGNoYXIgc2M7Cit1bnNpZ25lZCBj aGFyIHVjOworc2hvcnQgc2k7Cit1bnNpZ25lZCBzaG9ydCB1c2k7CitpbnQg aTsKK3Vuc2lnbmVkIHVpOworbG9uZyBsaTsKK3Vuc2lnbmVkIGxvbmcgdWxp OworCitzaXplX3Qgc3ppOwordHlwZWRlZiBzaXplX3QgU2l6ZVR5cGU7CitT aXplVHlwZSBzenRpOworCitwdHJkaWZmX3QgZGlmZmk7CisKK2VudW0gRSB7 IGUwIH0gZTsKKworZmxvYXQgZjsKK2RvdWJsZSBkOworbG9uZyBkb3VibGUg bGQ7CisKKworLyogVmVyaWZ5IHdhcm5pbmdzIGZvciB1bmRlZmluZWQgY2Fs bHMgdG8gYnVpbHQtaW5zIGV4cGVjdGluZyBpbnRlZ2VyCisgICBhcmd1bWVu dHMuICAqLworCitpbnQgYWJzICgpOyAgICAgICAgIC8qIHsgZGctbWVzc2Fn ZSAiYnVpbHQtaW4gLmFicy4gZGVjbGFyZWQgaGVyZSIgfSAqLworCit2b2lk IHRlc3RfaW50ZWdlcl9jb252ZXJzaW9uX2FicyAodm9pZCkKK3sKKyAgaSA9 IGFicyAoYyk7CisgIGkgPSBhYnMgKHNjKTsKKyAgaSA9IGFicyAodWMpOwor CisgIGkgPSBhYnMgKHNpKTsKKyAgaSA9IGFicyAodXNpKTsKKworICBpID0g YWJzIChpKTsKKyAgaSA9IGFicyAodWkpOyAgICAgLyogeyBkZy13YXJuaW5n ICIuYWJzLiBhcmd1bWVudCAxIHR5cGUgaXMgLnVuc2lnbmVkIGludC4gd2hl cmUgLmludC4gaXMgZXhwZWN0ZWQgaW4gYSBjYWxsIHRvIGJ1aWx0LWluIGZ1 bmN0aW9uIGRlY2xhcmVkIHdpdGhvdXQgcHJvdG90eXBlIiB9ICovCisKKyAg LyogVmVyaWZ5IHRoYXQgdGhlIHNhbWUgY2FsbCBhcyBhYm92ZSBidXQgdG8g dGhlIGJ1aWx0LWluIGRvZXNuJ3QKKyAgICAgdHJpZ2dlciBhIHdhcm5pbmcu ICAqLworICBpID0gX19idWlsdGluX2FicyAodWkpOworCisgIGkgPSBhYnMg KGxpKTsgICAgIC8qIHsgZGctd2FybmluZyAiLmFicy4gYXJndW1lbnQgMSB0 eXBlIGlzIC5sb25nIGludC4gd2hlcmUgLmludC4gaXMgZXhwZWN0ZWQgaW4g YSBjYWxsIHRvIGJ1aWx0LWluIGZ1bmN0aW9uIGRlY2xhcmVkIHdpdGhvdXQg cHJvdG90eXBlIiB9ICovCisgIGkgPSBhYnMgKHVsaSk7ICAgIC8qIHsgZGct d2FybmluZyAiLmFicy4gYXJndW1lbnQgMSB0eXBlIGlzIC5sb25nIHVuc2ln bmVkIGludC4gd2hlcmUgLmludC4gaXMgZXhwZWN0ZWQgaW4gYSBjYWxsIHRv IGJ1aWx0LWluIGZ1bmN0aW9uIGRlY2xhcmVkIHdpdGhvdXQgcHJvdG90eXBl IiB9ICovCisKKyAgaSA9IGFicyAoZTApOworICBpID0gYWJzIChlKTsKKwor ICBpID0gYWJzICgtMS4wKTsgICAvKiB7IGRnLXdhcm5pbmcgIi5hYnMuIGFy Z3VtZW50IDEgdHlwZSBpcyAuZG91YmxlLiB3aGVyZSAuaW50LiBpcyBleHBl Y3RlZCBpbiBhIGNhbGwgdG8gYnVpbHQtaW4gZnVuY3Rpb24gZGVjbGFyZWQg d2l0aG91dCBwcm90b3R5cGUiIH0gKi8KKyAgaSA9IGFicyAoZik7ICAgICAg LyogeyBkZy13YXJuaW5nICIuYWJzLiBhcmd1bWVudCAxIHByb21vdGVzIHRv IC5kb3VibGUuIHdoZXJlIC5pbnQuIGlzIGV4cGVjdGVkIGluIGEgY2FsbCB0 byBidWlsdC1pbiBmdW5jdGlvbiBkZWNsYXJlZCB3aXRob3V0IHByb3RvdHlw ZSIgfSAqLworICBpID0gYWJzIChsZCk7ICAgICAvKiB7IGRnLXdhcm5pbmcg Ii5hYnMuIGFyZ3VtZW50IDEgdHlwZSBpcyAubG9uZyBkb3VibGUuIHdoZXJl IC5pbnQuIGlzIGV4cGVjdGVkIGluIGEgY2FsbCB0byBidWlsdC1pbiBmdW5j dGlvbiBkZWNsYXJlZCB3aXRob3V0IHByb3RvdHlwZSIgfSAqLworCisgIC8q IFZlcmlmeSB0aGF0IHRoZSBzYW1lIGNhbGwgYXMgYWJvdmUgYnV0IHRvIHRo ZSBidWlsdC1pbiBkb2Vzbid0CisgICAgIHRyaWdnZXIgYSB3YXJuaW5nLiAg Ki8KKyAgaSA9IF9fYnVpbHRpbl9hYnMgKGxkKTsKK30KKworCitleHRlcm4g dm9pZCogbWVtc2V0ICgpOworCit2b2lkIHRlc3RfaW50ZWdlcl9jb252ZXJz aW9uX21lbXNldCAodm9pZCAqZCkKK3sKKyAgbWVtc2V0IChkLCAwLCBzaXpl b2YgKGludCkpOworICBtZW1zZXQgKGQsICdcMCcsIHN6aSk7CisgIG1lbXNl dCAoZCwgaSwgc3p0aSk7CisKKyAgLyogUGFzc2luZyBhIHB0cmRpZmZfdCB3 aGVyZSBzaXplX3QgaXMgZXhwZWN0ZWQgbWF5IG5vdCBiZSB1bnNhZmUKKyAg ICAgYnV0IGJlY2F1c2UgR0NDIG1heSBlbWl0cyBzdWJvcHRpbWFsIGNvZGUg Zm9yIHN1Y2ggY2FsbHMgd2FybmluZworICAgICBmb3IgdGhlbSBoZWxwcyBp bXByb3ZlIGVmZmljaWVuY3kuICAqLworICBtZW1zZXQgKGQsIDAsIGRpZmZp KTsgICAgICAgLyogeyBkZy13YXJuaW5nICIubWVtc2V0LiBhcmd1bWVudCAz IHByb21vdGVzIHRvIC5wdHJkaWZmX3QuIHtha2EgLmxvbmcgaW50Ln0gd2hl cmUgLmxvbmcgdW5zaWduZWQgaW50LiBpcyBleHBlY3RlZCIgfSAqLworCisg IG1lbXNldCAoZCwgMCwgMi4wKTsgICAgICAgICAvKiB7IGRnLXdhcm5pbmcg Ii5tZW1zZXQuIGFyZ3VtZW50IDMgdHlwZSBpcyAuZG91YmxlLiB3aGVyZSAn bG9uZyB1bnNpZ25lZCBpbnQnIGlzIGV4cGVjdGVkIiB9ICovCisKKyAgLyog VmVyaWZ5IHRoYXQgdGhlIHNhbWUgY2FsbCBhcyBhYm92ZSBidXQgdG8gdGhl IGJ1aWx0LWluIGRvZXNuJ3QKKyAgICAgdHJpZ2dlciBhIHdhcm5pbmcuICAq LworICBfX2J1aWx0aW5fbWVtc2V0IChkLCAwLjAsIDQuMCk7Cit9CisKKwor LyogVmVyaWZ5IHdhcm5pbmdzIGZvciB1bmRlZmluZWQgY2FsbHMgdG8gYnVp bHQtaW5zIGV4cGVjdGluZyBmbG9hdGluZworICAgYXJndW1lbnRzLiAgKi8K KworZG91YmxlIGZhYnMgKCk7ICAgICAgICAgICAvKiB7IGRnLW1lc3NhZ2Ug ImJ1aWx0LWluIC5mYWJzLiBkZWNsYXJlZCBoZXJlIiB9ICovCisKKy8qIEV4 cGVjdCBhIHdhcm5pbmcgZm9yIGZhYnNmIGJlbG93IGJlY2F1c2UgZXZlbiBh IGZsb2F0IGFyZ3VtZW50IHByb21vdGVzCisgICB0byBkb3VibGUuICBVbmZv cnR1bmF0ZWx5LCBpbnZhbGlkIGNhbGxzIHRvIGZhYnNmKCkgYXJlIG5vdCBk aWFnbm9zZWQuICAqLworZmxvYXQgZmFic2YgKCk7ICAgICAgICAgICAvKiB7 IGRnLXdhcm5pbmcgImNvbmZsaWN0aW5nIHR5cGVzIGZvciBidWlsdC1pbiBm dW5jdGlvbiAuZmFic2YuOyBleHBlY3RlZCAuZmxvYXRcXFwoZmxvYXRcXFwp LiIgfSAqLworbG9uZyBkb3VibGUgZmFic2wgKCk7ICAgICAvKiB7IGRnLW1l c3NhZ2UgImJ1aWx0LWluIC5mYWJzbC4gZGVjbGFyZWQgaGVyZSIgfSAqLwor Cit2b2lkIHRlc3RfcmVhbF9jb252ZXJzaW9uX2ZhYnMgKHZvaWQpCit7Cisg IGQgPSBmYWJzIChjKTsgICAgIC8qIHsgZGctd2FybmluZyAiLmZhYnMuIGFy Z3VtZW50IDEgcHJvbW90ZXMgdG8gLmludC4gd2hlcmUgLmRvdWJsZS4gaXMg ZXhwZWN0ZWQgaW4gYSBjYWxsIHRvIGJ1aWx0LWluIGZ1bmN0aW9uIGRlY2xh cmVkIHdpdGhvdXQgcHJvdG90eXBlIiB9ICovCisKKyAgZCA9IGZhYnMgKGkp OyAgICAgLyogeyBkZy13YXJuaW5nICIuZmFicy4gYXJndW1lbnQgMSB0eXBl IGlzIC5pbnQuIHdoZXJlIC5kb3VibGUuIGlzIGV4cGVjdGVkIGluIGEgY2Fs bCB0byBidWlsdC1pbiBmdW5jdGlvbiBkZWNsYXJlZCB3aXRob3V0IHByb3Rv dHlwZSIgfSAqLworCisgIGQgPSBmYWJzIChsaSk7ICAgIC8qIHsgZGctd2Fy bmluZyAiLmZhYnMuIGFyZ3VtZW50IDEgdHlwZSBpcyAubG9uZyBpbnQuIHdo ZXJlIC5kb3VibGUuIGlzIGV4cGVjdGVkIGluIGEgY2FsbCB0byBidWlsdC1p biBmdW5jdGlvbiBkZWNsYXJlZCB3aXRob3V0IHByb3RvdHlwZSIgfSAqLwor CisgIC8qIEluIEMsIHRoZSB0eXBlIG9mIGFuIGVudW1lcmF0aW9uIGNvbnN0 YW50IGlzIGludC4gICovCisgIGQgPSBmYWJzIChlMCk7ICAgIC8qIHsgZGct d2FybmluZyAiLmZhYnMuIGFyZ3VtZW50IDEgdHlwZSBpcyAuaW50LiB3aGVy ZSAuZG91YmxlLiBpcyBleHBlY3RlZCBpbiBhIGNhbGwgdG8gYnVpbHQtaW4g ZnVuY3Rpb24gZGVjbGFyZWQgd2l0aG91dCBwcm90b3R5cGUiIH0gKi8KKwor ICBkID0gZmFicyAoZSk7ICAgICAvKiB7IGRnLXdhcm5pbmcgIi5mYWJzLiBh cmd1bWVudCAxIHR5cGUgaXMgLmVudW0gRS4gd2hlcmUgLmRvdWJsZS4gaXMg ZXhwZWN0ZWQgaW4gYSBjYWxsIHRvIGJ1aWx0LWluIGZ1bmN0aW9uIGRlY2xh cmVkIHdpdGhvdXQgcHJvdG90eXBlIiB9ICovCisKKyAgLyogTm8gd2Fybmlu ZyBoZXJlIHNpbmNlIGZsb2F0IGlzIHByb21vdGVkIHRvIGRvdWJsZS4gICov CisgIGQgPSBmYWJzIChmKTsKKworICBkID0gZmFicyAobGQpOyAgICAvKiB7 IGRnLXdhcm5pbmcgIi5mYWJzLiBhcmd1bWVudCAxIHR5cGUgaXMgLmxvbmcg ZG91YmxlLiB3aGVyZSAuZG91YmxlLiBpcyBleHBlY3RlZCBpbiBhIGNhbGwg dG8gYnVpbHQtaW4gZnVuY3Rpb24gZGVjbGFyZWQgd2l0aG91dCBwcm90b3R5 cGUiIH0gKi8KKworICBkID0gZmFic2YgKGMpOyAgICAvKiB7IGRnLXdhcm5p bmcgIi5mYWJzZi4gYXJndW1lbnQgMSBwcm9tb3RlcyB0byAuaW50LiB3aGVy ZSAuZmxvYXQuIGlzIGV4cGVjdGVkIGluIGEgY2FsbCB0byBidWlsdC1pbiBm dW5jdGlvbiBkZWNsYXJlZCB3aXRob3V0IHByb3RvdHlwZSIgInByODc4OTAi IHsgeGZhaWwgKi0qLSogfSB9ICovCisKKyAgZCA9IGZhYnNsIChjKTsgICAg LyogeyBkZy13YXJuaW5nICIuZmFic2wuIGFyZ3VtZW50IDEgcHJvbW90ZXMg dG8gLmludC4gd2hlcmUgLmxvbmcgZG91YmxlLiBpcyBleHBlY3RlZCBpbiBh IGNhbGwgdG8gYnVpbHQtaW4gZnVuY3Rpb24gZGVjbGFyZWQgd2l0aG91dCBw cm90b3R5cGUiIH0gKi8KKworICBkID0gZmFic2wgKGYpOyAgICAvKiB7IGRn LXdhcm5pbmcgIi5mYWJzbC4gYXJndW1lbnQgMSBwcm9tb3RlcyB0byAuZG91 YmxlLiB3aGVyZSAubG9uZyBkb3VibGUuIGlzIGV4cGVjdGVkIGluIGEgY2Fs bCB0byBidWlsdC1pbiBmdW5jdGlvbiBkZWNsYXJlZCB3aXRob3V0IHByb3Rv dHlwZSIgfSAqLworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBzYW1lIGNhbGwg YXMgYWJvdmUgYnV0IHRvIHRoZSBidWlsdC1pbiBkb2Vzbid0CisgICAgIHRy aWdnZXIgYSB3YXJuaW5nLiAgKi8KKyAgZCA9IF9fYnVpbHRpbl9mYWJzbCAo Zik7Cit9CisKKy8qIFZlcmlmeSB3YXJuaW5ncyBmb3IgY2FsbHMgdG8gYSB0 d28tYXJndW1lbnQgcmVhbCBmdW5jdGlvbi4gICovCisKK2RvdWJsZSBwb3cg KCk7ICAgICAgLyogeyBkZy1tZXNzYWdlICJidWlsdC1pbiAucG93LiBkZWNs YXJlZCBoZXJlIiB9ICovCisKK3ZvaWQgdGVzdF9yZWFsX2NvbnZlcnNpb25f cG93ICh2b2lkKQoreworICBkID0gcG93ICgyLjAsIDIuMCk7CisgIGQgPSBw b3cgKGQsIDMuMCk7CisgIGQgPSBwb3cgKGQsIGQpOworCisgIGQgPSBwb3cg KDIsIDMuMCk7IC8qIHsgZGctd2FybmluZyAiLnBvdy4gYXJndW1lbnQgMSB0 eXBlIGlzIC5pbnQuIHdoZXJlIC5kb3VibGUuIGlzIGV4cGVjdGVkIGluIGEg Y2FsbCB0byBidWlsdC1pbiBmdW5jdGlvbiBkZWNsYXJlZCB3aXRob3V0IHBy b3RvdHlwZSIgfSAqLworICBkID0gcG93ICgzLjAsIDIpOyAvKiB7IGRnLXdh cm5pbmcgIi5wb3cuIGFyZ3VtZW50IDIgdHlwZSBpcyAuaW50LiB3aGVyZSAu ZG91YmxlLiBpcyBleHBlY3RlZCBpbiBhIGNhbGwgdG8gYnVpbHQtaW4gZnVu Y3Rpb24gZGVjbGFyZWQgd2l0aG91dCBwcm90b3R5cGUiIH0gKi8KK30KKwor CisvKiBWZXJpZnkgd2FybmluZ3MgZm9yIGNhbGxzIHRoYXQgZGlzY2FyZCBx dWFsaWZpZXJzLiAgKi8KKworZXh0ZXJuIHZvaWQqIG1lbWNweSAoKTsKKwor dm9pZCB0ZXN0X3F1YWxfY29udmVyc2lvbl9tZW1jcHkgKHZvaWQgKmQsIGNv bnN0IHZvaWQgKnMpCit7CisgIG1lbWNweSAoZCwgcywgc2l6ZW9mIChpbnQp KTsKKyAgbWVtY3B5IChzLCBkLCBzaXplb2YgKGludCkpOyAgICAvKiB7IGRn LXdhcm5pbmcgInBhc3NpbmcgYXJndW1lbnQgMSBvZiAubWVtY3B5LiBkaXNj YXJkcyAnY29uc3QnIHF1YWxpZmllciBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5 cGUiIH0gKi8KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L1didWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNoLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNjZmZDMKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9XYnVpbHRp bi1kZWNsYXJhdGlvbi1taXNtYXRjaC5jCkBAIC0wLDAgKzEsMjMgQEAKKy8q IFBSIGMvODM2NTYgLSBtaXNzaW5nIC1XYnVpbHRpbi1kZWNsYXJhdGlvbi1t aXNtYXRjaCBvbiBkZWNsYXJhdGlvbgorICAgd2l0aG91dCBwcm90b3R5cGUK KyAgIHsgZGctZG8gY29tcGlsZSB9CisgICB7IGRnLW9wdGlvbnMgIi1XYWxs IiB9ICovCisKK3R5cGVkZWYgX19TSVpFX1RZUEVfXyBzaXplX3Q7CisKKy8q IFZlcmlmeSB0aGF0IG9yZGluYXJ5IGxpYnJhcnkgYnVpbHQtaW5zIGFyZSBu b3QgZGlhZ25vc2VkIHdpdGggLVdhbGwKKyAgIChvciBieSBkZWZhdWx0KSB3 aGV0aGVyIG9yIG5vdCB0aGV5IHRha2UgYXJndW1lbnRzIChldmVuIHRob3Vn aCB0aGV5CisgICBzaG91bGQgYmUpLiAgKi8KKwordm9pZCBhYm9ydCAoKTsK K3ZvaWQqIG1lbWNweSAoKTsKK3ZvaWQqIG1lbXNldCAoKTsKK3NpemVfdCBz dHJsZW4gKCk7CisKKy8qIFZlcmlmeSBtaXNtYXRjaGVzIGluIHJldHVybiB0 eXBlcyBhcmUgZGlhZ25vc2VkLiAgKi8KK2ludCBleGl0ICgpOyAgICAgICAg LyogeyBkZy13YXJuaW5nICJcXFxbLVdidWlsdGluLWRlY2xhcmF0aW9uLW1p c21hdGNoXSIgfSAqLworCisvKiBWYXJpYWRpYyBidWlsdC1pbnMgYXJlIGRp YWdub3NlZCB3aXRoIC1XYWxsICh0aGV5IGFyZSwgaW4gZmFjdCwKKyAgIGRp YWdub3NlZCBieSBkZWZhdWx0KS4gICovCitpbnQgcHJpbnRmICgpOyAgICAg IC8qIHsgZGctd2FybmluZyAiXFxcWy1XYnVpbHRpbi1kZWNsYXJhdGlvbi1t aXNtYXRjaF0iIH0gKi8KK2ludCBzcHJpbnRmICgpOyAgICAgLyogeyBkZy13 YXJuaW5nICJcXFxbLVdidWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNoXSIg fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3Jlc3Ry aWN0LTQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dyZXN0cmljdC00LmMK aW5kZXggZjIzOThlZi4uNTVlYTZjMCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvV3Jlc3RyaWN0LTQuYworKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy9XcmVzdHJpY3QtNC5jCkBAIC0xMDgsMyArMTA4LDUgQEAgdm9p ZCogdGVzdF9zdHJuY3B5XzIgKGNoYXIgKmQsIGNvbnN0IGNoYXIgKnMpCiB7 CiAgIHJldHVybiBzdHJuY3B5IChkLCBzKTsKIH0KKworLyogeyBkZy1wcnVu ZS1vdXRwdXQgIlxcXFstV2J1aWx0aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2hd IiB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9XcmVz dHJpY3QtNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3Jlc3RyaWN0LTUu YwppbmRleCA0OTEyZWU1Li43MDY0ZTFlIDEwMDY0NAotLS0gYS9nY2MvdGVz dHN1aXRlL2djYy5kZy9XcmVzdHJpY3QtNS5jCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL1dyZXN0cmljdC01LmMKQEAgLTQxLDMgKzQxLDYgQEAgdm9p ZCB0ZXN0X3N0cm5jcHlfbm93YXJuIChjaGFyICpkKQogewogICBzdHJuY3B5 IChkICsgMSwgZCArIDMsICIiKTsKIH0KKworLyogeyBkZy1wcnVuZS1vdXRw dXQgIlxcXFstV2J1aWx0aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2hdIiB9Cisg ICB7IGRnLXBydW5lLW91dHB1dCAiXFxcWy1XaW50LWNvbnZlcnNpb25dIiB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdG9taWMv c3RkYXRvbWljLWdlbmVyaWMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F0 b21pYy9zdGRhdG9taWMtZ2VuZXJpYy5jCmluZGV4IDgwMzNjNTMuLjk2NTgy YjQgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F0b21pYy9z dGRhdG9taWMtZ2VuZXJpYy5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L2F0b21pYy9zdGRhdG9taWMtZ2VuZXJpYy5jCkBAIC00LDcgKzQsNyBAQAog CiAjaW5jbHVkZSA8c3RkYXRvbWljLmg+CiAKLWV4dGVybiB2b2lkIGFib3J0 ICgpOworZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOwogZXh0ZXJuIGludCBt ZW1jbXAgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX1NJWkVfVFlQ RV9fKTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGVzdCB7CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy9hdG9taWMvc3RkYXRvbWljLWxvY2tmcmVl LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdG9taWMvc3RkYXRvbWljLWxv Y2tmcmVlLmMKaW5kZXggMjkzMTBlOS4uYzZkMDZhNSAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXRvbWljL3N0ZGF0b21pYy1sb2NrZnJl ZS5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F0b21pYy9zdGRhdG9t aWMtbG9ja2ZyZWUuYwpAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlIDxzdGRh dG9taWMuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAotZXh0ZXJuIHZvaWQg YWJvcnQgKCk7CitleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CiAKIF9BdG9t aWMgX0Jvb2wgYWJhOwogYXRvbWljX2Jvb2wgYWJ0OwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaW5pdHByaTEuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2luaXRwcmkxLmMKaW5kZXggNzk0ZWEyYi4uYjZhZmQ3NiAx MDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaW5pdHByaTEuYwor KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9pbml0cHJpMS5jCkBAIC0xLDYg KzEsNiBAQAogLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaW5pdF9wcmlvcml0 eSB9IH0gKi8KIAotZXh0ZXJuIHZvaWQgYWJvcnQgKCk7CitleHRlcm4gdm9p ZCBhYm9ydCAodm9pZCk7CiAKIGludCBpOwogaW50IGo7CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjE1Njk4LTEuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ByMTU2OTgtMS5jCmluZGV4IDVhNzVhMTAuLmNiZTYx M2MgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTU2OTgt MS5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTU2OTgtMS5jCkBA IC0yMSwzICsyMSw1IEBAIGNoYXIgKnJpbmRleChhLCBiKQogewogICByZXR1 cm4gMDsKIH0KKworLyogeyBkZy1wcnVuZS1vdXRwdXQgIlxcXFstV2J1aWx0 aW4tZGVjbGFyYXRpb24tbWlzbWF0Y2hdIiB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjY5MTU2LmMgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy9wcjY5MTU2LmMKaW5kZXggMWFkZGZhMy4uNTIyYWMwMCAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI2OTE1Ni5jCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNjkxNTYuYwpAQCAtNSw2ICs1LDYg QEAKIF9Cb29sCiBmb28gKCkKIHsKLSAgX0Jvb2wgKCpmKSAoKSA9IF9fYnVp bHRpbl9hYnM7CS8qIHsgZGctd2FybmluZyAiaW5pdGlhbGl6YXRpb24gb2Yg J19Cb29sIFxcKFxcKlxcKVxcKFxcKScgZnJvbSBpbmNvbXBhdGlibGUgcG9p bnRlciB0eXBlIiB9ICovCisgIF9Cb29sICgqZikgKCkgPSBfX2J1aWx0aW5f YWJzOwkvKiB7IGRnLXdhcm5pbmcgImluaXRpYWxpemF0aW9uIG9mICdfQm9v bCBcXChcXCpcXClcXChcXCknIGZyb20gcG9pbnRlciB0byAuX19idWlsdGlu X2Ficy4gd2l0aCBpbmNvbXBhdGlibGUgdHlwZSAuaW50IFxcXChcXFwqXFxc KS4iIH0gKi8KICAgcmV0dXJuIGYgKDApOwogfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvcHI4MzQ2My5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvcHI4MzQ2My5jCmluZGV4IGRkZjY2MmYuLmNkMTFmNjQgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByODM0NjMuYworKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjgzNDYzLmMKQEAgLTE1LDMgKzE1LDUg QEAgcCAoKQogewogICBtIChwICsgKGxvbmcpIGEpOwogfQorCisvKiB7IGRn LXBydW5lLW91dHB1dCAiXFxcWy1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNt YXRjaF0iIH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3JlZGVjbC00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9yZWRlY2wtNC5j CmluZGV4IDJiYTc0YTMuLjhmMTI0ODggMTAwNjQ0Ci0tLSBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3JlZGVjbC00LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvcmVkZWNsLTQuYwpAQCAtMjcsMyArMjcsNiBAQCBmICh2b2lkKQog CiAvKiBTaG91bGQgc3RpbGwgZGlhZ25vc2UgaW5jb21wYXRpYmxlIHByb3Rv dHlwZSBmb3Igc3RyY21wLiAgKi8KIGludCBzdHJjbXAgKHZvaWQpOyAvKiB7 IGRnLWVycm9yICJjb25mbGljdCIgfSAqLworCisvKiB7IGRnLXBydW5lLW91 dHB1dCAiXFxcWy1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRjaF0iIH0K KyAgIHsgZGctcHJ1bmUtb3V0cHV0ICJcXFxbLVdpbnQtY29udmVyc2lvbl0i IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Rscy90 aHItaW5pdC0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90bHMvdGhyLWlu aXQtMi5jCmluZGV4IDIyYzk2ZWEuLmE1NDAzODkgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3Rscy90aHItaW5pdC0yLmMKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdGxzL3Roci1pbml0LTIuYwpAQCAtMiw3ICsy LDcgQEAKIC8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHRsc19y dW50aW1lIH0gKi8KIC8qIHsgZGctYWRkLW9wdGlvbnMgdGxzIH0gKi8KIAot ZXh0ZXJuIHZvaWQgYWJvcnQoKSA7CitleHRlcm4gdm9pZCBhYm9ydCAodm9p ZCk7CiAKIHN0YXRpYyBfX3RocmVhZCBpbnQgZnN0YXQgOwogc3RhdGljIF9f dGhyZWFkIGludCBmc3RhdCA9IDE7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy90b3J0dXJlL3ByNTU4OTAtMi5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdG9ydHVyZS9wcjU1ODkwLTIuYwppbmRleCAxY2Y3MWQ3Li4z MTc3OWUwIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0 dXJlL3ByNTU4OTAtMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Rv cnR1cmUvcHI1NTg5MC0yLmMKQEAgLTIsMyArMiw1IEBACiANCiBleHRlcm4g dm9pZCAqbWVtY3B5KCk7DQogaW50IG1haW4oKSB7IG1lbWNweSgpOyB9DQor DQorLyogeyBkZy1wcnVuZS1vdXRwdXQgIlxcXFstV2J1aWx0aW4tZGVjbGFy YXRpb24tbWlzbWF0Y2hdIiB9ICovDQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdG9ydHVyZS9wcjU1ODkwLTMuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3RvcnR1cmUvcHI1NTg5MC0zLmMKaW5kZXggYzdmNzdiZS4u MjFhM2Q5OCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdG9y dHVyZS9wcjU1ODkwLTMuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90 b3J0dXJlL3ByNTU4OTAtMy5jCkBAIC03LDMgKzcsNSBAQCBiYXIgKCkKIHsK ICAgcmV0dXJuIG1lbW1vdmUgKCk7CiB9CisKKy8qIHsgZGctcHJ1bmUtb3V0 cHV0ICJcXFxbLVdidWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNoXSIgfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdG9ydHVyZS9w cjY3NzQxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL3ByNjc3 NDEuYwppbmRleCAxZmZjNzA3Li44MzNlNTNlIDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL3ByNjc3NDEuYworKysgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL3ByNjc3NDEuYwpAQCAtMywxMSAr MywxMiBAQAogc3RydWN0IHNpbmdsZWNvbXBsZXggeyBmbG9hdCByZWFsLCBp bWFnIDsgfSA7CiBzdHJ1Y3QgZG91YmxlY29tcGxleCB7IGRvdWJsZSByZWFs LCBpbWFnIDsgfSA7CiBzdHJ1Y3QgZXh0ZW5kZWRjb21wbGV4IHsgbG9uZyBk b3VibGUgcmVhbCwgaW1hZyA7IH0gOwotZXh0ZXJuIGRvdWJsZSBjYWJzKCk7 CitleHRlcm4gZG91YmxlIGNhYnMoKTsgLyogeyBkZy13YXJuaW5nICJcXFxb LVdidWlsdGluLWRlY2xhcmF0aW9uLW1pc21hdGNoXSIgfSAqLwogZmxvYXQg Y2Fic2YoZmMpCiAgICAgIHN0cnVjdCBzaW5nbGVjb21wbGV4IGZjOyAgLyog eyBkZy13YXJuaW5nICJkb2Vzbid0IG1hdGNoIiB9ICovCiB7CiAgIHN0cnVj dCBkb3VibGVjb21wbGV4IGRjIDsKICAgZGMucmVhbD1mYy5yZWFsOyBkYy5p bWFnPWZjLmltYWc7Ci0gIHJldHVybiAoZmxvYXQpIGNhYnMoZGMpOworICBy ZXR1cm4gKGZsb2F0KSBjYWJzKGRjKTsgICAvKiB7IGRnLXdhcm5pbmcgImlu Y29tcGF0aWJsZSB0eXBlIGZvciBhcmd1bWVudCAxIG9mIC5jYWJzLiIgfSAq LwogfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0 dXJlL3N0YWNrYWxpZ24vc2liY2FsbC0xLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90b3J0dXJlL3N0YWNrYWxpZ24vc2liY2FsbC0xLmMKaW5kZXggOGMx NzQ3NS4uYzQ5OTJkZiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdG9ydHVyZS9zdGFja2FsaWduL3NpYmNhbGwtMS5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvc3RhY2thbGlnbi9zaWJjYWxsLTEu YwpAQCAtMSw3ICsxLDcgQEAKIC8qIHsgZGctZG8gcnVuIH0gKi8KIAogZXh0 ZXJuIGludCBvayAoaW50KTsKLWV4dGVybiB2b2lkIGV4aXQgKCk7CitleHRl cm4gdm9pZCBleGl0IChpbnQpOwogc3RhdGljIGludCBnZW5feDg2XzY0X3No cmQgKGludCk7CiBzdGF0aWMgaW50CiBnZW5feDg2XzY0X3NocmQoaW50IGEg X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSkKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvdGxzL3Roci1pbml0LTEuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvdGxzL3Roci1pbml0LTEu YwppbmRleCBmZjMzMzhmLi4zYWUyZTI5IDEwMDY0NAotLS0gYS9nY2MvdGVz dHN1aXRlL2djYy5kZy90b3J0dXJlL3Rscy90aHItaW5pdC0xLmMKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdG9ydHVyZS90bHMvdGhyLWluaXQtMS5j CkBAIC0zLDcgKzMsNyBAQAogLyogeyBkZy1hZGQtb3B0aW9ucyB0bHMgfSAq LwogCiBleHRlcm4gaW50IHByaW50ZiAoY2hhciAqLC4uLik7Ci1leHRlcm4g dm9pZCBhYm9ydCgpIDsKK2V4dGVybiB2b2lkIGFib3J0KHZvaWQpIDsKIAog aW50IHRlc3RfY29kZShpbnQgYikKIHsKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2J1aWx0aW5zLWZvbGRpbmctZ2ltcGxl LXViLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9idWlsdGlu cy1mb2xkaW5nLWdpbXBsZS11Yi5jCmluZGV4IGEzMTM5OTguLjA5MTJiNjgg MTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2J1 aWx0aW5zLWZvbGRpbmctZ2ltcGxlLXViLmMKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdHJlZS1zc2EvYnVpbHRpbnMtZm9sZGluZy1naW1wbGUtdWIu YwpAQCAtMzEsNCArMzEsNSBAQCBtYWluICh2b2lkKQogICByZXR1cm4gMDsK IH0KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJf X2J1aWx0aW5fbWVtY2hyIiAyICJvcHRpbWl6ZWQiIH0gfSAqLworLyogeyBk Zy1wcnVuZS1vdXRwdXQgIi1XYnVpbHRpbi1kZWNsYXJhdGlvbi1taXNtYXRj aCIgfQorICAgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJf X2J1aWx0aW5fbWVtY2hyIiAyICJvcHRpbWl6ZWQiIH0gfSAqLwo= --------------84F812BE4E350E4020A0E1B8--