From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: =?UTF-8?Q?Aur=C3=A9lien_Aptel?= Newsgroups: gmane.emacs.devel Subject: Re: Dynamic loading progress Date: Thu, 3 Jul 2014 19:09:46 +0200 Message-ID: References: <87tx6zzbrg.fsf@igel.home> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e01493e88678b9d04fd4d139b X-Trace: ger.gmane.org 1404407401 8936 80.91.229.3 (3 Jul 2014 17:10:01 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 3 Jul 2014 17:10:01 +0000 (UTC) Cc: Emacs development discussions To: Andreas Schwab Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Jul 03 19:09:57 2014 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1X2kWB-0005Yr-Es for ged-emacs-devel@m.gmane.org; Thu, 03 Jul 2014 19:09:55 +0200 Original-Received: from localhost ([::1]:60927 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X2kWB-0006an-1P for ged-emacs-devel@m.gmane.org; Thu, 03 Jul 2014 13:09:55 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:36686) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X2kW6-0006af-Ol for emacs-devel@gnu.org; Thu, 03 Jul 2014 13:09:52 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X2kW4-0005I5-95 for emacs-devel@gnu.org; Thu, 03 Jul 2014 13:09:50 -0400 Original-Received: from mail-lb0-x22b.google.com ([2a00:1450:4010:c04::22b]:41093) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X2kW3-0005Hc-Or for emacs-devel@gnu.org; Thu, 03 Jul 2014 13:09:48 -0400 Original-Received: by mail-lb0-f171.google.com with SMTP id s7so394399lbd.2 for ; Thu, 03 Jul 2014 10:09:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=aj43d99S2ZZP8/MoH5bf/soPinfQPGY+J3Pm6c7zsOE=; b=j+CqTN+fYI8sxYqzDfpr0Oep+Yp7sDvpGWTygte9Qn+fVqX4eF3NSqsNvX6gT+xp8R b+5fiTXXppZ9tmVgryqC23KUxBsP4ZQ1Kuf248hQ+pOakIWfDBNuVsffzB6fE2s+tIBS 60FbSNRzIFPNf9DfU4tPkFtOz2ohOw2HZxln3TM9LNKkq+oacua+kpPSTaUh62wBccbU 8V7BoJryUqcqN5nveV73li3Mc1tIRfTE29IpCuQ4y/tfxMc1uJLJsNX2i1JIBUi0KNJD 7JxfOaOQP1Zn/y/t0DjtmRyHKhgpVNLa7b1fmGac/yEh1VatjWuF5BLwAcwTHwCd7bKU 2yAQ== X-Received: by 10.152.6.170 with SMTP id c10mr3797224laa.9.1404407386696; Thu, 03 Jul 2014 10:09:46 -0700 (PDT) Original-Received: by 10.114.77.202 with HTTP; Thu, 3 Jul 2014 10:09:46 -0700 (PDT) In-Reply-To: <87tx6zzbrg.fsf@igel.home> X-Google-Sender-Auth: qCI1fvea9fi58iAtfhj6X1NT0rY X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c04::22b X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:172874 Archived-At: --089e01493e88678b9d04fd4d139b Content-Type: text/plain; charset=UTF-8 On Wed, Jul 2, 2014 at 11:33 PM, Andreas Schwab wrote: > You need to declare Ffmod with EXFUN. Thanks, it almost worked. In order to use emacs symbols from a dynamically loaded module I had to add a linker option to export the symbols from emacs. The option is -Wl,--export-dynamic. (updated in configure.ac) I then ran into another problem: the module is loaded correctly but emacs_abort() is called inside defsubr(). The actual call was in intern_c_string_1 where I made the following change: Lisp_Object intern_c_string_1 (const char *str, ptrdiff_t len) { Lisp_Object obarray = check_obarray (Vobarray); Lisp_Object tem = oblookup (obarray, str, len, len); if (SYMBOLP (tem)) return tem; if (NILP (Vpurify_flag)) - /* Creating a non-pure string from a string literal not - implemented yet. We could just use make_string here and live - with the extra copy. */ - emacs_abort (); + return Fintern (make_string (str, len), obarray); return Fintern (make_pure_c_string (str, len), obarray); } I'm not familiar with all the dumping intricacies but judging from the comment this change seems harmless (Can someone confirm this?). I've made a modules directory with the sample module and a Makefile which has to be run separately for now. Here's the whole procedure the test it for anyone interested: # get a recent copy of emacs sources $ wget -O e.zip https://github.com/mirrors/emacs/archive/master.zip $ unzip e.zip # apply attached diff $ cd emacs-master $ patch -p1 < path/to/dynamic-loading-2.diff # compile $ ./autogen.sh && ./configure && make -j8 # compile & test module $ make -C modules $ ./src/emacs -Q --batch --eval '(progn (load-module "modules/fmod.so") (message "%f" (fmod 2.4 2)))' 0.400000 Pretty cool if you ask me :) The next steps are: - handle doc strings - handle features related stuff (provide, require, run-after-load hooks, ...) - making it portable - ? --089e01493e88678b9d04fd4d139b Content-Type: text/plain; charset=US-ASCII; name="dynamic-loading-2.diff" Content-Disposition: attachment; filename="dynamic-loading-2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hx6bpmcj0 ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCAwNGM3NWUzLi4y NjE0ZjQ2IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0z MjMsNiArMzIzLDggQEAgT1BUSU9OX0RFRkFVTFRfT04oW2dzZXR0aW5nc10sW2Rvbid0IGNvbXBp bGUgd2l0aCBHU2V0dGluZ3Mgc3VwcG9ydF0pCiBPUFRJT05fREVGQVVMVF9PTihbc2VsaW51eF0s W2Rvbid0IGNvbXBpbGUgd2l0aCBTRUxpbnV4IHN1cHBvcnRdKQogT1BUSU9OX0RFRkFVTFRfT04o W2dudXRsc10sW2Rvbid0IHVzZSAtbGdudXRscyBmb3IgU1NML1RMUyBzdXBwb3J0XSkKIE9QVElP Tl9ERUZBVUxUX09OKFt6bGliXSxbZG9uJ3QgY29tcGlsZSB3aXRoIHpsaWIgZGVjb21wcmVzc2lv biBzdXBwb3J0XSkKK09QVElPTl9ERUZBVUxUX09OKFtsdGRsXSwgW2Rvbid0IGNvbXBpbGUgd2l0 aCBkeW5hbWljIG1vZHVsZSBsb2FkaW5nIHN1cHBvcnRdKQorCiAKIEFDX0FSR19XSVRIKFtmaWxl LW5vdGlmaWNhdGlvbl0sW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZmlsZS1ub3RpZmljYXRpb249 TElCXSwKICBbdXNlIGEgZmlsZSBub3RpZmljYXRpb24gbGlicmFyeSAoTElCIG9uZSBvZjogeWVz LCBnZmlsZSwgaW5vdGlmeSwgdzMyLCBubyldKV0sCkBAIC0zMTI2LDYgKzMxMjgsMTggQEAgaWYg dGVzdCAiJHtIQVZFX1pMSUJ9IiA9ICJ5ZXMiOyB0aGVuCiBmaQogQUNfU1VCU1QoTElCWikKIAor SEFWRV9MVERMPW5vCitMSUJMVERMPQoraWYgdGVzdCAiJHt3aXRoX2x0ZGx9IiAhPSAibm8iOyB0 aGVuCisgIEFDX0NIRUNLX0hFQURFUihsdGRsLmgsIEhBVkVfTFRETD15ZXMsIEhBVkVfTFRETD1u bykKKyAgQUNfQ0hFQ0tfTElCKGx0ZGwsIGx0X2Rsb3BlbiwgSEFWRV9MVERMPXllcywgSEFWRV9M VERMPW5vKQorZmkKK2lmIHRlc3QgIiR7SEFWRV9MVERMfSIgPSAieWVzIjsgdGhlbgorICBBQ19E RUZJTkUoSEFWRV9MVERMLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGx0ZGwgbGli cmFyeSAoLWxsdGRsKS5dKQorICBMSUJMVERMPSItbGx0ZGwgLVdsLC0tZXhwb3J0LWR5bmFtaWMi CitmaQorQUNfU1VCU1QoTElCTFRETCkKKwogIyMjIFVzZSAtbHBuZyBpZiBhdmFpbGFibGUsIHVu bGVzcyBgLS13aXRoLXBuZz1ubycuCiBIQVZFX1BORz1ubwogTElCUE5HPQpAQCAtNDk4OSw3ICs1 MDAzLDcgQEAgb3B0c2VwPQogZW1hY3NfY29uZmlnX2ZlYXR1cmVzPQogZm9yIG9wdCBpbiBYQVcz RCBYUE0gSlBFRyBUSUZGIEdJRiBQTkcgUlNWRyBJTUFHRU1BR0lDSyBTT1VORCBHUE0gREJVUyBc CiAgIEdDT05GIEdTRVRUSU5HUyBOT1RJRlkgQUNMIExJQlNFTElOVVggR05VVExTIExJQlhNTDIg RlJFRVRZUEUgTTE3Tl9GTFQgXAotICBMSUJPVEYgWEZUIFpMSUI7IGRvCisgIExJQk9URiBYRlQg WkxJQiBMVERMOyBkbwogCiAgICAgY2FzZSAkb3B0IGluCiAgICAgICBOT1RJRll8QUNMKSBldmFs IHZhbD1cJHske29wdH1fU1VNTUFSWX0gOzsKQEAgLTUwMjgsNiArNTA0Miw3IEBAIGVjaG8gIiAg RG9lcyBFbWFjcyB1c2UgLWxtMTduLWZsdD8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk e0hBVkVfTTE3Tl9GTFR9CiBlY2hvICIgIERvZXMgRW1hY3MgdXNlIC1sb3RmPyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0xJQk9URn0iCiBlY2hvICIgIERvZXMgRW1h Y3MgdXNlIC1seGZ0PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX1hG VH0iCiBlY2hvICIgIERvZXMgRW1hY3MgZGlyZWN0bHkgdXNlIHpsaWI/ICAgICAgICAgICAgICAg ICAgICAgICAgICAgJHtIQVZFX1pMSUJ9IgorZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbGx0ZGw/ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9MVERMfSIKIAogZWNobyAi ICBEb2VzIEVtYWNzIHVzZSB0b29sa2l0IHNjcm9sbCBiYXJzPyAgICAgICAgICAgICAgICAgICAg ICR7VVNFX1RPT0xLSVRfU0NST0xMX0JBUlN9IgogZWNobwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9N YWtlZmlsZSBiL21vZHVsZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNTJmYjg3NgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvTWFrZWZpbGUKQEAgLTAs MCArMSw4IEBACisKK2FsbDogZm1vZC5zbworCislLnNvOiAlLm8KKwlnY2MgLXNoYXJlZCAtbyAk QCAkPAorCislLm86ICUuYworCWdjYyAtZ2dkYjMgLVdhbGwgLUkuLi9zcmMgLUkuLi9saWIgLWZQ SUMgLWMgJDwKZGlmZiAtLWdpdCBhL21vZHVsZXMvZm1vZC5jIGIvbW9kdWxlcy9mbW9kLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkZDAxZQotLS0gL2Rldi9udWxsCisr KyBiL21vZHVsZXMvZm1vZC5jCkBAIC0wLDAgKzEsMjUgQEAKKyNpbmNsdWRlIDxjb25maWcuaD4K KyNpbmNsdWRlIDxsaXNwLmg+CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8qIGVtYWNzIGNoZWNr cyBmb3IgdGhpcyBzeW1ib2wgYmVmb3JlIHJ1bm5pbmcgdGhlIG1vZHVsZSAqLworCitpbnQgcGx1 Z2luX2lzX0dQTF9jb21wYXRpYmxlOworCisvKiBkZWZpbmUgYSBuZXcgbGlzcCBmdW5jdGlvbiAq LworCitFWEZVTiAoRmZtb2QsIDIpOworREVGVU4gKCJmbW9kIiwgRmZtb2QsIFNmbW9kLCAyLCAy LCAwLAorICAgICAgIGRvYzogIlJldHVybnMgdGhlIGZsb2F0aW5nLXBvaW50IHJlbWFpbmRlciBv ZiBOVU1FUi9ERU5PTSIpCisgIChMaXNwX09iamVjdCBudW1lciwgTGlzcF9PYmplY3QgZGVub20p Cit7CisgIHJldHVybiBtYWtlX2Zsb2F0IChmbW9kIChleHRyYWN0X2Zsb2F0IChudW1lciksIGV4 dHJhY3RfZmxvYXQgKGRlbm9tKSkpOworfQorCisvKiBlbnRyeSBwb2ludCBvZiB0aGUgbW9kdWxl ICovCisKK3ZvaWQgaW5pdCAoKQoreworICBkZWZzdWJyICgmU2Ztb2QpOworfQpkaWZmIC0tZ2l0 IGEvc3JjL01ha2VmaWxlLmluIGIvc3JjL01ha2VmaWxlLmluCmluZGV4IGExM2Y3YjguLjc4MDI0 NWEgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS5pbgorKysgYi9zcmMvTWFrZWZpbGUuaW4KQEAg LTIyNSw2ICsyMjUsOCBAQCBMSUJYTUwyX0NGTEFHUyA9IEBMSUJYTUwyX0NGTEFHU0AKIAogTElC WiA9IEBMSUJaQAogCitMSUJMVERMID0gQExJQkxURExACisKIFhSQU5EUl9MSUJTID0gQFhSQU5E Ul9MSUJTQAogWFJBTkRSX0NGTEFHUyA9IEBYUkFORFJfQ0ZMQUdTQAogCkBAIC00MDgsNyArNDEw LDcgQEAgTElCRVMgPSAkKExJQlMpICQoVzMyX0xJQlMpICQoTElCU19HTlVTVEVQKSAkKExJQlhf QkFTRSkgJChMSUJJTUFHRSkgXAogICAgJChMSUJTX1RFUk1DQVApICQoR0VUTE9BREFWR19MSUJT KSAkKFNFVFRJTkdTX0xJQlMpICQoTElCU0VMSU5VWF9MSUJTKSBcCiAgICAkKEZSRUVUWVBFX0xJ QlMpICQoRk9OVENPTkZJR19MSUJTKSAkKExJQk9URl9MSUJTKSAkKE0xN05fRkxUX0xJQlMpIFwK ICAgICQoTElCR05VVExTX0xJQlMpICQoTElCX1BUSFJFQUQpIFwKLSAgICQoR0ZJTEVOT1RJRllf TElCUykgJChMSUJfTUFUSCkgJChMSUJaKQorICAgJChHRklMRU5PVElGWV9MSUJTKSAkKExJQl9N QVRIKSAkKExJQlopICQoTElCTFRETCkKIAogYWxsOiBlbWFjcyQoRVhFRVhUKSAkKE9USEVSX0ZJ TEVTKQogLlBIT05ZOiBhbGwKZGlmZiAtLWdpdCBhL3NyYy9scmVhZC5jIGIvc3JjL2xyZWFkLmMK aW5kZXggZjI1Mjk5My4uZTQzMWJlNiAxMDA2NDQKLS0tIGEvc3JjL2xyZWFkLmMKKysrIGIvc3Jj L2xyZWFkLmMKQEAgLTEsMyArMSw0IEBACisKIC8qIExpc3AgcGFyc2luZyBhbmQgaW5wdXQgc3Ry ZWFtcy4KIAogQ29weXJpZ2h0IChDKSAxOTg1LTE5ODksIDE5OTMtMTk5NSwgMTk5Ny0yMDE0IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKQEAgLTY0LDYgKzY1LDEwIEBAIGFsb25nIHdpdGggR05V IEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K ICNkZWZpbmUgZmlsZV90ZWxsIGZ0ZWxsCiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfTFRETAorI2lu Y2x1ZGUgPGx0ZGwuaD4KKyNlbmRpZgorCiAvKiBIYXNoIHRhYmxlIHJlYWQgY29uc3RhbnRzLiAg Ki8KIHN0YXRpYyBMaXNwX09iamVjdCBRaGFzaF90YWJsZSwgUWRhdGE7CiBzdGF0aWMgTGlzcF9P YmplY3QgUXRlc3QsIFFzaXplOwpAQCAtOTk5LDYgKzEwMDQsNDkgQEAgVGhpcyB1c2VzIHRoZSB2 YXJpYWJsZXMgYGxvYWQtc3VmZml4ZXMnIGFuZCBgbG9hZC1maWxlLXJlcC1zdWZmaXhlcycuICAq LykKICAgcmV0dXJuIEZucmV2ZXJzZSAobHN0KTsKIH0KIAorREVGVU4gKCJsb2FkLW1vZHVsZSIs IEZsb2FkX21vZHVsZSwgU2xvYWRfbW9kdWxlLCAxLCAxLCAwLAorICAgICAgIGRvYzogLyogRHlt YW1pY2FsbHkgbG9hZCBhIGNvbXBpbGVkIG1vZHVsZS4gKi8pCisgIChMaXNwX09iamVjdCBmaWxl KQoreworI2lmZGVmIEhBVkVfTFRETAorICAgIHN0YXRpYyBpbnQgbHRfaW5pdF9kb25lID0gMDsK KyAgICBsdF9kbGhhbmRsZSBoYW5kbGU7CisgICAgdm9pZCAoKm1vZHVsZV9pbml0KSAoKTsKKyAg ICB2b2lkICpncGxfc3ltOworCisgICAgaWYgKCFsdF9pbml0X2RvbmUpCisgICAgICB7CisgICAg ICAgIGludCByZXQgPSBsdF9kbGluaXQgKCk7CisgICAgICAgIGlmIChyZXQpCisgICAgICAgICAg eworICAgICAgICAgICAgY29uc3QgY2hhciogcyA9IGx0X2RsZXJyb3IgKCk7CisgICAgICAgICAg ICBlcnJvciAoImx0ZGwgaW5pdCBmYWlsOiAlcyIsIHMpOworICAgICAgICAgIH0KKyAgICAgICAg bHRfaW5pdF9kb25lID0gMTsKKyAgICAgIH0KKworICAgIENIRUNLX1NUUklORyAoZmlsZSk7CisK KyAgICBoYW5kbGUgPSBsdF9kbG9wZW4gKFNEQVRBIChmaWxlKSk7CisgICAgaWYgKCFoYW5kbGUp CisgICAgICBlcnJvciAoIkNhbm5vdCBsb2FkIGZpbGUgJXMiLCBTREFUQSAoZmlsZSkpOworCisg ICAgZ3BsX3N5bSA9IGx0X2Rsc3ltIChoYW5kbGUsICJwbHVnaW5faXNfR1BMX2NvbXBhdGlibGUi KTsKKyAgICBpZiAoIWdwbF9zeW0pCisgICAgICBlcnJvciAoIk1vZHVsZSAlcyBpcyBub3QgR1BM IGNvbXBhdGlibGUiLCBTREFUQSAoZmlsZSkpOworCisgICAgbW9kdWxlX2luaXQgPSAodm9pZCAo KikgKCkpIGx0X2Rsc3ltIChoYW5kbGUsICJpbml0Iik7CisgICAgaWYgKCFtb2R1bGVfaW5pdCkK KyAgICAgIGVycm9yICgiTW9kdWxlICVzIGRvZXMgbm90IGhhdmUgYW4gaW5pdCBmdW5jdGlvbi4i LCBTREFUQSAoZmlsZSkpOworCisgICAgbW9kdWxlX2luaXQgKCk7CisKKyAgICByZXR1cm4gUXQ7 CisjZWxzZQorICAgIHJldHVybiBRbmlsOworI2VuZGlmCit9CisKIERFRlVOICgibG9hZCIsIEZs b2FkLCBTbG9hZCwgMSwgNSwgMCwKICAgICAgICBkb2M6IC8qIEV4ZWN1dGUgYSBmaWxlIG9mIExp c3AgY29kZSBuYW1lZCBGSUxFLgogRmlyc3QgdHJ5IEZJTEUgd2l0aCBgLmVsYycgYXBwZW5kZWQs IHRoZW4gdHJ5IHdpdGggYC5lbCcsCkBAIC0zODA1LDEwICszODUzLDcgQEAgaW50ZXJuX2Nfc3Ry aW5nXzEgKGNvbnN0IGNoYXIgKnN0ciwgcHRyZGlmZl90IGxlbikKICAgICByZXR1cm4gdGVtOwog CiAgIGlmIChOSUxQIChWcHVyaWZ5X2ZsYWcpKQotICAgIC8qIENyZWF0aW5nIGEgbm9uLXB1cmUg c3RyaW5nIGZyb20gYSBzdHJpbmcgbGl0ZXJhbCBub3QKLSAgICAgICBpbXBsZW1lbnRlZCB5ZXQu ICBXZSBjb3VsZCBqdXN0IHVzZSBtYWtlX3N0cmluZyBoZXJlIGFuZCBsaXZlCi0gICAgICAgd2l0 aCB0aGUgZXh0cmEgY29weS4gICovCi0gICAgZW1hY3NfYWJvcnQgKCk7CisgICAgcmV0dXJuIEZp bnRlcm4gKG1ha2Vfc3RyaW5nIChzdHIsIGxlbiksIG9iYXJyYXkpOwogCiAgIHJldHVybiBGaW50 ZXJuIChtYWtlX3B1cmVfY19zdHJpbmcgKHN0ciwgbGVuKSwgb2JhcnJheSk7CiB9CkBAIC00NDg2 LDYgKzQ1MzEsNyBAQCBzeW1zX29mX2xyZWFkICh2b2lkKQogICBkZWZzdWJyICgmU2dldF9maWxl X2NoYXIpOwogICBkZWZzdWJyICgmU21hcGF0b21zKTsKICAgZGVmc3ViciAoJlNsb2NhdGVfZmls ZV9pbnRlcm5hbCk7CisgIGRlZnN1YnIgKCZTbG9hZF9tb2R1bGUpOwogCiAgIERFRlZBUl9MSVNQ ICgib2JhcnJheSIsIFZvYmFycmF5LAogCSAgICAgICBkb2M6IC8qIFN5bWJvbCB0YWJsZSBmb3Ig dXNlIGJ5IGBpbnRlcm4nIGFuZCBgcmVhZCcuCg== --089e01493e88678b9d04fd4d139b--