From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19375 invoked by alias); 11 Aug 2011 12:03:50 -0000 Received: (qmail 19367 invoked by uid 22791); 11 Aug 2011 12:03:48 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_CP X-Spam-Check-By: sourceware.org Received: from mail-yi0-f41.google.com (HELO mail-yi0-f41.google.com) (209.85.218.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 11 Aug 2011 12:03:30 +0000 Received: by yib2 with SMTP id 2so1403235yib.0 for ; Thu, 11 Aug 2011 05:03:29 -0700 (PDT) MIME-Version: 1.0 Received: by 10.236.176.197 with SMTP id b45mr1591399yhm.198.1313064209798; Thu, 11 Aug 2011 05:03:29 -0700 (PDT) Received: by 10.236.34.193 with HTTP; Thu, 11 Aug 2011 05:03:29 -0700 (PDT) In-Reply-To: References: Date: Thu, 11 Aug 2011 12:03:00 -0000 Message-ID: Subject: Re: [patch] python prompt additions at first prompt. From: Matt Rice To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf305b1286cad73104aa39958b X-IsSubscribed: yes 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 X-SW-Source: 2011-08/txt/msg00235.txt.bz2 --20cf305b1286cad73104aa39958b Content-Type: text/plain; charset=ISO-8859-1 Content-length: 3451 On Wed, Aug 10, 2011 at 8:20 AM, Tom Tromey wrote: > Matt> So, I guess neither the current patch or adding the observer calls > Matt> to the existing code is correct and we at least need to split up > Matt> prompt displaying from the setting of the prompt parameter? > > I'm afraid I don't have an answer for you. thats alright, updated patch, modifications from the previous patch include on the code side we need to avoid calling the observer/prompt_hook when sync_execution is enabled, wrt tests check for double prompting in lib/prompt.exp, and add sync_execution tests, and tests for the prompt_hook function's argument. if we don't check sync_execution when calling the prompt_hook: in the sync_execution && is_running case this leads to prompt_hook being called for a prompt that is never displayed (giving the prompt_hook an empty string argument from async_disable_stdin). in the sync_execution && !is_running case the fallthrough can lead to a 'double prompt', if the prompt_hook overrides the empty prompt that async_disable_stdin sets, then it prompts again in the future. there is a concerted effort (see below for examples), that we force the prompt to return early, avoiding readline stuff, and then re-calling it in the future, when the signal handling won't get in the way, the first prompt does not seem to be different in regard to this than any other, thus the cli_command_loop call to display_gdb_prompt, returns early, then later in fetch_inferior_event, we call it again without sync_execution set, and its only then that we get the first prompt and setup readline. doing readline stuff in cli_command_loop (in the case of sync_execution) was causing 10720. because sync_execution is set during command handling which happens before the first prompt. and it wasn't testing that flag. thus, I don't think returning early is a problem here, i believe it is working as intended, though this entire mechanism does seem complex and fragile... anyhow that is my understanding of it, thanks for your patience. infrun.c:fetch_inferior_event (~2815) /* If the inferior was in sync execution mode, and now isn't, restore the prompt. */ if (was_sync && !sync_execution) display_gdb_prompt (0); inf-loop.c:inferior_event_handler (~58) async_enable_stdin (); display_gdb_prompt (0); inf-loop.c:inferior_event_handler (~73) /* The call to async_enable_stdin below resets 'sync_execution'. However, if sync_execution is 1 now, we also need to show the prompt below, so save the current value. */ was_sync = sync_execution; async_enable_stdin (); P.S. I have seen some core dumps on exit in the sync_execution versions of these tests, both with and without the patch. along with random stopping after 'continue&', i'm not very familiar with target-async so i'm not exactly sure what to make of it. no new failures (not even a spurious one, weird), all new tests pass. 2011-08-11 Matt Rice * event-top.c (cli_command_loop): Replace readline setup with direct call to display_gdb_prompt. (display_gdb_prompt): Do not call observer mechanism during synchronous execution. 2011-08-11 Matt Rice * lib/prompt.exp: New file for testing the first prompt. * gdb.python/py-prompt.exp: Ditto. * gdb.python/py-prompt.c: Ditto (copy of ext-attach.c). --20cf305b1286cad73104aa39958b Content-Type: text/x-patch; charset=US-ASCII; name="foo.diff" Content-Disposition: attachment; filename="foo.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gr7o130x0 Content-length: 14547 ZGlmZiAtLWdpdCBhL2dkYi9ldmVudC10b3AuYyBiL2dkYi9ldmVudC10b3Au YwppbmRleCAzNzg4MjcyOC4uMDIxMDYwMCAxMDA2NDQKLS0tIGEvZ2RiL2V2 ZW50LXRvcC5jCisrKyBiL2dkYi9ldmVudC10b3AuYwpAQCAtMTg1LDI3ICsx ODUsNyBAQCBybF9jYWxsYmFja19yZWFkX2NoYXJfd3JhcHBlciAoZ2RiX2Ns aWVudF9kYXRhIGNsaWVudF9kYXRhKQogdm9pZAogY2xpX2NvbW1hbmRfbG9v cCAodm9pZCkKIHsKLSAgLyogSWYgd2UgYXJlIHVzaW5nIHJlYWRsaW5lLCBz ZXQgdGhpbmdzIHVwIGFuZCBkaXNwbGF5IHRoZSBmaXJzdAotICAgICBwcm9t cHQsIG90aGVyd2lzZSBqdXN0IHByaW50IHRoZSBwcm9tcHQuICAqLwotICBp ZiAoYXN5bmNfY29tbWFuZF9lZGl0aW5nX3ApCi0gICAgewotICAgICAgaW50 IGxlbmd0aDsKLSAgICAgIGNoYXIgKmFfcHJvbXB0OwotICAgICAgY2hhciAq Z2RiX3Byb21wdCA9IGdldF9wcm9tcHQgKDApOwotCi0gICAgICAvKiBUZWxs IHJlYWRsaW5lIHdoYXQgdGhlIHByb21wdCB0byBkaXNwbGF5IGlzIGFuZCB3 aGF0IGZ1bmN0aW9uCi0gICAgICAgICBpdCB3aWxsIG5lZWQgdG8gY2FsbCBh ZnRlciBhIHdob2xlIGxpbmUgaXMgcmVhZC4gIFRoaXMgYWxzbwotICAgICAg ICAgZGlzcGxheXMgdGhlIGZpcnN0IHByb21wdC4gICovCi0gICAgICBsZW5n dGggPSBzdHJsZW4gKGdldF9wcmVmaXggKDApKQotCSsgc3RybGVuIChnZGJf cHJvbXB0KSArIHN0cmxlbiAoZ2V0X3N1ZmZpeCgwKSkgKyAxOwotICAgICAg YV9wcm9tcHQgPSAoY2hhciAqKSBhbGxvY2EgKGxlbmd0aCk7Ci0gICAgICBz dHJjcHkgKGFfcHJvbXB0LCBnZXRfcHJlZml4ICgwKSk7Ci0gICAgICBzdHJj YXQgKGFfcHJvbXB0LCBnZGJfcHJvbXB0KTsKLSAgICAgIHN0cmNhdCAoYV9w cm9tcHQsIGdldF9zdWZmaXggKDApKTsKLSAgICAgIHJsX2NhbGxiYWNrX2hh bmRsZXJfaW5zdGFsbCAoYV9wcm9tcHQsIGlucHV0X2hhbmRsZXIpOwotICAg IH0KLSAgZWxzZQotICAgIGRpc3BsYXlfZ2RiX3Byb21wdCAoMCk7CisgIGRp c3BsYXlfZ2RiX3Byb21wdCAoMCk7CiAKICAgLyogTm93IGl0J3MgdGltZSB0 byBzdGFydCB0aGUgZXZlbnQgbG9vcC4gICovCiAgIHN0YXJ0X2V2ZW50X2xv b3AgKCk7CkBAIC0yNzMsNyArMjUzLDcgQEAgZGlzcGxheV9nZGJfcHJvbXB0 IChjaGFyICpuZXdfcHJvbXB0KQogICAgICBmdW5jdGlvbnMgbWF5IGNoYW5n ZSB0aGUgcHJvbXB0LiAgRG8gbm90IGNhbGwgb2JzZXJ2ZXJzIG9uIGFuCiAg ICAgIGV4cGxpY2l0IHByb21wdCBjaGFuZ2UgYXMgcGFzc2VkIHRvIHRoaXMg ZnVuY3Rpb24sIGFzIHRoaXMgZm9ybXMKICAgICAgYSB0ZW1wb3JhcnkgcHJv bXB0LCBJRSwgZGlzcGxheWVkIGJ1dCBub3Qgc2V0LiAgKi8KLSAgaWYgKCEg bmV3X3Byb21wdCkKKyAgaWYgKCEgc3luY19leGVjdXRpb24gJiYgISBuZXdf cHJvbXB0KQogICAgIHsKICAgICAgIGNoYXIgKnBvc3RfZ2RiX3Byb21wdCA9 IE5VTEw7CiAgICAgICBjaGFyICpwcmVfZ2RiX3Byb21wdCA9IHhzdHJkdXAg KGdldF9wcm9tcHQgKDApKTsKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1wcm9tcHQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1wcm9tcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi44ZDg0ZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LXByb21wdC5jCkBAIC0wLDAgKzEsMzEgQEAK Ky8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVi dWdnZXIuCisKKyAgIENvcHlyaWdodCAyMDA3LCAyMDA5LCAyMDEwLCAyMDEx IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIHByb2dyYW0gaXMgaW50ZW5k ZWQgdG8gYmUgc3RhcnRlZCBvdXRzaWRlIG9mIGdkYiwgYW5kIHRoZW4KKyAg IGF0dGFjaGVkIHRvIGJ5IGdkYi4gIEl0IGxvb3BzIGZvciBhIHdoaWxlLCBi dXQgbm90IGZvcmV2ZXIuICAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisK K2ludCBtYWluICgpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkg PCAxMjA7IGkrKykKKyAgICBzbGVlcCAoMSk7CisKKyAgcmV0dXJuIDA7Cit9 CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktcHJv bXB0LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1wcm9tcHQu ZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxY2Ex MDUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktcHJvbXB0LmV4cApAQCAtMCwwICsxLDEzMSBAQAorIyBDb3B5cmln aHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNtCisjIGZv ciBkZWZpbmluZyB0aGUgcHJvbXB0IGluIFB5dGhvbi4KKworaWYgJHRyYWNl bGV2ZWwgdGhlbiB7CisgICAgc3RyYWNlICR0cmFjZWxldmVsCit9CisKK3Nl dCB0ZXN0ZmlsZSAicHktcHJvbXB0Igorc2V0IHNyY2ZpbGUgJHt0ZXN0Zmls ZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3Rm aWxlfQorCisKK2xvYWRfbGliIGdkYi1weXRob24uZXhwCitsb2FkX2xpYiBw cm9tcHQuZXhwCisKKyMgU3RhcnQgd2l0aCBhIGZyZXNoIGdkYi4KKworZ2Ri X2V4aXQKK2dkYl9zdGFydAorZ2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rp ci8kc3ViZGlyCisKKyMgU2tpcCBhbGwgdGVzdHMgaWYgUHl0aG9uIHNjcmlw dGluZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsgW3NraXBfcHl0aG9uX3Rlc3Rz XSB9IHsgY29udGludWUgfQorZ2RiX2V4aXQKKworaWYgIHsgW2dkYl9jb21w aWxlICIke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7c3JjZmlsZX0iICIke2JpbmZp bGV9IiBleGVjdXRhYmxlIHtkZWJ1Z31dICE9ICIiIH0geworICAgIHVudGVz dGVkIHB5LXByb21wdC5leHAKKyAgICByZXR1cm4gLTEKK30KKworZ2xvYmFs IEdEQkZMQUdTCitzZXQgc2F2ZWRfZ2RiZmxhZ3MgJEdEQkZMQUdTCitzZXQg R0RCRkxBR1MgW2NvbmNhdCAkR0RCRkxBR1MgIiAtZXggXCJzZXQgaGVpZ2h0 IDBcIiJdCitzZXQgR0RCRkxBR1MgW2NvbmNhdCAkR0RCRkxBR1MgIiAtZXgg XCJzZXQgd2lkdGggMFwiIl0KK3NldCBHREJGTEFHUyBbY29uY2F0ICRHREJG TEFHUyAiIC1leCBcInB5dGhvbiBwID0gbGlzdCgpXCIiXQorc2V0IHByb21w dF9mdW5jICJweXRob24gZGVmIGZvbyh4KTogZ2xvYmFsIHA7IHAuYXBwZW5k KHgpOyAgcmV0dXJuIFwnKEZvbykgXCciCitzZXQgR0RCRkxBR1MgW2NvbmNh dCAkR0RCRkxBR1MgIiAtZXggXCIkcHJvbXB0X2Z1bmNcIiJdCitzZXQgR0RC RkxBR1MgW2NvbmNhdCAkR0RCRkxBR1MgIiAtZXggXCJweXRob24gZ2RiLnBy b21wdF9ob29rPWZvb1wiIl0KKworc2V0IHRtcF9nZGJmbGFncyAkR0RCRkxB R1MKK3NldCBnZGJfcHJvbXB0X2ZhaWwgJGdkYl9wcm9tcHQKKworZ2xvYmFs IGdkYl9wcm9tcHQKKyMgRG9lcyBub3QgaW5jbHVkZSB0aGUgc3BhY2UgYXQg dGhlIGVuZCBvZiB0aGUgcHJvbXB0LgorIyBnZGJfdGVzdCBleHBlY3RzIGl0 IG5vdCB0byBiZSB0aGVyZS4KK3NldCBnZGJfcHJvbXB0ICJcWyhcXUZvb1xb KVxdIgorCitzZXQgR0RCRkxBR1MgW2NvbmNhdCAkdG1wX2dkYmZsYWdzICIg LWV4IFwic2V0IGVkaXRpbmcgb25cIiJdCitwcm9tcHRfZ2RiX3N0YXJ0Citn ZGJfdGVzdCAicHl0aG9uIHggPSBsZW4ocCk7IHByaW50IGdkYi5leGVjdXRl KFwic2hvdyBwcm9tcHRcIiwgdG9fc3RyaW5nID0gVHJ1ZSkiIFwKKwkgIi4q cHJvbXB0IGlzIFwiJGdkYl9wcm9tcHQgXCIuKiIgXAorCSAic2hvdyBwcm9t cHQgZ2V0cyB0aGUgY29ycmVjdCByZXN1bHQiCitnZGJfdGVzdCAicHl0aG9u IHByaW50IHgsIGxlbihwKSIgIjEgMiIgXAorCSAicmV0cmlldmluZyB0aGUg cHJvbXB0IGNhdXNlcyBubyBleHRyYSBwcm9tcHRfaG9vayBjYWxscyIKK2dk Yl90ZXN0ICJweXRob24gcHJpbnQgXCInXCIgKyBzdHIocFxbMFxdKSArIFwi J1wiIiAiJyRnZGJfcHJvbXB0X2ZhaWwgJyIgXAorCSAicHJvbXB0X2hvb2sg YXJndW1lbnQgaXMgZGVmYXVsdCBwcm9tcHQuIgorZ2RiX2V4aXQKKworCitz ZXQgR0RCRkxBR1MgW2NvbmNhdCAkdG1wX2dkYmZsYWdzICIgLWV4IFwic2V0 IGVkaXRpbmcgb2ZmXCIiXQorcHJvbXB0X2dkYl9zdGFydAorZ2RiX3Rlc3Qg InB5dGhvbiB4ID0gbGVuKHApOyBwcmludCBnZGIuZXhlY3V0ZShcInNob3cg cHJvbXB0XCIsIHRvX3N0cmluZyA9IFRydWUpIiBcCisJICIuKnByb21wdCBp cyBcIiRnZGJfcHJvbXB0IFwiLioiIFwKKwkgInNob3cgcHJvbXB0IGdldHMg dGhlIGNvcnJlY3QgcmVzdWx0IDIiCitnZGJfdGVzdCAicHl0aG9uIHByaW50 IHgsIGxlbihwKSIgIjEgMiIgXAorCSAicmV0cmlldmluZyB0aGUgcHJvbXB0 IGNhdXNlcyBubyBleHRyYSBwcm9tcHRfaG9vayBjYWxscyAyIgorZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBcIidcIiArIHN0cihwXFswXF0pICsgXCInXCIi ICInJGdkYl9wcm9tcHRfZmFpbCAnIiBcCisJICJwcm9tcHRfaG9vayBhcmd1 bWVudCBpcyBkZWZhdWx0IHByb21wdC4gMiIKK2dkYl9leGl0CisKKyMgU3Rh cnQgdGhlIHByb2dyYW0gcnVubmluZyBhbmQgdGhlbiB3YWl0IGZvciBhIGJp dCwgdG8gYmUgc3VyZQorIyB0aGF0IGl0IGNhbiBiZSBhdHRhY2hlZCB0by4K K3NldCB0ZXN0cGlkIFtldmFsIGV4ZWMgJGJpbmZpbGUgJl0KK2V4ZWMgc2xl ZXAgMgoraWYgeyBbaXN0YXJnZXQgIiotKi1jeWd3aW4qIl0gfSB7CisgICAg IyB0ZXN0cGlkIGlzIHRoZSBDeWd3aW4gUElELCBHREIgdXNlcyB0aGUgV2lu ZG93cyBQSUQsIHdoaWNoIG1pZ2h0IGJlCisgICAgIyBkaWZmZXJlbnQgZHVl IHRvIHRoZSB3YXkgZm9yay9leGVjIHdvcmtzLgorICAgIHNldCB0ZXN0cGlk IFsgZXhlYyBwcyAtZSB8IGdhd2sgInsgaWYgKFwkMSA9PSAkdGVzdHBpZCkg cHJpbnQgXCQ0OyB9IiBdCit9CisKK3NldCBHREJGTEFHUyBbY29uY2F0ICR0 bXBfZ2RiZmxhZ3MgIiAtZXggXCJzZXQgdGFyZ2V0LWFzeW5jIG9uXCIiXQor c2V0IEdEQkZMQUdTIFtjb25jYXQgJEdEQkZMQUdTICIgLWV4IFwic2V0IHBh Z2luYXRpb24gb2ZmXCIiXQorc2V0IEdEQkZMQUdTIFtjb25jYXQgJEdEQkZM QUdTICIgLWV4IFwic2V0IGVkaXRpbmcgb25cIiJdCitzZXQgR0RCRkxBR1Mg W2NvbmNhdCAkR0RCRkxBR1MgIiAtZXggXCJhdHRhY2ggJHRlc3RwaWRcIiJd CitzZXQgR0RCRkxBR1MgW2NvbmNhdCAkR0RCRkxBR1MgIiAtZXggXCJjb250 aW51ZSZcIiJdCisKKyMgc3luY19leGVjdXRpb24gPSAxIGlzX3J1bm5pbmcg PSAxCitwcm9tcHRfZ2RiX3N0YXJ0CitnZGJfdGVzdCAicHl0aG9uIHggPSBs ZW4ocCk7IHByaW50IGdkYi5leGVjdXRlKFwic2hvdyBwcm9tcHRcIiwgdG9f c3RyaW5nID0gVHJ1ZSkiIFwKKwkgIi4qcHJvbXB0IGlzIFwiJGdkYl9wcm9t cHQgXCIuKiIgXAorCSAic2hvdyBwcm9tcHQgZ2V0cyB0aGUgY29ycmVjdCBy ZXN1bHQgMyIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgeCwgbGVuKHApIiAi MSAyIiBcCisJICJyZXRyaWV2aW5nIHRoZSBwcm9tcHQgY2F1c2VzIG5vIGV4 dHJhIHByb21wdF9ob29rIGNhbGxzIDMiCitnZGJfdGVzdCAicHl0aG9uIHBy aW50IFwiJ1wiICsgc3RyKHBcWzBcXSkgKyBcIidcIiIgIickZ2RiX3Byb21w dF9mYWlsICciIFwKKwkgInByb21wdF9ob29rIGFyZ3VtZW50IGlzIGRlZmF1 bHQgcHJvbXB0LiAzIgorZ2RiX2V4aXQKKworc2V0IEdEQkZMQUdTIFtjb25j YXQgJHRtcF9nZGJmbGFncyAiIC1leCBcInNldCB0YXJnZXQtYXN5bmMgb25c IiJdCitzZXQgR0RCRkxBR1MgW2NvbmNhdCAkR0RCRkxBR1MgIiAtZXggXCJz ZXQgcGFnaW5hdGlvbiBvZmZcIiJdCitzZXQgR0RCRkxBR1MgW2NvbmNhdCAk R0RCRkxBR1MgIiAtZXggXCJzZXQgZWRpdGluZyBvblwiIl0KK3NldCBHREJG TEFHUyBbY29uY2F0ICRHREJGTEFHUyAiIC1leCBcImF0dGFjaCAkdGVzdHBp ZFwiIl0KK3NldCBHREJGTEFHUyBbY29uY2F0ICRHREJGTEFHUyAiIC1leCBc ImludGVycnVwdFwiIl0KKworIyBzeW5jX2V4ZWN1dGlvbiA9IDEgaXNfcnVu bmluZyA9IDAKK3Byb21wdF9nZGJfc3RhcnQKK2dkYl90ZXN0ICJweXRob24g eCA9IGxlbihwKTsgcHJpbnQgZ2RiLmV4ZWN1dGUoXCJzaG93IHByb21wdFwi LCB0b19zdHJpbmcgPSBUcnVlKSIgXAorCSAiLipwcm9tcHQgaXMgXCIkZ2Ri X3Byb21wdCBcIi4qIiBcCisJICJzaG93IHByb21wdCBnZXRzIHRoZSBjb3Jy ZWN0IHJlc3VsdCA0IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCB4LCBsZW4o cCkiICIxIDIiIFwKKwkgInJldHJpZXZpbmcgdGhlIHByb21wdCBjYXVzZXMg bm8gZXh0cmEgcHJvbXB0X2hvb2sgY2FsbHMgNCIKK2dkYl90ZXN0ICJweXRo b24gcHJpbnQgXCInXCIgKyBzdHIocFxbMFxdKSArIFwiJ1wiIiAiJyRnZGJf cHJvbXB0X2ZhaWwgJyIgXAorCSAicHJvbXB0X2hvb2sgYXJndW1lbnQgaXMg ZGVmYXVsdCBwcm9tcHQuIDQiCitnZGJfZXhpdAorCitzZXQgR0RCRkxBR1Mg JHNhdmVkX2dkYmZsYWdzCityZXR1cm4gMApkaWZmIC0tZ2l0IGEvZ2RiL3Rl c3RzdWl0ZS9saWIvcHJvbXB0LmV4cCBiL2dkYi90ZXN0c3VpdGUvbGliL3By b21wdC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NzI3YmJiMwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvbGli L3Byb21wdC5leHAKQEAgLTAsMCArMSw5MiBAQAorIyBDb3B5cmlnaHQgKEMp IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisjIFNwZWNpYWxpemVkIHN1YnJvdXRpbmVzIGZvciBs YXVuY2hpbmcgZ2RiIGFuZCB0ZXN0aW5nIHRoZSB2ZXJ5IGZpcnN0IHByb21w dC4KKworCisjCisjIHN0YXJ0IGdkYiAtLSBzdGFydCBnZGIgcnVubmluZywg cHJvbXB0IHByb2NlZHVyZQorIyB0aGlzIHByb2NlZHVyZSBkaWZmZXJzIGZy b20gdGhlIGRlZmF1bHQgaW4gdGhhdCB5b3UgbXVzdCBwYXNzICdzZXQgaGVp Z2h0IDAnLAorIyBhbmQgJ3NldCB3aWR0aCAwJywgeW91cnNlbGYgaW4gR0RC RkxBR1MsIGFuZCBpdCBoYXMgYSBnZGJfcHJvbXB0X2ZhaWwgdmFyaWFibGUs CisjCisjIHVzZXMgcGFzcyBpZiBpdCBzZWVzICRnZGJfcHJvbXB0LCBhbmQg ZmFpbCBpZiBpdCBzZWVzICRnZGJfcHJvbXB0X2ZhaWwuCisjCitwcm9jIGRl ZmF1bHRfcHJvbXB0X2dkYl9zdGFydCB7IH0geworICAgIGdsb2JhbCB2ZXJi b3NlCisgICAgZ2xvYmFsIEdEQgorICAgIGdsb2JhbCBJTlRFUk5BTF9HREJG TEFHUyBHREJGTEFHUworICAgIGdsb2JhbCBnZGJfcHJvbXB0CisgICAgZ2xv YmFsIGdkYl9wcm9tcHRfZmFpbAorICAgIGdsb2JhbCB0aW1lb3V0CisgICAg Z2xvYmFsIGdkYl9zcGF3bl9pZDsKKworICAgIGdkYl9zdG9wX3N1cHByZXNz aW5nX3Rlc3RzOworCisgICAgdmVyYm9zZSAiU3Bhd25pbmcgJEdEQiAkSU5U RVJOQUxfR0RCRkxBR1MgJEdEQkZMQUdTIgorCisgICAgaWYgW2luZm8gZXhp c3RzIGdkYl9zcGF3bl9pZF0geworCXJldHVybiAwOworICAgIH0KKworICAg IGlmICFbaXNfcmVtb3RlIGhvc3RdIHsKKwlpZiB7IFt3aGljaCAkR0RCXSA9 PSAwIH0gdGhlbiB7CisJICAgIHBlcnJvciAiJEdEQiBkb2VzIG5vdCBleGlz dC4iCisJICAgIGV4aXQgMQorCX0KKyAgICB9CisgICAgc2V0IHJlcyBbcmVt b3RlX3NwYXduIGhvc3QgIiRHREIgJElOVEVSTkFMX0dEQkZMQUdTICRHREJG TEFHUyBbaG9zdF9pbmZvIGdkYl9vcHRzXSJdOworICAgIGlmIHsgJHJlcyA8 IDAgfHwgJHJlcyA9PSAiIiB9IHsKKwlwZXJyb3IgIlNwYXduaW5nICRHREIg ZmFpbGVkLiIKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgZ2RiX2V4cGVjdCAz NjAgeworCS1yZSAiLiokZ2RiX3Byb21wdF9mYWlsLiokZ2RiX3Byb21wdF9m YWlsLioiIHsKKwkgICAgZmFpbCAiZG91YmxlIHByb21wdGVkIGZhaWwgcHJv bXB0IgorCX0KKwktcmUgIi4qJGdkYl9wcm9tcHQuKiRnZGJfcHJvbXB0Lioi IHsKKwkgICAgZmFpbCAiZG91YmxlIHByb21wdGVkIgorCX0KKwktcmUgIlxb XHJcblxdJGdkYl9wcm9tcHRfZmFpbCAkIiB7CisJICAgIGZhaWwgIkdEQiBp bml0aWFsaXppbmcgZmlyc3QgcHJvbXB0IgorCX0KKwktcmUgIlxbXHJcblxd JGdkYl9wcm9tcHQgJCIgeworCSAgICBwYXNzICJHREIgaW5pdGlhbGl6aW5n IGZpcnN0IHByb21wdCIKKwl9CisJLXJlICIkZ2RiX3Byb21wdCAkIgl7CisJ ICAgIHBlcnJvciAiR0RCIG5ldmVyIGluaXRpYWxpemVkLiIKKwkgICAgcmV0 dXJuIC0xCisJfQorCS1yZSAiJGdkYl9wcm9tcHRfZmFpbCAkIgl7CisJICAg IHBlcnJvciAiR0RCIG5ldmVyIGluaXRpYWxpemVkLiIKKwkgICAgcmV0dXJu IC0xCisJfQorCXRpbWVvdXQJeworCSAgICBwZXJyb3IgIih0aW1lb3V0KSBH REIgbmV2ZXIgaW5pdGlhbGl6ZWQgYWZ0ZXIgMTAgc2Vjb25kcy4iCisJICAg IHJlbW90ZV9jbG9zZSBob3N0OworCSAgICByZXR1cm4gLTEKKwl9CisgICAg fQorICAgIHNldCBnZGJfc3Bhd25faWQgLTE7CisgICAgcmV0dXJuIDA7Cit9 CisKKyMKKyMgT3ZlcnJpZGFibGUgZnVuY3Rpb24uIFlvdSBjYW4gb3ZlcnJp ZGUgdGhpcyBmdW5jdGlvbiBpbiB5b3VyCisjIGJhc2Vib2FyZCBmaWxlLgor IworcHJvYyBwcm9tcHRfZ2RiX3N0YXJ0IHsgfSB7CisgICAgZGVmYXVsdF9w cm9tcHRfZ2RiX3N0YXJ0Cit9CisK --20cf305b1286cad73104aa39958b--