From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Pip Cet Newsgroups: gmane.emacs.bugs Subject: bug#36447: 27.0.50; New "Unknown keyword" errors Date: Sat, 6 Jul 2019 15:08:08 +0000 Message-ID: References: <875zon7x0a.fsf@web.de> <87d0iu54d1.fsf@gmail.com> <87k1d14djr.fsf@web.de> <87h884fo0i.fsf@web.de> <85d0is5ry1.fsf@gmail.com> <87lfxdgs1k.fsf@web.de> <83y31capj1.fsf@gnu.org> <83tvc0anwi.fsf@gnu.org> <83r274an61.fsf@gnu.org> <83pnmoacft.fsf@gnu.org> <83bly7acg9.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000785ab6058d049693" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="55560"; mail-complaints-to="usenet@blaine.gmane.org" Cc: michael_heerdegen@web.de, npostavs@gmail.com, 36447@debbugs.gnu.org, Stefan Monnier To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jul 06 17:09:17 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hjmJQ-000EHt-Qi for geb-bug-gnu-emacs@m.gmane.org; Sat, 06 Jul 2019 17:09:17 +0200 Original-Received: from localhost ([::1]:60008 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hjmJP-0001AW-Pb for geb-bug-gnu-emacs@m.gmane.org; Sat, 06 Jul 2019 11:09:15 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:51666) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hjmJG-0001AD-55 for bug-gnu-emacs@gnu.org; Sat, 06 Jul 2019 11:09:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hjmJC-00077J-Ag for bug-gnu-emacs@gnu.org; Sat, 06 Jul 2019 11:09:06 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:46932) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hjmJC-00076s-4a for bug-gnu-emacs@gnu.org; Sat, 06 Jul 2019 11:09:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hjmJB-0007hO-SH for bug-gnu-emacs@gnu.org; Sat, 06 Jul 2019 11:09:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Pip Cet Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 06 Jul 2019 15:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 36447 X-GNU-PR-Package: emacs Original-Received: via spool by 36447-submit@debbugs.gnu.org id=B36447.156242573529581 (code B ref 36447); Sat, 06 Jul 2019 15:09:01 +0000 Original-Received: (at 36447) by debbugs.gnu.org; 6 Jul 2019 15:08:55 +0000 Original-Received: from localhost ([127.0.0.1]:55753 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hjmJ4-0007h2-DD for submit@debbugs.gnu.org; Sat, 06 Jul 2019 11:08:55 -0400 Original-Received: from mail-oi1-f170.google.com ([209.85.167.170]:42467) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hjmJ3-0007gn-12 for 36447@debbugs.gnu.org; Sat, 06 Jul 2019 11:08:53 -0400 Original-Received: by mail-oi1-f170.google.com with SMTP id s184so9230804oie.9 for <36447@debbugs.gnu.org>; Sat, 06 Jul 2019 08:08:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=La61wYM4iHV/8JiBEA5u8WIeRDB6RITfs3wcUMSVnyM=; b=S0HCCEuGgaMk6a1QnaHvzt8CvPn+L2ui/lcOpvvHXUbDWF2Dr99ssKqVM66o97KajL MaRgQaP8+KCvUWbZ5F5RHnWYs53BJHVuotYJ4igMyRnZyV3xdT8y6ym/XzU8qUvSZxp9 F8akNmNm7sqUuJUYSaO3IwQOspRiF1ONh8fv+I8eeYrPRWCCtgswVL/6SS68wBRULi2p VP6gaQk5gqhfSG5np/vRia3VXpu+YHCI01BuNw7kYTb9Hx36ETfMPgl+DRSbvgWSy3Fm phK0sCF7lQ751b1o4hWR9nsl2Cyg9bI0bU2rzQ/SySwQkg7kbvRD9LZwS2Zu8P/wvgcP b+fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=La61wYM4iHV/8JiBEA5u8WIeRDB6RITfs3wcUMSVnyM=; b=ZgyitrDEuNvRMiUyMc5LtHcdbl6iZ40GNjCZy69AyN+MnExNDfJ7bwwVCKuGlZIPvV 7eY/tfK5d3ASVxGERLDkFX/k9L0EBqWSZfJdZ1borvkAWYdc+w7u8xskjBljmUPNLj6H Oym2/xNvg0zIlS5qAgIqsDLfRX5olPObU9dYpxFMHLRxeaxCRD9dUKEomot9ot+ZRGov A84M0ak/5dROBBt9Q1NmBpOtb0NaEBWVEJvBhX5P+Ml1eP8HUUdZZAoCVfuWELXvIobv MuctLBEj2jHsH3v8Xy/zQMgg1UMMyz45c+vX0BR35bt+yEnmTWlaxxtx/72OsZxG2IH0 UPyQ== X-Gm-Message-State: APjAAAVrXi2PaUfSQ37YnNq/vW9yHLKrfxwWC+lLtLugnodvjUR5otpx zMVSYnalOu0mnF1qMwJpBqYvpJXQDOlSafc7Rag= X-Google-Smtp-Source: APXvYqzqtj2vcgUA+Dt+/UuLWbc0FW+SWfwsyY9VQaCAYv8zBljACkmJLKzXj7d3QxQ6McVYrcw65r5bR7+lpeni6JQ= X-Received: by 2002:aca:4790:: with SMTP id u138mr5050499oia.44.1562425727398; Sat, 06 Jul 2019 08:08:47 -0700 (PDT) In-Reply-To: <83bly7acg9.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:162234 Archived-At: --000000000000785ab6058d049693 Content-Type: text/plain; charset="UTF-8" On Sat, Jul 6, 2019 at 6:45 AM Eli Zaretskii wrote: > > > Indeed. I'm attaching a proof of concept that we can simply freeze the > > > hash tables when dumping and thaw them when loading a dump, which > > > includes rehashing. Do you happen to know why it wasn't done that way? > > > > I'd guess it was to shorten the startup time by doing this rehashing lazily. > > The function pdumper-stats with show the time it took to load Emacs, > so the effect of this on the load time can be measured I'm measuring it directly, and it's more than I expected: about a millisecond, for 4,300 hash table entries. What we can't easily measure is how much the lazy rehashing code would slow us down anyway. For comparison, the entire time stored in pdumper-stats is 15 ms here. I don't think that's significant, because we'd probably end up rehashing most of the large hash tables anyway. We're saving some 250 KB of space in the pdmp image, which was previously used for redundant information. (I'm surprised it's that much, but I guess pdumper relocations are fairly large?) I'm attaching a revised patch, which uses vectors rather than consed lists for both the key_and_value vector, avoiding a copy in the common case where there is more than one hash table entry, and for the list of hash tables. It still contains debugging/timing code. charset.c currently assumes hash table entries will stay at the same index in Vcharset_hash_table. I think that works okay in practice, because we don't shrink or reorder hash tables, but it was still a bit of a nasty surprise. This concept appears to work: modify pdumper to special-case hash tables and freeze/thaw them properly. You probably shouldn't dump hash tables with complicated user-defined hash functions. Both PURE_P and pdumper_object_p fail to distinguish between tables that were pure or impure before being dumped. This also fixes the bug that (hash-table-count dumped-hash-table) will return a negative number if no previous access to the hash table has happened, but of course we can fix that directly... Of course, we're still modifying purecopied information. --000000000000785ab6058d049693 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Rehash-eagerly.patch" Content-Disposition: attachment; filename="0001-Rehash-eagerly.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jxrntw3d0 ZGlmZiAtLWdpdCBhL3NyYy9ieXRlY29kZS5jIGIvc3JjL2J5dGVjb2RlLmMKaW5kZXggMjlkZmY0 NGYwMC4uOWM3MjQyOWUwYyAxMDA2NDQKLS0tIGEvc3JjL2J5dGVjb2RlLmMKKysrIGIvc3JjL2J5 dGVjb2RlLmMKQEAgLTE0MDIsNyArMTQwMiw2IEBAICNkZWZpbmUgREVGSU5FKG5hbWUsIHZhbHVl KSBMQUJFTCAobmFtZSkgLAogICAgICAgICAgICAgTGlzcF9PYmplY3QgdjEgPSBQT1A7CiAgICAg ICAgICAgICBwdHJkaWZmX3QgaTsKICAgICAgICAgICAgIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUg KmggPSBYSEFTSF9UQUJMRSAoam1wX3RhYmxlKTsKLSAgICAgICAgICAgIGhhc2hfcmVoYXNoX2lm X25lZWRlZCAoaCk7CiAKICAgICAgICAgICAgIC8qIGgtPmNvdW50IGlzIGEgZmFzdGVyIGFwcHJv eGltYXRpb24gZm9yIEhBU0hfVEFCTEVfU0laRSAoaCkKICAgICAgICAgICAgICAgIGhlcmUuICov CmRpZmYgLS1naXQgYS9zcmMvY29tcG9zaXRlLmMgYi9zcmMvY29tcG9zaXRlLmMKaW5kZXggMTgz MDYyZGU0Ni4uNDlhMjg1Y2ZmMCAxMDA2NDQKLS0tIGEvc3JjL2NvbXBvc2l0ZS5jCisrKyBiL3Ny Yy9jb21wb3NpdGUuYwpAQCAtNjU0LDcgKzY1NCw2IEBAIGdzdHJpbmdfbG9va3VwX2NhY2hlIChM aXNwX09iamVjdCBoZWFkZXIpCiBjb21wb3NpdGlvbl9nc3RyaW5nX3B1dF9jYWNoZSAoTGlzcF9P YmplY3QgZ3N0cmluZywgcHRyZGlmZl90IGxlbikKIHsKICAgc3RydWN0IExpc3BfSGFzaF9UYWJs ZSAqaCA9IFhIQVNIX1RBQkxFIChnc3RyaW5nX2hhc2hfdGFibGUpOwotICBoYXNoX3JlaGFzaF9p Zl9uZWVkZWQgKGgpOwogICBMaXNwX09iamVjdCBoZWFkZXIgPSBMR1NUUklOR19IRUFERVIgKGdz dHJpbmcpOwogICBFTUFDU19VSU5UIGhhc2ggPSBoLT50ZXN0Lmhhc2hmbiAoJmgtPnRlc3QsIGhl YWRlcik7CiAgIGlmIChsZW4gPCAwKQpkaWZmIC0tZ2l0IGEvc3JjL2VtYWNzLmMgYi9zcmMvZW1h Y3MuYwppbmRleCAzMmJiNTdlMjcyLi5hNTk2OWE5NmEzIDEwMDY0NAotLS0gYS9zcmMvZW1hY3Mu YworKysgYi9zcmMvZW1hY3MuYwpAQCAtMTU3Nyw2ICsxNTc3LDcgQEAgbWFpbiAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogICBpZiAoIWluaXRpYWxpemVkKQogICAgIHsKICAgICAgIGluaXRfYWxs b2Nfb25jZSAoKTsKKyAgICAgIGluaXRfcGR1bXBlcl9vbmNlICgpOwogICAgICAgaW5pdF9vYmFy cmF5X29uY2UgKCk7CiAgICAgICBpbml0X2V2YWxfb25jZSAoKTsKICAgICAgIGluaXRfY2hhcnNl dF9vbmNlICgpOwpkaWZmIC0tZ2l0IGEvc3JjL2Zucy5jIGIvc3JjL2Zucy5jCmluZGV4IDJmYzAw MGE3ZjQuLjhiNjAzMTE2MTQgMTAwNjQ0Ci0tLSBhL3NyYy9mbnMuYworKysgYi9zcmMvZm5zLmMK QEAgLTQyMTgsNiArNDIxOCw5IEBAIG1heWJlX3Jlc2l6ZV9oYXNoX3RhYmxlIChzdHJ1Y3QgTGlz cF9IYXNoX1RhYmxlICpoKQogICAgIH0KIH0KIAorZXh0ZXJuIHZvaWQKK2hhc2hfdGFibGVfcmVo YXNoIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoKTsKKwogdm9pZAogaGFzaF90YWJsZV9yZWhh c2ggKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgpCiB7CkBAIC00MjI2LDEyICs0MjI5LDExIEBA IGhhc2hfdGFibGVfcmVoYXNoIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoKQogICAvKiBSZWNv bXB1dGUgdGhlIGFjdHVhbCBoYXNoIGNvZGVzIGZvciBlYWNoIGVudHJ5IGluIHRoZSB0YWJsZS4K ICAgICAgT3JkZXIgaXMgc3RpbGwgaW52YWxpZC4gICovCiAgIGZvciAocHRyZGlmZl90IGkgPSAw OyBpIDwgc2l6ZTsgKytpKQotICAgIGlmICghTklMUCAoSEFTSF9IQVNIIChoLCBpKSkpCi0gICAg ICB7Ci0gICAgICAgIExpc3BfT2JqZWN0IGtleSA9IEhBU0hfS0VZIChoLCBpKTsKLSAgICAgICAg RU1BQ1NfVUlOVCBoYXNoX2NvZGUgPSBoLT50ZXN0Lmhhc2hmbiAoJmgtPnRlc3QsIGtleSk7Ci0g ICAgICAgIHNldF9oYXNoX2hhc2hfc2xvdCAoaCwgaSwgbWFrZV9maXhudW0gKGhhc2hfY29kZSkp OwotICAgICAgfQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGtleSA9IEhBU0hfS0VZIChoLCBp KTsKKyAgICAgIEVNQUNTX1VJTlQgaGFzaF9jb2RlID0gaC0+dGVzdC5oYXNoZm4gKCZoLT50ZXN0 LCBrZXkpOworICAgICAgc2V0X2hhc2hfaGFzaF9zbG90IChoLCBpLCBtYWtlX2ZpeG51bSAoaGFz aF9jb2RlKSk7CisgICAgfQogCiAgIC8qIFJlc2V0IHRoZSBpbmRleCBzbyB0aGF0IGFueSBzbG90 IHdlIGRvbid0IGZpbGwgYmVsb3cgaXMgbWFya2VkCiAgICAgIGludmFsaWQuICAqLwpAQCAtNDI0 NywxMyArNDI0OSw2IEBAIGhhc2hfdGFibGVfcmVoYXNoIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxl ICpoKQogICAgICAgICBzZXRfaGFzaF9pbmRleF9zbG90IChoLCBzdGFydF9vZl9idWNrZXQsIGkp OwogICAgICAgICBlYXNzZXJ0IChIQVNIX05FWFQgKGgsIGkpICE9IGkpOyAvKiBTdG9wIGxvb3Bz LiAgKi8KICAgICAgIH0KLQotICAvKiBGaW5hbGx5LCBtYXJrIHRoZSBoYXNoIHRhYmxlIGFzIGhh dmluZyBhIHZhbGlkIGhhc2ggb3JkZXIuCi0gICAgIERvIHRoaXMgbGFzdCBzbyB0aGF0IGlmIHdl J3JlIGludGVycnVwdGVkLCB3ZSByZXRyeSBvbiBuZXh0Ci0gICAgIGFjY2Vzcy4gKi8KLSAgZWFz c2VydCAoaC0+Y291bnQgPCAwKTsKLSAgaC0+Y291bnQgPSAtaC0+Y291bnQ7Ci0gIGVhc3NlcnQg KCFoYXNoX3JlaGFzaF9uZWVkZWRfcCAoaCkpOwogfQogCiAvKiBMb29rdXAgS0VZIGluIGhhc2gg dGFibGUgSC4gIElmIEhBU0ggaXMgbm9uLW51bGwsIHJldHVybiBpbiAqSEFTSApAQCAtNDI2Niw4 ICs0MjYxLDYgQEAgaGFzaF9sb29rdXAgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIExpc3Bf T2JqZWN0IGtleSwgRU1BQ1NfVUlOVCAqaGFzaCkKICAgRU1BQ1NfVUlOVCBoYXNoX2NvZGU7CiAg IHB0cmRpZmZfdCBzdGFydF9vZl9idWNrZXQsIGk7CiAKLSAgaGFzaF9yZWhhc2hfaWZfbmVlZGVk IChoKTsKLQogICBoYXNoX2NvZGUgPSBoLT50ZXN0Lmhhc2hmbiAoJmgtPnRlc3QsIGtleSk7CiAg IGVhc3NlcnQgKChoYXNoX2NvZGUgJiB+SU5UTUFTSykgPT0gMCk7CiAgIGlmIChoYXNoKQpAQCAt NDI5Niw4ICs0Mjg5LDYgQEAgaGFzaF9wdXQgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIExp c3BfT2JqZWN0IGtleSwgTGlzcF9PYmplY3QgdmFsdWUsCiB7CiAgIHB0cmRpZmZfdCBzdGFydF9v Zl9idWNrZXQsIGk7CiAKLSAgaGFzaF9yZWhhc2hfaWZfbmVlZGVkIChoKTsKLQogICBlYXNzZXJ0 ICgoaGFzaCAmIH5JTlRNQVNLKSA9PSAwKTsKIAogICAvKiBJbmNyZW1lbnQgY291bnQgYWZ0ZXIg cmVzaXppbmcgYmVjYXVzZSByZXNpemluZyBtYXkgZmFpbC4gICovCkBAIC00MzMxLDggKzQzMjIs NiBAQCBoYXNoX3JlbW92ZV9mcm9tX3RhYmxlIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoLCBM aXNwX09iamVjdCBrZXkpCiAgIHB0cmRpZmZfdCBzdGFydF9vZl9idWNrZXQgPSBoYXNoX2NvZGUg JSBBU0laRSAoaC0+aW5kZXgpOwogICBwdHJkaWZmX3QgcHJldiA9IC0xOwogCi0gIGhhc2hfcmVo YXNoX2lmX25lZWRlZCAoaCk7Ci0KICAgZm9yIChwdHJkaWZmX3QgaSA9IEhBU0hfSU5ERVggKGgs IHN0YXJ0X29mX2J1Y2tldCk7CiAgICAgICAgMCA8PSBpOwogICAgICAgIGkgPSBIQVNIX05FWFQg KGgsIGkpKQpkaWZmIC0tZ2l0IGEvc3JjL2xpc3AuaCBiL3NyYy9saXNwLmgKaW5kZXggMWExZDhl ZTdlNC4uN2I3N2RkOTdmNSAxMDA2NDQKLS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMvbGlzcC5o CkBAIC0yMzcwLDIxICsyMzcwLDYgQEAgSEFTSF9UQUJMRV9TSVpFIChjb25zdCBzdHJ1Y3QgTGlz cF9IYXNoX1RhYmxlICpoKQogICByZXR1cm4gQVNJWkUgKGgtPm5leHQpOwogfQogCi12b2lkIGhh c2hfdGFibGVfcmVoYXNoIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoKTsKLQotSU5MSU5FIGJv b2wKLWhhc2hfcmVoYXNoX25lZWRlZF9wIChjb25zdCBzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpo KQotewotICByZXR1cm4gaC0+Y291bnQgPCAwOwotfQotCi1JTkxJTkUgdm9pZAotaGFzaF9yZWhh c2hfaWZfbmVlZGVkIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoKQotewotICBpZiAoaGFzaF9y ZWhhc2hfbmVlZGVkX3AgKGgpKQotICAgIGhhc2hfdGFibGVfcmVoYXNoIChoKTsKLX0KLQogLyog RGVmYXVsdCBzaXplIGZvciBoYXNoIHRhYmxlcyBpZiBub3Qgc3BlY2lmaWVkLiAgKi8KIAogZW51 bSBERUZBVUxUX0hBU0hfU0laRSB7IERFRkFVTFRfSEFTSF9TSVpFID0gNjUgfTsKZGlmZiAtLWdp dCBhL3NyYy9taW5pYnVmLmMgYi9zcmMvbWluaWJ1Zi5jCmluZGV4IGQ5MzJkYmU4ZTIuLmE3NzVk MDQzMzIgMTAwNjQ0Ci0tLSBhL3NyYy9taW5pYnVmLmMKKysrIGIvc3JjL21pbmlidWYuYwpAQCAt MTIwMyw5ICsxMjAzLDYgQEAgREVGVU4gKCJ0cnktY29tcGxldGlvbiIsIEZ0cnlfY29tcGxldGlv biwgU3RyeV9jb21wbGV0aW9uLCAyLCAzLCAwLAogICAgICAgYnVja2V0ID0gQVJFRiAoY29sbGVj dGlvbiwgaWR4KTsKICAgICB9CiAKLSAgaWYgKEhBU0hfVEFCTEVfUCAoY29sbGVjdGlvbikpCi0g ICAgaGFzaF9yZWhhc2hfaWZfbmVlZGVkIChYSEFTSF9UQUJMRSAoY29sbGVjdGlvbikpOwotCiAg IHdoaWxlICgxKQogICAgIHsKICAgICAgIC8qIEdldCB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBh bGlzdCwgb2JhcnJheSwgb3IgaGFzaC10YWJsZS4gICovCmRpZmYgLS1naXQgYS9zcmMvcGR1bXBl ci5jIGIvc3JjL3BkdW1wZXIuYwppbmRleCBjMDBmOGEwYWY1Li41ZjA2MzVhYTRkIDEwMDY0NAot LS0gYS9zcmMvcGR1bXBlci5jCisrKyBiL3NyYy9wZHVtcGVyLmMKQEAgLTM5Miw2ICszOTIsOCBA QCBkdW1wX2ZpbmdlcnByaW50IChjb25zdCBjaGFyICpsYWJlbCwgdW5zaWduZWQgY2hhciBjb25z dCAqeGZpbmdlcnByaW50KQogICAgICBUaGUgc3RhcnQgb2YgdGhlIGNvbGQgcmVnaW9uIGlzIGFs d2F5cyBhbGlnbmVkIG9uIGEgcGFnZQogICAgICBib3VuZGFyeS4gICovCiAgIGR1bXBfb2ZmIGNv bGRfc3RhcnQ7CisKKyAgZHVtcF9vZmYgaGFzaF9saXN0OwogfTsKIAogLyogRG91YmxlLWVuZGVk IHNpbmdseSBsaW5rZWQgbGlzdC4gICovCkBAIC01NDksNiArNTUxLDggQEAgZHVtcF9maW5nZXJw cmludCAoY29uc3QgY2hhciAqbGFiZWwsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnhmaW5nZXJwcmlu dCkKICAgICAgaGVhcCBvYmplY3RzLiAgKi8KICAgTGlzcF9PYmplY3QgYmlnbnVtX2RhdGE7CiAK KyAgTGlzcF9PYmplY3QgaGFzaF90YWJsZXM7CisKICAgdW5zaWduZWQgbnVtYmVyX2hvdF9yZWxv Y2F0aW9uczsKICAgdW5zaWduZWQgbnVtYmVyX2Rpc2NhcmRhYmxlX3JlbG9jYXRpb25zOwogfTsK QEAgLTI2NDcsNDIgKzI2NTEsNjUgQEAgZHVtcF9oYXNoX3RhYmxlX3N0YWJsZV9wIChjb25zdCBz dHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoYXNoKQogCiAvKiBSZXR1cm4gYSBsaXN0IG9mIChLRVkg LiBWQUxVRSkgcGFpcnMgaW4gdGhlIGdpdmVuIGhhc2ggdGFibGUuICAqLwogc3RhdGljIExpc3Bf T2JqZWN0Ci1oYXNoX3RhYmxlX2NvbnRlbnRzIChMaXNwX09iamVjdCB0YWJsZSkKK2hhc2hfdGFi bGVfY29udGVudHMgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgpCiB7CiAgIExpc3BfT2JqZWN0 IGNvbnRlbnRzID0gUW5pbDsKLSAgc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCA9IFhIQVNIX1RB QkxFICh0YWJsZSk7Ci0gIGZvciAocHRyZGlmZl90IGkgPSAwOyBpIDwgSEFTSF9UQUJMRV9TSVpF IChoKTsgKytpKQorICAvKiBNYWtlIHN1cmUga2V5X2FuZF92YWx1ZSBlbmRzIHVwIGluIHRoZSBz YW1lIG9yZGVyLCBjaGFyc2V0LmMKKyAgICAgcmVsaWVzIG9uIGl0IGJ5IGV4cGVjdGluZyBoYXNo IHRhYmxlIGluZGljZXMgdG8gc3RheSBjb25zdGFudAorICAgICBhY3Jvc3MgdGhlIGR1bXAuICAq LworICBmb3IgKHB0cmRpZmZfdCBpID0gSEFTSF9UQUJMRV9TSVpFIChoKSAtIDE7IGkgPj0gMDsg LS1pKQogICAgIGlmICghTklMUCAoSEFTSF9IQVNIIChoLCBpKSkpCi0gICAgICBkdW1wX3B1c2gg KCZjb250ZW50cywgRmNvbnMgKEhBU0hfS0VZIChoLCBpKSwgSEFTSF9WQUxVRSAoaCwgaSkpKTsK LSAgcmV0dXJuIEZucmV2ZXJzZSAoY29udGVudHMpOworICAgICAgeworCWR1bXBfcHVzaCAoJmNv bnRlbnRzLCBIQVNIX1ZBTFVFIChoLCBpKSk7CisJZHVtcF9wdXNoICgmY29udGVudHMsIEhBU0hf S0VZIChoLCBpKSk7CisgICAgICB9CisgIHJldHVybiBDQUxMTiAoRmFwcGx5LCBRdmVjdG9yLCBj b250ZW50cyk7Cit9CisKK3N0YXRpYyBkdW1wX29mZgorZHVtcF9oYXNoX3RhYmxlX2xpc3QgKHN0 cnVjdCBkdW1wX2NvbnRleHQgKmN0eCkKK3sKKyAgaWYgKENPTlNQIChjdHgtPmhhc2hfdGFibGVz KSkKKyAgICByZXR1cm4gZHVtcF9vYmplY3QgKGN0eCwgQ0FMTE4gKEZhcHBseSwgUXZlY3Rvciwg Y3R4LT5oYXNoX3RhYmxlcykpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkCitoYXNoX3RhYmxlX2ZyZWV6ZSAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCkKK3sKKyAg aC0+a2V5X2FuZF92YWx1ZSA9IGhhc2hfdGFibGVfY29udGVudHMgKGgpOworICBwdHJkaWZmX3Qg bmtleXMgPSBYRklYTkFUIChGbGVuZ3RoIChoLT5rZXlfYW5kX3ZhbHVlKSkgLyAyOworICBoLT5j b3VudCA9IG5rZXlzOworICBpZiAobmtleXMgPT0gMCkKKyAgICBua2V5cyA9IDE7CisgIGgtPmlu ZGV4ID0gaC0+bmV4dCA9IGgtPmhhc2ggPSBtYWtlX2ZpeG51bSAobmtleXMpOwogfQogCi0vKiBD b3B5IHRoZSBnaXZlbiBoYXNoIHRhYmxlLCByZWhhc2ggaXQsIGFuZCBtYWtlIHN1cmUgdGhhdCB3 ZSBjYW4KLSAgIGxvb2sgdXAgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG9yaWdpbmFsLiAgKi8KKy8q IERlZmluZWQgaW4gZm5zLmMuICAqLworZXh0ZXJuIHZvaWQgaGFzaF90YWJsZV9yZWhhc2ggKHN0 cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgpOworCiBzdGF0aWMgdm9pZAotY2hlY2tfaGFzaF90YWJs ZV9yZWhhc2ggKExpc3BfT2JqZWN0IHRhYmxlX29yaWcpCi17Ci0gIGhhc2hfcmVoYXNoX2lmX25l ZWRlZCAoWEhBU0hfVEFCTEUgKHRhYmxlX29yaWcpKTsKLSAgTGlzcF9PYmplY3QgdGFibGVfcmVo YXNoZWQgPSBGY29weV9oYXNoX3RhYmxlICh0YWJsZV9vcmlnKTsKLSAgZWFzc2VydCAoWEhBU0hf VEFCTEUgKHRhYmxlX3JlaGFzaGVkKS0+Y291bnQgPj0gMCk7Ci0gIFhIQVNIX1RBQkxFICh0YWJs ZV9yZWhhc2hlZCktPmNvdW50ICo9IC0xOwotICBlYXNzZXJ0IChYSEFTSF9UQUJMRSAodGFibGVf cmVoYXNoZWQpLT5jb3VudCA8PSAwKTsKLSAgaGFzaF9yZWhhc2hfaWZfbmVlZGVkIChYSEFTSF9U QUJMRSAodGFibGVfcmVoYXNoZWQpKTsKLSAgZWFzc2VydCAoWEhBU0hfVEFCTEUgKHRhYmxlX3Jl aGFzaGVkKS0+Y291bnQgPj0gMCk7Ci0gIExpc3BfT2JqZWN0IGV4cGVjdGVkX2NvbnRlbnRzID0g aGFzaF90YWJsZV9jb250ZW50cyAodGFibGVfb3JpZyk7Ci0gIHdoaWxlICghTklMUCAoZXhwZWN0 ZWRfY29udGVudHMpKQoraGFzaF90YWJsZV90aGF3IChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpo KQoreworICBMaXNwX09iamVjdCBjb3VudCA9IGgtPmluZGV4OworICBoLT5pbmRleCA9IEZtYWtl X3ZlY3RvciAoaC0+aW5kZXgsIG1ha2VfZml4bnVtICgtMSkpOworICBoLT5oYXNoID0gRm1ha2Vf dmVjdG9yIChoLT5oYXNoLCBRbmlsKTsKKyAgaC0+bmV4dCA9IEZtYWtlX3ZlY3RvciAoaC0+bmV4 dCwgbWFrZV9maXhudW0gKC0xKSk7CisgIExpc3BfT2JqZWN0IGtleV9hbmRfdmFsdWUgPSBoLT5r ZXlfYW5kX3ZhbHVlOworICBoLT5uZXh0X2ZyZWUgPSAtMTsKKyAgaWYgKFhGSVhOQVQgKGNvdW50 KSA8PSAxKQogICAgIHsKLSAgICAgIExpc3BfT2JqZWN0IGtleV92YWx1ZV9wYWlyID0gZHVtcF9w b3AgKCZleHBlY3RlZF9jb250ZW50cyk7Ci0gICAgICBMaXNwX09iamVjdCBrZXkgPSBYQ0FSIChr ZXlfdmFsdWVfcGFpcik7Ci0gICAgICBMaXNwX09iamVjdCBleHBlY3RlZF92YWx1ZSA9IFhDRFIg KGtleV92YWx1ZV9wYWlyKTsKLSAgICAgIExpc3BfT2JqZWN0IGFyYml0cmFyeSA9IFFkdW1wX2Vt YWNzX3BvcnRhYmxlX19zb3J0X3ByZWRpY2F0ZV9jb3BpZWQ7Ci0gICAgICBMaXNwX09iamVjdCBm b3VuZF92YWx1ZSA9IEZnZXRoYXNoIChrZXksIHRhYmxlX3JlaGFzaGVkLCBhcmJpdHJhcnkpOwot ICAgICAgZWFzc2VydCAoRVEgKGV4cGVjdGVkX3ZhbHVlLCBmb3VuZF92YWx1ZSkpOwotICAgICAg RnJlbWhhc2ggKGtleSwgdGFibGVfcmVoYXNoZWQpOworICAgICAgaC0+a2V5X2FuZF92YWx1ZSA9 IEZtYWtlX3ZlY3RvciAobWFrZV9maXhudW0gKDIgKiBYRklYTkFUIChjb3VudCkpLCBRbmlsKTsK KyAgICAgIHB0cmRpZmZfdCBpID0gMDsKKyAgICAgIHdoaWxlIChpIDwgQVNJWkUgKGtleV9hbmRf dmFsdWUpKQorCXsKKwkgIEFTRVQgKGgtPmtleV9hbmRfdmFsdWUsIGksIEFSRUYgKGtleV9hbmRf dmFsdWUsIGkpKTsKKwkgIGkrKzsKKwl9CiAgICAgfQogCi0gIGVhc3NlcnQgKEVRIChGaGFzaF90 YWJsZV9jb3VudCAodGFibGVfcmVoYXNoZWQpLAotICAgICAgICAgICAgICAgbWFrZV9maXhudW0g KDApKSk7CisgIGhhc2hfdGFibGVfcmVoYXNoIChoKTsKIH0KIAogc3RhdGljIGR1bXBfb2ZmCkBA IC0yNzA3LDggKzI3MzQsNiBAQCBkdW1wX2hhc2hfdGFibGUgKHN0cnVjdCBkdW1wX2NvbnRleHQg KmN0eCwKICAgICAgICAgewogCSAgZWFzc2VydCAob2Zmc2V0ID09IERVTVBfT0JKRUNUX09OX05P Uk1BTF9RVUVVRQogCQkgICB8fCBvZmZzZXQgPT0gRFVNUF9PQkpFQ1RfTk9UX1NFRU4pOwotICAg ICAgICAgIC8qIFdlIHN0aWxsIHdhbnQgdG8gZHVtcCB0aGUgYWN0dWFsIGtleXMgYW5kIHZhbHVl cyBub3cuICAqLwotICAgICAgICAgIGR1bXBfZW5xdWV1ZV9vYmplY3QgKGN0eCwgaGFzaF9pbi0+ a2V5X2FuZF92YWx1ZSwgV0VJR0hUX05PTkUpOwogICAgICAgICAgIC8qIFdlJ2xsIGdldCB0byB0 aGUgcmVzdCBsYXRlci4gICovCiAgICAgICAgICAgb2Zmc2V0ID0gRFVNUF9PQkpFQ1RfT05fSEFT SF9UQUJMRV9RVUVVRTsKICAgICAgICAgICBkdW1wX3JlbWVtYmVyX29iamVjdCAoY3R4LCBvYmpl Y3QsIG9mZnNldCk7CkBAIC0yNzE3LDIyICsyNzQyLDExIEBAIGR1bXBfaGFzaF90YWJsZSAoc3Ry dWN0IGR1bXBfY29udGV4dCAqY3R4LAogICAgICAgcmV0dXJuIG9mZnNldDsKICAgICB9CiAKLSAg aWYgKFBEVU1QRVJfQ0hFQ0tfUkVIQVNISU5HKQotICAgIGNoZWNrX2hhc2hfdGFibGVfcmVoYXNo IChtYWtlX2xpc3BfcHRyICgodm9pZCAqKSBoYXNoX2luLCBMaXNwX1ZlY3Rvcmxpa2UpKTsKLQog ICBzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlIGhhc2hfbXVuZ2VkID0gKmhhc2hfaW47CiAgIHN0cnVj dCBMaXNwX0hhc2hfVGFibGUgKmhhc2ggPSAmaGFzaF9tdW5nZWQ7CiAKLSAgLyogUmVtZW1iZXIg dG8gcmVoYXNoIHRoaXMgaGFzaCB0YWJsZSBvbiBmaXJzdCBhY2Nlc3MuICBBZnRlciBhCi0gICAg IGR1bXAgcmVsb2FkLCB0aGUgaGFzaCB0YWJsZSB2YWx1ZXMgd2lsbCBoYXZlIGNoYW5nZWQsIHNv IHdlJ2xsCi0gICAgIG5lZWQgdG8gcmVidWlsZCB0aGUgaW5kZXguCi0KLSAgICAgVE9ETzogZm9y IEVRIGFuZCBFUUwgaGFzaCB0YWJsZXMsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWhhc2gK LSAgICAgaGVyZSB1c2luZyB0aGUgcHJlZmVycmVkIGxvYWQgYWRkcmVzcyBvZiB0aGUgZHVtcCwg ZWxpbWluYXRpbmcKLSAgICAgdGhlIG5lZWQgdG8gcmVoYXNoLW9uLWFjY2VzcyBpZiB3ZSBjYW4g bG9hZCB0aGUgZHVtcCB3aGVyZSB3ZQotICAgICB3YW50LiAgKi8KLSAgaWYgKGhhc2gtPmNvdW50 ID4gMCAmJiAhaXNfc3RhYmxlKQotICAgIGhhc2gtPmNvdW50ID0gLWhhc2gtPmNvdW50OworICBo YXNoX3RhYmxlX2ZyZWV6ZSAoaGFzaCk7CisgIGR1bXBfcHVzaCAoJmN0eC0+aGFzaF90YWJsZXMs IG9iamVjdCk7CiAKICAgU1RBUlRfRFVNUF9QVkVDIChjdHgsICZoYXNoLT5oZWFkZXIsIHN0cnVj dCBMaXNwX0hhc2hfVGFibGUsIG91dCk7CiAgIGR1bXBfcHNldWRvdmVjdG9yX2xpc3BfZmllbGRz IChjdHgsICZvdXQtPmhlYWRlciwgJmhhc2gtPmhlYWRlcik7CkBAIC00MTQxLDYgKzQxNTUsMTkg QEAgREVGVU4gKCJkdW1wLWVtYWNzLXBvcnRhYmxlIiwKIAkgfHwgIU5JTFAgKGN0eC0+ZGVmZXJy ZWRfaGFzaF90YWJsZXMpCiAJIHx8ICFOSUxQIChjdHgtPmRlZmVycmVkX3N5bWJvbHMpKTsKIAor ICBjdHgtPmhlYWRlci5oYXNoX2xpc3QgPSBjdHgtPm9mZnNldDsKKyAgZHVtcF9oYXNoX3RhYmxl X2xpc3QgKGN0eCk7CisKKyAgZG8KKyAgICB7CisgICAgICBkdW1wX2RyYWluX2RlZmVycmVkX2hh c2hfdGFibGVzIChjdHgpOworICAgICAgZHVtcF9kcmFpbl9kZWZlcnJlZF9zeW1ib2xzIChjdHgp OworICAgICAgZHVtcF9kcmFpbl9ub3JtYWxfcXVldWUgKGN0eCk7CisgICAgfQorICB3aGlsZSAo IWR1bXBfcXVldWVfZW1wdHlfcCAoJmN0eC0+ZHVtcF9xdWV1ZSkKKwkgfHwgIU5JTFAgKGN0eC0+ ZGVmZXJyZWRfaGFzaF90YWJsZXMpCisJIHx8ICFOSUxQIChjdHgtPmRlZmVycmVkX3N5bWJvbHMp KTsKKwogICBkdW1wX3NvcnRfY29waWVkX29iamVjdHMgKGN0eCk7CiAKICAgLyogV2hpbGUgd2Ug Y29weSBidWlsdC1pbiBzeW1ib2xzIGludG8gdGhlIEVtYWNzIGltYWdlLCB0aGVzZQpAQCAtNTQy OSw2ICs1NDU2LDEzIEBAIHBkdW1wZXJfbG9hZCAoY29uc3QgY2hhciAqZHVtcF9maWxlbmFtZSkK ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWUVMVFMgKHNlY3Rpb25zKTsgKytpKQogICAgIGR1 bXBfbW1hcF9yZXNldCAoJnNlY3Rpb25zW2ldKTsKIAorICBpZiAoaGVhZGVyLT5oYXNoX2xpc3Qp CisgICAgeworICAgICAgc3RydWN0IExpc3BfVmVjdG9yICpoYXNoX3RhYmxlcyA9CisJKChzdHJ1 Y3QgTGlzcF9WZWN0b3IgKikoZHVtcF9iYXNlICsgaGVhZGVyLT5oYXNoX2xpc3QpKTsKKyAgICAg IFhTRVRWRUNUT1IgKFZwZHVtcGVyX2hhc2hfdGFibGVzLCBoYXNoX3RhYmxlcyk7CisgICAgfQor CiAgIC8qIFJ1biB0aGUgZnVuY3Rpb25zIEVtYWNzIHJlZ2lzdGVyZWQgZm9yIGRvaW5nIHBvc3Qt ZHVtcC1sb2FkCiAgICAgIGluaXRpYWxpemF0aW9uLiAgKi8KICAgZm9yIChpbnQgaSA9IDA7IGkg PCBucl9kdW1wX2hvb2tzOyArK2kpCkBAIC01NTAwLDEwICs1NTM0LDQxIEBAIERFRlVOICgicGR1 bXBlci1zdGF0cyIsIEZwZHVtcGVyX3N0YXRzLCBTcGR1bXBlcl9zdGF0cywgMCwgMCwgMCwKIAog DAogCitzdGF0aWMgdm9pZCB0aGF3X2hhc2hfdGFibGVzICh2b2lkKQoreworICBjb25zdCBzdHJ1 Y3QgdGltZXNwZWMgc3RhcnRfdGltZSA9IGN1cnJlbnRfdGltZXNwZWMgKCk7CisgIExpc3BfT2Jq ZWN0IGhhc2hfdGFibGVzID0gVnBkdW1wZXJfaGFzaF90YWJsZXM7CisgIHB0cmRpZmZfdCB0b3Rh bF9zaXplID0gMDsKKyAgcHRyZGlmZl90IHRvdGFsX2NvdW50ID0gMDsKKyAgcHRyZGlmZl90IGkg PSAwOworICBpZiAoVkVDVE9SUCAoaGFzaF90YWJsZXMpKQorICAgIHdoaWxlIChpIDwgQVNJWkUg KGhhc2hfdGFibGVzKSkKKyAgICAgIHsKKwloYXNoX3RhYmxlX3RoYXcgKFhIQVNIX1RBQkxFIChB UkVGIChoYXNoX3RhYmxlcywgaSkpKTsKKwl0b3RhbF9zaXplICs9IFhGSVhOQVQgKEZsZW5ndGgg KFhIQVNIX1RBQkxFIChBUkVGIChoYXNoX3RhYmxlcywgaSkpLT5rZXlfYW5kX3ZhbHVlKSk7CisJ dG90YWxfY291bnQgKys7CisJaSsrOworICAgICAgfQorCisgIGNvbnN0IHN0cnVjdCB0aW1lc3Bl YyBlbmRfdGltZSA9IGN1cnJlbnRfdGltZXNwZWMgKCk7CisgIGZwcmludGYgKHN0ZGVyciwgIiVs ZCBoYXNoIHRhYmxlcywgJWxkIGtleS92YWx1ZXMgJWYgc1xuIiwKKwkgICB0b3RhbF9jb3VudCwg dG90YWxfc2l6ZSwgdGltZXNwZWN0b2QodGltZXNwZWNfc3ViIChlbmRfdGltZSwgc3RhcnRfdGlt ZSkpKTsKK30KKwordm9pZAoraW5pdF9wZHVtcGVyX29uY2UgKHZvaWQpCit7CisgIFZwZHVtcGVy X2hhc2hfdGFibGVzID0gUW5pbDsKKyAgcGR1bXBlcl9kb19ub3dfYW5kX2FmdGVyX2xvYWQgKHRo YXdfaGFzaF90YWJsZXMpOworfQorCiB2b2lkCiBzeW1zX29mX3BkdW1wZXIgKHZvaWQpCiB7CiAj aWZkZWYgSEFWRV9QRFVNUEVSCisgIERFRlZBUl9MSVNQICgicGR1bXBlci1oYXNoLXRhYmxlcyIs IFZwZHVtcGVyX2hhc2hfdGFibGVzLAorCSAgICAgICBkb2M6IC8qIEEgbGlzdCBvZiBoYXNoIHRh YmxlcyB0aGF0IG5lZWQgdG8gYmUgdGhhd2VkIGFmdGVyIGxvYWRpbmcgdGhlIHBkdW1wLiAgKi8p OworICBWcGR1bXBlcl9oYXNoX3RhYmxlcyA9IEZtYWtlX3ZlY3RvciAobWFrZV9maXhudW0gKDAp LCBRbmlsKTsKICAgZGVmc3ViciAoJlNkdW1wX2VtYWNzX3BvcnRhYmxlKTsKICAgZGVmc3ViciAo JlNkdW1wX2VtYWNzX3BvcnRhYmxlX19zb3J0X3ByZWRpY2F0ZSk7CiAgIGRlZnN1YnIgKCZTZHVt cF9lbWFjc19wb3J0YWJsZV9fc29ydF9wcmVkaWNhdGVfY29waWVkKTsKZGlmZiAtLWdpdCBhL3Ny Yy9wZHVtcGVyLmggYi9zcmMvcGR1bXBlci5oCmluZGV4IGFiMmY0MjZjMWUuLmNmZWEwNmQzM2Qg MTAwNjQ0Ci0tLSBhL3NyYy9wZHVtcGVyLmgKKysrIGIvc3JjL3BkdW1wZXIuaApAQCAtMjQ4LDYg KzI0OCw3IEBAIHBkdW1wZXJfY2xlYXJfbWFya3MgKHZvaWQpCiAgICBmaWxlIHdhcyBsb2FkZWQu ICAqLwogZXh0ZXJuIHZvaWQgcGR1bXBlcl9yZWNvcmRfd2QgKGNvbnN0IGNoYXIgKik7CiAKK3Zv aWQgaW5pdF9wZHVtcGVyX29uY2UgKHZvaWQpOwogdm9pZCBzeW1zX29mX3BkdW1wZXIgKHZvaWQp OwogCiBJTkxJTkVfSEVBREVSX0VORAo= --000000000000785ab6058d049693--