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 1vgeBh-00Ghrg-2c for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Jan 2026 07:24: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 1vgeBg-0020gZ-33 for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Jan 2026 07:24:05 +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 1vgeBg-0020gN-1h for pgsql-hackers@lists.postgresql.org; Fri, 16 Jan 2026 07:24:04 +0000 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgeBe-000mGo-19 for pgsql-hackers@postgresql.org; Fri, 16 Jan 2026 07:24:04 +0000 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-b874c00a3fcso277496166b.1 for ; Thu, 15 Jan 2026 23:24:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768548240; cv=none; d=google.com; s=arc-20240605; b=f8bMlPbkqjyryETV5cgLP8n9FOO474sudpRpAuu/x/oDTzFfoxVa2grqu3MnlKo9OR KP7kTbM2lY3Bn92grWyf+65ywEgHfuPkIhGbgSaVCD11suMRAVsD2Wx1W4ntGGT6Y6fK k//PiSfR8Cc9P8udFf1kA8GKDKgJ0TIaADFh/QjhJ4JAWxz/jJK654DsYq+158FbLs3H MG3z1e41qmXLSKlHK4tGU5SGOOsN3An2TSpSMxsLWEbEoYTm9YNGMLleMcXrHLWIQhEE bHubV2gcchu64m2aI98nbJ77NVimHUbkD8ZQigwr1Zu5PdMZ0cVkVcR0a+g5u76Ey8kn WeSw== 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=Ri1OhW2SiprZZFJFyI6SYFY217CfjCKuBBCtlRZVFcU=; fh=cNWVwGEgWZJzCN5V17w63EjCvmxKgj0Rj6bMnAeNseQ=; b=UBIAr9e1Mnvbb2zTlHNWuLzYkysJ0ElOZxE4z+jS/xS8pFe/iskNXhKKpxdBiQeQbP 8hNnOP7SYjGZ2hgOieHuXVjMp3C7uZJ4oSd5Xtk3XTwIpOmYJM1dtVixgirzPAFtIgok 9a1/qbTGGUwFG8Ng71lXcZPfXKHDYZA8r0viYPkq4UUJSleJrcxVQyr6xm4t01kpbDyA hVh2EzAWhhGXDewoLAdlQp4fpeFWCwTp/faQVQ/Rq30kQoMupsJC1CerMN8o5HRSTc2M nlCojUtzWd+ZHwIQ1DmzDrTQqpUe15SN2qHU2ICtk2Hie7ps1Vmkp5nVEbDl2vgBhp+6 PtEw==; 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=1768548240; x=1769153040; 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=Ri1OhW2SiprZZFJFyI6SYFY217CfjCKuBBCtlRZVFcU=; b=DW1EVAsyGBS6++7H4kHMJrqVRjuTcWx56wQKXO+M3/EzuqmtrOhRxj4Z+JNZIbjhPN YqkknUuXEqZf1niOBxDMC2av/usvfx3TlhVWpscvR7EvtO/h4zskI9hsmynIIk6mL+sp FmLlB/39a0SCGJ4SeRPMirE7F6uTdQHd9BUABrOUpYjmcr+JFZSJPijh0BurJE9FdMsl yI/zSzV6ZB/KzONWv0CZnAo5HoNAX1F8/QGg796KregOrCAvbEQzG2O1VIt+9DDRx+Hq io0MRmjjDbyhDH5aGZp8m5+737fAeYESKoW8Uzpyzq/mLBZWxXJgVH4ZVpLKJR71UayS LM+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768548240; x=1769153040; 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=Ri1OhW2SiprZZFJFyI6SYFY217CfjCKuBBCtlRZVFcU=; b=wjjPBkgu0SlIXPAiqGOwqDVehG5pOzHulve464nmxoeifRH50au1oMY7U6kFi8w0mK LQuP2oRtcL7WbRu7ThzlmDleLCIXM0lXUawhXSc48v2Rk+9ZCnH8a14wNBcuAYmIRkV3 R754LjjIKsiroo1sd3U5rc0KluWBsi8Z50B2F4TODICGID1MElb594Rd8CVeo3pnbxb6 dXhsUNajPW4BDHBjX2NP73V8CvBIJvhGtjtSnmpBWkK3bKYbS1jY0JMrC3PzZi8LkmAk fBV5dMMLldIC3cPrz4jot9ED9u/kE05G13mk8OlLmZxDN3m4fUC60upoMOBHspByIp/Y ZYMw== X-Forwarded-Encrypted: i=1; AJvYcCXm3rggTjoYRqnOK7fdYOa0yIclVujgj47oXCEzWUQk3NyJrIeAdiN+BrFwrZ9U4PQZtdw5m5FVfLVbJVzW@postgresql.org X-Gm-Message-State: AOJu0Yz1lROdUxmUq9Ez1tcc7UgGmViQccm7YHbmkJdX1u1juwFUiOZs RhtjMJXF+ypMm6B5tJnUP9rr9c9ABWe4PyGhFPNG6UXgqAhi5tUYLY8IDmh1QBRm6hZDLg5N7Hc TqNTqayrNbvv821UaErKnMyEpCbJC0azt54MAvC9ZVqxvjpV7lMuoQw== X-Gm-Gg: AY/fxX5X5aoyg4jyEZtCXDF5DSrRVnHAnVL3eeF6jbi0hLBhTSOkz0AlmLOWCp1dDIp 8YyJgxjYOql6n4+iwrL+PfhKUv1OOBVtnssssOYH0E1spUj1uzoOcMK37bkpAX5tl4go0J3UyJj MoRFdYWB6X1WoESrt03krWkbK2Z8zxnIseTagcyvzizOgq7SYsM1MKVKEarT78QCSWdXbgPZ2M9 XSEGwVk1R0cj4uGutjUPd2/eFkA3W0jeU96uhexnjIOO/R+OJme0ZuttWtbL37BRtk5Yxz5 X-Received: by 2002:a17:907:930a:b0:b87:206a:a234 with SMTP id a640c23a62f3a-b87930166aamr214941266b.31.1768548240552; Thu, 15 Jan 2026 23:24:00 -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: Fri, 16 Jan 2026 12:53:48 +0530 X-Gm-Features: AZwV_Qg8ZpJW2bHZl7TtfQ6xZ5O9cb7RTrqQgRUqypeVggjEHnUY7DSZki1rVlk 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="000000000000a5c96306487c3946" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a5c96306487c3946 Content-Type: multipart/alternative; boundary="000000000000a5c96106487c3944" --000000000000a5c96106487c3944 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable - 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 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-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 va= lues. > 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 the = DDL. > 5. SELECT pg_get_database_ddl('postgres', 'pretty', > '--with-defaults'); // Includes clauses for parameters that are curren= tly > 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 default= value, >> you are breaking compatibility; that rarely happens. If we are really co= ncern >> 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 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 default= 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 argument= s >> 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 (s= ee >> above). Does it mean we should include the owner? No. We can make it a= n >> 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. Thi= s is >> important if you are transporting the objects from one cluster to anothe= r one. >> Owner might be different. That's why I'm suggesting it should be optiona= l. 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 (owner, strateg= y, >> template), these properties can be accommodated as a VARIADIC argument= . 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 o= ptions. >> Why? Flexibility. >> >> Why am I suggesting such a general purpose implementation? See some of t= he use >> cases. >> >> 1. object DDL. Check DDL to recreate the object. It is not the exact DDL= that >> 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= 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 catalo= g and >> 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 g= lobal >> 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* wa= nt 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 = 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 co= de >> accordingly. >> >> >> I didn't check all of the possible output but the majority uses space in= stead >> 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 permissions 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 sam= e >> 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 functio= ns use >> the same approach. We can always relax this restriction in the future. >> >> >> >> +1 >> >> >> cheers >> >> >> andrew >> >> -- >> Andrew Dunstan >> EDB: https://www.enterprisedb.com >> >> --000000000000a5c96106487c3944 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
  • 1) Implement uint64 for the flags to provide= capacity for up to 64 distinct options.
    2) Refactor parse_ddl_opt= ions to return the flag set directly rather than using an out par= ameter.

    Please find the attached v7 patch, which is now r= eady for review.


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

    I have incorpora= ted Euler=E2=80=99s changes, which modify the declaration and definition of= the pg_get_database_ddl function. Please find the attached v= 6 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
    
    --000000000000a5c96106487c3944-- --000000000000a5c96306487c3946 Content-Type: application/octet-stream; name="v7-0001-Add-pg_get_database_ddl-function-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v7-0001-Add-pg_get_database_ddl-function-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkgjy15l0 RnJvbSBlY2U4MmIzNmYyY2Q3Y2Q5YjAzNjRhMDhhMDdkNjBmNmE5YmQ2ZDQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE3OjQ3OjU5ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2N10gQWRkIHBnX2dldF9kYXRhYmFzZV9kZGwoKSBmdW5jdGlvbiB0byByZWNvbnN0cnVj dCBDUkVBVEUKIERBVEFCQVNFIHN0YXRlbWVudHMuCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQt VHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA4Yml0CgpUaGlzIGFkZHMgYSBuZXcgc3lzdGVtIGZ1bmN0aW9uLCBwZ19nZXRfZGF0YWJhc2Vf ZGRsKGRhdGFiYXNlX25hbWUvZGF0YWJhc2Vfb2lkLCBkZGxfb3B0aW9ucyksCndoaWNoIHJlY29u c3RydWN0cyB0aGUgQ1JFQVRFIERBVEFCQVNFIHN0YXRlbWVudCBmb3IgYSBnaXZlbiBkYXRhYmFz ZSBuYW1lIG9yIGRhdGFiYXNlIG9pZC4KU3VwcG9ydGVkIGRkbF9vcHRpb25zIGFyZSAncHJldHR5 JywgJy0tbm8tb3duZXInLCAnLS1uby10YWJsZXNwYWNlJyBhbmQgJy0td2l0aC1kZWZhdWx0cycu CgpVc2FnZToKICBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncG9zdGdyZXMnKTsgLy8gTm9u IHByZXR0eS1mb3JtYXR0ZWQgRERMCiAgU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoMTY4MzUp OyAvLyBOb24gcHJldHR5LWZvcm1hdHRlZCBEREwKICBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2Rk bCgncG9zdGdyZXMnLCAncHJldHR5Jyk7IC8vIHByZXR0eS1mb3JtYXR0ZWQgRERMCiAgU0VMRUNU IHBnX2dldF9kYXRhYmFzZV9kZGwoJ3Bvc3RncmVzJywgJy0tbm8tb3duZXInLCAnLS1uby10YWJs ZXNwYWNlJyk7IC8vIE9taXRzIHRoZSBPd25lciBhbmQgVGFibGVzcGFjZSBjbGF1c2UgZnJvbSB0 aGUgRERMLgogIFNFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdwb3N0Z3JlcycsICdwcmV0dHkn LCAnLS13aXRoLWRlZmF1bHRzJyk7IC8vIEluY2x1ZGVzIGNsYXVzZXMgZm9yIHBhcmFtZXRlcnMg dGhhdCBhcmUgY3VycmVudGx5IGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzLgoKUmVmZXJlbmNlOiBQ Ry0xNTAKQXV0aG9yOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNlZGIuY29t PgpSZXZpZXdlZC1ieTogw4FsdmFybyBIZXJyZXJhIDxhbHZoZXJyZUBrdXJpbGVtdS5kZT4KUmV2 aWV3ZWQtYnk6IFF1YW4gWm9uZ2xpYW5nIDxxdWFuem9uZ2xpYW5nQHllYWgubmV0PgpSZXZpZXdl ZC1ieTogSmFwaW4gTGkgPGphcGlubGlAaG90bWFpbC5jb20+ClJldmlld2VkLWJ5OiBDaGFvIExp IDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRXVsZXIgVGF2ZWlyYSA8ZXVs ZXJAZXVsZXJ0by5jb20+Ci0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgICAg ICAgICB8ICA3NyArKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5z cWwgfCAgIDYgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICB8IDI5 MSArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dCAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS91dGlscy9kZGxfZGVmYXVsdHMuaCAgICAg ICAgIHwgIDM3ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFzZS5vdXQgICB8 IDEzNCArKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsICAgICAg ICB8ICA5MSArKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDY0MiBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgKCmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5j L2Z1bmMtaW5mby5zZ21sCmluZGV4IDE3NWYxODMxNWNkLi4yMjUwMDMxYmI4MyAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1 bmMvZnVuYy1pbmZvLnNnbWwKQEAgLTM4MzAsNCArMzgzMCw4MSBAQCBhY2wgICAgICB8IHtwb3N0 Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KIAogICA8L3NlY3QyPgogCisg IDxzZWN0MiBpZD0iZnVuY3Rpb25zLWdldC1vYmplY3QtZGRsIj4KKyAgIDx0aXRsZT5HZXQgT2Jq ZWN0IERETCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGUgZnVuY3Rpb25z IGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJmdW5jdGlvbnMtZ2V0LW9iamVjdC1kZGwtdGFi bGUiLz4KKyAgICByZXR1cm4gdGhlIERhdGEgRGVmaW5pdGlvbiBMYW5ndWFnZSAoRERMKSBzdGF0 ZW1lbnQgZm9yIGFueSBnaXZlbiBkYXRhYmFzZSBvYmplY3QuCisgICAgVGhpcyBmZWF0dXJlIGlz IGltcGxlbWVudGVkIGFzIGEgc2V0IG9mIGRpc3RpbmN0IGZ1bmN0aW9ucyBmb3IgZWFjaCBvYmpl Y3QgdHlwZS4KKyAgIDwvcGFyYT4KKworICAgPHRhYmxlIGlkPSJmdW5jdGlvbnMtZ2V0LW9iamVj dC1kZGwtdGFibGUiPgorICAgIDx0aXRsZT5HZXQgT2JqZWN0IERETCBGdW5jdGlvbnM8L3RpdGxl PgorICAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgIDx0aGVhZD4KKyAgICAgIDxyb3c+CisgICAg ICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0 dXJlIj4KKyAgICAgICAgRnVuY3Rpb24KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4K KyAgICAgPC90aGVhZD4KKworICAgICA8dGJvZHk+CisgICAgICA8cm93PgorICAgICAgIDxlbnRy eSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+Cisg ICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19nZXRfZGF0YWJhc2VfZGRs PC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dl dF9kYXRhYmFzZV9kZGw8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+ZGF0YWJhc2VfaWQ8L3BhcmFt ZXRlcj4gPHR5cGU+cmVnZGF0YWJhc2U8L3R5cGU+IDxvcHRpb25hbD4sIDxsaXRlcmFsPlZBUklB RElDPC9saXRlcmFsPiA8cGFyYW1ldGVyPmRkbF9vcHRpb25zPC9wYXJhbWV0ZXI+IDx0eXBlPnRl eHRbXTwvdHlwZT4gPC9vcHRpb25hbD4gKQorICAgICAgICA8cmV0dXJudmFsdWU+dGV4dDwvcmV0 dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0 cnVjdHMgdGhlIDxjb21tYW5kPkNSRUFURSBEQVRBQkFTRTwvY29tbWFuZD4gc3RhdGVtZW50IGZy b20gdGhlCisgICAgICAgIHN5c3RlbSBjYXRhbG9ncyBmb3IgYSBzcGVjaWZpZWQgZGF0YWJhc2Uu IFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgT0lEIG9yCisgICAgICAgIG5hbWUgb2YgdGhlIGRh dGFiYXNlLiBUaGUgb3B0aW9uYWwgdmFyaWFkaWMgYXJndW1lbnQgaXMgYW4gYXJyYXkgb2YgdGV4 dAorICAgICAgICBmbGFncyB0byBjb250cm9sIHRoZSBvdXRwdXQuIFN1cHBvcnRlZCBvcHRpb25z IGluY2x1ZGUKKyAgICAgICAgPGxpdGVyYWw+cHJldHR5PC9saXRlcmFsPiwgPGxpdGVyYWw+LS1u by1vd25lcjwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPi0tbm8tdGFibGVzcGFjZTwvbGl0 ZXJhbD4sIGFuZCA8bGl0ZXJhbD4tLXdpdGgtZGVmYXVsdHM8L2xpdGVyYWw+LgorICAgICAgICA8 L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3Rib2R5PgorICAgIDwvdGdyb3Vw PgorICAgPC90YWJsZT4KKworICA8cGFyYT4KKyAgICBUaGUgPHBhcmFtZXRlcj5kZGxfb3B0aW9u czwvcGFyYW1ldGVyPiBmb3IgPGZ1bmN0aW9uPnBnX2dldF9kYXRhYmFzZV9kZGw8L2Z1bmN0aW9u PgorICAgIHByb3ZpZGUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgZ2VuZXJhdGVkIFNR TDoKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAg ICAgPGxpdGVyYWw+cHJldHR5PC9saXRlcmFsPjogQWRkcyBuZXdsaW5lcyBhbmQgaW5kZW50YXRp b24gZm9yIGJldHRlciByZWFkYWJpbGl0eS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+LS1uby1vd25l cjwvbGl0ZXJhbD46IE9taXRzIHRoZSA8bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4gY2xhdXNlIGZy b20KKyAgICAgIHRoZSByZWNvbnN0cnVjdGVkIHN0YXRlbWVudC4KKyAgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgPGxpdGVy YWw+LS1uby10YWJsZXNwYWNlPC9saXRlcmFsPjogT21pdHMgdGhlIDxsaXRlcmFsPlRBQkxFU1BB Q0U8L2xpdGVyYWw+IGNsYXVzZS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+LS13aXRoLWRlZmF1bHRz PC9saXRlcmFsPjogSW5jbHVkZXMgY2xhdXNlcyBmb3IgcGFyYW1ldGVycyB0aGF0IGFyZQorICAg ICAgY3VycmVudGx5IGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIChlLmcuLCA8bGl0ZXJhbD5DT05O RUNUSU9OIExJTUlUIC0xPC9saXRlcmFsPiksCisgICAgICB3aGljaCBhcmUgbm9ybWFsbHkgb21p dHRlZCBmb3IgYnJldml0eS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDwv aXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogICA8L3NlY3QxPgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXggZWI5ZTMxYWUxYmYuLjE2 YzBkNTI0NzlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlv bnMuc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKQEAg LTY1Nyw2ICs2NTcsMTIgQEAgTEFOR1VBR0UgSU5URVJOQUwKIFNUUklDVCBWT0xBVElMRSBQQVJB TExFTCBVTlNBRkUKIEFTICdwZ19yZXBsaWNhdGlvbl9vcmlnaW5fc2Vzc2lvbl9zZXR1cCc7CiAK K0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OCisgIHBnX2dldF9kYXRhYmFzZV9kZGwoZGF0YWJh c2VfaWQgcmVnZGF0YWJhc2UsIFZBUklBRElDIGRkbF9vcHRpb25zIHRleHRbXSBERUZBVUxUICd7 fScpCitSRVRVUk5TIHRleHQKK0xBTkdVQUdFIGludGVybmFsCitBUyAncGdfZ2V0X2RhdGFiYXNl X2RkbCc7CisKIC0tCiAtLSBUaGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZnVuY3Rpb25zIG1l YW4gdGhhdCBhbnlvbmUgY2FuIGV4ZWN1dGUgdGhlbS4KIC0tIEEgbnVtYmVyIG9mIGZ1bmN0aW9u cyBzaG91bGRuJ3QgYmUgZXhlY3V0YWJsZSBieSBqdXN0IGFueW9uZSwgYnV0IHJhdGhlcgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDAzM2I2MjVmM2ZjLi5jNmI1OTc5MDY1NSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNh dGFsb2cvcGdfYXV0aGlkLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Rh dGFiYXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2xhbmd1YWdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCkBAIC01 Nyw4ICs1OCwxMCBAQAogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZVN1 cHBvcnQuaCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5o IgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGRsX2RlZmF1 bHRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMu aCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCkBAIC04OSwxMSArOTIsMjIgQEAKICNkZWZp bmUgUFJFVFRZRkxBR19JTkRFTlQJCTB4MDAwMgogI2RlZmluZSBQUkVUVFlGTEFHX1NDSEVNQQkJ MHgwMDA0CiAKKy8qIERETCBPcHRpb25zIGZsYWdzICovCisjZGVmaW5lIFBHX0RETF9QUkVUVFlf SU5ERU5UCTB4MDAwMDAwMDEKKyNkZWZpbmUgUEdfRERMX1dJVEhfREVGQVVMVFMJMHgwMDAwMDAw MgorI2RlZmluZSBQR19ERExfTk9fT1dORVIJCQkweDAwMDAwMDA0CisjZGVmaW5lIFBHX0RETF9O T19UQUJMRVNQQUNFCTB4MDAwMDAwMDgKKworCiAvKiBTdGFuZGFyZCBjb252ZXJzaW9uIG9mIGEg ImJvb2wgcHJldHR5IiBvcHRpb24gdG8gZGV0YWlsZWQgZmxhZ3MgKi8KICNkZWZpbmUgR0VUX1BS RVRUWV9GTEFHUyhwcmV0dHkpIFwKIAkoKHByZXR0eSkgPyAoUFJFVFRZRkxBR19QQVJFTiB8IFBS RVRUWUZMQUdfSU5ERU5UIHwgUFJFVFRZRkxBR19TQ0hFTUEpIFwKIAkgOiBQUkVUVFlGTEFHX0lO REVOVCkKIAorI2RlZmluZSBHRVRfRERMX1BSRVRUWV9GTEFHUyhwcmV0dHkpIFwKKwkoKHByZXR0 eSkgPyAoUFJFVFRZRkxBR19QQVJFTiB8IFBSRVRUWUZMQUdfSU5ERU5UIHwgUFJFVFRZRkxBR19T Q0hFTUEpIFwKKwkgOiAwKQorCiAvKiBEZWZhdWx0IGxpbmUgbGVuZ3RoIGZvciBwcmV0dHktcHJp bnQgd3JhcHBpbmc6IDAgbWVhbnMgd3JhcCBhbHdheXMgKi8KICNkZWZpbmUgV1JBUF9DT0xVTU5f REVGQVVMVAkJMAogCkBAIC01NDYsNiArNTYwLDExIEBAIHN0YXRpYyB2b2lkIGdldF9qc29uX3Rh YmxlX25lc3RlZF9jb2x1bW5zKFRhYmxlRnVuYyAqdGYsIEpzb25UYWJsZVBsYW4gKnBsYW4sCiAJ CQkJCQkJCQkJICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJCQkJICBib29sIHNo b3dpbXBsaWNpdCwKIAkJCQkJCQkJCQkgIGJvb2wgbmVlZGNvbW1hKTsKK3N0YXRpYyB2b2lkIGdl dF9mb3JtYXR0ZWRfc3RyaW5nKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCQkgaW50IHByZXR0eUZs YWdzLAorCQkJCQkJCQkgaW50IG5TcGFjZXMsCisJCQkJCQkJCSBjb25zdCBjaGFyICpmbXQsLi4u KSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDQsIDUpOworc3RhdGljIGNoYXIgKnBnX2dldF9kYXRhYmFz ZV9kZGxfd29ya2VyKE9pZCBkYl9vaWQsIEFycmF5VHlwZSAqZGRsX29wdGlvbnMpOwogCiAjZGVm aW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQogCkBAIC0x Mzc0MywzICsxMzc2MiwyNzUgQEAgZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91 bmRfZGF0dW1zKQogCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQorCisvKgorICogZ2V0X2Zvcm1hdHRl ZF9zdHJpbmcKKyAqCisgKiBSZXR1cm4gYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5n LgorICoKKyAqIHByZXR0eUZsYWdzIC0gQmFzZWQgb24gcHJldHR5RmxhZ3MgdGhlIG91dHB1dCBp bmNsdWRlcyBzcGFjZXMgYW5kCisgKiAgICAgICAgICAgICAgIG5ld2xpbmVzIChcbikuCisgKiBu U3BhY2VzIC0gaW5kZW50IHdpdGggc3BlY2lmaWVkIG51bWJlciBvZiBzcGFjZSBjaGFyYWN0ZXJz LgorICogZm10IC0gcHJpbnRmLXN0eWxlIGZvcm1hdCBzdHJpbmcgdXNlZCBieSBhcHBlbmRTdHJp bmdJbmZvVkEuCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfZm9ybWF0dGVkX3N0cmluZyhTdHJpbmdJ bmZvIGJ1ZiwgaW50IHByZXR0eUZsYWdzLCBpbnQgblNwYWNlcywgY29uc3QgY2hhciAqZm10LC4u LikKK3sKKwl2YV9saXN0CQlhcmdzOworCisJaWYgKHByZXR0eUZsYWdzICYgUFJFVFRZRkxBR19J TkRFTlQpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdcbicpOworCQkvKiBJbmRl bnQgd2l0aCBzcGFjZXMgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuU3BhY2VzOyBpKyspCisJ CXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwkJfQorCX0KKwllbHNlCisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7 CisJYXBwZW5kU3RyaW5nSW5mb1ZBKGJ1ZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9 CisKKy8qKgorICogcGFyc2VfZGRsX29wdGlvbnMgLSBHZW5lcmljIGhlbHBlciB0byBwYXJzZSB2 YXJpYWRpYyB0ZXh0IG9wdGlvbnMKKyAqIGRkbF9vcHRpb25zOiBUaGUgQXJyYXlUeXBlIGZyb20g UEdfR0VUQVJHX0FSUkFZVFlQRV9QCisgKiBmbGFnczogQml0bWFzayB0byBzZXQgb3B0aW9ucyB3 aGlsZSBwYXJzaW5nIERETCBvcHRpb25zLgorICovCitzdGF0aWMgdWludDY0CitwYXJzZV9kZGxf b3B0aW9ucyhBcnJheVR5cGUgKmRkbF9vcHRpb25zKQoreworCXVpbnQ2NAkJZmxhZ3MgPSAwOwor CURhdHVtCSAgICpvcHRpb25zOworCWJvb2wJICAgKm51bGxzOworCWludAkJCW5fb3B0aW9uczsK KwlpbnQJCQlpOworCisJLyogSWYgbm8gb3B0aW9ucyBwcm92aWRlZCwgcmV0dXJuIHRoZSBlbXB0 eSBiaXRtYXNrICovCisJaWYgKGRkbF9vcHRpb25zID09IE5VTEwpCisJCXJldHVybiBmbGFnczsK KworCWRlY29uc3RydWN0X2FycmF5KGRkbF9vcHRpb25zLAorCQkJCQkgIFRFWFRPSUQsIC0xLCBm YWxzZSwgJ2knLAorCQkJCQkgICZvcHRpb25zLCAmbnVsbHMsICZuX29wdGlvbnMpOworCisJZm9y IChpID0gMDsgaSA8IG5fb3B0aW9uczsgaSsrKQorCXsKKwkJY2hhcgkgICAqb3B0OworCisJCWlm IChudWxsc1tpXSkKKwkJCWNvbnRpbnVlOworCisJCW9wdCA9IFRleHREYXR1bUdldENTdHJpbmco b3B0aW9uc1tpXSk7CisKKwkJLyogTWFwIHN0cmluZ3MgdG8gYml0bWFzayBmbGFncyAqLworCQlp ZiAoc3RyY21wKG9wdCwgInByZXR0eSIpID09IDApCisJCQlmbGFncyB8PSBQR19ERExfUFJFVFRZ X0lOREVOVDsKKwkJZWxzZSBpZiAoc3RyY21wKG9wdCwgIi0tbm8tb3duZXIiKSA9PSAwKQorCQkJ ZmxhZ3MgfD0gUEdfRERMX05PX09XTkVSOworCQllbHNlIGlmIChzdHJjbXAob3B0LCAiLS1uby10 YWJsZXNwYWNlIikgPT0gMCkKKwkJCWZsYWdzIHw9IFBHX0RETF9OT19UQUJMRVNQQUNFOworCQll bHNlIGlmIChzdHJjbXAob3B0LCAiLS13aXRoLWRlZmF1bHRzIikgPT0gMCkKKwkJCWZsYWdzIHw9 IFBHX0RETF9XSVRIX0RFRkFVTFRTOworCQllbHNlCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi dW5yZWNvZ25pemVkIG9wdGlvbjogJXMiLCBvcHQpKSk7CisKKwkJcGZyZWUob3B0KTsKKwl9CisK KwlwZnJlZShvcHRpb25zKTsKKwlwZnJlZShudWxscyk7CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisK Ky8qCisgKiBwZ19nZXRfZGF0YWJhc2VfZGRsCisgKgorICogR2VuZXJhdGUgYSBDUkVBVEUgREFU QUJBU0Ugc3RhdGVtZW50IGZvciB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIG5hbWUgb3Igb2lkLgor ICoKKyAqIGRiX29pZCAtIE9JRC9OYW1lIG9mIHRoZSBkYXRhYmFzZSBmb3Igd2hpY2ggdG8gZ2Vu ZXJhdGUgdGhlIERETC4KKyAqIGRkbF9vcHRpb25zIC0gQXJyYXkgb2YgdGV4dCBvcHRpb25zIHRv IG1vZGlmeSB0aGUgb3V0cHV0LgorICovCitEYXR1bQorcGdfZ2V0X2RhdGFiYXNlX2RkbChQR19G VU5DVElPTl9BUkdTKQoreworCU9pZAkJCWRiX29pZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJQXJy YXlUeXBlICAqZGRsX29wdGlvbnMgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMSk7CisJY2hhcgkg ICAqcmVzOworCisJcmVzID0gcGdfZ2V0X2RhdGFiYXNlX2RkbF93b3JrZXIoZGJfb2lkLCBkZGxf b3B0aW9ucyk7CisKKwlpZiAocmVzID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlQ R19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOworfQorCitzdGF0aWMgY2hhciAq CitwZ19nZXRfZGF0YWJhc2VfZGRsX3dvcmtlcihPaWQgZGJfb2lkLCBBcnJheVR5cGUgKmRkbF9v cHRpb25zKQoreworCWNoYXIJICAgKmRib3duZXIgPSBOVUxMOworCWJvb2wJCWF0dHJfaXNudWxs OworCURhdHVtCQlkYnZhbHVlOworCUhlYXBUdXBsZQl0dXBsZV9kYXRhYmFzZTsKKwlGb3JtX3Bn X2RhdGFiYXNlIGRiZm9ybTsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJQWNsUmVzdWx0CWFjbHJl c3VsdDsKKworCS8qIFZhcmlhYmxlcyBmb3IgZGRsX29wdGlvbnMgcGFyc2luZyAqLworCWludAkJ CXByZXR0eV9mbGFncyA9IDA7CisJdWludDY0CQlkZGxfZmxhZ3MgPSAwOworCWJvb2wJCWlzX3dp dGhfZGVmYXVsdHMgPSBmYWxzZTsKKworCS8qIENhbGwgRERMIG9wdGlvbnMgcGFyc2VyICovCisJ ZGRsX2ZsYWdzID0gcGFyc2VfZGRsX29wdGlvbnMoZGRsX29wdGlvbnMpOworCisJLyogU2V0IHRo ZSBhcHByb3ByaWF0ZSBmbGFncyAqLworCWlmIChkZGxfZmxhZ3MgJiBQR19ERExfUFJFVFRZX0lO REVOVCkKKwkJcHJldHR5X2ZsYWdzID0gR0VUX0RETF9QUkVUVFlfRkxBR1MoMSk7CisKKwlpc193 aXRoX2RlZmF1bHRzID0gKGRkbF9mbGFncyAmIFBHX0RETF9XSVRIX0RFRkFVTFRTKSA/IHRydWUg OiBmYWxzZTsKKworCS8qCisJICogVXNlciBtdXN0IGhhdmUgY29ubmVjdCBwcml2aWxlZ2UgZm9y IHRhcmdldCBkYXRhYmFzZS4KKwkgKi8KKwlhY2xyZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soRGF0 YWJhc2VSZWxhdGlvbklkLCBkYl9vaWQsIEdldFVzZXJJZCgpLAorCQkJCQkJCQlBQ0xfQ09OTkVD VCk7CisJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19PSyAmJgorCQkhaGFzX3ByaXZzX29mX3Jv bGUoR2V0VXNlcklkKCksIFJPTEVfUEdfUkVBRF9BTExfU1RBVFMpKQorCXsKKwkJYWNsY2hlY2tf ZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfREFUQUJBU0UsCisJCQkJCSAgIGdldF9kYXRhYmFzZV9u YW1lKGRiX29pZCkpOworCX0KKworCS8qIExvb2sgdXAgdGhlIGRhdGFiYXNlIGluIHBnX2RhdGFi YXNlICovCisJdHVwbGVfZGF0YWJhc2UgPSBTZWFyY2hTeXNDYWNoZTEoREFUQUJBU0VPSUQsIE9i amVjdElkR2V0RGF0dW0oZGJfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlX2Rh dGFiYXNlKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVE X09CSkVDVCksCisJCQkJZXJybXNnKCJkYXRhYmFzZSB3aXRoIG9pZCAldSBkb2VzIG5vdCBleGlz dCIsIGRiX29pZCkpOworCisJZGJmb3JtID0gKEZvcm1fcGdfZGF0YWJhc2UpIEdFVFNUUlVDVCh0 dXBsZV9kYXRhYmFzZSk7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCS8qIExvb2sgdXAg dGhlIG93bmVyIGluIHRoZSBzeXN0ZW0gY2F0YWxvZyAqLworCWlmIChPaWRJc1ZhbGlkKGRiZm9y bS0+ZGF0ZGJhKSkKKwkJZGJvd25lciA9IEdldFVzZXJOYW1lRnJvbUlkKGRiZm9ybS0+ZGF0ZGJh LCBmYWxzZSk7CisKKwkvKiBCdWlsZCB0aGUgQ1JFQVRFIERBVEFCQVNFIHN0YXRlbWVudCAqLwor CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBEQVRBQkFTRSAlcyIsCisJCQkJCSBxdW90 ZV9pZGVudGlmaWVyKGRiZm9ybS0+ZGF0bmFtZS5kYXRhKSk7CisJZ2V0X2Zvcm1hdHRlZF9zdHJp bmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA0LCAiV0lUSCIpOworCisJLyogU2V0IHRoZSBPV05FUiBp biB0aGUgRERMIGlmIC0tbm8tb3duZXIgaXMgbm90IHNwZWNpZmllZCAqLworCWlmIChPaWRJc1Zh bGlkKGRiZm9ybS0+ZGF0ZGJhKSAmJiAhKGRkbF9mbGFncyAmIFBHX0RETF9OT19PV05FUikpCisJ eworCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJPV05FUiA9 ICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihkYm93bmVyKSk7CisJfQorCisJLyogU2V0 IHRoZSBFTkNPRElORyBpbiB0aGUgRERMICovCisJaWYgKGRiZm9ybS0+ZW5jb2RpbmcgIT0gMCkK Kwl7CisJCS8qIElmIGl0J3Mgd2l0aCBkZWZhdWx0cywgd2Ugc2tpcCBkZWZhdWx0IGVuY29kaW5n IGNoZWNrICovCisJCWlmIChpc193aXRoX2RlZmF1bHRzIHx8CisJCQkocGdfc3RyY2FzZWNtcChw Z19lbmNvZGluZ190b19jaGFyKGRiZm9ybS0+ZW5jb2RpbmcpLAorCQkJCQkJICAgRERMX0RFRkFV TFRTLkRBVEFCQVNFLkVOQ09ESU5HKSAhPSAwKSkKKwkJeworCQkJZ2V0X2Zvcm1hdHRlZF9zdHJp bmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiRU5DT0RJTkcgPSAlcyIsCisJCQkJCQkJCSBxdW90 ZV9saXRlcmFsX2NzdHIoCisJCQkJCQkJCQkJCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihkYmZvcm0t PmVuY29kaW5nKSkpOworCQl9CisJfQorCisJLyogRmV0Y2ggdGhlIHZhbHVlIG9mIExDX0NPTExB VEUgKi8KKwlkYnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXBsZV9kYXRh YmFzZSwKKwkJCQkJCQkgIEFudW1fcGdfZGF0YWJhc2VfZGF0Y29sbGF0ZSwgJmF0dHJfaXNudWxs KTsKKwlpZiAoIWF0dHJfaXNudWxsKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0 dHlfZmxhZ3MsIDgsICJMQ19DT0xMQVRFID0gJXMiLAorCQkJCQkJCSBxdW90ZV9saXRlcmFsX2Nz dHIoVGV4dERhdHVtR2V0Q1N0cmluZyhkYnZhbHVlKSkpOworCS8qIEZldGNoIHRoZSB2YWx1ZSBv ZiBMQ19DVFlQRSAqLworCWRidmFsdWUgPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1 cGxlX2RhdGFiYXNlLAorCQkJCQkJCSAgQW51bV9wZ19kYXRhYmFzZV9kYXRjdHlwZSwgJmF0dHJf aXNudWxsKTsKKwlpZiAoIWF0dHJfaXNudWxsKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVm LCBwcmV0dHlfZmxhZ3MsIDgsICJMQ19DVFlQRSA9ICVzIiwKKwkJCQkJCQkgcXVvdGVfbGl0ZXJh bF9jc3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkpKTsKKwkvKiBGZXRjaCB0aGUgdmFs dWUgb2YgTE9DQUxFICovCisJZGJ2YWx1ZSA9IFN5c0NhY2hlR2V0QXR0cihEQVRBQkFTRU9JRCwg dHVwbGVfZGF0YWJhc2UsCisJCQkJCQkJICBBbnVtX3BnX2RhdGFiYXNlX2RhdGxvY2FsZSwgJmF0 dHJfaXNudWxsKTsKKwlpZiAoIWF0dHJfaXNudWxsICYmIGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0JVSUxUSU4pCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHBy ZXR0eV9mbGFncywgOCwgIkJVSUxUSU5fTE9DQUxFID0gJXMiLAorCQkJCQkJCSBxdW90ZV9saXRl cmFsX2NzdHIoVGV4dERhdHVtR2V0Q1N0cmluZyhkYnZhbHVlKSkpOworCWVsc2UgaWYgKCFhdHRy X2lzbnVsbCAmJiBkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJ CWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIklDVV9MT0NBTEUg PSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRi dmFsdWUpKSk7CisJZWxzZSBpZiAoIWF0dHJfaXNudWxsKQorCQlnZXRfZm9ybWF0dGVkX3N0cmlu ZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJMT0NBTEUgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xp dGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpKSk7CisKKwkvKiBGZXRjaCB0 aGUgdmFsdWUgb2YgSUNVX1JVTEVTICovCisJZGJ2YWx1ZSA9IFN5c0NhY2hlR2V0QXR0cihEQVRB QkFTRU9JRCwgdHVwbGVfZGF0YWJhc2UsCisJCQkJCQkJICBBbnVtX3BnX2RhdGFiYXNlX2RhdGlj dXJ1bGVzLCAmYXR0cl9pc251bGwpOworCWlmICghYXR0cl9pc251bGwgJiYgZGJmb3JtLT5kYXRs b2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygm YnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJJQ1VfUlVMRVMgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xp dGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpKSk7CisKKwkvKiBGZXRjaCB0 aGUgdmFsdWUgb2YgQ09MTEFUSU9OX1ZFUlNJT04gKi8KKwlkYnZhbHVlID0gU3lzQ2FjaGVHZXRB dHRyKERBVEFCQVNFT0lELCB0dXBsZV9kYXRhYmFzZSwKKwkJCQkJCQkgIEFudW1fcGdfZGF0YWJh c2VfZGF0Y29sbHZlcnNpb24sICZhdHRyX2lzbnVsbCk7CisJaWYgKCFhdHRyX2lzbnVsbCkKKwkJ Z2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiQ09MTEFUSU9OX1ZF UlNJT04gPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3Ry aW5nKGRidmFsdWUpKSk7CisKKwkvKiBTZXQgdGhlIGFwcHJvcHJpYXRlIExPQ0FMRV9QUk9WSURF UiAqLworCWlmIChkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9CVUlMVElO KQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJMT0NBTEVf UFJPVklERVIgPSBidWlsdGluIik7CisJZWxzZSBpZiAoZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9 PSBDT0xMUFJPVklERVJfSUNVKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlf ZmxhZ3MsIDgsICJMT0NBTEVfUFJPVklERVIgPSBpY3UiKTsKKwllbHNlIGlmIChpc193aXRoX2Rl ZmF1bHRzKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJM T0NBTEVfUFJPVklERVIgPSBsaWJjIik7CisKKwkvKiBTZXQgdGhlIFRBQkxFU1BBQ0UgaW4gdGhl IERETCBpZiAtLW5vLXRhYmxlc3BhY2UgaXMgbm90IHNwZWNpZmllZCAqLworCWlmIChPaWRJc1Zh bGlkKGRiZm9ybS0+ZGF0dGFibGVzcGFjZSkgJiYgIShkZGxfZmxhZ3MgJiBQR19ERExfTk9fVEFC TEVTUEFDRSkpCisJeworCQkvKiBHZXQgdGhlIHRhYmxlc3BhY2UgbmFtZSByZXNwZWN0aXZlIHRv IHRoZSBnaXZlbiB0YWJsZXNwYWNlIG9pZCAqLworCQljaGFyCSAgICpkYlRhYmxlc3BhY2UgPSBn ZXRfdGFibGVzcGFjZV9uYW1lKGRiZm9ybS0+ZGF0dGFibGVzcGFjZSk7CisKKwkJLyogSWYgaXQn cyB3aXRoIGRlZmF1bHRzLCB3ZSBza2lwIGRlZmF1bHQgdGFibGVzcGFjZSBjaGVjayAqLworCQlp ZiAoaXNfd2l0aF9kZWZhdWx0cyB8fAorCQkJKHBnX3N0cmNhc2VjbXAoZGJUYWJsZXNwYWNlLCBE RExfREVGQVVMVFMuREFUQUJBU0UuVEFCTEVTUEFDRSkgIT0gMCkpCisJCQlnZXRfZm9ybWF0dGVk X3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJUQUJMRVNQQUNFID0gJXMiLAorCQkJCQkJ CQkgcXVvdGVfaWRlbnRpZmllcihkYlRhYmxlc3BhY2UpKTsKKwl9CisKKwlpZiAoaXNfd2l0aF9k ZWZhdWx0cyB8fAorCQkoZGJmb3JtLT5kYXRhbGxvd2Nvbm4gIT0gRERMX0RFRkFVTFRTLkRBVEFC QVNFLkFMTE9XX0NPTk4pKQorCXsKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5 X2ZsYWdzLCA4LCAiQUxMT1dfQ09OTkVDVElPTlMgPSAlcyIsCisJCQkJCQkJIGRiZm9ybS0+ZGF0 YWxsb3djb25uID8gInRydWUiIDogImZhbHNlIik7CisJfQorCisJaWYgKGlzX3dpdGhfZGVmYXVs dHMgfHwKKwkJKGRiZm9ybS0+ZGF0Y29ubmxpbWl0ICE9IERETF9ERUZBVUxUUy5EQVRBQkFTRS5D T05OX0xJTUlUKSkKKwl7CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFn cywgOCwgIkNPTk5FQ1RJT04gTElNSVQgPSAlZCIsCisJCQkJCQkJIGRiZm9ybS0+ZGF0Y29ubmxp bWl0KTsKKwl9CisKKwlpZiAoZGJmb3JtLT5kYXRpc3RlbXBsYXRlKQorCQlnZXRfZm9ybWF0dGVk X3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJJU19URU1QTEFURSA9ICVzIiwKKwkJCQkJ CQkgZGJmb3JtLT5kYXRpc3RlbXBsYXRlID8gInRydWUiIDogImZhbHNlIik7CisKKwlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmYnVmLCAnOycpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlX2RhdGFi YXNlKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IDg5NGI2YTFiNmQ2Li41M2Q2MjNkZTU4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC00 MDMwLDYgKzQwMzAsMTIgQEAKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2Z1bmN0aW9uX3NxbGJvZHkn LCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9hcmd0eXBl cyA9PiAnb2lkJywKICAgcHJvc3JjID0+ICdwZ19nZXRfZnVuY3Rpb25fc3FsYm9keScgfSwKK3sg b2lkID0+ICc5NDkyJywgZGVzY3IgPT4gJ2dldCBDUkVBVEUgc3RhdGVtZW50IGZvciBkYXRhYmFz ZSBuYW1lIGFuZCBvaWQnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfZGF0YWJhc2VfZGRsJywgcHJv aXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4g J3JlZ2RhdGFiYXNlIF90ZXh0JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tpLHZ9JywKKyAgcHJvYWxs YXJndHlwZXMgPT4gJ3tyZWdkYXRhYmFzZSxfdGV4dH0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF9k YXRhYmFzZV9kZGwnIH0sCiAKIHsgb2lkID0+ICcxNjg2JywgZGVzY3IgPT4gJ2xpc3Qgb2YgU1FM IGtleXdvcmRzJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2tleXdvcmRzJywgcHJvY29zdCA9PiAn MTAnLCBwcm9yb3dzID0+ICc1MDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZGRs X2RlZmF1bHRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9kZGxfZGVmYXVsdHMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODRlZjYxYjRmM2QKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9kZGxfZGVmYXVsdHMuaApAQCAtMCwwICsxLDM3IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVmYXVsdHMuaAorICoJICBEZWNsYXJhdGlv bnMgZm9yIERETCBkZWZhdWx0cy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVGQVVMVFNfSAorI2RlZmluZSBERExfREVGQVVM VFNfSAorCitzdGF0aWMgY29uc3Qgc3RydWN0Cit7CisJc3RydWN0CisJeworCQljb25zdCBjaGFy ICpFTkNPRElORzsKKwkJY29uc3QgY2hhciAqVEFCTEVTUEFDRTsKKwkJaW50CQkJQ09OTl9MSU1J VDsKKwkJYm9vbAkJQUxMT1dfQ09OTjsKKwl9CQkJREFUQUJBU0U7CisKKwkvKiBBZGQgbW9yZSBv YmplY3QgdHlwZXMgYXMgbmVlZGVkICovCit9CQkJRERMX0RFRkFVTFRTID0geworCisJLkRBVEFC QVNFID0geworCQkuRU5DT0RJTkcgPSAiVVRGOCIsCisJCS5UQUJMRVNQQUNFID0gInBnX2RlZmF1 bHQiLAorCQkuQ09OTl9MSU1JVCA9IC0xLAorCQkuQUxMT1dfQ09OTiA9IHRydWUsCisJfQorfTsK KworI2VuZGlmCQkJCQkJLyogRERMX0RFRkFVTFRTX0ggKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uub3V0CmluZGV4IDZiODc5YjBm NjJhLi5lYjNhMTNiY2Y5ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9k YXRhYmFzZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFzZS5vdXQK QEAgLTEsMyArMSw1NyBAQAorLS0KKy0tIFJlY29uc3RydWN0IERETAorLS0KKy0tIFRvIHByb2R1 Y2Ugc3RhYmxlIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQsIGl0J3MgdXN1YWxseSBuZWNlc3Nhcnkg dG8KKy0tIGlnbm9yZSBjb2xsYXRpb24gYW5kIGxvY2FsZSByZWxhdGVkIGRldGFpbHMuIFRoaXMg ZmlsdGVyCistLSBmdW5jdGlvbnMgcmVtb3ZlcyBjb2xsYXRpb24gYW5kIGxvY2FsZSByZWxhdGVk IGRldGFpbHMuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBkZGxfZmlsdGVyKGRkbF9pbnB1 dCBURVhUKQorUkVUVVJOUyBURVhUIEFTICQkCitERUNMQVJFCisgICAgY2xlYW5lZF9kZGwgVEVY VDsKK0JFR0lOCisgICAgLS0gUmVtb3ZlICVMT0NBTEVfUFJPVklERVIlIHBsYWNlaG9sZGVycwor ICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBkZGxfaW5wdXQsCisg ICAgICAgICdccypcbUxPQ0FMRV9QUk9WSURFUlxNXHMqPVxzKihbJyciXT9bXicnIlxzXStbJyci XT8pJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOworCisJLS0gUmVtb3ZlIExD X0NPTExBVEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgK KyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DT0xMQVRFXHMqPVxzKihbJyci XSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisKKyAgICAt LSBSZW1vdmUgTENfQ1RZUEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBf cmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DVFlQRVxzKj1c cyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOwor CisgICAgLS0gUmVtb3ZlICVMT0NBTEUlIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRfZGRsIDo9 IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xzKlxTKkxP Q0FMRVxTKlxzKj0/XHMqKFsnJyJdKVteJyciXSpcMScsCisJCScnLAorCQknZ2knCisJKTsKKwor ICAgIC0tIFJlbW92ZSAlQ09MTEFUSU9OJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVkX2RkbCA6 PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypcUypD T0xMQVRJT05cUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAg ICAgJ2dpJworICAgICk7CisKKyAgICBSRVRVUk4gY2xlYW5lZF9kZGw7CitFTkQ7CiskJCBMQU5H VUFHRSBwbHBnc3FsOwogQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkCiAJRU5DT0RJTkcg dXRmOCBMQ19DT0xMQVRFICJDIiBMQ19DVFlQRSAiQyIgVEVNUExBVEUgdGVtcGxhdGUwOwogQUxU RVIgREFUQUJBU0UgcmVncmVzc2lvbl90YmQgUkVOQU1FIFRPIHJlZ3Jlc3Npb25fdXRmODsKQEAg LTE2LDYgKzcwLDg2IEBAIENSRUFURSBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZTsKIENSRUFU RSBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2FmdGVyOwogQUxURVIgREFUQUJBU0UgcmVncmVzc2lvbl91 dGY4IE9XTkVSIFRPIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZTsKIFJFQVNTSUdOIE9XTkVEIEJZIHJl Z3Jlc3NfZGF0ZGJhX2JlZm9yZSBUTyByZWdyZXNzX2RhdGRiYV9hZnRlcjsKKy0tIFRlc3QgcGdf Z2V0X2RhdGFiYXNlX2RkbAorLS0gRGF0YWJhc2UgZG9lc24ndCBleGlzdHMKK1NFTEVDVCBwZ19n ZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFiYXNlJyk7CitFUlJPUjogIGRhdGFiYXNl ICJyZWdyZXNzaW9uX2RhdGFiYXNlIiBkb2VzIG5vdCBleGlzdAorTElORSAxOiBTRUxFQ1QgcGdf Z2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl9kYXRhYmFzZScpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCistLSBUZXN0IE5VTEwgdmFsdWUKK1NFTEVDVCBwZ19nZXRf ZGF0YWJhc2VfZGRsKE5VTEwpOworRVJST1I6ICBkYXRhYmFzZSB3aXRoIG9pZCAwIGRvZXMgbm90 IGV4aXN0CistLSBXaXRob3V0IHByZXR0eQorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFi YXNlX2RkbCgncmVncmVzc2lvbl91dGY4JykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRB QkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBPV05FUiA9IHJlZ3Jlc3NfZGF0ZGJhX2FmdGVyIENP Tk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdpdGggTm8gT3duZXIKK1NFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICctLW5v LW93bmVyJykpOworICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRm OCBXSVRIIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdpdGggTm8gVGFi bGVzcGFjZQorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lv bl91dGY4JywgJy0tbm8tdGFibGVzcGFjZScpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFU QUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEggT1dORVIgPSByZWdyZXNzX2RhdGRiYV9hZnRlciBD T05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorCistLSBXaXRoIERlZmF1bHRzCitTRUxF Q1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnLS13 aXRoLWRlZmF1bHRzJykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCBXSVRIIE9XTkVSID0gcmVncmVzc19kYXRkYmFf YWZ0ZXIgRU5DT0RJTkcgPSAnVVRGOCcgVEFCTEVTUEFDRSA9IHBnX2RlZmF1bHQgQUxMT1dfQ09O TkVDVElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdp dGggTm8gT3duZXIsIE5vIFRhYmxlc3BhY2UgYW5kIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBkZGxf ZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICctLW5vLW93bmVy JywgJy0tbm8tdGFibGVzcGFjZScsICctLXdpdGgtZGVmYXVsdHMnKSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9u X3V0ZjggV0lUSCBFTkNPRElORyA9ICdVVEY4JyBBTExPV19DT05ORUNUSU9OUyA9IHRydWUgQ09O TkVDVElPTiBMSU1JVCA9IDEyMzsKKygxIHJvdykKKworLS0gV2l0aCBQcmV0dHkgZm9ybWF0dGVk CitccHNldCBmb3JtYXQgdW5hbGlnbmVkCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJh c2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JykpOworZGRsX2ZpbHRlcgorQ1JFQVRF IERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOAorICAgIFdJVEgKKyAgICAgICAgT1dORVIgPSByZWdy ZXNzX2RhdGRiYV9hZnRlcgorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93 KQorLS0gV2l0aCBObyBPd25lciBhbmQgTm8gVGFibGVzcGFjZQorU0VMRUNUIGRkbF9maWx0ZXIo cGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsICctLW5vLW93 bmVyJywgJy0tbm8tdGFibGVzcGFjZScpKTsKK2RkbF9maWx0ZXIKK0NSRUFURSBEQVRBQkFTRSBy ZWdyZXNzaW9uX3V0ZjgKKyAgICBXSVRICisgICAgICAgIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7 CisoMSByb3cpCistLSBXaXRoIERlZmF1bHRzCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0 YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JywgJy0td2l0aC1kZWZhdWx0cycp KTsKK2RkbF9maWx0ZXIKK0NSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKKyAgICBXSVRI CisgICAgICAgIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0ZXIKKyAgICAgICAgRU5DT0RJTkcg PSAnVVRGOCcKKyAgICAgICAgVEFCTEVTUEFDRSA9IHBnX2RlZmF1bHQKKyAgICAgICAgQUxMT1df Q09OTkVDVElPTlMgPSB0cnVlCisgICAgICAgIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSBy b3cpCistLSBXaXRoIE5vIE93bmVyLCBObyBUYWJsZXNwYWNlIGFuZCBXaXRoIERlZmF1bHRzCitT RUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAn cHJldHR5JywgJy0tbm8tb3duZXInLCAnLS1uby10YWJsZXNwYWNlJywgJy0td2l0aC1kZWZhdWx0 cycpKTsKK2RkbF9maWx0ZXIKK0NSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKKyAgICBX SVRICisgICAgICAgIEVOQ09ESU5HID0gJ1VURjgnCisgICAgICAgIEFMTE9XX0NPTk5FQ1RJT05T ID0gdHJ1ZQorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQogRFJPUCBE QVRBQkFTRSByZWdyZXNzaW9uX3V0Zjg7CiBEUk9QIFJPTEUgcmVncmVzc19kYXRkYmFfYmVmb3Jl OwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2FmdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uu c3FsCmluZGV4IDRlZjM2MTI3MjkxLi45MThiMjhjNDdkYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFi YXNlLnNxbApAQCAtMSwzICsxLDU5IEBACistLQorLS0gUmVjb25zdHJ1Y3QgRERMCistLQorLS0g VG8gcHJvZHVjZSBzdGFibGUgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCwgaXQncyB1c3VhbGx5IG5l Y2Vzc2FyeSB0bworLS0gaWdub3JlIGNvbGxhdGlvbiBhbmQgbG9jYWxlIHJlbGF0ZWQgZGV0YWls cy4gVGhpcyBmaWx0ZXIKKy0tIGZ1bmN0aW9ucyByZW1vdmVzIGNvbGxhdGlvbiBhbmQgbG9jYWxl IHJlbGF0ZWQgZGV0YWlscy4KKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZGRsX2ZpbHRl cihkZGxfaW5wdXQgVEVYVCkKK1JFVFVSTlMgVEVYVCBBUyAkJAorREVDTEFSRQorICAgIGNsZWFu ZWRfZGRsIFRFWFQ7CitCRUdJTgorICAgIC0tIFJlbW92ZSAlTE9DQUxFX1BST1ZJREVSJSBwbGFj ZWhvbGRlcnMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgZGRs X2lucHV0LAorICAgICAgICAnXHMqXG1MT0NBTEVfUFJPVklERVJcTVxzKj1ccyooWycnIl0/W14n JyJcc10rWycnIl0/KScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAgKTsKKworCS0t IFJlbW92ZSBMQ19DT0xMQVRFIGFzc2lnbm1lbnRzCisgICAgY2xlYW5lZF9kZGwgOj0gcmVnZXhw X3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMqTENfQ09MTEFURVxz Kj1ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICAp OworCisgICAgLS0gUmVtb3ZlIExDX0NUWVBFIGFzc2lnbm1lbnRzCisgICAgY2xlYW5lZF9kZGwg Oj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMqTENf Q1RZUEVccyo9XHMqKFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAorICAgICAgICAnZ2kn CisgICAgKTsKKworICAgIC0tIFJlbW92ZSAlTE9DQUxFJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVh bmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAg ICdccypcUypMT0NBTEVcUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorCQknJywKKwkJJ2dp JworCSk7CisKKyAgICAtLSBSZW1vdmUgJUNPTExBVElPTiUgcGxhY2Vob2xkZXJzCisgICAgY2xl YW5lZF9kZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAg ICAnXHMqXFMqQ09MTEFUSU9OXFMqXHMqPT9ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAg JycsCisgICAgICAgICdnaScKKyAgICApOworCisgICAgUkVUVVJOIGNsZWFuZWRfZGRsOworRU5E OworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKwogQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJk CiAJRU5DT0RJTkcgdXRmOCBMQ19DT0xMQVRFICJDIiBMQ19DVFlQRSAiQyIgVEVNUExBVEUgdGVt cGxhdGUwOwogQUxURVIgREFUQUJBU0UgcmVncmVzc2lvbl90YmQgUkVOQU1FIFRPIHJlZ3Jlc3Np b25fdXRmODsKQEAgLTE5LDYgKzc1LDQxIEBAIENSRUFURSBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2Fm dGVyOwogQUxURVIgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4IE9XTkVSIFRPIHJlZ3Jlc3NfZGF0 ZGJhX2JlZm9yZTsKIFJFQVNTSUdOIE9XTkVEIEJZIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZSBUTyBy ZWdyZXNzX2RhdGRiYV9hZnRlcjsKIAorLS0gVGVzdCBwZ19nZXRfZGF0YWJhc2VfZGRsCistLSBE YXRhYmFzZSBkb2Vzbid0IGV4aXN0cworU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jl c3Npb25fZGF0YWJhc2UnKTsKKworLS0gVGVzdCBOVUxMIHZhbHVlCitTRUxFQ1QgcGdfZ2V0X2Rh dGFiYXNlX2RkbChOVUxMKTsKKworLS0gV2l0aG91dCBwcmV0dHkKK1NFTEVDVCBkZGxfZmlsdGVy KHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcpKTsKKworLS0gV2l0aCBObyBP d25lcgorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91 dGY4JywgJy0tbm8tb3duZXInKSk7CisKKy0tIFdpdGggTm8gVGFibGVzcGFjZQorU0VMRUNUIGRk bF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJy0tbm8tdGFi bGVzcGFjZScpKTsKKworLS0gV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJy0td2l0aC1kZWZhdWx0cycpKTsKKwor LS0gV2l0aCBObyBPd25lciwgTm8gVGFibGVzcGFjZSBhbmQgV2l0aCBEZWZhdWx0cworU0VMRUNU IGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJy0tbm8t b3duZXInLCAnLS1uby10YWJsZXNwYWNlJywgJy0td2l0aC1kZWZhdWx0cycpKTsKKworLS0gV2l0 aCBQcmV0dHkgZm9ybWF0dGVkCitccHNldCBmb3JtYXQgdW5hbGlnbmVkCitTRUxFQ1QgZGRsX2Zp bHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JykpOwor CistLSBXaXRoIE5vIE93bmVyIGFuZCBObyBUYWJsZXNwYWNlCitTRUxFQ1QgZGRsX2ZpbHRlcihw Z19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JywgJy0tbm8tb3du ZXInLCAnLS1uby10YWJsZXNwYWNlJykpOworCistLSBXaXRoIERlZmF1bHRzCitTRUxFQ1QgZGRs X2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5Jywg Jy0td2l0aC1kZWZhdWx0cycpKTsKKworLS0gV2l0aCBObyBPd25lciwgTm8gVGFibGVzcGFjZSBh bmQgV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgn cmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsICctLW5vLW93bmVyJywgJy0tbm8tdGFibGVzcGFj ZScsICctLXdpdGgtZGVmYXVsdHMnKSk7CisKIERST1AgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4 OwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZTsKIERST1AgUk9MRSByZWdyZXNzX2Rh dGRiYV9hZnRlcjsKLS0gCjIuNTEuMAoK --000000000000a5c96306487c3946--