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 1viE8g-0014nI-0O for pgsql-bugs@arkaria.postgresql.org; Tue, 20 Jan 2026 15:59: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 1viE8e-001hKR-1E for pgsql-bugs@arkaria.postgresql.org; Tue, 20 Jan 2026 15:59:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1viE8d-001hKE-2R for pgsql-bugs@lists.postgresql.org; Tue, 20 Jan 2026 15:59:28 +0000 Received: from mail-oa1-x35.google.com ([2001:4860:4864:20::35]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1viE8b-001RZq-0E for pgsql-bugs@lists.postgresql.org; Tue, 20 Jan 2026 15:59:27 +0000 Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-40423f8c5faso3598186fac.0 for ; Tue, 20 Jan 2026 07:59:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768924765; cv=none; d=google.com; s=arc-20240605; b=UkiKOebbmvwzqga/UihoOmJNsAQ9RLr1lEYfsBABQtka/JZ9l0J7CM3OsoAT1A+MdS h/7v8SJWoW66B0AvFwMQy1fGfTEgRiBbzipny0kp1z7YAtTqBHnDkCo+LvGYuryV2MJR RJNXdTfZWoWdpnUAcf7tUd/+wh3BeJxfxrwbVN8uYc78xNc202cvJ6TMejrRoXKYLlhb h1LLeAkMQo5CnOmQTturOEx9sbG2o5Sp9HjO9hOSYtUWf+kzFE1Hok2FpqvAl8BGU51u 4/0/jGXRA892Cfh3EAFd7RwUtzwcj6Q08FnpNRy6qJ46lyUbzLDIoGYYlnRH3GWAByUk L9Kg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=dzwenGqyAQu7X0in0ErWvjTpdUASEPqJ/2p4xsaZZFM=; fh=ikHyCXUvoFcR0c2X2+XuBDwnWvUs8QAMHzC49KSrZpk=; b=J5ZnZgfF/zEVgorQaJvCgn0Wjj2FhzfDqcDtuEZwAZaCEwfZe2gZRo1M+tajW9fZA8 vfxyljsFhVLGc4tvEGziADWBLUE/cou0OhhQWO4jUwUA7kb6g7jed5TOHAfxAM3GNthA 8Q5lIVyO/NU7PSeSZxViiO+ZBipMKw2OxQsBGoAFx8twLcug8zKlOI005+KfwZ1mV/dg QzOcQt8+vQm383hISdTvvR0kmGNuE3YBBZYn1qZruyicMKuYOOQ52Nw4ASK9/fKjYsPh fHxYlL6IY/77h8i7rcO9mGRDBSLOqNqroxYkJk67EN1k5eGS6QUjnWQWjP6lmn5tUEzG Eglw==; 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=1768924765; x=1769529565; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=dzwenGqyAQu7X0in0ErWvjTpdUASEPqJ/2p4xsaZZFM=; b=MrguuldOmQGnboGSWIMvvB0qe7rkNLw2qZ7Lqc3CCdOFLGO0Bv+RxnCy9ymaiNO4oC NtWKBHP/Z8MtMhpN/itPe8q02BNribpJ3Br2ILrKUXso8EYJodqqjIAfqPIIBSW+rhN4 Oftg6o5/6ai2cWbUojATKgWkOJ857x5lOg6tcEx5dJ7TF3RVgQ90e+wCjBZSapD6ztCS uDv57yJmVg4uMvUJWICnriOmNOO2yzRaJzRshgivLyKUkb+IENkaorzAXH2j/UxDVsZ9 2KFpHFS0ZmydCq6TFZcNkg3dWe2p0sZiOYB1yjWSRG4GP4Imi+p9Jm5gXPxCjqvNjQ9v ClZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768924765; x=1769529565; h=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=dzwenGqyAQu7X0in0ErWvjTpdUASEPqJ/2p4xsaZZFM=; b=Psk7OCPv5xsG68//mfsDr/ggZ0pvkr94JtFrMtnxMgFagIIWVAwwyyW7KA+tGUTrMq NomgImaJdqZW2WAQz8NHd0qG7vMl5q6g4QYkplbCC33O8DQVJkpAjHbyWVJ9ePZWbTwT 681rFLXVX2DW1hT7qAMTKP07PsPCa750P6868V0oed/N2fmB89QWtT8jIwvQLKhwe4Vf RRo+Pf60lXANVy3LBQo3inyLMaGDJCbisBjbiZTZgzMm4WADziukn254sFNlHNTWtQka z3qloVM8CFmmbL2SWUfeKFtWnZ31rguD67ia8PPOuEB5FomEDQkCZ7qlo1RrcuCCRRxB gIqw== X-Forwarded-Encrypted: i=1; AJvYcCXcOkEAVSG4OBGQpFvKbhdua+ElNpfxksIdph9TDILVXc9rkCoCTowyZ/R8egqnfI6mmNt1QOr4MgJT@lists.postgresql.org X-Gm-Message-State: AOJu0Yxw3eHxpsytAor5wvjomy/XG4Wd2XVlN48SE59jkcNnsdSAFBgV lT3uz3ANQM5qZZjab9W3yCMPVcZd9nFgvAjOcrOH6aGWJd3KECEjhZ3iwXcuOjQWaxszxvrGY8V uPHr93asBlB8++rL1ecq1853ndGQEgNQ= X-Gm-Gg: AY/fxX51P/iCNAsU+PWPnHvAKb9zXFhMUEOdlVidZUnnQuGuvvhmJUd/6eV73amNu/e wScjlNoQQq1d5Kfvv2aLQqKr/2TmOqwLhQkeCFqJSgvPwm8UzZSMKduS5GBOw6kUDaQc/DN8iZ+ Zc8uSvTltgPv9gKsAGzW7hkV6SwR710Zdj4th6S1aZJnDTYTLCLIBO6sIEP2ZOBjJ6x+j9zwmRo GfRDIt/VSGNZ3txUMnJB5guk6Edn1A51x/rS0zFliAzvmJiq2ngvbJi12iDMklkM6WXcYScOALd w9+B3x7XHD8T9wsZ85nZNwIN+DPSyw== X-Received: by 2002:a05:6820:f010:b0:65f:6053:7551 with SMTP id 006d021491bc7-66117a0969dmr5629641eaf.68.1768924764581; Tue, 20 Jan 2026 07:59:24 -0800 (PST) MIME-Version: 1.0 References: <19380-4e293be2b4007248@postgresql.org> In-Reply-To: <19380-4e293be2b4007248@postgresql.org> From: Dean Rasheed Date: Tue, 20 Jan 2026 15:59:12 +0000 X-Gm-Features: AZwV_QiMQRLtj_XmfGW6I1ZREjTTZGPqawvxUr3eOijsdSh2eDoUQcKNopOiPlI Message-ID: Subject: Re: BUG #19380: Transition table in AFTER INSERT trigger misses rows from MERGE when used with INSERT in a CTE To: dwwoelfel@gmail.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000003a518d0648d3e40e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003a518d0648d3e40e Content-Type: text/plain; charset="UTF-8" On Tue, 20 Jan 2026 at 08:58, PG Bug reporting form wrote: > > The following bug has been logged on the website: > > In a CTE that inserts rows with both MERGE and INSERT, the transition table > will not contain the rows from the MERGE. > Thanks for the report. I took a look at this and was able to reproduce it with a simpler example, not using MERGE ... RETURNING: WITH ins AS ( INSERT INTO merge_bug_test (id, val) values (1, 'a') ) MERGE INTO merge_bug_test t USING (VALUES (2, 'b')) s(id, val) ON t.id = s.id WHEN NOT MATCHED THEN INSERT (id, val) VALUES (s.id, s.val); 2 rows are inserted, but the transition table only includes the (1,'a') row added by the INSERT command. With this example, I can confirm that the bug goes all the way back to PG15 (MERGE ... RETURNING was only added in PG17). It looks like the problem stems from this code in MakeTransitionCaptureState() in commands/trigger.c: table = GetAfterTriggersTableData(relid, cmdType); where cmdType might be CMD_MERGE. The problem is that MERGE really needs to use the same AfterTriggersTableData structs as INSERT, UPDATE, and DELETE, so that any captured tuples get added to the same tuplestores. This means that the TransitionCaptureState needs pointers to 3 separate AfterTriggersTableData structs, one for each of INSERT, UPDATE, and DELETE. It then follows that an AfterTriggersTableData struct only needs 2 tuplestores (old and new), rather than 4, because it never has cmdType == CMD_MERGE. Attached is a rough patch doing that. I wonder if it would be possible to get rid of ModifyTableState.mt_oc_transition_capture and just have INSERT ... ON CONFLICT DO UPDATE use a single TransitionCaptureState in a similar way to MERGE? Anyway, that's a separate idea, not relevant to this bug fix. Regards, Dean --0000000000003a518d0648d3e40e Content-Type: text/x-patch; charset="US-ASCII"; name="fix-transition-table-capture-in-merge-in-cte.patch" Content-Disposition: attachment; filename="fix-transition-table-capture-in-merge-in-cte.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkmrw3wh0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RyaWdnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzBmZGE2Li4x NDliZDBkCi0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKQEAgLTM5MTksMjEgKzM5MTksMTAgQEAgc3RydWN0IEFm dGVyVHJpZ2dlcnNUYWJsZURhdGEKIAlib29sCQlhZnRlcl90cmlnX2RvbmU7CS8qIGRpZCB3ZSBh bHJlYWR5IHF1ZXVlIEFTIHRyaWdnZXJzPyAqLwogCUFmdGVyVHJpZ2dlckV2ZW50TGlzdCBhZnRl cl90cmlnX2V2ZW50czsJLyogaWYgc28sIHNhdmVkIGxpc3QgcG9pbnRlciAqLwogCi0JLyoKLQkg KiBXZSBtYWludGFpbiBzZXBhcmF0ZSB0cmFuc2l0aW9uIHRhYmxlcyBmb3IgVVBEQVRFL0lOU0VS VC9ERUxFVEUgc2luY2UKLQkgKiBNRVJHRSBjYW4gcnVuIGFsbCB0aHJlZSBhY3Rpb25zIGluIGEg c2luZ2xlIHN0YXRlbWVudC4gTm90ZSB0aGF0IFVQREFURQotCSAqIG5lZWRzIGJvdGggb2xkIGFu ZCBuZXcgdHJhbnNpdGlvbiB0YWJsZXMgd2hlcmVhcyBJTlNFUlQgbmVlZHMgb25seSBuZXcsCi0J ICogYW5kIERFTEVURSBuZWVkcyBvbmx5IG9sZC4KLQkgKi8KLQotCS8qICJvbGQiIHRyYW5zaXRp b24gdGFibGUgZm9yIFVQREFURSwgaWYgYW55ICovCi0JVHVwbGVzdG9yZXN0YXRlICpvbGRfdXBk X3R1cGxlc3RvcmU7Ci0JLyogIm5ldyIgdHJhbnNpdGlvbiB0YWJsZSBmb3IgVVBEQVRFLCBpZiBh bnkgKi8KLQlUdXBsZXN0b3Jlc3RhdGUgKm5ld191cGRfdHVwbGVzdG9yZTsKLQkvKiAib2xkIiB0 cmFuc2l0aW9uIHRhYmxlIGZvciBERUxFVEUsIGlmIGFueSAqLwotCVR1cGxlc3RvcmVzdGF0ZSAq b2xkX2RlbF90dXBsZXN0b3JlOwotCS8qICJuZXciIHRyYW5zaXRpb24gdGFibGUgZm9yIElOU0VS VCwgaWYgYW55ICovCi0JVHVwbGVzdG9yZXN0YXRlICpuZXdfaW5zX3R1cGxlc3RvcmU7CisJLyog Im9sZCIgdHJhbnNpdGlvbiB0YWJsZSBmb3IgVVBEQVRFL0RFTEVURSwgaWYgYW55ICovCisJVHVw bGVzdG9yZXN0YXRlICpvbGRfdHVwbGVzdG9yZTsKKwkvKiAibmV3IiB0cmFuc2l0aW9uIHRhYmxl IGZvciBJTlNFUlQvVVBEQVRFLCBpZiBhbnkgKi8KKwlUdXBsZXN0b3Jlc3RhdGUgKm5ld190dXBs ZXN0b3JlOwogCiAJVHVwbGVUYWJsZVNsb3QgKnN0b3Jlc2xvdDsJLyogZm9yIGNvbnZlcnRpbmcg dG8gdHVwbGVzdG9yZSdzIGZvcm1hdCAqLwogfTsKQEAgLTM5NjAsNiArMzk0OSw3IEBAIHN0YXRp YyBUdXBsZXN0b3Jlc3RhdGUgKkdldEFmdGVyVHJpZ2dlcnMKIAkJCQkJCQkJCQkJCQkJVHVwbGVU YWJsZVNsb3QgKm5ld3Nsb3QsCiAJCQkJCQkJCQkJCQkJCVRyYW5zaXRpb25DYXB0dXJlU3RhdGUg KnRyYW5zaXRpb25fY2FwdHVyZSk7CiBzdGF0aWMgdm9pZCBUcmFuc2l0aW9uVGFibGVBZGRUdXBs ZShFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJCWludCBldmVudCwKIAkJCQkJCQkJCVRyYW5zaXRp b25DYXB0dXJlU3RhdGUgKnRyYW5zaXRpb25fY2FwdHVyZSwKIAkJCQkJCQkJCVJlc3VsdFJlbElu Zm8gKnJlbGluZm8sCiAJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwKQEAgLTQ1MjcsMTkg KzQ1MTcsMTMgQEAgQWZ0ZXJUcmlnZ2VyRXhlY3V0ZShFU3RhdGUgKmVzdGF0ZSwKIAl7CiAJCWlm IChMb2NUcmlnZ2VyRGF0YS50Z190cmlnZ2VyLT50Z29sZHRhYmxlKQogCQl7Ci0JCQlpZiAoVFJJ R0dFUl9GSVJFRF9CWV9VUERBVEUoZXZ0c2hhcmVkLT5hdHNfZXZlbnQpKQotCQkJCUxvY1RyaWdn ZXJEYXRhLnRnX29sZHRhYmxlID0gZXZ0c2hhcmVkLT5hdHNfdGFibGUtPm9sZF91cGRfdHVwbGVz dG9yZTsKLQkJCWVsc2UKLQkJCQlMb2NUcmlnZ2VyRGF0YS50Z19vbGR0YWJsZSA9IGV2dHNoYXJl ZC0+YXRzX3RhYmxlLT5vbGRfZGVsX3R1cGxlc3RvcmU7CisJCQlMb2NUcmlnZ2VyRGF0YS50Z19v bGR0YWJsZSA9IGV2dHNoYXJlZC0+YXRzX3RhYmxlLT5vbGRfdHVwbGVzdG9yZTsKIAkJCWV2dHNo YXJlZC0+YXRzX3RhYmxlLT5jbG9zZWQgPSB0cnVlOwogCQl9CiAKIAkJaWYgKExvY1RyaWdnZXJE YXRhLnRnX3RyaWdnZXItPnRnbmV3dGFibGUpCiAJCXsKLQkJCWlmIChUUklHR0VSX0ZJUkVEX0JZ X0lOU0VSVChldnRzaGFyZWQtPmF0c19ldmVudCkpCi0JCQkJTG9jVHJpZ2dlckRhdGEudGdfbmV3 dGFibGUgPSBldnRzaGFyZWQtPmF0c190YWJsZS0+bmV3X2luc190dXBsZXN0b3JlOwotCQkJZWxz ZQotCQkJCUxvY1RyaWdnZXJEYXRhLnRnX25ld3RhYmxlID0gZXZ0c2hhcmVkLT5hdHNfdGFibGUt Pm5ld191cGRfdHVwbGVzdG9yZTsKKwkJCUxvY1RyaWdnZXJEYXRhLnRnX25ld3RhYmxlID0gZXZ0 c2hhcmVkLT5hdHNfdGFibGUtPm5ld190dXBsZXN0b3JlOwogCQkJZXZ0c2hhcmVkLT5hdHNfdGFi bGUtPmNsb3NlZCA9IHRydWU7CiAJCX0KIAl9CkBAIC00OTcyLDcgKzQ5NTYsOSBAQCBNYWtlVHJh bnNpdGlvbkNhcHR1cmVTdGF0ZShUcmlnZ2VyRGVzYyAqCiAJCQkJbmVlZF9uZXdfdXBkLAogCQkJ CW5lZWRfb2xkX2RlbCwKIAkJCQluZWVkX25ld19pbnM7Ci0JQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0 YSAqdGFibGU7CisJQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YSAqaW5zX3RhYmxlOworCUFmdGVyVHJp Z2dlcnNUYWJsZURhdGEgKnVwZF90YWJsZTsKKwlBZnRlclRyaWdnZXJzVGFibGVEYXRhICpkZWxf dGFibGU7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJUmVzb3VyY2VPd25lciBzYXZlUmVzb3Vy Y2VPd25lcjsKIApAQCAtNTAxOSwxMCArNTAwNSwxNSBAQCBNYWtlVHJhbnNpdGlvbkNhcHR1cmVT dGF0ZShUcmlnZ2VyRGVzYyAqCiAJCUFmdGVyVHJpZ2dlckVubGFyZ2VRdWVyeVN0YXRlKCk7CiAK IAkvKgotCSAqIEZpbmQgb3IgY3JlYXRlIGFuIEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEgc3RydWN0 IHRvIGhvbGQgdGhlCisJICogRmluZCBvciBjcmVhdGUgYW4gQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0 YSBzdHJ1Y3RzIHRvIGhvbGQgdGhlCiAJICogdHVwbGVzdG9yZShzKS4gIElmIHRoZXJlJ3MgYSBt YXRjaGluZyBzdHJ1Y3QgYnV0IGl0J3MgbWFya2VkIGNsb3NlZCwKIAkgKiBpZ25vcmUgaXQ7IHdl IG5lZWQgYSBuZXdlciBvbmUuCiAJICoKKwkgKiBOb3RlOiBNRVJHRSBtdXN0IHVzZSB0aGUgc2Ft ZSBBZnRlclRyaWdnZXJzVGFibGVEYXRhIHN0cnVjdHMgYXMgSU5TRVJULAorCSAqIFVQREFURSwg YW5kIERFTEVURSwgc28gdGhhdCBhbnkgTUVSR0UnZCB0dXBsZXMgYXJlIGFkZGVkIHRvIHRoZSBz YW1lCisJICogdHVwbGVzdG9yZXMgYXMgdHVwbGVzIGZyb20gYW55IElOU0VSVCwgVVBEQVRFLCBv ciBERUxFVEUgY29tbWFuZHMKKwkgKiBydW5uaW5nIGluIHRoZSBzYW1lIHRvcC1sZXZlbCBjb21t YW5kIChlLmcuLCBpbiBhIHdyaXRhYmxlIENURSkuCisJICoKIAkgKiBOb3RlOiB0aGUgQWZ0ZXJU cmlnZ2Vyc1RhYmxlRGF0YSBsaXN0LCBhcyB3ZWxsIGFzIHRoZSB0dXBsZXN0b3JlcywgYXJlCiAJ ICogYWxsb2NhdGVkIGluIHRoZSBjdXJyZW50IChzdWIpdHJhbnNhY3Rpb24ncyBDdXJUcmFuc2Fj dGlvbkNvbnRleHQsIGFuZAogCSAqIHRoZSB0dXBsZXN0b3JlcyBhcmUgbWFuYWdlZCBieSB0aGUg KHN1Yil0cmFuc2FjdGlvbidzIHJlc291cmNlIG93bmVyLgpAQCAtNTAzMCwyMSArNTAyMSwzNCBA QCBNYWtlVHJhbnNpdGlvbkNhcHR1cmVTdGF0ZShUcmlnZ2VyRGVzYyAqCiAJICogdHJhbnNpdGlv biB0YWJsZXMgdG8gYmUgZGVmZXJyYWJsZTsgdGhleSB3aWxsIGJlIGZpcmVkIGR1cmluZwogCSAq IEFmdGVyVHJpZ2dlckVuZFF1ZXJ5LCBhZnRlciB3aGljaCBpdCdzIG9rYXkgdG8gZGVsZXRlIHRo ZSBkYXRhLgogCSAqLwotCXRhYmxlID0gR2V0QWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YShyZWxpZCwg Y21kVHlwZSk7CisJaWYgKG5lZWRfbmV3X2lucykKKwkJaW5zX3RhYmxlID0gR2V0QWZ0ZXJUcmln Z2Vyc1RhYmxlRGF0YShyZWxpZCwgQ01EX0lOU0VSVCk7CisJZWxzZQorCQlpbnNfdGFibGUgPSBO VUxMOworCisJaWYgKG5lZWRfb2xkX3VwZCB8fCBuZWVkX25ld191cGQpCisJCXVwZF90YWJsZSA9 IEdldEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEocmVsaWQsIENNRF9VUERBVEUpOworCWVsc2UKKwkJ dXBkX3RhYmxlID0gTlVMTDsKKworCWlmIChuZWVkX29sZF9kZWwpCisJCWRlbF90YWJsZSA9IEdl dEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEocmVsaWQsIENNRF9ERUxFVEUpOworCWVsc2UKKwkJZGVs X3RhYmxlID0gTlVMTDsKIAogCS8qIE5vdyBjcmVhdGUgcmVxdWlyZWQgdHVwbGVzdG9yZShzKSwg aWYgd2UgZG9uJ3QgaGF2ZSB0aGVtIGFscmVhZHkuICovCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKEN1clRyYW5zYWN0aW9uQ29udGV4dCk7CiAJc2F2ZVJlc291cmNlT3duZXIgPSBD dXJyZW50UmVzb3VyY2VPd25lcjsKIAlDdXJyZW50UmVzb3VyY2VPd25lciA9IEN1clRyYW5zYWN0 aW9uUmVzb3VyY2VPd25lcjsKIAotCWlmIChuZWVkX29sZF91cGQgJiYgdGFibGUtPm9sZF91cGRf dHVwbGVzdG9yZSA9PSBOVUxMKQotCQl0YWJsZS0+b2xkX3VwZF90dXBsZXN0b3JlID0gdHVwbGVz dG9yZV9iZWdpbl9oZWFwKGZhbHNlLCBmYWxzZSwgd29ya19tZW0pOwotCWlmIChuZWVkX25ld191 cGQgJiYgdGFibGUtPm5ld191cGRfdHVwbGVzdG9yZSA9PSBOVUxMKQotCQl0YWJsZS0+bmV3X3Vw ZF90dXBsZXN0b3JlID0gdHVwbGVzdG9yZV9iZWdpbl9oZWFwKGZhbHNlLCBmYWxzZSwgd29ya19t ZW0pOwotCWlmIChuZWVkX29sZF9kZWwgJiYgdGFibGUtPm9sZF9kZWxfdHVwbGVzdG9yZSA9PSBO VUxMKQotCQl0YWJsZS0+b2xkX2RlbF90dXBsZXN0b3JlID0gdHVwbGVzdG9yZV9iZWdpbl9oZWFw KGZhbHNlLCBmYWxzZSwgd29ya19tZW0pOwotCWlmIChuZWVkX25ld19pbnMgJiYgdGFibGUtPm5l d19pbnNfdHVwbGVzdG9yZSA9PSBOVUxMKQotCQl0YWJsZS0+bmV3X2luc190dXBsZXN0b3JlID0g dHVwbGVzdG9yZV9iZWdpbl9oZWFwKGZhbHNlLCBmYWxzZSwgd29ya19tZW0pOworCWlmIChuZWVk X29sZF91cGQgJiYgdXBkX3RhYmxlLT5vbGRfdHVwbGVzdG9yZSA9PSBOVUxMKQorCQl1cGRfdGFi bGUtPm9sZF90dXBsZXN0b3JlID0gdHVwbGVzdG9yZV9iZWdpbl9oZWFwKGZhbHNlLCBmYWxzZSwg d29ya19tZW0pOworCWlmIChuZWVkX25ld191cGQgJiYgdXBkX3RhYmxlLT5uZXdfdHVwbGVzdG9y ZSA9PSBOVUxMKQorCQl1cGRfdGFibGUtPm5ld190dXBsZXN0b3JlID0gdHVwbGVzdG9yZV9iZWdp bl9oZWFwKGZhbHNlLCBmYWxzZSwgd29ya19tZW0pOworCWlmIChuZWVkX29sZF9kZWwgJiYgZGVs X3RhYmxlLT5vbGRfdHVwbGVzdG9yZSA9PSBOVUxMKQorCQlkZWxfdGFibGUtPm9sZF90dXBsZXN0 b3JlID0gdHVwbGVzdG9yZV9iZWdpbl9oZWFwKGZhbHNlLCBmYWxzZSwgd29ya19tZW0pOworCWlm IChuZWVkX25ld19pbnMgJiYgaW5zX3RhYmxlLT5uZXdfdHVwbGVzdG9yZSA9PSBOVUxMKQorCQlp bnNfdGFibGUtPm5ld190dXBsZXN0b3JlID0gdHVwbGVzdG9yZV9iZWdpbl9oZWFwKGZhbHNlLCBm YWxzZSwgd29ya19tZW0pOwogCiAJQ3VycmVudFJlc291cmNlT3duZXIgPSBzYXZlUmVzb3VyY2VP d25lcjsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKQEAgLTUwNTUsNyArNTA1OSw5 IEBAIE1ha2VUcmFuc2l0aW9uQ2FwdHVyZVN0YXRlKFRyaWdnZXJEZXNjICoKIAlzdGF0ZS0+dGNz X3VwZGF0ZV9vbGRfdGFibGUgPSBuZWVkX29sZF91cGQ7CiAJc3RhdGUtPnRjc191cGRhdGVfbmV3 X3RhYmxlID0gbmVlZF9uZXdfdXBkOwogCXN0YXRlLT50Y3NfaW5zZXJ0X25ld190YWJsZSA9IG5l ZWRfbmV3X2luczsKLQlzdGF0ZS0+dGNzX3ByaXZhdGUgPSB0YWJsZTsKKwlzdGF0ZS0+dGNzX2lu c2VydF9wcml2YXRlID0gaW5zX3RhYmxlOworCXN0YXRlLT50Y3NfdXBkYXRlX3ByaXZhdGUgPSB1 cGRfdGFibGU7CisJc3RhdGUtPnRjc19kZWxldGVfcHJpdmF0ZSA9IGRlbF90YWJsZTsKIAogCXJl dHVybiBzdGF0ZTsKIH0KQEAgLTUyMzMsMjAgKzUyMzksMTIgQEAgQWZ0ZXJUcmlnZ2VyRnJlZVF1 ZXJ5KEFmdGVyVHJpZ2dlcnNRdWVyeQogCXsKIAkJQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YSAqdGFi bGUgPSAoQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YSAqKSBsZmlyc3QobGMpOwogCi0JCXRzID0gdGFi bGUtPm9sZF91cGRfdHVwbGVzdG9yZTsKLQkJdGFibGUtPm9sZF91cGRfdHVwbGVzdG9yZSA9IE5V TEw7Ci0JCWlmICh0cykKLQkJCXR1cGxlc3RvcmVfZW5kKHRzKTsKLQkJdHMgPSB0YWJsZS0+bmV3 X3VwZF90dXBsZXN0b3JlOwotCQl0YWJsZS0+bmV3X3VwZF90dXBsZXN0b3JlID0gTlVMTDsKLQkJ aWYgKHRzKQotCQkJdHVwbGVzdG9yZV9lbmQodHMpOwotCQl0cyA9IHRhYmxlLT5vbGRfZGVsX3R1 cGxlc3RvcmU7Ci0JCXRhYmxlLT5vbGRfZGVsX3R1cGxlc3RvcmUgPSBOVUxMOworCQl0cyA9IHRh YmxlLT5vbGRfdHVwbGVzdG9yZTsKKwkJdGFibGUtPm9sZF90dXBsZXN0b3JlID0gTlVMTDsKIAkJ aWYgKHRzKQogCQkJdHVwbGVzdG9yZV9lbmQodHMpOwotCQl0cyA9IHRhYmxlLT5uZXdfaW5zX3R1 cGxlc3RvcmU7Ci0JCXRhYmxlLT5uZXdfaW5zX3R1cGxlc3RvcmUgPSBOVUxMOworCQl0cyA9IHRh YmxlLT5uZXdfdHVwbGVzdG9yZTsKKwkJdGFibGUtPm5ld190dXBsZXN0b3JlID0gTlVMTDsKIAkJ aWYgKHRzKQogCQkJdHVwbGVzdG9yZV9lbmQodHMpOwogCQlpZiAodGFibGUtPnN0b3Jlc2xvdCkK QEAgLTU1NTcsMTcgKzU1NTUsMTcgQEAgR2V0QWZ0ZXJUcmlnZ2Vyc1RyYW5zaXRpb25UYWJsZShp bnQgZXZlbgogCXsKIAkJQXNzZXJ0KFR1cElzTnVsbChuZXdzbG90KSk7CiAJCWlmIChldmVudCA9 PSBUUklHR0VSX0VWRU5UX0RFTEVURSAmJiBkZWxldGVfb2xkX3RhYmxlKQotCQkJdHVwbGVzdG9y ZSA9IHRyYW5zaXRpb25fY2FwdHVyZS0+dGNzX3ByaXZhdGUtPm9sZF9kZWxfdHVwbGVzdG9yZTsK KwkJCXR1cGxlc3RvcmUgPSB0cmFuc2l0aW9uX2NhcHR1cmUtPnRjc19kZWxldGVfcHJpdmF0ZS0+ b2xkX3R1cGxlc3RvcmU7CiAJCWVsc2UgaWYgKGV2ZW50ID09IFRSSUdHRVJfRVZFTlRfVVBEQVRF ICYmIHVwZGF0ZV9vbGRfdGFibGUpCi0JCQl0dXBsZXN0b3JlID0gdHJhbnNpdGlvbl9jYXB0dXJl LT50Y3NfcHJpdmF0ZS0+b2xkX3VwZF90dXBsZXN0b3JlOworCQkJdHVwbGVzdG9yZSA9IHRyYW5z aXRpb25fY2FwdHVyZS0+dGNzX3VwZGF0ZV9wcml2YXRlLT5vbGRfdHVwbGVzdG9yZTsKIAl9CiAJ ZWxzZSBpZiAoIVR1cElzTnVsbChuZXdzbG90KSkKIAl7CiAJCUFzc2VydChUdXBJc051bGwob2xk c2xvdCkpOwogCQlpZiAoZXZlbnQgPT0gVFJJR0dFUl9FVkVOVF9JTlNFUlQgJiYgaW5zZXJ0X25l d190YWJsZSkKLQkJCXR1cGxlc3RvcmUgPSB0cmFuc2l0aW9uX2NhcHR1cmUtPnRjc19wcml2YXRl LT5uZXdfaW5zX3R1cGxlc3RvcmU7CisJCQl0dXBsZXN0b3JlID0gdHJhbnNpdGlvbl9jYXB0dXJl LT50Y3NfaW5zZXJ0X3ByaXZhdGUtPm5ld190dXBsZXN0b3JlOwogCQllbHNlIGlmIChldmVudCA9 PSBUUklHR0VSX0VWRU5UX1VQREFURSAmJiB1cGRhdGVfbmV3X3RhYmxlKQotCQkJdHVwbGVzdG9y ZSA9IHRyYW5zaXRpb25fY2FwdHVyZS0+dGNzX3ByaXZhdGUtPm5ld191cGRfdHVwbGVzdG9yZTsK KwkJCXR1cGxlc3RvcmUgPSB0cmFuc2l0aW9uX2NhcHR1cmUtPnRjc191cGRhdGVfcHJpdmF0ZS0+ bmV3X3R1cGxlc3RvcmU7CiAJfQogCiAJcmV0dXJuIHR1cGxlc3RvcmU7CkBAIC01NTgxLDYgKzU1 NzksNyBAQCBHZXRBZnRlclRyaWdnZXJzVHJhbnNpdGlvblRhYmxlKGludCBldmVuCiAgKi8KIHN0 YXRpYyB2b2lkCiBUcmFuc2l0aW9uVGFibGVBZGRUdXBsZShFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJ CWludCBldmVudCwKIAkJCQkJCVRyYW5zaXRpb25DYXB0dXJlU3RhdGUgKnRyYW5zaXRpb25fY2Fw dHVyZSwKIAkJCQkJCVJlc3VsdFJlbEluZm8gKnJlbGluZm8sCiAJCQkJCQlUdXBsZVRhYmxlU2xv dCAqc2xvdCwKQEAgLTU1OTksOSArNTU5OCwyNiBAQCBUcmFuc2l0aW9uVGFibGVBZGRUdXBsZShF U3RhdGUgKmVzdGF0ZSwKIAkJdHVwbGVzdG9yZV9wdXR0dXBsZXNsb3QodHVwbGVzdG9yZSwgb3Jp Z2luYWxfaW5zZXJ0X3R1cGxlKTsKIAllbHNlIGlmICgobWFwID0gRXhlY0dldENoaWxkVG9Sb290 TWFwKHJlbGluZm8pKSAhPSBOVUxMKQogCXsKLQkJQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YSAqdGFi bGUgPSB0cmFuc2l0aW9uX2NhcHR1cmUtPnRjc19wcml2YXRlOworCQlBZnRlclRyaWdnZXJzVGFi bGVEYXRhICp0YWJsZTsKIAkJVHVwbGVUYWJsZVNsb3QgKnN0b3Jlc2xvdDsKIAorCQlzd2l0Y2gg KGV2ZW50KQorCQl7CisJCQljYXNlIFRSSUdHRVJfRVZFTlRfSU5TRVJUOgorCQkJCXRhYmxlID0g dHJhbnNpdGlvbl9jYXB0dXJlLT50Y3NfaW5zZXJ0X3ByaXZhdGU7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRSSUdHRVJfRVZFTlRfVVBEQVRFOgorCQkJCXRhYmxlID0gdHJhbnNpdGlvbl9jYXB0dXJl LT50Y3NfdXBkYXRlX3ByaXZhdGU7CisJCQkJYnJlYWs7CisJCQljYXNlIFRSSUdHRVJfRVZFTlRf REVMRVRFOgorCQkJCXRhYmxlID0gdHJhbnNpdGlvbl9jYXB0dXJlLT50Y3NfZGVsZXRlX3ByaXZh dGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFm dGVyLXRyaWdnZXIgZXZlbnQgY29kZTogJWQiLCBldmVudCk7CisJCQkJdGFibGUgPSBOVUxMOwkv KiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJCQkJYnJlYWs7CisJCX0KKwogCQlzdG9yZXNsb3Qg PSBHZXRBZnRlclRyaWdnZXJzU3RvcmVTbG90KHRhYmxlLCBtYXAtPm91dGRlc2MpOwogCQlleGVj dXRlX2F0dHJfbWFwX3Nsb3QobWFwLT5hdHRyTWFwLCBzbG90LCBzdG9yZXNsb3QpOwogCQl0dXBs ZXN0b3JlX3B1dHR1cGxlc2xvdCh0dXBsZXN0b3JlLCBzdG9yZXNsb3QpOwpAQCAtNjE5NSw3ICs2 MjExLDcgQEAgQWZ0ZXJUcmlnZ2VyU2F2ZUV2ZW50KEVTdGF0ZSAqZXN0YXRlLCBSZQogCQkJCQkJ CQkJCQkJCQkJIG9sZHNsb3QsCiAJCQkJCQkJCQkJCQkJCQkgTlVMTCwKIAkJCQkJCQkJCQkJCQkJ CSB0cmFuc2l0aW9uX2NhcHR1cmUpOwotCQkJVHJhbnNpdGlvblRhYmxlQWRkVHVwbGUoZXN0YXRl LCB0cmFuc2l0aW9uX2NhcHR1cmUsIHJlbGluZm8sCisJCQlUcmFuc2l0aW9uVGFibGVBZGRUdXBs ZShlc3RhdGUsIGV2ZW50LCB0cmFuc2l0aW9uX2NhcHR1cmUsIHJlbGluZm8sCiAJCQkJCQkJCQlv bGRzbG90LCBOVUxMLCBvbGRfdHVwbGVzdG9yZSk7CiAJCX0KIApAQCAtNjIxMSw3ICs2MjI3LDcg QEAgQWZ0ZXJUcmlnZ2VyU2F2ZUV2ZW50KEVTdGF0ZSAqZXN0YXRlLCBSZQogCQkJCQkJCQkJCQkJ CQkJIE5VTEwsCiAJCQkJCQkJCQkJCQkJCQkgbmV3c2xvdCwKIAkJCQkJCQkJCQkJCQkJCSB0cmFu c2l0aW9uX2NhcHR1cmUpOwotCQkJVHJhbnNpdGlvblRhYmxlQWRkVHVwbGUoZXN0YXRlLCB0cmFu c2l0aW9uX2NhcHR1cmUsIHJlbGluZm8sCisJCQlUcmFuc2l0aW9uVGFibGVBZGRUdXBsZShlc3Rh dGUsIGV2ZW50LCB0cmFuc2l0aW9uX2NhcHR1cmUsIHJlbGluZm8sCiAJCQkJCQkJCQluZXdzbG90 LCBvcmlnaW5hbF9pbnNlcnRfdHVwbGUsIG5ld190dXBsZXN0b3JlKTsKIAkJfQogCkBAIC02NTE0 LDcgKzY1MzAsMjMgQEAgQWZ0ZXJUcmlnZ2VyU2F2ZUV2ZW50KEVTdGF0ZSAqZXN0YXRlLCBSZQog CQluZXdfc2hhcmVkLmF0c19maXJpbmdfaWQgPSAwOwogCQlpZiAoKHRyaWdnZXItPnRnb2xkdGFi bGUgfHwgdHJpZ2dlci0+dGduZXd0YWJsZSkgJiYKIAkJCXRyYW5zaXRpb25fY2FwdHVyZSAhPSBO VUxMKQotCQkJbmV3X3NoYXJlZC5hdHNfdGFibGUgPSB0cmFuc2l0aW9uX2NhcHR1cmUtPnRjc19w cml2YXRlOworCQl7CisJCQlzd2l0Y2ggKGV2ZW50KQorCQkJeworCQkJCWNhc2UgVFJJR0dFUl9F VkVOVF9JTlNFUlQ6CisJCQkJCW5ld19zaGFyZWQuYXRzX3RhYmxlID0gdHJhbnNpdGlvbl9jYXB0 dXJlLT50Y3NfaW5zZXJ0X3ByaXZhdGU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR0dFUl9F VkVOVF9VUERBVEU6CisJCQkJCW5ld19zaGFyZWQuYXRzX3RhYmxlID0gdHJhbnNpdGlvbl9jYXB0 dXJlLT50Y3NfdXBkYXRlX3ByaXZhdGU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR0dFUl9F VkVOVF9ERUxFVEU6CisJCQkJCW5ld19zaGFyZWQuYXRzX3RhYmxlID0gdHJhbnNpdGlvbl9jYXB0 dXJlLT50Y3NfZGVsZXRlX3ByaXZhdGU7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJ CW5ld19zaGFyZWQuYXRzX3RhYmxlID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KIAkJ ZWxzZQogCQkJbmV3X3NoYXJlZC5hdHNfdGFibGUgPSBOVUxMOwogCQluZXdfc2hhcmVkLmF0c19t b2RpZmllZGNvbHMgPSBtb2RpZmllZENvbHM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggYjYwMzE3Yy4uNTU2Yzg2YgotLS0gYS9zcmMvaW5jbHVkZS9jb21t YW5kcy90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oCkBAIC03 OCw3ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IFRyYW5zaXRpb25DYXB0dXJlU3RhdGUKIAkvKgog CSAqIFByaXZhdGUgZGF0YSBpbmNsdWRpbmcgdGhlIHR1cGxlc3RvcmUocykgaW50byB3aGljaCB0 byBpbnNlcnQgdHVwbGVzLgogCSAqLwotCXN0cnVjdCBBZnRlclRyaWdnZXJzVGFibGVEYXRhICp0 Y3NfcHJpdmF0ZTsKKwlzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YSAqdGNzX2luc2VydF9w cml2YXRlOworCXN0cnVjdCBBZnRlclRyaWdnZXJzVGFibGVEYXRhICp0Y3NfdXBkYXRlX3ByaXZh dGU7CisJc3RydWN0IEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEgKnRjc19kZWxldGVfcHJpdmF0ZTsK IH0gVHJhbnNpdGlvbkNhcHR1cmVTdGF0ZTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdHJpZ2dlcnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90 cmlnZ2Vycy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViOGZiYS4uMWFjZGQxMgot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyaWdnZXJzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3RyaWdnZXJzLm91dApAQCAtMzAzMywxMyArMzAzMywxOSBAQCBO T1RJQ0U6ICB0cmlnZ2VyID0gdGFibGUxX3RyaWcsIG5ldyB0YWJsCiB3aXRoIHdjdGUgYXMgKGlu c2VydCBpbnRvIHRhYmxlMSB2YWx1ZXMgKDQzKSkKICAgaW5zZXJ0IGludG8gdGFibGUxIHZhbHVl cyAoNDQpOwogTk9USUNFOiAgdHJpZ2dlciA9IHRhYmxlMV90cmlnLCBuZXcgdGFibGUgPSAoNDMp LCAoNDQpCit3aXRoIHdjdGUgYXMgKGluc2VydCBpbnRvIHRhYmxlMSB2YWx1ZXMgKDQ1KSkKKyAg bWVyZ2UgaW50byB0YWJsZTEgdXNpbmcgKHZhbHVlcyAoNDYpKSBhcyB2KGEpIG9uIHRhYmxlMS5h ID0gdi5hCisgICAgd2hlbiBub3QgbWF0Y2hlZCB0aGVuIGluc2VydCB2YWx1ZXMgKHYuYSk7CitO T1RJQ0U6ICB0cmlnZ2VyID0gdGFibGUxX3RyaWcsIG5ldyB0YWJsZSA9ICg0NSksICg0NikKIHNl bGVjdCAqIGZyb20gdGFibGUxOwogIGEgIAogLS0tLQogIDQyCiAgNDQKICA0MwotKDMgcm93cykK KyA0NgorIDQ1CisoNSByb3dzKQogCiBzZWxlY3QgKiBmcm9tIHRhYmxlMjsKICAgICAgIGEgICAg ICAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyaWdnZXJzLnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3RyaWdnZXJzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1 ZjdmNzVkLi5jYzg3ODQ1Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyaWdnZXJzLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmlnZ2Vycy5zcWwKQEAgLTIyMjgsNiArMjIyOCwx MCBAQCB3aXRoIHdjdGUgYXMgKGluc2VydCBpbnRvIHRhYmxlMSB2YWx1ZXMKIHdpdGggd2N0ZSBh cyAoaW5zZXJ0IGludG8gdGFibGUxIHZhbHVlcyAoNDMpKQogICBpbnNlcnQgaW50byB0YWJsZTEg dmFsdWVzICg0NCk7CiAKK3dpdGggd2N0ZSBhcyAoaW5zZXJ0IGludG8gdGFibGUxIHZhbHVlcyAo NDUpKQorICBtZXJnZSBpbnRvIHRhYmxlMSB1c2luZyAodmFsdWVzICg0NikpIGFzIHYoYSkgb24g dGFibGUxLmEgPSB2LmEKKyAgICB3aGVuIG5vdCBtYXRjaGVkIHRoZW4gaW5zZXJ0IHZhbHVlcyAo di5hKTsKKwogc2VsZWN0ICogZnJvbSB0YWJsZTE7CiBzZWxlY3QgKiBmcm9tIHRhYmxlMjsKIAo= --0000000000003a518d0648d3e40e--