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 1w30Kp-000oBF-1A for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 23:29:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w30Ko-00FPfr-05 for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 23:29:54 +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 1w30Kn-00FPfj-1B for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 23:29:53 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w30Ki-00000000RdA-1CSr for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 23:29:52 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5a27daa652fso119801e87.0 for ; Wed, 18 Mar 2026 16:29:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773876588; cv=none; d=google.com; s=arc-20240605; b=dWM/ZWENROSqcMjcL2FTddekIVNK7u1CMNIzAIMOft+QnmBa5qHn09InDRveJjjj0N Y7lgA49dKLtCio/Fbnt/Afht/IHUneppdRBrf6w2lTaUtDeNB//D2Qt7hF3sftteW9a4 2fwjmutYXWXho/oR29rV0LhZ0V5kWsE57ov6Po6lngQMHsik+RsN4MAFSzOtLT3Aw1+6 dOtQZtcM+pA7+ImpD+DW11OFQoTf3t8oX9QSGZgHl1nhXqWYG0BvOCRBmeMgXcAtA483 9uRN+O/EoR7I6suJoYBBvZ61FPB+JPYaNIM2U/xrS33mdBdrSOj1agLWhCEIn7C5H9iF lIpA== 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=nebkewruPQ+oA3YqBfhjHv5GXIDArxJFBHIGM9w4QGk=; fh=5V+QZlM5I8EDdsGSYCtG3kvPTcsnezRKXFpUiwB9kS4=; b=C6rL9Lvu6ptO0fT/w31tttJ7ZXL4fKxVVSpqc3UeIKfOKRwK8a+1VmOd79px6fZcTY xd3fKiC/kHymhRGDgV5iRlhDuZs+G6gJalMpoJ+B97SGK1+6eedqMDPgtnZK8DlMHBOw 2F1at1VKtyeXQr89SZiFwwYOnyzOPfZqLCrKHrn3v5o9r+KxPcNc479Zt87VGEQWWObG 09Y2YROsf+1RfIuH1iCblepN3jw8m6NES/gaILwjf1U4nHhLbOg8MswpcFO1Vrm11Gm0 h/aMfwr92tzcWoqo7Mip0CNSKO3VSNrckWrTuLyxiN5nWOSYHLlN3PjKRECNgmMjYn4Q C8bA==; 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=1773876588; x=1774481388; 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=nebkewruPQ+oA3YqBfhjHv5GXIDArxJFBHIGM9w4QGk=; b=lEuo3e/bUcDSBV1nnzaxcUtDmby+WjvP9+MVSQn3hfBSaTxg7gQDfTS/Gc4jBQQQze ntUguzKogxIMbxijJgEOnM/MSRDplb5EGWcJXTdoPg6b2BwrECvxxwMiPz28ruY/+vsS p44he0OrOsaG0xmzL/2pq2BS00V5LViTOAIibhaiqsKKT6gzKcb9Xlz8QVeXNfUIyJ8p JAPcnbkVtd+M5qp5aoUkazVVlA0qgS7ZPzZncyKG0KYvaDBy75ZuLcdsXhRF4pZ7mYct SvKIaeSj81c00BdyBFi5a8hIYwuF5D4tIMwK1IUIaLT4EesWnVph9B5bAu9AXSZejkoq fIiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773876588; x=1774481388; 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=nebkewruPQ+oA3YqBfhjHv5GXIDArxJFBHIGM9w4QGk=; b=QESpeEiTmwxmLn4qouvlosUIYGQtbEu4IqjUNjR+Gtx9ahWtyorS+u8hbF/UMi02v8 Tvovt+VC0t3m/AUTFKDdgCmvpb5yd+yaNWLLf5IVrWzrZKbyx2pXRXvaYE+BOJH8D6ty zYHpdluUogNa1ua93R5w7mmZI7l8hoS8oPF8KS+44g8ZDiLKuAUtr4MrQ27g1C2OTW+p HLM7zOculBVIoF1vfWdNIoMFAq+Br5YiQdA+8Q+lPb3ONkgO+OnmoR1dHhWecdqzRjIK i6uHy6uSz0rty8wtYfUTQf5lKRSxVgZqTpbTL83CeEpzat5Fo/7Y/8zETmUxXDJ9jrSn 0Jqg== X-Gm-Message-State: AOJu0Yxt6ISQHco+B9I8A0dwy9QVbotifS64pQiKkL1byoTP8KUzSKMh r3Qipskp81Hz9XruW1N3fgP+nbhBc1+lsWYer11ow+T/2kFDdBEmJeogPeW75tAVlJOP16nwnVK gXBU+xBIohnBKLZ8cpJsT/pM1zRRAbJw= X-Gm-Gg: ATEYQzwab9HjjRQdIV5Pcz5Uq+ujJxdi9po0iC768yORBjYfaa3A8NuoffHsRkMA+Bm VmogKmKL8lxpx4ZBp5+cQOT6tQ10I+BtWuwSYJZ5PSLIbWb4EyawGYmiba9rBLdarmVxjrAoq4D wgQ+zE0ZgieuPBsZ9Rf/Ktr4imIJZxHC2ATe+tzXn3OGRjsWDlMwkGF8CRYCqq6NG0SCSe7UzOX UBizHYgXc2P1dXtPedNxET2VPZ3iFleNptX2QNo3MOeHnaG+VG7B+L/wFNQictP6cU37VmmQEma EZyJ3axL X-Received: by 2002:a05:6512:3088:b0:5a1:52f7:3cd1 with SMTP id 2adb3069b0e04-5a2796b93eamr1674696e87.37.1773876587938; Wed, 18 Mar 2026 16:29:47 -0700 (PDT) MIME-Version: 1.0 References: <0c28fbd1-3320-4e9b-815c-6d62753aa063@wi3ck.info> In-Reply-To: From: Masahiko Sawada Date: Wed, 18 Mar 2026 16:29:10 -0700 X-Gm-Features: AaiRm51RVjcNdgwy-iSmiUrkfsnzO9MijSL2czObPFGi3jrnx-neW3aZi5K4cSc Message-ID: Subject: Re: Initial COPY of Logical Replication is too slow To: Jan Wieck Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000e65f88064d54d3cd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e65f88064d54d3cd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 18, 2026 at 3:31=E2=80=AFPM Masahiko Sawada wrote: > > On Wed, Mar 18, 2026 at 1:11=E2=80=AFPM Jan Wieck wrote: > > > > On 3/18/26 12:44, Masahiko Sawada wrote: > > > On Wed, Mar 18, 2026 at 6:56=E2=80=AFAM Amit Kapila wrote: > > >> > > >> On Tue, Mar 10, 2026 at 3:40=E2=80=AFAM Masahiko Sawada wrote: > > >> > > > >> > On Tue, Mar 3, 2026 at 2:22=E2=80=AFAM Zhijie Hou (Fujitsu) > > >> > wrote: > > >> > > > > >> > > On Saturday, February 28, 2026 7:48 AM Masahiko Sawada wrote: > > >> > > > To: Marcos Pegoraro > > >> > > > Cc: PostgreSQL Hackers > > >> > > > Subject: Re: Initial COPY of Logical Replication is too slow > > >> > > > > > >> > > > Another variant of this approach is to extend > > >> > > > pg_get_publication_table() so that it can accept a relid to ge= t the publication > > >> > > > information of the specific table. I've attached the patch for= this idea. I'm > > >> > > > going to add regression test cases. > > >> > > > > > >> > > > pg_get_publication_table() is a VARIACID array function so the= patch changes > > >> > > > its signature to {text[] [, oid]}, breaking the tool compatibi= lity. Given this > > >> > > > function is mostly an internal-use function (we don't have the= documentation > > >> > > > for it), it would probably be okay with it. I find it's cleare= r than the other > > >> > > > approach of introducing pg_get_publication_table_info(). Feedb= ack is very > > >> > > > welcome. > > >> > > > > >> > > Thanks for updating the patch. > > >> > > > > >> > > I have few comments for the function change: > > >> > > > > >> > > 1. > > >> > > > > >> > > If we change the function signature, will it affect use cases wh= ere the > > >> > > publisher version is newer and the subscriber version is older ?= E.g., when > > >> > > publisher is passing text style publication name to pg_get_publi= cation_tables(). > > >> > > > >> > Good point. > > >> > > > >> > I noticed that changing the function signature of > > >> > pg_get_publication_tables() breaks logical replication setups wher= e > > >> > the subscriber is 18 or older. > > >> > > > >> > > >> Why adding a new function with additional parameters (Oid relid) > > >> couldn't help with such a case? I am asking because your previous > > >> version code looks simpler as compared to the new patch version. > > > > > > I tried to pass a relid to pg_get_publication_tables() but we cannot > > > avoid changing its signature because it's a VARIADIC array function. > > > The previous patch changed pg_get_publication_tables(VARIADIC text[]) > > > to pg_get_publication_tables(text[] {, relid}). However, changing the > > > function signature would break the logical replication from v19 to an > > > older version. > > > > Would it be possible to use function overloading to provide both > > signatures handled by different C functions internally? > > Yes, we can define both pg_get_publication_tables(VARIADIC text[]) and > pg_get_publication_tables(text, oid), which seems like a less invasive > approach. I'll give this idea a shot and see how it goes. I've attached the patch to implement this idea. The patch still introduces a new function but it overloads pg_get_publication_tables(). We might be able to handle different input (array or text) in pg_get_publication_tables() better, but it's enough for discussion at least. Regards, --=20 Masahiko Sawada Amazon Web Services: https://aws.amazon.com --000000000000e65f88064d54d3cd Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Avoid-full-table-scans-when-getting-publication-t.patch" Content-Disposition: attachment; filename="v3-0001-Avoid-full-table-scans-when-getting-publication-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmwo9fa80 RnJvbSBjMzY0NzkxMGRhZGI2NDU4OTVjZWExZWYxNWMxMWFhYTZjZDI1ZDE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNyBGZWIgMjAyNiAxNTo0MjozOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0gg djNdIEF2b2lkIGZ1bGwgdGFibGUgc2NhbnMgd2hlbiBnZXR0aW5nIHB1YmxpY2F0aW9uIHRhYmxl CiBpbmZvcm1hdGlvbiBieSB0YWJsZXN5bmMgd29ya2Vycy4KClJlcG9ydGVkLWJ5OiBNYXJjb3Mg UGVnb3Jhcm8gPG1hcmNvc0BmMTAuY29tLmJyPgpSZXZpZXdlZC1ieTogWmhpamllIEhvdSAoRnVq aXRzdSkgPGhvdXpqLmZuc3RAZnVqaXRzdS5jb20+ClJldmlld2VkLWJ5OiBNYXRoZXVzIEFsY2Fu dGFyYSA8bWF0aGV1c3NzaWx2OTdAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGku ZXZhbi5jaGFvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUIt Skx3YkJGTnVBU3lFblpXUDBUY2s5dU5rdGhCWnFpNldvWE5ldlVUNittVjhYbUFAbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgIHwg Mjk0ICsrKysrKysrKysrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3RhYmxlc3luYy5jIHwgIDc0ICsrKy0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 ICAgICAgICAgICAgIHwgIDExICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dCAgIHwgMTMxICsrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRp b24uc3FsICAgICAgICB8ICA2OSArKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA0OTAgaW5zZXJ0aW9u cygrKSwgODkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmlu ZGV4IGE3OTE1N2M0M2JmLi41ZjY4NzQ5MWE0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYwpAQCAtMTIwOCwxMiArMTIwOCwxMjkgQEAgR2V0UHVibGljYXRpb25CeU5hbWUoY29u c3QgY2hhciAqcHVibmFtZSwgYm9vbCBtaXNzaW5nX29rKQogfQogCiAvKgotICogR2V0IGluZm9y bWF0aW9uIG9mIHRoZSB0YWJsZXMgaW4gdGhlIGdpdmVuIHB1YmxpY2F0aW9uIGFycmF5LgorICog UmV0dXJucyB0cnVlIGlmIHRoZSB0YWJsZSBvZiB0aGUgZ2l2ZW4gcmVsaWQgaXMgcHVibGlzaGVk IGZvciB0aGUgc3BlY2lmaWVkCisgKiBwdWJsaWNhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u IGV2YWx1YXRlcyB0aGUgZWZmZWN0aXZlIHB1Ymxpc2hlZCBPSUQgYmFzZWQgb24gdGhlCisgKiBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBzZXR0aW5nLCByYXRoZXIgdGhhbiBqdXN0IGNoZWNr aW5nIGNhdGFsb2cgZW50cmllcworICogKGUuZy4sIHBnX3B1YmxpY2F0aW9uX3JlbCkuIEZvciBp bnN0YW5jZSwgd2hlbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcworICogZmFsc2UsIGl0 IHJldHVybnMgZmFsc2UgZm9yIGEgcGFyZW50IHBhcnRpdGlvbmVkIHRhYmxlIGFuZCB0cnVlIGZv ciBpdHMgbGVhZgorICogcGFydGl0aW9ucywgZXZlbiBpZiB0aGUgcGFyZW50IGlzIHRoZSBvbmUg ZXhwbGljaXRseSBhZGRlZCB0byB0aGUgcHVibGljYXRpb24uCisgKgorICogRm9yIHBlcmZvcm1h bmNlIHJlYXNvbnMsIHRoaXMgZnVuY3Rpb24gYXZvaWRzIHRoZSBvdmVyaGVhZCBvZiBjb25zdHJ1 Y3RpbmcKKyAqIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHB1Ymxpc2hlZCB0YWJsZXMgZHVyaW5nIHRo ZSBldmFsdWF0aW9uLiBJdCBjYW4gZXhlY3V0ZQorICogcXVpY2tseSBldmVuIHdoZW4gdGhlIHB1 YmxpY2F0aW9uIGNvbnRhaW5zIGEgbGFyZ2UgbnVtYmVyIG9mIHJlbGF0aW9ucy4KKyAqLworc3Rh dGljIGJvb2wKK2lzX3RhYmxlX3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKE9pZCByZWxpZCwg UHVibGljYXRpb24gKnB1YikKK3sKKwlpZiAocHViLT5wdWJ2aWFyb290KQorCXsKKwkJaWYgKHB1 Yi0+YWxsdGFibGVzKQorCQl7CisJCQkvKgorCQkJICogQUxMIFRBQkxFIHB1YmxpY2F0aW9ucyB3 aXRoIHB1YnZpYXJvb3Q9dHJ1ZSBpbmNsdWRlIG9ubHkgdGFibGVzCisJCQkgKiB0aGF0IGFyZSBl aXRoZXIgcmVndWxhciB0YWJsZXMgb3IgdG9wLW1vc3QgcGFydGl0aW9uZWQgdGFibGVzLgorCQkJ ICovCisJCQlpZiAoZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihyZWxpZCkpCisJCQkJcmV0dXJuIGZh bHNlOworCisJCQkvKgorCQkJICogQ2hlY2sgaWYgdGhlIHRhYmxlIGlzIHNwZWNpZmllZCBpbiB0 aGUgRVhDRVBUIGNsYXVzZSBpbiB0aGUKKwkJCSAqIHB1YmxpY2F0aW9uLiBBTEwgVEFCTEUgcHVi bGljYXRpb25zIGhhdmUgcGdfcHVibGljYXRpb25fcmVsCisJCQkgKiBlbnRyaWVzIG9ubHkgZm9y IEVYQ0VQVCdlZCB0YWJsZXMsIHNvIGl0J3Mgc3VmZmljaWVudCB0byBjaGVjaworCQkJICogdGhl IGV4aXN0ZW5jZSBvZiBpdHMgZW50cnkuCisJCQkgKi8KKwkJCXJldHVybiAhU2VhcmNoU3lzQ2Fj aGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1 bShyZWxpZCksCisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKSk7CisJCX0K KworCQkvKgorCQkgKiBDaGVjayBpZiBpdHMgY29ycmVzcG9uZGluZyBlbnRyeSBleGlzdHMgZWl0 aGVyIGluCisJCSAqIHBnX3B1YmxpY2F0aW9uX3JlbCBvciBwZ19wdWJsaWNhdGlvbl9uYW1lc3Bh Y2UuCisJCSAqLworCQlyZXR1cm4gKFNlYXJjaFN5c0NhY2hlRXhpc3RzMihQVUJMSUNBVElPTlJF TE1BUCwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksCisJCQkJCQkJCQkgIE9i amVjdElkR2V0RGF0dW0ocHViLT5vaWQpKSB8fAorCQkJCVNlYXJjaFN5c0NhY2hlRXhpc3RzMihQ VUJMSUNBVElPTk5BTUVTUEFDRU1BUCwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShnZXRf cmVsX25hbWVzcGFjZShyZWxpZCkpLAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHB1Yi0+ b2lkKSkpOworCX0KKworCS8qCisJICogRm9yIG5vbi1wdWJ2aWFyb290IHB1YmxpY2F0aW9ucywg cGFydGl0aW9uZWQgdGFibGUncyBPSUQgY2FuIG5ldmVyIGJlIGEKKwkgKiBwdWJsaXNoZWQgT0lE LgorCSAqLworCWlmIChnZXRfcmVsX3JlbGtpbmQocmVsaWQpID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChwdWItPmFsbHRhYmxlcykKKwl7CisJ CU9pZAkJCXRhcmdldF9yZWxpZCA9IHJlbGlkOworCisJCWlmIChnZXRfcmVsX3JlbGlzcGFydGl0 aW9uKHJlbGlkKSkKKwkJeworCQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9h bmNlc3RvcnMocmVsaWQpOworCisJCQkvKgorCQkJICogT25seSB0aGUgdG9wLW1vc3QgYW5jZXN0 b3IgY2FuIGFwcGVhciBpbiB0aGUgRVhDRVBUIGNsYXVzZS4KKwkJCSAqIFRoZXJlZm9yZSwgZm9y IGEgcGFydGl0aW9uLCBleGNsdXNpb24gbXVzdCBiZSBldmFsdWF0ZWQgYXQgdGhlCisJCQkgKiB0 b3AtbW9zdCBhbmNlc3Rvci4KKwkJCSAqLworCQkJdGFyZ2V0X3JlbGlkID0gbGxhc3Rfb2lkKGFu Y2VzdG9ycyk7CisKKwkJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCQl9CisKKwkJLyoKKwkJICog VGhlIHRhYmxlIGlzIHB1Ymxpc2hlZCB1bmxlc3MgaXQncyBzcGVjaWZpZWQgaW4gdGhlIEVYQ0VQ VCBjbGF1c2UuCisJCSAqIEFMTCBUQUJMRSBwdWJsaWNhdGlvbnMgaGF2ZSBwZ19wdWJsaWNhdGlv bl9yZWwgZW50cmllcyBvbmx5IGZvcgorCQkgKiBFWENFUFQnZWQgdGFibGVzLCBzbyBpdCdzIHN1 ZmZpY2llbnQgdG8gY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBpdHMKKwkJICogZW50cnkuCisJCSAq LworCQlyZXR1cm4gIVNlYXJjaFN5c0NhY2hlRXhpc3RzMihQVUJMSUNBVElPTlJFTE1BUCwKKwkJ CQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bSh0YXJnZXRfcmVsaWQpLAorCQkJCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKHB1Yi0+b2lkKSk7CisJfQorCisJaWYgKGdldF9yZWxfcmVsaXNwYXJ0aXRp b24ocmVsaWQpKQorCXsKKwkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNl c3RvcnMocmVsaWQpOworCQlPaWQJCQl0b3Btb3N0ID0gR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJs aWNhdGlvbihwdWItPm9pZCwgYW5jZXN0b3JzLAorCQkJCQkJCQkJCQkJCQkJICBOVUxMKTsKKwor CQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKworCQkvKiBUaGlzIHRhYmxlIGlzIHB1Ymxpc2hlZCBp ZiBpdHMgYW5jZXN0b3IgaXMgcHVibGlzaGVkICovCisJCWlmIChPaWRJc1ZhbGlkKHRvcG1vc3Qp KQorCQkJcmV0dXJuIHRydWU7CisKKwkJLyogVGhlIHBhcnRpdGlvbiBpdHNlbGYgbWlnaHQgYmUg cHVibGlzaGVkLCBzbyBjaGVjayBiZWxvdyAqLworCX0KKworCXJldHVybiAoU2VhcmNoU3lzQ2Fj aGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0o cmVsaWQpLAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpKSB8fAorCQkJU2Vh cmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OTkFNRVNQQUNFTUFQLAorCQkJCQkJCQkgIE9i amVjdElkR2V0RGF0dW0oZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpKSwKKwkJCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKHB1Yi0+b2lkKSkpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRv IGdldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIGluIHRoZSBnaXZlbgorICogcHVibGljYXRp b24ocykuCisgKgorICogVGhlIHBhcmFtZXRlcnMgcHVibmFtZXMgYW5kIHtwdWJuYW1lLCB0YXJn ZXRfcmVsaWR9IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisgKiBJZiB0YXJnZXRfcmVsaWQgaXMg cHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIG9ubHkgZm9yIHRoYXQK KyAqIHNwZWNpZmljIHRhYmxlLiBPdGhlcndpc2UsIGlmIHJldHVybnMgaW5mb3JtYXRpb24gZm9y IGFsbCB0YWJsZXMgd2l0aGluIHRoZQorICogc3BlY2lmaWVkIHB1YmxpY2F0aW9ucy4KICAqCiAg KiBSZXR1cm5zIHB1YmlkLCByZWxpZCwgY29sdW1uIGxpc3QsIHJvdyBmaWx0ZXIgZm9yIGVhY2gg dGFibGUuCiAgKi8KLURhdHVtCi1wZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9O X0FSR1MpCitzdGF0aWMgRGF0dW0KK3BnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8sIEFycmF5VHlwZSAqcHVibmFtZXMsCisJCQkJCQkgIHRleHQgKnB1Ym5h bWUsIE9pZCB0YXJnZXRfcmVsaWQpCiB7CiAjZGVmaW5lIE5VTV9QVUJMSUNBVElPTl9UQUJMRVNf RUxFTQk0CiAJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OwpAQCAtMTIyNCwxMSArMTM0MSw2IEBA IHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAl7CiAJCVR1cGxl RGVzYwl0dXBkZXNjOwogCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7Ci0JCUFycmF5VHlwZSAg KmFycjsKLQkJRGF0dW0JICAgKmVsZW1zOwotCQlpbnQJCQluZWxlbXMsCi0JCQkJCWk7Ci0JCWJv b2wJCXZpYXJvb3QgPSBmYWxzZTsKIAogCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBjb250ZXh0IGZv ciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCiAJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lO SVQoKTsKQEAgLTEyMzYsODEgKzEzNDgsMTExIEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMo UEdfRlVOQ1RJT05fQVJHUykKIAkJLyogc3dpdGNoIHRvIG1lbW9yeSBjb250ZXh0IGFwcHJvcHJp YXRlIGZvciBtdWx0aXBsZSBmdW5jdGlvbiBjYWxscyAqLwogCQlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CiAKLQkJLyoK LQkJICogRGVjb25zdHJ1Y3QgdGhlIHBhcmFtZXRlciBpbnRvIGVsZW1lbnRzIHdoZXJlIGVhY2gg ZWxlbWVudCBpcyBhCi0JCSAqIHB1YmxpY2F0aW9uIG5hbWUuCi0JCSAqLwotCQlhcnIgPSBQR19H RVRBUkdfQVJSQVlUWVBFX1AoMCk7Ci0JCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4oYXJyLCBU RVhUT0lELCAmZWxlbXMsIE5VTEwsICZuZWxlbXMpOwotCi0JCS8qIEdldCBPaWRzIG9mIHRhYmxl cyBmcm9tIGVhY2ggcHVibGljYXRpb24uICovCi0JCWZvciAoaSA9IDA7IGkgPCBuZWxlbXM7IGkr KykKKwkJaWYgKHB1Ym5hbWUgIT0gTlVMTCkKIAkJewotCQkJUHVibGljYXRpb24gKnB1Yl9lbGVt OwotCQkJTGlzdAkgICAqcHViX2VsZW1fdGFibGVzID0gTklMOwotCQkJTGlzdENlbGwgICAqbGM7 CisJCQlQdWJsaWNhdGlvbiAqcHViOwogCi0JCQlwdWJfZWxlbSA9IEdldFB1YmxpY2F0aW9uQnlO YW1lKFRleHREYXR1bUdldENTdHJpbmcoZWxlbXNbaV0pLCBmYWxzZSk7CisJCQlBc3NlcnQoT2lk SXNWYWxpZCh0YXJnZXRfcmVsaWQpKTsKKwkJCXB1YiA9IEdldFB1YmxpY2F0aW9uQnlOYW1lKHRl eHRfdG9fY3N0cmluZyhwdWJuYW1lKSwgZmFsc2UpOwogCi0JCQkvKgotCQkJICogUHVibGljYXRp b25zIHN1cHBvcnQgcGFydGl0aW9uZWQgdGFibGVzLiBJZgotCQkJICogcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgaXMgZmFsc2UsIGFsbCBjaGFuZ2VzIGFyZSByZXBsaWNhdGVkCi0JCQkgKiB1 c2luZyBsZWFmIHBhcnRpdGlvbiBpZGVudGl0eSBhbmQgc2NoZW1hLCBzbyB3ZSBvbmx5IG5lZWQK LQkJCSAqIHRob3NlLiBPdGhlcndpc2UsIGdldCB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXRzZWxm LgotCQkJICovCi0JCQlpZiAocHViX2VsZW0tPmFsbHRhYmxlcykKLQkJCQlwdWJfZWxlbV90YWJs ZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAotCQkJCQkJCQkJ CQkJCQkJIFJFTEtJTkRfUkVMQVRJT04sCi0JCQkJCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZp YXJvb3QpOwotCQkJZWxzZQorCQkJaWYgKGlzX3RhYmxlX3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0 aW9uKHRhcmdldF9yZWxpZCwgcHViKSkKIAkJCXsKLQkJCQlMaXN0CSAgICpyZWxpZHMsCi0JCQkJ CQkgICAqc2NoZW1hcmVsaWRzOwotCi0JCQkJcmVsaWRzID0gR2V0SW5jbHVkZWRQdWJsaWNhdGlv blJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAotCQkJCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZp YXJvb3QgPwotCQkJCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9ST09UIDoKLQkJCQkJCQkJ CQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7Ci0JCQkJc2NoZW1hcmVsaWRzID0gR2V0QWxs U2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKLQkJCQkJCQkJCQkJCQkJ CQlwdWJfZWxlbS0+cHVidmlhcm9vdCA/Ci0JCQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFS VF9ST09UIDoKLQkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX0xFQUYpOwotCQkJCXB1 Yl9lbGVtX3RhYmxlcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocmVsaWRzLCBzY2hlbWFyZWxp ZHMpOworCQkJCXB1Ymxpc2hlZF9yZWwgKnRhYmxlX2luZm8gPSBwYWxsb2Nfb2JqZWN0KHB1Ymxp c2hlZF9yZWwpOworCisJCQkJdGFibGVfaW5mby0+cmVsaWQgPSB0YXJnZXRfcmVsaWQ7CisJCQkJ dGFibGVfaW5mby0+cHViaWQgPSBwdWItPm9pZDsKKwkJCQl0YWJsZV9pbmZvcyA9IGxhcHBlbmQo dGFibGVfaW5mb3MsIHRhYmxlX2luZm8pOwogCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJRGF0 dW0JICAgKmVsZW1zOworCQkJaW50CQkJbmVsZW1zLAorCQkJCQkJaTsKKwkJCWJvb2wJCXZpYXJv b3QgPSBmYWxzZTsKKworCQkJQXNzZXJ0KHB1Ym5hbWVzICE9IE5VTEwpOwogCiAJCQkvKgotCQkJ ICogUmVjb3JkIHRoZSBwdWJsaXNoZWQgdGFibGUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHB1Ymxp Y2F0aW9uIHNvCi0JCQkgKiB0aGF0IHdlIGNhbiBnZXQgcm93IGZpbHRlcnMgYW5kIGNvbHVtbiBs aXN0cyBsYXRlci4KLQkJCSAqCi0JCQkgKiBXaGVuIGEgdGFibGUgaXMgcHVibGlzaGVkIGJ5IG11 bHRpcGxlIHB1YmxpY2F0aW9ucywgdG8gb2J0YWluCi0JCQkgKiBhbGwgcm93IGZpbHRlcnMgYW5k IGNvbHVtbiBsaXN0cywgdGhlIHN0cnVjdHVyZSByZWxhdGVkIHRvIHRoaXMKLQkJCSAqIHRhYmxl IHdpbGwgYmUgcmVjb3JkZWQgbXVsdGlwbGUgdGltZXMuCisJCQkgKiBEZWNvbnN0cnVjdCB0aGUg cGFyYW1ldGVyIGludG8gZWxlbWVudHMgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEKKwkJCSAqIHB1 YmxpY2F0aW9uIG5hbWUuCiAJCQkgKi8KLQkJCWZvcmVhY2gobGMsIHB1Yl9lbGVtX3RhYmxlcykK KwkJCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4ocHVibmFtZXMsIFRFWFRPSUQsICZlbGVtcywg TlVMTCwgJm5lbGVtcyk7CisKKwkJCS8qIEdldCBPaWRzIG9mIHRhYmxlcyBmcm9tIGVhY2ggcHVi bGljYXRpb24uICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCiAJCQl7Ci0JCQkJ cHVibGlzaGVkX3JlbCAqdGFibGVfaW5mbyA9IHBhbGxvY19vYmplY3QocHVibGlzaGVkX3JlbCk7 CisJCQkJUHVibGljYXRpb24gKnB1Yl9lbGVtOworCQkJCUxpc3QJICAgKnB1Yl9lbGVtX3RhYmxl cyA9IE5JTDsKKwkJCQlMaXN0Q2VsbCAgICpsYzsKKworCQkJCXB1Yl9lbGVtID0gR2V0UHVibGlj YXRpb25CeU5hbWUoVGV4dERhdHVtR2V0Q1N0cmluZyhlbGVtc1tpXSksIGZhbHNlKTsKKworCQkJ CS8qCisJCQkJICogUHVibGljYXRpb25zIHN1cHBvcnQgcGFydGl0aW9uZWQgdGFibGVzLiBJZgor CQkJCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIGZhbHNlLCBhbGwgY2hhbmdlcyBh cmUKKwkJCQkgKiByZXBsaWNhdGVkIHVzaW5nIGxlYWYgcGFydGl0aW9uIGlkZW50aXR5IGFuZCBz Y2hlbWEsIHNvIHdlCisJCQkJICogb25seSBuZWVkIHRob3NlLiBPdGhlcndpc2UsIGdldCB0aGUg cGFydGl0aW9uZWQgdGFibGUKKwkJCQkgKiBpdHNlbGYuCisJCQkJICovCisJCQkJaWYgKHB1Yl9l bGVtLT5hbGx0YWJsZXMpCisJCQkJCXB1Yl9lbGVtX3RhYmxlcyA9IEdldEFsbFB1YmxpY2F0aW9u UmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQsCisJCQkJCQkJCQkJCQkJCQkJIFJFTEtJTkRfUkVMQVRJ T04sCisJCQkJCQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFyb290KTsKKwkJCQllbHNlCisJ CQkJeworCQkJCQlMaXN0CSAgICpyZWxpZHMsCisJCQkJCQkJICAgKnNjaGVtYXJlbGlkczsKKwor CQkJCQlyZWxpZHMgPSBHZXRJbmNsdWRlZFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5v aWQsCisJCQkJCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZpYXJvb3QgPworCQkJCQkJCQkJCQkJ CQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6CisJCQkJCQkJCQkJCQkJCQkgUFVCTElDQVRJT05f UEFSVF9MRUFGKTsKKwkJCQkJc2NoZW1hcmVsaWRzID0gR2V0QWxsU2NoZW1hUHVibGljYXRpb25S ZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKKwkJCQkJCQkJCQkJCQkJCQkJcHViX2VsZW0tPnB1YnZp YXJvb3QgPworCQkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJ CQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX0xFQUYpOworCQkJCQlwdWJfZWxlbV90YWJsZXMg PSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHJlbGlkcywgc2NoZW1hcmVsaWRzKTsKKwkJCQl9CiAK LQkJCQl0YWJsZV9pbmZvLT5yZWxpZCA9IGxmaXJzdF9vaWQobGMpOwotCQkJCXRhYmxlX2luZm8t PnB1YmlkID0gcHViX2VsZW0tPm9pZDsKLQkJCQl0YWJsZV9pbmZvcyA9IGxhcHBlbmQodGFibGVf aW5mb3MsIHRhYmxlX2luZm8pOworCQkJCS8qCisJCQkJICogUmVjb3JkIHRoZSBwdWJsaXNoZWQg dGFibGUgYW5kIHRoZSBjb3JyZXNwb25kaW5nCisJCQkJICogcHVibGljYXRpb24gc28gdGhhdCB3 ZSBjYW4gZ2V0IHJvdyBmaWx0ZXJzIGFuZCBjb2x1bW4gbGlzdHMKKwkJCQkgKiBsYXRlci4KKwkJ CQkgKgorCQkJCSAqIFdoZW4gYSB0YWJsZSBpcyBwdWJsaXNoZWQgYnkgbXVsdGlwbGUgcHVibGlj YXRpb25zLCB0bworCQkJCSAqIG9idGFpbiBhbGwgcm93IGZpbHRlcnMgYW5kIGNvbHVtbiBsaXN0 cywgdGhlIHN0cnVjdHVyZQorCQkJCSAqIHJlbGF0ZWQgdG8gdGhpcyB0YWJsZSB3aWxsIGJlIHJl Y29yZGVkIG11bHRpcGxlIHRpbWVzLgorCQkJCSAqLworCQkJCWZvcmVhY2gobGMsIHB1Yl9lbGVt X3RhYmxlcykKKwkJCQl7CisJCQkJCXB1Ymxpc2hlZF9yZWwgKnRhYmxlX2luZm8gPSBwYWxsb2Nf b2JqZWN0KHB1Ymxpc2hlZF9yZWwpOworCisJCQkJCXRhYmxlX2luZm8tPnJlbGlkID0gbGZpcnN0 X29pZChsYyk7CisJCQkJCXRhYmxlX2luZm8tPnB1YmlkID0gcHViX2VsZW0tPm9pZDsKKwkJCQkJ dGFibGVfaW5mb3MgPSBsYXBwZW5kKHRhYmxlX2luZm9zLCB0YWJsZV9pbmZvKTsKKwkJCQl9CisK KwkJCQkvKgorCQkJCSAqIEF0IGxlYXN0IG9uZSBwdWJsaWNhdGlvbiBpcyB1c2luZworCQkJCSAq IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LgorCQkJCSAqLworCQkJCWlmIChwdWJfZWxlbS0+ cHVidmlhcm9vdCkKKwkJCQkJdmlhcm9vdCA9IHRydWU7CiAJCQl9CiAKLQkJCS8qIEF0IGxlYXN0 IG9uZSBwdWJsaWNhdGlvbiBpcyB1c2luZyBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdC4gKi8K LQkJCWlmIChwdWJfZWxlbS0+cHVidmlhcm9vdCkKLQkJCQl2aWFyb290ID0gdHJ1ZTsKKwkJCS8q CisJCQkgKiBJZiB0aGUgcHVibGljYXRpb24gcHVibGlzaGVzIHBhcnRpdGlvbiBjaGFuZ2VzIHZp YSB0aGVpcgorCQkJICogcmVzcGVjdGl2ZSByb290IHBhcnRpdGlvbmVkIHRhYmxlcywgd2UgbXVz dCBleGNsdWRlIHBhcnRpdGlvbnMKKwkJCSAqIGluIGZhdm9yIG9mIGluY2x1ZGluZyB0aGUgcm9v dCBwYXJ0aXRpb25lZCB0YWJsZXMuIE90aGVyd2lzZSwKKwkJCSAqIHRoZSBmdW5jdGlvbiBjb3Vs ZCByZXR1cm4gYm90aCB0aGUgY2hpbGQgYW5kIHBhcmVudCB0YWJsZXMKKwkJCSAqIHdoaWNoIGNv dWxkIGNhdXNlIGRhdGEgb2YgdGhlIGNoaWxkIHRhYmxlIHRvIGJlCisJCQkgKiBkb3VibGUtcHVi bGlzaGVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuCisJCQkgKi8KKwkJCWlmICh2aWFyb290KQor CQkJCWZpbHRlcl9wYXJ0aXRpb25zKHRhYmxlX2luZm9zKTsKIAkJfQogCi0JCS8qCi0JCSAqIElm IHRoZSBwdWJsaWNhdGlvbiBwdWJsaXNoZXMgcGFydGl0aW9uIGNoYW5nZXMgdmlhIHRoZWlyIHJl c3BlY3RpdmUKLQkJICogcm9vdCBwYXJ0aXRpb25lZCB0YWJsZXMsIHdlIG11c3QgZXhjbHVkZSBw YXJ0aXRpb25zIGluIGZhdm9yIG9mCi0JCSAqIGluY2x1ZGluZyB0aGUgcm9vdCBwYXJ0aXRpb25l ZCB0YWJsZXMuIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uCi0JCSAqIGNvdWxkIHJldHVybiBib3Ro IHRoZSBjaGlsZCBhbmQgcGFyZW50IHRhYmxlcyB3aGljaCBjb3VsZCBjYXVzZQotCQkgKiBkYXRh IG9mIHRoZSBjaGlsZCB0YWJsZSB0byBiZSBkb3VibGUtcHVibGlzaGVkIG9uIHRoZSBzdWJzY3Jp YmVyCi0JCSAqIHNpZGUuCi0JCSAqLwotCQlpZiAodmlhcm9vdCkKLQkJCWZpbHRlcl9wYXJ0aXRp b25zKHRhYmxlX2luZm9zKTsKLQogCQkvKiBDb25zdHJ1Y3QgYSB0dXBsZSBkZXNjcmlwdG9yIGZv ciB0aGUgcmVzdWx0IHJvd3MuICovCiAJCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVz YyhOVU1fUFVCTElDQVRJT05fVEFCTEVTX0VMRU0pOwogCQlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDEsICJwdWJpZCIsCkBAIC0xNDM1LDYgKzE1NzcsMjAgQEAgcGdf Z2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9BUkdTKQogCVNSRl9SRVRVUk5fRE9O RShmdW5jY3R4KTsKIH0KIAorRGF0dW0KK3BnX2dldF9wdWJsaWNhdGlvbl90YWJsZXNfYShQR19G VU5DVElPTl9BUkdTKQoreworCS8qIEdldCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHRhYmxlcyBp biB0aGUgZ2l2ZW4gcHVibGljYXRpb25zICovCisJcmV0dXJuIHBnX2dldF9wdWJsaWNhdGlvbl90 YWJsZXMoZmNpbmZvLCBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMCksIE5VTEwsIEludmFsaWRPaWQp OworfQorCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlc19iKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJLyogR2V0IHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgc3BlY2lmaWVkIHRhYmxlIGlu IHRoZSBnaXZlbiBwdWJsaWNhdGlvbiAqLworCXJldHVybiBwZ19nZXRfcHVibGljYXRpb25fdGFi bGVzKGZjaW5mbywgTlVMTCwgUEdfR0VUQVJHX1RFWFRfUCgwKSwgUEdfR0VUQVJHX09JRCgxKSk7 Cit9CisKIC8qCiAgKiBSZXR1cm5zIE9pZHMgb2Ygc2VxdWVuY2VzIGluIGEgcHVibGljYXRpb24u CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVz eW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCmluZGV4 IGY0OWE0ODUyZWNiLi44ODRiNTZiYjI2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3RhYmxlc3luYy5jCkBAIC03OTgsMTcgKzc5OCwzNyBAQCBmZXRjaF9yZW1vdGVfdGFi bGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24g KmxyZWwsCiAJCSAqIHB1YmxpY2F0aW9ucykuCiAJCSAqLwogCQlyZXNldFN0cmluZ0luZm8oJmNt ZCk7Ci0JCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKLQkJCQkJCSAiU0VMRUNUIERJU1RJTkNUIgot CQkJCQkJICIgIChDQVNFIFdIRU4gKGFycmF5X2xlbmd0aChncHQuYXR0cnMsIDEpID0gYy5yZWxu YXR0cykiCi0JCQkJCQkgIiAgIFRIRU4gTlVMTCBFTFNFIGdwdC5hdHRycyBFTkQpIgotCQkJCQkJ ICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCi0JCQkJCQkgIiAgTEFURVJBTCBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKHAucHVibmFtZSkgZ3B0LCIKLQkJCQkJCSAiICBwZ19jbGFzcyBjIgot CQkJCQkJICIgV0hFUkUgZ3B0LnJlbGlkID0gJXUgQU5EIGMub2lkID0gZ3B0LnJlbGlkIgotCQkJ CQkJICIgICBBTkQgcC5wdWJuYW1lIElOICggJXMgKSIsCi0JCQkJCQkgbHJlbC0+cmVtb3RlaWQs Ci0JCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKKworCQlpZiAoc2VydmVyX3ZlcnNpb24gPj0gMTkw MDAwKQorCQl7CisJCQkvKgorCQkJICogV2UgY2FuIHBhc3MgcmVsaWQgdG8gcGdfZ2V0X3B1Ymxp Y2F0aW9uX3RhYmxlX2luZm8oKSBzaW5jZQorCQkJICogdmVyc2lvbiAxOS4KKwkJCSAqLworCQkJ YXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJCSAiU0VMRUNUIERJU1RJTkNUIgorCQkJCQkJ CSAiICAoQ0FTRSBXSEVOIChhcnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9IGMucmVsbmF0dHMp IgorCQkJCQkJCSAiICAgVEhFTiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCkiCisJCQkJCQkJICIg IEZST00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1Ymxp Y2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUsICV1KSBncHQsIgorCQkJCQkJCSAiICBwZ19jbGFzcyBj IgorCQkJCQkJCSAiIFdIRVJFIGMub2lkID0gZ3B0LnJlbGlkIgorCQkJCQkJCSAiICAgQU5EIHAu cHVibmFtZSBJTiAoICVzICkiLAorCQkJCQkJCSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCQkgcHVi X25hbWVzLT5kYXRhKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJ CQkJCQkJICJTRUxFQ1QgRElTVElOQ1QiCisJCQkJCQkJICIgIChDQVNFIFdIRU4gKGFycmF5X2xl bmd0aChncHQuYXR0cnMsIDEpID0gYy5yZWxuYXR0cykiCisJCQkJCQkJICIgICBUSEVOIE5VTEwg RUxTRSBncHQuYXR0cnMgRU5EKSIKKwkJCQkJCQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwLCIK KwkJCQkJCQkgIiAgTEFURVJBTCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHAucHVibmFtZSkg Z3B0LCIKKwkJCQkJCQkgIiAgcGdfY2xhc3MgYyIKKwkJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQg PSAldSBBTkQgYy5vaWQgPSBncHQucmVsaWQiCisJCQkJCQkJICIgICBBTkQgcC5wdWJuYW1lIElO ICggJXMgKSIsCisJCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJCSBwdWJfbmFtZXMtPmRh dGEpOwogCiAJCXB1YnJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNt ZC5kYXRhLAogCQkJCQkJCSBsZW5ndGhvZihhdHRyc1JvdyksIGF0dHJzUm93KTsKQEAgLTk4Miwx NCArMTAwMiwzMCBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFy ICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCiAKIAkJLyogQ2hlY2sgZm9yIHJv dyBmaWx0ZXJzLiAqLwogCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7Ci0JCWFwcGVuZFN0cmluZ0lu Zm8oJmNtZCwKLQkJCQkJCSAiU0VMRUNUIERJU1RJTkNUIHBnX2dldF9leHByKGdwdC5xdWFsLCBn cHQucmVsaWQpIgotCQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCi0JCQkJCQkgIiAg TEFURVJBTCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHAucHVibmFtZSkgZ3B0IgotCQkJCQkJ ICIgV0hFUkUgZ3B0LnJlbGlkID0gJXUiCi0JCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAl cyApIiwKLQkJCQkJCSBscmVsLT5yZW1vdGVpZCwKLQkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOwor CisJCWlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxOTAwMDApCisJCXsKKwkJCS8qCisJCQkgKiBXZSBj YW4gcGFzcyByZWxpZCB0byBwZ19nZXRfcHVibGljYXRpb25fdGFibGVfaW5mbygpIHNpbmNlCisJ CQkgKiB2ZXJzaW9uIDE5LgorCQkJICovCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJ CQkJICJTRUxFQ1QgRElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCkiCisJ CQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwgcGdf Z2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUsICV1KSBncHQiCisJCQkJCQkJICIgV0hF UkUgcC5wdWJuYW1lIElOICggJXMgKSIsCisJCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJ CSBwdWJfbmFtZXMtPmRhdGEpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmNt ZCwKKwkJCQkJCQkgIlNFTEVDVCBESVNUSU5DVCBwZ19nZXRfZXhwcihncHQucXVhbCwgZ3B0LnJl bGlkKSIKKwkJCQkJCQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwLCIKKwkJCQkJCQkgIiAgTEFU RVJBTCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHAucHVibmFtZSkgZ3B0IgorCQkJCQkJCSAi IFdIRVJFIGdwdC5yZWxpZCA9ICV1IgorCQkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoICVz ICkiLAorCQkJCQkJCSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhKTsK IAogCQlyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwg MSwgcXVhbFJvdyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGZjOGQ4MjY2NWI4Li4y OTRlZTcxN2E2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjQ1Myw3ICsxMjQ1Mywx NiBAQAogICBwcm9hbGxhcmd0eXBlcyA9PiAne190ZXh0LG9pZCxvaWQsaW50MnZlY3RvcixwZ19u b2RlX3RyZWV9JywKICAgcHJvYXJnbW9kZXMgPT4gJ3t2LG8sbyxvLG99JywKICAgcHJvYXJnbmFt ZXMgPT4gJ3twdWJuYW1lLHB1YmlkLHJlbGlkLGF0dHJzLHF1YWx9JywKLSAgcHJvc3JjID0+ICdw Z19nZXRfcHVibGljYXRpb25fdGFibGVzJyB9LAorICBwcm9zcmMgPT4gJ3BnX2dldF9wdWJsaWNh dGlvbl90YWJsZXNfYScgfSwKK3sgb2lkID0+ICc4MDYwJywKKyAgZGVzY3IgPT4gJ2dldCBpbmZv cm1hdGlvbiBvZiB0aGUgc3BlY2lmaWVkIHRhYmxlIHRoYXQgaXMgcGFydCBvZiB0aGUgc3BlY2lm aWVkIHB1YmxpY2F0aW9uJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxl cycsIHByb3Jvd3MgPT4gJzEnLAorICBwcm9yZXRzZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAn cycsCisgIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IG9pZCcs CisgIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCxvaWQsb2lkLG9pZCxpbnQydmVjdG9yLHBnX25v ZGVfdHJlZX0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksaSxvLG8sbyxvfScsCisgIHByb2FyZ25h bWVzID0+ICd7cHVibmFtZSxyZWxpZCxwdWJpZCxyZWxpZCxhdHRycyxxdWFsfScsCisgIHByb3Ny YyA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlc19iJyB9LAogeyBvaWQgPT4gJzgwNTInLCBk ZXNjciA9PiAnZ2V0IE9JRHMgb2Ygc2VxdWVuY2VzIGluIGEgcHVibGljYXRpb24nLAogICBwcm9u YW1lID0+ICdwZ19nZXRfcHVibGljYXRpb25fc2VxdWVuY2VzJywgcHJvcm93cyA9PiAnMTAwMCcs IHByb3JldHNldCA9PiAndCcsCiAgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAn b2lkJywgcHJvYXJndHlwZXMgPT4gJ3RleHQnLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dAppbmRleCA2ODFkMjU2NGVkNS4uOTFjMzM5YmQyNzggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0yMTgyLDYgKzIxODIsMTM3IEBA IERST1AgVEFCTEUgdGVzdHB1Yl9tZXJnZV9wazsKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElP TjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIsIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlcjI7CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyX2R1bW15OworLS0g VGVzdCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHRleHQsIG9pZCkgZnVuY3Rpb24KK0NSRUFU RSBTQ0hFTUEgZ3B0X3Rlc3Rfc2NoOworQ1JFQVRFIFRBQkxFIGdwdF90ZXN0X3NjaC50Ymxfc2No IChpZCBpbnQpOworQ1JFQVRFIFRBQkxFIHRibF9ub3JtYWwgKGlkIGludCk7CitDUkVBVEUgVEFC TEUgdGJsX3BhcmVudCAoaWQxIGludCwgaWQyIGludCwgaWQzIGludCkgUEFSVElUSU9OIEJZIFJB TkdFIChpZDEpOworQ1JFQVRFIFRBQkxFIHRibF9wYXJ0MSBQQVJUSVRJT04gT0YgdGJsX3BhcmVu dCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCk7CitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX2FsbCBGT1IgQUxMIFRBQkxFUyBXSVRI IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1Yl9hbGxfbm92aWFfcm9vdCBGT1IgQUxMIFRBQkxFUyBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCA9IGZhbHNlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfYWxsX2V4Y2VwdCBG T1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRibF9wYXJlbnQsIGdwdF90ZXN0X3NjaC50Ymxf c2NoKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1B IGdwdF90ZXN0X3NjaDsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfbm9ybWFsIEZPUiBUQUJMRSB0 Ymxfbm9ybWFsIFdIRVJFIChpZCA8IDEwKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9s ZWFmIEZPUiBUQUJMRSB0YmxfcGFydDEgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSBmYWxzZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50IEZPUiBUQUJMRSB0 YmxfcGFyZW50IChpZDEsIGlkMikgV0hFUkUgKGlkMSA9IDEwKSBXSVRIIChwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IHRydWUpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVu dF9ub3ZpYV9yb290IEZPUiBUQUJMRSB0YmxfcGFyZW50IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gZmFsc2UpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0NSRUFURSBG VU5DVElPTiB0ZXN0X2dwdChwdWJuYW1lIHRleHQsIHJlbG5hbWUgdGV4dCkKK1JFVFVSTlMgVEFC TEUgKAorICBwdWJuYW1lIHRleHQsCisgIHJlbG5hbWUgbmFtZSwKKyAgYXR0cnMgdGV4dCwKKyAg cXVhbCB0ZXh0CispCitCRUdJTiBBVE9NSUMKKyAgU0VMRUNUIHAucHVibmFtZSwgYy5yZWxuYW1l LCBncHQuYXR0cnM6OnRleHQsIHBnX2dldF9leHByKGdwdC5xdWFsLCBncHQucmVsaWQpCisgICAg RlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHB1Ym5hbWUsIHJlbG5hbWU6OnJlZ2NsYXNz OjpvaWQpIGdwdAorICAgIEpPSU4gcGdfcHVibGljYXRpb24gcCBPTiBwLm9pZCA9IGdwdC5wdWJp ZAorICAgIEpPSU4gcGdfY2xhc3MgYyBPTiBjLm9pZCA9IGdwdC5yZWxpZAorICBPUkRFUiBCWSBw LnB1Ym5hbWUsIGMucmVsbmFtZTsKK0VORDsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9u b3JtYWwnLCAndGJsX25vcm1hbCcpOworICBwdWJuYW1lICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMg fCAgIHF1YWwgICAgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0t LS0KKyBwdWJfbm9ybWFsIHwgdGJsX25vcm1hbCB8IDEgICAgIHwgKGlkIDwgMTApCisoMSByb3cp CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9zY2hlbWEnLCAndGJsX25vcm1hbCcpOyAt LSBubyByZXN1bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVz dF9ncHQoJ3B1Yl9wYXJ0X3BhcmVudCcsICd0YmxfcGFyZW50Jyk7CisgICAgIHB1Ym5hbWUgICAg IHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgICAgcXVhbCAgICAKKy0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQorIHB1Yl9wYXJ0X3BhcmVudCB8IHRibF9w YXJlbnQgfCAxIDIgICB8IChpZDEgPSAxMCkKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0 X2dwdCgncHViX3BhcnRfcGFyZW50JywgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKKyBwdWJu YW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3Bh cmVudF9ub3ZpYV9yb290JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CisgcHVibmFtZSB8 IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfcGFydF9wYXJlbnRf bm92aWFfcm9vdCcsICd0YmxfcGFydDEnKTsKKyAgICAgICAgICBwdWJuYW1lICAgICAgICAgICB8 ICByZWxuYW1lICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJfcGFydF9wYXJlbnRfbm92aWFfcm9vdCB8 IHRibF9wYXJ0MSB8IDEgMiAzIHwgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo J3B1Yl9wYXJ0X2xlYWYnLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwg cmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X2xlYWYnLCAn dGJsX3BhcnQxJyk7CisgICAgcHVibmFtZSAgICB8ICByZWxuYW1lICB8IGF0dHJzIHwgcXVhbCAK Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIHB1Yl9wYXJ0X2xl YWYgfCB0YmxfcGFydDEgfCAxIDIgMyB8IAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRlc3Rf Z3B0KCdwdWJfYWxsJywgJ3RibF9wYXJlbnQnKTsKKyBwdWJuYW1lIHwgIHJlbG5hbWUgICB8IGF0 dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJf YWxsIHwgdGJsX3BhcmVudCB8IDEgMiAzIHwgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVz dF9ncHQoJ3B1Yl9hbGwnLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUgfCBy ZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0t LQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAn dGJsX25vcm1hbCcpOworICAgIHB1Ym5hbWUgICAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgcXVh bCAKKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisgcHViX2Fs bF9leGNlcHQgfCB0Ymxfbm9ybWFsIHwgMSAgICAgfCAKKygxIHJvdykKKworU0VMRUNUICogRlJP TSB0ZXN0X2dwdCgncHViX2FsbF9leGNlcHQnLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsgLS0g bm8gcmVzdWx0IChleGNsdWRlZCkKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAK Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAq IEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhjZXB0JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVz dWx0IChleGNsdWRlZCkKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00g dGVzdF9ncHQoJ3B1Yl9hbGxfZXhjZXB0JywgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQgKGV4 Y2x1ZGVkKQorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dw dCgncHViX2FsbF9ub3ZpYV9yb290JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CisgcHVi bmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX25v dmlhX3Jvb3QnLCAndGJsX3BhcnQxJyk7CisgICAgICBwdWJuYW1lICAgICAgIHwgIHJlbG5hbWUg IHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0KKyBwdWJfYWxsX25vdmlhX3Jvb3QgfCB0YmxfcGFydDEgfCAxIDIgMyB8IAorKDEg cm93KQorCistLSBDbGVhbiB1cAorRFJPUCBGVU5DVElPTiB0ZXN0X2dwdCh0ZXh0W10sIHJlbG5h bWUpOworRVJST1I6ICB0eXBlICJyZWxuYW1lIiBkb2VzIG5vdCBleGlzdAorRFJPUCBQVUJMSUNB VElPTiBwdWJfYWxsOworRFJPUCBQVUJMSUNBVElPTiBwdWJfYWxsX25vdmlhX3Jvb3Q7CitEUk9Q IFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0OworRFJPUCBQVUJMSUNBVElPTiBwdWJfc2NoZW1h OworRFJPUCBQVUJMSUNBVElPTiBwdWJfbm9ybWFsOworRFJPUCBQVUJMSUNBVElPTiBwdWJfcGFy dF9sZWFmOworRFJPUCBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnQ7CitEUk9QIFBVQkxJQ0FU SU9OIHB1Yl9wYXJ0X3BhcmVudF9ub3ZpYV9yb290OworRFJPUCBUQUJMRSB0Ymxfbm9ybWFsLCB0 YmxfcGFyZW50LCB0YmxfcGFydDE7CitEUk9QIFNDSEVNQSBncHRfdGVzdF9zY2ggQ0FTQ0FERTsK K05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZ3B0X3Rlc3Rfc2NoLnRibF9zY2gKIC0t IHN0YWdlIG9iamVjdHMgZm9yIHBnX2R1bXAgdGVzdHMKIENSRUFURSBTQ0hFTUEgcHVibWUgQ1JF QVRFIFRBQkxFIHQwIChjIGludCwgZCBpbnQpIENSRUFURSBUQUJMRSB0MSAoYyBpbnQpOwogQ1JF QVRFIFNDSEVNQSBwdWJtZTIgQ1JFQVRFIFRBQkxFIHQwIChjIGludCwgZCBpbnQpOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4IDQwNTU3OWRhZDUyLi4wZjNmMTQwMGFiZSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbApAQCAtMTM3OCw2ICsxMzc4LDc1IEBA IFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIsIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFJPTEUgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyX2R1bW15OwogCistLSBUZXN0IHBnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXModGV4dCwgb2lkKSBmdW5jdGlvbgorQ1JFQVRFIFNDSEVNQSBncHRfdGVzdF9zY2g7CitDUkVB VEUgVEFCTEUgZ3B0X3Rlc3Rfc2NoLnRibF9zY2ggKGlkIGludCk7CitDUkVBVEUgVEFCTEUgdGJs X25vcm1hbCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSB0YmxfcGFyZW50IChpZDEgaW50LCBpZDIg aW50LCBpZDMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkMSk7CitDUkVBVEUgVEFCTEUgdGJs X3BhcnQxIFBBUlRJVElPTiBPRiB0YmxfcGFyZW50IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEw KTsKKworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1Yl9hbGwgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSB0cnVlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfYWxsX25vdmlhX3Jvb3QgRk9SIEFM TCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CitDUkVB VEUgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxF ICh0YmxfcGFyZW50LCBncHRfdGVzdF9zY2gudGJsX3NjaCk7CitDUkVBVEUgUFVCTElDQVRJT04g cHViX3NjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBncHRfdGVzdF9zY2g7CitDUkVBVEUgUFVC TElDQVRJT04gcHViX25vcm1hbCBGT1IgVEFCTEUgdGJsX25vcm1hbCBXSEVSRSAoaWQgPCAxMCk7 CitDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRfbGVhZiBGT1IgVEFCTEUgdGJsX3BhcnQxIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1Yl9wYXJ0X3BhcmVudCBGT1IgVEFCTEUgdGJsX3BhcmVudCAoaWQxLCBpZDIpIFdIRVJF IChpZDEgPSAxMCkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKK0NS RUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnRfbm92aWFfcm9vdCBGT1IgVEFCTEUgdGJs X3BhcmVudCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKK1JFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2dwdChwdWJuYW1l IHRleHQsIHJlbG5hbWUgdGV4dCkKK1JFVFVSTlMgVEFCTEUgKAorICBwdWJuYW1lIHRleHQsCisg IHJlbG5hbWUgbmFtZSwKKyAgYXR0cnMgdGV4dCwKKyAgcXVhbCB0ZXh0CispCitCRUdJTiBBVE9N SUMKKyAgU0VMRUNUIHAucHVibmFtZSwgYy5yZWxuYW1lLCBncHQuYXR0cnM6OnRleHQsIHBnX2dl dF9leHByKGdwdC5xdWFsLCBncHQucmVsaWQpCisgICAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25f dGFibGVzKHB1Ym5hbWUsIHJlbG5hbWU6OnJlZ2NsYXNzOjpvaWQpIGdwdAorICAgIEpPSU4gcGdf cHVibGljYXRpb24gcCBPTiBwLm9pZCA9IGdwdC5wdWJpZAorICAgIEpPSU4gcGdfY2xhc3MgYyBP TiBjLm9pZCA9IGdwdC5yZWxpZAorICBPUkRFUiBCWSBwLnB1Ym5hbWUsIGMucmVsbmFtZTsKK0VO RDsKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX25vcm1hbCcsICd0Ymxfbm9ybWFsJyk7 CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfc2NoZW1hJywgJ3RibF9ub3JtYWwnKTsgLS0g bm8gcmVzdWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X3BhcmVudCcsICd0 YmxfcGFyZW50Jyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfcGFydF9wYXJlbnQnLCAn dGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJf cGFydF9wYXJlbnRfbm92aWFfcm9vdCcsICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorU0VM RUNUICogRlJPTSB0ZXN0X2dwdCgncHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3QnLCAndGJsX3Bh cnQxJyk7CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X2xlYWYnLCAndGJsX3Bh cmVudCcpOyAtLSBubyByZXN1bHQKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9wYXJ0X2xl YWYnLCAndGJsX3BhcnQxJyk7CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGwnLCAn dGJsX3BhcmVudCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdCgncHViX2FsbCcsICd0YmxfcGFy dDEnKTsgLS0gbm8gcmVzdWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhj ZXB0JywgJ3RibF9ub3JtYWwnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoJ3B1Yl9hbGxfZXhj ZXB0JywgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCitT RUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4Y2VwdCcsICd0YmxfcGFyZW50Jyk7IC0t IG5vIHJlc3VsdCAoZXhjbHVkZWQpCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX2V4 Y2VwdCcsICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKKworU0VMRUNUICog RlJPTSB0ZXN0X2dwdCgncHViX2FsbF9ub3ZpYV9yb290JywgJ3RibF9wYXJlbnQnKTsgLS0gbm8g cmVzdWx0CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KCdwdWJfYWxsX25vdmlhX3Jvb3QnLCAndGJs X3BhcnQxJyk7CisKKy0tIENsZWFuIHVwCitEUk9QIEZVTkNUSU9OIHRlc3RfZ3B0KHRleHRbXSwg cmVsbmFtZSk7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGw7CitEUk9QIFBVQkxJQ0FUSU9OIHB1 Yl9hbGxfbm92aWFfcm9vdDsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHQ7CitEUk9Q IFBVQkxJQ0FUSU9OIHB1Yl9zY2hlbWE7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9ub3JtYWw7CitE Uk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X2xlYWY7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0 X3BhcmVudDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X25vdmlhX3Jvb3Q7CitE Uk9QIFRBQkxFIHRibF9ub3JtYWwsIHRibF9wYXJlbnQsIHRibF9wYXJ0MTsKK0RST1AgU0NIRU1B IGdwdF90ZXN0X3NjaCBDQVNDQURFOworCiAtLSBzdGFnZSBvYmplY3RzIGZvciBwZ19kdW1wIHRl c3RzCiBDUkVBVEUgU0NIRU1BIHB1Ym1lIENSRUFURSBUQUJMRSB0MCAoYyBpbnQsIGQgaW50KSBD UkVBVEUgVEFCTEUgdDEgKGMgaW50KTsKIENSRUFURSBTQ0hFTUEgcHVibWUyIENSRUFURSBUQUJM RSB0MCAoYyBpbnQsIGQgaW50KTsKLS0gCjIuNTMuMAoK --000000000000e65f88064d54d3cd--