Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4hFa-002Slj-0E for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 15:31:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4hFY-0012oo-0C for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 15:31:28 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4hFX-0012oe-2J for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 15:31:28 +0000 Received: from mail-oo1-xc29.google.com ([2607:f8b0:4864:20::c29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4hFV-00000000iNk-21HU for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 15:31:27 +0000 Received: by mail-oo1-xc29.google.com with SMTP id 006d021491bc7-67df51b26ddso70570eaf.2 for ; Mon, 23 Mar 2026 08:31:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774279884; cv=none; d=google.com; s=arc-20240605; b=CIZEsG9m+k/SrIq9JVmaTC9P/qDl+1BgSIMSdKsyEM/KfFEMHAyH96101UBI5Hn7Bt a3gJsnImoISV8rp1QeO22a1SI26R5CFERtchgJdKvzyVzqZ4zUu+Vii3WMmko3snCo4+ ZGjC88jLlL2DgMx0vhmime1uGZbLE4cNeAEburcJOqTTbZbDQY0KBQFaykbyyiXXmzEq oOUL62zoRkWBvwiiYl9WYcWF8WwpLuGKCRzzysLOULlw1BszW/7BUSJdsdQSJD/v1c4u OP0/8wLqs0zbZHec6HjXZQeMrHIyCC8qAtNsl2Cpv9m+yHB8ROJlqMW9fZTjsRkSg8EI qKFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ODblELaobG1HizXcUkz+/ABvSGYDk0Wiq/e+pv11tzU=; fh=SprTjyyUNMFOaPK7zUpaC1EEovCYhXioP7Zs2WMpltw=; b=TwiBnduxh7IvRidO3eMs6I4V+7CJEXf8ZOEnno7RUG8/yyUgfKmTFEMWjzkrWk54K3 Md39yuiogRpfdCm5YG0S0AGFQridwKTu9bA201KvfG3+/vPacki5dLFghCL26MWB6Cdh DPAGPyu6z5Bb5tPvDEaehewKAl8rYU5WdpGgfi0E9X0JPg3iSS5YEOgXNjOofACOIyhf lkXTgAj62OxVW3KimyEAF05CCEdlmCFdqjhlaVggN07aKhwWw5h4JK9q+CFRxuPqPhFP RDL63RhgEZ7W1xfhDGGbSXlvhj8KB5T5FgVIFjkDeSj7cEBuipLjv/dtFSg7BAj0axXV KWlQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774279884; x=1774884684; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ODblELaobG1HizXcUkz+/ABvSGYDk0Wiq/e+pv11tzU=; b=d/x5NDYL2mzCAhBw4ej90NGdmS3Tg9eVaHM6f51dCoEGqTyVPbdQz7FPQtfQsfZ9da FWrD3D68U9j9T4lBU5y5PUvs9vTA86/B6SPEbSoLTKPQkCZDMO7NbX9rcsKr9IpLwWXu /62S1Igfj6qfiNTLc9x94FdaCzf9IGtzOzspMGadioXkUZo1VMTlLaxrGNxHGqElr8SG 5SMrDvU4gHmaCdD68YSzkwvLt/lwGjrzq6f/ieZz28fgIlYzekCYPlx7itGFzboo58si m7N2bMQSGRspRrveUm6cnPYlWA+rUOrkM9niN3V+zccwD16zngMi4wOOWH7fb7O53mMh hYzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774279884; x=1774884684; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ODblELaobG1HizXcUkz+/ABvSGYDk0Wiq/e+pv11tzU=; b=EekCccYnGfemAKoRWsCC+beWOgkqKPJV4Yp5IR6sRwEDGbIEE6mVofXItm7MjBbJm1 C0rab5j0NvcDYnfrOle4VNAwxYaP1Qed+fuYkaLqkpMilB1plio8u8APv6NU9Z/K1Uiz y0aTa80Ngo3KgM4s9iOtdB1e72zrxisgZlOdAVqvSx3AKniZo6avGvVDtOm+PvZdnfSf My9O1LOvjg0/EwNzzeYMuniT/x61Tvp7F7JrVUI9T2N4q8NHc/DE+ESRm4XfbRM9Sz58 Iws1XKCFwUncBDO+/vjY0VVbT/GX6rGLWlQrF1VzGqKOVnMwsXXsi0oibpby5cFvExq0 6Paw== X-Gm-Message-State: AOJu0Yx/nimW9BrOZp7byslXnFSqjNuEGdwTenc+KbtapmMQiNCljbIj VOcKZ1aB6s38jeskTmRXcR/Eqbl1jN2ZuS3BPMv/thu32NWRPBzESYORHleVrrVfV6MYstEGFDK ua2G50+3rkC18vQmkpdtS3Bkqs3Jbnv4z5Pv9ZJk= X-Gm-Gg: ATEYQzzp6D3kkmWrnvY1yI2wnKOugSXjirZ6Tmw5WdyNNV+5vuFnBY56snjWrWI1uVD tCH7EMVac95/l+FYjqDRTxwqcIvJuWCQRgHG5ksZXmNTdf0Y4FCpBEa94miNQeqYwhnSMNejrt6 7YYj3HyOZL7q92yJVlBCH254jJW/HjV6EwWVvjlBWrA+19X0yF8PA2RfA7uj3+oj2beUddEZhvu mBxY2DcsUYIOrt9hQzYfz8KUFFO7IckreXZoOmryR6aDfeXmjSQGBC/r+UG8/fGX+yorChnq9Qu Hq7Qxwbz3HWcYNv3VPqtMWa+QZaiL30IZ6coLOSL X-Received: by 2002:a05:6820:1849:b0:67b:c4bd:2a8e with SMTP id 006d021491bc7-67c22fbc7dbmr10497418eaf.33.1774279883466; Mon, 23 Mar 2026 08:31:23 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Fujii Masao Date: Tue, 24 Mar 2026 00:31:10 +0900 X-Gm-Features: AQROBzDZnsppXhQmIJramCaAiReCd-KVPR1-MIuxIXR7K4wWmIBaf-_U_CTVG0E Message-ID: Subject: Re: pg_stat_replication.*_lag sometimes shows NULL during active replication To: Shinya Kato Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000300c92064db2ba9c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000300c92064db2ba9c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Mar 21, 2026 at 11:05=E2=80=AFAM Shinya Kato wrote: > > On Fri, Mar 20, 2026 at 2:13=E2=80=AFAM Fujii Masao wrote: > > I think the issue occurs when the positions in the first message point = to > > the same LSN (e.g., 0/030D5230), and the second message reports the sam= e but > > larger LSN (e.g., 0/030D52E0). > > Thanks for the explanation! > > > I've updated the patch to address this. It removes fullyAppliedLastTime= , > > tracks the positions from the previous reply, and clears the lag values= only > > when the positions remain unchanged across two consecutive messages. > > > > Patch attached. Could you test and review this updated patch? > > The patch works properly. I think it looks nice to me, except for the > typo I sent in the previous message. Thanks for the review! I've fixed the typo and attached an updated patch. I also incorporated Chao's comments from upthread. I'm planning to commit this to master. As for backpatching, I'm hesitant to backpatch the full patch since it may reduce the number of replication feedback messages, which feels too invasiv= e for stable branches. That said, the patch's changes in walsender.c could be backpatched. As discussed earlier, they don't fully address the reported issue, but they do help mitigate cases where lag becomes NULL unexpectedly in logical replication. So it might be worth considering those changes for stable branches. Thoughts? Regards, --=20 Fujii Masao --000000000000300c92064db2ba9c Content-Type: application/octet-stream; name="v6-0001-Avoid-sending-duplicate-WAL-locations-in-standby-.patch" Content-Disposition: attachment; filename="v6-0001-Avoid-sending-duplicate-WAL-locations-in-standby-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3cf7c70 RnJvbSBjNWYzMjkwMjQzM2FkNWI3Y2U3ZDVhZDQ1NDM2ZDFiY2IyNjNiZjk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBNYXNhbyA8ZnVqaWlAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjMgTWFyIDIwMjYgMjE6MTk6NDEgKzA5MDAKU3ViamVjdDogW1BBVENIIHY2XSBB dm9pZCBzZW5kaW5nIGR1cGxpY2F0ZSBXQUwgbG9jYXRpb25zIGluIHN0YW5kYnkgc3RhdHVzCiBy ZXBsaWVzCgpQcmV2aW91c2x5LCB3aGVuIHRoZSBzdGFydHVwIHByb2Nlc3MgYXBwbGllZCBXQUwg YW5kIHJlcXVlc3RlZCB3YWxyZWNlaXZlcgp0byBzZW5kIGFuIGFwcGx5IG5vdGlmaWNhdGlvbiB0 byB0aGUgcHJpbWFyeSwgd2FscmVjZWl2ZXIgc2VudCBhIHN0YXR1cyByZXBseQp1bmNvbmRpdGlv bmFsbHksIGV2ZW4gaWYgdGhlIFdBTCBsb2NhdGlvbnMgaGFkIG5vdCBhZHZhbmNlZCBzaW5jZQp0 aGUgcHJldmlvdXMgdXBkYXRlLgoKQXMgYSByZXN1bHQsIHRoZSBzdGFuZGJ5IGNvdWxkIHNlbmQg dHdvIGNvbnNlY3V0aXZlIHN0YXR1cyByZXBseSBtZXNzYWdlcwp3aXRoIGlkZW50aWNhbCBXQUwg bG9jYXRpb25zIGV2ZW4gdGhvdWdoIHdhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgaGFkCm5v dCB5ZXQgZWxhcHNlZC4gVGhpcyBjb3VsZCB1bmV4cGVjdGVkbHkgcmVzZXQgdGhlIHJlcG9ydGVk IHJlcGxpY2F0aW9uIGxhZywKbWFraW5nIGl0IGRpZmZpY3VsdCBmb3IgdXNlcnMgdG8gbW9uaXRv ciBsYWcuIFRoZSBzZWNvbmQgbWVzc2FnZSB3YXMgYWxzbwp1bm5lY2Vzc2FyeSBiZWNhdXNlIGl0 IHJlcG9ydGVkIG5vIHByb2dyZXNzLgoKVGhpcyBjb21taXQgdXBkYXRlcyB3YWxyZWNlaXZlciB0 byBzZW5kIGEgcmVwbHkgb25seSB3aGVuIHRoZSBhcHBseSBsb2NhdGlvbgpoYXMgYWR2YW5jZWQg c2luY2UgdGhlIGxhc3Qgc3RhdHVzIHVwZGF0ZSwgZXZlbiB3aGVuIHRoZSBzdGFydHVwIHByb2Nl c3MKcmVxdWVzdHMgYSBub3RpZmljYXRpb24uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3JlY292ZXJ5LmMgfCAgNCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuYyAgICAgfCA3NCArKysrKysrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vd2Fsc2VuZGVyLmMgICAgICAgfCAzNSArKysrKystLS0tLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCAgICAgfCAgNiArLQogNCBmaWxlcyBjaGFuZ2VkLCA2 OCBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IDZkMmM0YTg2Yjk2Li5mZDFjMzZkMDYxZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTIwMTUsNyArMjAxNSw3 IEBAIEFwcGx5V2FsUmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwgWExvZ1JlY29y ZCAqcmVjb3JkLCBUaW1lTGluZUlEICpyZXBsCiAJaWYgKGRvUmVxdWVzdFdhbFJlY2VpdmVyUmVw bHkpCiAJewogCQlkb1JlcXVlc3RXYWxSZWNlaXZlclJlcGx5ID0gZmFsc2U7Ci0JCVdhbFJjdkZv cmNlUmVwbHkoKTsKKwkJV2FsUmN2UmVxdWVzdEFwcGx5UmVwbHkoKTsKIAl9CiAKIAkvKiBBbGxv dyByZWFkLW9ubHkgY29ubmVjdGlvbnMgaWYgd2UncmUgY29uc2lzdGVudCBub3cgKi8KQEAgLTM5 NzAsNyArMzk3MCw3IEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJl Y1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkgKi8KIAkJCQkJaWYgKCFzdHJlYW1pbmdfcmVw bHlfc2VudCkKIAkJCQkJewotCQkJCQkJV2FsUmN2Rm9yY2VSZXBseSgpOworCQkJCQkJV2FsUmN2 UmVxdWVzdEFwcGx5UmVwbHkoKTsKIAkJCQkJCXN0cmVhbWluZ19yZXBseV9zZW50ID0gdHJ1ZTsK IAkJCQkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYwppbmRleCBmYWJlM2M3 MzAzNC4uYTQzNzI3M2NmOWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dh bHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYwpA QCAtMTQzLDcgKzE0Myw3IEBAIHN0YXRpYyB2b2lkIFhMb2dXYWxSY3ZXcml0ZShjaGFyICpidWYs IFNpemUgbmJ5dGVzLCBYTG9nUmVjUHRyIHJlY3B0ciwKIAkJCQkJCQlUaW1lTGluZUlEIHRsaSk7 CiBzdGF0aWMgdm9pZCBYTG9nV2FsUmN2Rmx1c2goYm9vbCBkeWluZywgVGltZUxpbmVJRCB0bGkp Owogc3RhdGljIHZvaWQgWExvZ1dhbFJjdkNsb3NlKFhMb2dSZWNQdHIgcmVjcHRyLCBUaW1lTGlu ZUlEIHRsaSk7Ci1zdGF0aWMgdm9pZCBYTG9nV2FsUmN2U2VuZFJlcGx5KGJvb2wgZm9yY2UsIGJv b2wgcmVxdWVzdFJlcGx5KTsKK3N0YXRpYyB2b2lkIFhMb2dXYWxSY3ZTZW5kUmVwbHkoYm9vbCBm b3JjZSwgYm9vbCByZXF1ZXN0UmVwbHksIGJvb2wgY2hlY2tBcHBseSk7CiBzdGF0aWMgdm9pZCBY TG9nV2FsUmN2U2VuZEhTRmVlZGJhY2soYm9vbCBpbW1lZCk7CiBzdGF0aWMgdm9pZCBQcm9jZXNz V2FsU25kck1lc3NhZ2UoWExvZ1JlY1B0ciB3YWxFbmQsIFRpbWVzdGFtcFR6IHNlbmRUaW1lKTsK IHN0YXRpYyB2b2lkIFdhbFJjdkNvbXB1dGVOZXh0V2FrZXVwKFdhbFJjdldha2V1cFJlYXNvbiBy ZWFzb24sIFRpbWVzdGFtcFR6IG5vdyk7CkBAIC00MTcsNyArNDE3LDcgQEAgV2FsUmVjZWl2ZXJN YWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJ CQkJV2FsUmN2Q29tcHV0ZU5leHRXYWtldXAoaSwgbm93KTsKIAogCQkJLyogU2VuZCBpbml0aWFs IHJlcGx5L2ZlZWRiYWNrIG1lc3NhZ2VzLiAqLwotCQkJWExvZ1dhbFJjdlNlbmRSZXBseSh0cnVl LCBmYWxzZSk7CisJCQlYTG9nV2FsUmN2U2VuZFJlcGx5KHRydWUsIGZhbHNlLCBmYWxzZSk7CiAJ CQlYTG9nV2FsUmN2U2VuZEhTRmVlZGJhY2sodHJ1ZSk7CiAKIAkJCS8qIExvb3AgdW50aWwgZW5k LW9mLXN0cmVhbWluZyBvciBlcnJvciAqLwpAQCAtNDkzLDcgKzQ5Myw3IEBAIFdhbFJlY2VpdmVy TWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQog CQkJCQl9CiAKIAkJCQkJLyogTGV0IHRoZSBwcmltYXJ5IGtub3cgdGhhdCB3ZSByZWNlaXZlZCBz b21lIGRhdGEuICovCi0JCQkJCVhMb2dXYWxSY3ZTZW5kUmVwbHkoZmFsc2UsIGZhbHNlKTsKKwkJ CQkJWExvZ1dhbFJjdlNlbmRSZXBseShmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAogCQkJCQkvKgog CQkJCQkgKiBJZiB3ZSd2ZSB3cml0dGVuIHNvbWUgcmVjb3JkcywgZmx1c2ggdGhlbSB0byBkaXNr IGFuZApAQCAtNTM5LDcgKzUzOSw3IEBAIFdhbFJlY2VpdmVyTWFpbihjb25zdCB2b2lkICpzdGFy dHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJCQlSZXNldExhdGNoKE15TGF0 Y2gpOwogCQkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCQkJCWlmICh3YWxyY3YtPmZv cmNlX3JlcGx5KQorCQkJCQlpZiAod2FscmN2LT5hcHBseV9yZXBseV9yZXF1ZXN0ZWQpCiAJCQkJ CXsKIAkJCQkJCS8qCiAJCQkJCQkgKiBUaGUgcmVjb3ZlcnkgcHJvY2VzcyBoYXMgYXNrZWQgdXMg dG8gc2VuZCBhcHBseQpAQCAtNTQ3LDkgKzU0Nyw5IEBAIFdhbFJlY2VpdmVyTWFpbihjb25zdCB2 b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJCQkJICogZmFs c2UgaW4gc2hhcmVkIG1lbW9yeSBiZWZvcmUgc2VuZGluZyB0aGUgcmVwbHksIHNvCiAJCQkJCQkg KiB3ZSBkb24ndCBtaXNzIGEgbmV3IHJlcXVlc3QgZm9yIGEgcmVwbHkuCiAJCQkJCQkgKi8KLQkJ CQkJCXdhbHJjdi0+Zm9yY2VfcmVwbHkgPSBmYWxzZTsKKwkJCQkJCXdhbHJjdi0+YXBwbHlfcmVw bHlfcmVxdWVzdGVkID0gZmFsc2U7CiAJCQkJCQlwZ19tZW1vcnlfYmFycmllcigpOwotCQkJCQkJ WExvZ1dhbFJjdlNlbmRSZXBseSh0cnVlLCBmYWxzZSk7CisJCQkJCQlYTG9nV2FsUmN2U2VuZFJl cGx5KGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CiAJCQkJCX0KIAkJCQl9CiAJCQkJaWYgKHJjICYgV0xf VElNRU9VVCkKQEAgLTU5NSw3ICs1OTUsNyBAQCBXYWxSZWNlaXZlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJCQkJCXdha2V1cFtXQUxS Q1ZfV0FLRVVQX1BJTkddID0gVElNRVNUQU1QX0lORklOSVRZOwogCQkJCQl9CiAKLQkJCQkJWExv Z1dhbFJjdlNlbmRSZXBseShyZXF1ZXN0UmVwbHksIHJlcXVlc3RSZXBseSk7CisJCQkJCVhMb2dX YWxSY3ZTZW5kUmVwbHkocmVxdWVzdFJlcGx5LCByZXF1ZXN0UmVwbHksIGZhbHNlKTsKIAkJCQkJ WExvZ1dhbFJjdlNlbmRIU0ZlZWRiYWNrKGZhbHNlKTsKIAkJCQl9CiAJCQl9CkBAIC04ODYsNyAr ODg2LDcgQEAgWExvZ1dhbFJjdlByb2Nlc3NNc2codW5zaWduZWQgY2hhciB0eXBlLCBjaGFyICpi dWYsIFNpemUgbGVuLCBUaW1lTGluZUlEIHRsaSkKIAogCQkJCS8qIElmIHRoZSBwcmltYXJ5IHJl cXVlc3RlZCBhIHJlcGx5LCBzZW5kIG9uZSBpbW1lZGlhdGVseSAqLwogCQkJCWlmIChyZXBseVJl cXVlc3RlZCkKLQkJCQkJWExvZ1dhbFJjdlNlbmRSZXBseSh0cnVlLCBmYWxzZSk7CisJCQkJCVhM b2dXYWxSY3ZTZW5kUmVwbHkodHJ1ZSwgZmFsc2UsIGZhbHNlKTsKIAkJCQlicmVhazsKIAkJCX0K IAkJZGVmYXVsdDoKQEAgLTEwNTMsNyArMTA1Myw3IEBAIFhMb2dXYWxSY3ZGbHVzaChib29sIGR5 aW5nLCBUaW1lTGluZUlEIHRsaSkKIAkJLyogQWxzbyBsZXQgdGhlIHByaW1hcnkga25vdyB0aGF0 IHdlIG1hZGUgc29tZSBwcm9ncmVzcyAqLwogCQlpZiAoIWR5aW5nKQogCQl7Ci0JCQlYTG9nV2Fs UmN2U2VuZFJlcGx5KGZhbHNlLCBmYWxzZSk7CisJCQlYTG9nV2FsUmN2U2VuZFJlcGx5KGZhbHNl LCBmYWxzZSwgZmFsc2UpOwogCQkJWExvZ1dhbFJjdlNlbmRIU0ZlZWRiYWNrKGZhbHNlKTsKIAkJ fQogCX0KQEAgLTExMDcsMjQgKzExMDcsMzUgQEAgWExvZ1dhbFJjdkNsb3NlKFhMb2dSZWNQdHIg cmVjcHRyLCBUaW1lTGluZUlEIHRsaSkKIH0KIAogLyoKLSAqIFNlbmQgcmVwbHkgbWVzc2FnZSB0 byBwcmltYXJ5LCBpbmRpY2F0aW5nIG91ciBjdXJyZW50IFdBTCBsb2NhdGlvbnMsIG9sZGVzdAot ICogeG1pbiBhbmQgdGhlIGN1cnJlbnQgdGltZS4KKyAqIFNlbmQgcmVwbHkgbWVzc2FnZSB0byBw cmltYXJ5LCBpbmRpY2F0aW5nIG91ciBjdXJyZW50IFdBTCBsb2NhdGlvbnMgYW5kCisgKiB0aW1l LgogICoKLSAqIElmICdmb3JjZScgaXMgbm90IHNldCwgdGhlIG1lc3NhZ2UgaXMgb25seSBzZW50 IGlmIGVub3VnaCB0aW1lIGhhcwotICogcGFzc2VkIHNpbmNlIGxhc3Qgc3RhdHVzIHVwZGF0ZSB0 byByZWFjaCB3YWxfcmVjZWl2ZXJfc3RhdHVzX2ludGVydmFsLgotICogSWYgd2FsX3JlY2VpdmVy X3N0YXR1c19pbnRlcnZhbCBpcyBkaXNhYmxlZCBhbHRvZ2V0aGVyIGFuZCAnZm9yY2UnIGlzCi0g KiBmYWxzZSwgdGhpcyBpcyBhIG5vLW9wLgorICogVGhlIG1lc3NhZ2UgaXMgc2VudCBpZiAnZm9y Y2UnIGlzIHNldCwgaWYgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUKKyAqIGxhc3Qg dXBkYXRlIHRvIHJlYWNoIHdhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwsIG9yIGlmIFdBTCBs b2NhdGlvbnMgaGF2ZQorICogYWR2YW5jZWQgc2luY2UgdGhlIHByZXZpb3VzIHN0YXR1cyB1cGRh dGUuIElmIHdhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwKKyAqIGlzIGRpc2FibGVkIGFuZCAn Zm9yY2UnIGlzIGZhbHNlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gU2V0ICdmb3JjZScg dG8KKyAqIHNlbmQgdGhlIG1lc3NhZ2UgdW5jb25kaXRpb25hbGx5LgorICoKKyAqIFdoZXRoZXIg V0FMIGxvY2F0aW9ucyBhcmUgY29uc2lkZXJlZCAiYWR2YW5jZWQiIGRlcGVuZHMgb24gJ2NoZWNr QXBwbHknLgorICogSWYgJ2NoZWNrQXBwbHknIGlzIGZhbHNlLCBvbmx5IHRoZSB3cml0ZSBhbmQg Zmx1c2ggbG9jYXRpb25zIGFyZSBjaGVja2VkLgorICogVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVu IHRoZSBjYWxsIGlzIHRyaWdnZXJlZCBieSB3cml0ZS9mbHVzaCBhY3Rpdml0eQorICogKGUuZy4s IGFmdGVyIHdhbHJlY2VpdmVyIHdyaXRlcyBvciBmbHVzaGVzIFdBTCksIGFuZCBhdm9pZHMgdGhl CisgKiBhcHBseS1sb2NhdGlvbiBjaGVjaywgd2hpY2ggcmVxdWlyZXMgYSBzcGlubG9jay4gSWYg J2NoZWNrQXBwbHknIGlzIHRydWUsCisgKiB0aGUgYXBwbHkgbG9jYXRpb24gaXMgYWxzbyBjb25z aWRlcmVkLiBUaGlzIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGFwcGx5CisgKiBsb2NhdGlvbiBp cyBleHBlY3RlZCB0byBhZHZhbmNlIChlLmcuLCB3aGVuIHRoZSBzdGFydHVwIHByb2Nlc3MgcmVx dWVzdHMKKyAqIGFuIGFwcGx5IG5vdGlmaWNhdGlvbikuCiAgKgogICogSWYgJ3JlcXVlc3RSZXBs eScgaXMgdHJ1ZSwgcmVxdWVzdHMgdGhlIHNlcnZlciB0byByZXBseSBpbW1lZGlhdGVseSB1cG9u CiAgKiByZWNlaXZpbmcgdGhpcyBtZXNzYWdlLiBUaGlzIGlzIHVzZWQgZm9yIGhlYXJ0YmVhdHMs IHdoZW4gYXBwcm9hY2hpbmcKICAqIHdhbF9yZWNlaXZlcl90aW1lb3V0LgogICovCiBzdGF0aWMg dm9pZAotWExvZ1dhbFJjdlNlbmRSZXBseShib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSkK K1hMb2dXYWxSY3ZTZW5kUmVwbHkoYm9vbCBmb3JjZSwgYm9vbCByZXF1ZXN0UmVwbHksIGJvb2wg Y2hlY2tBcHBseSkKIHsKIAlzdGF0aWMgWExvZ1JlY1B0ciB3cml0ZVB0ciA9IEludmFsaWRYTG9n UmVjUHRyOwogCXN0YXRpYyBYTG9nUmVjUHRyIGZsdXNoUHRyID0gSW52YWxpZFhMb2dSZWNQdHI7 Ci0JWExvZ1JlY1B0cglhcHBseVB0cjsKKwlzdGF0aWMgWExvZ1JlY1B0ciBhcHBseVB0ciA9IElu dmFsaWRYTG9nUmVjUHRyOworCVhMb2dSZWNQdHIJbGF0ZXN0QXBwbHlQdHIgPSBJbnZhbGlkWExv Z1JlY1B0cjsKIAlUaW1lc3RhbXBUeiBub3c7CiAKIAkvKgpAQCAtMTE0MCwxNyArMTE1MSwxOSBA QCBYTG9nV2FsUmN2U2VuZFJlcGx5KGJvb2wgZm9yY2UsIGJvb2wgcmVxdWVzdFJlcGx5KQogCS8q CiAJICogV2UgY2FuIGNvbXBhcmUgdGhlIHdyaXRlIGFuZCBmbHVzaCBwb3NpdGlvbnMgdG8gdGhl IGxhc3QgbWVzc2FnZSB3ZQogCSAqIHNlbnQgd2l0aG91dCB0YWtpbmcgYW55IGxvY2ssIGJ1dCB0 aGUgYXBwbHkgcG9zaXRpb24gcmVxdWlyZXMgYSBzcGluCi0JICogbG9jaywgc28gd2UgZG9uJ3Qg Y2hlY2sgdGhhdCB1bmxlc3Mgc29tZXRoaW5nIGVsc2UgaGFzIGNoYW5nZWQgb3IgMTAKLQkgKiBz ZWNvbmRzIGhhdmUgcGFzc2VkLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBhcHBseSBXQUwgbG9jYXRp b24gd2lsbAotCSAqIGFwcGVhciwgZnJvbSB0aGUgcHJpbWFyeSdzIHBvaW50IG9mIHZpZXcsIHRv IGxhZyBzbGlnaHRseSwgYnV0IHNpbmNlCi0JICogdGhpcyBpcyBvbmx5IGZvciByZXBvcnRpbmcg cHVycG9zZXMgYW5kIG9ubHkgb24gaWRsZSBzeXN0ZW1zLCB0aGF0J3MKLQkgKiBwcm9iYWJseSBP Sy4KKwkgKiBsb2NrLCBzbyB3ZSBkb24ndCBjaGVjayB0aGF0IHVubGVzcyBpdCBpcyBleHBlY3Rl ZCB0byBhZHZhbmNlIHNpbmNlIHRoZQorCSAqIHByZXZpb3VzIHVwZGF0ZSwgaS5lLiwgd2hlbiAn Y2hlY2tBcHBseScgaXMgdHJ1ZS4KIAkgKi8KLQlpZiAoIWZvcmNlCi0JCSYmIHdyaXRlUHRyID09 IExvZ3N0cmVhbVJlc3VsdC5Xcml0ZQotCQkmJiBmbHVzaFB0ciA9PSBMb2dzdHJlYW1SZXN1bHQu Rmx1c2gKLQkJJiYgbm93IDwgd2FrZXVwW1dBTFJDVl9XQUtFVVBfUkVQTFldKQotCQlyZXR1cm47 CisJaWYgKCFmb3JjZSAmJiBub3cgPCB3YWtldXBbV0FMUkNWX1dBS0VVUF9SRVBMWV0pCisJewor CQlpZiAoY2hlY2tBcHBseSkKKwkJCWxhdGVzdEFwcGx5UHRyID0gR2V0WExvZ1JlcGxheVJlY1B0 cihOVUxMKTsKKworCQlpZiAod3JpdGVQdHIgPT0gTG9nc3RyZWFtUmVzdWx0LldyaXRlCisJCQkm JiBmbHVzaFB0ciA9PSBMb2dzdHJlYW1SZXN1bHQuRmx1c2gKKwkJCSYmICghY2hlY2tBcHBseSB8 fCBhcHBseVB0ciA9PSBsYXRlc3RBcHBseVB0cikpCisJCQlyZXR1cm47CisJfQogCiAJLyogTWFr ZSBzdXJlIHdlIHdha2UgdXAgd2hlbiBpdCdzIHRpbWUgdG8gc2VuZCBhbm90aGVyIHJlcGx5LiAq LwogCVdhbFJjdkNvbXB1dGVOZXh0V2FrZXVwKFdBTFJDVl9XQUtFVVBfUkVQTFksIG5vdyk7CkBA IC0xMTU4LDcgKzExNzEsOCBAQCBYTG9nV2FsUmN2U2VuZFJlcGx5KGJvb2wgZm9yY2UsIGJvb2wg cmVxdWVzdFJlcGx5KQogCS8qIENvbnN0cnVjdCBhIG5ldyBtZXNzYWdlICovCiAJd3JpdGVQdHIg PSBMb2dzdHJlYW1SZXN1bHQuV3JpdGU7CiAJZmx1c2hQdHIgPSBMb2dzdHJlYW1SZXN1bHQuRmx1 c2g7Ci0JYXBwbHlQdHIgPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCWFwcGx5UHRyID0g KGxhdGVzdEFwcGx5UHRyID09IEludmFsaWRYTG9nUmVjUHRyKSA/CisJCUdldFhMb2dSZXBsYXlS ZWNQdHIoTlVMTCkgOiBsYXRlc3RBcHBseVB0cjsKIAogCXJlc2V0U3RyaW5nSW5mbygmcmVwbHlf bWVzc2FnZSk7CiAJcHFfc2VuZGJ5dGUoJnJlcGx5X21lc3NhZ2UsIFBxUmVwbE1zZ19TdGFuZGJ5 U3RhdHVzVXBkYXRlKTsKQEAgLTEzNzgsMTEgKzEzOTIsMTEgQEAgV2FsUmN2Q29tcHV0ZU5leHRX YWtldXAoV2FsUmN2V2FrZXVwUmVhc29uIHJlYXNvbiwgVGltZXN0YW1wVHogbm93KQogICogc3lu Y2hyb25vdXNfY29tbWl0ID0gcmVtb3RlX2FwcGx5LgogICovCiB2b2lkCi1XYWxSY3ZGb3JjZVJl cGx5KHZvaWQpCitXYWxSY3ZSZXF1ZXN0QXBwbHlSZXBseSh2b2lkKQogewogCVByb2NOdW1iZXIJ cHJvY25vOwogCi0JV2FsUmN2LT5mb3JjZV9yZXBseSA9IHRydWU7CisJV2FsUmN2LT5hcHBseV9y ZXBseV9yZXF1ZXN0ZWQgPSB0cnVlOwogCS8qIGZldGNoaW5nIHRoZSBwcm9jIG51bWJlciBpcyBw cm9iYWJseSBhdG9taWMsIGJ1dCBkb24ndCByZWx5IG9uIGl0ICovCiAJU3BpbkxvY2tBY3F1aXJl KCZXYWxSY3YtPm11dGV4KTsKIAlwcm9jbm8gPSBXYWxSY3YtPnByb2NubzsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggMDgyNTMxMDNjYjMuLjY2NTA3ZTljMmRkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpAQCAtMjQ3Miw3ICsyNDcyLDkgQEAgUHJvY2Vzc1N0 YW5kYnlSZXBseU1lc3NhZ2Uodm9pZCkKIAlUaW1lc3RhbXBUeiBub3c7CiAJVGltZXN0YW1wVHog cmVwbHlUaW1lOwogCi0Jc3RhdGljIGJvb2wgZnVsbHlBcHBsaWVkTGFzdFRpbWUgPSBmYWxzZTsK KwlzdGF0aWMgWExvZ1JlY1B0ciBwcmV2V3JpdGVQdHIgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwlz dGF0aWMgWExvZ1JlY1B0ciBwcmV2Rmx1c2hQdHIgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwlzdGF0 aWMgWExvZ1JlY1B0ciBwcmV2QXBwbHlQdHIgPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAogCS8qIHRo ZSBjYWxsZXIgYWxyZWFkeSBjb25zdW1lZCB0aGUgbXNndHlwZSBieXRlICovCiAJd3JpdGVQdHIg PSBwcV9nZXRtc2dpbnQ2NCgmcmVwbHlfbWVzc2FnZSk7CkBAIC0yNTA1LDIyICsyNTA3LDIzIEBA IFByb2Nlc3NTdGFuZGJ5UmVwbHlNZXNzYWdlKHZvaWQpCiAJYXBwbHlMYWcgPSBMYWdUcmFja2Vy UmVhZChTWU5DX1JFUF9XQUlUX0FQUExZLCBhcHBseVB0ciwgbm93KTsKIAogCS8qCi0JICogSWYg dGhlIHN0YW5kYnkgcmVwb3J0cyB0aGF0IGl0IGhhcyBmdWxseSByZXBsYXllZCB0aGUgV0FMIGlu IHR3bwotCSAqIGNvbnNlY3V0aXZlIHJlcGx5IG1lc3NhZ2VzLCB0aGVuIHRoZSBzZWNvbmQgc3Vj aCBtZXNzYWdlIG11c3QgcmVzdWx0Ci0JICogZnJvbSB3YWxfcmVjZWl2ZXJfc3RhdHVzX2ludGVy dmFsIGV4cGlyaW5nIG9uIHRoZSBzdGFuZGJ5LiAgVGhpcyBpcyBhCi0JICogY29udmVuaWVudCB0 aW1lIHRvIGZvcmdldCB0aGUgbGFnIHRpbWVzIG1lYXN1cmVkIHdoZW4gaXQgbGFzdAotCSAqIHdy b3RlL2ZsdXNoZWQvYXBwbGllZCBhIFdBTCByZWNvcmQsIHRvIGF2b2lkIGRpc3BsYXlpbmcgc3Rh bGUgbGFnIGRhdGEKLQkgKiB1bnRpbCBtb3JlIFdBTCB0cmFmZmljIGFycml2ZXMuCisJICogSWYg dGhlIHN0YW5kYnkgcmVwb3J0cyB0aGF0IGl0IGhhcyBmdWxseSByZXBsYXllZCB0aGUgV0FMLCBh bmQgdGhlCisJICogd3JpdGUvZmx1c2gvYXBwbHkgcG9zaXRpb25zIHJlbWFpbiB1bmNoYW5nZWQg YWNyb3NzIHR3byBjb25zZWN1dGl2ZQorCSAqIHJlcGx5IG1lc3NhZ2VzLCBmb3JnZXQgdGhlIGxh ZyB0aW1lcyBtZWFzdXJlZCB3aGVuIGl0IGxhc3QKKwkgKiB3cm90ZS9mbHVzaGVkL2FwcGxpZWQg YSBXQUwgcmVjb3JkLgorCSAqCisJICogVGhlIHNlY29uZCBtZXNzYWdlIHdpdGggdW5jaGFuZ2Vk IHBvc2l0aW9ucyB0eXBpY2FsbHkgcmVzdWx0cyBmcm9tCisJICogd2FsX3JlY2VpdmVyX3N0YXR1 c19pbnRlcnZhbCBleHBpcmluZyBvbiB0aGUgc3RhbmRieSwgc28gbGFnIHZhbHVlcyBhcmUKKwkg KiB1c3VhbGx5IGNsZWFyZWQgYWZ0ZXIgdGhhdCBpbnRlcnZhbCB3aGVuIHRoZXJlIGlzIG5vIGFj dGl2aXR5LiBUaGlzCisJICogYXZvaWRzIGRpc3BsYXlpbmcgc3RhbGUgbGFnIGRhdGEgdW50aWwg bW9yZSBXQUwgdHJhZmZpYyBhcnJpdmVzLgogCSAqLwotCWNsZWFyTGFnVGltZXMgPSBmYWxzZTsK LQlpZiAoYXBwbHlQdHIgPT0gc2VudFB0cikKLQl7Ci0JCWlmIChmdWxseUFwcGxpZWRMYXN0VGlt ZSkKLQkJCWNsZWFyTGFnVGltZXMgPSB0cnVlOwotCQlmdWxseUFwcGxpZWRMYXN0VGltZSA9IHRy dWU7Ci0JfQotCWVsc2UKLQkJZnVsbHlBcHBsaWVkTGFzdFRpbWUgPSBmYWxzZTsKKwljbGVhckxh Z1RpbWVzID0gKGFwcGx5UHRyID09IHNlbnRQdHIgJiYgZmx1c2hQdHIgPT0gc2VudFB0ciAmJgor CQkJCQkgd3JpdGVQdHIgPT0gcHJldldyaXRlUHRyICYmIGZsdXNoUHRyID09IHByZXZGbHVzaFB0 ciAmJgorCQkJCQkgYXBwbHlQdHIgPT0gcHJldkFwcGx5UHRyKTsKKworCXByZXZXcml0ZVB0ciA9 IHdyaXRlUHRyOworCXByZXZGbHVzaFB0ciA9IGZsdXNoUHRyOworCXByZXZBcHBseVB0ciA9IGFw cGx5UHRyOwogCiAJLyogU2VuZCBhIHJlcGx5IGlmIHRoZSBzdGFuZGJ5IHJlcXVlc3RlZCBvbmUu ICovCiAJaWYgKHJlcGx5UmVxdWVzdGVkKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd2FscmVjZWl2ZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmgKaW5kZXggOWI5YmQ5MTYzMTQuLjg1ZDI0Yzg3Mjk4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3dhbHJlY2VpdmVyLmgKQEAgLTE1NiwxMSArMTU2LDExIEBAIHR5cGVkZWYgc3RydWN0CiAJcGdf YXRvbWljX3VpbnQ2NCB3cml0dGVuVXB0bzsKIAogCS8qCi0JICogZm9yY2Ugd2FscmVjZWl2ZXIg cmVwbHk/ICBUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBsb2NrZWQ7IG1lbW9yeQorCSAqIHJlcXVl c3Qgd2FscmVjZWl2ZXIgcmVwbHk/ICBUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBsb2NrZWQ7IG1l bW9yeQogCSAqIGJhcnJpZXJzIGZvciBvcmRlcmluZyBhcmUgc3VmZmljaWVudC4gIEJ1dCB3ZSBk byBuZWVkIGF0b21pYyBmZXRjaCBhbmQKIAkgKiBzdG9yZSBzZW1hbnRpY3MsIHNvIHVzZSBzaWdf YXRvbWljX3QuCiAJICovCi0Jc2lnX2F0b21pY190IGZvcmNlX3JlcGx5OwkvKiB1c2VkIGFzIGEg Ym9vbCAqLworCXNpZ19hdG9taWNfdCBhcHBseV9yZXBseV9yZXF1ZXN0ZWQ7IC8qIHVzZWQgYXMg YSBib29sICovCiB9IFdhbFJjdkRhdGE7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBXYWxSY3ZEYXRh ICpXYWxSY3Y7CkBAIC00ODgsNyArNDg4LDcgQEAgd2FscmN2X2NsZWFyX3Jlc3VsdChXYWxSY3ZF eGVjUmVzdWx0ICp3YWxyZXMpCiAKIC8qIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB3YWxy ZWNlaXZlci5jICovCiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBXYWxSZWNlaXZlck1haW4oY29u c3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7Ci1leHRlcm4g dm9pZCBXYWxSY3ZGb3JjZVJlcGx5KHZvaWQpOworZXh0ZXJuIHZvaWQgV2FsUmN2UmVxdWVzdEFw cGx5UmVwbHkodm9pZCk7CiAKIC8qIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB3YWxyZWNl aXZlcmZ1bmNzLmMgKi8KIGV4dGVybiBTaXplIFdhbFJjdlNobWVtU2l6ZSh2b2lkKTsKLS0gCjIu NTEuMgoK --000000000000300c92064db2ba9c--