From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 78788 invoked by alias); 9 Feb 2020 18:57:04 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 78779 invoked by uid 89); 9 Feb 2020 18:57:04 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-0.4 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy=Williams, williams, internal-error, internalerror X-HELO: nhostc02.canaca.com Received: from nhostc02.canaca.com (HELO nhostc02.canaca.com) (66.49.205.157) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 09 Feb 2020 18:57:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=myosotissp.com; s=default; h=Content-Type:Cc:To:Subject:Message-ID:Date: From:In-Reply-To:References:MIME-Version:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=obE+II8WgQVistk+5LeG71hfvw3qfDBN5UUSefxpMTU=; b=ar/my8DNzanhHeZIN6TV3LTWI WyNFhlCKmZzmxiaqUSK4Loo0gy6AYOIRo6tjQDSOO/6d0C4Te8Xr7Z7jaDijZTDLSVcJfdUVMvVq1 g+RvmCsaaVzvmIKgDJEbO9+/GmX2HsqjcZWFUFS6xmnptTE4dzkfNWS43CM5zUFAS+9Yyla51hbFx wiuWuZU08bDP/kdRFMy4gOz1hcZEhcpq/hCj7P4QE6lVTeh/jwD4R/iEYYbr3/ciDXgk0IBJWZW6F ZEWv6rVMAqBBvEx7loLdemRxASUKIa5fF3uHSMhBDf4xibzRt1+KDN8LK8OBsJJEYFhia4X3KymKy ISDi0lapw==; Received: from mail-ed1-f47.google.com ([209.85.208.47]:42845) by nhostc02.canaca.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92) (envelope-from ) id 1j0rlM-0001oC-GW for gdb-patches@sourceware.org; Sun, 09 Feb 2020 13:57:00 -0500 Received: by mail-ed1-f47.google.com with SMTP id e10so6070765edv.9 for ; Sun, 09 Feb 2020 10:57:00 -0800 (PST) MIME-Version: 1.0 References: <87r1z6w1l5.fsf@tromey.com> In-Reply-To: From: Mark Williams Date: Sun, 09 Feb 2020 18:57:00 -0000 Message-ID: Subject: Re: [PATCH] Fix assertion fi->level To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary="000000000000008fda059e2930d1" X-SW-Source: 2020-02/txt/msg00261.txt.bz2 --000000000000008fda059e2930d1 Content-Type: text/plain; charset="UTF-8" Content-length: 3274 The problem seems to be that jit_frame_prev_register returns a value with lval == not_lval, so the value returned from get_frame_register_value ends up with lval == not_lval, rather than lval == lval_register. This is hidden by value_of_register_lazy/value_fetch_lazy, because value_of_register_lazy creates a value like this: reg_val = allocate_value_lazy (register_type (gdbarch, regnum)); VALUE_LVAL (reg_val) = lval_register; VALUE_REGNUM (reg_val) = regnum; and then value_fetch_lazy gets a new_val with lval==not_lval, but then copies its contents into the reg_val created by value_of_register_lazy without overwriting the lval field. This seems wrong... if an unwinder says its returning a value thats not an lval, it doesn't seem correct for value_fetch_lazy to turn it into one. On the other hand, it does seem to work as an lval, so the bug is probably in jit_frame_prev_register? I'm just not familiar enough with the code to know what the correct fix is... In any case, the simple fix for my patch is to call value_of_register_lazy/value_fetch_lazy when there *is* a valid frame_id, and get_frame_register_value when there isn't. That way it only changes the behavior when it was going to crash anyway. I'll go with that unless someone has a better suggestion... New patch attached. On Fri, Feb 7, 2020 at 1:08 PM Mark Williams wrote: > > Thanks, I'll take a look. > > On Fri, Feb 7, 2020 at 1:05 PM Tom Tromey wrote: > > > > >>>>> "Mark" == Mark Williams writes: > > > > Mark> Apparently I should ping the thread after 2 weeks with no response... > > > > Yeah. > > > > Mark> Note that python unwinders are completely unusable in gdb-8.1 and > > Mark> later without this fix... > > > > Thanks. > > > > I read the patch, and I think it looks reasonable. However, since we > > were considering it for gdb 9 in another thread, I applied it and ran > > the test suite. It caused a few regressions, like: > > > > gdb.base/jit-reader.exp: with jit-reader: after mangling: caller frame: cannot a > > ssign to register: PASS => FAIL > > gdb.mi/mi-reg-undefined.exp: register values, format r, frame 1: PASS => FAIL > > gdb.mi/mi-reg-undefined.exp: register values, format r, frame 2: PASS => FAIL > > gdb.mi/mi-reg-undefined.exp: register values, format x, frame 1: PASS => FAIL > > gdb.mi/mi-reg-undefined.exp: register values, format x, frame 2: PASS => FAIL > > > > > > Here's some stuff from gdb.log: > > > > me: print pseudo register > > print $rbp = -1 > > Left operand of assignment is not an lvalue. > > (gdb) FAIL: gdb.base/jit-reader.exp: with jit-reader: after mangling: caller frame: cannot assign to register > > > > > > 221-data-list-register-values --thread 1 --frame 1 x 0 1 2 8 9 > > ~"../../binutils-gdb/gdb/value.c:389: internal-error: int value_bits_any_optimiz > > ed_out(const value*, int, int): Assertion `!value->lazy' failed.\nA problem inte > > rnal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit th > > is debugging session? (y or n) " > > FAIL: gdb.mi/mi-reg-undefined.exp: register values, format x, frame 1 (timeout) > > > > > > I didn't investigate any further but there's still some issue to be > > worked out. > > > > thanks, > > Tom --000000000000008fda059e2930d1 Content-Type: application/octet-stream; name="0001-gdb-Fix-Assertion-fi-level-0-failed.patch" Content-Disposition: attachment; filename="0001-gdb-Fix-Assertion-fi-level-0-failed.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k6fe19kp0 Content-length: 7833 RnJvbSAyNjA0YzE1Njk3ZWNiMjVlMzlmYTdiMDQ5MTkzYmZkYzI2M2M0MGNj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBtd2lsbGlhbXMgPG13 aWxsaWFtc0BmYi5jb20+CkRhdGU6IFN1biwgOSBGZWIgMjAyMCAxMDoxMjoy NCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGdkYjogRml4ICJBc3NlcnRpb24g J2ZpLT5sZXZlbCA9PSAwJyBmYWlsZWQuIgoKQXQgdGhlIHBvaW50IHRoYXQg cHl0aG9uIHVud2luZGVycyBhcmUgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0 aGV5CndhbnQgdG8gaGFuZGxlIGEgZnJhbWUsIGNhbGxpbmcgdmFsdWVfb2Zf cmVnaXN0ZXJfbGF6eSBjYW4gZmFpbCBpbgp0aGUgY2FsbGVyIG9mIGFuIGlu bGluZWQgZnVuY3Rpb24sIGJlY2F1c2UgdGhlIGlubGluZWQgZnVuY3Rpb24n cwpmcmFtZSBpZCBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkLgoKSG93ZXZl ciwgdGhlcmUncyBubyBuZWVkIHRvIGNhbGwgdmFsdWVfb2ZfcmVnaXN0ZXJf bGF6eSBiZWNhdXNlIHRoZQp2ZXJ5IG5leHQgc3RhdGVtZW50IGlzIHZhbHVl X2ZldGNoX2xhenksIGFuZCB0aGUgdHdvIGNhbGxzIHRvZ2V0aGVyCmFyZSBp ZGVudGljYWwgdG8gYSBjYWxsIHRvIGdldF9mcmFtZV9yZWdpc3Rlcl92YWx1 ZSwgZXhjZXB0IHRoYXQgdGhlCmxhdHRlciBkb2Vzbid0IG5lZWQgYSBmcmFt ZSBpZC4KCkFuIGV4aXN0aW5nIHRlc3QgY2FzZSBhbHJlYWR5IHN0b3BwZWQg aW4gYW4gaW5saW5lZCBmdW5jdGlvbiBhbmQKaW5zcGVjdGVkIHZhcmlvdXMg ZnJhbWVzLCBzbyBqdXN0IGFkZCBhIGR1bW15IHVud2luZGVyIHRvIGl0LiBU aGUKcHJlc2VuY2Ugb2YgdGhlIGR1bW15IHVud2luZGVyIHNob3VsZCBub3Qg YWZmZWN0IHRoZSBleGlzdGluZyB0ZXN0LApiZWNhdXNlIGFsbCBpdCBkb2Vz IGlzIHRlbGwgZ2RiIHRoYXQgaXQgZG9lcyBub3Qgd2FudCB0byBoYW5kbGUK dGhlIGN1cnJlbnQgZnJhbWUuIEJ1dCB3aXRob3V0IHRoaXMgZml4LCBnZGIg Y3Jhc2hlcywgYnJlYWtpbmcgdGhlCnRlc3QuCgpnZGIvQ2hhbmdlbG9nCjIw MjAtMDItMDkgTWFyayBXaWxsaWFtcyA8bWFya0BteW9zb3Rpc3NwLmNvbT4K CglQUiBnZGIvMjI3NDgKCSogZmluZHZhci5jIGNhbGwgZ2V0X2ZyYW1lX3Jl Z2lzdGVyX3ZhbHVlIGluc3RlYWQgb2YKCXZhbHVlX29mX3JlZ2lzdGVyX2xh enkvdmFsdWVfZmV0Y2hfbGF6eSB3aGVuIHRoZXJlIGlzCglubyBmcmFtZSBp ZC4KCSogZnJhbWUuYyBhZGQgaGFzX2ZyYW1lX2lkIGltcGxlbWVudGF0aW9u CiAgICAgICAgKiBmcmFtZS5oIGFkZCBoYXNfZnJhbWVfaWQgZGVjbGFyYXRp b24KCmdkYi90ZXN0c3VpdGUvQ2hhbmdlbG9nCjIwMjAtMDItMDkgTWFyayBX aWxsaWFtcyA8bWFya0BteW9zb3Rpc3NwLmNvbT4KCglQUiBnZGIvMjI3NDgK CSogZ2RiLnB5dGhvbi9weS1mcmFtZS1pbmxpbmUuZXhwIG1vZGlmaWVkIHRv IGxvYWQKCXRoZSBuZXcgZHVtbXkgdW53aW5kZXIgdG8gZXhwb3NlIHRoZSBi dWcKCSogZ2RiLnB5dGhvbi9weS1mcmFtZS1pbmxpbmUucHkgbmV3IGZpbGUs IGltcGxlbWVudGluZwoJYSBkdW1teSB1bndpbmRlci4KLS0tCiBnZGIvZmlu ZHZhci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsr KysrKy0tCiBnZGIvZnJhbWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICA2ICsrKysrCiBnZGIvZnJhbWUuaCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAxICsKIGdkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1mcmFtZS1pbmxpbmUuZXhwIHwgIDQgKysrKwogZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lLWlubGluZS5weSAgfCAyNCAr KysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNl cnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1mcmFtZS1pbmxpbmUucHkK CmRpZmYgLS1naXQgYS9nZGIvZmluZHZhci5jIGIvZ2RiL2ZpbmR2YXIuYwpp bmRleCBhODM2YzYzZGM1Li4xMmQ0ZTAzNjFjIDEwMDY0NAotLS0gYS9nZGIv ZmluZHZhci5jCisrKyBiL2dkYi9maW5kdmFyLmMKQEAgLTI2NCwxNCArMjY0 LDE5IEBAIHZhbHVlX29mX3JlZ2lzdGVyIChpbnQgcmVnbnVtLCBzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZnJhbWUpCiB7CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1lKTsKICAgc3RydWN0IHZhbHVl ICpyZWdfdmFsOworICBzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZTsK IAogICAvKiBVc2VyIHJlZ2lzdGVycyBsaWUgY29tcGxldGVseSBvdXRzaWRl IG9mIHRoZSByYW5nZSBvZiBub3JtYWwKICAgICAgcmVnaXN0ZXJzLiAgQ2F0 Y2ggdGhlbSBlYXJseSBzbyB0aGF0IHRoZSB0YXJnZXQgbmV2ZXIgc2VlcyB0 aGVtLiAgKi8KICAgaWYgKHJlZ251bSA+PSBnZGJhcmNoX251bV9jb29rZWRf cmVncyAoZ2RiYXJjaCkpCiAgICAgcmV0dXJuIHZhbHVlX29mX3VzZXJfcmVn IChyZWdudW0sIGZyYW1lKTsKIAotICByZWdfdmFsID0gdmFsdWVfb2ZfcmVn aXN0ZXJfbGF6eSAoZnJhbWUsIHJlZ251bSk7Ci0gIHZhbHVlX2ZldGNoX2xh enkgKHJlZ192YWwpOworICBuZXh0X2ZyYW1lID0gZ2V0X25leHRfZnJhbWVf c2VudGluZWxfb2theSAoZnJhbWUpOworICBpZiAoaGFzX2ZyYW1lX2lkKG5l eHRfZnJhbWUpKSB7CisgICAgcmVnX3ZhbCA9IHZhbHVlX29mX3JlZ2lzdGVy X2xhenkoZnJhbWUsIHJlZ251bSk7CisgICAgdmFsdWVfZmV0Y2hfbGF6eShy ZWdfdmFsKTsKKyAgfSBlbHNlCisgICAgcmVnX3ZhbCA9IGdldF9mcmFtZV9y ZWdpc3Rlcl92YWx1ZSAoZnJhbWUsIHJlZ251bSk7CiAgIHJldHVybiByZWdf dmFsOwogfQogCmRpZmYgLS1naXQgYS9nZGIvZnJhbWUuYyBiL2dkYi9mcmFt ZS5jCmluZGV4IGQ3NGQxZDVjN2MuLjM0Nzg5ZTU2Y2MgMTAwNjQ0Ci0tLSBh L2dkYi9mcmFtZS5jCisrKyBiL2dkYi9mcmFtZS5jCkBAIC01NTgsNiArNTU4 LDEyIEBAIGNvbXB1dGVfZnJhbWVfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICpm aSkKICAgICB9CiB9CiAKK2Jvb2wKK2hhc19mcmFtZV9pZCAoc3RydWN0IGZy YW1lX2luZm8gKmZpKQoreworICByZXR1cm4gZmktPnRoaXNfaWQucDsKK30K KwogLyogUmV0dXJuIGEgZnJhbWUgdW5pcSBJRCB0aGF0IGNhbiBiZSB1c2Vk IHRvLCBsYXRlciwgcmUtZmluZCB0aGUKICAgIGZyYW1lLiAgKi8KIApkaWZm IC0tZ2l0IGEvZ2RiL2ZyYW1lLmggYi9nZGIvZnJhbWUuaAppbmRleCBjZmMx NTAyMmVkLi4wYTRkNzQ4ZGY3IDEwMDY0NAotLS0gYS9nZGIvZnJhbWUuaAor KysgYi9nZGIvZnJhbWUuaApAQCAtNDc4LDYgKzQ3OCw3IEBAIGV4dGVybiBD T1JFX0FERFIgZ2V0X2ZyYW1lX2Jhc2UgKHN0cnVjdCBmcmFtZV9pbmZvICop OwogICAgaWYgKGZyYW1lX2lkX2VxIChpZCwgZ2V0X2ZyYW1lX2lkIChyKSkp CiAKICAgIGluc3RlYWQsIHNpbmNlIHRoYXQgYXZvaWRzIHRoZSBidWcuICAq LworZXh0ZXJuIGJvb2wgICAgICAgICAgICBoYXNfZnJhbWVfaWQgKHN0cnVj dCBmcmFtZV9pbmZvICpmaSk7CiBleHRlcm4gc3RydWN0IGZyYW1lX2lkIGdl dF9mcmFtZV9pZCAoc3RydWN0IGZyYW1lX2luZm8gKmZpKTsKIGV4dGVybiBz dHJ1Y3QgZnJhbWVfaWQgZ2V0X3N0YWNrX2ZyYW1lX2lkIChzdHJ1Y3QgZnJh bWVfaW5mbyAqZmkpOwogZXh0ZXJuIHN0cnVjdCBmcmFtZV9pZCBmcmFtZV91 bndpbmRfY2FsbGVyX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFt ZSk7CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt ZnJhbWUtaW5saW5lLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1mcmFtZS1pbmxpbmUuZXhwCmluZGV4IDcxYmZmZDM3NWQuLjQ4ODM0NmU2 NTEgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1m cmFtZS1pbmxpbmUuZXhwCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1mcmFtZS1pbmxpbmUuZXhwCkBAIC0yNCw2ICsyNCwxMCBAQCBpZiB7 IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICJmYWlsZWQgdG8gcHJlcGFyZSIgJHt0 ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7CiAjIFNraXAgYWxsIHRlc3RzIGlm IFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCiBpZiB7IFtza2lw X3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KIAorc2V0IHJlbW90ZV9w eXRob25fZmlsZSBbZ2RiX3JlbW90ZV9kb3dubG9hZCBob3N0IFwKKwkJCSAg ICAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQorZ2RiX3Rl c3Rfbm9fb3V0cHV0ICJzb3VyY2UgJHtyZW1vdGVfcHl0aG9uX2ZpbGV9IiAi bG9hZCBweXRob24gZmlsZSIKKwogaWYgIVtydW50byBtYWluXSB0aGVuIHsK ICAgICBmYWlsICJjYW4ndCBydW4gdG8gZnVuY3Rpb24gZiIKICAgICByZXR1 cm4gMApkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZyYW1lLWlubGluZS5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1mcmFtZS1pbmxpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uNTZiZTZkMzUyMwotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1mcmFtZS1pbmxpbmUucHkKQEAg LTAsMCArMSwyNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMg VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuCitmcm9t IGdkYi51bndpbmRlciBpbXBvcnQgVW53aW5kZXIsIHJlZ2lzdGVyX3Vud2lu ZGVyCitjbGFzcyBEdW1teVVud2luZGVyKFVud2luZGVyKToKKyAgICBkZWYg X19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKER1bW15VW53aW5kZXIs IHNlbGYpLl9faW5pdF9fKCdkdW1teV91bndpbmRlcicpCisgICAgZGVmIF9f Y2FsbF9fKHNlbGYsIHBlbmRpbmdfZnJhbWUpOgorICAgICAgICBmcCA9IHBl bmRpbmdfZnJhbWUucmVhZF9yZWdpc3RlcigncGMnKQorICAgICAgICByZXR1 cm4gTm9uZQorcmVnaXN0ZXJfdW53aW5kZXIoTm9uZSwgRHVtbXlVbndpbmRl cigpKQotLSAKMi4xNy4xCgo= --000000000000008fda059e2930d1--