Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d424s-0008MN-CP for pgadmin-hackers@arkaria.postgresql.org; Fri, 28 Apr 2017 09:20:38 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1d424r-0005Px-Cy for pgadmin-hackers@arkaria.postgresql.org; Fri, 28 Apr 2017 09:20:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1d424p-0005Pl-OS for pgadmin-hackers@postgresql.org; Fri, 28 Apr 2017 09:20:35 +0000 Received: from mail-wm0-x231.google.com ([2a00:1450:400c:c09::231]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1d424k-0006k7-Mg for pgadmin-hackers@postgresql.org; Fri, 28 Apr 2017 09:20:35 +0000 Received: by mail-wm0-x231.google.com with SMTP id u65so36975121wmu.1 for ; Fri, 28 Apr 2017 02:20:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=uZTG4EOFDTPYMNStNeOG8F8iTey0And81F8siLeJXgU=; b=OXHR4GSugb7SyPM4tCGHeN/Jn/2vNN+ZyoJjSTwSiPEAxVSW3WRGJYqYG1qoA3osom jgY3yfomW4gDPECu6L2myg+bpRotHEDmkNokDHI1O1Nv35WMuRAcxeL+nQ82f+yAUF2s 2aY3uMaEIhejFTTrMcGIhmNsX+STvQc1d7d12hsy0Vmpv/l4EnMRHpN7bwEF6j/vlOIk wkqCggNreetp/I65lQ/ycDNFHbDSyp8M/BmFu6yq9xeALHFhJj2HxmRLmok1QS+9crCn hNncqBB2hX6ccNJKmLXOnNdFvyxNv6UzTgRB6XNaixVyu0D9AgVWHJ5ZFJ/DspawTCk1 M5JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=uZTG4EOFDTPYMNStNeOG8F8iTey0And81F8siLeJXgU=; b=p0fMp67qQluKthGzEObddjMYjIkd31V812xGwy55PoHaFTtrd8GbUoqH4R8p9F/NEQ KrFjkY3eWPC7X9/lDyyuMMGhRcLEZ2midiKQO1ohdCLhSMmejKqhrnp/Uxw5JWSJdw9D aTCeKNS4KaT3y8psgEjAVYP679un6RgnPbP2q31LupLrJGzRPpiu1OXaBl+osZI60x3A bReF776/1/8yEk8Z9LKgkNqZTze07X6A+7EYzNRsPmTogzfxZMFbqalupa7mmraWjIPx 0E0ohy8HEhNm7KKDOAkpTgpxedFBu0w6nb76v++PpHa1keXnJbhPUn/bmqPn2hXEJ+7I JAeg== X-Gm-Message-State: AN3rC/5y4ofMcBMzJuGRAnaXwD4aYFOWedh3aciac288Uwp/x2stW+ft 53dSXRExTHh6y6YMDZgj7Y6/PiGkJ6Ui X-Received: by 10.28.71.88 with SMTP id u85mr5018267wma.24.1493371229154; Fri, 28 Apr 2017 02:20:29 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.101.2 with HTTP; Fri, 28 Apr 2017 02:19:58 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Fri, 28 Apr 2017 14:49:58 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch][RM2257]: Query tool - Insert row doesn't use default values To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114e3b18a25dbc054e369546 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a114e3b18a25dbc054e369546 Content-Type: multipart/alternative; boundary=001a114e3b18a25db9054e369544 --001a114e3b18a25db9054e369544 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Dave, Please find updated patch for RM case and a separate patch for Feature tests. *Python:* - Added [default] label for cells with default values while inserting a new row. - Introduced a FieldValidator function for cells that don't allow null values. If user tries to insert null value, field with be highlighted with red borders around. =E2=80=8B- If a cell contains blank string('') and when we set it to null, the change into the cell is not detected. It was because the comparison for (defaultValue =3D=3D null) return true if defaultValue is undefined. He= nce _.isNull(value) is used to fix this. *Feature Test cases:* - Introduced a new method create_table_with_query(server, db_name, query) in test_utils.py which executes the given query on connected server. - Added a new file test_data.json that has test data for test cases. On Fri, Apr 7, 2017 at 2:21 PM, Dave Page wrote: > Hi > > On Sat, Apr 1, 2017 at 12:45 PM, Surinder Kumar > wrote: > > Hi > > > > Issues fixed: > > > > 1. If a column is defined with a default modifier, there is now way to > > insert the row with those defaults. > > The column will be left blank and it will take default value > automatically. > > > > 2. If a column has a not-null constraint then an error is returned and > the > > row is not inserted. > > The column will be left blank > > > > The default values for new added rows will be displayed on > refresh/execute. > > > > Please find attached patch and review. > > This largely works as expected, but there is some weirdness. I have a > test table that looks like this: > > CREATE TABLE public.defaults > ( > id bigint NOT NULL DEFAULT nextval('defaults_id_seq'::regclass), > data_default_nulls text COLLATE pg_catalog."default" DEFAULT > 'abc123'::text, > data_default_no_nulls text COLLATE pg_catalog."default" NOT NULL > DEFAULT 'def456'::text, > data_nulls text COLLATE pg_catalog."default", > data_no_nulls text COLLATE pg_catalog."default" NOT NULL, > CONSTRAINT defaults_pkey PRIMARY KEY (id) > ) > > Remember that the expected behaviour is: > > - Set a value to empty to update the column to null. > - Set a value to '' to update the column to an empty string > - Set a value to anything else to update the column to that value > > 1) In a row with values in each column, if I try to set the value of > data_default_nulls to null, the query executed is: > > UPDATE public.defaults SET > data_default_nulls =3D '' WHERE > id =3D '2'; > > 2) If I do the same in the data_nulls column, the value is immediately > shown as [null] and the query executed is: > > UPDATE public.defaults SET > data_nulls =3D NULL WHERE > id =3D '2'; > > 3) If I then edit the value in data_default_nulls, it shows the > current value as ''. Removing the quotes (to set it to null) doesn't > get detected as a change. > =E2=80=8B=E2=80=8BTaken care. > > 4) When I manually executed "update defaults set data_default_nulls =3D > null where id =3D 2" in a query tool window, I got: > > 2017-04-07 09:43:02,987: INFO werkzeug: 127.0.0.1 - - [07/Apr/2017 > 09:43:02] "GET /sqleditor/columns/8745675 HTTP/1.1" 500 - > Traceback (most recent call last): > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 2000, in __call__ > return self.wsgi_app(environ, start_response) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 1991, in wsgi_app > response =3D self.make_response(self.handle_exception(e)) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 1567, in handle_exception > reraise(exc_type, exc_value, tb) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 1988, in wsgi_app > response =3D self.full_dispatch_request() > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 1641, in full_dispatch_request > rv =3D self.handle_user_exception(e) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 1544, in handle_user_exception > reraise(exc_type, exc_value, tb) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 1639, in full_dispatch_request > rv =3D self.dispatch_request() > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask/app.py", > line 1625, in dispatch_request > return self.view_functions[rule.endpoint](**req.view_args) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/flask_login.py", > line 792, in decorated_view > return func(*args, **kwargs) > File "/Users/dpage/git/pgadmin4/web/pgadmin/tools/sqleditor/__ > init__.py", > line 452, in get_columns > tid=3Dcommand_obj.obj_id) > AttributeError: 'QueryToolCommand' object has no attribute 'obj_id' > =E2=80=8BFixed.=E2=80=8B > > 5) When I run the query again in pgAdmin III, then refresh the data in > pgAdmin 4, the data_default_nulls column is displayed without the > [null] marker (despite having a null value, which I confirmed in > pgAdmin 3). > =E2=80=8BFixed.=E2=80=8B > > I'm sure there are other combinations of issues here. Please fix and > thoroughly re-test to ensure behaviour is consistent - and to avoid > future issues, please add some appropriate feature tests to check > nulls, defaults and empty strings are properly handled in view, insert > and updates. Murtuza recently wrote some feature tests for the query > tool - you should be able to use those as a starting point. > =E2=80=8BAdded feature tests=E2=80=8B > > Thanks. > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > --001a114e3b18a25db9054e369544 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi = Dave,

Please find updated= patch for RM case and a separate patch for Feature tests.

Python:

- Added=C2=A0[defau= lt] label for cells with default values while inserting a new row.

- Introduced a FieldValida= tor function for cells that don't allow null values. If user tries to i= nsert null value, field with be highlighted with red =C2=A0 =C2=A0borders a= round.

=E2= =80=8B-=C2=A0
If a cell contains blank string('') and when we = set it to null, the change into the cell is not detected. It was because th= e comparison
for (defaultValue =3D=3D null) return true if defaultValue = is undefined. Hence _.isNull(value) is used to fix this.

Feature = Test cases:

<= /div>
=C2=A0- Introduced a new method=C2=A0create_table_with_query(server, db_name, query)=C2=A0 in test_u= tils.py which executes the given query on connected server.

=C2=A0- Added a n= ew file test_data.json that has test data for test cases.


On Fri, Apr 7, 2017 at 2:21 PM, Dave Page <= ;dpage@pgadmin.org> wrote:
Hi

On Sat, Apr 1, 2017 at 12:45 PM, Surinder Kumar
<
surinder.kumar@enter= prisedb.com> wrote:
> Hi
>
> Issues fixed:
>
> 1. If a column is defined with a default modifier, there is now way to=
> insert the row with those defaults.
> The column will be left blank and it will take default value automatic= ally.
>
> 2. If a column has a not-null constraint then an error is returned and= the
> row is not inserted.
> The column will be left blank
>
> The default values for new added rows will be displayed on refresh/exe= cute.
>
> Please find attached patch and review.

