<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>208726</bug_id>
          
          <creation_ts>2020-03-06 11:39:32 -0800</creation_ts>
          <short_desc>Add script to search for feature defines</short_desc>
          <delta_ts>2020-03-10 09:18:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Don Olmstead">don.olmstead</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1626770</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-03-06 11:39:32 -0800</bug_when>
    <thetext>Its hard to keep the FeatureDefines.xcconfig, WebKitFeatures.cmake and FeatureList.pm synced between the different build systems. ENABLE flags are sometimes removed or added without making sure the usages in build files are modified accordingly. Add a script that allows you to search for these usages in build and source code so they can be added or removed accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626821</commentid>
    <comment_count>1</comment_count>
      <attachid>392760</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-03-06 12:54:47 -0800</bug_when>
    <thetext>Created attachment 392760
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626829</commentid>
    <comment_count>2</comment_count>
      <attachid>392760</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-03-06 13:06:29 -0800</bug_when>
    <thetext>Comment on attachment 392760
WIP Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=392760&amp;action=review

&gt; Tools/Scripts/find-feature-flags.py:1
&gt; +#!/usr/bin/env python

This should be Tools/Scripts/find-feature-flags</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626851</commentid>
    <comment_count>3</comment_count>
      <attachid>392760</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-03-06 13:47:18 -0800</bug_when>
    <thetext>Comment on attachment 392760
WIP Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=392760&amp;action=review

&gt; Tools/Scripts/find-feature-flags.py:37
&gt; +_ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), &quot;..&quot;, &quot;..&quot;))

Since this is in Tools/Scripts, not much of a reason to mark things with _ in this file. We usually do that to indicate a variable should be considered private.

&gt; Tools/Scripts/find-feature-flags.py:67
&gt; +    parser.add_argument(&apos;find&apos;, help=&apos;the code to search&apos;, choices=_CHOICES, nargs=&apos;*&apos;)

The help could be better. Maybe something like&apos;The type of configuration file or code to search for feature flags in&apos;

&gt; Tools/Scripts/find-feature-flags.py:68
&gt; +    parser.add_argument(&apos;--diff&apos;, choices=_CHOICES, action=&apos;append&apos;)

In my experience, we sort of need to baby people with more powerful options like this, otherwise they will never get used. This deserves a help string.

&gt; Tools/Scripts/webkitpy/featuredefines/matcher.py:30
&gt; +@total_ordering

I&apos;m pretty sure this working in Python 2 and 3, but could you run this script in both to be certain?

&gt; Tools/Scripts/webkitpy/featuredefines/matcher.py:87
&gt; +def usage_matcher(macro=&apos;ENABLE&apos;):

I tend to dislike free functions in Python, these, in particular, seem to be good @classmethods for FeatureDefineMatcher (maybe just renamed to Matcher since the import path makes it clear?)

&gt; Tools/Scripts/webkitpy/featuredefines/matcher_unittest.py:1
&gt; +# Copyright (C) 2020 Sony Interactive Entertainment

You need an __init__.py in featuredefines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627863</commentid>
    <comment_count>4</comment_count>
      <attachid>393059</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-03-09 11:38:59 -0700</bug_when>
    <thetext>Created attachment 393059
WIP Patch

Updating with feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628086</commentid>
    <comment_count>5</comment_count>
      <attachid>393111</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-03-09 19:46:36 -0700</bug_when>
    <thetext>Created attachment 393111
WIP Patch

Fix some issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628260</commentid>
    <comment_count>6</comment_count>
      <attachid>393111</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-03-10 08:27:45 -0700</bug_when>
    <thetext>Comment on attachment 393111
WIP Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=393111&amp;action=review

&gt; Tools/Scripts/find-feature-defines:1
&gt; +#!/usr/bin/env python

Make this script executable.

&gt; Tools/Scripts/find-feature-defines:33
&gt; +_DESCRIPTION = &apos;&apos;&apos;

Make sure that we have a description before landing.

&gt; Tools/Scripts/find-feature-defines:37
&gt; +_ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), &quot;..&quot;, &quot;..&quot;))

We usually don&apos;t use underscored variables in the script itself since underscores mark a variable as private and we wouldn&apos;t be importing from a script anyways.

&gt; Tools/Scripts/find-feature-defines:72
&gt; +    parser.add_argument(&apos;--diff&apos;, choices=_CHOICES, action=&apos;append&apos;)

This need a better description</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392760</attachid>
            <date>2020-03-06 12:54:47 -0800</date>
            <delta_ts>2020-03-09 11:38:59 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-208726.diff</filename>
            <type>text/plain</type>
            <size>22019</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZmluZC1mZWF0dXJlLWZsYWdzLnB5IGIvVG9vbHMv
