Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b0R9h-0000Pa-Gg for pgadmin-hackers@arkaria.postgresql.org; Wed, 11 May 2016 10:14:14 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1b0R9h-0004x3-1u for pgadmin-hackers@arkaria.postgresql.org; Wed, 11 May 2016 10:14:13 +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 1b0CAz-0008Eo-37 for pgadmin-hackers@postgresql.org; Tue, 10 May 2016 18:14:33 +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 1b0CAt-0007b3-KZ for pgadmin-hackers@postgresql.org; Tue, 10 May 2016 18:14:32 +0000 Received: by mail-wm0-x231.google.com with SMTP id n129so189784154wmn.1 for ; Tue, 10 May 2016 11:14:27 -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=3j5ZVc3IzwhLnJ7+4hPx6s9WKpLUocteRGKDRBdj8E8=; b=GHEqdfDGPdD2zqgk5cjCjaO7/Xy1BDdq40fMxWicTm+RROp57ivTF1miCnp5w8lT1S 9o55db0kgps8ckw9CVmhjPT0CTpgq5tMsDv9K0kboaTH7VKqIf3GgZUzRnO7KkZRxG4S eD8RGWDafxU9lloHIlOq2yUJ0y1hISO4/WAtyoTsAGEJcc8+5ea4C9KFdANwPDf2dEjY WPYWSFwq6rxl+g03Pu/8PNwQMHxj8qK5JyFw/agxPntXQk+Amtnw+ef+3yGcZHssHmpB 7t2lhABMnwEpyC07ud0lLUHp8jw7KPYDq9iv7g8GWFsMa8w6DtIWXGJLOt+fK1wgO7w5 bssQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=3j5ZVc3IzwhLnJ7+4hPx6s9WKpLUocteRGKDRBdj8E8=; b=L8CYegRdebGS6nmIyWshsA6+lwHVsHC0F8XrzZMUdiXwz8vQJWsQeNBm6ThpQu6RNB 0oUoG5oqsnQIXhw+UqxrVTyFkkko/xbLeVt7nQ/CI6qBQ6lPB4s/xfkBeSClM8O9hDh5 gbG6CJ+JuZ8X8AsVW9IbjJ3wAy8/j9EN2QOTLPNsil5QFV2abNaYZeqHeEO8E+SQLf4E xm+MP+G0zZ5nJ0FTEdjMB0UPqibGrTwu/5d101l39150Ylzc1D8heCJqjgyFYNSSGVgb ofRH0wijLgP4KBMt71+/PN4i6KESbngMDUmwYdVp/oJMHhs2eLWqfofsNCGpfeyu5jzS WMtA== X-Gm-Message-State: AOPr4FUXVGRXLRDNtwUeL6W6qhXX7Kt1QoXja4szTJGlQ+w+ZMPkRiib5rYiORa09yp4L71ue/HxxrJ3wPT52wbC X-Received: by 10.28.72.132 with SMTP id v126mr18756679wma.49.1462904066540; Tue, 10 May 2016 11:14:26 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.14.212 with HTTP; Tue, 10 May 2016 11:13:56 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Tue, 10 May 2016 23:43:56 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch]: File Manager & Backform FileControl To: Neel Patel Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114b6a7e3b4471053280e588 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 --001a114b6a7e3b4471053280e588 Content-Type: multipart/alternative; boundary=001a114b6a7e3b446d053280e586 --001a114b6a7e3b446d053280e586 Content-Type: text/plain; charset=UTF-8 Hi, Please find updated path with couple of review comments given by Ashesh Vashi. 1. Add variable *STORAGE_DIR* in configuration settings which decides the directory to list when *File manager* is opens, previously we have provided this option in preferences which is removed due to security issues. 2. List all available Volumes by default when *STORAGE_DIR *is set to empty for *Windows* platform. 3. Also, added support to allow user to provide *Dialog title and custom name for primary(OK) button,* Usage: 1. Set variable *STORAGE_DIR *to some value in config.py. 2. Import it in your module as following: * import config* * config.**STORAGE_DIR* *Usage*: Backform FilleControl schema:[{ id: 'select_file', label: '{{ _('Select File')}}', type: 'text', *control*: *Backform.FileControl*, *dialog_type: '*select_file*'*, *supp_types: [*'*', 'pdf', 'text', 'patch', 'py'*],* * dialog_title: '*Title to appear on dialog*", * * btn_primary: '*Save File*'* }] Please review the patch. On Wed, May 4, 2016 at 6:35 PM, Surinder Kumar < surinder.kumar@enterprisedb.com> wrote: > Hi > > PFA updated patch with resolved review comments. > > On Thu, Apr 28, 2016 at 6:39 PM, Neel Patel > wrote: > >> Hi Surinder, >> >> Please find additional comments as below. >> >> 1. In Windows OS, when we try to open the dialog with default preference >> value then it gives error as below. >> >> 2016-04-28 13:07:44,716: ERROR pgadmin: Exception on >> /file_manager/filemanager/2530270/ [POST] >> Traceback (most recent call last): >> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line >> 1817, in wsgi_app >> response = self.full_dispatch_request() >> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line >> 1477, in full_dispatch_request >> rv = self.handle_user_exception(e) >> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line >> 1381, in handle_user_exception >> reraise(exc_type, exc_value, tb) >> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line >> 1475, in full_dispatch_request >> rv = self.dispatch_request() >> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line >> 1461, in dispatch_request >> return self.view_functions[rule.endpoint](**req.view_args) >> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask_login.py", >> line 758, in decorated_view >> return func(*args, **kwargs) >> File "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", >> line 629, in file_manager >> return getattr(myFilemanager, mode)(**kwargs) >> File "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", >> line 421, in getfolder >> filelist = self.list_filesystem(dir, path, trans_data, file_type) >> File "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", >> line 331, in list_filesystem >> for f in sorted(os.listdir(orig_path)): >> WindowsError: [Error 161] The specified path is invalid: '//*.*' >> >> Now the default path will always be the users directory. I have used *os.path.expanduser('~') > *which prints user directory. It works for all operating systems. > >> >> 2. Folder having write only permission should not allow to read the >> directory. Same way read only permission folder should not allow to create >> the folder. Currently it gives below error. >> >> PermissionError: [Errno 13] Permission denied: >> '/home/neel/Projects/pgadmin4_file_manager/write_only_premission/' >> > Fixed. > >> >> 3. In Windows OS, when we open the file manager dialog, no directories >> listed though we have directories in the folder. Due to that we are not >> able to >> test all the functionality in windows. Once we fix this issue then we >> test all the functionality in windows OS. >> >> We debug the issue and found that issue is with the json response >> which includes the HTML tags. >> > Fixed. It still have issues in very older browsers. I will fix it. > >> >> 4. In Windows OS, file manager dialog have issue with layout. We are >> getting some margin at top before buttons. >> > Fixed. > >> >> 5. When we give any special characters to folder name that it gives error >> saying "Folder does not exist". >> Same is applicable when we give dialog_type to create_file >> > Fixed. > >> >> 6. In create_file mode, after giving the filename it should display the >> name of the file to text control. >> > Fixed. > >> >> 7. In create_file mode, when user gives the filename and click on the any >> blank area of dialog then name is getting cleared. >> > Fixed. > >> >> 8. When we upload the new file through file manager then it is not >> showing in the list though we have selected "All files" options. >> > Fixed. > >> >> 9. When we rename the folder in "Table mode" then font-family gets >> changed. It is not happened in "Grid" mode. >> > Fixed. > >> >> 10. When we try to download the file then it goes into loop and opens up >> 20-30 dialogs at the same time. >> > Fixed. > >> >> 11. "Rename" button is enabled even though we have not selected the >> files/folder to rename and when we click on the "Rename" button it gives >> below >> error. >> >> TypeError: orig_value is undefined >> > Fixed. > >> 12. "Delete" button is enabled even though we have not selected the >> files/folder to delete and when we click on the "Delete" button it gives >> below error. >> TypeError: path is undefined >> > Fixed. > >> >> Do let us know if you have queries. >> >> Thanks, >> Neel Patel >> >> On Wed, Apr 27, 2016 at 9:15 PM, Neel Patel >> wrote: >> >>> Hi Surinder, >>> >>> I have applied the patch file and below are some observations. >>> >>> - When we create the new folder and hit the enter then we are >>> getting the below error. >>> >>> TypeError: argument of type 'NoneType' is not iterable >>> >>> - I have just added the new control in "Import" dialog and observed >>> that new control is getting added in new tab called "General". I think it >>> should not create the new "General" tab. >>> - "Select" and "Cancel" buttons font is different then other dialogs. >>> >>> >>> Thanks, >>> Neel Patel >>> >>> On Wed, Apr 27, 2016 at 6:18 PM, Surinder Kumar < >>> surinder.kumar@enterprisedb.com> wrote: >>> >>>> Hi, >>>> >>>> The patch is for *File Manager and Backform FileControl*. >>>> >>>> *File Manager:* It allows user to store their files at one place. The >>>> user can set path to this directory in preferences which file manger will >>>> use. >>>> >>>> It will be used by various modules of pgAdmin4 such as >>>> *import data from file, query tool, backup & recovery tool* so on.. It >>>> allows user to perform various operations such as: >>>> >>>> - File deletion >>>> - File upload >>>> - Create new directory >>>> - File rename >>>> - File download and >>>> - List files & folders in list and grid view. >>>> >>>> *FileControl: *This control is used with *File Manager. *It can be >>>> used for: >>>> >>>> - File Selection >>>> - Folder Selection >>>> - File Creation >>>> - Storage Manager Dialog.( it supports all operations listed above). >>>> >>>> >>>> Usage*:* >>>> >>>> schema:[{ >>>> id: 'select_file', label: '{{ _('Select File')}}', >>>> type: 'text', *control*: *Backform.FileControl*, >>>> *dialog_type: 'select_file'*, *supp_types: ['*', 'pdf', 'text', >>>> 'patch', 'py']* >>>> } >>>> >>>> Where: >>>> >>>> - *control* - It should be *Backform.FileControl* >>>> - *dialog_type *- the type of dialog to use. >>>> - options can be: *select_file, select_folder, create_file & >>>> storage_dialog*. >>>> - *supp_types(*not mandatory) - the types of files allowed to show >>>> and upload. >>>> >>>> Please review the patch and let me know for the review comments. >>>> >>>> >>>> Thanks >>>> Surinder Kumar >>>> >>>> >>>> -- >>>> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) >>>> To make changes to your subscription: >>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>> >>>> >>> >> > --001a114b6a7e3b446d053280e586 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please find updated path with coupl= e of review comments given by Ashesh Vashi.
1. Add variable ST= ORAGE_DIR in configuration settings which decides the directory to list= when File manager is opens, previously
we have provided t= his option in preferences which is removed due to security issues.
2. List all available Volumes by default when=C2=A0STORAGE_DIR is = set to empty for Windows platform.
3. Also, added support = to allow user to provide
Dialog title and custom name for prim= ary(OK) button,

Usage:

1. Set variable=C2=A0STORAGE_DIR to some value=C2=A0in conf= ig.py.
2. Import it in your module as following:
=C2= =A0 =C2=A0import config
=C2=A0 =C2=A0config.STORAGE= _DIR

Usage: Backform=C2=A0FilleControl<= /div>

schema:[{
=C2=A0 id: 'select_file', label: '{{ _= ('Select File')}}',=C2=A0
=C2=A0 type: 'text',=C2=A0control:=C2=A0Backform.FileControl,
=C2=A0=C2=A0dialog_type= : 'select_file',=C2=A0supp_types: ['*', &= #39;pdf', 'text', 'patch', 'py'],=
= =C2=A0 dialog_title: 'Title to appear on dialog",=C2=A0=
=C2=A0 btn_primary: = 'Save File'
}]

Please review the patch.

On Wed, May 4, 2016 at 6:35 PM, Surinder Kumar <surinder.kumar@enterprisedb.com> wrote:
Hi

PFA updated= patch with resolved review comments.

<= div class=3D"gmail_quote">On Thu, Apr 28, 2016 at 6:39 PM, Neel Patel= <neel.patel@enterprisedb.com> wrote:
Hi Surinder,

Pleas= e find additional comments as below.

1.=C2=A0= In Windows OS, when we try to open the dialog with default preference valu= e then it gives error as below.

2016-04-28 13:07:4= 4,716: ERROR =C2=A0pgadmin: =C2=A0 =C2=A0 =C2=A0 =C2=A0Exception on /file_m= anager/filemanager/2530270/ [POST]
Traceback (most recent call la= st):
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-packa= ges\flask\app.py", line 1817, in wsgi_app
=C2=A0 =C2=A0 resp= onse =3D self.full_dispatch_request()
=C2=A0 File "C:\Projec= ts\venv_python_2_7\Lib\site-packages\flask\app.py", line 1477, in full= _dispatch_request
=C2=A0 =C2=A0 rv =3D self.handle_user_exception= (e)
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-packag= es\flask\app.py", line 1381, in handle_user_exception
=C2=A0= =C2=A0 reraise(exc_type, exc_value, tb)
=C2=A0 File "C:\Pro= jects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1475, in f= ull_dispatch_request
=C2=A0 =C2=A0 rv =3D self.dispatch_request()=
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-packages\= flask\app.py", line 1461, in dispatch_request
=C2=A0 =C2=A0 = return self.view_functions[rule.endpoint](**req.view_args)
=C2=A0= File "C:\Projects\venv_python_2_7\Lib\site-packages\flask_login.py&qu= ot;, line 758, in decorated_view
=C2=A0 =C2=A0 return func(*args,= **kwargs)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\mis= c\file_manager\__init__.py", line 629, in file_manager
=C2= =A0 =C2=A0 return getattr(myFilemanager, mode)(**kwargs)
=C2=A0 F= ile "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py&qu= ot;, line 421, in getfolder
=C2=A0 =C2=A0 filelist =3D self.list_= filesystem(dir, path, trans_data, file_type)
=C2=A0 File "C:= \Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", line 33= 1, in list_filesystem
=C2=A0 =C2=A0 for f in sorted(os.listdir(or= ig_path)):
WindowsError: [Error 161] The specified path is invali= d: '//*.*'

Now the default path will always be the users directory. I have used os= .path.expanduser('~') which prints user directory.=C2=A0It work= s for all operating systems.=C2=A0

2. Folder having write only permis= sion should not allow to read the directory. Same way read only permission = folder should not allow to create the folder. =C2=A0 =C2=A0 Currently it gi= ves below error.

=C2=A0 =C2=A0PermissionError: [Er= rno 13] Permission denied: '/home/neel/Projects/pgadmin4_file_manager/w= rite_only_premission/'
Fixed.= =C2=A0

3. In Windows OS, when we open the file manager dialog, no directories li= sted though we have directories in the folder. Due to that we are not able = to=C2=A0
=C2=A0 =C2=A0 test all the functionality in windows. Onc= e we fix this issue then we test all the functionality in windows OS.
=
=C2=A0 =C2=A0
=C2=A0 =C2=A0We debug the issue and found that= issue is with the json response which includes the HTML tags.
<= /div>
Fixed. It still have issues in very older bro= wsers. I will fix it.

4. In Windows OS, file manager dialog have issue with layo= ut. We are getting some margin at top before buttons.
Fixed.=C2=A0

5. When we give any special characters to fold= er name that it gives error saying "Folder does not exist".
=
=C2=A0 =C2=A0 Same is applicable when we give dialog_type to create_fi= le
Fixed.=C2=A0
=C2=A0 =C2=A0
6. In create_= file mode, after giving the filename it should display the name of the file= to text control.
Fixed.=C2=A0

7. In c= reate_file mode, when user gives the filename and click on the any blank ar= ea of dialog then name is getting cleared.
Fixed.=C2=A0
=

8. When we upload the new file through file manager the= n it is not showing in the list though we have selected "All files&quo= t; options.
Fixed.=C2=A0

9. When we re= name the folder in "Table mode" then font-family gets changed. It= is not happened in "Grid" mode.
Fixed.=C2=A0
=

10. When we try to download the file then it goes into = loop and opens up 20-30 dialogs at the same time.
Fixed.=C2=A0
=

11. "Rename" button is enabled even thou= gh we have not selected the files/folder to rename and when we click on the= "Rename" button it gives below=C2=A0
=C2=A0 =C2=A0 =C2= =A0error.

=C2=A0 =C2=A0 TypeError: orig_value is u= ndefined
Fixed.=C2=A0
=
12. "Delete" button is enabled even thou= gh we have not selected the files/folder to delete and when we click on the= "Delete" button it gives below error.
=C2=A0 =C2=A0 = =C2=A0TypeError: path is undefined
Fixed.=C2=A0
<= br>
Do let us know if you have queries.

Thanks,
Neel Patel

On Wed, Apr 27, 2016 at 9:15 PM, Nee= l Patel <neel.patel@enterprisedb.com> wrote:
Hi Surinder,

I have appl= ied the patch file and below are some observations.
  • When = we create the new folder and hit the enter then we are getting the below er= ror.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A0TypeError: argument of type 'NoneType' is not iterable<= /div>
  • I have just added the new control in "Import&q= uot; dialog and observed that new control is getting added in new tab calle= d "General". I think it should not create the new "General&q= uot; tab.
  • "Select" and "Cancel" buttons font is= different then other dialogs.

Thanks,
Neel Patel

On Wed, Apr 27, 2016 at 6:18 PM, Surinder Kumar <surinder.kumar@enterprisedb.com> wrote:
Hi,

T= he patch is for File Manager and Backform=C2=A0FileControl.

File Manager:=C2=A0It allows user to store t= heir files at one place. The user can set path to this directory in prefere= nces which file manger will use.

It will be used b= y various modules of pgAdmin4 such as
import data from file, q= uery tool, backup & recovery tool=C2=A0so on.. It allows user to pe= rform various operations such as:=C2=A0
  • File deletion
    =
  • File upload
  • Create new directory
  • File rename
  • <= li>File download and=C2=A0
  • List files & folders in list and= grid view.
FileControl:=C2=A0This co= ntrol is used with=C2=A0File Manager.=C2=A0It=C2=A0can be used for:<= /div>
  • File Selection =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<= br>
  • Folder=C2=A0Selection=C2=A0 =C2=A0 =C2=A0=C2=A0
  • Fil= e Creation =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0
  • Stor= age Manager Dialog.( it supports all operations listed above).

Usage= :

=
schema:[{
=C2=A0 id: 'select_file', label= : '{{ _('Select File')}}',=C2=A0
=C2=A0 type: 'text',=C2=A0control:= =C2=A0Backform.FileControl,
=C2=A0=C2=A0dialog_type: 'select_file',=C2=A0s= upp_types: ['*', 'pdf', 'text', 'patch', &#= 39;py']
}=

Where:
  • control=C2= =A0- It should be=C2=A0Backform.= FileControl
  • dialog_type=C2=A0- the type of dialog to= use.
  • options can be:=C2=A0=C2=A0select_file, select_folder,= create_file & storage_dialog.
  • supp_types(not ma= ndatory)=C2=A0- the types of files allowed to show and upload.
  • <= /ul>
Please review the patch and let me know for the = review comments.


Thanks
=
Surinder Kumar


--
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers=





--001a114b6a7e3b446d053280e586-- --001a114b6a7e3b4471053280e588 Content-Type: application/octet-stream; name="FileManager_v2.patch" Content-Disposition: attachment; filename="FileManager_v2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io1r92rl1 ZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29uZmlnLnB5Cmlu ZGV4IGJjNjdlYWQuLmViMTgzMTEgMTAwNjQ0Ci0tLSBhL3dlYi9jb25maWcu cHkKKysrIGIvd2ViL2NvbmZpZy5weQpAQCAtMTMsNiArMTMsMTcgQEAKIAog ZnJvbSBsb2dnaW5nIGltcG9ydCAqCiBpbXBvcnQgb3MKK2ltcG9ydCBzdHJp bmcKK2Zyb20gc3lzIGltcG9ydCBwbGF0Zm9ybSBhcyBfcGxhdGZvcm0KKyMg Q2hlY2tzIGlmIHBsYXRmb3JtIGlzIFdpbmRvd3MKK2lmIF9wbGF0Zm9ybSA9 PSAid2luMzIiOgorICAgIGZyb20gY3R5cGVzIGltcG9ydCB3aW5kbGwKKwor IyB1cHBlcmNhc2Ugc3VwcG9ydGVkIGluIHB5MiwgYXNjaWlfdXBwZXJjYXNl IHN1cHBvcnRlZCBpbiBweTMKK3RyeToKKyAgICBsZXR0ZXJzID0gc3RyaW5n LnVwcGVyY2FzZQorZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBsZXR0ZXJzID0g c3RyaW5nLmFzY2lpX3VwcGVyY2FzZQogCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwogIyBBcHBsaWNhdGlvbiBzZXR0aW5ncwpAQCAtMjI3LDYg KzIzOCw0OCBAQCBVUEdSQURFX0NIRUNLX0VOQUJMRUQgPSBUcnVlCiBVUEdS QURFX0NIRUNLX1VSTCA9ICdodHRwOi8vd3d3LnBnYWRtaW4ub3JnL3ZlcnNp b25zLmpzb24nCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFN0b3JhZ2UgTWFuYWdlciBzdG9yYWdlIHVybCBjb25maWcgc2V0dGluZ3MK KyMgSWYgdXNlciBzZXRzIFNUT1JBR0VfRElSIHRvIGVtcHR5IGl0IHdpbGwg c2hvdyBhbGwgdm9sdW1lcyBpZiBwbGF0Zm9ybQorIyBpcyBXaW5kb3dzLCAn LycgaWYgaXQgaXMgTGludXgsIE1hYyBvciBhbnkgb3RoZXIgdW5peCB0eXBl IHN5c3RlbS4KKworIyBGb3IgZXhhbXBsZToKKyMgMS4gU1RPUkFHRV9ESVIg PSBnZXRfZHJpdmUoIkMiKSBvciBnZXRfZHJpdmUoKSAjIHJldHVybiBDOi8g YnkgZGVmYXVsdAorIyB3aGVyZSBDIGNhbiBiZSBhbnkgZHJpdmUgY2hhcmFj dGVyIHN1Y2ggYXMgIkQiLCAiRSIsICJHIiBldGMKKyMgMi4gU2V0IHBhdGgg bWFudWFsbHkgbGlrZQorIyBTVE9SQUdFX0RJUiA9ICIvcGF0aC90by9kaXJl Y3RvcnkvIgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCitk ZWYgZ2V0X2RyaXZlcyhkcml2ZV9uYW1lPU5vbmUpOgorICAgICIiIgorICAg IFRoaXMgaXMgYSBnZW5lcmljIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhl IGRlZmF1bHQgcGF0aCBmb3Igc3RvcmFnZQorICAgIG1hbmFnZXIgZGlhbG9n IGlycmVzcGVjdGl2ZSBvZiBhbnkgUGxhdGZvcm0gdHlwZSB0byBsaXN0IGFs bAorICAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyAgICBQbGF0Zm9ybSB3 aW5kb3dzOgorICAgIGlmIG5vIHBhdGggaXMgZ2l2ZW4sIGl0IHdpbGwgbGlz dCB2b2x1bWVzLCBlbHNlIGxpc3QgZGlyZWN0b3J5CisgICAgUGxhdGZvcm0g dW5peDoKKyAgICBpdCByZXR1cm5zIHBhdGggdG8gcm9vdCBkaXJlY3Rvcnkg aWYgbm8gcGF0aCBpcyBzcGVjaWZpZWQuCisgICAgIiIiCisgICAgaWYgX3Bs YXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg IGRyaXZlcyA9IFtdCisgICAgICAgICAgICBiaXRtYXNrID0gd2luZGxsLmtl cm5lbDMyLkdldExvZ2ljYWxEcml2ZXMoKQorICAgICAgICAgICAgZm9yIGxl dHRlciBpbiBsZXR0ZXJzOgorICAgICAgICAgICAgICAgIGlmIGJpdG1hc2sg JiAxOgorICAgICAgICAgICAgICAgICAgICBkcml2ZXMuYXBwZW5kKGxldHRl cikKKyAgICAgICAgICAgICAgICBiaXRtYXNrID4+PSAxCisgICAgICAgICAg ICBpZiAoZHJpdmVfbmFtZSAhPSAnJyBhbmQgZHJpdmVfbmFtZSBpcyBub3Qg Tm9uZSBhbmQKKyAgICAgICAgICAgICAgIGRyaXZlX25hbWUgaW4gZHJpdmVz KToKKyAgICAgICAgICAgICAgICByZXR1cm4gInswfXsxfSIuZm9ybWF0KGRy aXZlX25hbWUsICc6LycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg ICAgICAgIHJldHVybiBkcml2ZXMgICMgcmV0dXJuIGRyaXZlcyBpZiBubyBh cmd1bWVudCBpcyBwYXNzZWQKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK KyAgICAgICAgICAgIHJldHVybiAnQzovJworICAgIGVsc2U6CisgICAgICAg IHJldHVybiAnLycKK1NUT1JBR0VfRElSID0gZ2V0X2RyaXZlcygpCisKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIExvY2FsIGNvbmZpZyBz ZXR0aW5ncwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19pbml0 X18ucHkgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci9fX2luaXRf Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzAy ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxl X21hbmFnZXIvX19pbml0X18ucHkKQEAgLTAsMCArMSw4MDggQEAKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBv c3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAx NiwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UK KyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIkltcGxl bWVudHMgRmlsZSBNYW5hZ2VyIiIiCisKK2Zyb20gcGdhZG1pbi51dGlscyBp bXBvcnQgUGdBZG1pbk1vZHVsZQorZnJvbSBmbGFzay5leHQuYmFiZWwgaW1w b3J0IGdldHRleHQKK2Zyb20gZmxhc2suZXh0LnNlY3VyaXR5IGltcG9ydCBs b2dpbl9yZXF1aXJlZAorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBs YXRlLCBSZXNwb25zZSwgc2Vzc2lvbiwgcmVxdWVzdCBhcyByZXEsIHVybF9m b3IKK2Zyb20gcGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBtYWtlX2pzb25f cmVzcG9uc2UKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBvcworaW1wb3J0IG9z LnBhdGgKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29u CitpbXBvcnQgc3RyaW5nCitpbXBvcnQgY29uZmlnCitmcm9tIHN5cyBpbXBv cnQgcGxhdGZvcm0gYXMgX3BsYXRmb3JtCisKKyMgQ2hlY2tzIGlmIHBsYXRm b3JtIGlzIFdpbmRvd3MKK2lmIF9wbGF0Zm9ybSA9PSAid2luMzIiOgorICAg IGltcG9ydCBjdHlwZXMKKyAgICBmaWxlX3Jvb3QgPSAiIgorCisjIHVwcGVy Y2FzZSBzdXBwb3J0ZWQgaW4gcHkyLCBhc2NpaV91cHBlcmNhc2Ugc3VwcG9y dGVkIGluIHB5MwordHJ5OgorICAgIGxldHRlcnMgPSBzdHJpbmcudXBwZXJj YXNlCitleGNlcHQgRXhjZXB0aW9uOgorICAgIGxldHRlcnMgPSBzdHJpbmcu YXNjaWlfdXBwZXJjYXNlCisKKyMgaW1wb3J0IHVucXVvdGUgZnJvbSB1cmxp YiBmb3IgcHl0aG9uMi54IGFuZCBweXRob24zLngKK3RyeToKKyAgICBmcm9t IHVybGxpYiBpbXBvcnQgdW5xdW90ZQorZXhjZXB0IEV4Y2VwdGlvbiBhcyBl OgorICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1bnF1b3RlCisKKwor TU9EVUxFX05BTUUgPSAnZmlsZV9tYW5hZ2VyJworZ2xvYmFsIHRyYW5zaWQK KworcGF0aF9leGlzdHMgPSBvcy5wYXRoLmV4aXN0cworc3BsaXRfcGF0aCA9 IG9zLnBhdGguc3BsaXQKK2VuY29kZV9qc29uID0ganNvbi5KU09ORW5jb2Rl cigpLmVuY29kZQorCisKKyMgdXRpbGl0eSBmdW5jdGlvbnMKKyMgY29udmVy dCBieXRlcyB0eXBlIHRvIGh1bWFuIHJlYWRhYmxlIGZvcm1hdAorZGVmIHNp emVvZl9mbXQobnVtLCBzdWZmaXg9J0InKToKKyAgICBmb3IgdW5pdCBpbiBb JycsICdLJywgJ00nLCAnRycsICdUJywgJ1AnLCAnRScsICdaJ106CisgICAg ICAgIGlmIGFicyhudW0pIDwgMTAyNC4wOgorICAgICAgICAgICAgcmV0dXJu ICIlMy4xZiAlcyVzIiAlIChudW0sIHVuaXQsIHN1ZmZpeCkKKyAgICAgICAg bnVtIC89IDEwMjQuMAorICAgIHJldHVybiAiJS4xZiAlcyVzIiAlIChudW0s ICdZJywgc3VmZml4KQorCisKKyMgcmV0dXJuIHNpemUgb2YgZmlsZQorZGVm IGdldFNpemUocGF0aCk6CisgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAg cmV0dXJuIHN0LnN0X3NpemUKKworCitkZWYgZ2V0RHJpdmVTaXplKHBhdGgp OgorICAgIGlmIF9wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICBmcmVl X2J5dGVzID0gY3R5cGVzLmNfdWxvbmdsb25nKDApCisgICAgICAgIGN0eXBl cy53aW5kbGwua2VybmVsMzIuR2V0RGlza0ZyZWVTcGFjZUV4VygKKyAgICAg ICAgICAgIGN0eXBlcy5jX3djaGFyX3AocGF0aCksIE5vbmUsIE5vbmUsIGN0 eXBlcy5wb2ludGVyKGZyZWVfYnl0ZXMpKQorICAgICAgICByZXR1cm4gZnJl ZV9ieXRlcy52YWx1ZQorCisKKyMgc3BsaXQgZXh0ZW5zaW9uIGZvciBmaWxl cworZGVmIHNwbGl0ZXh0KHBhdGgpOgorICAgIGZvciBleHQgaW4gWycudGFy Lmd6JywgJy50YXIuYnoyJ106CisgICAgICAgIGlmIHBhdGguZW5kc3dpdGgo ZXh0KToKKyAgICAgICAgICAgIHBhdGgsIGV4dCA9IHBhdGhbOi1sZW4oZXh0 KV0sIHBhdGhbLWxlbihleHQpOl0KKyAgICAgICAgICAgIGJyZWFrCisgICAg ZWxzZToKKyAgICAgICAgcGF0aCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChw YXRoKQorICAgIHJldHVybiBleHRbMTpdCisKKworIyBjaGVjayBpZiBmaWxl IGlzIGhpZGRlbiBpbiB3aW5kb3dzIHBsYXRmb3JtCitkZWYgaXNfZm9sZGVy X2hpZGRlbihmaWxlcGF0aCk6CisgICAgaWYgX3BsYXRmb3JtID09ICJ3aW4z MiI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGF0dHJzID0gY3R5cGVz LndpbmRsbC5rZXJuZWwzMi5HZXRGaWxlQXR0cmlidXRlc1coCisgICAgICAg ICAgICAgICAgdW5pY29kZShmaWxlcGF0aCkpCisgICAgICAgICAgICBhc3Nl cnQgYXR0cnMgIT0gLTEKKyAgICAgICAgICAgIHJlc3VsdCA9IGJvb2woYXR0 cnMgJiAyKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBBc3Nl cnRpb25FcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQorICAg ICAgICByZXR1cm4gcmVzdWx0CisKKworY2xhc3MgRmlsZU1hbmFnZXJNb2R1 bGUoUGdBZG1pbk1vZHVsZSk6CisgICAgIiIiCisgICAgRmlsZU1hbmFnZXIg bGlzdHMgZmlsZXMgYW5kIGZvbGRlcnMgYW5kIGRvZXMKKyAgICBmb2xsb3dp bmcgb3BlcmF0aW9uczoKKyAgICAtIEZpbGUgc2VsZWN0aW9uCisgICAgLSBG b2xkZXIgc2VsZWN0aW9uCisgICAgLSBPcGVuIGZpbGUKKyAgICAtIENyZWF0 ZSBGaWxlCisgICAgYW5kIGFsc28gc3VwcG9ydHM6CisgICAgLSBSZW5hbWUg ZmlsZQorICAgIC0gRGVsZXRlIGZpbGUKKyAgICAtIFVwbG9hZCBmaWxlCisg ICAgLSBDcmVhdGUgZm9sZGVyCisgICAgIiIiCisKKyAgICBMQUJFTCA9IGdl dHRleHQoIlN0b3JhZ2UiKQorCisgICAgZGVmIGdldF9vd25famF2YXNjcmlw dHMoc2VsZik6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgeworICAg ICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5maWxlX21hbmFnZXInLAorICAg ICAgICAgICAgJ3BhdGgnOiB1cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5kZXgn KSArICdmaWxlX21hbmFnZXInLAorICAgICAgICAgICAgJ3doZW4nOiAnc2Vy dmVyJworICAgICAgICAgIH0sCisgICAgICAgICAgXQorCisgICAgZGVmIGdl dF9vd25fc3R5bGVzaGVldHMoc2VsZik6CisgICAgICAgIHJldHVybiBbCisg ICAgICAgICAgICAgIHVybF9mb3IoJ3N0YXRpYycsIGZpbGVuYW1lPSdjc3Mv anF1ZXJ5LmRyb3B6b25lL2Ryb3B6b25lLmNzcycpCisgICAgICAgICAgICBd CisKKyAgICBkZWYgZ2V0X293bl9tZW51aXRlbXMoc2VsZik6CisgICAgICAg IHJldHVybiB7CisgICAgICAgICAgICAnZmlsZV9pdGVtcyc6IFtdCisgICAg ICAgIH0KKworICAgIGRlZiBnZXRfZmlsZV9zaXplX3ByZWZlcmVuY2Uoc2Vs Zik6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVfdXBsb2FkX3NpemUKKwor ICAgIGRlZiByZWdpc3Rlcl9wcmVmZXJlbmNlcyhzZWxmKToKKyAgICAgICAg IyBSZWdpc3RlciAnZmlsZSB1cGxvYWQgc2l6ZScgcHJlZmVyZW5jZQorICAg ICAgICBzZWxmLmZpbGVfdXBsb2FkX3NpemUgPSBzZWxmLnByZWZlcmVuY2Uu cmVnaXN0ZXIoCisgICAgICAgICAgICAnb3B0aW9ucycsICdmaWxlX3VwbG9h ZF9zaXplJywKKyAgICAgICAgICAgIGdldHRleHQoIk1heGltdW0gZmlsZSB1 cGxvYWQgc2l6ZShNQikiKSwgJ2ludGVnZXInLCA1MCwKKyAgICAgICAgICAg IGNhdGVnb3J5X2xhYmVsPWdldHRleHQoJ09wdGlvbnMnKQorICAgICAgICAg ICAgKQorCisjIEluaXRpYWxpc2UgdGhlIG1vZHVsZQorYmx1ZXByaW50ID0g RmlsZU1hbmFnZXJNb2R1bGUoCisgICAgTU9EVUxFX05BTUUsCisgICAgX19u YW1lX18sCisgICAgKQorCisKK0BibHVlcHJpbnQucm91dGUoIi8iKQorQGxv Z2luX3JlcXVpcmVkCitkZWYgaW5kZXgoKToKKyAgICAiIiJSZW5kZXIgdGhl IHByZWZlcmVuY2VzIGRpYWxvZy4iIiIKKyAgICByZXR1cm4gcmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAgICAgTU9EVUxFX05BTUUgKyAiL2luZGV4Lmh0 bWwiLCBfPWdldHRleHQpCisKKworQGJsdWVwcmludC5yb3V0ZSgiL3V0aWxp dHkuanMiKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgdXRpbGl0eSgpOgorICAg ICIiInJlbmRlciB0aGUgcmVxdWlyZWQgamF2YXNjcmlwdCIiIgorICAgIHJl dHVybiBSZXNwb25zZShyZXNwb25zZT1yZW5kZXJfdGVtcGxhdGUoCisgICAg ICAgICJmaWxlX21hbmFnZXIvanMvdXRpbGl0eS5qcyIsIF89Z2V0dGV4dCks CisgICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgIG1pbWV0eXBlPSJhcHBs aWNhdGlvbi9qYXZhc2NyaXB0IikKKworCitAYmx1ZXByaW50LnJvdXRlKCIv ZmlsZV9tYW5hZ2VyLmpzIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIGZpbGVf bWFuYWdlcl9qcygpOgorICAgICIiInJlbmRlciB0aGUgcmVxdWlyZWQgamF2 YXNjcmlwdCIiIgorICAgIHJldHVybiBSZXNwb25zZShyZXNwb25zZT1yZW5k ZXJfdGVtcGxhdGUoCisgICAgICAgICJmaWxlX21hbmFnZXIvanMvZmlsZV9t YW5hZ2VyLmpzIiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgc3RhdHVzPTIwMCwK KyAgICAgICAgbWltZXR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiKQor CisKK0BibHVlcHJpbnQucm91dGUoIi9lbi5qcyIpCitAbG9naW5fcmVxdWly ZWQKK2RlZiBsYW5ndWFnZSgpOgorICAgICIiInJlbmRlciB0aGUgcmVxdWly ZWQgamF2YXNjcmlwdCIiIgorICAgIHJldHVybiBSZXNwb25zZShyZXNwb25z ZT1yZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICJmaWxlX21hbmFnZXIvanMv bGFuZ3VhZ2VzL2VuLmpzIiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgc3RhdHVz PTIwMCwKKyAgICAgICAgbWltZXR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3Jp cHQiKQorCisKK0BibHVlcHJpbnQucm91dGUoIi9maWxlX21hbmFnZXJfY29u ZmlnLmpzIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIGZpbGVfbWFuYWdlcl9j b25maWdfanMoKToKKyAgICAiIiJyZW5kZXIgdGhlIHJlcXVpcmVkIGphdmFz Y3JpcHQiIiIKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVy X3RlbXBsYXRlKAorICAgICAgICAiZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFu YWdlcl9jb25maWcuanMiLCBfPWdldHRleHQpLAorICAgICAgICBzdGF0dXM9 MjAwLAorICAgICAgICBtaW1ldHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlw dCIpCisKKworQGJsdWVwcmludC5yb3V0ZSgiLzxpbnQ6dHJhbnNfaWQ+L2Zp bGVfbWFuYWdlcl9jb25maWcuanNvbiIpCitAbG9naW5fcmVxdWlyZWQKK2Rl ZiBmaWxlX21hbmFnZXJfY29uZmlnKHRyYW5zX2lkKToKKyAgICAiIiJyZW5k ZXIgdGhlIHJlcXVpcmVkIGpzb24iIiIKKyAgICAjIHRyYW5zX2lkID0gRmls ZW1hbmFnZXIuY3JlYXRlX25ld190cmFuc2FjdGlvbigpCisgICAgZGF0YSA9 IEZpbGVtYW5hZ2VyLmdldF90cmFzYWN0aW9uX3NlbGVjdGlvbih0cmFuc19p ZCkKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVyX3RlbXBs YXRlKAorICAgICAgICAiZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9j b25maWcuanNvbiIsIF89Z2V0dGV4dCwKKyAgICAgICAgZGF0YT1kYXRhKSwK KyAgICAgICAgc3RhdHVzPTIwMCwKKyAgICAgICAgbWltZXR5cGU9ImFwcGxp Y2F0aW9uL2pzb24iKQorCisKK0BibHVlcHJpbnQucm91dGUoIi9nZXRfdHJh bnNfaWQiLCBtZXRob2RzPVsiR0VUIiwgIlBPU1QiXSkKK0Bsb2dpbl9yZXF1 aXJlZAorZGVmIGdldF90cmFuc19pZCgpOgorICAgIGlmIGxlbihyZXEuZGF0 YSkgIT0gMDoKKyAgICAgICAgY29uZmlncyA9IGpzb24ubG9hZHMocmVxLmRh dGEpCisgICAgICAgIHRyYW5zX2lkID0gRmlsZW1hbmFnZXIuY3JlYXRlX25l d190cmFuc2FjdGlvbihjb25maWdzKQorICAgICAgICBnbG9iYWwgdHJhbnNp ZAorICAgICAgICB0cmFuc2lkID0gdHJhbnNfaWQKKyAgICByZXR1cm4gbWFr ZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICBkYXRhPXsnZmlsZVRyYW5zSWQn OiB0cmFuc2lkLCAnc3RhdHVzJzogVHJ1ZX0KKyAgICApCisKKworQGJsdWVw cmludC5yb3V0ZSgiL2RlbF90cmFuc19pZC88aW50OnRyYW5zX2lkPiIsIG1l dGhvZHM9WyJHRVQiLCAiUE9TVCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYg ZGVsZXRlX3RyYW5zX2lkKHRyYW5zX2lkKToKKyAgICBGaWxlbWFuYWdlci5y ZWxlYXNlX3RyYW5zYWN0aW9uKHRyYW5zX2lkKQorICAgIHJldHVybiBtYWtl X2pzb25fcmVzcG9uc2UoCisgICAgICAgIGRhdGE9eydzdGF0dXMnOiBUcnVl fQorICAgICkKKworCitjbGFzcyBGaWxlbWFuYWdlcihvYmplY3QpOgorICAg ICIiIkZpbGVNYW5hZ2VyIENsYXNzLiIiIgorICAgIGRlZiBfX2luaXRfXyhz ZWxmLCB0cmFuc19pZCk6CisgICAgICAgIHNlbGYudHJhbnNfaWQgPSB0cmFu c19pZAorICAgICAgICBzZWxmLnBhdGhlcnJvciA9IGVuY29kZV9qc29uKAor ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ0Vycm9y JzogZ2V0dGV4dCgnTm8gcGVybWlzc2lvbiB0byBvcGVyYXRlIG9uIHNwZWNp ZmllZCBwYXRoLicpLAorICAgICAgICAgICAgICAgICAgICAnQ29kZSc6IC0x CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKQorICAgICAgICBz ZWxmLmRpciA9IGNvbmZpZy5TVE9SQUdFX0RJUgorCisgICAgICAgIGlmIGlz aW5zdGFuY2Uoc2VsZi5kaXIsIGxpc3QpOgorICAgICAgICAgICAgc2VsZi5k aXIgPSAiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVf bmV3X3RyYW5zYWN0aW9uKHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAg ICBJdCB3aWxsIGFsc28gY3JlYXRlIGEgdW5pcXVlIHRyYW5zYWN0aW9uIGlk IGFuZAorICAgICAgICBzdG9yZSB0aGUgaW5mb3JtYXRpb24gaW50byBzZXNz aW9uIHZhcmlhYmxlLgorICAgICAgICBBcmdzOgorICAgICAgICAgICAgY2Fw YWJpbGl0aWVzOiBBbGxvdy9EaXNhbGxvdyB1c2VyIHRvIHBlcmZvcm0KKyAg ICAgICAgICAgIHNlbGVjdGlvbiwgcmVuYW1lLCBkZWxldGUgZXRjLgorICAg ICAgICAiIiIKKworICAgICAgICAjIERlZmluZSBjb25maWdzIGZvciBkaWFs b2cgdHlwZXMKKyAgICAgICAgIyBzZWxlY3QgZmlsZSwgc2VsZWN0IGZvbGRl ciwgY3JlYXRlIG1vZGUKKyAgICAgICAgZm1fdHlwZSA9IHBhcmFtc1snZGlh bG9nX3R5cGUnXQorICAgICAgICBzdG9yYWdlX2RpciA9IGNvbmZpZy5TVE9S QUdFX0RJUgorCisgICAgICAgICMgSXQgaXMgdXNlZCBpbiB1dGl0bGl0eSBq cyB0byBkZWNpZGUgdG8KKyAgICAgICAgIyBzaG93IG9yIGhpZGUgc2VsZWN0 IGZpbGUgdHlwZSBvcHRpb25zCisgICAgICAgIHNob3dfdm9sdW1lcyA9IFRy dWUgaWYgKGlzaW5zdGFuY2Uoc3RvcmFnZV9kaXIsIGxpc3QpIG9yCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzdG9yYWdlX2Rpcikg ZWxzZSBGYWxzZQorICAgICAgICBzdXBwX3R5cGVzID0gYWxsb3dfdXBsb2Fk X2ZpbGVzID0gcGFyYW1zWydzdXBwb3J0ZWRfdHlwZXMnXSBcCisgICAgICAg ICAgICBpZiAnc3VwcG9ydGVkX3R5cGVzJyBpbiBwYXJhbXMgZWxzZSBbXQor ICAgICAgICBpZiBmbV90eXBlID09ICdzZWxlY3RfZmlsZSc6CisgICAgICAg ICAgICBjYXBhYmlsaXRpZXMgPSBbJ3NlbGVjdF9maWxlJywgJ3JlbmFtZScs ICd1cGxvYWQnLCAnY3JlYXRlJ10KKyAgICAgICAgICAgIHN1cHBfdHlwZXMg PSBzdXBwX3R5cGVzCisgICAgICAgICAgICBmaWxlc19vbmx5ID0gVHJ1ZQor ICAgICAgICAgICAgZm9sZGVyc19vbmx5ID0gRmFsc2UKKyAgICAgICAgICAg IHRpdGxlID0gIlNlbGVjdCBGaWxlIgorICAgICAgICBlbGlmIGZtX3R5cGUg PT0gJ3NlbGVjdF9mb2xkZXInOgorICAgICAgICAgICAgY2FwYWJpbGl0aWVz ID0gWydzZWxlY3RfZm9sZGVyJywgJ3JlbmFtZScsICdjcmVhdGUnXQorICAg ICAgICAgICAgZmlsZXNfb25seSA9IEZhbHNlCisgICAgICAgICAgICBmb2xk ZXJzX29ubHkgPSBUcnVlCisgICAgICAgICAgICB0aXRsZSA9ICJTZWxlY3Qg Rm9sZGVyIgorICAgICAgICBlbGlmIGZtX3R5cGUgPT0gJ2NyZWF0ZV9maWxl JzoKKyAgICAgICAgICAgIGNhcGFiaWxpdGllcyA9IFsnc2VsZWN0X2ZpbGUn LCAncmVuYW1lJywgJ2NyZWF0ZSddCisgICAgICAgICAgICBzdXBwX3R5cGVz ID0gc3VwcF90eXBlcworICAgICAgICAgICAgZmlsZXNfb25seSA9IFRydWUK KyAgICAgICAgICAgIGZvbGRlcnNfb25seSA9IEZhbHNlCisgICAgICAgICAg ICB0aXRsZSA9ICJDcmVhdGUgRmlsZSIKKyAgICAgICAgZWxpZiBmbV90eXBl ID09ICdzdG9yYWdlX2RpYWxvZyc6CisgICAgICAgICAgICBjYXBhYmlsaXRp ZXMgPSBbJ3NlbGVjdF9mb2xkZXInLCAnc2VsZWN0X2ZpbGUnLCAnZG93bmxv YWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZW5hbWUnLCAn ZGVsZXRlJywgJ3VwbG9hZCcsICdjcmVhdGUnXQorICAgICAgICAgICAgc3Vw cF90eXBlcyA9IHN1cHBfdHlwZXMKKyAgICAgICAgICAgIGZpbGVzX29ubHkg PSBUcnVlCisgICAgICAgICAgICBmb2xkZXJzX29ubHkgPSBGYWxzZQorICAg ICAgICAgICAgdGl0bGUgPSAiU3RvcmFnZSBNYW5hZ2VyIgorCisgICAgICAg ICMgY3JlYXRlIGNvbmZpZ3MgdXNpbmcgYWJvdmUgY29uZmlncworICAgICAg ICBjb25maWdzID0geworICAgICAgICAgICJmaWxlcm9vdCI6ICIvIiwKKyAg ICAgICAgICAiZGlhbG9nX3R5cGUiOiBmbV90eXBlLAorICAgICAgICAgICJ0 aXRsZSI6IHRpdGxlLAorICAgICAgICAgICJ1cGxvYWQiOiB7CisgICAgICAg ICAgICAgICJtdWx0aXBsZSI6IFRydWUKKyAgICAgICAgICB9LAorICAgICAg ICAgICJjYXBhYmlsaXRpZXMiOiBjYXBhYmlsaXRpZXMsCisgICAgICAgICAg InNlY3VyaXR5IjogeworICAgICAgICAgICAgICAidXBsb2FkUG9saWN5Ijog IiIsCisgICAgICAgICAgICAgICJ1cGxvYWRSZXN0cmljdGlvbnMiOiBhbGxv d191cGxvYWRfZmlsZXMKKyAgICAgICAgICB9LAorICAgICAgICAgICJmaWxl c19vbmx5IjogZmlsZXNfb25seSwKKyAgICAgICAgICAiZm9sZGVyc19vbmx5 IjogZm9sZGVyc19vbmx5LAorICAgICAgICAgICJzdXBwb3J0ZWRfdHlwZXMi OiBzdXBwX3R5cGVzLAorICAgICAgICAgICJwbGF0Zm9ybV90eXBlIjogX3Bs YXRmb3JtLAorICAgICAgICAgICJzaG93X3ZvbHVtZXMiOiBzaG93X3ZvbHVt ZXMKKyAgICAgICAgfQorCisgICAgICAgICMgQ3JlYXRlIGEgdW5pcXVlIGlk IGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgICAgdHJhbnNfaWQgPSBzdHIo cmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkpCisKKyAgICAgICAgaWYgJ2Zp bGVNYW5hZ2VyRGF0YScgbm90IGluIHNlc3Npb246CisgICAgICAgICAgICBm aWxlX21hbmFnZXJfZGF0YSA9IGRpY3QoKQorICAgICAgICBlbHNlOgorICAg ICAgICAgICAgZmlsZV9tYW5hZ2VyX2RhdGEgPSBzZXNzaW9uWydmaWxlTWFu YWdlckRhdGEnXQorCisgICAgICAgIGZpbGVfdXBsb2FkX3NpemUgPSBibHVl cHJpbnQuZ2V0X2ZpbGVfc2l6ZV9wcmVmZXJlbmNlKCkuZ2V0KCkKKyAgICAg ICAgY29uZmlnc1sndXBsb2FkJ11bJ2ZpbGVTaXplTGltaXQnXSA9IGZpbGVf dXBsb2FkX3NpemUKKyAgICAgICAgZmlsZV9tYW5hZ2VyX2RhdGFbdHJhbnNf aWRdID0gY29uZmlncworICAgICAgICBzZXNzaW9uWydmaWxlTWFuYWdlckRh dGEnXSA9IGZpbGVfbWFuYWdlcl9kYXRhCisKKyAgICAgICAgcmV0dXJuIHRy YW5zX2lkCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF90cmFz YWN0aW9uX3NlbGVjdGlvbih0cmFuc19pZCk6CisgICAgICAgICIiIgorICAg ICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBpbmZvcm1hdGlvbiBvZiB1 bmlxdWUgdHJhbnNhY3Rpb24KKyAgICAgICAgaWQgZnJvbSB0aGUgc2Vzc2lv biB2YXJpYWJsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdHJh bnNfaWQ6IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZAorICAgICAgICAiIiIKKyAg ICAgICAgZmlsZV9tYW5hZ2VyX2RhdGEgPSBzZXNzaW9uWydmaWxlTWFuYWdl ckRhdGEnXQorCisgICAgICAgICMgUmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9u IGlmIHRyYW5zYWN0aW9uIGlkIG5vdCBmb3VuZAorICAgICAgICBpZiBzdHIo dHJhbnNfaWQpIGluIGZpbGVfbWFuYWdlcl9kYXRhOgorICAgICAgICAgICAg cmV0dXJuIGZpbGVfbWFuYWdlcl9kYXRhW3N0cih0cmFuc19pZCldCisKKyAg ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHJlbGVhc2VfdHJhbnNhY3Rpb24o dHJhbnNfaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2Qg aXMgdG8gcmVtb3ZlIHRoZSBpbmZvcm1hdGlvbiBvZiB1bmlxdWUgdHJhbnNh Y3Rpb24KKyAgICAgICAgaWQgZnJvbSB0aGUgc2Vzc2lvbiB2YXJpYWJsZS4K KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdHJhbnNfaWQ6IHVuaXF1 ZSB0cmFuc2FjdGlvbiBpZAorICAgICAgICAiIiIKKyAgICAgICAgZmlsZV9t YW5hZ2VyX2RhdGEgPSBzZXNzaW9uWydmaWxlTWFuYWdlckRhdGEnXQorICAg ICAgICAjIFJldHVybiBmcm9tIHRoZSBmdW5jdGlvbiBpZiB0cmFuc2FjdGlv biBpZCBub3QgZm91bmQKKyAgICAgICAgaWYgc3RyKHRyYW5zX2lkKSBub3Qg aW4gZmlsZV9tYW5hZ2VyX2RhdGE6CisgICAgICAgICAgICByZXR1cm4gbWFr ZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiBUcnVlfSkKKworICAg ICAgICAjIFJlbW92ZSB0aGUgaW5mb3JtYXRpb24gb2YgdW5pcXVlIHRyYW5z YWN0aW9uIGlkCisgICAgICAgICMgZnJvbSB0aGUgc2Vzc2lvbiB2YXJpYWJs ZS4KKyAgICAgICAgZmlsZV9tYW5hZ2VyX2RhdGEucG9wKHN0cih0cmFuc19p ZCksIE5vbmUpCisgICAgICAgIHNlc3Npb25bJ2ZpbGVNYW5hZ2VyRGF0YSdd ID0gZmlsZV9tYW5hZ2VyX2RhdGEKKworICAgICAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiBUcnVlfSkKKworICAgIEBz dGF0aWNtZXRob2QKKyAgICBkZWYgbGlzdF9maWxlc3lzdGVtKGRpciwgcGF0 aCwgdHJhbnNfZGF0YSwgZmlsZV90eXBlKToKKyAgICAgICAgIiIiCisgICAg ICAgIEl0IGxpc3RzIGFsbCBmaWxlIGFuZCBmb2xkZXJzIHdpdGhpbiB0aGUg Z2l2ZW4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAg ICAgZmlsZXMgPSB7fQorICAgICAgICBpZiAoX3BsYXRmb3JtID09ICJ3aW4z MiIgYW5kIHBhdGggPT0gJy8nKSBhbmQgKG5vdCBkaXIpOgorICAgICAgICAg ICAgaW1wb3J0IGNvbmZpZworICAgICAgICAgICAgZHJpdmVzID0gY29uZmln LmdldF9kcml2ZXMoKQorICAgICAgICAgICAgZm9yIGRyaXZlIGluIGRyaXZl czoKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgPSAwCisgICAgICAgICAg ICAgICAgcGF0aCA9IGZpbGVfbmFtZSA9ICJ7MH06LyIuZm9ybWF0KGRyaXZl KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAg ZHJpdmVfc2l6ZSA9IGdldERyaXZlU2l6ZShwYXRoKQorICAgICAgICAgICAg ICAgICAgICBkcml2ZV9zaXplX2luX3VuaXRzID0gc2l6ZW9mX2ZtdChkcml2 ZV9zaXplKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg ICAgICAgICAgZHJpdmVfc2l6ZSA9IDAKKyAgICAgICAgICAgICAgICBwcm90 ZWN0ZWQgPSAxIGlmIGRyaXZlX3NpemUgPT0gMCBlbHNlIDAKKyAgICAgICAg ICAgICAgICBmaWxlc1tkcml2ZV0gPSB7CisgICAgICAgICAgICAgICAgICAg ICJGaWxlbmFtZSI6IGZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg IlBhdGgiOiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAiZmlsZV90eXBl IjogJ2RyaXZlJywKKyAgICAgICAgICAgICAgICAgICAgIlByb3RlY3RlZCI6 IHByb3RlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgIlByb3BlcnRpZXMi OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiRGF0ZSBDcmVhdGVkIjog IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRGF0ZSBNb2RpZmllZCI6 ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUiOiBkcml2ZV9z aXplX2luX3VuaXRzCisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmaWxlcworCisgICAg ICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisg ICAgICAgIHVzZXJfZGlyID0gcGF0aAorICAgICAgICBmb2xkZXJzX29ubHkg PSB0cmFuc19kYXRhWydmb2xkZXJzX29ubHknXSBpZiAnZm9sZGVyc19vbmx5 JyBpbiBcCisgICAgICAgICAgICB0cmFuc19kYXRhIGVsc2UgJycKKyAgICAg ICAgZmlsZXNfb25seSA9IHRyYW5zX2RhdGFbJ2ZpbGVzX29ubHknXSBpZiAn ZmlsZXNfb25seScgaW4gXAorICAgICAgICAgICAgdHJhbnNfZGF0YSBlbHNl ICcnCisgICAgICAgIHN1cHBvcnRlZF90eXBlcyA9IHRyYW5zX2RhdGFbJ3N1 cHBvcnRlZF90eXBlcyddIFwKKyAgICAgICAgICAgIGlmICdzdXBwb3J0ZWRf dHlwZXMnIGluIHRyYW5zX2RhdGEgZWxzZSBbXQorCisgICAgICAgIG9yaWdf cGF0aCA9IHVucXVvdGUob3JpZ19wYXRoKQorICAgICAgICB0cnk6CisgICAg ICAgICAgICBmb3IgZiBpbiBzb3J0ZWQob3MubGlzdGRpcihvcmlnX3BhdGgp KToKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgPSAwCisgICAgICAgICAg ICAgICAgc3lzdGVtX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5qb2lu KG9yaWdfcGF0aCwgZikpCisgICAgICAgICAgICAgICAgaWYgKGlzX2ZvbGRl cl9oaWRkZW4oc3lzdGVtX3BhdGgpKToKKyAgICAgICAgICAgICAgICAgICAg Y29udGludWUKKyAgICAgICAgICAgICAgICB1c2VyX3BhdGggPSBvcy5wYXRo LmpvaW4ob3MucGF0aC5qb2luKHVzZXJfZGlyLCBmKSkKKyAgICAgICAgICAg ICAgICBjcmVhdGVkID0gdGltZS5jdGltZShvcy5wYXRoLmdldGN0aW1lKHN5 c3RlbV9wYXRoKSkKKyAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHRpbWUu Y3RpbWUob3MucGF0aC5nZXRtdGltZShzeXN0ZW1fcGF0aCkpCisgICAgICAg ICAgICAgICAgZmlsZV9leHRlbnNpb24gPSBzdHIoc3BsaXRleHQoc3lzdGVt X3BhdGgpKQorICAgICAgICAgICAgICAgIGlmKG5vdCBvcy5hY2Nlc3Moc3lz dGVtX3BhdGgsIG9zLlJfT0spIG9yCisgICAgICAgICAgICAgICAgICAgbm90 IG9zLmFjY2VzcyhzeXN0ZW1fcGF0aCwgb3MuV19PSykpOgorICAgICAgICAg ICAgICAgICAgICBwcm90ZWN0ZWQgPSAxCisgICAgICAgICAgICAgICAgaWYg b3MucGF0aC5pc2RpcihzeXN0ZW1fcGF0aCk6CisgICAgICAgICAgICAgICAg ICAgIGlmIGZpbGVzX29ubHkgPT0gJ3RydWUnOgorICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9l eHRlbnNpb24gPSBzdHIoJ2RpcicpCisgICAgICAgICAgICAgICAgICAgIHVz ZXJfcGF0aCA9ICJ7MH0vIi5mb3JtYXQodXNlcl9wYXRoKQorICAgICAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVfdHlw ZSBpcyBub3QgTm9uZSBhbmQgZmlsZV90eXBlICE9ICIqIjoKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIGZvbGRlcnNfb25seSBvciBsZW4oc3VwcG9y dGVkX3R5cGVzKSA+IDAgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZmlsZV9leHRlbnNpb24gbm90IGluIHN1cHBvcnRlZF90eXBlcyBvciBc CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSAhPSBmaWxl X2V4dGVuc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250 aW51ZQorCisgICAgICAgICAgICAgICAgZmlsZXNbdXNlcl9wYXRoXSA9IHsK KyAgICAgICAgICAgICAgICAgICJGaWxlbmFtZSI6IGYsCisgICAgICAgICAg ICAgICAgICAiUGF0aCI6IHVzZXJfcGF0aCwKKyAgICAgICAgICAgICAgICAg ICJmaWxlX3R5cGUiOiBmaWxlX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAg ICAgICJQcm90ZWN0ZWQiOiBwcm90ZWN0ZWQsCisgICAgICAgICAgICAgICAg ICAiUHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkRhdGUg Q3JlYXRlZCI6IGNyZWF0ZWQsCisgICAgICAgICAgICAgICAgICAgICJEYXRl IE1vZGlmaWVkIjogbW9kaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICJT aXplIjogc2l6ZW9mX2ZtdChnZXRTaXplKHN5c3RlbV9wYXRoKSkKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIGV4 Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGlmIGUuc3RyZXJy b3IgPT0gZ2V0dGV4dCgnUGVybWlzc2lvbiBkZW5pZWQnKToKKyAgICAgICAg ICAgICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVy cm9yKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJf bXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVycm9yKQorICAgICAg ICAgICAgZmlsZXMgPSB7CisgICAgICAgICAgICAgICdDb2RlJzogMCwKKyAg ICAgICAgICAgICAgJ2Vycl9tc2cnOiBlcnJfbXNnCisgICAgICAgICAgICB9 CisgICAgICAgIHJldHVybiBmaWxlcworCisgICAgZGVmIHZhbGlkYXRlX3Jl cXVlc3Qoc2VsZiwgY2FwYWJpbGl0eSk6CisgICAgICAgICIiIgorICAgICAg ICBJdCB2YWxpZGF0ZXMgdGhlIGNhcGFiaWxpdHkgd2l0aCB0aGUgY2FwYWJp bGl0aWVzCisgICAgICAgIHN0b3JlZCBpbiB0aGUgc2Vzc2lvbgorICAgICAg ICAiIiIKKyAgICAgICAgdHJhbnNfZGF0YSA9IEZpbGVtYW5hZ2VyLmdldF90 cmFzYWN0aW9uX3NlbGVjdGlvbihzZWxmLnRyYW5zX2lkKQorICAgICAgICBy ZXR1cm4gRmFsc2UgaWYgY2FwYWJpbGl0eSBub3QgaW4gdHJhbnNfZGF0YVsn Y2FwYWJpbGl0aWVzJ10gZWxzZSBUcnVlCisKKyAgICBkZWYgZ2V0aW5mbyhz ZWxmLCBwYXRoPU5vbmUsIGdldHNpemU9VHJ1ZSwgbmFtZT1Ob25lLCByZXE9 Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEgSlNPTiBv YmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCB0 aGUgZ2l2ZW4gZmlsZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcGF0aCA9 IHVucXVvdGUocGF0aCkKKyAgICAgICAgb3JpZ19wYXRoID0gInswfXsxfSIu Zm9ybWF0KHNlbGYuZGlyLCBwYXRoKQorICAgICAgICB1c2VyX2RpciA9IHBh dGgKKyAgICAgICAgdGhlZmlsZSA9IHsKKyAgICAgICAgICAgICdGaWxlbmFt ZSc6IHNwbGl0X3BhdGgob3JpZ19wYXRoKVstMV0sCisgICAgICAgICAgICAn RmlsZSBUeXBlJzogJycsCisgICAgICAgICAgICAnUGF0aCc6IHVzZXJfZGly LAorICAgICAgICAgICAgJ0Vycm9yJzogJycsCisgICAgICAgICAgICAnQ29k ZSc6IDAsCisgICAgICAgICAgICAnUHJvcGVydGllcyc6IHsKKyAgICAgICAg ICAgICAgICAgICAgJ0RhdGUgQ3JlYXRlZCc6ICcnLAorICAgICAgICAgICAg ICAgICAgICAnRGF0ZSBNb2RpZmllZCc6ICcnLAorICAgICAgICAgICAgICAg ICAgICAnV2lkdGgnOiAnJywKKyAgICAgICAgICAgICAgICAgICAgJ0hlaWdo dCc6ICcnLAorICAgICAgICAgICAgICAgICAgICAnU2l6ZSc6ICcnCisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIGlmIG5v dCBwYXRoX2V4aXN0cyhvcmlnX3BhdGgpOgorICAgICAgICAgICAgdGhlZmls ZVsnRXJyb3InXSA9IGdldHRleHQoJ0ZpbGUgZG9lcyBub3QgZXhpc3QuJykK KyAgICAgICAgICAgIHJldHVybiAoZW5jb2RlX2pzb24odGhlZmlsZSksIE5v bmUsICdhcHBsaWNhdGlvbi9qc29uJykKKworICAgICAgICBpZiBzcGxpdF9w YXRoKHVzZXJfZGlyKVstMV0gPT0gJy8nOgorICAgICAgICAgICAgdGhlZmls ZVsnRmlsZSBUeXBlJ10gPSAnRGlyZWN0b3J5JworICAgICAgICBlbHNlOgor ICAgICAgICAgICAgdGhlZmlsZVsnRmlsZSBUeXBlJ10gPSBzcGxpdGV4dCh1 c2VyX2RpcikKKworICAgICAgICBjcmVhdGVkID0gdGltZS5jdGltZShvcy5w YXRoLmdldGN0aW1lKG9yaWdfcGF0aCkpCisgICAgICAgIG1vZGlmaWVkID0g dGltZS5jdGltZShvcy5wYXRoLmdldG10aW1lKG9yaWdfcGF0aCkpCisKKyAg ICAgICAgdGhlZmlsZVsnUHJvcGVydGllcyddWydEYXRlIENyZWF0ZWQnXSA9 IGNyZWF0ZWQKKyAgICAgICAgdGhlZmlsZVsnUHJvcGVydGllcyddWydEYXRl IE1vZGlmaWVkJ10gPSBtb2RpZmllZAorICAgICAgICB0aGVmaWxlWydQcm9w ZXJ0aWVzJ11bJ1NpemUnXSA9IHNpemVvZl9mbXQoZ2V0U2l6ZShvcmlnX3Bh dGgpKQorCisgICAgICAgIHJldHVybiB0aGVmaWxlCisKKyAgICBkZWYgZ2V0 Zm9sZGVyKHNlbGYsIHBhdGg9Tm9uZSwgZmlsZV90eXBlPSIiLCBuYW1lPU5v bmUsIHJlcT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMg ZmlsZXMgYW5kIGZvbGRlcnMgaW4gZ2l2ZSBwYXRoCisgICAgICAgICIiIgor ICAgICAgICB0cmFuc19kYXRhID0gRmlsZW1hbmFnZXIuZ2V0X3RyYXNhY3Rp b25fc2VsZWN0aW9uKHNlbGYudHJhbnNfaWQpCisgICAgICAgIGRpciA9IHNl bGYuZGlyCisgICAgICAgIGZpbGVsaXN0ID0gc2VsZi5saXN0X2ZpbGVzeXN0 ZW0oZGlyLCBwYXRoLCB0cmFuc19kYXRhLCBmaWxlX3R5cGUpCisgICAgICAg IHJldHVybiBmaWxlbGlzdAorCisgICAgZGVmIHJlbmFtZShzZWxmLCBvbGQ9 Tm9uZSwgbmV3PU5vbmUsIHJlcT1Ob25lKToKKyAgICAgICAgIiIiCisgICAg ICAgIFJlbmFtZSBmaWxlIG9yIGZvbGRlcgorICAgICAgICAiIiIKKyAgICAg ICAgaWYgbm90IHNlbGYudmFsaWRhdGVfcmVxdWVzdCgncmVuYW1lJyk6Cisg ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICdFcnJvcic6IGdl dHRleHQoJ05vdCBhbGxvd2VkJyksCisgICAgICAgICAgICAgJ0NvZGUnOiAx CisgICAgICAgICAgICB9CisKKyAgICAgICAgZGlyID0gc2VsZi5kaXIKKyAg ICAgICAgIyBjaGVjayBpZiBpdCdzIGRpcgorICAgICAgICBpZiBvbGRbLTFd ID09ICcvJzoKKyAgICAgICAgICAgIG9sZCA9IG9sZFs6LTFdCisKKyAgICAg ICAgIyBleHRyYWN0IGZpbGVuYW1lCisgICAgICAgIG9sZG5hbWUgPSBzcGxp dF9wYXRoKG9sZClbLTFdCisgICAgICAgIHBhdGggPSBzdHIob2xkKQorICAg ICAgICBwYXRoID0gc3BsaXRfcGF0aChwYXRoKVswXSAgIyBleHRyYWN0IHBh dGgKKworICAgICAgICBpZiBub3QgcGF0aFstMV0gPT0gJy8nOgorICAgICAg ICAgICAgcGF0aCArPSAnLycKKworICAgICAgICAjIG5ld25hbWUgPSBlbmNv ZGVfdXJscGF0aChuZXcpCisgICAgICAgIG5ld25hbWUgPSBuZXcKKyAgICAg ICAgbmV3cGF0aCA9IHBhdGggKyBuZXduYW1lCisKKyAgICAgICAgIyBtYWtl IHN5c3RlbSBvbGQgcGF0aAorICAgICAgICBvbGRwYXRoX3N5cyA9ICJ7MH17 MX0iLmZvcm1hdChkaXIsIG9sZCkKKyAgICAgICAgbmV3cGF0aF9zeXMgPSAi ezB9ezF9Ii5mb3JtYXQoZGlyLCBuZXdwYXRoKQorCisgICAgICAgIGVycm9y X21zZyA9IGdldHRleHQoJ1JlbmFtZWQgU3VjY2Vzc2Z1bGx5LicpCisgICAg ICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJl bmFtZShvbGRwYXRoX3N5cywgbmV3cGF0aF9zeXMpCisgICAgICAgICAgICBj b2RlID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAg ICAgICAgICBlcnJvcl9tc2cgPSAiezB9IC0gezF9Ii5mb3JtYXQoCisgICAg ICAgICAgICAgICAgZ2V0dGV4dCgnVGhlcmUgd2FzIGFuIGVycm9yIHJlbmFt aW5nIHRoZSBmaWxlLicpLAorICAgICAgICAgICAgICAgIHN0cihlKSkKKwor ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAnT2xkIFBhdGgnOiBv bGQsCisgICAgICAgICAgICAnT2xkIE5hbWUnOiBvbGRuYW1lLAorICAgICAg ICAgICAgJ05ldyBQYXRoJzogbmV3cGF0aCwKKyAgICAgICAgICAgICdOZXcg TmFtZSc6IG5ld25hbWUsCisgICAgICAgICAgICAnRXJyb3InOiBlcnJvcl9t c2csCisgICAgICAgICAgICAnQ29kZSc6IGNvZGUKKyAgICAgICAgfQorCisg ICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBkZWxldGUoc2VsZiwg cGF0aD1Ob25lLCByZXE9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBE ZWxldGUgZmlsZSBvciBmb2xkZXIKKyAgICAgICAgIiIiCisgICAgICAgIGlm IG5vdCBzZWxmLnZhbGlkYXRlX3JlcXVlc3QoJ2RlbGV0ZScpOgorICAgICAg ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAnRXJyb3InOiBnZXR0ZXh0 KCdOb3QgYWxsb3dlZCcpLAorICAgICAgICAgICAgICdDb2RlJzogMQorICAg ICAgICAgICAgfQorCisgICAgICAgIGRpciA9IHNlbGYuZGlyCisgICAgICAg IG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisKKyAg ICAgICAgZXJyX21zZyA9ICcnCisgICAgICAgIGNvZGUgPSAxCisgICAgICAg IHRyeToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3JpZ19wYXRo KToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihvcmlnX3BhdGgpCisgICAg ICAgICAgICAgICAgY29kZSA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgb3MucmVtb3ZlKG9yaWdfcGF0aCkKKyAgICAgICAgICAg ICAgICBjb2RlID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6 CisgICAgICAgICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChl LnN0cmVycm9yKQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAg ICdQYXRoJzogcGF0aCwKKyAgICAgICAgICAgICdFcnJvcic6IGVycl9tc2cs CisgICAgICAgICAgICAnQ29kZSc6IGNvZGUKKyAgICAgICAgfQorCisgICAg ICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBhZGQoc2VsZiwgcmVxPU5v bmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmlsZSB1cGxvYWQgZnVuY3Rp b25hbGl0eQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYudmFs aWRhdGVfcmVxdWVzdCgndXBsb2FkJyk6CisgICAgICAgICAgICByZXR1cm4g eworICAgICAgICAgICAgICdFcnJvcic6IGdldHRleHQoJ05vdCBhbGxvd2Vk JyksCisgICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAgICB9CisK KyAgICAgICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAgZXJyX21zZyA9ICcn CisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAg IHBhdGggPSByZXEuZm9ybS5nZXQoJ2N1cnJlbnRwYXRoJykKKyAgICAgICAg ICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisg ICAgICAgICAgICB0aGVmaWxlID0gcmVxLmZpbGVzWyduZXdmaWxlJ10KKyAg ICAgICAgICAgIG5ld05hbWUgPSAnezB9ezF9Jy5mb3JtYXQob3JpZ19wYXRo LCB0aGVmaWxlLmZpbGVuYW1lKQorCisgICAgICAgICAgICB3aXRoIG9wZW4o bmV3TmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRl KHRoZWZpbGUucmVhZCgpKQorICAgICAgICAgICAgY29kZSA9IDAKKyAgICAg ICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyX21z ZyA9ICJFcnJvcjogezB9Ii5mb3JtYXQoZS5zdHJlcnJvcikKKworICAgICAg ICByZXN1bHQgPSB7CisgICAgICAgICAgICAnUGF0aCc6IHBhdGgsCisgICAg ICAgICAgICAnTmFtZSc6IG5ld05hbWUsCisgICAgICAgICAgICAnRXJyb3In OiBlcnJfbXNnLAorICAgICAgICAgICAgJ0NvZGUnOiBjb2RlCisgICAgICAg IH0KKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgaXNfZmls ZV9leGlzdChzZWxmLCBwYXRoLCBuYW1lLCByZXE9Tm9uZSk6CisgICAgICAg ICIiIgorICAgICAgICBDaGVja3Mgd2hldGhlciBnaXZlbiBmaWxlIGV4aXN0 cyBvciBub3QKKyAgICAgICAgIiIiCisgICAgICAgIGRpciA9IHNlbGYuZGly CisgICAgICAgIGVycl9tc2cgPSAnJworICAgICAgICBjb2RlID0gMQorICAg ICAgICB0cnk6CisgICAgICAgICAgICBvcmlnX3BhdGggPSAiezB9ezF9Ii5m b3JtYXQoZGlyLCBwYXRoKQorICAgICAgICAgICAgbmV3TmFtZSA9ICd7MH17 MX0nLmZvcm1hdChvcmlnX3BhdGgsIG5hbWUpCisgICAgICAgICAgICBpZiBv cy5wYXRoLmV4aXN0cyhuZXdOYW1lKToKKyAgICAgICAgICAgICAgICBjb2Rl ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb2Rl ID0gMQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAg ICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVycm9y KQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICdQYXRoJzog cGF0aCwKKyAgICAgICAgICAgICdOYW1lJzogbmV3TmFtZSwKKyAgICAgICAg ICAgICdFcnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29kZSc6IGNv ZGUKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAg IGRlZiBjcmVhdGVfZmlsZShzZWxmLCBwYXRoLCBuYW1lLCByZXE9Tm9uZSk6 CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgbmV3IGZpbGUgZnVuY3Rp b25hbGl0eQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYudmFs aWRhdGVfcmVxdWVzdCgnY3JlYXRlJyk6CisgICAgICAgICAgICByZXR1cm4g eworICAgICAgICAgICAgICdFcnJvcic6IGdldHRleHQoJ05vdCBhbGxvd2Vk JyksCisgICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAgICB9CisK KyAgICAgICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAgZXJyX21zZyA9ICcn CisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAg IG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisgICAg ICAgICAgICBuZXdOYW1lID0gJ3swfXsxfScuZm9ybWF0KG9yaWdfcGF0aCwg bmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdO YW1lKToKKyAgICAgICAgICAgICAgICBvcGVuKG5ld05hbWUsICd3JykKKyAg ICAgICAgICAgICAgICBjb2RlID0gMAorICAgICAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICAgICBlcnJfbXNnID0gZ2V0dGV4dCgiRXJyb3I6IEZpbGUg YWxyZWFkeSBleGlzdHMiKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisgICAgICAgICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1h dChlLnN0cmVycm9yKQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg ICAgICdQYXRoJzogcGF0aCwKKyAgICAgICAgICAgICdOYW1lJzogbmV3TmFt ZSwKKyAgICAgICAgICAgICdFcnJvcic6IGVycl9tc2csCisgICAgICAgICAg ICAnQ29kZSc6IGNvZGUKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBy ZXN1bHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0TmV3TmFt ZShkaXIsIHBhdGgsIG5ld05hbWUsIGNvdW50PTEpOgorICAgICAgICAiIiIK KyAgICAgICAgVXRpbGl0eSB0byBwcm92aWRlIG5ldyBuYW1lIGZvciBmb2xk ZXIgaWYgZmlsZQorICAgICAgICB3aXRoIHNhbWUgbmFtZSBhbHJlYWR5IGV4 aXN0cworICAgICAgICAiIiIKKyAgICAgICAgbGFzdF9jaGFyID0gbmV3TmFt ZVstMV0KKyAgICAgICAgdG5ld1BhdGggPSBkaXIgKyAnLycgKyBwYXRoICsg bmV3TmFtZSArICdfJytzdHIoY291bnQpCisgICAgICAgIGlmIGxhc3RfY2hh ciA9PSAncicgYW5kIG5vdCBwYXRoX2V4aXN0cyh0bmV3UGF0aCk6CisgICAg ICAgICAgICByZXR1cm4gdG5ld1BhdGgsIG5ld05hbWUKKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIGxhc3RfY2hhciA9IGludCh0bmV3UGF0aFstMV0p ICsgMQorICAgICAgICAgICAgbmV3UGF0aCA9IGRpciArICcvJyArIHBhdGgg KyBuZXdOYW1lICsgJ18nK3N0cihsYXN0X2NoYXIpCisgICAgICAgICAgICBp ZiBwYXRoX2V4aXN0cyhuZXdQYXRoKToKKyAgICAgICAgICAgICAgICBjb3Vu dCArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVtYW5hZ2VyLmdl dE5ld05hbWUoZGlyLCBwYXRoLCBuZXdOYW1lLCBjb3VudCkKKyAgICAgICAg ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1BhdGgsIG5l d05hbWUKKworICAgIGRlZiBhZGRmb2xkZXIoc2VsZiwgcGF0aCwgbmFtZSk6 CisgICAgICAgICIiIgorICAgICAgICBGdW5jdGlvbmFsaXR5IHRvIGNyZWF0 ZSBuZXcgZm9sZGVyCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2Vs Zi52YWxpZGF0ZV9yZXF1ZXN0KCdjcmVhdGUnKToKKyAgICAgICAgICAgIHJl dHVybiB7CisgICAgICAgICAgICAgJ0Vycm9yJzogZ2V0dGV4dCgnTm90IGFs bG93ZWQnKSwKKyAgICAgICAgICAgICAnQ29kZSc6IDEKKyAgICAgICAgICAg IH0KKworICAgICAgICBkaXIgPSBzZWxmLmRpcgorICAgICAgICBuZXdOYW1l ID0gbmFtZQorICAgICAgICBpZiBkaXIgIT0gIiI6CisgICAgICAgICAgICBu ZXdQYXRoID0gZGlyICsgJy8nICsgcGF0aCArIG5ld05hbWUgKyAnLycKKyAg ICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld1BhdGggPSBwYXRoICsgbmV3 TmFtZSArICcvJworCisgICAgICAgIGVycl9tc2cgPSAnJworICAgICAgICBj b2RlID0gMQorICAgICAgICBpZiBub3QgcGF0aF9leGlzdHMobmV3UGF0aCk6 CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIo bmV3UGF0aCkKKyAgICAgICAgICAgICAgICBjb2RlID0gMAorICAgICAgICAg ICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGVy cl9tc2cgPSAiRXJyb3I6IHswfSIuZm9ybWF0KGUuc3RyZXJyb3IpCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICBuZXdQYXRoLCBuZXdOYW1lID0gc2Vs Zi5nZXROZXdOYW1lKGRpciwgcGF0aCwgbmV3TmFtZSkKKyAgICAgICAgICAg IHRyeToKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihuZXdQYXRoKQorICAg ICAgICAgICAgICAgIGNvZGUgPSAwCisgICAgICAgICAgICBleGNlcHQgRXhj ZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgZXJyX21zZyA9ICJFcnJv cjogezB9Ii5mb3JtYXQoZS5zdHJlcnJvcikKKworICAgICAgICByZXN1bHQg PSB7CisgICAgICAgICAgICAnUGFyZW50JzogcGF0aCwKKyAgICAgICAgICAg ICdOYW1lJzogbmV3TmFtZSwKKyAgICAgICAgICAgICdFcnJvcic6IGVycl9t c2csCisgICAgICAgICAgICAnQ29kZSc6IGNvZGUKKyAgICAgICAgfQorCisg ICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBkb3dubG9hZChzZWxm LCBwYXRoPU5vbmUsIG5hbWU9Tm9uZSwgcmVxPU5vbmUpOgorICAgICAgICAi IiIKKyAgICAgICAgRnVuY3Rpb25hbGl0eSB0byBkb3dubG9hZCBmaWxlCisg ICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9yZXF1 ZXN0KCdkb3dubG9hZCcpOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg ICAgICAgICAnRXJyb3InOiBnZXR0ZXh0KCdOb3QgYWxsb3dlZCcpLAorICAg ICAgICAgICAgICdDb2RlJzogMQorICAgICAgICAgICAgfQorCisgICAgICAg IGRpciA9IHNlbGYuZGlyCisgICAgICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0i LmZvcm1hdChkaXIsIHBhdGgpCisgICAgICAgIG5hbWUgPSBwYXRoLnNwbGl0 KCcvJylbLTFdCisgICAgICAgIGNvbnRlbnQgPSBvcGVuKG9yaWdfcGF0aCwg J3InKQorICAgICAgICByZXNwID0gUmVzcG9uc2UoY29udGVudCkKKyAgICAg ICAgcmVzcC5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0 YWNobWVudDsgZmlsZW5hbWU9JytuYW1lCisgICAgICAgIHJldHVybiByZXNw CisKKworQGJsdWVwcmludC5yb3V0ZSgiL2ZpbGVtYW5hZ2VyLzxpbnQ6dHJh bnNfaWQ+LyIsIG1ldGhvZHM9WyJHRVQiLCAiUE9TVCJdKQorQGxvZ2luX3Jl cXVpcmVkCitkZWYgZmlsZV9tYW5hZ2VyKHRyYW5zX2lkKToKKyAgICAiIiIK KyAgICBJdCBpcyB0aGUgY29tbW9uIGZ1bmN0aW9uIGZvciBldmVyeSBjYWxs IHdoaWNoIGlzIG1hZGUKKyAgICBhbmQgdGFrZXMgZnVuY3Rpb24gbmFtZSBm cm9tIHBvc3QgcmVxdWVzdCBhbmQgY2FsbHMgaXQuCisgICAgSXQgZ2V0cyB1 bmlxdWUgdHJhbnNhY3Rpb24gaWQgZnJvbSBwb3N0IHJlcXVlc3QgYW5kCisg ICAgcm90YXRlIGl0IGludG8gRmlsZW1hbmFnZXIgY2xhc3MuCisgICAgIiIi CisgICAgbXlGaWxlbWFuYWdlciA9IEZpbGVtYW5hZ2VyKHRyYW5zX2lkKQor ICAgIG1vZGUgPSAnJworICAgIGt3YXJncyA9IHt9CisgICAgaWYgcmVxLm1l dGhvZCA9PSAnUE9TVCc6CisgICAgICAgIGlmIHJlcS5maWxlczoKKyAgICAg ICAgICAgIG1vZGUgPSAnYWRkJworICAgICAgICAgICAga3dhcmdzID0geydy ZXEnOiByZXF9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrd2FyZ3Mg PSBqc29uLmxvYWRzKHJlcS5kYXRhKQorICAgICAgICAgICAga3dhcmdzWydy ZXEnXSA9IHJlcQorICAgICAgICAgICAgbW9kZSA9IGt3YXJnc1snbW9kZSdd CisgICAgICAgICAgICBkZWwga3dhcmdzWydtb2RlJ10KKyAgICBlbGlmIHJl cS5tZXRob2QgPT0gJ0dFVCc6CisgICAgICAgIGt3YXJncyA9IHsKKyAgICAg ICAgICAncGF0aCc6IHJlcS5hcmdzWydwYXRoJ10sCisgICAgICAgICAgJ25h bWUnOiByZXEuYXJnc1snbmFtZSddIGlmICduYW1lJyBpbiByZXEuYXJncyBl bHNlICcnCisgICAgICAgIH0KKyAgICAgICAgbW9kZSA9IHJlcS5hcmdzWydt b2RlJ10KKworICAgIHRyeToKKyAgICAgICAgZnVuYyA9IGdldGF0dHIobXlG aWxlbWFuYWdlciwgbW9kZSkKKyAgICAgICAgcmVzID0gZnVuYygqKmt3YXJn cykKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsn cmVzdWx0JzogcmVzLCAnc3RhdHVzJzogVHJ1ZX0pCisgICAgZXhjZXB0IEV4 Y2VwdGlvbjoKKyAgICAgICAgcmV0dXJuIGdldGF0dHIobXlGaWxlbWFuYWdl ciwgbW9kZSkoKiprd2FyZ3MpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9t aXNjL2ZpbGVfbWFuYWdlci9zdGF0aWMvY3NzL2ZpbGVfbWFuYWdlci5jc3Mg Yi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci9zdGF0aWMvY3NzL2Zp bGVfbWFuYWdlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uODM0YmU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L21pc2MvZmlsZV9tYW5hZ2VyL3N0YXRpYy9jc3MvZmlsZV9tYW5hZ2VyLmNz cwpAQCAtMCwwICsxLDY1NSBAQAorLyoKKyAqIENTUyBmb3IgU3RvcmFnZSBN YW5hZ2VyIERpYWxvZworICovCisKKy5maWxlX21hbmFnZXIgI3VwbG9hZGVy IHsKKyAgcGFkZGluZzogMnB4IDRweDsKKyAgYm9yZGVyLXdpZHRoOiAxcHg7 CisgIGRpc3BsYXk6IGJsb2NrOworICB0ZXh0LWFsaWduOiByaWdodDsKKyAg aGVpZ2h0OiBhdXRvOworICBtaW4taGVpZ2h0OjMwcHg7CisgIG1heC1oZWln aHQ6IDgwcHg7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIGJvcmRlci1ib3R0 b206IDFweDsKKyAgdG9wOiAzNXB4OworfQorCisjdXBsb2FkZXIgaDEgewor ICBmb250LXNpemU6IDE0cHg7CisgIG1hcmdpbjogMDsKKyAgbWFyZ2luLWxl ZnQ6IDVweDsKKyAgcGFkZGluZzogMDsKKyAgZGlzcGxheTogYmxvY2s7Cisg IGZsb2F0OiBsZWZ0OworICB0ZXh0LWFsaWduOiBsZWZ0OworICBsaW5lLWhl aWdodDoxLjllbTsKKyAgdGV4dC1zaGFkb3c6MXB4IDFweCAwcHggI2ZmZmZm ZjsKK30KKworI3VwbG9hZGVyIGgxIGIgeworICBmb250LXdlaWdodDogbm9y bWFsOworfQorCisudXBsb2FkcmVzcG9uc2UgeworICBkaXNwbGF5OiBub25l OworfQorCisuZmlsZWluZm8geworICBtaW4td2lkdGg6IDEwMHB4OworICBv dmVyZmxvdzogYXV0bzsKKyAgLyogbm8gbWFyZ2luIG9yIGJvcmRlciBhbGxv d2VkICovCit9CisKKy5maWxlaW5mbyAjY29udGVudHMgbGkuc2VsZWN0ZWQs IC5maWxlaW5mbyAjY29udGVudHMgdGJvZHkgdHIuc2VsZWN0ZWQgeworICBi YWNrZ3JvdW5kOiAjRDlFREY3OworfQorCisuZmlsZWluZm8gI2NvbnRlbnRz IGxpIC5mbV9maWxlX3JlbmFtZSwKKy5maWxlaW5mbyB0YWJsZSNjb250ZW50 cyB0ciB0ZDpmaXJzdC1jaGlsZCBpbnB1dC5mbV9maWxlX3JlbmFtZSB7Cisg IGRpc3BsYXk6IG5vbmU7CisgIHdpZHRoOiA4MHB4OworICBtYXJnaW46IDAg YXV0bzsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBoZWlnaHQ6IDE3cHg7 Cit9CisKKy5maWxlaW5mbyB0YWJsZSNjb250ZW50cyB0ciB0ZCBwIHsKKyAg ZGlzcGxheTogaW5saW5lLWJsb2NrOworICBtYXJnaW4tYm90dG9tOiAwOwor fQorCisuZmlsZWluZm8gdGFibGUjY29udGVudHMgdHIgdGQgcCB7CisgIGZv bnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFs LCBzYW5zLXNlcmlmOworfQorCisuZmlsZWluZm8gPiBoMSB7CisgIGZvbnQt c2l6ZTogMTZweDsKKyAgbWFyZ2luOiAxMDBweCBhdXRvOworfQorCisjdG9v bGJhciB7CisgIGRpc3BsYXk6IGJsb2NrOworICBjbGVhcjogbGVmdDsKKyAg bWFyZ2luOiA1MHB4IGF1dG87Cit9CisKKy5mbV9mb2xkZXIgeworICBmb250 LXNpemU6IHh4LWxhcmdlICFpbXBvcnRhbnQ7CisgIGNvbG9yOiByZ2IoMjU1 LCAyMDQsIDApOworfQorCisuZm1fZHJpdmUgeworICBmb250LXNpemU6IHh4 LWxhcmdlICFpbXBvcnRhbnQ7CisgIGNvbG9yOiBkYXJrZ3JheTsKK30KKwor LmZtX2ZpbGUgeworICBmb250LXNpemU6IHh4LWxhcmdlICFpbXBvcnRhbnQ7 Cit9CisKKy5maWxlX21hbmFnZXIgYnV0dG9uIHsKKyAgYmFja2dyb3VuZC1j b2xvcjogI0MwQzBDMDsKK30KKworLmZpbGVfbWFuYWdlciBoMSB7CisgIGZv bnQtc2l6ZTogbWVkaXVtOworfQorCisvKiogSW5wdXQgZmlsZSBSZXBsYWNl bWVudCAqLworLmZpbGUtaW5wdXQtY29udGFpbmVyIHsKKyAgbWFyZ2luOjA7 CisgIHBvc2l0aW9uOnJlbGF0aXZlOworICB0b3A6MHB4OworICB3aWR0aDoy MTVweDsKKyAgaGVpZ2h0OjMycHg7CisgIG92ZXJmbG93OiBoaWRkZW47Cit9 CisKKy8qKiBGaXJlZm94IGhhY2sgKi8KK0AtbW96LWRvY3VtZW50IHVybC1w cmVmaXgoKSB7CisgIC5maWxlLWlucHV0LWNvbnRhaW5lciAgeworICAgIHRv cDoxMXB4OworICAgIHdpZHRoOjI1NXB4OworICB9Cit9CisKKy8qKiBPcGVy YSBoYWNrICovCit4Oi1vLXByZWZvY3VzLCAuZmlsZS1pbnB1dC1jb250YWlu ZXIge3RvcDoxNnB4O3dpZHRoOjE5OHB4O30KKworLm5ld2ZpbGUgeworICBw b3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDowOworICBsZWZ0OiAzcHg7Cisg IHJpZ2h0OjA7CisgIHdpZHRoOiAxNTJweDsKKyAgaGVpZ2h0OjIzcHg7Cisg IG9wYWNpdHk6MDsgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsKKyAgY3Vy c29yOiBwb2ludGVyOworICBib3JkZXI6MXB4IHNvbGlkIGJsdWU7Cit9CisK Ky5hbHQtZmlsZWlucHV0IHsKKyAgZGlzcGxheTogaW5saW5lOworICB3cmFw OiBuby13cmFwOworfQorCisuZmlsZXBhdGggeworICBiYWNrZ3JvdW5kLWNv bG9yOiAjRjRGMUVEOworICBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjOwor ICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDAuMWVtIDAuM2VtOworICBsaW5l LWhlaWdodDogMS43ZW07CisgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJh ZGl1czogNnB4OworICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRp dXM6IDZweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDZweDsK KyAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDZweDsKKyAgYm9y ZGVyLXRvcC1sZWZ0LXJhZGl1czogNnB4OworICBib3JkZXItYm90dG9tLWxl ZnQtcmFkaXVzOiA2cHg7Cit9CisKK0AtbW96LWRvY3VtZW50IHVybC1wcmVm aXgoKSB7CisgIC5maWxlcGF0aCB7CisgICAgcGFkZGluZzowLjJlbSAwLjNl bTsKKyAgfQorfQorCisvKiogSW5wdXQgZmlsZSBSZXBsYWNlbWVudCAtIGVu ZCAqLworLmZpbGVfbGlzdGluZyAjY29udGVudHMuZ3JpZCB7CisgIHBhZGRp bmc6IDI1cHg7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5maWxlX2xp c3RpbmcgI2NvbnRlbnRzLmdyaWQgbGkgeworICBkaXNwbGF5OiBibG9jazsK KyAgZmxvYXQ6IGxlZnQ7CisgIHdpZHRoOiAxMDBweDsKKyAgbWluLWhlaWdo dDogODBweDsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBvdmVyZmxvdzog aGlkZGVuOworICBtYXJnaW4tYm90dG9tOiAxMHB4OworICAtd2Via2l0LWJv cmRlci1yYWRpdXM6IDJweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAycHg7 CisgIGJvcmRlci1yYWRpdXM6IDJweDsKK30KKworZGl2LmNsaXAgeworICB3 aWR0aDogMzBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBtYXJnaW46IDEwcHgg YXV0bzsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLmZpbGVfbGlzdGlu ZyAjY29udGVudHMuZ3JpZCBwIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHRl eHQtYWxpZ246IGNlbnRlcjsKKyAgbWFyZ2luLWJvdHRvbTogMTBweDsKK30K KworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB7CisgIHdpZHRoOiAx MDAlOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRoLAor LmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0ZCB7CisgIHRleHQtYWxp Z246IGxlZnQ7CisgIHBhZGRpbmc6IDZweDsKKyAgd2hpdGUtc3BhY2U6IG5v d3JhcDsKK30KKworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0aGVh ZCB7CisgIGJhY2tncm91bmQ6IHJnYigyNDQsMjQxLDIzNyk7IC8qIE9sZCBi cm93c2VycyAqLworICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVu dCh0b3AsIHJnYmEoMjQ0LDI0MSwyMzcsMSkgMCUsIHJnYmEoMjE0LDIxMiwy MDksMSkgMTAwJSk7IC8qIEZGMy42KyAqLworICBiYWNrZ3JvdW5kOiAtd2Vi a2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBj b2xvci1zdG9wKDAlLHJnYmEoMjQ0LDI0MSwyMzcsMSkpLCBjb2xvci1zdG9w KDEwMCUscmdiYSgyMTQsMjEyLDIwOSwxKSkpOyAvKiBDaHJvbWUsU2FmYXJp NCsgKi8KKyAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQo dG9wLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDAlLHJnYmEoMjE0LDIxMiwyMDks MSkgMTAwJSk7IC8qIENocm9tZTEwKyxTYWZhcmk1LjErICovCisgIGJhY2tn cm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMjQ0LDI0MSwy MzcsMSkgMCUscmdiYSgyMTQsMjEyLDIwOSwxKSAxMDAlKTsgLyogT3BlcmEg MTEuMTArICovCisgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQo dG9wLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDAlLHJnYmEoMjE0LDIxMiwyMDks MSkgMTAwJSk7IC8qIElFMTArICovCisgIGJhY2tncm91bmQ6IGxpbmVhci1n cmFkaWVudCh0byBib3R0b20sIHJnYmEoMjQ0LDI0MSwyMzcsMSkgMCUscmdi YSgyMTQsMjEyLDIwOSwxKSAxMDAlKTsgLyogVzNDICovCisgIGJvcmRlci1i b3R0b206IDFweCBzb2xpZCAjY2NjOworICBkaXNwbGF5OiBpbmxpbmUtYmxv Y2s7CisgIHdpZHRoOiAxMDAlOworfQorCisuZmlsZV9saXN0aW5nICNjb250 ZW50cy5saXN0IHRoIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGN1cnNv cjogcG9pbnRlcjsKK30KKworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlz dCB0aC50YWJsZXNvcnRlci1oZWFkZXJBc2MsCisuZmlsZV9saXN0aW5nICNj b250ZW50cy5saXN0IHRoLnRhYmxlc29ydGVyLWhlYWRlckRlc2MgeworICBi YWNrZ3JvdW5kOiByZ2IoMjE0LDIxMiwyMDkpOyAvKiBPbGQgYnJvd3NlcnMg Ki8KKyAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCBy Z2JhKDIxNCwyMTIsMjA5LDEpIDAlLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDEw MCUpOyAvKiBGRjMuNisgKi8KKyAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFk aWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3Rv cCgwJSxyZ2JhKDIxNCwyMTIsMjA5LDEpKSwgY29sb3Itc3RvcCgxMDAlLHJn YmEoMjQ0LDI0MSwyMzcsMSkpKTsgLyogQ2hyb21lLFNhZmFyaTQrICovCisg IGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdi YSgyMTQsMjEyLDIwOSwxKSAwJSxyZ2JhKDI0NCwyNDEsMjM3LDEpIDEwMCUp OyAvKiBDaHJvbWUxMCssU2FmYXJpNS4xKyAqLworICBiYWNrZ3JvdW5kOiAt by1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDIxNCwyMTIsMjA5LDEpIDAl LHJnYmEoMjQ0LDI0MSwyMzcsMSkgMTAwJSk7IC8qIE9wZXJhIDExLjEwKyAq LworICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdi YSgyMTQsMjEyLDIwOSwxKSAwJSxyZ2JhKDI0NCwyNDEsMjM3LDEpIDEwMCUp OyAvKiBJRTEwKyAqLworICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQo dG8gYm90dG9tLCByZ2JhKDIxNCwyMTIsMjA5LDEpIDAlLHJnYmEoMjQ0LDI0 MSwyMzcsMSkgMTAwJSk7IC8qIFczQyAqLworfQorCisuZmlsZV9saXN0aW5n ICNjb250ZW50cy5saXN0IHRkIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IGRv dHRlZCAjY2NjOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0 IHRkOmZpcnN0LWNoaWxkIHsKKyAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAg cGFkZGluZy1sZWZ0OiAwOworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy1s ZWZ0OiAyMnB4OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owor ICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAzcHggY2VudGVyOworfQorCisuZmls ZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRkLnRibF9mb2xkZXI6Zmlyc3Qt Y2hpbGQ6YmVmb3JlIHsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7CisgIGNvbG9y OiByZ2IoMjU1LCAyMDQsIDApOworfQorCisuZmlsZV9saXN0aW5nICNjb250 ZW50cy5saXN0IHRkLnRibF9maWxlOmZpcnN0LWNoaWxkOmJlZm9yZSB7Cisg IG1hcmdpbi1yaWdodDogNXB4OworfQorCisuZmlsZV9saXN0aW5nICNjb250 ZW50cy5saXN0IHRkLnRibF9kcml2ZTpmaXJzdC1jaGlsZDpiZWZvcmUgewor ICBjb2xvcjogZGFya2dyYXk7CisgIG1hcmdpbi1yaWdodDogNXB4OworfQor CisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRib2R5IHRyOmhvdmVy IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgY3Vyc29yOiBwb2lu dGVyOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5ncmlkIGxpOmhv dmVyIHsKKyAgYm9yZGVyOiAxcHggc29saWQgI0U1RTVFNTsKKyAgYmFja2dy b3VuZC1jb2xvcjogI0Y3RjdGNzsKKyAgY3Vyc29yOiBwb2ludGVyOworICBt YXgtaGVpZ2h0OiA3OHB4OworfQorCisubWV0YSB7CisgIGRpc3BsYXk6IG5v bmU7Cit9CisKKyNhY3Rpdml0eSB7CisgIG1hcmdpbjogMTAwcHggYXV0bzsK K30KKworYnV0dG9uLmdyaWQgc3BhbiwKK2J1dHRvbi5saXN0IHNwYW4gewor ICB3aWR0aDogMjBweDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVh dDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKK30K KworLmZpbGVfbGlzdGluZyAjY29udGVudHMgbGkgeworICBwb3NpdGlvbjog cmVsYXRpdmU7Cit9CisKKyNkcm9wem9uZS1jb250YWluZXIgaDIgeworICBm b250LXNpemU6IDIwcHg7CisgIG1hcmdpbi10b3A6IDA7Cit9CisKKy5wZ2Fk bWluLXN0b3JhZ2UtYm9keSB7CisgIG1pbi13aWR0aDogNzUwcHggIWltcG9y dGFudDsKKyAgbWluLWhlaWdodDogMzgwcHggIWltcG9ydGFudDsKK30KKwor LnBnYWRtaW4tc3RvcmFnZS1ib2R5IC5hanMtY29udGVudCB7CisgIHRvcDog MHB4ICFpbXBvcnRhbnQ7CisgIGxlZnQ6IDAgIWltcG9ydGFudDsKKyAgcmln aHQ6IDAgIWltcG9ydGFudDsKKyAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7 CisgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cit9CisKKy5zdG9yYWdlX2Rp YWxvZyB7CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6IDEwMCU7Cit9CisK Ky5zdG9yYWdlX2NvbnRlbnQgeworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRo OiAxMDAlOworfQorCisuZmlsZV9tYW5hZ2VyIHsKKyAgYm90dG9tOiAwOwor ICBsZWZ0OiAwOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHJpZ2h0OiAw OworICB0b3A6IDA7Cit9CisKKy5idG4tZ3JvdXAuZmlsZW1hbmFnZXItYnRu LWdyb3VwIC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxk KSB7CisgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0E5QTlBOTsKK30KKwor LmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3Jv dXAgeworICBwYWRkaW5nOiAwOworICBkaXNwbGF5OiBibG9jazsKKyAgYm9y ZGVyOiAxcHggc29saWQgZGFya2dyZXk7CisgIGhlaWdodDogMzBweDsKKyAg Ym9yZGVyLXJhZGl1czogNXB4OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6 IDVweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CisgIGZsb2F0OiBs ZWZ0OworICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cit9CisKKy5maWxlX21hbmFn ZXIgI3VwbG9hZGVyIC5idG4tZ3JvdXAgLmJ0bltkaXNhYmxlZF0geworICBj b2xvcjogIzg4ODsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsKK30KKwor LmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLWJ0bi1ncm91 cCB7CisgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtncmV5OworICBib3JkZXIt cmFkaXVzOiA1cHg7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4Owor ICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgd2lkdGg6IGF1dG87Cisg IGZsb2F0OiBsZWZ0OworICBvdmVyZmxvdzogaGlkZGVuOworfQorCisuZmls ZV9tYW5hZ2VyIC5idG4tZ3JvdXAgeworICBtYXJnaW46IDJweCAzcHg7Cit9 CisKKy5maWxlX21hbmFnZXIgLmZpbGVpbmZvIHsKKyAgaGVpZ2h0OiBjYWxj KDEwMCUgLSAxMDlweCk7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIHBvc2l0 aW9uOiByZWxhdGl2ZTsKKyAgdG9wOiAzNXB4OworICBmb250LXNpemU6IDEy cHg7Cit9CisKKy5maWxlX21hbmFnZXIgLmZpbGVpbmZvICNjb250ZW50c3sK KyAgcGFkZGluZzogNXB4OworICB0ZXh0LWFsaWduOiBsZWZ0OworICBkaXNw bGF5OiBpbmxpbmUtYmxvY2s7CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6 IDEwMCU7CisgIG92ZXJmbG93OiBhdXRvOworfQorCisuZmlsZV9tYW5hZ2Vy IC5maWxlaW5mbyAjY29udGVudHMgdGhlYWQgdHJ7CisgIHBvc2l0aW9uOiBy ZWxhdGl2ZTsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDAlOwor fQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGhlYWQg dHIgdGg6bnRoLWNoaWxkKDEpLAorLmZpbGVfbWFuYWdlciAuZmlsZWluZm8g I2NvbnRlbnRzIHRib2R5IHRyIHRkOm50aC1jaGlsZCgxKSB7CisgIHBvc2l0 aW9uOiByZWxhdGl2ZTsKKyAgd2lkdGg6IDEwMCU7CisgIG1pbi13aWR0aDog MTAwJTsKKyAgbWF4LXdpZHRoOiAxMDAlOworfQorCisuZmlsZV9tYW5hZ2Vy IC5maWxlaW5mbyAjY29udGVudHMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIp IHsKKyAgd2lkdGg6IDE1MnB4OworICBtaW4td2lkdGg6IDE1MnB4OworICBt YXgtd2lkdGg6IDE1MnB4OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5m byAjY29udGVudHMgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDIpIHsKKyAgd2lk dGg6IDE1MHB4OworICBtaW4td2lkdGg6IDE1MHB4OworICBtYXgtd2lkdGg6 IDE1MHB4OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVu dHMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDMpIHsKKyAgd2lkdGg6IDE5N3B4 OworICBtaW4td2lkdGg6IDE5N3B4OworICBtYXgtd2lkdGg6IDE5N3B4Owor fQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGJvZHkg dHIgdGQ6bnRoLWNoaWxkKDMpIHsKKyAgd2lkdGg6IDE4MHB4OworICBtaW4t d2lkdGg6IDE4MHB4OworICBtYXgtd2lkdGg6IDE4MHB4OworfQorCisuZmls ZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGJvZHkgeworICBkaXNw bGF5OiBibG9jazsKKyAgb3ZlcmZsb3c6IGF1dG87CisgIHdpZHRoOiAxMDAl OworICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDMwcHgpOworfQorLmZpbGVfbWFu YWdlciAuZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5IHRyeworICBkaXNwbGF5 OiB0YWJsZTsKKyAgbWF4LXdpZHRoOiAxMDAlOworICB3aWR0aDogMTAwJTsK K30KKworLmZpbGVfbWFuYWdlciAudXBsb2FkX2ZpbGUgeworICBkaXNwbGF5 OiBub25lOworICB6LWluZGV4OiAxOworICBtYXJnaW4tYm90dG9tOiBhdXRv OworICB0b3A6IDA7CisgIG1hcmdpbi10b3A6IDA7CisgIGhlaWdodDogY2Fs YygxMDAlIC0gNXB4KTsKKyAgd2lkdGg6IDEwMCU7CisgIGJvcmRlcjogbm9u ZTsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDA7CisgIGJh Y2tncm91bmQtY29sb3I6IGJsYWNrOworICBwYWRkaW5nOiAwcHg7CisgIHBh ZGRpbmctdG9wOiAyMnB4OworICBwYWRkaW5nLWxlZnQ6IDEwcHg7Cit9CisK Ky5maWxlX21hbmFnZXIgLnVwbG9hZF9maWxlICNkcm9wem9uZS1jb250YWlu ZXIgeworICBoZWlnaHQ6IDEwMCU7Cit9CisKKy5maWxlX21hbmFnZXIgLnVw bG9hZF9maWxlICNtdWx0aXBsZS11cGxvYWRzIHsKKyAgYmFja2dyb3VuZDog YmxhY2s7CisgIGNvbG9yOiB3aGl0ZTsKKyAgcGFkZGluZzogMHB4ICFpbXBv cnRhbnQ7CisgIGhlaWdodDogY2FsYygxMDAlIC0gMjBweCk7CisgIG92ZXJm bG93OiBhdXRvOworICB3aWR0aDogMTAwJTsKK30KKworLmZpbGVpbmZvIC5w cm9tcHQtaW5mbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgY29sb3I6 ICNmZmY7Cit9CisKKy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5idG4tZ3Jv dXAgLnNob3dfc2VsZWN0ZWRfZmlsZSB7CisgIGZsb2F0OiBsZWZ0OworICB0 ZXh0LWFsaWduOiBsZWZ0OworICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwor ICBwYWRkaW5nOiA0cHggMCAwIDVweDsKKyAgaGVpZ2h0OiAxMDAlOworfQor CisuZmlsZWluZm8gLmZpbGVfbGlzdGluZyB7CisgIGRpc3BsYXk6IGJsb2Nr OworICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDM1cHgpOworICBib3JkZXI6IDFw eCBzb2xpZCAjY2NjOworICBib3JkZXItYm90dG9tOiBub25lOworICBmb250 LXNpemU6IDEycHg7Cit9CisKKy5maWxlaW5mbyAuYWxsb3dlZF9maWxlX3R5 cGVzIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGhlaWdodDogMjVweDsKKyAg cG9zaXRpb246IGFic29sdXRlOworICByaWdodDogMDsKKyAgYm9yZGVyLXRv cDogMXB4IHNvbGlkICNjY2M7CisgIHBhZGRpbmctdG9wOiA0cHg7CisgIGJv dHRvbTogNHB4OworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZDogI2Zm ZjsKK30KKworLmFsbG93ZWRfZmlsZV90eXBlcyAuY3JlYXRlX2lucHV0IHsK KyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiA1cHg7CisgIHdpZHRo OiAyMzBweDsKK30KKworLmFsbG93ZWRfZmlsZV90eXBlcyAuY3JlYXRlX2lu cHV0IHNwYW4geworICBwYWRkaW5nLXJpZ2h0OiA1cHg7Cit9CisKKy5hbGxv d2VkX2ZpbGVfdHlwZXMgLmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0ZXh0 Il0geworICBib3JkZXItcmFkaXVzOiAzcHg7CisgIC13ZWJraXQtYm9yZGVy LXJhZGl1czogM3B4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDsKKyAg aGVpZ2h0OiAyMnB4OworICB3aWR0aDogMTQwcHg7CisgIGZvbnQtc2l6ZTog MTNweDsKKyAgZGlzcGxheTogaW5saW5lOworfQorCisuYWxsb3dlZF9maWxl X3R5cGVzIC5jaGFuZ2VfZmlsZV90eXBlcyB7CisgIHBvc2l0aW9uOiBhYnNv bHV0ZTsKKyAgdG9wOiA0cHg7CisgIHJpZ2h0OiAwOworfQorCisuYWxsb3dl ZF9maWxlX3R5cGVzIC5jaGFuZ2VfZmlsZV90eXBlcyBzZWxlY3QgeworICB3 aWR0aDogNzVweDsKKyAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgIGZsb2F0OiBy aWdodDsKKyAgaGVpZ2h0OiAyMnB4OworfQorCisuYWxsb3dlZF9maWxlX3R5 cGVzIC5jaGFuZ2VfZmlsZV90eXBlcyBsYWJlbCB7CisgIGZsb2F0OiByaWdo dDsKKyAgcGFkZGluZy10b3A6IDNweDsKK30KKworLnVwbG9hZF9maWxlIC5m aWxlX3VwbG9hZF9tYWluIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBo ZWlnaHQ6IDEyN3B4OzsKKyAgd2lkdGg6IDEyMHB4OworICBkaXNwbGF5OiBp bmxpbmUtYmxvY2s7CisgIG1hcmdpbjogMCAxNXB4IDE1cHggMCAhaW1wb3J0 YW50OworICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgcG9zaXRpb246 IHJlbGF0aXZlOworICBib3JkZXItcmFkaXVzOiA1cHg7CisgIC13ZWJraXQt Ym9yZGVyLXJhZGl1czogNXB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDVw eDsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgbWFyZ2luOiAycHg7CisgIG9w YWNpdHk6IDE7Cit9CisKKy51cGxvYWRfZmlsZSAuZmlsZV91cGxvYWRfbWFp biAuc2hvd19lcnJvciB7CisgIHBhZGRpbmc6IDEwcHggMCAwIDEwcHg7Cisg IGNvbG9yOiAjMDAwOworfQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2Fk X21haW4gLnNob3dfZXJyb3IgcC5zaXplIHsKKyAgdGV4dC1hbGlnbjogY2Vu dGVyOworfQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4gLnNo b3dfZXJyb3IgcC5uYW1lIHsKKyAgZm9udC1zaXplOiAxM3B4OworICBvdmVy ZmxvdzogaGlkZGVuOworICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKKyAg dGV4dC1hbGlnbjogY2VudGVyOworfQorCisuZmlsZV91cGxvYWRfbWFpbiAu ZHotcHJldmlldyB7CisgIG1hcmdpbjogMDsKK30KKworLmZpbGVfdXBsb2Fk X21haW4gLmR6LXByb2dyZXNzIHsKKyAgdG9wOiA4M3B4ICFpbXBvcnRhbnQ7 CisgIGJvcmRlcjogMXB4IHNvbGlkICM4YTZkM2I7CisgIGJvcmRlci1yYWRp dXM6IDAgIWltcG9ydGFudDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwICFp bXBvcnRhbnQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0 YW50OworfQorCisuZmlsZV91cGxvYWRfbWFpbiAuZHotcHJvZ3Jlc3MgLmR6 LXVwbG9hZCB7CisgIGJhY2tncm91bmQ6ICNkOWVkZjcgIWltcG9ydGFudDsK KyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuZmlsZV91cGxvYWRfbWFp biAuZHotcHJvZ3Jlc3MgLmR6LXVwbG9hZC5zdWNjZXNzIHsKKyAgYmFja2dy b3VuZDogZ3JlZW4gIWltcG9ydGFudDsKK30KKworYS5kei1yZW1vdmUgewor ICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CisKKy51cGxvYWRfZmls ZSAuZmlsZV91cGxvYWRfbWFpbiBhLmR6X2ZpbGVfcmVtb3ZlIHsKKyAgcG9z aXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBj b2xvcjogI0ZGMDAwMDsKKyAgY3Vyc29yOiBwb2ludGVyOworICBib3JkZXIt cmFkaXVzOiA1cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4OworICAt d2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgZm9udC1zaXplOiBsYXJn ZTsKK30KKworLnVwbG9hZF9maWxlIC5maWxlX3VwbG9hZF9tYWluIGEuZHpf ZmlsZV9yZW1vdmU6aG92ZXIgeworICBib3JkZXI6IDFweCBzb2xpZCBibGFj azsKK30KKworLmZpbGVpbmZvIC5kZWxldGVfaXRlbSwgLmZpbGVpbmZvIC5y ZXBsYWNlX2ZpbGUgeworICBkaXNwbGF5OiBub25lOworICBwYWRkaW5nOiA3 cHggNXB4OworICBvcGFjaXR5OiAwLjg7CisgIGNvbG9yOiAjZmZmOworICBi b3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTsKKyAgYmFja2dyb3VuZDogIzAw MDsKKyAgYm94LXNoYWRvdzogMXB4IDBweCAzcHggMXB4IHJlZDsKK30KKwor LmZpbGVpbmZvIC5kZWxldGVfaXRlbSBzcGFuLnB1bGwtcmlnaHQgLmJ0biwK Ky5maWxlaW5mbyAucmVwbGFjZV9maWxlIHNwYW4ucHVsbC1yaWdodCAuYnRu IHsKKyAgcGFkZGluZzogMHB4IDVweDsKKyAgY29sb3I6ICMwMDA7CisgIGJh Y2tncm91bmQ6ICNmZmY7CisgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLmZp bGVpbmZvIC5kZWxldGVfaXRlbSBzcGFuLAorLmZpbGVpbmZvIC5yZXBsYWNl X2ZpbGUgc3BhbiB7CisgIG1hcmdpbi1yaWdodDogMTBweDsKK30KKworLnVw bG9hZF9maWxlIC5kel9jcm9zc19idG4geworICBjb2xvcjogI2ZmZjsKKyAg Zm9udC1zaXplOiB4LWxhcmdlOworICByaWdodDogLTRweDsKKyAgcG9zaXRp b246IGFic29sdXRlOworICB0b3A6IC0xcHg7CisgIGJhY2tncm91bmQ6IHRy YW5zcGFyZW50OworICBib3JkZXI6IG5vbmU7Cit9CisKKy5maWxlX21hbmFn ZXIgLmZpbGVpbmZvICNjb250ZW50cyAuZm1fbG9ja19pY29uIHsKKyAgY29s b3I6IHJlZDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDZweDsK KyAgcmlnaHQ6IDA7CisgIGxlZnQ6IDE5cHg7CisgIGZvbnQtc2l6ZTogMTZw eDsKK30KKworLmZpbGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRlbnRzIC5m YS1sb2NrLnRibF9sb2NrX2ljb24geworICBjb2xvcjogcmVkOworICBwb3Np dGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDI5cHg7CisgIHRvcDogNXB4Owor ICBmb250LXNpemU6IDEwcHg7Cit9CisKKy5maWxlaW5mbyAuYWN0aXZpdHkg eworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDUwJTsKKyAgZm9u dC1zaXplOiB4eC1sYXJnZTsKKyAgdG9wOiAzMCU7CisgIHotaW5kZXg6IDE7 Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdl ci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2luZGV4Lmh0bWwgYi93ZWIvcGdh ZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2Vy L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw MC4uNTEwNDRkYQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21p c2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvaW5kZXgu aHRtbApAQCAtMCwwICsxLDU1IEBACivvu788aHRtbD4KKzxoZWFkPgorICA8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7eyB1cmxfZm9y KCdzdGF0aWMnLCBmaWxlbmFtZT0nanMvanF1ZXJ5LmRyb3B6b25lL2Ryb3B6 b25lLmpzJykgfX0iPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCIgc3JjPSJ7eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5k ZXgnKSB9fXV0aWxpdHkuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+ Cis8ZGl2IGNsYXNzPSJmaWxlX21hbmFnZXIiPgorICA8Zm9ybSBpZD0idXBs b2FkZXIiIG1ldGhvZD0icG9zdCIgY2xhc3M9J2NvbC14cy0xMic+CisgICAg PGRpdiBjbGFzcz0iYnRuLWdyb3VwIGZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAg Y29sLXNtLTcgY29sLXhzLTEyIiByb2xlPSJncm91cCI+CisgICAgICA8YnV0 dG9uIG5hbWU9ImhvbWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkhvbWUiIHRp dGxlPSJIb21lIiBjbGFzcz0iZmEgZmEtaG9tZSBidG4gaG9tZSI+PHNwYW4+ PC9zcGFuPjwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBuYW1lPSJsZXZlbC11 cCIgdHlwZT0iYnV0dG9uIiB0aXRsZT0iQmFjayIgdmFsdWU9IkxldmVsVXAi IGNsYXNzPSJidG4gZmEgZmEtbGV2ZWwtdXAgbGV2ZWwtdXAiIGRpc2FibGVk PjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4KKyAgICAgIDxoMSB0aXRsZT0nJz48 L2gxPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCBm aWxlbWFuYWdlci1idG4tZ3JvdXAiIHJvbGU9Imdyb3VwIj4KKyAgICAgIDxk aXYgY2xhc3M9InVwbG9hZHJlc3BvbnNlIj48L2Rpdj4KKyAgICAgIDxpbnB1 dCBjbGFzcz0ibW9kZSIgbmFtZT0ibW9kZSIgdHlwZT0iaGlkZGVuIiB2YWx1 ZT0iYWRkIiAvPgorICAgICAgPGlucHV0IGNsYXNzPSJjdXJyZW50cGF0aCIg bmFtZT0iY3VycmVudHBhdGgiIHR5cGU9ImhpZGRlbiIgLz4KKyAgICAgIDxi dXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iUmVmcmVzaCIgY2xhc3M9ImJ0 biBmYSBmYS1yZWZyZXNoIHJlZnJlc2giPjwvYnV0dG9uPgorICAgICAgPGJ1 dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSJVcGxvYWQgRmlsZSIgdmFsdWU9 IlVwbG9hZCIgY2xhc3M9ImJ0biBmYSBmYS11cGxvYWQgdXBsb2FkIj48c3Bh bj48L3NwYW4+PC9idXR0b24+CisgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRv biIgdGl0bGU9IkRvd25sb2FkIEZpbGUiIGNsYXNzPSJidG4gZmEgZmEtZG93 bmxvYWQgZG93bmxvYWQiIGRpc2FibGVkPjxzcGFuPjwvc3Bhbj48L2J1dHRv bj4KKyAgICAgIDxidXR0b24gbmFtZT0iZGVsZXRlIiB0eXBlPSJidXR0b24i IHRpdGxlPSJEZWxldGUgRmlsZS9Gb2xkZXIiIGNsYXNzPSJidG4gZmEgZmEt dHJhc2ggZGVsZXRlIiBkaXNhYmxlZD48c3Bhbj48L3NwYW4+PC9idXR0b24+ CisgICAgICA8YnV0dG9uIG5hbWU9InJlbmFtZSIgdHlwZT0iYnV0dG9uIiB0 aXRsZT0iUmVuYW1lIEZpbGUvRm9sZGVyIiBjbGFzcz0iYnRuIGZhIGZhLXBl bmNpbC1zcXVhcmUtbyByZW5hbWUiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4K KyAgICAgIDxidXR0b24gbmFtZT0ibmV3Zm9sZGVyIiB0eXBlPSJidXR0b24i IHRpdGxlPSJDcmVhdGUgbmV3IGZvbGRlciIgdmFsdWU9Ik5ldyBGb2xkZXIi IGNsYXNzPSJidG4gZmEgZmEtZm9sZGVyLW9wZW4gY3JlYXRlIj48c3Bhbj48 L3NwYW4+PC9idXR0b24+CisgICAgICA8YnV0dG9uIGNsYXNzPSJPTiBmYSBm YS10aCBidG4gZ3JpZCIgdHlwZT0iYnV0dG9uIiB0aXRsZT0iVmlldyBhcyBn cmlkIj48c3Bhbj48L3NwYW4+PC9idXR0b24+CisgICAgICA8YnV0dG9uIHR5 cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBmYSBmYS1saXN0IGxpc3QiIHRpdGxl PSJWaWV3IGFzIFRhYmxlIj48c3Bhbj48L3NwYW4+PC9idXR0b24+CisgICAg PC9kaXY+CisgIDwvZm9ybT4KKyAgPGRpdiBjbGFzcz0iZmlsZWluZm8iPgor ICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eSI+CisgICAgICA8aW1nIHNyYz0i e3sgdXJsX2ZvcignYnJvd3Nlci5zdGF0aWMnLCBmaWxlbmFtZT0nY3NzL2Fj aVRyZWUvaW1hZ2UvbG9hZC1yb290LmdpZicpIH19Ij4KKyAgICA8L3NwYW4+ CisgICAgPGRpdiBjbGFzcz0nZGVsZXRlX2l0ZW0nPgorICAgICAgPHNwYW4+ QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGl0ZW0gPzwv c3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPgorICAg ICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0nYnRuIGJ0bl95 ZXMnPllFUzwvYnV0dG9uPgorICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0 dG9uJyBjbGFzcz0nYnRuIGJ0bl9ubyc+Tk88L2J1dHRvbj4KKyAgICAgICAg PC9zcGFuPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9J3JlcGxhY2Vf ZmlsZSc+CisgICAgICA8c3Bhbj5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8g cmVwbGFjZSB0aGlzIGZpbGUgPzwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xh c3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0 dG9uJyBjbGFzcz0nYnRuIGJ0bl95ZXMnPllFUzwvYnV0dG9uPgorICAgICAg ICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0nYnRuIGJ0bl9ubyc+ Tk88L2J1dHRvbj4KKyAgICAgICAgPC9zcGFuPgorICAgIDwvZGl2PgorICAg IDxkaXYgY2xhc3M9ImZpbGVfbGlzdGluZyI+CisgICAgPC9kaXY+CisgICAg PGRpdiBjbGFzcz0idXBsb2FkX2ZpbGUgZHJvcHpvbmUiPgorICAgIDwvZGl2 PgorICAgIDxkaXYgY2xhc3M9ImFsbG93ZWRfZmlsZV90eXBlcyI+CisgICAg PC9kaXY+CisgIDwvZGl2PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1w bGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlci5qcyBiL3dlYi9w Z2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFn ZXIvanMvZmlsZV9tYW5hZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmI1ZTQ3YTgKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIv cGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5h Z2VyL2pzL2ZpbGVfbWFuYWdlci5qcwpAQCAtMCwwICsxLDU4NSBAQAorZGVm aW5lKFsKKyAgICAgICdqcXVlcnknLCAndW5kZXJzY29yZScsICd1bmRlcnNj b3JlLnN0cmluZycsICdhbGVydGlmeScsCisgICAgICAncGdhZG1pbi5icm93 c2VyJywgJ2JhY2tib25lJywgJ2JhY2tncmlkJywgJ3BnYWRtaW4uYnJvd3Nl ci5ub2RlJ10sCisKKyAgLy8gVGhpcyBkZWZpbmVzIEZpbGUgTWFuYWdlciBk aWFsb2cKKyAgZnVuY3Rpb24oJCwgXywgUywgYWxlcnRpZnksIHBnQnJvd3Nl ciwgQmFja2JvbmUsIEJhY2tncmlkLCBwZ05vZGUpIHsKKyAgICBwZ0FkbWlu ID0gcGdBZG1pbiB8fCB3aW5kb3cucGdBZG1pbiB8fCB7fTsKKworICAgIC8q CisgICAgICogSG1tLi4uIHRoaXMgbW9kdWxlIGlzIGFscmVhZHkgYmVlbiBp bml0aWFsaXplZCwgd2UgY2FuIHJlZmVyIHRvIHRoZSBvbGQKKyAgICAgKiBv YmplY3QgZnJvbSBoZXJlLgorICAgICAqLworICAgIGlmIChwZ0FkbWluLkZp bGVNYW5hZ2VyKQorICAgICAgICByZXR1cm4gcGdBZG1pbi5GaWxlTWFuYWdl cjsKKworICAgIHBnQWRtaW4uRmlsZU1hbmFnZXIgPSB7CisgICAgICBpbml0 OiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQp CisgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuaW5pdGlhbGl6 ZWQgPSB0cnVlOworCisgICAgICAgIHZhciBtb2R1bGVfdXJsID0gInt7IHVy bF9mb3IoJ2ZpbGVfbWFuYWdlci5pbmRleCcpIH19IiwKKyAgICAgICAgICAg IGZpbGVDb25uZWN0b3IgPSBtb2R1bGVfdXJsICsgImZpbGVtYW5hZ2VyLyI7 CisKKyAgICAgICAgICAvLyBzZW5kIGEgcmVxdWVzdCB0byBnZXQgdHJhbnNh Y3Rpb24gaWQKKyAgICAgICAgICB2YXIgZ2V0VHJhbnNJZCA9IGZ1bmN0aW9u KGNvbmZpZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiAkLmFqYXgoeworICAg ICAgICAgICAgICBkYXRhOiBjb25maWdzLAorICAgICAgICAgICAgICB0eXBl OiAiUE9TVCIsCisgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAg ICAgICAgICAgdXJsOiBtb2R1bGVfdXJsICsgImdldF90cmFuc19pZCIsCisg ICAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCisgICAgICAgICAgICAg IGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYt OCIsCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9OworCisgICAgICAg ICAgLy8gRnVuY3Rpb24gdG8gcmVtb3ZlIHRyYW5zIGlkIGZyb20gc2Vzc2lv bgorICAgICAgICAgIHZhciByZW1vdmVUcmFuc0lkID0gZnVuY3Rpb24oKSB7 CisgICAgICAgICAgICByZXR1cm4gJC5hamF4KHsKKyAgICAgICAgICAgICAg dHlwZTogIkdFVCIsCisgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAg ICAgICAgICAgICAgdXJsOiBtb2R1bGVfdXJsICsgImRlbF90cmFuc19pZC8i ICsgdHJhbnNfaWQsCisgICAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIs CisgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNv bjsgY2hhcnNldD11dGYtOCIsCisgICAgICAgICAgICB9KTsKKyAgICAgICAg ICB9OworICAgICAgICAvLyBEZWNsYXJlIHRoZSBTdG9yYWdlIGRpYWxvZwor ICAgICAgICBhbGVydGlmeS5kaWFsb2coJ3N0b3JhZ2VNYW5hZ2VyRGxnJywg ZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGNvbnRyb2xzID0gW10sIC8v IEtlZXAgdHJhY2tpbmcgb2YgYWxsIHRoZSBiYWNrZm9ybSBjb250cm9scwor ICAgICAgICAgICAgICAvLyBEaWFsb2cgY29udGFpbnRlcgorICAgICAgICAg ICAgICAkY29udGFpbmVyID0gJCgiPGRpdiBjbGFzcz0nc3RvcmFnZV9kaWFs b2cnPjwvZGl2PiIpOworCisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBG dW5jdGlvbjogcmVuZGVyU3RvcmFnZVBhbmVsCisgICAgICAgICAgICoKKyAg ICAgICAgICAgKiBSZW5kZXJzIHRoZSBGaWxlTWFuYWdlciBpbiB0aGUgY29u dGVudCBkaXYgYmFzZWQgb24gdGhlIGdpdmVuCisgICAgICAgICAgICogY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAqLworICAgICAg ICAgIHZhciByZW5kZXJTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbihwYXJhbXMp IHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDbGVhciB0aGUg ZXhpc3RpbmcgaHRtbCBpbiB0aGUgc3RvcmFnZSBjb250ZW50CisgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gJGNvbnRhaW5l ci5maW5kKCcuc3RvcmFnZV9jb250ZW50Jyk7CisgICAgICAgICAgICBjb250 ZW50LmVtcHR5KCk7CisKKyAgICAgICAgICAgICQuZ2V0KCJ7eyB1cmxfZm9y KCdmaWxlX21hbmFnZXIuaW5kZXgnKSB9fSIsIGZ1bmN0aW9uKGRhdGEpIHsK KyAgICAgICAgICAgICAgY29udGVudC5hcHBlbmQoZGF0YSk7CisgICAgICAg ICAgICB9KTsKKworICAgICAgICAgICAgdHJhbnNJZCA9IGdldFRyYW5zSWQo cGFyYW1zKTsKKyAgICAgICAgICAgIGlmICh0cmFuc0lkLnJlYWR5U3RhdGUg PT0gNCkKKyAgICAgICAgICAgICAgdF9yZXMgPSBKU09OLnBhcnNlKHRyYW5z SWQucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIHRyYW5zX2lkID0gdF9y ZXMuZGF0YS5maWxlVHJhbnNJZDsKKworICAgICAgICAgIH07CisKKyAgICAg ICAgICAvLyBEaWFsb2cgcHJvcGVydHkKKyAgICAgICAgICByZXR1cm4gewor ICAgICAgICAgICAgbWFpbjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAg ICAgICAgIC8vIFNldCB0aXRsZSBhbmQgYnV0dG9uIG5hbWUKKyAgICAgICAg ICAgICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zWydkaWFsb2dfdGl0bGUn XSkpCisgICAgICAgICAgICAgICAgcGFyYW1zWydkaWFsb2dfdGl0bGUnXSA9 ICdTdG9yYWdlIG1hbmFnZXInOworICAgICAgICAgICAgICB0aGlzLnNldCgn dGl0bGUnLCBwYXJhbXNbJ2RpYWxvZ190aXRsZSddKTsKKyAgICAgICAgICAg ICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zWydidG5fcHJpbWFyeSddKSkK KyAgICAgICAgICAgICAgICB0aGlzLnNldCgnbGFiZWwnLCBwYXJhbXNbJ2J0 bl9wcmltYXJ5J10pOworICAgICAgICAgICAgICB2YXIgdHJhbnNfaWQ7Cisg ICAgICAgICAgICAgIHRoaXMudGl0bGUgPSBwYXJhbXMuZGlhbG9nX3RpdGxl OworCisgICAgICAgICAgICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KHBh cmFtcyk7CisgICAgICAgICAgICAgICRjb250YWluZXIuZmluZCgnLnN0b3Jh Z2VfY29udGVudCcpLnJlbW92ZSgpOworICAgICAgICAgICAgICAkY29udGFp bmVyLmFwcGVuZCgiPGRpdiBjbGFzcz0nc3RvcmFnZV9jb250ZW50Jz48L2Rp dj4iKTsKKyAgICAgICAgICAgICAgcmVuZGVyU3RvcmFnZVBhbmVsKHBhcmFt cyk7CisgICAgICAgICAgICAgIHRoaXMuc2hvdygpOworICAgICAgICAgICAg fSwKKyAgICAgICAgICAgIHNldHRpbmdzOiB7CisgICAgICAgICAgICAgIGxh YmVsOiB1bmRlZmluZWQKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBz ZXR0aW5nVXBkYXRlZDogZnVuY3Rpb24gKGtleSwgb2xkVmFsdWUsIG5ld1Zh bHVlKSB7CisgICAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAg ICAgICAgIGNhc2UgJ21lc3NhZ2UnOgorICAgICAgICAgICAgICAgICAgdGhp cy5zZXRNZXNzYWdlKG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICBjYXNlICdsYWJlbCc6CisgICAgICAgICAg ICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsLmJ1dHRvbnNbMF0uZWxlbWVu dCkgeworICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbC5i dXR0b25zWzBdLmVsZW1lbnQuaW5uZXJIVE1MID0gbmV3VmFsdWU7CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNl dHVwOmZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICByZXR1cm4geworICAg ICAgICAgICAgICAgIGJ1dHRvbnM6WworICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAie3sgXygnU2VsZWN0JykgfX0i LCBrZXk6IDEzLCBjbGFzc05hbWU6ICJidG4gYnRuLXByaW1hcnkgZmEgZmEt ZmlsZSBmaWxlX21hbmFnZXJfb2sgcGctYWxlcnRpZnktYnV0dG9uIGRpc2Fi bGVkIgorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogInt7IF8oJ0NhbmNlbCcp IH19IiwgY2xhc3NOYW1lOiAiYnRuIGJ0bi1kYW5nZXIgZmEgZmEtdGltZXMg cGctYWxlcnRpZnktYnV0dG9uIgorICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgZm9jdXM6IHsgZWxl bWVudDogMCB9LAorICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKKyAgICAg ICAgICAgICAgICAgIGNsb3NhYmxlQnlEaW1tZXI6IGZhbHNlLAorCisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9OworICAgICAgICAgICAg fSwKKyAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbihjbG9zZUV2ZW50 KSB7CisgICAgICAgICAgICAgIGlmIChjbG9zZUV2ZW50LmJ1dHRvbi5rZXkg PT0gMTMpIHsKKyAgICAgICAgICAgICAgICAvL2Nsb3NlRXZlbnQuY2FuY2Vs ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAo Y2xvc2VFdmVudC5idXR0b24udGV4dCA9PSAie3sgXygnU2VsZWN0JykgfX0i KSB7CisgICAgICAgICAgICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgn dmlldycpID09ICdncmlkJyl7CisgICAgICAgICAgICAgICAgICBzZWxfZmls ZSA9ICQoJy5maWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxlY3Rl ZCBwIHNwYW4nKS5hdHRyKCd0aXRsZScpOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICBzZWxfZmlsZSA9ICQoJy5maWxl aW5mbyB0Ym9keSB0ci5zZWxlY3RlZCB0ZCBwIHNwYW4nKS5hdHRyKCd0aXRs ZScpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIg bmV3RmlsZSA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpICsgc2VsX2ZpbGU7 CisgICAgICAgICAgICAgICAgbmV3RmlsZSA9IG5ld0ZpbGUuc3Vic3RyKDEp OworICAgICAgICAgICAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJp Z2dlcigncGdhZG1pbi1zdG9yYWdlOmZpbmlzaF9idG46c3RvcmFnZV9kaWFs b2cnLCBuZXdGaWxlKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICByZW1vdmVUcmFuc0lkKHRyYW5zX2lkKTsKKyAgICAgICAgICAgIH0sCisg ICAgICAgICAgICBidWlsZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg IHRoaXMuZWxlbWVudHMuY29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVy LmdldCgwKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaG9va3M6 IHsKKyAgICAgICAgICAgICAgb25zaG93OiBmdW5jdGlvbigpIHsKKyAgICAg ICAgICAgICAgICAkKHRoaXMuZWxlbWVudHMuYm9keSkuYWRkQ2xhc3MoJ3Bn YWRtaW4tc3RvcmFnZS1ib2R5Jyk7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAgICB9KTsKKworICAgICAg ICAvLyBEZWNsYXJlIHRoZSBTZWxlY3Rpb24gZGlhbG9nCisgICAgICAgIGFs ZXJ0aWZ5LmRpYWxvZygnZmlsZVNlbGVjdGlvbkRsZycsIGZ1bmN0aW9uKCkg eworICAgICAgICAgIHZhciBjb250cm9scyA9IFtdLCAvLyBLZWVwIHRyYWNr aW5nIG9mIGFsbCB0aGUgYmFja2Zvcm0gY29udHJvbHMKKyAgICAgICAgICAg ICAgLy8gRGlhbG9nIGNvbnRhaW50ZXIKKyAgICAgICAgICAgICAgJGNvbnRh aW5lciA9ICQoIjxkaXYgY2xhc3M9J3N0b3JhZ2VfZGlhbG9nIGZpbGVfc2Vs ZWN0aW9uX2RsZyc+PC9kaXY+Iik7CisKKyAgICAgICAgICAvLyBzZW5kIGEg cmVxdWVzdCB0byBnZXQgdHJhbnNhY3Rpb24gaWQKKyAgICAgICAgICAvKgor ICAgICAgICAgICAqIEZ1bmN0aW9uOiByZW5kZXJTdG9yYWdlUGFuZWwKKyAg ICAgICAgICAgKgorICAgICAgICAgICAqIFJlbmRlcnMgdGhlIEZpbGVNYW5h Z2VyIGluIHRoZSBjb250ZW50IGRpdiBiYXNlZCBvbiB0aGUgZ2l2ZW4KKyAg ICAgICAgICAgKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgICAg ICAgICovCisgICAgICAgICAgdmFyIHJlbmRlclN0b3JhZ2VQYW5lbCA9IGZ1 bmN0aW9uKGNvbmZpZ3MpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg ICAgKiBDbGVhciB0aGUgZXhpc3RpbmcgaHRtbCBpbiB0aGUgc3RvcmFnZSBj b250ZW50CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHZhciBjb250 ZW50ID0gJGNvbnRhaW5lci5maW5kKCcuc3RvcmFnZV9jb250ZW50Jyk7Cisg ICAgICAgICAgICBjb250ZW50LmVtcHR5KCk7CisKKyAgICAgICAgICAgICQu Z2V0KCJ7eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5kZXgnKSB9fSIsIGZ1 bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgY29udGVudC5hcHBlbmQo ZGF0YSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdHJhbnNJ ZCA9IGdldFRyYW5zSWQoY29uZmlncyk7CisgICAgICAgICAgICBpZiAodHJh bnNJZC5yZWFkeVN0YXRlID09IDQpCisgICAgICAgICAgICAgIHRfcmVzID0g SlNPTi5wYXJzZSh0cmFuc0lkLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAg ICB0cmFuc19pZCA9IHRfcmVzLmRhdGEuZmlsZVRyYW5zSWQ7CisgICAgICAg ICAgfTsKKworICAgICAgICAgIC8vIERpYWxvZyBwcm9wZXJ0eQorICAgICAg ICAgIHJldHVybiB7CisgICAgICAgICAgICBtYWluOiBmdW5jdGlvbihwYXJh bXMpIHsKKyAgICAgICAgICAgICAgLy8gU2V0IHRpdGxlIGFuZCBidXR0b24g bmFtZQorICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXNb J2RpYWxvZ190aXRsZSddKSkKKyAgICAgICAgICAgICAgICBwYXJhbXNbJ2Rp YWxvZ190aXRsZSddID0gJ1NlbGVjdCBmaWxlJzsKKyAgICAgICAgICAgICAg dGhpcy5zZXQoJ3RpdGxlJywgcGFyYW1zWydkaWFsb2dfdGl0bGUnXSk7Cisg ICAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtc1snYnRuX3By aW1hcnknXSkpCisgICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2xhYmVsJywg cGFyYW1zWydidG5fcHJpbWFyeSddKTsKKyAgICAgICAgICAgICAgdmFyIHRy YW5zX2lkOworICAgICAgICAgICAgICB0aGlzLnRpdGxlID0gcGFyYW1zLmRp YWxvZ190aXRsZTsKKworICAgICAgICAgICAgICBwYXJhbXMgPSBKU09OLnN0 cmluZ2lmeShwYXJhbXMpOworICAgICAgICAgICAgICAkY29udGFpbmVyLmZp bmQoJy5zdG9yYWdlX2NvbnRlbnQnKS5yZW1vdmUoKTsKKyAgICAgICAgICAg ICAgJGNvbnRhaW5lci5hcHBlbmQoIjxkaXYgY2xhc3M9J3N0b3JhZ2VfY29u dGVudCc+PC9kaXY+Iik7CisgICAgICAgICAgICAgIHJlbmRlclN0b3JhZ2VQ YW5lbChwYXJhbXMpOworICAgICAgICAgICAgICB0aGlzLnNob3coKTsKKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXR0aW5nczogeworICAgICAg ICAgICAgICBsYWJlbDogdW5kZWZpbmVkCisgICAgICAgICAgICB9LAorICAg ICAgICAgICAgc2V0dGluZ1VwZGF0ZWQ6IGZ1bmN0aW9uIChrZXksIG9sZFZh bHVlLCBuZXdWYWx1ZSkgeworICAgICAgICAgICAgICBzd2l0Y2ggKGtleSkg eworICAgICAgICAgICAgICBjYXNlICdtZXNzYWdlJzoKKyAgICAgICAgICAg ICAgICAgIHRoaXMuc2V0TWVzc2FnZShuZXdWYWx1ZSk7CisgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnbGFiZWwnOgor ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbC5idXR0b25z WzBdLmVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9f aW50ZXJuYWwuYnV0dG9uc1swXS5lbGVtZW50LmlubmVySFRNTCA9IG5ld1Zh bHVlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAg ICAgICAgICBzZXR1cDpmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgICAgICBidXR0b25zOlsKKyAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogInt7IF8oJ1Nl bGVjdCcpIH19Iiwga2V5OiAxMywgY2xhc3NOYW1lOiAiYnRuIGJ0bi1wcmlt YXJ5IGZhIGZhLWZpbGUgZmlsZV9tYW5hZ2VyX29rIHBnLWFsZXJ0aWZ5LWJ1 dHRvbiBkaXNhYmxlZCIKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ7eyBf KCdDYW5jZWwnKSB9fSIsIGtleTogMjcsIGNsYXNzTmFtZTogImJ0biBidG4t ZGFuZ2VyIGZhIGZhLXRpbWVzIHBnLWFsZXJ0aWZ5LWJ1dHRvbiIKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAg ICAgICAgIGZvY3VzOiB7IGVsZW1lbnQ6IDAgfSwKKyAgICAgICAgICAgICAg ICBvcHRpb25zOiB7CisgICAgICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGlt bWVyOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1heGltaXphYmxlOiBm YWxzZSwKKyAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSwKKyAg ICAgICAgICAgICAgICAgIG1vdmFibGU6IHRydWUKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LAorICAgICAg ICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGNsb3NlRXZlbnQpIHsKKyAgICAg ICAgICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0dG9uLnRleHQgPT0gInt7IF8o J1NlbGVjdCcpIH19IikgeworICAgICAgICAgICAgICAgIGlmKCQoJy5maWxl aW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAgICAgICAgICAg ICAgICAgc2VsX2ZpbGUgPSAkKCcuZmlsZWluZm8nKS5maW5kKCcjY29udGVu dHMgbGkuc2VsZWN0ZWQgIHAgc3BhbicpLmF0dHIoJ3RpdGxlJyk7CisgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHNlbF9m aWxlID0gJCgnLmZpbGVpbmZvIHRib2R5IHRyLnNlbGVjdGVkIHRkIHAgc3Bh bicpLmF0dHIoJ3RpdGxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIHZhciBuZXdGaWxlID0gJCgnLmN1cnJlbnRwYXRoJykudmFs KCkgKyBzZWxfZmlsZTsKKyAgICAgICAgICAgICAgICBuZXdGaWxlID0gbmV3 RmlsZS5zdWJzdHIoMSk7CisgICAgICAgICAgICAgICAgcGdBZG1pbi5Ccm93 c2VyLkV2ZW50cy50cmlnZ2VyKCdwZ2FkbWluLXN0b3JhZ2U6ZmluaXNoX2J0 bjpzZWxlY3RfZmlsZScsIG5ld0ZpbGUpOworICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIHJlbW92ZVRyYW5zSWQodHJhbnNfaWQpOworICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgIGJ1aWxkOiBmdW5jdGlvbigpIHsKKyAg ICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxk KCRjb250YWluZXIuZ2V0KDApKTsKKyAgICAgICAgICAgIH0sCisgICAgICAg ICAgICBob29rczogeworICAgICAgICAgICAgICBvbnNob3c6IGZ1bmN0aW9u KCkgeworICAgICAgICAgICAgICAgICQodGhpcy5lbGVtZW50cy5ib2R5KS5h ZGRDbGFzcygncGdhZG1pbi1zdG9yYWdlLWJvZHknKTsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgIH0p OworCisgICAgICAgIC8vIERlY2xhcmUgdGhlIEZvbGRlciBTZWxlY3Rpb24g ZGlhbG9nCisgICAgICAgIGFsZXJ0aWZ5LmRpYWxvZygnZm9sZGVyU2VsZWN0 aW9uRGxnJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGNvbnRyb2xz ID0gW10sIC8vIEtlZXAgdHJhY2tpbmcgb2YgYWxsIHRoZSBiYWNrZm9ybSBj b250cm9scworICAgICAgICAgICAgICAvLyBEaWFsb2cgY29udGFpbnRlcgor ICAgICAgICAgICAgICAkY29udGFpbmVyID0gJCgiPGRpdiBjbGFzcz0nc3Rv cmFnZV9kaWFsb2cgZm9sZGVyX3NlbGVjdGlvbl9kbGcnPjwvZGl2PiIpOwor CisgICAgICAgICAgLy8gc2VuZCBhIHJlcXVlc3QgdG8gZ2V0IHRyYW5zYWN0 aW9uIGlkCisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBGdW5jdGlvbjog cmVuZGVyU3RvcmFnZVBhbmVsCisgICAgICAgICAgICoKKyAgICAgICAgICAg KiBSZW5kZXJzIHRoZSBGaWxlTWFuYWdlciBpbiB0aGUgY29udGVudCBkaXYg YmFzZWQgb24gdGhlIGdpdmVuCisgICAgICAgICAgICogY29uZmlndXJhdGlv biBwYXJhbWV0ZXJzLgorICAgICAgICAgICAqLworICAgICAgICAgIHZhciBy ZW5kZXJTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgKiBDbGVhciB0aGUgZXhpc3Rpbmcg aHRtbCBpbiB0aGUgc3RvcmFnZSBjb250ZW50CisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIHZhciBjb250ZW50ID0gJGNvbnRhaW5lci5maW5kKCcu c3RvcmFnZV9jb250ZW50Jyk7CisgICAgICAgICAgICBjb250ZW50LmVtcHR5 KCk7CisKKyAgICAgICAgICAgICQuZ2V0KCJ7eyB1cmxfZm9yKCdmaWxlX21h bmFnZXIuaW5kZXgnKSB9fSIsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAg ICAgICAgY29udGVudC5hcHBlbmQoZGF0YSk7CisgICAgICAgICAgICB9KTsK KworICAgICAgICAgICAgdHJhbnNJZCA9IGdldFRyYW5zSWQocGFyYW1zKTsK KyAgICAgICAgICAgIGlmICh0cmFuc0lkLnJlYWR5U3RhdGUgPT0gNCkKKyAg ICAgICAgICAgICAgdF9yZXMgPSBKU09OLnBhcnNlKHRyYW5zSWQucmVzcG9u c2VUZXh0KTsKKyAgICAgICAgICAgIHRyYW5zX2lkID0gdF9yZXMuZGF0YS5m aWxlVHJhbnNJZDsKKworICAgICAgICAgIH07CisKKyAgICAgICAgICAvLyBE aWFsb2cgcHJvcGVydHkKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAg ICAgbWFpbjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgICAgICAgIC8v IFNldCB0aXRsZSBhbmQgYnV0dG9uIG5hbWUKKyAgICAgICAgICAgICAgaWYg KF8uaXNVbmRlZmluZWQocGFyYW1zWydkaWFsb2dfdGl0bGUnXSkpCisgICAg ICAgICAgICAgICAgcGFyYW1zWydkaWFsb2dfdGl0bGUnXSA9ICdTZWxlY3Qg Zm9sZGVyJzsKKyAgICAgICAgICAgICAgdGhpcy5zZXQoJ3RpdGxlJywgcGFy YW1zWydkaWFsb2dfdGl0bGUnXSk7CisgICAgICAgICAgICAgIGlmIChfLmlz VW5kZWZpbmVkKHBhcmFtc1snYnRuX3ByaW1hcnknXSkpCisgICAgICAgICAg ICAgICAgdGhpcy5zZXQoJ2xhYmVsJywgcGFyYW1zWydidG5fcHJpbWFyeSdd KTsKKyAgICAgICAgICAgICAgdmFyIHRyYW5zX2lkOworICAgICAgICAgICAg ICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpOworICAgICAgICAg ICAgICAkY29udGFpbmVyLmZpbmQoJy5zdG9yYWdlX2NvbnRlbnQnKS5yZW1v dmUoKTsKKyAgICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoIjxkaXYg Y2xhc3M9J3N0b3JhZ2VfY29udGVudCc+PC9kaXY+Iik7CisgICAgICAgICAg ICAgIHJlbmRlclN0b3JhZ2VQYW5lbChwYXJhbXMpOworICAgICAgICAgICAg ICB0aGlzLnNob3coKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBz ZXR0aW5nczogeworICAgICAgICAgICAgICBsYWJlbDogdW5kZWZpbmVkCisg ICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0dGluZ1VwZGF0ZWQ6IGZ1 bmN0aW9uIChrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSkgeworICAgICAgICAg ICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICAgICAgICBjYXNlICdtZXNz YWdlJzoKKyAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVzc2FnZShuZXdW YWx1ZSk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSAnbGFiZWwnOgorICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu X19pbnRlcm5hbC5idXR0b25zWzBdLmVsZW1lbnQpIHsKKyAgICAgICAgICAg ICAgICAgICAgICB0aGlzLl9faW50ZXJuYWwuYnV0dG9uc1swXS5lbGVtZW50 LmlubmVySFRNTCA9IG5ld1ZhbHVlOworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXR1cDpmdW5jdGlvbigpIHsK KyAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBidXR0 b25zOlsKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgdGV4dDogInt7IF8oJ1NlbGVjdCcpIH19Iiwga2V5OiAxMywgY2xhc3NO YW1lOiAiYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLWZpbGUgZmlsZV9tYW5hZ2Vy X29rIHBnLWFsZXJ0aWZ5LWJ1dHRvbiBkaXNhYmxlZCIKKyAgICAgICAgICAg ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIHRleHQ6ICJ7eyBfKCdDYW5jZWwnKSB9fSIsIGtleTogMjcsIGNs YXNzTmFtZTogImJ0biBidG4tZGFuZ2VyIGZhIGZhLXRpbWVzIHBnLWFsZXJ0 aWZ5LWJ1dHRvbiIKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBdLAorICAgICAgICAgICAgICAgIGZvY3VzOiB7IGVsZW1lbnQ6IDAg fSwKKyAgICAgICAgICAgICAgICBvcHRpb25zOiB7CisgICAgICAgICAgICAg ICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgIG1heGltaXphYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIGNs b3NhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1vdmFibGU6IHRy dWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH07CisgICAg ICAgICAgICB9LAorICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGNs b3NlRXZlbnQpIHsKKyAgICAgICAgICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0 dG9uLnRleHQgPT0gInt7IF8oJ1NlbGVjdCcpIH19IikgeworICAgICAgICAg ICAgICAgIGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3Jp ZCcpeworICAgICAgICAgICAgICAgICAgc2VsX2ZpbGUgPSAkKCcuZmlsZWlu Zm8nKS5maW5kKCcjY29udGVudHMgbGkuc2VsZWN0ZWQgcCBzcGFuJykuYXR0 cigndGl0bGUnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgc2VsX2ZpbGUgPSAkKCcuZmlsZWluZm8gdGJvZHkgdHIu c2VsZWN0ZWQgdGQgcCBzcGFuJykuYXR0cigndGl0bGUnKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkKCcu Y3VycmVudHBhdGgnKS52YWwoKSArIHNlbF9maWxlOworICAgICAgICAgICAg ICAgIG5ld0ZpbGUgPSBuZXdGaWxlLnN1YnN0cigxKTsKKyAgICAgICAgICAg ICAgICBwZ0FkbWluLkJyb3dzZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRtaW4t c3RvcmFnZTpmaW5pc2hfYnRuOnNlbGVjdF9mb2xkZXInLCBuZXdGaWxlKTsK KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZW1vdmVUcmFuc0lk KHRyYW5zX2lkKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBidWls ZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMu Y29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgwKSk7CisgICAg ICAgICAgICB9LAorICAgICAgICAgICAgaG9va3M6IHsKKyAgICAgICAgICAg ICAgb25zaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAkKHRo aXMuZWxlbWVudHMuYm9keSkuYWRkQ2xhc3MoJ3BnYWRtaW4tc3RvcmFnZS1i b2R5Jyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICB9OworICAgICAgICB9KTsKKworICAgICAgICAvLyBEZWNsYXJlIHRo ZSBDcmVhdGUgbW9kZSBkaWFsb2cKKyAgICAgICAgYWxlcnRpZnkuZGlhbG9n KCdjcmVhdGVNb2RlRGxnJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFy IGNvbnRyb2xzID0gW10sIC8vIEtlZXAgdHJhY2tpbmcgb2YgYWxsIHRoZSBi YWNrZm9ybSBjb250cm9scworICAgICAgICAgICAgICAvLyBEaWFsb2cgY29u dGFpbnRlcgorICAgICAgICAgICAgICAkY29udGFpbmVyID0gJCgiPGRpdiBj bGFzcz0nc3RvcmFnZV9kaWFsb2cgY3JlYXRlX21vZGVfZGxnJz48L2Rpdj4i KTsKKworICAgICAgICAgIC8qCisgICAgICAgICAgICogRnVuY3Rpb246IHJl bmRlclN0b3JhZ2VQYW5lbAorICAgICAgICAgICAqCisgICAgICAgICAgICog UmVuZGVycyB0aGUgRmlsZU1hbmFnZXIgaW4gdGhlIGNvbnRlbnQgZGl2IGJh c2VkIG9uIHRoZSBnaXZlbgorICAgICAgICAgICAqIGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVycy4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICB2YXIgcmVu ZGVyU3RvcmFnZVBhbmVsID0gZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICogQ2xlYXIgdGhlIGV4aXN0aW5nIGh0 bWwgaW4gdGhlIHN0b3JhZ2UgY29udGVudAorICAgICAgICAgICAgICovCisg ICAgICAgICAgICB2YXIgY29udGVudCA9ICRjb250YWluZXIuZmluZCgnLnN0 b3JhZ2VfY29udGVudCcpOworICAgICAgICAgICAgY29udGVudC5lbXB0eSgp OworCisgICAgICAgICAgICAkLmdldCgie3sgdXJsX2ZvcignZmlsZV9tYW5h Z2VyLmluZGV4JykgfX0iLCBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAg ICAgIGNvbnRlbnQuYXBwZW5kKGRhdGEpOworICAgICAgICAgICAgfSk7CisK KyAgICAgICAgICAgIHRyYW5zSWQgPSBnZXRUcmFuc0lkKHBhcmFtcyk7Cisg ICAgICAgICAgICBpZiAodHJhbnNJZC5yZWFkeVN0YXRlID09IDQpCisgICAg ICAgICAgICAgIHRfcmVzID0gSlNPTi5wYXJzZSh0cmFuc0lkLnJlc3BvbnNl VGV4dCk7CisgICAgICAgICAgICB0cmFuc19pZCA9IHRfcmVzLmRhdGEuZmls ZVRyYW5zSWQ7CisKKyAgICAgICAgICB9OworCisgICAgICAgICAgLy8gRGlh bG9nIHByb3BlcnR5CisgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg IG1haW46IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAgICAgICAgICB2YXIg dHJhbnNfaWQ7CisgICAgICAgICAgICAgIC8vIFNldCB0aXRsZSBhbmQgYnV0 dG9uIG5hbWUKKyAgICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQocGFy YW1zWydkaWFsb2dfdGl0bGUnXSkpCisgICAgICAgICAgICAgICAgcGFyYW1z WydkaWFsb2dfdGl0bGUnXSA9ICdDcmVhdGUgZmlsZSc7CisgICAgICAgICAg ICAgIHRoaXMuc2V0KCd0aXRsZScsIHBhcmFtc1snZGlhbG9nX3RpdGxlJ10p OworICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXNbJ2J0 bl9wcmltYXJ5J10pKQorICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdsYWJl bCcsIHBhcmFtc1snYnRuX3ByaW1hcnknXSk7CisKKyAgICAgICAgICAgICAg cGFyYW1zID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTsKKyAgICAgICAgICAg ICAgJGNvbnRhaW5lci5maW5kKCcuc3RvcmFnZV9jb250ZW50JykucmVtb3Zl KCk7CisgICAgICAgICAgICAgICRjb250YWluZXIuYXBwZW5kKCI8ZGl2IGNs YXNzPSdzdG9yYWdlX2NvbnRlbnQnPjwvZGl2PiIpOworICAgICAgICAgICAg ICByZW5kZXJTdG9yYWdlUGFuZWwocGFyYW1zKTsKKyAgICAgICAgICAgICAg dGhpcy5zaG93KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0 dGluZ3M6IHsKKyAgICAgICAgICAgICAgbGFiZWw6IHVuZGVmaW5lZAorICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldHRpbmdVcGRhdGVkOiBmdW5j dGlvbiAoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHsKKyAgICAgICAgICAg ICAgc3dpdGNoIChrZXkpIHsKKyAgICAgICAgICAgICAgY2FzZSAnbWVzc2Fn ZSc6CisgICAgICAgICAgICAgICAgICB0aGlzLnNldE1lc3NhZ2UobmV3VmFs dWUpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg IGNhc2UgJ2xhYmVsJzoKKyAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9f aW50ZXJuYWwuYnV0dG9uc1swXS5lbGVtZW50KSB7CisgICAgICAgICAgICAg ICAgICAgICAgdGhpcy5fX2ludGVybmFsLmJ1dHRvbnNbMF0uZWxlbWVudC5p bm5lckhUTUwgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9LAorICAgICAgICAgICAgc2V0dXA6ZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgYnV0dG9u czpbCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg IHRleHQ6ICJ7eyBfKCdDcmVhdGUnKSB9fSIsIGtleTogMTMsIGNsYXNzTmFt ZTogImJ0biBidG4tcHJpbWFyeSBmYSBmYS1maWxlIGZpbGVfbWFuYWdlcl9j cmVhdGUgZmlsZV9tYW5hZ2VyX29rIHBnLWFsZXJ0aWZ5LWJ1dHRvbiBkaXNh YmxlZCIKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ7eyBfKCdDYW5jZWwn KSB9fSIsIGtleTogMjcsIGNsYXNzTmFtZTogImJ0biBidG4tZGFuZ2VyIGZh IGZhLXRpbWVzIGZpbGVfbWFuYWdlcl9jcmVhdGVfY2FuY2VsIHBnLWFsZXJ0 aWZ5LWJ1dHRvbiIKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBdLAorICAgICAgICAgICAgICAgIGZvY3VzOiB7IGVsZW1lbnQ6IDAg fSwKKyAgICAgICAgICAgICAgICBvcHRpb25zOiB7CisgICAgICAgICAgICAg ICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgIG1heGltaXphYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIGNs b3NhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1vdmFibGU6IHRy dWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH07CisgICAg ICAgICAgICB9LAorICAgICAgICAgICAgcmVwbGFjZV9maWxlOiBmdW5jdGlv bigpIHsKKyAgICAgICAgICAgICAgICAkKCcucmVwbGFjZV9maWxlJykuc2hv dygpOworICAgICAgICAgICAgICAgICQoJy5yZXBsYWNlX2ZpbGUgLmJ0bl95 ZXMnKS5jbGljayhmdW5jdGlvbihzZWxmKSB7CisgICAgICAgICAgICAgICAg ICAkKCcucmVwbGFjZV9maWxlJykuaGlkZSgpOworICAgICAgICAgICAgICAg ICAgdmFyIHNlbGVjdGVkX2l0ZW0gPSAkKCcuYWxsb3dlZF9maWxlX3R5cGVz IC5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJdJykudmFsKCksCisg ICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9ICQoJy5jdXJyZW50cGF0 aCcpLnZhbCgpICsgc2VsZWN0ZWRfaXRlbSwKKyAgICAgICAgICAgICAgICAg ICAgICBuZXdGaWxlID0gbmV3RmlsZS5zdWJzdHIoMSk7CisgICAgICAgICAg ICAgICAgICBwZ0FkbWluLkJyb3dzZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRt aW4tc3RvcmFnZTpmaW5pc2hfYnRuOmNyZWF0ZV9maWxlJywgbmV3RmlsZSk7 CisgICAgICAgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX2NyZWF0ZV9j YW5jZWwnKS50cmlnZ2VyKCdjbGljaycpOworICAgICAgICAgICAgICAgIH0p OworICAgICAgICAgICAgICAgICQoJy5yZXBsYWNlX2ZpbGUgLmJ0bl9ubycp LmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgJCgnLnJl cGxhY2VfZmlsZScpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBpc19maWxlX2V4aXN0OiBmdW5j dGlvbigpIHsKKyAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkX2l0ZW0gPSAk KCcuYWxsb3dlZF9maWxlX3R5cGVzIC5jcmVhdGVfaW5wdXQgaW5wdXRbdHlw ZT0idGV4dCJdJykudmFsKCksCisgICAgICAgICAgICAgICAgICBpc19leGlz dCA9IGZhbHNlOworCisgICAgICAgICAgICAgIHZhciBmaWxlX2RhdGEgPSB7 CisgICAgICAgICAgICAgICAgJ3BhdGgnOiAkKCcuY3VycmVudHBhdGgnKS52 YWwoKSwKKyAgICAgICAgICAgICAgICAnbmFtZSc6IHNlbGVjdGVkX2l0ZW0s CisgICAgICAgICAgICAgICAgJ21vZGUnOiAnaXNfZmlsZV9leGlzdCcKKyAg ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAkLmFqYXgoeworICAg ICAgICAgICAgICAgIHR5cGU6ICdQT1NUJywKKyAgICAgICAgICAgICAgICBk YXRhOiBKU09OLnN0cmluZ2lmeShmaWxlX2RhdGEpLAorICAgICAgICAgICAg ICAgIHVybDogZmlsZUNvbm5lY3RvciArIHRyYW5zX2lkKycvJywKKyAgICAg ICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAorICAgICAgICAgICAgICAg IGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC1kb3dubG9hZDsgY2hhcnNl dD11dGYtOCIsCisgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAg ICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApeworICAgICAg ICAgICAgICAgICAgZGF0YSA9IHJlc3AuZGF0YS5yZXN1bHQ7CisgICAgICAg ICAgICAgICAgICBpZihkYXRhWydDb2RlJ10gPT09IDApeworICAgICAgICAg ICAgICAgICAgICBpc19leGlzdCA9IHRydWU7CisgICAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpc19leGlzdCA9IGZh bHNlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIHJldHVybiBpc19l eGlzdDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjcmVhdGVfZmls ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHZhciBzZWxlY3RlZF9p dGVtID0gJCgnLmFsbG93ZWRfZmlsZV90eXBlcyAuY3JlYXRlX2lucHV0IGlu cHV0W3R5cGU9InRleHQiXScpLnZhbCgpLAorICAgICAgICAgICAgICAgICAg aXNfZXhpc3QgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIGlzX2NyZWF0 ZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgICB2YXIgcG9zdF9kYXRhID0g eworICAgICAgICAgICAgICAgICdwYXRoJzogJCgnLmN1cnJlbnRwYXRoJyku dmFsKCksCisgICAgICAgICAgICAgICAgJ25hbWUnOiBzZWxlY3RlZF9pdGVt LAorICAgICAgICAgICAgICAgICdtb2RlJzogJ2NyZWF0ZV9maWxlJworICAg ICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICQuYWpheCh7CisgICAg ICAgICAgICAgICAgdHlwZTogJ1BPU1QnLAorICAgICAgICAgICAgICAgIGRh dGE6IEpTT04uc3RyaW5naWZ5KHBvc3RfZGF0YSksCisgICAgICAgICAgICAg ICAgdXJsOiBmaWxlQ29ubmVjdG9yICsgdHJhbnNfaWQrJy8nLAorICAgICAg ICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCisgICAgICAgICAgICAgICAg Y29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LWRvd25sb2FkOyBjaGFyc2V0 PXV0Zi04IiwKKyAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAg ICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcCl7CisgICAgICAg ICAgICAgICAgICBkYXRhID0gcmVzcC5kYXRhLnJlc3VsdDsKKyAgICAgICAg ICAgICAgICAgIGlmKGRhdGFbJ0NvZGUnXSA9PT0gMCl7CisgICAgICAgICAg ICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MoIk5ldyBGaWxlIGNyZWF0ZWQg c3VjY2Vzc2Z1bGx5LiIpOworICAgICAgICAgICAgICAgICAgICBpc19jcmVh dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKGRhdGFbJ0Vycm9yJ10p OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICB9KTsKKyAgICAgICAgICAgICAgcmV0dXJuIGlzX2NyZWF0ZWQ7CisgICAg ICAgICAgICB9LAorICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGNs b3NlRXZlbnQpIHsKKyAgICAgICAgICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0 dG9uLnRleHQgPT0gInt7IF8oJ0NyZWF0ZScpIH19Iil7CisgICAgICAgICAg ICAgICAgdmFyIHNlbGVjdGVkX2l0ZW0gPSAkKCcuYWxsb3dlZF9maWxlX3R5 cGVzIC5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJdJykudmFsKCk7 CisgICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkKCcuY3VycmVudHBh dGgnKS52YWwoKSArIHNlbGVjdGVkX2l0ZW07CisgICAgICAgICAgICAgICAg bmV3RmlsZSA9IG5ld0ZpbGUuc3Vic3RyKDEpOworICAgICAgICAgICAgICAg IGlmKCFfLmlzVW5kZWZpbmVkKHNlbGVjdGVkX2l0ZW0pICYmIHNlbGVjdGVk X2l0ZW0gIT09ICcnICYmIHRoaXMuaXNfZmlsZV9leGlzdCgpKSB7CisgICAg ICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VfZmlsZSgpOworICAgICAgICAg ICAgICAgICAgY2xvc2VFdmVudC5jYW5jZWwgPSB0cnVlOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgIHZhciBpc19jcmVhdGVkID0gdGhpcy5jcmVhdGVfZmlsZSgpOwor ICAgICAgICAgICAgICAgICAgaWYgKGlzX2NyZWF0ZWQpIHsKKyAgICAgICAg ICAgICAgICAgICAgcGdBZG1pbi5Ccm93c2VyLkV2ZW50cy50cmlnZ2VyKCdw Z2FkbWluLXN0b3JhZ2U6ZmluaXNoX2J0bjpjcmVhdGVfZmlsZScsIG5ld0Zp bGUpOworICAgICAgICAgICAgICAgICAgICByZW1vdmVUcmFuc0lkKHRyYW5z X2lkKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjbG9zZUV2ZW50LmNhbmNl bCA9IHRydWU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChjbG9z ZUV2ZW50LmJ1dHRvbi50ZXh0ID09ICJ7eyBfKCdDYW5jZWwnKSB9fSIpewor ICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zSWQodHJhbnNfaWQpOworICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgYnVp bGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRz LmNvbnRlbnQuYXBwZW5kQ2hpbGQoJGNvbnRhaW5lci5nZXQoMCkpOworICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIGhvb2tzOiB7CisgICAgICAgICAg ICAgIG9uc2hvdzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgJCh0 aGlzLmVsZW1lbnRzLmJvZHkpLmFkZENsYXNzKCdwZ2FkbWluLXN0b3JhZ2Ut Ym9keScpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgICB9LAorICAgICAgc2hvd19z dG9yYWdlX2RsZzogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgIGFsZXJ0 aWZ5LnN0b3JhZ2VNYW5hZ2VyRGxnKHBhcmFtcykucmVzaXplVG8oJzYwJScs ICc4MCUnKTsKKyAgICAgIH0sCisgICAgICBzaG93X2ZpbGVfc2VsZWN0aW9u OiBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAgYWxlcnRpZnkuZmlsZVNl bGVjdGlvbkRsZyhwYXJhbXMpLnJlc2l6ZVRvKCc2MCUnLCAnODAlJyk7Cisg ICAgICB9LAorICAgICAgc2hvd19mb2xkZXJfc2VsZWN0aW9uOiBmdW5jdGlv bihwYXJhbXMpIHsKKyAgICAgICAgYWxlcnRpZnkuZm9sZGVyU2VsZWN0aW9u RGxnKHBhcmFtcykucmVzaXplVG8oJzYwJScsICc4MCUnKTsKKyAgICAgIH0s CisgICAgICBzaG93X2NyZWF0ZV9kbGc6IGZ1bmN0aW9uKHBhcmFtcykgewor ICAgICAgICBhbGVydGlmeS5jcmVhdGVNb2RlRGxnKHBhcmFtcykucmVzaXpl VG8oJzYwJScsICc4MCUnKTsKKyAgICAgIH0sCisgICAgICAvLyBjYWxsIGRp YWxvZ3Mgc3ViamVjdCB0byBkaWFsb2dfdHlwZSBwYXJhbQorICAgICAgc2hv d19kaWFsb2c6IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAgICBpZihwYXJh bXMuZGlhbG9nX3R5cGUgPT0gJ3NlbGVjdF9maWxlJykgeworICAgICAgICAg IHRoaXMuc2hvd19maWxlX3NlbGVjdGlvbihwYXJhbXMpOworICAgICAgICB9 CisgICAgICAgIGVsc2UgaWYgKHBhcmFtcy5kaWFsb2dfdHlwZSA9PSAnc2Vs ZWN0X2ZvbGRlcicpIHsKKyAgICAgICAgICB0aGlzLnNob3dfZm9sZGVyX3Nl bGVjdGlvbihwYXJhbXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg KHBhcmFtcy5kaWFsb2dfdHlwZSA9PSAnY3JlYXRlX2ZpbGUnKSB7CisgICAg ICAgICAgdGhpcy5zaG93X2NyZWF0ZV9kbGcocGFyYW1zKTsKKyAgICAgICAg fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0aGlzLnNob3dfc3RvcmFn ZV9kbGcocGFyYW1zKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisK KyAgICByZXR1cm4gcGdBZG1pbi5GaWxlTWFuYWdlcjsKKyAgfSk7CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0 ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9jb25maWcuanNvbiBi L3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxl X21hbmFnZXIvanMvZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjdmY2IKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1w bGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9jb25maWcuanNv bgpAQCAtMCwwICsxLDI1IEBACit7CisgICAgIm9wdGlvbnMiOiB7CisgICAg ICAgICJjdWx0dXJlIjogImVuIiwKKyAgICAgICAgImxhbmciOiAicHkiLAor ICAgICAgICAiZGVmYXVsdFZpZXdNb2RlIjogImdyaWQiLAorICAgICAgICAi YXV0b2xvYWQiOiB0cnVlLAorICAgICAgICAic2hvd0Z1bGxQYXRoIjogZmFs c2UsCisgICAgICAgICJkaWFsb2dfdHlwZSI6ICJ7e2RhdGEuZGlhbG9nX3R5 cGV9fSIsCisgICAgICAgICJmaWxlUm9vdCI6ICJ7e2RhdGEuZmlsZXJvb3R9 fSIsCisgICAgICAgICJjYXBhYmlsaXRpZXMiOiBbeyUgZm9yIGkgaW4gZGF0 YS5jYXBhYmlsaXRpZXMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0sIHsl IGVuZGlmICV9Int7aX19InslIGVuZGZvciAlfV0sCisgICAgICAgICJhbGxv d2VkX2ZpbGVfdHlwZXMiOiBbeyUgZm9yIGkgaW4gZGF0YS5zdXBwb3J0ZWRf dHlwZXMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0sIHslIGVuZGlmICV9 Int7aX19InslIGVuZGZvciAlfV0sCisgICAgICAgICJwbGF0Zm9ybV90eXBl IjogInt7IGRhdGEucGxhdGZvcm1fdHlwZSB9fSIsCisgICAgICAgICJzaG93 X3ZvbHVtZXMiOiJ7e2RhdGEuc2hvd192b2x1bWVzfX0iCisgICAgfSwKKyAg ICAic2VjdXJpdHkiOiB7CisgICAgICAgICJ1cGxvYWRQb2xpY3kiOiAie3sg ZGF0YS5zZWN1cml0eS51cGxvYWRQb2xpY3kgfX0iLAorICAgICAgICAidXBs b2FkUmVzdHJpY3Rpb25zIjogW3slIGZvciBpIGluIGRhdGEuc2VjdXJpdHku dXBsb2FkUmVzdHJpY3Rpb25zICV9eyUgaWYgbG9vcC5pbmRleCAhPSAxICV9 LCB7JSBlbmRpZiAlfSJ7e2l9fSJ7JSBlbmRmb3IgJX1dCisgICAgfSwKKyAg ICAidXBsb2FkIjogeworICAgICAgICAibXVsdGlwbGUiOiAie3sgZGF0YS51 cGxvYWQubXVsdGlwbGUgfX0iLAorICAgICAgICAibnVtYmVyIjogMjAsCisg ICAgICAgICJmaWxlU2l6ZUxpbWl0IjogInt7IGRhdGEudXBsb2FkLmZpbGVT aXplTGltaXQgfX0iLAorICAgICAgICAiaW1hZ2VzT25seSI6IGZhbHNlCisg ICAgfQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21h bmFnZXIvdGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9qcy9sYW5ndWFnZXMvZW4u anMgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMv ZmlsZV9tYW5hZ2VyL2pzL2xhbmd1YWdlcy9lbi5qcwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmE4NWU4Ci0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvdGVtcGxhdGVz L2ZpbGVfbWFuYWdlci9qcy9sYW5ndWFnZXMvZW4uanMKQEAgLTAsMCArMSw0 MSBAQAoreworICAgICJMQU5HVUFHRV9GSUxFX05PVF9GT1VORCI6ICJMYW5n dWFnZSBmaWxlIG5vdCBmb3VuZC4iLAorICAgICJ1cGxvYWRfc3VjY2VzcyI6 ICJGaWxlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseS4iLAorICAgICJ1cGxvYWRf ZXJyb3IiOiAiRXJyb3IgdXBsb2FkaW5nIGZpbGUiLAorICAgICJicm93c2Ui OiAiQnJvd3NlLi4uIiwKKyAgICAiYnl0ZXMiOiAiIGJ5dGVzIiwKKyAgICAi Y2FuY2VsIjogIkNhbmNlbCIsCisgICAgImNsb3NlIjogIkNsb3NlIiwKKyAg ICAiY29uZmlybWF0aW9uX2RlbGV0ZSI6ICJBcmUgeW91IHN1cmUgeW91IHdp c2ggdG8gZGVsZXRlIHRoaXMgZmlsZT8iLAorICAgICJjdXJyZW50X2ZvbGRl ciI6ICIiLAorICAgICJkZWwiOiAiRGVsZXRlIiwKKyAgICAiZG93bmxvYWQi OiAiRG93bmxvYWQiLAorICAgICJkel9kaWN0RGVmYXVsdE1lc3NhZ2UiOiAi RHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCIsCisgICAgImR6X2RpY3RGYWxs YmFja01lc3NhZ2UiOiAiWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQg ZHJhZyduJ2Ryb3AgZmlsZSB1cGxvYWRzLiIsCisgICAgImR6X2RpY3RNYXhG aWxlc0V4Y2VlZGVkIjogIk9ubHkgJXMgc2ltdWx0YW5lb3VzIHVwbG9hZHMg YXJlIGFsbG93ZWQuIiwKKyAgICAiZHpfZGljdEludmFsaWRGaWxlVHlwZSI6 ICJZb3UgY2FuJ3QgdXBsb2FkIGZpbGVzIG9mIHRoaXMgdHlwZS4iLAorICAg ICJlZGl0IjogIkVkaXQgZmlsZSIsCisgICAgImZpbGVfc2l6ZV9saW1pdCI6 ICJUaGUgZmlsZSBzaXplIGxpbWl0IChwZXIgZmlsZSkgaXMgIiwKKyAgICAi ZmlsZV90b29fYmlnIjogIlRoZSBmaWxlIGlzIHRvbyBiaWcuIiwKKyAgICAi Z2IiOiAiZ2IiLAorICAgICJncmlkX3ZpZXciOiAiU3dpdGNoIHRvIGdyaWQg dmlldy4iLAorICAgICJpdGVtcyI6ICJpdGVtcyIsCisgICAgImtiIjogImti IiwKKyAgICAibGlzdF92aWV3IjogIlN3aXRjaCB0byBsaXN0IHZpZXcuIiwK KyAgICAibWIiOiAibWIiLAorICAgICJtb2RpZmllZCI6ICJNb2RpZmllZCIs CisgICAgIm1vdmUiOiAiTW92ZSB0byAuLi4iLAorICAgICJuYW1lIjogIk5h bWUiLAorICAgICJuZXdfZm9sZGVyIjogIk5ldyBGb2xkZXIiLAorICAgICJu byI6ICJObyIsCisgICAgIm5vX2ZvbGRlcm5hbWUiOiAiTm8gZm9sZGVyIG5h bWUgd2FzIHByb3ZpZGVkLiIsCisgICAgInJlbmFtZSI6ICJSZW5hbWUiLAor ICAgICJzYXZlIjogIlNhdmUiLAorICAgICJzZWxlY3QiOiAiU2VsZWN0IiwK KyAgICAic2l6ZSI6ICJTaXplIiwKKyAgICAic3VjY2Vzc2Z1bF9hZGRlZF9m b2xkZXIiOiAiTmV3IGZvbGRlciBhZGRlZCBzdWNjZXNzZnVsbHkuIiwKKyAg ICAic3VjY2Vzc2Z1bF9kZWxldGUiOiAiRGVsZXRlIHN1Y2Nlc3NmdWwuIiwK KyAgICAic3VjY2Vzc2Z1bF9yZW5hbWUiOiAiUmVuYW1lIHN1Y2Nlc3NmdWwu IiwKKyAgICAidXBsb2FkIjogIlVwbG9hZCIsCisgICAgInllcyI6ICJZZXMi Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdl ci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL3V0aWxpdHkuanMgYi93ZWIv cGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5h Z2VyL2pzL3V0aWxpdHkuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMC4uOTdiZmM1MgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIv anMvdXRpbGl0eS5qcwpAQCAtMCwwICsxLDE1MDggQEAKKy8qKgorICogRmls ZW1hbmFnZXIgSlMgY29yZQorICoKKyAqIGZpbGVtYW5hZ2VyLmpzCisgKgor ICogIEBsaWNlbnNlICBNSVQgTGljZW5zZQorICogIEBhdXRob3IgSmFzb24g SHVjayAtIENvcmUgRml2ZSBMYWJzCisgKiAgQGF1dGhvciBTaW1vbiBHZW9y Z2V0IDxzaW1vbiAoYXQpIGxpbmVhMjEgKGRvdCkgY29tPgorICogIEBjb3B5 cmlnaHQgIEF1dGhvcnMKKyAqLworCisoZnVuY3Rpb24oJCkgeworCisvLyBV c2VyIGFsZXJ0aWZ5IG9iamVjdAordmFyIGFsZXJ0aWZ5ID0gcmVxdWlyZSgi YWxlcnRpZnkiKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmUgZnVu Y3Rpb25zIHVzZWQgZm9yIHZhcmlvdXMgb3BlcmF0aW9ucworLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KKworLy8gZnVuY3Rpb24gdG8gcmV0cmlldmUgR0VUIHBhcmFtcwor JC51cmxQYXJhbSA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgdmFyIHJlc3VsdHMg PSBuZXcgUmVnRXhwKCdbXFw/Jl0nICsgbmFtZSArICc9KFteJiNdKiknKS5l eGVjKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKKyAgaWYgKHJlc3VsdHMpCisg ICAgcmV0dXJuIHJlc3VsdHNbMV07CisgIGVsc2UKKyAgICByZXR1cm4gMDsK K307CisKK3ZhciBnZXRGaWxlRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSkg eworICAgIHZhciBmb3VuZCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKSArIDE7 CisgICAgcmV0dXJuIChmb3VuZCA+IDAgPyBuYW1lLnN1YnN0cihmb3VuZCkg OiAiIik7Cit9OworCit2YXIgZ2V0RmlsZU5hbWUgPSBmdW5jdGlvbihuYW1l KSB7CisgIHZhciBmbV9maWxlbmFtZSA9IG5hbWU7CisgIGlmIChmbV9maWxl bmFtZS5sZW5ndGggPiAxNSApIHsKKyAgICAgIGZtX2ZpbGVuYW1lID0gbmFt ZS5zdWJzdHIoMCwgMTApICsnLi4uJzsKKyAgfQorICByZXR1cm4gZm1fZmls ZW5hbWU7Cit9OworCisvLyBzZW5kIGEgcmVxdWVzdCB0byBnZXQgdHJhbnNh Y3Rpb24gaWQKK3ZhciBnZXRUcmFuc0lkID0gZnVuY3Rpb24oKSB7CisgIHJl dHVybiAkLmFqYXgoeworICAgIGFzeW5jOiBmYWxzZSwKKyAgICB1cmw6ICJ7 eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5kZXgnKSB9fWdldF90cmFuc19p ZCIsCisgICAgZGF0YVR5cGU6ICJqc29ucCIKKyAgfSk7Cit9OworCisvLyBM b2FkIGxhbmd1YWdlIGZpbGUKK3ZhciBsb2FkTGFuZ0ZpbGUgPSBmdW5jdGlv bihlbmpzKSB7CisgIGlmKCQudXJsUGFyYW0oJ2xhbmdDb2RlJykgIT09IDAg JiYgZmlsZV9leGlzdHMgKGVuanMpKSBjdWx0dXJlID0gJC51cmxQYXJhbSgn bGFuZ0NvZGUnKTsKKyAgcmV0dXJuICQuYWpheCh7CisgICAgYXN5bmM6IGZh bHNlLAorICAgIHVybDogZW5qcywKKyAgICBkYXRhVHlwZTogJ2pzb25wJywK KyAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9 dXRmLTgiCisgIH0pOworfTsKKworLy8gV2UgcmV0cmlldmUgY29uZmlnIHNl dHRpbmdzIGZyb20gZmlsZW1hbmFnZXIuY29uZmlnLmpzCit2YXIgbG9hZENv bmZpZ0ZpbGUgPSBmdW5jdGlvbiAodHlwZSkgeworICB0eXBlID0gKHR5cGVv ZiB0eXBlID09PSAidW5kZWZpbmVkIikgPyAidXNlciIgOiB0eXBlOworICBp ZiAodHlwZSA9PSAndXNlcicpIHsKKyAgICB1cmwgPSBmaWxlX21hbmFnZXJf Y29uZmlnX2pzb247CisgICAgdXNlcmNvbmZpZyA9IGZpbGVfbWFuYWdlcl9j b25maWdfanNvbjsKKyAgfQorICByZXR1cm4gJC5hamF4KHsKKyAgICBhc3lu YzogZmFsc2UsCisgICAgdXJsOiB1cmwsCisgICAgZGF0YVR5cGU6ICJqc29u cCIsCisgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFy c2V0PXV0Zi04IgorICB9KTsKK307CisKKy8qCisgKiBGb3JjZXMgY29sdW1u cyB0byBmaWxsIHRoZSBsYXlvdXQgdmVydGljYWxseS4KKyAqIENhbGxlZCBv biBpbml0aWFsIHBhZ2UgbG9hZCBhbmQgb24gcmVzaXplLgorICovCit2YXIg c2V0RGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgeworICB2YXIgbWFpbl9jb250 YWluZXJfaGVpZ2h0ID0gKCAkKHdpbmRvdykuaGVpZ2h0KCkgKSAvIDIgKyAz NSwKKyAgICAgIG5ld0ggPSBtYWluX2NvbnRhaW5lcl9oZWlnaHQgLSAkKCcj dXBsb2FkZXInKS5oZWlnaHQoKSAtIDMwOworfTsKKworLy8gRGlzcGxheSBN aW4gUGF0aAordmFyIGRpc3BsYXlQYXRoID0gZnVuY3Rpb24ocGF0aCkgewor ICBpZihjb25maWcub3B0aW9ucy5zaG93RnVsbFBhdGggPT09IGZhbHNlKSB7 CisgICAgLy8gaWYgYSAiZGlzcGxheVBhdGhEZWNvcmF0b3IiIGZ1bmN0aW9u IGlzIGRlZmluZWQsIHVzZSBpdCB0byBkZWNvcmF0ZSBwYXRoCisgICAgcmV0 dXJuICdmdW5jdGlvbicgPT09ICh0eXBlb2YgZGlzcGxheVBhdGhEZWNvcmF0 b3IpCisgICAgICAgICA/IGRpc3BsYXlQYXRoRGVjb3JhdG9yKHBhdGgpCisg ICAgICAgICA6IHBhdGgucmVwbGFjZShmaWxlUm9vdCwgIi8iKTsKKyAgfSBl bHNlIHsKKyAgICByZXR1cm4gcGF0aDsKKyAgfQorfTsKKworLy8gU2V0IHRo ZSB2aWV3IGJ1dHRvbnMgc3RhdGUKK3ZhciBzZXRWaWV3QnV0dG9uc0ZvciA9 IGZ1bmN0aW9uKHZpZXdNb2RlKSB7CisgICAgaWYgKHZpZXdNb2RlID09ICdn cmlkJykgeworICAgICAgICAkKCcuZ3JpZCcpLmFkZENsYXNzKCdPTicpOwor ICAgICAgICAkKCcubGlzdCcpLnJlbW92ZUNsYXNzKCdPTicpOworICAgIH0K KyAgICBlbHNlIHsKKyAgICAgICAgJCgnLmxpc3QnKS5hZGRDbGFzcygnT04n KTsKKyAgICAgICAgJCgnLmdyaWQnKS5yZW1vdmVDbGFzcygnT04nKTsKKyAg ICB9Cit9OworCisvKgorICogcHJlZ19yZXBsYWNlCisgKi8KK3ZhciBwcmVn X3JlcGxhY2UgPSBmdW5jdGlvbihhcnJheV9wYXR0ZXJuLCBhcnJheV9wYXR0 ZXJuX3JlcGxhY2UsIHN0cikgIHsKKyAgdmFyIG5ld19zdHIgPSBTdHJpbmcg KHN0cik7CisgICAgZm9yIChpPTA7IGk8YXJyYXlfcGF0dGVybi5sZW5ndGg7 IGkrKykgeworICAgICAgdmFyIHJlZ19leHA9IFJlZ0V4cChhcnJheV9wYXR0 ZXJuW2ldLCAiZyIpOworICAgICAgdmFyIHZhbF90b19yZXBsYWNlID0gYXJy YXlfcGF0dGVybl9yZXBsYWNlW2ldOworICAgICAgbmV3X3N0ciA9IG5ld19z dHIucmVwbGFjZSAocmVnX2V4cCwgdmFsX3RvX3JlcGxhY2UpOworICAgIH0K KyAgICByZXR1cm4gbmV3X3N0cjsKKyAgfTsKKworLyoKKyAqIGNsZWFuU3Ry aW5nICgpLCBvbiB0aGUgc2FtZSBtb2RlbCBhcyBzZXJ2ZXIgc2lkZSAoY29u bmVjdG9yKQorICogY2xlYW5TdHJpbmcKKyAqLwordmFyIGNsZWFuU3RyaW5n ID0gZnVuY3Rpb24oc3RyKSB7CisgIHZhciBjbGVhbmVkID0gIiI7CisgIHZh ciBwX3NlYXJjaCAgPSAgIG5ldyBBcnJheSgixaAiLCAixaEiLCAixJAiLCAi xJEiLCAixb0iLCAixb4iLCAixIwiLCAixI0iLCAixIYiLCAixIciLCAiw4Ai LAorICAgICAgICAgICAgIsOBIiwgIsOCIiwgIsODIiwgIsOEIiwgIsOFIiwg IsOGIiwgIsOHIiwgIsOIIiwgIsOJIiwgIsOKIiwgIsOLIiwgIsOMIiwgIsON IiwgIsOOIiwgIsOPIiwKKyAgICAgICAgICAgICLDkSIsICLDkiIsICLDkyIs ICLDlCIsICLDlSIsICLDliIsICLFkCIsICLDmCIsICLDmSIsICLDmiIsICLD myIsICLDnCIsICLDnSIsICLDniIsICLDnyIsCisgICAgICAgICAgICAiw6Ai LCAiw6EiLCAiw6IiLCAiw6MiLCAiw6QiLCAiw6UiLCAiw6YiLCAiw6ciLCAi w6giLCAiw6kiLCAiw6oiLCAiw6siLCAiw6wiLCAgIsOtIiwKKyAgICAgICAg ICAgICLDriIsICLDryIsICLDsCIsICLDsSIsICLDsiIsICLDsyIsICLDtCIs ICLDtSIsICLDtiIsICLFkSIsICLDuCIsICLDuSIsICLDuiIsICLDuyIsICLD vSIsCisgICAgICAgICAgICAiw70iLCAiw74iLCAiw78iLCAixZQiLCAixZUi LCAiICIsICInIiwgIi8iCisgICAgICAgICAgICApOworICB2YXIgcF9yZXBs YWNlID0gICBuZXcgQXJyYXkoIlMiLCAicyIsICJEaiIsICJkaiIsICJaIiwg InoiLCAiQyIsICJjIiwgIkMiLCAiYyIsICJBIiwKKyAgICAgICAgICAgICJB IiwgIkEiLCAiQSIsICJBIiwgIkEiLCAiQSIsICJDIiwgIkUiLCAiRSIsICJF IiwgIkUiLCAiSSIsICJJIiwgIkkiLCAiSSIsCisgICAgICAgICAgICAiTiIs ICJPIiwgIk8iLCAiTyIsICJPIiwgIk8iLCAiTyIsICJPIiwgIlUiLCAiVSIs ICJVIiwgIlUiLCAiWSIsICJCIiwgIlNzIiwKKyAgICAgICAgICAgICJhIiwg ImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImMiLCAiZSIsICJlIiwg ImUiLCAiZSIsICJpIiwgImkiLAorICAgICAgICAgICAgImkiLCAiaSIsICJv IiwgIm4iLCAibyIsICJvIiwgIm8iLCAibyIsICJvIiwgIm8iLCAibyIsICJ1 IiwgInUiLCAidSIsICJ5IiwKKyAgICAgICAgICAgICJ5IiwgImIiLCAieSIs ICJSIiwgInIiLCAiXyIsICJfIiwgIiIKKyAgICAgICAgICApOworCisgIGNs ZWFuZWQgPSBwcmVnX3JlcGxhY2UocF9zZWFyY2gsIHBfcmVwbGFjZSwgc3Ry KTsKKyAgY2xlYW5lZCA9IGNsZWFuZWQucmVwbGFjZSgvW15fYS16QS1aMC05 XS9nLCAiIik7CisgIGNsZWFuZWQgPSBjbGVhbmVkLnJlcGxhY2UoL1tfXSsv ZywgIl8iKTsKKworICByZXR1cm4gY2xlYW5lZDsKK307CisKKy8qCisgKiBu YW1lRm9ybWF0ICgpLCBzZXBhcmF0ZSBmaWxlbmFtZSBmcm9tIGV4dGVuc2lv biBiZWZvcmUgY2FsbGluZyBjbGVhblN0cmluZygpCisgKiBuYW1lRm9ybWF0 CisgKi8KK3ZhciBuYW1lRm9ybWF0ID0gZnVuY3Rpb24oaW5wdXQpIHsKKyAg ZmlsZW5hbWUgPSAnJzsKKyAgaWYoaW5wdXQubGFzdEluZGV4T2YoJy4nKSAh PSAtMSkgeworICAgIGZpbGVuYW1lICA9IGNsZWFuU3RyaW5nKGlucHV0LnN1 YnN0cigwLCBpbnB1dC5sYXN0SW5kZXhPZignLicpKSk7CisgICAgZmlsZW5h bWUgKz0gJy4nICsgaW5wdXQuc3BsaXQoJy4nKS5wb3AoKTsKKyAgfSBlbHNl IHsKKyAgICBmaWxlbmFtZSA9IGNsZWFuU3RyaW5nKGlucHV0KTsKKyAgfQor ICByZXR1cm4gZmlsZW5hbWU7Cit9OworCisvL0NvbnZlcnRzIGJ5dGVzIHRv IGtiLCBtYiwgb3IgZ2IgYXMgbmVlZGVkIGZvciBkaXNwbGF5LgordmFyIGZv cm1hdEJ5dGVzID0gZnVuY3Rpb24oYnl0ZXMpeworICB2YXIgbiA9IHBhcnNl RmxvYXQoYnl0ZXMpOworICB2YXIgZCA9IHBhcnNlRmxvYXQoMTAyNCk7Cisg IHZhciBjID0gMDsKKyAgdmFyIHUgPSBbbGcuYnl0ZXMsbGcua2IsbGcubWIs bGcuZ2JdOworCisgIHdoaWxlKHRydWUpeworICAgIGlmKG4gPCBkKXsKKyAg ICAgIG4gPSBNYXRoLnJvdW5kKG4gKiAxMDApIC8gMTAwOworICAgICAgcmV0 dXJuIG4gKyB1W2NdOworICAgIH0gZWxzZSB7CisgICAgICBuIC89IGQ7Cisg ICAgICBjICs9IDE7CisgICAgfQorICB9Cit9OworCisvKgorICogSGFuZGxl IEVycm9yLiBGcmVlemUgaW50ZXJhY3RpdmUgYnV0dG9ucyBhbmQgZGlzcGxh eQorICogZXJyb3IgbWVzc2FnZS4gQWxzbyBjYWxsZWQgd2hlbiBhdXRoKCkg ZnVuY3Rpb24gcmV0dXJuIGZhbHNlIChDb2RlID09ICItMSIpCisgKi8KK3Zh ciBoYW5kbGVFcnJvciA9IGZ1bmN0aW9uKGVyck1zZykgeworICAvLyQoJy5z dG9yYWdlX2RpYWxvZyAuZmlsZWluZm8nKS5odG1sKCc8aDE+JyArIGVyck1z ZysgJzwvaDE+Jyk7CisgICQoJy5zdG9yYWdlX2RpYWxvZyAubmV3ZmlsZScp LmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICQoJy5zdG9yYWdl X2RpYWxvZyAudXBsb2FkJykuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQi KTsKKyAgJCgnLnN0b3JhZ2VfZGlhbG9nIC5jcmVhdGUnKS5hdHRyKCJkaXNh YmxlZCIsICJkaXNhYmxlZCIpOworfTsKKworLyoKKyAqIFRlc3QgaWYgRGF0 YSBzdHJ1Y3R1cmUgaGFzIHRoZSAnY2FwJyBjYXBhYmlsaXR5CisgKiAnY2Fw JyBpcyBvbmUgb2YgJ3NlbGVjdCcsICdyZW5hbWUnLCAnZGVsZXRlJywgJ2Rv d25sb2FkJworICovCitmdW5jdGlvbiBoYXNfY2FwYWJpbGl0eShkYXRhLCBj YXApIHsKKyAgaWYgKHR5cGVvZihkYXRhWydDYXBhYmlsaXRpZXMnXSkgPT0g InVuZGVmaW5lZCIpIHJldHVybiB0cnVlOworICBlbHNlIHJldHVybiAkLmlu QXJyYXkoY2FwLCBkYXRhWydDYXBhYmlsaXRpZXMnXSkgPiAtMTsKK30KKwor Ly8gVGVzdCBpZiBmaWxlIGlzIGF1dGhvcml6ZWQKK3ZhciBpc0F1dGhvcml6 ZWRGaWxlID0gZnVuY3Rpb24oZmlsZW5hbWUpIHsKKyAgaWYoY29uZmlnLnNl Y3VyaXR5LnVwbG9hZFBvbGljeSA9PSAnRElTQUxMT1dfQUxMJykgeworICAg IGlmKCQuaW5BcnJheShnZXRFeHRlbnNpb24oZmlsZW5hbWUpLCBjb25maWcu c2VjdXJpdHkudXBsb2FkUmVzdHJpY3Rpb25zKSAhPSAtMSkgcmV0dXJuIHRy dWU7CisgIH0KKyAgaWYoY29uZmlnLnNlY3VyaXR5LnVwbG9hZFBvbGljeSA9 PSAnQUxMT1dfQUxMJykgeworICAgIGlmKCQuaW5BcnJheShnZXRFeHRlbnNp b24oZmlsZW5hbWUpLCBjb25maWcuc2VjdXJpdHkudXBsb2FkUmVzdHJpY3Rp b25zKSA9PSAtMSkgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNl OworfTsKKworLy8gcmV0dXJuIGZpbGVuYW1lIGV4dGVuc2lvbgordmFyIGdl dEV4dGVuc2lvbiA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7CisgIGlmKGZpbGVu YW1lLnNwbGl0KCcuJykubGVuZ3RoID09IDEpCisgICAgcmV0dXJuICIiOwor ICByZXR1cm4gZmlsZW5hbWUuc3BsaXQoJy4nKS5wb3AoKTsKK307CisKKy8v IHJldHVybiBmaWxlbmFtZSB3aXRob3V0IGV4dGVuc2lvbiB7Cit2YXIgZ2V0 RmlsZW5hbWUgPSBmdW5jdGlvbihmaWxlbmFtZSkgeworICBpZihmaWxlbmFt ZS5sYXN0SW5kZXhPZignLicpICE9IC0xKQorICAgIHJldHVybiBmaWxlbmFt ZS5zdWJzdHJpbmcoMCwgZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSk7Cisg IGVsc2UKKyAgICByZXR1cm4gZmlsZW5hbWU7Cit9OworCit2YXIgaGlkZUJ1 dHRvbnMgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgY3VycmVudF9wYXRoID0g JCgnLmN1cnJlbnRwYXRoJykudmFsKCk7CisgICAgaWYoY29uZmlnLm9wdGlv bnMucGxhdGZvcm1fdHlwZSA9PSAnd2luMzInICYmIGN1cnJlbnRfcGF0aCA9 PSAiLyIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxz ZTsKK307CisKKy8qCisgKiBTZXRzIHRoZSBmb2xkZXIgc3RhdHVzLCB1cGxv YWQsIGFuZCBuZXcgZm9sZGVyIGZ1bmN0aW9ucworICogdG8gdGhlIHBhdGgg c3BlY2lmaWVkLiBDYWxsZWQgb24gaW5pdGlhbCBwYWdlIGxvYWQgYW5kCisg KiB3aGVuZXZlciBhIG5ldyBkaXJlY3RvcnkgaXMgc2VsZWN0ZWQuCisgKi8K K3ZhciBzZXRVcGxvYWRlciA9IGZ1bmN0aW9uKHBhdGgpeworICAvLyBSZW1v dmUgYW5jaG9yIGFuZCBib2xkKGIpIHRhZ3MKKyAgJCgnLnN0b3JhZ2VfZGlh bG9nICN1cGxvYWRlcicpLmZpbmQoJ2EnKS5yZW1vdmUoKTsKKyAgJCgnLnN0 b3JhZ2VfZGlhbG9nICN1cGxvYWRlcicpLmZpbmQoJ2InKS5yZW1vdmUoKTsK KworICBwYXRoID0gZGVjb2RlVVJJKHBhdGgpOworICB2YXIgZGlzcGxheV9z dHJpbmcgPSBkaXNwbGF5UGF0aChwYXRoKTsKKyAgdmFyIG15cGF0aCA9ICcn OworCisgIC8vIHNwbGl0IHBhdGgKKyAgc3BsaXRfcGF0aCA9IGRpc3BsYXlf c3RyaW5nLnNwbGl0KCcvJyk7CisgIHNwbGl0X3BhdGggPSBzcGxpdF9wYXRo LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZTt9KTsKKworICBpZiAoY29u ZmlnLm9wdGlvbnMucGxhdGZvcm1fdHlwZSA9PT0gIndpbjMyIiAmJiBjb25m aWcub3B0aW9ucy5zaG93X3ZvbHVtZXMpIHsKKyAgICAgIG15cGF0aCA9ICIi OworICB9CisgIGVsc2UgaWYgKHNwbGl0X3BhdGgubGVuZ3RoID09PSAwKQor ICAgIG15cGF0aCA9ICQoJzxiPi88L2I+Jyk7CisgIGVsc2UKKyAgICBteXBh dGggPSAkKCc8YSBjbGFzcz0iYnJlYWRjcnVtYnMiIGhyZWY9IiMiIGRhdGEt cGF0aD0iLyI+LzwvYT4nKTsKKyAgJChteXBhdGgpLmFwcGVuZFRvKCQoJy5z dG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEnKSk7CisKKyAgZm9yKHZhciBp IGluIHNwbGl0X3BhdGgpIHsKKyAgICBpZiAoaSA8IHNwbGl0X3BhdGgubGVu Z3RoLTEpIHsKKyAgICAgIG15cGF0aCA9ICQoJzxhIGNsYXNzPSJicmVhZGNy dW1icyIgaHJlZj0iIyIgZGF0YS1wYXRoPSInK2Rpc3BsYXlfc3RyaW5nLnJl cGxhY2Uoc3BsaXRfcGF0aFtpKzFdLCAnJykrJyI+JytzcGxpdF9wYXRoW2ld KycvPC9hPicpOworICAgICAgJChteXBhdGgpLmFwcGVuZFRvKCQoJy5zdG9y YWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEnKSk7CisgICB9CisgICBlbHNlIHsK KyAgICAgbXlwYXRoID0gJCgnPGI+JytzcGxpdF9wYXRoW2ldKyc8L2I+Jyk7 CisgICAgICQobXlwYXRoKS5hcHBlbmRUbygkKCcuc3RvcmFnZV9kaWFsb2cg I3VwbG9hZGVyIGgxJykpOworICAgfQorICB9CisKKyAgJCgnLmN1cnJlbnRw YXRoJykudmFsKHBhdGgpOworICBpZigkKCcuc3RvcmFnZV9kaWFsb2cgI3Vw bG9hZGVyIGgxIHNwYW4nKS5sZW5ndGggPT09IDApIHsKKyAgICAkKCc8c3Bh bj4nK2xnLmN1cnJlbnRfZm9sZGVyKyc8L3NwYW4+JykuYXBwZW5kVG8oJCgn LnN0b3JhZ2VfZGlhbG9nICN1cGxvYWRlciBoMScpKTsKKyAgfQorCisgICQo Jy5zdG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEnKS5hdHRyKCd0aXRsZScs IGRpc3BsYXlfc3RyaW5nKTsKKyAgJCgnLnN0b3JhZ2VfZGlhbG9nICN1cGxv YWRlciBoMScpLmF0dHIoJ2RhdGEtcGF0aCcsIGRpc3BsYXlfc3RyaW5nKTsK KworICAkKCcuY3JlYXRlJykudW5iaW5kKCkuY2xpY2soZnVuY3Rpb24oKXsK KyAgICB2YXIgZm9sZGVybmFtZSA9ICBsZy5kZWZhdWx0X2ZvbGRlcm5hbWU7 CisgICAgdmFyICRmaWxlX2VsZW1lbnQsCisgICAgICAgICRmaWxlX2VsZW1l bnRfbGlzdDsKKworICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmNyZWF0 ZScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgaWYoJCgn LmZpbGVpbmZvJykuZGF0YSgndmlldycpID09ICdncmlkJyl7CisKKyAgICAg IHZhciBmb2xkZXJfZGl2ID0gIjxsaSBjbGFzcz0nY2FwX2Rvd25sb2FkY2Fw X2RlbGV0ZWNhcF9zZWxlY3RfZmlsZWNhcF9zZWxlY3RfZm9sZGVyY2FwX3Jl bmFtZWNhcF9jcmVhdGVjYXBfdXBsb2FkJz4iKworICAgICAgICAgICI8ZGl2 IGNsYXNzPSdjbGlwJz48c3BhbiBkYXRhLWFsdD0nJyBjbGFzcz0nZmEgZmEt Zm9sZGVyLW9wZW4gZm1fZm9sZGVyJz48L3NwYW4+PC9kaXY+IisKKyAgICAg ICAgICAiPHA+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmbV9maWxlX3Jl bmFtZSc+PHNwYW4gdGl0bGU9Jyc+TmV3X0ZvbGRlcjwvc3Bhbj48L3A+IisK KyAgICAgICAgICAiPHNwYW4gY2xhc3M9J21ldGEgc2l6ZSc+PC9zcGFuPjxz cGFuIGNsYXNzPSdtZXRhIGNyZWF0ZWQnPjwvc3Bhbj48c3BhbiBjbGFzcz0n bWV0YSBtb2RpZmllZCc+PC9zcGFuPjwvbGk+IjsKKworICAgICAgdmFyIHBh dGggPSAkKCcuY3VycmVudHBhdGgnKS52YWwoKSwKKyAgICAgICAgICAkZmls ZV9lbGVtZW50ID0gICQoZm9sZGVyX2Rpdik7CisgICAgICAkKCcuZmlsZWlu Zm8gI2NvbnRlbnRzLmdyaWQnKS5hcHBlbmQoJGZpbGVfZWxlbWVudCk7Cisg ICAgICAkZmlsZV9lbGVtZW50LmZpbmQoJ3Agc3BhbicpLnRvZ2dsZSgpOwor ICAgICAgJGZpbGVfZWxlbWVudC5maW5kKCdwIGlucHV0JykudG9nZ2xlKCku dmFsKGxnLm5ld19mb2xkZXIpLnNlbGVjdCgpOworCisgICAgICAvLyBSZW5h bWUgZm9sZGVyL2ZpbGUgb24gcHJlc3NpbmcgZW50ZXIga2V5CisgICAgICAk KCcuZmlsZV9tYW5hZ2VyJykuYmluZCgpLm9uKCdrZXl1cCcsIGZ1bmN0aW9u KGUpIHsKKyAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgeworICAgICAg ICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgJGZpbGVfZWxl bWVudC5maW5kKCdwIGlucHV0JykudHJpZ2dlcignYmx1cicpOworICAgICAg ICB9CisgICAgICB9KTsKKworICAgICAgJGZpbGVfZWxlbWVudC5maW5kKCdw IGlucHV0Jykub24oJ2JsdXInLCBmdW5jdGlvbihlKSB7CisgICAgICAgICQo Jy5maWxlX21hbmFnZXIgYnV0dG9uLmNyZWF0ZScpLnJlbW92ZUF0dHIoJ2Rp c2FibGVkJyk7CisgICAgICAgIHZhciB0ZXh0X3ZhbHVlID0gJGZpbGVfZWxl bWVudC5maW5kKCdwIGlucHV0JykudmFsKCksCisgICAgICAgICAgICBwYXRo ID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCk7CisgICAgICAgICRmaWxlX2Vs ZW1lbnQuZmluZCgncCBpbnB1dCcpLnRvZ2dsZSgpOworICAgICAgICAkZmls ZV9lbGVtZW50LmZpbmQoJ3Agc3BhbicpLnRvZ2dsZSgpLmh0bWwodGV4dF92 YWx1ZSk7CisgICAgICAgIGlmKHRleHRfdmFsdWUgPT09IHVuZGVmaW5lZCkg dGV4dF92YWx1ZSA9IGxnLm5ld19mb2xkZXI7CisgICAgICAgIGdldEZvbGRl ck5hbWUodGV4dF92YWx1ZSk7CisgICAgICAgIGdldEZvbGRlckluZm8ocGF0 aCk7CisgICAgICB9KTsKKworICAgIH0KKyAgICBlbHNlIGlmKCQoJy5maWxl aW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnbGlzdCcpeworCisgICAgICB2YXIg Zm9sZGVyX2RpdiA9ICQoIjx0ciBjbGFzcz0nY2FwX2Rvd25sb2FkIGNhcF9k ZWxldGUgY2FwX3NlbGVjdF9maWxlIGNhcF9zZWxlY3RfZm9sZGVyIGNhcF9y ZW5hbWUgY2FwX2NyZWF0ZSBjYXBfdXBsb2FkJz4iKworICAgICAgICAiPHRk IHRpdGxlPScnIGNsYXNzPSdmYSBmYS1mb2xkZXItb3BlbiB0YmxfZm9sZGVy Jz4iKworICAgICAgICAgICI8cD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9 J2ZtX2ZpbGVfcmVuYW1lJz48c3Bhbj4iK2xnLm5ld19mb2xkZXIrIjwvc3Bh bj48L3A+IisKKyAgICAgICAgICAiPC90ZD48dGQ+IisKKyAgICAgICAgICAi PGFiYnIgdGl0bGU9Jyc+PC9hYmJyPjwvdGQ+IisKKyAgICAgICAgICAiPHRk PjwvdGQ+IisKKyAgICAgICAgIjwvdHI+Iik7CisKKyAgICAgICRmaWxlX2Vs ZW1lbnRfbGlzdCA9ICAkKGZvbGRlcl9kaXYpOworICAgICAgJCgnLmZpbGVp bmZvICNjb250ZW50cy5saXN0JykucHJlcGVuZCgkZmlsZV9lbGVtZW50X2xp c3QpOworICAgICAgJGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3Agc3Bhbicp LnRvZ2dsZSgpOworICAgICAgJGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3Ag aW5wdXQnKS50b2dnbGUoKS52YWwobGcubmV3X2ZvbGRlcikuc2VsZWN0KCk7 CisKKyAgICAgIC8vIFJlbmFtZSBmb2xkZXIvZmlsZSBvbiBwcmVzc2luZyBl bnRlciBrZXkKKyAgICAgICQoJy5maWxlX21hbmFnZXInKS5iaW5kKCkub24o J2tleXVwJywgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZS5rZXlDb2Rl ID09IDEzKSB7CisgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAg ICAgICAgICAkZmlsZV9lbGVtZW50X2xpc3QuZmluZCgncCBpbnB1dCcpLnRy aWdnZXIoJ2JsdXInKTsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAg ICRmaWxlX2VsZW1lbnRfbGlzdC5maW5kKCdwIGlucHV0Jykub24oJ2JsdXIn LCBmdW5jdGlvbihlKSB7CisgICAgICAgICQoJy5maWxlX21hbmFnZXIgYnV0 dG9uLmNyZWF0ZScpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICAg IHZhciB0ZXh0X3ZhbHVlID0gJGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3Ag aW5wdXQnKS52YWwoKSwKKyAgICAgICAgICAgIHBhdGggPSAkKCcuY3VycmVu dHBhdGgnKS52YWwoKTsKKyAgICAgICAgJGZpbGVfZWxlbWVudF9saXN0LmZp bmQoJ3AgaW5wdXQnKS50b2dnbGUoKTsKKyAgICAgICAgJGZpbGVfZWxlbWVu dF9saXN0LmZpbmQoJ3Agc3BhbicpLnRvZ2dsZSgpLmh0bWwodGV4dF92YWx1 ZSk7CisgICAgICAgIGlmKHRleHRfdmFsdWUgPT09IHVuZGVmaW5lZCkgdGV4 dF92YWx1ZSA9IGxnLm5ld19mb2xkZXI7CisgICAgICAgIGdldEZvbGRlck5h bWUodGV4dF92YWx1ZSk7CisgICAgICAgIGdldEZvbGRlckluZm8ocGF0aCk7 CisgICAgICB9KTsKKyAgICB9CisKKyAgICB2YXIgZ2V0Rm9sZGVyTmFtZSA9 IGZ1bmN0aW9uKHZhbHVlKXsKKyAgICAgIHZhciBmbmFtZSA9IHZhbHVlOwor CisgICAgICBpZihmbmFtZSAhPSAnJyl7CisgICAgICAgIGZvbGRlcm5hbWUg PSBjbGVhblN0cmluZyhmbmFtZSk7CisgICAgICAgIHZhciBkID0gbmV3IERh dGUoKTsgLy8gdG8gcHJldmVudCBJRSBjYWNoZSBpc3N1ZXMKKyAgICAgICAg JC5nZXRKU09OKGZpbGVDb25uZWN0b3IgKyAnP21vZGU9YWRkZm9sZGVyJnBh dGg9JyArICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpICsgJyZuYW1lPScgKyBm b2xkZXJuYW1lICsgJyZ0aW1lPScgKyBkLmdldE1pbGxpc2Vjb25kcygpLCBm dW5jdGlvbihyZXNwKXsKKyAgICAgICAgICByZXN1bHQgPSByZXNwLmRhdGEu cmVzdWx0OworICAgICAgICAgIGlmKHJlc3VsdFsnQ29kZSddID09PSAwKXsK KyAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MobGcuc3VjY2Vzc2Z1bF9h ZGRlZF9mb2xkZXIpOworICAgICAgICAgICAgZ2V0Rm9sZGVySW5mbyhyZXN1 bHRbJ1BhcmVudCddKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgYWxlcnRpZnkuZXJyb3IocmVzdWx0WydFcnJvciddKTsKKyAgICAgICAg ICB9CisgICAgICAgIH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxl cnRpZnkuZXJyb3IobGcubm9fZm9sZGVybmFtZSk7CisgICAgICB9CisgICAg fTsKKworICB9KTsKK307CisKKy8qCisgKiBCaW5kcyBzcGVjaWZpYyBhY3Rp b25zIHRvIHRoZSB0b29sYmFyIGluIGRldGFpbCB2aWV3cy4KKyAqIENhbGxl ZCB3aGVuIGRldGFpbCB2aWV3cyBhcmUgbG9hZGVkLgorICovCit2YXIgYmlu ZFRvb2xiYXIgPSBmdW5jdGlvbihkYXRhKXsKKyAgaWYgKCFoYXNfY2FwYWJp bGl0eShkYXRhLCAndXBsb2FkJykgfHwgaGlkZUJ1dHRvbnMoKSkgeworICAg ICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24udXBsb2FkJykuaGlk ZSgpOworICB9CisgIGVsc2UgeworICAgICQoJy5maWxlX21hbmFnZXInKS5m aW5kKCdidXR0b24udXBsb2FkJykuc2hvdygpOworICB9CisKKyAgaWYgKCFo YXNfY2FwYWJpbGl0eShkYXRhLCAnY3JlYXRlJykgfHwgaGlkZUJ1dHRvbnMo KSkgeworICAgICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24uY3Jl YXRlJykuaGlkZSgpOworICB9CisgIGVsc2UgeworICAgICAgJCgnLmZpbGVf bWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5jcmVhdGUnKS5zaG93KCk7CisgIH0K KworICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEsICdkZWxldGUnKSB8fCBo aWRlQnV0dG9ucygpKSB7CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQo J2J1dHRvbi5kZWxldGUnKS5oaWRlKCk7CisgIH0gZWxzZSB7CisgICAgJCgn LmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5kZWxldGUnKS5jbGljayhm dW5jdGlvbigpeworICAgICAgJCgnLmZpbGVpbmZvIC5kZWxldGVfaXRlbScp LnNob3coKTsKKyAgICB9KTsKKworICAgICQoJy5maWxlaW5mbyAuZGVsZXRl X2l0ZW0gYnV0dG9uLmJ0bl95ZXMnKS51bmJpbmQoKS5vbignY2xpY2snLCBm dW5jdGlvbigpIHsKKyAgICAgIGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3Zp ZXcnKSA9PSAnZ3JpZCcpeworICAgICAgICB2YXIgcGF0aCA9ICQoJy5maWxl aW5mbycpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxlY3RlZCAuY2xpcCBzcGFu JykuYXR0cignZGF0YS1hbHQnKTsKKyAgICAgICAgaWYocGF0aC5sYXN0SW5k ZXhPZignLycpID09IHBhdGgubGVuZ3RoIC0gMSl7CisgICAgICAgICAgZGF0 YVsnUGF0aCddID0gcGF0aDsKKyAgICAgICAgICBkZWxldGVJdGVtKGRhdGEp OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGRlbGV0 ZUl0ZW0oZGF0YSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2Ug eworICAgICAgICB2YXIgcGF0aCA9ICQoJy5maWxlaW5mbycpLmZpbmQoJ3Rh YmxlI2NvbnRlbnRzIHRib2R5IHRyLnNlbGVjdGVkIHRkOmZpcnN0LWNoaWxk JykuYXR0cigndGl0bGUnKTsKKyAgICAgICAgaWYocGF0aC5sYXN0SW5kZXhP ZignLycpID09IHBhdGgubGVuZ3RoIC0gMSl7CisgICAgICAgICAgZGF0YVsn UGF0aCddID0gcGF0aDsKKyAgICAgICAgICBkZWxldGVJdGVtKGRhdGEpOwor ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGRlbGV0ZUl0 ZW0oZGF0YSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKworICB9 CisKKyAgLy8gRG93bmxvYWQgZmlsZSBvbiBjbGljayBvbiBkb3dubG9hZCBi dXR0b24gYWRvd25sb2FkCisgIGlmICghaGFzX2NhcGFiaWxpdHkoZGF0YSwg J2Rvd25sb2FkJykgfHwgaGlkZUJ1dHRvbnMoKSkgeworICAgICQoJy5maWxl X21hbmFnZXInKS5maW5kKCdidXR0b24uZG93bmxvYWQnKS5oaWRlKCk7Cisg IH0gZWxzZSB7CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRv bi5kb3dubG9hZCcpLnVuYmluZCgpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAg ICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQnKXsK KyAgICAgICAgdmFyIHBhdGggPSAkKCcuZmlsZWluZm8gbGkuc2VsZWN0ZWQn KS5maW5kKCcuY2xpcCBzcGFuJykuYXR0cignZGF0YS1hbHQnKTsKKyAgICAg ICAgd2luZG93Lm9wZW4oZmlsZUNvbm5lY3RvciArICc/bW9kZT1kb3dubG9h ZCZwYXRoPScgKyBlbmNvZGVVUklDb21wb25lbnQocGF0aCksICdfYmxhbmsn KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICB2YXIgcGF0aCA9 ICQoJy5maWxlaW5mbycpLmZpbmQoJ3RhYmxlI2NvbnRlbnRzIHRib2R5IHRy LnNlbGVjdGVkIHRkOmZpcnN0LWNoaWxkJykuYXR0cigndGl0bGUnKTsKKyAg ICAgICAgd2luZG93Lm9wZW4oZmlsZUNvbm5lY3RvciArICc/bW9kZT1kb3du bG9hZCZwYXRoPScgKyBlbmNvZGVVUklDb21wb25lbnQocGF0aCksICdfYmxh bmsnKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGlmICghaGFzX2Nh cGFiaWxpdHkoZGF0YSwgJ3JlbmFtZScpIHx8IGhpZGVCdXR0b25zKCkpIHsK KyAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLnJlbmFtZScp LmhpZGUoKTsKKyAgfQorICBlbHNlIHsKKyAgICAgICQoJy5maWxlX21hbmFn ZXInKS5maW5kKCdidXR0b24ucmVuYW1lJykuc2hvdygpOworICB9Cit9Owor Cit2YXIgZW5hYmxlX2Rpc2FibGVfYnRuID0gZnVuY3Rpb24oKSB7CisgIGlm KCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAg IHZhciAkZ3JpZF9maWxlID0gJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJyNj b250ZW50cyBsaS5zZWxlY3RlZCcpOworICAgICRncmlkX2ZpbGUucmVtb3Zl Q2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZp bmQoJ2J1dHRvbi5kZWxldGUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOwor ICAgICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24uZG93bmxvYWQn KS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICQoJy5maWxlX21hbmFn ZXInKS5maW5kKCdidXR0b24ucmVuYW1lJykucHJvcCgnZGlzYWJsZWQnLCB0 cnVlKTsKKyAgICBpZiAoJGdyaWRfZmlsZS5sZW5ndGggPiAwKSB7CisgICAg ICAkKCcuY3JlYXRlX2lucHV0IGlucHV0W3R5cGU9InRleHQiXScpLnZhbCgn Jyk7CisgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykuYWRkQ2xhc3MoJ2Rp c2FibGVkJyk7CisgICAgfQorICB9IGVsc2UgeworICAgIHZhciAkbGlzdF9m aWxlID0gJCgnLmZpbGVpbmZvJykuZmluZCgndGFibGUjY29udGVudHMgdGJv ZHkgdHIuc2VsZWN0ZWQnKTsKKyAgICAkbGlzdF9maWxlLnJlbW92ZUNsYXNz KCdzZWxlY3RlZCcpOworICAgICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdi dXR0b24uZGVsZXRlJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAk KCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmRvd25sb2FkJykucHJv cCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJyku ZmluZCgnYnV0dG9uLnJlbmFtZScpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7 CisgICAgaWYgKCRsaXN0X2ZpbGUubGVuZ3RoID4gMCkgeworICAgICAgJCgn LmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0nKS52YWwoJycpOwor ICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLmFkZENsYXNzKCdkaXNhYmxl ZCcpOworICAgIH0KKyAgfQorCisgICQoJy5kZWxldGVfaXRlbScpLmhpZGUo KTsKKyAgLy8gY2xlYXIgYWRkcmVzcyBiYXIKKyAgJCgnLmZpbGVfbWFuYWdl ciAjdXBsb2FkZXIgaDEnKS5zaG93KCk7CisgICQoJy5maWxlX21hbmFnZXIg I3VwbG9hZGVyIC5zaG93X3NlbGVjdGVkX2ZpbGUnKS5yZW1vdmUoKTsKK307 CisKKyQoJy5maWxlX21hbmFnZXIgLmZpbGVpbmZvJykub24oJ2NsaWNrJywg ZnVuY3Rpb24oZSkgeworICBlbmFibGVfZGlzYWJsZV9idG4oKTsKK30pOwor CisKKyQoJy5maWxlX21hbmFnZXIgLnJlZnJlc2gnKS5vbignY2xpY2snLCBm dW5jdGlvbihlKSB7CisgIGVuYWJsZV9kaXNhYmxlX2J0bigpOworICB2YXIg Y3Vycl9wYXRoID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCk7CisgIHBhdGgg PSBjdXJyX3BhdGguc3Vic3RyaW5nKDAsIGN1cnJfcGF0aC5sYXN0SW5kZXhP ZigiLyIpKSArICIvIjsKKyAgZ2V0Rm9sZGVySW5mbyhwYXRoKTsKK30pOwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgSXRlbSBBY3Rpb25zCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworCisvKgorICogUmVuYW1lIHRoZSBjdXJyZW50IGl0ZW0gYW5kIHJldHVy bnMgdGhlIG5ldyBuYW1lLgorICogYnkgZG91YmxlIGNsaWNraW5nIG9yIGJ5 IGNsaWNraW5nIHRoZSAiUmVuYW1lIiBidXR0b24gaW4KKyAqIGxpc3Qgdmll d3MuCisgKi8KK3ZhciByZW5hbWVJdGVtID0gZnVuY3Rpb24oZGF0YSl7Cisg IHZhciBvcmlnX25hbWUgPSBnZXRGaWxlbmFtZShkYXRhWydGaWxlbmFtZSdd KSwKKyAgICAgIGZpbmFsTmFtZSA9ICcnOworCisgIHZhciBnZXROZXdOYW1l ID0gZnVuY3Rpb24ocm5hbWUpeworICAgIGlmKHJuYW1lICE9PSAnJyl7Cisg ICAgICB2YXIgZ2l2ZW5OYW1lID0gbmFtZUZvcm1hdChybmFtZSksCisgICAg ICAgICAgc3VmZml4ID0gZ2V0RXh0ZW5zaW9uKGRhdGFbJ0ZpbGVuYW1lJ10p OworICAgICAgaWYoc3VmZml4Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgZ2l2 ZW5OYW1lID0gZ2l2ZW5OYW1lICsgJy4nICsgc3VmZml4OworICAgICAgfQor CisgICAgICB2YXIgb2xkUGF0aCA9IGRhdGFbJ1BhdGgnXSwKKyAgICAgICAg ICBwb3N0X2RhdGEgPSB7CisgICAgICAgICJtb2RlIjogInJlbmFtZSIsCisg ICAgICAgICJvbGQiOiBkYXRhWydQYXRoJ10sCisgICAgICAgICJuZXciOiBn aXZlbk5hbWUsCisgICAgICB9OworCisgICAgICAkLmFqYXgoeworICAgICAg ICB0eXBlOiAnUE9TVCcsCisgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5 KHBvc3RfZGF0YSksCisgICAgICAgIHVybDogZmlsZUNvbm5lY3RvciwKKyAg ICAgICAgZGF0YVR5cGU6ICdqc29uJywKKyAgICAgICAgY29udGVudFR5cGU6 ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IiwKKyAgICAgICAg YXN5bmM6IGZhbHNlLAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNw KXsKKyAgICAgICAgICByZXN1bHQgPSByZXNwLmRhdGEucmVzdWx0OworICAg ICAgICAgIGlmKHJlc3VsdFsnQ29kZSddID09PSAwKXsKKyAgICAgICAgICAg IHZhciBuZXdQYXRoID0gcmVzdWx0WydOZXcgUGF0aCddLAorICAgICAgICAg ICAgICAgIG5ld05hbWUgPSByZXN1bHRbJ05ldyBOYW1lJ10sCisgICAgICAg ICAgICAgICAgdGl0bGUgPSAkKCIjcHJldmlldyBoMSIpLmF0dHIoInRpdGxl Iik7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgdGl0bGUgIT0idW5kZWZp bmVkIiAmJiB0aXRsZSA9PSBvbGRQYXRoKQorICAgICAgICAgICAgICAkKCcj cHJldmlldyBoMScpLnRleHQobmV3TmFtZSk7CisKKyAgICAgICAgICAgIGlm KCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAg ICAgICAgICAgICAkKCcuZmlsZWluZm8gc3BhbltkYXRhLWFsdD0iJyArIG9s ZFBhdGggKyAnIl0nKS5wYXJlbnQoKS5uZXh0KCdwIHNwYW4nKS50ZXh0KG5l d05hbWUpOworICAgICAgICAgICAgICAkKCcuZmlsZWluZm8gc3BhbltkYXRh LWFsdD0iJyArIG9sZFBhdGggKyAnIl0nKS5hdHRyKCdkYXRhLWFsdCcsIG5l d1BhdGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg JCgnLmZpbGVpbmZvIHRkW3RpdGxlPSInICsgb2xkUGF0aCArICciXScpLnRl eHQobmV3TmFtZSk7CisgICAgICAgICAgICAgICQoJy5maWxlaW5mbyB0ZFt0 aXRsZT0iJyArIG9sZFBhdGggKyAnIl0nKS5hdHRyKCd0aXRsZScsIG5ld1Bh dGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCgiI3ByZXZpZXcg aDEiKS5odG1sKG5ld05hbWUpOworCisgICAgICAgICAgICAvLyBhY3R1YWxp emVkIGRhdGEgZm9yIGJpbmRpbmcKKyAgICAgICAgICAgIGRhdGFbJ1BhdGgn XT1uZXdQYXRoOworICAgICAgICAgICAgZGF0YVsnRmlsZW5hbWUnXT1uZXdO YW1lOworCisgICAgICAgICAgICAvLyBVbkJpbmQgdG9vbGJhciBmdW5jdGlv bnMuCisgICAgICAgICAgICAkKCcuZmlsZWluZm8nKS5maW5kKCdidXR0b24u cmVuYW1lLCBidXR0b24uZGVsZXRlLCBidXR0b24uZG93bmxvYWQnKS51bmJp bmQoKTsKKworICAgICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhsZy5zdWNj ZXNzZnVsX3JlbmFtZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgYWxlcnRpZnkuZXJyb3IocmVzdWx0WydFcnJvciddKTsKKyAgICAg ICAgICB9CisKKyAgICAgICAgICBmaW5hbE5hbWUgPSByZXN1bHRbJ05ldyBO YW1lJ107CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKyAgfTsKKwor ICBnZXROZXdOYW1lKGRhdGFbJ05ld0ZpbGVuYW1lJ10pOworICByZXR1cm4g ZmluYWxOYW1lOworfTsKKworLyoKKyAqIFByb21wdHMgZm9yIGNvbmZpcm1h dGlvbiwgdGhlbiBkZWxldGVzIHRoZSBmb2xkZXIgd2l0aCBzdWIgZm9sZGVy CisgKiBvciBmaWxlcyBieSBjbGlja2luZyB0aGUgIkRlbGV0ZSIgYnV0dG9u IGluIGxpc3QgdmlldworICovCit2YXIgZGVsZXRlSXRlbSA9IGZ1bmN0aW9u KGRhdGEpeworICB2YXIgaXNEZWxldGVkID0gZmFsc2UsCisgICAgICBtc2cg PSBsZy5jb25maXJtYXRpb25fZGVsZXRlOworCisgIHZhciBkb0RlbGV0ZSA9 IGZ1bmN0aW9uKGRhdGEpeworICAgIHZhciBwYXJlbnQgPSBkYXRhWydQYXRo J10uc3BsaXQoJy8nKS5yZXZlcnNlKCkuc2xpY2UoMSkucmV2ZXJzZSgpLmpv aW4oJy8nKSArICcvJzsKKyAgICB2YXIgcG9zdF9kYXRhID0geworICAgICAg Im1vZGUiOiAiZGVsZXRlIiwKKyAgICAgICJwYXRoIjogZGF0YVsnUGF0aCdd CisgICAgfTsKKworICAgICQuYWpheCh7CisgICAgICB0eXBlOiAnUE9TVCcs CisgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0X2RhdGEpLAorICAg ICAgdXJsOiBmaWxlQ29ubmVjdG9yLAorICAgICAgZGF0YVR5cGU6ICdqc29u JywKKyAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbjsgY2hh cnNldD11dGYtOCIsCisgICAgICBhc3luYzogZmFsc2UsCisgICAgICBzdWNj ZXNzOiBmdW5jdGlvbihyZXNwKXsKKyAgICAgICAgcmVzdWx0ID0gcmVzcC5k YXRhLnJlc3VsdDsKKyAgICAgICAgaWYocmVzdWx0WydDb2RlJ10gPT09IDAp eworICAgICAgICAgIGlzRGVsZXRlZCA9IHRydWU7CisgICAgICAgICAgaWYo aXNEZWxldGVkKSB7CisgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGxn LnN1Y2Nlc3NmdWxfZGVsZXRlKTsKKyAgICAgICAgICAgIHZhciByb290cGF0 aCA9IHJlc3VsdFsnUGF0aCddLnN1YnN0cmluZygwLCByZXN1bHRbJ1BhdGgn XS5sZW5ndGgtMSk7IC8vIHJlbW92aW5nIHRoZSBsYXN0IHNsYXNoCisgICAg ICAgICAgICAgICAgcm9vdHBhdGggPSByb290cGF0aC5zdWJzdHIoMCwgcm9v dHBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpOworICAgICAgICAgICAgZ2V0 Rm9sZGVySW5mbyhyb290cGF0aCk7CisgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgeworICAgICAgICAgIGlzRGVsZXRlZCA9IGZhbHNlOworICAgICAg ICAgIGFsZXJ0aWZ5LmVycm9yKHJlc3VsdFsnRXJyb3InXSk7CisgICAgICAg IH0KKyAgICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4gaXNEZWxldGVkOwor ICB9OworCisgIGRvRGVsZXRlKGRhdGEpOworICByZXR1cm4gaXNEZWxldGVk OworfTsKKworCiskKCcuZGVsZXRlX2l0ZW0gYnV0dG9uLmJ0bl9ubycpLm9u KCdjbGljaycsIGZ1bmN0aW9uKCkgeworICAkKCcuZGVsZXRlX2l0ZW0nKS5o aWRlKCk7Cit9KTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZ1bmN0aW9ucyB0byBS ZXRyaWV2ZSBGaWxlIGFuZCBGb2xkZXIgRGV0YWlscworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KKworLyogRGVjaWRlcyB3aGV0aGVyIHRvIHJldHJpZXZlIGZpbGUgb3Ig Zm9sZGVyIGluZm8gYmFzZWQgb24KKyAqIHRoZSBwYXRoIHByb3ZpZGVkLgor ICovCit2YXIgZ2V0RGV0YWlsVmlldyA9IGZ1bmN0aW9uKHBhdGgpeworICBp ZihwYXRoLmxhc3RJbmRleE9mKCcvJykgPT0gcGF0aC5sZW5ndGggLSAxKXsK KyAgICBnZXRGb2xkZXJJbmZvKHBhdGgpOworICB9Cit9OworCisvKgorICog UmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgZmls ZSBhcyBhIEpTT04KKyAqIG9iamVjdCBhbmQgdXNlcyB0aGF0IGRhdGEgdG8g cG9wdWxhdGUgYSB0ZW1wbGF0ZSBmb3IKKyAqIGxpc3Qgdmlld3MuIEJpbmRz IHRoZSB0b29sYmFyIGZvciB0aGF0IGZpbGUvZm9sZGVyIHRvCisgKiBlbmFi bGUgc3BlY2lmaWMgYWN0aW9ucy4gQ2FsbGVkIHdoZW5ldmVyIGFuIGl0ZW0g aXMKKyAqIGNsaWNrZWQgaW4gbGlzdCB2aWV3cy4KKyAqLwordmFyIGdldEZp bGVJbmZvID0gZnVuY3Rpb24oZmlsZSl7CisgIC8vIFVwZGF0ZSBsb2NhdGlv biBmb3Igc3RhdHVzLCB1cGxvYWQsICYgbmV3IGZvbGRlciBmdW5jdGlvbnMu CisgIHZhciBjdXJyZW50cGF0aCA9IGZpbGUuc3Vic3RyKDAsIGZpbGUubGFz dEluZGV4T2YoJy8nKSArIDEpOworICBzZXRVcGxvYWRlcihjdXJyZW50cGF0 aCk7CisKKyAgLy8gUmV0cmlldmUgdGhlIGRhdGEgJiBwb3B1bGF0ZSB0aGUg dGVtcGxhdGUuCisgIHZhciBkID0gbmV3IERhdGUoKTsgLy8gdG8gcHJldmVu dCBJRSBjYWNoZSBpc3N1ZXMKKyAgdmFyIHBvc3RfZGF0YSA9IHsKKyAgICAn cGF0aCc6IGZpbGUsCisgICAgJ21vZGUnOiAnZ2V0aW5mbycKKyAgfTsKKwor ICAkLmFqYXgoeworICAgIHR5cGU6ICdQT1NUJywKKyAgICBkYXRhOiBKU09O LnN0cmluZ2lmeShwb3N0X2RhdGEpLAorICAgIHVybDogZmlsZUNvbm5lY3Rv ciwKKyAgICBkYXRhVHlwZTogJ2pzb24nLAorICAgIGNvbnRlbnRUeXBlOiAi YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsCisgICAgYXN5bmM6 IGZhbHNlLAorICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApeworICAgICAg ZGF0YSA9IHJlc3AuZGF0YS5yZXN1bHQ7CisgICAgICBpZihkYXRhWydDb2Rl J10gPT09IDApeworICAgICAgICB2YXIgcHJvcGVydGllcyA9ICcnOworICAg ICAgICBpZihkYXRhWydQcm9wZXJ0aWVzJ11bJ1NpemUnXSB8fCBwYXJzZUlu dChkYXRhWydQcm9wZXJ0aWVzJ11bJ1NpemUnXSk9PTApIHByb3BlcnRpZXMg Kz0gJzxkdD4nICsgbGcuc2l6ZSArICc8L2R0PjxkZD4nICsgZm9ybWF0Qnl0 ZXMoZGF0YVsnUHJvcGVydGllcyddWydTaXplJ10pICsgJzwvZGQ+JzsKKyAg ICAgICAgZGF0YVsnQ2FwYWJpbGl0aWVzJ10gPSBjYXBhYmlsaXRpZXM7Cisg ICAgICAgIGJpbmRUb29sYmFyKGRhdGEpOworICAgICAgfSBlbHNlIHsKKyAg ICAgICAgYWxlcnRpZnkuZXJyb3IoZGF0YVsnRXJyb3InXSk7CisgICAgICB9 CisgICAgfQorICB9KTsKK307CisKKy8qCisgKiBSZXRyaWV2ZXMgZGF0YSBm b3IgYWxsIGl0ZW1zIHdpdGhpbiB0aGUgZ2l2ZW4gZm9sZGVyIGFuZAorICog Y3JlYXRlcyBhIGxpc3Qgdmlldy4KKyAqLwordmFyIGdldEZvbGRlckluZm8g PSBmdW5jdGlvbihwYXRoLCBmaWxlX3R5cGU9JycpeworICAvLyBVcGRhdGUg bG9jYXRpb24gZm9yIHN0YXR1cywgdXBsb2FkLCAmIG5ldyBmb2xkZXIgZnVu Y3Rpb25zLgorICBzZXRVcGxvYWRlcihwYXRoKTsKKworICAvLyBCcmVhZENy dW1iIGNsaWNrIGV2ZW50CisgICQoJy5maWxlX21hbmFnZXIgYS5icmVhZGNy dW1icycpLnVuYmluZCgpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeworICAg IHZhciBwYXRoID0gJCh0aGlzKS5hdHRyKCdkYXRhLXBhdGgnKSwKKyAgICAg ICAgY3VycmVudF9kaXIgPSAkKHRoaXMpLmh0bWwoKSwKKyAgICAgICAgbW92 ZV90byA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoY3Vy cmVudF9kaXIpKStjdXJyZW50X2RpcjsKKyAgICBnZXRGb2xkZXJJbmZvKG1v dmVfdG8pOworICAgIGVuYWJfZGlzX2xldmVsX3VwKCk7CisgIH0pOworCisg ICAvLyBIaWRlIHNlbGVjdCBmaWxlIGlmIHdlIGFyZSBsaXN0aW5nIGRyaXZl cyBpbiB3aW5kb3dzLgorICAgaWYgKGhpZGVCdXR0b25zKCkpIHsKKyAgICAg JCgiLmFsbG93ZWRfZmlsZV90eXBlcyAuY2hhbmdlX2ZpbGVfdHlwZXMiKS5o aWRlKCk7CisgICB9CisgICBlbHNlIHsKKyAgICAgJCgiLmFsbG93ZWRfZmls ZV90eXBlcyAuY2hhbmdlX2ZpbGVfdHlwZXMiKS5zaG93KCk7CisgICB9CisK KyAgLy8gRGlzcGxheSBhbiBhY3Rpdml0eSBpbmRpY2F0b3IuCisgICQoJy5m aWxlaW5mbycpLmZpbmQoJ3NwYW4uYWN0aXZpdHknKS5odG1sKCI8aW1nIHNy Yz0ne3sgdXJsX2ZvcignYnJvd3Nlci5zdGF0aWMnLCBmaWxlbmFtZT0nY3Nz L2FjaVRyZWUvaW1hZ2UvbG9hZC1yb290LmdpZicpIH19Jz4iKTsKKyAgLy8g UmV0cmlldmUgdGhlIGRhdGEgYW5kIGdlbmVyYXRlIHRoZSBtYXJrdXAuCisg IHZhciBkID0gbmV3IERhdGUoKTsgLy8gdG8gcHJldmVudCBJRSBjYWNoZSBp c3N1ZXMKKyAgaWYgKCQudXJsUGFyYW0oJ3R5cGUnKSkgdXJsICs9ICcmdHlw ZT0nICsgJC51cmxQYXJhbSgndHlwZScpOworCisgIHZhciBwb3N0X2RhdGEg PSB7CisgICAgJ3BhdGgnOiBwYXRoLAorICAgICdtb2RlJzogJ2dldGZvbGRl cicsCisgICAgJ2ZpbGVfdHlwZSc6IGZpbGVfdHlwZSB8fCAiKiIKKyAgfTsK KworICAkLmFqYXgoeworICAgIHR5cGU6ICdQT1NUJywKKyAgICBkYXRhOiBK U09OLnN0cmluZ2lmeShwb3N0X2RhdGEpLAorICAgIHVybDogZmlsZUNvbm5l Y3RvciwKKyAgICBkYXRhVHlwZTogJ2pzb24nLAorICAgIGNvbnRlbnRUeXBl OiAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsCisgICAgYXN5 bmM6IGZhbHNlLAorICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApeworICAg IHZhciByZXN1bHQgPSAnJzsKKyAgICBkYXRhID0gcmVzcC5kYXRhLnJlc3Vs dDsKKyAgICAvLyBJcyB0aGVyZSBhbnkgZXJyb3Igb3IgdXNlciBpcyB1bmF1 dGhvcml6ZWQ/CisgICAgJCgnLmZpbGVpbmZvJykuZmluZCgnc3Bhbi5hY3Rp dml0eScpLmhpZGUoKTsKKyAgICBpZihkYXRhLkNvZGUgPT09IDApIHsKKyAg ICAgIGFsZXJ0aWZ5LmVycm9yKGRhdGEuZXJyX21zZyk7CisgICAgICByZXR1 cm47CisgICAgfTsKKworICAgIGlmKGRhdGEpeworICAgICAgaWYoJCgnLmZp bGVpbmZvJykuZGF0YSgndmlldycpID09ICdncmlkJyl7CisgICAgICAgIHJl c3VsdCArPSAnPHVsIGlkPSJjb250ZW50cyIgY2xhc3M9ImdyaWQiPic7Cisg ICAgICAgIGZvcihrZXkgaW4gZGF0YSl7CisgICAgICAgICAgdmFyIHByb3Bz ID0gZGF0YVtrZXldWydQcm9wZXJ0aWVzJ10sCisgICAgICAgICAgICAgIGNh cF9jbGFzc2VzID0gIiI7CisgICAgICAgICAgZm9yIChjYXAgaW4gY2FwYWJp bGl0aWVzKSB7CisgICAgICAgICAgICBpZiAoaGFzX2NhcGFiaWxpdHkoZGF0 YVtrZXldLCBjYXBhYmlsaXRpZXNbY2FwXSkpIHsKKyAgICAgICAgICAgICAg Y2FwX2NsYXNzZXMgKz0gImNhcF8iICsgY2FwYWJpbGl0aWVzW2NhcF07Cisg ICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgZGF0YVtr ZXldWydDYXBhYmlsaXRpZXMnXSA9IGNhcGFiaWxpdGllczsKKyAgICAgICAg ICBiaW5kVG9vbGJhcihkYXRhW2tleV0pOworCisgICAgICAgICAgdmFyIGNs YXNzX3R5cGU7CisgICAgICAgICAgaWYoZGF0YVtrZXldWydmaWxlX3R5cGUn XSA9PSAnZGlyJykgeworICAgICAgICAgICAgY2xhc3NfdHlwZSA9ICdmYSBm YS1mb2xkZXItb3BlbiBmbV9mb2xkZXInOworICAgICAgICAgIH0KKyAgICAg ICAgICBlbHNlIGlmKGRhdGFba2V5XVsnZmlsZV90eXBlJ10gPT0gJ2RyaXZl JykgeworICAgICAgICAgICAgY2xhc3NfdHlwZSA9ICdmYSBmYS1oZGQtbyBm bV9kcml2ZSc7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgY2xhc3NfdHlwZSA9ICdmYSBmYS1maWxlLXRleHQgZm1fZmls ZSc7CisgICAgICAgICAgfQorCisgICAgICAgICAgdmFyIGZtX2ZpbGVuYW1l ID0gZGF0YVtrZXldWydGaWxlbmFtZSddOworICAgICAgICAgIGlmIChmbV9m aWxlbmFtZS5sZW5ndGggPiAxNSApIHsKKyAgICAgICAgICAgICAgZm1fZmls ZW5hbWUgPSBkYXRhW2tleV1bJ0ZpbGVuYW1lJ10uc3Vic3RyKDAsIDEwKSAr Jy4uLic7CisgICAgICAgICAgfQorCisgICAgICAgICAgdmFyIGZpbGVfbmFt ZV9vcmlnaW5hbCA9IGVuY29kZVVSSShkYXRhW2tleV1bJ0ZpbGVuYW1lJ10p OworICAgICAgICAgIHZhciBmaWxlX3BhdGhfb3JpZyA9IGVuY29kZVVSSShk YXRhW2tleV1bJ1BhdGgnXSk7CisgICAgICAgICAgcmVzdWx0ICs9ICc8bGkg Y2xhc3M9IicgKyBjYXBfY2xhc3NlcyArICciPjxkaXYgY2xhc3M9ImNsaXAi PjxzcGFuIGRhdGEtYWx0PSInICsgZmlsZV9wYXRoX29yaWcgKyAnIiBjbGFz cz0iJyArIGNsYXNzX3R5cGUgKyAnIj48L3NwYW4+JzsKKyAgICAgICAgICBp ZiAoZGF0YVtrZXldWydQcm90ZWN0ZWQnXSA9PSAxKSB7CisgICAgICAgICAg ICByZXN1bHQgKz0gJzxzcGFuIGNsYXNzPSJmYSBmYS1sb2NrIGZtX2xvY2tf aWNvbiIgZGF0YS1wcm90ZWN0ZWQ9InByb3RlY3RlZCI+PC9zcGFuPic7Cisg ICAgICAgICAgfQorICAgICAgICAgIHJlc3VsdCArPSAnPC9kaXY+JzsKKyAg ICAgICAgICBpZighaGFzX2NhcGFiaWxpdHkoZGF0YVtrZXldLCAncmVuYW1l JykpCisgICAgICAgICAgICByZXN1bHQgKz0gJzxzcGFuPicgKyBmbV9maWxl bmFtZSArICc8L3NwYW4+JzsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAg ICByZXN1bHQgKz0gJzxwPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm1f ZmlsZV9yZW5hbWUiIC8+PHNwYW4gdGl0bGU9IicrZmlsZV9uYW1lX29yaWdp bmFsKyciPicgKyBmbV9maWxlbmFtZSArICc8L3NwYW4+PC9wPic7CisgICAg ICAgICAgaWYocHJvcHNbJ1dpZHRoJ10gJiYgcHJvcHNbJ1dpZHRoJ10gIT0g JycpIHJlc3VsdCArPSAnPHNwYW4gY2xhc3M9Im1ldGEgZGltZW5zaW9ucyI+ JyArIHByb3BzWydXaWR0aCddICsgJ3gnICsgcHJvcHNbJ0hlaWdodCddICsg Jzwvc3Bhbj4nOworICAgICAgICAgIGlmKHByb3BzWydTaXplJ10gJiYgcHJv cHNbJ1NpemUnXSAhPSAnJykgcmVzdWx0ICs9ICc8c3BhbiBjbGFzcz0ibWV0 YSBzaXplIj4nICsgcHJvcHNbJ1NpemUnXSArICc8L3NwYW4+JzsKKyAgICAg ICAgICBpZihwcm9wc1snRGF0ZSBDcmVhdGVkJ10gJiYgcHJvcHNbJ0RhdGUg Q3JlYXRlZCddICE9ICcnKSByZXN1bHQgKz0gJzxzcGFuIGNsYXNzPSJtZXRh IGNyZWF0ZWQiPicgKyBwcm9wc1snRGF0ZSBDcmVhdGVkJ10gKyAnPC9zcGFu Pic7CisgICAgICAgICAgaWYocHJvcHNbJ0RhdGUgTW9kaWZpZWQnXSAmJiBw cm9wc1snRGF0ZSBNb2RpZmllZCddICE9ICcnKSByZXN1bHQgKz0gJzxzcGFu IGNsYXNzPSJtZXRhIG1vZGlmaWVkIj4nICsgcHJvcHNbJ0RhdGUgTW9kaWZp ZWQnXSArICc8L3NwYW4+JzsKKyAgICAgICAgICByZXN1bHQgKz0gJzwvbGk+ JzsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCArPSAnPC91bD4nOwor ICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ICs9ICc8dGFibGUgaWQ9 ImNvbnRlbnRzIiBjbGFzcz0ibGlzdCI+JzsKKyAgICAgICAgcmVzdWx0ICs9 ICc8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iaGVhZGVyU29ydERvd24iPjxzcGFu PicgKyBsZy5uYW1lICsgJzwvc3Bhbj48L3RoPjx0aD48c3Bhbj4nICsgbGcu c2l6ZSArICc8L3NwYW4+PC90aD48dGg+PHNwYW4+JyArIGxnLm1vZGlmaWVk ICsgJzwvc3Bhbj48L3RoPjwvdHI+PC90aGVhZD4nOworICAgICAgICByZXN1 bHQgKz0gJzx0Ym9keT4nOworCisgICAgICAgIGZvcihrZXkgaW4gZGF0YSl7 CisgICAgICAgICAgdmFyIHBhdGggPSBlbmNvZGVVUkkoZGF0YVtrZXldWydQ YXRoJ10pLAorICAgICAgICAgICAgICBwcm9wcyA9IGRhdGFba2V5XVsnUHJv cGVydGllcyddLAorICAgICAgICAgICAgICBjYXBfY2xhc3NlcyA9ICIiOwor ICAgICAgICAgIGZvciAoY2FwIGluIGNhcGFiaWxpdGllcykgeworICAgICAg ICAgICAgaWYgKGhhc19jYXBhYmlsaXR5KGRhdGFba2V5XSwgY2FwYWJpbGl0 aWVzW2NhcF0pKSB7CisgICAgICAgICAgICAgIGNhcF9jbGFzc2VzICs9ICIg Y2FwXyIgKyBjYXBhYmlsaXRpZXNbY2FwXTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICB9CisKKyAgICAgICAgICBkYXRhW2tleV1bJ0NhcGFiaWxpdGll cyddID0gY2FwYWJpbGl0aWVzOworICAgICAgICAgIGJpbmRUb29sYmFyKGRh dGFba2V5XSk7CisKKyAgICAgICAgICB2YXIgY2xhc3NfdHlwZTsKKyAgICAg ICAgICBpZihkYXRhW2tleV1bJ2ZpbGVfdHlwZSddID09ICdkaXInKSB7Cisg ICAgICAgICAgICBjbGFzc190eXBlID0gJ2ZhIGZhLWZvbGRlci1vcGVuIHRi bF9mb2xkZXInOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGRh dGFba2V5XVsnZmlsZV90eXBlJ10gPT0gJ2RyaXZlJykgeworICAgICAgICAg ICAgY2xhc3NfdHlwZSA9ICdmYSBmYS1oZGQtbyB0YmxfZHJpdmUnOworICAg ICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNsYXNz X3R5cGUgPSAnZmEgZmEtZmlsZS10ZXh0IHRibF9maWxlJworICAgICAgICAg IH0KKworICAgICAgICAgIHZhciBmaWxlX25hbWVfb3JpZ2luYWwgPSBlbmNv ZGVVUkkoZGF0YVtrZXldWydGaWxlbmFtZSddKTsKKyAgICAgICAgICByZXN1 bHQgKz0gJzx0ciBjbGFzcz0iJyArIGNhcF9jbGFzc2VzICsgJyI+JzsKKwor ICAgICAgICAgIHZhciBmbV9maWxlbmFtZSA9IGRhdGFba2V5XVsnRmlsZW5h bWUnXTsKKyAgICAgICAgICBpZiAoZm1fZmlsZW5hbWUubGVuZ3RoID4gMTUg KSB7CisgICAgICAgICAgICAgIGZtX2ZpbGVuYW1lID0gZGF0YVtrZXldWydG aWxlbmFtZSddLnN1YnN0cigwLCAxMCkgKycuLi4nOworICAgICAgICAgIH0K KworICAgICAgICAgIHJlc3VsdCArPSAnPHRkIHRpdGxlPSInICsgcGF0aCAr ICciIGNsYXNzPSInK2NsYXNzX3R5cGUrJyI+JzsKKyAgICAgICAgICBpZihk YXRhW2tleV1bJ1Byb3RlY3RlZCddID09IDEpIHsKKyAgICAgICAgICAgIHJl c3VsdCArPSAnPGkgY2xhc3M9ImZhIGZhLWxvY2sgdGJsX2xvY2tfaWNvbiIg ZGF0YS1wcm90ZWN0ZWQ9InByb3RlY3RlZCI+PC9pPic7CisgICAgICAgICAg fQorICAgICAgICAgIGlmKCFoYXNfY2FwYWJpbGl0eShkYXRhW2tleV0sICdy ZW5hbWUnKSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHNwYW4gdGl0bGU9 IicgKyBkYXRhW2tleV1bJ0ZpbGVuYW1lJ10gKyAnIj4nICsgZm1fZmlsZW5h bWUgKyAnPC9zcGFuPjwvdGQ+JzsKKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICByZXN1bHQgKz0gJzxwPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0i Zm1fZmlsZV9yZW5hbWUiIC8+PHNwYW4gdGl0bGU9IicgKyBmaWxlX25hbWVf b3JpZ2luYWwgKyAnIj4nICsgZm1fZmlsZW5hbWUgKyAnPC9zcGFuPjwvcD48 L3RkPic7CisKKyAgICAgICAgICBpZihwcm9wc1snU2l6ZSddICYmIHByb3Bz WydTaXplJ10gIT0gJycpeworICAgICAgICAgICAgcmVzdWx0ICs9ICc8dGQ+ PGFiYnIgdGl0bGU9IicgKyBwcm9wc1snU2l6ZSddICsgJyI+JyArIHByb3Bz WydTaXplJ10gKyAnPC9hYmJyPjwvdGQ+JzsKKyAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgcmVzdWx0ICs9ICc8dGQ+PC90ZD4nOworICAgICAg ICAgIH0KKworICAgICAgICAgIGlmKHByb3BzWydEYXRlIE1vZGlmaWVkJ10g JiYgcHJvcHNbJ0RhdGUgTW9kaWZpZWQnXSAhPSAnJyl7CisgICAgICAgICAg ICByZXN1bHQgKz0gJzx0ZD4nICsgcHJvcHNbJ0RhdGUgTW9kaWZpZWQnXSAr ICc8L3RkPic7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl c3VsdCArPSAnPHRkPjwvdGQ+JzsKKyAgICAgICAgICB9CisKKyAgICAgICAg ICByZXN1bHQgKz0gJzwvdHI+JzsKKyAgICAgICAgfQorCisgICAgICAgIHJl c3VsdCArPSAnPC90Ym9keT4nOworICAgICAgICByZXN1bHQgKz0gJzwvdGFi bGU+JzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ICs9 ICc8aDE+JyArIGxnLmNvdWxkX25vdF9yZXRyaWV2ZV9mb2xkZXIgKyAnPC9o MT4nOworICAgIH0KKworICAgIC8vIEFkZCB0aGUgbmV3IG1hcmt1cCB0byB0 aGUgRE9NLgorICAgICQoJy5maWxlaW5mbyAuZmlsZV9saXN0aW5nJykuaHRt bChyZXN1bHQpOworCisgICAgLy8gcmVuYW1lIGZpbGUvZm9sZGVyCisgICAg JCgnLmZpbGVfbWFuYWdlciBidXR0b24ucmVuYW1lJykudW5iaW5kKCkub24o J2NsaWNrJyxmdW5jdGlvbihlKXsKKyAgICAgIGlmKCQoJy5maWxlaW5mbycp LmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAgICAgICBlLnN0b3BQcm9w YWdhdGlvbigpOworICAgICAgICB2YXIgJHRoaXMgPSAkKCcuZmlsZV9tYW5h Z2VyJykuZmluZCgnI2NvbnRlbnRzIGxpLnNlbGVjdGVkIHAnKSwKKyAgICAg ICAgICAgIG9yaWdfdmFsdWUgPSBkZWNvZGVVUkkoJHRoaXMuZmluZCgnc3Bh bicpLmF0dHIoJ3RpdGxlJykpLAorICAgICAgICAgICAgbmV3dmFsdWUgPSBv cmlnX3ZhbHVlLnN1YnN0cmluZygwLCBvcmlnX3ZhbHVlLmluZGV4T2YoJy4n KSk7CisKKyAgICAgICAgaWYgKG5ld3ZhbHVlID09PSAnJykKKyAgICAgICAg ICBuZXd2YWx1ZSA9IGRlY29kZVVSSShvcmlnX3ZhbHVlKTsKKworICAgICAg ICAkdGhpcy5maW5kKCdpbnB1dCcpLnRvZ2dsZSgpLnZhbChuZXd2YWx1ZSku Zm9jdXMoKTsKKyAgICAgICAgJHRoaXMuZmluZCgnc3BhbicpLnRvZ2dsZSgp OworCisgICAgICAgIC8vIFJlbmFtZSBmb2xkZXIvZmlsZSBvbiBwcmVzc2lu ZyBlbnRlciBrZXkKKyAgICAgICAgJCgnLmZpbGVfbWFuYWdlcicpLnVuYmlu ZCgpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICBpZiAo ZS5rZXlDb2RlID09IDEzKSB7CisgICAgICAgICAgICBlLnN0b3BQcm9wYWdh dGlvbigpOworICAgICAgICAgICAgJCgnLmZpbGVpbmZvICNjb250ZW50cyBs aS5zZWxlY3RlZCBwJykuZmluZCgnaW5wdXQnKS50cmlnZ2VyKCdibHVyJyk7 CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgfQorICAgICAg ZWxzZSBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2xpc3Qn KXsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdmFy ICR0aGlzID0gJCgnLmZpbGVpbmZvJykuZmluZCgndGFibGUjY29udGVudHMg dGJvZHkgdHIuc2VsZWN0ZWQgdGQ6Zmlyc3QtY2hpbGQgcCcpLAorICAgICAg ICAgICAgb3JpZ192YWx1ZSA9IGRlY29kZVVSSSgkdGhpcy5maW5kKCdzcGFu JykuaHRtbCgpKSwKKyAgICAgICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1 ZS5zdWJzdHJpbmcoMCwgb3JpZ192YWx1ZS5pbmRleE9mKCcuJykpOworICAg ICAgICBpZiAobmV3dmFsdWUgPT09ICcnKQorICAgICAgICAgIG5ld3ZhbHVl ID0gb3JpZ192YWx1ZTsKKworICAgICAgICAkdGhpcy5maW5kKCdpbnB1dCcp LnRvZ2dsZSgpLnZhbChuZXd2YWx1ZSkuZm9jdXMoKTsKKyAgICAgICAgJHRo aXMuZmluZCgnc3BhbicpLnRvZ2dsZSgpOworCisgICAgICAgIC8vIFJlbmFt ZSBmb2xkZXIvZmlsZSBvbiBwcmVzc2luZyBlbnRlciBrZXkKKyAgICAgICAg JCgnLmZpbGVfbWFuYWdlcicpLnVuYmluZCgpLm9uKCdrZXl1cCcsIGZ1bmN0 aW9uKGUpIHsKKyAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7Cisg ICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAg JCgnLmZpbGVpbmZvIHRhYmxlI2NvbnRlbnRzIHRyLnNlbGVjdGVkIHRkIHAn KS5maW5kKCdpbnB1dCcpLnRyaWdnZXIoJ2JsdXInKTsKKyAgICAgICAgICB9 CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0pOworCisgICAgJCgnLmZp bGVpbmZvICNjb250ZW50cyBsaSBwJykub24oJ2RibGNsaWNrJyxmdW5jdGlv bihlKXsKKyAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAkdGhp cyA9ICQodGhpcyk7CisgICAgICB2YXIgb3JpZ192YWx1ZSA9IGRlY29kZVVS SSgkdGhpcy5maW5kKCdzcGFuJykuYXR0cigndGl0bGUnKSksCisgICAgICAg ICAgbmV3dmFsdWUgPSBvcmlnX3ZhbHVlLnN1YnN0cmluZygwLCBvcmlnX3Zh bHVlLmluZGV4T2YoJy4nKSk7CisKKyAgICAgIGlmIChuZXd2YWx1ZSA9PT0g JycpCisgICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1ZTsKKworICAgICAg JHRoaXMuZmluZCgnaW5wdXQnKS50b2dnbGUoKS52YWwobmV3dmFsdWUpLmZv Y3VzKCk7CisgICAgICAkdGhpcy5maW5kKCdzcGFuJykudG9nZ2xlKCk7CisK KyAgICAgIC8vIFJlbmFtZSBmb2xkZXIvZmlsZSBvbiBwcmVzc2luZyBlbnRl ciBrZXkKKyAgICAgICQoJy5maWxlX21hbmFnZXInKS51bmJpbmQoKS5vbign a2V5dXAnLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlLmtleUNvZGUg PT0gMTMpIHsKKyAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAg ICAgICAgICR0aGlzLmZpbmQoJ2lucHV0JykudHJpZ2dlcignYmx1cicpOwor ICAgICAgICB9CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIC8vIFJlbmFt ZSBVSSBoYW5kbGluZworICAgICQoJy5maWxlaW5mbyAjY29udGVudHMgbGkg cCcpLm9uKCdibHVyIGRibGNsaWNrJywnaW5wdXQnLCBmdW5jdGlvbihlKXsK KyAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICB2YXIgb2xkX25h bWUgPSBkZWNvZGVVUkkoJCh0aGlzKS5zaWJsaW5ncygnc3BhbicpLmF0dHIo J3RpdGxlJykpLAorICAgICAgICAgIG5ld3ZhbHVlID0gb2xkX25hbWUuc3Vi c3RyaW5nKDAsIG9sZF9uYW1lLmluZGV4T2YoJy4nKSk7CisgICAgICAgICAg bGFzdCA9IGdldEZpbGVFeHRlbnNpb24ob2xkX25hbWUpOworICAgICAgaWYo b2xkX25hbWUuaW5kZXhPZignLicpID09IDApCisgICAgICAgIGxhc3QgPSAn JworCisgICAgICBpZiAobmV3dmFsdWUgPT0gJycpCisgICAgICAgIG5ld3Zh bHVlID0gZGVjb2RlVVJJKG9sZF9uYW1lKTsKKworICAgICAgaWYoZS50eXBl PT0ia2V5ZG93biIpCisgICAgICB7CisgICAgICAgIGlmKGUud2hpY2g9PTEz KQorICAgICAgICB7CisgICAgICAgICAgdmFyIGZ1bGxfbmFtZSA9IGRlY29k ZVVSSSgkKHRoaXMpLnZhbCgpKSArIChsYXN0ICE9PSAnJyA/ICcuJyArIGxh c3Q6ICcnKTsKKyAgICAgICAgICAkKHRoaXMpLnRvZ2dsZSgpOworICAgICAg ICAgICQodGhpcykuc2libGluZ3MoJ3NwYW4nKS50b2dnbGUoKS5odG1sKGZ1 bGxfbmFtZSk7CisKKyAgICAgICAgICB2YXIgbmV3X25hbWUgPSBkZWNvZGVV UkkoJCh0aGlzKS52YWwoKSksCisgICAgICAgICAgICAgIHBhdGggPSBkZWNv ZGVVUkkoJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCdzcGFuJyku YXR0cignZGF0YS1hbHQnKSk7CisKKyAgICAgICAgICB2YXIgZGF0YSA9IHsK KyAgICAgICAgICAgICdGaWxlbmFtZSc6IG9sZF9uYW1lLAorICAgICAgICAg ICAgJ1BhdGgnOiBwYXRoLAorICAgICAgICAgICAgJ05ld0ZpbGVuYW1lJzog bmV3X25hbWUKKyAgICAgICAgICB9OworCisgICAgICAgICAgaWYgKG5ld3Zh bHVlICE9PSBuZXdfbmFtZSkgeworICAgICAgICAgICAgcmVuYW1lSXRlbShk YXRhKTsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSAkKCcuY3VycmVudHBh dGgnKS52YWwoKTsKKyAgICAgICAgICAgIGdldEZvbGRlckluZm8ocGFyZW50 KTsKKyAgICAgICAgICB9CisgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24o KTsKKyAgICAgICAgfQorICAgICAgICBpZihlLndoaWNoPT0zOCB8fCBlLndo aWNoPT00MCB8fCBlLndoaWNoPT0zNyB8fCBlLndoaWNoPT0zOSB8fCBlLmtl eUNvZGUgPT0gMzIpCisgICAgICAgIHsKKyAgICAgICAgICBlLnN0b3BQcm9w YWdhdGlvbigpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlm KGUudHlwZT09ImZvY3Vzb3V0IikKKyAgICAgIHsKKyAgICAgICAgaWYoJCh0 aGlzKS5jc3MoJ2Rpc3BsYXknKT09ImlubGluZS1ibG9jayIpCisgICAgICAg IHsKKyAgICAgICAgICB2YXIgZnVsbF9uYW1lID0gZGVjb2RlVVJJKCQodGhp cykudmFsKCkpICsgKGxhc3QgIT09ICcnPyAnLicgKyBsYXN0OiAnJyk7Cisg ICAgICAgICAgJCh0aGlzKS50b2dnbGUoKTsKKyAgICAgICAgICAkKHRoaXMp LnNpYmxpbmdzKCdzcGFuJykudG9nZ2xlKCkuaHRtbChmdWxsX25hbWUpOwor CisgICAgICAgICAgdmFyIG5ld19uYW1lID0gZGVjb2RlVVJJKCQodGhpcyku dmFsKCkpLAorICAgICAgICAgICAgICBwYXRoID0gZGVjb2RlVVJJKCQodGhp cykucGFyZW50KCkucGFyZW50KCkuZmluZCgnc3BhbicpLmF0dHIoJ2RhdGEt YWx0JykpOworCisgICAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAg ICAnRmlsZW5hbWUnOiBvbGRfbmFtZSwKKyAgICAgICAgICAgICdQYXRoJzog cGF0aCwKKyAgICAgICAgICAgICdOZXdGaWxlbmFtZSc6IG5ld19uYW1lCisg ICAgICAgICAgfTsKKworICAgICAgICAgIGlmIChuZXd2YWx1ZSAhPT0gbmV3 X25hbWUpIHsKKyAgICAgICAgICAgIHJlbmFtZUl0ZW0oZGF0YSk7CisgICAg ICAgICAgICB2YXIgcGFyZW50ID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCk7 CisgICAgICAgICAgICBnZXRGb2xkZXJJbmZvKHBhcmVudCk7CisgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7 CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICB9CisgICAg fSk7CisKKyAgICAkKCcuZmlsZWluZm8gdGFibGUjY29udGVudHMgdHIgdGQg cCcpLm9uKCdkYmxjbGljaycsZnVuY3Rpb24oZSl7CisgICAgICBlLnN0b3BQ cm9wYWdhdGlvbigpOworICAgICAgLy8gUHJvbXB0IHRvIHJlbmFtZSBmaWxl L2ZvbGRlcgorICAgICAgJHRoaXMgPSAkKHRoaXMpOworICAgICAgdmFyIG9y aWdfdmFsdWUgPSBkZWNvZGVVUkkoJHRoaXMuZmluZCgnc3BhbicpLmF0dHIo J3RpdGxlJykpLAorICAgICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1ZS5z dWJzdHJpbmcoMCwgb3JpZ192YWx1ZS5pbmRleE9mKCcuJykpOworCisgICAg ICBpZiAobmV3dmFsdWUgPT09ICcnKQorICAgICAgICBuZXd2YWx1ZSA9IG9y aWdfdmFsdWU7CisKKyAgICAgICR0aGlzLmZpbmQoJ2lucHV0JykudG9nZ2xl KCkudmFsKG5ld3ZhbHVlKS5mb2N1cygpOworICAgICAgJHRoaXMuZmluZCgn c3BhbicpLnRvZ2dsZSgpOworCisgICAgICAvLyBSZW5hbWUgZm9sZGVyL2Zp bGUgb24gcHJlc3NpbmcgZW50ZXIga2V5CisgICAgICAkKCcuZmlsZV9tYW5h Z2VyJykudW5iaW5kKCkub24oJ2tleXVwJywgZnVuY3Rpb24oZSkgeworICAg ICAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7CisgICAgICAgICAgZS5zdG9w UHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAkdGhpcy5maW5kKCdpbnB1dCcp LnRyaWdnZXIoJ2JsdXInKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAg fSk7CisKKyAgICAkKCcuZmlsZWluZm8gdGFibGUjY29udGVudHMgdHIgdGQg cCcpLm9uKCdibHVyIGRibGNsaWNrJywnaW5wdXQnLGZ1bmN0aW9uKGUpewor ICAgICAgdmFyIG9sZF9uYW1lID0gZGVjb2RlVVJJKCQodGhpcykuc2libGlu Z3MoJ3NwYW4nKS5hdHRyKCd0aXRsZScpKSwKKyAgICAgICAgICBuZXd2YWx1 ZSA9IG9sZF9uYW1lLnN1YnN0cmluZygwLCBvbGRfbmFtZS5pbmRleE9mKCcu JykpOworICAgICAgICAgIGxhc3QgPSBnZXRGaWxlRXh0ZW5zaW9uKG9sZF9u YW1lKTsKKyAgICAgIGlmKG9sZF9uYW1lLmluZGV4T2YoJy4nKSA9PSAwKQor ICAgICAgICBsYXN0ID0gJycKKworICAgICAgaWYgKG5ld3ZhbHVlID09ICcn KQorICAgICAgICBuZXd2YWx1ZSA9IG9sZF9uYW1lOworCisgICAgICBpZihl LnR5cGU9PSJmb2N1c291dCIpCisgICAgICB7CisgICAgICAgIGlmKCQodGhp cykuY3NzKCdkaXNwbGF5Jyk9PSJpbmxpbmUtYmxvY2siKQorICAgICAgICB7 CisgICAgICAgICAgdmFyIGZ1bGxfbmFtZSA9IGRlY29kZVVSSSgkKHRoaXMp LnZhbCgpKSArIChsYXN0ICE9PSAnJz8gJy4nICsgbGFzdDogJycpOworICAg ICAgICAgICQodGhpcykudG9nZ2xlKCk7CisgICAgICAgICAgJCh0aGlzKS5z aWJsaW5ncygnc3BhbicpLnRvZ2dsZSgpLmh0bWwoZnVsbF9uYW1lKTsKKwor ICAgICAgICAgIHZhciBuZXdfbmFtZSA9IGRlY29kZVVSSSgkKHRoaXMpLnZh bCgpKSwKKyAgICAgICAgICAgICAgcGF0aCA9IGRlY29kZVVSSSgkKHRoaXMp LnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ3RpdGxlJykpOworCisgICAgICAg ICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICAnRmlsZW5hbWUnOiBvbGRf bmFtZSwKKyAgICAgICAgICAgICdQYXRoJzogcGF0aCwKKyAgICAgICAgICAg ICdOZXdGaWxlbmFtZSc6IG5ld19uYW1lCisgICAgICAgICAgfTsKKworICAg ICAgICAgIGlmIChuZXd2YWx1ZSAhPT0gbmV3X25hbWUpIHsKKyAgICAgICAg ICAgIHJlbmFtZUl0ZW0oZGF0YSk7CisgICAgICAgICAgICB2YXIgcGFyZW50 ID0gcGF0aC5zcGxpdCgnLycpLnJldmVyc2UoKS5zbGljZSgyKS5yZXZlcnNl KCkuam9pbignLycpICsgJy8nOworICAgICAgICAgICAgZ2V0Rm9sZGVySW5m byhwYXJlbnQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQor ICAgICAgZWxzZQorICAgICAgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlv bigpOworICAgICAgfQorICAgIH0pOworCisgICAgLyoKKyAgICAgKiBCaW5k IGNsaWNrIGV2ZW50cworICAgICAqIFNlbGVjdCBpdGVtcyAtIGFmb2xkZXIg ZGJsY2xpY2sKKyAgICAgKi8KKyAgICBpZigkKCcuZmlsZWluZm8nKS5kYXRh KCd2aWV3JykgPT0gJ2dyaWQnKXsKKyAgICAgIC8vIEdldCBpbnRvIGZvbGRl ciBvbiBkYmxjbGljaworICAgICAgJCgnLmZpbGVpbmZvJykuZmluZCgnI2Nv bnRlbnRzIGxpJykuZGJsY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICAgIGUu c3RvcFByb3BhZ2F0aW9uKCk7CisKKyAgICAgICAgLy8gRW5hYmxlL0Rpc2Fi bGUgbGV2ZWwgdXAgYnV0dG9uCisgICAgICAgIGVuYWJfZGlzX2xldmVsX3Vw KCk7CisgICAgICAgIHZhciBwYXRoID0gZGVjb2RlVVJJKCQodGhpcykuZmlu ZCgnc3BhbicpLmF0dHIoJ2RhdGEtYWx0JykpOworICAgICAgICBpZihwYXRo Lmxhc3RJbmRleE9mKCIvIikgPT0gcGF0aC5sZW5ndGggLSAxKXsKKyAgICAg ICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykuYWRkQ2xhc3MoJ2Rpc2FibGVk Jyk7CisgICAgICAgICAgdmFyICRjcmVhdGVfaW5wdXQgPSAkKCcuY3JlYXRl X2lucHV0IGlucHV0W3R5cGU9InRleHQiXScpOworICAgICAgICAgICQoJy5m aWxlX21hbmFnZXIgYnV0dG9uLmRlbGV0ZSwgLmZpbGVfbWFuYWdlciBidXR0 b24ucmVuYW1lJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAg ICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kb3dubG9hZCcpLmF0 dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgZ2V0Rm9s ZGVySW5mbyhwYXRoKTsKKyAgICAgICAgICBpZiAoJGNyZWF0ZV9pbnB1dC5s ZW5ndGggIT0gMCAmJiAkY3JlYXRlX2lucHV0LnZhbCgpICE9ICcnKSB7Cisg ICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykucmVtb3ZlQ2xhc3Mo J2Rpc2FibGVkJyk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgIGdldEZpbGVJbmZvKHBhdGgpOworICAgICAgICB9CisgICAg ICB9KTsKKworICAgICAgZGF0YV9jYXAgPSB7fQorICAgICAgZGF0YV9jYXBb J0NhcGFiaWxpdGllcyddID0gY2FwYWJpbGl0aWVzOworICAgICAgJCgnLmZp bGVpbmZvJykuZmluZCgnI2NvbnRlbnRzIGxpJykuY2xpY2soZnVuY3Rpb24o ZSl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZh ciBwYXRoID0gZGVjb2RlVVJJKCQodGhpcykuZmluZCgnLmNsaXAgc3Bhbicp LmF0dHIoJ2RhdGEtYWx0JykpLAorICAgICAgICAgICAgZmlsZV9uYW1lID0g JCh0aGlzKS5maW5kKCdwIHNwYW4nKS5hdHRyKCd0aXRsZScpLAorICAgICAg ICAgICAgaXNfcHJvdGVjdGVkID0gJCh0aGlzKS5maW5kKCcuY2xpcCBzcGFu LmZtX2xvY2tfaWNvbicpLmF0dHIoJ2RhdGEtcHJvdGVjdGVkJyk7CisgICAg ICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PSBwYXRoLmxlbmd0aCAt IDEpeworICAgICAgICAgIGlmKGhhc19jYXBhYmlsaXR5KGRhdGFfY2FwLCAn c2VsZWN0X2ZvbGRlcicpICYmIGlzX3Byb3RlY3RlZCA9PSB1bmRlZmluZWQp IHsKKyAgICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgnbGkuc2Vs ZWN0ZWQnKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAg ICQodGhpcykuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAk KCcuZmlsZV9tYW5hZ2VyX29rJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7 CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kZWxldGUs IC5maWxlX21hbmFnZXIgYnV0dG9uLnJlbmFtZScpLnJlbW92ZUF0dHIoJ2Rp c2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAkKCcuZmlsZV9t YW5hZ2VyIGJ1dHRvbi5kb3dubG9hZCcpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rp c2FibGVkJyk7CisgICAgICAgICAgICAvLyBzZXQgc2VsZWN0ZWQgZm9sZGVy IG5hbWUgaW4gYnJlYWRjcnVtcworICAgICAgICAgICAgJCgnLmZpbGVfbWFu YWdlciAjdXBsb2FkZXIgaDEnKS5oaWRlKCk7CisgICAgICAgICAgICAkKCcu ZmlsZV9tYW5hZ2VyICN1cGxvYWRlciAuc2hvd19zZWxlY3RlZF9maWxlJyku cmVtb3ZlKCk7CisgICAgICAgICAgICAkKCc8c3BhbiBjbGFzcz0ic2hvd19z ZWxlY3RlZF9maWxlIj4nK3BhdGgrJzwvc3Bhbj4nKS5hcHBlbmRUbygnLmZp bGVfbWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAn KTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy9nZXRGb2xkZXJJbmZvKHBh dGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmKGhhc19jYXBh YmlsaXR5KGRhdGFfY2FwLCAnc2VsZWN0X2ZpbGUnKSAmJiBpc19wcm90ZWN0 ZWQgPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAkKHRoaXMpLnBhcmVu dCgpLmZpbmQoJ2xpLnNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVk Jyk7CisgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdzZWxlY3RlZCcp OworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLnJlbW92ZUNs YXNzKCdkaXNhYmxlZCcpOworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdl ciBidXR0b24uZGVsZXRlLCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kb3dubG9h ZCwgLmZpbGVfbWFuYWdlciBidXR0b24ucmVuYW1lJykucmVtb3ZlQXR0cign ZGlzYWJsZWQnKTsKKyAgICAgICAgICAgIC8vIHNldCBzZWxlY3RlZCBmb2xk ZXIgbmFtZSBpbiBicmVhZGNydW1zCisgICAgICAgICAgICAkKCcuZmlsZV9t YW5hZ2VyICN1cGxvYWRlciBoMScpLmhpZGUoKTsKKyAgICAgICAgICAgICQo Jy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5zaG93X3NlbGVjdGVkX2ZpbGUn KS5yZW1vdmUoKTsKKyAgICAgICAgICAgICQoJzxzcGFuIGNsYXNzPSJzaG93 X3NlbGVjdGVkX2ZpbGUiPicrcGF0aCsnPC9zcGFuPicpLmFwcGVuZFRvKCcu ZmlsZV9tYW5hZ2VyICN1cGxvYWRlciAuZmlsZW1hbmFnZXItcGF0aC1ncm91 cCcpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihjb25maWcub3B0aW9u cy5kaWFsb2dfdHlwZSA9PSAnY3JlYXRlX2ZpbGUnICYmIGlzX3Byb3RlY3Rl ZCA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICQoJy5jcmVhdGVfaW5w dXQgaW5wdXRbdHlwZT0idGV4dCJdJykudmFsKGZpbGVfbmFtZSk7CisgICAg ICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rLCAuZmlsZV9tYW5hZ2VyX2Ny ZWF0ZScpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOworICAgICAgICAgIH0K KyAgICAgICAgICBnZXRGaWxlSW5mbyhwYXRoKTsKKyAgICAgICAgfQorCisg ICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgJCgnLmZpbGVpbmZvIHRh YmxlI2NvbnRlbnRzIHRib2R5IHRyJykub24oJ2NsaWNrJywgZnVuY3Rpb24o ZSl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZh ciBwYXRoID0gZGVjb2RlVVJJKCQoJ3RkOmZpcnN0LWNoaWxkJywgdGhpcyku YXR0cigndGl0bGUnKSksCisgICAgICAgICAgICBmaWxlX25hbWUgPSBkZWNv ZGVVUkkoJCgndGQ6Zmlyc3QtY2hpbGQgcCBzcGFuJywgdGhpcykuYXR0cign dGl0bGUnKSksCisgICAgICAgICAgICBpc19wcm90ZWN0ZWQgPSAkKCd0ZDpm aXJzdC1jaGlsZCcsIHRoaXMpLmZpbmQoJ2kudGJsX2xvY2tfaWNvbicpLmF0 dHIoJ2RhdGEtcHJvdGVjdGVkJyk7CisgICAgICAgIGlmKHBhdGgubGFzdElu ZGV4T2YoJy8nKSA9PSBwYXRoLmxlbmd0aCAtIDEpeworICAgICAgICAgIGlm KGhhc19jYXBhYmlsaXR5KGRhdGFfY2FwLCAnc2VsZWN0X2ZvbGRlcicpICYm IGlzX3Byb3RlY3RlZCA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICQo dGhpcykucGFyZW50KCkuZmluZCgndHIuc2VsZWN0ZWQnKS5yZW1vdmVDbGFz cygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICQoJ3RkOmZpcnN0LWNoaWxk JywgdGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAg ICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykucmVtb3ZlQ2xhc3MoJ2Rp c2FibGVkJyk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRv bi5kb3dubG9hZCcpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7Cisg ICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kZWxldGUsIC5m aWxlX21hbmFnZXIgYnV0dG9uLnJlbmFtZScpLnJlbW92ZUF0dHIoJ2Rpc2Fi bGVkJyk7CisgICAgICAgICAgICAvLyBzZXQgc2VsZWN0ZWQgZm9sZGVyIG5h bWUgaW4gYnJlYWRjcnVtcworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdl ciAjdXBsb2FkZXIgaDEnKS5oaWRlKCk7CisgICAgICAgICAgICAkKCcuZmls ZV9tYW5hZ2VyICN1cGxvYWRlciAuc2hvd19zZWxlY3RlZF9maWxlJykucmVt b3ZlKCk7CisgICAgICAgICAgICAkKCc8c3BhbiBjbGFzcz0ic2hvd19zZWxl Y3RlZF9maWxlIj4nK3BhdGgrJzwvc3Bhbj4nKS5hcHBlbmRUbygnLmZpbGVf bWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAnKTsK KyAgICAgICAgICB9CisgICAgICAgICAgLy9nZXRGb2xkZXJJbmZvKHBhdGgp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmKGhhc19jYXBhYmls aXR5KGRhdGFfY2FwLCAnc2VsZWN0X2ZpbGUnKSAmJiBpc19wcm90ZWN0ZWQg PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgp LmZpbmQoJ3RyLnNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7 CisgICAgICAgICAgICAkKCd0ZDpmaXJzdC1jaGlsZCcsIHRoaXMpLnBhcmVu dCgpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICAgICAgJCgnLmZp bGVfbWFuYWdlcl9vaycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOworICAg ICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uZGVsZXRlLCAuZmls ZV9tYW5hZ2VyIGJ1dHRvbi5kb3dubG9hZCwgLmZpbGVfbWFuYWdlciBidXR0 b24ucmVuYW1lJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAg ICAgIC8vIHNldCBzZWxlY3RlZCBmb2xkZXIgbmFtZSBpbiBicmVhZGNydW1z CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciBoMScp LmhpZGUoKTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgI3VwbG9h ZGVyIC5zaG93X3NlbGVjdGVkX2ZpbGUnKS5yZW1vdmUoKTsKKyAgICAgICAg ICAgICQoJzxzcGFuIGNsYXNzPSJzaG93X3NlbGVjdGVkX2ZpbGUiPicrcGF0 aCsnPC9zcGFuPicpLmFwcGVuZFRvKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRl ciAuZmlsZW1hbmFnZXItcGF0aC1ncm91cCcpOworICAgICAgICAgIH0KKyAg ICAgICAgICBpZihjb25maWcub3B0aW9ucy5kaWFsb2dfdHlwZSA9PSAnY3Jl YXRlX2ZpbGUnICYmIGlzX3Byb3RlY3RlZCA9PSB1bmRlZmluZWQpIHsKKyAg ICAgICAgICAgICQoJy5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJd JykudmFsKGZpbGVfbmFtZSk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5h Z2VyX29rLCAuZmlsZV9tYW5hZ2VyX2NyZWF0ZScpLnJlbW92ZUNsYXNzKCdk aXNhYmxlZCcpOworICAgICAgICAgIH0KKyAgICAgICAgICBnZXRGaWxlSW5m byhwYXRoKTsKKyAgICAgICAgfQorCisKKyAgICAgIH0pOworCisgICAgICAk KCcuZmlsZWluZm8gdGFibGUjY29udGVudHMgdGJvZHkgdHInKS5vbignZGJs Y2xpY2snLCBmdW5jdGlvbihlKXsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRp b24oKTsKKworICAgICAgICAvLyBFbmFibGUvRGlzYWJsZSBsZXZlbCB1cCBi dXR0b24KKyAgICAgICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKKyAgICAgICAg dmFyIHBhdGggPSAkKCd0ZDpmaXJzdC1jaGlsZCcsIHRoaXMpLmF0dHIoJ3Rp dGxlJyk7CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PSBw YXRoLmxlbmd0aCAtIDEpeworICAgICAgICAgICQoJy5maWxlX21hbmFnZXJf b2snKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAgICAkKCcu ZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kb3dubG9hZCcpLmF0dHIoJ2Rpc2FibGVk JywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBi dXR0b24uZGVsZXRlLCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5h dHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgIGdldEZv bGRlckluZm8ocGF0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg Z2V0RmlsZUluZm8ocGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisg ICAgfQorICAgfQorICB9KTsKK307CisKKy8vIEVuYWJsZS9EaXNhYmxlIGxl dmVsIHVwIGJ1dHRvbgordmFyIGVuYWJfZGlzX2xldmVsX3VwID0gZnVuY3Rp b24oKSB7CisKKyAgJCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgaDEnKS5z aG93KCk7CisgICQoJy5zaG93X3NlbGVjdGVkX2ZpbGUnKS5yZW1vdmUoKTsK KyAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICB2YXIgYiA9ICQoJy5j dXJyZW50cGF0aCcpLnZhbCgpLAorICAgICAgICAkbGV2ZWxfdXAgPSAkKCcu ZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmxldmVsLXVwJyk7CisgICAg ICAgICRob21lX2J0biA9ICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0 b24uaG9tZScpOworICAgIGlmIChiID09PSBmaWxlUm9vdCkgeworICAgICAg JGxldmVsX3VwLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAg ICAkaG9tZV9idG4uYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAg ICB9CisgICAgZWxzZSB7CisgICAgICAkaG9tZV9idG4ucmVtb3ZlQXR0cign ZGlzYWJsZWQnKTsKKyAgICAgICRsZXZlbF91cC5yZW1vdmVBdHRyKCdkaXNh YmxlZCcpOworICAgIH0KKyAgfSwgMTAwKTsKK30KKworLy8gR2V0IHRyYW5z YWN0aW9uIGlkIHRvIGdlbmVyYXRlIHJlcXVlc3QgdXJsIGFuZAorLy8gdG8g Z2VuZXJhdGUgY29uZmlnIGZpbGVzIG9uIHJ1bnRpbWUKK3ZhciB0cmFuc0lk ID0gZ2V0VHJhbnNJZCgpLAorICAgIHRfaWQgPSAnJzsKKworaWYgKHRyYW5z SWQucmVhZHlTdGF0ZSA9PSA0KQorICB0X3JlcyA9IEpTT04ucGFyc2UodHJh bnNJZC5yZXNwb25zZVRleHQpOwordF9pZCA9IHRfcmVzLmRhdGEuZmlsZVRy YW5zSWQ7CisKK3ZhciByb290X3VybCA9ICd7eyB1cmxfZm9yKCJmaWxlX21h bmFnZXIuaW5kZXgiKSB9fScsCisgICAgZmlsZV9tYW5hZ2VyX2NvbmZpZ19q c29uID0gcm9vdF91cmwrdF9pZCsnL2ZpbGVfbWFuYWdlcl9jb25maWcuanNv bicsCisgICAgZmlsZV9tYW5hZ2VyX2NvbmZpZ19qcyA9IHJvb3RfdXJsKydm aWxlX21hbmFnZXJfY29uZmlnLmpzJywKKyAgICBmaWxlQ29ubmVjdG9yID0g cm9vdF91cmwrJ2ZpbGVtYW5hZ2VyLycrdF9pZCsnLycsCisgICAgY29uZmcg PSBsb2FkQ29uZmlnRmlsZSgpOworCisKKy8vIGxvYWQgdXNlciBjb25maWd1 cmF0aW9uIGZpbGUKK2lmIChjb25mZy5yZWFkeVN0YXRlID09IDQpCisgIGNv bmZpZyA9IEpTT04ucGFyc2UoY29uZmcucmVzcG9uc2VUZXh0KTsKKwordmFy IGZpbGVSb290ID0gY29uZmlnLm9wdGlvbnMuZmlsZVJvb3QsCisgICAgY2Fw YWJpbGl0aWVzID0gY29uZmlnLm9wdGlvbnMuY2FwYWJpbGl0aWVzOworCisv KgorICogR2V0IGxvY2FsaXplZCBtZXNzYWdlcyBmcm9tIGZpbGUKKyAqIHRo cm91Z2ggY3VsdHVyZSB2YXIgb3IgZnJvbSBVUkwKKyAqLwordmFyIGxnID0g W10sCisgICAgZW5qcyA9ICd7eyB1cmxfZm9yKCJmaWxlX21hbmFnZXIuaW5k ZXgiKSB9fScrImVuLmpzIiwKKyAgICBsZ2YgPSBsb2FkTGFuZ0ZpbGUoZW5q cyk7CisKK2lmIChsZ2YucmVhZHlTdGF0ZSA9PSA0KQorICBsZyA9IEpTT04u cGFyc2UobGdmLnJlc3BvbnNlVGV4dCk7CisKKy8vIERpc2FibGUgaG9tZSBi dXR0b24gb24gbG9hZAorJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRv bi5ob21lJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyQoJy5m aWxlX21hbmFnZXInKS5maW5kKCdidXR0b24ucmVuYW1lJykuYXR0cignZGlz YWJsZWQnLCAnZGlzYWJsZWQnKTsKKworaWYgKGNvbmZpZy5vcHRpb25zLmRp YWxvZ190eXBlID09ICdzZWxlY3RfZmlsZScgfHwKKwljb25maWcub3B0aW9u cy5kaWFsb2dfdHlwZSA9PSAnY3JlYXRlX2ZpbGUnIHx8CisJY29uZmlnLm9w dGlvbnMuZGlhbG9nX3R5cGUgPT0gJ3N0b3JhZ2VfZGlhbG9nJykgeworCisg IC8vIENyZWF0ZSBmaWxlIHNlbGVjdGlvbiBkcm9wZG93bgorICB2YXIgYWxs b3dlZF90eXBlcyA9IGNvbmZpZy5vcHRpb25zLmFsbG93ZWRfZmlsZV90eXBl cywKKyAgICAgIHR5cGVzX2xlbiA9IGFsbG93ZWRfdHlwZXMubGVuZ3RoOwor ICBpZih0eXBlc19sZW4gPiAwKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAg ICBzZWxlY3RfYm94ID0gIjxkaXYgY2xhc3M9J2NoYW5nZV9maWxlX3R5cGVz Jz48c2VsZWN0IG5hbWU9J3R5cGUnPiI7CisgICAgd2hpbGUoaSA8IHR5cGVz X2xlbikgeworICAgICAgc2VsZWN0X2JveCArPSAiPG9wdGlvbiB2YWx1ZT0i K2FsbG93ZWRfdHlwZXNbaV0rIj4iKyhhbGxvd2VkX3R5cGVzW2ldID09ICcq JyA/ICdBbGwgRmlsZXMnOiBhbGxvd2VkX3R5cGVzW2ldKSsiPC9vcHRpb24+ IjsKKyAgICAgIGkrKzsKKyAgICB9CisgICAgc2VsZWN0X2JveCArPSAiPC9z ZWxlY3Q+IjsKKyAgICBzZWxlY3RfYm94ICs9ICI8bGFiZWw+Rm9ybWF0OiA8 L2xhYmVsPjwvZGl2PiI7CisgIH0KKworICAkKCIuYWxsb3dlZF9maWxlX3R5 cGVzIikuaHRtbChzZWxlY3RfYm94KTsKKworICAkKCIuYWxsb3dlZF9maWxl X3R5cGVzIHNlbGVjdCIpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAg ICB2YXIgc2VsZWN0ZWRfdmFsID0gJCh0aGlzKS52YWwoKSwKKyAgICAgICAg Y3Vycl9wYXRoID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCk7CisgICAgZ2V0 Rm9sZGVySW5mbyhjdXJyX3BhdGgsIHNlbGVjdGVkX3ZhbCk7CisgIH0pOwor fQorCitpZiAoY29uZmlnLm9wdGlvbnMuZGlhbG9nX3R5cGUgPT0gJ2NyZWF0 ZV9maWxlJykgeworICB2YXIgY3JlYXRlX2ZpbGVfaHRtbCA9ICc8ZGl2IGNs YXNzPSJjcmVhdGVfaW5wdXQiPicrCisgICAgICAnPHNwYW4+RmlsZW5hbWU6 PC9zcGFuPicrCisgICAgICAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5l d19maWxlbmFtZSIgY2xhc3M9ImZtX2NyZWF0ZV9pbnB1dCBmb3JtLWNvbnRy b2wiIC8+JysKKyAgICAnPC9kaXY+JzsKKworICAkKCcuY3JlYXRlX21vZGVf ZGxnJykuZmluZCgnLmFsbG93ZWRfZmlsZV90eXBlcycpLnByZXBlbmQoY3Jl YXRlX2ZpbGVfaHRtbCk7CisKKyAgJCgnLmNyZWF0ZV9pbnB1dCBpbnB1dFt0 eXBlPSJ0ZXh0Il0nKS5vbigna2V5cHJlc3MsIGtleWRvd24nLCBmdW5jdGlv bigpIHsKKyAgICB2YXIgaW5wdXRfdGV4dF9sZW4gPSAkKHRoaXMpLnZhbCgp Lmxlbmd0aDsKKyAgICBpZihpbnB1dF90ZXh0X2xlbiA+IDAgKSB7CisgICAg ICAkKCcuZmlsZV9tYW5hZ2VyX29rJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVk Jyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgJCgnLmZpbGVfbWFuYWdl cl9vaycpLmFkZENsYXNzKCdkaXNhYmxlZCcpOworICAgIH0KKyAgfSk7Cit9 CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICBJbml0aWFsaXphdGlvbgorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KKworJChmdW5jdGlvbigpeworICBpZihjb25maWcuZXh0cmFfanMp IHsKKyAgICBmb3IodmFyIGk9MDsgaTwgY29uZmlnLmV4dHJhX2pzLmxlbmd0 aDsgaSsrKSB7CisgICAgICAkLmFqYXgoeworICAgICAgICB1cmw6IGNvbmZp Zy5leHRyYV9qc1tpXSwKKyAgICAgICAgZGF0YVR5cGU6ICJzY3JpcHQiLAor ICAgICAgICBhc3luYzogZXh0cmFfanNfYXN5bmMKKyAgICAgIH0pOworICAg IH0KKyAgfQorCisgIGlmKCQudXJsUGFyYW0oJ2V4cGFuZGVkRm9sZGVyJykg IT0gMCkgeworICAgIGV4cGFuZGVkRm9sZGVyID0gJC51cmxQYXJhbSgnZXhw YW5kZWRGb2xkZXInKTsKKyAgICBmdWxsZXhwYW5kZWRGb2xkZXIgPSBmaWxl Um9vdCArIGV4cGFuZGVkRm9sZGVyOworICB9IGVsc2UgeworICAgIGV4cGFu ZGVkRm9sZGVyID0gJyc7CisgICAgZnVsbGV4cGFuZGVkRm9sZGVyID0gbnVs bDsKKyAgfQorCisgIC8vIEFkanVzdCBsYXlvdXQuCisgIHNldERpbWVuc2lv bnMoKTsKKworICAvLyB3ZSBmaW5hbGl6ZSB0aGUgRmlsZU1hbmFnZXIgVUkg aW5pdGlhbGl6YXRpb24KKyAgLy8gd2l0aCBsb2NhbGl6ZWQgdGV4dCBpZiBu ZWNlc3NhcnkKKyAgaWYoY29uZmlnLmF1dG9sb2FkID09IHRydWUpIHsKKyAg ICAkKCcudXBsb2FkJykuYXBwZW5kKGxnLnVwbG9hZCk7CisgICAgJCgnLmNy ZWF0ZScpLmFwcGVuZChsZy5uZXdfZm9sZGVyKTsKKyAgICAkKCcuZ3JpZCcp LmF0dHIoJ3RpdGxlJywgbGcuZ3JpZF92aWV3KTsKKyAgICAkKCcubGlzdCcp LmF0dHIoJ3RpdGxlJywgbGcubGlzdF92aWV3KTsKKyAgICAkKCcuZmlsZWlu Zm8gaDEnKS5hcHBlbmQobGcuc2VsZWN0X2Zyb21fbGVmdCk7CisgICAgJCgn I2l0ZW1PcHRpb25zIGFbaHJlZiQ9IiNzZWxlY3QiXScpLmFwcGVuZChsZy5z ZWxlY3QpOworICAgICQoJyNpdGVtT3B0aW9ucyBhW2hyZWYkPSIuZG93bmxv YWQiXScpLmFwcGVuZChsZy5kb3dubG9hZCk7CisgICAgJCgnI2l0ZW1PcHRp b25zIGFbaHJlZiQ9Ii5yZW5hbWUiXScpLmFwcGVuZChsZy5yZW5hbWUpOwor ICAgICQoJyNpdGVtT3B0aW9ucyBhW2hyZWYkPSIuZGVsZXRlIl0nKS5hcHBl bmQobGcuZGVsKTsKKyAgICAvKiogSW5wdXQgZmlsZSBSZXBsYWNlbWVudCAq LworICAgICQoJy5icm93c2UnKS5hcHBlbmQoJysnKTsKKworICAgICQoJy5i cm93c2UnKS5hdHRyKCd0aXRsZScsIGxnLmJyb3dzZSk7CisKKyAgICAkKCIu bmV3ZmlsZSIpLmNoYW5nZShmdW5jdGlvbigpIHsKKyAgICAgICQoIi5maWxl cGF0aCIpLnZhbCgkKHRoaXMpLnZhbCgpKTsKKyAgICB9KTsKKworICAgIC8q KiBJbnB1dCBmaWxlIFJlcGxhY2VtZW50IC0gZW5kICovCisgIH0KKworICAv LyBTZXQgaW5pdGlhbCB2aWV3IHN0YXRlLgorICAkKCcuZmlsZWluZm8nKS5k YXRhKCd2aWV3JywgY29uZmlnLm9wdGlvbnMuZGVmYXVsdFZpZXdNb2RlKTsK KyAgc2V0Vmlld0J1dHRvbnNGb3IoY29uZmlnLm9wdGlvbnMuZGVmYXVsdFZp ZXdNb2RlKTsKKworICAvLyBVcGxvYWQgY2xpY2sgZXZlbnQKKyAgJCgnLmZp bGVfbWFuYWdlciAudXBsb2FkZXInKS5vbignY2xpY2snLCAnYScsIGZ1bmN0 aW9uKGUpIHsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgdmFyIGIg PSAkKCcuY3VycmVudHBhdGgnKS52YWwoKTsKKyAgICB2YXIgbm9kZV92YWwg PSAkKHRoaXMpLm5leHQoKS50ZXh0KCk7CisgICAgcGFyZW50ID0gYi5zdWJz dHJpbmcoMCwgYi5zbGljZSgwLCAtMSkubGFzdEluZGV4T2Yobm9kZV92YWwp KTsKKyAgICBnZXRGb2xkZXJJbmZvKHBhcmVudCk7CisgIH0pOworCisgIC8v IHJlLXJlbmRlciB0aGUgaG9tZSB2aWV3CisgICQoJy5maWxlX21hbmFnZXIg LmhvbWUnKS5jbGljayhmdW5jdGlvbigpeworICAgIHZhciBjdXJyZW50Vmll d01vZGUgPSAkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3Jyk7CisgICAgJCgn LmZpbGVpbmZvJykuZGF0YSgndmlldycsIGN1cnJlbnRWaWV3TW9kZSk7Cisg ICAgZ2V0Rm9sZGVySW5mbyhmaWxlUm9vdCk7CisgICAgZW5hYl9kaXNfbGV2 ZWxfdXAoKTsKKyAgfSk7CisKKyAgLy8gR28gb25lIGRpcmVjdG9yeSBiYWNr CisgICQoIi5maWxlX21hbmFnZXIgLmxldmVsLXVwIikuY2xpY2soZnVuY3Rp b24oKSB7CisgICAgdmFyIGIgPSAkKCcuY3VycmVudHBhdGgnKS52YWwoKTsK KworICAgIC8vIEVuYWJsZS9EaXNhYmxlIGxldmVsIHVwIGJ1dHRvbgorICAg IGVuYWJfZGlzX2xldmVsX3VwKCk7CisKKyAgICBpZiAoYiAhPSBmaWxlUm9v dCkgeworICAgICAgICBwYXJlbnQgPSBiLnN1YnN0cmluZygwLCBiLnNsaWNl KDAsIC0xKS5sYXN0SW5kZXhPZigiLyIpKSArICIvIjsKKyAgICAgICAgdmFy IGQgPSAkKCIuZmlsZWluZm8iKS5kYXRhKCJ2aWV3Iik7CisgICAgICAgICQo Ii5maWxlaW5mbyIpLmRhdGEoInZpZXciLCBkKTsKKyAgICAgICAgZ2V0Rm9s ZGVySW5mbyhwYXJlbnQpOworICAgIH0KKyAgfSk7CisKKyAgLy8gc2V0IGJ1 dHRvbnMgdG8gc3dpdGNoIGJldHdlZW4gZ3JpZCBhbmQgbGlzdCB2aWV3cy4K KyAgJCgnLmZpbGVfbWFuYWdlciAuZ3JpZCcpLmNsaWNrKGZ1bmN0aW9uKCl7 CisgICAgc2V0Vmlld0J1dHRvbnNGb3IoJ2dyaWQnKTsKKyAgICAkKCcuZmls ZWluZm8nKS5kYXRhKCd2aWV3JywgJ2dyaWQnKTsKKyAgICBlbmFibGVfZGlz YWJsZV9idG4oKTsKKyAgICBnZXRGb2xkZXJJbmZvKCQoJy5jdXJyZW50cGF0 aCcpLnZhbCgpKTsKKyAgfSk7CisKKyAgLy8gU2hvdyBsaXN0IG1vZGUKKyAg JCgnLmZpbGVfbWFuYWdlciAubGlzdCcpLmNsaWNrKGZ1bmN0aW9uKCl7Cisg ICAgc2V0Vmlld0J1dHRvbnNGb3IoJ2xpc3QnKTsKKyAgICAkKCcuZmlsZWlu Zm8nKS5kYXRhKCd2aWV3JywgJ2xpc3QnKTsKKyAgICBlbmFibGVfZGlzYWJs ZV9idG4oKTsKKyAgICBnZXRGb2xkZXJJbmZvKCQoJy5jdXJyZW50cGF0aCcp LnZhbCgpKTsKKyAgfSk7CisKKyAgLy8gUHJvdmlkZSBpbml0aWFsIHZhbHVl cyBmb3IgdXBsb2FkIGZvcm0sIHN0YXR1cywgZXRjLgorICBzZXRVcGxvYWRl cihmaWxlUm9vdCk7CisKKyAgJCgnI3VwbG9hZGVyJykuYXR0cignYWN0aW9u JywgZmlsZUNvbm5lY3Rvcik7CisKKyAgZGF0YSA9IHsKKyAgICAnQ2FwYWJp bGl0aWVzJzogY2FwYWJpbGl0aWVzCisgIH07CisgIGlmIChoYXNfY2FwYWJp bGl0eShkYXRhLCAndXBsb2FkJykpIHsKKyAgICBEcm9wem9uZS5hdXRvRGlz Y292ZXIgPSBmYWxzZTsKKyAgICAvLyB3ZSByZW1vdmUgc2ltcGxlIGZpbGUg dXBsb2FkIGVsZW1lbnQKKyAgICAkKCcuZmlsZS1pbnB1dC1jb250YWluZXIn KS5yZW1vdmUoKTsKKyAgICAkKCcudXBsb2FkJykucmVtb3ZlKCk7CisgICAg JCggIi5jcmVhdGUiICkuYmVmb3JlKCAnPGJ1dHRvbiB2YWx1ZT0iVXBsb2Fk IiB0eXBlPSJidXR0b24iIHRpdGxlPSJVcGxvYWQgRmlsZSIgbmFtZT0idXBs b2FkIiBpZD0idXBsb2FkIiBjbGFzcz0iYnRuIGZhIGZhLXVwbG9hZCB1cGxv YWQiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4gJyApOworCisgICAgJCgnLnVw bG9hZCcpLnVuYmluZCgpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgLy8g d2UgY3JlYXRlIHByb21wdAorICAgICAgdmFyIG1zZyAgPSAnPGRpdiBpZD0i ZHJvcHpvbmUtY29udGFpbmVyIj4nOworICAgICAgICBtc2cgKz0gJzxidXR0 b24gY2xhc3M9ImZhIGZhLXRpbWVzIGR6X2Nyb3NzX2J0biI+PC9idXR0b24+ JzsKKyAgICAgICAgbXNnICs9ICc8ZGl2IGlkPSJtdWx0aXBsZS11cGxvYWRz IiBjbGFzcz0iZHJvcHpvbmUiPjwvZGl2Pic7CisgICAgICAgIG1zZyArPSAn PGRpdiBjbGFzcz0icHJvbXB0LWluZm8iPicrbGcuZmlsZV9zaXplX2xpbWl0 ICsgY29uZmlnLnVwbG9hZC5maWxlU2l6ZUxpbWl0ICsgJyAnICsgbGcubWIg KyAnLjwvZGl2Pic7CisKKyAgICAgIGVycm9yX2ZsYWcgPSBmYWxzZTsKKyAg ICAgIHZhciBwYXRoID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCksCisgICAg ICAgICAgZmlsZVNpemUgPSAoY29uZmlnLnVwbG9hZC5maWxlU2l6ZUxpbWl0 ICE9ICdhdXRvJykgPyBjb25maWcudXBsb2FkLmZpbGVTaXplTGltaXQgOiAy NTY7IC8vIGRlZmF1bHQgZHJvcHpvbmUgdmFsdWUKKworICAgICAgaWYoY29u ZmlnLnNlY3VyaXR5LnVwbG9hZFBvbGljeSA9PSAnRElTQUxMT1dfQUxMJykg eworICAgICAgICB2YXIgYWxsb3dlZEZpbGVzID0gJy4nICsgY29uZmlnLnNl Y3VyaXR5LnVwbG9hZFJlc3RyaWN0aW9ucy5qb2luKCcsLicpOworICAgICAg fSBlbHNlIHsKKyAgICAgICAgLy8gd2UgYWxsb3cgYW55IGV4dGVuc2lvbiBz aW5jZSB3ZSBoYXZlIG5vIGVhc3kgd2F5IHRvIGhhbmRsZSB0aGUgdGhlIGJ1 aWx0LWluIGBhY2NlcHRlZEZpbGVzYCBwYXJhbXMKKyAgICAgICAgLy8gV291 bGQgYmUgaGFuZGxlZCBsYXRlciBieSB0aGUgY29ubmVjdG9yCisgICAgICAg IHZhciBhbGxvd2VkRmlsZXMgPSBudWxsOworICAgICAgfQorCisgICAgICBp ZiAoJC51cmxQYXJhbSgndHlwZScpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2Uo KSA9PSAnaW1hZ2VzJyB8fCBjb25maWcudXBsb2FkLmltYWdlc09ubHkpIHsK KyAgICAgICAgdmFyIGFsbG93ZWRGaWxlcyA9ICcuJyArIGNvbmZpZy5pbWFn ZXMuaW1hZ2VzRXh0LmpvaW4oJywuJyk7CisgICAgICB9CisKKyAgICAgICQo Jy5maWxlX21hbmFnZXIgLnVwbG9hZF9maWxlJykudG9nZ2xlKCk7CisgICAg ICAkKCcuZmlsZV9tYW5hZ2VyIC51cGxvYWRfZmlsZScpLmh0bWwobXNnKTsK KworICAgICAgLy92YXIgcHJldmlld1RlbXBsYXRlID0gJzxkaXYgaWQ9ImRy b3B6b25lLWNvbnRhaW5lciI+JzsKKyAgICAgIHZhciBwcmV2aWV3VGVtcGxh dGUgPSAnPGRpdiBjbGFzcz0iZmlsZV91cGxvYWRfbWFpbiBkei1wcmV2aWV3 IGR6LWZpbGUtcHJldmlldyI+JysKKyAgICAgICAgICAgICc8ZGl2IGNsYXNz PSJzaG93X2Vycm9yIj4nKworICAgICAgICAgICAgICAnPHAgY2xhc3M9InNp emUgZHotc2l6ZSIgZGF0YS1kei1zaXplPjwvcD4nKworICAgICAgICAgICAg ICAnPHAgY2xhc3M9Im5hbWUgZHotZmlsZW5hbWUiIGRhdGEtZHotbmFtZT48 L3A+JysKKyAgICAgICAgICAgICc8L2Rpdj4nKworICAgICAgICAgICAgJzxk aXYgY2xhc3M9ImR6LXByb2dyZXNzIj48c3BhbiBjbGFzcz0iZHotdXBsb2Fk IiBkYXRhLWR6LXVwbG9hZHByb2dyZXNzPjwvc3Bhbj48L2Rpdj4nKworICAg ICAgICAgICAgJzxkaXYgY2xhc3M9ImR6LXN1Y2Nlc3MtbWFyayI+PHNwYW4+ PC9zcGFuPjwvZGl2PicrCisgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZHot ZXJyb3ItbWFyayI+PHNwYW4+PC9zcGFuPjwvZGl2PicrCisgICAgICAgICAg ICAnPGRpdiBjbGFzcz0iZHotZXJyb3ItbWVzc2FnZSI+PHNwYW4gZGF0YS1k ei1lcnJvcm1lc3NhZ2U+PC9zcGFuPjwvZGl2PicrCisgICAgICAgICAgICAn PGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgY2xhc3M9ImZhIGZhLXRy YXNoIGR6X2ZpbGVfcmVtb3ZlIiBkYXRhLWR6LXJlbW92ZT48L2E+JysKKyAg ICAgICAgICAnPC9kaXY+JzsKKworICAgICAgJCgiZGl2I211bHRpcGxlLXVw bG9hZHMiKS5kcm9wem9uZSh7CisgICAgICAgIHBhcmFtTmFtZTogIm5ld2Zp bGUiLAorICAgICAgICB1cmw6IGZpbGVDb25uZWN0b3IgKyAnP2NvbmZpZz0n ICsgdXNlcmNvbmZpZywKKyAgICAgICAgbWF4RmlsZXNpemU6IGZpbGVTaXpl LAorICAgICAgICBtYXhGaWxlczogY29uZmlnLnVwbG9hZC5udW1iZXIsCisg ICAgICAgIGFkZFJlbW92ZUxpbmtzOiB0cnVlLAorICAgICAgICBwcmV2aWV3 VGVtcGxhdGU6IHByZXZpZXdUZW1wbGF0ZSwKKyAgICAgICAgcGFyYWxsZWxV cGxvYWRzOiBjb25maWcudXBsb2FkLm51bWJlciwKKyAgICAgICAgZGljdE1h eEZpbGVzRXhjZWVkZWQ6IGxnLmR6X2RpY3RNYXhGaWxlc0V4Y2VlZGVkLnJl cGxhY2UoIiVzIiwgY29uZmlnLnVwbG9hZC5udW1iZXIpLAorICAgICAgICBk aWN0RGVmYXVsdE1lc3NhZ2U6IGxnLmR6X2RpY3REZWZhdWx0TWVzc2FnZSwK KyAgICAgICAgZGljdEludmFsaWRGaWxlVHlwZTogbGcuZHpfZGljdEludmFs aWRGaWxlVHlwZSwKKyAgICAgICAgZGljdEZpbGVUb29CaWc6IGxnLmZpbGVf dG9vX2JpZyArICcgJyArIGxnLmZpbGVfc2l6ZV9saW1pdCArIGNvbmZpZy51 cGxvYWQuZmlsZVNpemVMaW1pdCArICcgJyArIGxnLm1iLAorICAgICAgICBh Y2NlcHRlZEZpbGVzOiBhbGxvd2VkRmlsZXMsCisgICAgICAgIGF1dG9Qcm9j ZXNzUXVldWU6IHRydWUsCisgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewor ICAgICAgICAgIHZhciBkcm9wem9uZSA9IHRoaXM7CisgICAgICAgICAgJCgn LmR6X2Nyb3NzX2J0bicpLnVuYmluZCgpLm9uKCdjbGljaycsIGZ1bmN0aW9u KCkgeworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciAudXBsb2FkX2Zp bGUnKS50b2dnbGUoKTsKKyAgICAgICAgICB9KTsKKworICAgICAgICB9LAor ICAgICAgICBzZW5kaW5nOiBmdW5jdGlvbihmaWxlLCB4aHIsIGZvcm1EYXRh KSB7CisgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCJtb2RlIiwgImFkZCIp OworICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgiY3VycmVudHBhdGgiLCBw YXRoKTsKKyAgICAgICAgICAkKCcudXBsb2FkX2ZpbGUgLmR6X2Nyb3NzX2J0 bicpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAg c2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAxMDAwMCk7CisgICAgICAgIH0s CisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGZpbGUsIHJlc3BvbnNlKSB7 CisgICAgICAgICAgdmFyIHJlc3BvbnNlID0galF1ZXJ5LnBhcnNlSlNPTihy ZXNwb25zZSksCisgICAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5kYXRh LnJlc3VsdCwKKyAgICAgICAgICAgICAgJHRoaXMgPSAkKGZpbGUucHJldmll d1RlbXBsYXRlKTsKKworICAgICAgICAgIGlmIChkYXRhWydDb2RlJ10gPT0g MCkgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeworICAg ICAgICAgICAgICAkdGhpcy5maW5kKCIuZHotdXBsb2FkIikuYWRkQ2xhc3Mo InN1Y2Nlc3MiKTsKKyAgICAgICAgICAgIH0sIDEwMDApOworICAgICAgICAg ICAgJHRoaXMuZmluZCgiLmR6LXVwbG9hZCIpLmNzcygnd2lkdGgnLCAiMTAw JSIpLmh0bWwoIjEwMCUiKTsKKyAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nl c3MobGcudXBsb2FkX3N1Y2Nlc3MpOworICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAkdGhpcy5maW5kKCIuZHotdXBsb2FkIikuYWRkQ2xhc3Mo ImVycm9yIik7CisgICAgICAgICAgICAkdGhpcy5maW5kKCIuZHotdXBsb2Fk IikuY3NzKCd3aWR0aCcsICIwJSIpLmh0bWwoIjAlIik7CisgICAgICAgICAg ICBhbGVydGlmeS5lcnJvcihkYXRhWydFcnJvciddKTsKKyAgICAgICAgICB9 CisgICAgICAgICAgZ2V0Rm9sZGVySW5mbyhwYXRoKTsKKyAgICAgICAgfSwK KyAgICAgICAgdG90YWx1cGxvYWRwcm9ncmVzczogZnVuY3Rpb24ocHJvZ3Jl c3MpIHsKKyAgICAgICAgfSwKKyAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9u KGZpbGUpIHsKKyAgICAgICAgICBpZiAodGhpcy5nZXRVcGxvYWRpbmdGaWxl cygpLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmdldFF1ZXVlZEZpbGVzKCkubGVu Z3RoID09PSAwKSB7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChmaWxl LnN0YXR1cyA9PSAiZXJyb3IiKSB7CisgICAgICAgICAgICBhbGVydGlmeS5l cnJvcihsZy5FUlJPUl9VUExPQURJTkdfRklMRSk7CisgICAgICAgICAgfQor ICAgICAgICAgICQoJy51cGxvYWRfZmlsZSAuZHpfY3Jvc3NfYnRuJykucmVt b3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAgICBnZXRGb2xkZXJJbmZv KHBhdGgpOworICAgICAgICB9CisgICAgICB9KTsKKworICAgIH0pOworICB9 CisKKyAgLy8gRGlzYWJsZSBzZWxlY3QgZnVuY3Rpb24gaWYgbm8gd2luZG93 Lm9wZW5lcgorICBpZighICh3aW5kb3cub3BlbmVyIHx8IHdpbmRvdy50aW55 TUNFUG9wdXApICkgJCgnI2l0ZW1PcHRpb25zIGFbaHJlZiQ9IiNzZWxlY3Qi XScpLnJlbW92ZSgpOworICAvLyBLZWVwIG9ubHkgYnJvd3NlT25seSBmZWF0 dXJlcyBpZiBuZWVkZWQKKyAgaWYoY29uZmlnLm9wdGlvbnMuYnJvd3NlT25s eSA9PSB0cnVlKSB7CisgICAgJCgnLm5ld2ZpbGUnKS5yZW1vdmUoKTsKKyAg ICAkKCcudXBsb2FkJykucmVtb3ZlKCk7CisgICAgJCgnLmNyZWF0ZScpLnJl bW92ZSgpOworICAgICQoJyN0b29sYmFyJykucmVtb3ZlKCcucmVuYW1lJyk7 CisgICAgJCgnLmNvbnRleHRNZW51IC5yZW5hbWUnKS5yZW1vdmUoKTsKKyAg ICAkKCcuY29udGV4dE1lbnUgLmRlbGV0ZScpLnJlbW92ZSgpOworICB9Cisg IGdldERldGFpbFZpZXcoZmlsZVJvb3QgKyBleHBhbmRlZEZvbGRlcik7Cit9 KTsKKworfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0 YXRpYy9jc3MvanF1ZXJ5LmRyb3B6b25lL2Ryb3B6b25lLmNzcyBiL3dlYi9w Z2FkbWluL3N0YXRpYy9jc3MvanF1ZXJ5LmRyb3B6b25lL2Ryb3B6b25lLmNz cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDk0ZDFj Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2Nzcy9q cXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuY3NzCkBAIC0wLDAgKzEsMzg4IEBA CisvKgorICogVGhlIE1JVCBMaWNlbnNlCisgKiBDb3B5cmlnaHQgKGMpIDIw MTIgTWF0aWFzIE1lbm8gPG1AdGlhcy5tZT4KKyAqLworQC13ZWJraXQta2V5 ZnJhbWVzIHBhc3NpbmctdGhyb3VnaCB7CisgIDAlIHsKKyAgICBvcGFjaXR5 OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgp OworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAg IC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW8tdHJh bnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIHRyYW5zZm9ybTogdHJh bnNsYXRlWSg0MHB4KTsgfQorICAzMCUsIDcwJSB7CisgICAgb3BhY2l0eTog MTsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwor ICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1z LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1vLXRyYW5zZm9y bTogdHJhbnNsYXRlWSgwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRl WSgwcHgpOyB9CisgIDEwMCUgeworICAgIG9wYWNpdHk6IDA7CisgICAgLXdl YmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIC1tb3ot dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAgICAtbXMtdHJhbnNm b3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRy YW5zbGF0ZVkoLTQwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgt NDBweCk7IH0gfQorQC1tb3ota2V5ZnJhbWVzIHBhc3NpbmctdGhyb3VnaCB7 CisgIDAlIHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJhbnNm b3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0 cmFuc2xhdGVZKDQwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0 ZVkoNDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgp OworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsgfQorICAzMCUs IDcwJSB7CisgICAgb3BhY2l0eTogMTsKKyAgICAtd2Via2l0LXRyYW5zZm9y bTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFu c2xhdGVZKDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgw cHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAg IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9CisgIDEwMCUgeworICAg IG9wYWNpdHk6IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0 ZVkoLTQwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00 MHB4KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsK KyAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIHRy YW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7IH0gfQorQGtleWZyYW1lcyBw YXNzaW5nLXRocm91Z2ggeworICAwJSB7CisgICAgb3BhY2l0eTogMDsKKyAg ICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAt bW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtbXMtdHJh bnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1vLXRyYW5zZm9ybTog dHJhbnNsYXRlWSg0MHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVko NDBweCk7IH0KKyAgMzAlLCA3MCUgeworICAgIG9wYWNpdHk6IDE7CisgICAg LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtbW96 LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tcy10cmFuc2Zv cm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5z bGF0ZVkoMHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsg fQorICAxMDAlIHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJh bnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAgICAtbW96LXRyYW5zZm9y bTogdHJhbnNsYXRlWSgtNDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJh bnNsYXRlWSgtNDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZ KC00MHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOyB9 IH0KK0Atd2Via2l0LWtleWZyYW1lcyBzbGlkZS1pbiB7CisgIDAlIHsKKyAg ICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xh dGVZKDQwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQw cHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7Cisg ICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIHRyYW5z Zm9ybTogdHJhbnNsYXRlWSg0MHB4KTsgfQorICAzMCUgeworICAgIG9wYWNp dHk6IDE7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4 KTsKKyAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAg IC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtby10cmFu c2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5z bGF0ZVkoMHB4KTsgfSB9CitALW1vei1rZXlmcmFtZXMgc2xpZGUtaW4gewor ICAwJSB7CisgICAgb3BhY2l0eTogMDsKKyAgICAtd2Via2l0LXRyYW5zZm9y bTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtbW96LXRyYW5zZm9ybTogdHJh bnNsYXRlWSg0MHB4KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZ KDQwcHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsK KyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7IH0KKyAgMzAlIHsK KyAgICBvcGFjaXR5OiAxOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFu c2xhdGVZKDBweCk7CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVko MHB4KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7Cisg ICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgdHJhbnNm b3JtOiB0cmFuc2xhdGVZKDBweCk7IH0gfQorQGtleWZyYW1lcyBzbGlkZS1p biB7CisgIDAlIHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJh bnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tb3otdHJhbnNmb3Jt OiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5z bGF0ZVkoNDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQw cHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsgfQorICAz MCUgeworICAgIG9wYWNpdHk6IDE7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06 IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNs YXRlWSgwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4 KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICB0 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsgfSB9CitALXdlYmtpdC1rZXlm cmFtZXMgcHVsc2UgeworICAwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06 IHNjYWxlKDEpOworICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAg ICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtby10cmFuc2Zvcm06 IHNjYWxlKDEpOworICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7IH0KKyAgMTAl IHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICAt bW96LXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICAtbXMtdHJhbnNmb3Jt OiBzY2FsZSgxLjEpOworICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMS4xKTsK KyAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH0KKyAgMjAlIHsKKyAgICAt d2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW1vei10cmFuc2Zv cm06IHNjYWxlKDEpOworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEpOwor ICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgdHJhbnNmb3JtOiBz Y2FsZSgxKTsgfSB9CitALW1vei1rZXlmcmFtZXMgcHVsc2UgeworICAwJSB7 CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tb3ot dHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2Fs ZSgxKTsKKyAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIHRyYW5z Zm9ybTogc2NhbGUoMSk7IH0KKyAgMTAlIHsKKyAgICAtd2Via2l0LXRyYW5z Zm9ybTogc2NhbGUoMS4xKTsKKyAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUo MS4xKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIC1v LXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxl KDEuMSk7IH0KKyAgMjAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2Nh bGUoMSk7CisgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1t cy10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1vLXRyYW5zZm9ybTogc2Nh bGUoMSk7CisgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSB9CitAa2V5ZnJh bWVzIHB1bHNlIHsKKyAgMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiBz Y2FsZSgxKTsKKyAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAg LW1zLXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW8tdHJhbnNmb3JtOiBz Y2FsZSgxKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9CisgIDEwJSB7 CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMSk7CisgICAgLW1v ei10cmFuc2Zvcm06IHNjYWxlKDEuMSk7CisgICAgLW1zLXRyYW5zZm9ybTog c2NhbGUoMS4xKTsKKyAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEuMSk7Cisg ICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOyB9CisgIDIwJSB7CisgICAgLXdl YmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tb3otdHJhbnNmb3Jt OiBzY2FsZSgxKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAg ICAtby10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIHRyYW5zZm9ybTogc2Nh bGUoMSk7IH0gfQorLmRyb3B6b25lLCAuZHJvcHpvbmUgKiB7CisgIGJveC1z aXppbmc6IGJvcmRlci1ib3g7IH0KKworLmRyb3B6b25lIHsKKyAgbWluLWhl aWdodDogMTUwcHg7CisgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwgMCwg MCwgMC4zKTsKKyAgYmFja2dyb3VuZDogd2hpdGU7CisgIHBhZGRpbmc6IDIw cHggMjBweDsgfQorICAuZHJvcHpvbmUuZHotY2xpY2thYmxlIHsKKyAgICBj dXJzb3I6IHBvaW50ZXI7IH0KKyAgICAuZHJvcHpvbmUuZHotY2xpY2thYmxl ICogeworICAgICAgY3Vyc29yOiBkZWZhdWx0OyB9CisgICAgLmRyb3B6b25l LmR6LWNsaWNrYWJsZSAuZHotbWVzc2FnZSwgLmRyb3B6b25lLmR6LWNsaWNr YWJsZSAuZHotbWVzc2FnZSAqIHsKKyAgICAgIGN1cnNvcjogcG9pbnRlcjsg fQorICAuZHJvcHpvbmUuZHotc3RhcnRlZCAuZHotbWVzc2FnZSB7CisgICAg ZGlzcGxheTogbm9uZTsgfQorICAuZHJvcHpvbmUuZHotZHJhZy1ob3ZlciB7 CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfQorICAgIC5kcm9wem9uZS5k ei1kcmFnLWhvdmVyIC5kei1tZXNzYWdlIHsKKyAgICAgIG9wYWNpdHk6IDAu NTsgfQorICAuZHJvcHpvbmUgLmR6LW1lc3NhZ2UgeworICAgIHRleHQtYWxp Z246IGNlbnRlcjsKKyAgICBtYXJnaW46IDJlbSAwOyB9CisgIC5kcm9wem9u ZSAuZHotcHJldmlldyB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg IGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICB2ZXJ0aWNhbC1hbGlnbjog dG9wOworICAgIG1hcmdpbjogMTZweDsKKyAgICBtaW4taGVpZ2h0OiAxMDBw eDsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldzpob3ZlciB7CisgICAg ICB6LWluZGV4OiAxMDAwOyB9CisgICAgICAuZHJvcHpvbmUgLmR6LXByZXZp ZXc6aG92ZXIgLmR6LWRldGFpbHMgeworICAgICAgICBvcGFjaXR5OiAxOyB9 CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWZpbGUtcHJldmlldyAu ZHotaW1hZ2UgeworICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKKyAgICAg IGJhY2tncm91bmQ6ICM5OTk7CisgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXIt Z3JhZGllbnQodG8gYm90dG9tLCAjZWVlLCAjZGRkKTsgfQorICAgIC5kcm9w em9uZSAuZHotcHJldmlldy5kei1maWxlLXByZXZpZXcgLmR6LWRldGFpbHMg eworICAgICAgb3BhY2l0eTogMTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJl dmlldy5kei1pbWFnZS1wcmV2aWV3IHsKKyAgICAgIGJhY2tncm91bmQ6IHdo aXRlOyB9CisgICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotaW1hZ2Ut cHJldmlldyAuZHotZGV0YWlscyB7CisgICAgICAgIC13ZWJraXQtdHJhbnNp dGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjsKKyAgICAgICAgLW1vei10cmFu c2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOworICAgICAgICAtbXMtdHJh bnNpdGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjsKKyAgICAgICAgLW8tdHJh bnNpdGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjsKKyAgICAgICAgdHJhbnNp dGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjsgfQorICAgIC5kcm9wem9uZSAu ZHotcHJldmlldyAuZHotcmVtb3ZlIHsKKyAgICAgIGZvbnQtc2l6ZTogMTRw eDsKKyAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgIGRpc3BsYXk6 IGJsb2NrOworICAgICAgY3Vyc29yOiBwb2ludGVyOworICAgICAgYm9yZGVy OiBub25lOyB9CisgICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LXJl bW92ZTpob3ZlciB7CisgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJs aW5lOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3OmhvdmVyIC5kei1k ZXRhaWxzIHsKKyAgICAgIG9wYWNpdHk6IDE7IH0KKyAgICAuZHJvcHpvbmUg LmR6LXByZXZpZXcgLmR6LWRldGFpbHMgeworICAgICAgei1pbmRleDogMjA7 CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICB0b3A6IDA7Cisg ICAgICBsZWZ0OiAwOworICAgICAgb3BhY2l0eTogMDsKKyAgICAgIGZvbnQt c2l6ZTogMTNweDsKKyAgICAgIG1pbi13aWR0aDogMTAwJTsKKyAgICAgIG1h eC13aWR0aDogMTAwJTsKKyAgICAgIHBhZGRpbmc6IDJlbSAxZW07CisgICAg ICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICBjb2xvcjogcmdiYSgwLCAw LCAwLCAwLjkpOworICAgICAgbGluZS1oZWlnaHQ6IDE1MCU7IH0KKyAgICAg IC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotc2l6ZSB7 CisgICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsKKyAgICAgICAgZm9udC1z aXplOiAxNnB4OyB9CisgICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6 LWRldGFpbHMgLmR6LWZpbGVuYW1lIHsKKyAgICAgICAgd2hpdGUtc3BhY2U6 IG5vd3JhcDsgfQorICAgICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6 LWRldGFpbHMgLmR6LWZpbGVuYW1lOmhvdmVyIHNwYW4geworICAgICAgICAg IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjAwLCAyMDAsIDIwMCwgMC44KTsK KyAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAy NTUsIDAuOCk7IH0KKyAgICAgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5k ei1kZXRhaWxzIC5kei1maWxlbmFtZTpub3QoOmhvdmVyKSB7CisgICAgICAg ICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICAgICAgICB0ZXh0LW92ZXJmbG93 OiBlbGxpcHNpczsgfQorICAgICAgICAgIC5kcm9wem9uZSAuZHotcHJldmll dyAuZHotZGV0YWlscyAuZHotZmlsZW5hbWU6bm90KDpob3Zlcikgc3BhbiB7 CisgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsg fQorICAgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1kZXRhaWxzIC5k ei1maWxlbmFtZSBzcGFuLCAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRl dGFpbHMgLmR6LXNpemUgc3BhbiB7CisgICAgICAgIGJhY2tncm91bmQtY29s b3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsKKyAgICAgICAgcGFkZGlu ZzogMCAwLjRlbTsKKyAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OyB9Cisg ICAgLmRyb3B6b25lIC5kei1wcmV2aWV3OmhvdmVyIC5kei1pbWFnZSBpbWcg eworICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMDUsIDEuMDUp OworICAgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEuMDUsIDEuMDUpOwor ICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMS4wNSwgMS4wNSk7CisgICAg ICAtby10cmFuc2Zvcm06IHNjYWxlKDEuMDUsIDEuMDUpOworICAgICAgdHJh bnNmb3JtOiBzY2FsZSgxLjA1LCAxLjA1KTsKKyAgICAgIC13ZWJraXQtZmls dGVyOiBibHVyKDhweCk7CisgICAgICBmaWx0ZXI6IGJsdXIoOHB4KTsgfQor ICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotaW1hZ2UgeworICAgICAg Ym9yZGVyLXJhZGl1czogMjBweDsKKyAgICAgIG92ZXJmbG93OiBoaWRkZW47 CisgICAgICB3aWR0aDogMTIwcHg7CisgICAgICBoZWlnaHQ6IDEyMHB4Owor ICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgZGlzcGxheTogYmxv Y2s7CisgICAgICB6LWluZGV4OiAxMDsgfQorICAgICAgLmRyb3B6b25lIC5k ei1wcmV2aWV3IC5kei1pbWFnZSBpbWcgeworICAgICAgICBkaXNwbGF5OiBi bG9jazsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldy5kei1zdWNjZXNz IC5kei1zdWNjZXNzLW1hcmsgeworICAgICAgLXdlYmtpdC1hbmltYXRpb246 IHBhc3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4x NzUsIDEpOworICAgICAgLW1vei1hbmltYXRpb246IHBhc3NpbmctdGhyb3Vn aCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpOworICAgICAg LW1zLWFuaW1hdGlvbjogcGFzc2luZy10aHJvdWdoIDNzIGN1YmljLWJlemll cigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAgICAtby1hbmltYXRpb246IHBh c3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUs IDEpOworICAgICAgYW5pbWF0aW9uOiBwYXNzaW5nLXRocm91Z2ggM3MgY3Vi aWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAxKTsgfQorICAgIC5kcm9wem9u ZSAuZHotcHJldmlldy5kei1lcnJvciAuZHotZXJyb3ItbWFyayB7CisgICAg ICBvcGFjaXR5OiAxOworICAgICAgLXdlYmtpdC1hbmltYXRpb246IHNsaWRl LWluIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAg ICAtbW96LWFuaW1hdGlvbjogc2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAu NzcsIDAsIDAuMTc1LCAxKTsKKyAgICAgIC1tcy1hbmltYXRpb246IHNsaWRl LWluIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAg ICAtby1hbmltYXRpb246IHNsaWRlLWluIDNzIGN1YmljLWJlemllcigwLjc3 LCAwLCAwLjE3NSwgMSk7CisgICAgICBhbmltYXRpb246IHNsaWRlLWluIDNz IGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7IH0KKyAgICAuZHJv cHpvbmUgLmR6LXByZXZpZXcgLmR6LXN1Y2Nlc3MtbWFyaywgLmRyb3B6b25l IC5kei1wcmV2aWV3IC5kei1lcnJvci1tYXJrIHsKKyAgICAgIHBvaW50ZXIt ZXZlbnRzOiBub25lOworICAgICAgb3BhY2l0eTogMDsKKyAgICAgIHotaW5k ZXg6IDUwMDsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIGRp c3BsYXk6IGJsb2NrOworICAgICAgdG9wOiA1MCU7CisgICAgICBsZWZ0OiA1 MCU7CisgICAgICBtYXJnaW4tbGVmdDogLTI3cHg7CisgICAgICBtYXJnaW4t dG9wOiAtMjdweDsgfQorICAgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5k ei1zdWNjZXNzLW1hcmsgc3ZnLCAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6 LWVycm9yLW1hcmsgc3ZnIHsKKyAgICAgICAgZGlzcGxheTogYmxvY2s7Cisg ICAgICAgIHdpZHRoOiA1NHB4OworICAgICAgICBoZWlnaHQ6IDU0cHg7IH0K KyAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotcHJvY2Vzc2luZyAuZHot cHJvZ3Jlc3MgeworICAgICAgb3BhY2l0eTogMTsKKyAgICAgIC13ZWJraXQt dHJhbnNpdGlvbjogYWxsIDAuMnMgbGluZWFyOworICAgICAgLW1vei10cmFu c2l0aW9uOiBhbGwgMC4ycyBsaW5lYXI7CisgICAgICAtbXMtdHJhbnNpdGlv bjogYWxsIDAuMnMgbGluZWFyOworICAgICAgLW8tdHJhbnNpdGlvbjogYWxs IDAuMnMgbGluZWFyOworICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgbGlu ZWFyOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWNvbXBsZXRl IC5kei1wcm9ncmVzcyB7CisgICAgICBvcGFjaXR5OiAwOworICAgICAgLXdl YmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZS1pbjsKKyAgICAg IC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UtaW47CisgICAg ICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UtaW47CisgICAg ICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZS1pbjsKKyAgICAg IHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlLWluOyB9CisgICAgLmRy b3B6b25lIC5kei1wcmV2aWV3Om5vdCguZHotcHJvY2Vzc2luZykgLmR6LXBy b2dyZXNzIHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBwdWxzZSA2cyBl YXNlIGluZmluaXRlOworICAgICAgLW1vei1hbmltYXRpb246IHB1bHNlIDZz IGVhc2UgaW5maW5pdGU7CisgICAgICAtbXMtYW5pbWF0aW9uOiBwdWxzZSA2 cyBlYXNlIGluZmluaXRlOworICAgICAgLW8tYW5pbWF0aW9uOiBwdWxzZSA2 cyBlYXNlIGluZmluaXRlOworICAgICAgYW5pbWF0aW9uOiBwdWxzZSA2cyBl YXNlIGluZmluaXRlOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5k ei1wcm9ncmVzcyB7CisgICAgICBvcGFjaXR5OiAxOworICAgICAgei1pbmRl eDogMTAwMDsKKyAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOworICAgICAg cG9zaXRpb246IGFic29sdXRlOworICAgICAgaGVpZ2h0OiAxNnB4OworICAg ICAgbGVmdDogNTAlOworICAgICAgdG9wOiA1MCU7CisgICAgICBtYXJnaW4t dG9wOiAtOHB4OworICAgICAgd2lkdGg6IDgwcHg7CisgICAgICBtYXJnaW4t bGVmdDogLTQwcHg7CisgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1 LCAyNTUsIDAuOSk7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUo MSk7CisgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CisgICAgICBvdmVyZmxv dzogaGlkZGVuOyB9CisgICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6 LXByb2dyZXNzIC5kei11cGxvYWQgeworICAgICAgICBiYWNrZ3JvdW5kOiAj MzMzOworICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8g Ym90dG9tLCAjNjY2LCAjNDQ0KTsKKyAgICAgICAgcG9zaXRpb246IGFic29s dXRlOworICAgICAgICB0b3A6IDA7CisgICAgICAgIGxlZnQ6IDA7CisgICAg ICAgIGJvdHRvbTogMDsKKyAgICAgICAgd2lkdGg6IDA7CisgICAgICAgIC13 ZWJraXQtdHJhbnNpdGlvbjogd2lkdGggMzAwbXMgZWFzZS1pbi1vdXQ7Cisg ICAgICAgIC1tb3otdHJhbnNpdGlvbjogd2lkdGggMzAwbXMgZWFzZS1pbi1v dXQ7CisgICAgICAgIC1tcy10cmFuc2l0aW9uOiB3aWR0aCAzMDBtcyBlYXNl LWluLW91dDsKKyAgICAgICAgLW8tdHJhbnNpdGlvbjogd2lkdGggMzAwbXMg ZWFzZS1pbi1vdXQ7CisgICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDMwMG1z IGVhc2UtaW4tb3V0OyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6 LWVycm9yIC5kei1lcnJvci1tZXNzYWdlIHsKKyAgICAgIGRpc3BsYXk6IGJs b2NrOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWVycm9yOmhv dmVyIC5kei1lcnJvci1tZXNzYWdlIHsKKyAgICAgIG9wYWNpdHk6IDE7Cisg ICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsgfQorICAgIC5kcm9wem9uZSAu ZHotcHJldmlldyAuZHotZXJyb3ItbWVzc2FnZSB7CisgICAgICBwb2ludGVy LWV2ZW50czogbm9uZTsKKyAgICAgIHotaW5kZXg6IDEwMDA7CisgICAgICBw b3NpdGlvbjogYWJzb2x1dGU7CisgICAgICBkaXNwbGF5OiBibG9jazsKKyAg ICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICBvcGFjaXR5OiAwOworICAgICAg LXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKKyAgICAg IC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7CisgICAgICAt bXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7CisgICAgICAtby10 cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKKyAgICAgIHRyYW5zaXRp b246IG9wYWNpdHkgMC4zcyBlYXNlOworICAgICAgYm9yZGVyLXJhZGl1czog OHB4OworICAgICAgZm9udC1zaXplOiAxM3B4OworICAgICAgdG9wOiAxMzBw eDsKKyAgICAgIGxlZnQ6IC0xMHB4OworICAgICAgd2lkdGg6IDE0MHB4Owor ICAgICAgYmFja2dyb3VuZDogI2JlMjYyNjsKKyAgICAgIGJhY2tncm91bmQ6 IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNiZTI2MjYsICNhOTIyMjIp OworICAgICAgcGFkZGluZzogMC41ZW0gMS4yZW07CisgICAgICBjb2xvcjog d2hpdGU7IH0KKyAgICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZXJy b3ItbWVzc2FnZTphZnRlciB7CisgICAgICAgIGNvbnRlbnQ6ICcnOworICAg ICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDogLTZweDsK KyAgICAgICAgbGVmdDogNjRweDsKKyAgICAgICAgd2lkdGg6IDA7CisgICAg ICAgIGhlaWdodDogMDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6IDZweCBzb2xp ZCB0cmFuc3BhcmVudDsKKyAgICAgICAgYm9yZGVyLXJpZ2h0OiA2cHggc29s aWQgdHJhbnNwYXJlbnQ7CisgICAgICAgIGJvcmRlci1ib3R0b206IDZweCBz b2xpZCAjYmUyNjI2OyB9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0 aWMvY3NzL292ZXJyaWRlcy5jc3MgYi93ZWIvcGdhZG1pbi9zdGF0aWMvY3Nz L292ZXJyaWRlcy5jc3MKaW5kZXggMDBhOTgyOS4uZDM3ZGI2NCAxMDA3NTUK LS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2Nzcy9vdmVycmlkZXMuY3NzCisr KyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVzLmNzcwpAQCAt MTEwNCw0ICsxMTA0LDU1IEBAIGRpdi5iYWNrZm9ybV9jb250cm9sX25vdGVz IGxhYmVsLmNvbnRyb2wtbGFiZWwgewogCiBmb3JtW25hbWU9ImNoYW5nZV9w YXNzd29yZF9mb3JtIl0gLmhlbHAtYmxvY2sgewogICAgIGNvbG9yOiAjQTk0 NDQyICFpbXBvcnRhbnQ7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQorfQorCisKKy5maWxlX3NlbGVjdGlvbl9jdHJsIC5jcmVhdGVfaW5wdXQg c3BhbiB7CisgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgIGZvbnQtd2VpZ2h0 OiBib2xkOworfQorCisuZmlsZV9zZWxlY3Rpb25fY3RybCAuY3JlYXRlX2lu cHV0IGlucHV0W3R5cGU9InRleHQiXSB7CisgIGhlaWdodDogMjNweDsKKyAg cGFkZGluZzogMnB4OworICB3aWR0aDogMTk0cHg7CisgIGJvcmRlci1yYWRp dXM6IDJweDsKK30KKworLmZpbGVfc2VsZWN0aW9uX2N0cmwgLmJyb3dzZV9m aWxlX2lucHV0IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB3aWR0 aDogMjIwcHg7CisgIG1hcmdpbi1yaWdodDogMDsKK30KKworLmZpbGVfc2Vs ZWN0aW9uX2N0cmwgYnV0dG9uLnNlbGVjdF9pdGVtIHsKKyAgZGlzcGxheTog aW5saW5lOworICBiYWNrZ3JvdW5kOiAjNzc3OworICBiYWNrZ3JvdW5kOiAt d2Via2l0LWxpbmVhci1ncmFkaWVudCgjNzc3LCAjOTk5OTk5KTsKKyAgYmFj a2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCM3NzcsICM5OTkpOworICBi YWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCgjNzc3LCAjOTk5KTsK KyAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCM3NzcsICM5OTkpOwor ICBjb2xvcjogI2ZmZjsKKyAgcGFkZGluZzogOXB4IDBweCA5cHggMHB4Owor ICBtYXJnaW4tbGVmdDogMHB4OworICBtYXJnaW4tcmlnaHQ6IC03cHg7Cisg IG1hcmdpbi10b3A6IC00cHg7CisgIG1pbi13aWR0aDogMzBweDsKKyAgYm9y ZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKKyAgYm9yZGVyLWJvdHRvbS1sZWZ0 LXJhZGl1czogMDsKK30KKworLmZpbGVfc2VsZWN0aW9uX2N0cmwgYnV0dG9u LnNlbGVjdF9pdGVtOmZvY3VzLAorLmZpbGVfc2VsZWN0aW9uX2N0cmwgYnV0 dG9uLnNlbGVjdF9pdGVtOmFjdGl2ZSB7CisgIG91dGxpbmU6IG5vbmU7Cisg IGJveC1zaGFkb3c6IG5vbmU7Cit9CisKKy5maWxlX3NlbGVjdGlvbl9jdHJs IGlucHV0W3R5cGU9InRleHQiXSB7CisgIHdpZHRoOiBjYWxjKDEwMCUgLSAx N3B4KTsKKyAgYm9yZGVyOiBub25lOworICBtYXJnaW4tbGVmdDogLTZweDsK KyAgbWFyZ2luLXRvcDogLTNweDsKKyAgaGVpZ2h0OiAzMnB4OworICBwYWRk aW5nLWxlZnQ6IDVweDsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9iYWNrZm9ybS5wZ2FkbWluLmpzIGIvd2ViL3BnYWRtaW4vc3Rh dGljL2pzL2JhY2tmb3JtLnBnYWRtaW4uanMKaW5kZXggMjAxZWNjMS4uYmVk YWY1NSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2tm b3JtLnBnYWRtaW4uanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2Jh Y2tmb3JtLnBnYWRtaW4uanMKQEAgLTIwMzgsNSArMjAzOCw3MSBAQAogICAg IF0uam9pbigiXG4iKSkKICAgfSk7CiAKKyAgLyoKKyAgKiBJbnB1dCBGaWxl IENvbnRyb2w6IFRoaXMgY29udHJvbCBpcyB1c2VkIHdpdGggU3RvcmFnZSBN YW5hZ2VyIERpYWxvZywKKyAgKiBJdCBhbGxvd3MgdXNlciB0byBwZXJmb3Jt IGZvbGxvd2luZyBvcGVyYXRpb25zOgorICAqIC0gU2VsZWN0IEZpbGUKKyAg KiAtIFNlbGVjdCBGb2xkZXIKKyAgKiAtIENyZWF0ZSBGaWxlCisgICogLSBP cGVuaW5nIFN0b3JhZ2UgTWFuYWdlciBEaWFsb2cgaXRzZWxmLgorICAqLwor ICB2YXIgRmlsZUNvbnRyb2wgPSBCYWNrZm9ybS5GaWxlQ29udHJvbCA9IEJh Y2tmb3JtLklucHV0Q29udHJvbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7 CisgICAgICB0eXBlOiAidGV4dCIsCisgICAgICBsYWJlbDogIiIsCisgICAg ICBtaW46IHVuZGVmaW5lZCwKKyAgICAgIG1heDogdW5kZWZpbmVkLAorICAg ICAgbWF4bGVuZ3RoOiAyNTUsCisgICAgICBleHRyYUNsYXNzZXM6IFtdLAor ICAgICAgZGlhbG9nX3RpdGxlOiAnJywKKyAgICAgIGJ0bl9wcmltYXJ5OiAn JywKKyAgICAgIGhlbHBNZXNzYWdlOiBudWxsLAorICAgICAgZGlhbG9nX3R5 cGU6ICdzZWxlY3RfZmlsZScKKyAgICB9LAorICAgIGluaXRpYWxpemU6IGZ1 bmN0aW9uKCl7CisgICAgICBCYWNrZm9ybS5JbnB1dENvbnRyb2wucHJvdG90 eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAg ICAgLy8gTGlzdGVuIGNsaWNrIGV2ZW50cyBvZiBTdG9yYWdlIE1hbmFnZXIg ZGlhbG9nIGJ1dHRvbnMKKyAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMu b24oJ3BnYWRtaW4tc3RvcmFnZTpmaW5pc2hfYnRuOicrdGhpcy5maWVsZC5n ZXQoJ2RpYWxvZ190eXBlJyksIHRoaXMuc3RvcmFnZV9kbGdfaGFuZGVyLCB0 aGlzKTsKKyAgICB9LAorICAgIHRlbXBsYXRlOiBfLnRlbXBsYXRlKFsKKyAg ICAgICc8bGFiZWwgY2xhc3M9IjwlPUJhY2tmb3JtLmNvbnRyb2xMYWJlbENs YXNzTmFtZSU+Ij48JT1sYWJlbCU+PC9sYWJlbD4nLAorICAgICAgJzxkaXYg Y2xhc3M9IjwlPUJhY2tmb3JtLmNvbnRyb2xzQ2xhc3NOYW1lJT4iPicsCisg ICAgICAgICc8ZGl2IGNsYXNzPSJmaWxlX3NlbGVjdGlvbl9jdHJsIGZvcm0t Y29udHJvbCI+JywKKyAgICAgICAgICAnPGlucHV0IHR5cGU9IjwlPXR5cGUl PiIgY2xhc3M9ImJyb3dzZV9maWxlX2lucHV0IGZvcm0tY29udHJvbCA8JT1l eHRyYUNsYXNzZXMuam9pbihcJyBcJyklPiIgbmFtZT0iPCU9bmFtZSU+IiBt aW49IjwlPW1pbiU+IiBtYXg9IjwlPW1heCU+Im1heGxlbmd0aD0iPCU9bWF4 bGVuZ3RoJT4iIHZhbHVlPSI8JS12YWx1ZSU+IiBwbGFjZWhvbGRlcj0iPCUt cGxhY2Vob2xkZXIlPiIgPCU9ZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiIl PiA8JT1yZXF1aXJlZCA/ICJyZXF1aXJlZCIgOiAiIiU+IC8+JywKKyAgICAg ICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGZhIGZhLWVsbGlwc2lzLWggc2Vs ZWN0X2l0ZW0gcHVsbC1yaWdodCIgPCU9ZGlzYWJsZWQgPyAiZGlzYWJsZWQi IDogIiIlPiA+PC9idXR0b24+JywKKyAgICAgICAgICAnPCUgaWYgKGhlbHBN ZXNzYWdlICYmIGhlbHBNZXNzYWdlLmxlbmd0aCkgeyAlPicsCisgICAgICAg ICAgJzxzcGFuIGNsYXNzPSI8JT1CYWNrZm9ybS5oZWxwTWVzc2FnZUNsYXNz TmFtZSU+Ij48JT1oZWxwTWVzc2FnZSU+PC9zcGFuPicsCisgICAgICAgICAg JzwlIH0gJT4nLAorICAgICAgICAnPC9kaXY+JywKKyAgICAgICc8L2Rpdj4n CisgICAgXS5qb2luKCJcbiIpKSwKKyAgICBldmVudHM6IHsKKyAgICAgICJj bGljayAuc2VsZWN0X2l0ZW0iOiAib25TZWxlY3QiLAorICAgIH0sCisgICAg b25TZWxlY3Q6IGZ1bmN0aW9uKGUpIHsKKyAgICAgIHZhciBkaWFsb2dfdHlw ZSA9IHRoaXMuZmllbGQuZ2V0KCdkaWFsb2dfdHlwZScpOworICAgICAgICAg IHN1cHBfdHlwZXMgPSB0aGlzLmZpZWxkLmdldCgnc3VwcF90eXBlcycpLAor ICAgICAgICAgIGJ0bl9wcmltYXJ5ID0gdGhpcy5maWVsZC5nZXQoJ2J0bl9w cmltYXJ5JyksCisgICAgICAgICAgZGlhbG9nX3RpdGxlID0gdGhpcy5maWVs ZC5nZXQoJ2RpYWxvZ190aXRsZScpOworICAgICAgdmFyIHBhcmFtcyA9IHsK KyAgICAgICAgc3VwcG9ydGVkX3R5cGVzOiBzdXBwX3R5cGVzLAorICAgICAg ICBkaWFsb2dfdHlwZTogZGlhbG9nX3R5cGUsCisgICAgICAgIGRpYWxvZ190 aXRsZTogZGlhbG9nX3RpdGxlLAorICAgICAgICBidG5fcHJpbWFyeTogYnRu X3ByaW1hcnkKKyAgICAgIH07CisgICAgICBwZ0FkbWluLkZpbGVNYW5hZ2Vy LmluaXQoKTsKKyAgICAgIHBnQWRtaW4uRmlsZU1hbmFnZXIuc2hvd19kaWFs b2cocGFyYW1zKTsKKyAgICB9LAorICAgIHN0b3JhZ2VfZGxnX2hhbmRlcjog ZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHZhciBmaWVsZCA9IF8uZGVmYXVs dHModGhpcy5maWVsZC50b0pTT04oKSwgdGhpcy5kZWZhdWx0cyksCisgICAg ICAgICAgYXR0ckFyciA9IHRoaXMuZmllbGQuZ2V0KCJuYW1lIikuc3BsaXQo Jy4nKSwKKyAgICAgICAgICBuYW1lID0gYXR0ckFyci5zaGlmdCgpOworCisg ICAgICAvLyBTZXQgc2VsZWN0ZWQgdmFsdWUgaW50byB0aGUgbW9kZWwKKyAg ICAgIHRoaXMubW9kZWwuc2V0KG5hbWUsIHZhbHVlKTsKKyAgICB9CisgIH0p OworCiAgIHJldHVybiBCYWNrZm9ybTsKIH0pKTsKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUu anMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvanF1ZXJ5LmRyb3B6b25lL2Ry b3B6b25lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmRkNWYzOWUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9zdGF0 aWMvanMvanF1ZXJ5LmRyb3B6b25lL2Ryb3B6b25lLmpzCkBAIC0wLDAgKzEs MTc2NyBAQAorCisvKgorICoKKyAqIE1vcmUgaW5mbyBhdCBbd3d3LmRyb3B6 b25lanMuY29tXShodHRwOi8vd3d3LmRyb3B6b25lanMuY29tKQorICoKKyAq IENvcHlyaWdodCAoYykgMjAxMiwgTWF0aWFzIE1lbm8KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24g dGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAor ICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBO TyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUu CisgKgorICovCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIERyb3B6b25lLCBF bWl0dGVyLCBjYW1lbGl6ZSwgY29udGVudExvYWRlZCwgZGV0ZWN0VmVydGlj YWxTcXVhc2gsIGRyYXdJbWFnZUlPU0ZpeCwgbm9vcCwgd2l0aG91dCwKKyAg ICBfX3NsaWNlID0gW10uc2xpY2UsCisgICAgX19oYXNQcm9wID0ge30uaGFz T3duUHJvcGVydHksCisgICAgX19leHRlbmRzID0gZnVuY3Rpb24oY2hpbGQs IHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChfX2hh c1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRb a2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0g Y2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBj aGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18g PSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH07CisKKyAgbm9v cCA9IGZ1bmN0aW9uKCkge307CisKKyAgRW1pdHRlciA9IChmdW5jdGlvbigp IHsKKyAgICBmdW5jdGlvbiBFbWl0dGVyKCkge30KKworICAgIEVtaXR0ZXIu cHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlw ZS5vbjsKKworICAgIEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24o ZXZlbnQsIGZuKSB7CisgICAgICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9j YWxsYmFja3MgfHwge307CisgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrc1tl dmVudF0pIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSA9IFtd OworICAgICAgfQorICAgICAgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XS5wdXNo KGZuKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBFbWl0 dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIg YXJncywgY2FsbGJhY2ssIGNhbGxiYWNrcywgZXZlbnQsIF9pLCBfbGVuOwor ICAgICAgZXZlbnQgPSBhcmd1bWVudHNbMF0sIGFyZ3MgPSAyIDw9IGFyZ3Vt ZW50cy5sZW5ndGggPyBfX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSA6IFtd OworICAgICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8 IHt9OworICAgICAgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50 XTsKKyAgICAgIGlmIChjYWxsYmFja3MpIHsKKyAgICAgICAgZm9yIChfaSA9 IDAsIF9sZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBfaSA8IF9sZW47IF9pKysp IHsKKyAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrc1tfaV07CisgICAg ICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7CisgICAgICAgIH0K KyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBF bWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IEVtaXR0ZXIucHJv dG90eXBlLm9mZjsKKworICAgIEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFs bExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjsKKworICAgIEVt aXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBFbWl0dGVy LnByb3RvdHlwZS5vZmY7CisKKyAgICBFbWl0dGVyLnByb3RvdHlwZS5vZmYg PSBmdW5jdGlvbihldmVudCwgZm4pIHsKKyAgICAgIHZhciBjYWxsYmFjaywg Y2FsbGJhY2tzLCBpLCBfaSwgX2xlbjsKKyAgICAgIGlmICghdGhpcy5fY2Fs bGJhY2tzIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKKyAgICAgICAg dGhpcy5fY2FsbGJhY2tzID0ge307CisgICAgICAgIHJldHVybiB0aGlzOwor ICAgICAgfQorICAgICAgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2 ZW50XTsKKyAgICAgIGlmICghY2FsbGJhY2tzKSB7CisgICAgICAgIHJldHVy biB0aGlzOworICAgICAgfQorICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg PT09IDEpIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tldmVu dF07CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorICAgICAgZm9y IChpID0gX2kgPSAwLCBfbGVuID0gY2FsbGJhY2tzLmxlbmd0aDsgX2kgPCBf bGVuOyBpID0gKytfaSkgeworICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNr c1tpXTsKKyAgICAgICAgaWYgKGNhbGxiYWNrID09PSBmbikgeworICAgICAg ICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAg IH07CisKKyAgICByZXR1cm4gRW1pdHRlcjsKKworICB9KSgpOworCisgIERy b3B6b25lID0gKGZ1bmN0aW9uKF9zdXBlcikgeworICAgIHZhciBleHRlbmQs IHJlc29sdmVPcHRpb247CisKKyAgICBfX2V4dGVuZHMoRHJvcHpvbmUsIF9z dXBlcik7CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuRW1pdHRlciA9IEVt aXR0ZXI7CisKKworICAgIC8qCisgICAgVGhpcyBpcyBhIGxpc3Qgb2YgYWxs IGF2YWlsYWJsZSBldmVudHMgeW91IGNhbiByZWdpc3RlciBvbiBhIGRyb3B6 b25lIG9iamVjdC4KKworICAgIFlvdSBjYW4gcmVnaXN0ZXIgYW4gZXZlbnQg aGFuZGxlciBsaWtlIHRoaXM6CisKKyAgICAgICAgZHJvcHpvbmUub24oImRy YWdFbnRlciIsIGZ1bmN0aW9uKCkgeyB9KTsKKyAgICAgKi8KKworICAgIERy b3B6b25lLnByb3RvdHlwZS5ldmVudHMgPSBbImRyb3AiLCAiZHJhZ3N0YXJ0 IiwgImRyYWdlbmQiLCAiZHJhZ2VudGVyIiwgImRyYWdvdmVyIiwgImRyYWds ZWF2ZSIsICJhZGRlZGZpbGUiLCAiYWRkZWRmaWxlcyIsICJyZW1vdmVkZmls ZSIsICJ0aHVtYm5haWwiLCAiZXJyb3IiLCAiZXJyb3JtdWx0aXBsZSIsICJw cm9jZXNzaW5nIiwgInByb2Nlc3NpbmdtdWx0aXBsZSIsICJ1cGxvYWRwcm9n cmVzcyIsICJ0b3RhbHVwbG9hZHByb2dyZXNzIiwgInNlbmRpbmciLCAic2Vu ZGluZ211bHRpcGxlIiwgInN1Y2Nlc3MiLCAic3VjY2Vzc211bHRpcGxlIiwg ImNhbmNlbGVkIiwgImNhbmNlbGVkbXVsdGlwbGUiLCAiY29tcGxldGUiLCAi Y29tcGxldGVtdWx0aXBsZSIsICJyZXNldCIsICJtYXhmaWxlc2V4Y2VlZGVk IiwgIm1heGZpbGVzcmVhY2hlZCIsICJxdWV1ZWNvbXBsZXRlIl07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUuZGVmYXVsdE9wdGlvbnMgPSB7CisgICAg ICB1cmw6IG51bGwsCisgICAgICBtZXRob2Q6ICJwb3N0IiwKKyAgICAgIHdp dGhDcmVkZW50aWFsczogZmFsc2UsCisgICAgICBwYXJhbGxlbFVwbG9hZHM6 IDIsCisgICAgICB1cGxvYWRNdWx0aXBsZTogZmFsc2UsCisgICAgICBtYXhG aWxlc2l6ZTogMjU2LAorICAgICAgcGFyYW1OYW1lOiAiZmlsZSIsCisgICAg ICBjcmVhdGVJbWFnZVRodW1ibmFpbHM6IHRydWUsCisgICAgICBtYXhUaHVt Ym5haWxGaWxlc2l6ZTogMTAsCisgICAgICB0aHVtYm5haWxXaWR0aDogMTIw LAorICAgICAgdGh1bWJuYWlsSGVpZ2h0OiAxMjAsCisgICAgICBmaWxlc2l6 ZUJhc2U6IDEwMDAsCisgICAgICBtYXhGaWxlczogbnVsbCwKKyAgICAgIHBh cmFtczoge30sCisgICAgICBjbGlja2FibGU6IHRydWUsCisgICAgICBpZ25v cmVIaWRkZW5GaWxlczogdHJ1ZSwKKyAgICAgIGFjY2VwdGVkRmlsZXM6IG51 bGwsCisgICAgICBhY2NlcHRlZE1pbWVUeXBlczogbnVsbCwKKyAgICAgIGF1 dG9Qcm9jZXNzUXVldWU6IHRydWUsCisgICAgICBhdXRvUXVldWU6IHRydWUs CisgICAgICBhZGRSZW1vdmVMaW5rczogZmFsc2UsCisgICAgICBwcmV2aWV3 c0NvbnRhaW5lcjogbnVsbCwKKyAgICAgIGhpZGRlbklucHV0Q29udGFpbmVy OiAiYm9keSIsCisgICAgICBjYXB0dXJlOiBudWxsLAorICAgICAgcmVuYW1l RmlsZW5hbWU6IG51bGwsCisgICAgICBkaWN0RGVmYXVsdE1lc3NhZ2U6ICJE cm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkIiwKKyAgICAgIGRpY3RGYWxsYmFj a01lc3NhZ2U6ICJZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBkcmFn J24nZHJvcCBmaWxlIHVwbG9hZHMuIiwKKyAgICAgIGRpY3RGYWxsYmFja1Rl eHQ6ICJQbGVhc2UgdXNlIHRoZSBmYWxsYmFjayBmb3JtIGJlbG93IHRvIHVw bG9hZCB5b3VyIGZpbGVzIGxpa2UgaW4gdGhlIG9sZGVuIGRheXMuIiwKKyAg ICAgIGRpY3RGaWxlVG9vQmlnOiAiRmlsZSBpcyB0b28gYmlnICh7e2ZpbGVz aXplfX1NaUIpLiBNYXggZmlsZXNpemU6IHt7bWF4RmlsZXNpemV9fU1pQi4i LAorICAgICAgZGljdEludmFsaWRGaWxlVHlwZTogIllvdSBjYW4ndCB1cGxv YWQgZmlsZXMgb2YgdGhpcyB0eXBlLiIsCisgICAgICBkaWN0UmVzcG9uc2VF cnJvcjogIlNlcnZlciByZXNwb25kZWQgd2l0aCB7e3N0YXR1c0NvZGV9fSBj b2RlLiIsCisgICAgICBkaWN0Q2FuY2VsVXBsb2FkOiAiQ2FuY2VsIHVwbG9h ZCIsCisgICAgICBkaWN0Q2FuY2VsVXBsb2FkQ29uZmlybWF0aW9uOiAiQXJl IHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGlzIHVwbG9hZD8iLAor ICAgICAgZGljdFJlbW92ZUZpbGU6ICJSZW1vdmUgZmlsZSIsCisgICAgICBk aWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbjogbnVsbCwKKyAgICAgIGRpY3RN YXhGaWxlc0V4Y2VlZGVkOiAiWW91IGNhbiBub3QgdXBsb2FkIGFueSBtb3Jl IGZpbGVzLiIsCisgICAgICBhY2NlcHQ6IGZ1bmN0aW9uKGZpbGUsIGRvbmUp IHsKKyAgICAgICAgcmV0dXJuIGRvbmUoKTsKKyAgICAgIH0sCisgICAgICBp bml0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG5vb3A7CisgICAg ICB9LAorICAgICAgZm9yY2VGYWxsYmFjazogZmFsc2UsCisgICAgICBmYWxs YmFjazogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjaGlsZCwgbWVzc2Fn ZUVsZW1lbnQsIHNwYW4sIF9pLCBfbGVuLCBfcmVmOworICAgICAgICB0aGlz LmVsZW1lbnQuY2xhc3NOYW1lID0gIiIgKyB0aGlzLmVsZW1lbnQuY2xhc3NO YW1lICsgIiBkei1icm93c2VyLW5vdC1zdXBwb3J0ZWQiOworICAgICAgICBf cmVmID0gdGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYi KTsKKyAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsg X2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgICAgY2hpbGQgPSBfcmVmW19p XTsKKyAgICAgICAgICBpZiAoLyhefCApZHotbWVzc2FnZSgkfCApLy50ZXN0 KGNoaWxkLmNsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2VFbGVt ZW50ID0gY2hpbGQ7CisgICAgICAgICAgICBjaGlsZC5jbGFzc05hbWUgPSAi ZHotbWVzc2FnZSI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtZXNzYWdlRWxlbWVudCkg eworICAgICAgICAgIG1lc3NhZ2VFbGVtZW50ID0gRHJvcHpvbmUuY3JlYXRl RWxlbWVudCgiPGRpdiBjbGFzcz1cImR6LW1lc3NhZ2VcIj48c3Bhbj48L3Nw YW4+PC9kaXY+Iik7CisgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENo aWxkKG1lc3NhZ2VFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBzcGFu ID0gbWVzc2FnZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4i KVswXTsKKyAgICAgICAgaWYgKHNwYW4pIHsKKyAgICAgICAgICBpZiAoc3Bh bi50ZXh0Q29udGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBzcGFuLnRl eHRDb250ZW50ID0gdGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja01lc3NhZ2U7 CisgICAgICAgICAgfSBlbHNlIGlmIChzcGFuLmlubmVyVGV4dCAhPSBudWxs KSB7CisgICAgICAgICAgICBzcGFuLmlubmVyVGV4dCA9IHRoaXMub3B0aW9u cy5kaWN0RmFsbGJhY2tNZXNzYWdlOworICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRo aXMuZ2V0RmFsbGJhY2tGb3JtKCkpOworICAgICAgfSwKKyAgICAgIHJlc2l6 ZTogZnVuY3Rpb24oZmlsZSkgeworICAgICAgICB2YXIgaW5mbywgc3JjUmF0 aW8sIHRyZ1JhdGlvOworICAgICAgICBpbmZvID0geworICAgICAgICAgIHNy Y1g6IDAsCisgICAgICAgICAgc3JjWTogMCwKKyAgICAgICAgICBzcmNXaWR0 aDogZmlsZS53aWR0aCwKKyAgICAgICAgICBzcmNIZWlnaHQ6IGZpbGUuaGVp Z2h0CisgICAgICAgIH07CisgICAgICAgIHNyY1JhdGlvID0gZmlsZS53aWR0 aCAvIGZpbGUuaGVpZ2h0OworICAgICAgICBpbmZvLm9wdFdpZHRoID0gdGhp cy5vcHRpb25zLnRodW1ibmFpbFdpZHRoOworICAgICAgICBpbmZvLm9wdEhl aWdodCA9IHRoaXMub3B0aW9ucy50aHVtYm5haWxIZWlnaHQ7CisgICAgICAg IGlmICgoaW5mby5vcHRXaWR0aCA9PSBudWxsKSAmJiAoaW5mby5vcHRIZWln aHQgPT0gbnVsbCkpIHsKKyAgICAgICAgICBpbmZvLm9wdFdpZHRoID0gaW5m by5zcmNXaWR0aDsKKyAgICAgICAgICBpbmZvLm9wdEhlaWdodCA9IGluZm8u c3JjSGVpZ2h0OworICAgICAgICB9IGVsc2UgaWYgKGluZm8ub3B0V2lkdGgg PT0gbnVsbCkgeworICAgICAgICAgIGluZm8ub3B0V2lkdGggPSBzcmNSYXRp byAqIGluZm8ub3B0SGVpZ2h0OworICAgICAgICB9IGVsc2UgaWYgKGluZm8u b3B0SGVpZ2h0ID09IG51bGwpIHsKKyAgICAgICAgICBpbmZvLm9wdEhlaWdo dCA9ICgxIC8gc3JjUmF0aW8pICogaW5mby5vcHRXaWR0aDsKKyAgICAgICAg fQorICAgICAgICB0cmdSYXRpbyA9IGluZm8ub3B0V2lkdGggLyBpbmZvLm9w dEhlaWdodDsKKyAgICAgICAgaWYgKGZpbGUuaGVpZ2h0IDwgaW5mby5vcHRI ZWlnaHQgfHwgZmlsZS53aWR0aCA8IGluZm8ub3B0V2lkdGgpIHsKKyAgICAg ICAgICBpbmZvLnRyZ0hlaWdodCA9IGluZm8uc3JjSGVpZ2h0OworICAgICAg ICAgIGluZm8udHJnV2lkdGggPSBpbmZvLnNyY1dpZHRoOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgIGlmIChzcmNSYXRpbyA+IHRyZ1JhdGlvKSB7 CisgICAgICAgICAgICBpbmZvLnNyY0hlaWdodCA9IGZpbGUuaGVpZ2h0Owor ICAgICAgICAgICAgaW5mby5zcmNXaWR0aCA9IGluZm8uc3JjSGVpZ2h0ICog dHJnUmF0aW87CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlu Zm8uc3JjV2lkdGggPSBmaWxlLndpZHRoOworICAgICAgICAgICAgaW5mby5z cmNIZWlnaHQgPSBpbmZvLnNyY1dpZHRoIC8gdHJnUmF0aW87CisgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGluZm8uc3JjWCA9IChmaWxlLndp ZHRoIC0gaW5mby5zcmNXaWR0aCkgLyAyOworICAgICAgICBpbmZvLnNyY1kg PSAoZmlsZS5oZWlnaHQgLSBpbmZvLnNyY0hlaWdodCkgLyAyOworICAgICAg ICByZXR1cm4gaW5mbzsKKyAgICAgIH0sCisKKyAgICAgIC8qCisgICAgICBU aG9zZSBmdW5jdGlvbnMgcmVnaXN0ZXIgdGhlbXNlbHZlcyB0byB0aGUgZXZl bnRzIG9uIGluaXQgYW5kIGhhbmRsZSBhbGwKKyAgICAgIHRoZSB1c2VyIGlu dGVyZmFjZSBzcGVjaWZpYyBzdHVmZi4gT3ZlcndyaXRpbmcgdGhlbSB3b24n dCBicmVhayB0aGUgdXBsb2FkCisgICAgICBidXQgY2FuIGJyZWFrIHRoZSB3 YXkgaXQncyBkaXNwbGF5ZWQuCisgICAgICBZb3UgY2FuIG92ZXJ3cml0ZSB0 aGVtIGlmIHlvdSBkb24ndCBsaWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBJ ZiB5b3UganVzdAorICAgICAgd2FudCB0byBhZGQgYW4gYWRkaXRpb25hbCBl dmVudCBoYW5kbGVyLCByZWdpc3RlciBpdCBvbiB0aGUgZHJvcHpvbmUgb2Jq ZWN0CisgICAgICBhbmQgZG9uJ3Qgb3ZlcndyaXRlIHRob3NlIG9wdGlvbnMu CisgICAgICAgKi8KKyAgICAgIGRyb3A6IGZ1bmN0aW9uKGUpIHsKKyAgICAg ICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1k cmFnLWhvdmVyIik7CisgICAgICB9LAorICAgICAgZHJhZ3N0YXJ0OiBub29w LAorICAgICAgZHJhZ2VuZDogZnVuY3Rpb24oZSkgeworICAgICAgICByZXR1 cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImR6LWRyYWctaG92 ZXIiKTsKKyAgICAgIH0sCisgICAgICBkcmFnZW50ZXI6IGZ1bmN0aW9uKGUp IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRk KCJkei1kcmFnLWhvdmVyIik7CisgICAgICB9LAorICAgICAgZHJhZ292ZXI6 IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5j bGFzc0xpc3QuYWRkKCJkei1kcmFnLWhvdmVyIik7CisgICAgICB9LAorICAg ICAgZHJhZ2xlYXZlOiBmdW5jdGlvbihlKSB7CisgICAgICAgIHJldHVybiB0 aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotZHJhZy1ob3ZlciIp OworICAgICAgfSwKKyAgICAgIHBhc3RlOiBub29wLAorICAgICAgcmVzZXQ6 IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNs YXNzTGlzdC5yZW1vdmUoImR6LXN0YXJ0ZWQiKTsKKyAgICAgIH0sCisgICAg ICBhZGRlZGZpbGU6IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAgdmFyIG5v ZGUsIHJlbW92ZUZpbGVFdmVudCwgcmVtb3ZlTGluaywgX2ksIF9qLCBfaywg X2xlbiwgX2xlbjEsIF9sZW4yLCBfcmVmLCBfcmVmMSwgX3JlZjIsIF9yZXN1 bHRzOworICAgICAgICBpZiAodGhpcy5lbGVtZW50ID09PSB0aGlzLnByZXZp ZXdzQ29udGFpbmVyKSB7CisgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNz TGlzdC5hZGQoImR6LXN0YXJ0ZWQiKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAodGhpcy5wcmV2aWV3c0NvbnRhaW5lcikgeworICAgICAgICAgIGZpbGUu cHJldmlld0VsZW1lbnQgPSBEcm9wem9uZS5jcmVhdGVFbGVtZW50KHRoaXMu b3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUudHJpbSgpKTsKKyAgICAgICAgICBm aWxlLnByZXZpZXdUZW1wbGF0ZSA9IGZpbGUucHJldmlld0VsZW1lbnQ7Cisg ICAgICAgICAgdGhpcy5wcmV2aWV3c0NvbnRhaW5lci5hcHBlbmRDaGlsZChm aWxlLnByZXZpZXdFbGVtZW50KTsKKyAgICAgICAgICBfcmVmID0gZmlsZS5w cmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1kei1uYW1l XSIpOworICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5n dGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICAgICAgbm9kZSA9IF9y ZWZbX2ldOworICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IHRoaXMu X3JlbmFtZUZpbGVuYW1lKGZpbGUubmFtZSk7CisgICAgICAgICAgfQorICAg ICAgICAgIF9yZWYxID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVj dG9yQWxsKCJbZGF0YS1kei1zaXplXSIpOworICAgICAgICAgIGZvciAoX2og PSAwLCBfbGVuMSA9IF9yZWYxLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykg eworICAgICAgICAgICAgbm9kZSA9IF9yZWYxW19qXTsKKyAgICAgICAgICAg IG5vZGUuaW5uZXJIVE1MID0gdGhpcy5maWxlc2l6ZShmaWxlLnNpemUpOwor ICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFkZFJl bW92ZUxpbmtzKSB7CisgICAgICAgICAgICBmaWxlLl9yZW1vdmVMaW5rID0g RHJvcHpvbmUuY3JlYXRlRWxlbWVudCgiPGEgY2xhc3M9XCJkei1yZW1vdmVc IiBocmVmPVwiamF2YXNjcmlwdDp1bmRlZmluZWQ7XCIgZGF0YS1kei1yZW1v dmU+IiArIHRoaXMub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZSArICI8L2E+Iik7 CisgICAgICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50LmFwcGVuZENoaWxk KGZpbGUuX3JlbW92ZUxpbmspOworICAgICAgICAgIH0KKyAgICAgICAgICBy ZW1vdmVGaWxlRXZlbnQgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAg ICAgIHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgIGUucHJl dmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRp b24oKTsKKyAgICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9w em9uZS5VUExPQURJTkcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRHJv cHpvbmUuY29uZmlybShfdGhpcy5vcHRpb25zLmRpY3RDYW5jZWxVcGxvYWRD b25maXJtYXRpb24sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg cmV0dXJuIF90aGlzLnJlbW92ZUZpbGUoZmlsZSk7CisgICAgICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgaWYgKF90aGlzLm9wdGlvbnMuZGljdFJlbW92ZUZpbGVDb25maXJtYXRp b24pIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBEcm9wem9uZS5jb25m aXJtKF90aGlzLm9wdGlvbnMuZGljdFJlbW92ZUZpbGVDb25maXJtYXRpb24s IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Ro aXMucmVtb3ZlRmlsZShmaWxlKTsKKyAgICAgICAgICAgICAgICAgIH0pOwor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBy ZXR1cm4gX3RoaXMucmVtb3ZlRmlsZShmaWxlKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAg ICAgfSkodGhpcyk7CisgICAgICAgICAgX3JlZjIgPSBmaWxlLnByZXZpZXdF bGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6LXJlbW92ZV0iKTsK KyAgICAgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgICAgIGZvciAoX2sg PSAwLCBfbGVuMiA9IF9yZWYyLmxlbmd0aDsgX2sgPCBfbGVuMjsgX2srKykg eworICAgICAgICAgICAgcmVtb3ZlTGluayA9IF9yZWYyW19rXTsKKyAgICAg ICAgICAgIF9yZXN1bHRzLnB1c2gocmVtb3ZlTGluay5hZGRFdmVudExpc3Rl bmVyKCJjbGljayIsIHJlbW92ZUZpbGVFdmVudCkpOworICAgICAgICAgIH0K KyAgICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgICAgIH0KKyAgICAg IH0sCisgICAgICByZW1vdmVkZmlsZTogZnVuY3Rpb24oZmlsZSkgeworICAg ICAgICB2YXIgX3JlZjsKKyAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1l bnQpIHsKKyAgICAgICAgICBpZiAoKF9yZWYgPSBmaWxlLnByZXZpZXdFbGVt ZW50KSAhPSBudWxsKSB7CisgICAgICAgICAgICBfcmVmLnBhcmVudE5vZGUu cmVtb3ZlQ2hpbGQoZmlsZS5wcmV2aWV3RWxlbWVudCk7CisgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVNYXhG aWxlc1JlYWNoZWRDbGFzcygpOworICAgICAgfSwKKyAgICAgIHRodW1ibmFp bDogZnVuY3Rpb24oZmlsZSwgZGF0YVVybCkgeworICAgICAgICB2YXIgdGh1 bWJuYWlsRWxlbWVudCwgX2ksIF9sZW4sIF9yZWY7CisgICAgICAgIGlmIChm aWxlLnByZXZpZXdFbGVtZW50KSB7CisgICAgICAgICAgZmlsZS5wcmV2aWV3 RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1maWxlLXByZXZpZXciKTsK KyAgICAgICAgICBfcmVmID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNl bGVjdG9yQWxsKCJbZGF0YS1kei10aHVtYm5haWxdIik7CisgICAgICAgICAg Zm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBf aSsrKSB7CisgICAgICAgICAgICB0aHVtYm5haWxFbGVtZW50ID0gX3JlZltf aV07CisgICAgICAgICAgICB0aHVtYm5haWxFbGVtZW50LmFsdCA9IGZpbGUu bmFtZTsKKyAgICAgICAgICAgIHRodW1ibmFpbEVsZW1lbnQuc3JjID0gZGF0 YVVybDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHNldFRpbWVv dXQoKChmdW5jdGlvbihfdGhpcykgeworICAgICAgICAgICAgcmV0dXJuIGZ1 bmN0aW9uKCkgeworICAgICAgICAgICAgICByZXR1cm4gZmlsZS5wcmV2aWV3 RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1pbWFnZS1wcmV2aWV3Iik7Cisg ICAgICAgICAgICB9OworICAgICAgICAgIH0pKHRoaXMpKSwgMSk7CisgICAg ICAgIH0KKyAgICAgIH0sCisgICAgICBlcnJvcjogZnVuY3Rpb24oZmlsZSwg bWVzc2FnZSkgeworICAgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYs IF9yZXN1bHRzOworICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkg eworICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFk ZCgiZHotZXJyb3IiKTsKKyAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Ug IT09ICJTdHJpbmciICYmIG1lc3NhZ2UuZXJyb3IpIHsKKyAgICAgICAgICAg IG1lc3NhZ2UgPSBtZXNzYWdlLmVycm9yOworICAgICAgICAgIH0KKyAgICAg ICAgICBfcmVmID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9y QWxsKCJbZGF0YS1kei1lcnJvcm1lc3NhZ2VdIik7CisgICAgICAgICAgX3Jl c3VsdHMgPSBbXTsKKyAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9y ZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICAgIG5v ZGUgPSBfcmVmW19pXTsKKyAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9k ZS50ZXh0Q29udGVudCA9IG1lc3NhZ2UpOworICAgICAgICAgIH0KKyAgICAg ICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgICAgIH0KKyAgICAgIH0sCisg ICAgICBlcnJvcm11bHRpcGxlOiBub29wLAorICAgICAgcHJvY2Vzc2luZzog ZnVuY3Rpb24oZmlsZSkgeworICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxl bWVudCkgeworICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NM aXN0LmFkZCgiZHotcHJvY2Vzc2luZyIpOworICAgICAgICAgIGlmIChmaWxl Ll9yZW1vdmVMaW5rKSB7CisgICAgICAgICAgICByZXR1cm4gZmlsZS5fcmVt b3ZlTGluay50ZXh0Q29udGVudCA9IHRoaXMub3B0aW9ucy5kaWN0Q2FuY2Vs VXBsb2FkOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAg ICAgIHByb2Nlc3NpbmdtdWx0aXBsZTogbm9vcCwKKyAgICAgIHVwbG9hZHBy b2dyZXNzOiBmdW5jdGlvbihmaWxlLCBwcm9ncmVzcywgYnl0ZXNTZW50KSB7 CisgICAgICAgIHZhciBub2RlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7 CisgICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7CisgICAgICAg ICAgX3JlZiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFs bCgiW2RhdGEtZHotdXBsb2FkcHJvZ3Jlc3NdIik7CisgICAgICAgICAgX3Jl c3VsdHMgPSBbXTsKKyAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9y ZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICAgIG5v ZGUgPSBfcmVmW19pXTsKKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1l ID09PSAnUFJPR1JFU1MnKSB7CisgICAgICAgICAgICAgIF9yZXN1bHRzLnB1 c2gobm9kZS52YWx1ZSA9IHByb2dyZXNzKTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9kZS5zdHlsZS53 aWR0aCA9ICIiICsgcHJvZ3Jlc3MgKyAiJSIpOworICAgICAgICAgICAgfQor ICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAg ICAgIH0KKyAgICAgIH0sCisgICAgICB0b3RhbHVwbG9hZHByb2dyZXNzOiBu b29wLAorICAgICAgc2VuZGluZzogbm9vcCwKKyAgICAgIHNlbmRpbmdtdWx0 aXBsZTogbm9vcCwKKyAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGZpbGUpIHsK KyAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHsKKyAgICAgICAg ICByZXR1cm4gZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJk ei1zdWNjZXNzIik7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBzdWNj ZXNzbXVsdGlwbGU6IG5vb3AsCisgICAgICBjYW5jZWxlZDogZnVuY3Rpb24o ZmlsZSkgeworICAgICAgICByZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsIGZp bGUsICJVcGxvYWQgY2FuY2VsZWQuIik7CisgICAgICB9LAorICAgICAgY2Fu Y2VsZWRtdWx0aXBsZTogbm9vcCwKKyAgICAgIGNvbXBsZXRlOiBmdW5jdGlv bihmaWxlKSB7CisgICAgICAgIGlmIChmaWxlLl9yZW1vdmVMaW5rKSB7Cisg ICAgICAgICAgZmlsZS5fcmVtb3ZlTGluay50ZXh0Q29udGVudCA9IHRoaXMu b3B0aW9ucy5kaWN0UmVtb3ZlRmlsZTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkgeworICAgICAgICAgIHJldHVybiBm aWxlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LWNvbXBsZXRl Iik7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBjb21wbGV0ZW11bHRp cGxlOiBub29wLAorICAgICAgbWF4ZmlsZXNleGNlZWRlZDogbm9vcCwKKyAg ICAgIG1heGZpbGVzcmVhY2hlZDogbm9vcCwKKyAgICAgIHF1ZXVlY29tcGxl dGU6IG5vb3AsCisgICAgICBhZGRlZGZpbGVzOiBub29wLAorICAgICAgcHJl dmlld1RlbXBsYXRlOiAiPGRpdiBjbGFzcz1cImR6LXByZXZpZXcgZHotZmls ZS1wcmV2aWV3XCI+XG4gIDxkaXYgY2xhc3M9XCJkei1pbWFnZVwiPjxpbWcg ZGF0YS1kei10aHVtYm5haWwgLz48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImR6 LWRldGFpbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHotc2l6ZVwiPjxzcGFu IGRhdGEtZHotc2l6ZT48L3NwYW4+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1c ImR6LWZpbGVuYW1lXCI+PHNwYW4gZGF0YS1kei1uYW1lPjwvc3Bhbj48L2Rp dj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkei1wcm9ncmVzc1wiPjxz cGFuIGNsYXNzPVwiZHotdXBsb2FkXCIgZGF0YS1kei11cGxvYWRwcm9ncmVz cz48L3NwYW4+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tZXNz YWdlXCI+PHNwYW4gZGF0YS1kei1lcnJvcm1lc3NhZ2U+PC9zcGFuPjwvZGl2 PlxuICA8ZGl2IGNsYXNzPVwiZHotc3VjY2Vzcy1tYXJrXCI+XG4gICAgPHN2 ZyB3aWR0aD1cIjU0cHhcIiBoZWlnaHQ9XCI1NHB4XCIgdmlld0JveD1cIjAg MCA1NCA1NFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cu dzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3Lncz Lm9yZy8xOTk5L3hsaW5rXCIgeG1sbnM6c2tldGNoPVwiaHR0cDovL3d3dy5i b2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zXCI+XG4gICAgICA8dGl0bGU+ Q2hlY2s8L3RpdGxlPlxuICAgICAgPGRlZnM+PC9kZWZzPlxuICAgICAgPGcg aWQ9XCJQYWdlLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwi MVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIHNrZXRj aDp0eXBlPVwiTVNQYWdlXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMjMuNSwz MS44NDMxNDU4IEwxNy41ODUyNDE5LDI1LjkyODM4NzcgQzE2LjAyNDgyNTMs MjQuMzY3OTcxMSAxMy40OTEwMjk0LDI0LjM2NjgzNSAxMS45Mjg5MzIyLDI1 LjkyODkzMjIgQzEwLjM3MDAxMzYsMjcuNDg3ODUwOCAxMC4zNjY1OTEyLDMw LjAyMzQ0NTUgMTEuOTI4Mzg3NywzMS41ODUyNDE5IEwyMC40MTQ3NTgxLDQw LjA3MTYxMjMgQzIwLjUxMzM5OTksNDAuMTcwMjU0MSAyMC42MTU5MzE1LDQw LjI2MjY2NDkgMjAuNzIxODYxNSw0MC4zNDg4NDM1IEMyMi4yODM1NjY5LDQx Ljg3MjU2NTEgMjQuNzk0MjM0LDQxLjg2MjYyMDIgMjYuMzQ2MTU2NCw0MC4z MTA2OTc4IEw0My4zMTA2OTc4LDIzLjM0NjE1NjQgQzQ0Ljg3NzEwMjEsMjEu Nzc5NzUyMSA0NC44NzU4MDU3LDE5LjI0ODM4ODcgNDMuMzEzNzA4NSwxNy42 ODYyOTE1IEM0MS43NTQ3ODk5LDE2LjEyNzM3MjkgMzkuMjE3NjAzNSwxNi4x MjU1NDIyIDM3LjY1Mzg0MzYsMTcuNjg5MzAyMiBMMjMuNSwzMS44NDMxNDU4 IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUgNTMsMjcg QzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0MDU5NjUs MSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0MDU5NjUs NTMgMjcsNTMgWlwiIGlkPVwiT3ZhbC0yXCIgc3Ryb2tlLW9wYWNpdHk9XCIw LjE5ODc5NDE1OFwiIHN0cm9rZT1cIiM3NDc0NzRcIiBmaWxsLW9wYWNpdHk9 XCIwLjgxNjUxOTQ3NVwiIGZpbGw9XCIjRkZGRkZGXCIgc2tldGNoOnR5cGU9 XCJNU1NoYXBlR3JvdXBcIj48L3BhdGg+XG4gICAgICA8L2c+XG4gICAgPC9z dmc+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZHotZXJyb3ItbWFya1wi PlxuICAgIDxzdmcgd2lkdGg9XCI1NHB4XCIgaGVpZ2h0PVwiNTRweFwiIHZp ZXdCb3g9XCIwIDAgNTQgNTRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJo dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0 cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHhtbG5zOnNrZXRjaD1cImh0 dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9uc1wiPlxuICAg ICAgPHRpdGxlPkVycm9yPC90aXRsZT5cbiAgICAgIDxkZWZzPjwvZGVmcz5c biAgICAgIDxnIGlkPVwiUGFnZS0xXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9r ZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5v ZGRcIiBza2V0Y2g6dHlwZT1cIk1TUGFnZVwiPlxuICAgICAgICA8ZyBpZD1c IkNoZWNrLSstT3ZhbC0yXCIgc2tldGNoOnR5cGU9XCJNU0xheWVyR3JvdXBc IiBzdHJva2U9XCIjNzQ3NDc0XCIgc3Ryb2tlLW9wYWNpdHk9XCIwLjE5ODc5 NDE1OFwiIGZpbGw9XCIjRkZGRkZGXCIgZmlsbC1vcGFjaXR5PVwiMC44MTY1 MTk0NzVcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTMyLjY1Njg1NDIsMjkg TDM4LjMxMDY5NzgsMjMuMzQ2MTU2NCBDMzkuODc3MTAyMSwyMS43Nzk3NTIx IDM5Ljg3NTgwNTcsMTkuMjQ4Mzg4NyAzOC4zMTM3MDg1LDE3LjY4NjI5MTUg QzM2Ljc1NDc4OTksMTYuMTI3MzcyOSAzNC4yMTc2MDM1LDE2LjEyNTU0MjIg MzIuNjUzODQzNiwxNy42ODkzMDIyIEwyNywyMy4zNDMxNDU4IEwyMS4zNDYx NTY0LDE3LjY4OTMwMjIgQzE5Ljc4MjM5NjUsMTYuMTI1NTQyMiAxNy4yNDUy MTAxLDE2LjEyNzM3MjkgMTUuNjg2MjkxNSwxNy42ODYyOTE1IEMxNC4xMjQx OTQzLDE5LjI0ODM4ODcgMTQuMTIyODk3OSwyMS43Nzk3NTIxIDE1LjY4OTMw MjIsMjMuMzQ2MTU2NCBMMjEuMzQzMTQ1OCwyOSBMMTUuNjg5MzAyMiwzNC42 NTM4NDM2IEMxNC4xMjI4OTc5LDM2LjIyMDI0NzkgMTQuMTI0MTk0MywzOC43 NTE2MTEzIDE1LjY4NjI5MTUsNDAuMzEzNzA4NSBDMTcuMjQ1MjEwMSw0MS44 NzI2MjcxIDE5Ljc4MjM5NjUsNDEuODc0NDU3OCAyMS4zNDYxNTY0LDQwLjMx MDY5NzggTDI3LDM0LjY1Njg1NDIgTDMyLjY1Mzg0MzYsNDAuMzEwNjk3OCBD MzQuMjE3NjAzNSw0MS44NzQ0NTc4IDM2Ljc1NDc4OTksNDEuODcyNjI3MSAz OC4zMTM3MDg1LDQwLjMxMzcwODUgQzM5Ljg3NTgwNTcsMzguNzUxNjExMyAz OS44NzcxMDIxLDM2LjIyMDI0NzkgMzguMzEwNjk3OCwzNC42NTM4NDM2IEwz Mi42NTY4NTQyLDI5IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1 OTQwMzUgNTMsMjcgQzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEg QzEyLjY0MDU5NjUsMSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1 IDEyLjY0MDU5NjUsNTMgMjcsNTMgWlwiIGlkPVwiT3ZhbC0yXCIgc2tldGNo OnR5cGU9XCJNU1NoYXBlR3JvdXBcIj48L3BhdGg+XG4gICAgICAgIDwvZz5c biAgICAgIDwvZz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+XG48L2Rpdj4iCisg ICAgfTsKKworICAgIGV4dGVuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFy IGtleSwgb2JqZWN0LCBvYmplY3RzLCB0YXJnZXQsIHZhbCwgX2ksIF9sZW47 CisgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0sIG9iamVjdHMgPSAyIDw9 IGFyZ3VtZW50cy5sZW5ndGggPyBfX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAx KSA6IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBvYmplY3RzLmxl bmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIG9iamVjdCA9IG9i amVjdHNbX2ldOworICAgICAgICBmb3IgKGtleSBpbiBvYmplY3QpIHsKKyAg ICAgICAgICB2YWwgPSBvYmplY3Rba2V5XTsKKyAgICAgICAgICB0YXJnZXRb a2V5XSA9IHZhbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJu IHRhcmdldDsKKyAgICB9OworCisgICAgZnVuY3Rpb24gRHJvcHpvbmUoZWxl bWVudCwgb3B0aW9ucykgeworICAgICAgdmFyIGVsZW1lbnRPcHRpb25zLCBm YWxsYmFjaywgX3JlZjsKKyAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7 CisgICAgICB0aGlzLnZlcnNpb24gPSBEcm9wem9uZS52ZXJzaW9uOworICAg ICAgdGhpcy5kZWZhdWx0T3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUgPSB0aGlz LmRlZmF1bHRPcHRpb25zLnByZXZpZXdUZW1wbGF0ZS5yZXBsYWNlKC9cbiov ZywgIiIpOworICAgICAgdGhpcy5jbGlja2FibGVFbGVtZW50cyA9IFtdOwor ICAgICAgdGhpcy5saXN0ZW5lcnMgPSBbXTsKKyAgICAgIHRoaXMuZmlsZXMg PSBbXTsKKyAgICAgIGlmICh0eXBlb2YgdGhpcy5lbGVtZW50ID09PSAic3Ry aW5nIikgeworICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5xdWVy eVNlbGVjdG9yKHRoaXMuZWxlbWVudCk7CisgICAgICB9CisgICAgICBpZiAo ISh0aGlzLmVsZW1lbnQgJiYgKHRoaXMuZWxlbWVudC5ub2RlVHlwZSAhPSBu dWxsKSkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRy b3B6b25lIGVsZW1lbnQuIik7CisgICAgICB9CisgICAgICBpZiAodGhpcy5l bGVtZW50LmRyb3B6b25lKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigi RHJvcHpvbmUgYWxyZWFkeSBhdHRhY2hlZC4iKTsKKyAgICAgIH0KKyAgICAg IERyb3B6b25lLmluc3RhbmNlcy5wdXNoKHRoaXMpOworICAgICAgdGhpcy5l bGVtZW50LmRyb3B6b25lID0gdGhpczsKKyAgICAgIGVsZW1lbnRPcHRpb25z ID0gKF9yZWYgPSBEcm9wem9uZS5vcHRpb25zRm9yRWxlbWVudCh0aGlzLmVs ZW1lbnQpKSAhPSBudWxsID8gX3JlZiA6IHt9OworICAgICAgdGhpcy5vcHRp b25zID0gZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBlbGVtZW50 T3B0aW9ucywgb3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucyA6IHt9KTsKKyAg ICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VGYWxsYmFjayB8fCAhRHJvcHpv bmUuaXNCcm93c2VyU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIHRo aXMub3B0aW9ucy5mYWxsYmFjay5jYWxsKHRoaXMpOworICAgICAgfQorICAg ICAgaWYgKHRoaXMub3B0aW9ucy51cmwgPT0gbnVsbCkgeworICAgICAgICB0 aGlzLm9wdGlvbnMudXJsID0gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgi YWN0aW9uIik7CisgICAgICB9CisgICAgICBpZiAoIXRoaXMub3B0aW9ucy51 cmwpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBVUkwgcHJvdmlk ZWQuIik7CisgICAgICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLmFjY2Vw dGVkRmlsZXMgJiYgdGhpcy5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzKSB7 CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiWW91IGNhbid0IHByb3ZpZGUg Ym90aCAnYWNjZXB0ZWRGaWxlcycgYW5kICdhY2NlcHRlZE1pbWVUeXBlcycu ICdhY2NlcHRlZE1pbWVUeXBlcycgaXMgZGVwcmVjYXRlZC4iKTsKKyAgICAg IH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMp IHsKKyAgICAgICAgdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMgPSB0aGlz Lm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXM7CisgICAgICAgIGRlbGV0ZSB0 aGlzLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXM7CisgICAgICB9CisgICAg ICB0aGlzLm9wdGlvbnMubWV0aG9kID0gdGhpcy5vcHRpb25zLm1ldGhvZC50 b1VwcGVyQ2FzZSgpOworICAgICAgaWYgKChmYWxsYmFjayA9IHRoaXMuZ2V0 RXhpc3RpbmdGYWxsYmFjaygpKSAmJiBmYWxsYmFjay5wYXJlbnROb2RlKSB7 CisgICAgICAgIGZhbGxiYWNrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmFs bGJhY2spOworICAgICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcmV2 aWV3c0NvbnRhaW5lciAhPT0gZmFsc2UpIHsKKyAgICAgICAgaWYgKHRoaXMu b3B0aW9ucy5wcmV2aWV3c0NvbnRhaW5lcikgeworICAgICAgICAgIHRoaXMu cHJldmlld3NDb250YWluZXIgPSBEcm9wem9uZS5nZXRFbGVtZW50KHRoaXMu b3B0aW9ucy5wcmV2aWV3c0NvbnRhaW5lciwgInByZXZpZXdzQ29udGFpbmVy Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5wcmV2aWV3 c0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudDsKKyAgICAgICAgfQorICAgICAg fQorICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja2FibGUpIHsKKyAgICAg ICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja2FibGUgPT09IHRydWUpIHsKKyAg ICAgICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzID0gW3RoaXMuZWxlbWVu dF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5jbGlja2Fi bGVFbGVtZW50cyA9IERyb3B6b25lLmdldEVsZW1lbnRzKHRoaXMub3B0aW9u cy5jbGlja2FibGUsICJjbGlja2FibGUiKTsKKyAgICAgICAgfQorICAgICAg fQorICAgICAgdGhpcy5pbml0KCk7CisgICAgfQorCisgICAgRHJvcHpvbmUu cHJvdG90eXBlLmdldEFjY2VwdGVkRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAg ICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAg ICBfcmVmID0gdGhpcy5maWxlczsKKyAgICAgIF9yZXN1bHRzID0gW107Cisg ICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9s ZW47IF9pKyspIHsKKyAgICAgICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAg ICBpZiAoZmlsZS5hY2NlcHRlZCkgeworICAgICAgICAgIF9yZXN1bHRzLnB1 c2goZmlsZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBf cmVzdWx0czsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmdl dFJlamVjdGVkRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBmaWxl LCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhp cy5maWxlczsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9p ID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsK KyAgICAgICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAgICBpZiAoIWZpbGUu YWNjZXB0ZWQpIHsKKyAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpOwor ICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRGaWxlc1dpdGhT dGF0dXMgPSBmdW5jdGlvbihzdGF0dXMpIHsKKyAgICAgIHZhciBmaWxlLCBf aSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5m aWxlczsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0g MCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAg ICAgICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAgICBpZiAoZmlsZS5zdGF0 dXMgPT09IHN0YXR1cykgeworICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmls ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0 czsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmdldFF1ZXVl ZEZpbGVzID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5nZXRG aWxlc1dpdGhTdGF0dXMoRHJvcHpvbmUuUVVFVUVEKTsKKyAgICB9OworCisg ICAgRHJvcHpvbmUucHJvdG90eXBlLmdldFVwbG9hZGluZ0ZpbGVzID0gZnVu Y3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0 dXMoRHJvcHpvbmUuVVBMT0FESU5HKTsKKyAgICB9OworCisgICAgRHJvcHpv bmUucHJvdG90eXBlLmdldEFkZGVkRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAg ICAgIHJldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhEcm9wem9uZS5B RERFRCk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRB Y3RpdmVGaWxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGZpbGUsIF9p LCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmZp bGVzOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAw LCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAg ICAgICBmaWxlID0gX3JlZltfaV07CisgICAgICAgIGlmIChmaWxlLnN0YXR1 cyA9PT0gRHJvcHpvbmUuVVBMT0FESU5HIHx8IGZpbGUuc3RhdHVzID09PSBE cm9wem9uZS5RVUVVRUQpIHsKKyAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZp bGUpOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3Vs dHM7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5pbml0ID0g ZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZXZlbnROYW1lLCBub1Byb3BhZ2F0 aW9uLCBzZXR1cEhpZGRlbkZpbGVJbnB1dCwgX2ksIF9sZW4sIF9yZWYsIF9y ZWYxOworICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lID09PSAiZm9y bSIpIHsKKyAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiZW5j dHlwZSIsICJtdWx0aXBhcnQvZm9ybS1kYXRhIik7CisgICAgICB9CisgICAg ICBpZiAodGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiZHJvcHpv bmUiKSAmJiAhdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kei1tZXNz YWdlIikpIHsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKERy b3B6b25lLmNyZWF0ZUVsZW1lbnQoIjxkaXYgY2xhc3M9XCJkei1kZWZhdWx0 IGR6LW1lc3NhZ2VcIj48c3Bhbj4iICsgdGhpcy5vcHRpb25zLmRpY3REZWZh dWx0TWVzc2FnZSArICI8L3NwYW4+PC9kaXY+IikpOworICAgICAgfQorICAg ICAgaWYgKHRoaXMuY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoKSB7CisgICAg ICAgIHNldHVwSGlkZGVuRmlsZUlucHV0ID0gKGZ1bmN0aW9uKF90aGlzKSB7 CisgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg aWYgKF90aGlzLmhpZGRlbkZpbGVJbnB1dCkgeworICAgICAgICAgICAgICBf dGhpcy5oaWRkZW5GaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChf dGhpcy5oaWRkZW5GaWxlSW5wdXQpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZp bGVJbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOworICAgICAg ICAgICAgaWYgKChfdGhpcy5vcHRpb25zLm1heEZpbGVzID09IG51bGwpIHx8 IF90aGlzLm9wdGlvbnMubWF4RmlsZXMgPiAxKSB7CisgICAgICAgICAgICAg IF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoIm11bHRpcGxl IiwgIm11bHRpcGxlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBf dGhpcy5oaWRkZW5GaWxlSW5wdXQuY2xhc3NOYW1lID0gImR6LWhpZGRlbi1p bnB1dCI7CisgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hY2NlcHRl ZEZpbGVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgX3RoaXMuaGlkZGVu RmlsZUlucHV0LnNldEF0dHJpYnV0ZSgiYWNjZXB0IiwgX3RoaXMub3B0aW9u cy5hY2NlcHRlZEZpbGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmIChfdGhpcy5vcHRpb25zLmNhcHR1cmUgIT0gbnVsbCkgeworICAgICAg ICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJj YXB0dXJlIiwgX3RoaXMub3B0aW9ucy5jYXB0dXJlKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS52 aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgICAgICAgICBfdGhpcy5oaWRk ZW5GaWxlSW5wdXQuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAg ICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLnRvcCA9ICIw IjsKKyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5s ZWZ0ID0gIjAiOworICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0 LnN0eWxlLmhlaWdodCA9ICIwIjsKKyAgICAgICAgICAgIF90aGlzLmhpZGRl bkZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIwIjsKKyAgICAgICAgICAgIGRv Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoX3RoaXMub3B0aW9ucy5oaWRkZW5JbnB1 dENvbnRhaW5lcikuYXBwZW5kQ2hpbGQoX3RoaXMuaGlkZGVuRmlsZUlucHV0 KTsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5oaWRkZW5GaWxlSW5wdXQu YWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CisgICAg ICAgICAgICAgIHZhciBmaWxlLCBmaWxlcywgX2ksIF9sZW47CisgICAgICAg ICAgICAgIGZpbGVzID0gX3RoaXMuaGlkZGVuRmlsZUlucHV0LmZpbGVzOwor ICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoKSB7CisgICAgICAgICAg ICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwg X2xlbjsgX2krKykgeworICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGVz W19pXTsKKyAgICAgICAgICAgICAgICAgIF90aGlzLmFkZEZpbGUoZmlsZSk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIF90aGlzLmVtaXQoImFkZGVkZmlsZXMiLCBmaWxlcyk7CisgICAg ICAgICAgICAgIHJldHVybiBzZXR1cEhpZGRlbkZpbGVJbnB1dCgpOworICAg ICAgICAgICAgfSk7CisgICAgICAgICAgfTsKKyAgICAgICAgfSkodGhpcyk7 CisgICAgICAgIHNldHVwSGlkZGVuRmlsZUlucHV0KCk7CisgICAgICB9Cisg ICAgICB0aGlzLlVSTCA9IChfcmVmID0gd2luZG93LlVSTCkgIT0gbnVsbCA/ IF9yZWYgOiB3aW5kb3cud2Via2l0VVJMOworICAgICAgX3JlZjEgPSB0aGlz LmV2ZW50czsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVu Z3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZXZlbnROYW1lID0g X3JlZjFbX2ldOworICAgICAgICB0aGlzLm9uKGV2ZW50TmFtZSwgdGhpcy5v cHRpb25zW2V2ZW50TmFtZV0pOworICAgICAgfQorICAgICAgdGhpcy5vbigi dXBsb2FkcHJvZ3Jlc3MiLCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAg cmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJldHVybiBfdGhpcy51 cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzKCk7CisgICAgICAgIH07CisgICAg ICB9KSh0aGlzKSk7CisgICAgICB0aGlzLm9uKCJyZW1vdmVkZmlsZSIsIChm dW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7 CisgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZVRvdGFsVXBsb2FkUHJv Z3Jlc3MoKTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpKTsKKyAgICAg IHRoaXMub24oImNhbmNlbGVkIiwgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAg ICAgIHJldHVybiBmdW5jdGlvbihmaWxlKSB7CisgICAgICAgICAgcmV0dXJu IF90aGlzLmVtaXQoImNvbXBsZXRlIiwgZmlsZSk7CisgICAgICAgIH07Cisg ICAgICB9KSh0aGlzKSk7CisgICAgICB0aGlzLm9uKCJjb21wbGV0ZSIsIChm dW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmls ZSkgeworICAgICAgICAgIGlmIChfdGhpcy5nZXRBZGRlZEZpbGVzKCkubGVu Z3RoID09PSAwICYmIF90aGlzLmdldFVwbG9hZGluZ0ZpbGVzKCkubGVuZ3Ro ID09PSAwICYmIF90aGlzLmdldFF1ZXVlZEZpbGVzKCkubGVuZ3RoID09PSAw KSB7CisgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJxdWV1ZWNv bXBsZXRlIik7CisgICAgICAgICAgICB9KSwgMCk7CisgICAgICAgICAgfQor ICAgICAgICB9OworICAgICAgfSkodGhpcykpOworICAgICAgbm9Qcm9wYWdh dGlvbiA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRp b24oKTsKKyAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHsKKyAgICAg ICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlID0gZmFsc2U7 CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICB0aGlzLmxpc3RlbmVycyA9 IFsKKyAgICAgICAgeworICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVu dCwKKyAgICAgICAgICBldmVudHM6IHsKKyAgICAgICAgICAgICJkcmFnc3Rh cnQiOiAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgICAgICAgcmV0dXJu IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMu ZW1pdCgiZHJhZ3N0YXJ0IiwgZSk7CisgICAgICAgICAgICAgIH07CisgICAg ICAgICAgICB9KSh0aGlzKSwKKyAgICAgICAgICAgICJkcmFnZW50ZXIiOiAo ZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0 aW9uKGUpIHsKKyAgICAgICAgICAgICAgICBub1Byb3BhZ2F0aW9uKGUpOwor ICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnZW50ZXIi LCBlKTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRoaXMp LAorICAgICAgICAgICAgImRyYWdvdmVyIjogKGZ1bmN0aW9uKF90aGlzKSB7 CisgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAg ICAgICAgICAgdmFyIGVmY3Q7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAg ICAgICAgICAgICAgICAgIGVmY3QgPSBlLmRhdGFUcmFuc2Zlci5lZmZlY3RB bGxvd2VkOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9lcnJvcikge30K KyAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0g J21vdmUnID09PSBlZmN0IHx8ICdsaW5rTW92ZScgPT09IGVmY3QgPyAnbW92 ZScgOiAnY29weSc7CisgICAgICAgICAgICAgICAgbm9Qcm9wYWdhdGlvbihl KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdCgiZHJhZ292 ZXIiLCBlKTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRo aXMpLAorICAgICAgICAgICAgImRyYWdsZWF2ZSI6IChmdW5jdGlvbihfdGhp cykgeworICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkgeworICAg ICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnbGVhdmUiLCBl KTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRoaXMpLAor ICAgICAgICAgICAgImRyb3AiOiAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAg ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAg ICBub1Byb3BhZ2F0aW9uKGUpOworICAgICAgICAgICAgICAgIHJldHVybiBf dGhpcy5kcm9wKGUpOworICAgICAgICAgICAgICB9OworICAgICAgICAgICAg fSkodGhpcyksCisgICAgICAgICAgICAiZHJhZ2VuZCI6IChmdW5jdGlvbihf dGhpcykgeworICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkgewor ICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnZW5kIiwg ZSk7CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KSh0aGlzKQor ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgXTsKKyAgICAgIHRoaXMu Y2xpY2thYmxlRWxlbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oX3RoaXMpIHsK KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNsaWNrYWJsZUVsZW1lbnQpIHsK KyAgICAgICAgICByZXR1cm4gX3RoaXMubGlzdGVuZXJzLnB1c2goeworICAg ICAgICAgICAgZWxlbWVudDogY2xpY2thYmxlRWxlbWVudCwKKyAgICAgICAg ICAgIGV2ZW50czogeworICAgICAgICAgICAgICAiY2xpY2siOiBmdW5jdGlv bihldnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGNsaWNrYWJsZUVsZW1l bnQgIT09IF90aGlzLmVsZW1lbnQpIHx8IChldnQudGFyZ2V0ID09PSBfdGhp cy5lbGVtZW50IHx8IERyb3B6b25lLmVsZW1lbnRJbnNpZGUoZXZ0LnRhcmdl dCwgX3RoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZHotbWVzc2FnZSIp KSkpIHsKKyAgICAgICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1 dC5jbGljaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgfSkodGhpcykp OworICAgICAgdGhpcy5lbmFibGUoKTsKKyAgICAgIHJldHVybiB0aGlzLm9w dGlvbnMuaW5pdC5jYWxsKHRoaXMpOworICAgIH07CisKKyAgICBEcm9wem9u ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFy IF9yZWY7CisgICAgICB0aGlzLmRpc2FibGUoKTsKKyAgICAgIHRoaXMucmVt b3ZlQWxsRmlsZXModHJ1ZSk7CisgICAgICBpZiAoKF9yZWYgPSB0aGlzLmhp ZGRlbkZpbGVJbnB1dCkgIT0gbnVsbCA/IF9yZWYucGFyZW50Tm9kZSA6IHZv aWQgMCkgeworICAgICAgICB0aGlzLmhpZGRlbkZpbGVJbnB1dC5wYXJlbnRO b2RlLnJlbW92ZUNoaWxkKHRoaXMuaGlkZGVuRmlsZUlucHV0KTsKKyAgICAg ICAgdGhpcy5oaWRkZW5GaWxlSW5wdXQgPSBudWxsOworICAgICAgfQorICAg ICAgZGVsZXRlIHRoaXMuZWxlbWVudC5kcm9wem9uZTsKKyAgICAgIHJldHVy biBEcm9wem9uZS5pbnN0YW5jZXMuc3BsaWNlKERyb3B6b25lLmluc3RhbmNl cy5pbmRleE9mKHRoaXMpLCAxKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUu cHJvdG90eXBlLnVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSBmdW5jdGlv bigpIHsKKyAgICAgIHZhciBhY3RpdmVGaWxlcywgZmlsZSwgdG90YWxCeXRl cywgdG90YWxCeXRlc1NlbnQsIHRvdGFsVXBsb2FkUHJvZ3Jlc3MsIF9pLCBf bGVuLCBfcmVmOworICAgICAgdG90YWxCeXRlc1NlbnQgPSAwOworICAgICAg dG90YWxCeXRlcyA9IDA7CisgICAgICBhY3RpdmVGaWxlcyA9IHRoaXMuZ2V0 QWN0aXZlRmlsZXMoKTsKKyAgICAgIGlmIChhY3RpdmVGaWxlcy5sZW5ndGgp IHsKKyAgICAgICAgX3JlZiA9IHRoaXMuZ2V0QWN0aXZlRmlsZXMoKTsKKyAg ICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBf bGVuOyBfaSsrKSB7CisgICAgICAgICAgZmlsZSA9IF9yZWZbX2ldOworICAg ICAgICAgIHRvdGFsQnl0ZXNTZW50ICs9IGZpbGUudXBsb2FkLmJ5dGVzU2Vu dDsKKyAgICAgICAgICB0b3RhbEJ5dGVzICs9IGZpbGUudXBsb2FkLnRvdGFs OworICAgICAgICB9CisgICAgICAgIHRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSAx MDAgKiB0b3RhbEJ5dGVzU2VudCAvIHRvdGFsQnl0ZXM7CisgICAgICB9IGVs c2UgeworICAgICAgICB0b3RhbFVwbG9hZFByb2dyZXNzID0gMTAwOworICAg ICAgfQorICAgICAgcmV0dXJuIHRoaXMuZW1pdCgidG90YWx1cGxvYWRwcm9n cmVzcyIsIHRvdGFsVXBsb2FkUHJvZ3Jlc3MsIHRvdGFsQnl0ZXMsIHRvdGFs Qnl0ZXNTZW50KTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBl Ll9nZXRQYXJhbU5hbWUgPSBmdW5jdGlvbihuKSB7CisgICAgICBpZiAodHlw ZW9mIHRoaXMub3B0aW9ucy5wYXJhbU5hbWUgPT09ICJmdW5jdGlvbiIpIHsK KyAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbU5hbWUobik7Cisg ICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIiIgKyB0aGlzLm9wdGlv bnMucGFyYW1OYW1lICsgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSA/ ICJbIiArIG4gKyAiXSIgOiAiIik7CisgICAgICB9CisgICAgfTsKKworICAg IERyb3B6b25lLnByb3RvdHlwZS5fcmVuYW1lRmlsZW5hbWUgPSBmdW5jdGlv bihuYW1lKSB7CisgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZW5h bWVGaWxlbmFtZSAhPT0gImZ1bmN0aW9uIikgeworICAgICAgICByZXR1cm4g bmFtZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVu YW1lRmlsZW5hbWUobmFtZSk7CisgICAgfTsKKworICAgIERyb3B6b25lLnBy b3RvdHlwZS5nZXRGYWxsYmFja0Zvcm0gPSBmdW5jdGlvbigpIHsKKyAgICAg IHZhciBleGlzdGluZ0ZhbGxiYWNrLCBmaWVsZHMsIGZpZWxkc1N0cmluZywg Zm9ybTsKKyAgICAgIGlmIChleGlzdGluZ0ZhbGxiYWNrID0gdGhpcy5nZXRF eGlzdGluZ0ZhbGxiYWNrKCkpIHsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5n RmFsbGJhY2s7CisgICAgICB9CisgICAgICBmaWVsZHNTdHJpbmcgPSAiPGRp diBjbGFzcz1cImR6LWZhbGxiYWNrXCI+IjsKKyAgICAgIGlmICh0aGlzLm9w dGlvbnMuZGljdEZhbGxiYWNrVGV4dCkgeworICAgICAgICBmaWVsZHNTdHJp bmcgKz0gIjxwPiIgKyB0aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrVGV4dCAr ICI8L3A+IjsKKyAgICAgIH0KKyAgICAgIGZpZWxkc1N0cmluZyArPSAiPGlu cHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cIiIgKyAodGhpcy5fZ2V0UGFyYW1O YW1lKDApKSArICJcIiAiICsgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBs ZSA/ICdtdWx0aXBsZT0ibXVsdGlwbGUiJyA6IHZvaWQgMCkgKyAiIC8+PGlu cHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIlVwbG9hZCFcIj48L2Rpdj4i OworICAgICAgZmllbGRzID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudChmaWVs ZHNTdHJpbmcpOworICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lICE9 PSAiRk9STSIpIHsKKyAgICAgICAgZm9ybSA9IERyb3B6b25lLmNyZWF0ZUVs ZW1lbnQoIjxmb3JtIGFjdGlvbj1cIiIgKyB0aGlzLm9wdGlvbnMudXJsICsg IlwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgbWV0aG9kPVwi IiArIHRoaXMub3B0aW9ucy5tZXRob2QgKyAiXCI+PC9mb3JtPiIpOworICAg ICAgICBmb3JtLmFwcGVuZENoaWxkKGZpZWxkcyk7CisgICAgICB9IGVsc2Ug eworICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJlbmN0eXBl IiwgIm11bHRpcGFydC9mb3JtLWRhdGEiKTsKKyAgICAgICAgdGhpcy5lbGVt ZW50LnNldEF0dHJpYnV0ZSgibWV0aG9kIiwgdGhpcy5vcHRpb25zLm1ldGhv ZCk7CisgICAgICB9CisgICAgICByZXR1cm4gZm9ybSAhPSBudWxsID8gZm9y bSA6IGZpZWxkczsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBl LmdldEV4aXN0aW5nRmFsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZh ciBmYWxsYmFjaywgZ2V0RmFsbGJhY2ssIHRhZ05hbWUsIF9pLCBfbGVuLCBf cmVmOworICAgICAgZ2V0RmFsbGJhY2sgPSBmdW5jdGlvbihlbGVtZW50cykg eworICAgICAgICB2YXIgZWwsIF9pLCBfbGVuOworICAgICAgICBmb3IgKF9p ID0gMCwgX2xlbiA9IGVsZW1lbnRzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsr KSB7CisgICAgICAgICAgZWwgPSBlbGVtZW50c1tfaV07CisgICAgICAgICAg aWYgKC8oXnwgKWZhbGxiYWNrKCR8ICkvLnRlc3QoZWwuY2xhc3NOYW1lKSkg eworICAgICAgICAgICAgcmV0dXJuIGVsOworICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgfTsKKyAgICAgIF9yZWYgPSBbImRpdiIsICJmb3JtIl07 CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8 IF9sZW47IF9pKyspIHsKKyAgICAgICAgdGFnTmFtZSA9IF9yZWZbX2ldOwor ICAgICAgICBpZiAoZmFsbGJhY2sgPSBnZXRGYWxsYmFjayh0aGlzLmVsZW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSkpKSB7CisgICAgICAg ICAgcmV0dXJuIGZhbGxiYWNrOworICAgICAgICB9CisgICAgICB9CisgICAg fTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5zZXR1cEV2ZW50TGlzdGVu ZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZWxlbWVudExpc3RlbmVy cywgZXZlbnQsIGxpc3RlbmVyLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7 CisgICAgICBfcmVmID0gdGhpcy5saXN0ZW5lcnM7CisgICAgICBfcmVzdWx0 cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0 aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGVsZW1lbnRMaXN0ZW5l cnMgPSBfcmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaCgoZnVuY3Rp b24oKSB7CisgICAgICAgICAgdmFyIF9yZWYxLCBfcmVzdWx0czE7CisgICAg ICAgICAgX3JlZjEgPSBlbGVtZW50TGlzdGVuZXJzLmV2ZW50czsKKyAgICAg ICAgICBfcmVzdWx0czEgPSBbXTsKKyAgICAgICAgICBmb3IgKGV2ZW50IGlu IF9yZWYxKSB7CisgICAgICAgICAgICBsaXN0ZW5lciA9IF9yZWYxW2V2ZW50 XTsKKyAgICAgICAgICAgIF9yZXN1bHRzMS5wdXNoKGVsZW1lbnRMaXN0ZW5l cnMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwg ZmFsc2UpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIF9yZXN1 bHRzMTsKKyAgICAgICAgfSkoKSk7CisgICAgICB9CisgICAgICByZXR1cm4g X3Jlc3VsdHM7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5y ZW1vdmVFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFy IGVsZW1lbnRMaXN0ZW5lcnMsIGV2ZW50LCBsaXN0ZW5lciwgX2ksIF9sZW4s IF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMubGlzdGVuZXJz OworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBf bGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAg ICBlbGVtZW50TGlzdGVuZXJzID0gX3JlZltfaV07CisgICAgICAgIF9yZXN1 bHRzLnB1c2goKGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBfcmVmMSwg X3Jlc3VsdHMxOworICAgICAgICAgIF9yZWYxID0gZWxlbWVudExpc3RlbmVy cy5ldmVudHM7CisgICAgICAgICAgX3Jlc3VsdHMxID0gW107CisgICAgICAg ICAgZm9yIChldmVudCBpbiBfcmVmMSkgeworICAgICAgICAgICAgbGlzdGVu ZXIgPSBfcmVmMVtldmVudF07CisgICAgICAgICAgICBfcmVzdWx0czEucHVz aChlbGVtZW50TGlzdGVuZXJzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l cihldmVudCwgbGlzdGVuZXIsIGZhbHNlKSk7CisgICAgICAgICAgfQorICAg ICAgICAgIHJldHVybiBfcmVzdWx0czE7CisgICAgICAgIH0pKCkpOworICAg ICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBE cm9wem9uZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkgeworICAg ICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAg IHRoaXMuY2xpY2thYmxlRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVt ZW50KSB7CisgICAgICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5yZW1v dmUoImR6LWNsaWNrYWJsZSIpOworICAgICAgfSk7CisgICAgICB0aGlzLnJl bW92ZUV2ZW50TGlzdGVuZXJzKCk7CisgICAgICBfcmVmID0gdGhpcy5maWxl czsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwg X2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAg ICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKHRo aXMuY2FuY2VsVXBsb2FkKGZpbGUpKTsKKyAgICAgIH0KKyAgICAgIHJldHVy biBfcmVzdWx0czsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBl LmVuYWJsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5jbGlja2FibGVF bGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAg cmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotY2xpY2thYmxlIik7 CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0aGlzLnNldHVwRXZlbnRMaXN0 ZW5lcnMoKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmZp bGVzaXplID0gZnVuY3Rpb24oc2l6ZSkgeworICAgICAgdmFyIGN1dG9mZiwg aSwgc2VsZWN0ZWRTaXplLCBzZWxlY3RlZFVuaXQsIHVuaXQsIHVuaXRzLCBf aSwgX2xlbjsKKyAgICAgIHNlbGVjdGVkU2l6ZSA9IDA7CisgICAgICBzZWxl Y3RlZFVuaXQgPSAiYiI7CisgICAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAg ICAgdW5pdHMgPSBbJ1RCJywgJ0dCJywgJ01CJywgJ0tCJywgJ2InXTsKKyAg ICAgICAgZm9yIChpID0gX2kgPSAwLCBfbGVuID0gdW5pdHMubGVuZ3RoOyBf aSA8IF9sZW47IGkgPSArK19pKSB7CisgICAgICAgICAgdW5pdCA9IHVuaXRz W2ldOworICAgICAgICAgIGN1dG9mZiA9IE1hdGgucG93KHRoaXMub3B0aW9u cy5maWxlc2l6ZUJhc2UsIDQgLSBpKSAvIDEwOworICAgICAgICAgIGlmIChz aXplID49IGN1dG9mZikgeworICAgICAgICAgICAgc2VsZWN0ZWRTaXplID0g c2l6ZSAvIE1hdGgucG93KHRoaXMub3B0aW9ucy5maWxlc2l6ZUJhc2UsIDQg LSBpKTsKKyAgICAgICAgICAgIHNlbGVjdGVkVW5pdCA9IHVuaXQ7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgc2VsZWN0ZWRTaXplID0gTWF0aC5yb3VuZCgxMCAqIHNlbGVjdGVkU2l6 ZSkgLyAxMDsKKyAgICAgIH0KKyAgICAgIHJldHVybiAiPHN0cm9uZz4iICsg c2VsZWN0ZWRTaXplICsgIjwvc3Ryb25nPiAiICsgc2VsZWN0ZWRVbml0Owor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX3VwZGF0ZU1heEZp bGVzUmVhY2hlZENsYXNzID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAoKHRo aXMub3B0aW9ucy5tYXhGaWxlcyAhPSBudWxsKSAmJiB0aGlzLmdldEFjY2Vw dGVkRmlsZXMoKS5sZW5ndGggPj0gdGhpcy5vcHRpb25zLm1heEZpbGVzKSB7 CisgICAgICAgIGlmICh0aGlzLmdldEFjY2VwdGVkRmlsZXMoKS5sZW5ndGgg PT09IHRoaXMub3B0aW9ucy5tYXhGaWxlcykgeworICAgICAgICAgIHRoaXMu ZW1pdCgnbWF4ZmlsZXNyZWFjaGVkJywgdGhpcy5maWxlcyk7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRk KCJkei1tYXgtZmlsZXMtcmVhY2hlZCIpOworICAgICAgfSBlbHNlIHsKKyAg ICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJk ei1tYXgtZmlsZXMtcmVhY2hlZCIpOworICAgICAgfQorICAgIH07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUuZHJvcCA9IGZ1bmN0aW9uKGUpIHsKKyAg ICAgIHZhciBmaWxlcywgaXRlbXM7CisgICAgICBpZiAoIWUuZGF0YVRyYW5z ZmVyKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMu ZW1pdCgiZHJvcCIsIGUpOworICAgICAgZmlsZXMgPSBlLmRhdGFUcmFuc2Zl ci5maWxlczsKKyAgICAgIHRoaXMuZW1pdCgiYWRkZWRmaWxlcyIsIGZpbGVz KTsKKyAgICAgIGlmIChmaWxlcy5sZW5ndGgpIHsKKyAgICAgICAgaXRlbXMg PSBlLmRhdGFUcmFuc2Zlci5pdGVtczsKKyAgICAgICAgaWYgKGl0ZW1zICYm IGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSAh PSBudWxsKSkgeworICAgICAgICAgIHRoaXMuX2FkZEZpbGVzRnJvbUl0ZW1z KGl0ZW1zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLmhh bmRsZUZpbGVzKGZpbGVzKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucGFzdGUgPSBmdW5jdGlvbihl KSB7CisgICAgICB2YXIgaXRlbXMsIF9yZWY7CisgICAgICBpZiAoKGUgIT0g bnVsbCA/IChfcmVmID0gZS5jbGlwYm9hcmREYXRhKSAhPSBudWxsID8gX3Jl Zi5pdGVtcyA6IHZvaWQgMCA6IHZvaWQgMCkgPT0gbnVsbCkgeworICAgICAg ICByZXR1cm47CisgICAgICB9CisgICAgICB0aGlzLmVtaXQoInBhc3RlIiwg ZSk7CisgICAgICBpdGVtcyA9IGUuY2xpcGJvYXJkRGF0YS5pdGVtczsKKyAg ICAgIGlmIChpdGVtcy5sZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu X2FkZEZpbGVzRnJvbUl0ZW1zKGl0ZW1zKTsKKyAgICAgIH0KKyAgICB9Owor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLmhhbmRsZUZpbGVzID0gZnVuY3Rp b24oZmlsZXMpIHsKKyAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3Jlc3Vs dHM7CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAs IF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAg ICAgICBmaWxlID0gZmlsZXNbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNo KHRoaXMuYWRkRmlsZShmaWxlKSk7CisgICAgICB9CisgICAgICByZXR1cm4g X3Jlc3VsdHM7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5f YWRkRmlsZXNGcm9tSXRlbXMgPSBmdW5jdGlvbihpdGVtcykgeworICAgICAg dmFyIGVudHJ5LCBpdGVtLCBfaSwgX2xlbiwgX3Jlc3VsdHM7CisgICAgICBf cmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBpdGVt cy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBpdGVtID0g aXRlbXNbX2ldOworICAgICAgICBpZiAoKGl0ZW0ud2Via2l0R2V0QXNFbnRy eSAhPSBudWxsKSAmJiAoZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnko KSkpIHsKKyAgICAgICAgICBpZiAoZW50cnkuaXNGaWxlKSB7CisgICAgICAg ICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuYWRkRmlsZShpdGVtLmdldEFzRmls ZSgpKSk7CisgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVjdG9y eSkgeworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLl9hZGRGaWxl c0Zyb21EaXJlY3RvcnkoZW50cnksIGVudHJ5Lm5hbWUpKTsKKyAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDAp OworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpdGVtLmdldEFz RmlsZSAhPSBudWxsKSB7CisgICAgICAgICAgaWYgKChpdGVtLmtpbmQgPT0g bnVsbCkgfHwgaXRlbS5raW5kID09PSAiZmlsZSIpIHsKKyAgICAgICAgICAg IF9yZXN1bHRzLnB1c2godGhpcy5hZGRGaWxlKGl0ZW0uZ2V0QXNGaWxlKCkp KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX3Jlc3VsdHMu cHVzaCh2b2lkIDApOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7CisgICAgICAgIH0K KyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisg ICAgRHJvcHpvbmUucHJvdG90eXBlLl9hZGRGaWxlc0Zyb21EaXJlY3Rvcnkg PSBmdW5jdGlvbihkaXJlY3RvcnksIHBhdGgpIHsKKyAgICAgIHZhciBkaXJS ZWFkZXIsIGVycm9ySGFuZGxlciwgcmVhZEVudHJpZXM7CisgICAgICBkaXJS ZWFkZXIgPSBkaXJlY3RvcnkuY3JlYXRlUmVhZGVyKCk7CisgICAgICBlcnJv ckhhbmRsZXIgPSBmdW5jdGlvbihlcnJvcikgeworICAgICAgICByZXR1cm4g dHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIGNvbnNvbGUgIT09 IG51bGwgPyB0eXBlb2YgY29uc29sZS5sb2cgPT09ICJmdW5jdGlvbiIgPyBj b25zb2xlLmxvZyhlcnJvcikgOiB2b2lkIDAgOiB2b2lkIDA7CisgICAgICB9 OworICAgICAgcmVhZEVudHJpZXMgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAg ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJldHVybiBk aXJSZWFkZXIucmVhZEVudHJpZXMoZnVuY3Rpb24oZW50cmllcykgeworICAg ICAgICAgICAgdmFyIGVudHJ5LCBfaSwgX2xlbjsKKyAgICAgICAgICAgIGlm IChlbnRyaWVzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgZm9yIChf aSA9IDAsIF9sZW4gPSBlbnRyaWVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsr KSB7CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzW19pXTsKKyAg ICAgICAgICAgICAgICBpZiAoZW50cnkuaXNGaWxlKSB7CisgICAgICAgICAg ICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuaWdub3JlSGlkZGVuRmls ZXMgJiYgZmlsZS5uYW1lLnN1YnN0cmluZygwLCAxKSA9PT0gJy4nKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpbGUuZnVsbFBhdGggPSAi IiArIHBhdGggKyAiLyIgKyBmaWxlLm5hbWU7CisgICAgICAgICAgICAgICAg ICAgIHJldHVybiBfdGhpcy5hZGRGaWxlKGZpbGUpOworICAgICAgICAgICAg ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5p c0RpcmVjdG9yeSkgeworICAgICAgICAgICAgICAgICAgX3RoaXMuX2FkZEZp bGVzRnJvbURpcmVjdG9yeShlbnRyeSwgIiIgKyBwYXRoICsgIi8iICsgZW50 cnkubmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIHJlYWRFbnRyaWVzKCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICB9LCBlcnJv ckhhbmRsZXIpOworICAgICAgICB9OworICAgICAgfSkodGhpcyk7CisgICAg ICByZXR1cm4gcmVhZEVudHJpZXMoKTsKKyAgICB9OworCisgICAgRHJvcHpv bmUucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKGZpbGUsIGRvbmUpIHsK KyAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm9wdGlvbnMubWF4RmlsZXNp emUgKiAxMDI0ICogMTAyNCkgeworICAgICAgICByZXR1cm4gZG9uZSh0aGlz Lm9wdGlvbnMuZGljdEZpbGVUb29CaWcucmVwbGFjZSgie3tmaWxlc2l6ZX19 IiwgTWF0aC5yb3VuZChmaWxlLnNpemUgLyAxMDI0IC8gMTAuMjQpIC8gMTAw KS5yZXBsYWNlKCJ7e21heEZpbGVzaXplfX0iLCB0aGlzLm9wdGlvbnMubWF4 RmlsZXNpemUpKTsKKyAgICAgIH0gZWxzZSBpZiAoIURyb3B6b25lLmlzVmFs aWRGaWxlKGZpbGUsIHRoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzKSkgewor ICAgICAgICByZXR1cm4gZG9uZSh0aGlzLm9wdGlvbnMuZGljdEludmFsaWRG aWxlVHlwZSk7CisgICAgICB9IGVsc2UgaWYgKCh0aGlzLm9wdGlvbnMubWF4 RmlsZXMgIT0gbnVsbCkgJiYgdGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVu Z3RoID49IHRoaXMub3B0aW9ucy5tYXhGaWxlcykgeworICAgICAgICBkb25l KHRoaXMub3B0aW9ucy5kaWN0TWF4RmlsZXNFeGNlZWRlZC5yZXBsYWNlKCJ7 e21heEZpbGVzfX0iLCB0aGlzLm9wdGlvbnMubWF4RmlsZXMpKTsKKyAgICAg ICAgcmV0dXJuIHRoaXMuZW1pdCgibWF4ZmlsZXNleGNlZWRlZCIsIGZpbGUp OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9u cy5hY2NlcHQuY2FsbCh0aGlzLCBmaWxlLCBkb25lKTsKKyAgICAgIH0KKyAg ICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmFkZEZpbGUgPSBmdW5j dGlvbihmaWxlKSB7CisgICAgICBmaWxlLnVwbG9hZCA9IHsKKyAgICAgICAg cHJvZ3Jlc3M6IDAsCisgICAgICAgIHRvdGFsOiBmaWxlLnNpemUsCisgICAg ICAgIGJ5dGVzU2VudDogMAorICAgICAgfTsKKyAgICAgIHRoaXMuZmlsZXMu cHVzaChmaWxlKTsKKyAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuQURE RUQ7CisgICAgICB0aGlzLmVtaXQoImFkZGVkZmlsZSIsIGZpbGUpOworICAg ICAgdGhpcy5fZW5xdWV1ZVRodW1ibmFpbChmaWxlKTsKKyAgICAgIHJldHVy biB0aGlzLmFjY2VwdChmaWxlLCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAg ICAgcmV0dXJuIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgaWYgKGVy cm9yKSB7CisgICAgICAgICAgICBmaWxlLmFjY2VwdGVkID0gZmFsc2U7Cisg ICAgICAgICAgICBfdGhpcy5fZXJyb3JQcm9jZXNzaW5nKFtmaWxlXSwgZXJy b3IpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaWxlLmFj Y2VwdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25z LmF1dG9RdWV1ZSkgeworICAgICAgICAgICAgICBfdGhpcy5lbnF1ZXVlRmls ZShmaWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg ICAgcmV0dXJuIF90aGlzLl91cGRhdGVNYXhGaWxlc1JlYWNoZWRDbGFzcygp OworICAgICAgICB9OworICAgICAgfSkodGhpcykpOworICAgIH07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUuZW5xdWV1ZUZpbGVzID0gZnVuY3Rpb24o ZmlsZXMpIHsKKyAgICAgIHZhciBmaWxlLCBfaSwgX2xlbjsKKyAgICAgIGZv ciAoX2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9p KyspIHsKKyAgICAgICAgZmlsZSA9IGZpbGVzW19pXTsKKyAgICAgICAgdGhp cy5lbnF1ZXVlRmlsZShmaWxlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBu dWxsOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZW5xdWV1 ZUZpbGUgPSBmdW5jdGlvbihmaWxlKSB7CisgICAgICBpZiAoZmlsZS5zdGF0 dXMgPT09IERyb3B6b25lLkFEREVEICYmIGZpbGUuYWNjZXB0ZWQgPT09IHRy dWUpIHsKKyAgICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5RVUVVRUQ7 CisgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1Byb2Nlc3NRdWV1ZSkg eworICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgoZnVuY3Rpb24oX3Ro aXMpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAg ICAgICAgICAgcmV0dXJuIF90aGlzLnByb2Nlc3NRdWV1ZSgpOworICAgICAg ICAgICAgfTsKKyAgICAgICAgICB9KSh0aGlzKSksIDApOworICAgICAgICB9 CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRo aXMgZmlsZSBjYW4ndCBiZSBxdWV1ZWQgYmVjYXVzZSBpdCBoYXMgYWxyZWFk eSBiZWVuIHByb2Nlc3NlZCBvciB3YXMgcmVqZWN0ZWQuIik7CisgICAgICB9 CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fdGh1bWJuYWls UXVldWUgPSBbXTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fcHJvY2Vz c2luZ1RodW1ibmFpbCA9IGZhbHNlOworCisgICAgRHJvcHpvbmUucHJvdG90 eXBlLl9lbnF1ZXVlVGh1bWJuYWlsID0gZnVuY3Rpb24oZmlsZSkgeworICAg ICAgaWYgKHRoaXMub3B0aW9ucy5jcmVhdGVJbWFnZVRodW1ibmFpbHMgJiYg ZmlsZS50eXBlLm1hdGNoKC9pbWFnZS4qLykgJiYgZmlsZS5zaXplIDw9IHRo aXMub3B0aW9ucy5tYXhUaHVtYm5haWxGaWxlc2l6ZSAqIDEwMjQgKiAxMDI0 KSB7CisgICAgICAgIHRoaXMuX3RodW1ibmFpbFF1ZXVlLnB1c2goZmlsZSk7 CisgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgoZnVuY3Rpb24oX3RoaXMp IHsKKyAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAg ICByZXR1cm4gX3RoaXMuX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSgpOworICAg ICAgICAgIH07CisgICAgICAgIH0pKHRoaXMpKSwgMCk7CisgICAgICB9Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fcHJvY2Vzc1RodW1i bmFpbFF1ZXVlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5fcHJv Y2Vzc2luZ1RodW1ibmFpbCB8fCB0aGlzLl90aHVtYm5haWxRdWV1ZS5sZW5n dGggPT09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAg dGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbCA9IHRydWU7CisgICAgICByZXR1 cm4gdGhpcy5jcmVhdGVUaHVtYm5haWwodGhpcy5fdGh1bWJuYWlsUXVldWUu c2hpZnQoKSwgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBm dW5jdGlvbigpIHsKKyAgICAgICAgICBfdGhpcy5fcHJvY2Vzc2luZ1RodW1i bmFpbCA9IGZhbHNlOworICAgICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2Vz c1RodW1ibmFpbFF1ZXVlKCk7CisgICAgICAgIH07CisgICAgICB9KSh0aGlz KSk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5yZW1vdmVG aWxlID0gZnVuY3Rpb24oZmlsZSkgeworICAgICAgaWYgKGZpbGUuc3RhdHVz ID09PSBEcm9wem9uZS5VUExPQURJTkcpIHsKKyAgICAgICAgdGhpcy5jYW5j ZWxVcGxvYWQoZmlsZSk7CisgICAgICB9CisgICAgICB0aGlzLmZpbGVzID0g d2l0aG91dCh0aGlzLmZpbGVzLCBmaWxlKTsKKyAgICAgIHRoaXMuZW1pdCgi cmVtb3ZlZGZpbGUiLCBmaWxlKTsKKyAgICAgIGlmICh0aGlzLmZpbGVzLmxl bmd0aCA9PT0gMCkgeworICAgICAgICByZXR1cm4gdGhpcy5lbWl0KCJyZXNl dCIpOworICAgICAgfQorICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5 cGUucmVtb3ZlQWxsRmlsZXMgPSBmdW5jdGlvbihjYW5jZWxJZk5lY2Vzc2Fy eSkgeworICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmOworICAgICAg aWYgKGNhbmNlbElmTmVjZXNzYXJ5ID09IG51bGwpIHsKKyAgICAgICAgY2Fu Y2VsSWZOZWNlc3NhcnkgPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIF9yZWYg PSB0aGlzLmZpbGVzLnNsaWNlKCk7CisgICAgICBmb3IgKF9pID0gMCwgX2xl biA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAg ZmlsZSA9IF9yZWZbX2ldOworICAgICAgICBpZiAoZmlsZS5zdGF0dXMgIT09 IERyb3B6b25lLlVQTE9BRElORyB8fCBjYW5jZWxJZk5lY2Vzc2FyeSkgewor ICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShmaWxlKTsKKyAgICAgICAgfQor ICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIERy b3B6b25lLnByb3RvdHlwZS5jcmVhdGVUaHVtYm5haWwgPSBmdW5jdGlvbihm aWxlLCBjYWxsYmFjaykgeworICAgICAgdmFyIGZpbGVSZWFkZXI7CisgICAg ICBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7CisgICAgICBmaWxlUmVh ZGVyLm9ubG9hZCA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1 cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKGZpbGUudHlwZSA9PT0g ImltYWdlL3N2Zyt4bWwiKSB7CisgICAgICAgICAgICBfdGhpcy5lbWl0KCJ0 aHVtYm5haWwiLCBmaWxlLCBmaWxlUmVhZGVyLnJlc3VsdCk7CisgICAgICAg ICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICBj YWxsYmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3RoaXMuY3JlYXRl VGh1bWJuYWlsRnJvbVVybChmaWxlLCBmaWxlUmVhZGVyLnJlc3VsdCwgY2Fs bGJhY2spOworICAgICAgICB9OworICAgICAgfSkodGhpcyk7CisgICAgICBy ZXR1cm4gZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOworICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuY3JlYXRlVGh1bWJuYWlsRnJv bVVybCA9IGZ1bmN0aW9uKGZpbGUsIGltYWdlVXJsLCBjYWxsYmFjaywgY3Jv c3NPcmlnaW4pIHsKKyAgICAgIHZhciBpbWc7CisgICAgICBpbWcgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKKyAgICAgIGlmIChjcm9zc09y aWdpbikgeworICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdp bjsKKyAgICAgIH0KKyAgICAgIGltZy5vbmxvYWQgPSAoZnVuY3Rpb24oX3Ro aXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAg IHZhciBjYW52YXMsIGN0eCwgcmVzaXplSW5mbywgdGh1bWJuYWlsLCBfcmVm LCBfcmVmMSwgX3JlZjIsIF9yZWYzOworICAgICAgICAgIGZpbGUud2lkdGgg PSBpbWcud2lkdGg7CisgICAgICAgICAgZmlsZS5oZWlnaHQgPSBpbWcuaGVp Z2h0OworICAgICAgICAgIHJlc2l6ZUluZm8gPSBfdGhpcy5vcHRpb25zLnJl c2l6ZS5jYWxsKF90aGlzLCBmaWxlKTsKKyAgICAgICAgICBpZiAocmVzaXpl SW5mby50cmdXaWR0aCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXNpemVJ bmZvLnRyZ1dpZHRoID0gcmVzaXplSW5mby5vcHRXaWR0aDsKKyAgICAgICAg ICB9CisgICAgICAgICAgaWYgKHJlc2l6ZUluZm8udHJnSGVpZ2h0ID09IG51 bGwpIHsKKyAgICAgICAgICAgIHJlc2l6ZUluZm8udHJnSGVpZ2h0ID0gcmVz aXplSW5mby5vcHRIZWlnaHQ7CisgICAgICAgICAgfQorICAgICAgICAgIGNh bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAg ICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgICAg ICAgIGNhbnZhcy53aWR0aCA9IHJlc2l6ZUluZm8udHJnV2lkdGg7CisgICAg ICAgICAgY2FudmFzLmhlaWdodCA9IHJlc2l6ZUluZm8udHJnSGVpZ2h0Owor ICAgICAgICAgIGRyYXdJbWFnZUlPU0ZpeChjdHgsIGltZywgKF9yZWYgPSBy ZXNpemVJbmZvLnNyY1gpICE9IG51bGwgPyBfcmVmIDogMCwgKF9yZWYxID0g cmVzaXplSW5mby5zcmNZKSAhPSBudWxsID8gX3JlZjEgOiAwLCByZXNpemVJ bmZvLnNyY1dpZHRoLCByZXNpemVJbmZvLnNyY0hlaWdodCwgKF9yZWYyID0g cmVzaXplSW5mby50cmdYKSAhPSBudWxsID8gX3JlZjIgOiAwLCAoX3JlZjMg PSByZXNpemVJbmZvLnRyZ1kpICE9IG51bGwgPyBfcmVmMyA6IDAsIHJlc2l6 ZUluZm8udHJnV2lkdGgsIHJlc2l6ZUluZm8udHJnSGVpZ2h0KTsKKyAgICAg ICAgICB0aHVtYm5haWwgPSBjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9wbmci KTsKKyAgICAgICAgICBfdGhpcy5lbWl0KCJ0aHVtYm5haWwiLCBmaWxlLCB0 aHVtYm5haWwpOworICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7 CisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKKyAgICAgICAgICB9 CisgICAgICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIGlmIChjYWxs YmFjayAhPSBudWxsKSB7CisgICAgICAgIGltZy5vbmVycm9yID0gY2FsbGJh Y2s7CisgICAgICB9CisgICAgICByZXR1cm4gaW1nLnNyYyA9IGltYWdlVXJs OworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucHJvY2Vzc1F1 ZXVlID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgaSwgcGFyYWxsZWxVcGxv YWRzLCBwcm9jZXNzaW5nTGVuZ3RoLCBxdWV1ZWRGaWxlczsKKyAgICAgIHBh cmFsbGVsVXBsb2FkcyA9IHRoaXMub3B0aW9ucy5wYXJhbGxlbFVwbG9hZHM7 CisgICAgICBwcm9jZXNzaW5nTGVuZ3RoID0gdGhpcy5nZXRVcGxvYWRpbmdG aWxlcygpLmxlbmd0aDsKKyAgICAgIGkgPSBwcm9jZXNzaW5nTGVuZ3RoOwor ICAgICAgaWYgKHByb2Nlc3NpbmdMZW5ndGggPj0gcGFyYWxsZWxVcGxvYWRz KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHF1ZXVlZEZp bGVzID0gdGhpcy5nZXRRdWV1ZWRGaWxlcygpOworICAgICAgaWYgKCEocXVl dWVkRmlsZXMubGVuZ3RoID4gMCkpIHsKKyAgICAgICAgcmV0dXJuOworICAg ICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkg eworICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsZXMocXVldWVkRmls ZXMuc2xpY2UoMCwgcGFyYWxsZWxVcGxvYWRzIC0gcHJvY2Vzc2luZ0xlbmd0 aCkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKGkgPCBwYXJh bGxlbFVwbG9hZHMpIHsKKyAgICAgICAgICBpZiAoIXF1ZXVlZEZpbGVzLmxl bmd0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAg ICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKHF1ZXVlZEZpbGVzLnNoaWZ0KCkp OworICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucHJvY2Vzc0ZpbGUgPSBmdW5j dGlvbihmaWxlKSB7CisgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsZXMo W2ZpbGVdKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLnBy b2Nlc3NGaWxlcyA9IGZ1bmN0aW9uKGZpbGVzKSB7CisgICAgICB2YXIgZmls ZSwgX2ksIF9sZW47CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVz Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZpbGUgPSBm aWxlc1tfaV07CisgICAgICAgIGZpbGUucHJvY2Vzc2luZyA9IHRydWU7Cisg ICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuVVBMT0FESU5HOworICAg ICAgICB0aGlzLmVtaXQoInByb2Nlc3NpbmciLCBmaWxlKTsKKyAgICAgIH0K KyAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHsKKyAg ICAgICAgdGhpcy5lbWl0KCJwcm9jZXNzaW5nbXVsdGlwbGUiLCBmaWxlcyk7 CisgICAgICB9CisgICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlcyhmaWxl cyk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fZ2V0Rmls ZXNXaXRoWGhyID0gZnVuY3Rpb24oeGhyKSB7CisgICAgICB2YXIgZmlsZSwg ZmlsZXM7CisgICAgICByZXR1cm4gZmlsZXMgPSAoZnVuY3Rpb24oKSB7Cisg ICAgICAgIHZhciBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICAg IF9yZWYgPSB0aGlzLmZpbGVzOworICAgICAgICBfcmVzdWx0cyA9IFtdOwor ICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8 IF9sZW47IF9pKyspIHsKKyAgICAgICAgICBmaWxlID0gX3JlZltfaV07Cisg ICAgICAgICAgaWYgKGZpbGUueGhyID09PSB4aHIpIHsKKyAgICAgICAgICAg IF9yZXN1bHRzLnB1c2goZmlsZSk7CisgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICAgIH0pLmNhbGwodGhp cyk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5jYW5jZWxV cGxvYWQgPSBmdW5jdGlvbihmaWxlKSB7CisgICAgICB2YXIgZ3JvdXBlZEZp bGUsIGdyb3VwZWRGaWxlcywgX2ksIF9qLCBfbGVuLCBfbGVuMSwgX3JlZjsK KyAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuVVBMT0FESU5H KSB7CisgICAgICAgIGdyb3VwZWRGaWxlcyA9IHRoaXMuX2dldEZpbGVzV2l0 aFhocihmaWxlLnhocik7CisgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0g Z3JvdXBlZEZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAg ICAgICAgZ3JvdXBlZEZpbGUgPSBncm91cGVkRmlsZXNbX2ldOworICAgICAg ICAgIGdyb3VwZWRGaWxlLnN0YXR1cyA9IERyb3B6b25lLkNBTkNFTEVEOwor ICAgICAgICB9CisgICAgICAgIGZpbGUueGhyLmFib3J0KCk7CisgICAgICAg IGZvciAoX2ogPSAwLCBfbGVuMSA9IGdyb3VwZWRGaWxlcy5sZW5ndGg7IF9q IDwgX2xlbjE7IF9qKyspIHsKKyAgICAgICAgICBncm91cGVkRmlsZSA9IGdy b3VwZWRGaWxlc1tfal07CisgICAgICAgICAgdGhpcy5lbWl0KCJjYW5jZWxl ZCIsIGdyb3VwZWRGaWxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp cy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7CisgICAgICAgICAgdGhpcy5l bWl0KCJjYW5jZWxlZG11bHRpcGxlIiwgZ3JvdXBlZEZpbGVzKTsKKyAgICAg ICAgfQorICAgICAgfSBlbHNlIGlmICgoX3JlZiA9IGZpbGUuc3RhdHVzKSA9 PT0gRHJvcHpvbmUuQURERUQgfHwgX3JlZiA9PT0gRHJvcHpvbmUuUVVFVUVE KSB7CisgICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuQ0FOQ0VMRUQ7 CisgICAgICAgIHRoaXMuZW1pdCgiY2FuY2VsZWQiLCBmaWxlKTsKKyAgICAg ICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkgeworICAgICAg ICAgIHRoaXMuZW1pdCgiY2FuY2VsZWRtdWx0aXBsZSIsIFtmaWxlXSk7Cisg ICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0 b1Byb2Nlc3NRdWV1ZSkgeworICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNz UXVldWUoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmVzb2x2ZU9wdGlv biA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGFyZ3MsIG9wdGlvbjsKKyAg ICAgIG9wdGlvbiA9IGFyZ3VtZW50c1swXSwgYXJncyA9IDIgPD0gYXJndW1l bnRzLmxlbmd0aCA/IF9fc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107 CisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykgewor ICAgICAgICByZXR1cm4gb3B0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpOworICAg ICAgfQorICAgICAgcmV0dXJuIG9wdGlvbjsKKyAgICB9OworCisgICAgRHJv cHpvbmUucHJvdG90eXBlLnVwbG9hZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7 CisgICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlcyhbZmlsZV0pOworICAg IH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUudXBsb2FkRmlsZXMgPSBm dW5jdGlvbihmaWxlcykgeworICAgICAgdmFyIGZpbGUsIGZvcm1EYXRhLCBo YW5kbGVFcnJvciwgaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUsIGhlYWRlcnMs IGksIGlucHV0LCBpbnB1dE5hbWUsIGlucHV0VHlwZSwga2V5LCBtZXRob2Qs IG9wdGlvbiwgcHJvZ3Jlc3NPYmosIHJlc3BvbnNlLCB1cGRhdGVQcm9ncmVz cywgdXJsLCB2YWx1ZSwgeGhyLCBfaSwgX2osIF9rLCBfbCwgX2xlbiwgX2xl bjEsIF9sZW4yLCBfbGVuMywgX20sIF9yZWYsIF9yZWYxLCBfcmVmMiwgX3Jl ZjMsIF9yZWY0LCBfcmVmNTsKKyAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVx dWVzdCgpOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5n dGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxlID0gZmlsZXNb X2ldOworICAgICAgICBmaWxlLnhociA9IHhocjsKKyAgICAgIH0KKyAgICAg IG1ldGhvZCA9IHJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLm1ldGhvZCwg ZmlsZXMpOworICAgICAgdXJsID0gcmVzb2x2ZU9wdGlvbih0aGlzLm9wdGlv bnMudXJsLCBmaWxlcyk7CisgICAgICB4aHIub3BlbihtZXRob2QsIHVybCwg dHJ1ZSk7CisgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISF0aGlzLm9w dGlvbnMud2l0aENyZWRlbnRpYWxzOworICAgICAgcmVzcG9uc2UgPSBudWxs OworICAgICAgaGFuZGxlRXJyb3IgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAg ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBfaiwg X2xlbjEsIF9yZXN1bHRzOworICAgICAgICAgIF9yZXN1bHRzID0gW107Cisg ICAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gZmlsZXMubGVuZ3RoOyBf aiA8IF9sZW4xOyBfaisrKSB7CisgICAgICAgICAgICBmaWxlID0gZmlsZXNb X2pdOworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChfdGhpcy5fZXJyb3JQ cm9jZXNzaW5nKGZpbGVzLCByZXNwb25zZSB8fCBfdGhpcy5vcHRpb25zLmRp Y3RSZXNwb25zZUVycm9yLnJlcGxhY2UoInt7c3RhdHVzQ29kZX19IiwgeGhy LnN0YXR1cyksIHhocikpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1 cm4gX3Jlc3VsdHM7CisgICAgICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAg ICAgIHVwZGF0ZVByb2dyZXNzID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAg ICAgIHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgdmFyIGFsbEZp bGVzRmluaXNoZWQsIHByb2dyZXNzLCBfaiwgX2ssIF9sLCBfbGVuMSwgX2xl bjIsIF9sZW4zLCBfcmVzdWx0czsKKyAgICAgICAgICBpZiAoZSAhPSBudWxs KSB7CisgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMCAqIGUubG9hZGVkIC8g ZS50b3RhbDsKKyAgICAgICAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9IGZp bGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykgeworICAgICAgICAgICAg ICBmaWxlID0gZmlsZXNbX2pdOworICAgICAgICAgICAgICBmaWxlLnVwbG9h ZCA9IHsKKyAgICAgICAgICAgICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsCisg ICAgICAgICAgICAgICAgdG90YWw6IGUudG90YWwsCisgICAgICAgICAgICAg ICAgYnl0ZXNTZW50OiBlLmxvYWRlZAorICAgICAgICAgICAgICB9OworICAg ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh bGxGaWxlc0ZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHByb2dyZXNz ID0gMTAwOworICAgICAgICAgICAgZm9yIChfayA9IDAsIF9sZW4yID0gZmls ZXMubGVuZ3RoOyBfayA8IF9sZW4yOyBfaysrKSB7CisgICAgICAgICAgICAg IGZpbGUgPSBmaWxlc1tfa107CisgICAgICAgICAgICAgIGlmICghKGZpbGUu dXBsb2FkLnByb2dyZXNzID09PSAxMDAgJiYgZmlsZS51cGxvYWQuYnl0ZXNT ZW50ID09PSBmaWxlLnVwbG9hZC50b3RhbCkpIHsKKyAgICAgICAgICAgICAg ICBhbGxGaWxlc0ZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgZmlsZS51cGxvYWQucHJvZ3Jlc3MgPSBwcm9ncmVz czsKKyAgICAgICAgICAgICAgZmlsZS51cGxvYWQuYnl0ZXNTZW50ID0gZmls ZS51cGxvYWQudG90YWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoYWxsRmlsZXNGaW5pc2hlZCkgeworICAgICAgICAgICAgICByZXR1cm47 CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIF9yZXN1 bHRzID0gW107CisgICAgICAgICAgZm9yIChfbCA9IDAsIF9sZW4zID0gZmls ZXMubGVuZ3RoOyBfbCA8IF9sZW4zOyBfbCsrKSB7CisgICAgICAgICAgICBm aWxlID0gZmlsZXNbX2xdOworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChf dGhpcy5lbWl0KCJ1cGxvYWRwcm9ncmVzcyIsIGZpbGUsIHByb2dyZXNzLCBm aWxlLnVwbG9hZC5ieXRlc1NlbnQpKTsKKyAgICAgICAgICB9CisgICAgICAg ICAgcmV0dXJuIF9yZXN1bHRzOworICAgICAgICB9OworICAgICAgfSkodGhp cyk7CisgICAgICB4aHIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7Cisg ICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgdmFyIF9y ZWY7CisgICAgICAgICAgaWYgKGZpbGVzWzBdLnN0YXR1cyA9PT0gRHJvcHpv bmUuQ0FOQ0VMRUQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICB9CisgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9PSA0KSB7Cisg ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIHJl c3BvbnNlID0geGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICBpZiAoeGhy LmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSAmJiB+eGhyLmdl dFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKS5pbmRleE9mKCJhcHBs aWNhdGlvbi9qc29uIikpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAg ICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZSk7CisgICAg ICAgICAgICB9IGNhdGNoIChfZXJyb3IpIHsKKyAgICAgICAgICAgICAgZSA9 IF9lcnJvcjsKKyAgICAgICAgICAgICAgcmVzcG9uc2UgPSAiSW52YWxpZCBK U09OIHJlc3BvbnNlIGZyb20gc2VydmVyLiI7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfQorICAgICAgICAgIHVwZGF0ZVByb2dyZXNzKCk7CisgICAg ICAgICAgaWYgKCEoKDIwMCA8PSAoX3JlZiA9IHhoci5zdGF0dXMpICYmIF9y ZWYgPCAzMDApKSkgeworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9y KCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBf dGhpcy5fZmluaXNoZWQoZmlsZXMsIHJlc3BvbnNlLCBlKTsKKyAgICAgICAg ICB9CisgICAgICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIHhoci5v bmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBm dW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoZmlsZXNbMF0uc3RhdHVzID09 PSBEcm9wem9uZS5DQU5DRUxFRCkgeworICAgICAgICAgICAgcmV0dXJuOwor ICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoKTsK KyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAgcHJvZ3Jlc3NP YmogPSAoX3JlZiA9IHhoci51cGxvYWQpICE9IG51bGwgPyBfcmVmIDogeGhy OworICAgICAgcHJvZ3Jlc3NPYmoub25wcm9ncmVzcyA9IHVwZGF0ZVByb2dy ZXNzOworICAgICAgaGVhZGVycyA9IHsKKyAgICAgICAgIkFjY2VwdCI6ICJh cHBsaWNhdGlvbi9qc29uIiwKKyAgICAgICAgIkNhY2hlLUNvbnRyb2wiOiAi bm8tY2FjaGUiLAorICAgICAgICAiWC1SZXF1ZXN0ZWQtV2l0aCI6ICJYTUxI dHRwUmVxdWVzdCIKKyAgICAgIH07CisgICAgICBpZiAodGhpcy5vcHRpb25z LmhlYWRlcnMpIHsKKyAgICAgICAgZXh0ZW5kKGhlYWRlcnMsIHRoaXMub3B0 aW9ucy5oZWFkZXJzKTsKKyAgICAgIH0KKyAgICAgIGZvciAoaGVhZGVyTmFt ZSBpbiBoZWFkZXJzKSB7CisgICAgICAgIGhlYWRlclZhbHVlID0gaGVhZGVy c1toZWFkZXJOYW1lXTsKKyAgICAgICAgaWYgKGhlYWRlclZhbHVlKSB7Cisg ICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyTmFtZSwgaGVh ZGVyVmFsdWUpOworICAgICAgICB9CisgICAgICB9CisgICAgICBmb3JtRGF0 YSA9IG5ldyBGb3JtRGF0YSgpOworICAgICAgaWYgKHRoaXMub3B0aW9ucy5w YXJhbXMpIHsKKyAgICAgICAgX3JlZjEgPSB0aGlzLm9wdGlvbnMucGFyYW1z OworICAgICAgICBmb3IgKGtleSBpbiBfcmVmMSkgeworICAgICAgICAgIHZh bHVlID0gX3JlZjFba2V5XTsKKyAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQo a2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZvciAo X2ogPSAwLCBfbGVuMSA9IGZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2or KykgeworICAgICAgICBmaWxlID0gZmlsZXNbX2pdOworICAgICAgICB0aGlz LmVtaXQoInNlbmRpbmciLCBmaWxlLCB4aHIsIGZvcm1EYXRhKTsKKyAgICAg IH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHsK KyAgICAgICAgdGhpcy5lbWl0KCJzZW5kaW5nbXVsdGlwbGUiLCBmaWxlcywg eGhyLCBmb3JtRGF0YSk7CisgICAgICB9CisgICAgICBpZiAodGhpcy5lbGVt ZW50LnRhZ05hbWUgPT09ICJGT1JNIikgeworICAgICAgICBfcmVmMiA9IHRo aXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCwgdGV4dGFyZWEs IHNlbGVjdCwgYnV0dG9uIik7CisgICAgICAgIGZvciAoX2sgPSAwLCBfbGVu MiA9IF9yZWYyLmxlbmd0aDsgX2sgPCBfbGVuMjsgX2srKykgeworICAgICAg ICAgIGlucHV0ID0gX3JlZjJbX2tdOworICAgICAgICAgIGlucHV0TmFtZSA9 IGlucHV0LmdldEF0dHJpYnV0ZSgibmFtZSIpOworICAgICAgICAgIGlucHV0 VHlwZSA9IGlucHV0LmdldEF0dHJpYnV0ZSgidHlwZSIpOworICAgICAgICAg IGlmIChpbnB1dC50YWdOYW1lID09PSAiU0VMRUNUIiAmJiBpbnB1dC5oYXNB dHRyaWJ1dGUoIm11bHRpcGxlIikpIHsKKyAgICAgICAgICAgIF9yZWYzID0g aW5wdXQub3B0aW9uczsKKyAgICAgICAgICAgIGZvciAoX2wgPSAwLCBfbGVu MyA9IF9yZWYzLmxlbmd0aDsgX2wgPCBfbGVuMzsgX2wrKykgeworICAgICAg ICAgICAgICBvcHRpb24gPSBfcmVmM1tfbF07CisgICAgICAgICAgICAgIGlm IChvcHRpb24uc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBmb3JtRGF0 YS5hcHBlbmQoaW5wdXROYW1lLCBvcHRpb24udmFsdWUpOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmICgh aW5wdXRUeXBlIHx8ICgoX3JlZjQgPSBpbnB1dFR5cGUudG9Mb3dlckNhc2Uo KSkgIT09ICJjaGVja2JveCIgJiYgX3JlZjQgIT09ICJyYWRpbyIpIHx8IGlu cHV0LmNoZWNrZWQpIHsKKyAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChp bnB1dE5hbWUsIGlucHV0LnZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgIH0KKyAgICAgIGZvciAoaSA9IF9tID0gMCwgX3JlZjUgPSBm aWxlcy5sZW5ndGggLSAxOyAwIDw9IF9yZWY1ID8gX20gPD0gX3JlZjUgOiBf bSA+PSBfcmVmNTsgaSA9IDAgPD0gX3JlZjUgPyArK19tIDogLS1fbSkgewor ICAgICAgICBmb3JtRGF0YS5hcHBlbmQodGhpcy5fZ2V0UGFyYW1OYW1lKGkp LCBmaWxlc1tpXSwgdGhpcy5fcmVuYW1lRmlsZW5hbWUoZmlsZXNbaV0ubmFt ZSkpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVxdWVz dCh4aHIsIGZvcm1EYXRhLCBmaWxlcyk7CisgICAgfTsKKworICAgIERyb3B6 b25lLnByb3RvdHlwZS5zdWJtaXRSZXF1ZXN0ID0gZnVuY3Rpb24oeGhyLCBm b3JtRGF0YSwgZmlsZXMpIHsKKyAgICAgIHJldHVybiB4aHIuc2VuZChmb3Jt RGF0YSk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fZmlu aXNoZWQgPSBmdW5jdGlvbihmaWxlcywgcmVzcG9uc2VUZXh0LCBlKSB7Cisg ICAgICB2YXIgZmlsZSwgX2ksIF9sZW47CisgICAgICBmb3IgKF9pID0gMCwg X2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAg ICAgIGZpbGUgPSBmaWxlc1tfaV07CisgICAgICAgIGZpbGUuc3RhdHVzID0g RHJvcHpvbmUuU1VDQ0VTUzsKKyAgICAgICAgdGhpcy5lbWl0KCJzdWNjZXNz IiwgZmlsZSwgcmVzcG9uc2VUZXh0LCBlKTsKKyAgICAgICAgdGhpcy5lbWl0 KCJjb21wbGV0ZSIsIGZpbGUpOworICAgICAgfQorICAgICAgaWYgKHRoaXMu b3B0aW9ucy51cGxvYWRNdWx0aXBsZSkgeworICAgICAgICB0aGlzLmVtaXQo InN1Y2Nlc3NtdWx0aXBsZSIsIGZpbGVzLCByZXNwb25zZVRleHQsIGUpOwor ICAgICAgICB0aGlzLmVtaXQoImNvbXBsZXRlbXVsdGlwbGUiLCBmaWxlcyk7 CisgICAgICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNz UXVldWUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCk7 CisgICAgICB9CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5f ZXJyb3JQcm9jZXNzaW5nID0gZnVuY3Rpb24oZmlsZXMsIG1lc3NhZ2UsIHho cikgeworICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuOworICAgICAgZm9yIChf aSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykg eworICAgICAgICBmaWxlID0gZmlsZXNbX2ldOworICAgICAgICBmaWxlLnN0 YXR1cyA9IERyb3B6b25lLkVSUk9SOworICAgICAgICB0aGlzLmVtaXQoImVy cm9yIiwgZmlsZSwgbWVzc2FnZSwgeGhyKTsKKyAgICAgICAgdGhpcy5lbWl0 KCJjb21wbGV0ZSIsIGZpbGUpOworICAgICAgfQorICAgICAgaWYgKHRoaXMu b3B0aW9ucy51cGxvYWRNdWx0aXBsZSkgeworICAgICAgICB0aGlzLmVtaXQo ImVycm9ybXVsdGlwbGUiLCBmaWxlcywgbWVzc2FnZSwgeGhyKTsKKyAgICAg ICAgdGhpcy5lbWl0KCJjb21wbGV0ZW11bHRpcGxlIiwgZmlsZXMpOworICAg ICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVl KSB7CisgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpOworICAg ICAgfQorICAgIH07CisKKyAgICByZXR1cm4gRHJvcHpvbmU7CisKKyAgfSko RW1pdHRlcik7CisKKyAgRHJvcHpvbmUudmVyc2lvbiA9ICI0LjMuMCI7CisK KyAgRHJvcHpvbmUub3B0aW9ucyA9IHt9OworCisgIERyb3B6b25lLm9wdGlv bnNGb3JFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGlmIChl bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSkgeworICAgICAgcmV0dXJuIERy b3B6b25lLm9wdGlvbnNbY2FtZWxpemUoZWxlbWVudC5nZXRBdHRyaWJ1dGUo ImlkIikpXTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHZvaWQgMDsK KyAgICB9CisgIH07CisKKyAgRHJvcHpvbmUuaW5zdGFuY2VzID0gW107CisK KyAgRHJvcHpvbmUuZm9yRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsK KyAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICJzdHJpbmciKSB7CisgICAg ICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KTsK KyAgICB9CisgICAgaWYgKChlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50LmRy b3B6b25lIDogdm9pZCAwKSA9PSBudWxsKSB7CisgICAgICB0aHJvdyBuZXcg RXJyb3IoIk5vIERyb3B6b25lIGZvdW5kIGZvciBnaXZlbiBlbGVtZW50LiBU aGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgeW91J3JlIHRyeWluZyB0byBhY2Nl c3MgaXQgYmVmb3JlIERyb3B6b25lIGhhZCB0aGUgdGltZSB0byBpbml0aWFs aXplLiBVc2UgdGhlIGBpbml0YCBvcHRpb24gdG8gc2V0dXAgYW55IGFkZGl0 aW9uYWwgb2JzZXJ2ZXJzIG9uIHlvdXIgRHJvcHpvbmUuIik7CisgICAgfQor ICAgIHJldHVybiBlbGVtZW50LmRyb3B6b25lOworICB9OworCisgIERyb3B6 b25lLmF1dG9EaXNjb3ZlciA9IHRydWU7CisKKyAgRHJvcHpvbmUuZGlzY292 ZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgY2hlY2tFbGVtZW50cywgZHJv cHpvbmUsIGRyb3B6b25lcywgX2ksIF9sZW4sIF9yZXN1bHRzOworICAgIGlm IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKSB7CisgICAgICBkcm9wem9u ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZHJvcHpvbmUiKTsK KyAgICB9IGVsc2UgeworICAgICAgZHJvcHpvbmVzID0gW107CisgICAgICBj aGVja0VsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMpIHsKKyAgICAgICAg dmFyIGVsLCBfaSwgX2xlbiwgX3Jlc3VsdHM7CisgICAgICAgIF9yZXN1bHRz ID0gW107CisgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZWxlbWVudHMu bGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICBlbCA9IGVs ZW1lbnRzW19pXTsKKyAgICAgICAgICBpZiAoLyhefCApZHJvcHpvbmUoJHwg KS8udGVzdChlbC5jbGFzc05hbWUpKSB7CisgICAgICAgICAgICBfcmVzdWx0 cy5wdXNoKGRyb3B6b25lcy5wdXNoKGVsKSk7CisgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTsKKyAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9yZXN1bHRzOwor ICAgICAgfTsKKyAgICAgIGNoZWNrRWxlbWVudHMoZG9jdW1lbnQuZ2V0RWxl bWVudHNCeVRhZ05hbWUoImRpdiIpKTsKKyAgICAgIGNoZWNrRWxlbWVudHMo ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKSk7CisgICAg fQorICAgIF9yZXN1bHRzID0gW107CisgICAgZm9yIChfaSA9IDAsIF9sZW4g PSBkcm9wem9uZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAg IGRyb3B6b25lID0gZHJvcHpvbmVzW19pXTsKKyAgICAgIGlmIChEcm9wem9u ZS5vcHRpb25zRm9yRWxlbWVudChkcm9wem9uZSkgIT09IGZhbHNlKSB7Cisg ICAgICAgIF9yZXN1bHRzLnB1c2gobmV3IERyb3B6b25lKGRyb3B6b25lKSk7 CisgICAgICB9IGVsc2UgeworICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQg MCk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBfcmVzdWx0czsKKyAg fTsKKworICBEcm9wem9uZS5ibGFja2xpc3RlZEJyb3dzZXJzID0gWy9vcGVy YS4qTWFjaW50b3NoLip2ZXJzaW9uXC8xMi9pXTsKKworICBEcm9wem9uZS5p c0Jyb3dzZXJTdXBwb3J0ZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgY2Fw YWJsZUJyb3dzZXIsIHJlZ2V4LCBfaSwgX2xlbiwgX3JlZjsKKyAgICBjYXBh YmxlQnJvd3NlciA9IHRydWU7CisgICAgaWYgKHdpbmRvdy5GaWxlICYmIHdp bmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlTGlzdCAmJiB3aW5kb3cu QmxvYiAmJiB3aW5kb3cuRm9ybURhdGEgJiYgZG9jdW1lbnQucXVlcnlTZWxl Y3RvcikgeworICAgICAgaWYgKCEoImNsYXNzTGlzdCIgaW4gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgiYSIpKSkgeworICAgICAgICBjYXBhYmxlQnJvd3Nl ciA9IGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX3JlZiA9IERy b3B6b25lLmJsYWNrbGlzdGVkQnJvd3NlcnM7CisgICAgICAgIGZvciAoX2kg PSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgewor ICAgICAgICAgIHJlZ2V4ID0gX3JlZltfaV07CisgICAgICAgICAgaWYgKHJl Z2V4LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHsKKyAgICAgICAgICAg IGNhcGFibGVCcm93c2VyID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVs c2UgeworICAgICAgY2FwYWJsZUJyb3dzZXIgPSBmYWxzZTsKKyAgICB9Cisg ICAgcmV0dXJuIGNhcGFibGVCcm93c2VyOworICB9OworCisgIHdpdGhvdXQg PSBmdW5jdGlvbihsaXN0LCByZWplY3RlZEl0ZW0pIHsKKyAgICB2YXIgaXRl bSwgX2ksIF9sZW4sIF9yZXN1bHRzOworICAgIF9yZXN1bHRzID0gW107Cisg ICAgZm9yIChfaSA9IDAsIF9sZW4gPSBsaXN0Lmxlbmd0aDsgX2kgPCBfbGVu OyBfaSsrKSB7CisgICAgICBpdGVtID0gbGlzdFtfaV07CisgICAgICBpZiAo aXRlbSAhPT0gcmVqZWN0ZWRJdGVtKSB7CisgICAgICAgIF9yZXN1bHRzLnB1 c2goaXRlbSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBfcmVzdWx0 czsKKyAgfTsKKworICBjYW1lbGl6ZSA9IGZ1bmN0aW9uKHN0cikgeworICAg IHJldHVybiBzdHIucmVwbGFjZSgvW1wtX10oXHcpL2csIGZ1bmN0aW9uKG1h dGNoKSB7CisgICAgICByZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJD YXNlKCk7CisgICAgfSk7CisgIH07CisKKyAgRHJvcHpvbmUuY3JlYXRlRWxl bWVudCA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHZhciBkaXY7CisgICAg ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZGl2 LmlubmVySFRNTCA9IHN0cmluZzsKKyAgICByZXR1cm4gZGl2LmNoaWxkTm9k ZXNbMF07CisgIH07CisKKyAgRHJvcHpvbmUuZWxlbWVudEluc2lkZSA9IGZ1 bmN0aW9uKGVsZW1lbnQsIGNvbnRhaW5lcikgeworICAgIGlmIChlbGVtZW50 ID09PSBjb250YWluZXIpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K KyAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkgewor ICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbnRhaW5lcikgeworICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl OworICB9OworCisgIERyb3B6b25lLmdldEVsZW1lbnQgPSBmdW5jdGlvbihl bCwgbmFtZSkgeworICAgIHZhciBlbGVtZW50OworICAgIGlmICh0eXBlb2Yg ZWwgPT09ICJzdHJpbmciKSB7CisgICAgICBlbGVtZW50ID0gZG9jdW1lbnQu cXVlcnlTZWxlY3RvcihlbCk7CisgICAgfSBlbHNlIGlmIChlbC5ub2RlVHlw ZSAhPSBudWxsKSB7CisgICAgICBlbGVtZW50ID0gZWw7CisgICAgfQorICAg IGlmIChlbGVtZW50ID09IG51bGwpIHsKKyAgICAgIHRocm93IG5ldyBFcnJv cigiSW52YWxpZCBgIiArIG5hbWUgKyAiYCBvcHRpb24gcHJvdmlkZWQuIFBs ZWFzZSBwcm92aWRlIGEgQ1NTIHNlbGVjdG9yIG9yIGEgcGxhaW4gSFRNTCBl bGVtZW50LiIpOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfTsK KworICBEcm9wem9uZS5nZXRFbGVtZW50cyA9IGZ1bmN0aW9uKGVscywgbmFt ZSkgeworICAgIHZhciBlLCBlbCwgZWxlbWVudHMsIF9pLCBfaiwgX2xlbiwg X2xlbjEsIF9yZWY7CisgICAgaWYgKGVscyBpbnN0YW5jZW9mIEFycmF5KSB7 CisgICAgICBlbGVtZW50cyA9IFtdOworICAgICAgdHJ5IHsKKyAgICAgICAg Zm9yIChfaSA9IDAsIF9sZW4gPSBlbHMubGVuZ3RoOyBfaSA8IF9sZW47IF9p KyspIHsKKyAgICAgICAgICBlbCA9IGVsc1tfaV07CisgICAgICAgICAgZWxl bWVudHMucHVzaCh0aGlzLmdldEVsZW1lbnQoZWwsIG5hbWUpKTsKKyAgICAg ICAgfQorICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7CisgICAgICAgIGUgPSBf ZXJyb3I7CisgICAgICAgIGVsZW1lbnRzID0gbnVsbDsKKyAgICAgIH0KKyAg ICB9IGVsc2UgaWYgKHR5cGVvZiBlbHMgPT09ICJzdHJpbmciKSB7CisgICAg ICBlbGVtZW50cyA9IFtdOworICAgICAgX3JlZiA9IGRvY3VtZW50LnF1ZXJ5 U2VsZWN0b3JBbGwoZWxzKTsKKyAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9 IF9yZWYubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7CisgICAgICAgIGVs ID0gX3JlZltfal07CisgICAgICAgIGVsZW1lbnRzLnB1c2goZWwpOworICAg ICAgfQorICAgIH0gZWxzZSBpZiAoZWxzLm5vZGVUeXBlICE9IG51bGwpIHsK KyAgICAgIGVsZW1lbnRzID0gW2Vsc107CisgICAgfQorICAgIGlmICghKChl bGVtZW50cyAhPSBudWxsKSAmJiBlbGVtZW50cy5sZW5ndGgpKSB7CisgICAg ICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYCIgKyBuYW1lICsgImAgb3B0 aW9uIHByb3ZpZGVkLiBQbGVhc2UgcHJvdmlkZSBhIENTUyBzZWxlY3Rvciwg YSBwbGFpbiBIVE1MIGVsZW1lbnQgb3IgYSBsaXN0IG9mIHRob3NlLiIpOwor ICAgIH0KKyAgICByZXR1cm4gZWxlbWVudHM7CisgIH07CisKKyAgRHJvcHpv bmUuY29uZmlybSA9IGZ1bmN0aW9uKHF1ZXN0aW9uLCBhY2NlcHRlZCwgcmVq ZWN0ZWQpIHsKKyAgICBpZiAod2luZG93LmNvbmZpcm0ocXVlc3Rpb24pKSB7 CisgICAgICByZXR1cm4gYWNjZXB0ZWQoKTsKKyAgICB9IGVsc2UgaWYgKHJl amVjdGVkICE9IG51bGwpIHsKKyAgICAgIHJldHVybiByZWplY3RlZCgpOwor ICAgIH0KKyAgfTsKKworICBEcm9wem9uZS5pc1ZhbGlkRmlsZSA9IGZ1bmN0 aW9uKGZpbGUsIGFjY2VwdGVkRmlsZXMpIHsKKyAgICB2YXIgYmFzZU1pbWVU eXBlLCBtaW1lVHlwZSwgdmFsaWRUeXBlLCBfaSwgX2xlbjsKKyAgICBpZiAo IWFjY2VwdGVkRmlsZXMpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K KyAgICBhY2NlcHRlZEZpbGVzID0gYWNjZXB0ZWRGaWxlcy5zcGxpdCgiLCIp OworICAgIG1pbWVUeXBlID0gZmlsZS50eXBlOworICAgIGJhc2VNaW1lVHlw ZSA9IG1pbWVUeXBlLnJlcGxhY2UoL1wvLiokLywgIiIpOworICAgIGZvciAo X2kgPSAwLCBfbGVuID0gYWNjZXB0ZWRGaWxlcy5sZW5ndGg7IF9pIDwgX2xl bjsgX2krKykgeworICAgICAgdmFsaWRUeXBlID0gYWNjZXB0ZWRGaWxlc1tf aV07CisgICAgICB2YWxpZFR5cGUgPSB2YWxpZFR5cGUudHJpbSgpOworICAg ICAgaWYgKHZhbGlkVHlwZS5jaGFyQXQoMCkgPT09ICIuIikgeworICAgICAg ICBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWxpZFR5 cGUudG9Mb3dlckNhc2UoKSwgZmlsZS5uYW1lLmxlbmd0aCAtIHZhbGlkVHlw ZS5sZW5ndGgpICE9PSAtMSkgeworICAgICAgICAgIHJldHVybiB0cnVlOwor ICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKC9cL1wqJC8udGVzdCh2YWxp ZFR5cGUpKSB7CisgICAgICAgIGlmIChiYXNlTWltZVR5cGUgPT09IHZhbGlk VHlwZS5yZXBsYWNlKC9cLy4qJC8sICIiKSkgeworICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBp ZiAobWltZVR5cGUgPT09IHZhbGlkVHlwZSkgeworICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVy biBmYWxzZTsKKyAgfTsKKworICBpZiAodHlwZW9mIGpRdWVyeSAhPT0gInVu ZGVmaW5lZCIgJiYgalF1ZXJ5ICE9PSBudWxsKSB7CisgICAgalF1ZXJ5LmZu LmRyb3B6b25lID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgcmV0dXJu IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBE cm9wem9uZSh0aGlzLCBvcHRpb25zKTsKKyAgICAgIH0pOworICAgIH07Cisg IH0KKworICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIgJiYg bW9kdWxlICE9PSBudWxsKSB7CisgICAgbW9kdWxlLmV4cG9ydHMgPSBEcm9w em9uZTsKKyAgfSBlbHNlIHsKKyAgICB3aW5kb3cuRHJvcHpvbmUgPSBEcm9w em9uZTsKKyAgfQorCisgIERyb3B6b25lLkFEREVEID0gImFkZGVkIjsKKwor ICBEcm9wem9uZS5RVUVVRUQgPSAicXVldWVkIjsKKworICBEcm9wem9uZS5B Q0NFUFRFRCA9IERyb3B6b25lLlFVRVVFRDsKKworICBEcm9wem9uZS5VUExP QURJTkcgPSAidXBsb2FkaW5nIjsKKworICBEcm9wem9uZS5QUk9DRVNTSU5H ID0gRHJvcHpvbmUuVVBMT0FESU5HOworCisgIERyb3B6b25lLkNBTkNFTEVE ID0gImNhbmNlbGVkIjsKKworICBEcm9wem9uZS5FUlJPUiA9ICJlcnJvciI7 CisKKyAgRHJvcHpvbmUuU1VDQ0VTUyA9ICJzdWNjZXNzIjsKKworCisgIC8q CisKKyAgQnVnZml4IGZvciBpT1MgNiBhbmQgNworICBTb3VyY2U6IGh0dHA6 Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE5MjkwOTkvaHRtbDUt Y2FudmFzLWRyYXdpbWFnZS1yYXRpby1idWctaW9zCisgIGJhc2VkIG9uIHRo ZSB3b3JrIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9zdG9taXRhL2lvcy1pbWFn ZWZpbGUtbWVnYXBpeGVsCisgICAqLworCisgIGRldGVjdFZlcnRpY2FsU3F1 YXNoID0gZnVuY3Rpb24oaW1nKSB7CisgICAgdmFyIGFscGhhLCBjYW52YXMs IGN0eCwgZGF0YSwgZXksIGloLCBpdywgcHksIHJhdGlvLCBzeTsKKyAgICBp dyA9IGltZy5uYXR1cmFsV2lkdGg7CisgICAgaWggPSBpbWcubmF0dXJhbEhl aWdodDsKKyAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJj YW52YXMiKTsKKyAgICBjYW52YXMud2lkdGggPSAxOworICAgIGNhbnZhcy5o ZWlnaHQgPSBpaDsKKyAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQi KTsKKyAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7CisgICAgZGF0YSA9 IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgMSwgaWgpLmRhdGE7CisgICAgc3kg PSAwOworICAgIGV5ID0gaWg7CisgICAgcHkgPSBpaDsKKyAgICB3aGlsZSAo cHkgPiBzeSkgeworICAgICAgYWxwaGEgPSBkYXRhWyhweSAtIDEpICogNCAr IDNdOworICAgICAgaWYgKGFscGhhID09PSAwKSB7CisgICAgICAgIGV5ID0g cHk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzeSA9IHB5OworICAgICAg fQorICAgICAgcHkgPSAoZXkgKyBzeSkgPj4gMTsKKyAgICB9CisgICAgcmF0 aW8gPSBweSAvIGloOworICAgIGlmIChyYXRpbyA9PT0gMCkgeworICAgICAg cmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiByYXRpbzsK KyAgICB9CisgIH07CisKKyAgZHJhd0ltYWdlSU9TRml4ID0gZnVuY3Rpb24o Y3R4LCBpbWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkgewor ICAgIHZhciB2ZXJ0U3F1YXNoUmF0aW87CisgICAgdmVydFNxdWFzaFJhdGlv ID0gZGV0ZWN0VmVydGljYWxTcXVhc2goaW1nKTsKKyAgICByZXR1cm4gY3R4 LmRyYXdJbWFnZShpbWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBk aCAvIHZlcnRTcXVhc2hSYXRpbyk7CisgIH07CisKKworICAvKgorICAgKiBj b250ZW50bG9hZGVkLmpzCisgICAqCisgICAqIEF1dGhvcjogRGllZ28gUGVy aW5pIChkaWVnby5wZXJpbmkgYXQgZ21haWwuY29tKQorICAgKiBTdW1tYXJ5 OiBjcm9zcy1icm93c2VyIHdyYXBwZXIgZm9yIERPTUNvbnRlbnRMb2FkZWQK KyAgICogVXBkYXRlZDogMjAxMDEwMjAKKyAgICogTGljZW5zZTogTUlUCisg ICAqIFZlcnNpb246IDEuMgorICAgKgorICAgKiBVUkw6CisgICAqIGh0dHA6 Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9Db250ZW50TG9hZGVkLworICAgKiBo dHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vQ29udGVudExvYWRlZC9NSVQt TElDRU5TRQorICAgKi8KKworICBjb250ZW50TG9hZGVkID0gZnVuY3Rpb24o d2luLCBmbikgeworICAgIHZhciBhZGQsIGRvYywgZG9uZSwgaW5pdCwgcG9s bCwgcHJlLCByZW0sIHJvb3QsIHRvcDsKKyAgICBkb25lID0gZmFsc2U7Cisg ICAgdG9wID0gdHJ1ZTsKKyAgICBkb2MgPSB3aW4uZG9jdW1lbnQ7CisgICAg cm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAgYWRkID0gKGRvYy5h ZGRFdmVudExpc3RlbmVyID8gImFkZEV2ZW50TGlzdGVuZXIiIDogImF0dGFj aEV2ZW50Iik7CisgICAgcmVtID0gKGRvYy5hZGRFdmVudExpc3RlbmVyID8g InJlbW92ZUV2ZW50TGlzdGVuZXIiIDogImRldGFjaEV2ZW50Iik7CisgICAg cHJlID0gKGRvYy5hZGRFdmVudExpc3RlbmVyID8gIiIgOiAib24iKTsKKyAg ICBpbml0ID0gZnVuY3Rpb24oZSkgeworICAgICAgaWYgKGUudHlwZSA9PT0g InJlYWR5c3RhdGVjaGFuZ2UiICYmIGRvYy5yZWFkeVN0YXRlICE9PSAiY29t cGxldGUiKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIChl LnR5cGUgPT09ICJsb2FkIiA/IHdpbiA6IGRvYylbcmVtXShwcmUgKyBlLnR5 cGUsIGluaXQsIGZhbHNlKTsKKyAgICAgIGlmICghZG9uZSAmJiAoZG9uZSA9 IHRydWUpKSB7CisgICAgICAgIHJldHVybiBmbi5jYWxsKHdpbiwgZS50eXBl IHx8IGUpOworICAgICAgfQorICAgIH07CisgICAgcG9sbCA9IGZ1bmN0aW9u KCkgeworICAgICAgdmFyIGU7CisgICAgICB0cnkgeworICAgICAgICByb290 LmRvU2Nyb2xsKCJsZWZ0Iik7CisgICAgICB9IGNhdGNoIChfZXJyb3IpIHsK KyAgICAgICAgZSA9IF9lcnJvcjsKKyAgICAgICAgc2V0VGltZW91dChwb2xs LCA1MCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHJldHVy biBpbml0KCJwb2xsIik7CisgICAgfTsKKyAgICBpZiAoZG9jLnJlYWR5U3Rh dGUgIT09ICJjb21wbGV0ZSIpIHsKKyAgICAgIGlmIChkb2MuY3JlYXRlRXZl bnRPYmplY3QgJiYgcm9vdC5kb1Njcm9sbCkgeworICAgICAgICB0cnkgewor ICAgICAgICAgIHRvcCA9ICF3aW4uZnJhbWVFbGVtZW50OworICAgICAgICB9 IGNhdGNoIChfZXJyb3IpIHt9CisgICAgICAgIGlmICh0b3ApIHsKKyAgICAg ICAgICBwb2xsKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGRvY1th ZGRdKHByZSArICJET01Db250ZW50TG9hZGVkIiwgaW5pdCwgZmFsc2UpOwor ICAgICAgZG9jW2FkZF0ocHJlICsgInJlYWR5c3RhdGVjaGFuZ2UiLCBpbml0 LCBmYWxzZSk7CisgICAgICByZXR1cm4gd2luW2FkZF0ocHJlICsgImxvYWQi LCBpbml0LCBmYWxzZSk7CisgICAgfQorICB9OworCisgIERyb3B6b25lLl9h dXRvRGlzY292ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIGlmIChE cm9wem9uZS5hdXRvRGlzY292ZXIpIHsKKyAgICAgIHJldHVybiBEcm9wem9u ZS5kaXNjb3ZlcigpOworICAgIH0KKyAgfTsKKworICBjb250ZW50TG9hZGVk KHdpbmRvdywgRHJvcHpvbmUuX2F1dG9EaXNjb3ZlckZ1bmN0aW9uKTsKKwor fSkuY2FsbCh0aGlzKTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3RlbXBs YXRlcy9iYXNlLmh0bWwgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvYmFzZS5o dG1sCmluZGV4IGNkMWQ4NDIuLjQ1ZjRiOGYgMTAwNzU1Ci0tLSBhL3dlYi9w Z2FkbWluL3RlbXBsYXRlcy9iYXNlLmh0bWwKKysrIGIvd2ViL3BnYWRtaW4v dGVtcGxhdGVzL2Jhc2UuaHRtbApAQCAtMjgsNiArMjgsNyBAQAogICAgICAg ICA8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVm PSJ7eyB1cmxfZm9yKCdzdGF0aWMnLCBmaWxlbmFtZT0nY3NzL2JhY2tncmlk L2JhY2tncmlkLXBhZ2luYXRvci5jc3MnIGlmIGNvbmZpZy5ERUJVRyBlbHNl ICdjc3MvYmFja2dyaWQvYmFja2dyaWQtcGFnaW5hdG9yLm1pbi5jc3MnKX19 Ii8+CiAgICAgICAgIDxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxl c2hlZXQiIGhyZWY9Int7IHVybF9mb3IoJ3N0YXRpYycsIGZpbGVuYW1lPSdj c3MvYmFja2dyaWQvYmFja2dyaWQtZmlsdGVyLmNzcycgaWYgY29uZmlnLkRF QlVHIGVsc2UgJ2Nzcy9iYWNrZ3JpZC9iYWNrZ3JpZC1maWx0ZXIubWluLmNz cycpfX0iLz4KICAgICAgICAgPGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0i c3R5bGVzaGVldCIgaHJlZj0ie3sgdXJsX2Zvcignc3RhdGljJywgZmlsZW5h bWU9J2Nzcy9zZWxlY3QyL3NlbGVjdDIuY3NzJyBpZiBjb25maWcuREVCVUcg ZWxzZSAnY3NzL3NlbGVjdDIvc2VsZWN0Mi5taW4uY3NzJyl9fSIvPgorICAg ICAgICA8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBo cmVmPSJ7eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuc3RhdGljJywgZmlsZW5h bWU9J2Nzcy9maWxlX21hbmFnZXIuY3NzJykgfX0iPgogCiAgICAgICAgIDwh LS0gVmlldyBzcGVjaWZpZWQgc3R5bGVzaGVldHMgLS0+CiAgICAgICAgIHsl IGZvciBzdHlsZXNoZWV0IGluIGN1cnJlbnRfYXBwLnN0eWxlc2hlZXRzICV9 Cg== --001a114b6a7e3b4471053280e588 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 --001a114b6a7e3b4471053280e588--