This largely works as expected, but there is some weirdness. I have = a
test table that looks like this:

CREATE TABLE public.defaults
(
=C2=A0 =C2=A0 id bigint NOT NULL DEFAULT nextval('defaults_id_seq':= :regclass),
=C2=A0 =C2=A0 data_default_nulls text COLLATE pg_catalog."default"= ; DEFAULT 'abc123'::text,
=C2=A0 =C2=A0 data_default_no_nulls text COLLATE pg_catalog."default&q= uot; NOT NULL
DEFAULT 'def456'::text,
=C2=A0 =C2=A0 data_nulls text COLLATE pg_catalog."default",
=C2=A0 =C2=A0 data_no_nulls text COLLATE pg_catalog."default" NOT= NULL,
=C2=A0 =C2=A0 CONSTRAINT defaults_pkey PRIMARY KEY (id)
)

Remember that the expected behaviour is:

- Set a value to empty to update the column to null.
- Set a value to '' to update the column to an empty string
- Set a value to anything else to update the column to that value

1) In a row with values in each column, if I try to set the value of
data_default_nulls to null, the query executed is:

UPDATE public.defaults SET
data_default_nulls =3D '' WHERE
id =3D '2';

2) If I do the same in the data_nulls column, the value is immediately
shown as [null] and the query executed is:

UPDATE public.defaults SET
data_nulls =3D NULL WHERE
id =3D '2';

3) If I then edit the value in data_default_nulls, it shows the
current value as ''. Removing the quotes (to set it to null) doesn&= #39;t
get detected as a change.
=E2=80=8B=E2=80=8BTaken care.=C2=A0

4) When I manually executed "update defaults set data_default_nulls = =3D
null where id =3D 2" in a query tool window, I got:

2017-04-07 09:43:02,987: INFO werkzeug: 127.0.0.1 - - [07/Apr/2017
09:43:02] "GET /sqleditor/columns/8745675 HTTP/1.1" 500 -
Traceback (most recent call last):
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 2000, in __call__
=C2=A0 =C2=A0 return self.wsgi_app(environ, start_response)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1991, in wsgi_app
=C2=A0 =C2=A0 response =3D self.make_response(self.handle_exception(e)= )
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1567, in handle_exception
=C2=A0 =C2=A0 reraise(exc_type, exc_value, tb)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1988, in wsgi_app
=C2=A0 =C2=A0 response =3D self.full_dispatch_request()
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1641, in full_dispatch_request
=C2=A0 =C2=A0 rv =3D self.handle_user_exception(e)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1544, in handle_user_exception
=C2=A0 =C2=A0 reraise(exc_type, exc_value, tb)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1639, in full_dispatch_request
=C2=A0 =C2=A0 rv =3D self.dispatch_request()
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1625, in dispatch_request
=C2=A0 =C2=A0 return self.view_functions[rule.endpoint](**req.view_arg= s)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask_login.py",
line 792, in decorated_view
=C2=A0 =C2=A0 return func(*args, **kwargs)
=C2=A0 File "/Users/dpage/git/pgadmin4/web/pgadmin/tools/sqledito= r/__init__.py",
line 452, in get_columns
=C2=A0 =C2=A0 tid=3Dcommand_obj.obj_id)
AttributeError: 'QueryToolCommand' object has no attribute 'obj= _id'
=E2=80=8BFixed.=E2=80=8B

5) When I run the query again in pgAdmin III, then refresh the data in
pgAdmin 4, the data_default_nulls column is displayed without the
[null] marker (despite having a null value, which I confirmed in
pgAdmin 3).
=E2=80=8BFixed.=E2=80=8B

I'm sure there are other combinations of issues here. Please fix and
thoroughly re-test to ensure behaviour is consistent - and to avoid
future issues, please add some appropriate feature tests to check
nulls, defaults and empty strings are properly handled in view, insert
and updates. Murtuza recently wrote some feature tests for the query
tool - you should be able to use those as a starting point.
=E2=80=8BAdded feat= ure tests=E2=80=8B