U2NyaXB0cy9maW5kLWZlYXR1cmUtZmxhZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4wNGY1MjlhOTYwODgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL2ZpbmQtZmVhdHVyZS1mbGFncy5weQpAQCAtMCwwICsxLDEyNCBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsIHRoaXMKKyMgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICAgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbgorIyAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Citmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBhcmdwYXJz
ZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCB3ZWJraXRweS5mZWF0dXJlZGVmaW5l
cy5zZWFyY2ggYXMgc2VhcmNoCisKK19ERVNDUklQVElPTiA9ICcnJworCisnJycKKworX1JPT1Qg
PSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18p
LCAiLi4iLCAiLi4iKSkKKworX0NIT0lDRVMgPSBbCisgICAgJ2RlZmluZXMnLAorICAgICdwbGF0
Zm9ybScsCisgICAgJ3BlcmwnLAorICAgICdjbWFrZScsCisgICAgJ3hjb2RlJywKKyAgICAnY29k
ZScsCisgICAgJ25hdGl2ZS1jb2RlJywKKyAgICAnY21ha2UtY29kZScsCisgICAgJ2lkbC1jb2Rl
JywKK10KKworZGVmIF9zZWFyY2hfd2l0aChjaG9pY2UpOgorICAgIG1hcHBpbmcgPSB7CisgICAg
ICAgICdwbGF0Zm9ybSc6IHNlYXJjaC5wbGF0Zm9ybV9kZWZpbmVzLAorICAgICAgICAncGVybCc6
IHNlYXJjaC5wZXJsX2RlZmluZXMsCisgICAgICAgICdjbWFrZSc6IHNlYXJjaC5jbWFrZV9kZWZp
bmVzLAorICAgICAgICAneGNvZGUnOiBzZWFyY2gueGNvZGVfZGVmaW5lcywKKyAgICAgICAgJ25h
dGl2ZS1jb2RlJzogc2VhcmNoLm5hdGl2ZV9jb2RlLAorICAgICAgICAnY21ha2UtY29kZSc6IHNl
YXJjaC5jbWFrZV9jb2RlLAorICAgICAgICAnaWRsLWNvZGUnOiBzZWFyY2guaWRsX2NvZGUsCisg
ICAgfQorCisgICAgcmV0dXJuIG1hcHBpbmdbY2hvaWNlXSgpCisKKworZGVmIF9wYXJzZV9hcmdz
KGFyZ3YpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9u
PV9ERVNDUklQVElPTiwgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVs
cEZvcm1hdHRlcikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaW5kJywgaGVscD0ndGhlIGNv
ZGUgdG8gc2VhcmNoJywgY2hvaWNlcz1fQ0hPSUNFUywgbmFyZ3M9JyonKQorICAgIHBhcnNlci5h
ZGRfYXJndW1lbnQoJy0tZGlmZicsIGNob2ljZXM9X0NIT0lDRVMsIGFjdGlvbj0nYXBwZW5kJykK
KyAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworCitkZWYgX2Nob2ljZV9zZXQo
Y2hvaWNlcyk6CisgICAgY2hvaWNlc19zZXQgPSBzZXQoY2hvaWNlcykKKworICAgIGlmICdkZWZp
bmVzJyBpbiBjaG9pY2VzX3NldDoKKyAgICAgICAgY2hvaWNlc19zZXQucmVtb3ZlKCdkZWZpbmVz
JykKKworICAgICAgICBjaG9pY2VzX3NldC51cGRhdGUoWydwbGF0Zm9ybScsICdwZXJsJywgJ2Nt
YWtlJywgJ3hjb2RlJ10pCisKKyAgICBpZiAnY29kZScgaW4gY2hvaWNlc19zZXQ6CisgICAgICAg
IGNob2ljZXNfc2V0LnJlbW92ZSgnY29kZScpCisKKyAgICAgICAgY2hvaWNlc19zZXQudXBkYXRl
KFsnbmF0aXZlLWNvZGUnLCAnY21ha2UtY29kZScsICdpZGwtY29kZSddKQorCisgICAgcmV0dXJu
IGNob2ljZXNfc2V0CisKK2RlZiBfc2VhcmNoX2ZvcihjaG9pY2VzKToKKyAgICBmb3VuZCA9IHNl
dCgpCisKKyAgICBmb3IgY2hvaWNlIGluIF9jaG9pY2Vfc2V0KGNob2ljZXMpOgorICAgICAgICBz
ZWFyY2hfd2l0aCA9IF9zZWFyY2hfd2l0aChjaG9pY2UpCisgICAgICAgIHNlYXJjaF93aXRoLnNl
YXJjaChfUk9PVCkKKyAgICAgICAgZm91bmQudXBkYXRlKHNlYXJjaF93aXRoLmRlZmluaXRpb25z
KCkpCisKKyAgICByZXR1cm4gZm91bmQKKworCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIGFyZ3Mg
PSBfcGFyc2VfYXJncyhhcmd2KQorCisgICAgZmluZF9kZWZpbmVzID0gX3NlYXJjaF9mb3IoYXJn
cy5maW5kKQorCisgICAgaWYgYXJncy5kaWZmOgorICAgICAgICBkaWZmX2RlZmluZXMgPSBfc2Vh
cmNoX2ZvcihhcmdzLmRpZmYpCisKKyAgICAgICAgb25seV9maW5kID0gZmluZF9kZWZpbmVzLmRp
ZmZlcmVuY2UoZGlmZl9kZWZpbmVzKQorCisgICAgICAgIHByaW50KCdPbmx5IGluIFNvdXJjZSAo
JyArICcsJy5qb2luKGFyZ3MuZmluZCkgKyAnKScpCisgICAgICAgIGZvciBpdGVtIGluIHNvcnRl
ZChvbmx5X2ZpbmQpOgorICAgICAgICAgICAgcHJpbnQoaXRlbS5mbGFnKQorCisgICAgICAgIG9u
bHlfZGlmZiA9IGRpZmZfZGVmaW5lcy5kaWZmZXJlbmNlKGZpbmRfZGVmaW5lcykKKworICAgICAg
ICBwcmludCgnT25seSBpbiBEaWZmICgnICsgJywnLmpvaW4oYXJncy5kaWZmKSArICcpJykKKyAg
ICAgICAgZm9yIGl0ZW0gaW4gc29ydGVkKG9ubHlfZGlmZik6CisgICAgICAgICAgICBwcmludChp
dGVtLmZsYWcpCisgICAgZWxzZToKKyAgICAgICAgZm9yIGl0ZW0gaW4gc29ydGVkKGZpbmRfZGVm
aW5lcyk6CisgICAgICAgICAgICBwcmludChpdGVtLmZsYWcpCisKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICBtYWluKHN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMvbWF0Y2hlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvZmVhdHVyZWRlZmluZXMvbWF0Y2hlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjBjOWZiZGY0YzBmYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMvbWF0Y2hlci5weQpAQCAtMCwwICsxLDEy
MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzCisjICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMg
ICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiTWF0
Y2hlcyBmZWF0dXJlIGRlZmluZXMgaW4gc291cmNlIGNvZGUuIiIiCisKK2ltcG9ydCByZQorCitm
cm9tIGZ1bmN0b29scyBpbXBvcnQgdG90YWxfb3JkZXJpbmcKKworCitAdG90YWxfb3JkZXJpbmcK
K2NsYXNzIEZlYXR1cmVEZWZpbmU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZsYWcsIHZhbHVl
PUZhbHNlLCBkZXNjcmlwdGlvbj0iIiwgZmlsZXM9Tm9uZSk6CisgICAgICAgIHNlbGYuZmxhZyA9
IGZsYWcKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuZGVzY3JpcHRp
b24gPSBkZXNjcmlwdGlvbgorCisgICAgICAgIHNlbGYuZmlsZXMgPSBmaWxlcyBpZiBmaWxlcyBl
bHNlIHNldCgpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNo
KHNlbGYuZmxhZykKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBp
c2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5mbGFnID09IG90aGVyLmZsYWcKKworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKwor
ICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVy
LCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mbGFnIDwgb3RoZXIu
ZmxhZworCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIGpvaW4oc2Vs
Ziwgb3RoZXIpOgorICAgICAgICBzZWxmLnZhbHVlID0gc2VsZi52YWx1ZSBvciBvdGhlci52YWx1
ZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gc2VsZi5kZXNjcmlwdGlvbiBpZiBzZWxmLmRl
c2NyaXB0aW9uIGVsc2Ugb3RoZXIuZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5maWxlcy51cGRh
dGUob3RoZXIuZmlsZXMpCisKKworY2xhc3MgX0ZlYXR1cmVEZWZpbmVNYXRjaGVyOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwYXR0ZXJuLCBwcmVmaXg9JycpOgorICAgICAgICBzZWxmLl9yZWdl
eCA9IHJlLmNvbXBpbGUocGF0dGVybikKKyAgICAgICAgc2VsZi5fcHJlZml4ID0gcHJlZml4CisK
KyAgICBkZWYgc2VhcmNoKHNlbGYsIGxpbmUpOgorICAgICAgICBtYXRjaCA9IHNlbGYuX3JlZ2V4
LnNlYXJjaChsaW5lKQorCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnZlcnQobWF0Y2gpCisKKyAgICBkZWYg
ZmluZGl0ZXIoc2VsZiwgbGluZSk6CisgICAgICAgIGZvciBtYXRjaCBpbiBzZWxmLl9yZWdleC5m
aW5kaXRlcihsaW5lKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX2NvbnZlcnQobWF0Y2gpCisK
KyAgICBkZWYgX2NvbnZlcnQoc2VsZiwgbWF0Y2gpOgorICAgICAgICBncm91cHMgPSBtYXRjaC5n
cm91cGRpY3QoKQorCisgICAgICAgIGZsYWcgPSBzZWxmLl9wcmVmaXggKyBncm91cHNbJ2ZsYWcn
XQorICAgICAgICBkZXNjcmlwdGlvbiA9IGdyb3Vwcy5nZXQoJ2Rlc2NyaXB0aW9uJywgJycpCisg
ICAgICAgIHZhbHVlID0gZ3JvdXBzLmdldCgndmFsdWUnLCAnJykgaW4gWycxJywgJ09OJ10KKwor
ICAgICAgICByZXR1cm4gRmVhdHVyZURlZmluZShmbGFnLCB2YWx1ZT12YWx1ZSwgZGVzY3JpcHRp
b249ZGVzY3JpcHRpb24pCisKKworZGVmIHVzYWdlX21hdGNoZXIobWFjcm89J0VOQUJMRScpOgor
ICAgIHBhdHRlcm4gPSBtYWNybyArIHInXCgoP1A8ZmxhZz5bMC05QS1aX10rKVwpJworICAgIHBy
ZWZpeCA9IG1hY3JvICsgJ18nCisKKyAgICByZXR1cm4gX0ZlYXR1cmVEZWZpbmVNYXRjaGVyKHBh
dHRlcm4sIHByZWZpeD1wcmVmaXgpCisKKworZGVmIGZsYWdfbWF0Y2hlcihtYWNybz0nRU5BQkxF
Jyk6CisgICAgcGF0dGVybiA9IHInKD9QPGZsYWc+JyArIG1hY3JvICsgcidfWzAtOUEtWl9dKykn
CisKKyAgICByZXR1cm4gX0ZlYXR1cmVEZWZpbmVNYXRjaGVyKHBhdHRlcm4pCisKKworZGVmIGRl
Y2xhcmF0aW9uX21hdGNoZXIobWFjcm89J0VOQUJMRScpOgorICAgIHBhdHRlcm4gPSByJyNkZWZp
bmUgKD9QPGZsYWc+JyArIG1hY3JvICsgcidfWzAtOUEtWl9dKykgKD9QPHZhbHVlPlswLDFdKScK
KworICAgIHJldHVybiBfRmVhdHVyZURlZmluZU1hdGNoZXIocGF0dGVybikKKworCitkZWYgaWRs
X3VzYWdlX21hdGNoZXIoKToKKyAgICBwYXR0ZXJuID0gcidDb25kaXRpb25hbD0oP1A8ZmxhZz5b
MC05QS1aX10rKScKKworICAgIHJldHVybiBfRmVhdHVyZURlZmluZU1hdGNoZXIocGF0dGVybiwg
cHJlZml4PSdFTkFCTEVfJykKKworCitkZWYgeGNvZGVfbWF0Y2hlcigpOgorICAgIHBhdHRlcm4g
PSByJ1xBKD9QPGZsYWc+RU5BQkxFXyg/IVtBLVowLTlfXStfU0lOQ0VfKVtBLVowLTlfXSsoPzwh
X1lFUykpID0nCisKKyAgICByZXR1cm4gX0ZlYXR1cmVEZWZpbmVNYXRjaGVyKHBhdHRlcm4pCisK
KworZGVmIGNtYWtlX29wdGlvbnNfbWF0Y2hlcihtYWNybz0nRU5BQkxFJyk6CisgICAgcGF0dGVy
biA9IHInV0VCS0lUX09QVElPTl9ERUZJTkVcKCg/UDxmbGFnPicgKyBtYWNybyArIHInX1swLTlB
LVpfXSspICIoP1A8ZGVzY3JpcHRpb24+LiopIiBQUklWQVRFICg/UDx2YWx1ZT4uKilcKScKKwor
ICAgIHJldHVybiBfRmVhdHVyZURlZmluZU1hdGNoZXIocGF0dGVybikKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMvbWF0Y2hlcl91bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMvbWF0Y2hlcl91bml0dGVzdC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjlmMTY1N2JmNDI0Ywot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMv
bWF0Y2hlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDE3NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50CisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisjICAgIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCisjICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICAgYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGVzdHMgZm9yIG1hdGNoZXIucHkuIiIiCisK
K2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IHVuaXR0ZXN0
CisKK2ltcG9ydCB3ZWJraXRweS5mZWF0dXJlZGVmaW5lcy5tYXRjaGVyIGFzIG0KKworCitjbGFz
cyBUZXN0RmVhdHVyZURlZmluZU1hdGNoZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0
ZXN0X3VzYWdlX21hdGNoZXIoc2VsZik6CisgICAgICAgIG1hdGNoZXIgPSBtLnVzYWdlX21hdGNo
ZXIoKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PJykK
KyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgRU5BQkxFX0ZPTyAx
JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1tDb25kaXRpb25hbD1GT09d
JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08gPScpCisg
ICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdXRUJLSVRfT1BUSU9OX0RFRklORShF
TkFCTEVfRk9PICJJbmZvIiBQUklWQVRFIE9OKScpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0
Y2gobWF0Y2hlciwgJ1VTRShGT08pJykKKworICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNo
ZXIsICdFTkFCTEUoRk9PKScsICdFTkFCTEVfRk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRj
aChtYXRjaGVyLCAnRU5BQkxFKEJBUiknLCAnRU5BQkxFX0JBUicpCisKKyAgICAgICAgIyBUZXN0
IHdpdGggZGlmZmVyZW50IHByZWZpeAorICAgICAgICBtYXRjaGVyID0gbS51c2FnZV9tYXRjaGVy
KCdVU0UnKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEUoRk9P
KScpCisKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnVVNFKEZPTyknLCAnVVNF
X0ZPTycpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ1VTRShCQVIpJywgJ1VT
RV9CQVInKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfdXNhZ2VfbWF0Y2hlcihzZWxmKToKKyAg
ICAgICAgbWF0Y2hlciA9IG0udXNhZ2VfbWF0Y2hlcigpCisKKyAgICAgICAgbWF0Y2hlcyA9IGxp
c3QobWF0Y2hlci5maW5kaXRlcignI2lmIEVOQUJMRShGT08pICYmIEVOQUJMRShCQVIpJykpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWF0Y2hlcyksIDIpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobWF0Y2hlc1swXS5mbGFnLCAnRU5BQkxFX0ZPTycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobWF0Y2hlc1sxXS5mbGFnLCAnRU5BQkxFX0JBUicpCisKKyAgICBkZWYgdGVz
dF9kZWNsYXJhdGlvbl9tYXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gbS5kZWNsYXJh
dGlvbl9tYXRjaGVyKCkKKworICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5B
QkxFKEZPTyknKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxFX0ZP
TycpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdbQ29uZGl0aW9uYWw9Rk9P
XScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PID0nKQor
ICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09QVElPTl9ERUZJTkUo
RU5BQkxFX0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknKQorCisgICAgICAgIHNlbGYuX25vdF9hX21h
dGNoKG1hdGNoZXIsICcjZGVmaW5lIFVTRV9GT08gMScpCisKKyAgICAgICAgc2VsZi5faXNfYV9t
YXRjaChtYXRjaGVyLCAnI2RlZmluZSBFTkFCTEVfRk9PIDEnLCAnRU5BQkxFX0ZPTycsIHZhbHVl
PVRydWUpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgRU5BQkxF
X0JBUiAwJywgJ0VOQUJMRV9CQVInLCB2YWx1ZT1GYWxzZSkKKworICAgICAgICAjIFRlc3Qgd2l0
aCBkaWZmZXJlbnQgcHJlZml4CisgICAgICAgIG1hdGNoZXIgPSBtLmRlY2xhcmF0aW9uX21hdGNo
ZXIoJ1VTRScpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUg
RU5BQkxFX0ZPTyAxJykKKworICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICcjZGVm
aW5lIFVTRV9GT08gMScsICdVU0VfRk9PJywgdmFsdWU9VHJ1ZSkKKyAgICAgICAgc2VsZi5faXNf
YV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBVU0VfQkFSIDAnLCAnVVNFX0JBUicsIHZhbHVlPUZh
bHNlKQorCisgICAgZGVmIHRlc3RfZmxhZ19tYXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVy
ID0gbS5mbGFnX21hdGNoZXIoKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIs
ICdFTkFCTEUoRk9PKScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdbQ29u
ZGl0aW9uYWw9Rk9PXScpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1VT
RV9GT08nKQorCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08n
LCAnRU5BQkxFX0ZPTycpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJM
RV9CQVInLCAnRU5BQkxFX0JBUicpCisKKyAgICAgICAgIyBTdGlsbCB3b3VsZCBtYXRjaCB0aGVz
ZQorICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICcjZGVmaW5lIEVOQUJMRV9GT08g
MScsICdFTkFCTEVfRk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnRU5B
QkxFX0ZPTyA9JywgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNo
ZXIsICdXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfRk9PICJJbmZvIiBQUklWQVRFIE9OKScs
ICdFTkFCTEVfRk9PJykKKworICAgICAgICAjIFRlc3Qgd2l0aCBkaWZmZXJlbnQgcHJlZml4Cisg
ICAgICAgIG1hdGNoZXIgPSBtLmZsYWdfbWF0Y2hlcignVVNFJykKKworICAgICAgICBzZWxmLl9u
b3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxFX0ZPTycpCisKKyAgICAgICAgc2VsZi5faXNfYV9t
YXRjaChtYXRjaGVyLCAnVVNFX0ZPTycsICdVU0VfRk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9t
YXRjaChtYXRjaGVyLCAnVVNFX0JBUicsICdVU0VfQkFSJykKKworICAgIGRlZiB0ZXN0X2lkbF9t
YXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gbS5pZGxfdXNhZ2VfbWF0Y2hlcigpCisK
KyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRShGT08pJykKKyAgICAg
ICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxm
Ll9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBFTkFCTEVfRk9PIDEnKQorICAgICAgICBz
ZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxFX0ZPTyA9JykKKyAgICAgICAgc2VsZi5f
bm90X2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9GT08gIklu
Zm8iIFBSSVZBVEUgT04pJykKKworICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdb
Q29uZGl0aW9uYWw9Rk9PXScsICdFTkFCTEVfRk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRj
aChtYXRjaGVyLCAnW0NvbmRpdGlvbmFsPUJBUl0nLCAnRU5BQkxFX0JBUicpCisKKyAgICBkZWYg
dGVzdF9jbWFrZV9vcHRpb25zX21hdGNoZXIoc2VsZik6CisgICAgICAgIG1hdGNoZXIgPSBtLmNt
YWtlX29wdGlvbnNfbWF0Y2hlcigpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hl
ciwgJ0VOQUJMRShGT08pJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VO
QUJMRV9GT08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBF
TkFCTEVfRk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxF
X0ZPTyA9JykKKworICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09Q
VElPTl9ERUZJTkUoVVNFX0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknKQorCisgICAgICAgIHNlbGYu
X2lzX2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9GT08gIklu
Zm8iIFBSSVZBVEUgT04pJywgJ0VOQUJMRV9GT08nLCB2YWx1ZT1UcnVlLCBkZXNjcmlwdGlvbj0n
SW5mbycpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJT05f
REVGSU5FKEVOQUJMRV9CQVIgIk1lc2ciIFBSSVZBVEUgT0ZGKScsICdFTkFCTEVfQkFSJywgdmFs
dWU9RmFsc2UsIGRlc2NyaXB0aW9uPSdNZXNnJykKKworICAgICAgICAjIFRlc3Qgd2l0aCBkaWZm
ZXJlbnQgcHJlZml4CisgICAgICAgIG1hdGNoZXIgPSBtLmNtYWtlX29wdGlvbnNfbWF0Y2hlcign
VVNFJykKKworICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknKQorCisgICAgICAgIHNlbGYu
X2lzX2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJT05fREVGSU5FKFVTRV9GT08gIkluZm8i
IFBSSVZBVEUgT04pJywgJ1VTRV9GT08nLCB2YWx1ZT1UcnVlLCBkZXNjcmlwdGlvbj0nSW5mbycp
CisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJT05fREVGSU5F
KFVTRV9CQVIgIk1lc2ciIFBSSVZBVEUgT0ZGKScsICdVU0VfQkFSJywgdmFsdWU9RmFsc2UsIGRl
c2NyaXB0aW9uPSdNZXNnJykKKworICAgIGRlZiB0ZXN0X3hjb2RlX29wdGlvbnNfbWF0Y2hlcihz
ZWxmKToKKyAgICAgICAgbWF0Y2hlciA9IG0ueGNvZGVfbWF0Y2hlcigpCisKKyAgICAgICAgc2Vs
Zi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRShGT08pJykKKyAgICAgICAgc2VsZi5fbm90
X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRj
aChtYXRjaGVyLCAnI2RlZmluZSBFTkFCTEVfRk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9t
YXRjaChtYXRjaGVyLCAnW0NvbmRpdGlvbmFsPUZPT10nKQorICAgICAgICBzZWxmLl9ub3RfYV9t
YXRjaChtYXRjaGVyLCAnV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX0ZPTyAiSW5mbyIgUFJJ
VkFURSBPTiknKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVf
RVhQRVJJTUVOVEFMX0ZFQVRVUkVTX1lFUyA9JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2go
bWF0Y2hlciwgJ0VOQUJMRV9GT09fSU9TX1NJTkNFXzE5MDkgPScpCisgICAgICAgIHNlbGYuX25v
dF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PX2lvc3NpbXVsYXRvciA9JykKKyAgICAgICAg
c2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9QT0lOVEVSX0VWRU5UU193YXRjaHNp
bXVsYXRvcltzZGs9d2F0Y2gqNS4qXScpCisgICAgICAgIAorICAgICAgICBzZWxmLl9pc19hX21h
dGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PID0nLCAnRU5BQkxFX0ZPTycpCisgICAgICAgIHNlbGYu
X2lzX2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9CQVIgPScsICdFTkFCTEVfQkFSJykKKyAgICAg
ICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJF
UyA9JywgJ0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVMnKQorCisgICAgZGVmIF9ub3RfYV9t
YXRjaChzZWxmLCBtYXRjaGVyLCBsaW5lKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWF0
Y2hlci5zZWFyY2gobGluZSkpCisKKyAgICBkZWYgX2lzX2FfbWF0Y2goc2VsZiwgbWF0Y2hlciwg
bGluZSwgZmxhZywgdmFsdWU9RmFsc2UsIGRlc2NyaXB0aW9uPSIiKToKKyAgICAgICAgbWF0Y2gg
PSBtYXRjaGVyLnNlYXJjaChsaW5lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1h
dGNoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLmZsYWcsIGZsYWcpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobWF0Y2gudmFsdWUsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG1hdGNoLmRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbikKKworCitpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9mZWF0dXJlZGVmaW5lcy9zZWFyY2gucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2ZlYXR1cmVkZWZpbmVzL3NlYXJjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjZkMTkwMjlhMzhmNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMvc2VhcmNoLnB5CkBAIC0wLDAgKzEsMTU5IEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQKKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMKKyMgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyAgICBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAnQVMgSVMnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIidTZWFyY2hl
cyBmaWxlcyBmb3IgZmVhdHVyZSBkZWZpbmVzLiIiJworCitpbXBvcnQgb3MKKworZnJvbSBpbyBp
bXBvcnQgb3BlbgorZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCisKK2ltcG9ydCB3ZWJraXRw
eS5mZWF0dXJlZGVmaW5lcy5tYXRjaGVyIGFzIG0KKworCitjbGFzcyBGZWF0dXJlRGVmaW5lc1Nl
YXJjaCgpOgorICAgICIiIlNlYXJjaGVzIGZvciBmZWF0dXJlIGRlZmluZXMgaW4gV2ViS2l0IHNv
dXJjZSBjb2RlLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXRjaGVyLCBkaXJlY3Rvcmll
cz1Ob25lLCBmaWxlcz1Ob25lLCBpbmNsdWRlPU5vbmUsIGV4Y2x1ZGU9Tm9uZSk6CisgICAgICAg
IHNlbGYuX2RlZmluZXMgPSB7fQorICAgICAgICBzZWxmLl9tYXRjaGVyID0gbWF0Y2hlcgorICAg
ICAgICBzZWxmLl9kaXJlY3RvcmllcyA9IGRpcmVjdG9yaWVzIGlmIGRpcmVjdG9yaWVzIGVsc2Ug
W10KKyAgICAgICAgc2VsZi5fZmlsZXMgPSBmaWxlcyBpZiBmaWxlcyBlbHNlIFtdCisgICAgICAg
IHNlbGYuX2luY2x1ZGUgPSBpbmNsdWRlIGlmIGluY2x1ZGUgZWxzZSBbXQorICAgICAgICBzZWxm
Ll9leGNsdWRlID0gZXhjbHVkZSBpZiBleGNsdWRlIGVsc2UgW10KKworICAgIGRlZiBkZWZpbml0
aW9ucyhzZWxmKToKKyAgICAgICAgIiIiIFJldHJpZXZlIHRoZSBkZWZpbml0aW9ucyBmcm9tIHRo
ZSBzZWFyY2ggYXMgYSBzZXQuICIiIgorICAgICAgICByZXR1cm4ge3NlbGYuX2RlZmluZXNba10g
Zm9yIGsgaW4gc2VsZi5fZGVmaW5lc30KKworICAgIGRlZiBzZWFyY2goc2VsZiwgcm9vdCk6Cisg
ICAgICAgICIiIiBTZWFyY2ggZm9yIGZlYXR1cmUgZGVmaW5lcyB3aXRoaW4gdGhlIHJvb3QgIiIi
CisgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gc2VsZi5fZGlyZWN0b3JpZXM6CisgICAgICAgICAg
ICBzZWxmLl9zZWFyY2hfZGlyZWN0b3J5KG9zLnBhdGguam9pbihyb290LCBkaXJlY3RvcnkpKQor
CisgICAgICAgIGZvciBmaWxlIGluIHNlbGYuX2ZpbGVzOgorICAgICAgICAgICAgc2VsZi5fc2Vh
cmNoX2ZpbGUob3MucGF0aC5qb2luKHJvb3QsIGZpbGUpKQorCisgICAgZGVmIF9zZWFyY2hfZGly
ZWN0b3J5KHNlbGYsIHBhdGgpOgorICAgICAgICBmb3Igcm9vdCwgX18sIGZpbGVzIGluIG9zLndh
bGsocGF0aCk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAg
ICBpZiBzZWxmLl9zaG91bGRfc2VhcmNoKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9zZWFyY2hfZmlsZShvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkpCisKKyAgICBkZWYgX3NlYXJj
aF9maWxlKHNlbGYsIHBhdGgpOgorICAgICAgICB3aXRoIG9wZW4ocGF0aCwgZW5jb2Rpbmc9J2xh
dGluLTEnKSBhcyBjb250ZW50czoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbnRlbnRzOgor
ICAgICAgICAgICAgICAgIGZvciBtYXRjaCBpbiBzZWxmLl9tYXRjaGVyLmZpbmRpdGVyKGxpbmUp
OgorICAgICAgICAgICAgICAgICAgICBmbGFnID0gbWF0Y2guZmxhZworCisgICAgICAgICAgICAg
ICAgICAgIGlmIG5vdCBmbGFnIGluIHNlbGYuX2RlZmluZXM6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9kZWZpbmVzW2ZsYWddID0gbWF0Y2gKKworICAgICAgICAgICAgICAgICAgICBz
dG9yZWQgPSBzZWxmLl9kZWZpbmVzW2ZsYWddCisgICAgICAgICAgICAgICAgICAgIHN0b3JlZC5q
b2luKG1hdGNoKQorICAgICAgICAgICAgICAgICAgICBzdG9yZWQuZmlsZXMuYWRkKHBhdGgpCisK
KyAgICBkZWYgX3Nob3VsZF9zZWFyY2goc2VsZiwgZmlsZSk6CisgICAgICAgIGZvciBwYXR0ZXJu
IGluIHNlbGYuX2V4Y2x1ZGU6CisgICAgICAgICAgICBpZiBmbm1hdGNoKGZpbGUsIHBhdHRlcm4p
OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZvciBwYXR0ZXJuIGlu
IHNlbGYuX2luY2x1ZGU6CisgICAgICAgICAgICBpZiBmbm1hdGNoKGZpbGUsIHBhdHRlcm4pOgor
ICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKwor
ZGVmIHNvdXJjZV9kaXJlY3RvcmllcygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dURicpLAorICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdX
ZWJEcml2ZXInKSwKKyAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScpLAor
ICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnKSwKKyAgICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0TGVnYWN5JyksCisgICAgICAgIG9zLnBhdGguam9pbign
U291cmNlJywgJ0phdmFTY3JpcHRDb3JlJyksCisgICAgICAgIG9zLnBhdGguam9pbignVG9vbHMn
KSwKKyAgICBdCisKKworZGVmIHBsYXRmb3JtX2RlZmluZXMoKToKKyAgICAiIiJGaW5kIGZlYXR1
cmUgZGVmaW5lcyBpbiB3dGYvUGxhdGZvcm1FbmFibGUgaGVhZGVycy4iIiIKKworICAgIGZpbGVz
ID0gWworICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXVEYnLCAnd3RmJywgJ1BsYXRm
b3JtRW5hYmxlLmgnKSwKKyAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV1RGJywgJ3d0
ZicsICdQbGF0Zm9ybUVuYWJsZUNvY29hLmgnKSwKKyAgICAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV1RGJywgJ3d0ZicsICdQbGF0Zm9ybUVuYWJsZVdpbkFwcGxlLmgnKSwKKyAgICAgICAg
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV1RGJywgJ3d0ZicsICdQbGF0Zm9ybUVuYWJsZVdpbkNh
aXJvLmgnKSwKKyAgICBdCisKKyAgICByZXR1cm4gRmVhdHVyZURlZmluZXNTZWFyY2gobS5kZWNs
YXJhdGlvbl9tYXRjaGVyKCksIGZpbGVzPWZpbGVzKQorCisKK2RlZiBwZXJsX2RlZmluZXMoKToK
KyAgICAiIiJGaW5kIGZlYXR1cmUgZGVmaW5lcyBpbiBGZWF0dXJlTGlzdC5wbS4iIiIKKworICAg
IGZpbGVzID0gWworICAgICAgICBvcy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnd2Vi
a2l0cGVybCcsICdGZWF0dXJlTGlzdC5wbScpLAorICAgIF0KKworICAgIHJldHVybiBGZWF0dXJl
RGVmaW5lc1NlYXJjaChtLmZsYWdfbWF0Y2hlcigpLCBmaWxlcz1maWxlcykKKworCitkZWYgY21h
a2VfZGVmaW5lcygpOgorICAgICIiIkZpbmQgZmVhdHVyZSBkZWZpbmVzIGluIFdlYktpdEZlYXR1
cmVzLmNtYWtlLiIiIgorCisgICAgZmlsZXMgPSBbCisgICAgICAgIG9zLnBhdGguam9pbignU291
cmNlJywgJ2NtYWtlJywgJ1dlYktpdEZlYXR1cmVzLmNtYWtlJyksCisgICAgXQorCisgICAgcmV0
dXJuIEZlYXR1cmVEZWZpbmVzU2VhcmNoKG0uY21ha2Vfb3B0aW9uc19tYXRjaGVyKCksIGZpbGVz
PWZpbGVzKQorCisKK2RlZiB4Y29kZV9kZWZpbmVzKCk6CisgICAgIiIiRmluZCBmZWF0dXJlIGRl
ZmluZXMgaW4gRmVhdHVyZURlZmluZXMueGNjb25maWcuIiIiCisKKyAgICBmaWxlcyA9IFsKKyAg
ICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQ29uZmlndXJh
dGlvbnMnLCAnRmVhdHVyZURlZmluZXMueGNjb25maWcnKSwKKyAgICBdCisKKyAgICByZXR1cm4g
RmVhdHVyZURlZmluZXNTZWFyY2gobS54Y29kZV9tYXRjaGVyKCksIGZpbGVzPWZpbGVzKQorCisK
K2RlZiBuYXRpdmVfY29kZSgpOgorICAgICIiIkZpbmQgZmVhdHVyZSBkZWZpbmVzIHVzZWQgaW4g
bmF0aXZlIHNvdXJjZSBjb2RlLiIiIgorCisgICAgaW5jbHVkZXMgPSBbJyouaCcsICcqLmMnLCAn
Ki5jcHAnLCAnKi5tbScsICcqLm1lc3NhZ2VzLmluJ10KKworICAgIHJldHVybiBGZWF0dXJlRGVm
aW5lc1NlYXJjaChtLnVzYWdlX21hdGNoZXIoKSwgZGlyZWN0b3JpZXM9c291cmNlX2RpcmVjdG9y
aWVzKCksIGluY2x1ZGU9aW5jbHVkZXMpCisKKworZGVmIGNtYWtlX2NvZGUoKToKKyAgICBmaWxl
cyA9IFsKKyAgICAgICAgJ0NNYWtlTGlzdHMudHh0JywKKyAgICAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnQ01ha2VMaXN0cy50eHQnKQorICAgIF0KKworICAgIHJldHVybiBGZWF0dXJlRGVm
aW5lc1NlYXJjaChtLmZsYWdfbWF0Y2hlcigpLCBkaXJlY3Rvcmllcz1zb3VyY2VfZGlyZWN0b3Jp
ZXMoKSwgZmlsZXM9ZmlsZXMsIGluY2x1ZGU9WydDTWFrZUxpc3RzLnR4dCcsICcqLmNtYWtlJ10p
CisKKworZGVmIGlkbF9jb2RlKCk6CisgICAgcmV0dXJuIEZlYXR1cmVEZWZpbmVzU2VhcmNoKG0u
aWRsX3VzYWdlX21hdGNoZXIoKSwgZGlyZWN0b3JpZXM9c291cmNlX2RpcmVjdG9yaWVzKCksIGlu
Y2x1ZGU9WycqLmlkbCddKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393059</attachid>
            <date>2020-03-09 11:38:59 -0700</date>
            <delta_ts>2020-03-09 19:46:36 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-208726.diff</filename>
            <type>text/plain</type>
            <size>25513</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZmluZC1mZWF0dXJlLWRlZmluZXMgYi9Ub29scy9T
