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 1vw7ZC-003vgS-0o for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 23:48:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vw7ZA-007siH-0S for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 23:48:16 +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 1vw7Z9-007si3-2C for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 23:48:15 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vw7Z6-00000001eBm-28nF for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 23:48:15 +0000 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-38706b10b3bso43069451fa.1 for ; Fri, 27 Feb 2026 15:48:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772236091; cv=none; d=google.com; s=arc-20240605; b=SGIJ/nu1dNqN03QfN1r9MWWO10Z5zAdVhtBNC01FXAk+MQFS84j3yyKECPJnNC0lEz V56IDDRnmrZeF6Vg6XhaEt6QKzEHUdVXjfO/3sBYC2TcC/NgTOm7LVTogWtvn/qwu3Xj lKggXdXwu+bVHGI/7mh9dDpmNTZtR0wM+dUNd4sYpyWzzjvGJ23xcnk5TKQL4lv16cPm yW/P5ai/AXrMYqP94/bJnjj3VrVSCNp18Z+OMQxHyGtEcKhCPdaHcXUzqpuNQvztqLW3 iatpIODjaZwF2fkAvAtRBMm2f+qNE700Kw6nXRSRrn0c+6ImrAMqTsweYUudfYLxCPLV h+RA== 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=i4Z5YrDhiHSn1irt4K+5AhJd0JoT07Hz3fCqj/5zrcA=; fh=cwkwuxD2dvvlUMVELZog5sj2eIqdEPq1zCWDpGHoZSQ=; b=UriQ3yKBX4Ji2YjlMMoZV/Eh0/YnoHzGprg3UXNf0kkV10DslTxON287Afa7wJUZ3n E4sdTMOcrWo+cxjG70pEP3NbY6bFt+ThgVcEIeqohFsC3DNZ2kmr13y5ry/LptTmRhAK K18KkmnnIGBau8+oCkbO4Bl8XtdKx6PpLCApChukvX3Zku6a4VQTlggBM2gN5wRNJHCh ctQA8FSqmUX6nWJ+9M9Bh29fLII+BPTcRFPMxp7mRE4bL05d/xFfQZQ7Q3qZ1dL6ymP6 dSmmRagvV7SU7I3BkYJSyo3BQdZW4Q3skk7evo6ngugRiOD6BC/saw0PRHpKys9Fl8Vw twwQ==; 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=1772236091; x=1772840891; 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=i4Z5YrDhiHSn1irt4K+5AhJd0JoT07Hz3fCqj/5zrcA=; b=RQPbSLzVi+mVe81YYCaCDom8HtNcjabZ8zgk7mSGaVVVatJTVVb4/dTDyuvvHSbYFc 4vPny+MpmokdJtt0SHm2XAvsM7+mBUNE5IO92Am2phLVB354dZss0hOoqQOop3o/VnrM YkP8np409li1wDNdk2JTRKNqfHDfJGnlQ4xE71nUglOwkFkhaSfj/eEQd1oLbSQy1oNW Os13Mys9t0g1K3yT/eHT86qzneQbGM1gOQeYInlKDI7DgVMsrhxKC7H3KtOupZI4xxlw SLcsUMS0CWg+xU4r/rcmkTNgKlaDuCZi/xrkh96Qwd3xxR5AbrnqKy2jST5eZBhBgViO tiaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772236091; x=1772840891; 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=i4Z5YrDhiHSn1irt4K+5AhJd0JoT07Hz3fCqj/5zrcA=; b=s3Qk91K0RPnhK08J0h5c6NwdE2fRuoaPqnt1s0GahWyiIttupo5QnowIOkMlc4qVuV GV1OrzROC5oOjRyQhNYWU7r3ZWBEQqhf9v4YK7bIeWdq8JkmPg7bJt4VF9tgj2PKQE6G WA62OqQ4DDj04KGt/2qi4f+rjnDCF7E/HLggJkRtXgNcndhjvHV3biNT1yV34ICx1YeQ LCU3Mreihp+iy1yc/42Z7ITKHXF7h4Q8MqEjb3cFGIesnJymORVdY9coKf4xwAdXUMOo /56ix6rOubYDKH57MPKFiS9UpbFbgBjerb3KJMeO78PUefVsj0Me0OOJLf0wWGV+3TJc HDmg== X-Gm-Message-State: AOJu0YzttXLSN/FGBmtZEeo5AjSsUFzmOYNo+0CJ8lhHpPRkNt5X7mXn BK+jqfNIXv0C6qGvwQLuJUcJeax73k7U16zVtWfig5J7AFcOWnqj0LkdmDTMNO4r1ajK5tv6nZs VCdiWJXbw8Jvkuyv/tRNHxeQFP+eiToYQQOF/ X-Gm-Gg: ATEYQzwQGAzqQ46yMG8oSgJvMUp0JI9qng0EzOIZdvTbxFoMpU/OlZOWMAk2OdOTtdY AEM0x0gwHKsDVp3Vn22AY6RqXaJaxCzAWExzcM+aKVAXXRCzm/fBuYuaUiJdrHSxTvGTxweRosl 6jrXZuIs56ofoUqJEcAFvVFmwVnRKzmeATdU5iYZ0PZipQR4AUCljPGr8dUcGVEB3LH3snrSKF6 ppwZHkbVh/wMR25qtP3izJUVQjmApLP7BUctvmQhzuxUkXAjpaymw98h5mmLHVW9O9NGVvyLrU6 SynmlzUr X-Received: by 2002:a2e:b8c3:0:b0:386:8e44:5d32 with SMTP id 38308e7fff4ca-389ff15e1f8mr33793141fa.19.1772236090287; Fri, 27 Feb 2026 15:48:10 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Masahiko Sawada Date: Fri, 27 Feb 2026 15:47:33 -0800 X-Gm-Features: AaiRm53qa3-GS7MwcqQZAzvAyQDao5RmtlwOqS2cAm-EyJZMUs1Z1fUBErDc3To Message-ID: Subject: Re: Initial COPY of Logical Replication is too slow To: Marcos Pegoraro Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000009ebfbe064bd6de04" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009ebfbe064bd6de04 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Feb 25, 2026 at 11:03=E2=80=AFAM Masahiko Sawada wrote: > > On Mon, Jan 26, 2026 at 12:30=E2=80=AFPM Masahiko Sawada wrote: > > > > On Mon, Jan 19, 2026 at 9:44=E2=80=AFAM Marcos Pegoraro wrote: > > > > > > Em sex., 19 de dez. de 2025 =C3=A0s 22:59, Masahiko Sawada escreveu: > > >> > > >> Yeah, if we pass a publication that a lot of tables belong to to > > >> pg_get_publication_tables(), it could take a long time to return as = it > > >> needs to construct many entries. > > > > > > > > > Well, I don't know how to help but I'm sure it's working badly. > > > Today I added some fields on my server, then seeing logs I could see = how slow this process is. > > > > > > duration: 2213.872 ms statement: SELECT DISTINCT (CASE WHEN (array_= length(gpt.attrs, 1) =3D c.relnatts) THEN NULL ELSE gpt.attrs END) FROM = pg_publication p, LATERAL pg_get_publication_tables(p.pubname) gpt, pg_cl= ass c WHERE gpt.relid =3D 274376788 AND c.oid =3D gpt.relid AND p.pubname= IN ( 'mypub' ) > > > > > > 2 seconds to get the list of fields of a table is really too slow. > > > How can we solve this ? > > > > After more investigation of slowness, it seems that the > > list_concat_unique_oid() called below is quite slow when the database > > has a lot of tables to publish: > > > > relids =3D GetPublicationRelations(pub_elem->oid, > > pub_elem->pubviaroot ? > > PUBLICATION_PART_ROOT : > > PUBLICATION_PART_LEAF); > > schemarelids =3D GetAllSchemaPublicationRelations(pub_elem->oid, > > pub_elem->pubviaro= ot ? > > PUBLICATION_PART_R= OOT : > > PUBLICATION_PART_L= EAF); > > pub_elem_tables =3D list_concat_unique_oid(relids, schemarelids); > > > > This is simply because it's O(n^2), where n is the number of oids in > > schemarelids in the test case. A simple change would be to do sort & > > dedup instead. With the attached experimental patch, the > > pg_get_publication_tables() execution time gets halved in my > > environment (796ms -> 430ms with 50k tables). If the number of tables > > is not large, this method might be slower than today but it's not a > > huge regression. > > > > In the initial tablesync cases, it could be optimized further in a way > > that we introduce a new SQL function that gets the column list and > > expr of the specific table. This way, we can filter the result by > > relid at an early stage instead of getting all information and > > filtering by relid as the tablesync worker does today, avoiding > > overheads of gathering system catalog scan results. > > I've drafted this idea and I find it looks like a better approach. The > patch introduces the pg_get_publication_table_info() SQL function that > returns the column list and row filter expression like > pg_get_publication_tables() returns but it checks only the specific > table unlike pg_get_publication_tables(). On my env, the tablesync > worker's query in question becomes 0.6ms from 288 ms with 50k tables > in one publication. Feedback is very welcome. Another variant of this approach is to extend pg_get_publication_table() so that it can accept a relid to get 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 compatibility. 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 clearer than the other approach of introducing pg_get_publication_table_info(). Feedback is very welcome. Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com --0000000000009ebfbe064bd6de04 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Avoid-full-table-scans-when-getting-publication-tabl.patch" Content-Disposition: attachment; filename="0001-Avoid-full-table-scans-when-getting-publication-tabl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5jl4fs0 RnJvbSAxNTJiNzk4OTAzY2QxODFiNGU5YjVjYTM5NDA5ZDU2MTZhZGUxYmJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNyBGZWIgMjAyNiAxNTo0MjozOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hd IEF2b2lkIGZ1bGwgdGFibGUgc2NhbnMgd2hlbiBnZXR0aW5nIHB1YmxpY2F0aW9uIHRhYmxlCiBp bmZvcm1hdGlvbiBieSB0YWJsZXN5bmMgd29ya2Vycy4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRp c2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jICAgICAgICB8IDE0NyArKysrKysrKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyB8ICAgOSArLQogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICB8ICAxNSArLQogNSBmaWxlcyBjaGFuZ2VkLCAx MzggaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5jCmluZGV4IDlhNDc5MWM1NzNlLi4yZDQ4NTgwYWQ5YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTExNiwxMyArMTExNiw4MyBAQCBHZXRQdWJsaWNhdGlv bkJ5TmFtZShjb25zdCBjaGFyICpwdWJuYW1lLCBib29sIG1pc3Npbmdfb2spCiAJcmV0dXJuIE9p ZElzVmFsaWQob2lkKSA/IEdldFB1YmxpY2F0aW9uKG9pZCkgOiBOVUxMOwogfQogCisvKgorICog UmV0dXJucyB0cnVlIGlmIHRoZSB0YWJsZSBvZiB0aGUgZ2l2ZW4gcmVsaWQgaXMgcHVibGlzaGVk IGJ5IHRoZSBwdWJsaWNhdGlvbi4KKyAqCisgKiBOb3RlIHRoYXQgYmVpbmcgcHVibGlzaGVkIGhl cmUgbWVhbnMgd2UgYWN0dWFsbHkgdXNlIGl0cyBPSUQgYXMgdGhlIHB1Ymxpc2hlZAorICogdGFi bGUgT0lELCB3aGljaCBkZXBlbmRzIG9uIHB1YmxpY2F0aW9uJ3MgcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgdmFsdWUuCisgKiBGb3IgZXhhbXBsZSwgZXZlbiBpZiBwZ19wdWJsaWNhdGlvbl9y ZWwgaGFzIHRoZSBlbnRyeSBmb3IgdGhlIHBhcmVudCB0YWJsZSwKKyAqIHRoaXMgZnVuY3Rpb24g cmV0dXJucyBmYWxzZSBhcyB3ZSB1c2UgaXRzIGxlYWYgcGFydGl0aW9ucycgT0lEcyBhcyB0aGUK KyAqIHB1Ymxpc2hlZCBPSURzLgorICovCitzdGF0aWMgYm9vbAoraXNfdGFibGVfcHVibGlzaGFi bGVfaW5fcHVibGljYXRpb24oT2lkIHJlbGlkLCBQdWJsaWNhdGlvbiAqcHViKQoreworCWlmIChw dWItPnB1YnZpYXJvb3QpCisJeworCQkvKgorCQkgKiBGb3IgQUxMIFRBQkxFUyBwdWJsaWNhdGlv biB3aXRoIHB1YnZpYXJvb3QsIHRoZSB0YWJsZSBpcyBwdWJsaXNoZWQKKwkJICogaWYgbm90IGEg cGFydGl0aW9uLgorCQkgKi8KKwkJaWYgKHB1Yi0+YWxsdGFibGVzKQorCQkJcmV0dXJuICFnZXRf cmVsX3JlbGlzcGFydGl0aW9uKHJlbGlkKTsKKworCQkvKgorCQkgKiBGb3IgcHVidmlhcm9vdCBw dWJsaWNhdGlvbnMsIHdlIGNhbiBzaW1wbHkgY2hlY2sgaWYgdGhlIGdpdmVuCisJCSAqIHJlbGF0 aW9uJ3MgT0lTIGV4aXN0cyBvbiBlaXRoZXIgcGdfcHVibGljYXRpb25fcmVsIG9yCisJCSAqIHBn X3B1YmxpY2F0aW9uX25hbWVzcGFjZS4KKwkJICovCisJCXJldHVybiAoU2VhcmNoU3lzQ2FjaGVF eGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHJl bGlkKSwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCkpIHx8CisJCQkJU2Vh cmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OTkFNRVNQQUNFTUFQLAorCQkJCQkJCQkJICBP YmplY3RJZEdldERhdHVtKGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKSksCisJCQkJCQkJCQkgIE9i amVjdElkR2V0RGF0dW0ocHViLT5vaWQpKSk7CisJfQorCisJLyoKKwkgKiBGb3Igbm9uLXB1YnZp YXJvb3QgcHVibGljYXRpb25zLCBwYXJ0aXRpb25lZCB0YWJsZSdzIE9JRCBjYW4gbmV2ZXIgYmUg YQorCSAqIHB1Ymxpc2hlZCBPSUQuCisJICovCisJaWYgKGdldF9yZWxfcmVsa2luZChyZWxpZCkg PT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHB1 Yi0+YWxsdGFibGVzKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogRm9yIHRoZSBwYXJ0aXRp b24gaW4gdGhlICFwdWJ2aWFyb290IHB1YmxpY2F0aW9uLCB3ZSBuZWVkIHRvIGNoZWNrIGl0cwor CSAqIGFuY2VzdG9ycyBpbnN0ZWFkIG9mIHRoZSBnaXZlbiByZWxhdGlvbiBpdHNlbGYuCisJICov CisJaWYgKGdldF9yZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQpKQorCXsKKwkJTGlzdAkgICAqYW5j ZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOworCisJCU9pZAkJCXRvcG1v c3QgPSBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKHB1Yi0+b2lkLCBhbmNlc3RvcnMs CisJCQkJCQkJCQkJCQkJCQkgIE5VTEwpOworCisJCXJldHVybiBPaWRJc1ZhbGlkKHRvcG1vc3Qp OworCX0KKworCXJldHVybiAoU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQ LAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpLAorCQkJCQkJCQkgIE9iamVjdElk R2V0RGF0dW0ocHViLT5vaWQpKSB8fAorCQkJU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FU SU9OTkFNRVNQQUNFTUFQLAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oZ2V0X3JlbF9uYW1l c3BhY2UocmVsaWQpKSwKKwkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKSkpOwor fQorCiAvKgogICogR2V0IGluZm9ybWF0aW9uIG9mIHRoZSB0YWJsZXMgaW4gdGhlIGdpdmVuIHB1 YmxpY2F0aW9uIGFycmF5LgogICoKICAqIFJldHVybnMgcHViaWQsIHJlbGlkLCBjb2x1bW4gbGlz dCwgcm93IGZpbHRlciBmb3IgZWFjaCB0YWJsZS4KKyAqCisgKiBJZiByZWxpZCBpcyBhbiB2YWxp ZCBPSUQsIGl0IHJldHVybnMgb25seSB0aGVzZSBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGUKKyAq IG9mIHRoZSBnaXZlbiByZWxpZCBpbnN0ZWFkIG9mIGFsbCB0YWJsZXMgaW4gdGhlIGdpdmVuIHB1 YmxpY2F0aW9uIGFycmF5LAorICogcmV0dXJuaW5nIGF0IG1vc3Qgb25lIHR1cGxlLgogICovCi1E YXR1bQotcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9BUkdTKQorc3RhdGlj IERhdHVtCitwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZv LCBPaWQgcmVsaWQpCiB7CiAjZGVmaW5lIE5VTV9QVUJMSUNBVElPTl9UQUJMRVNfRUxFTQk0CiAJ RnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OwpAQCAtMTE2MSwyOSArMTIzMSwzOCBAQCBwZ19nZXRf cHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkJCXB1Yl9lbGVtID0gR2V0 UHVibGljYXRpb25CeU5hbWUoVGV4dERhdHVtR2V0Q1N0cmluZyhlbGVtc1tpXSksIGZhbHNlKTsK IAotCQkJLyoKLQkJCSAqIFB1YmxpY2F0aW9ucyBzdXBwb3J0IHBhcnRpdGlvbmVkIHRhYmxlcy4g SWYKLQkJCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIGZhbHNlLCBhbGwgY2hhbmdl cyBhcmUgcmVwbGljYXRlZAotCQkJICogdXNpbmcgbGVhZiBwYXJ0aXRpb24gaWRlbnRpdHkgYW5k IHNjaGVtYSwgc28gd2Ugb25seSBuZWVkCi0JCQkgKiB0aG9zZS4gT3RoZXJ3aXNlLCBnZXQgdGhl IHBhcnRpdGlvbmVkIHRhYmxlIGl0c2VsZi4KLQkJCSAqLwotCQkJaWYgKHB1Yl9lbGVtLT5hbGx0 YWJsZXMpCi0JCQkJcHViX2VsZW1fdGFibGVzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMo UkVMS0lORF9SRUxBVElPTiwKLQkJCQkJCQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCk7 CisJCQlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCisJCQl7CisJCQkJaWYgKGlzX3RhYmxlX3B1Ymxp c2hhYmxlX2luX3B1YmxpY2F0aW9uKHJlbGlkLCBwdWJfZWxlbSkpCisJCQkJCXB1Yl9lbGVtX3Rh YmxlcyA9IGxpc3RfbWFrZTFfb2lkKHJlbGlkKTsKKwkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlM aXN0CSAgICpyZWxpZHMsCi0JCQkJCQkgICAqc2NoZW1hcmVsaWRzOwotCi0JCQkJcmVsaWRzID0g R2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKLQkJCQkJCQkJCQkJCSBwdWJf ZWxlbS0+cHVidmlhcm9vdCA/Ci0JCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9ST09UIDoK LQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpOwotCQkJCXNjaGVtYXJlbGlkcyA9 IEdldEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQsCi0JCQkJCQkJ CQkJCQkJCQkJcHViX2VsZW0tPnB1YnZpYXJvb3QgPwotCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FU SU9OX1BBUlRfUk9PVCA6Ci0JCQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9MRUFGKTsK LQkJCQlwdWJfZWxlbV90YWJsZXMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHJlbGlkcywgc2No ZW1hcmVsaWRzKTsKKwkJCQkvKgorCQkJCSAqIFB1YmxpY2F0aW9ucyBzdXBwb3J0IHBhcnRpdGlv bmVkIHRhYmxlcy4gSWYKKwkJCQkgKiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyBmYWxz ZSwgYWxsIGNoYW5nZXMgYXJlCisJCQkJICogcmVwbGljYXRlZCB1c2luZyBsZWFmIHBhcnRpdGlv biBpZGVudGl0eSBhbmQgc2NoZW1hLCBzbyB3ZQorCQkJCSAqIG9ubHkgbmVlZCB0aG9zZS4gT3Ro ZXJ3aXNlLCBnZXQgdGhlIHBhcnRpdGlvbmVkIHRhYmxlCisJCQkJICogaXRzZWxmLgorCQkJCSAq LworCQkJCWlmIChwdWJfZWxlbS0+YWxsdGFibGVzKQorCQkJCQlwdWJfZWxlbV90YWJsZXMgPSBH ZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhSRUxLSU5EX1JFTEFUSU9OLAorCQkJCQkJCQkJCQkJ CQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCk7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkg ICAqcmVsaWRzLAorCQkJCQkJCSAgICpzY2hlbWFyZWxpZHM7CisKKwkJCQkJcmVsaWRzID0gR2V0 UHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKKwkJCQkJCQkJCQkJCQkgcHViX2Vs ZW0tPnB1YnZpYXJvb3QgPworCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgor CQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpOworCQkJCQlzY2hlbWFyZWxpZHMg PSBHZXRBbGxTY2hlbWFQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAorCQkJCQkJ CQkJCQkJCQkJCQlwdWJfZWxlbS0+cHVidmlhcm9vdCA/CisJCQkJCQkJCQkJCQkJCQkJCVBVQkxJ Q0FUSU9OX1BBUlRfUk9PVCA6CisJCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfTEVB Rik7CisJCQkJCXB1Yl9lbGVtX3RhYmxlcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocmVsaWRz LCBzY2hlbWFyZWxpZHMpOworCQkJCX0KIAkJCX0KIAogCQkJLyoKQEAgLTEyNDYsOCArMTMyNSw4 IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJSGVhcFR1 cGxlCXJldHR1cGxlOwogCQlQdWJsaWNhdGlvbiAqcHViOwogCQlwdWJsaXNoZWRfcmVsICp0YWJs ZV9pbmZvID0gKHB1Ymxpc2hlZF9yZWwgKikgbGlzdF9udGgodGFibGVfaW5mb3MsIGZ1bmNjdHgt PmNhbGxfY250cik7Ci0JCU9pZAkJCXJlbGlkID0gdGFibGVfaW5mby0+cmVsaWQ7Ci0JCU9pZAkJ CXNjaGVtYWlkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpOworCQlPaWQJCQl0YWJsZW9pZCA9 IHRhYmxlX2luZm8tPnJlbGlkOworCQlPaWQJCQlzY2hlbWFpZCA9IGdldF9yZWxfbmFtZXNwYWNl KHRhYmxlb2lkKTsKIAkJRGF0dW0JCXZhbHVlc1tOVU1fUFVCTElDQVRJT05fVEFCTEVTX0VMRU1d ID0gezB9OwogCQlib29sCQludWxsc1tOVU1fUFVCTElDQVRJT05fVEFCTEVTX0VMRU1dID0gezB9 OwogCkBAIC0xMjU4LDcgKzEzMzcsNyBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZV TkNUSU9OX0FSR1MpCiAJCXB1YiA9IEdldFB1YmxpY2F0aW9uKHRhYmxlX2luZm8tPnB1YmlkKTsK IAogCQl2YWx1ZXNbMF0gPSBPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKTsKLQkJdmFsdWVzWzFd ID0gT2JqZWN0SWRHZXREYXR1bShyZWxpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0 dW0odGFibGVvaWQpOwogCiAJCS8qCiAJCSAqIFdlIGRvbid0IGNvbnNpZGVyIHJvdyBmaWx0ZXJz IG9yIGNvbHVtbiBsaXN0cyBmb3IgRk9SIEFMTCBUQUJMRVMgb3IKQEAgLTEyNjksNyArMTM0OCw3 IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCQkJ ICAgT2JqZWN0SWRHZXREYXR1bShzY2hlbWFpZCksCiAJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0 dW0ocHViLT5vaWQpKSkKIAkJCXB1YnR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MihQVUJMSUNB VElPTlJFTE1BUCwKLQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJ CQkJCQkgICBPYmplY3RJZEdldERhdHVtKHRhYmxlb2lkKSwKIAkJCQkJCQkJCQkgICBPYmplY3RJ ZEdldERhdHVtKHB1Yi0+b2lkKSk7CiAKIAkJaWYgKEhlYXBUdXBsZUlzVmFsaWQocHVidHVwbGUp KQpAQCAtMTI5Myw3ICsxMzcyLDcgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5D VElPTl9BUkdTKQogCQkvKiBTaG93IGFsbCBjb2x1bW5zIHdoZW4gdGhlIGNvbHVtbiBsaXN0IGlz IG5vdCBzcGVjaWZpZWQuICovCiAJCWlmIChudWxsc1syXSkKIAkJewotCQkJUmVsYXRpb24JcmVs ID0gdGFibGVfb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCVJlbGF0aW9uCXJlbCA9 IHRhYmxlX29wZW4odGFibGVvaWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAJCQlpbnQJCQluYXR0bnVt cyA9IDA7CiAJCQlpbnQxNgkgICAqYXR0bnVtczsKIAkJCVR1cGxlRGVzYwlkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOwpAQCAtMTM0Miw2ICsxNDIxLDE4IEBAIHBnX2dldF9wdWJsaWNhdGlv bl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiB9 CiAKK0RhdHVtCitwZ19nZXRfcHVibGljYXRpb25fdGFibGVzX2EoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlyZXR1cm4gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhmY2luZm8sIEludmFsaWRPaWQp OworfQorCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlc19iKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJcmV0dXJuIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoZmNpbmZvLCBQR19HRVRB UkdfT0lEKDEpKTsKK30KKwogLyoKICAqIFJldHVybnMgT2lkcyBvZiBzZXF1ZW5jZXMgaW4gYSBw dWJsaWNhdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1f dmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDFl YThmMWZhYTllLi4wYzg2N2NmMGJmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9z eXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNx bApAQCAtNDExLDcgKzQxMSw3IEBAIENSRUFURSBWSUVXIHBnX3B1YmxpY2F0aW9uX3RhYmxlcyBB UwogICAgICAgICApIEFTIGF0dG5hbWVzLAogICAgICAgICBwZ19nZXRfZXhwcihHUFQucXVhbCwg R1BULnJlbGlkKSBBUyByb3dmaWx0ZXIKICAgICBGUk9NIHBnX3B1YmxpY2F0aW9uIFAsCi0gICAg ICAgICBMQVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUC5wdWJuYW1lKSBHUFQsCisg ICAgICAgICBMQVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoQVJSQVlbUC5wdWJuYW1l XSkgR1BULAogICAgICAgICAgcGdfY2xhc3MgQyBKT0lOIHBnX25hbWVzcGFjZSBOIE9OIChOLm9p ZCA9IEMucmVsbmFtZXNwYWNlKQogICAgIFdIRVJFIEMub2lkID0gR1BULnJlbGlkOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggNWUzYzA5NjRkMzguLjBiZjdk YjcxZDVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRz LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC0yNTc3 LDcgKzI1NzcsNyBAQCBjaGVja19wdWJsaWNhdGlvbnNfb3JpZ2luX3RhYmxlcyhXYWxSZWNlaXZl ckNvbm4gKndyY29ubiwgTGlzdCAqcHVibGljYXRpb25zLAogCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmNtZCwKIAkJCQkJCSAgICJTRUxFQ1QgRElTVElOQ1QgUC5wdWJuYW1lIEFTIHB1Ym5hbWVc biIKIAkJCQkJCSAgICJGUk9NIHBnX3B1YmxpY2F0aW9uIFAsXG4iCi0JCQkJCQkgICAiICAgICBM QVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUC5wdWJuYW1lKSBHUFRcbiIKKwkJCQkJ CSAgICIgICAgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhBUlJBWVtQLnB1Ym5h bWVdKSBHUFRcbiIKIAkJCQkJCSAgICIgICAgIEpPSU4gcGdfc3Vic2NyaXB0aW9uX3JlbCBQUyBP TiAoR1BULnJlbGlkID0gUFMuc3JyZWxpZCBPUiIKIAkJCQkJCSAgICIgICAgIEdQVC5yZWxpZCBJ TiAoU0VMRUNUIHJlbGlkIEZST00gcGdfcGFydGl0aW9uX2FuY2VzdG9ycyhQUy5zcnJlbGlkKSBV TklPTiIKIAkJCQkJCSAgICIgICAgICAgICAgICAgICAgICAgU0VMRUNUIHJlbGlkIEZST00gcGdf cGFydGl0aW9uX3RyZWUoUFMuc3JyZWxpZCkpKSxcbiIKQEAgLTI5NTYsNyArMjk1Niw3IEBAIGZl dGNoX3JlbGF0aW9uX2xpc3QoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIExpc3QgKnB1YmxpY2F0 aW9ucykKIAkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiU0VMRUNUIERJU1RJTkNUIG4ubnNwbmFt ZSwgYy5yZWxuYW1lLCBjLnJlbGtpbmQsIGdwdC5hdHRyc1xuIgogCQkJCQkJICIgICBGUk9NIHBn X2NsYXNzIGNcbiIKIAkJCQkJCSAiICAgICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBuLm9p ZCA9IGMucmVsbmFtZXNwYWNlXG4iCi0JCQkJCQkgIiAgICAgICAgIEpPSU4gKCBTRUxFQ1QgKHBn X2dldF9wdWJsaWNhdGlvbl90YWJsZXMoVkFSSUFESUMgYXJyYXlfYWdnKHB1Ym5hbWU6OnRleHQp KSkuKlxuIgorCQkJCQkJICIgICAgICAgICBKT0lOICggU0VMRUNUIChwZ19nZXRfcHVibGljYXRp b25fdGFibGVzKGFycmF5X2FnZyhwdWJuYW1lOjp0ZXh0KSkpLipcbiIKIAkJCQkJCSAiICAgICAg ICAgICAgICAgIEZST00gcGdfcHVibGljYXRpb25cbiIKIAkJCQkJCSAiICAgICAgICAgICAgICAg IFdIRVJFIHB1Ym5hbWUgSU4gKCAlcyApKSBBUyBncHRcbiIKIAkJCQkJCSAiICAgICAgICAgICAg IE9OIGdwdC5yZWxpZCA9IGMub2lkXG4iLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvdGFibGVzeW5jLmMKaW5kZXggMmYyZjAxMjFlY2YuLmE3ZjUyNzU1ZDA1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTgwMSw5ICs4MDEsOSBA QCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBM b2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCiAJCQkJCQkgIiAgKENBU0UgV0hFTiAoYXJyYXlfbGVu Z3RoKGdwdC5hdHRycywgMSkgPSBjLnJlbG5hdHRzKSIKIAkJCQkJCSAiICAgVEhFTiBOVUxMIEVM U0UgZ3B0LmF0dHJzIEVORCkiCiAJCQkJCQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwLCIKLQkJ CQkJCSAiICBMQVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMocC5wdWJuYW1lKSBncHQs IgorCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhBUlJBWVtwLnB1 Ym5hbWVdLCAldSkgZ3B0LCIKIAkJCQkJCSAiICBwZ19jbGFzcyBjIgotCQkJCQkJICIgV0hFUkUg Z3B0LnJlbGlkID0gJXUgQU5EIGMub2lkID0gZ3B0LnJlbGlkIgorCQkJCQkJICIgV0hFUkUgYy5v aWQgPSBncHQucmVsaWQiCiAJCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKIAkJ CQkJCSBscmVsLT5yZW1vdGVpZCwKIAkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOwpAQCAtOTgzLDkg Kzk4Myw4IEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJl bG5hbWUsIExvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCwKIAkJYXBwZW5kU3RyaW5nSW5mbygmY21k LAogCQkJCQkJICJTRUxFQ1QgRElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxp ZCkiCiAJCQkJCQkgIiAgRlJPTSBwZ19wdWJsaWNhdGlvbiBwLCIKLQkJCQkJCSAiICBMQVRFUkFM IHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMocC5wdWJuYW1lKSBncHQiCi0JCQkJCQkgIiBXSEVS RSBncHQucmVsaWQgPSAldSIKLQkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoICVzICkiLAor CQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhBUlJBWVtwLnB1Ym5h bWVdLCAldSkgZ3B0IgorCQkJCQkJICIgV0hFUkUgIHAucHVibmFtZSBJTiAoICVzICkiLAogCQkJ CQkJIGxyZWwtPnJlbW90ZWlkLAogCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CmluZGV4IGRhYzQwOTkyY2JjLi5mNmI3NzVmZTI1YiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC0xMjM4MiwxMiArMTIzODIsMjEgQEAKIHsgb2lkID0+ICc2MTE5JywK ICAgZGVzY3IgPT4gJ2dldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIHRoYXQgYXJlIHBhcnQg b2YgdGhlIHNwZWNpZmllZCBwdWJsaWNhdGlvbnMnLAogICBwcm9uYW1lID0+ICdwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzJywgcHJvcm93cyA9PiAnMTAwMCcsCi0gIHByb3ZhcmlhZGljID0+ICd0 ZXh0JywgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9yZXRzZXQg PT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHBy b2FyZ3R5cGVzID0+ICdfdGV4dCcsCiAgIHByb2FsbGFyZ3R5cGVzID0+ICd7X3RleHQsb2lkLG9p ZCxpbnQydmVjdG9yLHBnX25vZGVfdHJlZX0nLAotICBwcm9hcmdtb2RlcyA9PiAne3YsbyxvLG8s b30nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksbyxvLG8sb30nLAogICBwcm9hcmduYW1lcyA9PiAn e3B1Ym5hbWUscHViaWQscmVsaWQsYXR0cnMscXVhbH0nLAotICBwcm9zcmMgPT4gJ3BnX2dldF9w dWJsaWNhdGlvbl90YWJsZXMnIH0sCisgIHByb3NyYyA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3Rh Ymxlc19hJyB9LAoreyBvaWQgPT4gJzgwNjAnLAorICBkZXNjciA9PiAnZ2V0IGluZm9ybWF0aW9u IG9mIHRoZSB0YWJsZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc3BlY2lmaWVkIHB1YmxpY2F0aW9u cycsCisgIHByb25hbWUgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMnLCBwcm9yb3dzID0+ ICcxJywKKyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9yZXR0 eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnX3RleHQgb2lkJywKKyAgcHJvYWxsYXJn dHlwZXMgPT4gJ3tfdGV4dCxvaWQsb2lkLG9pZCxpbnQydmVjdG9yLHBnX25vZGVfdHJlZX0nLAor ICBwcm9hcmdtb2RlcyA9PiAne2ksaSxvLG8sbyxvfScsCisgIHByb2FyZ25hbWVzID0+ICd7cHVi bmFtZSxyZWxpZCxwdWJpZCxyZWxpZCxhdHRycyxxdWFsfScsCisgIHByb3NyYyA9PiAncGdfZ2V0 X3B1YmxpY2F0aW9uX3RhYmxlc19iJyB9LAogeyBvaWQgPT4gJzgwNTInLCBkZXNjciA9PiAnZ2V0 IE9JRHMgb2Ygc2VxdWVuY2VzIGluIGEgcHVibGljYXRpb24nLAogICBwcm9uYW1lID0+ICdwZ19n ZXRfcHVibGljYXRpb25fc2VxdWVuY2VzJywgcHJvcm93cyA9PiAnMTAwMCcsIHByb3JldHNldCA9 PiAndCcsCiAgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAnb2lkJywgcHJvYXJn dHlwZXMgPT4gJ3RleHQnLAotLSAKMi41My4wCgo= --0000000000009ebfbe064bd6de04--