Thanks.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--001a114e3b18a25db9054e369544-- --001a114e3b18a25dbc054e369546 Content-Type: application/octet-stream; name="RM_2257_v1.patch" Content-Disposition: attachment; filename="RM_2257_v1.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j21mhz1t0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMv Y29sdW1uL3NxbC85LjJfcGx1cy9ub2Rlcy5zcWwgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvdGVtcGxhdGVzL2NvbHVtbi9zcWwvOS4yX3BsdXMvbm9kZXMu c3FsCmluZGV4IDc1OWU2NTcuLmYzMzUzZDYgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvY29sdW1uL3NxbC85LjJfcGx1 cy9ub2Rlcy5zcWwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBs YXRlcy9jb2x1bW4vc3FsLzkuMl9wbHVzL25vZGVzLnNxbApAQCAtMSw0ICsx LDUgQEAKLVNFTEVDVCBhdHQuYXR0bmFtZSBhcyBuYW1lLCBhdHQuYXR0bnVt IGFzIE9JRCwgZm9ybWF0X3R5cGUodHkub2lkLE5VTEwpIEFTIGRhdGF0eXBl CitTRUxFQ1QgYXR0LmF0dG5hbWUgYXMgbmFtZSwgYXR0LmF0dG51bSBhcyBP SUQsIGZvcm1hdF90eXBlKHR5Lm9pZCxOVUxMKSBBUyBkYXRhdHlwZSwKK2F0 dC5hdHRub3RudWxsIGFzIG5vdF9udWxsLCBhdHQuYXR0aGFzZGVmIGFzIGhh c19kZWZhdWx0X3ZhbAogRlJPTSBwZ19hdHRyaWJ1dGUgYXR0CiAgIEpPSU4g cGdfdHlwZSB0eSBPTiB0eS5vaWQ9YXR0dHlwaWQKICAgSk9JTiBwZ19uYW1l c3BhY2UgdG4gT04gdG4ub2lkPXR5LnR5cG5hbWVzcGFjZQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9jb2x1bW4vc3Fs L2RlZmF1bHQvbm9kZXMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rl bXBsYXRlcy9jb2x1bW4vc3FsL2RlZmF1bHQvbm9kZXMuc3FsCmluZGV4IDc1 MzZhOWMuLjRmMWRlMmEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy90ZW1wbGF0ZXMvY29sdW1uL3NxbC9kZWZhdWx0L25vZGVzLnNxbAor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL2NvbHVtbi9z cWwvZGVmYXVsdC9ub2Rlcy5zcWwKQEAgLTEsNCArMSw1IEBACi1TRUxFQ1Qg YXR0LmF0dG5hbWUgYXMgbmFtZSwgYXR0LmF0dG51bSBhcyBPSUQsIGZvcm1h dF90eXBlKHR5Lm9pZCxOVUxMKSBBUyBkYXRhdHlwZQorU0VMRUNUIGF0dC5h dHRuYW1lIGFzIG5hbWUsIGF0dC5hdHRudW0gYXMgT0lELCBmb3JtYXRfdHlw ZSh0eS5vaWQsTlVMTCkgQVMgZGF0YXR5cGUsCithdHQuYXR0bm90bnVsbCBh cyBub3RfbnVsbCwgYXR0LmF0dGhhc2RlZiBhcyBoYXNfZGVmYXVsdF92YWwK IEZST00gcGdfYXR0cmlidXRlIGF0dAogICAgIEpPSU4gcGdfdHlwZSB0eSBP TiB0eS5vaWQ9YXR0dHlwaWQKICAgICBKT0lOIHBnX25hbWVzcGFjZSB0biBP TiB0bi5vaWQ9dHkudHlwbmFtZXNwYWNlCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL3NsaWNrLnBnYWRtaW4uZWRpdG9y cy5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvc2xpY2su cGdhZG1pbi5lZGl0b3JzLmpzCmluZGV4IGNkZmJhNGQuLjA1MDVmNDAgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvc2xp Y2sucGdhZG1pbi5lZGl0b3JzLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy9zbGlja2dyaWQvc2xpY2sucGdhZG1pbi5lZGl0b3JzLmpzCkBAIC0x MTAsNyArMTEwLDEyIEBACiAKICAgICAvLyBXaGVuIHRleHQgZWRpdG9yIG9w ZW5zCiAgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgewot ICAgICAgaWYgKGl0ZW1bYXJncy5jb2x1bW4ucG9zXSA9PT0gIiIpIHsKKyAg ICAgIHZhciBjb2wgPSBhcmdzLmNvbHVtbjsKKworICAgICAgaWYgKF8uaXNV bmRlZmluZWQoaXRlbVthcmdzLmNvbHVtbi5wb3NdKSAmJiBjb2wuaGFzX2Rl ZmF1bHRfdmFsKSB7CisgICAgICAgICRpbnB1dC52YWwoIiIpOworICAgICAg fQorICAgICAgZWxzZSBpZiAoaXRlbVthcmdzLmNvbHVtbi5wb3NdID09PSAi IikgewogICAgICAgICAkaW5wdXQudmFsKCInJyIpOwogICAgICAgfQogICAg ICAgZWxzZSB7CkBAIC0xNDUsNyArMTUwLDEwIEBACiAgICAgfTsKIAogICAg IHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICBy ZXR1cm4gKCEoJGlucHV0LnZhbCgpID09ICIiICYmIGRlZmF1bHRWYWx1ZSA9 PSBudWxsKSkgJiYgKCRpbnB1dC52YWwoKSAhPSBkZWZhdWx0VmFsdWUpOwor ICAgICAgLy8gVXNlIF8uaXNOdWxsKHZhbHVlKSBmb3IgY29tcGFyaXNvbiBm b3IgbnVsbCBpbnN0ZWFkIG9mCisgICAgICAvLyBkZWZhdWx0VmFsdWUgPT0g bnVsbCwgYmVjYXVzZSBpdCByZXR1cm5zIHRydWUgZm9yIHVuZGVmaW5lZCB2 YWx1ZS4KKyAgICAgIHJldHVybiAoISgkaW5wdXQudmFsKCkgPT0gIiIgJiYg Xy5pc051bGwoZGVmYXVsdFZhbHVlKSkpICYmCisgICAgICAgICgkaW5wdXQu dmFsKCkgIT0gZGVmYXVsdFZhbHVlKTsKICAgICB9OwogCiAgICAgdGhpcy52 YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHsKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3N0YXRpYy9qcy9zbGlja2dyaWQvc2xpY2sucGdhZG1pbi5mb3JtYXR0 ZXJzLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9zbGlj ay5wZ2FkbWluLmZvcm1hdHRlcnMuanMKaW5kZXggMjkwYmRkZC4uYmZkNjZl OCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3Jp ZC9zbGljay5wZ2FkbWluLmZvcm1hdHRlcnMuanMKKysrIGIvd2ViL3BnYWRt aW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9zbGljay5wZ2FkbWluLmZvcm1hdHRl cnMuanMKQEAgLTY2LDcgKzY2LDE0IEBACiAgIH0KIAogICBmdW5jdGlvbiBU ZXh0Rm9ybWF0dGVyKHJvdywgY2VsbCwgdmFsdWUsIGNvbHVtbkRlZiwgZGF0 YUNvbnRleHQpIHsKLSAgICBpZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwg dmFsdWUgPT09IG51bGwpIHsKKyAgICAvLyBJZiBjb2x1bW4gaGFzIGRlZmF1 bHQgdmFsdWUsIHNldCBwbGFjZWhvbGRlcgorICAgIGlmIChfLmlzVW5kZWZp bmVkKHZhbHVlKSAmJiBjb2x1bW5EZWYuaGFzX2RlZmF1bHRfdmFsKSB7Cisg ICAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9J3B1bGwtbGVmdCc+W2RlZmF1 bHRdPC9zcGFuPiI7CisgICAgfQorICAgIGVsc2UgaWYgKF8uaXNVbmRlZmlu ZWQodmFsdWUpICYmIGNvbHVtbkRlZi5ub3RfbnVsbCkgeworICAgICAgcmV0 dXJuICcnOyAvLyBJZiBudWxsIHZhbHVlIG5vdCBhbGxvd2VkLCBzZXQgY2Vs bCB0byBibGFuaworICAgIH0KKyAgICBlbHNlIGlmIChfLmlzVW5kZWZpbmVk KHZhbHVlKSB8fCBfLmlzTnVsbCh2YWx1ZSkpIHsKICAgICAgIHJldHVybiAi PHNwYW4gY2xhc3M9J3B1bGwtbGVmdCc+W251bGxdPC9zcGFuPiI7CiAgICAg fQogICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv c3FsZWRpdG9yL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3Fs ZWRpdG9yL19faW5pdF9fLnB5CmluZGV4IGQxMTQ5ODguLmY3NDY2ZDggMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRf Xy5weQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvX19pbml0 X18ucHkKQEAgLTQ0MCw4ICs0NDAsMjMgQEAgZGVmIGdldF9jb2x1bW5zKHRy YW5zX2lkKToKICAgICBjb2x1bW5zID0gZGljdCgpCiAgICAgY29sdW1uc19p bmZvID0gTm9uZQogICAgIHByaW1hcnlfa2V5cyA9IE5vbmUKKyAgICByc2V0 ID0gTm9uZQogICAgIHN0YXR1cywgZXJyb3JfbXNnLCBjb25uLCB0cmFuc19v YmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRy YW5zX2lkKQogICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBh bmQgc2Vzc2lvbl9vYmogaXMgbm90IE5vbmU6CisKKyAgICAgICAgdmVyID0g Y29ubi5tYW5hZ2VyLnZlcnNpb24KKyAgICAgICAgIyBHZXQgdGhlIHRlbXBs YXRlIHBhdGggZm9yIHRoZSBjb2x1bW4KKyAgICAgICAgdGVtcGxhdGVfcGF0 aCA9ICdjb2x1bW4vc3FsLyN7MH0jJy5mb3JtYXQodmVyKQorICAgICAgICBj b21tYW5kX29iaiA9IHBpY2tsZS5sb2FkcyhzZXNzaW9uX29ialsnY29tbWFu ZF9vYmonXSkKKyAgICAgICAgaWYgaGFzYXR0cihjb21tYW5kX29iaiwgJ29i al9pZCcpOgorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFt0ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnbm9kZXMuc3FsJ10pLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1jb21tYW5kX29iai5v YmpfaWQpCisgICAgICAgICAgICAjIHJvd3Mgd2l0aCBhdHRyaWJ1dGUgbm90 X251bGwKKyAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IGNvbm4uZXhlY3V0 ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Cisg ICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yc2V0KQorCiAgICAgICAgICMgQ2hlY2sgUEsgY29sdW1uIGlu Zm8gaXMgYXZhaWxhYmxlIG9yIG5vdAogICAgICAgICBpZiAncHJpbWFyeV9r ZXlzJyBpbiBzZXNzaW9uX29iajoKICAgICAgICAgICAgIHByaW1hcnlfa2V5 cyA9IHNlc3Npb25fb2JqWydwcmltYXJ5X2tleXMnXQpAQCAtNDQ5LDEwICs0 NjQsMTcgQEAgZGVmIGdldF9jb2x1bW5zKHRyYW5zX2lkKToKICAgICAgICAg IyBGZXRjaCBjb2x1bW4gaW5mb3JtYXRpb24KICAgICAgICAgY29sdW1uc19p bmZvID0gY29ubi5nZXRfY29sdW1uX2luZm8oKQogICAgICAgICBpZiBjb2x1 bW5zX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBmb3IgY29sIGlu IGNvbHVtbnNfaW5mbzoKKyAgICAgICAgICAgIGZvciBrZXksIGNvbCBpbiBl bnVtZXJhdGUoY29sdW1uc19pbmZvKToKICAgICAgICAgICAgICAgICBjb2xf dHlwZSA9IGRpY3QoKQogICAgICAgICAgICAgICAgIGNvbF90eXBlWyd0eXBl X2NvZGUnXSA9IGNvbFsndHlwZV9jb2RlJ10KICAgICAgICAgICAgICAgICBj b2xfdHlwZVsndHlwZV9uYW1lJ10gPSBOb25lCisgICAgICAgICAgICAgICAg aWYgcnNldDoKKyAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVbJ25vdF9u dWxsJ10gPSBjb2xbJ25vdF9udWxsJ10gPSBcCisgICAgICAgICAgICAgICAg ICAgICAgICByc2V0Wydyb3dzJ11ba2V5XVsnbm90X251bGwnXQorCisgICAg ICAgICAgICAgICAgICAgIGNvbF90eXBlWydoYXNfZGVmYXVsdF92YWwnXSA9 IGNvbFsnaGFzX2RlZmF1bHRfdmFsJ10gPSBcCisgICAgICAgICAgICAgICAg ICAgICAgICByc2V0Wydyb3dzJ11ba2V5XVsnaGFzX2RlZmF1bHRfdmFsJ10K KwogICAgICAgICAgICAgICAgIGNvbHVtbnNbY29sWyduYW1lJ11dID0gY29s X3R5cGUKIAogICAgICAgICAjIEFzIHdlIGNoYW5nZWQgdGhlIHRyYW5zYWN0 aW9uIG9iamVjdCB3ZSBuZWVkIHRvCkBAIC02MDIsNiArNjI0LDcgQEAgZGVm IHNhdmUodHJhbnNfaWQpOgogICAgIHN0YXR1cywgZXJyb3JfbXNnLCBjb25u LCB0cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25f c3RhdHVzKHRyYW5zX2lkKQogICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBu b3QgTm9uZSBcCiAgICAgICAgICAgICBhbmQgdHJhbnNfb2JqIGlzIG5vdCBO b25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKKyAgICAgICAgc2V0 YXR0cih0cmFuc19vYmosICdjb2x1bW5zX2luZm8nLCBzZXNzaW9uX29ialsn Y29sdW1uc19pbmZvJ10pCiAKICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBw cmltYXJ5IGtleSBmb3VuZCB0aGVuIHJldHVybiBmcm9tIHRoZSBmdW5jdGlv bi4KICAgICAgICAgaWYgbGVuKHNlc3Npb25fb2JqWydwcmltYXJ5X2tleXMn XSkgPD0gMCBvciBsZW4oY2hhbmdlZF9kYXRhKSA8PSAwOgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL2NvbW1hbmQucHkgYi93 ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5weQppbmRleCBi ZTdmMjFmLi5hOWZmNjE3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29s cy9zcWxlZGl0b3IvY29tbWFuZC5weQorKysgYi93ZWIvcGdhZG1pbi90b29s cy9zcWxlZGl0b3IvY29tbWFuZC5weQpAQCAtNDQyLDYgKzQ0MiwyMyBAQCBj bGFzcyBUYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQpOgogCiAgICAgICAgICAg ICAgICAgIyBGb3IgbmV3bHkgYWRkZWQgcm93cwogICAgICAgICAgICAgICAg IGlmIG9mX3R5cGUgPT0gJ2FkZGVkJzoKKworICAgICAgICAgICAgICAgICAg ICAjIFdoZW4gbmV3IHJvd3MgYXJlIGFkZGVkLCBvbmx5IGNoYW5nZWQgY29s dW1ucyBkYXRhIGlzCisgICAgICAgICAgICAgICAgICAgICMgc2VudCBmcm9t IGNsaWVudCBzaWRlLiBCdXQgaWYgY29sdW1uIGlzIG5vdF9udWxsIGFuZCBo YXMKKyAgICAgICAgICAgICAgICAgICAgIyBub19kZWZhdWx0X3ZhbHVlLCBz ZXQgY29sdW1uIHRvIGJsYW5rLCBpbnN0ZWFkCisgICAgICAgICAgICAgICAg ICAgICMgb2Ygbm90IG51bGwgd2hpY2ggaXMgc2V0IGJ5IGRlZmF1bHQuCisg ICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhID0ge30KKyAgICAgICAg ICAgICAgICAgICAgY29sdW1uX3R5cGUgPSB7fQorICAgICAgICAgICAgICAg ICAgICBmb3IgZWFjaF9jb2wgaW4gc2VsZi5jb2x1bW5zX2luZm86CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2VsZi5jb2x1bW5zX2luZm9bZWFjaF9jb2xdWydub3RfbnVs bCddIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxm LmNvbHVtbnNfaW5mb1tlYWNoX2NvbF1bCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdoYXNfZGVmYXVsdF92YWwnXQorICAgICAgICAgICAg ICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b2x1bW5fZGF0YVtlYWNoX2NvbF0gPSAiIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbHVtbl90eXBlW2VhY2hfY29sXSA9XAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbnNfaW5mb1tlYWNo X2NvbF1bJ3R5cGVfbmFtZSddCisKICAgICAgICAgICAgICAgICAgICAgZm9y IGVhY2hfcm93IGluIGNoYW5nZWRfZGF0YVtvZl90eXBlXToKICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGEgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1b ZWFjaF9yb3ddWydkYXRhJ10KICAgICAgICAgICAgICAgICAgICAgICAgICMg UmVtb3ZlIG91ciB1bmlxdWUgdHJhY2tpbmcga2V5CkBAIC00NTAsMTIgKzQ2 NywxOCBAQCBjbGFzcyBUYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQpOgogICAg ICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlID0gc2V0X2NvbHVtbl9u YW1lcyhjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydkYXRhX3R5 cGUnXSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfcm93aWQu YXBwZW5kKGRhdGEuZ2V0KCdfX3RlbXBfUEsnKSkKIAorICAgICAgICAgICAg ICAgICAgICAgICAgIyBVcGRhdGUgY29sdW1ucyB2YWx1ZSBhbmQgZGF0YSB0 eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHdpdGggY29sdW1ucyBo YXZpbmcgbm90X251bGw9RmFsc2UgYW5kIGhhcworICAgICAgICAgICAgICAg ICAgICAgICAgIyBubyBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICAgICAg ICAgICAgICBjb2x1bW5fZGF0YS51cGRhdGUoZGF0YSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbHVtbl90eXBlLnVwZGF0ZShkYXRhX3R5cGUpCisK ICAgICAgICAgICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ2luc2VydC5zcWwnXSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YV90b19iZV9zYXZlZD1kYXRhLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9fYmVfc2F2ZWQ9Y29s dW1uX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbWFyeV9rZXlzPU5vbmUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X25hbWU9 c2VsZi5vYmplY3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1zZWxmLm5zcF9uYW1lLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGFfdHlwZT1kYXRhX3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlPWNvbHVtbl90eXBl KQogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWwuYXBwZW5k KHNxbCkKIAogICAgICAgICAgICAgICAgICMgRm9yIHVwZGF0ZWQgcm93cwpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBs YXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpzIGIvd2ViL3BnYWRtaW4v dG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3FsZWRp dG9yLmpzCmluZGV4IDIwNjJhYTIuLmFkOWE1NjUgMTAwNjQ0Ci0tLSBhL3dl Yi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9y L2pzL3NxbGVkaXRvci5qcworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxl ZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9qcy9zcWxlZGl0b3IuanMKQEAg LTUyNiw2ICs1MjYsMTMgQEAgZGVmaW5lKAogICAgICAgcmVuZGVyX2dyaWQ6 IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGNvbHVtbnMsIGlzX2VkaXRhYmxlKSB7 CiAgICAgICAgIHZhciBzZWxmID0gdGhpczsKIAorICAgICAgICB2YXIgcmVx dWlyZWRGaWVsZFZhbGlkYXRvciA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg ICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5l ZCB8fCAhdmFsdWUubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4ge3Zh bGlkOiBmYWxzZSwgbXNnOiAiVGhpcyBpcyBhIHJlcXVpcmVkIGZpZWxkIn07 CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB7dmFs aWQ6IHRydWUsIG1zZzogbnVsbH07CisgICAgICAgICAgfQorICAgICAgICB9 CiAgICAgICAgIC8vIFRoaXMgd2lsbCB3b3JrIGFzIGRhdGEgc3RvcmUgYW5k IGhvbGRzIGFsbCB0aGUKICAgICAgICAgLy8gaW5zZXJ0ZWQvdXBkYXRlZC9k ZWxldGVkIGRhdGEgZnJvbSBncmlkCiAgICAgICAgIHNlbGYuaGFuZGxlci5k YXRhX3N0b3JlID0gewpAQCAtNTU3LDcgKzU2NCwxMCBAQCBkZWZpbmUoCiAg ICAgICAgICAgICAgIGlkOiBjLm5hbWUsCiAgICAgICAgICAgICAgIHBvczog Yy5wb3MsCiAgICAgICAgICAgICAgIGZpZWxkOiBjLm5hbWUsCi0gICAgICAg ICAgICAgIG5hbWU6IGMubGFiZWwKKyAgICAgICAgICAgICAgbmFtZTogYy5s YWJlbCwKKyAgICAgICAgICAgICAgbm90X251bGw6IGMubm90X251bGwsCisg ICAgICAgICAgICAgIGhhc19kZWZhdWx0X3ZhbDogYy5oYXNfZGVmYXVsdF92 YWwsCisgICAgICAgICAgICAgIHZhbGlkYXRvcjogYy5ub3RfbnVsbCA/IHJl cXVpcmVkRmllbGRWYWxpZGF0b3IgOiBudWxsCiAgICAgICAgICAgICB9Owog CiAgICAgICAgICAgICAvLyBHZXQgdGhlIGNvbHVtbnMgd2lkdGggYmFzZWQg b24gZGF0YSB0eXBlCkBAIC0yMDc3LDcgKzIwODcsOSBAQCBkZWZpbmUoCiAg ICAgICAgICAgICAgICAgICAgICdsYWJlbCc6IGNvbHVtbl9sYWJlbCwKICAg ICAgICAgICAgICAgICAgICAgJ2NlbGwnOiBjb2xfY2VsbCwKICAgICAgICAg ICAgICAgICAgICAgJ2Nhbl9lZGl0Jzogc2VsZi5jYW5fZWRpdCwKLSAgICAg ICAgICAgICAgICAgICAgJ3R5cGUnOiB0eXBlCisgICAgICAgICAgICAgICAg ICAgICd0eXBlJzogdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgJ25vdF9u dWxsJzogYy5ub3RfbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgJ2hhc19k ZWZhdWx0X3ZhbCc6IGMuaGFzX2RlZmF1bHRfdmFsCiAgICAgICAgICAgICAg ICAgICB9OwogICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNvbCk7 CiAgICAgICAgICAgICAgICAgfSk7Cg== --001a114e3b18a25dbc054e369546 Content-Type: application/octet-stream; name="features_test_cases_RM_2257.patch" Content-Disposition: attachment; filename="features_test_cases_RM_2257.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j21mjad81 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMvdGVzdF9k YXRhLmpzb24gYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL3Rlc3RfZGF0 YS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcx MDAwNDgKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9mZWF0dXJl X3Rlc3RzL3Rlc3RfZGF0YS5qc29uCkBAIC0wLDAgKzEsMjMgQEAKK3sKKyAg InRhYmxlX2luc2VydF91cGRhdGVfY2FzZXMiOiB7CisgICAgImluc2VydCI6 IHsKKyAgICAgICJpbnNlcnRfd2l0aF9kZWZhdWx0cyI6IHsKKyAgICAgICAg ImlkIjogIjEiLAorICAgICAgICAiZGF0YV9kZWZhdWx0X251bGxzIjogImFi YzEyMyIsCisgICAgICAgICJkYXRhX2RlZmF1bHRfbm9fbnVsbHMiOiAiZGVm NDU2IgorICAgICAgfQorICAgIH0sCisgICAgInVwZGF0ZSI6IHsKKyAgICAg ICJ1cGRhdGVfd2l0aF9udWxsX3ZhbHVlIjogeworICAgICAgICAiaWQiOiAi MyIsCisgICAgICAgICJkYXRhX2RlZmF1bHRfbnVsbHMiOiAiIiwKKyAgICAg ICAgImRhdGFfbnVsbHMiOiAiIgorICAgICAgfSwKKyAgICAgICJ1cGRhdGVf d2l0aF9lbXB0eV9zdHJpbmciOiB7CisgICAgICAgICJpZCI6ICIyIiwKKyAg ICAgICAgImRhdGFfZGVmYXVsdF9udWxscyI6ICInJyIsCisgICAgICAgICJk YXRhX251bGxzIjogIicnIgorICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2ZlYXR1cmVfdGVzdHMvdmlld19kYXRhX2RtbF9xdWVyaWVzLnB5IGIv d2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy92aWV3X2RhdGFfZG1sX3F1ZXJp ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0 NTA3MQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2ZlYXR1cmVf dGVzdHMvdmlld19kYXRhX2RtbF9xdWVyaWVzLnB5CkBAIC0wLDAgKzEsMzAx IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0Fk bWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykg MjAxMyAtIDIwMTcsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMg VGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNR TCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor CitpbXBvcnQganNvbgoraW1wb3J0IG9zCitmcm9tIHNlbGVuaXVtLndlYmRy aXZlciBpbXBvcnQgQWN0aW9uQ2hhaW5zCitmcm9tIHJlZ3Jlc3Npb24ucHl0 aG9uX3Rlc3RfdXRpbHMgaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gcmVncmVz c2lvbi5mZWF0dXJlX3V0aWxzLmJhc2VfZmVhdHVyZV90ZXN0IGltcG9ydCBC YXNlRmVhdHVyZVRlc3QKK2ltcG9ydCB0aW1lCitmcm9tIHNlbGVuaXVtLndl YmRyaXZlci5jb21tb24ua2V5cyBpbXBvcnQgS2V5cworCisKK0NVUlJFTlRf UEFUSCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmls ZV9fKSkKKwordHJ5OgorICAgIHdpdGggb3BlbihDVVJSRU5UX1BBVEggKyAn L3Rlc3RfZGF0YS5qc29uJykgYXMgZGF0YV9maWxlOgorICAgICAgICBjb25m aWdfZGF0YSA9IGpzb24ubG9hZChkYXRhX2ZpbGUpWyd0YWJsZV9pbnNlcnRf dXBkYXRlX2Nhc2VzJ10KK2V4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICBw cmludChzdHIoZSkpCisKKworY2xhc3MgQ2hlY2tGb3JWaWV3RGF0YVRlc3Qo QmFzZUZlYXR1cmVUZXN0KToKKyAgICAiIiIKKyAgICBUZXN0IGNhc2VzIHRv IHZhbGlkYXRlIGluc2VydCwgdXBkYXRlIG9wZXJhdGlvbnMgaW4gdGFibGUK KyAgICB3aXRoIGlucHV0IHRlc3QgZGF0YQorCisgICAgRmlyc3Qgb2YgYWxs LCB0aGUgdGVzdCBkYXRhIGlzIGluc2VydGVkL3VwZGF0ZWQgaW50byB0YWJs ZSBhbmQgdGhlbgorICAgIGluc2VydGVkIGRhdGEgaXMgY29tcGFyZWQgd2l0 aCBvcmlnaW5hbCBkYXRhIHRvIGNoZWNrIGlmIGV4cGVjdGVkIGRhdGEKKyAg ICBpcyByZXR1cm5lZCBmcm9tIHRhYmxlIG9yIG5vdC4KKworICAgIFdlIHdp bGwgY292ZXIgdGVzdCBjYXNlcyBmb3IsCisgICAgICAgIDEpIEluc2VydCB3 aXRoIGRlZmF1bHQgdmFsdWVzCisgICAgICAgIDIpIFVwZGF0ZSB3aXRoIG51 bGwgdmFsdWVzCisgICAgICAgIDMpIFVwZGF0ZSB3aXRoIGJsYW5rIHN0cmlu ZworICAgICAgICA0KSBEZWxldGUgdGFibGUgcm93CisgICAgIiIiCisKKyAg ICBzY2VuYXJpb3MgPSBbCisgICAgICAgICgiVmFsaWRhdGUgSW5zZXJ0LCBV cGRhdGUgb3BlcmF0aW9ucyBpbiBWaWV3IGRhdGEgd2l0aCBnaXZlbiB0ZXN0 ICIKKyAgICAgICAgICJkYXRhIiwKKyAgICAgICAgIGRpY3QoKSkKKyAgICBd CisKKyAgICAjIFRvIGNyZWF0ZSBjb2x1bW4gaWQgd2l0aCBuZXh0dmFsLCBm aXJzdCBhIHNlcXVlbmNlIG11c3QgYmUgY3JlYXRlZC4KKyAgICBjcmVhdGVf c2VxdWVuY2UgPSAiIiIKK0NSRUFURSBTRVFVRU5DRSBwdWJsaWMuZGVmYXVs dHNfaWRfc2VxCisgICAgSU5DUkVNRU5UIDEKKyAgICBTVEFSVCA5CisgICAg TUlOVkFMVUUgMQorICAgIE1BWFZBTFVFIDkyMjMzNzIwMzY4NTQ3NzU4MDcK KyAgICBDQUNIRSAxOworCitBTFRFUiBTRVFVRU5DRSBwdWJsaWMuZGVmYXVs dHNfaWRfc2VxCisgICAgT1dORVIgVE8gcG9zdGdyZXM7CisgICAgICAgICIi IgorCisgICAgIyBxdWVyeSBmb3IgY3JlYXRpbmcgJ2RlZmF1bHRzJyB0YWJs ZQorICAgIGNyZWF0ZV90YWJsZV9xdWVyeSA9ICIiIgorQ1JFQVRFIFRBQkxF IHB1YmxpYy5kZWZhdWx0cworKAorICAgIGlkIGJpZ2ludCBOT1QgTlVMTCBE RUZBVUxUIG5leHR2YWwoJ2RlZmF1bHRzX2lkX3NlcSc6OnJlZ2NsYXNzKSwK KyAgICBkYXRhX2RlZmF1bHRfbnVsbHMgdGV4dCBDT0xMQVRFIHBnX2NhdGFs b2cuImRlZmF1bHQiIERFRkFVTFQgJ2FiYzEyMyc6OnRleHQsCisgICAgZGF0 YV9kZWZhdWx0X25vX251bGxzIHRleHQgQ09MTEFURSBwZ19jYXRhbG9nLiJk ZWZhdWx0IiBOT1QgTlVMTAorREVGQVVMVCAnZGVmNDU2Jzo6dGV4dCwKKyAg ICBkYXRhX251bGxzIHRleHQgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0 IiwKKyAgICBkYXRhX25vX251bGxzIHRleHQgQ09MTEFURSBwZ19jYXRhbG9n LiJkZWZhdWx0IiBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGRlZmF1bHRz X3BrZXkgUFJJTUFSWSBLRVkgKGlkKQorKQorICAgICIiIgorCisgICAgZGVm IGJlZm9yZShzZWxmKToKKyAgICAgICAgY29ubmVjdGlvbiA9IHRlc3RfdXRp bHMuZ2V0X2RiX2Nvbm5lY3Rpb24oc2VsZi5zZXJ2ZXJbJ2RiJ10sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlbGYuc2VydmVyWyd1c2VybmFtZSddLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclsn ZGJfcGFzc3dvcmQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJbJ2hvc3QnXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5zZXJ2ZXJbJ3BvcnQnXSkKKyAgICAgICAgdGVzdF91dGlscy5k cm9wX2RhdGFiYXNlKGNvbm5lY3Rpb24sICJhY2NlcHRhbmNlX3Rlc3RfZGIi KQorICAgICAgICB0ZXN0X3V0aWxzLmNyZWF0ZV9kYXRhYmFzZShzZWxmLnNl cnZlciwgImFjY2VwdGFuY2VfdGVzdF9kYiIpCisgICAgICAgIHRlc3RfdXRp bHMuY3JlYXRlX3RhYmxlX3dpdGhfcXVlcnkoCisgICAgICAgICAgICBzZWxm LnNlcnZlciwKKyAgICAgICAgICAgICJhY2NlcHRhbmNlX3Rlc3RfZGIiLAor ICAgICAgICAgICAgQ2hlY2tGb3JWaWV3RGF0YVRlc3QuY3JlYXRlX3NlcXVl bmNlKQorCisgICAgICAgIHRlc3RfdXRpbHMuY3JlYXRlX3RhYmxlX3dpdGhf cXVlcnkoCisgICAgICAgICAgICBzZWxmLnNlcnZlciwKKyAgICAgICAgICAg ICJhY2NlcHRhbmNlX3Rlc3RfZGIiLAorICAgICAgICAgICAgQ2hlY2tGb3JW aWV3RGF0YVRlc3QuY3JlYXRlX3RhYmxlX3F1ZXJ5KQorCisgICAgZGVmIHJ1 blRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9zcGlu bmVyX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNlbGYuX2Nvbm5lY3RzX3Rv X3NlcnZlcigpCisgICAgICAgIHNlbGYuX3RhYmxlc19ub2RlX2V4cGFuZGFi bGUoKQorCisgICAgICAgICMgT3BlbiBPYmplY3QgLT4gVmlldyBkYXRhCisg ICAgICAgIHNlbGYuX2NoZWNrX3hzc19pbl92aWV3X2RhdGEoKQorCisgICAg ICAgICMgUnVuIHRlc3QgdG8gaW5zZXJ0IGEgbmV3IHJvdyBpbiB0YWJsZSB3 aXRoIGRlZmF1bHQgdmFsdWVzCisgICAgICAgIHNlbGYuX2luc2VydF9yb3df aW5fdGFibGUoKQorCisgICAgICAgICMgUnVuIHRlc3QgdG8gdXBkYXRlIGEg cm93IGluIHRhYmxlIHdpdGggbnVsbCB2YWx1ZXMKKyAgICAgICAgc2VsZi5f dXBkYXRlX3Jvd19pbl90YWJsZSgpCisKKyAgICAgICAgIyBSdW4gdGVzdCBj YXNlIHRvIHJlbW92ZSBleGlzdGVkIHJvdworICAgICAgICBzZWxmLl9yZW1v dmVfcm93KCkKKworICAgIGRlZiBhZnRlcihzZWxmKToKKyAgICAgICAgdGlt ZS5zbGVlcCgxKQorICAgICAgICBzZWxmLnBhZ2UucmVtb3ZlX3NlcnZlcihz ZWxmLnNlcnZlcikKKyAgICAgICAgY29ubmVjdGlvbiA9IHRlc3RfdXRpbHMu Z2V0X2RiX2Nvbm5lY3Rpb24oc2VsZi5zZXJ2ZXJbJ2RiJ10sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl bGYuc2VydmVyWyd1c2VybmFtZSddLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclsnZGJf cGFzc3dvcmQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJbJ2hvc3QnXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2VsZi5zZXJ2ZXJbJ3BvcnQnXSkKKyAgICAgICAgdGVzdF91dGlscy5kcm9w X2RhdGFiYXNlKGNvbm5lY3Rpb24sICJhY2NlcHRhbmNlX3Rlc3RfZGIiKQor CisgICAgZGVmIF9jb25uZWN0c190b19zZXJ2ZXIoc2VsZik6CisgICAgICAg IHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKCIvLypbQGNsYXNzPSdhY2lUcmVl VGV4dCcgYW5kIC49J1NlcnZlcnMnXSIpLmNsaWNrKCkKKyAgICAgICAgc2Vs Zi5wYWdlLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJPYmpl Y3QiKS5jbGljaygpCisgICAgICAgIEFjdGlvbkNoYWlucyhzZWxmLnBhZ2Uu ZHJpdmVyKSBcCisgICAgICAgICAgICAubW92ZV90b19lbGVtZW50KHNlbGYu cGFnZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQ3JlYXRl IikpIFwKKyAgICAgICAgICAgIC5wZXJmb3JtKCkKKyAgICAgICAgc2VsZi5w YWdlLmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIlNlcnZlci4uLiIpLmNs aWNrKCkKKworICAgICAgICBzZXJ2ZXJfY29uZmlnID0gc2VsZi5zZXJ2ZXIK KyAgICAgICAgc2VsZi5wYWdlLmZpbGxfaW5wdXRfYnlfZmllbGRfbmFtZSgi bmFtZSIsIHNlcnZlcl9jb25maWdbJ25hbWUnXSkKKyAgICAgICAgc2VsZi5w YWdlLmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIkNvbm5lY3Rpb24iKS5j bGljaygpCisgICAgICAgIHNlbGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxk X25hbWUoImhvc3QiLCBzZXJ2ZXJfY29uZmlnWydob3N0J10pCisgICAgICAg IHNlbGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoInBvcnQiLCBz ZXJ2ZXJfY29uZmlnWydwb3J0J10pCisgICAgICAgIHNlbGYucGFnZS5maWxs X2lucHV0X2J5X2ZpZWxkX25hbWUoInVzZXJuYW1lIiwgc2VydmVyX2NvbmZp Z1sndXNlcm5hbWUnXSkKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfaW5wdXRf YnlfZmllbGRfbmFtZSgicGFzc3dvcmQiLCBzZXJ2ZXJfY29uZmlnWydkYl9w YXNzd29yZCddKQorICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgi Ly9idXR0b25bY29udGFpbnMoLiwnU2F2ZScpXSIpLmNsaWNrKCkKKworICAg IGRlZiBfdGFibGVzX25vZGVfZXhwYW5kYWJsZShzZWxmKToKKyAgICAgICAg c2VsZi5wYWdlLnRvZ2dsZV9vcGVuX3RyZWVfaXRlbShzZWxmLnNlcnZlclsn bmFtZSddKQorICAgICAgICBzZWxmLnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9p dGVtKCdEYXRhYmFzZXMnKQorICAgICAgICBzZWxmLnBhZ2UudG9nZ2xlX29w ZW5fdHJlZV9pdGVtKCdhY2NlcHRhbmNlX3Rlc3RfZGInKQorICAgICAgICBz ZWxmLnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9pdGVtKCdTY2hlbWFzJykKKyAg ICAgICAgc2VsZi5wYWdlLnRvZ2dsZV9vcGVuX3RyZWVfaXRlbSgncHVibGlj JykKKyAgICAgICAgc2VsZi5wYWdlLnRvZ2dsZV9vcGVuX3RyZWVfaXRlbSgn VGFibGVzJykKKyAgICAgICAgc2VsZi5wYWdlLnNlbGVjdF90cmVlX2l0ZW0o ImRlZmF1bHRzIikKKworICAgIGRlZiBfY2hlY2tfeHNzX2luX3ZpZXdfZGF0 YShzZWxmKToKKyAgICAgICAgc2VsZi5wYWdlLmRyaXZlci5maW5kX2VsZW1l bnRfYnlfbGlua190ZXh0KCJPYmplY3QiKS5jbGljaygpCisgICAgICAgIEFj dGlvbkNoYWlucyhzZWxmLnBhZ2UuZHJpdmVyKSBcCisgICAgICAgICAgICAu bW92ZV90b19lbGVtZW50KAorICAgICAgICAgICAgICAgIHNlbGYucGFnZS5k cml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiVmlldyBEYXRhIikp IFwKKyAgICAgICAgICAgIC5wZXJmb3JtKCkKKyAgICAgICAgc2VsZi5wYWdl LmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIlZpZXcgQWxsIFJvd3MiKS5j bGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5w YWdlLmRyaXZlci5zd2l0Y2hfdG8uZnJhbWUoCisgICAgICAgICAgICBzZWxm LnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV90YWdfbmFtZSgnaWZyYW1l JykKKyAgICAgICAgKQorCisgICAgZGVmIF9pbnNlcnRfcm93X2luX3RhYmxl KHNlbGYpOgorICAgICAgICB4cGF0aF9jb2wxID0gIi8vZGl2W2NvbnRhaW5z KEBjbGFzcywgJ25ldy1yb3cnKV0vL2RpdlsiIFwKKyAgICAgICAgICAgICAg ICAgICAgICJjb250YWlucyhAY2xhc3MsICdyMScpXSIKKyAgICAgICAgdGlt ZS5zbGVlcCgxKQorICAgICAgICBuZXdfcm93ID0gc2VsZi5wYWdlLmZpbmRf YnlfeHBhdGgoeHBhdGhfY29sMSkKKyAgICAgICAgbmV3X3Jvdy5jbGljaygp CisgICAgICAgIGZpZWxkID0gbmV3X3Jvdy5maW5kX2VsZW1lbnRfYnlfeHBh dGgoIi4vL2lucHV0IikKKyAgICAgICAgZmllbGQuY2xpY2soKQorICAgICAg ICBBY3Rpb25DaGFpbnMoc2VsZi5kcml2ZXIpLnNlbmRfa2V5cygKKyAgICAg ICAgICAgIGNvbmZpZ19kYXRhWydpbnNlcnQnXVsnaW5zZXJ0X3dpdGhfZGVm YXVsdHMnXVsnaWQnXQorICAgICAgICApLnBlcmZvcm0oKQorICAgICAgICBm aWVsZC5zZW5kX2tleXMoS2V5cy5UQUIpCisgICAgICAgIHNlbGYucGFnZS5m aW5kX2J5X2lkKCJidG4tc2F2ZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5f dmVyaWZ5X2luc2VydF9kYXRhKCkKKworICAgIGRlZiBfdmVyaWZ5X2luc2Vy dF9kYXRhKHNlbGYpOgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAg ICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkK KyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBtYWluX2VsID0gc2Vs Zi5wYWdlLmZpbmRfYnlfeHBhdGgoJy8vKltAaWQ9ImRhdGFncmlkIl0nKQor ICAgICAgICBjZWxsMSA9IG1haW5fZWwuZmluZF9lbGVtZW50X2J5X3hwYXRo KAorICAgICAgICAgICAgJy4vL2Rpdltjb250YWlucyhAY2xhc3MsICJyMSIp XS8vc3BhbicKKyAgICAgICAgKS5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwn KQorICAgICAgICBjZWxsMiA9IG1haW5fZWwuZmluZF9lbGVtZW50X2J5X3hw YXRoKAorICAgICAgICAgICAgJy4vL2Rpdltjb250YWlucyhAY2xhc3MsICJy MiIpXScKKyAgICAgICAgKS5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKQor ICAgICAgICBjZWxsMyA9IG1haW5fZWwuZmluZF9lbGVtZW50X2J5X3hwYXRo KAorICAgICAgICAgICAgJy4vL2Rpdltjb250YWlucyhAY2xhc3MsICJyMyIp XScKKyAgICAgICAgKS5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKQorCisg ICAgICAgIHRlc3RfdmVyaWZ5X2RhdGEgPSBjb25maWdfZGF0YVsnaW5zZXJ0 J11bJ2luc2VydF93aXRoX2RlZmF1bHRzJ10KKworICAgICAgICAjIGNvbXBh cmUgdXBkYXRlZCBjZWxsIHZhbHVlcyB3aXRoIG9yaWdpbmFsIHZhbHVlcwor ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjZWxsMSwgdGVzdF92ZXJpZnlf ZGF0YVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2VsbDIs IHRlc3RfdmVyaWZ5X2RhdGFbJ2RhdGFfZGVmYXVsdF9udWxscyddKQorICAg ICAgICBzZWxmLmFzc2VydEVxdWFscyhjZWxsMywgdGVzdF92ZXJpZnlfZGF0 YVsnZGF0YV9kZWZhdWx0X25vX251bGxzJ10pCisKKyAgICBkZWYgX3VwZGF0 ZV9yb3dfaW5fdGFibGUoc2VsZik6CisgICAgICAgIHhwYXRoX2NlbGwxID0g Ii8vZGl2W2NvbnRhaW5zKEBjbGFzcywgJ2V2ZW4nKV0vL2RpdlsiIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJjb250YWlucyhAY2xhc3MsICdyMScp XSIKKyAgICAgICAgeHBhdGhfY2VsbDIgPSAiLy9kaXZbY29udGFpbnMoQGNs YXNzLCAnZXZlbicpXS8vZGl2WyIgXAorICAgICAgICAgICAgICAgICAgICAg ICAgImNvbnRhaW5zKEBjbGFzcywgJ3IyJyldIgorICAgICAgICB4cGF0aF9j ZWxsMyA9ICIvL2Rpdltjb250YWlucyhAY2xhc3MsICdldmVuJyldLy9kaXZb IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiY29udGFpbnMoQGNsYXNz LCAncjQnKV0iCisgICAgICAgIGZvciB2YWx1ZSBpbiBjb25maWdfZGF0YVsn dXBkYXRlJ106CisgICAgICAgICAgICBjZWxsMSA9IGNvbmZpZ19kYXRhWyd1 cGRhdGUnXVt2YWx1ZV1bJ2lkJ10KKyAgICAgICAgICAgIGNlbGwyID0gY29u ZmlnX2RhdGFbJ3VwZGF0ZSddW3ZhbHVlXVsnZGF0YV9kZWZhdWx0X251bGxz J10KKyAgICAgICAgICAgIGNlbGwzID0gY29uZmlnX2RhdGFbJ3VwZGF0ZSdd W3ZhbHVlXVsnZGF0YV9udWxscyddCisKKyAgICAgICAgICAgICMgU2VhcmNo IGNlbGwgMSBhbmQgdXBkYXRlIHdpdGggZ2l2ZW4gZGF0YQorICAgICAgICAg ICAgdGltZS5zbGVlcCgyKQorICAgICAgICAgICAgY2VsbDFfZWwgPSBzZWxm LnBhZ2UuZmluZF9ieV94cGF0aCh4cGF0aF9jZWxsMSkKKyAgICAgICAgICAg IEFjdGlvbkNoYWlucyhzZWxmLmRyaXZlcikubW92ZV90b19lbGVtZW50KGNl bGwxX2VsKS5kb3VibGVfY2xpY2soCisgICAgICAgICAgICAgICAgY2VsbDFf ZWwKKyAgICAgICAgICAgICkucGVyZm9ybSgpCisgICAgICAgICAgICBmaWVs ZCA9IGNlbGwxX2VsLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi8vaW5wdXQi KQorICAgICAgICAgICAgZmllbGQuY2xlYXIoKQorICAgICAgICAgICAgZmll bGQuY2xpY2soKQorICAgICAgICAgICAgQWN0aW9uQ2hhaW5zKHNlbGYuZHJp dmVyKS5zZW5kX2tleXMoY2VsbDEpLnBlcmZvcm0oKQorICAgICAgICAgICAg ZmllbGQuc2VuZF9rZXlzKEtleXMuVEFCKSAgIyBQcmVzcyB0YWIga2V5CisK KyAgICAgICAgICAgICMgU2VhcmNoIGNlbGwgMiBhbmQgdXBkYXRlIHdpdGgg Z2l2ZW4gZGF0YQorICAgICAgICAgICAgY2VsbDJfZWwgPSBzZWxmLnBhZ2Uu ZmluZF9ieV94cGF0aCh4cGF0aF9jZWxsMikKKyAgICAgICAgICAgIEFjdGlv bkNoYWlucyhzZWxmLmRyaXZlcikubW92ZV90b19lbGVtZW50KGNlbGwyX2Vs KS5kb3VibGVfY2xpY2soCisgICAgICAgICAgICAgICAgY2VsbDJfZWwpLnBl cmZvcm0oKQorICAgICAgICAgICAgZmllbGQgPSBzZWxmLnBhZ2UuZHJpdmVy LmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoCisgICAgICAgICAgICAg ICAgImRpdltzdHlsZSo9J3otaW5kZXg6IDEwMDAnXSB0ZXh0YXJlYSIKKyAg ICAgICAgICAgICkKKyAgICAgICAgICAgIGZpZWxkLmNsZWFyKCkKKyAgICAg ICAgICAgIGZpZWxkLmNsaWNrKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAo MSkKKyAgICAgICAgICAgIEFjdGlvbkNoYWlucyhzZWxmLmRyaXZlcikuc2Vu ZF9rZXlzKGNlbGwyKS5wZXJmb3JtKCkKKyAgICAgICAgICAgIHRpbWUuc2xl ZXAoMSkKKyAgICAgICAgICAgIHNlbGYucGFnZS5kcml2ZXIuZmluZF9lbGVt ZW50X2J5X2Nzc19zZWxlY3RvcigKKyAgICAgICAgICAgICAgICAiZGl2W3N0 eWxlKj0nei1pbmRleDogMTAwMCddIGRpdiBidXR0b246Zmlyc3QtY2hpbGQi CisgICAgICAgICAgICApLmNsaWNrKCkgICMgQ2xpY2sgb24gZWRpdG9yJ3Mg U2F2ZSBidXR0b24KKworICAgICAgICAgICAgIyBTZWFyY2ggY2VsbCAzIGFu ZCB1cGRhdGUgd2l0aCBnaXZlbiBkYXRhCisgICAgICAgICAgICBjZWxsM19l bCA9IHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKHhwYXRoX2NlbGwzKQorICAg ICAgICAgICAgQWN0aW9uQ2hhaW5zKHNlbGYuZHJpdmVyKS5tb3ZlX3RvX2Vs ZW1lbnQoY2VsbDNfZWwpLmRvdWJsZV9jbGljaygKKyAgICAgICAgICAgICAg ICBjZWxsM19lbCkucGVyZm9ybSgpCisgICAgICAgICAgICBmaWVsZCA9IHNl bGYucGFnZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigK KyAgICAgICAgICAgICAgICAiZGl2W3N0eWxlKj0nei1pbmRleDogMTAwMCdd IHRleHRhcmVhIgorICAgICAgICAgICAgKQorICAgICAgICAgICAgZmllbGQu Y2xlYXIoKQorICAgICAgICAgICAgZmllbGQuY2xpY2soKQorICAgICAgICAg ICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgICAgICBBY3Rpb25DaGFpbnMo c2VsZi5kcml2ZXIpLnNlbmRfa2V5cyhjZWxsMykucGVyZm9ybSgpCisgICAg ICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgICAgIHNlbGYucGFn ZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigKKyAgICAg ICAgICAgICAgICAiZGl2W3N0eWxlKj0nei1pbmRleDogMTAwMCddIGRpdiBi dXR0b246Zmlyc3QtY2hpbGQiCisgICAgICAgICAgICApLmNsaWNrKCkgICMg Q2xpY2sgb24gZWRpdG9yJ3MgU2F2ZSBidXR0b24KKyAgICAgICAgICAgIHNl bGYucGFnZS5maW5kX2J5X2lkKCJidG4tc2F2ZSIpLmNsaWNrKCkgICMgU2F2 ZSBkYXRhCisgICAgICAgICAgICBzZWxmLl92ZXJpZnlfdXBkYXRlX2RhdGEo dmFsdWUpICMgVmVyaWZ5IHVwZGF0ZWQgZGF0YSB3aXRoIG9yaWdpbmFsCisK KyAgICBkZWYgX3ZlcmlmeV91cGRhdGVfZGF0YShzZWxmLCB0ZXN0X2Nhc2Up OgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgc2VsZi5wYWdl LmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkKKyAgICAgICAgdGlt ZS5zbGVlcCgxKQorICAgICAgICBtYWluX2VsID0gc2VsZi5wYWdlLmZpbmRf YnlfeHBhdGgoJy8vKltAaWQ9ImRhdGFncmlkIl0nKQorICAgICAgICBjZWxs MSA9IG1haW5fZWwuZmluZF9lbGVtZW50X2J5X3hwYXRoKAorICAgICAgICAg ICAgJy4vL2Rpdltjb250YWlucyhAY2xhc3MsICJyMSIpXS8vc3BhbicKKyAg ICAgICAgKS5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKQorCisgICAgICAg IGZyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IE5vU3Vj aEVsZW1lbnRFeGNlcHRpb24KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg Y2VsbDIgPSBtYWluX2VsLmZpbmRfZWxlbWVudF9ieV94cGF0aCgKKyAgICAg ICAgICAgICAgICAnLi8vZGl2W2NvbnRhaW5zKEBjbGFzcywgInIyIildLy9z cGFuJworICAgICAgICAgICAgKS5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwn KQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjoKKyAg ICAgICAgICAgICMgaWYgW251bGxdIG5vdCBmb3VuZCwgdGhlbiBpdCBpcyBh biBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgIGNlbGwyID0gIicnIgorCisg ICAgICAgIHRyeToKKyAgICAgICAgICAgIGNlbGw0ID0gbWFpbl9lbC5maW5k X2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAgICAgICAgICAgJy4vL2Rpdltj b250YWlucyhAY2xhc3MsICJyNCIpXS8vc3BhbicKKyAgICAgICAgICAgICku Z2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1MJykKKyAgICAgICAgZXhjZXB0IE5v U3VjaEVsZW1lbnRFeGNlcHRpb246CisgICAgICAgICAgICAjIGlmIFtudWxs XSBub3QgZm91bmQsIHRoZW4gaXQgaXMgYW4gZW1wdHkgc3RyaW5nCisgICAg ICAgICAgICBjZWxsNCA9ICInJyIKKworICAgICAgICAjIEhhbmRsZSBjZWxs cyBoYXZpbmcgW251bGxdIHZhbHVlcworICAgICAgICAjIElmIGNlbGwgaGFz IFtudWxsXSByZXBsYWNlIGl0IHdpdGggJycgc2luZ2xlIHF1b3RlcworICAg ICAgICBjZWxsMSA9ICcnIGlmIGNlbGwxID09ICdbbnVsbF0nIGVsc2UgY2Vs bDEKKyAgICAgICAgY2VsbDIgPSAnJyBpZiBjZWxsMiA9PSAnW251bGxdJyBl bHNlIGNlbGwyCisgICAgICAgIGNlbGw0ID0gJycgaWYgY2VsbDQgPT0gJ1tu dWxsXScgZWxzZSBjZWxsNAorCisgICAgICAgIHRlc3RfdmVyaWZ5X2RhdGEg PSBjb25maWdfZGF0YVsndXBkYXRlJ11bdGVzdF9jYXNlXQorCisgICAgICAg ICMgY29tcGFyZSB1cGRhdGVkIGNlbGwgdmFsdWVzIHdpdGggb3JpZ2luYWwg dmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNlbGwxLCB0ZXN0 X3ZlcmlmeV9kYXRhWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs cyhjZWxsMiwgdGVzdF92ZXJpZnlfZGF0YVsnZGF0YV9kZWZhdWx0X251bGxz J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNlbGw0LCB0ZXN0X3Zl cmlmeV9kYXRhWydkYXRhX251bGxzJ10pCisKKyAgICBkZWYgX3JlbW92ZV9y b3coc2VsZik6CisgICAgICAgIHhwYXRoX2NvbDAgPSAiLy9kaXZbY29udGFp bnMoQGNsYXNzLCAndWktd2lkZ2V0JyldLy9kaXZbIiBcCisgICAgICAgICAg ICAgICAgICAgICAiY29udGFpbnMoQGNsYXNzLCAncjAnKV0iCisgICAgICAg IHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKHhwYXRoX2NvbDApLmNsaWNrKCkK KyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBzZWxmLnBhZ2UuZmlu ZF9ieV94cGF0aCgnLy8qW0BpZD0iYnRuLXRvb2xiYXIiXS8vYnV0dG9uWycK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BpZD0iYnRuLWRl bGV0ZS1yb3ciXScpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5wYWdlLmNsaWNr X21vZGFsX29rKCdZZXMnKQpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24v ZmVhdHVyZV91dGlscy9wZ2FkbWluX3BhZ2UucHkgYi93ZWIvcmVncmVzc2lv bi9mZWF0dXJlX3V0aWxzL3BnYWRtaW5fcGFnZS5weQppbmRleCBmNWQwYWM3 Li40YmI3ZDBmIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9mZWF0dXJl X3V0aWxzL3BnYWRtaW5fcGFnZS5weQorKysgYi93ZWIvcmVncmVzc2lvbi9m ZWF0dXJlX3V0aWxzL3BnYWRtaW5fcGFnZS5weQpAQCAtMzMsMTEgKzMzLDEx IEBAIGNsYXNzIFBnYWRtaW5QYWdlOgogICAgICAgICBzZWxmLmNsaWNrX21v ZGFsX29rKCkKICAgICAgICAgc2VsZi53YWl0X2Zvcl9yZWxvYWRpbmdfaW5k aWNhdG9yX3RvX2Rpc2FwcGVhcigpCiAKLSAgICBkZWYgY2xpY2tfbW9kYWxf b2soc2VsZik6CisgICAgZGVmIGNsaWNrX21vZGFsX29rKHNlbGYsIGJ0bl9s YWJlbD0nT0snKToKICAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICAgICAg ICMgRmluZCBhY3RpdmUgYWxlcnRpZnkgZGlhbG9nIGluIGNhc2Ugb2YgbXVs dGlwbGUgYWxlcnRpZnkgZGlhbG9nICYgY2xpY2sgb24gdGhhdCBkaWFsb2cK ICAgICAgICAgc2VsZi5jbGlja19lbGVtZW50KAotICAgICAgICAgICAgc2Vs Zi5maW5kX2J5X3hwYXRoKCIvL2Rpdltjb250YWlucyhAY2xhc3MsICdhbGVy dGlmeScpIGFuZCBub3QoY29udGFpbnMoQGNsYXNzLCAnYWpzLWhpZGRlbicp KV0vL2J1dHRvblsuPSdPSyddIikKKyAgICAgICAgICAgIHNlbGYuZmluZF9i eV94cGF0aCgiLy8qLy9kaXZbY29udGFpbnMoQGNsYXNzLCAnYWxlcnRpZnkn KSBhbmQgbm90KGNvbnRhaW5zKEBjbGFzcywgJ2Fqcy1oaWRkZW4nKSldLy9i dXR0b25bLj0nezB9J10iLmZvcm1hdChidG5fbGFiZWwpKQogICAgICAgICAp CiAKICAgICBkZWYgYWRkX3NlcnZlcihzZWxmLCBzZXJ2ZXJfY29uZmlnKToK ZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxz L3Rlc3RfdXRpbHMucHkgYi93ZWIvcmVncmVzc2lvbi9weXRob25fdGVzdF91 dGlscy90ZXN0X3V0aWxzLnB5CmluZGV4IDJiN2M2OTUuLmM1MGRkMzEgMTAw NjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxzL3Rl c3RfdXRpbHMucHkKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3Rf dXRpbHMvdGVzdF91dGlscy5weQpAQCAtMTcyLDYgKzE3MiwzNSBAQCBkZWYg Y3JlYXRlX3RhYmxlKHNlcnZlciwgZGJfbmFtZSwgdGFibGVfbmFtZSk6CiAg ICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgdHJhY2ViYWNrLnByaW50 X2V4YyhmaWxlPXN5cy5zdGRlcnIpCiAKKworZGVmIGNyZWF0ZV90YWJsZV93 aXRoX3F1ZXJ5KHNlcnZlciwgZGJfbmFtZSwgcXVlcnkpOgorICAgICIiIgor ICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlIHRoZSB0YWJsZSBpbiBnaXZlbiBk YXRhYmFzZSBuYW1lCisgICAgOnBhcmFtIHNlcnZlcjogc2VydmVyIGRldGFp bHMKKyAgICA6dHlwZSBzZXJ2ZXI6IGRpY3QKKyAgICA6cGFyYW0gZGJfbmFt ZTogZGF0YWJhc2UgbmFtZQorICAgIDp0eXBlIGRiX25hbWU6IHN0cgorICAg IDpwYXJhbSBxdWVyeTogY3JlYXRlIHRhYmxlIHF1ZXJ5CisgICAgOnR5cGUg cXVlcnk6IHN0cgorICAgIDpyZXR1cm46IE5vbmUKKyAgICAiIiIKKyAgICB0 cnk6CisgICAgICAgIGNvbm5lY3Rpb24gPSBnZXRfZGJfY29ubmVjdGlvbihk Yl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VydmVyWyd1c2VybmFtZSddLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VydmVyWydkYl9wYXNzd29yZCddLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyWydo b3N0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZXJ2ZXJbJ3BvcnQnXSkKKyAgICAgICAgb2xkX2lzb2xhdGlvbl9sZXZl bCA9IGNvbm5lY3Rpb24uaXNvbGF0aW9uX2xldmVsCisgICAgICAgIGNvbm5l Y3Rpb24uc2V0X2lzb2xhdGlvbl9sZXZlbCgwKQorICAgICAgICBwZ19jdXJz b3IgPSBjb25uZWN0aW9uLmN1cnNvcigpCisgICAgICAgIHBnX2N1cnNvci5l eGVjdXRlKHF1ZXJ5KQorICAgICAgICBjb25uZWN0aW9uLnNldF9pc29sYXRp b25fbGV2ZWwob2xkX2lzb2xhdGlvbl9sZXZlbCkKKyAgICAgICAgY29ubmVj dGlvbi5jb21taXQoKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAg ICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCisKKwog ZGVmIGNyZWF0ZV9jb25zdHJhaW50KAogICAgICAgICBzZXJ2ZXIsIGRiX25h bWUsIHRhYmxlX25hbWUsCiAgICAgICAgIGNvbnN0cmFpbnRfdHlwZT0idW5p cXVlIiwgY29uc3RyYWludF9uYW1lPSJ0ZXN0X3VuaXF1ZSIpOgpAQCAtMjc0 LDcgKzMwMyw2IEBAIGRlZiBkcm9wX2RhdGFiYXNlKGNvbm5lY3Rpb24sIGRh dGFiYXNlX25hbWUpOgogICAgICAgICAgICAgY29ubmVjdGlvbi5jb21taXQo KQogICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpCiAKLQogZGVmIGRy b3BfdGFibGVzcGFjZShjb25uZWN0aW9uKToKICAgICAiIiJUaGlzIGZ1bmN0 aW9uIHVzZWQgdG8gZHJvcCB0aGUgdGFibGVzcGFjZSIiIgogICAgIHBnX2N1 cnNvciA9IGNvbm5lY3Rpb24uY3Vyc29yKCkK --001a114e3b18a25dbc054e369546 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a114e3b18a25dbc054e369546--