Y3JpcHRzL2ZpbmQtZmVhdHVyZS1kZWZpbmVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uNmZmNjZmOGY4NjlmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy9maW5kLWZlYXR1cmUtZGVmaW5lcwpAQCAtMCwwICsxLDE2MCBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMKKyMgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICAgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
bgorIyAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitm
cm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBhcmdwYXJzZQor
aW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuZmVhdHVyZWRlZmluZXMuc2Vh
cmNoIGltcG9ydCBGZWF0dXJlRGVmaW5lc1NlYXJjaAorCitfREVTQ1JJUFRJT04gPSAnJycKKwor
JycnCisKK19ST09UID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJu
YW1lKF9fZmlsZV9fKSwgIi4uIiwgIi4uIikpCisKK19DSE9JQ0VTID0gWworICAgICdkZWZpbmVz
JywKKyAgICAncGxhdGZvcm0nLAorICAgICdwZXJsJywKKyAgICAnY21ha2UnLAorICAgICd4Y29k
ZScsCisgICAgJ2NvZGUnLAorICAgICduYXRpdmUtY29kZScsCisgICAgJ2NtYWtlLWNvZGUnLAor
ICAgICdpZGwtY29kZScsCitdCisKKworZGVmIF9zZWFyY2hfd2l0aChjaG9pY2UpOgorICAgIG1h
cHBpbmcgPSB7CisgICAgICAgICdwbGF0Zm9ybSc6IEZlYXR1cmVEZWZpbmVzU2VhcmNoLnBsYXRm
b3JtX2RlZmluZXMsCisgICAgICAgICdwZXJsJzogRmVhdHVyZURlZmluZXNTZWFyY2gucGVybF9k
ZWZpbmVzLAorICAgICAgICAnY21ha2UnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5jbWFrZV9kZWZp
bmVzLAorICAgICAgICAneGNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC54Y29kZV9kZWZpbmVz
LAorICAgICAgICAnbmF0aXZlLWNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5uYXRpdmVfY29k
ZSwKKyAgICAgICAgJ2NtYWtlLWNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5jbWFrZV9jb2Rl
LAorICAgICAgICAnaWRsLWNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5pZGxfY29kZSwKKyAg
ICB9CisKKyAgICByZXR1cm4gbWFwcGluZ1tjaG9pY2VdKCkKKworCitkZWYgX3BhcnNlX2FyZ3Mo
YXJndik6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRl
c2NyaXB0aW9uPV9ERVNDUklQVElPTiwKKyAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNl
LlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAor
ICAgICAgICAnZmluZCcsIGhlbHA9J3RoZSBjb2RlIHRvIHNlYXJjaCcsIGNob2ljZXM9X0NIT0lD
RVMsIG5hcmdzPScqJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRpZmYnLCBjaG9pY2Vz
PV9DSE9JQ0VTLCBhY3Rpb249J2FwcGVuZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAg
ICAgICAgJy0tcXVpZXQnLAorICAgICAgICBoZWxwPSdvbmx5IHByaW50IHRoZSBkZWZpbmUgbmFt
ZXMnLAorICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHJldHVybiBwYXJzZXIucGFy
c2VfYXJncyhhcmd2KQorCisKK2RlZiBfY2hvaWNlX3NldChjaG9pY2VzKToKKyAgICBjaG9pY2Vz
X3NldCA9IHNldChjaG9pY2VzKQorCisgICAgaWYgJ2RlZmluZXMnIGluIGNob2ljZXNfc2V0Ogor
ICAgICAgICBjaG9pY2VzX3NldC5yZW1vdmUoJ2RlZmluZXMnKQorCisgICAgICAgIGNob2ljZXNf
c2V0LnVwZGF0ZShbJ3BsYXRmb3JtJywgJ3BlcmwnLCAnY21ha2UnLCAneGNvZGUnXSkKKworICAg
IGlmICdjb2RlJyBpbiBjaG9pY2VzX3NldDoKKyAgICAgICAgY2hvaWNlc19zZXQucmVtb3ZlKCdj
b2RlJykKKworICAgICAgICBjaG9pY2VzX3NldC51cGRhdGUoWyduYXRpdmUtY29kZScsICdjbWFr
ZS1jb2RlJywgJ2lkbC1jb2RlJ10pCisKKyAgICByZXR1cm4gY2hvaWNlc19zZXQKKworCitkZWYg
X3NlYXJjaF9mb3IoY2hvaWNlcyk6CisgICAgZm91bmQgPSBzZXQoKQorCisgICAgZm9yIGNob2lj
ZSBpbiBfY2hvaWNlX3NldChjaG9pY2VzKToKKyAgICAgICAgc2VhcmNoX3dpdGggPSBfc2VhcmNo
X3dpdGgoY2hvaWNlKQorICAgICAgICBzZWFyY2hfd2l0aC5zZWFyY2goX1JPT1QpCisgICAgICAg
IGZvdW5kLnVwZGF0ZShzZWFyY2hfd2l0aC5kZWZpbml0aW9ucygpKQorCisgICAgcmV0dXJuIGZv
dW5kCisKKworZGVmIF9xdWlldF9wcmludChkZWZpbmUpOgorICAgIHByaW50KGRlZmluZS5mbGFn
KQorCisKK2RlZiBfdmVyYm9zZV9wcmludChkZWZpbmUsIG1heF9maWxlcyk6CisgICAgcHJpbnQo
ZGVmaW5lLmZsYWcpCisgICAgcHJpbnQoJyAgRGVzY3JpcHRpb246IHt9Jy5mb3JtYXQoZGVmaW5l
LmRlc2NyaXB0aW9uKSkKKyAgICBwcmludCgnICBWYWx1ZToge30nLmZvcm1hdChkZWZpbmUudmFs
dWUpKQorICAgIHByaW50KCcgIEZpbGVzOicpCisKKyAgICBjb3VudCA9IDAKKyAgICBmb3IgZmls
ZSBpbiBkZWZpbmUuZmlsZXM6CisgICAgICAgIHByaW50KCcgICAge30nLmZvcm1hdChmaWxlKSkK
KyAgICAgICAgY291bnQgPSBjb3VudCArIDEKKworICAgICAgICBpZiBjb3VudCA+PSBtYXhfZmls
ZXM6CisgICAgICAgICAgICBicmVhaworCisgICAgbGVuZ3RoX2RpZmYgPSBsZW4oZGVmaW5lLmZp
bGVzKSAtIG1heF9maWxlcworICAgIGlmIGxlbmd0aF9kaWZmID4gMDoKKyAgICAgICAgcHJpbnQo
JyAgICArIHt9IGFkZGl0aW9uYWwgZmlsZXMnLmZvcm1hdChsZW5ndGhfZGlmZikpCisKKworZGVm
IG1haW4oYXJndik6CisgICAgYXJncyA9IF9wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICBmaW5kX2Rl
ZmluZXMgPSBfc2VhcmNoX2ZvcihhcmdzLmZpbmQpCisKKyAgICBpZiBhcmdzLnF1aWV0OgorICAg
ICAgICBwcmludF93aXRoID0gX3F1aWV0X3ByaW50CisgICAgZWxzZToKKyAgICAgICAgcHJpbnRf
d2l0aCA9IGxhbWJkYSBkZWZpbmU6IF92ZXJib3NlX3ByaW50KGRlZmluZSwgNSkKKworICAgIGlm
IGFyZ3MuZGlmZjoKKyAgICAgICAgZGlmZl9kZWZpbmVzID0gX3NlYXJjaF9mb3IoYXJncy5kaWZm
KQorCisgICAgICAgIG9ubHlfZmluZCA9IGZpbmRfZGVmaW5lcy5kaWZmZXJlbmNlKGRpZmZfZGVm
aW5lcykKKworICAgICAgICBwcmludCgnT25seSBpbiBTb3VyY2UgKCcgKyAnLCcuam9pbihhcmdz
LmZpbmQpICsgJyknKQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQob25seV9maW5kKToKKyAg
ICAgICAgICAgIHByaW50X3dpdGgoaXRlbSkKKworICAgICAgICBvbmx5X2RpZmYgPSBkaWZmX2Rl
ZmluZXMuZGlmZmVyZW5jZShmaW5kX2RlZmluZXMpCisKKyAgICAgICAgcHJpbnQoJ09ubHkgaW4g
RGlmZiAoJyArICcsJy5qb2luKGFyZ3MuZGlmZikgKyAnKScpCisgICAgICAgIGZvciBpdGVtIGlu
IHNvcnRlZChvbmx5X2RpZmYpOgorICAgICAgICAgICAgcHJpbnRfd2l0aChpdGVtKQorICAgIGVs
c2U6CisgICAgICAgIGZvciBpdGVtIGluIHNvcnRlZChmaW5kX2RlZmluZXMpOgorICAgICAgICAg
ICAgcHJpbnRfd2l0aChpdGVtKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
bWFpbihzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Zl
YXR1cmVkZWZpbmVzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9mZWF0dXJl
ZGVmaW5lcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmVmNjViZWU1YmI3NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvZmVhdHVyZWRlZmluZXMvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBm
b3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jNmUzOWMwMmY1YmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXIu
cHkKQEAgLTAsMCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudAorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cisj
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworIyAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgICB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uCisjICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIk1hdGNoZXMgZmVhdHVyZSBkZWZpbmVzIGluIHNvdXJjZSBjb2RlLiIiIgor
CitpbXBvcnQgcmUKKworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHRvdGFsX29yZGVyaW5nCisKKwor
QHRvdGFsX29yZGVyaW5nCitjbGFzcyBGZWF0dXJlRGVmaW5lOgorICAgICIiIkEgZmVhdHVyZSBk
ZWZpbml0aW9uIGluIFdlYktpdCBzb3VyY2UgY29kZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmbGFnLCB2YWx1ZT1GYWxzZSwgZGVzY3JpcHRpb249IiIsIGZpbGVzPU5vbmUpOgorICAg
ICAgICBzZWxmLmZsYWcgPSBmbGFnCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAg
ICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgICAgICBzZWxmLmZpbGVzID0g
ZmlsZXMgaWYgZmlsZXMgZWxzZSBzZXQoKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gaGFzaChzZWxmLmZsYWcpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVy
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZmxhZyA9PSBvdGhlci5mbGFnCisKKyAgICAgICAgcmV0dXJuIE5v
dEltcGxlbWVudGVkCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuZmxhZyA8IG90aGVyLmZsYWcKKworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKwor
ICAgIGRlZiBqb2luKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiSm9pbnMgdGhlIHJlc3VsdHMg
b2YgdGhlIG90aGVyIEZlYXR1cmVEZWZpbmUuIiIiCisgICAgICAgIHNlbGYudmFsdWUgPSBzZWxm
LnZhbHVlIG9yIG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBzZWxmLmRl
c2NyaXB0aW9uIGlmIHNlbGYuZGVzY3JpcHRpb24gZWxzZSBvdGhlci5kZXNjcmlwdGlvbgorICAg
ICAgICBzZWxmLmZpbGVzLnVwZGF0ZShvdGhlci5maWxlcykKKworCitjbGFzcyBGZWF0dXJlRGVm
aW5lTWF0Y2hlcjoKKyAgICAiIiJNYXRjaGVzIGZlYXR1cmUgZGVmaW5lIHVzYWdlIGFuZCBkZWZp
bml0aW9ucyBpbiBXZWJLaXQgY29kZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXR0
ZXJuLCBwcmVmaXg9JycpOgorICAgICAgICBzZWxmLl9yZWdleCA9IHJlLmNvbXBpbGUocGF0dGVy
bikKKyAgICAgICAgc2VsZi5fcHJlZml4ID0gcHJlZml4CisKKyAgICBkZWYgc2VhcmNoKHNlbGYs
IGxpbmUpOgorICAgICAgICAiIiJTZWFyY2hlcyBmb3IgYSBzaW5nbGUgbWF0Y2ggaW4gYSBsaW5l
IG9mIHRleHQuIiIiCisgICAgICAgIG1hdGNoID0gc2VsZi5fcmVnZXguc2VhcmNoKGxpbmUpCisK
KyAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICByZXR1cm4gc2VsZi5fY29udmVydChtYXRjaCkKKworICAgIGRlZiBmaW5kaXRlcihzZWxmLCBs
aW5lKToKKyAgICAgICAgIiIiU2VhcmNoZXMgZm9yIGFsbCBtYXRjaGVzIGluIGEgbGluZSBvZiB0
ZXh0LiIiIgorICAgICAgICBmb3IgbWF0Y2ggaW4gc2VsZi5fcmVnZXguZmluZGl0ZXIobGluZSk6
CisgICAgICAgICAgICB5aWVsZCBzZWxmLl9jb252ZXJ0KG1hdGNoKQorCisgICAgZGVmIF9jb252
ZXJ0KHNlbGYsIG1hdGNoKToKKyAgICAgICAgZ3JvdXBzID0gbWF0Y2guZ3JvdXBkaWN0KCkKKwor
ICAgICAgICBmbGFnID0gc2VsZi5fcHJlZml4ICsgZ3JvdXBzWydmbGFnJ10KKyAgICAgICAgZGVz
Y3JpcHRpb24gPSBncm91cHMuZ2V0KCdkZXNjcmlwdGlvbicsICcnKQorICAgICAgICB2YWx1ZSA9
IGdyb3Vwcy5nZXQoJ3ZhbHVlJywgJycpIGluIFsnMScsICdPTiddCisKKyAgICAgICAgcmV0dXJu
IEZlYXR1cmVEZWZpbmUoZmxhZywgdmFsdWU9dmFsdWUsIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9u
KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHVzYWdlX21hdGNoZXIoY2xzLCBtYWNybz0n
RU5BQkxFJyk6CisgICAgICAgICIiIk1hdGNoZXIgZm9yICR7bWFjcm99KCR7bmFtZX0pIGluZGlj
YXRpbmcgdXNlIGluIHNvdXJjZSBjb2RlLiIiIgorICAgICAgICBwYXR0ZXJuID0gbWFjcm8gKyBy
J1woKD9QPGZsYWc+WzAtOUEtWl9dKylcKScKKyAgICAgICAgcHJlZml4ID0gbWFjcm8gKyAnXycK
KworICAgICAgICByZXR1cm4gRmVhdHVyZURlZmluZU1hdGNoZXIocGF0dGVybiwgcHJlZml4PXBy
ZWZpeCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmbGFnX21hdGNoZXIoY2xzLCBtYWNy
bz0nRU5BQkxFJyk6CisgICAgICAgICIiIk1hdGNoZXIgZm9yICR7bWFjcm99XyR7bmFtZX0gaW5k
aWNhdGluZyB1c2UgaW4gQ01ha2UgYW5kIHNjcmlwdCBjb2RlLiIiIgorICAgICAgICBwYXR0ZXJu
ID0gcicoP1A8ZmxhZz4nICsgbWFjcm8gKyByJ19bMC05QS1aX10rKScKKworICAgICAgICByZXR1
cm4gRmVhdHVyZURlZmluZU1hdGNoZXIocGF0dGVybikKKworICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBkZWNsYXJhdGlvbl9tYXRjaGVyKGNscywgbWFjcm89J0VOQUJMRScpOgorICAgICAgICAi
IiJNYXRjaGVyIGZvciAjZGVmaW5lICR7bWFjcm99XyR7bmFtZX0gJHt2YWx1ZX0gaW4gc291cmNl
IGNvZGUuIiIiCisgICAgICAgIHBhdHRlcm4gPSByJyNkZWZpbmUgKD9QPGZsYWc+JyArIG1hY3Jv
ICsgcidfWzAtOUEtWl9dKykgKD9QPHZhbHVlPlswLDFdKScKKworICAgICAgICByZXR1cm4gRmVh
dHVyZURlZmluZU1hdGNoZXIocGF0dGVybikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBp
ZGxfdXNhZ2VfbWF0Y2hlcihjbHMpOgorICAgICAgICAiIiJNYXRjaGVyIGZvciB1c2FnZSBpbiBJ
REwgZmlsZXMuIiIiCisgICAgICAgIHBhdHRlcm4gPSByJ0NvbmRpdGlvbmFsPSg/UDxmbGFnPlsw
LTlBLVpfXSspJworCisgICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lTWF0Y2hlcihwYXR0ZXJu
LCBwcmVmaXg9J0VOQUJMRV8nKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHhjb2RlX21h
dGNoZXIoY2xzKToKKyAgICAgICAgIiIiTWF0Y2hlciBmb3IgZGVjbGFyYXRpb25zIGluIFhDb2Rl
IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGZpbGVzLiIiIgorICAgICAgICBwYXR0ZXJuID0gcidc
QSg/UDxmbGFnPkVOQUJMRV8oPyFbQS1aMC05X10rX1NJTkNFXylbQS1aMC05X10rKD88IV9ZRVMp
KSA9JworCisgICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lTWF0Y2hlcihwYXR0ZXJuKQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNtYWtlX29wdGlvbnNfbWF0Y2hlcihjbHMsIG1hY3Jv
PSdFTkFCTEUnKToKKyAgICAgICAgIiIiTWF0Y2hlciBmb3IgZGVjbGFyYXRpb25zIGluIENNYWtl
IGNvZGUuIiIiCisgICAgICAgIHBhdHRlcm4gPSByJ1dFQktJVF9PUFRJT05fREVGSU5FXCgoP1A8
ZmxhZz4nICsgbWFjcm8gKyByJ19bMC05QS1aX10rKSAiKD9QPGRlc2NyaXB0aW9uPi4qKSIgUFJJ
VkFURSAoP1A8dmFsdWU+LiopXCknCisKKyAgICAgICAgcmV0dXJuIEZlYXR1cmVEZWZpbmVNYXRj
aGVyKHBhdHRlcm4pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVk
ZWZpbmVzL21hdGNoZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1
cmVkZWZpbmVzL21hdGNoZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi5iYWVmNmJmZjgwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXJfdW5pdHRlc3QucHkKQEAgLTAsMCAr
MSwxNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudAorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwgdGhpcworIyAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgICB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
CisjICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IlRlc3RzIGZvciBtYXRjaGVyLnB5LiIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50
X2Z1bmN0aW9uCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmZlYXR1cmVkZWZp
bmVzLm1hdGNoZXIgaW1wb3J0IEZlYXR1cmVEZWZpbmVNYXRjaGVyCisKKworY2xhc3MgVGVzdEZl
YXR1cmVEZWZpbmVNYXRjaGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF91c2Fn
ZV9tYXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIu
dXNhZ2VfbWF0Y2hlcigpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VO
QUJMRV9GT08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBF
TkFCTEVfRk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRp
dGlvbmFsPUZPT10nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxF
X0ZPTyA9JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9GT08gIkluZm8iIFBSSVZBVEUgT04pJykKKworICAgICAgICBzZWxm
Ll9ub3RfYV9tYXRjaChtYXRjaGVyLCAnVVNFKEZPTyknKQorCisgICAgICAgIHNlbGYuX2lzX2Ff
bWF0Y2gobWF0Y2hlciwgJ0VOQUJMRShGT08pJywgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxm
Ll9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEUoQkFSKScsICdFTkFCTEVfQkFSJykKKworICAg
ICAgICAjIFRlc3Qgd2l0aCBkaWZmZXJlbnQgcHJlZml4CisgICAgICAgIG1hdGNoZXIgPSBGZWF0
dXJlRGVmaW5lTWF0Y2hlci51c2FnZV9tYXRjaGVyKCdVU0UnKQorCisgICAgICAgIHNlbGYuX25v
dF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEUoRk9PKScpCisKKyAgICAgICAgc2VsZi5faXNfYV9t
YXRjaChtYXRjaGVyLCAnVVNFKEZPTyknLCAnVVNFX0ZPTycpCisgICAgICAgIHNlbGYuX2lzX2Ff
bWF0Y2gobWF0Y2hlciwgJ1VTRShCQVIpJywgJ1VTRV9CQVInKQorCisgICAgZGVmIHRlc3RfbXVs
dGlwbGVfdXNhZ2VfbWF0Y2hlcihzZWxmKToKKyAgICAgICAgbWF0Y2hlciA9IEZlYXR1cmVEZWZp
bmVNYXRjaGVyLnVzYWdlX21hdGNoZXIoKQorCisgICAgICAgIG1hdGNoZXMgPSBsaXN0KG1hdGNo
ZXIuZmluZGl0ZXIoJyNpZiBFTkFCTEUoRk9PKSAmJiBFTkFCTEUoQkFSKScpKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1hdGNoZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG1hdGNoZXNbMF0uZmxhZywgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG1hdGNoZXNbMV0uZmxhZywgJ0VOQUJMRV9CQVInKQorCisgICAgZGVmIHRlc3RfZGVjbGFy
YXRpb25fbWF0Y2hlcihzZWxmKToKKyAgICAgICAgbWF0Y2hlciA9IEZlYXR1cmVEZWZpbmVNYXRj
aGVyLmRlY2xhcmF0aW9uX21hdGNoZXIoKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1h
dGNoZXIsICdFTkFCTEUoRk9PKScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIs
ICdFTkFCTEVfRk9PJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1tDb25k
aXRpb25hbD1GT09dJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJM
RV9GT08gPScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfRk9PICJJbmZvIiBQUklWQVRFIE9OKScpCisKKyAgICAgICAgc2Vs
Zi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgVVNFX0ZPTyAxJykKKworICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICcjZGVmaW5lIEVOQUJMRV9GT08gMScsICdFTkFCTEVf
Rk9PJywgdmFsdWU9VHJ1ZSkKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnI2Rl
ZmluZSBFTkFCTEVfQkFSIDAnLCAnRU5BQkxFX0JBUicsIHZhbHVlPUZhbHNlKQorCisgICAgICAg
ICMgVGVzdCB3aXRoIGRpZmZlcmVudCBwcmVmaXgKKyAgICAgICAgbWF0Y2hlciA9IEZlYXR1cmVE
ZWZpbmVNYXRjaGVyLmRlY2xhcmF0aW9uX21hdGNoZXIoJ1VTRScpCisKKyAgICAgICAgc2VsZi5f
bm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgRU5BQkxFX0ZPTyAxJykKKworICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICcjZGVmaW5lIFVTRV9GT08gMScsICdVU0VfRk9PJywg
dmFsdWU9VHJ1ZSkKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBV
U0VfQkFSIDAnLCAnVVNFX0JBUicsIHZhbHVlPUZhbHNlKQorCisgICAgZGVmIHRlc3RfZmxhZ19t
YXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIuZmxh
Z19tYXRjaGVyKCkKKworICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxF
KEZPTyknKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRpdGlvbmFs
PUZPT10nKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdVU0VfRk9PJykK
KworICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PJywgJ0VOQUJM
RV9GT08nKQorICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfQkFSJywg
J0VOQUJMRV9CQVInKQorCisgICAgICAgICMgU3RpbGwgd291bGQgbWF0Y2ggdGhlc2UKKyAgICAg
ICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBFTkFCTEVfRk9PIDEnLCAnRU5B
QkxFX0ZPTycpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08g
PScsICdFTkFCTEVfRk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknLCAnRU5BQkxF
X0ZPTycpCisKKyAgICAgICAgIyBUZXN0IHdpdGggZGlmZmVyZW50IHByZWZpeAorICAgICAgICBt
YXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIuZmxhZ19tYXRjaGVyKCdVU0UnKQorCisgICAg
ICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PJykKKworICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdVU0VfRk9PJywgJ1VTRV9GT08nKQorICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdVU0VfQkFSJywgJ1VTRV9CQVInKQorCisgICAgZGVm
IHRlc3RfaWRsX21hdGNoZXIoc2VsZik6CisgICAgICAgIG1hdGNoZXIgPSBGZWF0dXJlRGVmaW5l
TWF0Y2hlci5pZGxfdXNhZ2VfbWF0Y2hlcigpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2go
bWF0Y2hlciwgJ0VOQUJMRShGT08pJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hl
ciwgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2Rl
ZmluZSBFTkFCTEVfRk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAn
RU5BQkxFX0ZPTyA9JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9GT08gIkluZm8iIFBSSVZBVEUgT04pJykKKworICAgICAg
ICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdbQ29uZGl0aW9uYWw9Rk9PXScsICdFTkFCTEVf
Rk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRpdGlvbmFsPUJB
Ul0nLCAnRU5BQkxFX0JBUicpCisKKyAgICBkZWYgdGVzdF9jbWFrZV9vcHRpb25zX21hdGNoZXIo
c2VsZik6CisgICAgICAgIG1hdGNoZXIgPSBGZWF0dXJlRGVmaW5lTWF0Y2hlci5jbWFrZV9vcHRp
b25zX21hdGNoZXIoKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFC
TEUoRk9PKScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9P
JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgRU5BQkxFX0ZP
TyAxJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08gPScp
CisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJT05fREVG
SU5FKFVTRV9GT08gIkluZm8iIFBSSVZBVEUgT04pJykKKworICAgICAgICBzZWxmLl9pc19hX21h
dGNoKG1hdGNoZXIsICdXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfRk9PICJJbmZvIiBQUklW
QVRFIE9OKScsICdFTkFCTEVfRk9PJywgdmFsdWU9VHJ1ZSwgZGVzY3JpcHRpb249J0luZm8nKQor
ICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdXRUJLSVRfT1BUSU9OX0RFRklORShF
TkFCTEVfQkFSICJNZXNnIiBQUklWQVRFIE9GRiknLCAnRU5BQkxFX0JBUicsIHZhbHVlPUZhbHNl
LCBkZXNjcmlwdGlvbj0nTWVzZycpCisKKyAgICAgICAgIyBUZXN0IHdpdGggZGlmZmVyZW50IHBy
ZWZpeAorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIuY21ha2Vfb3B0aW9u
c19tYXRjaGVyKCdVU0UnKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdX
RUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfRk9PICJJbmZvIiBQUklWQVRFIE9OKScpCisKKyAg
ICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09QVElPTl9ERUZJTkUoVVNF
X0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknLCAnVVNFX0ZPTycsIHZhbHVlPVRydWUsIGRlc2NyaXB0
aW9uPSdJbmZvJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09Q
VElPTl9ERUZJTkUoVVNFX0JBUiAiTWVzZyIgUFJJVkFURSBPRkYpJywgJ1VTRV9CQVInLCB2YWx1
ZT1GYWxzZSwgZGVzY3JpcHRpb249J01lc2cnKQorCisgICAgZGVmIHRlc3RfeGNvZGVfb3B0aW9u
c19tYXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIu
eGNvZGVfbWF0Y2hlcigpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VO
QUJMRShGT08pJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9G
T08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBFTkFCTEVf
Rk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRpdGlvbmFs
PUZPT10nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknKQorCisgICAgICAgIHNlbGYu
X25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTX1lFUyA9
JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT09fSU9TX1NJ
TkNFXzE5MDkgPScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVf
Rk9PX2lvc3NpbXVsYXRvciA9JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwg
J0VOQUJMRV9QT0lOVEVSX0VWRU5UU193YXRjaHNpbXVsYXRvcltzZGs9d2F0Y2gqNS4qXScpCisK
KyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxFX0ZPTyA9JywgJ0VOQUJM
RV9GT08nKQorICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfQkFSID0n
LCAnRU5BQkxFX0JBUicpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJM
RV9FWFBFUklNRU5UQUxfRkVBVFVSRVMgPScsICdFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVT
JykKKworICAgIGRlZiBfbm90X2FfbWF0Y2goc2VsZiwgbWF0Y2hlciwgbGluZSk6CisgICAgICAg
IHNlbGYuYXNzZXJ0SXNOb25lKG1hdGNoZXIuc2VhcmNoKGxpbmUpKQorCisgICAgZGVmIF9pc19h
X21hdGNoKHNlbGYsIG1hdGNoZXIsIGxpbmUsIGZsYWcsIHZhbHVlPUZhbHNlLCBkZXNjcmlwdGlv
bj0iIik6CisgICAgICAgIG1hdGNoID0gbWF0Y2hlci5zZWFyY2gobGluZSkKKworICAgICAgICBz
ZWxmLmFzc2VydElzTm90Tm9uZShtYXRjaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRj
aC5mbGFnLCBmbGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLnZhbHVlLCB2YWx1
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRjaC5kZXNjcmlwdGlvbiwgZGVzY3JpcHRp
b24pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL3Nl
YXJjaC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMvc2VhcmNoLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODkyMjc3ODcwOGVlCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9mZWF0dXJlZGVmaW5lcy9z
ZWFyY2gucHkKQEAgLTAsMCArMSwxODAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudAorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworIyAgICBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAg
ICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uCisjICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICdBUyBJUycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyIiIlNlYXJjaGVzIGZpbGVzIGZvciBmZWF0dXJlIGRlZmluZXMuIiIi
CisKK2ltcG9ydCBvcworCitmcm9tIGlvIGltcG9ydCBvcGVuCitmcm9tIGZubWF0Y2ggaW1wb3J0
IGZubWF0Y2gKKworZnJvbSB3ZWJraXRweS5mZWF0dXJlZGVmaW5lcy5tYXRjaGVyIGltcG9ydCBG
ZWF0dXJlRGVmaW5lTWF0Y2hlcgorCisKK2NsYXNzIEZlYXR1cmVEZWZpbmVzU2VhcmNoKCk6Cisg
ICAgIiIiU2VhcmNoZXMgZm9yIGZlYXR1cmUgZGVmaW5lcyBpbiBXZWJLaXQgc291cmNlIGNvZGUu
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgbWF0Y2hlciwK
KyAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZmls
ZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgaW5jbHVkZT1Ob25lLAorICAgICAgICAgICAgICAg
ICBleGNsdWRlPU5vbmUpOgorICAgICAgICBzZWxmLl9kZWZpbmVzID0ge30KKyAgICAgICAgc2Vs
Zi5fbWF0Y2hlciA9IG1hdGNoZXIKKyAgICAgICAgc2VsZi5fZGlyZWN0b3JpZXMgPSBkaXJlY3Rv
cmllcyBpZiBkaXJlY3RvcmllcyBlbHNlIFtdCisgICAgICAgIHNlbGYuX2ZpbGVzID0gZmlsZXMg
aWYgZmlsZXMgZWxzZSBbXQorICAgICAgICBzZWxmLl9pbmNsdWRlID0gaW5jbHVkZSBpZiBpbmNs
dWRlIGVsc2UgW10KKyAgICAgICAgc2VsZi5fZXhjbHVkZSA9IGV4Y2x1ZGUgaWYgZXhjbHVkZSBl
bHNlIFtdCisKKyAgICBkZWYgZGVmaW5pdGlvbnMoc2VsZik6CisgICAgICAgICIiIiBSZXRyaWV2
ZSB0aGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgc2VhcmNoIGFzIGEgc2V0LiAiIiIKKyAgICAgICAg
cmV0dXJuIHtzZWxmLl9kZWZpbmVzW2tdIGZvciBrIGluIHNlbGYuX2RlZmluZXN9CisKKyAgICBk
ZWYgc2VhcmNoKHNlbGYsIHJvb3QpOgorICAgICAgICAiIiIgU2VhcmNoIGZvciBmZWF0dXJlIGRl
ZmluZXMgd2l0aGluIHRoZSByb290ICIiIgorICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHNlbGYu
X2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgc2VsZi5fc2VhcmNoX2RpcmVjdG9yeShvcy5wYXRo
LmpvaW4ocm9vdCwgZGlyZWN0b3J5KSkKKworICAgICAgICBmb3IgZmlsZSBpbiBzZWxmLl9maWxl
czoKKyAgICAgICAgICAgIHNlbGYuX3NlYXJjaF9maWxlKG9zLnBhdGguam9pbihyb290LCBmaWxl
KSkKKworICAgIGRlZiBfc2VhcmNoX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9y
IHJvb3QsIF9fLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICAgICAgZm9yIGZpbGUg
aW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2hvdWxkX3NlYXJjaChmaWxlKToK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VhcmNoX2ZpbGUob3MucGF0aC5qb2luKHJvb3Qs
IGZpbGUpKQorCisgICAgZGVmIF9zZWFyY2hfZmlsZShzZWxmLCBwYXRoKToKKyAgICAgICAgd2l0
aCBvcGVuKHBhdGgsIGVuY29kaW5nPSdsYXRpbi0xJykgYXMgY29udGVudHM6CisgICAgICAgICAg
ICBmb3IgbGluZSBpbiBjb250ZW50czoKKyAgICAgICAgICAgICAgICBmb3IgbWF0Y2ggaW4gc2Vs
Zi5fbWF0Y2hlci5maW5kaXRlcihsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IG1h
dGNoLmZsYWcKKworICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmxhZyBpbiBzZWxmLl9kZWZp
bmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVmaW5lc1tmbGFnXSA9IG1hdGNo
CisKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVkID0gc2VsZi5fZGVmaW5lc1tmbGFnXQorICAg
ICAgICAgICAgICAgICAgICBzdG9yZWQuam9pbihtYXRjaCkKKyAgICAgICAgICAgICAgICAgICAg
c3RvcmVkLmZpbGVzLmFkZChwYXRoKQorCisgICAgZGVmIF9zaG91bGRfc2VhcmNoKHNlbGYsIGZp
bGUpOgorICAgICAgICBmb3IgcGF0dGVybiBpbiBzZWxmLl9leGNsdWRlOgorICAgICAgICAgICAg
aWYgZm5tYXRjaChmaWxlLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBmb3IgcGF0dGVybiBpbiBzZWxmLl9pbmNsdWRlOgorICAgICAgICAgICAgaWYg
Zm5tYXRjaChmaWxlLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNvdXJjZV9k
aXJlY3RvcmllcyhjbHMpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgb3MucGF0aC5q
b2luKCdTb3VyY2UnLCAnV1RGJyksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJEcml2ZXInKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNv
cmUnKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcpLAorICAg
ICAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0TGVnYWN5JyksCisgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScpLAorICAgICAgICAg
ICAgb3MucGF0aC5qb2luKCdUb29scycpLAorICAgICAgICBdCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgcGxhdGZvcm1fZGVmaW5lcyhjbHMpOgorICAgICAgICAiIiJGaW5kIGZlYXR1cmUg
ZGVmaW5lcyBpbiB3dGYvUGxhdGZvcm1FbmFibGUgaGVhZGVycy4iIiIKKworICAgICAgICBmaWxl
cyA9IFsKKyAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dURicsICd3dGYnLCAn
UGxhdGZvcm1FbmFibGUuaCcpLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V1RGJywgJ3d0ZicsICdQbGF0Zm9ybUVuYWJsZUNvY29hLmgnKSwKKyAgICAgICAgICAgIG9zLnBh
dGguam9pbignU291cmNlJywgJ1dURicsICd3dGYnLCAnUGxhdGZvcm1FbmFibGVXaW5BcHBsZS5o
JyksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXVEYnLCAnd3RmJywgJ1Bs
YXRmb3JtRW5hYmxlV2luQ2Fpcm8uaCcpLAorICAgICAgICBdCisKKyAgICAgICAgcmV0dXJuIEZl
YXR1cmVEZWZpbmVzU2VhcmNoKEZlYXR1cmVEZWZpbmVNYXRjaGVyLmRlY2xhcmF0aW9uX21hdGNo
ZXIoKSwgZmlsZXM9ZmlsZXMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGVybF9kZWZp
bmVzKGNscyk6CisgICAgICAgICIiIkZpbmQgZmVhdHVyZSBkZWZpbmVzIGluIEZlYXR1cmVMaXN0
LnBtLiIiIgorCisgICAgICAgIGZpbGVzID0gWworICAgICAgICAgICAgb3MucGF0aC5qb2luKCdU
b29scycsICdTY3JpcHRzJywgJ3dlYmtpdHBlcmwnLCAnRmVhdHVyZUxpc3QucG0nKSwKKyAgICAg
ICAgXQorCisgICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lc1NlYXJjaChGZWF0dXJlRGVmaW5l
TWF0Y2hlci5mbGFnX21hdGNoZXIoKSwgZmlsZXM9ZmlsZXMpCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgY21ha2VfZGVmaW5lcyhjbHMpOgorICAgICAgICAiIiJGaW5kIGZlYXR1cmUgZGVm
aW5lcyBpbiBXZWJLaXRGZWF0dXJlcy5jbWFrZS4iIiIKKworICAgICAgICBmaWxlcyA9IFsKKyAg
ICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ2NtYWtlJywgJ1dlYktpdEZlYXR1cmVz
LmNtYWtlJyksCisgICAgICAgIF0KKworICAgICAgICByZXR1cm4gRmVhdHVyZURlZmluZXNTZWFy
Y2goRmVhdHVyZURlZmluZU1hdGNoZXIuY21ha2Vfb3B0aW9uc19tYXRjaGVyKCksIGZpbGVzPWZp
bGVzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHhjb2RlX2RlZmluZXMoY2xzKToKKyAg
ICAgICAgIiIiRmluZCBmZWF0dXJlIGRlZmluZXMgaW4gRmVhdHVyZURlZmluZXMueGNjb25maWcu
IiIiCisKKyAgICAgICAgZmlsZXMgPSBbCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdKYXZhU2NyaXB0Q29yZScsICdDb25maWd1cmF0aW9ucycsICdGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZycpLAorICAgICAgICBdCisKKyAgICAgICAgcmV0dXJuIEZlYXR1cmVEZWZpbmVzU2Vh
cmNoKEZlYXR1cmVEZWZpbmVNYXRjaGVyLnhjb2RlX21hdGNoZXIoKSwgZmlsZXM9ZmlsZXMpCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbmF0aXZlX2NvZGUoY2xzKToKKyAgICAgICAgIiIi
RmluZCBmZWF0dXJlIGRlZmluZXMgdXNlZCBpbiBuYXRpdmUgc291cmNlIGNvZGUuIiIiCisKKyAg
ICAgICAgaW5jbHVkZXMgPSBbJyouaCcsICcqLmMnLCAnKi5jcHAnLCAnKi5tbScsICcqLm1lc3Nh
Z2VzLmluJ10KKworICAgICAgICByZXR1cm4gRmVhdHVyZURlZmluZXNTZWFyY2goCisgICAgICAg
ICAgICBGZWF0dXJlRGVmaW5lTWF0Y2hlci51c2FnZV9tYXRjaGVyKCksCisgICAgICAgICAgICBk
aXJlY3Rvcmllcz1GZWF0dXJlRGVmaW5lc1NlYXJjaC5zb3VyY2VfZGlyZWN0b3JpZXMoKSwKKyAg
ICAgICAgICAgIGluY2x1ZGU9aW5jbHVkZXMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
Y21ha2VfY29kZShjbHMpOgorICAgICAgICAiIiJGaW5kIGZlYXR1cmUgZGVmaW5lcyB1c2VkIGlu
IENNYWtlIHNvdXJjZSBjb2RlLiIiIgorICAgICAgICBmaWxlcyA9IFsnQ01ha2VMaXN0cy50eHQn
LCBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdDTWFrZUxpc3RzLnR4dCcpXQorCisgICAgICAgICMg
U2VhcmNoIGNtYWtlIGZpbGVzIGJ1dCBpZ25vcmUgV2ViS2l0IG1hY3JvcyBhbmQgZmluZCBtb2R1
bGVzCisgICAgICAgIGRpcmVjdG9yaWVzID0gRmVhdHVyZURlZmluZXNTZWFyY2guc291cmNlX2Rp
cmVjdG9yaWVzKCkgKyBbb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnY21ha2UnKV0KKyAgICAgICAg
aW5jbHVkZSA9IFsnQ01ha2VMaXN0cy50eHQnLCAnKi5jbWFrZSddCisgICAgICAgIGV4Y2x1ZGUg
PSBbJ1dlYktpdCouY21ha2UnLCAnRmluZCouY21ha2UnXQorCisgICAgICAgIHJldHVybiBGZWF0
dXJlRGVmaW5lc1NlYXJjaCgKKyAgICAgICAgICAgIEZlYXR1cmVEZWZpbmVNYXRjaGVyLmZsYWdf
bWF0Y2hlcigpLAorICAgICAgICAgICAgZGlyZWN0b3JpZXM9ZGlyZWN0b3JpZXMsCisgICAgICAg
ICAgICBmaWxlcz1maWxlcywKKyAgICAgICAgICAgIGluY2x1ZGU9aW5jbHVkZSwKKyAgICAgICAg
ICAgIGV4Y2x1ZGU9ZXhjbHVkZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBpZGxfY29k
ZShjbHMpOgorICAgICAgICAiIiJGaW5kIGZlYXR1cmUgZGVmaW5lcyB1c2VkIGluIElETCBzb3Vy
Y2UgY29kZS4iIiIKKyAgICAgICAgcmV0dXJuIEZlYXR1cmVEZWZpbmVzU2VhcmNoKAorICAgICAg
ICAgICAgRmVhdHVyZURlZmluZU1hdGNoZXIuaWRsX3VzYWdlX21hdGNoZXIoKSwKKyAgICAgICAg
ICAgIGRpcmVjdG9yaWVzPUZlYXR1cmVEZWZpbmVzU2VhcmNoLnNvdXJjZV9kaXJlY3Rvcmllcygp
LAorICAgICAgICAgICAgaW5jbHVkZT1bJyouaWRsJ10pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393111</attachid>
            <date>2020-03-09 19:46:36 -0700</date>
            <delta_ts>2020-03-09 19:46:36 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-208726.diff</filename>
            <type>text/plain</type>
            <size>25385</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZmluZC1mZWF0dXJlLWRlZmluZXMgYi9Ub29scy9T
