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 1viUZJ-007qWG-28 for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 09:32:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1viUZI-006BKn-0Y for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 09:32:04 +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 1viUZH-006BKe-2N for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 09:32:04 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1viUZE-001guB-1r for pgsql-hackers@postgresql.org; Wed, 21 Jan 2026 09:32:02 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-b86f69bbe60so979706066b.1 for ; Wed, 21 Jan 2026 01:31:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768987919; cv=none; d=google.com; s=arc-20240605; b=WoMqO8daQrR1318rHKPBljKY3Che5dTUAk4KdRXGXZV9b7vwbR/tpZDhhOLckM6t9b t760uNK8xgJ0drRGSr7t0Tjo1aa6zkVa5o7aNPOhuL4wykSA/l3dxKf/Sdz0KDtZJpMd Rnb3YGqflKFjX860n1biTBbtCdILm1I4dNYKDG3rYjKqBsbn+D5MM4u3Bs6ZDumUMmAt MzuHzjsBiKPTV4iGNLkepBwRCdGkAfqzcBLT5Qv9lIRk6V3G+gablgHLY4Uh3E98g9Wh NKZl+JbMttB6y9MHuDlpt2AJvUmAp+dvuENWqig9HfyOuU/G1NenuCw7MUFB4yN6jO2T wFmw== 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=O0JEHbzz+rbma2pHXY7KlU9wJkZtznt0WoVCJ3d1CSc=; fh=A598HubGgQrdjMpsSVfkyDFhPf7R/QZgYZv3Em3X4/0=; b=VyHpqHT9dlUHSVRKJyRq2HEOb8G+/VSq4LyTQCuAuv0vHrmYISLGs7xkk5Uac24RfE GZfCSxqPdsdQN/O7zicnf96aYba5iYrryb2CIdJSfPRGsZSRrdTxhZR/HxnifDsYt4Nd pG/30Z776e+p3sTWIPuArYLl7W2Ll93MWYpg6cMAkM2FOnegGxWxl20GHutqleucZAv6 MR36UuowH6crLvYIZJvJVkLZ3bwdXPfhKT6hqS99Z35KIbdljN259aUGnmq74LlZoceA yQe3E6jyoezAZPS6Ro0fBE6wxIs3ivoL4IFaIf4zCWYhO1tDFTCHo/g99ruRvdI3RX9v Agyw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1768987919; x=1769592719; darn=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=O0JEHbzz+rbma2pHXY7KlU9wJkZtznt0WoVCJ3d1CSc=; b=MAFKZQop9A2cziW5EG56hU4jtO2SviGopNngUpjD6VN9SjMiq+f4UMF3Uz6Z1myUVi QTBMBEHvWImj7zOXAulMcppv8guArOslqYFMdlVP5V2tV4JSXc4I1+XYGjGkN+BExRkh IhE+eRsGxjsvlWwQZq1NoeZgzfj01cQEfA07OyvYBoysXdjydYlE0q1CdvBWSmMerdRl Se6+ZtLO+OcNJUhsZglNPpAHiL9+itDGw2l115V9ez4ooi/5dH3O1ZV+vHiAUWDz6vDN tx0sZgHz+EqYswnu1/S9+BMlLgZoXm3cIOhZDBAc2IYaBTgoxZlqS8FFk5SvsjKWXBNR Ot3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768987919; x=1769592719; 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=O0JEHbzz+rbma2pHXY7KlU9wJkZtznt0WoVCJ3d1CSc=; b=d9CFGeYMlKFbOfip51kZY5bQUvtm4u/Ov1pJLw+2msdIXm3CzwXxWr0MQfo+m1vjXH vS3Pqswq6Tzo6BFYvCSl24yjrvslvjKX1LUs5Ian4JyHT1VOzXTmN3cvptpAzRkQSgbd x8juX9LakpwOaa8KmzbjAiRtvdBLNq1LUcJQD1ZFKLx5VbT/K5MhBzoUIW0X9vezQVCA nMjA+/GB9xGvYCUw6dHLHniuJnDFn7BSCBH+u8vf2cW6q7mJPNQ3446gcCXNdvw5KSEh 8vawQnoQ7LcTvj2oENBCquRFGRtY2AZAqPC72xv9/FoNYdvJlrSfr26XTdMIu2VYmEO/ eXGg== X-Forwarded-Encrypted: i=1; AJvYcCUzk437kpXFPsLQigE3LG70J73QVZ+9RMxq99OCcY9G2/ZpaT/pP9lXv/u1jUtgeYZ8/LQm++2GWYdVB7uS@postgresql.org X-Gm-Message-State: AOJu0YxSf6LhHpXUNFfsn4zYv+x+BWbR4rW59dX8oKkXW0TM2ZeLFYb4 J1gP133Npv8I1q6lohf/sknuYmmaaslrAYEoPZcAudl/6HEjkG96CHqET+DGmKf2bT5b+rO3m95 hGKSQ726LNwwSQV+oPOlFVnG3uz1zUiFdzCJazEIS X-Gm-Gg: AZuq6aI2gs9fW2sXr/cNR0OGl3XdSQ0a86amixLxWLWnsY8dWqlAcBxFA7jnJVjlA2h ZvPCZd3pqZmR9YkllqQM5NqiOdiA/MgwP8VjgHE5X/Ypw9FyHLttKWdwpdIjvquO8cYieWPw7zI kzI+wDcuSfO+Y45ZfQaOdPCx8+4U3rLHIYZcPmT78XIGbQ2jDukMNxPHy9reI/nw899L7uvDUeC o+A7WgvMDOXktS4wkVAv/Yhb8lT8J5dFKSUpO/ZSquNO0KqfSIMdGjKUOH2kRa1xfqPcLuOlETy 22Ox8rDA X-Received: by 2002:a17:907:9443:b0:b3b:5fe6:577a with SMTP id a640c23a62f3a-b87968b6ac7mr1421087466b.8.1768987918408; Wed, 21 Jan 2026 01:31:58 -0800 (PST) MIME-Version: 1.0 References: <202511191045.tckydhpoxumx@alvherre.pgsql> <4e60bcae-8222-4e1f-8e5b-d73b59c93304@app.fastmail.com> <4c695e76-5ab7-449f-8060-76518dd41468@app.fastmail.com> In-Reply-To: From: Akshay Joshi Date: Wed, 21 Jan 2026 15:01:44 +0530 X-Gm-Features: AZwV_QjE0sgk-f5YFLozVzKZ54E4HJ-xy3IkFcVc0BtuHzU3fKnhRTUKhcoV9ZU Message-ID: Subject: Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement To: Andrew Dunstan Cc: Euler Taveira , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Chao Li , japin , Quan Zongliang , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000007db5d50648e298d8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007db5d50648e298d8 Content-Type: multipart/alternative; boundary="0000000000007db5d40648e298d6" --0000000000007db5d40648e298d6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable In my previous email, I included two different patches (for two separate approaches) from different branches. As a result, CommitFest is indicating that a rebase is required. Apologies for the inconvenience, I=E2=80=99m still getting familiar with th= e process. Attached are the patches, layered one on top of the other, representing two approaches: - *Double Dash*: v8-0001-Add-pg_get_database_ddl-function-to-reconstruct-double-dash.patc= h - *DefElem (Key-Value)*: v8-0002-Add-pg_get_database_ddl-function-to-reconstruct-DefElem.patch I am now submitting the *v8 patches*, which are ready for review. Please let me know which approach you find more suitable and preferable. On Tue, Jan 20, 2026 at 5:06=E2=80=AFPM Akshay Joshi wrote: > All, > > Following Alvaro's suggestion to use DefElem syntax, I have modified the > code to support key-value pairs. > > I have attached two different patches : > v7-0001: Uses the double-dash syntax. > v7-0002: Uses the DefElem syntax. > > *Usage Example for double-dash approach: * > SELECT pg_get_database_ddl('postgres', '--no-owner', '--no-tablespace'); > -- Omit Owner and Tablespace clauses. > SELECT pg_get_database_ddl('postgres', 'pretty', '--with-defaults'); -- > Includes clauses for parameters at their default values. > > *Usage Example for DefElem approach*: The DefElem implementation supports > various boolean values (no, false, 0) and is case-insensitive. > SELECT pg_get_database_ddl('postgres', 'owner=3Dno', 'tablespace=3Dfalse'= ); -- > Omits Owner and Tablespace clauses. > SELECT pg_get_database_ddl('postgres', 'pretty', 'defaults=3Dyes'); -- > Includes clauses for parameters at their default values. > SELECT pg_get_database_ddl('postgres', 'pretty', 'defaults'); -- Includes > clauses for parameters at their default values. > > > *Please suggest which approach is preferred. The patches are ready for > review.* > > > On Fri, Jan 16, 2026 at 12:53=E2=80=AFPM Akshay Joshi < > akshay.joshi@enterprisedb.com> wrote: > >> >> - >> >> 1) Implement *uint64* for the flags to provide capacity for up to 64 >> distinct options. >> 2) Refactor parse_ddl_options to return the flag set directly rather >> than using an *out parameter*. >> >> Please find the attached *v7* patch, which is now ready for review. >> >> >> On Wed, Jan 14, 2026 at 9:18=E2=80=AFPM Akshay Joshi < >> akshay.joshi@enterprisedb.com> wrote: >> >>> I have incorporated Euler=E2=80=99s changes, which modify the declarati= on and >>> definition of the *pg_get_database_ddl* function. Please find the >>> attached v6 patch, which is now ready for review. The following updates >>> have been made: >>> >>> 1. >>> >>> Function signature updated to: pg_get_database_ddl(database_id >>> regdatabase, VARIADIC ddl_options text[]) >>> 2. >>> >>> Added options *--no-owner* and *--no-tablespace* to omit the OWNER >>> and TABLESPACE clauses from the reconstructed DDL. >>> 3. >>> >>> Moved the "*pretty*" parameter into ddl_options for formatted output= . >>> 4. >>> >>> Properties such as ENCODING, LOCALE_PROVIDER, TABLESPACE, CONNECTION >>> LIMIT, and ALLOW_CONNECTIONS are omitted if they are set to default = values. >>> 5. >>> >>> Introduced the *--with-defaults* option to include clauses for >>> parameters even when they are at their default values. >>> 6. >>> >>> Standardized formatting to use spaces instead of tabs. >>> >>> *Usage examples:* >>> >>> 1. SELECT pg_get_database_ddl('postgres'); // Non pretty-formatted >>> DDL >>> 2. SELECT pg_get_database_ddl(16835); // Non pretty-formatted DDL >>> 3. SELECT pg_get_database_ddl('postgres', 'pretty'); // >>> pretty-formatted DDL >>> 4. SELECT pg_get_database_ddl('postgres', '--no-owner', >>> '--no-tablespace'); // Omits the Owner and Tablespace clause from th= e DDL. >>> 5. SELECT pg_get_database_ddl('postgres', 'pretty', >>> '--with-defaults'); // Includes clauses for parameters that are curr= ently >>> at their default values. >>> >>> >>> On Thu, Jan 8, 2026 at 4:57=E2=80=AFAM Andrew Dunstan >>> wrote: >>> >>>> >>>> On 2025-12-12 Fr 10:19 AM, Euler Taveira wrote: >>>> >>>> On Fri, Dec 12, 2025, at 7:52 AM, Akshay Joshi wrote: >>>> >>>> On Thu, Dec 11, 2025 at 7:29=E2=80=AFPM Euler Taveira wrote: >>>> >>>> Is there any way to obtain the default values directly from the source >>>> code itself, or do I need to refer to the documentation? If we rely on >>>> the documentation and compare against that, then in the future, if the >>>> default values change, we would also need to update our logic >>>> accordingly. >>>> >>>> >>>> No, you need to check the documentation. If you are changing the defau= lt value, >>>> you are breaking compatibility; that rarely happens. If we are really = concern >>>> about this fact, you can add a test case that creates the object witho= ut >>>> properties (all default values) and another with all default propertie= s and >>>> then compare the output. >>>> >>>> >>>> Maybe the function should have a VERBOSE option that emits all the >>>> defaults. >>>> >>>> >>>> Constantly having to check the documentation for default values may >>>> feel annoying to some users. Some users run queries with parameters >>>> such as encoding, connection limit, and locale using their default >>>> values. When they call the pg_get_database_ddl function, it >>>> reconstructs the short command based on those defaults. >>>> >>>> >>>> Encoding and locale, ok but I doubt about connection limit. >>>> >>>> postgres=3D# SELECT current_user; >>>> current_user >>>> -------------- >>>> euler >>>> (1 row) >>>> >>>> postgres=3D# CREATE DATABASE foo; >>>> CREATE DATABASE >>>> postgres=3D# CREATE DATABASE bar OWNER euler; >>>> CREATE DATABASE >>>> >>>> When you are learning a new command, you generally don't set the defau= lt value >>>> for a property just to be correct. I'm not saying this function should= n't >>>> include OWNER. I'm just suggesting it to be optional. See some argume= nts >>>> below. >>>> >>>> >>>> * OWNER. There is no guarantee that the owner exists in the cluster yo= u will >>>> use this output. That's something that pg_dumpall treats separately = (see >>>> above). Does it mean we should include the owner? No. We can make it= an >>>> option. >>>> >>>> >>>> If I understand correctly, the owner should be an option provided by >>>> the caller of the function, and we reconstruct the Database DDL using >>>> that specified owner. Is that right? >>>> If so, then in my humble opinion, this is not truly a reconstruction >>>> of the existing database object. >>>> >>>> >>>> No. My idea is to have something like the pg_dump --no-owner option. T= his is >>>> important if you are transporting the objects from one cluster to anot= her one. >>>> Owner might be different. That's why I'm suggesting it should be optio= nal. It >>>> means flexibility. See pg_dump output format that always apply the OWN= ER as a >>>> separate ALTER command. >>>> >>>> >>>> +1 >>>> >>>> >>>> * options. Since I mentioned options for some properties (owner, strat= egy, >>>> template), these properties can be accommodated as a VARIADIC argume= nt. The >>>> function signature can be something like >>>> >>>> pg_get_database_ddl(oid, VARIADIC options text[]) >>>> >>>> I would include the pretty print into options too. >>>> >>>> >>>> Same comment as the one I gave for the Owner, if you are referring to >>>> these as options to the function. >>>> >>>> >>>> Let me elaborate a bit. As I suggested you can control the output with= options. >>>> Why? Flexibility. >>>> >>>> Why am I suggesting such a general purpose implementation? See some of= the use >>>> cases. >>>> >>>> 1. object DDL. Check DDL to recreate the object. It is not the exact D= DL that >>>> the user informed but it produces the same result. >>>> 2. clone tool. Clone the objects to recreate the environment for anoth= er >>>> customer. These objects can be created in the same cluster or in anoth= er one. >>>> (Of course, global objects don't apply for the same cluster.) >>>> 3. dump tool. Dump the commands to recreate the existing objects. >>>> 4. diff tool. There are tools like pgquarrel [1] that queries the cata= log and >>>> compare the results to create commands to turn the target database int= o the >>>> source database. The general purpose functions can be used if the obje= ct >>>> doesn't exist in the target database. (Of course, it doesn't apply for= global >>>> objects but again it is a good UI to have all of these pg_get_OBJECT_d= dl >>>> functions using the same approach.) >>>> 5. logical replication. These pg_get_OBJECT_ddl functions can be good >>>> candidates to be used in the initial schema replication and even in th= e DDL >>>> replication (if the object doesn't exist in the target database). >>>> >>>> The "options" parameter is to get the DDL command to serve any of thes= e use >>>> cases. There are some properties in a certain object that you *don't* = want for >>>> whatever reason. See some --no-OBJECT options in pg_dump. Let's say yo= u don't >>>> want the TABLESPACE or the table access method while getting the CREAT= E TABLE >>>> DDL because it is different in the other database. >>>> >>>> >>>> +1 >>>> >>>> >>>> I received a review comment suggesting the use of tabs. I also looked >>>> up PostgreSQL best practices on google, which recommend using tabs for >>>> indentation and spaces for alignment. I=E2=80=99m open to updating my = code >>>> accordingly. >>>> >>>> >>>> I didn't check all of the possible output but the majority uses space = instead >>>> of tabs. Check psql. If you check the git history (git log --grep=3Dta= bs), you >>>> will notice that tabs are removed from source code. >>>> >>>> >>>> >>>> We should follow the pretty printing style in ruleutils.c, which uses >>>> spaces. >>>> >>>> >>>> * permission. I don't think you need to check for permissions inside t= he >>>> function. I wouldn't want a different behavior than pg_dump(all). Yo= u can >>>> always adjust it in system_functions.sql. >>>> >>>> >>>> We=E2=80=99ve already had extensive discussions on this topic in the s= ame >>>> email thread, and ultimately we decided to add the permission check. >>>> >>>> >>>> That's fair. Again, I expect that all of these pg_get_OBJECT_ddl funct= ions use >>>> the same approach. We can always relax this restriction in the future. >>>> >>>> >>>> >>>> +1 >>>> >>>> >>>> cheers >>>> >>>> >>>> andrew >>>> >>>> -- >>>> Andrew Dunstan >>>> EDB: https://www.enterprisedb.com >>>> >>>> --0000000000007db5d40648e298d6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

In my p= revious email, I included two different patches (for two separate approache= s) from different branches. As a result, CommitFest is indicating that a re= base is required.

Apologies for the inconvenience, I=E2=80=99m still getting familiar wit= h the process.

Attached are the patches, layered one on top of the other, representing tw= o approaches:

  • Double Dash: v8-0001-Add-pg_get_database_ddl-func= tion-to-reconstruct-double-dash.patch
  • DefElem (Key-Value): v= 8-0002-Add-pg_get_database_ddl-function-to-reconstruct-DefElem.patch
  • I am now submi= tting the v8 patches, which are ready for review. Please l= et me know which approach you find more suitable and preferable.

    =

On Tue, Jan 20, 2026 at 5:06=E2=80=AFPM Akshay Joshi = <akshay.joshi@enterpris= edb.com> wrote:
All,

Following Alvaro's suggestion to us= e DefElem syntax, I have modified the code to support key-value pairs.=C2= =A0

I have attached two different patches :
v7-0001: Uses the dou= ble-dash syntax.
v7-0002: Uses the DefElem syntax.

Usage Examp= le for double-dash approach:
SELECT pg_get_database_ddl('postgr= es', '--no-owner', '--no-tablespace'); -- Omit Owner an= d Tablespace clauses.
SELECT pg_get_database_ddl('postgres', &#= 39;pretty', '--with-defaults'); -- Includes clauses for paramet= ers at their default values.

Usage Example for DefElem approach: The DefElem implementation supports various boolean values (no, false, = 0) and is case-insensitive.
SELECT pg_get_database_ddl('postgres= 9;, 'owner=3Dno', 'tablespace=3Dfalse'); -- Omits Owner and= Tablespace clauses.
SELECT pg_get_database_ddl('postgres', = 9;pretty', 'defaults=3Dyes'); -- Includes clauses for parameter= s at their default values.
SELECT pg_get_database_ddl('postgres'= , 'pretty', 'defaults'); -- Includes clauses for parameters= at their default values.


Please suggest which approach is pr= eferred. The patches are ready for review.


On Fri, Jan 16, 2026 at 1= 2:53=E2=80=AFPM Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
    =
  • 1) Implement uint64 for the flags to provide capacity for up = to 64 distinct options.
    2) Refactor parse_ddl_options to re= turn the flag set directly rather than using an out parameter.
    Please find the attached v7 patch, which is now ready for review.<= /p>


On Wed, Jan 14, 2026 at 9:18=E2=80=AFPM Akshay Joshi <akshay.joshi@= enterprisedb.com> wrote:

I have incorporated Euler=E2=80= =99s changes, which modify the declaration and definition of the pg_get_= database_ddl function. Please find the attached v6 patch, which = is now ready for review. The following updates have been made:

  1. Function signature updated to: pg_get_database_ddl(database_id regdatabase, VARIADIC ddl_options text[])

  2. Added options --no-owner and --no-tabl= espace to omit the OWNER and TABLESPACE clauses from the reconstructed = DDL.

  3. Moved the "pretty" parame= ter into ddl_options for formatted output.

  4. Prop= erties such as ENCODING, LOCALE_PROVIDER, TABLESPACE, CONNECTION LIMIT, and= ALLOW_CONNECTIONS are omitted if they are set to default values.

  5. Introduced the --with-defaults option to include = clauses for parameters even when they are at their default values.

  6. Standardized formatting to use spaces instead of tabs.<= /span>

Usage examples:

  1. SELECT pg_get_database_ddl('postgres'); // Non p= retty-formatted DDL
  2. SELECT pg_get_database_ddl(16835); // Non prett= y-formatted DDL
  3. SELECT pg_get_database_ddl('postgres', '= ;pretty'); // pretty-formatted DDL
  4. SELECT pg_get_database_ddl(&= #39;postgres', '--no-owner', '--no-tablespace'); // Omi= ts the Owner and Tablespace clause from the DDL.
  5. SELECT pg_get_data= base_ddl('postgres', 'pretty', '--with-defaults'); = // Includes clauses for parameters that are currently at their default valu= es.

On Thu, Jan 8, 2026 at 4:57=E2=80=AFAM Andrew Dunstan <andrew@dunslane.net> wrote:
= =20 =20 =20


On 2025-12-12 Fr 10:19 AM, Euler Taveira wrote:
On Fri, Dec 12, 2025, at 7:52 AM, Akshay Joshi wrote:
On Thu, Dec 11, 2025 at 7:29=E2=80=AFPM Euler Taveira <euler@eulerto.com> wrote:

        
Is there any way to obtain the default values directly from th=
e source
code itself, or do I need to refer to the documentation? If we rely on
the documentation and compare against that, then in the future, if the
default values change, we would also need to update our logic
accordingly.

No, you need to check the documentation. If you are changing the=
 default value,
you are breaking compatibility; that rarely happens. If we are really conce=
rn
about this fact, you can add a test case that creates the object without
properties (all default values) and another with all default properties and
then compare the output.


Maybe the function should have a VERBOSE option that emits all the defaults.



      
Constantly having to check the documentation for default value=
s may
feel annoying to some users. Some users run queries with parameters
such as encoding, connection limit, and locale using their default
values. When they call the pg_get_database_ddl function, it
reconstructs the short command based on those defaults.

Encoding and locale, ok but I doubt about connection limit.

postgres=3D# SELECT current_user;
 current_user
--------------
 euler
(1 row)

postgres=3D# CREATE DATABASE foo;
CREATE DATABASE
postgres=3D# CREATE DATABASE bar OWNER euler;
CREATE DATABASE

When you are learning a new command, you generally don't set the defaul=
t value
for a property just to be correct. I'm not saying this function shouldn=
't
include OWNER. I'm just suggesting it to be optional.  See some argumen=
ts
below.

* OWNER. There is no guarantee that the owner exists in the =
cluster you will
  use this output. That's something that pg_dumpall treats separately (=
see
  above). Does it mean we should include the owner? No. We can make it an
  option.

If I understand correctly, the owner should be an option provi=
ded by
the caller of the function, and we reconstruct the Database DDL using
that specified owner. Is that right?
If so, then in my humble opinion, this is not truly a reconstruction
of the existing database object.

No. My idea is to have something like the pg_dump --no-owner opt=
ion. This is
important if you are transporting the objects from one cluster to another o=
ne.
Owner might be different. That's why I'm suggesting it should be op=
tional. It
means flexibility. See pg_dump output format that always apply the OWNER as=
 a
separate ALTER command.


+1



      
* options. Since I mentioned options for some properties (ow=
ner, strategy,
  template), these properties can be accommodated as a VARIADIC argument. T=
he
  function signature can be something like

pg_get_database_ddl(oid, VARIADIC options text[])

I would include the pretty print into options too.

Same comment as the one I gave for the Owner, if you are refer=
ring to
these as options to the function.

Let me elaborate a bit. As I suggested you can control the outpu=
t with options.
Why? Flexibility.

Why am I suggesting such a general purpose implementation? See some of the =
use
cases.

1. object DDL. Check DDL to recreate the object. It is not the exact DDL th=
at
the user informed but it produces the same result.
2. clone tool. Clone the objects to recreate the environment for another
customer. These objects can be created in the same cluster or in another on=
e.
(Of course, global objects don't apply for the same cluster.)
3. dump tool. Dump the commands to recreate the existing objects.
4. diff tool. There are tools like pgquarrel [1] that queries the catalog a=
nd
compare the results to create commands to turn the target database into the
source database. The general purpose functions can be used if the object
doesn't exist in the target database. (Of course, it doesn't apply =
for global
objects but again it is a good UI to have all of these pg_get_OBJECT_ddl
functions using the same approach.)
5. logical replication. These pg_get_OBJECT_ddl functions can be good
candidates to be used in the initial schema replication and even in the DDL
replication (if the object doesn't exist in the target database).

The "options" parameter is to get the DDL command to serve any of=
 these use
cases. There are some properties in a certain object that you *don't* w=
ant for
whatever reason. See some --no-OBJECT options in pg_dump. Let's say you=
 don't
want the TABLESPACE or the table access method while getting the CREATE TAB=
LE
DDL because it is different in the other database.


+1



      
I received a review comment suggesting the use of tabs. I also=
 looked
up PostgreSQL best practices on google, which recommend using tabs for
indentation and spaces for alignment. I=E2=80=99m open to updating my code
accordingly.

I didn't check all of the possible output but the majority u=
ses space instead
of tabs. Check psql. If you check the git history (git log --grep=3Dtabs), =
you
will notice that tabs are removed from source code.



We should follow the pretty printing style in ruleutils.c, which uses spaces.



      
* permission. I don't think you need to check for permis=
sions inside the
  function. I wouldn't want a different behavior than pg_dump(all). You=
 can
  always adjust it in system_functions.sql.

We=E2=80=99ve already had extensive discussions on this topic =
in the same
email thread, and ultimately we decided to add the permission check.

That's fair. Again, I expect that all of these pg_get_OBJECT=
_ddl functions use
the same approach. We can always relax this restriction in the future.
    



+1


cheers


andrew

--
Andrew Dunstan
EDB: https://www=
.enterprisedb.com
--0000000000007db5d40648e298d6-- --0000000000007db5d50648e298d8 Content-Type: application/octet-stream; name="v8-0002-Add-pg_get_database_ddl-function-to-reconstruct-DefElem.patch" Content-Disposition: attachment; filename="v8-0002-Add-pg_get_database_ddl-function-to-reconstruct-DefElem.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mknt8efn1 RnJvbSAwN2JmM2VkN2Q3YzI5OWNkNmFlYjk1NTM5ODM3M2VkNzllYzBkZjRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBXZWQsIDIxIEphbiAyMDI2IDE0OjIxOjI4ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2OCAyLzJdIEFkZCBwZ19nZXRfZGF0YWJhc2VfZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25z dHJ1Y3QKIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnRzLgpNSU1FLVZlcnNpb246IDEuMApDb250 ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogOGJpdAoKVGhpcyBhZGRzIGEgbmV3IHN5c3RlbSBmdW5jdGlvbiwgcGdfZ2V0X2RhdGFi YXNlX2RkbChkYXRhYmFzZV9uYW1lL2RhdGFiYXNlX29pZCwgZGRsX29wdGlvbnMpLAp3aGljaCBy ZWNvbnN0cnVjdHMgdGhlIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnQgZm9yIGEgZ2l2ZW4gZGF0 YWJhc2UgbmFtZSBvciBkYXRhYmFzZSBvaWQuClN1cHBvcnRlZCBkZGxfb3B0aW9ucyBhcmUgJ3By ZXR0eScsICdvd25lcj1uby9mYWxzZS8wJywgJ3RhYmxlc3BhY2U9bm8vZmFsc2UvMCcgYW5kICdk ZWZhdWx0cycuCgpVc2FnZToKICBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncG9zdGdyZXMn KTsgLy8gTm9uIHByZXR0eS1mb3JtYXR0ZWQgRERMCiAgU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9k ZGwoMTY4MzUpOyAvLyBOb24gcHJldHR5LWZvcm1hdHRlZCBEREwKICBTRUxFQ1QgcGdfZ2V0X2Rh dGFiYXNlX2RkbCgncG9zdGdyZXMnLCAncHJldHR5Jyk7IC8vIHByZXR0eS1mb3JtYXR0ZWQgRERM CiAgU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3Bvc3RncmVzJywgJ293bmVyPW5vJywgJ3Rh Ymxlc3BhY2U9ZmFsc2UnKTsgLS0gT21pdHMgT3duZXIgYW5kIFRhYmxlc3BhY2UgY2xhdXNlcy4K ICBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncG9zdGdyZXMnLCAncHJldHR5JywgJ2RlZmF1 bHRzPXllcycpOyAtLSBJbmNsdWRlcyBjbGF1c2VzIGZvciBwYXJhbWV0ZXJzIGF0IHRoZWlyIGRl ZmF1bHQgdmFsdWVzLgogIFNFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdwb3N0Z3JlcycsICdw cmV0dHknLCAnZGVmYXVsdHMnKTsgLS0gSW5jbHVkZXMgY2xhdXNlcyBmb3IgcGFyYW1ldGVycyBh dCB0aGVpciBkZWZhdWx0IHZhbHVlcy4KClJlZmVyZW5jZTogUEctMTUwCkF1dGhvcjogQWtzaGF5 IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IMOBbHZh cm8gSGVycmVyYSA8YWx2aGVycmVAa3VyaWxlbXUuZGU+ClJldmlld2VkLWJ5OiBRdWFuIFpvbmds aWFuZyA8cXVhbnpvbmdsaWFuZ0B5ZWFoLm5ldD4KUmV2aWV3ZWQtYnk6IEphcGluIExpIDxqYXBp bmxpQGhvdG1haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IEV1bGVyIFRhdmVpcmEgPGV1bGVyQGV1bGVydG8uY29tPgotLS0K IGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgIHwgIDE3ICsrLS0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgIHwgMTAzICsrKysrKysrKysrKysrKysr KysrKy0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL2RkbF9kZWZhdWx0cy5oICAgICAgIHwgICA0ICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlLm91dCB8ICAyMCArKy0tLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsICAgICAgfCAgMTQgKystLQogNSBmaWxlcyBj aGFuZ2VkLCAxMjAgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbAppbmRleCAyMjUwMDMxYmI4My4uNzFhNjBkYmMxMWMgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1 bmMtaW5mby5zZ21sCkBAIC0zODU5LDcgKzM4NTksMTAgQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9 YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdyZXN9CiAgICAgICAgIDxpbmRleHRlcm0+CiAg ICAgICAgICA8cHJpbWFyeT5wZ19nZXRfZGF0YWJhc2VfZGRsPC9wcmltYXJ5PgogICAgICAgICA8 L2luZGV4dGVybT4KLSAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9kYXRhYmFzZV9kZGw8L2Z1bmN0 aW9uPiAoIDxwYXJhbWV0ZXI+ZGF0YWJhc2VfaWQ8L3BhcmFtZXRlcj4gPHR5cGU+cmVnZGF0YWJh c2U8L3R5cGU+IDxvcHRpb25hbD4sIDxsaXRlcmFsPlZBUklBRElDPC9saXRlcmFsPiA8cGFyYW1l dGVyPmRkbF9vcHRpb25zPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4gPC9vcHRpb25h bD4gKQorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2RhdGFiYXNlX2RkbDwvZnVuY3Rpb24+Cisg ICAgICAgICggPHBhcmFtZXRlcj5kYXRhYmFzZV9pZDwvcGFyYW1ldGVyPiA8dHlwZT5yZWdkYXRh YmFzZTwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPGxpdGVyYWw+VkFSSUFESUM8L2xpdGVy YWw+IDxwYXJhbWV0ZXI+ZGRsX29wdGlvbnM8L3BhcmFtZXRlcj4KKyAgICAgICAgPHR5cGU+dGV4 dFtdPC90eXBlPiA8L29wdGlvbmFsPiApCiAgICAgICAgIDxyZXR1cm52YWx1ZT50ZXh0PC9yZXR1 cm52YWx1ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CkBAIC0zODY3LDggKzM4NzAs OSBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jl c30KICAgICAgICAgc3lzdGVtIGNhdGFsb2dzIGZvciBhIHNwZWNpZmllZCBkYXRhYmFzZS4gVGhl IGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBPSUQgb3IKICAgICAgICAgbmFtZSBvZiB0aGUgZGF0YWJh c2UuIFRoZSBvcHRpb25hbCB2YXJpYWRpYyBhcmd1bWVudCBpcyBhbiBhcnJheSBvZiB0ZXh0CiAg ICAgICAgIGZsYWdzIHRvIGNvbnRyb2wgdGhlIG91dHB1dC4gU3VwcG9ydGVkIG9wdGlvbnMgaW5j bHVkZQotICAgICAgICA8bGl0ZXJhbD5wcmV0dHk8L2xpdGVyYWw+LCA8bGl0ZXJhbD4tLW5vLW93 bmVyPC9saXRlcmFsPiwKLSAgICAgICAgPGxpdGVyYWw+LS1uby10YWJsZXNwYWNlPC9saXRlcmFs PiwgYW5kIDxsaXRlcmFsPi0td2l0aC1kZWZhdWx0czwvbGl0ZXJhbD4uCisgICAgICAgIDxsaXRl cmFsPnByZXR0eTwvbGl0ZXJhbD4sIDxsaXRlcmFsPm93bmVyPW5vL2ZhbHNlLzA8L2xpdGVyYWw+ LAorICAgICAgICA8bGl0ZXJhbD50YWJsZXNwYWNlPW5vL2ZhbHNlLzA8L2xpdGVyYWw+LCBhbmQg PGxpdGVyYWw+ZGVmYXVsdHM8L2xpdGVyYWw+CisgICAgICAgIE9yIDxsaXRlcmFsPmRlZmF1bHRz PXllczwvbGl0ZXJhbD4uCiAgICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CiAg ICAgIDwvdGJvZHk+CkBAIC0zODg2LDE4ICszODkwLDE5IEBAIGFjbCAgICAgIHwge3Bvc3RncmVz PWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVzfQogICAgIDwvbGlzdGl0ZW0+CiAgICAg PGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICA8bGl0ZXJhbD4tLW5vLW93bmVyPC9saXRl cmFsPjogT21pdHMgdGhlIDxsaXRlcmFsPk9XTkVSPC9saXRlcmFsPiBjbGF1c2UgZnJvbQorICAg ICAgPGxpdGVyYWw+b3duZXI9bm8vZmFsc2UvMDwvbGl0ZXJhbD46IE9taXRzIHRoZSA8bGl0ZXJh bD5PV05FUjwvbGl0ZXJhbD4gY2xhdXNlIGZyb20KICAgICAgIHRoZSByZWNvbnN0cnVjdGVkIHN0 YXRlbWVudC4KICAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgIDxsaXN0aXRlbT4K ICAgICAgIDxwYXJhPgotICAgICAgPGxpdGVyYWw+LS1uby10YWJsZXNwYWNlPC9saXRlcmFsPjog T21pdHMgdGhlIDxsaXRlcmFsPlRBQkxFU1BBQ0U8L2xpdGVyYWw+IGNsYXVzZS4KKyAgICAgIDxs aXRlcmFsPnRhYmxlc3BhY2U9bm8vZmFsc2UvMDwvbGl0ZXJhbD46IE9taXRzIHRoZSA8bGl0ZXJh bD5UQUJMRVNQQUNFPC9saXRlcmFsPgorICAgICAgY2xhdXNlIGZyb20gdGhlIHJlY29uc3RydWN0 ZWQgc3RhdGVtZW50LgogICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICAgPGxpc3Rp dGVtPgogICAgICAgPHBhcmE+Ci0gICAgICA8bGl0ZXJhbD4tLXdpdGgtZGVmYXVsdHM8L2xpdGVy YWw+OiBJbmNsdWRlcyBjbGF1c2VzIGZvciBwYXJhbWV0ZXJzIHRoYXQgYXJlCisgICAgICA8bGl0 ZXJhbD5kZWZhdWx0czwvbGl0ZXJhbD46IEluY2x1ZGVzIGNsYXVzZXMgZm9yIHBhcmFtZXRlcnMg dGhhdCBhcmUKICAgICAgIGN1cnJlbnRseSBhdCB0aGVpciBkZWZhdWx0IHZhbHVlcyAoZS5nLiwg PGxpdGVyYWw+Q09OTkVDVElPTiBMSU1JVCAtMTwvbGl0ZXJhbD4pLAogICAgICAgd2hpY2ggYXJl IG5vcm1hbGx5IG9taXR0ZWQgZm9yIGJyZXZpdHkuCiAgICAgICA8L3BhcmE+CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKaW5kZXggYzZiNTk3OTA2NTUuLjgxODEwMTAyMjRhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCkBAIC0xMzgxMywzNCArMTM4MTMsMTA5IEBAIHBhcnNlX2RkbF9v cHRpb25zKEFycmF5VHlwZSAqZGRsX29wdGlvbnMpCiAJaWYgKGRkbF9vcHRpb25zID09IE5VTEwp CiAJCXJldHVybiBmbGFnczsKIAotCWRlY29uc3RydWN0X2FycmF5KGRkbF9vcHRpb25zLAotCQkJ CQkgIFRFWFRPSUQsIC0xLCBmYWxzZSwgJ2knLAorCWRlY29uc3RydWN0X2FycmF5KGRkbF9vcHRp b25zLCBURVhUT0lELCAtMSwgZmFsc2UsICdpJywKIAkJCQkJICAmb3B0aW9ucywgJm51bGxzLCAm bl9vcHRpb25zKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuX29wdGlvbnM7IGkrKykKIAl7CiAJCWNo YXIJICAgKm9wdDsKKwkJY2hhcgkgICAqbmFtZTsKKwkJY2hhcgkgICAqdmFsdWU7CiAKIAkJaWYg KG51bGxzW2ldKQogCQkJY29udGludWU7CiAKIAkJb3B0ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhv cHRpb25zW2ldKTsKKwkJbmFtZSA9IG9wdDsKKwkJdmFsdWUgPSBzdHJjaHIob3B0LCAnPScpOwor CisJCWlmICh2YWx1ZSAhPSBOVUxMKQorCQl7CisJCQkqdmFsdWUgPSAnXDAnOworCQkJdmFsdWUr KzsKKwkJfQorCisJCS8qCisJCSAqICogTG9naWMgZm9yICJvd25lciI6IGhhbmRsZSAnb3duZXI9 bm8nLCAnb3duZXI9MCcsICdvd25lcj1mYWxzZScsCisJCSAqIGV0Yy4gVXNpbmcgcGdfc3RyY2Fz ZWNtcCBmb3IgdGhlIGtleSBhbmQgcGFyc2VfYm9vbCBmb3IgdGhlIHZhbHVlLgorCQkgKi8KKwkJ aWYgKHBnX3N0cmNhc2VjbXAobmFtZSwgIm93bmVyIikgPT0gMCkKKwkJeworCQkJYm9vbAkJYnZh bDsKKworCQkJaWYgKHZhbHVlID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwYXJz ZV9ib29sKHZhbHVlLCAmYnZhbCkpCisJCQl7CisJCQkJaWYgKCFidmFsKQorCQkJCQlmbGFncyB8 PSBQR19ERExfTk9fT1dORVI7CisJCQl9CisJCQllbHNlCisJCQkJZ290byBpbnZhbGlkX3ZhbHVl OworCQl9CisJCS8qIExvZ2ljIGZvciAidGFibGVzcGFjZSIgKi8KKwkJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChuYW1lLCAidGFibGVzcGFjZSIpID09IDApCisJCXsKKwkJCWJvb2wJCWJ2YWw7CisK KwkJCWlmICh2YWx1ZSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocGFyc2VfYm9v bCh2YWx1ZSwgJmJ2YWwpKQorCQkJeworCQkJCWlmICghYnZhbCkKKwkJCQkJZmxhZ3MgfD0gUEdf RERMX05PX1RBQkxFU1BBQ0U7CisJCQl9CisJCQllbHNlCisJCQkJZ290byBpbnZhbGlkX3ZhbHVl OworCQl9CisJCS8qIExvZ2ljIGZvciAiZGVmYXVsdHMiICovCisJCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAobmFtZSwgImRlZmF1bHRzIikgPT0gMCkKKwkJeworCQkJYm9vbAkJYnZhbDsKKworCQkJ LyogSWYganVzdCAnZGVmYXVsdHMnIGlzIHBhc3NlZCB3aXRob3V0ICc9dmFsJywgd2UgYXNzdW1l IHRydWUgKi8KKwkJCWlmICh2YWx1ZSA9PSBOVUxMKQorCQkJCWZsYWdzIHw9IFBHX0RETF9XSVRI X0RFRkFVTFRTOworCQkJZWxzZSBpZiAocGFyc2VfYm9vbCh2YWx1ZSwgJmJ2YWwpKQorCQkJewor CQkJCWlmIChidmFsKQorCQkJCQlmbGFncyB8PSBQR19ERExfV0lUSF9ERUZBVUxUUzsKKwkJCX0K KwkJCWVsc2UKKwkJCQlnb3RvIGludmFsaWRfdmFsdWU7CisJCX0KKwkJLyogTG9naWMgZm9yICJw cmV0dHkiICovCisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAobmFtZSwgInByZXR0eSIpID09IDAp CisJCXsKKwkJCS8qIFVzdWFsbHkgYSBzdGFuZGFsb25lIGZsYWcsIGJ1dCB3ZSBjaGVjayBib29s ZWFuIGlmIHByb3ZpZGVkICovCisJCQlib29sCQlidmFsOwogCi0JCS8qIE1hcCBzdHJpbmdzIHRv IGJpdG1hc2sgZmxhZ3MgKi8KLQkJaWYgKHN0cmNtcChvcHQsICJwcmV0dHkiKSA9PSAwKQotCQkJ ZmxhZ3MgfD0gUEdfRERMX1BSRVRUWV9JTkRFTlQ7Ci0JCWVsc2UgaWYgKHN0cmNtcChvcHQsICIt LW5vLW93bmVyIikgPT0gMCkKLQkJCWZsYWdzIHw9IFBHX0RETF9OT19PV05FUjsKLQkJZWxzZSBp ZiAoc3RyY21wKG9wdCwgIi0tbm8tdGFibGVzcGFjZSIpID09IDApCi0JCQlmbGFncyB8PSBQR19E RExfTk9fVEFCTEVTUEFDRTsKLQkJZWxzZSBpZiAoc3RyY21wKG9wdCwgIi0td2l0aC1kZWZhdWx0 cyIpID09IDApCi0JCQlmbGFncyB8PSBQR19ERExfV0lUSF9ERUZBVUxUUzsKKwkJCWlmICh2YWx1 ZSA9PSBOVUxMKQorCQkJCWZsYWdzIHw9IFBHX0RETF9QUkVUVFlfSU5ERU5UOworCQkJZWxzZSBp ZiAocGFyc2VfYm9vbCh2YWx1ZSwgJmJ2YWwpKQorCQkJeworCQkJCWlmIChidmFsKQorCQkJCQlm bGFncyB8PSBQR19ERExfUFJFVFRZX0lOREVOVDsKKwkJCX0KKwkJCWVsc2UKKwkJCQlnb3RvIGlu dmFsaWRfdmFsdWU7CisJCX0KIAkJZWxzZQorCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJCQkJIGVycm1zZygi dW5yZWNvZ25pemVkIG9wdGlvbjogJXMiLCBvcHQpKSk7CisJCQkJCSBlcnJtc2coInVucmVjb2du aXplZCBvcHRpb246ICVzIiwgbmFtZSkpKTsKKwkJfQogCiAJCXBmcmVlKG9wdCk7CisJCWNvbnRp bnVlOworCitpbnZhbGlkX3ZhbHVlOgorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImludmFsaWQgdmFs dWUgZm9yIG9wdGlvbiBcIiVzXCI6ICVzIiwgbmFtZSwgdmFsdWUpKSk7CiAJfQogCiAJcGZyZWUo b3B0aW9ucyk7CkBAIC0xMzkyOSw3ICsxNDAwNCw3IEBAIHBnX2dldF9kYXRhYmFzZV9kZGxfd29y a2VyKE9pZCBkYl9vaWQsIEFycmF5VHlwZSAqZGRsX29wdGlvbnMpCiAJCQkJCSBxdW90ZV9pZGVu dGlmaWVyKGRiZm9ybS0+ZGF0bmFtZS5kYXRhKSk7CiAJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1 ZiwgcHJldHR5X2ZsYWdzLCA0LCAiV0lUSCIpOwogCi0JLyogU2V0IHRoZSBPV05FUiBpbiB0aGUg RERMIGlmIC0tbm8tb3duZXIgaXMgbm90IHNwZWNpZmllZCAqLworCS8qIFNldCB0aGUgT1dORVIg aW4gdGhlIERETCBpZiBvd25lciBpcyBub3Qgb21pdHRlZCAqLwogCWlmIChPaWRJc1ZhbGlkKGRi Zm9ybS0+ZGF0ZGJhKSAmJiAhKGRkbF9mbGFncyAmIFBHX0RETF9OT19PV05FUikpCiAJewogCQln ZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJPV05FUiA9ICVzIiwK QEAgLTEzOTk3LDcgKzE0MDcyLDcgQEAgcGdfZ2V0X2RhdGFiYXNlX2RkbF93b3JrZXIoT2lkIGRi X29pZCwgQXJyYXlUeXBlICpkZGxfb3B0aW9ucykKIAllbHNlIGlmIChpc193aXRoX2RlZmF1bHRz KQogCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJMT0NBTEVf UFJPVklERVIgPSBsaWJjIik7CiAKLQkvKiBTZXQgdGhlIFRBQkxFU1BBQ0UgaW4gdGhlIERETCBp ZiAtLW5vLXRhYmxlc3BhY2UgaXMgbm90IHNwZWNpZmllZCAqLworCS8qIFNldCB0aGUgVEFCTEVT UEFDRSBpbiB0aGUgRERMIGlmIHRhYmxlc3BhY2UgaXMgbm90IG9taXR0ZWQgKi8KIAlpZiAoT2lk SXNWYWxpZChkYmZvcm0tPmRhdHRhYmxlc3BhY2UpICYmICEoZGRsX2ZsYWdzICYgUEdfRERMX05P X1RBQkxFU1BBQ0UpKQogCXsKIAkJLyogR2V0IHRoZSB0YWJsZXNwYWNlIG5hbWUgcmVzcGVjdGl2 ZSB0byB0aGUgZ2l2ZW4gdGFibGVzcGFjZSBvaWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2RkbF9kZWZhdWx0cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgK aW5kZXggODRlZjYxYjRmM2QuLmQxN2U4NDNmZTA5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9kZGxfZGVmYXVsdHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9kZGxfZGVmYXVsdHMu aApAQCAtMTMsNiArMTMsOCBAQAogI2lmbmRlZiBERExfREVGQVVMVFNfSAogI2RlZmluZSBERExf REVGQVVMVFNfSAogCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCiBzdGF0aWMgY29uc3Qgc3RydWN0 CiB7CiAJc3RydWN0CkBAIC0zNCw0ICszNiw0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QKIAl9CiB9 OwogCi0jZW5kaWYJCQkJCQkvKiBERExfREVGQVVMVFNfSCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKKyNlbmRpZgkJCQkJCQkvKiBERExfREVGQVVMVFNfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFzZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2RhdGFiYXNlLm91dAppbmRleCBlYjNhMTNiY2Y5ZS4uYTgxNmIwYjUyNWYgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uub3V0CkBAIC04NywyOCArODcsMjggQEAg U0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4Jykp OwogKDEgcm93KQogCiAtLSBXaXRoIE5vIE93bmVyCi1TRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRf ZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnLS1uby1vd25lcicpKTsKK1NFTEVDVCBk ZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcj1u bycpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lU SCBDT05ORUNUSU9OIExJTUlUID0gMTIzOwogKDEgcm93KQogCiAtLSBXaXRoIE5vIFRhYmxlc3Bh Y2UKLVNFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRm OCcsICctLW5vLXRhYmxlc3BhY2UnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQ1JFQVRFIERBVEFCQVNF IHJlZ3Jlc3Npb25fdXRmOCBXSVRIIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0ZXIgQ09OTkVD VElPTiBMSU1JVCA9IDEyMzsKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwo J3JlZ3Jlc3Npb25fdXRmOCcsICdkZWZhdWx0cycsICd0YWJsZXNwYWNlPW5vJykpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJl Z3Jlc3Npb25fdXRmOCBXSVRIIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0ZXIgRU5DT0RJTkcg PSAnVVRGOCcgQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7 CiAoMSByb3cpCiAKIC0tIFdpdGggRGVmYXVsdHMKLVNFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9k YXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICctLXdpdGgtZGVmYXVsdHMnKSk7CitTRUxF Q1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnZGVm YXVsdHM9eWVzJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQ1JFQVRF IERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBXSVRIIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0 ZXIgRU5DT0RJTkcgPSAnVVRGOCcgVEFCTEVTUEFDRSA9IHBnX2RlZmF1bHQgQUxMT1dfQ09OTkVD VElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CiAoMSByb3cpCiAKIC0tIFdpdGgg Tm8gT3duZXIsIE5vIFRhYmxlc3BhY2UgYW5kIFdpdGggRGVmYXVsdHMKLVNFTEVDVCBkZGxfZmls dGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICctLW5vLW93bmVyJywg Jy0tbm8tdGFibGVzcGFjZScsICctLXdpdGgtZGVmYXVsdHMnKSk7CitTRUxFQ1QgZGRsX2ZpbHRl cihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXI9MCcsICd0YWJs ZXNwYWNlPTAnLCAnZGVmYXVsdHM9MScpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBXSVRIIEVOQ09E SU5HID0gJ1VURjgnIEFMTE9XX0NPTk5FQ1RJT05TID0gdHJ1ZSBDT05ORUNUSU9OIExJTUlUID0g MTIzOwpAQCAtMTI0LDE0ICsxMjQsMTQgQEAgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRm OAogICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzOwogKDEgcm93KQogLS0gV2l0aCBObyBP d25lciBhbmQgTm8gVGFibGVzcGFjZQotU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNl X2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsICctLW5vLW93bmVyJywgJy0tbm8tdGFi bGVzcGFjZScpKTsKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jl c3Npb25fdXRmOCcsICdwcmV0dHknLCAnb3duZXI9bm8nLCAndGFibGVzcGFjZT1ubycpKTsKIGRk bF9maWx0ZXIKIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKICAgICBXSVRICiAgICAg ICAgIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CiAoMSByb3cpCiAtLSBXaXRoIERlZmF1bHRzCi1T RUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAn cHJldHR5JywgJy0td2l0aC1kZWZhdWx0cycpKTsKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9k YXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0dHknLCAnZGVmYXVsdHMnKSk7CiBk ZGxfZmlsdGVyCiBDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4CiAgICAgV0lUSApAQCAt MTQyLDcgKzE0Miw3IEBAIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKICAgICAgICAg Q09OTkVDVElPTiBMSU1JVCA9IDEyMzsKICgxIHJvdykKIC0tIFdpdGggTm8gT3duZXIsIE5vIFRh Ymxlc3BhY2UgYW5kIFdpdGggRGVmYXVsdHMKLVNFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRh YmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0dHknLCAnLS1uby1vd25lcicsICctLW5v LXRhYmxlc3BhY2UnLCAnLS13aXRoLWRlZmF1bHRzJykpOworU0VMRUNUIGRkbF9maWx0ZXIocGdf Z2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsICdvd25lcj1mYWxz ZScsICd0YWJsZXNwYWNlPWZhbHNlJywgJ2RlZmF1bHRzPXRydWUnKSk7CiBkZGxfZmlsdGVyCiBD UkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4CiAgICAgV0lUSApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0 YWJhc2Uuc3FsCmluZGV4IDkxOGIyOGM0N2RhLi40Y2IxN2E4ZDBkNiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2RhdGFiYXNlLnNxbApAQCAtODYsMjkgKzg2LDI5IEBAIFNFTEVDVCBwZ19nZXRfZGF0YWJhc2Vf ZGRsKE5VTEwpOwogU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVz c2lvbl91dGY4JykpOwogCiAtLSBXaXRoIE5vIE93bmVyCi1TRUxFQ1QgZGRsX2ZpbHRlcihwZ19n ZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnLS1uby1vd25lcicpKTsKK1NFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25l cj1ubycpKTsKIAogLS0gV2l0aCBObyBUYWJsZXNwYWNlCi1TRUxFQ1QgZGRsX2ZpbHRlcihwZ19n ZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnLS1uby10YWJsZXNwYWNlJykpOwor U0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4Jywg J2RlZmF1bHRzJywgJ3RhYmxlc3BhY2U9bm8nKSk7CiAKIC0tIFdpdGggRGVmYXVsdHMKLVNFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICctLXdp dGgtZGVmYXVsdHMnKSk7CitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdy ZWdyZXNzaW9uX3V0ZjgnLCAnZGVmYXVsdHM9eWVzJykpOwogCiAtLSBXaXRoIE5vIE93bmVyLCBO byBUYWJsZXNwYWNlIGFuZCBXaXRoIERlZmF1bHRzCi1TRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRf ZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnLS1uby1vd25lcicsICctLW5vLXRhYmxl c3BhY2UnLCAnLS13aXRoLWRlZmF1bHRzJykpOworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2Rh dGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyPTAnLCAndGFibGVzcGFjZT0wJywg J2RlZmF1bHRzPTEnKSk7CiAKIC0tIFdpdGggUHJldHR5IGZvcm1hdHRlZAogXHBzZXQgZm9ybWF0 IHVuYWxpZ25lZAogU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVz c2lvbl91dGY4JywgJ3ByZXR0eScpKTsKIAogLS0gV2l0aCBObyBPd25lciBhbmQgTm8gVGFibGVz cGFjZQotU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91 dGY4JywgJ3ByZXR0eScsICctLW5vLW93bmVyJywgJy0tbm8tdGFibGVzcGFjZScpKTsKK1NFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0 dHknLCAnb3duZXI9bm8nLCAndGFibGVzcGFjZT1ubycpKTsKIAogLS0gV2l0aCBEZWZhdWx0cwot U0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4Jywg J3ByZXR0eScsICctLXdpdGgtZGVmYXVsdHMnKSk7CitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRf ZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JywgJ2RlZmF1bHRzJykpOwog CiAtLSBXaXRoIE5vIE93bmVyLCBObyBUYWJsZXNwYWNlIGFuZCBXaXRoIERlZmF1bHRzCi1TRUxF Q1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJl dHR5JywgJy0tbm8tb3duZXInLCAnLS1uby10YWJsZXNwYWNlJywgJy0td2l0aC1kZWZhdWx0cycp KTsKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRm OCcsICdwcmV0dHknLCAnb3duZXI9ZmFsc2UnLCAndGFibGVzcGFjZT1mYWxzZScsICdkZWZhdWx0 cz10cnVlJykpOwogCiBEUk9QIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmODsKIERST1AgUk9MRSBy ZWdyZXNzX2RhdGRiYV9iZWZvcmU7Ci0tIAoyLjUxLjAKCg== --0000000000007db5d50648e298d8 Content-Type: application/octet-stream; name="v8-0001-Add-pg_get_database_ddl-function-to-reconstruct-double-dash.patch" Content-Disposition: attachment; filename="v8-0001-Add-pg_get_database_ddl-function-to-reconstruct-double-dash.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mknt8efd0 RnJvbSA3N2I5YzRkMzE2NWI1MmViZTY5NmEwMDdjNmYyY2M4MTNjYWJhZGZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE3OjQ3OjU5ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2OCAxLzJdIEFkZCBwZ19nZXRfZGF0YWJhc2VfZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25z dHJ1Y3QKIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnRzLgpNSU1FLVZlcnNpb246IDEuMApDb250 ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogOGJpdAoKVGhpcyBhZGRzIGEgbmV3IHN5c3RlbSBmdW5jdGlvbiwgcGdfZ2V0X2RhdGFi YXNlX2RkbChkYXRhYmFzZV9uYW1lL2RhdGFiYXNlX29pZCwgZGRsX29wdGlvbnMpLAp3aGljaCBy ZWNvbnN0cnVjdHMgdGhlIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnQgZm9yIGEgZ2l2ZW4gZGF0 YWJhc2UgbmFtZSBvciBkYXRhYmFzZSBvaWQuClN1cHBvcnRlZCBkZGxfb3B0aW9ucyBhcmUgJ3By ZXR0eScsICctLW5vLW93bmVyJywgJy0tbm8tdGFibGVzcGFjZScgYW5kICctLXdpdGgtZGVmYXVs dHMnLgoKVXNhZ2U6CiAgU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3Bvc3RncmVzJyk7IC8v IE5vbiBwcmV0dHktZm9ybWF0dGVkIERETAogIFNFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKDE2 ODM1KTsgLy8gTm9uIHByZXR0eS1mb3JtYXR0ZWQgRERMCiAgU0VMRUNUIHBnX2dldF9kYXRhYmFz ZV9kZGwoJ3Bvc3RncmVzJywgJ3ByZXR0eScpOyAvLyBwcmV0dHktZm9ybWF0dGVkIERETAogIFNF TEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdwb3N0Z3JlcycsICctLW5vLW93bmVyJywgJy0tbm8t dGFibGVzcGFjZScpOyAvLyBPbWl0cyB0aGUgT3duZXIgYW5kIFRhYmxlc3BhY2UgY2xhdXNlIGZy b20gdGhlIERETC4KICBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncG9zdGdyZXMnLCAncHJl dHR5JywgJy0td2l0aC1kZWZhdWx0cycpOyAvLyBJbmNsdWRlcyBjbGF1c2VzIGZvciBwYXJhbWV0 ZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBhdCB0aGVpciBkZWZhdWx0IHZhbHVlcy4KClJlZmVyZW5j ZTogUEctMTUwCkF1dGhvcjogQWtzaGF5IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRi LmNvbT4KUmV2aWV3ZWQtYnk6IMOBbHZhcm8gSGVycmVyYSA8YWx2aGVycmVAa3VyaWxlbXUuZGU+ ClJldmlld2VkLWJ5OiBRdWFuIFpvbmdsaWFuZyA8cXVhbnpvbmdsaWFuZ0B5ZWFoLm5ldD4KUmV2 aWV3ZWQtYnk6IEphcGluIExpIDxqYXBpbmxpQGhvdG1haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hh byBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEV1bGVyIFRhdmVpcmEg PGV1bGVyQGV1bGVydG8uY29tPgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s ICAgICAgICAgfCAgNzcgKysrKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlv bnMuc3FsIHwgICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICAg fCAyOTEgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQgICAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgg ICAgICAgICB8ICAzNyArKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uub3V0 ICAgfCAxMzQgKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlLnNxbCAg ICAgICAgfCAgOTEgKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA2NDIgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3V0aWxzL2RkbF9kZWZhdWx0cy5oCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwv ZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCAxNzVmMTgzMTVjZC4uMjI1MDAzMWJiODMgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0zODMwLDQgKzM4MzAsODEgQEAgYWNsICAgICAgfCB7 cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdyZXN9CiAKICAgPC9zZWN0Mj4K IAorICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0LWRkbCI+CisgICA8dGl0bGU+R2V0 IE9iamVjdCBEREwgRnVuY3Rpb25zPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgVGhlIGZ1bmN0 aW9ucyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25zLWdldC1vYmplY3QtZGRs LXRhYmxlIi8+CisgICAgcmV0dXJuIHRoZSBEYXRhIERlZmluaXRpb24gTGFuZ3VhZ2UgKERETCkg c3RhdGVtZW50IGZvciBhbnkgZ2l2ZW4gZGF0YWJhc2Ugb2JqZWN0LgorICAgIFRoaXMgZmVhdHVy ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNldCBvZiBkaXN0aW5jdCBmdW5jdGlvbnMgZm9yIGVhY2gg b2JqZWN0IHR5cGUuCisgICA8L3BhcmE+CisKKyAgIDx0YWJsZSBpZD0iZnVuY3Rpb25zLWdldC1v YmplY3QtZGRsLXRhYmxlIj4KKyAgICA8dGl0bGU+R2V0IE9iamVjdCBEREwgRnVuY3Rpb25zPC90 aXRsZT4KKyAgICA8dGdyb3VwIGNvbHM9IjEiPgorICAgICA8dGhlYWQ+CisgICAgICA8cm93Pgor ICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3Np Z25hdHVyZSI+CisgICAgICAgIEZ1bmN0aW9uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBEZXNjcmlwdGlvbgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9y b3c+CisgICAgIDwvdGhlYWQ+CisKKyAgICAgPHRib2R5PgorICAgICAgPHJvdz4KKyAgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUi PgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X2RhdGFiYXNl X2RkbDwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5w Z19nZXRfZGF0YWJhc2VfZGRsPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPmRhdGFiYXNlX2lkPC9w YXJhbWV0ZXI+IDx0eXBlPnJlZ2RhdGFiYXNlPC90eXBlPiA8b3B0aW9uYWw+LCA8bGl0ZXJhbD5W QVJJQURJQzwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5kZGxfb3B0aW9uczwvcGFyYW1ldGVyPiA8dHlw ZT50ZXh0W108L3R5cGU+IDwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPnRleHQ8 L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVj b25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgREFUQUJBU0U8L2NvbW1hbmQ+IHN0YXRlbWVu dCBmcm9tIHRoZQorICAgICAgICBzeXN0ZW0gY2F0YWxvZ3MgZm9yIGEgc3BlY2lmaWVkIGRhdGFi YXNlLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIE9JRCBvcgorICAgICAgICBuYW1lIG9mIHRo ZSBkYXRhYmFzZS4gVGhlIG9wdGlvbmFsIHZhcmlhZGljIGFyZ3VtZW50IGlzIGFuIGFycmF5IG9m IHRleHQKKyAgICAgICAgZmxhZ3MgdG8gY29udHJvbCB0aGUgb3V0cHV0LiBTdXBwb3J0ZWQgb3B0 aW9ucyBpbmNsdWRlCisgICAgICAgIDxsaXRlcmFsPnByZXR0eTwvbGl0ZXJhbD4sIDxsaXRlcmFs Pi0tbm8tb3duZXI8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD4tLW5vLXRhYmxlc3BhY2U8 L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+LS13aXRoLWRlZmF1bHRzPC9saXRlcmFsPi4KKyAgICAg ICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90Ym9keT4KKyAgICA8L3Rn cm91cD4KKyAgIDwvdGFibGU+CisKKyAgPHBhcmE+CisgICAgVGhlIDxwYXJhbWV0ZXI+ZGRsX29w dGlvbnM8L3BhcmFtZXRlcj4gZm9yIDxmdW5jdGlvbj5wZ19nZXRfZGF0YWJhc2VfZGRsPC9mdW5j dGlvbj4KKyAgICBwcm92aWRlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIGdlbmVyYXRl ZCBTUUw6CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4K KyAgICAgIDxsaXRlcmFsPnByZXR0eTwvbGl0ZXJhbD46IEFkZHMgbmV3bGluZXMgYW5kIGluZGVu dGF0aW9uIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPi0tbm8t b3duZXI8L2xpdGVyYWw+OiBPbWl0cyB0aGUgPGxpdGVyYWw+T1dORVI8L2xpdGVyYWw+IGNsYXVz ZSBmcm9tCisgICAgICB0aGUgcmVjb25zdHJ1Y3RlZCBzdGF0ZW1lbnQuCisgICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgIDxs aXRlcmFsPi0tbm8tdGFibGVzcGFjZTwvbGl0ZXJhbD46IE9taXRzIHRoZSA8bGl0ZXJhbD5UQUJM RVNQQUNFPC9saXRlcmFsPiBjbGF1c2UuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPi0td2l0aC1kZWZh dWx0czwvbGl0ZXJhbD46IEluY2x1ZGVzIGNsYXVzZXMgZm9yIHBhcmFtZXRlcnMgdGhhdCBhcmUK KyAgICAgIGN1cnJlbnRseSBhdCB0aGVpciBkZWZhdWx0IHZhbHVlcyAoZS5nLiwgPGxpdGVyYWw+ Q09OTkVDVElPTiBMSU1JVCAtMTwvbGl0ZXJhbD4pLAorICAgICAgd2hpY2ggYXJlIG5vcm1hbGx5 IG9taXR0ZWQgZm9yIGJyZXZpdHkuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg ICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9wYXJhPgorCisgIDwvc2VjdDI+CisKICAgPC9zZWN0MT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4IGViOWUzMWFlMWJm Li4xNmMwZDUyNDc5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVu Y3Rpb25zLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3Fs CkBAIC02NTcsNiArNjU3LDEyIEBAIExBTkdVQUdFIElOVEVSTkFMCiBTVFJJQ1QgVk9MQVRJTEUg UEFSQUxMRUwgVU5TQUZFCiBBUyAncGdfcmVwbGljYXRpb25fb3JpZ2luX3Nlc3Npb25fc2V0dXAn OwogCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTgorICBwZ19nZXRfZGF0YWJhc2VfZGRsKGRh dGFiYXNlX2lkIHJlZ2RhdGFiYXNlLCBWQVJJQURJQyBkZGxfb3B0aW9ucyB0ZXh0W10gREVGQVVM VCAne30nKQorUkVUVVJOUyB0ZXh0CitMQU5HVUFHRSBpbnRlcm5hbAorQVMgJ3BnX2dldF9kYXRh YmFzZV9kZGwnOworCiAtLQogLS0gVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGZ1bmN0aW9u cyBtZWFuIHRoYXQgYW55b25lIGNhbiBleGVjdXRlIHRoZW0uCiAtLSBBIG51bWJlciBvZiBmdW5j dGlvbnMgc2hvdWxkbid0IGJlIGV4ZWN1dGFibGUgYnkganVzdCBhbnlvbmUsIGJ1dCByYXRoZXIK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAwMzNiNjI1ZjNmYy4uYzZiNTk3OTA2NTUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2F1dGhpZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19sYW5ndWFnZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgpA QCAtNTcsOCArNTgsMTAgQEAKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAj aW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3Jp dGVTdXBwb3J0LmgiCisjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJy YXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RkbF9k ZWZhdWx0cy5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgpAQCAtODksMTEgKzkyLDIyIEBACiAj ZGVmaW5lIFBSRVRUWUZMQUdfSU5ERU5UCQkweDAwMDIKICNkZWZpbmUgUFJFVFRZRkxBR19TQ0hF TUEJCTB4MDAwNAogCisvKiBEREwgT3B0aW9ucyBmbGFncyAqLworI2RlZmluZSBQR19ERExfUFJF VFRZX0lOREVOVAkweDAwMDAwMDAxCisjZGVmaW5lIFBHX0RETF9XSVRIX0RFRkFVTFRTCTB4MDAw MDAwMDIKKyNkZWZpbmUgUEdfRERMX05PX09XTkVSCQkJMHgwMDAwMDAwNAorI2RlZmluZSBQR19E RExfTk9fVEFCTEVTUEFDRQkweDAwMDAwMDA4CisKKwogLyogU3RhbmRhcmQgY29udmVyc2lvbiBv ZiBhICJib29sIHByZXR0eSIgb3B0aW9uIHRvIGRldGFpbGVkIGZsYWdzICovCiAjZGVmaW5lIEdF VF9QUkVUVFlfRkxBR1MocHJldHR5KSBcCiAJKChwcmV0dHkpID8gKFBSRVRUWUZMQUdfUEFSRU4g fCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZMQUdfU0NIRU1BKSBcCiAJIDogUFJFVFRZRkxB R19JTkRFTlQpCiAKKyNkZWZpbmUgR0VUX0RETF9QUkVUVFlfRkxBR1MocHJldHR5KSBcCisJKChw cmV0dHkpID8gKFBSRVRUWUZMQUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZM QUdfU0NIRU1BKSBcCisJIDogMCkKKwogLyogRGVmYXVsdCBsaW5lIGxlbmd0aCBmb3IgcHJldHR5 LXByaW50IHdyYXBwaW5nOiAwIG1lYW5zIHdyYXAgYWx3YXlzICovCiAjZGVmaW5lIFdSQVBfQ09M VU1OX0RFRkFVTFQJCTAKIApAQCAtNTQ2LDYgKzU2MCwxMSBAQCBzdGF0aWMgdm9pZCBnZXRfanNv bl90YWJsZV9uZXN0ZWRfY29sdW1ucyhUYWJsZUZ1bmMgKnRmLCBKc29uVGFibGVQbGFuICpwbGFu LAogCQkJCQkJCQkJCSAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgYm9v bCBzaG93aW1wbGljaXQsCiAJCQkJCQkJCQkJICBib29sIG5lZWRjb21tYSk7CitzdGF0aWMgdm9p ZCBnZXRfZm9ybWF0dGVkX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkJIGludCBwcmV0 dHlGbGFncywKKwkJCQkJCQkJIGludCBuU3BhY2VzLAorCQkJCQkJCQkgY29uc3QgY2hhciAqZm10 LC4uLikgcGdfYXR0cmlidXRlX3ByaW50Zig0LCA1KTsKK3N0YXRpYyBjaGFyICpwZ19nZXRfZGF0 YWJhc2VfZGRsX3dvcmtlcihPaWQgZGJfb2lkLCBBcnJheVR5cGUgKmRkbF9vcHRpb25zKTsKIAog I2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKIApA QCAtMTM3NDMsMyArMTM3NjIsMjc1IEBAIGdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3Qg KmJvdW5kX2RhdHVtcykKIAogCXJldHVybiBidWYuZGF0YTsKIH0KKworLyoKKyAqIGdldF9mb3Jt YXR0ZWRfc3RyaW5nCisgKgorICogUmV0dXJuIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIHN0 cmluZy4KKyAqCisgKiBwcmV0dHlGbGFncyAtIEJhc2VkIG9uIHByZXR0eUZsYWdzIHRoZSBvdXRw dXQgaW5jbHVkZXMgc3BhY2VzIGFuZAorICogICAgICAgICAgICAgICBuZXdsaW5lcyAoXG4pLgor ICogblNwYWNlcyAtIGluZGVudCB3aXRoIHNwZWNpZmllZCBudW1iZXIgb2Ygc3BhY2UgY2hhcmFj dGVycy4KKyAqIGZtdCAtIHByaW50Zi1zdHlsZSBmb3JtYXQgc3RyaW5nIHVzZWQgYnkgYXBwZW5k U3RyaW5nSW5mb1ZBLgorICovCitzdGF0aWMgdm9pZAorZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3Ry aW5nSW5mbyBidWYsIGludCBwcmV0dHlGbGFncywgaW50IG5TcGFjZXMsIGNvbnN0IGNoYXIgKmZt dCwuLi4pCit7CisJdmFfbGlzdAkJYXJnczsKKworCWlmIChwcmV0dHlGbGFncyAmIFBSRVRUWUZM QUdfSU5ERU5UKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKKwkJLyog SW5kZW50IHdpdGggc3BhY2VzICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgblNwYWNlczsgaSsr KQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCX0KKwl9CisJZWxz ZQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisKKwl2YV9zdGFydChhcmdzLCBm bXQpOworCWFwcGVuZFN0cmluZ0luZm9WQShidWYsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3Mp OworfQorCisvKioKKyAqIHBhcnNlX2RkbF9vcHRpb25zIC0gR2VuZXJpYyBoZWxwZXIgdG8gcGFy c2UgdmFyaWFkaWMgdGV4dCBvcHRpb25zCisgKiBkZGxfb3B0aW9uczogVGhlIEFycmF5VHlwZSBm cm9tIFBHX0dFVEFSR19BUlJBWVRZUEVfUAorICogZmxhZ3M6IEJpdG1hc2sgdG8gc2V0IG9wdGlv bnMgd2hpbGUgcGFyc2luZyBEREwgb3B0aW9ucy4KKyAqLworc3RhdGljIHVpbnQ2NAorcGFyc2Vf ZGRsX29wdGlvbnMoQXJyYXlUeXBlICpkZGxfb3B0aW9ucykKK3sKKwl1aW50NjQJCWZsYWdzID0g MDsKKwlEYXR1bQkgICAqb3B0aW9uczsKKwlib29sCSAgICpudWxsczsKKwlpbnQJCQluX29wdGlv bnM7CisJaW50CQkJaTsKKworCS8qIElmIG5vIG9wdGlvbnMgcHJvdmlkZWQsIHJldHVybiB0aGUg ZW1wdHkgYml0bWFzayAqLworCWlmIChkZGxfb3B0aW9ucyA9PSBOVUxMKQorCQlyZXR1cm4gZmxh Z3M7CisKKwlkZWNvbnN0cnVjdF9hcnJheShkZGxfb3B0aW9ucywKKwkJCQkJICBURVhUT0lELCAt MSwgZmFsc2UsICdpJywKKwkJCQkJICAmb3B0aW9ucywgJm51bGxzLCAmbl9vcHRpb25zKTsKKwor CWZvciAoaSA9IDA7IGkgPCBuX29wdGlvbnM7IGkrKykKKwl7CisJCWNoYXIJICAgKm9wdDsKKwor CQlpZiAobnVsbHNbaV0pCisJCQljb250aW51ZTsKKworCQlvcHQgPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKG9wdGlvbnNbaV0pOworCisJCS8qIE1hcCBzdHJpbmdzIHRvIGJpdG1hc2sgZmxhZ3MgKi8K KwkJaWYgKHN0cmNtcChvcHQsICJwcmV0dHkiKSA9PSAwKQorCQkJZmxhZ3MgfD0gUEdfRERMX1BS RVRUWV9JTkRFTlQ7CisJCWVsc2UgaWYgKHN0cmNtcChvcHQsICItLW5vLW93bmVyIikgPT0gMCkK KwkJCWZsYWdzIHw9IFBHX0RETF9OT19PV05FUjsKKwkJZWxzZSBpZiAoc3RyY21wKG9wdCwgIi0t bm8tdGFibGVzcGFjZSIpID09IDApCisJCQlmbGFncyB8PSBQR19ERExfTk9fVEFCTEVTUEFDRTsK KwkJZWxzZSBpZiAoc3RyY21wKG9wdCwgIi0td2l0aC1kZWZhdWx0cyIpID09IDApCisJCQlmbGFn cyB8PSBQR19ERExfV0lUSF9ERUZBVUxUUzsKKwkJZWxzZQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJt c2coInVucmVjb2duaXplZCBvcHRpb246ICVzIiwgb3B0KSkpOworCisJCXBmcmVlKG9wdCk7CisJ fQorCisJcGZyZWUob3B0aW9ucyk7CisJcGZyZWUobnVsbHMpOworCisJcmV0dXJuIGZsYWdzOwor fQorCisvKgorICogcGdfZ2V0X2RhdGFiYXNlX2RkbAorICoKKyAqIEdlbmVyYXRlIGEgQ1JFQVRF IERBVEFCQVNFIHN0YXRlbWVudCBmb3IgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBuYW1lIG9yIG9p ZC4KKyAqCisgKiBkYl9vaWQgLSBPSUQvTmFtZSBvZiB0aGUgZGF0YWJhc2UgZm9yIHdoaWNoIHRv IGdlbmVyYXRlIHRoZSBEREwuCisgKiBkZGxfb3B0aW9ucyAtIEFycmF5IG9mIHRleHQgb3B0aW9u cyB0byBtb2RpZnkgdGhlIG91dHB1dC4KKyAqLworRGF0dW0KK3BnX2dldF9kYXRhYmFzZV9kZGwo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCQlkYl9vaWQgPSBQR19HRVRBUkdfT0lEKDApOwor CUFycmF5VHlwZSAgKmRkbF9vcHRpb25zID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEpOworCWNo YXIJICAgKnJlczsKKworCXJlcyA9IHBnX2dldF9kYXRhYmFzZV9kZGxfd29ya2VyKGRiX29pZCwg ZGRsX29wdGlvbnMpOworCisJaWYgKHJlcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOwor CisJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKK30KKworc3RhdGljIGNo YXIgKgorcGdfZ2V0X2RhdGFiYXNlX2RkbF93b3JrZXIoT2lkIGRiX29pZCwgQXJyYXlUeXBlICpk ZGxfb3B0aW9ucykKK3sKKwljaGFyCSAgICpkYm93bmVyID0gTlVMTDsKKwlib29sCQlhdHRyX2lz bnVsbDsKKwlEYXR1bQkJZGJ2YWx1ZTsKKwlIZWFwVHVwbGUJdHVwbGVfZGF0YWJhc2U7CisJRm9y bV9wZ19kYXRhYmFzZSBkYmZvcm07CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUFjbFJlc3VsdAlh Y2xyZXN1bHQ7CisKKwkvKiBWYXJpYWJsZXMgZm9yIGRkbF9vcHRpb25zIHBhcnNpbmcgKi8KKwlp bnQJCQlwcmV0dHlfZmxhZ3MgPSAwOworCXVpbnQ2NAkJZGRsX2ZsYWdzID0gMDsKKwlib29sCQlp c193aXRoX2RlZmF1bHRzID0gZmFsc2U7CisKKwkvKiBDYWxsIERETCBvcHRpb25zIHBhcnNlciAq LworCWRkbF9mbGFncyA9IHBhcnNlX2RkbF9vcHRpb25zKGRkbF9vcHRpb25zKTsKKworCS8qIFNl dCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgKi8KKwlpZiAoZGRsX2ZsYWdzICYgUEdfRERMX1BSRVRU WV9JTkRFTlQpCisJCXByZXR0eV9mbGFncyA9IEdFVF9ERExfUFJFVFRZX0ZMQUdTKDEpOworCisJ aXNfd2l0aF9kZWZhdWx0cyA9IChkZGxfZmxhZ3MgJiBQR19ERExfV0lUSF9ERUZBVUxUUykgPyB0 cnVlIDogZmFsc2U7CisKKwkvKgorCSAqIFVzZXIgbXVzdCBoYXZlIGNvbm5lY3QgcHJpdmlsZWdl IGZvciB0YXJnZXQgZGF0YWJhc2UuCisJICovCisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNr KERhdGFiYXNlUmVsYXRpb25JZCwgZGJfb2lkLCBHZXRVc2VySWQoKSwKKwkJCQkJCQkJQUNMX0NP Tk5FQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0sgJiYKKwkJIWhhc19wcml2c19v Zl9yb2xlKEdldFVzZXJJZCgpLCBST0xFX1BHX1JFQURfQUxMX1NUQVRTKSkKKwl7CisJCWFjbGNo ZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX0RBVEFCQVNFLAorCQkJCQkgICBnZXRfZGF0YWJh c2VfbmFtZShkYl9vaWQpKTsKKwl9CisKKwkvKiBMb29rIHVwIHRoZSBkYXRhYmFzZSBpbiBwZ19k YXRhYmFzZSAqLworCXR1cGxlX2RhdGFiYXNlID0gU2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lE LCBPYmplY3RJZEdldERhdHVtKGRiX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBs ZV9kYXRhYmFzZSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVG SU5FRF9PQkpFQ1QpLAorCQkJCWVycm1zZygiZGF0YWJhc2Ugd2l0aCBvaWQgJXUgZG9lcyBub3Qg ZXhpc3QiLCBkYl9vaWQpKTsKKworCWRiZm9ybSA9IChGb3JtX3BnX2RhdGFiYXNlKSBHRVRTVFJV Q1QodHVwbGVfZGF0YWJhc2UpOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwkvKiBMb29r IHVwIHRoZSBvd25lciBpbiB0aGUgc3lzdGVtIGNhdGFsb2cgKi8KKwlpZiAoT2lkSXNWYWxpZChk YmZvcm0tPmRhdGRiYSkpCisJCWRib3duZXIgPSBHZXRVc2VyTmFtZUZyb21JZChkYmZvcm0tPmRh dGRiYSwgZmFsc2UpOworCisJLyogQnVpbGQgdGhlIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnQg Ki8KKwlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJDUkVBVEUgREFUQUJBU0UgJXMiLAorCQkJCQkg cXVvdGVfaWRlbnRpZmllcihkYmZvcm0tPmRhdG5hbWUuZGF0YSkpOworCWdldF9mb3JtYXR0ZWRf c3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgNCwgIldJVEgiKTsKKworCS8qIFNldCB0aGUgT1dO RVIgaW4gdGhlIERETCBpZiAtLW5vLW93bmVyIGlzIG5vdCBzcGVjaWZpZWQgKi8KKwlpZiAoT2lk SXNWYWxpZChkYmZvcm0tPmRhdGRiYSkgJiYgIShkZGxfZmxhZ3MgJiBQR19ERExfTk9fT1dORVIp KQorCXsKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiT1dO RVIgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoZGJvd25lcikpOworCX0KKworCS8q IFNldCB0aGUgRU5DT0RJTkcgaW4gdGhlIERETCAqLworCWlmIChkYmZvcm0tPmVuY29kaW5nICE9 IDApCisJeworCQkvKiBJZiBpdCdzIHdpdGggZGVmYXVsdHMsIHdlIHNraXAgZGVmYXVsdCBlbmNv ZGluZyBjaGVjayAqLworCQlpZiAoaXNfd2l0aF9kZWZhdWx0cyB8fAorCQkJKHBnX3N0cmNhc2Vj bXAocGdfZW5jb2RpbmdfdG9fY2hhcihkYmZvcm0tPmVuY29kaW5nKSwKKwkJCQkJCSAgIERETF9E RUZBVUxUUy5EQVRBQkFTRS5FTkNPRElORykgIT0gMCkpCisJCXsKKwkJCWdldF9mb3JtYXR0ZWRf c3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIkVOQ09ESU5HID0gJXMiLAorCQkJCQkJCQkg cXVvdGVfbGl0ZXJhbF9jc3RyKAorCQkJCQkJCQkJCQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZGJm b3JtLT5lbmNvZGluZykpKTsKKwkJfQorCX0KKworCS8qIEZldGNoIHRoZSB2YWx1ZSBvZiBMQ19D T0xMQVRFICovCisJZGJ2YWx1ZSA9IFN5c0NhY2hlR2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVf ZGF0YWJhc2UsCisJCQkJCQkJICBBbnVtX3BnX2RhdGFiYXNlX2RhdGNvbGxhdGUsICZhdHRyX2lz bnVsbCk7CisJaWYgKCFhdHRyX2lzbnVsbCkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1Ziwg cHJldHR5X2ZsYWdzLCA4LCAiTENfQ09MTEFURSA9ICVzIiwKKwkJCQkJCQkgcXVvdGVfbGl0ZXJh bF9jc3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkpKTsKKwkvKiBGZXRjaCB0aGUgdmFs dWUgb2YgTENfQ1RZUEUgKi8KKwlkYnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lE LCB0dXBsZV9kYXRhYmFzZSwKKwkJCQkJCQkgIEFudW1fcGdfZGF0YWJhc2VfZGF0Y3R5cGUsICZh dHRyX2lzbnVsbCk7CisJaWYgKCFhdHRyX2lzbnVsbCkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmco JmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiTENfQ1RZUEUgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xp dGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpKSk7CisJLyogRmV0Y2ggdGhl IHZhbHVlIG9mIExPQ0FMRSAqLworCWRidmFsdWUgPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VP SUQsIHR1cGxlX2RhdGFiYXNlLAorCQkJCQkJCSAgQW51bV9wZ19kYXRhYmFzZV9kYXRsb2NhbGUs ICZhdHRyX2lzbnVsbCk7CisJaWYgKCFhdHRyX2lzbnVsbCAmJiBkYmZvcm0tPmRhdGxvY3Byb3Zp ZGVyID09IENPTExQUk9WSURFUl9CVUlMVElOKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVm LCBwcmV0dHlfZmxhZ3MsIDgsICJCVUlMVElOX0xPQ0FMRSA9ICVzIiwKKwkJCQkJCQkgcXVvdGVf bGl0ZXJhbF9jc3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkpKTsKKwllbHNlIGlmICgh YXR0cl9pc251bGwgJiYgZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNV KQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJJQ1VfTE9D QUxFID0gJXMiLAorCQkJCQkJCSBxdW90ZV9saXRlcmFsX2NzdHIoVGV4dERhdHVtR2V0Q1N0cmlu ZyhkYnZhbHVlKSkpOworCWVsc2UgaWYgKCFhdHRyX2lzbnVsbCkKKwkJZ2V0X2Zvcm1hdHRlZF9z dHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiTE9DQUxFID0gJXMiLAorCQkJCQkJCSBxdW90 ZV9saXRlcmFsX2NzdHIoVGV4dERhdHVtR2V0Q1N0cmluZyhkYnZhbHVlKSkpOworCisJLyogRmV0 Y2ggdGhlIHZhbHVlIG9mIElDVV9SVUxFUyAqLworCWRidmFsdWUgPSBTeXNDYWNoZUdldEF0dHIo REFUQUJBU0VPSUQsIHR1cGxlX2RhdGFiYXNlLAorCQkJCQkJCSAgQW51bV9wZ19kYXRhYmFzZV9k YXRpY3VydWxlcywgJmF0dHJfaXNudWxsKTsKKwlpZiAoIWF0dHJfaXNudWxsICYmIGRiZm9ybS0+ ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJp bmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiSUNVX1JVTEVTID0gJXMiLAorCQkJCQkJCSBxdW90 ZV9saXRlcmFsX2NzdHIoVGV4dERhdHVtR2V0Q1N0cmluZyhkYnZhbHVlKSkpOworCisJLyogRmV0 Y2ggdGhlIHZhbHVlIG9mIENPTExBVElPTl9WRVJTSU9OICovCisJZGJ2YWx1ZSA9IFN5c0NhY2hl R2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVfZGF0YWJhc2UsCisJCQkJCQkJICBBbnVtX3BnX2Rh dGFiYXNlX2RhdGNvbGx2ZXJzaW9uLCAmYXR0cl9pc251bGwpOworCWlmICghYXR0cl9pc251bGwp CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIkNPTExBVElP Tl9WRVJTSU9OID0gJXMiLAorCQkJCQkJCSBxdW90ZV9saXRlcmFsX2NzdHIoVGV4dERhdHVtR2V0 Q1N0cmluZyhkYnZhbHVlKSkpOworCisJLyogU2V0IHRoZSBhcHByb3ByaWF0ZSBMT0NBTEVfUFJP VklERVIgKi8KKwlpZiAoZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfQlVJ TFRJTikKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiTE9D QUxFX1BST1ZJREVSID0gYnVpbHRpbiIpOworCWVsc2UgaWYgKGRiZm9ybS0+ZGF0bG9jcHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJl dHR5X2ZsYWdzLCA4LCAiTE9DQUxFX1BST1ZJREVSID0gaWN1Iik7CisJZWxzZSBpZiAoaXNfd2l0 aF9kZWZhdWx0cykKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4 LCAiTE9DQUxFX1BST1ZJREVSID0gbGliYyIpOworCisJLyogU2V0IHRoZSBUQUJMRVNQQUNFIGlu IHRoZSBEREwgaWYgLS1uby10YWJsZXNwYWNlIGlzIG5vdCBzcGVjaWZpZWQgKi8KKwlpZiAoT2lk SXNWYWxpZChkYmZvcm0tPmRhdHRhYmxlc3BhY2UpICYmICEoZGRsX2ZsYWdzICYgUEdfRERMX05P X1RBQkxFU1BBQ0UpKQorCXsKKwkJLyogR2V0IHRoZSB0YWJsZXNwYWNlIG5hbWUgcmVzcGVjdGl2 ZSB0byB0aGUgZ2l2ZW4gdGFibGVzcGFjZSBvaWQgKi8KKwkJY2hhcgkgICAqZGJUYWJsZXNwYWNl ID0gZ2V0X3RhYmxlc3BhY2VfbmFtZShkYmZvcm0tPmRhdHRhYmxlc3BhY2UpOworCisJCS8qIElm IGl0J3Mgd2l0aCBkZWZhdWx0cywgd2Ugc2tpcCBkZWZhdWx0IHRhYmxlc3BhY2UgY2hlY2sgKi8K KwkJaWYgKGlzX3dpdGhfZGVmYXVsdHMgfHwKKwkJCShwZ19zdHJjYXNlY21wKGRiVGFibGVzcGFj ZSwgRERMX0RFRkFVTFRTLkRBVEFCQVNFLlRBQkxFU1BBQ0UpICE9IDApKQorCQkJZ2V0X2Zvcm1h dHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiVEFCTEVTUEFDRSA9ICVzIiwKKwkJ CQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoZGJUYWJsZXNwYWNlKSk7CisJfQorCisJaWYgKGlzX3dp dGhfZGVmYXVsdHMgfHwKKwkJKGRiZm9ybS0+ZGF0YWxsb3djb25uICE9IERETF9ERUZBVUxUUy5E QVRBQkFTRS5BTExPV19DT05OKSkKKwl7CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHBy ZXR0eV9mbGFncywgOCwgIkFMTE9XX0NPTk5FQ1RJT05TID0gJXMiLAorCQkJCQkJCSBkYmZvcm0t PmRhdGFsbG93Y29ubiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCX0KKworCWlmIChpc193aXRoX2Rl ZmF1bHRzIHx8CisJCShkYmZvcm0tPmRhdGNvbm5saW1pdCAhPSBERExfREVGQVVMVFMuREFUQUJB U0UuQ09OTl9MSU1JVCkpCisJeworCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlf ZmxhZ3MsIDgsICJDT05ORUNUSU9OIExJTUlUID0gJWQiLAorCQkJCQkJCSBkYmZvcm0tPmRhdGNv bm5saW1pdCk7CisJfQorCisJaWYgKGRiZm9ybS0+ZGF0aXN0ZW1wbGF0ZSkKKwkJZ2V0X2Zvcm1h dHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiSVNfVEVNUExBVEUgPSAlcyIsCisJ CQkJCQkJIGRiZm9ybS0+ZGF0aXN0ZW1wbGF0ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJzsnKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZV9k YXRhYmFzZSk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApp bmRleCA4OTRiNmExYjZkNi4uNTNkNjIzZGU1OGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApA QCAtNDAzMCw2ICs0MDMwLDEyIEBACiAgIHByb25hbWUgPT4gJ3BnX2dldF9mdW5jdGlvbl9zcWxi b2R5JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAogICBwcm9yZXR0eXBlID0+ICd0ZXh0JywgcHJvYXJn dHlwZXMgPT4gJ29pZCcsCiAgIHByb3NyYyA9PiAncGdfZ2V0X2Z1bmN0aW9uX3NxbGJvZHknIH0s Cit7IG9pZCA9PiAnOTQ5MicsIGRlc2NyID0+ICdnZXQgQ1JFQVRFIHN0YXRlbWVudCBmb3IgZGF0 YWJhc2UgbmFtZSBhbmQgb2lkJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcs IHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVz ID0+ICdyZWdkYXRhYmFzZSBfdGV4dCcsCisgIHByb2FyZ21vZGVzID0+ICd7aSx2fScsCisgIHBy b2FsbGFyZ3R5cGVzID0+ICd7cmVnZGF0YWJhc2UsX3RleHR9JywKKyAgcHJvc3JjID0+ICdwZ19n ZXRfZGF0YWJhc2VfZGRsJyB9LAogCiB7IG9pZCA9PiAnMTY4NicsIGRlc2NyID0+ICdsaXN0IG9m IFNRTCBrZXl3b3JkcycsCiAgIHByb25hbWUgPT4gJ3BnX2dldF9rZXl3b3JkcycsIHByb2Nvc3Qg PT4gJzEwJywgcHJvcm93cyA9PiAnNTAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxz L2RkbF9kZWZhdWx0cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg0ZWY2MWI0ZjNkCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgKQEAgLTAsMCArMSwzNyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlZmF1bHRzLmgKKyAqCSAgRGVjbGFy YXRpb25zIGZvciBEREwgZGVmYXVsdHMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3V0aWxzL2RkbF9kZWZhdWx0cy5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFRkFVTFRTX0gKKyNkZWZpbmUgRERMX0RF RkFVTFRTX0gKKworc3RhdGljIGNvbnN0IHN0cnVjdAoreworCXN0cnVjdAorCXsKKwkJY29uc3Qg Y2hhciAqRU5DT0RJTkc7CisJCWNvbnN0IGNoYXIgKlRBQkxFU1BBQ0U7CisJCWludAkJCUNPTk5f TElNSVQ7CisJCWJvb2wJCUFMTE9XX0NPTk47CisJfQkJCURBVEFCQVNFOworCisJLyogQWRkIG1v cmUgb2JqZWN0IHR5cGVzIGFzIG5lZWRlZCAqLworfQkJCURETF9ERUZBVUxUUyA9IHsKKworCS5E QVRBQkFTRSA9IHsKKwkJLkVOQ09ESU5HID0gIlVURjgiLAorCQkuVEFCTEVTUEFDRSA9ICJwZ19k ZWZhdWx0IiwKKwkJLkNPTk5fTElNSVQgPSAtMSwKKwkJLkFMTE9XX0NPTk4gPSB0cnVlLAorCX0K K307CisKKyNlbmRpZgkJCQkJCS8qIERETF9ERUZBVUxUU19IICovClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFz ZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlLm91dAppbmRleCA2Yjg3 OWIwZjYyYS4uZWIzYTEzYmNmOWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZGF0YWJhc2Uub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uu b3V0CkBAIC0xLDMgKzEsNTcgQEAKKy0tCistLSBSZWNvbnN0cnVjdCBEREwKKy0tCistLSBUbyBw cm9kdWNlIHN0YWJsZSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0LCBpdCdzIHVzdWFsbHkgbmVjZXNz YXJ5IHRvCistLSBpZ25vcmUgY29sbGF0aW9uIGFuZCBsb2NhbGUgcmVsYXRlZCBkZXRhaWxzLiBU aGlzIGZpbHRlcgorLS0gZnVuY3Rpb25zIHJlbW92ZXMgY29sbGF0aW9uIGFuZCBsb2NhbGUgcmVs YXRlZCBkZXRhaWxzLgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZGRsX2ZpbHRlcihkZGxf aW5wdXQgVEVYVCkKK1JFVFVSTlMgVEVYVCBBUyAkJAorREVDTEFSRQorICAgIGNsZWFuZWRfZGRs IFRFWFQ7CitCRUdJTgorICAgIC0tIFJlbW92ZSAlTE9DQUxFX1BST1ZJREVSJSBwbGFjZWhvbGRl cnMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgZGRsX2lucHV0 LAorICAgICAgICAnXHMqXG1MT0NBTEVfUFJPVklERVJcTVxzKj1ccyooWycnIl0/W14nJyJcc10r WycnIl0/KScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAgKTsKKworCS0tIFJlbW92 ZSBMQ19DT0xMQVRFIGFzc2lnbm1lbnRzCisgICAgY2xlYW5lZF9kZGwgOj0gcmVnZXhwX3JlcGxh Y2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMqTENfQ09MTEFURVxzKj1ccyoo WycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOworCisg ICAgLS0gUmVtb3ZlIExDX0NUWVBFIGFzc2lnbm1lbnRzCisgICAgY2xlYW5lZF9kZGwgOj0gcmVn ZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMqTENfQ1RZUEVc cyo9XHMqKFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAg KTsKKworICAgIC0tIFJlbW92ZSAlTE9DQUxFJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVkX2Rk bCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypc UypMT0NBTEVcUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorCQknJywKKwkJJ2dpJworCSk7 CisKKyAgICAtLSBSZW1vdmUgJUNPTExBVElPTiUgcGxhY2Vob2xkZXJzCisgICAgY2xlYW5lZF9k ZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMq XFMqQ09MTEFUSU9OXFMqXHMqPT9ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisg ICAgICAgICdnaScKKyAgICApOworCisgICAgUkVUVVJOIGNsZWFuZWRfZGRsOworRU5EOworJCQg TEFOR1VBR0UgcGxwZ3NxbDsKIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3RiZAogCUVOQ09E SU5HIHV0ZjggTENfQ09MTEFURSAiQyIgTENfQ1RZUEUgIkMiIFRFTVBMQVRFIHRlbXBsYXRlMDsK IEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkIFJFTkFNRSBUTyByZWdyZXNzaW9uX3V0Zjg7 CkBAIC0xNiw2ICs3MCw4NiBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBD UkVBVEUgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsKIEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Np b25fdXRmOCBPV05FUiBUTyByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBSRUFTU0lHTiBPV05FRCBC WSByZWdyZXNzX2RhdGRiYV9iZWZvcmUgVE8gcmVncmVzc19kYXRkYmFfYWZ0ZXI7CistLSBUZXN0 IHBnX2dldF9kYXRhYmFzZV9kZGwKKy0tIERhdGFiYXNlIGRvZXNuJ3QgZXhpc3RzCitTRUxFQ1Qg cGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZScpOworRVJST1I6ICBkYXRh YmFzZSAicmVncmVzc2lvbl9kYXRhYmFzZSIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogU0VMRUNU IHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2UnKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gVGVzdCBOVUxMIHZhbHVlCitTRUxFQ1QgcGdf Z2V0X2RhdGFiYXNlX2RkbChOVUxMKTsKK0VSUk9SOiAgZGF0YWJhc2Ugd2l0aCBvaWQgMCBkb2Vz IG5vdCBleGlzdAorLS0gV2l0aG91dCBwcmV0dHkKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9k YXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg REFUQUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEggT1dORVIgPSByZWdyZXNzX2RhdGRiYV9hZnRl ciBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorCistLSBXaXRoIE5vIE93bmVyCitT RUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAn LS1uby1vd25lcicpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9u X3V0ZjggV0lUSCBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorCistLSBXaXRoIE5v IFRhYmxlc3BhY2UKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jl c3Npb25fdXRmOCcsICctLW5vLXRhYmxlc3BhY2UnKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBXSVRIIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0 ZXIgQ09OTkVDVElPTiBMSU1JVCA9IDEyMzsKKygxIHJvdykKKworLS0gV2l0aCBEZWZhdWx0cwor U0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4Jywg Jy0td2l0aC1kZWZhdWx0cycpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBPV05FUiA9IHJlZ3Jlc3NfZGF0 ZGJhX2FmdGVyIEVOQ09ESU5HID0gJ1VURjgnIFRBQkxFU1BBQ0UgPSBwZ19kZWZhdWx0IEFMTE9X X0NPTk5FQ1RJT05TID0gdHJ1ZSBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorCist LSBXaXRoIE5vIE93bmVyLCBObyBUYWJsZXNwYWNlIGFuZCBXaXRoIERlZmF1bHRzCitTRUxFQ1Qg ZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnLS1uby1v d25lcicsICctLW5vLXRhYmxlc3BhY2UnLCAnLS13aXRoLWRlZmF1bHRzJykpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVncmVz c2lvbl91dGY4IFdJVEggRU5DT0RJTkcgPSAnVVRGOCcgQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVl IENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdpdGggUHJldHR5IGZvcm1h dHRlZAorXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2Rh dGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScpKTsKK2RkbF9maWx0ZXIKK0NS RUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKKyAgICBXSVRICisgICAgICAgIE9XTkVSID0g cmVncmVzc19kYXRkYmFfYWZ0ZXIKKyAgICAgICAgQ09OTkVDVElPTiBMSU1JVCA9IDEyMzsKKygx IHJvdykKKy0tIFdpdGggTm8gT3duZXIgYW5kIE5vIFRhYmxlc3BhY2UKK1NFTEVDVCBkZGxfZmls dGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0dHknLCAnLS1u by1vd25lcicsICctLW5vLXRhYmxlc3BhY2UnKSk7CitkZGxfZmlsdGVyCitDUkVBVEUgREFUQUJB U0UgcmVncmVzc2lvbl91dGY4CisgICAgV0lUSAorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0g MTIzOworKDEgcm93KQorLS0gV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsICctLXdpdGgtZGVmYXVs dHMnKSk7CitkZGxfZmlsdGVyCitDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4CisgICAg V0lUSAorICAgICAgICBPV05FUiA9IHJlZ3Jlc3NfZGF0ZGJhX2FmdGVyCisgICAgICAgIEVOQ09E SU5HID0gJ1VURjgnCisgICAgICAgIFRBQkxFU1BBQ0UgPSBwZ19kZWZhdWx0CisgICAgICAgIEFM TE9XX0NPTk5FQ1RJT05TID0gdHJ1ZQorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzOwor KDEgcm93KQorLS0gV2l0aCBObyBPd25lciwgTm8gVGFibGVzcGFjZSBhbmQgV2l0aCBEZWZhdWx0 cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4 JywgJ3ByZXR0eScsICctLW5vLW93bmVyJywgJy0tbm8tdGFibGVzcGFjZScsICctLXdpdGgtZGVm YXVsdHMnKSk7CitkZGxfZmlsdGVyCitDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4Cisg ICAgV0lUSAorICAgICAgICBFTkNPRElORyA9ICdVVEY4JworICAgICAgICBBTExPV19DT05ORUNU SU9OUyA9IHRydWUKKyAgICAgICAgQ09OTkVDVElPTiBMSU1JVCA9IDEyMzsKKygxIHJvdykKIERS T1AgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4OwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2Jl Zm9yZTsKIERST1AgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFi YXNlLnNxbAppbmRleCA0ZWYzNjEyNzI5MS4uOTE4YjI4YzQ3ZGEgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9k YXRhYmFzZS5zcWwKQEAgLTEsMyArMSw1OSBAQAorLS0KKy0tIFJlY29uc3RydWN0IERETAorLS0K Ky0tIFRvIHByb2R1Y2Ugc3RhYmxlIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQsIGl0J3MgdXN1YWxs eSBuZWNlc3NhcnkgdG8KKy0tIGlnbm9yZSBjb2xsYXRpb24gYW5kIGxvY2FsZSByZWxhdGVkIGRl dGFpbHMuIFRoaXMgZmlsdGVyCistLSBmdW5jdGlvbnMgcmVtb3ZlcyBjb2xsYXRpb24gYW5kIGxv Y2FsZSByZWxhdGVkIGRldGFpbHMuCisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGRkbF9m aWx0ZXIoZGRsX2lucHV0IFRFWFQpCitSRVRVUk5TIFRFWFQgQVMgJCQKK0RFQ0xBUkUKKyAgICBj bGVhbmVkX2RkbCBURVhUOworQkVHSU4KKyAgICAtLSBSZW1vdmUgJUxPQ0FMRV9QUk9WSURFUiUg cGxhY2Vob2xkZXJzCisgICAgY2xlYW5lZF9kZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAg IGRkbF9pbnB1dCwKKyAgICAgICAgJ1xzKlxtTE9DQUxFX1BST1ZJREVSXE1ccyo9XHMqKFsnJyJd P1teJyciXHNdK1snJyJdPyknLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisK KwktLSBSZW1vdmUgTENfQ09MTEFURSBhc3NpZ25tZW50cworICAgIGNsZWFuZWRfZGRsIDo9IHJl Z2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xzKkxDX0NPTExB VEVccyo9XHMqKFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisg ICAgKTsKKworICAgIC0tIFJlbW92ZSBMQ19DVFlQRSBhc3NpZ25tZW50cworICAgIGNsZWFuZWRf ZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xz KkxDX0NUWVBFXHMqPVxzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAgICAg J2dpJworICAgICk7CisKKyAgICAtLSBSZW1vdmUgJUxPQ0FMRSUgcGxhY2Vob2xkZXJzCisgICAg Y2xlYW5lZF9kZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAg ICAgICAnXHMqXFMqTE9DQUxFXFMqXHMqPT9ccyooWycnIl0pW14nJyJdKlwxJywKKwkJJycsCisJ CSdnaScKKwkpOworCisgICAgLS0gUmVtb3ZlICVDT0xMQVRJT04lIHBsYWNlaG9sZGVycworICAg IGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAg ICAgICAgJ1xzKlxTKkNPTExBVElPTlxTKlxzKj0/XHMqKFsnJyJdKVteJyciXSpcMScsCisgICAg ICAgICcnLAorICAgICAgICAnZ2knCisgICAgKTsKKworICAgIFJFVFVSTiBjbGVhbmVkX2RkbDsK K0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWw7CisKIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9u X3RiZAogCUVOQ09ESU5HIHV0ZjggTENfQ09MTEFURSAiQyIgTENfQ1RZUEUgIkMiIFRFTVBMQVRF IHRlbXBsYXRlMDsKIEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkIFJFTkFNRSBUTyByZWdy ZXNzaW9uX3V0Zjg7CkBAIC0xOSw2ICs3NSw0MSBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX2RhdGRi YV9hZnRlcjsKIEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBPV05FUiBUTyByZWdyZXNz X2RhdGRiYV9iZWZvcmU7CiBSRUFTU0lHTiBPV05FRCBCWSByZWdyZXNzX2RhdGRiYV9iZWZvcmUg VE8gcmVncmVzc19kYXRkYmFfYWZ0ZXI7CiAKKy0tIFRlc3QgcGdfZ2V0X2RhdGFiYXNlX2RkbAor LS0gRGF0YWJhc2UgZG9lc24ndCBleGlzdHMKK1NFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdy ZWdyZXNzaW9uX2RhdGFiYXNlJyk7CisKKy0tIFRlc3QgTlVMTCB2YWx1ZQorU0VMRUNUIHBnX2dl dF9kYXRhYmFzZV9kZGwoTlVMTCk7CisKKy0tIFdpdGhvdXQgcHJldHR5CitTRUxFQ1QgZGRsX2Zp bHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnKSk7CisKKy0tIFdpdGgg Tm8gT3duZXIKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Np b25fdXRmOCcsICctLW5vLW93bmVyJykpOworCistLSBXaXRoIE5vIFRhYmxlc3BhY2UKK1NFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICctLW5v LXRhYmxlc3BhY2UnKSk7CisKKy0tIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBkZGxfZmlsdGVyKHBn X2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICctLXdpdGgtZGVmYXVsdHMnKSk7 CisKKy0tIFdpdGggTm8gT3duZXIsIE5vIFRhYmxlc3BhY2UgYW5kIFdpdGggRGVmYXVsdHMKK1NF TEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICct LW5vLW93bmVyJywgJy0tbm8tdGFibGVzcGFjZScsICctLXdpdGgtZGVmYXVsdHMnKSk7CisKKy0t IFdpdGggUHJldHR5IGZvcm1hdHRlZAorXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUIGRk bF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScp KTsKKworLS0gV2l0aCBObyBPd25lciBhbmQgTm8gVGFibGVzcGFjZQorU0VMRUNUIGRkbF9maWx0 ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsICctLW5v LW93bmVyJywgJy0tbm8tdGFibGVzcGFjZScpKTsKKworLS0gV2l0aCBEZWZhdWx0cworU0VMRUNU IGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0 eScsICctLXdpdGgtZGVmYXVsdHMnKSk7CisKKy0tIFdpdGggTm8gT3duZXIsIE5vIFRhYmxlc3Bh Y2UgYW5kIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9k ZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0dHknLCAnLS1uby1vd25lcicsICctLW5vLXRhYmxl c3BhY2UnLCAnLS13aXRoLWRlZmF1bHRzJykpOworCiBEUk9QIERBVEFCQVNFIHJlZ3Jlc3Npb25f dXRmODsKIERST1AgUk9MRSByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBEUk9QIFJPTEUgcmVncmVz c19kYXRkYmFfYWZ0ZXI7Ci0tIAoyLjUxLjAKCg== --0000000000007db5d50648e298d8--