Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kjcx3-0003BC-7E for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Nov 2020 06:46:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kjcx2-0001uC-6B for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Nov 2020 06:46:20 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kjcx1-0001t8-Qn for pgsql-hackers@lists.postgresql.org; Mon, 30 Nov 2020 06:46:19 +0000 Received: from smtp-fw-6001.amazon.com ([52.95.48.154]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kjcwz-00080H-NG for pgsql-hackers@postgresql.org; Mon, 30 Nov 2020 06:46:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1606718778; x=1638254778; h=to:cc:references:from:message-id:date:mime-version: in-reply-to:subject; bh=eImZ50X58jpGc53BWs0QqsTLchqSw6zxP2THI0QTzoI=; b=fEa0z/xnGHI8KHB9X5zLiD+bKgbqzjyQFGUpJ8sLfX9kkBRw/HHa3lXd hNnGk/pFnde+bTdgBStuM27LiJbJeiT5KIIlmDhuqTp1ihKWSdjO+ysRw ej8pfdwo8NWzT8JvInd/bs8V4wB0kD1U307OcohQiLdSsHlHa75ni9fGG A=; X-Amazon-filename: v9-0007-Log-the-standby-recovery-conflict-waits.patch X-IronPort-AV: E=Sophos;i="5.78,379,1599523200"; d="scan'208";a="69392828" Subject: Re: Add Information during standby recovery conflicts Received: from iad12-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-1d-5dd976cd.us-east-1.amazon.com) ([10.43.8.2]) by smtp-border-fw-out-6001.iad6.amazon.com with ESMTP; 30 Nov 2020 06:46:10 +0000 Received: from EX13D03EUC003.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan3.iad.amazon.com [10.40.163.38]) by email-inbound-relay-1d-5dd976cd.us-east-1.amazon.com (Postfix) with ESMTPS id ABA0DA1B40; Mon, 30 Nov 2020 06:46:07 +0000 (UTC) Received: from 38f9d36c4abb.ant.amazon.com (10.43.160.229) by EX13D03EUC003.ant.amazon.com (10.43.164.192) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 30 Nov 2020 06:46:04 +0000 To: Masahiko Sawada CC: Alvaro Herrera , Fujii Masao , Masahiko Sawada , Kyotaro Horiguchi , PostgreSQL-development References: <20201128173626.GA17184@alvherre.pgsql> From: "Drouvot, Bertrand" Message-ID: Date: Mon, 30 Nov 2020 07:45:59 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------7DF5CDB92CB16F15DCE942ED" Content-Language: en-US X-Originating-IP: [10.43.160.229] X-ClientProxiedBy: EX13D43UWA003.ant.amazon.com (10.43.160.9) To EX13D03EUC003.ant.amazon.com (10.43.164.192) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --------------7DF5CDB92CB16F15DCE942ED Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hi, On 11/30/20 4:41 AM, Masahiko Sawada wrote: > On Sun, Nov 29, 2020 at 3:47 PM Drouvot, Bertrand wrote: >> Hi Alvaro, >> >> On 11/28/20 6:36 PM, Alvaro Herrera wrote: >>> Hi Bertrand, >>> >>> On 2020-Nov-28, Drouvot, Bertrand wrote: >>> >>>> + if (nprocs > 0) >>>> + { >>>> + ereport(LOG, >>>> + (errmsg("recovery still waiting after %ld.%03d ms: %s", >>>> + msecs, usecs, _(get_recovery_conflict_desc(reason))), >>>> + (errdetail_log_plural("Conflicting process: %s.", >>>> + "Conflicting processes: %s.", >>>> + nprocs, buf.data)))); >>>> + } >>>> + else >>>> + { >>>> + ereport(LOG, >>>> + (errmsg("recovery still waiting after %ld.%03d ms: %s", >>>> + msecs, usecs, _(get_recovery_conflict_desc(reason))))); >>>> + } >>>> + >>>> + pfree(buf.data); >>>> + } >>>> + else >>>> + ereport(LOG, >>>> + (errmsg("recovery still waiting after %ld.%03d ms: %s", >>>> + msecs, usecs, _(get_recovery_conflict_desc(reason))))); >>>> +} >>> Another trivial stylistic point is that you can collapse all these >>> ereport calls into one, with something like >>> >>> ereport(LOG, >>> errmsg("recovery still waiting after ...", opts), >>> waitlist != NULL ? errdetail_log_plural("foo bar baz", opts) : 0); >>> >>> where the "waitlist" has been constructed beforehand, or is set to NULL >>> if there's no process list. >> Nice! >> >>>> + switch (reason) >>>> + { >>>> + case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN: >>>> + reasonDesc = gettext_noop("for recovery conflict on buffer pin"); >>>> + break; >>> Pure bikeshedding after discussing this with my pillow: I think I'd get >>> rid of the initial "for" in these messages. >> both comments implemented in the new attached version. >> > Thank you for updating the patch! > > + /* Also, set deadlock timeout for logging purpose if necessary */ > + if (log_recovery_conflict_waits && !need_log) > + { > + timeouts[cnt].id = STANDBY_TIMEOUT; > + timeouts[cnt].type = TMPARAM_AFTER; > + timeouts[cnt].delay_ms = DeadlockTimeout; > + cnt++; > + } > > You changed to 'need_log' but this condition seems not correct. I > think we need to set this timeout when both log_recovery_conflict and > need_log is true. Nice catch! In fact it behaves correctly, that's jut the 'need_log' name that is miss leading: I renamed it to 'already_logged' in the new attached version. > The rest of the patch looks good to me. Great! Thanks Bertrand --------------7DF5CDB92CB16F15DCE942ED Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v9-0007-Log-the-standby-recovery-conflict-waits.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v9-0007-Log-the-standby-recovery-conflict-waits.patch" IGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAyMiAr KysKIGRvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5zZ21sICAgICAgICAgICB8ICAg NiArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAg MTggKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAg fCAyMDkgKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMgICAgICAgICAgICAgICB8ICAzNSArKysrLQogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWMuYyAgICAgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2luY2x1ZGUv c3RvcmFnZS9zdGFuZGJ5LmggICAgICAgICAgICAgICAgIHwgICA1ICstCiA4IGZpbGVzIGNo YW5nZWQsIDI2OCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApp bmRleCBlZTkxNDc0MGNjLi4zYWE4OTJjMGYzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC02ODM5LDYg KzY4MzksMjggQEAgbG9nX2xpbmVfcHJlZml4ID0gJyVtIFslcF0gJXEldUAlZC8lYSAnCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtbG9nLXJlY292ZXJ5LWNvbmZsaWN0LXdhaXRzIiB4cmVmbGFiZWw9 ImxvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0cyI+CisgICAgICA8dGVybT48dmFybmFtZT5s b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90 eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bG9n X3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFt ZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBDb250cm9scyB3aGV0aGVy IGEgbG9nIG1lc3NhZ2UgaXMgcHJvZHVjZWQgd2hlbiB0aGUgc3RhcnR1cCBwcm9jZXNzCisg ICAgICAgIGlzIHdhaXRpbmcgbG9uZ2VyIHRoYW4gPHZhcm5hbWU+ZGVhZGxvY2tfdGltZW91 dDwvdmFybmFtZT4KKyAgICAgICAgZm9yIHJlY292ZXJ5IGNvbmZsaWN0cy4gIFRoaXMgaXMg dXNlZnVsIGluIGRldGVybWluaW5nIGlmIHJlY292ZXJ5CisgICAgICAgIGNvbmZsaWN0cyBw cmV2ZW50IHRoZSByZWNvdmVyeSBmcm9tIGFwcGx5aW5nIFdBTC4KKyAgICAgICA8L3BhcmE+ CisKKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b2Zm PC9saXRlcmFsPi4gIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldAorICAgICAgICBp biB0aGUgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24g dGhlIHNlcnZlcgorICAgICAgICBjb21tYW5kIGxpbmUuCisgICAgICAgPC9wYXJhPgorICAg ICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0iZ3VjLWxvZy1wYXJhbWV0ZXItbWF4LWxlbmd0aCIgeHJlZmxhYmVsPSJsb2df cGFyYW1ldGVyX21heF9sZW5ndGgiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+bG9nX3BhcmFt ZXRlcl9tYXhfbGVuZ3RoPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCiAgICAg ICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2hpZ2gtYXZhaWxhYmls aXR5LnNnbWwgYi9kb2Mvc3JjL3NnbWwvaGlnaC1hdmFpbGFiaWxpdHkuc2dtbAppbmRleCA4 NmRhODRmY2U3Li4zZGNiMzQxNDNhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaGlnaC1h dmFpbGFiaWxpdHkuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaGlnaC1hdmFpbGFiaWxpdHku c2dtbApAQCAtMjEwNCw2ICsyMTA0LDEyIEBAIGlmICghdHJpZ2dlcmVkKQogICAgIHNlcnZl ci4gVGhlIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfZGF0YWJhc2U8L3N0cnVjdG5hbWU+IHN5c3Rl bSB2aWV3IGFsc28gY29udGFpbnMKICAgICBzdW1tYXJ5IGluZm9ybWF0aW9uLgogICAgPC9w YXJhPgorCisgICA8cGFyYT4KKyAgICBVc2VycyBjYW4gY29udHJvbCB3aGV0aGVyIGEgbG9n IG1lc3NhZ2UgaXMgcHJvZHVjZWQgd2hlbiBXQUwgcmVwbGF5IGlzIHdhaXRpbmcKKyAgICBs b25nZXIgdGhhbiA8dmFybmFtZT5kZWFkbG9ja190aW1lb3V0PC92YXJuYW1lPiBmb3IgY29u ZmxpY3RzLiBUaGlzCisgICAgaXMgY29udHJvbGxlZCBieSB0aGUgPHhyZWYgbGlua2VuZD0i Z3VjLWxvZy1yZWNvdmVyeS1jb25mbGljdC13YWl0cyIvPiBwYXJhbWV0ZXIuCisgICA8L3Bh cmE+CiAgIDwvc2VjdDI+CiAKICAgPHNlY3QyIGlkPSJob3Qtc3RhbmRieS1hZG1pbiI+CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGU1NDlmYTFkMzAuLjVhOTc0 MGFiNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0zODA4LDYg KzM4MDgsOCBAQCBMb2NrQnVmZmVyRm9yQ2xlYW51cChCdWZmZXIgYnVmZmVyKQogewogCUJ1 ZmZlckRlc2MgKmJ1ZkhkcjsKIAljaGFyCSAgICpuZXdfc3RhdHVzID0gTlVMTDsKKwlUaW1l c3RhbXBUeiB3YWl0U3RhcnQgPSAwOworCWJvb2wgICAgICAgIGxvZ2dlZF9yZWNvdmVyeV9j b25mbGljdCA9IGZhbHNlOwogCiAJQXNzZXJ0KEJ1ZmZlcklzUGlubmVkKGJ1ZmZlcikpOwog CUFzc2VydChQaW5Db3VudFdhaXRCdWYgPT0gTlVMTCk7CkBAIC0zODI5LDYgKzM4MzEsMTAg QEAgTG9ja0J1ZmZlckZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcikKIAogCWJ1ZkhkciA9IEdl dEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CiAKKwkvKiBTZXQgd2FpdCBzdGFydCB0 aW1lc3RhbXAgaWYgbG9nZ2luZyBpcyBlbmFibGVkICovCisJaWYgKGxvZ19yZWNvdmVyeV9j b25mbGljdF93YWl0cykKKwkJd2FpdFN0YXJ0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwor CiAJZm9yICg7OykKIAl7CiAJCXVpbnQzMgkJYnVmX3N0YXRlOwpAQCAtMzg4MSw2ICszODg3 LDE4IEBAIExvY2tCdWZmZXJGb3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiAJCQkJbmV3X3N0 YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNhdGUgb2ZmICIgd2FpdGluZyIgKi8KIAkJCX0K IAorCQkJaWYgKHdhaXRTdGFydCA+IDAgJiYgIWxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCkK KwkJCXsKKwkJCQlUaW1lc3RhbXBUeiBjdXJfdHMgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7 CisJCQkJaWYgKFRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHdhaXRTdGFydCwgY3VyX3Rz LAorCQkJCQkJCQkJCSAgIERlYWRsb2NrVGltZW91dCkpCisJCQkJeworCQkJCQlBc3NlcnQo bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzKTsKKwkJCQkJTG9nUmVjb3ZlcnlDb25mbGlj dChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTiwKKwkJCQkJCQkJCQl3YWl0 U3RhcnQsIGN1cl90cywgTlVMTCk7CisJCQkJCWxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCA9 IHRydWU7CisJCQkJfQorCQkJfQogCQkJLyogUHVibGlzaCB0aGUgYnVmaWQgdGhhdCBTdGFy dHVwIHByb2Nlc3Mgd2FpdHMgb24gKi8KIAkJCVNldFN0YXJ0dXBCdWZmZXJQaW5XYWl0QnVm SWQoYnVmZmVyIC0gMSk7CiAJCQkvKiBTZXQgYWxhcm0gYW5kIHRoZW4gd2FpdCB0byBiZSBz aWduYWxlZCBieSBVbnBpbkJ1ZmZlcigpICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5 LmMKaW5kZXggNTJiMjgwOWRhYy4uNGQ4YzhmNGMxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3N0YW5kYnkuYwpAQCAtMzksNiArMzksNyBAQAogaW50CQkJdmFjdXVtX2RlZmVyX2NsZWFu dXBfYWdlOwogaW50CQkJbWF4X3N0YW5kYnlfYXJjaGl2ZV9kZWxheSA9IDMwICogMTAwMDsK IGludAkJCW1heF9zdGFuZGJ5X3N0cmVhbWluZ19kZWxheSA9IDMwICogMTAwMDsKK2Jvb2wJ CWxvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0cyA9IGZhbHNlOwogCiBzdGF0aWMgSFRBQiAq UmVjb3ZlcnlMb2NrTGlzdHM7CiAKQEAgLTQ5LDYgKzUwLDcgQEAgc3RhdGljIHZvaWQgUmVz b2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoVmlydHVhbFhJRHMoVmlydHVhbFRyYW5zYWN0aW9u SWQgKndhaXRsaXMKIHN0YXRpYyB2b2lkIFNlbmRSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZl clBpbihQcm9jU2lnbmFsUmVhc29uIHJlYXNvbik7CiBzdGF0aWMgWExvZ1JlY1B0ciBMb2dD dXJyZW50UnVubmluZ1hhY3RzKFJ1bm5pbmdUcmFuc2FjdGlvbnMgQ3VyclJ1bm5pbmdYYWN0 cyk7CiBzdGF0aWMgdm9pZCBMb2dBY2Nlc3NFeGNsdXNpdmVMb2NrcyhpbnQgbmxvY2tzLCB4 bF9zdGFuZGJ5X2xvY2sgKmxvY2tzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcmVjb3Zl cnlfY29uZmxpY3RfZGVzYyhQcm9jU2lnbmFsUmVhc29uIHJlYXNvbik7CiAKIC8qCiAgKiBL ZWVwIHRyYWNrIG9mIGFsbCB0aGUgbG9ja3Mgb3duZWQgYnkgYSBnaXZlbiB0cmFuc2FjdGlv bi4KQEAgLTIxNSwxNSArMjE3LDc1IEBAIFdhaXRFeGNlZWRzTWF4U3RhbmRieURlbGF5KHVp bnQzMiB3YWl0X2V2ZW50X2luZm8pCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogTG9n IHRoZSByZWNvdmVyeSBjb25mbGljdC4KKyAqCisgKiB3YWl0X3N0YXJ0IGlzIHRoZSB0aW1l c3RhbXAgd2hlbiB0aGUgY2FsbGVyIHN0YXJ0ZWQgdG8gd2FpdC4KKyAqIGN1cl90cyBpcyB0 aGUgdGltZXN0YW1wIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQuCisgKiBU aGlzIGZ1bmN0aW9uIGFsc28gcmVwb3J0cyB0aGUgZGV0YWlscyBhYm91dCB0aGUgY29uZmxp Y3RpbmcKKyAqIHByb2Nlc3MgaWRzIGlmICp3YWl0X2xpc3QgaXMgbm90IE5VTEwuCisgKi8K K3ZvaWQKK0xvZ1JlY292ZXJ5Q29uZmxpY3QoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24sIFRp bWVzdGFtcFR6IHdhaXRfc3RhcnQsCisJCQkJCVRpbWVzdGFtcFR6IGN1cl90cywgVmlydHVh bFRyYW5zYWN0aW9uSWQgKndhaXRfbGlzdCkKK3sKKwlsb25nCQlzZWNzOworCWludAkJCXVz ZWNzOworCWxvbmcJCW1zZWNzOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlpbnQJbnByb2Nz ID0gMDsKKworCVRpbWVzdGFtcERpZmZlcmVuY2Uod2FpdF9zdGFydCwgY3VyX3RzLCAmc2Vj cywgJnVzZWNzKTsKKwltc2VjcyA9IHNlY3MgKiAxMDAwICsgdXNlY3MgLyAxMDAwOworCXVz ZWNzID0gdXNlY3MgJSAxMDAwOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwlpZiAo d2FpdF9saXN0KQorCXsKKwkJVmlydHVhbFRyYW5zYWN0aW9uSWQgKnZ4aWRzOworCisKKwkJ LyogY29uc3RydWN0IGEgc3RyaW5nIG9mIGxpc3Qgb2YgdGhlIGNvbmZsaWN0ZWQgcHJvY2Vz c2VzICovCisJCXZ4aWRzID0gd2FpdF9saXN0OworCQl3aGlsZSAoVmlydHVhbFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKCp2eGlkcykpCisJCXsKKwkJCVBHUFJPQyAqcHJvYyA9IEJhY2tlbmRJ ZEdldFByb2ModnhpZHMtPmJhY2tlbmRJZCk7CisKKwkJCWlmIChwcm9jKQorCQkJeworCQkJ CWlmIChucHJvY3MgPT0gMCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCBw cm9jLT5waWQpOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAl ZCIsIHByb2MtPnBpZCk7CisKKwkJCQlucHJvY3MrKzsKKwkJCX0KKworCQkJdnhpZHMrKzsK KwkJfQorCisJfQorCisJZXJlcG9ydChMT0csCisJCQllcnJtc2coInJlY292ZXJ5IHN0aWxs IHdhaXRpbmcgYWZ0ZXIgJWxkLiUwM2QgbXM6ICVzIiwKKwkJCQkJbXNlY3MsIHVzZWNzLCBf KGdldF9yZWNvdmVyeV9jb25mbGljdF9kZXNjKHJlYXNvbikpKSwKKwkJCXdhaXRfbGlzdCAh PSBOVUxMID8gZXJyZGV0YWlsX2xvZ19wbHVyYWwoIkNvbmZsaWN0aW5nIHByb2Nlc3M6ICVz LiIsCisJCQkJCQkJCQkJCQkJIkNvbmZsaWN0aW5nIHByb2Nlc3NlczogJXMuIiwKKwkJCQkJ CQkJCQkJCQlucHJvY3MsIGJ1Zi5kYXRhKSA6IDApOworCXBmcmVlKGJ1Zi5kYXRhKTsKK30K KwogLyoKICAqIFRoaXMgaXMgdGhlIG1haW4gZXhlY3V0aW9uZXIgZm9yIGFueSBxdWVyeSBi YWNrZW5kIHRoYXQgY29uZmxpY3RzIHdpdGgKICAqIHJlY292ZXJ5IHByb2Nlc3NpbmcuIEp1 ZGdlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCBvbiBpdCB3aXRoaW4KICAqIGEgc3Bl Y2lmaWMgcm1nci4gSGVyZSB3ZSBqdXN0IGlzc3VlIHRoZSBvcmRlcnMgdG8gdGhlIHByb2Nz LiBUaGUgcHJvY3MKICAqIHRoZW4gdGhyb3cgdGhlIHJlcXVpcmVkIGVycm9yIGFzIGluc3Ry dWN0ZWQuCiAgKgotICogSWYgcmVwb3J0X3dhaXRpbmcgaXMgdHJ1ZSwgIndhaXRpbmciIGlz IHJlcG9ydGVkIGluIFBTIGRpc3BsYXkgaWYgbmVjZXNzYXJ5LgotICogSWYgdGhlIGNhbGxl ciBoYXMgYWxyZWFkeSByZXBvcnRlZCB0aGF0LCByZXBvcnRfd2FpdGluZyBzaG91bGQgYmUg ZmFsc2UuCi0gKiBPdGhlcndpc2UsICJ3YWl0aW5nIiBpcyByZXBvcnRlZCB0d2ljZSB1bmV4 cGVjdGVkbHkuCisgKiBJZiByZXBvcnRfd2FpdGluZyBpcyB0cnVlLCAid2FpdGluZyIgaXMg cmVwb3J0ZWQgaW4gUFMgZGlzcGxheSBhbmQgbG9nCisgKiB0aGUgd2FpdHMgZm9yIHRoZSBy ZWNvdmVyeSBjb25mbGljdCBpZiBuZWNlc3NhcnkuICBJZiB0aGUgY2FsbGVyIGhhcyBhbHJl YWR5CisgKiByZXBvcnRlZCB0aGF0LCByZXBvcnRfd2FpdGluZyBzaG91bGQgYmUgZmFsc2Uu ICBPdGhlcndpc2UsIGJvdGggYXJlIHJlcG9ydGVkCisgKiB0d2ljZSB1bmV4cGVjdGVkbHku CiAgKi8KIHN0YXRpYyB2b2lkCiBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFs WElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCkBAIC0yMzIsMTIgKzI5NCwx NCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJh bnNhY3Rpb25JZCAqd2FpdGxpc3QsCiB7CiAJVGltZXN0YW1wVHogd2FpdFN0YXJ0ID0gMDsK IAljaGFyCSAgICpuZXdfc3RhdHVzOworCWJvb2wgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0 ID0gZmFsc2U7CiAKIAkvKiBGYXN0IGV4aXQsIHRvIGF2b2lkIGEga2VybmVsIGNhbGwgaWYg dGhlcmUncyBubyB3b3JrIHRvIGJlIGRvbmUuICovCiAJaWYgKCFWaXJ0dWFsVHJhbnNhY3Rp b25JZElzVmFsaWQoKndhaXRsaXN0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHJlcG9ydF93YWl0 aW5nKQorCS8qIFNldCB0aGUgd2FpdCBzdGFydCB0aW1lc3RhbXAgZm9yIHJlcG9ydGluZyAq LworCWlmIChyZXBvcnRfd2FpdGluZyAmJiAobG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0IHx8 IHVwZGF0ZV9wcm9jZXNzX3RpdGxlKSkKIAkJd2FpdFN0YXJ0ID0gR2V0Q3VycmVudFRpbWVz dGFtcCgpOwogCW5ld19zdGF0dXMgPSBOVUxMOwkJCS8qIHdlIGhhdmVuJ3QgY2hhbmdlZCB0 aGUgcHMgZGlzcGxheSAqLwogCkBAIC0yNDksMjMgKzMxMyw0MyBAQCBSZXNvbHZlUmVjb3Zl cnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxp c3QsCiAJCS8qIHdhaXQgdW50aWwgdGhlIHZpcnR1YWwgeGlkIGlzIGdvbmUgKi8KIAkJd2hp bGUgKCFWaXJ0dWFsWGFjdExvY2soKndhaXRsaXN0LCBmYWxzZSkpCiAJCXsKLQkJCS8qCi0J CQkgKiBSZXBvcnQgdmlhIHBzIGlmIHdlIGhhdmUgYmVlbiB3YWl0aW5nIGZvciBtb3JlIHRo YW4gNTAwIG1zZWMKLQkJCSAqIChzaG91bGQgdGhhdCBiZSBjb25maWd1cmFibGU/KQotCQkJ ICovCi0JCQlpZiAodXBkYXRlX3Byb2Nlc3NfdGl0bGUgJiYgbmV3X3N0YXR1cyA9PSBOVUxM ICYmIHJlcG9ydF93YWl0aW5nICYmCi0JCQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMo d2FpdFN0YXJ0LCBHZXRDdXJyZW50VGltZXN0YW1wKCksCi0JCQkJCQkJCQkJICAgNTAwKSkK KwkJCWlmICh3YWl0U3RhcnQgPiAwKQogCQkJewotCQkJCWNvbnN0IGNoYXIgKm9sZF9zdGF0 dXM7Ci0JCQkJaW50CQkJbGVuOwotCi0JCQkJb2xkX3N0YXR1cyA9IGdldF9wc19kaXNwbGF5 KCZsZW4pOwotCQkJCW5ld19zdGF0dXMgPSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCArIDEp OwotCQkJCW1lbWNweShuZXdfc3RhdHVzLCBvbGRfc3RhdHVzLCBsZW4pOwotCQkJCXN0cmNw eShuZXdfc3RhdHVzICsgbGVuLCAiIHdhaXRpbmciKTsKLQkJCQlzZXRfcHNfZGlzcGxheShu ZXdfc3RhdHVzKTsKLQkJCQluZXdfc3RhdHVzW2xlbl0gPSAnXDAnOyAvKiB0cnVuY2F0ZSBv ZmYgIiB3YWl0aW5nIiAqLworCQkJCVRpbWVzdGFtcFR6IGN1cl90cyA9IDA7CisJCQkJYm9v bCBtYXliZV9sb2dfY29uZmxpY3QgPQorCQkJCQkobG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dh aXRzICYmICFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpOworCQkJCWJvb2wgbWF5YmVfdXBk YXRlX3BzdGl0bGUgPQorCQkJCQkodXBkYXRlX3Byb2Nlc3NfdGl0bGUgJiYgbmV3X3N0YXR1 cyA9PSBOVUxMKTsKKworCQkJCS8qIEdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgaWYgbm90 IHJlcG9ydCB5ZXQgKi8KKwkJCQlpZiAobWF5YmVfbG9nX2NvbmZsaWN0IHx8IG1heWJlX3Vw ZGF0ZV9wc3RpdGxlKQorCQkJCQljdXJfdHMgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisK KwkJCQkvKiBMb2cgdGhlIHJlY292ZXJ5IGNvbmZsaWN0IGlmIG5lY2Vzc2FyeSAqLworCQkJ CWlmIChtYXliZV9sb2dfY29uZmxpY3QgJiYKKwkJCQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4 Y2VlZHMod2FpdFN0YXJ0LCBjdXJfdHMsIERlYWRsb2NrVGltZW91dCkpCisJCQkJeworCQkJ CQlMb2dSZWNvdmVyeUNvbmZsaWN0KHJlYXNvbiwgd2FpdFN0YXJ0LCBjdXJfdHMsIHdhaXRs aXN0KTsKKwkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQl9CisK KwkJCQkvKgorCQkJCSAqIFJlcG9ydCB2aWEgcHMgaWYgd2UgaGF2ZSBiZWVuIHdhaXRpbmcg Zm9yIG1vcmUgdGhhbiA1MDAgbXNlYworCQkJCSAqIChzaG91bGQgdGhhdCBiZSBjb25maWd1 cmFibGU/KQorCQkJCSAqLworCQkJCWlmIChtYXliZV91cGRhdGVfcHN0aXRsZSAmJgorCQkJ CQlUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyh3YWl0U3RhcnQsIGN1cl90cywgNTAwKSkK KwkJCQl7CisJCQkJCWNvbnN0IGNoYXIgKm9sZF9zdGF0dXM7CisJCQkJCWludAkJCWxlbjsK KworCQkJCQlvbGRfc3RhdHVzID0gZ2V0X3BzX2Rpc3BsYXkoJmxlbik7CisJCQkJCW5ld19z dGF0dXMgPSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCArIDEpOworCQkJCQltZW1jcHkobmV3 X3N0YXR1cywgb2xkX3N0YXR1cywgbGVuKTsKKwkJCQkJc3RyY3B5KG5ld19zdGF0dXMgKyBs ZW4sICIgd2FpdGluZyIpOworCQkJCQlzZXRfcHNfZGlzcGxheShuZXdfc3RhdHVzKTsKKwkJ CQkJbmV3X3N0YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNhdGUgb2ZmICIgd2FpdGluZyIg Ki8KKwkJCQl9CiAJCQl9CiAKIAkJCS8qIElzIGl0IHRpbWUgdG8ga2lsbCBpdD8gKi8KQEAg LTM5OCw5ICs0ODIsMTIgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2Uo T2lkIGRiaWQpCiAgKgogICogRGVhZGxvY2tzIGludm9sdmluZyB0aGUgU3RhcnR1cCBwcm9j ZXNzIGFuZCBhbiBvcmRpbmFyeSBiYWNrZW5kIHByb2Nlc3MKICAqIHdpbGwgYmUgZGV0ZWN0 ZWQgYnkgdGhlIGRlYWRsb2NrIGRldGVjdG9yIHdpdGhpbiB0aGUgb3JkaW5hcnkgYmFja2Vu ZC4KKyAqCisgKiBhbHJlYWR5X2xvZ2dlZCBpcyB1c2VkIHRvIHNldCB0aGUgZGVhZGxvY2sg dGltZW91dCBmb3IgbG9nZ2luZyBwdXJwb3NlCisgKiBvbmx5IHdoZW4gdGhlIG1lc3NhZ2Ug aGFzIG5vdCBiZWVuIGxvZ2dlZCB5ZXQuCiAgKi8KIHZvaWQKLVJlc29sdmVSZWNvdmVyeUNv bmZsaWN0V2l0aExvY2soTE9DS1RBRyBsb2NrdGFnKQorUmVzb2x2ZVJlY292ZXJ5Q29uZmxp Y3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgYWxyZWFkeV9sb2dnZWQpCiB7CiAJ VGltZXN0YW1wVHogbHRpbWU7CiAKQEAgLTQwOCw3ICs0OTUsMzUgQEAgUmVzb2x2ZVJlY292 ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcpCiAKIAlsdGltZSA9IEdldFN0 YW5kYnlMaW1pdFRpbWUoKTsKIAotCWlmIChHZXRDdXJyZW50VGltZXN0YW1wKCkgPj0gbHRp bWUpCisJaWYgKGx0aW1lID09IDAgfHwgR2V0Q3VycmVudFRpbWVzdGFtcCgpIDwgbHRpbWUp CisJeworCQlFbmFibGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRzWzJdOworCQlpbnQgY250ID0g MDsKKworCQkvKgorCQkgKiBXYWl0IChvciB3YWl0IGFnYWluKSB1bnRpbCBsdGltZQorCQkg Ki8KKwkJaWYgKGx0aW1lICE9IDApCisJCXsKKwkJCXRpbWVvdXRzW2NudF0uaWQgPSBTVEFO REJZX0xPQ0tfVElNRU9VVDsKKwkJCXRpbWVvdXRzW2NudF0udHlwZSA9IFRNUEFSQU1fQVQ7 CisJCQl0aW1lb3V0c1tjbnRdLmZpbl90aW1lID0gbHRpbWU7CisJCQljbnQrKzsKKwkJfQor CisJCS8qIEFsc28sIHNldCBkZWFkbG9jayB0aW1lb3V0IGZvciBsb2dnaW5nIHB1cnBvc2Ug aWYgbmVjZXNzYXJ5ICovCisJCWlmIChsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMgJiYg IWFscmVhZHlfbG9nZ2VkKQorCQl7CisJCQl0aW1lb3V0c1tjbnRdLmlkID0gU1RBTkRCWV9U SU1FT1VUOworCQkJdGltZW91dHNbY250XS50eXBlID0gVE1QQVJBTV9BRlRFUjsKKwkJCXRp bWVvdXRzW2NudF0uZGVsYXlfbXMgPSBEZWFkbG9ja1RpbWVvdXQ7CisJCQljbnQrKzsKKwkJ fQorCisJCWlmIChjbnQgPiAwKQorCQkJZW5hYmxlX3RpbWVvdXRzKHRpbWVvdXRzLCBjbnQp OworCX0KKwllbHNlCiAJewogCQkvKgogCQkgKiBXZSdyZSBhbHJlYWR5IGJlaGluZCwgc28g Y2xlYXIgYSBwYXRoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCkBAIC00MTksMjYgKzUzNCwx NSBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhMb2NrKExPQ0tUQUcgbG9ja3RhZykK IAogCQkvKgogCQkgKiBQcmV2ZW50IFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1 YWxYSURzKCkgZnJvbSByZXBvcnRpbmcKLQkJICogIndhaXRpbmciIGluIFBTIGRpc3BsYXkg YnkgZGlzYWJsaW5nIGl0cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZwotCQkgKiBiZWNhdXNl IHRoZSBjYWxsZXIsIFdhaXRPbkxvY2soKSwgaGFzIGFscmVhZHkgcmVwb3J0ZWQgdGhhdC4K KwkJICogIndhaXRpbmciIGluIFBTIGRpc3BsYXkgYW5kIGxvZ2dpbmcgcmVjb3ZlcnkgY29u ZmxpY3QgYnkgZGlzYWJsaW5nCisJCSAqIGl0cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZyBi ZWNhdXNlIHRoZSBjYWxsZXJzIG1heSBoYXZlIGFscmVhZHkKKwkJICogcmVwb3J0ZWQgdGhh dC4KIAkJICovCiAJCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKGJh Y2tlbmRzLAogCQkJCQkJCQkJCQkgICBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0ss CiAJCQkJCQkJCQkJCSAgIFBHX1dBSVRfTE9DSyB8IGxvY2t0YWcubG9ja3RhZ190eXBlLAog CQkJCQkJCQkJCQkgICBmYWxzZSk7CiAJfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFdhaXQg KG9yIHdhaXQgYWdhaW4pIHVudGlsIGx0aW1lCi0JCSAqLwotCQlFbmFibGVUaW1lb3V0UGFy YW1zIHRpbWVvdXRzWzFdOwotCi0JCXRpbWVvdXRzWzBdLmlkID0gU1RBTkRCWV9MT0NLX1RJ TUVPVVQ7Ci0JCXRpbWVvdXRzWzBdLnR5cGUgPSBUTVBBUkFNX0FUOwotCQl0aW1lb3V0c1sw XS5maW5fdGltZSA9IGx0aW1lOwotCQllbmFibGVfdGltZW91dHModGltZW91dHMsIDEpOwot CX0KIAogCS8qIFdhaXQgdG8gYmUgc2lnbmFsZWQgYnkgdGhlIHJlbGVhc2Ugb2YgdGhlIFJl bGF0aW9uIExvY2sgKi8KIAlQcm9jV2FpdEZvclNpZ25hbChQR19XQUlUX0xPQ0sgfCBsb2Nr dGFnLmxvY2t0YWdfdHlwZSk7CkBAIC0xMTE2LDMgKzEyMjAsMzYgQEAgTG9nU3RhbmRieUlu dmFsaWRhdGlvbnMoaW50IG5tc2dzLCBTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICptc2dz LAogCQkJCQkgbm1zZ3MgKiBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkpOwog CVhMb2dJbnNlcnQoUk1fU1RBTkRCWV9JRCwgWExPR19JTlZBTElEQVRJT05TKTsKIH0KKwor LyogUmV0dXJuIHRoZSBkZXNjcmlwdGlvbiBvZiByZWNvdmVyeSBjb25mbGljdCAqLworc3Rh dGljIGNvbnN0IGNoYXIgKgorZ2V0X3JlY292ZXJ5X2NvbmZsaWN0X2Rlc2MoUHJvY1NpZ25h bFJlYXNvbiByZWFzb24pCit7CisJY29uc3QgY2hhciAqcmVhc29uRGVzYyA9IGdldHRleHRf bm9vcCgidW5rbm93biByZWFzb24iKTsKKworCXN3aXRjaCAocmVhc29uKQorCXsKKwkJY2Fz ZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTjoKKwkJCXJlYXNvbkRlc2Mg PSBnZXR0ZXh0X25vb3AoInJlY292ZXJ5IGNvbmZsaWN0IG9uIGJ1ZmZlciBwaW4iKTsKKwkJ CWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9DSzoKKwkJCXJl YXNvbkRlc2MgPSBnZXR0ZXh0X25vb3AoInJlY292ZXJ5IGNvbmZsaWN0IG9uIGxvY2siKTsK KwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVTUEFD RToKKwkJCXJlYXNvbkRlc2MgPSBnZXR0ZXh0X25vb3AoInJlY292ZXJ5IGNvbmZsaWN0IG9u IHRhYmxlc3BhY2UiKTsKKwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfU05BUFNIT1Q6CisJCQlyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJyZWNvdmVy eSBjb25mbGljdCBvbiBzbmFwc2hvdCIpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPQ1NJR19S RUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLOgorCQkJcmVhc29uRGVzYyA9IGdl dHRleHRfbm9vcCgicmVjb3ZlcnkgY29uZmxpY3Qgb24gYnVmZmVyIGRlYWRsb2NrIik7CisJ CQlicmVhazsKKwkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFOgor CQkJcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgicmVjb3ZlcnkgY29uZmxpY3Qgb24gZGF0 YWJhc2UiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0 dXJuIHJlYXNvbkRlc2M7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCA4ODU2 NmJkOWZhLi42ZDA4NzI2YmU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEw NjMsOCArMTA2MywxMCBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tN ZXRob2QgbG9ja01ldGhvZFRhYmxlKQogCUxXTG9jawkgICAqcGFydGl0aW9uTG9jayA9IExv Y2tIYXNoUGFydGl0aW9uTG9jayhoYXNoY29kZSk7CiAJUFJPQ19RVUVVRSAqd2FpdFF1ZXVl ID0gJihsb2NrLT53YWl0UHJvY3MpOwogCUxPQ0tNQVNLCW15SGVsZExvY2tzID0gTXlQcm9j LT5oZWxkTG9ja3M7CisJVGltZXN0YW1wVHogc3RhbmRieVdhaXRTdGFydCA9IDA7CiAJYm9v bAkJZWFybHlfZGVhZGxvY2sgPSBmYWxzZTsKIAlib29sCQlhbGxvd19hdXRvdmFjdXVtX2Nh bmNlbCA9IHRydWU7CisJYm9vbCAgICAgICAgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0g ZmFsc2U7CiAJUHJvY1dhaXRTdGF0dXMgbXlXYWl0U3RhdHVzOwogCVBHUFJPQwkgICAqcHJv YzsKIAlQR1BST0MJICAgKmxlYWRlciA9IE15UHJvYy0+bG9ja0dyb3VwTGVhZGVyOwpAQCAt MTI2MCw2ICsxMjYyLDExIEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9j a01ldGhvZCBsb2NrTWV0aG9kVGFibGUpCiAJCWVsc2UKIAkJCWVuYWJsZV90aW1lb3V0X2Fm dGVyKERFQURMT0NLX1RJTUVPVVQsIERlYWRsb2NrVGltZW91dCk7CiAJfQorCWVsc2UgaWYg KGxvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0cykKKwl7CisJCS8qIFNldCB3YWl0IHN0YXJ0 IHRpbWVzdGFtcCBpZiBsb2dnaW5nIGlzIGVuYWJsZWQgKi8KKwkJc3RhbmRieVdhaXRTdGFy dCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwl9CiAKIAkvKgogCSAqIElmIHNvbWVib2R5 IHdha2VzIHVzIGJldHdlZW4gTFdMb2NrUmVsZWFzZSBhbmQgV2FpdExhdGNoLCB0aGUgbGF0 Y2gKQEAgLTEyODAsNyArMTI4NywzMyBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxv Y2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlKQogCQlpZiAoSW5Ib3RTdGFuZGJ5KQog CQl7CiAJCQkvKiBTZXQgYSB0aW1lciBhbmQgd2FpdCBmb3IgdGhhdCBvciBmb3IgdGhlIExv Y2sgdG8gYmUgZ3JhbnRlZCAqLwotCQkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9j ayhsb2NhbGxvY2stPnRhZy5sb2NrKTsKKwkJCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0 aExvY2sobG9jYWxsb2NrLT50YWcubG9jaywgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0KTsK KworCQkJaWYgKHN0YW5kYnlXYWl0U3RhcnQgPiAwICYmICFsb2dnZWRfcmVjb3ZlcnlfY29u ZmxpY3QpCisJCQl7CisJCQkJVGltZXN0YW1wVHogY3VyX3RzID0gR2V0Q3VycmVudFRpbWVz dGFtcCgpOworCQkJCWlmIChUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyhzdGFuZGJ5V2Fp dFN0YXJ0LCBjdXJfdHMsCisJCQkJCQkJCQkJICAgRGVhZGxvY2tUaW1lb3V0KSkKKwkJCQl7 CisJCQkJCVZpcnR1YWxUcmFuc2FjdGlvbklkICp2eGlkczsKKwkJCQkJaW50CWNudDsKKwor CQkJCQlBc3NlcnQobG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzKTsKKwkJCQkJdnhpZHMg PQlHZXRMb2NrQ29uZmxpY3RzKCZsb2NhbGxvY2stPnRhZy5sb2NrLAorCQkJCQkJCQkJCQkg QWNjZXNzRXhjbHVzaXZlTG9jaywgJmNudCk7CisKKwkJCQkJLyoKKwkJCQkJICogTG9nIHRo ZSByZWNvdmVyeSBjb25mbGljdCBpZiB0aGVyZSBpcyBzdGlsbCB2aXJ0dWFsIHRyYW5zYWN0 aW9uCisJCQkJCSAqIGNvbmZsaWN0aW5nIHdpdGggdGhlIGxvY2suCisJCQkJCSAqLworCQkJ CQlpZiAoY250ID4gMCkKKwkJCQkJeworCQkJCQkJTG9nUmVjb3ZlcnlDb25mbGljdChQUk9D U0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0ssCisJCQkJCQkJCQkJCXN0YW5kYnlXYWl0U3Rh cnQsIGN1cl90cywgdnhpZHMpOworCQkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0g dHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KIAkJfQogCQllbHNlCiAJCXsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Yy5jCmluZGV4IDU5NmJjYjdiODQuLmU1NWEyOGIxY2QgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWMuYwpAQCAtMTU3MCw3ICsxNTcwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2Jv b2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwKIAkJTlVMTCwgTlVMTCwgTlVM TAogCX0sCi0KKwl7CisJCXsibG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzIiwgUEdDX1NJ R0hVUCwgTE9HR0lOR19XSEFULAorCQkJZ2V0dGV4dF9ub29wKCJMb2dzIHN0YW5kYnkgcmVj b3ZlcnkgY29uZmxpY3Qgd2FpdHMuIiksCisJCQlOVUxMCisJCX0sCisJCSZsb2dfcmVjb3Zl cnlfY29uZmxpY3Rfd2FpdHMsCisJCWZhbHNlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwK IAl7CiAJCXsibG9nX2hvc3RuYW1lIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEFULAogCQkJ Z2V0dGV4dF9ub29wKCJMb2dzIHRoZSBob3N0IG5hbWUgaW4gdGhlIGNvbm5lY3Rpb24gbG9n cy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5j b25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQppbmRleCA5Y2I1NzFmN2NjLi41NjI1NjgxZThhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC01NTMsNiArNTUzLDgg QEAKIAkJCQkJIyAgICUlID0gJyUnCiAJCQkJCSMgZS5nLiAnPCV1JSUlZD4gJwogI2xvZ19s b2NrX3dhaXRzID0gb2ZmCQkJIyBsb2cgbG9jayB3YWl0cyA+PSBkZWFkbG9ja190aW1lb3V0 CisjbG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzID0gb2ZmCSMgbG9nIHN0YW5kYnkgcmVj b3ZlcnkgY29uZmxpY3Qgd2FpdHMKKwkJCQkJIyA+PSBkZWFkbG9ja190aW1lb3V0CiAjbG9n X3BhcmFtZXRlcl9tYXhfbGVuZ3RoID0gLTEJCSMgd2hlbiBsb2dnaW5nIHN0YXRlbWVudHMs IGxpbWl0IGxvZ2dlZAogCQkJCQkjIGJpbmQtcGFyYW1ldGVyIHZhbHVlcyB0byBOIGJ5dGVz OwogCQkJCQkjIC0xIG1lYW5zIHByaW50IGluIGZ1bGwsIDAgZGlzYWJsZXMKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zdGFuZGJ5LmgKaW5kZXggZmFhZjFkMzgxNy4uODU3YWExZjgxZCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zdGFuZGJ5LmgKQEAgLTIzLDYgKzIzLDcgQEAKIGV4dGVybiBpbnQJdmFjdXVtX2RlZmVy X2NsZWFudXBfYWdlOwogZXh0ZXJuIGludAltYXhfc3RhbmRieV9hcmNoaXZlX2RlbGF5Owog ZXh0ZXJuIGludAltYXhfc3RhbmRieV9zdHJlYW1pbmdfZGVsYXk7CitleHRlcm4gYm9vbAls b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM7CiAKIGV4dGVybiB2b2lkIEluaXRSZWNvdmVy eVRyYW5zYWN0aW9uRW52aXJvbm1lbnQodm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93blJl Y292ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCh2b2lkKTsKQEAgLTMyLDEyICszMywxNCBA QCBleHRlcm4gdm9pZCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdChUcmFu c2FjdGlvbklkIGxhdGVzdFJlbW92ZWRYaWQsCiBleHRlcm4gdm9pZCBSZXNvbHZlUmVjb3Zl cnlDb25mbGljdFdpdGhUYWJsZXNwYWNlKE9pZCB0c2lkKTsKIGV4dGVybiB2b2lkIFJlc29s dmVSZWNvdmVyeUNvbmZsaWN0V2l0aERhdGFiYXNlKE9pZCBkYmlkKTsKIAotZXh0ZXJuIHZv aWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcpOwor ZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxv Y2t0YWcsIGJvb2wgYWxyZWFkeV9sb2dnZWQpOwogZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292 ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ2hlY2tSZWNv dmVyeUNvbmZsaWN0RGVhZGxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBTdGFuZGJ5RGVhZExv Y2tIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieVRpbWVvdXRIYW5kbGVyKHZv aWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieUxvY2tUaW1lb3V0SGFuZGxlcih2b2lkKTsKK2V4 dGVybiB2b2lkIExvZ1JlY292ZXJ5Q29uZmxpY3QoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24s IFRpbWVzdGFtcFR6IHdhaXRfc3RhcnQsCisJCQkJCQkJCVRpbWVzdGFtcFR6IGN1cl90cywg VmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRfbGlzdCk7CiAKIC8qCiAgKiBTdGFuZGJ5IFJt Z3IgKFJNX1NUQU5EQllfSUQpCg== --------------7DF5CDB92CB16F15DCE942ED--