Y3JpcHRzL2ZpbmQtZmVhdHVyZS1kZWZpbmVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uNmZmNjZmOGY4NjlmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy9maW5kLWZlYXR1cmUtZGVmaW5lcwpAQCAtMCwwICsxLDE2MCBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMKKyMgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICAgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
bgorIyAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitm
cm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBhcmdwYXJzZQor
aW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuZmVhdHVyZWRlZmluZXMuc2Vh
cmNoIGltcG9ydCBGZWF0dXJlRGVmaW5lc1NlYXJjaAorCitfREVTQ1JJUFRJT04gPSAnJycKKwor
JycnCisKK19ST09UID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJu
YW1lKF9fZmlsZV9fKSwgIi4uIiwgIi4uIikpCisKK19DSE9JQ0VTID0gWworICAgICdkZWZpbmVz
JywKKyAgICAncGxhdGZvcm0nLAorICAgICdwZXJsJywKKyAgICAnY21ha2UnLAorICAgICd4Y29k
ZScsCisgICAgJ2NvZGUnLAorICAgICduYXRpdmUtY29kZScsCisgICAgJ2NtYWtlLWNvZGUnLAor
ICAgICdpZGwtY29kZScsCitdCisKKworZGVmIF9zZWFyY2hfd2l0aChjaG9pY2UpOgorICAgIG1h
cHBpbmcgPSB7CisgICAgICAgICdwbGF0Zm9ybSc6IEZlYXR1cmVEZWZpbmVzU2VhcmNoLnBsYXRm
b3JtX2RlZmluZXMsCisgICAgICAgICdwZXJsJzogRmVhdHVyZURlZmluZXNTZWFyY2gucGVybF9k
ZWZpbmVzLAorICAgICAgICAnY21ha2UnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5jbWFrZV9kZWZp
bmVzLAorICAgICAgICAneGNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC54Y29kZV9kZWZpbmVz
LAorICAgICAgICAnbmF0aXZlLWNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5uYXRpdmVfY29k
ZSwKKyAgICAgICAgJ2NtYWtlLWNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5jbWFrZV9jb2Rl
LAorICAgICAgICAnaWRsLWNvZGUnOiBGZWF0dXJlRGVmaW5lc1NlYXJjaC5pZGxfY29kZSwKKyAg
ICB9CisKKyAgICByZXR1cm4gbWFwcGluZ1tjaG9pY2VdKCkKKworCitkZWYgX3BhcnNlX2FyZ3Mo
YXJndik6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRl
c2NyaXB0aW9uPV9ERVNDUklQVElPTiwKKyAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNl
LlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAor
ICAgICAgICAnZmluZCcsIGhlbHA9J3RoZSBjb2RlIHRvIHNlYXJjaCcsIGNob2ljZXM9X0NIT0lD
RVMsIG5hcmdzPScqJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRpZmYnLCBjaG9pY2Vz
PV9DSE9JQ0VTLCBhY3Rpb249J2FwcGVuZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAg
ICAgICAgJy0tcXVpZXQnLAorICAgICAgICBoZWxwPSdvbmx5IHByaW50IHRoZSBkZWZpbmUgbmFt
ZXMnLAorICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHJldHVybiBwYXJzZXIucGFy
c2VfYXJncyhhcmd2KQorCisKK2RlZiBfY2hvaWNlX3NldChjaG9pY2VzKToKKyAgICBjaG9pY2Vz
X3NldCA9IHNldChjaG9pY2VzKQorCisgICAgaWYgJ2RlZmluZXMnIGluIGNob2ljZXNfc2V0Ogor
ICAgICAgICBjaG9pY2VzX3NldC5yZW1vdmUoJ2RlZmluZXMnKQorCisgICAgICAgIGNob2ljZXNf
c2V0LnVwZGF0ZShbJ3BsYXRmb3JtJywgJ3BlcmwnLCAnY21ha2UnLCAneGNvZGUnXSkKKworICAg
IGlmICdjb2RlJyBpbiBjaG9pY2VzX3NldDoKKyAgICAgICAgY2hvaWNlc19zZXQucmVtb3ZlKCdj
b2RlJykKKworICAgICAgICBjaG9pY2VzX3NldC51cGRhdGUoWyduYXRpdmUtY29kZScsICdjbWFr
ZS1jb2RlJywgJ2lkbC1jb2RlJ10pCisKKyAgICByZXR1cm4gY2hvaWNlc19zZXQKKworCitkZWYg
X3NlYXJjaF9mb3IoY2hvaWNlcyk6CisgICAgZm91bmQgPSBzZXQoKQorCisgICAgZm9yIGNob2lj
ZSBpbiBfY2hvaWNlX3NldChjaG9pY2VzKToKKyAgICAgICAgc2VhcmNoX3dpdGggPSBfc2VhcmNo
X3dpdGgoY2hvaWNlKQorICAgICAgICBzZWFyY2hfd2l0aC5zZWFyY2goX1JPT1QpCisgICAgICAg
IGZvdW5kLnVwZGF0ZShzZWFyY2hfd2l0aC5kZWZpbml0aW9ucygpKQorCisgICAgcmV0dXJuIGZv
dW5kCisKKworZGVmIF9xdWlldF9wcmludChkZWZpbmUpOgorICAgIHByaW50KGRlZmluZS5mbGFn
KQorCisKK2RlZiBfdmVyYm9zZV9wcmludChkZWZpbmUsIG1heF9maWxlcyk6CisgICAgcHJpbnQo
ZGVmaW5lLmZsYWcpCisgICAgcHJpbnQoJyAgRGVzY3JpcHRpb246IHt9Jy5mb3JtYXQoZGVmaW5l
LmRlc2NyaXB0aW9uKSkKKyAgICBwcmludCgnICBWYWx1ZToge30nLmZvcm1hdChkZWZpbmUudmFs
dWUpKQorICAgIHByaW50KCcgIEZpbGVzOicpCisKKyAgICBjb3VudCA9IDAKKyAgICBmb3IgZmls
ZSBpbiBkZWZpbmUuZmlsZXM6CisgICAgICAgIHByaW50KCcgICAge30nLmZvcm1hdChmaWxlKSkK
KyAgICAgICAgY291bnQgPSBjb3VudCArIDEKKworICAgICAgICBpZiBjb3VudCA+PSBtYXhfZmls
ZXM6CisgICAgICAgICAgICBicmVhaworCisgICAgbGVuZ3RoX2RpZmYgPSBsZW4oZGVmaW5lLmZp
bGVzKSAtIG1heF9maWxlcworICAgIGlmIGxlbmd0aF9kaWZmID4gMDoKKyAgICAgICAgcHJpbnQo
JyAgICArIHt9IGFkZGl0aW9uYWwgZmlsZXMnLmZvcm1hdChsZW5ndGhfZGlmZikpCisKKworZGVm
IG1haW4oYXJndik6CisgICAgYXJncyA9IF9wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICBmaW5kX2Rl
ZmluZXMgPSBfc2VhcmNoX2ZvcihhcmdzLmZpbmQpCisKKyAgICBpZiBhcmdzLnF1aWV0OgorICAg
ICAgICBwcmludF93aXRoID0gX3F1aWV0X3ByaW50CisgICAgZWxzZToKKyAgICAgICAgcHJpbnRf
d2l0aCA9IGxhbWJkYSBkZWZpbmU6IF92ZXJib3NlX3ByaW50KGRlZmluZSwgNSkKKworICAgIGlm
IGFyZ3MuZGlmZjoKKyAgICAgICAgZGlmZl9kZWZpbmVzID0gX3NlYXJjaF9mb3IoYXJncy5kaWZm
KQorCisgICAgICAgIG9ubHlfZmluZCA9IGZpbmRfZGVmaW5lcy5kaWZmZXJlbmNlKGRpZmZfZGVm
aW5lcykKKworICAgICAgICBwcmludCgnT25seSBpbiBTb3VyY2UgKCcgKyAnLCcuam9pbihhcmdz
LmZpbmQpICsgJyknKQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQob25seV9maW5kKToKKyAg
ICAgICAgICAgIHByaW50X3dpdGgoaXRlbSkKKworICAgICAgICBvbmx5X2RpZmYgPSBkaWZmX2Rl
ZmluZXMuZGlmZmVyZW5jZShmaW5kX2RlZmluZXMpCisKKyAgICAgICAgcHJpbnQoJ09ubHkgaW4g
RGlmZiAoJyArICcsJy5qb2luKGFyZ3MuZGlmZikgKyAnKScpCisgICAgICAgIGZvciBpdGVtIGlu
IHNvcnRlZChvbmx5X2RpZmYpOgorICAgICAgICAgICAgcHJpbnRfd2l0aChpdGVtKQorICAgIGVs
c2U6CisgICAgICAgIGZvciBpdGVtIGluIHNvcnRlZChmaW5kX2RlZmluZXMpOgorICAgICAgICAg
ICAgcHJpbnRfd2l0aChpdGVtKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
bWFpbihzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Zl
YXR1cmVkZWZpbmVzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9mZWF0dXJl
ZGVmaW5lcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmVmNjViZWU1YmI3NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvZmVhdHVyZWRlZmluZXMvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBm
b3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jNmUzOWMwMmY1YmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXIu
cHkKQEAgLTAsMCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudAorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cisj
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworIyAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgICB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uCisjICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIk1hdGNoZXMgZmVhdHVyZSBkZWZpbmVzIGluIHNvdXJjZSBjb2RlLiIiIgor
CitpbXBvcnQgcmUKKworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHRvdGFsX29yZGVyaW5nCisKKwor
QHRvdGFsX29yZGVyaW5nCitjbGFzcyBGZWF0dXJlRGVmaW5lOgorICAgICIiIkEgZmVhdHVyZSBk
ZWZpbml0aW9uIGluIFdlYktpdCBzb3VyY2UgY29kZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmbGFnLCB2YWx1ZT1GYWxzZSwgZGVzY3JpcHRpb249IiIsIGZpbGVzPU5vbmUpOgorICAg
ICAgICBzZWxmLmZsYWcgPSBmbGFnCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAg
ICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgICAgICBzZWxmLmZpbGVzID0g
ZmlsZXMgaWYgZmlsZXMgZWxzZSBzZXQoKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gaGFzaChzZWxmLmZsYWcpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVy
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZmxhZyA9PSBvdGhlci5mbGFnCisKKyAgICAgICAgcmV0dXJuIE5v
dEltcGxlbWVudGVkCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuZmxhZyA8IG90aGVyLmZsYWcKKworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKwor
ICAgIGRlZiBqb2luKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiSm9pbnMgdGhlIHJlc3VsdHMg
b2YgdGhlIG90aGVyIEZlYXR1cmVEZWZpbmUuIiIiCisgICAgICAgIHNlbGYudmFsdWUgPSBzZWxm
LnZhbHVlIG9yIG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBzZWxmLmRl
c2NyaXB0aW9uIGlmIHNlbGYuZGVzY3JpcHRpb24gZWxzZSBvdGhlci5kZXNjcmlwdGlvbgorICAg
ICAgICBzZWxmLmZpbGVzLnVwZGF0ZShvdGhlci5maWxlcykKKworCitjbGFzcyBGZWF0dXJlRGVm
aW5lTWF0Y2hlcjoKKyAgICAiIiJNYXRjaGVzIGZlYXR1cmUgZGVmaW5lIHVzYWdlIGFuZCBkZWZp
bml0aW9ucyBpbiBXZWJLaXQgY29kZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXR0
ZXJuLCBwcmVmaXg9JycpOgorICAgICAgICBzZWxmLl9yZWdleCA9IHJlLmNvbXBpbGUocGF0dGVy
bikKKyAgICAgICAgc2VsZi5fcHJlZml4ID0gcHJlZml4CisKKyAgICBkZWYgc2VhcmNoKHNlbGYs
IGxpbmUpOgorICAgICAgICAiIiJTZWFyY2hlcyBmb3IgYSBzaW5nbGUgbWF0Y2ggaW4gYSBsaW5l
IG9mIHRleHQuIiIiCisgICAgICAgIG1hdGNoID0gc2VsZi5fcmVnZXguc2VhcmNoKGxpbmUpCisK
KyAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICByZXR1cm4gc2VsZi5fY29udmVydChtYXRjaCkKKworICAgIGRlZiBmaW5kaXRlcihzZWxmLCBs
aW5lKToKKyAgICAgICAgIiIiU2VhcmNoZXMgZm9yIGFsbCBtYXRjaGVzIGluIGEgbGluZSBvZiB0
ZXh0LiIiIgorICAgICAgICBmb3IgbWF0Y2ggaW4gc2VsZi5fcmVnZXguZmluZGl0ZXIobGluZSk6
CisgICAgICAgICAgICB5aWVsZCBzZWxmLl9jb252ZXJ0KG1hdGNoKQorCisgICAgZGVmIF9jb252
ZXJ0KHNlbGYsIG1hdGNoKToKKyAgICAgICAgZ3JvdXBzID0gbWF0Y2guZ3JvdXBkaWN0KCkKKwor
ICAgICAgICBmbGFnID0gc2VsZi5fcHJlZml4ICsgZ3JvdXBzWydmbGFnJ10KKyAgICAgICAgZGVz
Y3JpcHRpb24gPSBncm91cHMuZ2V0KCdkZXNjcmlwdGlvbicsICcnKQorICAgICAgICB2YWx1ZSA9
IGdyb3Vwcy5nZXQoJ3ZhbHVlJywgJycpIGluIFsnMScsICdPTiddCisKKyAgICAgICAgcmV0dXJu
IEZlYXR1cmVEZWZpbmUoZmxhZywgdmFsdWU9dmFsdWUsIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9u
KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHVzYWdlX21hdGNoZXIoY2xzLCBtYWNybz0n
RU5BQkxFJyk6CisgICAgICAgICIiIk1hdGNoZXIgZm9yICR7bWFjcm99KCR7bmFtZX0pIGluZGlj
YXRpbmcgdXNlIGluIHNvdXJjZSBjb2RlLiIiIgorICAgICAgICBwYXR0ZXJuID0gbWFjcm8gKyBy
J1woKD9QPGZsYWc+WzAtOUEtWl9dKylcKScKKyAgICAgICAgcHJlZml4ID0gbWFjcm8gKyAnXycK
KworICAgICAgICByZXR1cm4gRmVhdHVyZURlZmluZU1hdGNoZXIocGF0dGVybiwgcHJlZml4PXBy
ZWZpeCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmbGFnX21hdGNoZXIoY2xzLCBtYWNy
bz0nRU5BQkxFJyk6CisgICAgICAgICIiIk1hdGNoZXIgZm9yICR7bWFjcm99XyR7bmFtZX0gaW5k
aWNhdGluZyB1c2UgaW4gQ01ha2UgYW5kIHNjcmlwdCBjb2RlLiIiIgorICAgICAgICBwYXR0ZXJu
ID0gcicoP1A8ZmxhZz4nICsgbWFjcm8gKyByJ19bMC05QS1aX10rKScKKworICAgICAgICByZXR1
cm4gRmVhdHVyZURlZmluZU1hdGNoZXIocGF0dGVybikKKworICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBkZWNsYXJhdGlvbl9tYXRjaGVyKGNscywgbWFjcm89J0VOQUJMRScpOgorICAgICAgICAi
IiJNYXRjaGVyIGZvciAjZGVmaW5lICR7bWFjcm99XyR7bmFtZX0gJHt2YWx1ZX0gaW4gc291cmNl
IGNvZGUuIiIiCisgICAgICAgIHBhdHRlcm4gPSByJyNkZWZpbmUgKD9QPGZsYWc+JyArIG1hY3Jv
ICsgcidfWzAtOUEtWl9dKykgKD9QPHZhbHVlPlswLDFdKScKKworICAgICAgICByZXR1cm4gRmVh
dHVyZURlZmluZU1hdGNoZXIocGF0dGVybikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBp
ZGxfdXNhZ2VfbWF0Y2hlcihjbHMpOgorICAgICAgICAiIiJNYXRjaGVyIGZvciB1c2FnZSBpbiBJ
REwgZmlsZXMuIiIiCisgICAgICAgIHBhdHRlcm4gPSByJ0NvbmRpdGlvbmFsPSg/UDxmbGFnPlsw
LTlBLVpfXSspJworCisgICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lTWF0Y2hlcihwYXR0ZXJu
LCBwcmVmaXg9J0VOQUJMRV8nKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHhjb2RlX21h
dGNoZXIoY2xzKToKKyAgICAgICAgIiIiTWF0Y2hlciBmb3IgZGVjbGFyYXRpb25zIGluIFhDb2Rl
IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGZpbGVzLiIiIgorICAgICAgICBwYXR0ZXJuID0gcidc
QSg/UDxmbGFnPkVOQUJMRV8oPyFbQS1aMC05X10rX1NJTkNFXylbQS1aMC05X10rKD88IV9ZRVMp
KSA9JworCisgICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lTWF0Y2hlcihwYXR0ZXJuKQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNtYWtlX29wdGlvbnNfbWF0Y2hlcihjbHMsIG1hY3Jv
PSdFTkFCTEUnKToKKyAgICAgICAgIiIiTWF0Y2hlciBmb3IgZGVjbGFyYXRpb25zIGluIENNYWtl
IGNvZGUuIiIiCisgICAgICAgIHBhdHRlcm4gPSByJ1dFQktJVF9PUFRJT05fREVGSU5FXCgoP1A8
ZmxhZz4nICsgbWFjcm8gKyByJ19bMC05QS1aX10rKSAiKD9QPGRlc2NyaXB0aW9uPi4qKSIgUFJJ
VkFURSAoP1A8dmFsdWU+LiopXCknCisKKyAgICAgICAgcmV0dXJuIEZlYXR1cmVEZWZpbmVNYXRj
aGVyKHBhdHRlcm4pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVk
ZWZpbmVzL21hdGNoZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1
cmVkZWZpbmVzL21hdGNoZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi5iYWVmNmJmZjgwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL21hdGNoZXJfdW5pdHRlc3QucHkKQEAgLTAsMCAr
MSwxNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudAorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwgdGhpcworIyAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgICB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
CisjICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IlRlc3RzIGZvciBtYXRjaGVyLnB5LiIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50
X2Z1bmN0aW9uCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmZlYXR1cmVkZWZp
bmVzLm1hdGNoZXIgaW1wb3J0IEZlYXR1cmVEZWZpbmVNYXRjaGVyCisKKworY2xhc3MgVGVzdEZl
YXR1cmVEZWZpbmVNYXRjaGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF91c2Fn
ZV9tYXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIu
dXNhZ2VfbWF0Y2hlcigpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VO
QUJMRV9GT08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBF
TkFCTEVfRk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRp
dGlvbmFsPUZPT10nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxF
X0ZPTyA9JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9GT08gIkluZm8iIFBSSVZBVEUgT04pJykKKworICAgICAgICBzZWxm
Ll9ub3RfYV9tYXRjaChtYXRjaGVyLCAnVVNFKEZPTyknKQorCisgICAgICAgIHNlbGYuX2lzX2Ff
bWF0Y2gobWF0Y2hlciwgJ0VOQUJMRShGT08pJywgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxm
Ll9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEUoQkFSKScsICdFTkFCTEVfQkFSJykKKworICAg
ICAgICAjIFRlc3Qgd2l0aCBkaWZmZXJlbnQgcHJlZml4CisgICAgICAgIG1hdGNoZXIgPSBGZWF0
dXJlRGVmaW5lTWF0Y2hlci51c2FnZV9tYXRjaGVyKCdVU0UnKQorCisgICAgICAgIHNlbGYuX25v
dF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEUoRk9PKScpCisKKyAgICAgICAgc2VsZi5faXNfYV9t
YXRjaChtYXRjaGVyLCAnVVNFKEZPTyknLCAnVVNFX0ZPTycpCisgICAgICAgIHNlbGYuX2lzX2Ff
bWF0Y2gobWF0Y2hlciwgJ1VTRShCQVIpJywgJ1VTRV9CQVInKQorCisgICAgZGVmIHRlc3RfbXVs
dGlwbGVfdXNhZ2VfbWF0Y2hlcihzZWxmKToKKyAgICAgICAgbWF0Y2hlciA9IEZlYXR1cmVEZWZp
bmVNYXRjaGVyLnVzYWdlX21hdGNoZXIoKQorCisgICAgICAgIG1hdGNoZXMgPSBsaXN0KG1hdGNo
ZXIuZmluZGl0ZXIoJyNpZiBFTkFCTEUoRk9PKSAmJiBFTkFCTEUoQkFSKScpKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1hdGNoZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG1hdGNoZXNbMF0uZmxhZywgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG1hdGNoZXNbMV0uZmxhZywgJ0VOQUJMRV9CQVInKQorCisgICAgZGVmIHRlc3RfZGVjbGFy
YXRpb25fbWF0Y2hlcihzZWxmKToKKyAgICAgICAgbWF0Y2hlciA9IEZlYXR1cmVEZWZpbmVNYXRj
aGVyLmRlY2xhcmF0aW9uX21hdGNoZXIoKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1h
dGNoZXIsICdFTkFCTEUoRk9PKScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIs
ICdFTkFCTEVfRk9PJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1tDb25k
aXRpb25hbD1GT09dJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJM
RV9GT08gPScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfRk9PICJJbmZvIiBQUklWQVRFIE9OKScpCisKKyAgICAgICAgc2Vs
Zi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgVVNFX0ZPTyAxJykKKworICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICcjZGVmaW5lIEVOQUJMRV9GT08gMScsICdFTkFCTEVf
Rk9PJywgdmFsdWU9VHJ1ZSkKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnI2Rl
ZmluZSBFTkFCTEVfQkFSIDAnLCAnRU5BQkxFX0JBUicsIHZhbHVlPUZhbHNlKQorCisgICAgICAg
ICMgVGVzdCB3aXRoIGRpZmZlcmVudCBwcmVmaXgKKyAgICAgICAgbWF0Y2hlciA9IEZlYXR1cmVE
ZWZpbmVNYXRjaGVyLmRlY2xhcmF0aW9uX21hdGNoZXIoJ1VTRScpCisKKyAgICAgICAgc2VsZi5f
bm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgRU5BQkxFX0ZPTyAxJykKKworICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICcjZGVmaW5lIFVTRV9GT08gMScsICdVU0VfRk9PJywg
dmFsdWU9VHJ1ZSkKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBV
U0VfQkFSIDAnLCAnVVNFX0JBUicsIHZhbHVlPUZhbHNlKQorCisgICAgZGVmIHRlc3RfZmxhZ19t
YXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIuZmxh
Z19tYXRjaGVyKCkKKworICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxF
KEZPTyknKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRpdGlvbmFs
PUZPT10nKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdVU0VfRk9PJykK
KworICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PJywgJ0VOQUJM
RV9GT08nKQorICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfQkFSJywg
J0VOQUJMRV9CQVInKQorCisgICAgICAgICMgU3RpbGwgd291bGQgbWF0Y2ggdGhlc2UKKyAgICAg
ICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBFTkFCTEVfRk9PIDEnLCAnRU5B
QkxFX0ZPTycpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08g
PScsICdFTkFCTEVfRk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknLCAnRU5BQkxF
X0ZPTycpCisKKyAgICAgICAgIyBUZXN0IHdpdGggZGlmZmVyZW50IHByZWZpeAorICAgICAgICBt
YXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIuZmxhZ19tYXRjaGVyKCdVU0UnKQorCisgICAg
ICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9PJykKKworICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdVU0VfRk9PJywgJ1VTRV9GT08nKQorICAgICAgICBz
ZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdVU0VfQkFSJywgJ1VTRV9CQVInKQorCisgICAgZGVm
IHRlc3RfaWRsX21hdGNoZXIoc2VsZik6CisgICAgICAgIG1hdGNoZXIgPSBGZWF0dXJlRGVmaW5l
TWF0Y2hlci5pZGxfdXNhZ2VfbWF0Y2hlcigpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2go
bWF0Y2hlciwgJ0VOQUJMRShGT08pJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hl
ciwgJ0VOQUJMRV9GT08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2Rl
ZmluZSBFTkFCTEVfRk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAn
RU5BQkxFX0ZPTyA9JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9GT08gIkluZm8iIFBSSVZBVEUgT04pJykKKworICAgICAg
ICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdbQ29uZGl0aW9uYWw9Rk9PXScsICdFTkFCTEVf
Rk9PJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRpdGlvbmFsPUJB
Ul0nLCAnRU5BQkxFX0JBUicpCisKKyAgICBkZWYgdGVzdF9jbWFrZV9vcHRpb25zX21hdGNoZXIo
c2VsZik6CisgICAgICAgIG1hdGNoZXIgPSBGZWF0dXJlRGVmaW5lTWF0Y2hlci5jbWFrZV9vcHRp
b25zX21hdGNoZXIoKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFC
TEUoRk9PKScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRk9P
JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJyNkZWZpbmUgRU5BQkxFX0ZP
TyAxJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT08gPScp
CisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ1dFQktJVF9PUFRJT05fREVG
SU5FKFVTRV9GT08gIkluZm8iIFBSSVZBVEUgT04pJykKKworICAgICAgICBzZWxmLl9pc19hX21h
dGNoKG1hdGNoZXIsICdXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfRk9PICJJbmZvIiBQUklW
QVRFIE9OKScsICdFTkFCTEVfRk9PJywgdmFsdWU9VHJ1ZSwgZGVzY3JpcHRpb249J0luZm8nKQor
ICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdXRUJLSVRfT1BUSU9OX0RFRklORShF
TkFCTEVfQkFSICJNZXNnIiBQUklWQVRFIE9GRiknLCAnRU5BQkxFX0JBUicsIHZhbHVlPUZhbHNl
LCBkZXNjcmlwdGlvbj0nTWVzZycpCisKKyAgICAgICAgIyBUZXN0IHdpdGggZGlmZmVyZW50IHBy
ZWZpeAorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIuY21ha2Vfb3B0aW9u
c19tYXRjaGVyKCdVU0UnKQorCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdX
RUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfRk9PICJJbmZvIiBQUklWQVRFIE9OKScpCisKKyAg
ICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09QVElPTl9ERUZJTkUoVVNF
X0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknLCAnVVNFX0ZPTycsIHZhbHVlPVRydWUsIGRlc2NyaXB0
aW9uPSdJbmZvJykKKyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09Q
VElPTl9ERUZJTkUoVVNFX0JBUiAiTWVzZyIgUFJJVkFURSBPRkYpJywgJ1VTRV9CQVInLCB2YWx1
ZT1GYWxzZSwgZGVzY3JpcHRpb249J01lc2cnKQorCisgICAgZGVmIHRlc3RfeGNvZGVfb3B0aW9u
c19tYXRjaGVyKHNlbGYpOgorICAgICAgICBtYXRjaGVyID0gRmVhdHVyZURlZmluZU1hdGNoZXIu
eGNvZGVfbWF0Y2hlcigpCisKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VO
QUJMRShGT08pJykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9G
T08nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnI2RlZmluZSBFTkFCTEVf
Rk9PIDEnKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnW0NvbmRpdGlvbmFs
PUZPT10nKQorICAgICAgICBzZWxmLl9ub3RfYV9tYXRjaChtYXRjaGVyLCAnV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX0ZPTyAiSW5mbyIgUFJJVkFURSBPTiknKQorCisgICAgICAgIHNlbGYu
X25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTX1lFUyA9
JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJMRV9GT09fSU9TX1NJ
TkNFXzE5MDkgPScpCisgICAgICAgIHNlbGYuX25vdF9hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVf
Rk9PX2lvc3NpbXVsYXRvciA9JykKKyAgICAgICAgc2VsZi5fbm90X2FfbWF0Y2gobWF0Y2hlciwg
J0VOQUJMRV9QT0lOVEVSX0VWRU5UU193YXRjaHNpbXVsYXRvcltzZGs9d2F0Y2gqNS4qXScpCisK
KyAgICAgICAgc2VsZi5faXNfYV9tYXRjaChtYXRjaGVyLCAnRU5BQkxFX0ZPTyA9JywgJ0VOQUJM
RV9GT08nKQorICAgICAgICBzZWxmLl9pc19hX21hdGNoKG1hdGNoZXIsICdFTkFCTEVfQkFSID0n
LCAnRU5BQkxFX0JBUicpCisgICAgICAgIHNlbGYuX2lzX2FfbWF0Y2gobWF0Y2hlciwgJ0VOQUJM
RV9FWFBFUklNRU5UQUxfRkVBVFVSRVMgPScsICdFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVT
JykKKworICAgIGRlZiBfbm90X2FfbWF0Y2goc2VsZiwgbWF0Y2hlciwgbGluZSk6CisgICAgICAg
IHNlbGYuYXNzZXJ0SXNOb25lKG1hdGNoZXIuc2VhcmNoKGxpbmUpKQorCisgICAgZGVmIF9pc19h
X21hdGNoKHNlbGYsIG1hdGNoZXIsIGxpbmUsIGZsYWcsIHZhbHVlPUZhbHNlLCBkZXNjcmlwdGlv
bj0iIik6CisgICAgICAgIG1hdGNoID0gbWF0Y2hlci5zZWFyY2gobGluZSkKKworICAgICAgICBz
ZWxmLmFzc2VydElzTm90Tm9uZShtYXRjaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRj
aC5mbGFnLCBmbGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLnZhbHVlLCB2YWx1
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRjaC5kZXNjcmlwdGlvbiwgZGVzY3JpcHRp
b24pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2ZlYXR1cmVkZWZpbmVzL3Nl
YXJjaC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvZmVhdHVyZWRlZmluZXMvc2VhcmNoLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTZjNDhiOTc0MWJkCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9mZWF0dXJlZGVmaW5lcy9z
ZWFyY2gucHkKQEAgLTAsMCArMSwxNzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudAorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworIyAgICBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAg
ICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uCisjICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICdBUyBJUycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyIiIlNlYXJjaGVzIGZpbGVzIGZvciBmZWF0dXJlIGRlZmluZXMuIiIi
CisKK2ltcG9ydCBvcworCitmcm9tIGlvIGltcG9ydCBvcGVuCitmcm9tIGZubWF0Y2ggaW1wb3J0
IGZubWF0Y2gKKworZnJvbSB3ZWJraXRweS5mZWF0dXJlZGVmaW5lcy5tYXRjaGVyIGltcG9ydCBG
ZWF0dXJlRGVmaW5lTWF0Y2hlcgorCisKK2NsYXNzIEZlYXR1cmVEZWZpbmVzU2VhcmNoKCk6Cisg
ICAgIiIiU2VhcmNoZXMgZm9yIGZlYXR1cmUgZGVmaW5lcyBpbiBXZWJLaXQgc291cmNlIGNvZGUu
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgbWF0Y2hlciwK
KyAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZmls
ZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgaW5jbHVkZT1Ob25lLAorICAgICAgICAgICAgICAg
ICBleGNsdWRlPU5vbmUpOgorICAgICAgICBzZWxmLl9kZWZpbmVzID0ge30KKyAgICAgICAgc2Vs
Zi5fbWF0Y2hlciA9IG1hdGNoZXIKKyAgICAgICAgc2VsZi5fZGlyZWN0b3JpZXMgPSBkaXJlY3Rv
cmllcyBpZiBkaXJlY3RvcmllcyBlbHNlIFtdCisgICAgICAgIHNlbGYuX2ZpbGVzID0gZmlsZXMg
aWYgZmlsZXMgZWxzZSBbXQorICAgICAgICBzZWxmLl9pbmNsdWRlID0gaW5jbHVkZSBpZiBpbmNs
dWRlIGVsc2UgW10KKyAgICAgICAgc2VsZi5fZXhjbHVkZSA9IGV4Y2x1ZGUgaWYgZXhjbHVkZSBl
bHNlIFtdCisKKyAgICBkZWYgZGVmaW5pdGlvbnMoc2VsZik6CisgICAgICAgICIiIiBSZXRyaWV2
ZSB0aGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgc2VhcmNoIGFzIGEgc2V0LiAiIiIKKyAgICAgICAg
cmV0dXJuIHtzZWxmLl9kZWZpbmVzW2tdIGZvciBrIGluIHNlbGYuX2RlZmluZXN9CisKKyAgICBk
ZWYgc2VhcmNoKHNlbGYsIHJvb3QpOgorICAgICAgICAiIiIgU2VhcmNoIGZvciBmZWF0dXJlIGRl
ZmluZXMgd2l0aGluIHRoZSByb290ICIiIgorICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHNlbGYu
X2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgc2VsZi5fc2VhcmNoX2RpcmVjdG9yeShvcy5wYXRo
LmpvaW4ocm9vdCwgZGlyZWN0b3J5KSkKKworICAgICAgICBmb3IgZmlsZSBpbiBzZWxmLl9maWxl
czoKKyAgICAgICAgICAgIHNlbGYuX3NlYXJjaF9maWxlKG9zLnBhdGguam9pbihyb290LCBmaWxl
KSkKKworICAgIGRlZiBfc2VhcmNoX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9y
IHJvb3QsIF9fLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICAgICAgZm9yIGZpbGUg
aW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2hvdWxkX3NlYXJjaChmaWxlKToK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VhcmNoX2ZpbGUob3MucGF0aC5qb2luKHJvb3Qs
IGZpbGUpKQorCisgICAgZGVmIF9zZWFyY2hfZmlsZShzZWxmLCBwYXRoKToKKyAgICAgICAgd2l0
aCBvcGVuKHBhdGgsIGVuY29kaW5nPSdsYXRpbi0xJykgYXMgY29udGVudHM6CisgICAgICAgICAg
ICBmb3IgbGluZSBpbiBjb250ZW50czoKKyAgICAgICAgICAgICAgICBmb3IgbWF0Y2ggaW4gc2Vs
Zi5fbWF0Y2hlci5maW5kaXRlcihsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IG1h
dGNoLmZsYWcKKworICAgICAgICAgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBzZWxmLl9kZWZp
bmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVmaW5lc1tmbGFnXSA9IG1hdGNo
CisKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVkID0gc2VsZi5fZGVmaW5lc1tmbGFnXQorICAg
ICAgICAgICAgICAgICAgICBzdG9yZWQuam9pbihtYXRjaCkKKyAgICAgICAgICAgICAgICAgICAg
c3RvcmVkLmZpbGVzLmFkZChwYXRoKQorCisgICAgZGVmIF9zaG91bGRfc2VhcmNoKHNlbGYsIGZp
bGUpOgorICAgICAgICBmb3IgcGF0dGVybiBpbiBzZWxmLl9leGNsdWRlOgorICAgICAgICAgICAg
aWYgZm5tYXRjaChmaWxlLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBmb3IgcGF0dGVybiBpbiBzZWxmLl9pbmNsdWRlOgorICAgICAgICAgICAgaWYg
Zm5tYXRjaChmaWxlLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNvdXJjZV9k
aXJlY3RvcmllcyhjbHMpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgb3MucGF0aC5q
b2luKCdTb3VyY2UnLCAnV1RGJyksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJEcml2ZXInKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNv
cmUnKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcpLAorICAg
ICAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0TGVnYWN5JyksCisgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScpLAorICAgICAgICAg
ICAgb3MucGF0aC5qb2luKCdUb29scycpLAorICAgICAgICBdCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgcGxhdGZvcm1fZGVmaW5lcyhjbHMpOgorICAgICAgICAiIiJGaW5kIGZlYXR1cmUg
ZGVmaW5lcyBpbiB3dGYvUGxhdGZvcm1FbmFibGUgaGVhZGVycy4iIiIKKworICAgICAgICBmaWxl
cyA9IFsKKyAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dURicsICd3dGYnLCAn
UGxhdGZvcm1FbmFibGUuaCcpLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V1RGJywgJ3d0ZicsICdQbGF0Zm9ybUVuYWJsZUNvY29hLmgnKSwKKyAgICAgICAgICAgIG9zLnBh
dGguam9pbignU291cmNlJywgJ1dURicsICd3dGYnLCAnUGxhdGZvcm1FbmFibGVXaW5BcHBsZS5o
JyksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXVEYnLCAnd3RmJywgJ1Bs
YXRmb3JtRW5hYmxlV2luQ2Fpcm8uaCcpLAorICAgICAgICBdCisKKyAgICAgICAgcmV0dXJuIEZl
YXR1cmVEZWZpbmVzU2VhcmNoKEZlYXR1cmVEZWZpbmVNYXRjaGVyLmRlY2xhcmF0aW9uX21hdGNo
ZXIoKSwgZmlsZXM9ZmlsZXMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGVybF9kZWZp
bmVzKGNscyk6CisgICAgICAgICIiIkZpbmQgZmVhdHVyZSBkZWZpbmVzIGluIEZlYXR1cmVMaXN0
LnBtLiIiIgorCisgICAgICAgIGZpbGVzID0gWworICAgICAgICAgICAgb3MucGF0aC5qb2luKCdU
b29scycsICdTY3JpcHRzJywgJ3dlYmtpdHBlcmwnLCAnRmVhdHVyZUxpc3QucG0nKSwKKyAgICAg
ICAgXQorCisgICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lc1NlYXJjaChGZWF0dXJlRGVmaW5l
TWF0Y2hlci5mbGFnX21hdGNoZXIoKSwgZmlsZXM9ZmlsZXMpCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgY21ha2VfZGVmaW5lcyhjbHMpOgorICAgICAgICAiIiJGaW5kIGZlYXR1cmUgZGVm
aW5lcyBpbiBXZWJLaXRGZWF0dXJlcy5jbWFrZS4iIiIKKworICAgICAgICBmaWxlcyA9IFsKKyAg
ICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ2NtYWtlJywgJ1dlYktpdEZlYXR1cmVz
LmNtYWtlJyksCisgICAgICAgIF0KKyAgICAgICAgcmV0dXJuIEZlYXR1cmVEZWZpbmVzU2VhcmNo
KAorICAgICAgICAgICAgRmVhdHVyZURlZmluZU1hdGNoZXIuY21ha2Vfb3B0aW9uc19tYXRjaGVy
KCksCisgICAgICAgICAgICBkaXJlY3Rvcmllcz1bb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnY21h
a2UnKV0sCisgICAgICAgICAgICBmaWxlcz1maWxlcywKKyAgICAgICAgICAgIGluY2x1ZGU9WydP
cHRpb25zKi5jbWFrZSddKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHhjb2RlX2RlZmlu
ZXMoY2xzKToKKyAgICAgICAgIiIiRmluZCBmZWF0dXJlIGRlZmluZXMgaW4gRmVhdHVyZURlZmlu
ZXMueGNjb25maWcuIiIiCisKKyAgICAgICAgZmlsZXMgPSBbCisgICAgICAgICAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdDb25maWd1cmF0aW9ucycsICdGZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZycpLAorICAgICAgICBdCisKKyAgICAgICAgcmV0dXJuIEZlYXR1
cmVEZWZpbmVzU2VhcmNoKEZlYXR1cmVEZWZpbmVNYXRjaGVyLnhjb2RlX21hdGNoZXIoKSwgZmls
ZXM9ZmlsZXMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbmF0aXZlX2NvZGUoY2xzKToK
KyAgICAgICAgIiIiRmluZCBmZWF0dXJlIGRlZmluZXMgdXNlZCBpbiBuYXRpdmUgc291cmNlIGNv
ZGUuIiIiCisKKyAgICAgICAgaW5jbHVkZXMgPSBbJyouaCcsICcqLmMnLCAnKi5jcHAnLCAnKi5t
bScsICcqLm1lc3NhZ2VzLmluJ10KKworICAgICAgICByZXR1cm4gRmVhdHVyZURlZmluZXNTZWFy
Y2goCisgICAgICAgICAgICBGZWF0dXJlRGVmaW5lTWF0Y2hlci51c2FnZV9tYXRjaGVyKCksCisg
ICAgICAgICAgICBkaXJlY3Rvcmllcz1GZWF0dXJlRGVmaW5lc1NlYXJjaC5zb3VyY2VfZGlyZWN0
b3JpZXMoKSwKKyAgICAgICAgICAgIGluY2x1ZGU9aW5jbHVkZXMpCisKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgY21ha2VfY29kZShjbHMpOgorICAgICAgICAiIiJGaW5kIGZlYXR1cmUgZGVm
aW5lcyB1c2VkIGluIENNYWtlIHNvdXJjZSBjb2RlLiIiIgorICAgICAgICBmaWxlcyA9IFsnQ01h
a2VMaXN0cy50eHQnLCBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdDTWFrZUxpc3RzLnR4dCcpXQor
CisgICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lc1NlYXJjaCgKKyAgICAgICAgICAgIEZlYXR1
cmVEZWZpbmVNYXRjaGVyLmZsYWdfbWF0Y2hlcigpLAorICAgICAgICAgICAgZGlyZWN0b3JpZXM9
RmVhdHVyZURlZmluZXNTZWFyY2guc291cmNlX2RpcmVjdG9yaWVzKCksCisgICAgICAgICAgICBm
aWxlcz1maWxlcywKKyAgICAgICAgICAgIGluY2x1ZGU9WydDTWFrZUxpc3RzLnR4dCcsICcqLmNt
YWtlJ10pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaWRsX2NvZGUoY2xzKToKKyAgICAg
ICAgIiIiRmluZCBmZWF0dXJlIGRlZmluZXMgdXNlZCBpbiBJREwgc291cmNlIGNvZGUuIiIiCisg
ICAgICAgIHJldHVybiBGZWF0dXJlRGVmaW5lc1NlYXJjaCgKKyAgICAgICAgICAgIEZlYXR1cmVE
ZWZpbmVNYXRjaGVyLmlkbF91c2FnZV9tYXRjaGVyKCksCisgICAgICAgICAgICBkaXJlY3Rvcmll
cz1GZWF0dXJlRGVmaW5lc1NlYXJjaC5zb3VyY2VfZGlyZWN0b3JpZXMoKSwKKyAgICAgICAgICAg
IGluY2x1ZGU9WycqLmlkbCddKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>