From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fencepost.gnu.org (fencepost.gnu.org [IPv6:2001:470:142:3::e]) by sourceware.org (Postfix) with ESMTPS id 344ED3858D37 for ; Sun, 1 Nov 2020 17:26:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 344ED3858D37 Received: from eggs.gnu.org ([2001:470:142:3::10]:53472) by fencepost.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kZH7X-0004D6-D4 for gcc-patches@gnu.org; Sun, 01 Nov 2020 12:26:23 -0500 Received: from mail-qk1-x735.google.com ([2607:f8b0:4864:20::735]:34940) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kZH7U-00044Y-0C for gcc-patches@gnu.org; Sun, 01 Nov 2020 12:26:23 -0500 Received: by mail-qk1-x735.google.com with SMTP id 140so9612962qko.2 for ; Sun, 01 Nov 2020 09:26:19 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=DKBwZ+9+8yThGMlEvfK2IBBKEyzvle50po1xRXJccic=; b=l3iUx4iWSU8d9h8MqJhwlyCt1V4PbTXCwxMRNSs4cwlpuNO4WiuSxvQhQkxRIXJ8bq n+Bkths25OSwRe9kMYH7v6WlpdYHSdhC48yzl1Hv46cU16hOqRh4ls/II0I3YlLpA1Hv iDmSZQms8PsCBiOPiJE2SO0IibFEZiHMbvdSqXRZgbCtXv9Qwv7bmrQmwoLujoaUXIvW qt2EuHTFiWkrQlE1anIOBtRy4dUFUoAereCwjL9oIYF0FRFHhKPHerAsjYquqdLdRfdA ptlLP5bGFML/Kf/8g/hSostg1DAc63cTF2LzCVdnI8AREezGSRtdv7D/UtKyMeXMZhyi XAcQ== X-Gm-Message-State: AOAM530whiOVxRU7XRx5t+3D3PQzp7AQ4TxYs0qOPzIg12emyQK4Y27E 4ADv2Mk0ZfmMQF8Xy+DcKBH0TnDWzHtp3Q== X-Google-Smtp-Source: ABdhPJxd+NDXRygE239M2BXOrwONcVdZ90qPXzWPaBjYH2YED+hQ5gI47oJlLtmJvjVJ7RbKta3ELw== X-Received: by 2002:a37:4e0a:: with SMTP id c10mr6262164qkb.492.1604251578377; Sun, 01 Nov 2020 09:26:18 -0800 (PST) Received: from langur.local (pool-108-21-192-156.nycmny.fios.verizon.net. [108.21.192.156]) by smtp.gmail.com with ESMTPSA id p127sm6374514qkc.37.2020.11.01.09.26.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 01 Nov 2020 09:26:17 -0800 (PST) Subject: Re: [PATCH] Support the new ("v0") mangling scheme in rust-demangle. To: Eduard-Mihai Burtescu Cc: Ian Lance Taylor , Ian Lance Taylor , gcc-patches References: <390716b0-6788-4350-8147-1dfc0c7a22ba@www.fastmail.com> <449bb241-a68e-c8e1-9960-1236a6384fc2@gmail.com> <35a48843-78f3-4a27-3706-ea8a75171ce6@gmail.com> <7f5bc1ea-39a9-4ad9-b518-84cd42e3046c@www.fastmail.com> <6f5e040a-ed4e-4860-874f-2e54c30b797c@www.fastmail.com> <81a4b570-a43e-4dab-a678-452fa9805699@www.fastmail.com> From: Nikhil Benesch Message-ID: <4a19cc9c-04ae-a752-ad63-99812bca043d@gmail.com> Date: Sun, 1 Nov 2020 12:26:16 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <81a4b570-a43e-4dab-a678-452fa9805699@www.fastmail.com> Content-Type: multipart/mixed; boundary="------------4EA2397BE7B6A6BF43105F25" Content-Language: en-US Received-SPF: pass client-ip=2607:f8b0:4864:20::735; envelope-from=nikhil.benesch@gmail.com; helo=mail-qk1-x735.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Nov 2020 17:26:27 -0000 This is a multi-part message in MIME format. --------------4EA2397BE7B6A6BF43105F25 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 11/1/20 6:57 AM, Eduard-Mihai Burtescu wrote: > Reading the diff patch, the v0 changes look great. I wouldn't be too worried > about the "printable character" aspect, there are similar Unicode-related > issues elsewhere, e.g. the "non-control ASCII" comment in decode_legacy_escape > (I suppose we could make it also go through the "print a non-control ASCII > character or some escape sequence" logic you added, if you think that helps). No, it's entirely fine with me! I just wasn't sure if the small deviations in output were acceptable. It sounds like they are. > However, I'm not sure about the legacy changes. Or rather, the .llvm. one, it's > not really Rust-specific, it's only in the rustc-demangle crate for convenience, > but C++ code compiled with Clang could run into the same problem - ideally, > stripping that suffix could be done uniformly in cplus-dem.c, but I decided > against making that change myself, for now. > > I'm especially not comfortable removing the fast path, since that was the > condition under which I was able to make Rust demangling be attempted first, > before C++, in order to implement the Rust legacy demangling standalone, > separately from C++ demangling, so that it could be together with the v0 one. > It should be possible to keep the fast path if stripping .llvm.* suffixes is > done before either Rust or C++ demangling is attempted, but even if that would > be nice to have, IMO it should be a separate patch and not block v0 demangling. That makes sense. I've attached updated patches (again generating a diff against both your original patch and trunk) without the changes to the legacy code. I did preserve one small hunk regarding the unescaping of a single '.' character in idents, as I believe that is just a straightforward bug in the existing code. > I can test the patch and upload the dataset tomorrow, but if you want to get > something committed sooner (is there a deadline for the next release?), feel > free to land the v0 changes (snprintf + const values) without the legacy ones. My understanding is that the GCC tree closes to new features on November 16 (for "GCC 11 Stage 3"), but I'm not sure whether that applies to libiberty or whether this patch would be classified as a feature or a bugfix. I don't have commit rights (nor am I even a GCC developer). Just wanted to tee things up for you and Ian this week. I'm very much looking forward to the new demangling scheme and didn't want to be just another +1 on the GitHub issue. So certainly no time pressure from me. But perhaps someone from the GCC side can confirm whether we are under a bit of time pressure here given the GCC 11 release. Cheers, Nikhil --------------4EA2397BE7B6A6BF43105F25 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="rust-demangle-diff.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rust-demangle-diff.patch" ZGlmZiAtLWdpdCBhL3J1c3QtZGVtYW5nbGUuYyBiL3J1c3QtZGVtYW5nbGUuYwppbmRleCBk NjA0YjNjLi45Y2Q4Zjk5IDEwMDY0NAotLS0gYS9ydXN0LWRlbWFuZ2xlLmMKKysrIGIvcnVz dC1kZW1hbmdsZS5jCkBAIC0xNDMsNiArMTQzLDM1IEBAIHBhcnNlX2Rpc2FtYmlndWF0b3Ig KHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKQogICByZXR1cm4gcGFyc2Vfb3B0X2ludGVn ZXJfNjIgKHJkbSwgJ3MnKTsKIH0KIAorc3RhdGljIHNpemVfdAorcGFyc2VfaGV4X25pYmJs ZXMgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtLCB1aW50NjRfdCAqdmFsdWUpCit7Cisg IGNoYXIgYzsKKyAgc2l6ZV90IGhleF9sZW47CisKKyAgaGV4X2xlbiA9IDA7CisgICp2YWx1 ZSA9IDA7CisKKyAgd2hpbGUgKCFlYXQgKHJkbSwgJ18nKSkKKyAgICB7CisgICAgICAqdmFs dWUgPDw9IDQ7CisKKyAgICAgIGMgPSBuZXh0IChyZG0pOworICAgICAgaWYgKElTRElHSVQg KGMpKQorICAgICAgICAqdmFsdWUgfD0gYyAtICcwJzsKKyAgICAgIGVsc2UgaWYgKGMgPj0g J2EnICYmIGMgPD0gJ2YnKQorICAgICAgICAqdmFsdWUgfD0gMTAgKyAoYyAtICdhJyk7Cisg ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICByZG0tPmVycm9yZWQgPSAxOworICAg ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICBoZXhfbGVuKys7CisgICAgfQor CisgIHJldHVybiBoZXhfbGVuOworfQorCiBzdHJ1Y3QgcnVzdF9tYW5nbGVkX2lkZW50CiB7 CiAgIC8qIEFTQ0lJIHBhcnQgb2YgdGhlIGlkZW50aWZpZXIuICovCkBAIC0yNDAsNyArMjY5 LDcgQEAgc3RhdGljIHZvaWQKIHByaW50X3VpbnQ2NCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVy ICpyZG0sIHVpbnQ2NF90IHgpCiB7CiAgIGNoYXIgc1syMV07Ci0gIHNwcmludGYgKHMsICIl IiBQUkl1NjQsIHgpOworICBzbnByaW50ZiAocywgMjEsICIlIiBQUkl1NjQsIHgpOwogICBQ UklOVCAocyk7CiB9CiAKQEAgLTI0OCw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZAogcHJpbnRf dWludDY0X2hleCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0sIHVpbnQ2NF90IHgpCiB7 CiAgIGNoYXIgc1sxN107Ci0gIHNwcmludGYgKHMsICIlIiBQUkl4NjQsIHgpOworICBzbnBy aW50ZiAocywgMTcsICIlIiBQUkl4NjQsIHgpOwogICBQUklOVCAocyk7CiB9CiAKQEAgLTM4 MCw4ICs0MDksNyBAQCBwcmludF9pZGVudCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0s IHN0cnVjdCBydXN0X21hbmdsZWRfaWRlbnQgaWRlbnQpCiAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg ICAgLyogIi4iIGJlY29tZXMgIi0iICovCi0gICAgICAgICAgICAgICAgICBQUklOVCAoIi0i KTsKKyAgICAgICAgICAgICAgICAgIFBSSU5UICgiLiIpOwogICAgICAgICAgICAgICAgICAg bGVuID0gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01OTEsNiAr NjE5LDkgQEAgc3RhdGljIGludCBkZW1hbmdsZV9wYXRoX21heWJlX29wZW5fZ2VuZXJpY3Mg KHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKIHN0YXRpYyB2b2lkIGRlbWFuZ2xlX2R5 bl90cmFpdCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0pOwogc3RhdGljIHZvaWQgZGVt YW5nbGVfY29uc3QgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKIHN0YXRpYyB2b2lk IGRlbWFuZ2xlX2NvbnN0X3VpbnQgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKK3N0 YXRpYyB2b2lkIGRlbWFuZ2xlX2NvbnN0X2ludCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpy ZG0pOworc3RhdGljIHZvaWQgZGVtYW5nbGVfY29uc3RfYm9vbCAoc3RydWN0IHJ1c3RfZGVt YW5nbGVyICpyZG0pOworc3RhdGljIHZvaWQgZGVtYW5nbGVfY29uc3RfY2hhciAoc3RydWN0 IHJ1c3RfZGVtYW5nbGVyICpyZG0pOwogCiAvKiBPcHRpb25hbGx5IGVudGVyIGEgYmluZGVy ICgnRycpIGZvciBsYXRlLWJvdW5kIGxpZmV0aW1lcywKICAgIHByaW50aW5nIGUuZy4gYGZv cjwnYSwgJ2I+IGAsIGFuZCBtYWtlIHRob3NlIGxpZmV0aW1lcyB2aXNpYmxlCkBAIC0xMDg5 LDYgKzExMjAsMTEgQEAgZGVtYW5nbGVfY29uc3QgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAq cmRtKQogICB0eV90YWcgPSBuZXh0IChyZG0pOwogICBzd2l0Y2ggKHR5X3RhZykKICAgICB7 CisgICAgLyogUGxhY2Vob2xkZXIuICovCisgICAgY2FzZSAncCc6CisgICAgICBQUklOVCAo Il8iKTsKKyAgICAgIHJldHVybjsKKwogICAgIC8qIFVuc2lnbmVkIGludGVnZXIgdHlwZXMu ICovCiAgICAgY2FzZSAnaCc6CiAgICAgY2FzZSAndCc6CkBAIC0xMDk2LDYgKzExMzIsMjcg QEAgZGVtYW5nbGVfY29uc3QgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKQogICAgIGNh c2UgJ3knOgogICAgIGNhc2UgJ28nOgogICAgIGNhc2UgJ2onOgorICAgICAgZGVtYW5nbGVf Y29uc3RfdWludCAocmRtKTsKKyAgICAgIGJyZWFrOworCisgICAgLyogU2lnbmVkIGludGVn ZXIgdHlwZXMuICovCisgICAgY2FzZSAnYSc6CisgICAgY2FzZSAncyc6CisgICAgY2FzZSAn bCc6CisgICAgY2FzZSAneCc6CisgICAgY2FzZSAnbic6CisgICAgY2FzZSAnaSc6CisgICAg ICBkZW1hbmdsZV9jb25zdF9pbnQgKHJkbSk7CisgICAgICBicmVhazsKKworICAgIC8qIEJv b2xlYW4uICovCisgICAgY2FzZSAnYic6CisgICAgICBkZW1hbmdsZV9jb25zdF9ib29sIChy ZG0pOworICAgICAgYnJlYWs7CisKKyAgICAvKiBDaGFyYWN0ZXIuICovCisgICAgY2FzZSAn Yyc6CisgICAgICBkZW1hbmdsZV9jb25zdF9jaGFyIChyZG0pOwogICAgICAgYnJlYWs7CiAK ICAgICBkZWZhdWx0OgpAQCAtMTEwMywxMCArMTE2MCw4IEBAIGRlbWFuZ2xlX2NvbnN0IChz dHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg aWYgKGVhdCAocmRtLCAncCcpKQotICAgIFBSSU5UICgiXyIpOwotICBlbHNlCi0gICAgZGVt YW5nbGVfY29uc3RfdWludCAocmRtKTsKKyAgaWYgKHJkbS0+ZXJyb3JlZCkKKyAgICByZXR1 cm47CiAKICAgaWYgKHJkbS0+dmVyYm9zZSkKICAgICB7CkBAIC0xMTE4LDQxICsxMTczLDg2 IEBAIGRlbWFuZ2xlX2NvbnN0IChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkKIHN0YXRp YyB2b2lkCiBkZW1hbmdsZV9jb25zdF91aW50IChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJk bSkKIHsKLSAgY2hhciBjOwogICBzaXplX3QgaGV4X2xlbjsKICAgdWludDY0X3QgdmFsdWU7 CiAKICAgaWYgKHJkbS0+ZXJyb3JlZCkKICAgICByZXR1cm47CiAKLSAgdmFsdWUgPSAwOwot ICBoZXhfbGVuID0gMDsKLSAgd2hpbGUgKCFlYXQgKHJkbSwgJ18nKSkKLSAgICB7Ci0gICAg ICB2YWx1ZSA8PD0gNDsKKyAgaGV4X2xlbiA9IHBhcnNlX2hleF9uaWJibGVzIChyZG0sICZ2 YWx1ZSk7CiAKLSAgICAgIGMgPSBuZXh0IChyZG0pOwotICAgICAgaWYgKElTRElHSVQgKGMp KQotICAgICAgICB2YWx1ZSB8PSBjIC0gJzAnOwotICAgICAgZWxzZSBpZiAoYyA+PSAnYScg JiYgYyA8PSAnZicpCi0gICAgICAgIHZhbHVlIHw9IDEwICsgKGMgLSAnYScpOwotICAgICAg ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmRtLT5lcnJvcmVkID0gMTsKLSAgICAgICAg ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIGhleF9sZW4rKzsKLSAgICB9Ci0KLSAgLyog UHJpbnQgYW55dGhpbmcgdGhhdCBkb2Vzbid0IGZpdCBpbiBgdWludDY0X3RgIHZlcmJhdGlt LiAqLwogICBpZiAoaGV4X2xlbiA+IDE2KQogICAgIHsKKyAgICAgIC8qIFByaW50IGFueXRo aW5nIHRoYXQgZG9lc24ndCBmaXQgaW4gYHVpbnQ2NF90YCB2ZXJiYXRpbS4gKi8KICAgICAg IFBSSU5UICgiMHgiKTsKICAgICAgIHByaW50X3N0ciAocmRtLCByZG0tPnN5bSArIChyZG0t Pm5leHQgLSBoZXhfbGVuKSwgaGV4X2xlbik7CisgICAgfQorICBlbHNlIGlmIChoZXhfbGVu ID4gMCkKKyAgICBwcmludF91aW50NjQgKHJkbSwgdmFsdWUpOworICBlbHNlCisgICAgcmRt LT5lcnJvcmVkID0gMTsKK30KKworc3RhdGljIHZvaWQKK2RlbWFuZ2xlX2NvbnN0X2ludCAo c3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0pCit7CisgIGlmIChlYXQgKHJkbSwgJ24nKSkK KyAgICBQUklOVCAoIi0iKTsKKyAgZGVtYW5nbGVfY29uc3RfdWludCAocmRtKTsKK30KKwor c3RhdGljIHZvaWQKK2RlbWFuZ2xlX2NvbnN0X2Jvb2wgKHN0cnVjdCBydXN0X2RlbWFuZ2xl ciAqcmRtKQoreworICB1aW50NjRfdCB2YWx1ZTsKKworICBpZiAocGFyc2VfaGV4X25pYmJs ZXMgKHJkbSwgJnZhbHVlKSAhPSAxKQorICAgIHsKKyAgICAgIHJkbS0+ZXJyb3JlZCA9IDE7 CiAgICAgICByZXR1cm47CiAgICAgfQogCi0gIHByaW50X3VpbnQ2NCAocmRtLCB2YWx1ZSk7 CisgIGlmICh2YWx1ZSA9PSAwKQorICAgIFBSSU5UICgiZmFsc2UiKTsKKyAgZWxzZSBpZiAo dmFsdWUgPT0gMSkKKyAgICBQUklOVCAoInRydWUiKTsKKyAgZWxzZQorICAgIHJkbS0+ZXJy b3JlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitkZW1hbmdsZV9jb25zdF9jaGFyIChzdHJ1 Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkKK3sKKyAgc2l6ZV90IGhleF9sZW47CisgIHVpbnQ2 NF90IHZhbHVlOworCisgIGhleF9sZW4gPSBwYXJzZV9oZXhfbmliYmxlcyAocmRtLCAmdmFs dWUpOworCisgIGlmIChoZXhfbGVuID09IDAgfHwgaGV4X2xlbiA+IDgpCisgICAgeworICAg ICAgcmRtLT5lcnJvcmVkID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogTWF0 Y2ggUnVzdCdzIGNoYXJhY3RlciAiZGVidWciIG91dHB1dCBhcyBiZXN0IGFzIHdlIGNhbi4g Ki8KKyAgUFJJTlQgKCInIik7CisgIGlmICh2YWx1ZSA9PSAnXHQnKQorICAgIFBSSU5UICgi XFx0Iik7CisgIGVsc2UgaWYgKHZhbHVlID09ICdccicpCisgICAgUFJJTlQgKCJcXHIiKTsK KyAgZWxzZSBpZiAodmFsdWUgPT0gJ1xuJykKKyAgICBQUklOVCAoIlxcbiIpOworICBlbHNl IGlmICh2YWx1ZSA+ICcgJyAmJiB2YWx1ZSA8ICd+JykKKyAgICAvKiBSdXN0IGFsc28gY29u c2lkZXJzIG1hbnkgbm9uLUFTQ0lJIGNvZGVwb2ludHMgdG8gYmUgcHJpbnRhYmxlLCBidXQK KyAgICAgICB0aGF0IGxvZ2ljIGlzIG5vdCBlYXNpbHkgcG9ydGVkIHRvIEMuICovCisgICAg cHJpbnRfc3RyIChyZG0sIChjaGFyICopICZ2YWx1ZSwgMSk7CisgIGVsc2UKKyAgICB7Cisg ICAgICBQUklOVCAoIlxcdXsiKTsKKyAgICAgIHByaW50X3VpbnQ2NF9oZXggKHJkbSwgdmFs dWUpOworICAgICAgUFJJTlQgKCJ9Iik7CisgICAgfQorICBQUklOVCAoIiciKTsKIH0KIAog LyogQSBsZWdhY3kgaGFzaCBpcyB0aGUgcHJlZml4ICJoIiBmb2xsb3dlZCBieSAxNiBsb3dl cmNhc2UgaGV4IGRpZ2l0cy4K --------------4EA2397BE7B6A6BF43105F25 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="rust-demangle.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rust-demangle.patch" ZGlmZiAtLWdpdCBhL2xpYmliZXJ0eS9ydXN0LWRlbWFuZ2xlLmMgYi9saWJpYmVydHkvcnVz dC1kZW1hbmdsZS5jCmluZGV4IGI4NzM2NWM4NWZlLi5mNmI2M2E2MDY1MiAxMDA2NDQKLS0t IGEvbGliaWJlcnR5L3J1c3QtZGVtYW5nbGUuYworKysgYi9saWJpYmVydHkvcnVzdC1kZW1h bmdsZS5jCkBAIC02NCwxMSArNjQsMTYgQEAgc3RydWN0IHJ1c3RfZGVtYW5nbGVyCiAgIC8q IE5vbi16ZXJvIGlmIGFueSBlcnJvciBvY2N1cnJlZC4gKi8KICAgaW50IGVycm9yZWQ7CiAK KyAgLyogTm9uLXplcm8gaWYgbm90aGluZyBzaG91bGQgYmUgcHJpbnRlZC4gKi8KKyAgaW50 IHNraXBwaW5nX3ByaW50aW5nOworCiAgIC8qIE5vbi16ZXJvIGlmIHByaW50aW5nIHNob3Vs ZCBiZSB2ZXJib3NlIChlLmcuIGluY2x1ZGUgaGFzaGVzKS4gKi8KICAgaW50IHZlcmJvc2U7 CiAKICAgLyogUnVzdCBtYW5nbGluZyB2ZXJzaW9uLCB3aXRoIGxlZ2FjeSBtYW5nbGluZyBi ZWluZyAtMS4gKi8KICAgaW50IHZlcnNpb247CisKKyAgdWludDY0X3QgYm91bmRfbGlmZXRp bWVfZGVwdGg7CiB9OwogCiAvKiBQYXJzaW5nIGZ1bmN0aW9ucy4gKi8KQEAgLTgxLDYgKzg2 LDE4IEBAIHBlZWsgKGNvbnN0IHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKQogICByZXR1 cm4gMDsKIH0KIAorc3RhdGljIGludAorZWF0IChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJk bSwgY2hhciBjKQoreworICBpZiAocGVlayAocmRtKSA9PSBjKQorICAgIHsKKyAgICAgIHJk bS0+bmV4dCsrOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJu IDA7Cit9CisKIHN0YXRpYyBjaGFyCiBuZXh0IChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJk bSkKIHsKQEAgLTkyLDExICsxMDksODcgQEAgbmV4dCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVy ICpyZG0pCiAgIHJldHVybiBjOwogfQogCitzdGF0aWMgdWludDY0X3QKK3BhcnNlX2ludGVn ZXJfNjIgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKQoreworICBjaGFyIGM7CisgIHVp bnQ2NF90IHg7CisKKyAgaWYgKGVhdCAocmRtLCAnXycpKQorICAgIHJldHVybiAwOworCisg IHggPSAwOworICB3aGlsZSAoIWVhdCAocmRtLCAnXycpKQorICAgIHsKKyAgICAgIGMgPSBu ZXh0IChyZG0pOworICAgICAgeCAqPSA2MjsKKyAgICAgIGlmIChJU0RJR0lUIChjKSkKKyAg ICAgICAgeCArPSBjIC0gJzAnOworICAgICAgZWxzZSBpZiAoSVNMT1dFUiAoYykpCisgICAg ICAgIHggKz0gMTAgKyAoYyAtICdhJyk7CisgICAgICBlbHNlIGlmIChJU1VQUEVSIChjKSkK KyAgICAgICAgeCArPSAxMCArIDI2ICsgKGMgLSAnQScpOworICAgICAgZWxzZQorICAgICAg ICB7CisgICAgICAgICAgcmRtLT5lcnJvcmVkID0gMTsKKyAgICAgICAgICByZXR1cm4gMDsK KyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIHggKyAxOworfQorCitzdGF0aWMgdWludDY0 X3QKK3BhcnNlX29wdF9pbnRlZ2VyXzYyIChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSwg Y2hhciB0YWcpCit7CisgIGlmICghZWF0IChyZG0sIHRhZykpCisgICAgcmV0dXJuIDA7Cisg IHJldHVybiAxICsgcGFyc2VfaW50ZWdlcl82MiAocmRtKTsKK30KKworc3RhdGljIHVpbnQ2 NF90CitwYXJzZV9kaXNhbWJpZ3VhdG9yIChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkK K3sKKyAgcmV0dXJuIHBhcnNlX29wdF9pbnRlZ2VyXzYyIChyZG0sICdzJyk7Cit9CisKK3N0 YXRpYyBzaXplX3QKK3BhcnNlX2hleF9uaWJibGVzIChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIg KnJkbSwgdWludDY0X3QgKnZhbHVlKQoreworICBjaGFyIGM7CisgIHNpemVfdCBoZXhfbGVu OworCisgIGhleF9sZW4gPSAwOworICAqdmFsdWUgPSAwOworCisgIHdoaWxlICghZWF0IChy ZG0sICdfJykpCisgICAgeworICAgICAgKnZhbHVlIDw8PSA0OworCisgICAgICBjID0gbmV4 dCAocmRtKTsKKyAgICAgIGlmIChJU0RJR0lUIChjKSkKKyAgICAgICAgKnZhbHVlIHw9IGMg LSAnMCc7CisgICAgICBlbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKyAgICAgICAg KnZhbHVlIHw9IDEwICsgKGMgLSAnYScpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAg ICAgICAgcmRtLT5lcnJvcmVkID0gMTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg fQorICAgICAgaGV4X2xlbisrOworICAgIH0KKworICByZXR1cm4gaGV4X2xlbjsKK30KKwog c3RydWN0IHJ1c3RfbWFuZ2xlZF9pZGVudAogewogICAvKiBBU0NJSSBwYXJ0IG9mIHRoZSBp ZGVudGlmaWVyLiAqLwogICBjb25zdCBjaGFyICphc2NpaTsKICAgc2l6ZV90IGFzY2lpX2xl bjsKKworICAvKiBQdW55Y29kZSBpbnNlcnRpb24gY29kZXMgZm9yIFVuaWNvZGUgY29kZXBv aW50cywgaWYgYW55LiAqLworICBjb25zdCBjaGFyICpwdW55Y29kZTsKKyAgc2l6ZV90IHB1 bnljb2RlX2xlbjsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnVzdF9tYW5nbGVkX2lkZW50CkBA IC0xMDQsMTAgKzE5NywxNiBAQCBwYXJzZV9pZGVudCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVy ICpyZG0pCiB7CiAgIGNoYXIgYzsKICAgc2l6ZV90IHN0YXJ0LCBsZW47CisgIGludCBpc19w dW55Y29kZSA9IDA7CiAgIHN0cnVjdCBydXN0X21hbmdsZWRfaWRlbnQgaWRlbnQ7CiAKICAg aWRlbnQuYXNjaWkgPSBOVUxMOwogICBpZGVudC5hc2NpaV9sZW4gPSAwOworICBpZGVudC5w dW55Y29kZSA9IE5VTEw7CisgIGlkZW50LnB1bnljb2RlX2xlbiA9IDA7CisKKyAgaWYgKHJk bS0+dmVyc2lvbiAhPSAtMSkKKyAgICBpc19wdW55Y29kZSA9IGVhdCAocmRtLCAndScpOwog CiAgIGMgPSBuZXh0IChyZG0pOwogICBpZiAoIUlTRElHSVQgKGMpKQpAQCAtMTIxLDYgKzIy MCwxMCBAQCBwYXJzZV9pZGVudCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0pCiAgICAg d2hpbGUgKElTRElHSVQgKHBlZWsgKHJkbSkpKQogICAgICAgbGVuID0gbGVuICogMTAgKyAo bmV4dCAocmRtKSAtICcwJyk7CiAKKyAgLyogU2tpcCBwYXN0IHRoZSBvcHRpb25hbCBgX2Ag c2VwYXJhdG9yICh2MCkuICovCisgIGlmIChyZG0tPnZlcnNpb24gIT0gLTEpCisgICAgZWF0 IChyZG0sICdfJyk7CisKICAgc3RhcnQgPSByZG0tPm5leHQ7CiAgIHJkbS0+bmV4dCArPSBs ZW47CiAgIC8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCkBAIC0xMzMsNiArMjM2LDI3IEBA IHBhcnNlX2lkZW50IChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkKICAgaWRlbnQuYXNj aWkgPSByZG0tPnN5bSArIHN0YXJ0OwogICBpZGVudC5hc2NpaV9sZW4gPSBsZW47CiAKKyAg aWYgKGlzX3B1bnljb2RlKQorICAgIHsKKyAgICAgIGlkZW50LnB1bnljb2RlX2xlbiA9IDA7 CisgICAgICB3aGlsZSAoaWRlbnQuYXNjaWlfbGVuID4gMCkKKyAgICAgICAgeworICAgICAg ICAgIGlkZW50LmFzY2lpX2xlbi0tOworCisgICAgICAgICAgLyogVGhlIGxhc3QgJ18nIGlz IGEgc2VwYXJhdG9yIGJldHdlZW4gYXNjaWkgJiBwdW55Y29kZS4gKi8KKyAgICAgICAgICBp ZiAoaWRlbnQuYXNjaWlbaWRlbnQuYXNjaWlfbGVuXSA9PSAnXycpCisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgIGlkZW50LnB1bnljb2RlX2xlbisrOworICAgICAgICB9Cisg ICAgICBpZiAoIWlkZW50LnB1bnljb2RlX2xlbikKKyAgICAgICAgeworICAgICAgICAgIHJk bS0+ZXJyb3JlZCA9IDE7CisgICAgICAgICAgcmV0dXJuIGlkZW50OworICAgICAgICB9Cisg ICAgICBpZGVudC5wdW55Y29kZSA9IGlkZW50LmFzY2lpICsgKGxlbiAtIGlkZW50LnB1bnlj b2RlX2xlbik7CisgICAgfQorCiAgIGlmIChpZGVudC5hc2NpaV9sZW4gPT0gMCkKICAgICBp ZGVudC5hc2NpaSA9IE5VTEw7CiAKQEAgLTE0NCwxMiArMjY4LDI4IEBAIHBhcnNlX2lkZW50 IChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkKIHN0YXRpYyB2b2lkCiBwcmludF9zdHIg KHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qg bGVuKQogewotICBpZiAoIXJkbS0+ZXJyb3JlZCkKKyAgaWYgKCFyZG0tPmVycm9yZWQgJiYg IXJkbS0+c2tpcHBpbmdfcHJpbnRpbmcpCiAgICAgcmRtLT5jYWxsYmFjayAoZGF0YSwgbGVu LCByZG0tPmNhbGxiYWNrX29wYXF1ZSk7CiB9CiAKICNkZWZpbmUgUFJJTlQocykgcHJpbnRf c3RyIChyZG0sIHMsIHN0cmxlbiAocykpCiAKK3N0YXRpYyB2b2lkCitwcmludF91aW50NjQg KHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtLCB1aW50NjRfdCB4KQoreworICBjaGFyIHNb MjFdOworICBzbnByaW50ZiAocywgMjEsICIlIiBQUkl1NjQsIHgpOworICBQUklOVCAocyk7 Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF91aW50NjRfaGV4IChzdHJ1Y3QgcnVzdF9kZW1h bmdsZXIgKnJkbSwgdWludDY0X3QgeCkKK3sKKyAgY2hhciBzWzE3XTsKKyAgc25wcmludGYg KHMsIDE3LCAiJSIgUFJJeDY0LCB4KTsKKyAgUFJJTlQgKHMpOworfQorCiAvKiBSZXR1cm4g YSAweDAtMHhmIHZhbHVlIGlmIHRoZSBjaGFyIGlzIDAtOWEtZiwgYW5kIC0xIG90aGVyd2lz ZS4gKi8KIHN0YXRpYyBpbnQKIGRlY29kZV9sb3dlcl9oZXhfbmliYmxlIChjaGFyIG5pYmJs ZSkKQEAgLTIzMCw5ICszNzAsMTQgQEAgc3RhdGljIHZvaWQKIHByaW50X2lkZW50IChzdHJ1 Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSwgc3RydWN0IHJ1c3RfbWFuZ2xlZF9pZGVudCBpZGVu dCkKIHsKICAgY2hhciB1bmVzY2FwZWQ7Ci0gIHNpemVfdCBsZW47CisgIHVpbnQ4X3QgKm91 dCwgKnAsIGQ7CisgIHNpemVfdCBsZW4sIGNhcCwgcHVueWNvZGVfcG9zLCBqOworICAvKiBQ dW55Y29kZSBwYXJhbWV0ZXJzIGFuZCBzdGF0ZS4gKi8KKyAgdWludDMyX3QgYzsKKyAgc2l6 ZV90IGJhc2UsIHRfbWluLCB0X21heCwgc2tldywgZGFtcCwgYmlhcywgaTsKKyAgc2l6ZV90 IGRlbHRhLCB3LCBrLCB0OwogCi0gIGlmIChyZG0tPmVycm9yZWQpCisgIGlmIChyZG0tPmVy cm9yZWQgfHwgcmRtLT5za2lwcGluZ19wcmludGluZykKICAgICByZXR1cm47CiAKICAgaWYg KHJkbS0+dmVyc2lvbiA9PSAtMSkKQEAgLTI3Myw4ICs0MTgsNyBAQCBwcmludF9pZGVudCAo c3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0sIHN0cnVjdCBydXN0X21hbmdsZWRfaWRlbnQg aWRlbnQpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLyogIi4iIGJlY29tZXMgIi0iICovCi0g ICAgICAgICAgICAgICAgICBQUklOVCAoIi0iKTsKKyAgICAgICAgICAgICAgICAgIFBSSU5U ICgiLiIpOwogICAgICAgICAgICAgICAgICAgbGVuID0gMTsKICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICB9CkBAIC0yOTQsNiArNDM4LDgzMCBAQCBwcmludF9pZGVudCAoc3Ry dWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0sIHN0cnVjdCBydXN0X21hbmdsZWRfaWRlbnQgaWRl bnQpCiAKICAgICAgIHJldHVybjsKICAgICB9CisKKyAgaWYgKCFpZGVudC5wdW55Y29kZSkK KyAgICB7CisgICAgICBwcmludF9zdHIgKHJkbSwgaWRlbnQuYXNjaWksIGlkZW50LmFzY2lp X2xlbik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGxlbiA9IDA7CisgIGNhcCA9IDQ7 CisgIHdoaWxlIChjYXAgPCBpZGVudC5hc2NpaV9sZW4pCisgICAgeworICAgICAgY2FwICo9 IDI7CisgICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLworICAgICAgaWYgKChjYXAg KiA0KSAvIDQgIT0gY2FwKQorICAgICAgICB7CisgICAgICAgICAgcmRtLT5lcnJvcmVkID0g MTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogU3RvcmUg dGhlIG91dHB1dCBjb2RlcG9pbnRzIGFzIGdyb3VwcyBvZiA0IFVURi04IGJ5dGVzLiAqLwor ICBvdXQgPSAodWludDhfdCAqKW1hbGxvYyAoY2FwICogNCk7CisgIGlmICghb3V0KQorICAg IHsKKyAgICAgIHJkbS0+ZXJyb3JlZCA9IDE7CisgICAgICByZXR1cm47CisgICAgfQorCisg IC8qIFBvcHVsYXRlIGluaXRpYWwgb3V0cHV0IGZyb20gQVNDSUkgZnJhZ21lbnQuICovCisg IGZvciAobGVuID0gMDsgbGVuIDwgaWRlbnQuYXNjaWlfbGVuOyBsZW4rKykKKyAgICB7Cisg ICAgICBwID0gb3V0ICsgNCAqIGxlbjsKKyAgICAgIHBbMF0gPSAwOworICAgICAgcFsxXSA9 IDA7CisgICAgICBwWzJdID0gMDsKKyAgICAgIHBbM10gPSBpZGVudC5hc2NpaVtsZW5dOwor ICAgIH0KKworICAvKiBQdW55Y29kZSBwYXJhbWV0ZXJzIGFuZCBpbml0aWFsIHN0YXRlLiAq LworICBiYXNlID0gMzY7CisgIHRfbWluID0gMTsKKyAgdF9tYXggPSAyNjsKKyAgc2tldyA9 IDM4OworICBkYW1wID0gNzAwOworICBiaWFzID0gNzI7CisgIGkgPSAwOworICBjID0gMHg4 MDsKKworICBwdW55Y29kZV9wb3MgPSAwOworICB3aGlsZSAocHVueWNvZGVfcG9zIDwgaWRl bnQucHVueWNvZGVfbGVuKQorICAgIHsKKyAgICAgIC8qIFJlYWQgb25lIGRlbHRhIHZhbHVl LiAqLworICAgICAgZGVsdGEgPSAwOworICAgICAgdyA9IDE7CisgICAgICBrID0gMDsKKyAg ICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBrICs9IGJhc2U7CisgICAgICAgICAgdCA9 IGsgPCBiaWFzID8gMCA6IChrIC0gYmlhcyk7CisgICAgICAgICAgaWYgKHQgPCB0X21pbikK KyAgICAgICAgICAgIHQgPSB0X21pbjsKKyAgICAgICAgICBpZiAodCA+IHRfbWF4KQorICAg ICAgICAgICAgdCA9IHRfbWF4OworCisgICAgICAgICAgaWYgKHB1bnljb2RlX3BvcyA+PSBp ZGVudC5wdW55Y29kZV9sZW4pCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAg ICAgZCA9IGlkZW50LnB1bnljb2RlW3B1bnljb2RlX3BvcysrXTsKKworICAgICAgICAgIGlm IChJU0xPV0VSIChkKSkKKyAgICAgICAgICAgIGQgPSBkIC0gJ2EnOworICAgICAgICAgIGVs c2UgaWYgKElTRElHSVQgKGQpKQorICAgICAgICAgICAgZCA9IDI2ICsgKGQgLSAnMCcpOwor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmRtLT5lcnJv cmVkID0gMTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgfQor CisgICAgICAgICAgZGVsdGEgKz0gZCAqIHc7CisgICAgICAgICAgdyAqPSBiYXNlIC0gdDsK KyAgICAgICAgfQorICAgICAgd2hpbGUgKGQgPj0gdCk7CisKKyAgICAgIC8qIENvbXB1dGUg dGhlIG5ldyBpbnNlcnQgcG9zaXRpb24gYW5kIGNoYXJhY3Rlci4gKi8KKyAgICAgIGxlbisr OworICAgICAgaSArPSBkZWx0YTsKKyAgICAgIGMgKz0gaSAvIGxlbjsKKyAgICAgIGkgJT0g bGVuOworCisgICAgICAvKiBFbnN1cmUgZW5vdWdoIHNwYWNlIGlzIGF2YWlsYWJsZS4gKi8K KyAgICAgIGlmIChjYXAgPCBsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBjYXAgKj0gMjsK KyAgICAgICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLworICAgICAgICAgIGlmICgo Y2FwICogNCkgLyA0ICE9IGNhcCB8fCBjYXAgPCBsZW4pCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIHJkbS0+ZXJyb3JlZCA9IDE7CisgICAgICAgICAgICAgIGdvdG8gY2xlYW51 cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgcCA9ICh1aW50OF90ICopcmVh bGxvYyAob3V0LCBjYXAgKiA0KTsKKyAgICAgIGlmICghcCkKKyAgICAgICAgeworICAgICAg ICAgIHJkbS0+ZXJyb3JlZCA9IDE7CisgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAg ICB9CisgICAgICBvdXQgPSBwOworCisgICAgICAvKiBNb3ZlIHRoZSBjaGFyYWN0ZXJzIGFm dGVyIHRoZSBpbnNlcnQgcG9zaXRpb24uICovCisgICAgICBwID0gb3V0ICsgaSAqIDQ7Cisg ICAgICBtZW1tb3ZlIChwICsgNCwgcCwgKGxlbiAtIGkgLSAxKSAqIDQpOworCisgICAgICAv KiBJbnNlcnQgdGhlIG5ldyBjaGFyYWN0ZXIsIGFzIFVURi04IGJ5dGVzLiAqLworICAgICAg cFswXSA9IGMgPj0gMHgxMDAwMCA/IDB4ZjAgfCAoYyA+PiAxOCkgOiAwOworICAgICAgcFsx XSA9IGMgPj0gMHg4MDAgPyAoYyA8IDB4MTAwMDAgPyAweGUwIDogMHg4MCkgfCAoKGMgPj4g MTIpICYgMHgzZikgOiAwOworICAgICAgcFsyXSA9IChjIDwgMHg4MDAgPyAweGMwIDogMHg4 MCkgfCAoKGMgPj4gNikgJiAweDNmKTsKKyAgICAgIHBbM10gPSAweDgwIHwgKGMgJiAweDNm KTsKKworICAgICAgLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgZGVsdGFzLCBkZWNvZGluZyBp cyBjb21wbGV0ZS4gKi8KKyAgICAgIGlmIChwdW55Y29kZV9wb3MgPT0gaWRlbnQucHVueWNv ZGVfbGVuKQorICAgICAgICBicmVhazsKKworICAgICAgaSsrOworCisgICAgICAvKiBQZXJm b3JtIGJpYXMgYWRhcHRhdGlvbi4gKi8KKyAgICAgIGRlbHRhIC89IGRhbXA7CisgICAgICBk YW1wID0gMjsKKworICAgICAgZGVsdGEgKz0gZGVsdGEgLyBsZW47CisgICAgICBrID0gMDsK KyAgICAgIHdoaWxlIChkZWx0YSA+ICgoYmFzZSAtIHRfbWluKSAqIHRfbWF4KSAvIDIpCisg ICAgICAgIHsKKyAgICAgICAgICBkZWx0YSAvPSBiYXNlIC0gdF9taW47CisgICAgICAgICAg ayArPSBiYXNlOworICAgICAgICB9CisgICAgICBiaWFzID0gayArICgoYmFzZSAtIHRfbWlu ICsgMSkgKiBkZWx0YSkgLyAoZGVsdGEgKyBza2V3KTsKKyAgICB9CisKKyAgLyogUmVtb3Zl IGFsbCB0aGUgMCBieXRlcyB0byBsZWF2ZSBiZWhpbmQgYW4gVVRGLTggc3RyaW5nLiAqLwor ICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxlbiAqIDQ7IGkrKykKKyAgICBpZiAob3V0W2ld ICE9IDApCisgICAgICBvdXRbaisrXSA9IG91dFtpXTsKKworICBwcmludF9zdHIgKHJkbSwg KGNvbnN0IGNoYXIgKilvdXQsIGopOworCitjbGVhbnVwOgorICBmcmVlIChvdXQpOworfQor CisvKiBQcmludCB0aGUgbGlmZXRpbWUgYWNjb3JkaW5nIHRvIHRoZSBwcmV2aW91c2x5IGRl Y29kZWQgaW5kZXguCisgICBBbiBpbmRleCBvZiBgMGAgYWx3YXlzIHJlZmVycyB0byBgJ19g LCBidXQgc3RhcnRpbmcgd2l0aCBgMWAsCisgICBpbmRpY2VzIHJlZmVyIHRvIGxhdGUtYm91 bmQgbGlmZXRpbWVzIGludHJvZHVjZWQgYnkgYSBiaW5kZXIuICovCitzdGF0aWMgdm9pZAor cHJpbnRfbGlmZXRpbWVfZnJvbV9pbmRleCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0s IHVpbnQ2NF90IGx0KQoreworICBjaGFyIGM7CisgIHVpbnQ2NF90IGRlcHRoOworCisgIFBS SU5UICgiJyIpOworICBpZiAobHQgPT0gMCkKKyAgICB7CisgICAgICBQUklOVCAoIl8iKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZGVwdGggPSByZG0tPmJvdW5kX2xpZmV0aW1l X2RlcHRoIC0gbHQ7CisgIC8qIFRyeSB0byBwcmludCBsaWZldGltZXMgYWxwaGFiZXRpY2Fs bHkgZmlyc3QuICovCisgIGlmIChkZXB0aCA8IDI2KQorICAgIHsKKyAgICAgIGMgPSAnYScg KyBkZXB0aDsKKyAgICAgIHByaW50X3N0ciAocmRtLCAmYywgMSk7CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgLyogVXNlIGAnXzEyM2AgYWZ0ZXIgcnVubmluZyBvdXQgb2YgbGV0 dGVycy4gKi8KKyAgICAgIFBSSU5UICgiXyIpOworICAgICAgcHJpbnRfdWludDY0IChyZG0s IGRlcHRoKTsKKyAgICB9Cit9CisKKy8qIERlbWFuZ2xpbmcgZnVuY3Rpb25zLiAqLworCitz dGF0aWMgdm9pZCBkZW1hbmdsZV9iaW5kZXIgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRt KTsKK3N0YXRpYyB2b2lkIGRlbWFuZ2xlX3BhdGggKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAq cmRtLCBpbnQgaW5fdmFsdWUpOworc3RhdGljIHZvaWQgZGVtYW5nbGVfZ2VuZXJpY19hcmcg KHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKK3N0YXRpYyB2b2lkIGRlbWFuZ2xlX3R5 cGUgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKK3N0YXRpYyBpbnQgZGVtYW5nbGVf cGF0aF9tYXliZV9vcGVuX2dlbmVyaWNzIChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSk7 CitzdGF0aWMgdm9pZCBkZW1hbmdsZV9keW5fdHJhaXQgKHN0cnVjdCBydXN0X2RlbWFuZ2xl ciAqcmRtKTsKK3N0YXRpYyB2b2lkIGRlbWFuZ2xlX2NvbnN0IChzdHJ1Y3QgcnVzdF9kZW1h bmdsZXIgKnJkbSk7CitzdGF0aWMgdm9pZCBkZW1hbmdsZV9jb25zdF91aW50IChzdHJ1Y3Qg cnVzdF9kZW1hbmdsZXIgKnJkbSk7CitzdGF0aWMgdm9pZCBkZW1hbmdsZV9jb25zdF9pbnQg KHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKK3N0YXRpYyB2b2lkIGRlbWFuZ2xlX2Nv bnN0X2Jvb2wgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKK3N0YXRpYyB2b2lkIGRl bWFuZ2xlX2NvbnN0X2NoYXIgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKTsKKworLyog T3B0aW9uYWxseSBlbnRlciBhIGJpbmRlciAoJ0cnKSBmb3IgbGF0ZS1ib3VuZCBsaWZldGlt ZXMsCisgICBwcmludGluZyBlLmcuIGBmb3I8J2EsICdiPiBgLCBhbmQgbWFrZSB0aG9zZSBs aWZldGltZXMgdmlzaWJsZQorICAgdG8gdGhlIGNhbGxlciAodmlhIGRlcHRoIGxldmVsLCB3 aGljaCB0aGUgY2FsbGVyIHNob3VsZCByZXNldCkuICovCitzdGF0aWMgdm9pZAorZGVtYW5n bGVfYmluZGVyIChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkKK3sKKyAgdWludDY0X3Qg aSwgYm91bmRfbGlmZXRpbWVzOworCisgIGlmIChyZG0tPmVycm9yZWQpCisgICAgcmV0dXJu OworCisgIGJvdW5kX2xpZmV0aW1lcyA9IHBhcnNlX29wdF9pbnRlZ2VyXzYyIChyZG0sICdH Jyk7CisgIGlmIChib3VuZF9saWZldGltZXMgPiAwKQorICAgIHsKKyAgICAgIFBSSU5UICgi Zm9yPCIpOworICAgICAgZm9yIChpID0gMDsgaSA8IGJvdW5kX2xpZmV0aW1lczsgaSsrKQor ICAgICAgICB7CisgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgUFJJTlQgKCIs ICIpOworICAgICAgICAgIHJkbS0+Ym91bmRfbGlmZXRpbWVfZGVwdGgrKzsKKyAgICAgICAg ICBwcmludF9saWZldGltZV9mcm9tX2luZGV4IChyZG0sIDEpOworICAgICAgICB9CisgICAg ICBQUklOVCAoIj4gIik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZGVtYW5nbGVfcGF0 aCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0sIGludCBpbl92YWx1ZSkKK3sKKyAgY2hh ciB0YWcsIG5zOworICBpbnQgd2FzX3NraXBwaW5nX3ByaW50aW5nOworICBzaXplX3QgaSwg YmFja3JlZiwgb2xkX25leHQ7CisgIHVpbnQ2NF90IGRpczsKKyAgc3RydWN0IHJ1c3RfbWFu Z2xlZF9pZGVudCBuYW1lOworCisgIGlmIChyZG0tPmVycm9yZWQpCisgICAgcmV0dXJuOwor CisgIHN3aXRjaCAodGFnID0gbmV4dCAocmRtKSkKKyAgICB7CisgICAgY2FzZSAnQyc6Cisg ICAgICBkaXMgPSBwYXJzZV9kaXNhbWJpZ3VhdG9yIChyZG0pOworICAgICAgbmFtZSA9IHBh cnNlX2lkZW50IChyZG0pOworCisgICAgICBwcmludF9pZGVudCAocmRtLCBuYW1lKTsKKyAg ICAgIGlmIChyZG0tPnZlcmJvc2UpCisgICAgICAgIHsKKyAgICAgICAgICBQUklOVCAoIlsi KTsKKyAgICAgICAgICBwcmludF91aW50NjRfaGV4IChyZG0sIGRpcyk7CisgICAgICAgICAg UFJJTlQgKCJdIik7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ04nOgor ICAgICAgbnMgPSBuZXh0IChyZG0pOworICAgICAgaWYgKCFJU0xPV0VSIChucykgJiYgIUlT VVBQRVIgKG5zKSkKKyAgICAgICAgeworICAgICAgICAgIHJkbS0+ZXJyb3JlZCA9IDE7Cisg ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGRlbWFuZ2xlX3BhdGggKHJk bSwgaW5fdmFsdWUpOworCisgICAgICBkaXMgPSBwYXJzZV9kaXNhbWJpZ3VhdG9yIChyZG0p OworICAgICAgbmFtZSA9IHBhcnNlX2lkZW50IChyZG0pOworCisgICAgICBpZiAoSVNVUFBF UiAobnMpKQorICAgICAgICB7CisgICAgICAgICAgLyogU3BlY2lhbCBuYW1lc3BhY2VzLCBs aWtlIGNsb3N1cmVzIGFuZCBzaGltcy4gKi8KKyAgICAgICAgICBQUklOVCAoIjo6eyIpOwor ICAgICAgICAgIHN3aXRjaCAobnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNl ICdDJzoKKyAgICAgICAgICAgICAgUFJJTlQgKCJjbG9zdXJlIik7CisgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgIFBSSU5UICgi c2hpbSIpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgIHByaW50X3N0ciAocmRtLCAmbnMsIDEpOworICAgICAgICAgICAgfQor ICAgICAgICAgIGlmIChuYW1lLmFzY2lpIHx8IG5hbWUucHVueWNvZGUpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIFBSSU5UICgiOiIpOworICAgICAgICAgICAgICBwcmludF9p ZGVudCAocmRtLCBuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBQUklOVCAoIiMi KTsKKyAgICAgICAgICBwcmludF91aW50NjQgKHJkbSwgZGlzKTsKKyAgICAgICAgICBQUklO VCAoIn0iKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg LyogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMvdW5zcGVjaWZpZWQgbmFtZXNwYWNlcy4gKi8K KworICAgICAgICAgIGlmIChuYW1lLmFzY2lpIHx8IG5hbWUucHVueWNvZGUpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIFBSSU5UICgiOjoiKTsKKyAgICAgICAgICAgICAgcHJp bnRfaWRlbnQgKHJkbSwgbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IGJyZWFrOworICAgIGNhc2UgJ00nOgorICAgIGNhc2UgJ1gnOgorICAgICAgLyogSWdub3Jl IHRoZSBgaW1wbGAncyBvd24gcGF0aC4qLworICAgICAgcGFyc2VfZGlzYW1iaWd1YXRvciAo cmRtKTsKKyAgICAgIHdhc19za2lwcGluZ19wcmludGluZyA9IHJkbS0+c2tpcHBpbmdfcHJp bnRpbmc7CisgICAgICByZG0tPnNraXBwaW5nX3ByaW50aW5nID0gMTsKKyAgICAgIGRlbWFu Z2xlX3BhdGggKHJkbSwgaW5fdmFsdWUpOworICAgICAgcmRtLT5za2lwcGluZ19wcmludGlu ZyA9IHdhc19za2lwcGluZ19wcmludGluZzsKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisg ICAgY2FzZSAnWSc6CisgICAgICBQUklOVCAoIjwiKTsKKyAgICAgIGRlbWFuZ2xlX3R5cGUg KHJkbSk7CisgICAgICBpZiAodGFnICE9ICdNJykKKyAgICAgICAgeworICAgICAgICAgIFBS SU5UICgiIGFzICIpOworICAgICAgICAgIGRlbWFuZ2xlX3BhdGggKHJkbSwgMCk7CisgICAg ICAgIH0KKyAgICAgIFBSSU5UICgiPiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnSSc6 CisgICAgICBkZW1hbmdsZV9wYXRoIChyZG0sIGluX3ZhbHVlKTsKKyAgICAgIGlmIChpbl92 YWx1ZSkKKyAgICAgICAgUFJJTlQgKCI6OiIpOworICAgICAgUFJJTlQgKCI8Iik7CisgICAg ICBmb3IgKGkgPSAwOyAhcmRtLT5lcnJvcmVkICYmICFlYXQgKHJkbSwgJ0UnKTsgaSsrKQor ICAgICAgICB7CisgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgUFJJTlQgKCIs ICIpOworICAgICAgICAgIGRlbWFuZ2xlX2dlbmVyaWNfYXJnIChyZG0pOworICAgICAgICB9 CisgICAgICBQUklOVCAoIj4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0InOgorICAg ICAgYmFja3JlZiA9IHBhcnNlX2ludGVnZXJfNjIgKHJkbSk7CisgICAgICBpZiAoIXJkbS0+ c2tpcHBpbmdfcHJpbnRpbmcpCisgICAgICAgIHsKKyAgICAgICAgICBvbGRfbmV4dCA9IHJk bS0+bmV4dDsKKyAgICAgICAgICByZG0tPm5leHQgPSBiYWNrcmVmOworICAgICAgICAgIGRl bWFuZ2xlX3BhdGggKHJkbSwgaW5fdmFsdWUpOworICAgICAgICAgIHJkbS0+bmV4dCA9IG9s ZF9uZXh0OworICAgICAgICB9CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg cmRtLT5lcnJvcmVkID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkCitkZW1hbmdsZV9nZW5lcmljX2FyZyAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0p Cit7CisgIHVpbnQ2NF90IGx0OworICBpZiAoZWF0IChyZG0sICdMJykpCisgICAgeworICAg ICAgbHQgPSBwYXJzZV9pbnRlZ2VyXzYyIChyZG0pOworICAgICAgcHJpbnRfbGlmZXRpbWVf ZnJvbV9pbmRleCAocmRtLCBsdCk7CisgICAgfQorICBlbHNlIGlmIChlYXQgKHJkbSwgJ0sn KSkKKyAgICBkZW1hbmdsZV9jb25zdCAocmRtKTsKKyAgZWxzZQorICAgIGRlbWFuZ2xlX3R5 cGUgKHJkbSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2Jhc2ljX3R5cGUgKGNoYXIg dGFnKQoreworICBzd2l0Y2ggKHRhZykKKyAgICB7CisgICAgY2FzZSAnYic6CisgICAgICBy ZXR1cm4gImJvb2wiOworICAgIGNhc2UgJ2MnOgorICAgICAgcmV0dXJuICJjaGFyIjsKKyAg ICBjYXNlICdlJzoKKyAgICAgIHJldHVybiAic3RyIjsKKyAgICBjYXNlICd1JzoKKyAgICAg IHJldHVybiAiKCkiOworICAgIGNhc2UgJ2EnOgorICAgICAgcmV0dXJuICJpOCI7CisgICAg Y2FzZSAncyc6CisgICAgICByZXR1cm4gImkxNiI7CisgICAgY2FzZSAnbCc6CisgICAgICBy ZXR1cm4gImkzMiI7CisgICAgY2FzZSAneCc6CisgICAgICByZXR1cm4gImk2NCI7CisgICAg Y2FzZSAnbic6CisgICAgICByZXR1cm4gImkxMjgiOworICAgIGNhc2UgJ2knOgorICAgICAg cmV0dXJuICJpc2l6ZSI7CisgICAgY2FzZSAnaCc6CisgICAgICByZXR1cm4gInU4IjsKKyAg ICBjYXNlICd0JzoKKyAgICAgIHJldHVybiAidTE2IjsKKyAgICBjYXNlICdtJzoKKyAgICAg IHJldHVybiAidTMyIjsKKyAgICBjYXNlICd5JzoKKyAgICAgIHJldHVybiAidTY0IjsKKyAg ICBjYXNlICdvJzoKKyAgICAgIHJldHVybiAidTEyOCI7CisgICAgY2FzZSAnaic6CisgICAg ICByZXR1cm4gInVzaXplIjsKKyAgICBjYXNlICdmJzoKKyAgICAgIHJldHVybiAiZjMyIjsK KyAgICBjYXNlICdkJzoKKyAgICAgIHJldHVybiAiZjY0IjsKKyAgICBjYXNlICd6JzoKKyAg ICAgIHJldHVybiAiISI7CisgICAgY2FzZSAncCc6CisgICAgICByZXR1cm4gIl8iOworICAg IGNhc2UgJ3YnOgorICAgICAgcmV0dXJuICIuLi4iOworCisgICAgZGVmYXVsdDoKKyAgICAg IHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2RlbWFuZ2xlX3R5cGUg KHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKQoreworICBjaGFyIHRhZzsKKyAgc2l6ZV90 IGksIG9sZF9uZXh0LCBiYWNrcmVmOworICB1aW50NjRfdCBsdCwgb2xkX2JvdW5kX2xpZmV0 aW1lX2RlcHRoOworICBjb25zdCBjaGFyICpiYXNpYzsKKyAgc3RydWN0IHJ1c3RfbWFuZ2xl ZF9pZGVudCBhYmk7CisKKyAgaWYgKHJkbS0+ZXJyb3JlZCkKKyAgICByZXR1cm47CisKKyAg dGFnID0gbmV4dCAocmRtKTsKKworICBiYXNpYyA9IGJhc2ljX3R5cGUgKHRhZyk7CisgIGlm IChiYXNpYykKKyAgICB7CisgICAgICBQUklOVCAoYmFzaWMpOworICAgICAgcmV0dXJuOwor ICAgIH0KKworICBzd2l0Y2ggKHRhZykKKyAgICB7CisgICAgY2FzZSAnUic6CisgICAgY2Fz ZSAnUSc6CisgICAgICBQUklOVCAoIiYiKTsKKyAgICAgIGlmIChlYXQgKHJkbSwgJ0wnKSkK KyAgICAgICAgeworICAgICAgICAgIGx0ID0gcGFyc2VfaW50ZWdlcl82MiAocmRtKTsKKyAg ICAgICAgICBpZiAobHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHByaW50X2xp ZmV0aW1lX2Zyb21faW5kZXggKHJkbSwgbHQpOworICAgICAgICAgICAgICBQUklOVCAoIiAi KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKHRhZyAhPSAnUicpCisg ICAgICAgIFBSSU5UICgibXV0ICIpOworICAgICAgZGVtYW5nbGVfdHlwZSAocmRtKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgJ1AnOgorICAgIGNhc2UgJ08nOgorICAgICAgUFJJTlQg KCIqIik7CisgICAgICBpZiAodGFnICE9ICdQJykKKyAgICAgICAgUFJJTlQgKCJtdXQgIik7 CisgICAgICBlbHNlCisgICAgICAgIFBSSU5UICgiY29uc3QgIik7CisgICAgICBkZW1hbmds ZV90eXBlIChyZG0pOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnQSc6CisgICAgY2FzZSAn Uyc6CisgICAgICBQUklOVCAoIlsiKTsKKyAgICAgIGRlbWFuZ2xlX3R5cGUgKHJkbSk7Cisg ICAgICBpZiAodGFnID09ICdBJykKKyAgICAgICAgeworICAgICAgICAgIFBSSU5UICgiOyAi KTsKKyAgICAgICAgICBkZW1hbmdsZV9jb25zdCAocmRtKTsKKyAgICAgICAgfQorICAgICAg UFJJTlQgKCJdIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdUJzoKKyAgICAgIFBSSU5U ICgiKCIpOworICAgICAgZm9yIChpID0gMDsgIXJkbS0+ZXJyb3JlZCAmJiAhZWF0IChyZG0s ICdFJyk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAg ICAgIFBSSU5UICgiLCAiKTsKKyAgICAgICAgICBkZW1hbmdsZV90eXBlIChyZG0pOworICAg ICAgICB9CisgICAgICBpZiAoaSA9PSAxKQorICAgICAgICBQUklOVCAoIiwiKTsKKyAgICAg IFBSSU5UICgiKSIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnRic6CisgICAgICBvbGRf Ym91bmRfbGlmZXRpbWVfZGVwdGggPSByZG0tPmJvdW5kX2xpZmV0aW1lX2RlcHRoOworICAg ICAgZGVtYW5nbGVfYmluZGVyIChyZG0pOworCisgICAgICBpZiAoZWF0IChyZG0sICdVJykp CisgICAgICAgIFBSSU5UICgidW5zYWZlICIpOworCisgICAgICBpZiAoZWF0IChyZG0sICdL JykpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZWF0IChyZG0sICdDJykpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIGFiaS5hc2NpaSA9ICJDIjsKKyAgICAgICAgICAgICAg YWJpLmFzY2lpX2xlbiA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBhYmkgPSBwYXJzZV9pZGVudCAocmRtKTsKKyAg ICAgICAgICAgICAgaWYgKCFhYmkuYXNjaWkgfHwgYWJpLnB1bnljb2RlKQorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHJkbS0+ZXJyb3JlZCA9IDE7CisgICAgICAg ICAgICAgICAgICBnb3RvIHJlc3RvcmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorCisgICAgICAgICAgUFJJTlQgKCJleHRlcm4gXCIiKTsKKworICAgICAgICAgIC8q IElmIHRoZSBBQkkgaGFkIGFueSBgLWAsIHRoZXkgd2VyZSByZXBsYWNlZCB3aXRoIGBfYCwK KyAgICAgICAgICAgICBzbyB0aGUgcGFydHMgYmV0d2VlbiBgX2AgaGF2ZSB0byBiZSByZS1q b2luZWQgd2l0aCBgLWAuICovCisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFiaS5hc2Np aV9sZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGFiaS5hc2Np aVtpXSA9PSAnXycpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcHJp bnRfc3RyIChyZG0sIGFiaS5hc2NpaSwgaSk7CisgICAgICAgICAgICAgICAgICBQUklOVCAo Ii0iKTsKKyAgICAgICAgICAgICAgICAgIGFiaS5hc2NpaSArPSBpICsgMTsKKyAgICAgICAg ICAgICAgICAgIGFiaS5hc2NpaV9sZW4gLT0gaSArIDE7CisgICAgICAgICAgICAgICAgICBp ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgcHJp bnRfc3RyIChyZG0sIGFiaS5hc2NpaSwgYWJpLmFzY2lpX2xlbik7CisKKyAgICAgICAgICBQ UklOVCAoIlwiICIpOworICAgICAgICB9CisKKyAgICAgIFBSSU5UICgiZm4oIik7CisgICAg ICBmb3IgKGkgPSAwOyAhcmRtLT5lcnJvcmVkICYmICFlYXQgKHJkbSwgJ0UnKTsgaSsrKQor ICAgICAgICB7CisgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgUFJJTlQgKCIs ICIpOworICAgICAgICAgIGRlbWFuZ2xlX3R5cGUgKHJkbSk7CisgICAgICAgIH0KKyAgICAg IFBSSU5UICgiKSIpOworCisgICAgICBpZiAoZWF0IChyZG0sICd1JykpCisgICAgICAgIHsK KyAgICAgICAgICAvKiBTa2lwIHByaW50aW5nIHRoZSByZXR1cm4gdHlwZSBpZiBpdCdzICd1 JywgaS5lLiBgKClgLiAqLworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAg ICAgICAgICBQUklOVCAoIiAtPiAiKTsKKyAgICAgICAgICBkZW1hbmdsZV90eXBlIChyZG0p OworICAgICAgICB9CisKKyAgICAvKiBSZXN0b3JlIGBib3VuZF9saWZldGltZV9kZXB0aGAg dG8gb3V0c2lkZSB0aGUgYmluZGVyLiAqLworICAgIHJlc3RvcmU6CisgICAgICByZG0tPmJv dW5kX2xpZmV0aW1lX2RlcHRoID0gb2xkX2JvdW5kX2xpZmV0aW1lX2RlcHRoOworICAgICAg YnJlYWs7CisgICAgY2FzZSAnRCc6CisgICAgICBQUklOVCAoImR5biAiKTsKKworICAgICAg b2xkX2JvdW5kX2xpZmV0aW1lX2RlcHRoID0gcmRtLT5ib3VuZF9saWZldGltZV9kZXB0aDsK KyAgICAgIGRlbWFuZ2xlX2JpbmRlciAocmRtKTsKKworICAgICAgZm9yIChpID0gMDsgIXJk bS0+ZXJyb3JlZCAmJiAhZWF0IChyZG0sICdFJyk7IGkrKykKKyAgICAgICAgeworICAgICAg ICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIFBSSU5UICgiICsgIik7CisgICAgICAgICAg ZGVtYW5nbGVfZHluX3RyYWl0IChyZG0pOworICAgICAgICB9CisKKyAgICAgIC8qIFJlc3Rv cmUgYGJvdW5kX2xpZmV0aW1lX2RlcHRoYCB0byBvdXRzaWRlIHRoZSBiaW5kZXIuICovCisg ICAgICByZG0tPmJvdW5kX2xpZmV0aW1lX2RlcHRoID0gb2xkX2JvdW5kX2xpZmV0aW1lX2Rl cHRoOworCisgICAgICBpZiAoIWVhdCAocmRtLCAnTCcpKQorICAgICAgICB7CisgICAgICAg ICAgcmRtLT5lcnJvcmVkID0gMTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgIGx0ID0gcGFyc2VfaW50ZWdlcl82MiAocmRtKTsKKyAgICAgIGlmIChsdCkKKyAgICAg ICAgeworICAgICAgICAgIFBSSU5UICgiICsgIik7CisgICAgICAgICAgcHJpbnRfbGlmZXRp bWVfZnJvbV9pbmRleCAocmRtLCBsdCk7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAg IGNhc2UgJ0InOgorICAgICAgYmFja3JlZiA9IHBhcnNlX2ludGVnZXJfNjIgKHJkbSk7Cisg ICAgICBpZiAoIXJkbS0+c2tpcHBpbmdfcHJpbnRpbmcpCisgICAgICAgIHsKKyAgICAgICAg ICBvbGRfbmV4dCA9IHJkbS0+bmV4dDsKKyAgICAgICAgICByZG0tPm5leHQgPSBiYWNrcmVm OworICAgICAgICAgIGRlbWFuZ2xlX3R5cGUgKHJkbSk7CisgICAgICAgICAgcmRtLT5uZXh0 ID0gb2xkX25leHQ7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICAvKiBHbyBiYWNrIHRvIHRoZSB0YWcsIHNvIGBkZW1hbmdsZV9wYXRoYCBhbHNvIHNl ZXMgaXQuICovCisgICAgICByZG0tPm5leHQtLTsKKyAgICAgIGRlbWFuZ2xlX3BhdGggKHJk bSwgMCk7CisgICAgfQorfQorCisvKiBBIHRyYWl0IGluIGEgdHJhaXQgb2JqZWN0IG1heSBo YXZlIHNvbWUgImV4aXN0ZW50aWFsIHByb2plY3Rpb25zIgorICAgKGkuZS4gYXNzb2NpYXRl ZCB0eXBlIGJpbmRpbmdzKSBhZnRlciBpdCwgd2hpY2ggc2hvdWxkIGJlIHByaW50ZWQKKyAg IGluIHRoZSBgPC4uLj5gIG9mIHRoZSB0cmFpdCwgZS5nLiBgZHluIFRyYWl0PFQsIFUsIEFz c29jPVg+YC4KKyAgIFRvIHRoaXMgZW5kLCB0aGlzIG1ldGhvZCB3aWxsIGtlZXAgdGhlIGA8 Li4uPmAgb2YgYW4gJ0knIHBhdGgKKyAgIG9wZW4sIGJ5IG9taXR0aW5nIHRoZSBgPmAsIGFu ZCByZXR1cm4gYE9rKHRydWUpYCBpbiB0aGF0IGNhc2UuICovCitzdGF0aWMgaW50CitkZW1h bmdsZV9wYXRoX21heWJlX29wZW5fZ2VuZXJpY3MgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAq cmRtKQoreworICBpbnQgb3BlbjsKKyAgc2l6ZV90IGksIG9sZF9uZXh0LCBiYWNrcmVmOwor CisgIG9wZW4gPSAwOworCisgIGlmIChyZG0tPmVycm9yZWQpCisgICAgcmV0dXJuIG9wZW47 CisKKyAgaWYgKGVhdCAocmRtLCAnQicpKQorICAgIHsKKyAgICAgIGJhY2tyZWYgPSBwYXJz ZV9pbnRlZ2VyXzYyIChyZG0pOworICAgICAgaWYgKCFyZG0tPnNraXBwaW5nX3ByaW50aW5n KQorICAgICAgICB7CisgICAgICAgICAgb2xkX25leHQgPSByZG0tPm5leHQ7CisgICAgICAg ICAgcmRtLT5uZXh0ID0gYmFja3JlZjsKKyAgICAgICAgICBvcGVuID0gZGVtYW5nbGVfcGF0 aF9tYXliZV9vcGVuX2dlbmVyaWNzIChyZG0pOworICAgICAgICAgIHJkbS0+bmV4dCA9IG9s ZF9uZXh0OworICAgICAgICB9CisgICAgfQorICBlbHNlIGlmIChlYXQgKHJkbSwgJ0knKSkK KyAgICB7CisgICAgICBkZW1hbmdsZV9wYXRoIChyZG0sIDApOworICAgICAgUFJJTlQgKCI8 Iik7CisgICAgICBvcGVuID0gMTsKKyAgICAgIGZvciAoaSA9IDA7ICFyZG0tPmVycm9yZWQg JiYgIWVhdCAocmRtLCAnRScpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoaSA+ IDApCisgICAgICAgICAgICBQUklOVCAoIiwgIik7CisgICAgICAgICAgZGVtYW5nbGVfZ2Vu ZXJpY19hcmcgKHJkbSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICBkZW1hbmds ZV9wYXRoIChyZG0sIDApOworICByZXR1cm4gb3BlbjsKK30KKworc3RhdGljIHZvaWQKK2Rl bWFuZ2xlX2R5bl90cmFpdCAoc3RydWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0pCit7CisgIGlu dCBvcGVuOworICBzdHJ1Y3QgcnVzdF9tYW5nbGVkX2lkZW50IG5hbWU7CisKKyAgaWYgKHJk bS0+ZXJyb3JlZCkKKyAgICByZXR1cm47CisKKyAgb3BlbiA9IGRlbWFuZ2xlX3BhdGhfbWF5 YmVfb3Blbl9nZW5lcmljcyAocmRtKTsKKworICB3aGlsZSAoZWF0IChyZG0sICdwJykpCisg ICAgeworICAgICAgaWYgKCFvcGVuKQorICAgICAgICBQUklOVCAoIjwiKTsKKyAgICAgIGVs c2UKKyAgICAgICAgUFJJTlQgKCIsICIpOworICAgICAgb3BlbiA9IDE7CisKKyAgICAgIG5h bWUgPSBwYXJzZV9pZGVudCAocmRtKTsKKyAgICAgIHByaW50X2lkZW50IChyZG0sIG5hbWUp OworICAgICAgUFJJTlQgKCIgPSAiKTsKKyAgICAgIGRlbWFuZ2xlX3R5cGUgKHJkbSk7Cisg ICAgfQorCisgIGlmIChvcGVuKQorICAgIFBSSU5UICgiPiIpOworfQorCitzdGF0aWMgdm9p ZAorZGVtYW5nbGVfY29uc3QgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKQoreworICBj aGFyIHR5X3RhZzsKKyAgc2l6ZV90IG9sZF9uZXh0LCBiYWNrcmVmOworCisgIGlmIChyZG0t PmVycm9yZWQpCisgICAgcmV0dXJuOworCisgIGlmIChlYXQgKHJkbSwgJ0InKSkKKyAgICB7 CisgICAgICBiYWNrcmVmID0gcGFyc2VfaW50ZWdlcl82MiAocmRtKTsKKyAgICAgIGlmICgh cmRtLT5za2lwcGluZ19wcmludGluZykKKyAgICAgICAgeworICAgICAgICAgIG9sZF9uZXh0 ID0gcmRtLT5uZXh0OworICAgICAgICAgIHJkbS0+bmV4dCA9IGJhY2tyZWY7CisgICAgICAg ICAgZGVtYW5nbGVfY29uc3QgKHJkbSk7CisgICAgICAgICAgcmRtLT5uZXh0ID0gb2xkX25l eHQ7CisgICAgICAgIH0KKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgdHlfdGFnID0gbmV4 dCAocmRtKTsKKyAgc3dpdGNoICh0eV90YWcpCisgICAgeworICAgIC8qIFBsYWNlaG9sZGVy LiAqLworICAgIGNhc2UgJ3AnOgorICAgICAgUFJJTlQgKCJfIik7CisgICAgICByZXR1cm47 CisKKyAgICAvKiBVbnNpZ25lZCBpbnRlZ2VyIHR5cGVzLiAqLworICAgIGNhc2UgJ2gnOgor ICAgIGNhc2UgJ3QnOgorICAgIGNhc2UgJ20nOgorICAgIGNhc2UgJ3knOgorICAgIGNhc2Ug J28nOgorICAgIGNhc2UgJ2onOgorICAgICAgZGVtYW5nbGVfY29uc3RfdWludCAocmRtKTsK KyAgICAgIGJyZWFrOworCisgICAgLyogU2lnbmVkIGludGVnZXIgdHlwZXMuICovCisgICAg Y2FzZSAnYSc6CisgICAgY2FzZSAncyc6CisgICAgY2FzZSAnbCc6CisgICAgY2FzZSAneCc6 CisgICAgY2FzZSAnbic6CisgICAgY2FzZSAnaSc6CisgICAgICBkZW1hbmdsZV9jb25zdF9p bnQgKHJkbSk7CisgICAgICBicmVhazsKKworICAgIC8qIEJvb2xlYW4uICovCisgICAgY2Fz ZSAnYic6CisgICAgICBkZW1hbmdsZV9jb25zdF9ib29sIChyZG0pOworICAgICAgYnJlYWs7 CisKKyAgICAvKiBDaGFyYWN0ZXIuICovCisgICAgY2FzZSAnYyc6CisgICAgICBkZW1hbmds ZV9jb25zdF9jaGFyIChyZG0pOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg ICAgcmRtLT5lcnJvcmVkID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHJk bS0+ZXJyb3JlZCkKKyAgICByZXR1cm47CisKKyAgaWYgKHJkbS0+dmVyYm9zZSkKKyAgICB7 CisgICAgICBQUklOVCAoIjogIik7CisgICAgICBQUklOVCAoYmFzaWNfdHlwZSAodHlfdGFn KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZGVtYW5nbGVfY29uc3RfdWludCAoc3Ry dWN0IHJ1c3RfZGVtYW5nbGVyICpyZG0pCit7CisgIHNpemVfdCBoZXhfbGVuOworICB1aW50 NjRfdCB2YWx1ZTsKKworICBpZiAocmRtLT5lcnJvcmVkKQorICAgIHJldHVybjsKKworICBo ZXhfbGVuID0gcGFyc2VfaGV4X25pYmJsZXMgKHJkbSwgJnZhbHVlKTsKKworICBpZiAoaGV4 X2xlbiA+IDE2KQorICAgIHsKKyAgICAgIC8qIFByaW50IGFueXRoaW5nIHRoYXQgZG9lc24n dCBmaXQgaW4gYHVpbnQ2NF90YCB2ZXJiYXRpbS4gKi8KKyAgICAgIFBSSU5UICgiMHgiKTsK KyAgICAgIHByaW50X3N0ciAocmRtLCByZG0tPnN5bSArIChyZG0tPm5leHQgLSBoZXhfbGVu KSwgaGV4X2xlbik7CisgICAgfQorICBlbHNlIGlmIChoZXhfbGVuID4gMCkKKyAgICBwcmlu dF91aW50NjQgKHJkbSwgdmFsdWUpOworICBlbHNlCisgICAgcmRtLT5lcnJvcmVkID0gMTsK K30KKworc3RhdGljIHZvaWQKK2RlbWFuZ2xlX2NvbnN0X2ludCAoc3RydWN0IHJ1c3RfZGVt YW5nbGVyICpyZG0pCit7CisgIGlmIChlYXQgKHJkbSwgJ24nKSkKKyAgICBQUklOVCAoIi0i KTsKKyAgZGVtYW5nbGVfY29uc3RfdWludCAocmRtKTsKK30KKworc3RhdGljIHZvaWQKK2Rl bWFuZ2xlX2NvbnN0X2Jvb2wgKHN0cnVjdCBydXN0X2RlbWFuZ2xlciAqcmRtKQoreworICB1 aW50NjRfdCB2YWx1ZTsKKworICBpZiAocGFyc2VfaGV4X25pYmJsZXMgKHJkbSwgJnZhbHVl KSAhPSAxKQorICAgIHsKKyAgICAgIHJkbS0+ZXJyb3JlZCA9IDE7CisgICAgICByZXR1cm47 CisgICAgfQorCisgIGlmICh2YWx1ZSA9PSAwKQorICAgIFBSSU5UICgiZmFsc2UiKTsKKyAg ZWxzZSBpZiAodmFsdWUgPT0gMSkKKyAgICBQUklOVCAoInRydWUiKTsKKyAgZWxzZQorICAg IHJkbS0+ZXJyb3JlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitkZW1hbmdsZV9jb25zdF9j aGFyIChzdHJ1Y3QgcnVzdF9kZW1hbmdsZXIgKnJkbSkKK3sKKyAgc2l6ZV90IGhleF9sZW47 CisgIHVpbnQ2NF90IHZhbHVlOworCisgIGhleF9sZW4gPSBwYXJzZV9oZXhfbmliYmxlcyAo cmRtLCAmdmFsdWUpOworCisgIGlmIChoZXhfbGVuID09IDAgfHwgaGV4X2xlbiA+IDgpCisg ICAgeworICAgICAgcmRtLT5lcnJvcmVkID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisK KyAgLyogTWF0Y2ggUnVzdCdzIGNoYXJhY3RlciAiZGVidWciIG91dHB1dCBhcyBiZXN0IGFz IHdlIGNhbi4gKi8KKyAgUFJJTlQgKCInIik7CisgIGlmICh2YWx1ZSA9PSAnXHQnKQorICAg IFBSSU5UICgiXFx0Iik7CisgIGVsc2UgaWYgKHZhbHVlID09ICdccicpCisgICAgUFJJTlQg KCJcXHIiKTsKKyAgZWxzZSBpZiAodmFsdWUgPT0gJ1xuJykKKyAgICBQUklOVCAoIlxcbiIp OworICBlbHNlIGlmICh2YWx1ZSA+ICcgJyAmJiB2YWx1ZSA8ICd+JykKKyAgICAvKiBSdXN0 IGFsc28gY29uc2lkZXJzIG1hbnkgbm9uLUFTQ0lJIGNvZGVwb2ludHMgdG8gYmUgcHJpbnRh YmxlLCBidXQKKyAgICAgICB0aGF0IGxvZ2ljIGlzIG5vdCBlYXNpbHkgcG9ydGVkIHRvIEMu ICovCisgICAgcHJpbnRfc3RyIChyZG0sIChjaGFyICopICZ2YWx1ZSwgMSk7CisgIGVsc2UK KyAgICB7CisgICAgICBQUklOVCAoIlxcdXsiKTsKKyAgICAgIHByaW50X3VpbnQ2NF9oZXgg KHJkbSwgdmFsdWUpOworICAgICAgUFJJTlQgKCJ9Iik7CisgICAgfQorICBQUklOVCAoIici KTsKIH0KIAogLyogQSBsZWdhY3kgaGFzaCBpcyB0aGUgcHJlZml4ICJoIiBmb2xsb3dlZCBi eSAxNiBsb3dlcmNhc2UgaGV4IGRpZ2l0cy4KQEAgLTM0NSwxMSArMTMxMywxNSBAQCBydXN0 X2RlbWFuZ2xlX2NhbGxiYWNrIChjb25zdCBjaGFyICptYW5nbGVkLCBpbnQgb3B0aW9ucywK IAogICByZG0ubmV4dCA9IDA7CiAgIHJkbS5lcnJvcmVkID0gMDsKKyAgcmRtLnNraXBwaW5n X3ByaW50aW5nID0gMDsKICAgcmRtLnZlcmJvc2UgPSAob3B0aW9ucyAmIERNR0xfVkVSQk9T RSkgIT0gMDsKICAgcmRtLnZlcnNpb24gPSAwOworICByZG0uYm91bmRfbGlmZXRpbWVfZGVw dGggPSAwOwogCi0gIC8qIFJ1c3Qgc3ltYm9scyBhbHdheXMgc3RhcnQgd2l0aCBfWk4gKGxl Z2FjeSkuICovCi0gIGlmIChyZG0uc3ltWzBdID09ICdfJyAmJiByZG0uc3ltWzFdID09ICda JyAmJiByZG0uc3ltWzJdID09ICdOJykKKyAgLyogUnVzdCBzeW1ib2xzIGFsd2F5cyBzdGFy dCB3aXRoIF9SICh2MCkgb3IgX1pOIChsZWdhY3kpLiAqLworICBpZiAocmRtLnN5bVswXSA9 PSAnXycgJiYgcmRtLnN5bVsxXSA9PSAnUicpCisgICAgcmRtLnN5bSArPSAyOworICBlbHNl IGlmIChyZG0uc3ltWzBdID09ICdfJyAmJiByZG0uc3ltWzFdID09ICdaJyAmJiByZG0uc3lt WzJdID09ICdOJykKICAgICB7CiAgICAgICByZG0uc3ltICs9IDM7CiAgICAgICByZG0udmVy c2lvbiA9IC0xOwpAQCAtMzU3LDcgKzEzMjksMTEgQEAgcnVzdF9kZW1hbmdsZV9jYWxsYmFj ayAoY29uc3QgY2hhciAqbWFuZ2xlZCwgaW50IG9wdGlvbnMsCiAgIGVsc2UKICAgICByZXR1 cm4gMDsKIAotICAvKiBMZWdhY3kgUnVzdCBzeW1ib2xzIHVzZSBvbmx5IFtfMC05YS16QS1a LjokXSBjaGFyYWN0ZXJzLiAqLworICAvKiBQYXRocyAodjApIGFsd2F5cyBzdGFydCB3aXRo IHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiAqLworICBpZiAocmRtLnZlcnNpb24gIT0gLTEgJiYg IUlTVVBQRVIgKHJkbS5zeW1bMF0pKQorICAgIHJldHVybiAwOworCisgIC8qIFJ1c3Qgc3lt Ym9scyAodjApIHVzZSBvbmx5IFtfMC05YS16QS1aXSBjaGFyYWN0ZXJzLiAqLwogICBmb3Ig KHAgPSByZG0uc3ltOyAqcDsgcCsrKQogICAgIHsKICAgICAgIHJkbS5zeW1fbGVuKys7CkBA IC0zNjUsNiArMTM0MSw3IEBAIHJ1c3RfZGVtYW5nbGVfY2FsbGJhY2sgKGNvbnN0IGNoYXIg Km1hbmdsZWQsIGludCBvcHRpb25zLAogICAgICAgaWYgKCpwID09ICdfJyB8fCBJU0FMTlVN ICgqcCkpCiAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAvKiBMZWdhY3kgUnVzdCBzeW1i b2xzIGNhbiBhbHNvIGNvbnRhaW4gWy46JF0gY2hhcmFjdGVycy4gKi8KICAgICAgIGlmIChy ZG0udmVyc2lvbiA9PSAtMSAmJiAoKnAgPT0gJyQnIHx8ICpwID09ICcuJyB8fCAqcCA9PSAn OicpKQogICAgICAgICBjb250aW51ZTsKIApAQCAtNDE4LDcgKzEzOTUsMTkgQEAgcnVzdF9k ZW1hbmdsZV9jYWxsYmFjayAoY29uc3QgY2hhciAqbWFuZ2xlZCwgaW50IG9wdGlvbnMsCiAg ICAgICB3aGlsZSAocmRtLm5leHQgPCByZG0uc3ltX2xlbik7CiAgICAgfQogICBlbHNlCi0g ICAgcmV0dXJuIDA7CisgICAgeworICAgICAgZGVtYW5nbGVfcGF0aCAoJnJkbSwgMSk7CisK KyAgICAgIC8qIFNraXAgaW5zdGFudGlhdGluZyBjcmF0ZS4gKi8KKyAgICAgIGlmICghcmRt LmVycm9yZWQgJiYgcmRtLm5leHQgPCByZG0uc3ltX2xlbikKKyAgICAgICAgeworICAgICAg ICAgIHJkbS5za2lwcGluZ19wcmludGluZyA9IDE7CisgICAgICAgICAgZGVtYW5nbGVfcGF0 aCAoJnJkbSwgMCk7CisgICAgICAgIH0KKworICAgICAgLyogSXQncyBhbiBlcnJvciB0byBu b3QgcmVhY2ggdGhlIGVuZC4gKi8KKyAgICAgIHJkbS5lcnJvcmVkIHw9IHJkbS5uZXh0ICE9 IHJkbS5zeW1fbGVuOworICAgIH0KIAogICByZXR1cm4gIXJkbS5lcnJvcmVkOwogfQpkaWZm IC0tZ2l0IGEvbGliaWJlcnR5L3Rlc3RzdWl0ZS9ydXN0LWRlbWFuZ2xlLWV4cGVjdGVkIGIv bGliaWJlcnR5L3Rlc3RzdWl0ZS9ydXN0LWRlbWFuZ2xlLWV4cGVjdGVkCmluZGV4IDc0Nzc0 Nzk0NzM2Li4xMzUxYjlhMmJkNCAxMDA2NDQKLS0tIGEvbGliaWJlcnR5L3Rlc3RzdWl0ZS9y dXN0LWRlbWFuZ2xlLWV4cGVjdGVkCisrKyBiL2xpYmliZXJ0eS90ZXN0c3VpdGUvcnVzdC1k ZW1hbmdsZS1leHBlY3RlZApAQCAtMTYzLDMgKzE2Myw1MSBAQCBfWk42M18kTFQkY29yZS4u cHRyLi5VbmlxdWUkTFQkVCRHVCQkdTIwJGFzJHUyMCRjb3JlLi5vcHMuLkRlcmVmJEdUJDVk ZXJlZjE3aDE5ZgogLS1mb3JtYXQ9cnVzdAogX1pOMTFpc3N1ZV82MDkyNTNmb28zN0ZvbyRM VCRpc3N1ZV82MDkyNS4ubGx2JHU2ZCQuLkZvbyRHVCQzZm9vMTdoMDU5YTk5MWEwMDQ1MzZh ZEUKIGlzc3VlXzYwOTI1Ojpmb286OkZvbzxpc3N1ZV82MDkyNTo6bGx2bTo6Rm9vPjo6Zm9v CisjCistLWZvcm1hdD1ydXN0CitfWk40Y29yZTNvcHM4ZnVuY3Rpb242Rm5PbmNlNDBjYWxs X29uY2UkdTdiJCR1N2IkdnRhYmxlLnNoaW0kdTdkJCR1N2QkMTdoMDAwYjFhZDZjNGYzMGJk NkUKK2NvcmU6Om9wczo6ZnVuY3Rpb246OkZuT25jZTo6Y2FsbF9vbmNle3t2dGFibGUuc2hp bX19CisjIFVURjggaWRlbnRzLgorLS1mb3JtYXQ9cnVzdAorX1JOcUNzNGZxSTJQMnJBMDRf MTF1dGY4X2lkZW50c3UzMF9fX183aGthY2tmZWNlYTFjYmRhdGhmZGg5aGxxNnkKK3V0Zjhf aWRlbnRzOjrhg6Hhg5Dhg63hg5vhg5Thg5rhg5Dhg5Nf4YOS4YOU4YOb4YOg4YOY4YOU4YOa 4YOYX+GDoeGDkOGDk+GDmOGDmuGDmAorIyBDcmF0ZSB3aXRoIGxlYWRpbmcgZGlnaXQuCist LWZvcm1hdD1ydXN0CitfUk52QzZfMTIzZm9vM2JhcgorMTIzZm9vOjpiYXIKKyMKKy0tZm9y bWF0PXJ1c3QKK19STUNzNGZxSTJQMnJBMDRfMTNjb25zdF9nZW5lcmljSU50QjBfOFVuc2ln bmVkS2hiX0UKKzxjb25zdF9nZW5lcmljOjpVbnNpZ25lZDwxMT4+CisjCistLWZvcm1hdD1y dXN0CitfUk1DczRmcUkyUDJyQTA0XzEzY29uc3RfZ2VuZXJpY0lOdEIwXzZTaWduZWRLczk4 X0UKKzxjb25zdF9nZW5lcmljOjpTaWduZWQ8MTUyPj4KKyMKKy0tZm9ybWF0PXJ1c3QKK19S TUNzNGZxSTJQMnJBMDRfMTNjb25zdF9nZW5lcmljSU50QjBfNlNpZ25lZEthbmJfRQorPGNv bnN0X2dlbmVyaWM6OlNpZ25lZDwtMTE+PgorIworLS1mb3JtYXQ9cnVzdAorX1JNQ3M0ZnFJ MlAyckEwNF8xM2NvbnN0X2dlbmVyaWNJTnRCMF80Qm9vbEtiMF9FCis8Y29uc3RfZ2VuZXJp Yzo6Qm9vbDxmYWxzZT4+CisjCistLWZvcm1hdD1ydXN0CitfUk1DczRmcUkyUDJyQTA0XzEz Y29uc3RfZ2VuZXJpY0lOdEIwXzRCb29sS2IxX0UKKzxjb25zdF9nZW5lcmljOjpCb29sPHRy dWU+PgorIworLS1mb3JtYXQ9cnVzdAorX1JNQ3M0ZnFJMlAyckEwNF8xM2NvbnN0X2dlbmVy aWNJTnRCMF80Q2hhcktjNzZfRQorPGNvbnN0X2dlbmVyaWM6OkNoYXI8J3YnPj4KKyMKKy0t Zm9ybWF0PXJ1c3QKK19STUNzNGZxSTJQMnJBMDRfMTNjb25zdF9nZW5lcmljSU50QjBfNENo YXJLY2FfRQorPGNvbnN0X2dlbmVyaWM6OkNoYXI8J1xuJz4+CisjCistLWZvcm1hdD1ydXN0 CitfUk1DczRmcUkyUDJyQTA0XzEzY29uc3RfZ2VuZXJpY0lOdEIwXzRDaGFyS2MyMjAyX0UK Kzxjb25zdF9nZW5lcmljOjpDaGFyPCdcdXsyMjAyfSc+PgorIworLS1mb3JtYXQ9cnVzdAor X1JOdk52TUNzNGZxSTJQMnJBMDRfMTNjb25zdF9nZW5lcmljSU50QjRfM0Zvb0twRTNmb28z Rk9PCis8Y29uc3RfZ2VuZXJpYzo6Rm9vPF8+Pjo6Zm9vOjpGT08K --------------4EA2397BE7B6A6BF43105F25--