<?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>152982</bug_id>
          
          <creation_ts>2016-01-11 12:15:10 -0800</creation_ts>
          <short_desc>Standardize the usage of &quot;branch&quot; vs. &quot;branchName&quot;.</short_desc>
          <delta_ts>2016-01-14 14:33:47 -0800</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>RESOLVED</bug_status>
          <resolution>FIXED</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>
          <dependson>152910</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jason Marcell">jmarcell</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adele</cc>
    
    <cc>ap</cc>
    
    <cc>dbates</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>dino</cc>
    
    <cc>jmarcell</cc>
    
    <cc>lforschler</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1154437</commentid>
    <comment_count>0</comment_count>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2016-01-11 12:15:10 -0800</bug_when>
    <thetext>Standardize the usage of &quot;branch&quot; vs. &quot;branchName&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154441</commentid>
    <comment_count>1</comment_count>
      <attachid>268702</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2016-01-11 12:18:59 -0800</bug_when>
    <thetext>Created attachment 268702
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154456</commentid>
    <comment_count>2</comment_count>
      <attachid>268702</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-01-11 13:02:20 -0800</bug_when>
    <thetext>Comment on attachment 268702
Patch

r=me

cq- since this patch depends on the patch for bug #152910 and it has not landed as of the time of writing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154486</commentid>
    <comment_count>3</comment_count>
      <attachid>268710</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2016-01-11 14:18:26 -0800</bug_when>
    <thetext>Created attachment 268710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154493</commentid>
    <comment_count>4</comment_count>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2016-01-11 14:30:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created attachment 268710 [details]
&gt; Patch

This patch was not supposed to be uploaded here nor was the original patch supposed to be obsoleted. The webkit-patch command did this erroneously. I&apos;ve written up a bug to track this erroneous behavior: https://bugs.webkit.org/show_bug.cgi?id=152987</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154555</commentid>
    <comment_count>5</comment_count>
      <attachid>268730</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2016-01-11 17:03:11 -0800</bug_when>
    <thetext>Created attachment 268730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154556</commentid>
    <comment_count>6</comment_count>
      <attachid>268730</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2016-01-11 17:04:15 -0800</bug_when>
    <thetext>Comment on attachment 268730
Patch

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

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:69
&gt; +            return (!commit.containsBranchLocation || commit.branchName === branchName) &amp;&amp; filter(commit);

I had accidentally left this change out of the original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155590</commentid>
    <comment_count>7</comment_count>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2016-01-14 14:33:47 -0800</bug_when>
    <thetext>Landed: https://trac.webkit.org/changeset/195076</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268702</attachid>
            <date>2016-01-11 12:18:59 -0800</date>
            <delta_ts>2016-01-11 17:03:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152982-20160111121828.patch</filename>
            <type>text/plain</type>
            <size>8282</size>
            <attacher name="Jason Marcell">jmarcell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0ODU4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTA3YTAwN2U5MGIyZGEzYTM0ZTg1YTUzMzUyMjU2Njg3
ODNmMGYzYS4uNTExY2NhNzZkYWZkOWEzYjZjMGRjYjUxYzA4NTljNWNjODU0NzdiMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIz
IEBACisyMDE2LTAxLTExICBKYXNvbiBNYXJjZWxsICA8am1hcmNlbGxAYXBwbGUuY29tPgorCisg
ICAgICAgIFN0YW5kYXJkaXplIHRoZSB1c2FnZSBvZiAiYnJhbmNoIiB2cy4gImJyYW5jaE5hbWUi
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTgy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gYW4g
ZWFybGllciBwYXRjaCB3ZSBzdGFydGVkIHVzaW5nIHRoZSBuYW1lICJicmFuY2giIHRvIGluZGlj
YXRlIGEgYnJhbmNoIG9iamVjdCwgd2hlcmVhcworICAgICAgICAiYnJhbmNoTmFtZSIgaW1wbGll
cyB0aGF0IHRoZSB2YXJpYWJsZSBvciBwcm9wZXJ0eSBpbiBxdWVzdGlvbiBpcyBzaW1wbHkgYSBz
dHJpbmcuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5qczoK
KyAgICAgICAgKEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZS5fcG9wb3ZlckxpbmVzRm9yQ29t
bWl0UmFuZ2UpOiBDaGFuZ2UgYnJhbmNoIHRvIGJyYW5jaE5hbWUuCisgICAgICAgIChCdWlsZGJv
dFF1ZXVlVmlldy5wcm90b3R5cGUuX3ByZXNlbnRQb3BvdmVyRm9yUmV2aXNpb25SYW5nZSk6IENo
YW5nZSBicmFuY2ggdG8gYnJhbmNoLm5hbWUuCisgICAgICAgIChCdWlsZGJvdFF1ZXVlVmlldy5w
cm90b3R5cGUuX3JldmlzaW9uQ29udGVudFdpdGhQb3BvdmVyRm9ySXRlcmF0aW9uKTogQ2hhbmdl
IGJyYW5jaCB0byBicmFuY2hOYW1lLgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1RyYWMuanM6
CisgICAgICAgIChUcmFjLnByb3RvdHlwZS5jb21taXRzT25CcmFuY2gpOiBDaGFuZ2UgYnJhbmNo
IHRvIGJyYW5jaE5hbWUuCisgICAgICAgIChUcmFjLnByb3RvdHlwZS5fY29udmVydENvbW1pdElu
Zm9FbGVtZW50VG9PYmplY3QpOiBEaXR0by4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy90ZXN0
cy9Nb2NrVHJhYy5qczoKKyAgICAgICAgKE1vY2tUcmFjKTogRGl0dG8uCisKIDIwMTYtMDEtMDgg
IEphc29uIE1hcmNlbGwgIDxqbWFyY2VsbEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3Ig
Y29tcGFyZUl0ZXJhdGlvbnMgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBjb2RlLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZVZpZXcuanMgYi9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQv
U2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5qcwppbmRleCA5MjY3ZjQ5ZGE3NTcyZDA0M2QzYjk2
OWI5NDdkZjgwOTI1YjE3ZTM4Li4yNDhlZGFiYzJhZmVkZDQ5YjdkN2UxM2JiYzQxNTY1NWE5OWZl
MjUwIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5q
cworKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5qcwpAQCAtMTEw
LDcgKzExMCw3IEBAIEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgbmV3
IFBvcG92ZXJUcmFja2VyKG1lc3NhZ2VFbGVtZW50LCB0aGlzLl9wcmVzZW50UG9wb3ZlckZvclBl
bmRpbmdDb21taXRzLmJpbmQodGhpcyksIHF1ZXVlKTsKICAgICB9LAogCi0gICAgX3BvcG92ZXJM
aW5lc0ZvckNvbW1pdFJhbmdlOiBmdW5jdGlvbih0cmFjLCBicmFuY2gsIGZpcnN0UmV2aXNpb25O
dW1iZXIsIGxhc3RSZXZpc2lvbk51bWJlcikKKyAgICBfcG9wb3ZlckxpbmVzRm9yQ29tbWl0UmFu
Z2U6IGZ1bmN0aW9uKHRyYWMsIGJyYW5jaE5hbWUsIGZpcnN0UmV2aXNpb25OdW1iZXIsIGxhc3RS
ZXZpc2lvbk51bWJlcikKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGxpbmVGb3JDb21taXQodHJh
YywgY29tbWl0KQogICAgICAgICB7CkBAIC0xNDEsNyArMTQxLDcgQEAgQnVpbGRib3RRdWV1ZVZp
ZXcucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIEZJWE1FOiBUbyBiZSAxMDAlIGNvcnJlY3Qs
IHdlIHNob3VsZCBhbHNvIGZpbHRlciBvdXQgY2hhbmdlcyB0aGF0IGFyZSBpZ25vcmVkIGJ5CiAg
ICAgICAgIC8vIHRoZSBxdWV1ZSwgc2VlIF9zaG91bGRfZmlsZV90cmlnZ2VyX2J1aWxkIGluIHdr
YnVpbGQucHkuCi0gICAgICAgIHZhciBjb21taXRzID0gdHJhYy5jb21taXRzT25CcmFuY2goYnJh
bmNoLCBmdW5jdGlvbihjb21taXQpIHsgcmV0dXJuIGNvbW1pdC5yZXZpc2lvbk51bWJlciA+PSBm
aXJzdFJldmlzaW9uTnVtYmVyICYmIGNvbW1pdC5yZXZpc2lvbk51bWJlciA8PSBsYXN0UmV2aXNp
b25OdW1iZXI7IH0pOworICAgICAgICB2YXIgY29tbWl0cyA9IHRyYWMuY29tbWl0c09uQnJhbmNo
KGJyYW5jaE5hbWUsIGZ1bmN0aW9uKGNvbW1pdCkgeyByZXR1cm4gY29tbWl0LnJldmlzaW9uTnVt
YmVyID49IGZpcnN0UmV2aXNpb25OdW1iZXIgJiYgY29tbWl0LnJldmlzaW9uTnVtYmVyIDw9IGxh
c3RSZXZpc2lvbk51bWJlcjsgfSk7CiAgICAgICAgIHJldHVybiBjb21taXRzLm1hcChmdW5jdGlv
bihjb21taXQpIHsKICAgICAgICAgICAgIHJldHVybiBsaW5lRm9yQ29tbWl0KHRyYWMsIGNvbW1p
dCk7CiAgICAgICAgIH0sIHRoaXMpLnJldmVyc2UoKTsKQEAgLTE4OCw3ICsxODgsNyBAQCBCdWls
ZGJvdFF1ZXVlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0g
ImNvbW1pdC1oaXN0b3J5LXBvcG92ZXIiOwogCiAgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1
YXJhbnRlZXMgdGhhdCBUcmFjIGhhcyBoaXN0b3JpY2FsIGRhdGEgZm9yIHRoZXNlIHJldmlzaW9u
cy4KLSAgICAgICAgdmFyIGxpbmVzRm9yQ29tbWl0cyA9IHRoaXMuX3BvcG92ZXJMaW5lc0ZvckNv
bW1pdFJhbmdlKGNvbnRleHQudHJhYywgY29udGV4dC5icmFuY2gsIGNvbnRleHQuZmlyc3RSZXZp
c2lvbiwgY29udGV4dC5sYXN0UmV2aXNpb24pOworICAgICAgICB2YXIgbGluZXNGb3JDb21taXRz
ID0gdGhpcy5fcG9wb3ZlckxpbmVzRm9yQ29tbWl0UmFuZ2UoY29udGV4dC50cmFjLCBjb250ZXh0
LmJyYW5jaE5hbWUsIGNvbnRleHQuZmlyc3RSZXZpc2lvbiwgY29udGV4dC5sYXN0UmV2aXNpb24p
OwogCiAgICAgICAgIHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAg
ICAgICAgIGxpbmUuY2xhc3NOYW1lID0gInRpdGxlIjsKQEAgLTE5OCw3ICsxOTgsNyBAQCBCdWls
ZGJvdFF1ZXVlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb250ZW50LmFwcGVuZENo
aWxkKGxpbmUpOwogICAgICAgICAgICAgdGhpcy5fYWRkRGl2aWRlclRvUG9wb3Zlcihjb250ZW50
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpbmUudGV4dENvbnRlbnQgPSAibm8g
Y29tbWl0cyB0byAiICsgY29udGV4dC5icmFuY2ggKyAiIHNpbmNlIHByZXZpb3VzIHJlc3VsdCI7
CisgICAgICAgICAgICBsaW5lLnRleHRDb250ZW50ID0gIm5vIGNvbW1pdHMgdG8gIiArIGNvbnRl
eHQuYnJhbmNoTmFtZSArICIgc2luY2UgcHJldmlvdXMgcmVzdWx0IjsKICAgICAgICAgICAgIGNv
bnRlbnQuYXBwZW5kQ2hpbGQobGluZSk7CiAgICAgICAgIH0KIApAQCAtMjMyLDcgKzIzMiw3IEBA
IEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHByZXZpb3VzSXRlcmF0aW9uLnJldmlzaW9uW3JlcG9zaXRvcnlOYW1lXSk7CiAgICAgICAg
ICAgICB2YXIgY29udGV4dCA9IHsKICAgICAgICAgICAgICAgICB0cmFjOiByZXBvc2l0b3J5LnRy
YWMsCi0gICAgICAgICAgICAgICAgYnJhbmNoOiBicmFuY2gubmFtZSwKKyAgICAgICAgICAgICAg
ICBicmFuY2hOYW1lOiBicmFuY2gubmFtZSwKICAgICAgICAgICAgICAgICBmaXJzdFJldmlzaW9u
OiBwcmV2aW91c0l0ZXJhdGlvbi5yZXZpc2lvbltyZXBvc2l0b3J5TmFtZV0gKyAxLAogICAgICAg
ICAgICAgICAgIGxhc3RSZXZpc2lvbjogaXRlcmF0aW9uLnJldmlzaW9uW3JlcG9zaXRvcnlOYW1l
XQogICAgICAgICAgICAgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1RyYWMu
anMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9UcmFjLmpzCmluZGV4IGExZGQyOGZhMjc1MGVjMjkz
M2NiOGJmZWE4ZGMwNDVjM2ExNTI2Y2IuLjQ5ZTY0MjAyOGZlNTA0ZmU3NjhiOTA1MTVjZTg0NGVm
ZWNjYzVhNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1RyYWMuanMKKysrIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvZGFzaGJvYXJkL1NjcmlwdHMvVHJhYy5qcwpAQCAtNjMsNyArNjMsNyBAQCBUcmFjLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkZWRDb21taXRzW3RoaXMucmVjb3Jk
ZWRDb21taXRzLmxlbmd0aCAtIDFdLnJldmlzaW9uTnVtYmVyOwogICAgIH0sCiAKLSAgICBjb21t
aXRzT25CcmFuY2g6IGZ1bmN0aW9uKGJyYW5jaCwgZmlsdGVyKQorICAgIGNvbW1pdHNPbkJyYW5j
aDogZnVuY3Rpb24oYnJhbmNoTmFtZSwgZmlsdGVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRo
aXMucmVjb3JkZWRDb21taXRzLmZpbHRlcihmdW5jdGlvbihjb21taXQpIHsKICAgICAgICAgICAg
IHJldHVybiAoIWNvbW1pdC5jb250YWluc0JyYW5jaExvY2F0aW9uIHx8IGNvbW1pdC5icmFuY2gg
PT09IGJyYW5jaCkgJiYgZmlsdGVyKGNvbW1pdCk7CkBAIC0xNDksMTEgKzE0OSwxMSBAQCBUcmFj
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKCJ0YWdz
LyIpKQogICAgICAgICAgICAgICAgIHJlc3VsdC50YWcgPSBsb2NhdGlvbi5zdWJzdHIoNSwgbG9j
YXRpb24uaW5kZXhPZigiLyIsIDUpIC0gNSk7CiAgICAgICAgICAgICBlbHNlIGlmIChsb2NhdGlv
bi5zdGFydHNXaXRoKCJicmFuY2hlcy8iKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYnJhbmNo
ID0gbG9jYXRpb24uc3Vic3RyKDksIGxvY2F0aW9uLmluZGV4T2YoIi8iLCA5KSAtIDkpOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5icmFuY2hOYW1lID0gbG9jYXRpb24uc3Vic3RyKDksIGxvY2F0
aW9uLmluZGV4T2YoIi8iLCA5KSAtIDkpOwogICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRpb24u
c3RhcnRzV2l0aCgicmVsZWFzZXMvIikpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlbGVhc2Ug
PSBsb2NhdGlvbi5zdWJzdHIoOSwgbG9jYXRpb24uaW5kZXhPZigiLyIsIDkpIC0gOSk7CiAgICAg
ICAgICAgICBlbHNlIGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKCJ0cnVuay8iKSkKLSAgICAgICAg
ICAgICAgICByZXN1bHQuYnJhbmNoID0gInRydW5rIjsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YnJhbmNoTmFtZSA9ICJ0cnVuayI7CiAgICAgICAgICAgICBlbHNlIGlmIChsb2NhdGlvbi5zdGFy
dHNXaXRoKCJzdWJtaXNzaW9ucy8iKSkKICAgICAgICAgICAgICAgICA7IC8vIFRoZXNlIGNoYW5n
ZXMgYXJlIG5ldmVyIHJlbGV2YW50IHRvIHRoZSBkYXNoYm9hcmQuCiAgICAgICAgICAgICBlbHNl
IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL01vY2tUcmFjLmpzIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvZGFzaGJvYXJkL1NjcmlwdHMvdGVzdHMvTW9ja1RyYWMuanMKaW5kZXggYTQ4ZjkxNTJjODkw
NWFjODE4NDkzNmVhNzMzYjhmY2ZkNTNjOGVmZS4uYThhMjBiN2E5YTU5MzdjNTc5MmNkN2IxMjY4
Y2Y0YTc4YjE4NjQxMiAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvdGVzdHMvTW9j
a1RyYWMuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvdGVzdHMvTW9ja1RyYWMuanMKQEAg
LTEwLDcgKzEwLDcgQEAgTW9ja1RyYWMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICAiZGF0ZSI6
ICIyMDE1LTExLTE1VDE3OjA1OjQ0LjAwMFoiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImRlc2NyaXB0aW9uIiwKICAgICAgICAgICAgICJjb250YWluc0JyYW5jaExvY2F0aW9uIjogdHJ1
ZSwKLSAgICAgICAgICAgICJicmFuY2giOiAidHJ1bmsiCisgICAgICAgICAgICAiYnJhbmNoTmFt
ZSI6ICJ0cnVuayIKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgInJldmlzaW9u
TnVtYmVyIjogMzMwMTksCkBAIC0yMCw3ICsyMCw3IEBAIE1vY2tUcmFjID0gZnVuY3Rpb24oKQog
ICAgICAgICAgICAgImRhdGUiOiAiMjAxNS0xMS0xNlQwMToxODoyMy4wMDBaIiwKICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJkZXNjcmlwdGlvbiIsCiAgICAgICAgICAgICAiY29udGFpbnNC
cmFuY2hMb2NhdGlvbiI6IHRydWUsCi0gICAgICAgICAgICAiYnJhbmNoIjogInRydW5rIgorICAg
ICAgICAgICAgImJyYW5jaE5hbWUiOiAidHJ1bmsiCiAgICAgICAgIH0sCiAgICAgICAgIHsKICAg
ICAgICAgICAgICJyZXZpc2lvbk51bWJlciI6IDMzMDIwLApAQCAtMzAsNyArMzAsNyBAQCBNb2Nr
VHJhYyA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgICJkYXRlIjogIjIwMTUtMTEtMTZUMDE6MTk6
MjcuMDAwWiIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZGVzY3JpcHRpb24iLAogICAg
ICAgICAgICAgImNvbnRhaW5zQnJhbmNoTG9jYXRpb24iOiB0cnVlLAotICAgICAgICAgICAgImJy
YW5jaCI6ICJ0cnVuayIKKyAgICAgICAgICAgICJicmFuY2hOYW1lIjogInRydW5rIgogICAgICAg
ICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAicmV2aXNpb25OdW1iZXIiOiAzMzAyMSwKQEAg
LTQwLDcgKzQwLDcgQEAgTW9ja1RyYWMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICAiZGF0ZSI6
ICIyMDE1LTExLTE2VDAxOjIwOjU4LjAwMFoiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImRlc2NyaXB0aW9uIiwKICAgICAgICAgICAgICJjb250YWluc0JyYW5jaExvY2F0aW9uIjogdHJ1
ZSwKLSAgICAgICAgICAgICJicmFuY2giOiAic29tZU90aGVyQnJhbmNoIgorICAgICAgICAgICAg
ImJyYW5jaE5hbWUiOiAic29tZU90aGVyQnJhbmNoIgogICAgICAgICB9LAogICAgICAgICB7CiAg
ICAgICAgICAgICAicmV2aXNpb25OdW1iZXIiOiAzMzAyMiwKQEAgLTUwLDcgKzUwLDcgQEAgTW9j
a1RyYWMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICAiZGF0ZSI6ICIyMDE1LTExLTE2VDAxOjIy
OjAxLjAwMFoiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImRlc2NyaXB0aW9uIiwKICAg
ICAgICAgICAgICJjb250YWluc0JyYW5jaExvY2F0aW9uIjogdHJ1ZSwKLSAgICAgICAgICAgICJi
cmFuY2giOiAidHJ1bmsiCisgICAgICAgICAgICAiYnJhbmNoTmFtZSI6ICJ0cnVuayIKICAgICAg
ICAgfQogICAgIF07CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268710</attachid>
            <date>2016-01-11 14:18:26 -0800</date>
            <delta_ts>2016-01-11 14:31:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152982-20160111141755.patch</filename>
            <type>text/plain</type>
            <size>141600</size>
            <attacher name="Jason Marcell">jmarcell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0ODY2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDQ2NDFlNzQxNjQ4ZDAyZTY2MzEzMjMxYWVlMDUxZjA1
ZmNlOWQ5My4uNDljOTA5NTE0N2ZjMWY5MGU4MmUzYzQzYzk4ZDE1YzRjODlmYzE5NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
NiBAQAorMjAxNi0wMS0wOCAgSmFzb24gTWFyY2VsbCAgPGptYXJjZWxsQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgUVVuaXQgZm9yIHVuaXQgdGVzdGluZyBhbmQgYWRkIGEgdW5pdCB0ZXN0IHRv
IHRlc3QgQnVpbGRib3RRdWV1ZVZpZXcuX2FwcGVuZFBlbmRpbmdSZXZpc2lvbkNvdW50LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTEwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBCdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvRXh0
ZXJuYWwvcXVuaXQtMS4yMC4wLmNzczogQWRkZWQuCisgICAgICAgICgjcXVuaXQtdGVzdHMsICNx
dW5pdC1oZWFkZXIsICNxdW5pdC1iYW5uZXIsICNxdW5pdC10ZXN0cnVubmVyLXRvb2xiYXIsICNx
dW5pdC1maWx0ZXJlZFRlc3QsICNxdW5pdC11c2VyQWdlbnQsICNxdW5pdC10ZXN0cmVzdWx0KToK
KyAgICAgICAgKCNxdW5pdC10ZXN0cnVubmVyLXRvb2xiYXIsICNxdW5pdC1maWx0ZXJlZFRlc3Qs
ICNxdW5pdC11c2VyQWdlbnQsICNxdW5pdC10ZXN0cmVzdWx0LCAjcXVuaXQtdGVzdHMgbGkpOgor
ICAgICAgICAoI3F1bml0LXRlc3RzKToKKyAgICAgICAgKCNxdW5pdC10ZXN0cywgI3F1bml0LWhl
YWRlciwgI3F1bml0LWJhbm5lciwgI3F1bml0LWZpbHRlcmVkVGVzdCwgI3F1bml0LXVzZXJBZ2Vu
dCwgI3F1bml0LXRlc3RyZXN1bHQsICNxdW5pdC1tb2R1bGVmaWx0ZXIpOgorICAgICAgICAoI3F1
bml0LWhlYWRlcik6CisgICAgICAgICgjcXVuaXQtaGVhZGVyIGEpOgorICAgICAgICAoI3F1bml0
LWhlYWRlciBhOmZvY3VzKToKKyAgICAgICAgKCNxdW5pdC10ZXN0cnVubmVyLXRvb2xiYXIgbGFi
ZWwpOgorICAgICAgICAoI3F1bml0LWJhbm5lcik6CisgICAgICAgICgjcXVuaXQtdGVzdHJ1bm5l
ci10b29sYmFyKToKKyAgICAgICAgKCNxdW5pdC1maWx0ZXJlZFRlc3QpOgorICAgICAgICAoI3F1
bml0LXVzZXJBZ2VudCk6CisgICAgICAgICgjcXVuaXQtbW9kdWxlZmlsdGVyLWNvbnRhaW5lcik6
CisgICAgICAgICgucXVuaXQtdXJsLWNvbmZpZyk6CisgICAgICAgICgucXVuaXQtZmlsdGVyKToK
KyAgICAgICAgKCNxdW5pdC10ZXN0cyBsaSk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgPiBsaSk6
CisgICAgICAgICgjcXVuaXQtdGVzdHMgbGkuc2tpcHBlZCk6CisgICAgICAgICgjcXVuaXQtdGVz
dHMuaGlkZXBhc3MgbGkucGFzcyk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgbGkgc3Ryb25nKToK
KyAgICAgICAgKCNxdW5pdC10ZXN0cyBsaS5za2lwcGVkIHN0cm9uZyk6CisgICAgICAgICgjcXVu
aXQtdGVzdHMgbGkgYSk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgbGkgcCBhKToKKyAgICAgICAg
KCNxdW5pdC10ZXN0cyBsaSBhOmZvY3VzKToKKyAgICAgICAgKCNxdW5pdC10ZXN0cyBsaSAucnVu
dGltZSk6CisgICAgICAgICgucXVuaXQtYXNzZXJ0LWxpc3QpOgorICAgICAgICAoLnF1bml0LXNv
dXJjZSk6CisgICAgICAgICgucXVuaXQtY29sbGFwc2VkKToKKyAgICAgICAgKCNxdW5pdC10ZXN0
cyB0YWJsZSk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgdGgpOgorICAgICAgICAoI3F1bml0LXRl
c3RzIHRkKToKKyAgICAgICAgKCNxdW5pdC10ZXN0cyBwcmUpOgorICAgICAgICAoI3F1bml0LXRl
c3RzIGRlbCk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgaW5zKToKKyAgICAgICAgKCNxdW5pdC10
ZXN0cyBiLmNvdW50cyk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgYi5wYXNzZWQpOgorICAgICAg
ICAoI3F1bml0LXRlc3RzIGIuZmFpbGVkKToKKyAgICAgICAgKCNxdW5pdC10ZXN0cyBsaSBsaSk6
CisgICAgICAgICgjcXVuaXQtdGVzdHMgbGkgbGkucGFzcyk6CisgICAgICAgICgjcXVuaXQtdGVz
dHMgLnBhc3MpOgorICAgICAgICAoI3F1bml0LXRlc3RzIC5wYXNzIC50ZXN0LW5hbWUpOgorICAg
ICAgICAoI3F1bml0LXRlc3RzIC5wYXNzIC50ZXN0LWV4cGVjdGVkKToKKyAgICAgICAgKCNxdW5p
dC1iYW5uZXIucXVuaXQtcGFzcyk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgbGkgbGkuZmFpbCk6
CisgICAgICAgICgjcXVuaXQtdGVzdHMgPiBsaTpsYXN0LWNoaWxkKToKKyAgICAgICAgKCNxdW5p
dC10ZXN0cyAuZmFpbCk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgLmZhaWwgLm1vZHVsZS1uYW1l
KToKKyAgICAgICAgKCNxdW5pdC10ZXN0cyAuZmFpbCAudGVzdC1hY3R1YWwpOgorICAgICAgICAo
I3F1bml0LXRlc3RzIC5mYWlsIC50ZXN0LWV4cGVjdGVkKToKKyAgICAgICAgKCNxdW5pdC1iYW5u
ZXIucXVuaXQtZmFpbCk6CisgICAgICAgICgjcXVuaXQtdGVzdHMgLnNraXBwZWQpOgorICAgICAg
ICAoI3F1bml0LXRlc3RzIC5xdW5pdC1za2lwcGVkLWxhYmVsKToKKyAgICAgICAgKCNxdW5pdC10
ZXN0cmVzdWx0KToKKyAgICAgICAgKCNxdW5pdC10ZXN0cmVzdWx0IC5tb2R1bGUtbmFtZSk6Cisg
ICAgICAgICgjcXVuaXQtZml4dHVyZSk6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL0V4dGVybmFsL3F1bml0
LTEuMjAuMC5qczogQWRkZWQuCisgICAgICAgIChub3cuRGF0ZS5ub3cpOgorICAgICAgICAoZGVm
aW5lZC5zZXNzaW9uU3RvcmFnZSk6CisgICAgICAgIChkaWZmKToKKyAgICAgICAgKGluQXJyYXkp
OgorICAgICAgICAob2JqZWN0VmFsdWVzKToKKyAgICAgICAgKGV4dGVuZCk6CisgICAgICAgIChv
YmplY3RUeXBlKToKKyAgICAgICAgKGlzKToKKyAgICAgICAgKGdldFVybFBhcmFtcyk6CisgICAg
ICAgIChleHRyYWN0U3RhY2t0cmFjZSk6CisgICAgICAgIChzb3VyY2VGcm9tU3RhY2t0cmFjZSk6
CisgICAgICAgICh1cmxQYXJhbXMuZGVmaW5lZC5kb2N1bWVudC5nZXRVcmxQYXJhbXMpOgorICAg
ICAgICAocmVnaXN0ZXJMb2dnaW5nQ2FsbGJhY2tzLnJlZ2lzdGVyTG9nZ2luZ0NhbGxiYWNrLmxv
Z2dpbmdDYWxsYmFjayk6CisgICAgICAgIChyZWdpc3RlckxvZ2dpbmdDYWxsYmFja3MucmVnaXN0
ZXJMb2dnaW5nQ2FsbGJhY2spOgorICAgICAgICAocnVuTG9nZ2luZ0NhbGxiYWNrcyk6CisgICAg
ICAgICh2ZXJpZnlMb2dnaW5nQ2FsbGJhY2tzKToKKyAgICAgICAgKHdpbmRvdy5vbmVycm9yKToK
KyAgICAgICAgKGNyZWF0ZU1vZHVsZSk6CisgICAgICAgIChzZXRDdXJyZW50TW9kdWxlKToKKyAg
ICAgICAgKG1vZHVsZSk6CisgICAgICAgIChzdGFydCk6CisgICAgICAgIChzdG9wKToKKyAgICAg
ICAgKGxvYWQpOgorICAgICAgICAoc3RhY2spOgorICAgICAgICAoYmVnaW4pOgorICAgICAgICAo
cHJvY2Vzcy5uZXh0KToKKyAgICAgICAgKHByb2Nlc3MpOgorICAgICAgICAocGF1c2VQcm9jZXNz
aW5nKToKKyAgICAgICAgKGRvbmUpOgorICAgICAgICAoVGVzdC50aGlzLmNhbGxiYWNrKToKKyAg
ICAgICAgKFRlc3QpOgorICAgICAgICAoVGVzdC5wcm90b3R5cGUuYmVmb3JlKToKKyAgICAgICAg
KFRlc3QucHJvdG90eXBlLnJ1blRlc3QpOgorICAgICAgICAoVGVzdC5wcm90b3R5cGUucnVuKToK
KyAgICAgICAgKFRlc3QucHJvdG90eXBlLmFmdGVyKToKKyAgICAgICAgKFRlc3QucHJvdG90eXBl
LnJldHVybi5ydW5Ib29rLmNhbGxIb29rKToKKyAgICAgICAgKFRlc3QucHJvdG90eXBlLnJldHVy
bi5ydW5Ib29rKToKKyAgICAgICAgKFRlc3QucHJvdG90eXBlLnF1ZXVlSG9vayk6CisgICAgICAg
IChUZXN0LnByb3RvdHlwZS4pOgorICAgICAgICAoVGVzdC5wcm90b3R5cGUuaG9va3MpOgorICAg
ICAgICAoVGVzdC5wcm90b3R5cGUuZmluaXNoKToKKyAgICAgICAgKFRlc3QucHJvdG90eXBlLnF1
ZXVlKToKKyAgICAgICAgKFRlc3QucHJvdG90eXBlLnB1c2gpOgorICAgICAgICAoVGVzdC5wcm90
b3R5cGUucHVzaEZhaWx1cmUpOgorICAgICAgICAoVGVzdC5wcm90b3R5cGUucmVzb2x2ZVByb21p
c2UpOgorICAgICAgICAoVGVzdC5wcm90b3R5cGUudGVzdEluTW9kdWxlQ2hhaW4pOgorICAgICAg
ICAoVGVzdC5wcm90b3R5cGUudmFsaWQpOgorICAgICAgICAoUVVuaXQucmVzZXQpOgorICAgICAg
ICAoUVVuaXQucHVzaEZhaWx1cmUpOgorICAgICAgICAoZ2VuZXJhdGVIYXNoKToKKyAgICAgICAg
KHN5bmNocm9uaXplKToKKyAgICAgICAgKHByaW9yaXR5RmlsbCk6CisgICAgICAgIChzYXZlR2xv
YmFsKToKKyAgICAgICAgKGNoZWNrUG9sbHV0aW9uKToKKyAgICAgICAgKGFzeW5jVGVzdCk6Cisg
ICAgICAgICh0ZXN0KToKKyAgICAgICAgKHNraXApOgorICAgICAgICAob25seSk6CisgICAgICAg
IChBc3NlcnQpOgorICAgICAgICAoUVVuaXQuYXNzZXJ0LkFzc2VydC5wcm90b3R5cGUuZXhwZWN0
KToKKyAgICAgICAgKFFVbml0LmFzc2VydC5Bc3NlcnQucHJvdG90eXBlLnJldHVybi5kb25lKToK
KyAgICAgICAgKFFVbml0LmFzc2VydC5Bc3NlcnQucHJvdG90eXBlLmFzeW5jKToKKyAgICAgICAg
KFFVbml0LmFzc2VydC5Bc3NlcnQucHJvdG90eXBlLnB1c2gpOgorICAgICAgICAoUVVuaXQuYXNz
ZXJ0LkFzc2VydC5wcm90b3R5cGUub2spOgorICAgICAgICAoUVVuaXQuYXNzZXJ0LkFzc2VydC5w
cm90b3R5cGUubm90T2spOgorICAgICAgICAoUVVuaXQuYXNzZXJ0LkFzc2VydC5wcm90b3R5cGUu
ZXF1YWwpOgorICAgICAgICAoUVVuaXQuYXNzZXJ0LkFzc2VydC5wcm90b3R5cGUubm90RXF1YWwp
OgorICAgICAgICAoUVVuaXQuYXNzZXJ0LkFzc2VydC5wcm90b3R5cGUucHJvcEVxdWFsKToKKyAg
ICAgICAgKFFVbml0LmFzc2VydC5Bc3NlcnQucHJvdG90eXBlLm5vdFByb3BFcXVhbCk6CisgICAg
ICAgIChRVW5pdC5hc3NlcnQuQXNzZXJ0LnByb3RvdHlwZS5kZWVwRXF1YWwpOgorICAgICAgICAo
UVVuaXQuYXNzZXJ0LkFzc2VydC5wcm90b3R5cGUubm90RGVlcEVxdWFsKToKKyAgICAgICAgKFFV
bml0LmFzc2VydC5Bc3NlcnQucHJvdG90eXBlLnN0cmljdEVxdWFsKToKKyAgICAgICAgKFFVbml0
LmFzc2VydC5Bc3NlcnQucHJvdG90eXBlLm5vdFN0cmljdEVxdWFsKToKKyAgICAgICAgKFFVbml0
LmFzc2VydC5Bc3NlcnQucHJvdG90eXBlLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAg
KGVycm9yU3RyaW5nKToKKyAgICAgICAgKGNvbXBhcmVDb25zdHJ1Y3RvcnMpOgorICAgICAgICAo
Y2FsbGJhY2tzLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKHR5cGVFcXVpdik6Cisg
ICAgICAgIChpbm5lckVxdWl2KToKKyAgICAgICAgKFFVbml0LmVxdWl2KToKKyAgICAgICAgKGxp
dGVyYWwpOgorICAgICAgICAoam9pbik6CisgICAgICAgIChhcnJheSk6CisgICAgICAgIChkdW1w
LnBhcnNlKToKKyAgICAgICAgKGR1bXAudHlwZU9mKToKKyAgICAgICAgKGR1bXAuc2VwYXJhdG9y
KToKKyAgICAgICAgKGR1bXAuaW5kZW50KToKKyAgICAgICAgKGR1bXAudXApOgorICAgICAgICAo
ZHVtcC5kb3duKToKKyAgICAgICAgKGR1bXAuc2V0UGFyc2VyKToKKyAgICAgICAgKGR1bXAucGFy
c2Vycy5lcnJvcik6CisgICAgICAgIChkdW1wLnBhcnNlcnMuc3RyaW5nX2FwcGVhcmVkX2hlcmUp
OgorICAgICAgICAoZHVtcC5wYXJzZXJzLm9iamVjdCk6CisgICAgICAgIChkdW1wLnBhcnNlcnMu
bm9kZSk6CisgICAgICAgIChkdW1wLnBhcnNlcnMuZnVuY3Rpb25BcmdzKToKKyAgICAgICAgKHJl
TmFtZSk6CisgICAgICAgIChRVW5pdC5kdW1wKToKKyAgICAgICAgKGRlZmluZWQuZG9jdW1lbnQu
YXBwbHlDdXJyZW50KToKKyAgICAgICAgKHR5cGVvZi5kZWZpbmUuc3RyaW5nX2FwcGVhcmVkX2hl
cmUuZGVmaW5lLmFtZC5kZWZpbmUpOgorICAgICAgICAoRGlmZk1hdGNoUGF0Y2gucHJvdG90eXBl
LkRpZmZNYWluKToKKyAgICAgICAgKERpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQ2xlYW51
cEVmZmljaWVuY3kpOgorICAgICAgICAoRGlmZk1hdGNoUGF0Y2gucHJvdG90eXBlLmRpZmZQcmV0
dHlIdG1sKToKKyAgICAgICAgKERpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQ29tbW9uUHJl
Zml4KToKKyAgICAgICAgKERpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQ29tbW9uU3VmZml4
KToKKyAgICAgICAgKERpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQ29tcHV0ZSk6CisgICAg
ICAgIChkaWZmSGFsZk1hdGNoSSk6CisgICAgICAgIChEaWZmTWF0Y2hQYXRjaC5wcm90b3R5cGUu
ZGlmZkhhbGZNYXRjaCk6CisgICAgICAgIChEaWZmTWF0Y2hQYXRjaC5wcm90b3R5cGUuZGlmZkxp
bmVNb2RlKToKKyAgICAgICAgKERpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQmlzZWN0KToK
KyAgICAgICAgKERpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQmlzZWN0U3BsaXQpOgorICAg
ICAgICAoRGlmZk1hdGNoUGF0Y2gucHJvdG90eXBlLmRpZmZDbGVhbnVwU2VtYW50aWMpOgorICAg
ICAgICAoRGlmZk1hdGNoUGF0Y2gucHJvdG90eXBlLmRpZmZDb21tb25PdmVybGFwKToKKyAgICAg
ICAgKGRpZmZMaW5lc1RvQ2hhcnNNdW5nZSk6CisgICAgICAgIChEaWZmTWF0Y2hQYXRjaC5wcm90
b3R5cGUuZGlmZkxpbmVzVG9DaGFycyk6CisgICAgICAgIChEaWZmTWF0Y2hQYXRjaC5wcm90b3R5
cGUuZGlmZkNoYXJzVG9MaW5lcyk6CisgICAgICAgIChEaWZmTWF0Y2hQYXRjaC5wcm90b3R5cGUu
ZGlmZkNsZWFudXBNZXJnZSk6CisgICAgICAgIChRVW5pdC5kaWZmKToKKyAgICAgICAgKFFVbml0
LmluaXQpOgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL01vY2tCdWlsZGJvdFF1ZXVl
LmpzOiBBZGRlZC4KKyAgICAgICAgKE1vY2tCdWlsZGJvdFF1ZXVlKTogQWRkZWQuIE1vY2sgQnVp
bGRib3RRdWV1ZSBvYmplY3QgdGhhdCBkb2Vzbid0IG5lZWQgdG8gdGFsayB0byBhbiBhY3R1YWwg
QnVpbGRib3Qgc2VydmVyLgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL01vY2tCdWls
ZGJvdFF1ZXVlVmlldy5qczogQWRkZWQuCisgICAgICAgIChNb2NrQnVpbGRib3RRdWV1ZVZpZXcp
OiBBZGRlZC4gTW9jayBCdWlsZGJvdFF1ZXVlVmlldyBvYmplY3QgdGhhdCByZXR1cm5zIGEgcHJl
LXNwZWNpZmllZCBfbGF0ZXN0UHJvZHVjdGl2ZUl0ZXJhdGlvbiB3aXRob3V0CisgICAgICAgIHRo
ZSBuZWVkIHRvIHRhbGsgdG8gYSByZWFsIEJ1aWxkYm90IHNlcnZlci4KKyAgICAgICAgKE1vY2tC
dWlsZGJvdFF1ZXVlVmlldy5wcm90b3R5cGUuX2xhdGVzdFByb2R1Y3RpdmVJdGVyYXRpb24pOiBB
ZGRlZC4gUmV0dXJucyBhIHByZS1zcGVjaWZpZWQgX2xhdGVzdFByb2R1Y3RpdmVJdGVyYXRpb24K
KyAgICAgICAgd2l0aG91dCB0aGUgbmVlZCB0byB0YWxrIHRvIGEgcmVhbCBCdWlsZGJvdCBzZXJ2
ZXIuCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvdGVzdHMvTW9ja092ZXJyaWRlcy5qczogQWRk
ZWQuCisgICAgICAgIChzZXQgbGFiZWwpOiBBZGRlZC4gVGhlIHJlYWwgImxhYmVsIiBzZXR0ZXIg
d2FzIHRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiB0aGUgdW5pdCB0ZXN0cyBzbyBJIG92ZXJyb2Rl
IGl0IHdpdGggYSBzaW1wbGlmaWVkCisgICAgICAgIHZlcnNpb24uCisgICAgICAgICogQnVpbGRT
bGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJk
L1NjcmlwdHMvdGVzdHMvTW9ja1RyYWMuanM6IEFkZGVkLgorICAgICAgICAoTW9ja1RyYWMpOiBB
ZGRlZC4gTW9jayBUcmFjIGNvbnN0cnVjdG9yIHRoYXQgaGFzIHByZS1wb3B1bGF0ZWQgInJlY29y
ZGVkQ29tbWl0cyIgYW5kIGRvZXMgbm90IG5lZWQgdG8gdGFsayB0byBhIHJlYWwgVHJhYworICAg
ICAgICBzZXJ2ZXIuCisgICAgICAgIChNb2NrVHJhYy5wcm90b3R5cGUuZ2V0IG9sZGVzdFJlY29y
ZGVkUmV2aXNpb25OdW1iZXIpOiBBZGRlZC4gUmV0dXJucyBhIHByZS1zcGVjaWZpZWQgcmV2aXNp
b24uCisgICAgICAgIChNb2NrVHJhYy5wcm90b3R5cGUuZ2V0IGxhdGVzdFJlY29yZGVkUmV2aXNp
b25OdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKE1vY2tUcmFjLnByb3RvdHlwZS5sb2FkTW9yZUhp
c3RvcmljYWxEYXRhKTogQWRkZWQuIE92ZXJyaWRlcyB0aGUgcmVhbCBsb2FkTW9yZUhpc3Rvcmlj
YWxEYXRhIHNvIHRoYXQgd2UgZG9uJ3Qgd2FzdGUgdGltZQorICAgICAgICB0cnlpbmcgdG8gdGFs
ayB0byBUcmFjLgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL2luZGV4Lmh0bWw6IEFk
ZGVkLiBXZWIgcGFnZSBjb250YWluZXIgZm9yCisgICAgICAgIFFVbml0IHVuaXQgdGVzdHMuCisg
ICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGlj
X2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvdGVzdHMvdGVzdHMuanM6IEFkZGVkLiBRVW5pdCB1bml0
IHRlc3RzLgorCiAyMDE2LTAxLTExICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQ29jb2FdIEFkZCBTUEkgdG8gb3B0IG91dCBhIFVSTCBzY2hlbWUgZnJvbSB0aGUg
bWVtb3J5IGNhY2hlCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53
ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvRXh0ZXJuYWwvcXVuaXQtMS4y
MC4wLmNzcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL2Rhc2hib2FyZC9FeHRlcm5hbC9xdW5pdC0xLjIwLjAuY3NzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE1OWUyODI0Y2UzMTYzY2FkYzcwNTllMDFhY2UwNWVkNjI2Mzc4OGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9kYXNoYm9hcmQvRXh0ZXJuYWwvcXVuaXQtMS4yMC4wLmNzcwpAQCAtMCwwICsx
LDMwMSBAQAorLyohCisgKiBRVW5pdCAxLjIwLjAKKyAqIGh0dHA6Ly9xdW5pdGpzLmNvbS8KKyAq
CisgKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwor
ICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9s
aWNlbnNlCisgKgorICogRGF0ZTogMjAxNS0xMC0yN1QxNzo1M1oKKyAqLworCisvKiogRm9udCBG
YW1pbHkgYW5kIFNpemVzICovCisKKyNxdW5pdC10ZXN0cywgI3F1bml0LWhlYWRlciwgI3F1bml0
LWJhbm5lciwgI3F1bml0LXRlc3RydW5uZXItdG9vbGJhciwgI3F1bml0LWZpbHRlcmVkVGVzdCwg
I3F1bml0LXVzZXJBZ2VudCwgI3F1bml0LXRlc3RyZXN1bHQgeworCWZvbnQtZmFtaWx5OiAiSGVs
dmV0aWNhIE5ldWUgTGlnaHQiLCAiSGVsdmV0aWNhTmV1ZS1MaWdodCIsICJIZWx2ZXRpY2EgTmV1
ZSIsIENhbGlicmksIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Cit9CisKKyNxdW5pdC10
ZXN0cnVubmVyLXRvb2xiYXIsICNxdW5pdC1maWx0ZXJlZFRlc3QsICNxdW5pdC11c2VyQWdlbnQs
ICNxdW5pdC10ZXN0cmVzdWx0LCAjcXVuaXQtdGVzdHMgbGkgeyBmb250LXNpemU6IHNtYWxsOyB9
CisjcXVuaXQtdGVzdHMgeyBmb250LXNpemU6IHNtYWxsZXI7IH0KKworCisvKiogUmVzZXRzICov
CisKKyNxdW5pdC10ZXN0cywgI3F1bml0LWhlYWRlciwgI3F1bml0LWJhbm5lciwgI3F1bml0LWZp
bHRlcmVkVGVzdCwgI3F1bml0LXVzZXJBZ2VudCwgI3F1bml0LXRlc3RyZXN1bHQsICNxdW5pdC1t
b2R1bGVmaWx0ZXIgeworCW1hcmdpbjogMDsKKwlwYWRkaW5nOiAwOworfQorCisKKy8qKiBIZWFk
ZXIgKi8KKworI3F1bml0LWhlYWRlciB7CisJcGFkZGluZzogMC41ZW0gMCAwLjVlbSAxZW07CisK
Kwljb2xvcjogIzg2OTlBNDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjMEQzMzQ5OworCisJZm9udC1z
aXplOiAxLjVlbTsKKwlsaW5lLWhlaWdodDogMWVtOworCWZvbnQtd2VpZ2h0OiA0MDA7CisKKwli
b3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDsKK30KKworI3F1bml0LWhlYWRlciBhIHsKKwl0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICNDMkNDRDE7Cit9CisKKyNxdW5pdC1oZWFkZXIg
YTpob3ZlciwKKyNxdW5pdC1oZWFkZXIgYTpmb2N1cyB7CisJY29sb3I6ICNGRkY7Cit9CisKKyNx
dW5pdC10ZXN0cnVubmVyLXRvb2xiYXIgbGFiZWwgeworCWRpc3BsYXk6IGlubGluZS1ibG9jazsK
KwlwYWRkaW5nOiAwIDAuNWVtIDAgMC4xZW07Cit9CisKKyNxdW5pdC1iYW5uZXIgeworCWhlaWdo
dDogNXB4OworfQorCisjcXVuaXQtdGVzdHJ1bm5lci10b29sYmFyIHsKKwlwYWRkaW5nOiAwLjVl
bSAxZW0gMC41ZW0gMWVtOworCWNvbG9yOiAjNUU3NDBCOworCWJhY2tncm91bmQtY29sb3I6ICNF
RUU7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworI3F1bml0LWZpbHRlcmVkVGVzdCB7CisJcGFk
ZGluZzogMC41ZW0gMWVtIDAuNWVtIDFlbTsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRjRGRjc3Owor
CWNvbG9yOiAjMzY2MDk3OworfQorCisjcXVuaXQtdXNlckFnZW50IHsKKwlwYWRkaW5nOiAwLjVl
bSAxZW0gMC41ZW0gMWVtOworCWJhY2tncm91bmQtY29sb3I6ICMyQjgxQUY7CisJY29sb3I6ICNG
RkY7CisJdGV4dC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC41KSAycHggMnB4IDFweDsKK30KKwor
I3F1bml0LW1vZHVsZWZpbHRlci1jb250YWluZXIgeworCWZsb2F0OiByaWdodDsKKwlwYWRkaW5n
OiAwLjJlbTsKK30KKworLnF1bml0LXVybC1jb25maWcgeworCWRpc3BsYXk6IGlubGluZS1ibG9j
azsKKwlwYWRkaW5nOiAwLjFlbTsKK30KKworLnF1bml0LWZpbHRlciB7CisJZGlzcGxheTogYmxv
Y2s7CisJZmxvYXQ6IHJpZ2h0OworCW1hcmdpbi1sZWZ0OiAxZW07Cit9CisKKy8qKiBUZXN0czog
UGFzcy9GYWlsICovCisKKyNxdW5pdC10ZXN0cyB7CisJbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5z
aWRlOworfQorCisjcXVuaXQtdGVzdHMgbGkgeworCXBhZGRpbmc6IDAuNGVtIDFlbSAwLjRlbSAx
ZW07CisJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkY7CisJbGlzdC1zdHlsZS1wb3NpdGlv
bjogaW5zaWRlOworfQorCisjcXVuaXQtdGVzdHMgPiBsaSB7CisJZGlzcGxheTogbm9uZTsKK30K
KworI3F1bml0LXRlc3RzIGxpLnJ1bm5pbmcsCisjcXVuaXQtdGVzdHMgbGkucGFzcywKKyNxdW5p
dC10ZXN0cyBsaS5mYWlsLAorI3F1bml0LXRlc3RzIGxpLnNraXBwZWQgeworCWRpc3BsYXk6IGxp
c3QtaXRlbTsKK30KKworI3F1bml0LXRlc3RzLmhpZGVwYXNzIGxpLnJ1bm5pbmcsCisjcXVuaXQt
dGVzdHMuaGlkZXBhc3MgbGkucGFzcyB7CisJdmlzaWJpbGl0eTogaGlkZGVuOworCXBvc2l0aW9u
OiBhYnNvbHV0ZTsKKwl3aWR0aDogICAwOworCWhlaWdodDogIDA7CisJcGFkZGluZzogMDsKKwli
b3JkZXI6ICAwOworCW1hcmdpbjogIDA7Cit9CisKKyNxdW5pdC10ZXN0cyBsaSBzdHJvbmcgewor
CWN1cnNvcjogcG9pbnRlcjsKK30KKworI3F1bml0LXRlc3RzIGxpLnNraXBwZWQgc3Ryb25nIHsK
KwljdXJzb3I6IGRlZmF1bHQ7Cit9CisKKyNxdW5pdC10ZXN0cyBsaSBhIHsKKwlwYWRkaW5nOiAw
LjVlbTsKKwljb2xvcjogI0MyQ0NEMTsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKyNx
dW5pdC10ZXN0cyBsaSBwIGEgeworCXBhZGRpbmc6IDAuMjVlbTsKKwljb2xvcjogIzZCNjQ2NDsK
K30KKyNxdW5pdC10ZXN0cyBsaSBhOmhvdmVyLAorI3F1bml0LXRlc3RzIGxpIGE6Zm9jdXMgewor
CWNvbG9yOiAjMDAwOworfQorCisjcXVuaXQtdGVzdHMgbGkgLnJ1bnRpbWUgeworCWZsb2F0OiBy
aWdodDsKKwlmb250LXNpemU6IHNtYWxsZXI7Cit9CisKKy5xdW5pdC1hc3NlcnQtbGlzdCB7CisJ
bWFyZ2luLXRvcDogMC41ZW07CisJcGFkZGluZzogMC41ZW07CisKKwliYWNrZ3JvdW5kLWNvbG9y
OiAjRkZGOworCisJYm9yZGVyLXJhZGl1czogNXB4OworfQorCisucXVuaXQtc291cmNlIHsKKwlt
YXJnaW46IDAuNmVtIDAgMC4zZW07Cit9CisKKy5xdW5pdC1jb2xsYXBzZWQgeworCWRpc3BsYXk6
IG5vbmU7Cit9CisKKyNxdW5pdC10ZXN0cyB0YWJsZSB7CisJYm9yZGVyLWNvbGxhcHNlOiBjb2xs
YXBzZTsKKwltYXJnaW4tdG9wOiAwLjJlbTsKK30KKworI3F1bml0LXRlc3RzIHRoIHsKKwl0ZXh0
LWFsaWduOiByaWdodDsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOworCXBhZGRpbmc6IDAgMC41ZW0g
MCAwOworfQorCisjcXVuaXQtdGVzdHMgdGQgeworCXZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisK
KyNxdW5pdC10ZXN0cyBwcmUgeworCW1hcmdpbjogMDsKKwl3aGl0ZS1zcGFjZTogcHJlLXdyYXA7
CisJd29yZC13cmFwOiBicmVhay13b3JkOworfQorCisjcXVuaXQtdGVzdHMgZGVsIHsKKwliYWNr
Z3JvdW5kLWNvbG9yOiAjRTBGMkJFOworCWNvbG9yOiAjMzc0RTBDOworCXRleHQtZGVjb3JhdGlv
bjogbm9uZTsKK30KKworI3F1bml0LXRlc3RzIGlucyB7CisJYmFja2dyb3VuZC1jb2xvcjogI0ZG
Q0FDQTsKKwljb2xvcjogIzUwMDsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qKiog
VGVzdCBDb3VudHMgKi8KKworI3F1bml0LXRlc3RzIGIuY291bnRzICAgICAgICAgICAgICAgICAg
ICAgICB7IGNvbG9yOiAjMDAwOyB9CisjcXVuaXQtdGVzdHMgYi5wYXNzZWQgICAgICAgICAgICAg
ICAgICAgICAgIHsgY29sb3I6ICM1RTc0MEI7IH0KKyNxdW5pdC10ZXN0cyBiLmZhaWxlZCAgICAg
ICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzcxMDkwOTsgfQorCisjcXVuaXQtdGVzdHMgbGkg
bGkgeworCXBhZGRpbmc6IDVweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOworCWJvcmRlci1i
b3R0b206IG5vbmU7CisJbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlOworfQorCisvKioqIFBh
c3NpbmcgU3R5bGVzICovCisKKyNxdW5pdC10ZXN0cyBsaSBsaS5wYXNzIHsKKwljb2xvcjogIzND
NTEwQzsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOworCWJvcmRlci1sZWZ0OiAxMHB4IHNvbGlk
ICNDNkU3NDY7Cit9CisKKyNxdW5pdC10ZXN0cyAucGFzcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyBjb2xvcjogIzUyOENFMDsgYmFja2dyb3VuZC1jb2xvcjogI0QyRTBFNjsgfQorI3F1bml0
LXRlc3RzIC5wYXNzIC50ZXN0LW5hbWUgICAgICAgICAgICAgICB7IGNvbG9yOiAjMzY2MDk3OyB9
CisKKyNxdW5pdC10ZXN0cyAucGFzcyAudGVzdC1hY3R1YWwsCisjcXVuaXQtdGVzdHMgLnBhc3Mg
LnRlc3QtZXhwZWN0ZWQgICAgICAgICAgIHsgY29sb3I6ICM5OTk7IH0KKworI3F1bml0LWJhbm5l
ci5xdW5pdC1wYXNzICAgICAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQtY29sb3I6ICNDNkU3
NDY7IH0KKworLyoqKiBGYWlsaW5nIFN0eWxlcyAqLworCisjcXVuaXQtdGVzdHMgbGkgbGkuZmFp
bCB7CisJY29sb3I6ICM3MTA5MDk7CisJYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKKwlib3JkZXIt
bGVmdDogMTBweCBzb2xpZCAjRUU1NzU3OworCXdoaXRlLXNwYWNlOiBwcmU7Cit9CisKKyNxdW5p
dC10ZXN0cyA+IGxpOmxhc3QtY2hpbGQgeworCWJvcmRlci1yYWRpdXM6IDAgMCA1cHggNXB4Owor
fQorCisjcXVuaXQtdGVzdHMgLmZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6
ICMwMDA7IGJhY2tncm91bmQtY29sb3I6ICNFRTU3NTc7IH0KKyNxdW5pdC10ZXN0cyAuZmFpbCAu
dGVzdC1uYW1lLAorI3F1bml0LXRlc3RzIC5mYWlsIC5tb2R1bGUtbmFtZSAgICAgICAgICAgICB7
IGNvbG9yOiAjMDAwOyB9CisKKyNxdW5pdC10ZXN0cyAuZmFpbCAudGVzdC1hY3R1YWwgICAgICAg
ICAgICAgeyBjb2xvcjogI0VFNTc1NzsgfQorI3F1bml0LXRlc3RzIC5mYWlsIC50ZXN0LWV4cGVj
dGVkICAgICAgICAgICB7IGNvbG9yOiAjMDA4MDAwOyB9CisKKyNxdW5pdC1iYW5uZXIucXVuaXQt
ZmFpbCAgICAgICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUU1NzU3OyB9CisK
Ky8qKiogU2tpcHBlZCB0ZXN0cyAqLworCisjcXVuaXQtdGVzdHMgLnNraXBwZWQgeworCWJhY2tn
cm91bmQtY29sb3I6ICNFQkVDRTk7Cit9CisKKyNxdW5pdC10ZXN0cyAucXVuaXQtc2tpcHBlZC1s
YWJlbCB7CisJYmFja2dyb3VuZC1jb2xvcjogI0Y0RkY3NzsKKwlkaXNwbGF5OiBpbmxpbmUtYmxv
Y2s7CisJZm9udC1zdHlsZTogbm9ybWFsOworCWNvbG9yOiAjMzY2MDk3OworCWxpbmUtaGVpZ2h0
OiAxLjhlbTsKKwlwYWRkaW5nOiAwIDAuNWVtOworCW1hcmdpbjogLTAuNGVtIDAuNGVtIC0wLjRl
bSAwOworfQorCisvKiogUmVzdWx0ICovCisKKyNxdW5pdC10ZXN0cmVzdWx0IHsKKwlwYWRkaW5n
OiAwLjVlbSAxZW0gMC41ZW0gMWVtOworCisJY29sb3I6ICMyQjgxQUY7CisJYmFja2dyb3VuZC1j
b2xvcjogI0QyRTBFNjsKKworCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRkZGOworfQorI3F1
bml0LXRlc3RyZXN1bHQgLm1vZHVsZS1uYW1lIHsKKwlmb250LXdlaWdodDogNzAwOworfQorCisv
KiogRml4dHVyZSAqLworCisjcXVuaXQtZml4dHVyZSB7CisJcG9zaXRpb246IGFic29sdXRlOwor
CXRvcDogLTEwMDAwcHg7CisJbGVmdDogLTEwMDAwcHg7CisJd2lkdGg6IDEwMDBweDsKKwloZWln
aHQ6IDEwMDBweDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9FeHRlcm5hbC9xdW5pdC0x
LjIwLjAuanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvRXh0ZXJuYWwvcXVuaXQtMS4yMC4wLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkwNDk0M2YwODhlZGZkM2VjYjBlN2NmMmNjNzBiYzRhNTg3NmMzZGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9kYXNoYm9hcmQvRXh0ZXJuYWwvcXVuaXQtMS4yMC4wLmpzCkBAIC0wLDAgKzEs
NDE1OCBAQAorLyohCisgKiBRVW5pdCAxLjIwLjAKKyAqIGh0dHA6Ly9xdW5pdGpzLmNvbS8KKyAq
CisgKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwor
ICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9s
aWNlbnNlCisgKgorICogRGF0ZTogMjAxNS0xMC0yN1QxNzo1M1oKKyAqLworCisoZnVuY3Rpb24o
IGdsb2JhbCApIHsKKwordmFyIFFVbml0ID0ge307CisKK3ZhciBEYXRlID0gZ2xvYmFsLkRhdGU7
Cit2YXIgbm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7CisJcmV0dXJuIG5ldyBEYXRlKCku
Z2V0VGltZSgpOworfTsKKwordmFyIHNldFRpbWVvdXQgPSBnbG9iYWwuc2V0VGltZW91dDsKK3Zh
ciBjbGVhclRpbWVvdXQgPSBnbG9iYWwuY2xlYXJUaW1lb3V0OworCisvLyBTdG9yZSBhIGxvY2Fs
IHdpbmRvdyBmcm9tIHRoZSBnbG9iYWwgdG8gYWxsb3cgZGlyZWN0IHJlZmVyZW5jZXMuCit2YXIg
d2luZG93ID0gZ2xvYmFsLndpbmRvdzsKKwordmFyIGRlZmluZWQgPSB7CisJZG9jdW1lbnQ6IHdp
bmRvdyAmJiB3aW5kb3cuZG9jdW1lbnQgIT09IHVuZGVmaW5lZCwKKwlzZXRUaW1lb3V0OiBzZXRU
aW1lb3V0ICE9PSB1bmRlZmluZWQsCisJc2Vzc2lvblN0b3JhZ2U6IChmdW5jdGlvbigpIHsKKwkJ
dmFyIHggPSAicXVuaXQtdGVzdC1zdHJpbmciOworCQl0cnkgeworCQkJc2Vzc2lvblN0b3JhZ2Uu
c2V0SXRlbSggeCwgeCApOworCQkJc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSggeCApOworCQkJ
cmV0dXJuIHRydWU7CisJCX0gY2F0Y2ggKCBlICkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJ
fSgpICkKK307CisKK3ZhciBmaWxlTmFtZSA9ICggc291cmNlRnJvbVN0YWNrdHJhY2UoIDAgKSB8
fCAiIiApLnJlcGxhY2UoIC8oOlxkKykrXCk/LywgIiIgKS5yZXBsYWNlKCAvLitcLy8sICIiICk7
Cit2YXIgZ2xvYmFsU3RhcnRDYWxsZWQgPSBmYWxzZTsKK3ZhciBydW5TdGFydGVkID0gZmFsc2U7
CisKK3ZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCisJaGFzT3duID0g
T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKKworLy8gcmV0dXJucyBhIG5ldyBBcnJh
eSB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBpbiBhIGJ1dCBub3QgaW4gYgorZnVuY3Rpb24g
ZGlmZiggYSwgYiApIHsKKwl2YXIgaSwgaiwKKwkJcmVzdWx0ID0gYS5zbGljZSgpOworCisJZm9y
ICggaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKysgKSB7CisJCWZvciAoIGogPSAwOyBqIDwg
Yi5sZW5ndGg7IGorKyApIHsKKwkJCWlmICggcmVzdWx0WyBpIF0gPT09IGJbIGogXSApIHsKKwkJ
CQlyZXN1bHQuc3BsaWNlKCBpLCAxICk7CisJCQkJaS0tOworCQkJCWJyZWFrOworCQkJfQorCQl9
CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8vIGZyb20ganF1ZXJ5LmpzCitmdW5jdGlvbiBp
bkFycmF5KCBlbGVtLCBhcnJheSApIHsKKwlpZiAoIGFycmF5LmluZGV4T2YgKSB7CisJCXJldHVy
biBhcnJheS5pbmRleE9mKCBlbGVtICk7CisJfQorCisJZm9yICggdmFyIGkgPSAwLCBsZW5ndGgg
PSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJaWYgKCBhcnJheVsgaSBdID09
PSBlbGVtICkgeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8q
KgorICogTWFrZXMgYSBjbG9uZSBvZiBhbiBvYmplY3QgdXNpbmcgb25seSBBcnJheSBvciBPYmpl
Y3QgYXMgYmFzZSwKKyAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVy
dGllcy4KKyAqCisgKiBAcGFyYW0ge09iamVjdH0gb2JqCisgKiBAcmV0dXJuIHtPYmplY3R9IE5l
dyBvYmplY3Qgd2l0aCBvbmx5IHRoZSBvd24gcHJvcGVydGllcyAocmVjdXJzaXZlbHkpLgorICov
CitmdW5jdGlvbiBvYmplY3RWYWx1ZXMgKCBvYmogKSB7CisJdmFyIGtleSwgdmFsLAorCQl2YWxz
ID0gUVVuaXQuaXMoICJhcnJheSIsIG9iaiApID8gW10gOiB7fTsKKwlmb3IgKCBrZXkgaW4gb2Jq
ICkgeworCQlpZiAoIGhhc093bi5jYWxsKCBvYmosIGtleSApICkgeworCQkJdmFsID0gb2JqWyBr
ZXkgXTsKKwkJCXZhbHNbIGtleSBdID0gdmFsID09PSBPYmplY3QoIHZhbCApID8gb2JqZWN0VmFs
dWVzKCB2YWwgKSA6IHZhbDsKKwkJfQorCX0KKwlyZXR1cm4gdmFsczsKK30KKworZnVuY3Rpb24g
ZXh0ZW5kKCBhLCBiLCB1bmRlZk9ubHkgKSB7CisJZm9yICggdmFyIHByb3AgaW4gYiApIHsKKwkJ
aWYgKCBoYXNPd24uY2FsbCggYiwgcHJvcCApICkgeworCisJCQkvLyBBdm9pZCAiTWVtYmVyIG5v
dCBmb3VuZCIgZXJyb3IgaW4gSUU4IGNhdXNlZCBieSBtZXNzaW5nIHdpdGggd2luZG93LmNvbnN0
cnVjdG9yCisJCQkvLyBUaGlzIGJsb2NrIHJ1bnMgb24gZXZlcnkgZW52aXJvbm1lbnQsIHNvIGBn
bG9iYWxgIGlzIGJlaW5nIHVzZWQgaW5zdGVhZCBvZiBgd2luZG93YAorCQkJLy8gdG8gYXZvaWQg
ZXJyb3JzIG9uIG5vZGUuCisJCQlpZiAoIHByb3AgIT09ICJjb25zdHJ1Y3RvciIgfHwgYSAhPT0g
Z2xvYmFsICkgeworCQkJCWlmICggYlsgcHJvcCBdID09PSB1bmRlZmluZWQgKSB7CisJCQkJCWRl
bGV0ZSBhWyBwcm9wIF07CisJCQkJfSBlbHNlIGlmICggISggdW5kZWZPbmx5ICYmIHR5cGVvZiBh
WyBwcm9wIF0gIT09ICJ1bmRlZmluZWQiICkgKSB7CisJCQkJCWFbIHByb3AgXSA9IGJbIHByb3Ag
XTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gYTsKK30KKworZnVuY3Rpb24gb2Jq
ZWN0VHlwZSggb2JqICkgeworCWlmICggdHlwZW9mIG9iaiA9PT0gInVuZGVmaW5lZCIgKSB7CisJ
CXJldHVybiAidW5kZWZpbmVkIjsKKwl9CisKKwkvLyBDb25zaWRlcjogdHlwZW9mIG51bGwgPT09
IG9iamVjdAorCWlmICggb2JqID09PSBudWxsICkgeworCQlyZXR1cm4gIm51bGwiOworCX0KKwor
CXZhciBtYXRjaCA9IHRvU3RyaW5nLmNhbGwoIG9iaiApLm1hdGNoKCAvXlxbb2JqZWN0XHMoLiop
XF0kLyApLAorCQl0eXBlID0gbWF0Y2ggJiYgbWF0Y2hbIDEgXTsKKworCXN3aXRjaCAoIHR5cGUg
KSB7CisJCWNhc2UgIk51bWJlciI6CisJCQlpZiAoIGlzTmFOKCBvYmogKSApIHsKKwkJCQlyZXR1
cm4gIm5hbiI7CisJCQl9CisJCQlyZXR1cm4gIm51bWJlciI7CisJCWNhc2UgIlN0cmluZyI6CisJ
CWNhc2UgIkJvb2xlYW4iOgorCQljYXNlICJBcnJheSI6CisJCWNhc2UgIlNldCI6CisJCWNhc2Ug
Ik1hcCI6CisJCWNhc2UgIkRhdGUiOgorCQljYXNlICJSZWdFeHAiOgorCQljYXNlICJGdW5jdGlv
biI6CisJCWNhc2UgIlN5bWJvbCI6CisJCQlyZXR1cm4gdHlwZS50b0xvd2VyQ2FzZSgpOworCX0K
KwlpZiAoIHR5cGVvZiBvYmogPT09ICJvYmplY3QiICkgeworCQlyZXR1cm4gIm9iamVjdCI7CisJ
fQorfQorCisvLyBTYWZlIG9iamVjdCB0eXBlIGNoZWNraW5nCitmdW5jdGlvbiBpcyggdHlwZSwg
b2JqICkgeworCXJldHVybiBRVW5pdC5vYmplY3RUeXBlKCBvYmogKSA9PT0gdHlwZTsKK30KKwor
dmFyIGdldFVybFBhcmFtcyA9IGZ1bmN0aW9uKCkgeworCXZhciBpLCBjdXJyZW50OworCXZhciB1
cmxQYXJhbXMgPSB7fTsKKwl2YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247CisJdmFyIHBh
cmFtcyA9IGxvY2F0aW9uLnNlYXJjaC5zbGljZSggMSApLnNwbGl0KCAiJiIgKTsKKwl2YXIgbGVu
Z3RoID0gcGFyYW1zLmxlbmd0aDsKKworCWlmICggcGFyYW1zWyAwIF0gKSB7CisJCWZvciAoIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisJCQljdXJyZW50ID0gcGFyYW1zWyBpIF0uc3BsaXQo
ICI9IiApOworCQkJY3VycmVudFsgMCBdID0gZGVjb2RlVVJJQ29tcG9uZW50KCBjdXJyZW50WyAw
IF0gKTsKKworCQkJLy8gYWxsb3cganVzdCBhIGtleSB0byB0dXJuIG9uIGEgZmxhZywgZS5nLiwg
dGVzdC5odG1sP25vZ2xvYmFscworCQkJY3VycmVudFsgMSBdID0gY3VycmVudFsgMSBdID8gZGVj
b2RlVVJJQ29tcG9uZW50KCBjdXJyZW50WyAxIF0gKSA6IHRydWU7CisJCQlpZiAoIHVybFBhcmFt
c1sgY3VycmVudFsgMCBdIF0gKSB7CisJCQkJdXJsUGFyYW1zWyBjdXJyZW50WyAwIF0gXSA9IFtd
LmNvbmNhdCggdXJsUGFyYW1zWyBjdXJyZW50WyAwIF0gXSwgY3VycmVudFsgMSBdICk7CisJCQl9
IGVsc2UgeworCQkJCXVybFBhcmFtc1sgY3VycmVudFsgMCBdIF0gPSBjdXJyZW50WyAxIF07CisJ
CQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdXJsUGFyYW1zOworfTsKKworLy8gRG9lc24ndCBzdXBw
b3J0IElFNiB0byBJRTksIGl0IHdpbGwgcmV0dXJuIHVuZGVmaW5lZCBvbiB0aGVzZSBicm93c2Vy
cworLy8gU2VlIGFsc28gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlw
dC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvU3RhY2sKK2Z1bmN0aW9uIGV4dHJhY3RT
dGFja3RyYWNlKCBlLCBvZmZzZXQgKSB7CisJb2Zmc2V0ID0gb2Zmc2V0ID09PSB1bmRlZmluZWQg
PyA0IDogb2Zmc2V0OworCisJdmFyIHN0YWNrLCBpbmNsdWRlLCBpOworCisJaWYgKCBlLnN0YWNr
ICkgeworCQlzdGFjayA9IGUuc3RhY2suc3BsaXQoICJcbiIgKTsKKwkJaWYgKCAvXmVycm9yJC9p
LnRlc3QoIHN0YWNrWyAwIF0gKSApIHsKKwkJCXN0YWNrLnNoaWZ0KCk7CisJCX0KKwkJaWYgKCBm
aWxlTmFtZSApIHsKKwkJCWluY2x1ZGUgPSBbXTsKKwkJCWZvciAoIGkgPSBvZmZzZXQ7IGkgPCBz
dGFjay5sZW5ndGg7IGkrKyApIHsKKwkJCQlpZiAoIHN0YWNrWyBpIF0uaW5kZXhPZiggZmlsZU5h
bWUgKSAhPT0gLTEgKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpbmNsdWRlLnB1c2goIHN0
YWNrWyBpIF0gKTsKKwkJCX0KKwkJCWlmICggaW5jbHVkZS5sZW5ndGggKSB7CisJCQkJcmV0dXJu
IGluY2x1ZGUuam9pbiggIlxuIiApOworCQkJfQorCQl9CisJCXJldHVybiBzdGFja1sgb2Zmc2V0
IF07CisKKwkvLyBTdXBwb3J0OiBTYWZhcmkgPD02IG9ubHkKKwl9IGVsc2UgaWYgKCBlLnNvdXJj
ZVVSTCApIHsKKworCQkvLyBleGNsdWRlIHVzZWxlc3Mgc2VsZi1yZWZlcmVuY2UgZm9yIGdlbmVy
YXRlZCBFcnJvciBvYmplY3RzCisJCWlmICggL3F1bml0LmpzJC8udGVzdCggZS5zb3VyY2VVUkwg
KSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIGZvciBhY3R1YWwgZXhjZXB0aW9ucywgdGhp
cyBpcyB1c2VmdWwKKwkJcmV0dXJuIGUuc291cmNlVVJMICsgIjoiICsgZS5saW5lOworCX0KK30K
KworZnVuY3Rpb24gc291cmNlRnJvbVN0YWNrdHJhY2UoIG9mZnNldCApIHsKKwl2YXIgZXJyb3Ig
PSBuZXcgRXJyb3IoKTsKKworCS8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgb25seSwgSUUgPD0xMCAt
IDExIG9ubHkKKwkvLyBOb3QgYWxsIGJyb3dzZXJzIGdlbmVyYXRlIHRoZSBgc3RhY2tgIHByb3Bl
cnR5IGZvciBgbmV3IEVycm9yKClgLCBzZWUgYWxzbyAjNjM2CisJaWYgKCAhZXJyb3Iuc3RhY2sg
KSB7CisJCXRyeSB7CisJCQl0aHJvdyBlcnJvcjsKKwkJfSBjYXRjaCAoIGVyciApIHsKKwkJCWVy
cm9yID0gZXJyOworCQl9CisJfQorCisJcmV0dXJuIGV4dHJhY3RTdGFja3RyYWNlKCBlcnJvciwg
b2Zmc2V0ICk7Cit9CisKKy8qKgorICogQ29uZmlnIG9iamVjdDogTWFpbnRhaW4gaW50ZXJuYWwg
c3RhdGUKKyAqIExhdGVyIGV4cG9zZWQgYXMgUVVuaXQuY29uZmlnCisgKiBgY29uZmlnYCBpbml0
aWFsaXplZCBhdCB0b3Agb2Ygc2NvcGUKKyAqLwordmFyIGNvbmZpZyA9IHsKKwkvLyBUaGUgcXVl
dWUgb2YgdGVzdHMgdG8gcnVuCisJcXVldWU6IFtdLAorCisJLy8gYmxvY2sgdW50aWwgZG9jdW1l
bnQgcmVhZHkKKwlibG9ja2luZzogdHJ1ZSwKKworCS8vIGJ5IGRlZmF1bHQsIHJ1biBwcmV2aW91
c2x5IGZhaWxlZCB0ZXN0cyBmaXJzdAorCS8vIHZlcnkgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdp
dGggIkhpZGUgcGFzc2VkIHRlc3RzIiBjaGVja2VkCisJcmVvcmRlcjogdHJ1ZSwKKworCS8vIGJ5
IGRlZmF1bHQsIG1vZGlmeSBkb2N1bWVudC50aXRsZSB3aGVuIHN1aXRlIGlzIGRvbmUKKwlhbHRl
cnRpdGxlOiB0cnVlLAorCisJLy8gSFRNTCBSZXBvcnRlcjogY29sbGFwc2UgZXZlcnkgdGVzdCBl
eGNlcHQgdGhlIGZpcnN0IGZhaWxpbmcgdGVzdAorCS8vIElmIGZhbHNlLCBhbGwgZmFpbGluZyB0
ZXN0cyB3aWxsIGJlIGV4cGFuZGVkCisJY29sbGFwc2U6IHRydWUsCisKKwkvLyBieSBkZWZhdWx0
LCBzY3JvbGwgdG8gdG9wIG9mIHRoZSBwYWdlIHdoZW4gc3VpdGUgaXMgZG9uZQorCXNjcm9sbHRv
cDogdHJ1ZSwKKworCS8vIGRlcHRoIHVwLXRvIHdoaWNoIG9iamVjdCB3aWxsIGJlIGR1bXBlZAor
CW1heERlcHRoOiA1LAorCisJLy8gd2hlbiBlbmFibGVkLCBhbGwgdGVzdHMgbXVzdCBjYWxsIGV4
cGVjdCgpCisJcmVxdWlyZUV4cGVjdHM6IGZhbHNlLAorCisJLy8gYWRkIGNoZWNrYm94ZXMgdGhh
dCBhcmUgcGVyc2lzdGVkIGluIHRoZSBxdWVyeS1zdHJpbmcKKwkvLyB3aGVuIGVuYWJsZWQsIHRo
ZSBpZCBpcyBzZXQgdG8gYHRydWVgIGFzIGEgYFFVbml0LmNvbmZpZ2AgcHJvcGVydHkKKwl1cmxD
b25maWc6IFsKKwkJeworCQkJaWQ6ICJoaWRlcGFzc2VkIiwKKwkJCWxhYmVsOiAiSGlkZSBwYXNz
ZWQgdGVzdHMiLAorCQkJdG9vbHRpcDogIk9ubHkgc2hvdyB0ZXN0cyBhbmQgYXNzZXJ0aW9ucyB0
aGF0IGZhaWwuIFN0b3JlZCBhcyBxdWVyeS1zdHJpbmdzLiIKKwkJfSwKKwkJeworCQkJaWQ6ICJu
b2dsb2JhbHMiLAorCQkJbGFiZWw6ICJDaGVjayBmb3IgR2xvYmFscyIsCisJCQl0b29sdGlwOiAi
RW5hYmxpbmcgdGhpcyB3aWxsIHRlc3QgaWYgYW55IHRlc3QgaW50cm9kdWNlcyBuZXcgcHJvcGVy
dGllcyBvbiB0aGUgIiArCisJCQkJImdsb2JhbCBvYmplY3QgKGB3aW5kb3dgIGluIEJyb3dzZXJz
KS4gU3RvcmVkIGFzIHF1ZXJ5LXN0cmluZ3MuIgorCQl9LAorCQl7CisJCQlpZDogIm5vdHJ5Y2F0
Y2giLAorCQkJbGFiZWw6ICJObyB0cnktY2F0Y2giLAorCQkJdG9vbHRpcDogIkVuYWJsaW5nIHRo
aXMgd2lsbCBydW4gdGVzdHMgb3V0c2lkZSBvZiBhIHRyeS1jYXRjaCBibG9jay4gTWFrZXMgZGVi
dWdnaW5nICIgKworCQkJCSJleGNlcHRpb25zIGluIElFIHJlYXNvbmFibGUuIFN0b3JlZCBhcyBx
dWVyeS1zdHJpbmdzLiIKKwkJfQorCV0sCisKKwkvLyBTZXQgb2YgYWxsIG1vZHVsZXMuCisJbW9k
dWxlczogW10sCisKKwkvLyBTdGFjayBvZiBuZXN0ZWQgbW9kdWxlcworCW1vZHVsZVN0YWNrOiBb
XSwKKworCS8vIFRoZSBmaXJzdCB1bm5hbWVkIG1vZHVsZQorCWN1cnJlbnRNb2R1bGU6IHsKKwkJ
bmFtZTogIiIsCisJCXRlc3RzOiBbXQorCX0sCisKKwljYWxsYmFja3M6IHt9Cit9OworCit2YXIg
dXJsUGFyYW1zID0gZGVmaW5lZC5kb2N1bWVudCA/IGdldFVybFBhcmFtcygpIDoge307CisKKy8v
IFB1c2ggYSBsb29zZSB1bm5hbWVkIG1vZHVsZSB0byB0aGUgbW9kdWxlcyBjb2xsZWN0aW9uCitj
b25maWcubW9kdWxlcy5wdXNoKCBjb25maWcuY3VycmVudE1vZHVsZSApOworCitpZiAoIHVybFBh
cmFtcy5maWx0ZXIgPT09IHRydWUgKSB7CisJZGVsZXRlIHVybFBhcmFtcy5maWx0ZXI7Cit9CisK
Ky8vIFN0cmluZyBzZWFyY2ggYW55d2hlcmUgaW4gbW9kdWxlTmFtZSt0ZXN0TmFtZQorY29uZmln
LmZpbHRlciA9IHVybFBhcmFtcy5maWx0ZXI7CisKK2NvbmZpZy50ZXN0SWQgPSBbXTsKK2lmICgg
dXJsUGFyYW1zLnRlc3RJZCApIHsKKwkvLyBFbnN1cmUgdGhhdCB1cmxQYXJhbXMudGVzdElkIGlz
IGFuIGFycmF5CisJdXJsUGFyYW1zLnRlc3RJZCA9IGRlY29kZVVSSUNvbXBvbmVudCggdXJsUGFy
YW1zLnRlc3RJZCApLnNwbGl0KCAiLCIgKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHVybFBhcmFt
cy50ZXN0SWQubGVuZ3RoOyBpKysgKSB7CisJCWNvbmZpZy50ZXN0SWQucHVzaCggdXJsUGFyYW1z
LnRlc3RJZFsgaSBdICk7CisJfQorfQorCit2YXIgbG9nZ2luZ0NhbGxiYWNrcyA9IHt9OworCisv
LyBSZWdpc3RlciBsb2dnaW5nIGNhbGxiYWNrcworZnVuY3Rpb24gcmVnaXN0ZXJMb2dnaW5nQ2Fs
bGJhY2tzKCBvYmogKSB7CisJdmFyIGksIGwsIGtleSwKKwkJY2FsbGJhY2tOYW1lcyA9IFsgImJl
Z2luIiwgImRvbmUiLCAibG9nIiwgInRlc3RTdGFydCIsICJ0ZXN0RG9uZSIsCisJCQkibW9kdWxl
U3RhcnQiLCAibW9kdWxlRG9uZSIgXTsKKworCWZ1bmN0aW9uIHJlZ2lzdGVyTG9nZ2luZ0NhbGxi
YWNrKCBrZXkgKSB7CisJCXZhciBsb2dnaW5nQ2FsbGJhY2sgPSBmdW5jdGlvbiggY2FsbGJhY2sg
KSB7CisJCQlpZiAoIG9iamVjdFR5cGUoIGNhbGxiYWNrICkgIT09ICJmdW5jdGlvbiIgKSB7CisJ
CQkJdGhyb3cgbmV3IEVycm9yKAorCQkJCQkiUVVuaXQgbG9nZ2luZyBtZXRob2RzIHJlcXVpcmUg
YSBjYWxsYmFjayBmdW5jdGlvbiBhcyB0aGVpciBmaXJzdCBwYXJhbWV0ZXJzLiIKKwkJCQkpOwor
CQkJfQorCisJCQljb25maWcuY2FsbGJhY2tzWyBrZXkgXS5wdXNoKCBjYWxsYmFjayApOworCQl9
OworCisJCS8vIERFUFJFQ0FURUQ6IFRoaXMgd2lsbCBiZSByZW1vdmVkIG9uIFFVbml0IDIuMC4w
KworCQkvLyBTdG9yZXMgdGhlIHJlZ2lzdGVyZWQgZnVuY3Rpb25zIGFsbG93aW5nIHJlc3Rvcmlu
ZworCQkvLyBhdCB2ZXJpZnlMb2dnaW5nQ2FsbGJhY2tzKCkgaWYgbW9kaWZpZWQKKwkJbG9nZ2lu
Z0NhbGxiYWNrc1sga2V5IF0gPSBsb2dnaW5nQ2FsbGJhY2s7CisKKwkJcmV0dXJuIGxvZ2dpbmdD
YWxsYmFjazsKKwl9CisKKwlmb3IgKCBpID0gMCwgbCA9IGNhbGxiYWNrTmFtZXMubGVuZ3RoOyBp
IDwgbDsgaSsrICkgeworCQlrZXkgPSBjYWxsYmFja05hbWVzWyBpIF07CisKKwkJLy8gSW5pdGlh
bGl6ZSBrZXkgY29sbGVjdGlvbiBvZiBsb2dnaW5nIGNhbGxiYWNrCisJCWlmICggb2JqZWN0VHlw
ZSggY29uZmlnLmNhbGxiYWNrc1sga2V5IF0gKSA9PT0gInVuZGVmaW5lZCIgKSB7CisJCQljb25m
aWcuY2FsbGJhY2tzWyBrZXkgXSA9IFtdOworCQl9CisKKwkJb2JqWyBrZXkgXSA9IHJlZ2lzdGVy
TG9nZ2luZ0NhbGxiYWNrKCBrZXkgKTsKKwl9Cit9CisKK2Z1bmN0aW9uIHJ1bkxvZ2dpbmdDYWxs
YmFja3MoIGtleSwgYXJncyApIHsKKwl2YXIgaSwgbCwgY2FsbGJhY2tzOworCisJY2FsbGJhY2tz
ID0gY29uZmlnLmNhbGxiYWNrc1sga2V5IF07CisJZm9yICggaSA9IDAsIGwgPSBjYWxsYmFja3Mu
bGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQljYWxsYmFja3NbIGkgXSggYXJncyApOworCX0KK30K
KworLy8gREVQUkVDQVRFRDogVGhpcyB3aWxsIGJlIHJlbW92ZWQgb24gMi4wLjArCisvLyBUaGlz
IGZ1bmN0aW9uIHZlcmlmaWVzIGlmIHRoZSBsb2dnaW5nQ2FsbGJhY2tzIHdlcmUgbW9kaWZpZWQg
YnkgdGhlIHVzZXIKKy8vIElmIHNvLCBpdCB3aWxsIHJlc3RvcmUgaXQsIGFzc2lnbiB0aGUgZ2l2
ZW4gY2FsbGJhY2sgYW5kIHByaW50IGEgY29uc29sZSB3YXJuaW5nCitmdW5jdGlvbiB2ZXJpZnlM
b2dnaW5nQ2FsbGJhY2tzKCkgeworCXZhciBsb2dnaW5nQ2FsbGJhY2ssIHVzZXJDYWxsYmFjazsK
KworCWZvciAoIGxvZ2dpbmdDYWxsYmFjayBpbiBsb2dnaW5nQ2FsbGJhY2tzICkgeworCQlpZiAo
IFFVbml0WyBsb2dnaW5nQ2FsbGJhY2sgXSAhPT0gbG9nZ2luZ0NhbGxiYWNrc1sgbG9nZ2luZ0Nh
bGxiYWNrIF0gKSB7CisKKwkJCXVzZXJDYWxsYmFjayA9IFFVbml0WyBsb2dnaW5nQ2FsbGJhY2sg
XTsKKworCQkJLy8gUmVzdG9yZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKwkJCVFVbml0WyBsb2dn
aW5nQ2FsbGJhY2sgXSA9IGxvZ2dpbmdDYWxsYmFja3NbIGxvZ2dpbmdDYWxsYmFjayBdOworCisJ
CQkvLyBBc3NpZ24gdGhlIGRlcHJlY2F0ZWQgZ2l2ZW4gY2FsbGJhY2sKKwkJCVFVbml0WyBsb2dn
aW5nQ2FsbGJhY2sgXSggdXNlckNhbGxiYWNrICk7CisKKwkJCWlmICggZ2xvYmFsLmNvbnNvbGUg
JiYgZ2xvYmFsLmNvbnNvbGUud2FybiApIHsKKwkJCQlnbG9iYWwuY29uc29sZS53YXJuKAorCQkJ
CQkiUVVuaXQuIiArIGxvZ2dpbmdDYWxsYmFjayArICIgd2FzIHJlcGxhY2VkIHdpdGggYSBuZXcg
dmFsdWUuXG4iICsKKwkJCQkJIlBsZWFzZSwgY2hlY2sgb3V0IHRoZSBkb2N1bWVudGF0aW9uIG9u
IGhvdyB0byBhcHBseSBsb2dnaW5nIGNhbGxiYWNrcy5cbiIgKworCQkJCQkiUmVmZXJlbmNlOiBo
dHRwOi8vYXBpLnF1bml0anMuY29tL2NhdGVnb3J5L2NhbGxiYWNrcy8iCisJCQkJKTsKKwkJCX0K
KwkJfQorCX0KK30KKworKCBmdW5jdGlvbigpIHsKKwlpZiAoICFkZWZpbmVkLmRvY3VtZW50ICkg
eworCQlyZXR1cm47CisJfQorCisJLy8gYG9uRXJyb3JGblByZXZgIGluaXRpYWxpemVkIGF0IHRv
cCBvZiBzY29wZQorCS8vIFByZXNlcnZlIG90aGVyIGhhbmRsZXJzCisJdmFyIG9uRXJyb3JGblBy
ZXYgPSB3aW5kb3cub25lcnJvcjsKKworCS8vIENvdmVyIHVuY2F1Z2h0IGV4Y2VwdGlvbnMKKwkv
LyBSZXR1cm5pbmcgdHJ1ZSB3aWxsIHN1cHByZXNzIHRoZSBkZWZhdWx0IGJyb3dzZXIgaGFuZGxl
ciwKKwkvLyByZXR1cm5pbmcgZmFsc2Ugd2lsbCBsZXQgaXQgcnVuLgorCXdpbmRvdy5vbmVycm9y
ID0gZnVuY3Rpb24oIGVycm9yLCBmaWxlUGF0aCwgbGluZXJOciApIHsKKwkJdmFyIHJldCA9IGZh
bHNlOworCQlpZiAoIG9uRXJyb3JGblByZXYgKSB7CisJCQlyZXQgPSBvbkVycm9yRm5QcmV2KCBl
cnJvciwgZmlsZVBhdGgsIGxpbmVyTnIgKTsKKwkJfQorCisJCS8vIFRyZWF0IHJldHVybiB2YWx1
ZSBhcyB3aW5kb3cub25lcnJvciBpdHNlbGYgZG9lcywKKwkJLy8gT25seSBkbyBvdXIgaGFuZGxp
bmcgaWYgbm90IHN1cHByZXNzZWQuCisJCWlmICggcmV0ICE9PSB0cnVlICkgeworCQkJaWYgKCBR
VW5pdC5jb25maWcuY3VycmVudCApIHsKKwkJCQlpZiAoIFFVbml0LmNvbmZpZy5jdXJyZW50Lmln
bm9yZUdsb2JhbEVycm9ycyApIHsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJCVFVbml0
LnB1c2hGYWlsdXJlKCBlcnJvciwgZmlsZVBhdGggKyAiOiIgKyBsaW5lck5yICk7CisJCQl9IGVs
c2UgeworCQkJCVFVbml0LnRlc3QoICJnbG9iYWwgZmFpbHVyZSIsIGV4dGVuZChmdW5jdGlvbigp
IHsKKwkJCQkJUVVuaXQucHVzaEZhaWx1cmUoIGVycm9yLCBmaWxlUGF0aCArICI6IiArIGxpbmVy
TnIgKTsKKwkJCQl9LCB7IHZhbGlkVGVzdDogdHJ1ZSB9ICkgKTsKKwkJCX0KKwkJCXJldHVybiBm
YWxzZTsKKwkJfQorCisJCXJldHVybiByZXQ7CisJfTsKK30gKSgpOworCitRVW5pdC51cmxQYXJh
bXMgPSB1cmxQYXJhbXM7CisKKy8vIEZpZ3VyZSBvdXQgaWYgd2UncmUgcnVubmluZyB0aGUgdGVz
dHMgZnJvbSBhIHNlcnZlciBvciBub3QKK1FVbml0LmlzTG9jYWwgPSAhKCBkZWZpbmVkLmRvY3Vt
ZW50ICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gImZpbGU6IiApOworCisvLyBFeHBv
c2UgdGhlIGN1cnJlbnQgUVVuaXQgdmVyc2lvbgorUVVuaXQudmVyc2lvbiA9ICIxLjIwLjAiOwor
CitleHRlbmQoIFFVbml0LCB7CisKKwkvLyBjYWxsIG9uIHN0YXJ0IG9mIG1vZHVsZSB0ZXN0IHRv
IHByZXBlbmQgbmFtZSB0byBhbGwgdGVzdHMKKwltb2R1bGU6IGZ1bmN0aW9uKCBuYW1lLCB0ZXN0
RW52aXJvbm1lbnQsIGV4ZWN1dGVOb3cgKSB7CisJCXZhciBtb2R1bGUsIG1vZHVsZUZuczsKKwkJ
dmFyIGN1cnJlbnRNb2R1bGUgPSBjb25maWcuY3VycmVudE1vZHVsZTsKKworCQlpZiAoIGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDIgKSB7CisJCQlpZiAoIHRlc3RFbnZpcm9ubWVudCBpbnN0YW5jZW9m
IEZ1bmN0aW9uICkgeworCQkJCWV4ZWN1dGVOb3cgPSB0ZXN0RW52aXJvbm1lbnQ7CisJCQkJdGVz
dEVudmlyb25tZW50ID0gdW5kZWZpbmVkOworCQkJfQorCQl9CisKKwkJLy8gREVQUkVDQVRFRDog
aGFuZGxlcyBzZXR1cC90ZWFyZG93biBmdW5jdGlvbnMsCisJCS8vIGJlZm9yZUVhY2ggYW5kIGFm
dGVyRWFjaCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCisJCWlmICggdGVzdEVudmlyb25tZW50ICYm
IHRlc3RFbnZpcm9ubWVudC5zZXR1cCApIHsKKwkJCXRlc3RFbnZpcm9ubWVudC5iZWZvcmVFYWNo
ID0gdGVzdEVudmlyb25tZW50LnNldHVwOworCQkJZGVsZXRlIHRlc3RFbnZpcm9ubWVudC5zZXR1
cDsKKwkJfQorCQlpZiAoIHRlc3RFbnZpcm9ubWVudCAmJiB0ZXN0RW52aXJvbm1lbnQudGVhcmRv
d24gKSB7CisJCQl0ZXN0RW52aXJvbm1lbnQuYWZ0ZXJFYWNoID0gdGVzdEVudmlyb25tZW50LnRl
YXJkb3duOworCQkJZGVsZXRlIHRlc3RFbnZpcm9ubWVudC50ZWFyZG93bjsKKwkJfQorCisJCW1v
ZHVsZSA9IGNyZWF0ZU1vZHVsZSgpOworCisJCW1vZHVsZUZucyA9IHsKKwkJCWJlZm9yZUVhY2g6
IHNldEhvb2soIG1vZHVsZSwgImJlZm9yZUVhY2giICksCisJCQlhZnRlckVhY2g6IHNldEhvb2so
IG1vZHVsZSwgImFmdGVyRWFjaCIgKQorCQl9OworCisJCWlmICggZXhlY3V0ZU5vdyBpbnN0YW5j
ZW9mIEZ1bmN0aW9uICkgeworCQkJY29uZmlnLm1vZHVsZVN0YWNrLnB1c2goIG1vZHVsZSApOwor
CQkJc2V0Q3VycmVudE1vZHVsZSggbW9kdWxlICk7CisJCQlleGVjdXRlTm93LmNhbGwoIG1vZHVs
ZS50ZXN0RW52aXJvbm1lbnQsIG1vZHVsZUZucyApOworCQkJY29uZmlnLm1vZHVsZVN0YWNrLnBv
cCgpOworCQkJbW9kdWxlID0gbW9kdWxlLnBhcmVudE1vZHVsZSB8fCBjdXJyZW50TW9kdWxlOwor
CQl9CisKKwkJc2V0Q3VycmVudE1vZHVsZSggbW9kdWxlICk7CisKKwkJZnVuY3Rpb24gY3JlYXRl
TW9kdWxlKCkgeworCQkJdmFyIHBhcmVudE1vZHVsZSA9IGNvbmZpZy5tb2R1bGVTdGFjay5sZW5n
dGggPworCQkJCWNvbmZpZy5tb2R1bGVTdGFjay5zbGljZSggLTEgKVsgMCBdIDogbnVsbDsKKwkJ
CXZhciBtb2R1bGVOYW1lID0gcGFyZW50TW9kdWxlICE9PSBudWxsID8KKwkJCQlbIHBhcmVudE1v
ZHVsZS5uYW1lLCBuYW1lIF0uam9pbiggIiA+ICIgKSA6IG5hbWU7CisJCQl2YXIgbW9kdWxlID0g
eworCQkJCW5hbWU6IG1vZHVsZU5hbWUsCisJCQkJcGFyZW50TW9kdWxlOiBwYXJlbnRNb2R1bGUs
CisJCQkJdGVzdHM6IFtdCisJCQl9OworCisJCQl2YXIgZW52ID0ge307CisJCQlpZiAoIHBhcmVu
dE1vZHVsZSApIHsKKwkJCQlleHRlbmQoIGVudiwgcGFyZW50TW9kdWxlLnRlc3RFbnZpcm9ubWVu
dCApOworCQkJCWRlbGV0ZSBlbnYuYmVmb3JlRWFjaDsKKwkJCQlkZWxldGUgZW52LmFmdGVyRWFj
aDsKKwkJCX0KKwkJCWV4dGVuZCggZW52LCB0ZXN0RW52aXJvbm1lbnQgKTsKKwkJCW1vZHVsZS50
ZXN0RW52aXJvbm1lbnQgPSBlbnY7CisKKwkJCWNvbmZpZy5tb2R1bGVzLnB1c2goIG1vZHVsZSAp
OworCQkJcmV0dXJuIG1vZHVsZTsKKwkJfQorCisJCWZ1bmN0aW9uIHNldEN1cnJlbnRNb2R1bGUo
IG1vZHVsZSApIHsKKwkJCWNvbmZpZy5jdXJyZW50TW9kdWxlID0gbW9kdWxlOworCQl9CisKKwl9
LAorCisJLy8gREVQUkVDQVRFRDogUVVuaXQuYXN5bmNUZXN0KCkgd2lsbCBiZSByZW1vdmVkIGlu
IFFVbml0IDIuMC4KKwlhc3luY1Rlc3Q6IGFzeW5jVGVzdCwKKworCXRlc3Q6IHRlc3QsCisKKwlz
a2lwOiBza2lwLAorCisJb25seTogb25seSwKKworCS8vIERFUFJFQ0FURUQ6IFRoZSBmdW5jdGlv
bmFsaXR5IG9mIFFVbml0LnN0YXJ0KCkgd2lsbCBiZSBhbHRlcmVkIGluIFFVbml0IDIuMC4KKwkv
LyBJbiBRVW5pdCAyLjAsIGludm9raW5nIGl0IHdpbGwgT05MWSBhZmZlY3QgdGhlIGBRVW5pdC5j
b25maWcuYXV0b3N0YXJ0YCBibG9ja2luZyBiZWhhdmlvci4KKwlzdGFydDogZnVuY3Rpb24oIGNv
dW50ICkgeworCQl2YXIgZ2xvYmFsU3RhcnRBbHJlYWR5Q2FsbGVkID0gZ2xvYmFsU3RhcnRDYWxs
ZWQ7CisKKwkJaWYgKCAhY29uZmlnLmN1cnJlbnQgKSB7CisJCQlnbG9iYWxTdGFydENhbGxlZCA9
IHRydWU7CisKKwkJCWlmICggcnVuU3RhcnRlZCApIHsKKwkJCQl0aHJvdyBuZXcgRXJyb3IoICJD
YWxsZWQgc3RhcnQoKSBvdXRzaWRlIG9mIGEgdGVzdCBjb250ZXh0IHdoaWxlIGFscmVhZHkgc3Rh
cnRlZCIgKTsKKwkJCX0gZWxzZSBpZiAoIGdsb2JhbFN0YXJ0QWxyZWFkeUNhbGxlZCB8fCBjb3Vu
dCA+IDEgKSB7CisJCQkJdGhyb3cgbmV3IEVycm9yKCAiQ2FsbGVkIHN0YXJ0KCkgb3V0c2lkZSBv
ZiBhIHRlc3QgY29udGV4dCB0b28gbWFueSB0aW1lcyIgKTsKKwkJCX0gZWxzZSBpZiAoIGNvbmZp
Zy5hdXRvc3RhcnQgKSB7CisJCQkJdGhyb3cgbmV3IEVycm9yKCAiQ2FsbGVkIHN0YXJ0KCkgb3V0
c2lkZSBvZiBhIHRlc3QgY29udGV4dCB3aGVuICIgKworCQkJCQkiUVVuaXQuY29uZmlnLmF1dG9z
dGFydCB3YXMgdHJ1ZSIgKTsKKwkJCX0gZWxzZSBpZiAoICFjb25maWcucGFnZUxvYWRlZCApIHsK
KworCQkJCS8vIFRoZSBwYWdlIGlzbid0IGNvbXBsZXRlbHkgbG9hZGVkIHlldCwgc28gYmFpbCBv
dXQgYW5kIGxldCBgUVVuaXQubG9hZGAgaGFuZGxlIGl0CisJCQkJY29uZmlnLmF1dG9zdGFydCA9
IHRydWU7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCisJCQkvLyBJZiBhIHRlc3Qg
aXMgcnVubmluZywgYWRqdXN0IGl0cyBzZW1hcGhvcmUKKwkJCWNvbmZpZy5jdXJyZW50LnNlbWFw
aG9yZSAtPSBjb3VudCB8fCAxOworCisJCQkvLyBJZiBzZW1hcGhvcmUgaXMgbm9uLW51bWVyaWMs
IHRocm93IGVycm9yCisJCQlpZiAoIGlzTmFOKCBjb25maWcuY3VycmVudC5zZW1hcGhvcmUgKSAp
IHsKKwkJCQljb25maWcuY3VycmVudC5zZW1hcGhvcmUgPSAwOworCisJCQkJUVVuaXQucHVzaEZh
aWx1cmUoCisJCQkJCSJDYWxsZWQgc3RhcnQoKSB3aXRoIGEgbm9uLW51bWVyaWMgZGVjcmVtZW50
LiIsCisJCQkJCXNvdXJjZUZyb21TdGFja3RyYWNlKCAyICkKKwkJCQkpOworCQkJCXJldHVybjsK
KwkJCX0KKworCQkJLy8gRG9uJ3Qgc3RhcnQgdW50aWwgZXF1YWwgbnVtYmVyIG9mIHN0b3AtY2Fs
bHMKKwkJCWlmICggY29uZmlnLmN1cnJlbnQuc2VtYXBob3JlID4gMCApIHsKKwkJCQlyZXR1cm47
CisJCQl9CisKKwkJCS8vIHRocm93IGFuIEVycm9yIGlmIHN0YXJ0IGlzIGNhbGxlZCBtb3JlIG9m
dGVuIHRoYW4gc3RvcAorCQkJaWYgKCBjb25maWcuY3VycmVudC5zZW1hcGhvcmUgPCAwICkgewor
CQkJCWNvbmZpZy5jdXJyZW50LnNlbWFwaG9yZSA9IDA7CisKKwkJCQlRVW5pdC5wdXNoRmFpbHVy
ZSgKKwkJCQkJIkNhbGxlZCBzdGFydCgpIHdoaWxlIGFscmVhZHkgc3RhcnRlZCAodGVzdCdzIHNl
bWFwaG9yZSB3YXMgMCBhbHJlYWR5KSIsCisJCQkJCXNvdXJjZUZyb21TdGFja3RyYWNlKCAyICkK
KwkJCQkpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCXJlc3VtZVByb2Nlc3NpbmcoKTsK
Kwl9LAorCisJLy8gREVQUkVDQVRFRDogUVVuaXQuc3RvcCgpIHdpbGwgYmUgcmVtb3ZlZCBpbiBR
VW5pdCAyLjAuCisJc3RvcDogZnVuY3Rpb24oIGNvdW50ICkgeworCisJCS8vIElmIHRoZXJlIGlz
bid0IGEgdGVzdCBydW5uaW5nLCBkb24ndCBhbGxvdyBRVW5pdC5zdG9wKCkgdG8gYmUgY2FsbGVk
CisJCWlmICggIWNvbmZpZy5jdXJyZW50ICkgeworCQkJdGhyb3cgbmV3IEVycm9yKCAiQ2FsbGVk
IHN0b3AoKSBvdXRzaWRlIG9mIGEgdGVzdCBjb250ZXh0IiApOworCQl9CisKKwkJLy8gSWYgYSB0
ZXN0IGlzIHJ1bm5pbmcsIGFkanVzdCBpdHMgc2VtYXBob3JlCisJCWNvbmZpZy5jdXJyZW50LnNl
bWFwaG9yZSArPSBjb3VudCB8fCAxOworCisJCXBhdXNlUHJvY2Vzc2luZygpOworCX0sCisKKwlj
b25maWc6IGNvbmZpZywKKworCWlzOiBpcywKKworCW9iamVjdFR5cGU6IG9iamVjdFR5cGUsCisK
KwlleHRlbmQ6IGV4dGVuZCwKKworCWxvYWQ6IGZ1bmN0aW9uKCkgeworCQljb25maWcucGFnZUxv
YWRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25z
CisJCWV4dGVuZCggY29uZmlnLCB7CisJCQlzdGF0czogeyBhbGw6IDAsIGJhZDogMCB9LAorCQkJ
bW9kdWxlU3RhdHM6IHsgYWxsOiAwLCBiYWQ6IDAgfSwKKwkJCXN0YXJ0ZWQ6IDAsCisJCQl1cGRh
dGVSYXRlOiAxMDAwLAorCQkJYXV0b3N0YXJ0OiB0cnVlLAorCQkJZmlsdGVyOiAiIgorCQl9LCB0
cnVlICk7CisKKwkJY29uZmlnLmJsb2NraW5nID0gZmFsc2U7CisKKwkJaWYgKCBjb25maWcuYXV0
b3N0YXJ0ICkgeworCQkJcmVzdW1lUHJvY2Vzc2luZygpOworCQl9CisJfSwKKworCXN0YWNrOiBm
dW5jdGlvbiggb2Zmc2V0ICkgeworCQlvZmZzZXQgPSAoIG9mZnNldCB8fCAwICkgKyAyOworCQly
ZXR1cm4gc291cmNlRnJvbVN0YWNrdHJhY2UoIG9mZnNldCApOworCX0KK30pOworCityZWdpc3Rl
ckxvZ2dpbmdDYWxsYmFja3MoIFFVbml0ICk7CisKK2Z1bmN0aW9uIGJlZ2luKCkgeworCXZhciBp
LCBsLAorCQltb2R1bGVzTG9nID0gW107CisKKwkvLyBJZiB0aGUgdGVzdCBydW4gaGFzbid0IG9m
ZmljaWFsbHkgYmVndW4geWV0CisJaWYgKCAhY29uZmlnLnN0YXJ0ZWQgKSB7CisKKwkJLy8gUmVj
b3JkIHRoZSB0aW1lIG9mIHRoZSB0ZXN0IHJ1bidzIGJlZ2lubmluZworCQljb25maWcuc3RhcnRl
ZCA9IG5vdygpOworCisJCXZlcmlmeUxvZ2dpbmdDYWxsYmFja3MoKTsKKworCQkvLyBEZWxldGUg
dGhlIGxvb3NlIHVubmFtZWQgbW9kdWxlIGlmIHVudXNlZC4KKwkJaWYgKCBjb25maWcubW9kdWxl
c1sgMCBdLm5hbWUgPT09ICIiICYmIGNvbmZpZy5tb2R1bGVzWyAwIF0udGVzdHMubGVuZ3RoID09
PSAwICkgeworCQkJY29uZmlnLm1vZHVsZXMuc2hpZnQoKTsKKwkJfQorCisJCS8vIEF2b2lkIHVu
bmVjZXNzYXJ5IGluZm9ybWF0aW9uIGJ5IG5vdCBsb2dnaW5nIG1vZHVsZXMnIHRlc3QgZW52aXJv
bm1lbnRzCisJCWZvciAoIGkgPSAwLCBsID0gY29uZmlnLm1vZHVsZXMubGVuZ3RoOyBpIDwgbDsg
aSsrICkgeworCQkJbW9kdWxlc0xvZy5wdXNoKHsKKwkJCQluYW1lOiBjb25maWcubW9kdWxlc1sg
aSBdLm5hbWUsCisJCQkJdGVzdHM6IGNvbmZpZy5tb2R1bGVzWyBpIF0udGVzdHMKKwkJCX0pOwor
CQl9CisKKwkJLy8gVGhlIHRlc3QgcnVuIGlzIG9mZmljaWFsbHkgYmVnaW5uaW5nIG5vdworCQly
dW5Mb2dnaW5nQ2FsbGJhY2tzKCAiYmVnaW4iLCB7CisJCQl0b3RhbFRlc3RzOiBUZXN0LmNvdW50
LAorCQkJbW9kdWxlczogbW9kdWxlc0xvZworCQl9KTsKKwl9CisKKwljb25maWcuYmxvY2tpbmcg
PSBmYWxzZTsKKwlwcm9jZXNzKCB0cnVlICk7Cit9CisKK2Z1bmN0aW9uIHByb2Nlc3MoIGxhc3Qg
KSB7CisJZnVuY3Rpb24gbmV4dCgpIHsKKwkJcHJvY2VzcyggbGFzdCApOworCX0KKwl2YXIgc3Rh
cnQgPSBub3coKTsKKwljb25maWcuZGVwdGggPSAoIGNvbmZpZy5kZXB0aCB8fCAwICkgKyAxOwor
CisJd2hpbGUgKCBjb25maWcucXVldWUubGVuZ3RoICYmICFjb25maWcuYmxvY2tpbmcgKSB7CisJ
CWlmICggIWRlZmluZWQuc2V0VGltZW91dCB8fCBjb25maWcudXBkYXRlUmF0ZSA8PSAwIHx8CisJ
CQkJKCAoIG5vdygpIC0gc3RhcnQgKSA8IGNvbmZpZy51cGRhdGVSYXRlICkgKSB7CisJCQlpZiAo
IGNvbmZpZy5jdXJyZW50ICkgeworCisJCQkJLy8gUmVzZXQgYXN5bmMgdHJhY2tpbmcgZm9yIGVh
Y2ggcGhhc2Ugb2YgdGhlIFRlc3QgbGlmZWN5Y2xlCisJCQkJY29uZmlnLmN1cnJlbnQudXNlZEFz
eW5jID0gZmFsc2U7CisJCQl9CisJCQljb25maWcucXVldWUuc2hpZnQoKSgpOworCQl9IGVsc2Ug
eworCQkJc2V0VGltZW91dCggbmV4dCwgMTMgKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNvbmZp
Zy5kZXB0aC0tOworCWlmICggbGFzdCAmJiAhY29uZmlnLmJsb2NraW5nICYmICFjb25maWcucXVl
dWUubGVuZ3RoICYmIGNvbmZpZy5kZXB0aCA9PT0gMCApIHsKKwkJZG9uZSgpOworCX0KK30KKwor
ZnVuY3Rpb24gcGF1c2VQcm9jZXNzaW5nKCkgeworCWNvbmZpZy5ibG9ja2luZyA9IHRydWU7CisK
KwlpZiAoIGNvbmZpZy50ZXN0VGltZW91dCAmJiBkZWZpbmVkLnNldFRpbWVvdXQgKSB7CisJCWNs
ZWFyVGltZW91dCggY29uZmlnLnRpbWVvdXQgKTsKKwkJY29uZmlnLnRpbWVvdXQgPSBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworCQkJaWYgKCBjb25maWcuY3VycmVudCApIHsKKwkJCQljb25maWcu
Y3VycmVudC5zZW1hcGhvcmUgPSAwOworCQkJCVFVbml0LnB1c2hGYWlsdXJlKCAiVGVzdCB0aW1l
ZCBvdXQiLCBzb3VyY2VGcm9tU3RhY2t0cmFjZSggMiApICk7CisJCQl9IGVsc2UgeworCQkJCXRo
cm93IG5ldyBFcnJvciggIlRlc3QgdGltZWQgb3V0IiApOworCQkJfQorCQkJcmVzdW1lUHJvY2Vz
c2luZygpOworCQl9LCBjb25maWcudGVzdFRpbWVvdXQgKTsKKwl9Cit9CisKK2Z1bmN0aW9uIHJl
c3VtZVByb2Nlc3NpbmcoKSB7CisJcnVuU3RhcnRlZCA9IHRydWU7CisKKwkvLyBBIHNsaWdodCBk
ZWxheSB0byBhbGxvdyB0aGlzIGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcCB0byBmaW5pc2gg
KG1vcmUgYXNzZXJ0aW9ucywgZXRjLikKKwlpZiAoIGRlZmluZWQuc2V0VGltZW91dCApIHsKKwkJ
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKwkJCWlmICggY29uZmlnLmN1cnJlbnQgJiYgY29uZmln
LmN1cnJlbnQuc2VtYXBob3JlID4gMCApIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoIGNv
bmZpZy50aW1lb3V0ICkgeworCQkJCWNsZWFyVGltZW91dCggY29uZmlnLnRpbWVvdXQgKTsKKwkJ
CX0KKworCQkJYmVnaW4oKTsKKwkJfSwgMTMgKTsKKwl9IGVsc2UgeworCQliZWdpbigpOworCX0K
K30KKworZnVuY3Rpb24gZG9uZSgpIHsKKwl2YXIgcnVudGltZSwgcGFzc2VkOworCisJY29uZmln
LmF1dG9ydW4gPSB0cnVlOworCisJLy8gTG9nIHRoZSBsYXN0IG1vZHVsZSByZXN1bHRzCisJaWYg
KCBjb25maWcucHJldmlvdXNNb2R1bGUgKSB7CisJCXJ1bkxvZ2dpbmdDYWxsYmFja3MoICJtb2R1
bGVEb25lIiwgeworCQkJbmFtZTogY29uZmlnLnByZXZpb3VzTW9kdWxlLm5hbWUsCisJCQl0ZXN0
czogY29uZmlnLnByZXZpb3VzTW9kdWxlLnRlc3RzLAorCQkJZmFpbGVkOiBjb25maWcubW9kdWxl
U3RhdHMuYmFkLAorCQkJcGFzc2VkOiBjb25maWcubW9kdWxlU3RhdHMuYWxsIC0gY29uZmlnLm1v
ZHVsZVN0YXRzLmJhZCwKKwkJCXRvdGFsOiBjb25maWcubW9kdWxlU3RhdHMuYWxsLAorCQkJcnVu
dGltZTogbm93KCkgLSBjb25maWcubW9kdWxlU3RhdHMuc3RhcnRlZAorCQl9KTsKKwl9CisJZGVs
ZXRlIGNvbmZpZy5wcmV2aW91c01vZHVsZTsKKworCXJ1bnRpbWUgPSBub3coKSAtIGNvbmZpZy5z
dGFydGVkOworCXBhc3NlZCA9IGNvbmZpZy5zdGF0cy5hbGwgLSBjb25maWcuc3RhdHMuYmFkOwor
CisJcnVuTG9nZ2luZ0NhbGxiYWNrcyggImRvbmUiLCB7CisJCWZhaWxlZDogY29uZmlnLnN0YXRz
LmJhZCwKKwkJcGFzc2VkOiBwYXNzZWQsCisJCXRvdGFsOiBjb25maWcuc3RhdHMuYWxsLAorCQly
dW50aW1lOiBydW50aW1lCisJfSk7Cit9CisKK2Z1bmN0aW9uIHNldEhvb2soIG1vZHVsZSwgaG9v
a05hbWUgKSB7CisJaWYgKCBtb2R1bGUudGVzdEVudmlyb25tZW50ID09PSB1bmRlZmluZWQgKSB7
CisJCW1vZHVsZS50ZXN0RW52aXJvbm1lbnQgPSB7fTsKKwl9CisKKwlyZXR1cm4gZnVuY3Rpb24o
IGNhbGxiYWNrICkgeworCQltb2R1bGUudGVzdEVudmlyb25tZW50WyBob29rTmFtZSBdID0gY2Fs
bGJhY2s7CisJfTsKK30KKwordmFyIGZvY3VzZWQgPSBmYWxzZTsKKworZnVuY3Rpb24gVGVzdCgg
c2V0dGluZ3MgKSB7CisJdmFyIGksIGw7CisKKwkrK1Rlc3QuY291bnQ7CisKKwlleHRlbmQoIHRo
aXMsIHNldHRpbmdzICk7CisJdGhpcy5hc3NlcnRpb25zID0gW107CisJdGhpcy5zZW1hcGhvcmUg
PSAwOworCXRoaXMudXNlZEFzeW5jID0gZmFsc2U7CisJdGhpcy5tb2R1bGUgPSBjb25maWcuY3Vy
cmVudE1vZHVsZTsKKwl0aGlzLnN0YWNrID0gc291cmNlRnJvbVN0YWNrdHJhY2UoIDMgKTsKKwor
CS8vIFJlZ2lzdGVyIHVuaXF1ZSBzdHJpbmdzCisJZm9yICggaSA9IDAsIGwgPSB0aGlzLm1vZHVs
ZS50ZXN0czsgaSA8IGwubGVuZ3RoOyBpKysgKSB7CisJCWlmICggdGhpcy5tb2R1bGUudGVzdHNb
IGkgXS5uYW1lID09PSB0aGlzLnRlc3ROYW1lICkgeworCQkJdGhpcy50ZXN0TmFtZSArPSAiICI7
CisJCX0KKwl9CisKKwl0aGlzLnRlc3RJZCA9IGdlbmVyYXRlSGFzaCggdGhpcy5tb2R1bGUubmFt
ZSwgdGhpcy50ZXN0TmFtZSApOworCisJdGhpcy5tb2R1bGUudGVzdHMucHVzaCh7CisJCW5hbWU6
IHRoaXMudGVzdE5hbWUsCisJCXRlc3RJZDogdGhpcy50ZXN0SWQKKwl9KTsKKworCWlmICggc2V0
dGluZ3Muc2tpcCApIHsKKworCQkvLyBTa2lwcGVkIHRlc3RzIHdpbGwgZnVsbHkgaWdub3JlIGFu
eSBzZW50IGNhbGxiYWNrCisJCXRoaXMuY2FsbGJhY2sgPSBmdW5jdGlvbigpIHt9OworCQl0aGlz
LmFzeW5jID0gZmFsc2U7CisJCXRoaXMuZXhwZWN0ZWQgPSAwOworCX0gZWxzZSB7CisJCXRoaXMu
YXNzZXJ0ID0gbmV3IEFzc2VydCggdGhpcyApOworCX0KK30KKworVGVzdC5jb3VudCA9IDA7CisK
K1Rlc3QucHJvdG90eXBlID0geworCWJlZm9yZTogZnVuY3Rpb24oKSB7CisJCWlmICgKKworCQkJ
Ly8gRW1pdCBtb2R1bGVTdGFydCB3aGVuIHdlJ3JlIHN3aXRjaGluZyBmcm9tIG9uZSBtb2R1bGUg
dG8gYW5vdGhlcgorCQkJdGhpcy5tb2R1bGUgIT09IGNvbmZpZy5wcmV2aW91c01vZHVsZSB8fAor
CisJCQkJLy8gVGhleSBjb3VsZCBiZSBlcXVhbCAoYm90aCB1bmRlZmluZWQpIGJ1dCBpZiB0aGUg
cHJldmlvdXNNb2R1bGUgcHJvcGVydHkgZG9lc24ndAorCQkJCS8vIHlldCBleGlzdCBpdCBtZWFu
cyB0aGlzIGlzIHRoZSBmaXJzdCB0ZXN0IGluIGEgc3VpdGUgdGhhdCBpc24ndCB3cmFwcGVkIGlu
IGEKKwkJCQkvLyBtb2R1bGUsIGluIHdoaWNoIGNhc2Ugd2UnbGwganVzdCBlbWl0IGEgbW9kdWxl
U3RhcnQgZXZlbnQgZm9yICd1bmRlZmluZWQnLgorCQkJCS8vIFdpdGhvdXQgdGhpcywgcmVwb3J0
ZXJzIGNhbiBnZXQgdGVzdFN0YXJ0IGJlZm9yZSBtb2R1bGVTdGFydCAgd2hpY2ggaXMgYSBwcm9i
bGVtLgorCQkJCSFoYXNPd24uY2FsbCggY29uZmlnLCAicHJldmlvdXNNb2R1bGUiICkKKwkJKSB7
CisJCQlpZiAoIGhhc093bi5jYWxsKCBjb25maWcsICJwcmV2aW91c01vZHVsZSIgKSApIHsKKwkJ
CQlydW5Mb2dnaW5nQ2FsbGJhY2tzKCAibW9kdWxlRG9uZSIsIHsKKwkJCQkJbmFtZTogY29uZmln
LnByZXZpb3VzTW9kdWxlLm5hbWUsCisJCQkJCXRlc3RzOiBjb25maWcucHJldmlvdXNNb2R1bGUu
dGVzdHMsCisJCQkJCWZhaWxlZDogY29uZmlnLm1vZHVsZVN0YXRzLmJhZCwKKwkJCQkJcGFzc2Vk
OiBjb25maWcubW9kdWxlU3RhdHMuYWxsIC0gY29uZmlnLm1vZHVsZVN0YXRzLmJhZCwKKwkJCQkJ
dG90YWw6IGNvbmZpZy5tb2R1bGVTdGF0cy5hbGwsCisJCQkJCXJ1bnRpbWU6IG5vdygpIC0gY29u
ZmlnLm1vZHVsZVN0YXRzLnN0YXJ0ZWQKKwkJCQl9KTsKKwkJCX0KKwkJCWNvbmZpZy5wcmV2aW91
c01vZHVsZSA9IHRoaXMubW9kdWxlOworCQkJY29uZmlnLm1vZHVsZVN0YXRzID0geyBhbGw6IDAs
IGJhZDogMCwgc3RhcnRlZDogbm93KCkgfTsKKwkJCXJ1bkxvZ2dpbmdDYWxsYmFja3MoICJtb2R1
bGVTdGFydCIsIHsKKwkJCQluYW1lOiB0aGlzLm1vZHVsZS5uYW1lLAorCQkJCXRlc3RzOiB0aGlz
Lm1vZHVsZS50ZXN0cworCQkJfSk7CisJCX0KKworCQljb25maWcuY3VycmVudCA9IHRoaXM7CisK
KwkJaWYgKCB0aGlzLm1vZHVsZS50ZXN0RW52aXJvbm1lbnQgKSB7CisJCQlkZWxldGUgdGhpcy5t
b2R1bGUudGVzdEVudmlyb25tZW50LmJlZm9yZUVhY2g7CisJCQlkZWxldGUgdGhpcy5tb2R1bGUu
dGVzdEVudmlyb25tZW50LmFmdGVyRWFjaDsKKwkJfQorCQl0aGlzLnRlc3RFbnZpcm9ubWVudCA9
IGV4dGVuZCgge30sIHRoaXMubW9kdWxlLnRlc3RFbnZpcm9ubWVudCApOworCisJCXRoaXMuc3Rh
cnRlZCA9IG5vdygpOworCQlydW5Mb2dnaW5nQ2FsbGJhY2tzKCAidGVzdFN0YXJ0IiwgeworCQkJ
bmFtZTogdGhpcy50ZXN0TmFtZSwKKwkJCW1vZHVsZTogdGhpcy5tb2R1bGUubmFtZSwKKwkJCXRl
c3RJZDogdGhpcy50ZXN0SWQKKwkJfSk7CisKKwkJaWYgKCAhY29uZmlnLnBvbGx1dGlvbiApIHsK
KwkJCXNhdmVHbG9iYWwoKTsKKwkJfQorCX0sCisKKwlydW46IGZ1bmN0aW9uKCkgeworCQl2YXIg
cHJvbWlzZTsKKworCQljb25maWcuY3VycmVudCA9IHRoaXM7CisKKwkJaWYgKCB0aGlzLmFzeW5j
ICkgeworCQkJUVVuaXQuc3RvcCgpOworCQl9CisKKwkJdGhpcy5jYWxsYmFja1N0YXJ0ZWQgPSBu
b3coKTsKKworCQlpZiAoIGNvbmZpZy5ub3RyeWNhdGNoICkgeworCQkJcnVuVGVzdCggdGhpcyAp
OworCQkJcmV0dXJuOworCQl9CisKKwkJdHJ5IHsKKwkJCXJ1blRlc3QoIHRoaXMgKTsKKwkJfSBj
YXRjaCAoIGUgKSB7CisJCQl0aGlzLnB1c2hGYWlsdXJlKCAiRGllZCBvbiB0ZXN0ICMiICsgKCB0
aGlzLmFzc2VydGlvbnMubGVuZ3RoICsgMSApICsgIiAiICsKKwkJCQl0aGlzLnN0YWNrICsgIjog
IiArICggZS5tZXNzYWdlIHx8IGUgKSwgZXh0cmFjdFN0YWNrdHJhY2UoIGUsIDAgKSApOworCisJ
CQkvLyBlbHNlIG5leHQgdGVzdCB3aWxsIGNhcnJ5IHRoZSByZXNwb25zaWJpbGl0eQorCQkJc2F2
ZUdsb2JhbCgpOworCisJCQkvLyBSZXN0YXJ0IHRoZSB0ZXN0cyBpZiB0aGV5J3JlIGJsb2NraW5n
CisJCQlpZiAoIGNvbmZpZy5ibG9ja2luZyApIHsKKwkJCQlRVW5pdC5zdGFydCgpOworCQkJfQor
CQl9CisKKwkJZnVuY3Rpb24gcnVuVGVzdCggdGVzdCApIHsKKwkJCXByb21pc2UgPSB0ZXN0LmNh
bGxiYWNrLmNhbGwoIHRlc3QudGVzdEVudmlyb25tZW50LCB0ZXN0LmFzc2VydCApOworCQkJdGVz
dC5yZXNvbHZlUHJvbWlzZSggcHJvbWlzZSApOworCQl9CisJfSwKKworCWFmdGVyOiBmdW5jdGlv
bigpIHsKKwkJY2hlY2tQb2xsdXRpb24oKTsKKwl9LAorCisJcXVldWVIb29rOiBmdW5jdGlvbigg
aG9vaywgaG9va05hbWUgKSB7CisJCXZhciBwcm9taXNlLAorCQkJdGVzdCA9IHRoaXM7CisJCXJl
dHVybiBmdW5jdGlvbiBydW5Ib29rKCkgeworCQkJY29uZmlnLmN1cnJlbnQgPSB0ZXN0OworCQkJ
aWYgKCBjb25maWcubm90cnljYXRjaCApIHsKKwkJCQljYWxsSG9vaygpOworCQkJCXJldHVybjsK
KwkJCX0KKwkJCXRyeSB7CisJCQkJY2FsbEhvb2soKTsKKwkJCX0gY2F0Y2ggKCBlcnJvciApIHsK
KwkJCQl0ZXN0LnB1c2hGYWlsdXJlKCBob29rTmFtZSArICIgZmFpbGVkIG9uICIgKyB0ZXN0LnRl
c3ROYW1lICsgIjogIiArCisJCQkJKCBlcnJvci5tZXNzYWdlIHx8IGVycm9yICksIGV4dHJhY3RT
dGFja3RyYWNlKCBlcnJvciwgMCApICk7CisJCQl9CisKKwkJCWZ1bmN0aW9uIGNhbGxIb29rKCkg
eworCQkJCXByb21pc2UgPSBob29rLmNhbGwoIHRlc3QudGVzdEVudmlyb25tZW50LCB0ZXN0LmFz
c2VydCApOworCQkJCXRlc3QucmVzb2x2ZVByb21pc2UoIHByb21pc2UsIGhvb2tOYW1lICk7CisJ
CQl9CisJCX07CisJfSwKKworCS8vIEN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIG1vZHVsZSBsZXZl
bCBob29rcywgY2FuIGJlIHVzZWQgdG8gYWRkIGdsb2JhbCBsZXZlbCBvbmVzCisJaG9va3M6IGZ1
bmN0aW9uKCBoYW5kbGVyICkgeworCQl2YXIgaG9va3MgPSBbXTsKKworCQlmdW5jdGlvbiBwcm9j
ZXNzSG9va3MoIHRlc3QsIG1vZHVsZSApIHsKKwkJCWlmICggbW9kdWxlLnBhcmVudE1vZHVsZSAp
IHsKKwkJCQlwcm9jZXNzSG9va3MoIHRlc3QsIG1vZHVsZS5wYXJlbnRNb2R1bGUgKTsKKwkJCX0K
KwkJCWlmICggbW9kdWxlLnRlc3RFbnZpcm9ubWVudCAmJgorCQkJCVFVbml0Lm9iamVjdFR5cGUo
IG1vZHVsZS50ZXN0RW52aXJvbm1lbnRbIGhhbmRsZXIgXSApID09PSAiZnVuY3Rpb24iICkgewor
CQkJCWhvb2tzLnB1c2goIHRlc3QucXVldWVIb29rKCBtb2R1bGUudGVzdEVudmlyb25tZW50WyBo
YW5kbGVyIF0sIGhhbmRsZXIgKSApOworCQkJfQorCQl9CisKKwkJLy8gSG9va3MgYXJlIGlnbm9y
ZWQgb24gc2tpcHBlZCB0ZXN0cworCQlpZiAoICF0aGlzLnNraXAgKSB7CisJCQlwcm9jZXNzSG9v
a3MoIHRoaXMsIHRoaXMubW9kdWxlICk7CisJCX0KKwkJcmV0dXJuIGhvb2tzOworCX0sCisKKwlm
aW5pc2g6IGZ1bmN0aW9uKCkgeworCQljb25maWcuY3VycmVudCA9IHRoaXM7CisJCWlmICggY29u
ZmlnLnJlcXVpcmVFeHBlY3RzICYmIHRoaXMuZXhwZWN0ZWQgPT09IG51bGwgKSB7CisJCQl0aGlz
LnB1c2hGYWlsdXJlKCAiRXhwZWN0ZWQgbnVtYmVyIG9mIGFzc2VydGlvbnMgdG8gYmUgZGVmaW5l
ZCwgYnV0IGV4cGVjdCgpIHdhcyAiICsKKwkJCQkibm90IGNhbGxlZC4iLCB0aGlzLnN0YWNrICk7
CisJCX0gZWxzZSBpZiAoIHRoaXMuZXhwZWN0ZWQgIT09IG51bGwgJiYgdGhpcy5leHBlY3RlZCAh
PT0gdGhpcy5hc3NlcnRpb25zLmxlbmd0aCApIHsKKwkJCXRoaXMucHVzaEZhaWx1cmUoICJFeHBl
Y3RlZCAiICsgdGhpcy5leHBlY3RlZCArICIgYXNzZXJ0aW9ucywgYnV0ICIgKworCQkJCXRoaXMu
YXNzZXJ0aW9ucy5sZW5ndGggKyAiIHdlcmUgcnVuIiwgdGhpcy5zdGFjayApOworCQl9IGVsc2Ug
aWYgKCB0aGlzLmV4cGVjdGVkID09PSBudWxsICYmICF0aGlzLmFzc2VydGlvbnMubGVuZ3RoICkg
eworCQkJdGhpcy5wdXNoRmFpbHVyZSggIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhc3NlcnRpb24s
IGJ1dCBub25lIHdlcmUgcnVuIC0gY2FsbCAiICsKKwkJCQkiZXhwZWN0KDApIHRvIGFjY2VwdCB6
ZXJvIGFzc2VydGlvbnMuIiwgdGhpcy5zdGFjayApOworCQl9CisKKwkJdmFyIGksCisJCQliYWQg
PSAwOworCisJCXRoaXMucnVudGltZSA9IG5vdygpIC0gdGhpcy5zdGFydGVkOworCQljb25maWcu
c3RhdHMuYWxsICs9IHRoaXMuYXNzZXJ0aW9ucy5sZW5ndGg7CisJCWNvbmZpZy5tb2R1bGVTdGF0
cy5hbGwgKz0gdGhpcy5hc3NlcnRpb25zLmxlbmd0aDsKKworCQlmb3IgKCBpID0gMDsgaSA8IHRo
aXMuYXNzZXJ0aW9ucy5sZW5ndGg7IGkrKyApIHsKKwkJCWlmICggIXRoaXMuYXNzZXJ0aW9uc1sg
aSBdLnJlc3VsdCApIHsKKwkJCQliYWQrKzsKKwkJCQljb25maWcuc3RhdHMuYmFkKys7CisJCQkJ
Y29uZmlnLm1vZHVsZVN0YXRzLmJhZCsrOworCQkJfQorCQl9CisKKwkJcnVuTG9nZ2luZ0NhbGxi
YWNrcyggInRlc3REb25lIiwgeworCQkJbmFtZTogdGhpcy50ZXN0TmFtZSwKKwkJCW1vZHVsZTog
dGhpcy5tb2R1bGUubmFtZSwKKwkJCXNraXBwZWQ6ICEhdGhpcy5za2lwLAorCQkJZmFpbGVkOiBi
YWQsCisJCQlwYXNzZWQ6IHRoaXMuYXNzZXJ0aW9ucy5sZW5ndGggLSBiYWQsCisJCQl0b3RhbDog
dGhpcy5hc3NlcnRpb25zLmxlbmd0aCwKKwkJCXJ1bnRpbWU6IHRoaXMucnVudGltZSwKKworCQkJ
Ly8gSFRNTCBSZXBvcnRlciB1c2UKKwkJCWFzc2VydGlvbnM6IHRoaXMuYXNzZXJ0aW9ucywKKwkJ
CXRlc3RJZDogdGhpcy50ZXN0SWQsCisKKwkJCS8vIFNvdXJjZSBvZiBUZXN0CisJCQlzb3VyY2U6
IHRoaXMuc3RhY2ssCisKKwkJCS8vIERFUFJFQ0FURUQ6IHRoaXMgcHJvcGVydHkgd2lsbCBiZSBy
ZW1vdmVkIGluIDIuMC4wLCB1c2UgcnVudGltZSBpbnN0ZWFkCisJCQlkdXJhdGlvbjogdGhpcy5y
dW50aW1lCisJCX0pOworCisJCS8vIFFVbml0LnJlc2V0KCkgaXMgZGVwcmVjYXRlZCBhbmQgd2ls
bCBiZSByZXBsYWNlZCBmb3IgYSBuZXcKKwkJLy8gZml4dHVyZSByZXNldCBmdW5jdGlvbiBvbiBR
VW5pdCAyLjAvMi4xLgorCQkvLyBJdCdzIHN0aWxsIGNhbGxlZCBoZXJlIGZvciBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eSBoYW5kbGluZworCQlRVW5pdC5yZXNldCgpOworCisJCWNvbmZpZy5jdXJy
ZW50ID0gdW5kZWZpbmVkOworCX0sCisKKwlxdWV1ZTogZnVuY3Rpb24oKSB7CisJCXZhciBwcmlv
cml0eSwKKwkJCXRlc3QgPSB0aGlzOworCisJCWlmICggIXRoaXMudmFsaWQoKSApIHsKKwkJCXJl
dHVybjsKKwkJfQorCisJCWZ1bmN0aW9uIHJ1bigpIHsKKworCQkJLy8gZWFjaCBvZiB0aGVzZSBj
YW4gYnkgYXN5bmMKKwkJCXN5bmNocm9uaXplKFsKKwkJCQlmdW5jdGlvbigpIHsKKwkJCQkJdGVz
dC5iZWZvcmUoKTsKKwkJCQl9LAorCisJCQkJdGVzdC5ob29rcyggImJlZm9yZUVhY2giICksCisJ
CQkJZnVuY3Rpb24oKSB7CisJCQkJCXRlc3QucnVuKCk7CisJCQkJfSwKKworCQkJCXRlc3QuaG9v
a3MoICJhZnRlckVhY2giICkucmV2ZXJzZSgpLAorCisJCQkJZnVuY3Rpb24oKSB7CisJCQkJCXRl
c3QuYWZ0ZXIoKTsKKwkJCQl9LAorCQkJCWZ1bmN0aW9uKCkgeworCQkJCQl0ZXN0LmZpbmlzaCgp
OworCQkJCX0KKwkJCV0pOworCQl9CisKKwkJLy8gUHJpb3JpdGl6ZSBwcmV2aW91c2x5IGZhaWxl
ZCB0ZXN0cywgZGV0ZWN0ZWQgZnJvbSBzZXNzaW9uU3RvcmFnZQorCQlwcmlvcml0eSA9IFFVbml0
LmNvbmZpZy5yZW9yZGVyICYmIGRlZmluZWQuc2Vzc2lvblN0b3JhZ2UgJiYKKwkJCQkrc2Vzc2lv
blN0b3JhZ2UuZ2V0SXRlbSggInF1bml0LXRlc3QtIiArIHRoaXMubW9kdWxlLm5hbWUgKyAiLSIg
KyB0aGlzLnRlc3ROYW1lICk7CisKKwkJcmV0dXJuIHN5bmNocm9uaXplKCBydW4sIHByaW9yaXR5
ICk7CisJfSwKKworCXB1c2g6IGZ1bmN0aW9uKCByZXN1bHQsIGFjdHVhbCwgZXhwZWN0ZWQsIG1l
c3NhZ2UsIG5lZ2F0aXZlICkgeworCQl2YXIgc291cmNlLAorCQkJZGV0YWlscyA9IHsKKwkJCQlt
b2R1bGU6IHRoaXMubW9kdWxlLm5hbWUsCisJCQkJbmFtZTogdGhpcy50ZXN0TmFtZSwKKwkJCQly
ZXN1bHQ6IHJlc3VsdCwKKwkJCQltZXNzYWdlOiBtZXNzYWdlLAorCQkJCWFjdHVhbDogYWN0dWFs
LAorCQkJCWV4cGVjdGVkOiBleHBlY3RlZCwKKwkJCQl0ZXN0SWQ6IHRoaXMudGVzdElkLAorCQkJ
CW5lZ2F0aXZlOiBuZWdhdGl2ZSB8fCBmYWxzZSwKKwkJCQlydW50aW1lOiBub3coKSAtIHRoaXMu
c3RhcnRlZAorCQkJfTsKKworCQlpZiAoICFyZXN1bHQgKSB7CisJCQlzb3VyY2UgPSBzb3VyY2VG
cm9tU3RhY2t0cmFjZSgpOworCisJCQlpZiAoIHNvdXJjZSApIHsKKwkJCQlkZXRhaWxzLnNvdXJj
ZSA9IHNvdXJjZTsKKwkJCX0KKwkJfQorCisJCXJ1bkxvZ2dpbmdDYWxsYmFja3MoICJsb2ciLCBk
ZXRhaWxzICk7CisKKwkJdGhpcy5hc3NlcnRpb25zLnB1c2goeworCQkJcmVzdWx0OiAhIXJlc3Vs
dCwKKwkJCW1lc3NhZ2U6IG1lc3NhZ2UKKwkJfSk7CisJfSwKKworCXB1c2hGYWlsdXJlOiBmdW5j
dGlvbiggbWVzc2FnZSwgc291cmNlLCBhY3R1YWwgKSB7CisJCWlmICggISggdGhpcyBpbnN0YW5j
ZW9mIFRlc3QgKSApIHsKKwkJCXRocm93IG5ldyBFcnJvciggInB1c2hGYWlsdXJlKCkgYXNzZXJ0
aW9uIG91dHNpZGUgdGVzdCBjb250ZXh0LCB3YXMgIiArCisJCQkJc291cmNlRnJvbVN0YWNrdHJh
Y2UoIDIgKSApOworCQl9CisKKwkJdmFyIGRldGFpbHMgPSB7CisJCQkJbW9kdWxlOiB0aGlzLm1v
ZHVsZS5uYW1lLAorCQkJCW5hbWU6IHRoaXMudGVzdE5hbWUsCisJCQkJcmVzdWx0OiBmYWxzZSwK
KwkJCQltZXNzYWdlOiBtZXNzYWdlIHx8ICJlcnJvciIsCisJCQkJYWN0dWFsOiBhY3R1YWwgfHwg
bnVsbCwKKwkJCQl0ZXN0SWQ6IHRoaXMudGVzdElkLAorCQkJCXJ1bnRpbWU6IG5vdygpIC0gdGhp
cy5zdGFydGVkCisJCQl9OworCisJCWlmICggc291cmNlICkgeworCQkJZGV0YWlscy5zb3VyY2Ug
PSBzb3VyY2U7CisJCX0KKworCQlydW5Mb2dnaW5nQ2FsbGJhY2tzKCAibG9nIiwgZGV0YWlscyAp
OworCisJCXRoaXMuYXNzZXJ0aW9ucy5wdXNoKHsKKwkJCXJlc3VsdDogZmFsc2UsCisJCQltZXNz
YWdlOiBtZXNzYWdlCisJCX0pOworCX0sCisKKwlyZXNvbHZlUHJvbWlzZTogZnVuY3Rpb24oIHBy
b21pc2UsIHBoYXNlICkgeworCQl2YXIgdGhlbiwgbWVzc2FnZSwKKwkJCXRlc3QgPSB0aGlzOwor
CQlpZiAoIHByb21pc2UgIT0gbnVsbCApIHsKKwkJCXRoZW4gPSBwcm9taXNlLnRoZW47CisJCQlp
ZiAoIFFVbml0Lm9iamVjdFR5cGUoIHRoZW4gKSA9PT0gImZ1bmN0aW9uIiApIHsKKwkJCQlRVW5p
dC5zdG9wKCk7CisJCQkJdGhlbi5jYWxsKAorCQkJCQlwcm9taXNlLAorCQkJCQlmdW5jdGlvbigp
IHsgUVVuaXQuc3RhcnQoKTsgfSwKKwkJCQkJZnVuY3Rpb24oIGVycm9yICkgeworCQkJCQkJbWVz
c2FnZSA9ICJQcm9taXNlIHJlamVjdGVkICIgKworCQkJCQkJCSggIXBoYXNlID8gImR1cmluZyIg
OiBwaGFzZS5yZXBsYWNlKCAvRWFjaCQvLCAiIiApICkgKworCQkJCQkJCSIgIiArIHRlc3QudGVz
dE5hbWUgKyAiOiAiICsgKCBlcnJvci5tZXNzYWdlIHx8IGVycm9yICk7CisJCQkJCQl0ZXN0LnB1
c2hGYWlsdXJlKCBtZXNzYWdlLCBleHRyYWN0U3RhY2t0cmFjZSggZXJyb3IsIDAgKSApOworCisJ
CQkJCQkvLyBlbHNlIG5leHQgdGVzdCB3aWxsIGNhcnJ5IHRoZSByZXNwb25zaWJpbGl0eQorCQkJ
CQkJc2F2ZUdsb2JhbCgpOworCisJCQkJCQkvLyBVbmJsb2NrCisJCQkJCQlRVW5pdC5zdGFydCgp
OworCQkJCQl9CisJCQkJKTsKKwkJCX0KKwkJfQorCX0sCisKKwl2YWxpZDogZnVuY3Rpb24oKSB7
CisJCXZhciBpbmNsdWRlLAorCQkJZmlsdGVyID0gY29uZmlnLmZpbHRlciAmJiBjb25maWcuZmls
dGVyLnRvTG93ZXJDYXNlKCksCisJCQltb2R1bGUgPSBRVW5pdC51cmxQYXJhbXMubW9kdWxlICYm
IFFVbml0LnVybFBhcmFtcy5tb2R1bGUudG9Mb3dlckNhc2UoKSwKKwkJCWZ1bGxOYW1lID0gKCB0
aGlzLm1vZHVsZS5uYW1lICsgIjogIiArIHRoaXMudGVzdE5hbWUgKS50b0xvd2VyQ2FzZSgpOwor
CisJCWZ1bmN0aW9uIHRlc3RJbk1vZHVsZUNoYWluKCB0ZXN0TW9kdWxlICkgeworCQkJdmFyIHRl
c3RNb2R1bGVOYW1lID0gdGVzdE1vZHVsZS5uYW1lID8gdGVzdE1vZHVsZS5uYW1lLnRvTG93ZXJD
YXNlKCkgOiBudWxsOworCQkJaWYgKCB0ZXN0TW9kdWxlTmFtZSA9PT0gbW9kdWxlICkgeworCQkJ
CXJldHVybiB0cnVlOworCQkJfSBlbHNlIGlmICggdGVzdE1vZHVsZS5wYXJlbnRNb2R1bGUgKSB7
CisJCQkJcmV0dXJuIHRlc3RJbk1vZHVsZUNoYWluKCB0ZXN0TW9kdWxlLnBhcmVudE1vZHVsZSAp
OworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBJbnRl
cm5hbGx5LWdlbmVyYXRlZCB0ZXN0cyBhcmUgYWx3YXlzIHZhbGlkCisJCWlmICggdGhpcy5jYWxs
YmFjayAmJiB0aGlzLmNhbGxiYWNrLnZhbGlkVGVzdCApIHsKKwkJCXJldHVybiB0cnVlOworCQl9
CisKKwkJaWYgKCBjb25maWcudGVzdElkLmxlbmd0aCA+IDAgJiYgaW5BcnJheSggdGhpcy50ZXN0
SWQsIGNvbmZpZy50ZXN0SWQgKSA8IDAgKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlp
ZiAoIG1vZHVsZSAmJiAhdGVzdEluTW9kdWxlQ2hhaW4oIHRoaXMubW9kdWxlICkgKSB7CisJCQly
ZXR1cm4gZmFsc2U7CisJCX0KKworCQlpZiAoICFmaWx0ZXIgKSB7CisJCQlyZXR1cm4gdHJ1ZTsK
KwkJfQorCisJCWluY2x1ZGUgPSBmaWx0ZXIuY2hhckF0KCAwICkgIT09ICIhIjsKKwkJaWYgKCAh
aW5jbHVkZSApIHsKKwkJCWZpbHRlciA9IGZpbHRlci5zbGljZSggMSApOworCQl9CisKKwkJLy8g
SWYgdGhlIGZpbHRlciBtYXRjaGVzLCB3ZSBuZWVkIHRvIGhvbm91ciBpbmNsdWRlCisJCWlmICgg
ZnVsbE5hbWUuaW5kZXhPZiggZmlsdGVyICkgIT09IC0xICkgeworCQkJcmV0dXJuIGluY2x1ZGU7
CisJCX0KKworCQkvLyBPdGhlcndpc2UsIGRvIHRoZSBvcHBvc2l0ZQorCQlyZXR1cm4gIWluY2x1
ZGU7CisJfQorfTsKKworLy8gUmVzZXRzIHRoZSB0ZXN0IHNldHVwLiBVc2VmdWwgZm9yIHRlc3Rz
IHRoYXQgbW9kaWZ5IHRoZSBET00uCisvKgorREVQUkVDQVRFRDogVXNlIG11bHRpcGxlIHRlc3Rz
IGluc3RlYWQgb2YgcmVzZXR0aW5nIGluc2lkZSBhIHRlc3QuCitVc2UgdGVzdFN0YXJ0IG9yIHRl
c3REb25lIGZvciBjdXN0b20gY2xlYW51cC4KK1RoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYW4gZXJy
b3IgaW4gMi4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDIuMQorKi8KK1FVbml0LnJlc2V0ID0g
ZnVuY3Rpb24oKSB7CisKKwkvLyBSZXR1cm4gb24gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzCisJ
Ly8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbm90IGJyZWFrIG9uIG5vZGUgdGVzdHMKKwlpZiAoICFk
ZWZpbmVkLmRvY3VtZW50ICkgeworCQlyZXR1cm47CisJfQorCisJdmFyIGZpeHR1cmUgPSBkZWZp
bmVkLmRvY3VtZW50ICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICYmCisJCQlkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCggInF1bml0LWZpeHR1cmUiICk7CisKKwlpZiAoIGZpeHR1cmUgKSB7CisJ
CWZpeHR1cmUuaW5uZXJIVE1MID0gY29uZmlnLmZpeHR1cmU7CisJfQorfTsKKworUVVuaXQucHVz
aEZhaWx1cmUgPSBmdW5jdGlvbigpIHsKKwlpZiAoICFRVW5pdC5jb25maWcuY3VycmVudCApIHsK
KwkJdGhyb3cgbmV3IEVycm9yKCAicHVzaEZhaWx1cmUoKSBhc3NlcnRpb24gb3V0c2lkZSB0ZXN0
IGNvbnRleHQsIGluICIgKworCQkJc291cmNlRnJvbVN0YWNrdHJhY2UoIDIgKSApOworCX0KKwor
CS8vIEdldHMgY3VycmVudCB0ZXN0IG9iagorCXZhciBjdXJyZW50VGVzdCA9IFFVbml0LmNvbmZp
Zy5jdXJyZW50OworCisJcmV0dXJuIGN1cnJlbnRUZXN0LnB1c2hGYWlsdXJlLmFwcGx5KCBjdXJy
ZW50VGVzdCwgYXJndW1lbnRzICk7Cit9OworCisvLyBCYXNlZCBvbiBKYXZhJ3MgU3RyaW5nLmhh
c2hDb2RlLCBhIHNpbXBsZSBidXQgbm90CisvLyByaWdvcm91c2x5IGNvbGxpc2lvbiByZXNpc3Rh
bnQgaGFzaGluZyBmdW5jdGlvbgorZnVuY3Rpb24gZ2VuZXJhdGVIYXNoKCBtb2R1bGUsIHRlc3RO
YW1lICkgeworCXZhciBoZXgsCisJCWkgPSAwLAorCQloYXNoID0gMCwKKwkJc3RyID0gbW9kdWxl
ICsgIlx4MUMiICsgdGVzdE5hbWUsCisJCWxlbiA9IHN0ci5sZW5ndGg7CisKKwlmb3IgKCA7IGkg
PCBsZW47IGkrKyApIHsKKwkJaGFzaCAgPSAoICggaGFzaCA8PCA1ICkgLSBoYXNoICkgKyBzdHIu
Y2hhckNvZGVBdCggaSApOworCQloYXNoIHw9IDA7CisJfQorCisJLy8gQ29udmVydCB0aGUgcG9z
c2libHkgbmVnYXRpdmUgaW50ZWdlciBoYXNoIGNvZGUgaW50byBhbiA4IGNoYXJhY3RlciBoZXgg
c3RyaW5nLCB3aGljaCBpc24ndAorCS8vIHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaW5jcmVhc2Vz
IHVzZXIgdW5kZXJzdGFuZGluZyB0aGF0IHRoZSBpZCBpcyBhIFNIQS1saWtlIGhhc2gKKwloZXgg
PSAoIDB4MTAwMDAwMDAwICsgaGFzaCApLnRvU3RyaW5nKCAxNiApOworCWlmICggaGV4Lmxlbmd0
aCA8IDggKSB7CisJCWhleCA9ICIwMDAwMDAwIiArIGhleDsKKwl9CisKKwlyZXR1cm4gaGV4LnNs
aWNlKCAtOCApOworfQorCitmdW5jdGlvbiBzeW5jaHJvbml6ZSggY2FsbGJhY2ssIHByaW9yaXR5
ICkgeworCXZhciBsYXN0ID0gIXByaW9yaXR5OworCisJaWYgKCBRVW5pdC5vYmplY3RUeXBlKCBj
YWxsYmFjayApID09PSAiYXJyYXkiICkgeworCQl3aGlsZSAoIGNhbGxiYWNrLmxlbmd0aCApIHsK
KwkJCXN5bmNocm9uaXplKCBjYWxsYmFjay5zaGlmdCgpICk7CisJCX0KKwkJcmV0dXJuOworCX0K
KworCWlmICggcHJpb3JpdHkgKSB7CisJCXByaW9yaXR5RmlsbCggY2FsbGJhY2sgKTsKKwl9IGVs
c2UgeworCQljb25maWcucXVldWUucHVzaCggY2FsbGJhY2sgKTsKKwl9CisKKwlpZiAoIGNvbmZp
Zy5hdXRvcnVuICYmICFjb25maWcuYmxvY2tpbmcgKSB7CisJCXByb2Nlc3MoIGxhc3QgKTsKKwl9
Cit9CisKKy8vIFBsYWNlIHByZXZpb3VzbHkgZmFpbGVkIHRlc3RzIG9uIGEgcXVldWUgcHJpb3Jp
dHkgbGluZSwgcmVzcGVjdGluZyB0aGUgb3JkZXIgdGhleSBnZXQgYXNzaWduZWQuCitmdW5jdGlv
biBwcmlvcml0eUZpbGwoIGNhbGxiYWNrICkgeworCXZhciBxdWV1ZSwgcHJpb3JpdGl6ZWRRdWV1
ZTsKKworCXF1ZXVlID0gY29uZmlnLnF1ZXVlLnNsaWNlKCBwcmlvcml0eUZpbGwucG9zICk7CisJ
cHJpb3JpdGl6ZWRRdWV1ZSA9IGNvbmZpZy5xdWV1ZS5zbGljZSggMCwgLWNvbmZpZy5xdWV1ZS5s
ZW5ndGggKyBwcmlvcml0eUZpbGwucG9zICk7CisKKwlxdWV1ZS51bnNoaWZ0KCBjYWxsYmFjayAp
OworCXF1ZXVlLnVuc2hpZnQuYXBwbHkoIHF1ZXVlLCBwcmlvcml0aXplZFF1ZXVlICk7CisKKwlj
b25maWcucXVldWUgPSBxdWV1ZTsKKworCXByaW9yaXR5RmlsbC5wb3MgKz0gMTsKK30KK3ByaW9y
aXR5RmlsbC5wb3MgPSAwOworCitmdW5jdGlvbiBzYXZlR2xvYmFsKCkgeworCWNvbmZpZy5wb2xs
dXRpb24gPSBbXTsKKworCWlmICggY29uZmlnLm5vZ2xvYmFscyApIHsKKwkJZm9yICggdmFyIGtl
eSBpbiBnbG9iYWwgKSB7CisJCQlpZiAoIGhhc093bi5jYWxsKCBnbG9iYWwsIGtleSApICkgewor
CisJCQkJLy8gaW4gT3BlcmEgc29tZXRpbWVzIERPTSBlbGVtZW50IGlkcyBzaG93IHVwIGhlcmUs
IGlnbm9yZSB0aGVtCisJCQkJaWYgKCAvXnF1bml0LXRlc3Qtb3V0cHV0Ly50ZXN0KCBrZXkgKSAp
IHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWNvbmZpZy5wb2xsdXRpb24ucHVzaCgga2V5
ICk7CisJCQl9CisJCX0KKwl9Cit9CisKK2Z1bmN0aW9uIGNoZWNrUG9sbHV0aW9uKCkgeworCXZh
ciBuZXdHbG9iYWxzLAorCQlkZWxldGVkR2xvYmFscywKKwkJb2xkID0gY29uZmlnLnBvbGx1dGlv
bjsKKworCXNhdmVHbG9iYWwoKTsKKworCW5ld0dsb2JhbHMgPSBkaWZmKCBjb25maWcucG9sbHV0
aW9uLCBvbGQgKTsKKwlpZiAoIG5ld0dsb2JhbHMubGVuZ3RoID4gMCApIHsKKwkJUVVuaXQucHVz
aEZhaWx1cmUoICJJbnRyb2R1Y2VkIGdsb2JhbCB2YXJpYWJsZShzKTogIiArIG5ld0dsb2JhbHMu
am9pbiggIiwgIiApICk7CisJfQorCisJZGVsZXRlZEdsb2JhbHMgPSBkaWZmKCBvbGQsIGNvbmZp
Zy5wb2xsdXRpb24gKTsKKwlpZiAoIGRlbGV0ZWRHbG9iYWxzLmxlbmd0aCA+IDAgKSB7CisJCVFV
bml0LnB1c2hGYWlsdXJlKCAiRGVsZXRlZCBnbG9iYWwgdmFyaWFibGUocyk6ICIgKyBkZWxldGVk
R2xvYmFscy5qb2luKCAiLCAiICkgKTsKKwl9Cit9CisKKy8vIFdpbGwgYmUgZXhwb3NlZCBhcyBR
VW5pdC5hc3luY1Rlc3QKK2Z1bmN0aW9uIGFzeW5jVGVzdCggdGVzdE5hbWUsIGV4cGVjdGVkLCBj
YWxsYmFjayApIHsKKwlpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgKSB7CisJCWNhbGxiYWNr
ID0gZXhwZWN0ZWQ7CisJCWV4cGVjdGVkID0gbnVsbDsKKwl9CisKKwlRVW5pdC50ZXN0KCB0ZXN0
TmFtZSwgZXhwZWN0ZWQsIGNhbGxiYWNrLCB0cnVlICk7Cit9CisKKy8vIFdpbGwgYmUgZXhwb3Nl
ZCBhcyBRVW5pdC50ZXN0CitmdW5jdGlvbiB0ZXN0KCB0ZXN0TmFtZSwgZXhwZWN0ZWQsIGNhbGxi
YWNrLCBhc3luYyApIHsKKwlpZiAoIGZvY3VzZWQgKSAgeyByZXR1cm47IH0KKworCXZhciBuZXdU
ZXN0OworCisJaWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAyICkgeworCQljYWxsYmFjayA9IGV4
cGVjdGVkOworCQlleHBlY3RlZCA9IG51bGw7CisJfQorCisJbmV3VGVzdCA9IG5ldyBUZXN0KHsK
KwkJdGVzdE5hbWU6IHRlc3ROYW1lLAorCQlleHBlY3RlZDogZXhwZWN0ZWQsCisJCWFzeW5jOiBh
c3luYywKKwkJY2FsbGJhY2s6IGNhbGxiYWNrCisJfSk7CisKKwluZXdUZXN0LnF1ZXVlKCk7Cit9
CisKKy8vIFdpbGwgYmUgZXhwb3NlZCBhcyBRVW5pdC5za2lwCitmdW5jdGlvbiBza2lwKCB0ZXN0
TmFtZSApIHsKKwlpZiAoIGZvY3VzZWQgKSAgeyByZXR1cm47IH0KKworCXZhciB0ZXN0ID0gbmV3
IFRlc3QoeworCQl0ZXN0TmFtZTogdGVzdE5hbWUsCisJCXNraXA6IHRydWUKKwl9KTsKKworCXRl
c3QucXVldWUoKTsKK30KKworLy8gV2lsbCBiZSBleHBvc2VkIGFzIFFVbml0Lm9ubHkKK2Z1bmN0
aW9uIG9ubHkoIHRlc3ROYW1lLCBleHBlY3RlZCwgY2FsbGJhY2ssIGFzeW5jICkgeworCXZhciBu
ZXdUZXN0OworCisJaWYgKCBmb2N1c2VkICkgIHsgcmV0dXJuOyB9CisKKwlRVW5pdC5jb25maWcu
cXVldWUubGVuZ3RoID0gMDsKKwlmb2N1c2VkID0gdHJ1ZTsKKworCWlmICggYXJndW1lbnRzLmxl
bmd0aCA9PT0gMiApIHsKKwkJY2FsbGJhY2sgPSBleHBlY3RlZDsKKwkJZXhwZWN0ZWQgPSBudWxs
OworCX0KKworCW5ld1Rlc3QgPSBuZXcgVGVzdCh7CisJCXRlc3ROYW1lOiB0ZXN0TmFtZSwKKwkJ
ZXhwZWN0ZWQ6IGV4cGVjdGVkLAorCQlhc3luYzogYXN5bmMsCisJCWNhbGxiYWNrOiBjYWxsYmFj
aworCX0pOworCisJbmV3VGVzdC5xdWV1ZSgpOworfQorCitmdW5jdGlvbiBBc3NlcnQoIHRlc3RD
b250ZXh0ICkgeworCXRoaXMudGVzdCA9IHRlc3RDb250ZXh0OworfQorCisvLyBBc3NlcnQgaGVs
cGVycworUVVuaXQuYXNzZXJ0ID0gQXNzZXJ0LnByb3RvdHlwZSA9IHsKKworCS8vIFNwZWNpZnkg
dGhlIG51bWJlciBvZiBleHBlY3RlZCBhc3NlcnRpb25zIHRvIGd1YXJhbnRlZSB0aGF0IGZhaWxl
ZCB0ZXN0CisJLy8gKG5vIGFzc2VydGlvbnMgYXJlIHJ1biBhdCBhbGwpIGRvbid0IHNsaXAgdGhy
b3VnaC4KKwlleHBlY3Q6IGZ1bmN0aW9uKCBhc3NlcnRzICkgeworCQlpZiAoIGFyZ3VtZW50cy5s
ZW5ndGggPT09IDEgKSB7CisJCQl0aGlzLnRlc3QuZXhwZWN0ZWQgPSBhc3NlcnRzOworCQl9IGVs
c2UgeworCQkJcmV0dXJuIHRoaXMudGVzdC5leHBlY3RlZDsKKwkJfQorCX0sCisKKwkvLyBJbmNy
ZW1lbnQgdGhpcyBUZXN0J3Mgc2VtYXBob3JlIGNvdW50ZXIsIHRoZW4gcmV0dXJuIGEgZnVuY3Rp
b24gdGhhdAorCS8vIGRlY3JlbWVudHMgdGhhdCBjb3VudGVyIGEgbWF4aW11bSBvZiBvbmNlLgor
CWFzeW5jOiBmdW5jdGlvbiggY291bnQgKSB7CisJCXZhciB0ZXN0ID0gdGhpcy50ZXN0LAorCQkJ
cG9wcGVkID0gZmFsc2UsCisJCQlhY2NlcHRDYWxsQ291bnQgPSBjb3VudDsKKworCQlpZiAoIHR5
cGVvZiBhY2NlcHRDYWxsQ291bnQgPT09ICJ1bmRlZmluZWQiICkgeworCQkJYWNjZXB0Q2FsbENv
dW50ID0gMTsKKwkJfQorCisJCXRlc3Quc2VtYXBob3JlICs9IDE7CisJCXRlc3QudXNlZEFzeW5j
ID0gdHJ1ZTsKKwkJcGF1c2VQcm9jZXNzaW5nKCk7CisKKwkJcmV0dXJuIGZ1bmN0aW9uIGRvbmUo
KSB7CisKKwkJCWlmICggcG9wcGVkICkgeworCQkJCXRlc3QucHVzaEZhaWx1cmUoICJUb28gbWFu
eSBjYWxscyB0byB0aGUgYGFzc2VydC5hc3luY2AgY2FsbGJhY2siLAorCQkJCQlzb3VyY2VGcm9t
U3RhY2t0cmFjZSggMiApICk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYWNjZXB0Q2FsbENvdW50
IC09IDE7CisJCQlpZiAoIGFjY2VwdENhbGxDb3VudCA+IDAgKSB7CisJCQkJcmV0dXJuOworCQkJ
fQorCisJCQl0ZXN0LnNlbWFwaG9yZSAtPSAxOworCQkJcG9wcGVkID0gdHJ1ZTsKKwkJCXJlc3Vt
ZVByb2Nlc3NpbmcoKTsKKwkJfTsKKwl9LAorCisJLy8gRXhwb3J0cyB0ZXN0LnB1c2goKSB0byB0
aGUgdXNlciBBUEkKKwlwdXNoOiBmdW5jdGlvbiggLyogcmVzdWx0LCBhY3R1YWwsIGV4cGVjdGVk
LCBtZXNzYWdlLCBuZWdhdGl2ZSAqLyApIHsKKwkJdmFyIGFzc2VydCA9IHRoaXMsCisJCQljdXJy
ZW50VGVzdCA9ICggYXNzZXJ0IGluc3RhbmNlb2YgQXNzZXJ0ICYmIGFzc2VydC50ZXN0ICkgfHwg
UVVuaXQuY29uZmlnLmN1cnJlbnQ7CisKKwkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZml4
LgorCQkvLyBBbGxvd3MgdGhlIGRpcmVjdCB1c2Ugb2YgZ2xvYmFsIGV4cG9ydGVkIGFzc2VydGlv
bnMgYW5kIFFVbml0LmFzc2VydC4qCisJCS8vIEFsdGhvdWdoLCBpdCdzIHVzZSBpcyBub3QgcmVj
b21tZW5kZWQgYXMgaXQgY2FuIGxlYWsgYXNzZXJ0aW9ucworCQkvLyB0byBvdGhlciB0ZXN0cyBm
cm9tIGFzeW5jIHRlc3RzLCBiZWNhdXNlIHdlIG9ubHkgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBj
dXJyZW50IHRlc3QsCisJCS8vIG5vdCBleGFjdGx5IHRoZSB0ZXN0IHdoZXJlIGFzc2VydGlvbiB3
ZXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZC4KKwkJaWYgKCAhY3VycmVudFRlc3QgKSB7CisJCQl0
aHJvdyBuZXcgRXJyb3IoICJhc3NlcnRpb24gb3V0c2lkZSB0ZXN0IGNvbnRleHQsIGluICIgKyBz
b3VyY2VGcm9tU3RhY2t0cmFjZSggMiApICk7CisJCX0KKworCQlpZiAoIGN1cnJlbnRUZXN0LnVz
ZWRBc3luYyA9PT0gdHJ1ZSAmJiBjdXJyZW50VGVzdC5zZW1hcGhvcmUgPT09IDAgKSB7CisJCQlj
dXJyZW50VGVzdC5wdXNoRmFpbHVyZSggIkFzc2VydGlvbiBhZnRlciB0aGUgZmluYWwgYGFzc2Vy
dC5hc3luY2Agd2FzIHJlc29sdmVkIiwKKwkJCQlzb3VyY2VGcm9tU3RhY2t0cmFjZSggMiApICk7
CisKKwkJCS8vIEFsbG93IHRoaXMgYXNzZXJ0aW9uIHRvIGNvbnRpbnVlIHJ1bm5pbmcgYW55d2F5
Li4uCisJCX0KKworCQlpZiAoICEoIGFzc2VydCBpbnN0YW5jZW9mIEFzc2VydCApICkgeworCQkJ
YXNzZXJ0ID0gY3VycmVudFRlc3QuYXNzZXJ0OworCQl9CisJCXJldHVybiBhc3NlcnQudGVzdC5w
dXNoLmFwcGx5KCBhc3NlcnQudGVzdCwgYXJndW1lbnRzICk7CisJfSwKKworCW9rOiBmdW5jdGlv
biggcmVzdWx0LCBtZXNzYWdlICkgeworCQltZXNzYWdlID0gbWVzc2FnZSB8fCAoIHJlc3VsdCA/
ICJva2F5IiA6ICJmYWlsZWQsIGV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIHRydXRoeSwgd2FzOiAi
ICsKKwkJCVFVbml0LmR1bXAucGFyc2UoIHJlc3VsdCApICk7CisJCXRoaXMucHVzaCggISFyZXN1
bHQsIHJlc3VsdCwgdHJ1ZSwgbWVzc2FnZSApOworCX0sCisKKwlub3RPazogZnVuY3Rpb24oIHJl
c3VsdCwgbWVzc2FnZSApIHsKKwkJbWVzc2FnZSA9IG1lc3NhZ2UgfHwgKCAhcmVzdWx0ID8gIm9r
YXkiIDogImZhaWxlZCwgZXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgZmFsc3ksIHdhczogIiArCisJ
CQlRVW5pdC5kdW1wLnBhcnNlKCByZXN1bHQgKSApOworCQl0aGlzLnB1c2goICFyZXN1bHQsIHJl
c3VsdCwgZmFsc2UsIG1lc3NhZ2UsIHRydWUgKTsKKwl9LAorCisJZXF1YWw6IGZ1bmN0aW9uKCBh
Y3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlICkgeworCQkvKmpzaGludCBlcWVxZXE6ZmFsc2UgKi8K
KwkJdGhpcy5wdXNoKCBleHBlY3RlZCA9PSBhY3R1YWwsIGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3Nh
Z2UgKTsKKwl9LAorCisJbm90RXF1YWw6IGZ1bmN0aW9uKCBhY3R1YWwsIGV4cGVjdGVkLCBtZXNz
YWdlICkgeworCQkvKmpzaGludCBlcWVxZXE6ZmFsc2UgKi8KKwkJdGhpcy5wdXNoKCBleHBlY3Rl
ZCAhPSBhY3R1YWwsIGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIHRydWUgKTsKKwl9LAorCisJ
cHJvcEVxdWFsOiBmdW5jdGlvbiggYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSApIHsKKwkJYWN0
dWFsID0gb2JqZWN0VmFsdWVzKCBhY3R1YWwgKTsKKwkJZXhwZWN0ZWQgPSBvYmplY3RWYWx1ZXMo
IGV4cGVjdGVkICk7CisJCXRoaXMucHVzaCggUVVuaXQuZXF1aXYoIGFjdHVhbCwgZXhwZWN0ZWQg
KSwgYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSApOworCX0sCisKKwlub3RQcm9wRXF1YWw6IGZ1
bmN0aW9uKCBhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlICkgeworCQlhY3R1YWwgPSBvYmplY3RW
YWx1ZXMoIGFjdHVhbCApOworCQlleHBlY3RlZCA9IG9iamVjdFZhbHVlcyggZXhwZWN0ZWQgKTsK
KwkJdGhpcy5wdXNoKCAhUVVuaXQuZXF1aXYoIGFjdHVhbCwgZXhwZWN0ZWQgKSwgYWN0dWFsLCBl
eHBlY3RlZCwgbWVzc2FnZSwgdHJ1ZSApOworCX0sCisKKwlkZWVwRXF1YWw6IGZ1bmN0aW9uKCBh
Y3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlICkgeworCQl0aGlzLnB1c2goIFFVbml0LmVxdWl2KCBh
Y3R1YWwsIGV4cGVjdGVkICksIGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UgKTsKKwl9LAorCisJ
bm90RGVlcEVxdWFsOiBmdW5jdGlvbiggYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSApIHsKKwkJ
dGhpcy5wdXNoKCAhUVVuaXQuZXF1aXYoIGFjdHVhbCwgZXhwZWN0ZWQgKSwgYWN0dWFsLCBleHBl
Y3RlZCwgbWVzc2FnZSwgdHJ1ZSApOworCX0sCisKKwlzdHJpY3RFcXVhbDogZnVuY3Rpb24oIGFj
dHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UgKSB7CisJCXRoaXMucHVzaCggZXhwZWN0ZWQgPT09IGFj
dHVhbCwgYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSApOworCX0sCisKKwlub3RTdHJpY3RFcXVh
bDogZnVuY3Rpb24oIGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UgKSB7CisJCXRoaXMucHVzaCgg
ZXhwZWN0ZWQgIT09IGFjdHVhbCwgYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgdHJ1ZSApOwor
CX0sCisKKwkidGhyb3dzIjogZnVuY3Rpb24oIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSApIHsK
KwkJdmFyIGFjdHVhbCwgZXhwZWN0ZWRUeXBlLAorCQkJZXhwZWN0ZWRPdXRwdXQgPSBleHBlY3Rl
ZCwKKwkJCW9rID0gZmFsc2UsCisJCQljdXJyZW50VGVzdCA9ICggdGhpcyBpbnN0YW5jZW9mIEFz
c2VydCAmJiB0aGlzLnRlc3QgKSB8fCBRVW5pdC5jb25maWcuY3VycmVudDsKKworCQkvLyAnZXhw
ZWN0ZWQnIGlzIG9wdGlvbmFsIHVubGVzcyBkb2luZyBzdHJpbmcgY29tcGFyaXNvbgorCQlpZiAo
IG1lc3NhZ2UgPT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0ZWQgPT09ICJzdHJpbmciICkgeworCQkJ
bWVzc2FnZSA9IGV4cGVjdGVkOworCQkJZXhwZWN0ZWQgPSBudWxsOworCQl9CisKKwkJY3VycmVu
dFRlc3QuaWdub3JlR2xvYmFsRXJyb3JzID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWJsb2NrLmNhbGwo
IGN1cnJlbnRUZXN0LnRlc3RFbnZpcm9ubWVudCApOworCQl9IGNhdGNoIChlKSB7CisJCQlhY3R1
YWwgPSBlOworCQl9CisJCWN1cnJlbnRUZXN0Lmlnbm9yZUdsb2JhbEVycm9ycyA9IGZhbHNlOwor
CisJCWlmICggYWN0dWFsICkgeworCQkJZXhwZWN0ZWRUeXBlID0gUVVuaXQub2JqZWN0VHlwZSgg
ZXhwZWN0ZWQgKTsKKworCQkJLy8gd2UgZG9uJ3Qgd2FudCB0byB2YWxpZGF0ZSB0aHJvd24gZXJy
b3IKKwkJCWlmICggIWV4cGVjdGVkICkgeworCQkJCW9rID0gdHJ1ZTsKKwkJCQlleHBlY3RlZE91
dHB1dCA9IG51bGw7CisKKwkJCS8vIGV4cGVjdGVkIGlzIGEgcmVnZXhwCisJCQl9IGVsc2UgaWYg
KCBleHBlY3RlZFR5cGUgPT09ICJyZWdleHAiICkgeworCQkJCW9rID0gZXhwZWN0ZWQudGVzdCgg
ZXJyb3JTdHJpbmcoIGFjdHVhbCApICk7CisKKwkJCS8vIGV4cGVjdGVkIGlzIGEgc3RyaW5nCisJ
CQl9IGVsc2UgaWYgKCBleHBlY3RlZFR5cGUgPT09ICJzdHJpbmciICkgeworCQkJCW9rID0gZXhw
ZWN0ZWQgPT09IGVycm9yU3RyaW5nKCBhY3R1YWwgKTsKKworCQkJLy8gZXhwZWN0ZWQgaXMgYSBj
b25zdHJ1Y3RvciwgbWF5YmUgYW4gRXJyb3IgY29uc3RydWN0b3IKKwkJCX0gZWxzZSBpZiAoIGV4
cGVjdGVkVHlwZSA9PT0gImZ1bmN0aW9uIiAmJiBhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCAp
IHsKKwkJCQlvayA9IHRydWU7CisKKwkJCS8vIGV4cGVjdGVkIGlzIGFuIEVycm9yIG9iamVjdAor
CQkJfSBlbHNlIGlmICggZXhwZWN0ZWRUeXBlID09PSAib2JqZWN0IiApIHsKKwkJCQlvayA9IGFj
dHVhbCBpbnN0YW5jZW9mIGV4cGVjdGVkLmNvbnN0cnVjdG9yICYmCisJCQkJCWFjdHVhbC5uYW1l
ID09PSBleHBlY3RlZC5uYW1lICYmCisJCQkJCWFjdHVhbC5tZXNzYWdlID09PSBleHBlY3RlZC5t
ZXNzYWdlOworCisJCQkvLyBleHBlY3RlZCBpcyBhIHZhbGlkYXRpb24gZnVuY3Rpb24gd2hpY2gg
cmV0dXJucyB0cnVlIGlmIHZhbGlkYXRpb24gcGFzc2VkCisJCQl9IGVsc2UgaWYgKCBleHBlY3Rl
ZFR5cGUgPT09ICJmdW5jdGlvbiIgJiYgZXhwZWN0ZWQuY2FsbCgge30sIGFjdHVhbCApID09PSB0
cnVlICkgeworCQkJCWV4cGVjdGVkT3V0cHV0ID0gbnVsbDsKKwkJCQlvayA9IHRydWU7CisJCQl9
CisJCX0KKworCQljdXJyZW50VGVzdC5hc3NlcnQucHVzaCggb2ssIGFjdHVhbCwgZXhwZWN0ZWRP
dXRwdXQsIG1lc3NhZ2UgKTsKKwl9Cit9OworCisvLyBQcm92aWRlIGFuIGFsdGVybmF0aXZlIHRv
IGFzc2VydC50aHJvd3MoKSwgZm9yIGVudmlyb25tZW50cyB0aGF0IGNvbnNpZGVyIHRocm93cyBh
IHJlc2VydmVkIHdvcmQKKy8vIEtub3duIHRvIHVzIGFyZTogQ2xvc3VyZSBDb21waWxlciwgTmFy
d2hhbAorKGZ1bmN0aW9uKCkgeworCS8qanNoaW50IHN1Yjp0cnVlICovCisJQXNzZXJ0LnByb3Rv
dHlwZS5yYWlzZXMgPSBBc3NlcnQucHJvdG90eXBlWyAidGhyb3dzIiBdOworfSgpKTsKKworZnVu
Y3Rpb24gZXJyb3JTdHJpbmcoIGVycm9yICkgeworCXZhciBuYW1lLCBtZXNzYWdlLAorCQlyZXN1
bHRFcnJvclN0cmluZyA9IGVycm9yLnRvU3RyaW5nKCk7CisJaWYgKCByZXN1bHRFcnJvclN0cmlu
Zy5zdWJzdHJpbmcoIDAsIDcgKSA9PT0gIltvYmplY3QiICkgeworCQluYW1lID0gZXJyb3IubmFt
ZSA/IGVycm9yLm5hbWUudG9TdHJpbmcoKSA6ICJFcnJvciI7CisJCW1lc3NhZ2UgPSBlcnJvci5t
ZXNzYWdlID8gZXJyb3IubWVzc2FnZS50b1N0cmluZygpIDogIiI7CisJCWlmICggbmFtZSAmJiBt
ZXNzYWdlICkgeworCQkJcmV0dXJuIG5hbWUgKyAiOiAiICsgbWVzc2FnZTsKKwkJfSBlbHNlIGlm
ICggbmFtZSApIHsKKwkJCXJldHVybiBuYW1lOworCQl9IGVsc2UgaWYgKCBtZXNzYWdlICkgewor
CQkJcmV0dXJuIG1lc3NhZ2U7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gIkVycm9yIjsKKwkJfQor
CX0gZWxzZSB7CisJCXJldHVybiByZXN1bHRFcnJvclN0cmluZzsKKwl9Cit9CisKKy8vIFRlc3Qg
Zm9yIGVxdWFsaXR5IGFueSBKYXZhU2NyaXB0IHR5cGUuCisvLyBBdXRob3I6IFBoaWxpcHBlIFJh
dGjDqSA8cHJhdGhlQGdtYWlsLmNvbT4KK1FVbml0LmVxdWl2ID0gKGZ1bmN0aW9uKCkgeworCisJ
Ly8gU3RhY2sgdG8gZGVjaWRlIGJldHdlZW4gc2tpcC9hYm9ydCBmdW5jdGlvbnMKKwl2YXIgY2Fs
bGVycyA9IFtdOworCisJLy8gU3RhY2sgdG8gYXZvaWRpbmcgbG9vcHMgZnJvbSBjaXJjdWxhciBy
ZWZlcmVuY2luZworCXZhciBwYXJlbnRzID0gW107CisJdmFyIHBhcmVudHNCID0gW107CisKKwlm
dW5jdGlvbiB1c2VTdHJpY3RFcXVhbGl0eSggYiwgYSApIHsKKworCQkvKmpzaGludCBlcWVxZXE6
ZmFsc2UgKi8KKwkJaWYgKCBiIGluc3RhbmNlb2YgYS5jb25zdHJ1Y3RvciB8fCBhIGluc3RhbmNl
b2YgYi5jb25zdHJ1Y3RvciApIHsKKworCQkJLy8gVG8gY2F0Y2ggc2hvcnQgYW5ub3RhdGlvbiBW
UyAnbmV3JyBhbm5vdGF0aW9uIG9mIGEgZGVjbGFyYXRpb24uIGUuZy46CisJCQkvLyBgdmFyIGkg
PSAxO2AKKwkJCS8vIGB2YXIgaiA9IG5ldyBOdW1iZXIoMSk7YAorCQkJcmV0dXJuIGEgPT0gYjsK
KwkJfSBlbHNlIHsKKwkJCXJldHVybiBhID09PSBiOworCQl9CisJfQorCisJZnVuY3Rpb24gY29t
cGFyZUNvbnN0cnVjdG9ycyggYSwgYiApIHsKKwkJdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFBy
b3RvdHlwZU9mIHx8IGZ1bmN0aW9uKCBvYmogKSB7CisKKwkJCS8qanNoaW50IHByb3RvOiB0cnVl
ICovCisJCQlyZXR1cm4gb2JqLl9fcHJvdG9fXzsKKwkJfTsKKwkJdmFyIHByb3RvQSA9IGdldFBy
b3RvKCBhICk7CisJCXZhciBwcm90b0IgPSBnZXRQcm90byggYiApOworCisJCS8vIENvbXBhcmlu
ZyBjb25zdHJ1Y3RvcnMgaXMgbW9yZSBzdHJpY3QgdGhhbiB1c2luZyBgaW5zdGFuY2VvZmAKKwkJ
aWYgKCBhLmNvbnN0cnVjdG9yID09PSBiLmNvbnN0cnVjdG9yICkgeworCQkJcmV0dXJuIHRydWU7
CisJCX0KKworCQkvLyBSZWYgIzg1MQorCQkvLyBJZiB0aGUgb2JqIHByb3RvdHlwZSBkZXNjZW5k
cyBmcm9tIGEgbnVsbCBjb25zdHJ1Y3RvciwgdHJlYXQgaXQKKwkJLy8gYXMgYSBudWxsIHByb3Rv
dHlwZS4KKwkJaWYgKCBwcm90b0EgJiYgcHJvdG9BLmNvbnN0cnVjdG9yID09PSBudWxsICkgewor
CQkJcHJvdG9BID0gbnVsbDsKKwkJfQorCQlpZiAoIHByb3RvQiAmJiBwcm90b0IuY29uc3RydWN0
b3IgPT09IG51bGwgKSB7CisJCQlwcm90b0IgPSBudWxsOworCQl9CisKKwkJLy8gQWxsb3cgb2Jq
ZWN0cyB3aXRoIG5vIHByb3RvdHlwZSB0byBiZSBlcXVpdmFsZW50IHRvCisJCS8vIG9iamVjdHMg
d2l0aCBPYmplY3QgYXMgdGhlaXIgY29uc3RydWN0b3IuCisJCWlmICggKCBwcm90b0EgPT09IG51
bGwgJiYgcHJvdG9CID09PSBPYmplY3QucHJvdG90eXBlICkgfHwKKwkJCQkoIHByb3RvQiA9PT0g
bnVsbCAmJiBwcm90b0EgPT09IE9iamVjdC5wcm90b3R5cGUgKSApIHsKKwkJCXJldHVybiB0cnVl
OworCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXZhciBjYWxsYmFja3MgPSB7CisJCSJz
dHJpbmciOiB1c2VTdHJpY3RFcXVhbGl0eSwKKwkJImJvb2xlYW4iOiB1c2VTdHJpY3RFcXVhbGl0
eSwKKwkJIm51bWJlciI6IHVzZVN0cmljdEVxdWFsaXR5LAorCQkibnVsbCI6IHVzZVN0cmljdEVx
dWFsaXR5LAorCQkidW5kZWZpbmVkIjogdXNlU3RyaWN0RXF1YWxpdHksCisJCSJzeW1ib2wiOiB1
c2VTdHJpY3RFcXVhbGl0eSwKKworCQkibmFuIjogZnVuY3Rpb24oIGIgKSB7CisJCQlyZXR1cm4g
aXNOYU4oIGIgKTsKKwkJfSwKKworCQkiZGF0ZSI6IGZ1bmN0aW9uKCBiLCBhICkgeworCQkJcmV0
dXJuIFFVbml0Lm9iamVjdFR5cGUoIGIgKSA9PT0gImRhdGUiICYmIGEudmFsdWVPZigpID09PSBi
LnZhbHVlT2YoKTsKKwkJfSwKKworCQkicmVnZXhwIjogZnVuY3Rpb24oIGIsIGEgKSB7CisJCQly
ZXR1cm4gUVVuaXQub2JqZWN0VHlwZSggYiApID09PSAicmVnZXhwIiAmJgorCisJCQkJLy8gVGhl
IHJlZ2V4IGl0c2VsZgorCQkJCWEuc291cmNlID09PSBiLnNvdXJjZSAmJgorCisJCQkJLy8gQW5k
IGl0cyBtb2RpZmllcnMKKwkJCQlhLmdsb2JhbCA9PT0gYi5nbG9iYWwgJiYKKworCQkJCS8vIChn
bWkpIC4uLgorCQkJCWEuaWdub3JlQ2FzZSA9PT0gYi5pZ25vcmVDYXNlICYmCisJCQkJYS5tdWx0
aWxpbmUgPT09IGIubXVsdGlsaW5lICYmCisJCQkJYS5zdGlja3kgPT09IGIuc3RpY2t5OworCQl9
LAorCisJCS8vIC0gc2tpcCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBhIG1ldGhvZCBvZiBhbiBpbnN0
YW5jZSAoT09QKQorCQkvLyAtIGFib3J0IG90aGVyd2lzZSwKKwkJLy8gaW5pdGlhbCA9PT0gd291
bGQgaGF2ZSBjYXRjaCBpZGVudGljYWwgcmVmZXJlbmNlcyBhbnl3YXkKKwkJImZ1bmN0aW9uIjog
ZnVuY3Rpb24oKSB7CisJCQl2YXIgY2FsbGVyID0gY2FsbGVyc1sgY2FsbGVycy5sZW5ndGggLSAx
IF07CisJCQlyZXR1cm4gY2FsbGVyICE9PSBPYmplY3QgJiYgdHlwZW9mIGNhbGxlciAhPT0gInVu
ZGVmaW5lZCI7CisJCX0sCisKKwkJImFycmF5IjogZnVuY3Rpb24oIGIsIGEgKSB7CisJCQl2YXIg
aSwgaiwgbGVuLCBsb29wLCBhQ2lyY3VsYXIsIGJDaXJjdWxhcjsKKworCQkJLy8gYiBjb3VsZCBi
ZSBhbiBvYmplY3QgbGl0ZXJhbCBoZXJlCisJCQlpZiAoIFFVbml0Lm9iamVjdFR5cGUoIGIgKSAh
PT0gImFycmF5IiApIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCWxlbiA9IGEubGVu
Z3RoOworCQkJaWYgKCBsZW4gIT09IGIubGVuZ3RoICkgeworCQkJCS8vIHNhZmUgYW5kIGZhc3Rl
cgorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJLy8gVHJhY2sgcmVmZXJlbmNlIHRvIGF2
b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMKKwkJCXBhcmVudHMucHVzaCggYSApOworCQkJcGFyZW50
c0IucHVzaCggYiApOworCQkJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKwkJCQlsb29w
ID0gZmFsc2U7CisJCQkJZm9yICggaiA9IDA7IGogPCBwYXJlbnRzLmxlbmd0aDsgaisrICkgewor
CQkJCQlhQ2lyY3VsYXIgPSBwYXJlbnRzWyBqIF0gPT09IGFbIGkgXTsKKwkJCQkJYkNpcmN1bGFy
ID0gcGFyZW50c0JbIGogXSA9PT0gYlsgaSBdOworCQkJCQlpZiAoIGFDaXJjdWxhciB8fCBiQ2ly
Y3VsYXIgKSB7CisJCQkJCQlpZiAoIGFbIGkgXSA9PT0gYlsgaSBdIHx8IGFDaXJjdWxhciAmJiBi
Q2lyY3VsYXIgKSB7CisJCQkJCQkJbG9vcCA9IHRydWU7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJ
CXBhcmVudHMucG9wKCk7CisJCQkJCQkJcGFyZW50c0IucG9wKCk7CisJCQkJCQkJcmV0dXJuIGZh
bHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWlmICggIWxvb3AgJiYgIWlubmVyRXF1
aXYoIGFbIGkgXSwgYlsgaSBdICkgKSB7CisJCQkJCXBhcmVudHMucG9wKCk7CisJCQkJCXBhcmVu
dHNCLnBvcCgpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJcGFyZW50cy5w
b3AoKTsKKwkJCXBhcmVudHNCLnBvcCgpOworCQkJcmV0dXJuIHRydWU7CisJCX0sCisKKwkJInNl
dCI6IGZ1bmN0aW9uKCBiLCBhICkgeworCQkJdmFyIGFBcnJheSwgYkFycmF5OworCisJCQkvLyBg
YmAgY291bGQgYmUgYW55IG9iamVjdCBoZXJlCisJCQlpZiAoIFFVbml0Lm9iamVjdFR5cGUoIGIg
KSAhPT0gInNldCIgKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlhQXJyYXkgPSBb
XTsKKwkJCWEuZm9yRWFjaCggZnVuY3Rpb24oIHYgKSB7CisJCQkJYUFycmF5LnB1c2goIHYgKTsK
KwkJCX0pOworCQkJYkFycmF5ID0gW107CisJCQliLmZvckVhY2goIGZ1bmN0aW9uKCB2ICkgewor
CQkJCWJBcnJheS5wdXNoKCB2ICk7CisJCQl9KTsKKworCQkJcmV0dXJuIGlubmVyRXF1aXYoIGJB
cnJheSwgYUFycmF5ICk7CisJCX0sCisKKwkJIm1hcCI6IGZ1bmN0aW9uKCBiLCBhICkgeworCQkJ
dmFyIGFBcnJheSwgYkFycmF5OworCisJCQkvLyBgYmAgY291bGQgYmUgYW55IG9iamVjdCBoZXJl
CisJCQlpZiAoIFFVbml0Lm9iamVjdFR5cGUoIGIgKSAhPT0gIm1hcCIgKSB7CisJCQkJcmV0dXJu
IGZhbHNlOworCQkJfQorCisJCQlhQXJyYXkgPSBbXTsKKwkJCWEuZm9yRWFjaCggZnVuY3Rpb24o
IHYsIGsgKSB7CisJCQkJYUFycmF5LnB1c2goIFsgaywgdiBdICk7CisJCQl9KTsKKwkJCWJBcnJh
eSA9IFtdOworCQkJYi5mb3JFYWNoKCBmdW5jdGlvbiggdiwgayApIHsKKwkJCQliQXJyYXkucHVz
aCggWyBrLCB2IF0gKTsKKwkJCX0pOworCisJCQlyZXR1cm4gaW5uZXJFcXVpdiggYkFycmF5LCBh
QXJyYXkgKTsKKwkJfSwKKworCQkib2JqZWN0IjogZnVuY3Rpb24oIGIsIGEgKSB7CisJCQl2YXIg
aSwgaiwgbG9vcCwgYUNpcmN1bGFyLCBiQ2lyY3VsYXI7CisKKwkJCS8vIERlZmF1bHQgdG8gdHJ1
ZQorCQkJdmFyIGVxID0gdHJ1ZTsKKwkJCXZhciBhUHJvcGVydGllcyA9IFtdOworCQkJdmFyIGJQ
cm9wZXJ0aWVzID0gW107CisKKwkJCWlmICggY29tcGFyZUNvbnN0cnVjdG9ycyggYSwgYiApID09
PSBmYWxzZSApIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCS8vIFN0YWNrIGNvbnN0
cnVjdG9yIGJlZm9yZSB0cmF2ZXJzaW5nIHByb3BlcnRpZXMKKwkJCWNhbGxlcnMucHVzaCggYS5j
b25zdHJ1Y3RvciApOworCisJCQkvLyBUcmFjayByZWZlcmVuY2UgdG8gYXZvaWQgY2lyY3VsYXIg
cmVmZXJlbmNlcworCQkJcGFyZW50cy5wdXNoKCBhICk7CisJCQlwYXJlbnRzQi5wdXNoKCBiICk7
CisKKwkJCS8vIEJlIHN0cmljdDogZG9uJ3QgZW5zdXJlIGhhc093blByb3BlcnR5IGFuZCBnbyBk
ZWVwCisJCQlmb3IgKCBpIGluIGEgKSB7CisJCQkJbG9vcCA9IGZhbHNlOworCQkJCWZvciAoIGog
PSAwOyBqIDwgcGFyZW50cy5sZW5ndGg7IGorKyApIHsKKwkJCQkJYUNpcmN1bGFyID0gcGFyZW50
c1sgaiBdID09PSBhWyBpIF07CisJCQkJCWJDaXJjdWxhciA9IHBhcmVudHNCWyBqIF0gPT09IGJb
IGkgXTsKKwkJCQkJaWYgKCBhQ2lyY3VsYXIgfHwgYkNpcmN1bGFyICkgeworCQkJCQkJaWYgKCBh
WyBpIF0gPT09IGJbIGkgXSB8fCBhQ2lyY3VsYXIgJiYgYkNpcmN1bGFyICkgeworCQkJCQkJCWxv
b3AgPSB0cnVlOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQllcSA9IGZhbHNlOworCQkJCQkJCWJy
ZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWFQcm9wZXJ0aWVzLnB1c2goIGkgKTsK
KwkJCQlpZiAoICFsb29wICYmICFpbm5lckVxdWl2KCBhWyBpIF0sIGJbIGkgXSApICkgeworCQkJ
CQllcSA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCXBhcmVudHMucG9w
KCk7CisJCQlwYXJlbnRzQi5wb3AoKTsKKworCQkJLy8gVW5zdGFjaywgd2UgYXJlIGRvbmUKKwkJ
CWNhbGxlcnMucG9wKCk7CisKKwkJCWZvciAoIGkgaW4gYiApIHsKKworCQkJCS8vIENvbGxlY3Qg
YidzIHByb3BlcnRpZXMKKwkJCQliUHJvcGVydGllcy5wdXNoKCBpICk7CisJCQl9CisKKwkJCS8v
IEVuc3VyZXMgaWRlbnRpY2FsIHByb3BlcnRpZXMgbmFtZQorCQkJcmV0dXJuIGVxICYmIGlubmVy
RXF1aXYoIGFQcm9wZXJ0aWVzLnNvcnQoKSwgYlByb3BlcnRpZXMuc29ydCgpICk7CisJCX0KKwl9
OworCisJZnVuY3Rpb24gdHlwZUVxdWl2KCBhLCBiICkgeworCQl2YXIgcHJvcCA9IFFVbml0Lm9i
amVjdFR5cGUoIGEgKTsKKwkJcmV0dXJuIGNhbGxiYWNrc1sgcHJvcCBdKCBiLCBhICk7CisJfQor
CisJLy8gVGhlIHJlYWwgZXF1aXYgZnVuY3Rpb24KKwlmdW5jdGlvbiBpbm5lckVxdWl2KCkgewor
CQl2YXIgYXJncyA9IFtdLnNsaWNlLmFwcGx5KCBhcmd1bWVudHMgKTsKKwkJaWYgKCBhcmdzLmxl
bmd0aCA8IDIgKSB7CisKKwkJCS8vIEVuZCB0cmFuc2l0aW9uCisJCQlyZXR1cm4gdHJ1ZTsKKwkJ
fQorCisJCXJldHVybiAoIChmdW5jdGlvbiggYSwgYiApIHsKKwkJCWlmICggYSA9PT0gYiApIHsK
KworCQkJCS8vIENhdGNoIHRoZSBtb3N0IHlvdSBjYW4KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0g
ZWxzZSBpZiAoIGEgPT09IG51bGwgfHwgYiA9PT0gbnVsbCB8fCB0eXBlb2YgYSA9PT0gInVuZGVm
aW5lZCIgfHwKKwkJCQkJdHlwZW9mIGIgPT09ICJ1bmRlZmluZWQiIHx8CisJCQkJCVFVbml0Lm9i
amVjdFR5cGUoIGEgKSAhPT0gUVVuaXQub2JqZWN0VHlwZSggYiApICkgeworCisJCQkJLy8gRG9u
J3QgbG9zZSB0aW1lIHdpdGggZXJyb3IgcHJvbmUgY2FzZXMKKwkJCQlyZXR1cm4gZmFsc2U7CisJ
CQl9IGVsc2UgeworCQkJCXJldHVybiB0eXBlRXF1aXYoIGEsIGIgKTsKKwkJCX0KKworCQkvLyBB
cHBseSB0cmFuc2l0aW9uIHdpdGggKDEuLm4pIGFyZ3VtZW50cworCQl9KCBhcmdzWyAwIF0sIGFy
Z3NbIDEgXSApICkgJiYKKwkJCWlubmVyRXF1aXYuYXBwbHkoIHRoaXMsIGFyZ3Muc3BsaWNlKCAx
LCBhcmdzLmxlbmd0aCAtIDEgKSApICk7CisJfQorCisJcmV0dXJuIGlubmVyRXF1aXY7Cit9KCkp
OworCisvLyBCYXNlZCBvbiBqc0R1bXAgYnkgQXJpZWwgRmxlc2xlcgorLy8gaHR0cDovL2ZsZXNs
ZXIuYmxvZ3Nwb3QuY29tLzIwMDgvMDUvanNkdW1wLXByZXR0eS1kdW1wLW9mLWFueS1qYXZhc2Ny
aXB0Lmh0bWwKK1FVbml0LmR1bXAgPSAoZnVuY3Rpb24oKSB7CisJZnVuY3Rpb24gcXVvdGUoIHN0
ciApIHsKKwkJcmV0dXJuICJcIiIgKyBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCAvXFwvZywgIlxc
XFwiICkucmVwbGFjZSggLyIvZywgIlxcXCIiICkgKyAiXCIiOworCX0KKwlmdW5jdGlvbiBsaXRl
cmFsKCBvICkgeworCQlyZXR1cm4gbyArICIiOworCX0KKwlmdW5jdGlvbiBqb2luKCBwcmUsIGFy
ciwgcG9zdCApIHsKKwkJdmFyIHMgPSBkdW1wLnNlcGFyYXRvcigpLAorCQkJYmFzZSA9IGR1bXAu
aW5kZW50KCksCisJCQlpbm5lciA9IGR1bXAuaW5kZW50KCAxICk7CisJCWlmICggYXJyLmpvaW4g
KSB7CisJCQlhcnIgPSBhcnIuam9pbiggIiwiICsgcyArIGlubmVyICk7CisJCX0KKwkJaWYgKCAh
YXJyICkgeworCQkJcmV0dXJuIHByZSArIHBvc3Q7CisJCX0KKwkJcmV0dXJuIFsgcHJlLCBpbm5l
ciArIGFyciwgYmFzZSArIHBvc3QgXS5qb2luKCBzICk7CisJfQorCWZ1bmN0aW9uIGFycmF5KCBh
cnIsIHN0YWNrICkgeworCQl2YXIgaSA9IGFyci5sZW5ndGgsCisJCQlyZXQgPSBuZXcgQXJyYXko
IGkgKTsKKworCQlpZiAoIGR1bXAubWF4RGVwdGggJiYgZHVtcC5kZXB0aCA+IGR1bXAubWF4RGVw
dGggKSB7CisJCQlyZXR1cm4gIltvYmplY3QgQXJyYXldIjsKKwkJfQorCisJCXRoaXMudXAoKTsK
KwkJd2hpbGUgKCBpLS0gKSB7CisJCQlyZXRbIGkgXSA9IHRoaXMucGFyc2UoIGFyclsgaSBdLCB1
bmRlZmluZWQsIHN0YWNrICk7CisJCX0KKwkJdGhpcy5kb3duKCk7CisJCXJldHVybiBqb2luKCAi
WyIsIHJldCwgIl0iICk7CisJfQorCisJdmFyIHJlTmFtZSA9IC9eZnVuY3Rpb24gKFx3KykvLAor
CQlkdW1wID0geworCisJCQkvLyBvYmpUeXBlIGlzIHVzZWQgbW9zdGx5IGludGVybmFsbHksIHlv
dSBjYW4gZml4IGEgKGN1c3RvbSkgdHlwZSBpbiBhZHZhbmNlCisJCQlwYXJzZTogZnVuY3Rpb24o
IG9iaiwgb2JqVHlwZSwgc3RhY2sgKSB7CisJCQkJc3RhY2sgPSBzdGFjayB8fCBbXTsKKwkJCQl2
YXIgcmVzLCBwYXJzZXIsIHBhcnNlclR5cGUsCisJCQkJCWluU3RhY2sgPSBpbkFycmF5KCBvYmos
IHN0YWNrICk7CisKKwkJCQlpZiAoIGluU3RhY2sgIT09IC0xICkgeworCQkJCQlyZXR1cm4gInJl
Y3Vyc2lvbigiICsgKCBpblN0YWNrIC0gc3RhY2subGVuZ3RoICkgKyAiKSI7CisJCQkJfQorCisJ
CQkJb2JqVHlwZSA9IG9ialR5cGUgfHwgdGhpcy50eXBlT2YoIG9iaiAgKTsKKwkJCQlwYXJzZXIg
PSB0aGlzLnBhcnNlcnNbIG9ialR5cGUgXTsKKwkJCQlwYXJzZXJUeXBlID0gdHlwZW9mIHBhcnNl
cjsKKworCQkJCWlmICggcGFyc2VyVHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKKwkJCQkJc3RhY2su
cHVzaCggb2JqICk7CisJCQkJCXJlcyA9IHBhcnNlci5jYWxsKCB0aGlzLCBvYmosIHN0YWNrICk7
CisJCQkJCXN0YWNrLnBvcCgpOworCQkJCQlyZXR1cm4gcmVzOworCQkJCX0KKwkJCQlyZXR1cm4g
KCBwYXJzZXJUeXBlID09PSAic3RyaW5nIiApID8gcGFyc2VyIDogdGhpcy5wYXJzZXJzLmVycm9y
OworCQkJfSwKKwkJCXR5cGVPZjogZnVuY3Rpb24oIG9iaiApIHsKKwkJCQl2YXIgdHlwZTsKKwkJ
CQlpZiAoIG9iaiA9PT0gbnVsbCApIHsKKwkJCQkJdHlwZSA9ICJudWxsIjsKKwkJCQl9IGVsc2Ug
aWYgKCB0eXBlb2Ygb2JqID09PSAidW5kZWZpbmVkIiApIHsKKwkJCQkJdHlwZSA9ICJ1bmRlZmlu
ZWQiOworCQkJCX0gZWxzZSBpZiAoIFFVbml0LmlzKCAicmVnZXhwIiwgb2JqICkgKSB7CisJCQkJ
CXR5cGUgPSAicmVnZXhwIjsKKwkJCQl9IGVsc2UgaWYgKCBRVW5pdC5pcyggImRhdGUiLCBvYmog
KSApIHsKKwkJCQkJdHlwZSA9ICJkYXRlIjsKKwkJCQl9IGVsc2UgaWYgKCBRVW5pdC5pcyggImZ1
bmN0aW9uIiwgb2JqICkgKSB7CisJCQkJCXR5cGUgPSAiZnVuY3Rpb24iOworCQkJCX0gZWxzZSBp
ZiAoIG9iai5zZXRJbnRlcnZhbCAhPT0gdW5kZWZpbmVkICYmCisJCQkJCQlvYmouZG9jdW1lbnQg
IT09IHVuZGVmaW5lZCAmJgorCQkJCQkJb2JqLm5vZGVUeXBlID09PSB1bmRlZmluZWQgKSB7CisJ
CQkJCXR5cGUgPSAid2luZG93IjsKKwkJCQl9IGVsc2UgaWYgKCBvYmoubm9kZVR5cGUgPT09IDkg
KSB7CisJCQkJCXR5cGUgPSAiZG9jdW1lbnQiOworCQkJCX0gZWxzZSBpZiAoIG9iai5ub2RlVHlw
ZSApIHsKKwkJCQkJdHlwZSA9ICJub2RlIjsKKwkJCQl9IGVsc2UgaWYgKAorCisJCQkJCS8vIG5h
dGl2ZSBhcnJheXMKKwkJCQkJdG9TdHJpbmcuY2FsbCggb2JqICkgPT09ICJbb2JqZWN0IEFycmF5
XSIgfHwKKworCQkJCQkvLyBOb2RlTGlzdCBvYmplY3RzCisJCQkJCSggdHlwZW9mIG9iai5sZW5n
dGggPT09ICJudW1iZXIiICYmIG9iai5pdGVtICE9PSB1bmRlZmluZWQgJiYKKwkJCQkJKCBvYmou
bGVuZ3RoID8gb2JqLml0ZW0oIDAgKSA9PT0gb2JqWyAwIF0gOiAoIG9iai5pdGVtKCAwICkgPT09
IG51bGwgJiYKKwkJCQkJb2JqWyAwIF0gPT09IHVuZGVmaW5lZCApICkgKQorCQkJCSkgeworCQkJ
CQl0eXBlID0gImFycmF5IjsKKwkJCQl9IGVsc2UgaWYgKCBvYmouY29uc3RydWN0b3IgPT09IEVy
cm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciApIHsKKwkJCQkJdHlwZSA9ICJlcnJvciI7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJdHlwZSA9IHR5cGVvZiBvYmo7CisJCQkJfQorCQkJCXJldHVybiB0eXBl
OworCQkJfSwKKwkJCXNlcGFyYXRvcjogZnVuY3Rpb24oKSB7CisJCQkJcmV0dXJuIHRoaXMubXVs
dGlsaW5lID8gdGhpcy5IVE1MID8gIjxiciAvPiIgOiAiXG4iIDogdGhpcy5IVE1MID8gIiYjMTYw
OyIgOiAiICI7CisJCQl9LAorCQkJLy8gZXh0cmEgY2FuIGJlIGEgbnVtYmVyLCBzaG9ydGN1dCBm
b3IgaW5jcmVhc2luZy1jYWxsaW5nLWRlY3JlYXNpbmcKKwkJCWluZGVudDogZnVuY3Rpb24oIGV4
dHJhICkgeworCQkJCWlmICggIXRoaXMubXVsdGlsaW5lICkgeworCQkJCQlyZXR1cm4gIiI7CisJ
CQkJfQorCQkJCXZhciBjaHIgPSB0aGlzLmluZGVudENoYXI7CisJCQkJaWYgKCB0aGlzLkhUTUwg
KSB7CisJCQkJCWNociA9IGNoci5yZXBsYWNlKCAvXHQvZywgIiAgICIgKS5yZXBsYWNlKCAvIC9n
LCAiJiMxNjA7IiApOworCQkJCX0KKwkJCQlyZXR1cm4gbmV3IEFycmF5KCB0aGlzLmRlcHRoICsg
KCBleHRyYSB8fCAwICkgKS5qb2luKCBjaHIgKTsKKwkJCX0sCisJCQl1cDogZnVuY3Rpb24oIGEg
KSB7CisJCQkJdGhpcy5kZXB0aCArPSBhIHx8IDE7CisJCQl9LAorCQkJZG93bjogZnVuY3Rpb24o
IGEgKSB7CisJCQkJdGhpcy5kZXB0aCAtPSBhIHx8IDE7CisJCQl9LAorCQkJc2V0UGFyc2VyOiBm
dW5jdGlvbiggbmFtZSwgcGFyc2VyICkgeworCQkJCXRoaXMucGFyc2Vyc1sgbmFtZSBdID0gcGFy
c2VyOworCQkJfSwKKwkJCS8vIFRoZSBuZXh0IDMgYXJlIGV4cG9zZWQgc28geW91IGNhbiB1c2Ug
dGhlbQorCQkJcXVvdGU6IHF1b3RlLAorCQkJbGl0ZXJhbDogbGl0ZXJhbCwKKwkJCWpvaW46IGpv
aW4sCisJCQkvLworCQkJZGVwdGg6IDEsCisJCQltYXhEZXB0aDogUVVuaXQuY29uZmlnLm1heERl
cHRoLAorCisJCQkvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIHBhcnNlcnMsIHRvIG1vZGlmeSB0aGVt
LCB1c2UgZHVtcC5zZXRQYXJzZXIKKwkJCXBhcnNlcnM6IHsKKwkJCQl3aW5kb3c6ICJbV2luZG93
XSIsCisJCQkJZG9jdW1lbnQ6ICJbRG9jdW1lbnRdIiwKKwkJCQllcnJvcjogZnVuY3Rpb24oIGVy
cm9yICkgeworCQkJCQlyZXR1cm4gIkVycm9yKFwiIiArIGVycm9yLm1lc3NhZ2UgKyAiXCIpIjsK
KwkJCQl9LAorCQkJCXVua25vd246ICJbVW5rbm93bl0iLAorCQkJCSJudWxsIjogIm51bGwiLAor
CQkJCSJ1bmRlZmluZWQiOiAidW5kZWZpbmVkIiwKKwkJCQkiZnVuY3Rpb24iOiBmdW5jdGlvbigg
Zm4gKSB7CisJCQkJCXZhciByZXQgPSAiZnVuY3Rpb24iLAorCisJCQkJCQkvLyBmdW5jdGlvbnMg
bmV2ZXIgaGF2ZSBuYW1lIGluIElFCisJCQkJCQluYW1lID0gIm5hbWUiIGluIGZuID8gZm4ubmFt
ZSA6ICggcmVOYW1lLmV4ZWMoIGZuICkgfHwgW10gKVsgMSBdOworCisJCQkJCWlmICggbmFtZSAp
IHsKKwkJCQkJCXJldCArPSAiICIgKyBuYW1lOworCQkJCQl9CisJCQkJCXJldCArPSAiKCAiOwor
CisJCQkJCXJldCA9IFsgcmV0LCBkdW1wLnBhcnNlKCBmbiwgImZ1bmN0aW9uQXJncyIgKSwgIil7
IiBdLmpvaW4oICIiICk7CisJCQkJCXJldHVybiBqb2luKCByZXQsIGR1bXAucGFyc2UoIGZuLCAi
ZnVuY3Rpb25Db2RlIiApLCAifSIgKTsKKwkJCQl9LAorCQkJCWFycmF5OiBhcnJheSwKKwkJCQlu
b2RlbGlzdDogYXJyYXksCisJCQkJImFyZ3VtZW50cyI6IGFycmF5LAorCQkJCW9iamVjdDogZnVu
Y3Rpb24oIG1hcCwgc3RhY2sgKSB7CisJCQkJCXZhciBrZXlzLCBrZXksIHZhbCwgaSwgbm9uRW51
bWVyYWJsZVByb3BlcnRpZXMsCisJCQkJCQlyZXQgPSBbXTsKKworCQkJCQlpZiAoIGR1bXAubWF4
RGVwdGggJiYgZHVtcC5kZXB0aCA+IGR1bXAubWF4RGVwdGggKSB7CisJCQkJCQlyZXR1cm4gIltv
YmplY3QgT2JqZWN0XSI7CisJCQkJCX0KKworCQkJCQlkdW1wLnVwKCk7CisJCQkJCWtleXMgPSBb
XTsKKwkJCQkJZm9yICgga2V5IGluIG1hcCApIHsKKwkJCQkJCWtleXMucHVzaCgga2V5ICk7CisJ
CQkJCX0KKworCQkJCQkvLyBTb21lIHByb3BlcnRpZXMgYXJlIG5vdCBhbHdheXMgZW51bWVyYWJs
ZSBvbiBFcnJvciBvYmplY3RzLgorCQkJCQlub25FbnVtZXJhYmxlUHJvcGVydGllcyA9IFsgIm1l
c3NhZ2UiLCAibmFtZSIgXTsKKwkJCQkJZm9yICggaSBpbiBub25FbnVtZXJhYmxlUHJvcGVydGll
cyApIHsKKwkJCQkJCWtleSA9IG5vbkVudW1lcmFibGVQcm9wZXJ0aWVzWyBpIF07CisJCQkJCQlp
ZiAoIGtleSBpbiBtYXAgJiYgaW5BcnJheSgga2V5LCBrZXlzICkgPCAwICkgeworCQkJCQkJCWtl
eXMucHVzaCgga2V5ICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJa2V5cy5zb3J0KCk7CisJCQkJ
CWZvciAoIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyApIHsKKwkJCQkJCWtleSA9IGtleXNb
IGkgXTsKKwkJCQkJCXZhbCA9IG1hcFsga2V5IF07CisJCQkJCQlyZXQucHVzaCggZHVtcC5wYXJz
ZSgga2V5LCAia2V5IiApICsgIjogIiArCisJCQkJCQkJZHVtcC5wYXJzZSggdmFsLCB1bmRlZmlu
ZWQsIHN0YWNrICkgKTsKKwkJCQkJfQorCQkJCQlkdW1wLmRvd24oKTsKKwkJCQkJcmV0dXJuIGpv
aW4oICJ7IiwgcmV0LCAifSIgKTsKKwkJCQl9LAorCQkJCW5vZGU6IGZ1bmN0aW9uKCBub2RlICkg
eworCQkJCQl2YXIgbGVuLCBpLCB2YWwsCisJCQkJCQlvcGVuID0gZHVtcC5IVE1MID8gIiZsdDsi
IDogIjwiLAorCQkJCQkJY2xvc2UgPSBkdW1wLkhUTUwgPyAiJmd0OyIgOiAiPiIsCisJCQkJCQl0
YWcgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksCisJCQkJCQlyZXQgPSBvcGVuICsgdGFn
LAorCQkJCQkJYXR0cnMgPSBub2RlLmF0dHJpYnV0ZXM7CisKKwkJCQkJaWYgKCBhdHRycyApIHsK
KwkJCQkJCWZvciAoIGkgPSAwLCBsZW4gPSBhdHRycy5sZW5ndGg7IGkgPCBsZW47IGkrKyApIHsK
KwkJCQkJCQl2YWwgPSBhdHRyc1sgaSBdLm5vZGVWYWx1ZTsKKworCQkJCQkJCS8vIElFNiBpbmNs
dWRlcyBhbGwgYXR0cmlidXRlcyBpbiAuYXR0cmlidXRlcywgZXZlbiBvbmVzIG5vdCBleHBsaWNp
dGx5CisJCQkJCQkJLy8gc2V0LiBUaG9zZSBoYXZlIHZhbHVlcyBsaWtlIHVuZGVmaW5lZCwgbnVs
bCwgMCwgZmFsc2UsICIiIG9yCisJCQkJCQkJLy8gImluaGVyaXQiLgorCQkJCQkJCWlmICggdmFs
ICYmIHZhbCAhPT0gImluaGVyaXQiICkgeworCQkJCQkJCQlyZXQgKz0gIiAiICsgYXR0cnNbIGkg
XS5ub2RlTmFtZSArICI9IiArCisJCQkJCQkJCQlkdW1wLnBhcnNlKCB2YWwsICJhdHRyaWJ1dGUi
ICk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJCXJldCArPSBjbG9zZTsKKworCQkJ
CQkvLyBTaG93IGNvbnRlbnQgb2YgVGV4dE5vZGUgb3IgQ0RBVEFTZWN0aW9uCisJCQkJCWlmICgg
bm9kZS5ub2RlVHlwZSA9PT0gMyB8fCBub2RlLm5vZGVUeXBlID09PSA0ICkgeworCQkJCQkJcmV0
ICs9IG5vZGUubm9kZVZhbHVlOworCQkJCQl9CisKKwkJCQkJcmV0dXJuIHJldCArIG9wZW4gKyAi
LyIgKyB0YWcgKyBjbG9zZTsKKwkJCQl9LAorCisJCQkJLy8gZnVuY3Rpb24gY2FsbHMgaXQgaW50
ZXJuYWxseSwgaXQncyB0aGUgYXJndW1lbnRzIHBhcnQgb2YgdGhlIGZ1bmN0aW9uCisJCQkJZnVu
Y3Rpb25BcmdzOiBmdW5jdGlvbiggZm4gKSB7CisJCQkJCXZhciBhcmdzLAorCQkJCQkJbCA9IGZu
Lmxlbmd0aDsKKworCQkJCQlpZiAoICFsICkgeworCQkJCQkJcmV0dXJuICIiOworCQkJCQl9CisK
KwkJCQkJYXJncyA9IG5ldyBBcnJheSggbCApOworCQkJCQl3aGlsZSAoIGwtLSApIHsKKworCQkJ
CQkJLy8gOTcgaXMgJ2EnCisJCQkJCQlhcmdzWyBsIF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCA5
NyArIGwgKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gIiAiICsgYXJncy5qb2luKCAiLCAiICkgKyAi
ICI7CisJCQkJfSwKKwkJCQkvLyBvYmplY3QgY2FsbHMgaXQgaW50ZXJuYWxseSwgdGhlIGtleSBw
YXJ0IG9mIGFuIGl0ZW0gaW4gYSBtYXAKKwkJCQlrZXk6IHF1b3RlLAorCQkJCS8vIGZ1bmN0aW9u
IGNhbGxzIGl0IGludGVybmFsbHksIGl0J3MgdGhlIGNvbnRlbnQgb2YgdGhlIGZ1bmN0aW9uCisJ
CQkJZnVuY3Rpb25Db2RlOiAiW2NvZGVdIiwKKwkJCQkvLyBub2RlIGNhbGxzIGl0IGludGVybmFs
bHksIGl0J3MgYW4gaHRtbCBhdHRyaWJ1dGUgdmFsdWUKKwkJCQlhdHRyaWJ1dGU6IHF1b3RlLAor
CQkJCXN0cmluZzogcXVvdGUsCisJCQkJZGF0ZTogcXVvdGUsCisJCQkJcmVnZXhwOiBsaXRlcmFs
LAorCQkJCW51bWJlcjogbGl0ZXJhbCwKKwkJCQkiYm9vbGVhbiI6IGxpdGVyYWwKKwkJCX0sCisJ
CQkvLyBpZiB0cnVlLCBlbnRpdGllcyBhcmUgZXNjYXBlZCAoIDwsID4sIFx0LCBzcGFjZSBhbmQg
XG4gKQorCQkJSFRNTDogZmFsc2UsCisJCQkvLyBpbmRlbnRhdGlvbiB1bml0CisJCQlpbmRlbnRD
aGFyOiAiICAiLAorCQkJLy8gaWYgdHJ1ZSwgaXRlbXMgaW4gYSBjb2xsZWN0aW9uLCBhcmUgc2Vw
YXJhdGVkIGJ5IGEgXG4sIGVsc2UganVzdCBhIHNwYWNlLgorCQkJbXVsdGlsaW5lOiB0cnVlCisJ
CX07CisKKwlyZXR1cm4gZHVtcDsKK30oKSk7CisKKy8vIGJhY2sgY29tcGF0CitRVW5pdC5qc0R1
bXAgPSBRVW5pdC5kdW1wOworCisvLyBGb3IgYnJvd3NlciwgZXhwb3J0IG9ubHkgc2VsZWN0IGds
b2JhbHMKK2lmICggZGVmaW5lZC5kb2N1bWVudCApIHsKKworCS8vIERlcHJlY2F0ZWQKKwkvLyBF
eHRlbmQgYXNzZXJ0IG1ldGhvZHMgdG8gUVVuaXQgYW5kIEdsb2JhbCBzY29wZSB0aHJvdWdoIEJh
Y2t3YXJkcyBjb21wYXRpYmlsaXR5CisJKGZ1bmN0aW9uKCkgeworCQl2YXIgaSwKKwkJCWFzc2Vy
dGlvbnMgPSBBc3NlcnQucHJvdG90eXBlOworCisJCWZ1bmN0aW9uIGFwcGx5Q3VycmVudCggY3Vy
cmVudCApIHsKKwkJCXJldHVybiBmdW5jdGlvbigpIHsKKwkJCQl2YXIgYXNzZXJ0ID0gbmV3IEFz
c2VydCggUVVuaXQuY29uZmlnLmN1cnJlbnQgKTsKKwkJCQljdXJyZW50LmFwcGx5KCBhc3NlcnQs
IGFyZ3VtZW50cyApOworCQkJfTsKKwkJfQorCisJCWZvciAoIGkgaW4gYXNzZXJ0aW9ucyApIHsK
KwkJCVFVbml0WyBpIF0gPSBhcHBseUN1cnJlbnQoIGFzc2VydGlvbnNbIGkgXSApOworCQl9CisJ
fSkoKTsKKworCShmdW5jdGlvbigpIHsKKwkJdmFyIGksIGwsCisJCQlrZXlzID0gWworCQkJCSJ0
ZXN0IiwKKwkJCQkibW9kdWxlIiwKKwkJCQkiZXhwZWN0IiwKKwkJCQkiYXN5bmNUZXN0IiwKKwkJ
CQkic3RhcnQiLAorCQkJCSJzdG9wIiwKKwkJCQkib2siLAorCQkJCSJub3RPayIsCisJCQkJImVx
dWFsIiwKKwkJCQkibm90RXF1YWwiLAorCQkJCSJwcm9wRXF1YWwiLAorCQkJCSJub3RQcm9wRXF1
YWwiLAorCQkJCSJkZWVwRXF1YWwiLAorCQkJCSJub3REZWVwRXF1YWwiLAorCQkJCSJzdHJpY3RF
cXVhbCIsCisJCQkJIm5vdFN0cmljdEVxdWFsIiwKKwkJCQkidGhyb3dzIiwKKwkJCQkicmFpc2Vz
IgorCQkJXTsKKworCQlmb3IgKCBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrICkg
eworCQkJd2luZG93WyBrZXlzWyBpIF0gXSA9IFFVbml0WyBrZXlzWyBpIF0gXTsKKwkJfQorCX0p
KCk7CisKKwl3aW5kb3cuUVVuaXQgPSBRVW5pdDsKK30KKworLy8gRm9yIG5vZGVqcworaWYgKCB0
eXBlb2YgbW9kdWxlICE9PSAidW5kZWZpbmVkIiAmJiBtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMg
KSB7CisJbW9kdWxlLmV4cG9ydHMgPSBRVW5pdDsKKworCS8vIEZvciBjb25zaXN0ZW5jeSB3aXRo
IENvbW1vbkpTIGVudmlyb25tZW50cycgZXhwb3J0cworCW1vZHVsZS5leHBvcnRzLlFVbml0ID0g
UVVuaXQ7Cit9CisKKy8vIEZvciBDb21tb25KUyB3aXRoIGV4cG9ydHMsIGJ1dCB3aXRob3V0IG1v
ZHVsZS5leHBvcnRzLCBsaWtlIFJoaW5vCitpZiAoIHR5cGVvZiBleHBvcnRzICE9PSAidW5kZWZp
bmVkIiAmJiBleHBvcnRzICkgeworCWV4cG9ydHMuUVVuaXQgPSBRVW5pdDsKK30KKworaWYgKCB0
eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgKSB7CisJZGVmaW5lKCBm
dW5jdGlvbigpIHsKKwkJcmV0dXJuIFFVbml0OworCX0gKTsKKwlRVW5pdC5jb25maWcuYXV0b3N0
YXJ0ID0gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZpbGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9u
IG9mIGdvb2dsZS1kaWZmLW1hdGNoLXBhdGNoJ3MgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbgor
ICogKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWRpZmYtbWF0Y2gtcGF0Y2gvc291
cmNlL2Jyb3dzZS90cnVuay9qYXZhc2NyaXB0L2RpZmZfbWF0Y2hfcGF0Y2hfdW5jb21wcmVzc2Vk
LmpzKSwKKyAqIG1vZGlmaWNhdGlvbnMgYXJlIGxpY2Vuc2VkIGFzIG1vcmUgZnVsbHkgc2V0IGZv
cnRoIGluIExJQ0VOU0UudHh0LgorICoKKyAqIFRoZSBvcmlnaW5hbCBzb3VyY2Ugb2YgZ29vZ2xl
LWRpZmYtbWF0Y2gtcGF0Y2ggaXMgYXR0cmlidXRhYmxlIGFuZCBsaWNlbnNlZCBhcyBmb2xsb3dz
OgorICoKKyAqIENvcHlyaWdodCAyMDA2IEdvb2dsZSBJbmMuCisgKiBodHRwOi8vY29kZS5nb29n
bGUuY29tL3AvZ29vZ2xlLWRpZmYtbWF0Y2gtcGF0Y2gvCisgKgorICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBNb3JlIEluZm86CisgKiAgaHR0
cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC8KKyAqCisgKiBV
c2FnZTogUVVuaXQuZGlmZihleHBlY3RlZCwgYWN0dWFsKQorICoKKyAqLworUVVuaXQuZGlmZiA9
ICggZnVuY3Rpb24oKSB7CisJZnVuY3Rpb24gRGlmZk1hdGNoUGF0Y2goKSB7CisJfQorCisJLy8g
IERJRkYgRlVOQ1RJT05TCisKKwkvKioKKwkgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50
aW5nIGEgZGlmZiBpcyBhbiBhcnJheSBvZiB0dXBsZXM6CisJICogW1tESUZGX0RFTEVURSwgJ0hl
bGxvJ10sIFtESUZGX0lOU0VSVCwgJ0dvb2RieWUnXSwgW0RJRkZfRVFVQUwsICcgd29ybGQuJ11d
CisJICogd2hpY2ggbWVhbnM6IGRlbGV0ZSAnSGVsbG8nLCBhZGQgJ0dvb2RieWUnIGFuZCBrZWVw
ICcgd29ybGQuJworCSAqLworCXZhciBESUZGX0RFTEVURSA9IC0xLAorCQlESUZGX0lOU0VSVCA9
IDEsCisJCURJRkZfRVFVQUwgPSAwOworCisJLyoqCisJICogRmluZCB0aGUgZGlmZmVyZW5jZXMg
YmV0d2VlbiB0d28gdGV4dHMuICBTaW1wbGlmaWVzIHRoZSBwcm9ibGVtIGJ5IHN0cmlwcGluZwor
CSAqIGFueSBjb21tb24gcHJlZml4IG9yIHN1ZmZpeCBvZmYgdGhlIHRleHRzIGJlZm9yZSBkaWZm
aW5nLgorCSAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0MSBPbGQgc3RyaW5nIHRvIGJlIGRpZmZlZC4K
KwkgKiBAcGFyYW0ge3N0cmluZ30gdGV4dDIgTmV3IHN0cmluZyB0byBiZSBkaWZmZWQuCisJICog
QHBhcmFtIHtib29sZWFuPX0gb3B0Q2hlY2tsaW5lcyBPcHRpb25hbCBzcGVlZHVwIGZsYWcuIElm
IHByZXNlbnQgYW5kIGZhbHNlLAorCSAqICAgICB0aGVuIGRvbid0IHJ1biBhIGxpbmUtbGV2ZWwg
ZGlmZiBmaXJzdCB0byBpZGVudGlmeSB0aGUgY2hhbmdlZCBhcmVhcy4KKwkgKiAgICAgRGVmYXVs
dHMgdG8gdHJ1ZSwgd2hpY2ggZG9lcyBhIGZhc3Rlciwgc2xpZ2h0bHkgbGVzcyBvcHRpbWFsIGRp
ZmYuCisJICogQHJldHVybiB7IUFycmF5LjwhRGlmZk1hdGNoUGF0Y2guRGlmZj59IEFycmF5IG9m
IGRpZmYgdHVwbGVzLgorCSAqLworCURpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5EaWZmTWFpbiA9
IGZ1bmN0aW9uKCB0ZXh0MSwgdGV4dDIsIG9wdENoZWNrbGluZXMgKSB7CisJCXZhciBkZWFkbGlu
ZSwgY2hlY2tsaW5lcywgY29tbW9ubGVuZ3RoLAorCQkJY29tbW9ucHJlZml4LCBjb21tb25zdWZm
aXgsIGRpZmZzOworCisJCS8vIFRoZSBkaWZmIG11c3QgYmUgY29tcGxldGUgaW4gdXAgdG8gMSBz
ZWNvbmQuCisJCWRlYWRsaW5lID0gKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpICsgMTAwMDsKKwor
CQkvLyBDaGVjayBmb3IgbnVsbCBpbnB1dHMuCisJCWlmICggdGV4dDEgPT09IG51bGwgfHwgdGV4
dDIgPT09IG51bGwgKSB7CisJCQl0aHJvdyBuZXcgRXJyb3IoICJOdWxsIGlucHV0LiAoRGlmZk1h
aW4pIiApOworCQl9CisKKwkJLy8gQ2hlY2sgZm9yIGVxdWFsaXR5IChzcGVlZHVwKS4KKwkJaWYg
KCB0ZXh0MSA9PT0gdGV4dDIgKSB7CisJCQlpZiAoIHRleHQxICkgeworCQkJCXJldHVybiBbCisJ
CQkJCVsgRElGRl9FUVVBTCwgdGV4dDEgXQorCQkJCV07CisJCQl9CisJCQlyZXR1cm4gW107CisJ
CX0KKworCQlpZiAoIHR5cGVvZiBvcHRDaGVja2xpbmVzID09PSAidW5kZWZpbmVkIiApIHsKKwkJ
CW9wdENoZWNrbGluZXMgPSB0cnVlOworCQl9CisKKwkJY2hlY2tsaW5lcyA9IG9wdENoZWNrbGlu
ZXM7CisKKwkJLy8gVHJpbSBvZmYgY29tbW9uIHByZWZpeCAoc3BlZWR1cCkuCisJCWNvbW1vbmxl
bmd0aCA9IHRoaXMuZGlmZkNvbW1vblByZWZpeCggdGV4dDEsIHRleHQyICk7CisJCWNvbW1vbnBy
ZWZpeCA9IHRleHQxLnN1YnN0cmluZyggMCwgY29tbW9ubGVuZ3RoICk7CisJCXRleHQxID0gdGV4
dDEuc3Vic3RyaW5nKCBjb21tb25sZW5ndGggKTsKKwkJdGV4dDIgPSB0ZXh0Mi5zdWJzdHJpbmco
IGNvbW1vbmxlbmd0aCApOworCisJCS8vIFRyaW0gb2ZmIGNvbW1vbiBzdWZmaXggKHNwZWVkdXAp
LgorCQljb21tb25sZW5ndGggPSB0aGlzLmRpZmZDb21tb25TdWZmaXgoIHRleHQxLCB0ZXh0MiAp
OworCQljb21tb25zdWZmaXggPSB0ZXh0MS5zdWJzdHJpbmcoIHRleHQxLmxlbmd0aCAtIGNvbW1v
bmxlbmd0aCApOworCQl0ZXh0MSA9IHRleHQxLnN1YnN0cmluZyggMCwgdGV4dDEubGVuZ3RoIC0g
Y29tbW9ubGVuZ3RoICk7CisJCXRleHQyID0gdGV4dDIuc3Vic3RyaW5nKCAwLCB0ZXh0Mi5sZW5n
dGggLSBjb21tb25sZW5ndGggKTsKKworCQkvLyBDb21wdXRlIHRoZSBkaWZmIG9uIHRoZSBtaWRk
bGUgYmxvY2suCisJCWRpZmZzID0gdGhpcy5kaWZmQ29tcHV0ZSggdGV4dDEsIHRleHQyLCBjaGVj
a2xpbmVzLCBkZWFkbGluZSApOworCisJCS8vIFJlc3RvcmUgdGhlIHByZWZpeCBhbmQgc3VmZml4
LgorCQlpZiAoIGNvbW1vbnByZWZpeCApIHsKKwkJCWRpZmZzLnVuc2hpZnQoIFsgRElGRl9FUVVB
TCwgY29tbW9ucHJlZml4IF0gKTsKKwkJfQorCQlpZiAoIGNvbW1vbnN1ZmZpeCApIHsKKwkJCWRp
ZmZzLnB1c2goIFsgRElGRl9FUVVBTCwgY29tbW9uc3VmZml4IF0gKTsKKwkJfQorCQl0aGlzLmRp
ZmZDbGVhbnVwTWVyZ2UoIGRpZmZzICk7CisJCXJldHVybiBkaWZmczsKKwl9OworCisJLyoqCisJ
ICogUmVkdWNlIHRoZSBudW1iZXIgb2YgZWRpdHMgYnkgZWxpbWluYXRpbmcgb3BlcmF0aW9uYWxs
eSB0cml2aWFsIGVxdWFsaXRpZXMuCisJICogQHBhcmFtIHshQXJyYXkuPCFEaWZmTWF0Y2hQYXRj
aC5EaWZmPn0gZGlmZnMgQXJyYXkgb2YgZGlmZiB0dXBsZXMuCisJICovCisJRGlmZk1hdGNoUGF0
Y2gucHJvdG90eXBlLmRpZmZDbGVhbnVwRWZmaWNpZW5jeSA9IGZ1bmN0aW9uKCBkaWZmcyApIHsK
KwkJdmFyIGNoYW5nZXMsIGVxdWFsaXRpZXMsIGVxdWFsaXRpZXNMZW5ndGgsIGxhc3RlcXVhbGl0
eSwKKwkJCXBvaW50ZXIsIHByZUlucywgcHJlRGVsLCBwb3N0SW5zLCBwb3N0RGVsOworCQljaGFu
Z2VzID0gZmFsc2U7CisJCWVxdWFsaXRpZXMgPSBbXTsgLy8gU3RhY2sgb2YgaW5kaWNlcyB3aGVy
ZSBlcXVhbGl0aWVzIGFyZSBmb3VuZC4KKwkJZXF1YWxpdGllc0xlbmd0aCA9IDA7IC8vIEtlZXBp
bmcgb3VyIG93biBsZW5ndGggdmFyIGlzIGZhc3RlciBpbiBKUy4KKwkJLyoqIEB0eXBlIHs/c3Ry
aW5nfSAqLworCQlsYXN0ZXF1YWxpdHkgPSBudWxsOworCQkvLyBBbHdheXMgZXF1YWwgdG8gZGlm
ZnNbZXF1YWxpdGllc1tlcXVhbGl0aWVzTGVuZ3RoIC0gMV1dWzFdCisJCXBvaW50ZXIgPSAwOyAv
LyBJbmRleCBvZiBjdXJyZW50IHBvc2l0aW9uLgorCQkvLyBJcyB0aGVyZSBhbiBpbnNlcnRpb24g
b3BlcmF0aW9uIGJlZm9yZSB0aGUgbGFzdCBlcXVhbGl0eS4KKwkJcHJlSW5zID0gZmFsc2U7CisJ
CS8vIElzIHRoZXJlIGEgZGVsZXRpb24gb3BlcmF0aW9uIGJlZm9yZSB0aGUgbGFzdCBlcXVhbGl0
eS4KKwkJcHJlRGVsID0gZmFsc2U7CisJCS8vIElzIHRoZXJlIGFuIGluc2VydGlvbiBvcGVyYXRp
b24gYWZ0ZXIgdGhlIGxhc3QgZXF1YWxpdHkuCisJCXBvc3RJbnMgPSBmYWxzZTsKKwkJLy8gSXMg
dGhlcmUgYSBkZWxldGlvbiBvcGVyYXRpb24gYWZ0ZXIgdGhlIGxhc3QgZXF1YWxpdHkuCisJCXBv
c3REZWwgPSBmYWxzZTsKKwkJd2hpbGUgKCBwb2ludGVyIDwgZGlmZnMubGVuZ3RoICkgeworCisJ
CQkvLyBFcXVhbGl0eSBmb3VuZC4KKwkJCWlmICggZGlmZnNbIHBvaW50ZXIgXVsgMCBdID09PSBE
SUZGX0VRVUFMICkgeworCQkJCWlmICggZGlmZnNbIHBvaW50ZXIgXVsgMSBdLmxlbmd0aCA8IDQg
JiYgKCBwb3N0SW5zIHx8IHBvc3REZWwgKSApIHsKKworCQkJCQkvLyBDYW5kaWRhdGUgZm91bmQu
CisJCQkJCWVxdWFsaXRpZXNbIGVxdWFsaXRpZXNMZW5ndGgrKyBdID0gcG9pbnRlcjsKKwkJCQkJ
cHJlSW5zID0gcG9zdEluczsKKwkJCQkJcHJlRGVsID0gcG9zdERlbDsKKwkJCQkJbGFzdGVxdWFs
aXR5ID0gZGlmZnNbIHBvaW50ZXIgXVsgMSBdOworCQkJCX0gZWxzZSB7CisKKwkJCQkJLy8gTm90
IGEgY2FuZGlkYXRlLCBhbmQgY2FuIG5ldmVyIGJlY29tZSBvbmUuCisJCQkJCWVxdWFsaXRpZXNM
ZW5ndGggPSAwOworCQkJCQlsYXN0ZXF1YWxpdHkgPSBudWxsOworCQkJCX0KKwkJCQlwb3N0SW5z
ID0gcG9zdERlbCA9IGZhbHNlOworCisJCQkvLyBBbiBpbnNlcnRpb24gb3IgZGVsZXRpb24uCisJ
CQl9IGVsc2UgeworCisJCQkJaWYgKCBkaWZmc1sgcG9pbnRlciBdWyAwIF0gPT09IERJRkZfREVM
RVRFICkgeworCQkJCQlwb3N0RGVsID0gdHJ1ZTsKKwkJCQl9IGVsc2UgeworCQkJCQlwb3N0SW5z
ID0gdHJ1ZTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIEZpdmUgdHlwZXMgdG8gYmUgc3BsaXQ6
CisJCQkJICogPGlucz5BPC9pbnM+PGRlbD5CPC9kZWw+WFk8aW5zPkM8L2lucz48ZGVsPkQ8L2Rl
bD4KKwkJCQkgKiA8aW5zPkE8L2lucz5YPGlucz5DPC9pbnM+PGRlbD5EPC9kZWw+CisJCQkJICog
PGlucz5BPC9pbnM+PGRlbD5CPC9kZWw+WDxpbnM+QzwvaW5zPgorCQkJCSAqIDxpbnM+QTwvZGVs
Plg8aW5zPkM8L2lucz48ZGVsPkQ8L2RlbD4KKwkJCQkgKiA8aW5zPkE8L2lucz48ZGVsPkI8L2Rl
bD5YPGRlbD5DPC9kZWw+CisJCQkJICovCisJCQkJaWYgKCBsYXN0ZXF1YWxpdHkgJiYgKCAoIHBy
ZUlucyAmJiBwcmVEZWwgJiYgcG9zdElucyAmJiBwb3N0RGVsICkgfHwKKwkJCQkJCSggKCBsYXN0
ZXF1YWxpdHkubGVuZ3RoIDwgMiApICYmCisJCQkJCQkoIHByZUlucyArIHByZURlbCArIHBvc3RJ
bnMgKyBwb3N0RGVsICkgPT09IDMgKSApICkgeworCisJCQkJCS8vIER1cGxpY2F0ZSByZWNvcmQu
CisJCQkJCWRpZmZzLnNwbGljZSgKKwkJCQkJCWVxdWFsaXRpZXNbIGVxdWFsaXRpZXNMZW5ndGgg
LSAxIF0sCisJCQkJCQkwLAorCQkJCQkJWyBESUZGX0RFTEVURSwgbGFzdGVxdWFsaXR5IF0KKwkJ
CQkJKTsKKworCQkJCQkvLyBDaGFuZ2Ugc2Vjb25kIGNvcHkgdG8gaW5zZXJ0LgorCQkJCQlkaWZm
c1sgZXF1YWxpdGllc1sgZXF1YWxpdGllc0xlbmd0aCAtIDEgXSArIDEgXVsgMCBdID0gRElGRl9J
TlNFUlQ7CisJCQkJCWVxdWFsaXRpZXNMZW5ndGgtLTsgLy8gVGhyb3cgYXdheSB0aGUgZXF1YWxp
dHkgd2UganVzdCBkZWxldGVkOworCQkJCQlsYXN0ZXF1YWxpdHkgPSBudWxsOworCQkJCQlpZiAo
IHByZUlucyAmJiBwcmVEZWwgKSB7CisJCQkJCQkvLyBObyBjaGFuZ2VzIG1hZGUgd2hpY2ggY291
bGQgYWZmZWN0IHByZXZpb3VzIGVudHJ5LCBrZWVwIGdvaW5nLgorCQkJCQkJcG9zdElucyA9IHBv
c3REZWwgPSB0cnVlOworCQkJCQkJZXF1YWxpdGllc0xlbmd0aCA9IDA7CisJCQkJCX0gZWxzZSB7
CisJCQkJCQllcXVhbGl0aWVzTGVuZ3RoLS07IC8vIFRocm93IGF3YXkgdGhlIHByZXZpb3VzIGVx
dWFsaXR5LgorCQkJCQkJcG9pbnRlciA9IGVxdWFsaXRpZXNMZW5ndGggPiAwID8gZXF1YWxpdGll
c1sgZXF1YWxpdGllc0xlbmd0aCAtIDEgXSA6IC0xOworCQkJCQkJcG9zdElucyA9IHBvc3REZWwg
PSBmYWxzZTsKKwkJCQkJfQorCQkJCQljaGFuZ2VzID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlw
b2ludGVyKys7CisJCX0KKworCQlpZiAoIGNoYW5nZXMgKSB7CisJCQl0aGlzLmRpZmZDbGVhbnVw
TWVyZ2UoIGRpZmZzICk7CisJCX0KKwl9OworCisJLyoqCisJICogQ29udmVydCBhIGRpZmYgYXJy
YXkgaW50byBhIHByZXR0eSBIVE1MIHJlcG9ydC4KKwkgKiBAcGFyYW0geyFBcnJheS48IURpZmZN
YXRjaFBhdGNoLkRpZmY+fSBkaWZmcyBBcnJheSBvZiBkaWZmIHR1cGxlcy4KKwkgKiBAcGFyYW0g
e2ludGVnZXJ9IHN0cmluZyB0byBiZSBiZWF1dGlmaWVkLgorCSAqIEByZXR1cm4ge3N0cmluZ30g
SFRNTCByZXByZXNlbnRhdGlvbi4KKwkgKi8KKwlEaWZmTWF0Y2hQYXRjaC5wcm90b3R5cGUuZGlm
ZlByZXR0eUh0bWwgPSBmdW5jdGlvbiggZGlmZnMgKSB7CisJCXZhciBvcCwgZGF0YSwgeCwKKwkJ
CWh0bWwgPSBbXTsKKwkJZm9yICggeCA9IDA7IHggPCBkaWZmcy5sZW5ndGg7IHgrKyApIHsKKwkJ
CW9wID0gZGlmZnNbIHggXVsgMCBdOyAvLyBPcGVyYXRpb24gKGluc2VydCwgZGVsZXRlLCBlcXVh
bCkKKwkJCWRhdGEgPSBkaWZmc1sgeCBdWyAxIF07IC8vIFRleHQgb2YgY2hhbmdlLgorCQkJc3dp
dGNoICggb3AgKSB7CisJCQljYXNlIERJRkZfSU5TRVJUOgorCQkJCWh0bWxbIHggXSA9ICI8aW5z
PiIgKyBkYXRhICsgIjwvaW5zPiI7CisJCQkJYnJlYWs7CisJCQljYXNlIERJRkZfREVMRVRFOgor
CQkJCWh0bWxbIHggXSA9ICI8ZGVsPiIgKyBkYXRhICsgIjwvZGVsPiI7CisJCQkJYnJlYWs7CisJ
CQljYXNlIERJRkZfRVFVQUw6CisJCQkJaHRtbFsgeCBdID0gIjxzcGFuPiIgKyBkYXRhICsgIjwv
c3Bhbj4iOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldHVybiBodG1sLmpvaW4oICIiICk7
CisJfTsKKworCS8qKgorCSAqIERldGVybWluZSB0aGUgY29tbW9uIHByZWZpeCBvZiB0d28gc3Ry
aW5ncy4KKwkgKiBAcGFyYW0ge3N0cmluZ30gdGV4dDEgRmlyc3Qgc3RyaW5nLgorCSAqIEBwYXJh
bSB7c3RyaW5nfSB0ZXh0MiBTZWNvbmQgc3RyaW5nLgorCSAqIEByZXR1cm4ge251bWJlcn0gVGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbW1vbiB0byB0aGUgc3RhcnQgb2YgZWFjaAorCSAqICAg
ICBzdHJpbmcuCisJICovCisJRGlmZk1hdGNoUGF0Y2gucHJvdG90eXBlLmRpZmZDb21tb25QcmVm
aXggPSBmdW5jdGlvbiggdGV4dDEsIHRleHQyICkgeworCQl2YXIgcG9pbnRlcm1pZCwgcG9pbnRl
cm1heCwgcG9pbnRlcm1pbiwgcG9pbnRlcnN0YXJ0OworCQkvLyBRdWljayBjaGVjayBmb3IgY29t
bW9uIG51bGwgY2FzZXMuCisJCWlmICggIXRleHQxIHx8ICF0ZXh0MiB8fCB0ZXh0MS5jaGFyQXQo
IDAgKSAhPT0gdGV4dDIuY2hhckF0KCAwICkgKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvLyBC
aW5hcnkgc2VhcmNoLgorCQkvLyBQZXJmb3JtYW5jZSBhbmFseXNpczogaHR0cDovL25laWwuZnJh
c2VyLm5hbWUvbmV3cy8yMDA3LzEwLzA5LworCQlwb2ludGVybWluID0gMDsKKwkJcG9pbnRlcm1h
eCA9IE1hdGgubWluKCB0ZXh0MS5sZW5ndGgsIHRleHQyLmxlbmd0aCApOworCQlwb2ludGVybWlk
ID0gcG9pbnRlcm1heDsKKwkJcG9pbnRlcnN0YXJ0ID0gMDsKKwkJd2hpbGUgKCBwb2ludGVybWlu
IDwgcG9pbnRlcm1pZCApIHsKKwkJCWlmICggdGV4dDEuc3Vic3RyaW5nKCBwb2ludGVyc3RhcnQs
IHBvaW50ZXJtaWQgKSA9PT0KKwkJCQkJdGV4dDIuc3Vic3RyaW5nKCBwb2ludGVyc3RhcnQsIHBv
aW50ZXJtaWQgKSApIHsKKwkJCQlwb2ludGVybWluID0gcG9pbnRlcm1pZDsKKwkJCQlwb2ludGVy
c3RhcnQgPSBwb2ludGVybWluOworCQkJfSBlbHNlIHsKKwkJCQlwb2ludGVybWF4ID0gcG9pbnRl
cm1pZDsKKwkJCX0KKwkJCXBvaW50ZXJtaWQgPSBNYXRoLmZsb29yKCAoIHBvaW50ZXJtYXggLSBw
b2ludGVybWluICkgLyAyICsgcG9pbnRlcm1pbiApOworCQl9CisJCXJldHVybiBwb2ludGVybWlk
OworCX07CisKKwkvKioKKwkgKiBEZXRlcm1pbmUgdGhlIGNvbW1vbiBzdWZmaXggb2YgdHdvIHN0
cmluZ3MuCisJICogQHBhcmFtIHtzdHJpbmd9IHRleHQxIEZpcnN0IHN0cmluZy4KKwkgKiBAcGFy
YW0ge3N0cmluZ30gdGV4dDIgU2Vjb25kIHN0cmluZy4KKwkgKiBAcmV0dXJuIHtudW1iZXJ9IFRo
ZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb21tb24gdG8gdGhlIGVuZCBvZiBlYWNoIHN0cmluZy4K
KwkgKi8KKwlEaWZmTWF0Y2hQYXRjaC5wcm90b3R5cGUuZGlmZkNvbW1vblN1ZmZpeCA9IGZ1bmN0
aW9uKCB0ZXh0MSwgdGV4dDIgKSB7CisJCXZhciBwb2ludGVybWlkLCBwb2ludGVybWF4LCBwb2lu
dGVybWluLCBwb2ludGVyZW5kOworCQkvLyBRdWljayBjaGVjayBmb3IgY29tbW9uIG51bGwgY2Fz
ZXMuCisJCWlmICggIXRleHQxIHx8CisJCQkJIXRleHQyIHx8CisJCQkJdGV4dDEuY2hhckF0KCB0
ZXh0MS5sZW5ndGggLSAxICkgIT09IHRleHQyLmNoYXJBdCggdGV4dDIubGVuZ3RoIC0gMSApICkg
eworCQkJcmV0dXJuIDA7CisJCX0KKwkJLy8gQmluYXJ5IHNlYXJjaC4KKwkJLy8gUGVyZm9ybWFu
Y2UgYW5hbHlzaXM6IGh0dHA6Ly9uZWlsLmZyYXNlci5uYW1lL25ld3MvMjAwNy8xMC8wOS8KKwkJ
cG9pbnRlcm1pbiA9IDA7CisJCXBvaW50ZXJtYXggPSBNYXRoLm1pbiggdGV4dDEubGVuZ3RoLCB0
ZXh0Mi5sZW5ndGggKTsKKwkJcG9pbnRlcm1pZCA9IHBvaW50ZXJtYXg7CisJCXBvaW50ZXJlbmQg
PSAwOworCQl3aGlsZSAoIHBvaW50ZXJtaW4gPCBwb2ludGVybWlkICkgeworCQkJaWYgKCB0ZXh0
MS5zdWJzdHJpbmcoIHRleHQxLmxlbmd0aCAtIHBvaW50ZXJtaWQsIHRleHQxLmxlbmd0aCAtIHBv
aW50ZXJlbmQgKSA9PT0KKwkJCQkJdGV4dDIuc3Vic3RyaW5nKCB0ZXh0Mi5sZW5ndGggLSBwb2lu
dGVybWlkLCB0ZXh0Mi5sZW5ndGggLSBwb2ludGVyZW5kICkgKSB7CisJCQkJcG9pbnRlcm1pbiA9
IHBvaW50ZXJtaWQ7CisJCQkJcG9pbnRlcmVuZCA9IHBvaW50ZXJtaW47CisJCQl9IGVsc2Ugewor
CQkJCXBvaW50ZXJtYXggPSBwb2ludGVybWlkOworCQkJfQorCQkJcG9pbnRlcm1pZCA9IE1hdGgu
Zmxvb3IoICggcG9pbnRlcm1heCAtIHBvaW50ZXJtaW4gKSAvIDIgKyBwb2ludGVybWluICk7CisJ
CX0KKwkJcmV0dXJuIHBvaW50ZXJtaWQ7CisJfTsKKworCS8qKgorCSAqIEZpbmQgdGhlIGRpZmZl
cmVuY2VzIGJldHdlZW4gdHdvIHRleHRzLiAgQXNzdW1lcyB0aGF0IHRoZSB0ZXh0cyBkbyBub3QK
KwkgKiBoYXZlIGFueSBjb21tb24gcHJlZml4IG9yIHN1ZmZpeC4KKwkgKiBAcGFyYW0ge3N0cmlu
Z30gdGV4dDEgT2xkIHN0cmluZyB0byBiZSBkaWZmZWQuCisJICogQHBhcmFtIHtzdHJpbmd9IHRl
eHQyIE5ldyBzdHJpbmcgdG8gYmUgZGlmZmVkLgorCSAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2ts
aW5lcyBTcGVlZHVwIGZsYWcuICBJZiBmYWxzZSwgdGhlbiBkb24ndCBydW4gYQorCSAqICAgICBs
aW5lLWxldmVsIGRpZmYgZmlyc3QgdG8gaWRlbnRpZnkgdGhlIGNoYW5nZWQgYXJlYXMuCisJICog
ICAgIElmIHRydWUsIHRoZW4gcnVuIGEgZmFzdGVyLCBzbGlnaHRseSBsZXNzIG9wdGltYWwgZGlm
Zi4KKwkgKiBAcGFyYW0ge251bWJlcn0gZGVhZGxpbmUgVGltZSB3aGVuIHRoZSBkaWZmIHNob3Vs
ZCBiZSBjb21wbGV0ZSBieS4KKwkgKiBAcmV0dXJuIHshQXJyYXkuPCFEaWZmTWF0Y2hQYXRjaC5E
aWZmPn0gQXJyYXkgb2YgZGlmZiB0dXBsZXMuCisJICogQHByaXZhdGUKKwkgKi8KKwlEaWZmTWF0
Y2hQYXRjaC5wcm90b3R5cGUuZGlmZkNvbXB1dGUgPSBmdW5jdGlvbiggdGV4dDEsIHRleHQyLCBj
aGVja2xpbmVzLCBkZWFkbGluZSApIHsKKwkJdmFyIGRpZmZzLCBsb25ndGV4dCwgc2hvcnR0ZXh0
LCBpLCBobSwKKwkJCXRleHQxQSwgdGV4dDJBLCB0ZXh0MUIsIHRleHQyQiwKKwkJCW1pZENvbW1v
biwgZGlmZnNBLCBkaWZmc0I7CisKKwkJaWYgKCAhdGV4dDEgKSB7CisJCQkvLyBKdXN0IGFkZCBz
b21lIHRleHQgKHNwZWVkdXApLgorCQkJcmV0dXJuIFsKKwkJCQlbIERJRkZfSU5TRVJULCB0ZXh0
MiBdCisJCQldOworCQl9CisKKwkJaWYgKCAhdGV4dDIgKSB7CisJCQkvLyBKdXN0IGRlbGV0ZSBz
b21lIHRleHQgKHNwZWVkdXApLgorCQkJcmV0dXJuIFsKKwkJCQlbIERJRkZfREVMRVRFLCB0ZXh0
MSBdCisJCQldOworCQl9CisKKwkJbG9uZ3RleHQgPSB0ZXh0MS5sZW5ndGggPiB0ZXh0Mi5sZW5n
dGggPyB0ZXh0MSA6IHRleHQyOworCQlzaG9ydHRleHQgPSB0ZXh0MS5sZW5ndGggPiB0ZXh0Mi5s
ZW5ndGggPyB0ZXh0MiA6IHRleHQxOworCQlpID0gbG9uZ3RleHQuaW5kZXhPZiggc2hvcnR0ZXh0
ICk7CisJCWlmICggaSAhPT0gLTEgKSB7CisJCQkvLyBTaG9ydGVyIHRleHQgaXMgaW5zaWRlIHRo
ZSBsb25nZXIgdGV4dCAoc3BlZWR1cCkuCisJCQlkaWZmcyA9IFsKKwkJCQlbIERJRkZfSU5TRVJU
LCBsb25ndGV4dC5zdWJzdHJpbmcoIDAsIGkgKSBdLAorCQkJCVsgRElGRl9FUVVBTCwgc2hvcnR0
ZXh0IF0sCisJCQkJWyBESUZGX0lOU0VSVCwgbG9uZ3RleHQuc3Vic3RyaW5nKCBpICsgc2hvcnR0
ZXh0Lmxlbmd0aCApIF0KKwkJCV07CisJCQkvLyBTd2FwIGluc2VydGlvbnMgZm9yIGRlbGV0aW9u
cyBpZiBkaWZmIGlzIHJldmVyc2VkLgorCQkJaWYgKCB0ZXh0MS5sZW5ndGggPiB0ZXh0Mi5sZW5n
dGggKSB7CisJCQkJZGlmZnNbIDAgXVsgMCBdID0gZGlmZnNbIDIgXVsgMCBdID0gRElGRl9ERUxF
VEU7CisJCQl9CisJCQlyZXR1cm4gZGlmZnM7CisJCX0KKworCQlpZiAoIHNob3J0dGV4dC5sZW5n
dGggPT09IDEgKSB7CisJCQkvLyBTaW5nbGUgY2hhcmFjdGVyIHN0cmluZy4KKwkJCS8vIEFmdGVy
IHRoZSBwcmV2aW91cyBzcGVlZHVwLCB0aGUgY2hhcmFjdGVyIGNhbid0IGJlIGFuIGVxdWFsaXR5
LgorCQkJcmV0dXJuIFsKKwkJCQlbIERJRkZfREVMRVRFLCB0ZXh0MSBdLAorCQkJCVsgRElGRl9J
TlNFUlQsIHRleHQyIF0KKwkJCV07CisJCX0KKworCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIHBy
b2JsZW0gY2FuIGJlIHNwbGl0IGluIHR3by4KKwkJaG0gPSB0aGlzLmRpZmZIYWxmTWF0Y2goIHRl
eHQxLCB0ZXh0MiApOworCQlpZiAoIGhtICkgeworCQkJLy8gQSBoYWxmLW1hdGNoIHdhcyBmb3Vu
ZCwgc29ydCBvdXQgdGhlIHJldHVybiBkYXRhLgorCQkJdGV4dDFBID0gaG1bIDAgXTsKKwkJCXRl
eHQxQiA9IGhtWyAxIF07CisJCQl0ZXh0MkEgPSBobVsgMiBdOworCQkJdGV4dDJCID0gaG1bIDMg
XTsKKwkJCW1pZENvbW1vbiA9IGhtWyA0IF07CisJCQkvLyBTZW5kIGJvdGggcGFpcnMgb2ZmIGZv
ciBzZXBhcmF0ZSBwcm9jZXNzaW5nLgorCQkJZGlmZnNBID0gdGhpcy5EaWZmTWFpbiggdGV4dDFB
LCB0ZXh0MkEsIGNoZWNrbGluZXMsIGRlYWRsaW5lICk7CisJCQlkaWZmc0IgPSB0aGlzLkRpZmZN
YWluKCB0ZXh0MUIsIHRleHQyQiwgY2hlY2tsaW5lcywgZGVhZGxpbmUgKTsKKwkJCS8vIE1lcmdl
IHRoZSByZXN1bHRzLgorCQkJcmV0dXJuIGRpZmZzQS5jb25jYXQoIFsKKwkJCQlbIERJRkZfRVFV
QUwsIG1pZENvbW1vbiBdCisJCQldLCBkaWZmc0IgKTsKKwkJfQorCisJCWlmICggY2hlY2tsaW5l
cyAmJiB0ZXh0MS5sZW5ndGggPiAxMDAgJiYgdGV4dDIubGVuZ3RoID4gMTAwICkgeworCQkJcmV0
dXJuIHRoaXMuZGlmZkxpbmVNb2RlKCB0ZXh0MSwgdGV4dDIsIGRlYWRsaW5lICk7CisJCX0KKwor
CQlyZXR1cm4gdGhpcy5kaWZmQmlzZWN0KCB0ZXh0MSwgdGV4dDIsIGRlYWRsaW5lICk7CisJfTsK
KworCS8qKgorCSAqIERvIHRoZSB0d28gdGV4dHMgc2hhcmUgYSBzdWJzdHJpbmcgd2hpY2ggaXMg
YXQgbGVhc3QgaGFsZiB0aGUgbGVuZ3RoIG9mIHRoZQorCSAqIGxvbmdlciB0ZXh0PworCSAqIFRo
aXMgc3BlZWR1cCBjYW4gcHJvZHVjZSBub24tbWluaW1hbCBkaWZmcy4KKwkgKiBAcGFyYW0ge3N0
cmluZ30gdGV4dDEgRmlyc3Qgc3RyaW5nLgorCSAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0MiBTZWNv
bmQgc3RyaW5nLgorCSAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSBGaXZlIGVsZW1lbnQgQXJy
YXksIGNvbnRhaW5pbmcgdGhlIHByZWZpeCBvZgorCSAqICAgICB0ZXh0MSwgdGhlIHN1ZmZpeCBv
ZiB0ZXh0MSwgdGhlIHByZWZpeCBvZiB0ZXh0MiwgdGhlIHN1ZmZpeCBvZgorCSAqICAgICB0ZXh0
MiBhbmQgdGhlIGNvbW1vbiBtaWRkbGUuICBPciBudWxsIGlmIHRoZXJlIHdhcyBubyBtYXRjaC4K
KwkgKiBAcHJpdmF0ZQorCSAqLworCURpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmSGFsZk1h
dGNoID0gZnVuY3Rpb24oIHRleHQxLCB0ZXh0MiApIHsKKwkJdmFyIGxvbmd0ZXh0LCBzaG9ydHRl
eHQsIGRtcCwKKwkJCXRleHQxQSwgdGV4dDJCLCB0ZXh0MkEsIHRleHQxQiwgbWlkQ29tbW9uLAor
CQkJaG0xLCBobTIsIGhtOworCisJCWxvbmd0ZXh0ID0gdGV4dDEubGVuZ3RoID4gdGV4dDIubGVu
Z3RoID8gdGV4dDEgOiB0ZXh0MjsKKwkJc2hvcnR0ZXh0ID0gdGV4dDEubGVuZ3RoID4gdGV4dDIu
bGVuZ3RoID8gdGV4dDIgOiB0ZXh0MTsKKwkJaWYgKCBsb25ndGV4dC5sZW5ndGggPCA0IHx8IHNo
b3J0dGV4dC5sZW5ndGggKiAyIDwgbG9uZ3RleHQubGVuZ3RoICkgeworCQkJcmV0dXJuIG51bGw7
IC8vIFBvaW50bGVzcy4KKwkJfQorCQlkbXAgPSB0aGlzOyAvLyAndGhpcycgYmVjb21lcyAnd2lu
ZG93JyBpbiBhIGNsb3N1cmUuCisKKwkJLyoqCisJCSAqIERvZXMgYSBzdWJzdHJpbmcgb2Ygc2hv
cnR0ZXh0IGV4aXN0IHdpdGhpbiBsb25ndGV4dCBzdWNoIHRoYXQgdGhlIHN1YnN0cmluZworCQkg
KiBpcyBhdCBsZWFzdCBoYWxmIHRoZSBsZW5ndGggb2YgbG9uZ3RleHQ/CisJCSAqIENsb3N1cmUs
IGJ1dCBkb2VzIG5vdCByZWZlcmVuY2UgYW55IGV4dGVybmFsIHZhcmlhYmxlcy4KKwkJICogQHBh
cmFtIHtzdHJpbmd9IGxvbmd0ZXh0IExvbmdlciBzdHJpbmcuCisJCSAqIEBwYXJhbSB7c3RyaW5n
fSBzaG9ydHRleHQgU2hvcnRlciBzdHJpbmcuCisJCSAqIEBwYXJhbSB7bnVtYmVyfSBpIFN0YXJ0
IGluZGV4IG9mIHF1YXJ0ZXIgbGVuZ3RoIHN1YnN0cmluZyB3aXRoaW4gbG9uZ3RleHQuCisJCSAq
IEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSBGaXZlIGVsZW1lbnQgQXJyYXksIGNvbnRhaW5pbmcg
dGhlIHByZWZpeCBvZgorCQkgKiAgICAgbG9uZ3RleHQsIHRoZSBzdWZmaXggb2YgbG9uZ3RleHQs
IHRoZSBwcmVmaXggb2Ygc2hvcnR0ZXh0LCB0aGUgc3VmZml4CisJCSAqICAgICBvZiBzaG9ydHRl
eHQgYW5kIHRoZSBjb21tb24gbWlkZGxlLiAgT3IgbnVsbCBpZiB0aGVyZSB3YXMgbm8gbWF0Y2gu
CisJCSAqIEBwcml2YXRlCisJCSAqLworCQlmdW5jdGlvbiBkaWZmSGFsZk1hdGNoSSggbG9uZ3Rl
eHQsIHNob3J0dGV4dCwgaSApIHsKKwkJCXZhciBzZWVkLCBqLCBiZXN0Q29tbW9uLCBwcmVmaXhM
ZW5ndGgsIHN1ZmZpeExlbmd0aCwKKwkJCQliZXN0TG9uZ3RleHRBLCBiZXN0TG9uZ3RleHRCLCBi
ZXN0U2hvcnR0ZXh0QSwgYmVzdFNob3J0dGV4dEI7CisJCQkvLyBTdGFydCB3aXRoIGEgMS80IGxl
bmd0aCBzdWJzdHJpbmcgYXQgcG9zaXRpb24gaSBhcyBhIHNlZWQuCisJCQlzZWVkID0gbG9uZ3Rl
eHQuc3Vic3RyaW5nKCBpLCBpICsgTWF0aC5mbG9vciggbG9uZ3RleHQubGVuZ3RoIC8gNCApICk7
CisJCQlqID0gLTE7CisJCQliZXN0Q29tbW9uID0gIiI7CisJCQl3aGlsZSAoICggaiA9IHNob3J0
dGV4dC5pbmRleE9mKCBzZWVkLCBqICsgMSApICkgIT09IC0xICkgeworCQkJCXByZWZpeExlbmd0
aCA9IGRtcC5kaWZmQ29tbW9uUHJlZml4KCBsb25ndGV4dC5zdWJzdHJpbmcoIGkgKSwKKwkJCQkJ
c2hvcnR0ZXh0LnN1YnN0cmluZyggaiApICk7CisJCQkJc3VmZml4TGVuZ3RoID0gZG1wLmRpZmZD
b21tb25TdWZmaXgoIGxvbmd0ZXh0LnN1YnN0cmluZyggMCwgaSApLAorCQkJCQlzaG9ydHRleHQu
c3Vic3RyaW5nKCAwLCBqICkgKTsKKwkJCQlpZiAoIGJlc3RDb21tb24ubGVuZ3RoIDwgc3VmZml4
TGVuZ3RoICsgcHJlZml4TGVuZ3RoICkgeworCQkJCQliZXN0Q29tbW9uID0gc2hvcnR0ZXh0LnN1
YnN0cmluZyggaiAtIHN1ZmZpeExlbmd0aCwgaiApICsKKwkJCQkJCXNob3J0dGV4dC5zdWJzdHJp
bmcoIGosIGogKyBwcmVmaXhMZW5ndGggKTsKKwkJCQkJYmVzdExvbmd0ZXh0QSA9IGxvbmd0ZXh0
LnN1YnN0cmluZyggMCwgaSAtIHN1ZmZpeExlbmd0aCApOworCQkJCQliZXN0TG9uZ3RleHRCID0g
bG9uZ3RleHQuc3Vic3RyaW5nKCBpICsgcHJlZml4TGVuZ3RoICk7CisJCQkJCWJlc3RTaG9ydHRl
eHRBID0gc2hvcnR0ZXh0LnN1YnN0cmluZyggMCwgaiAtIHN1ZmZpeExlbmd0aCApOworCQkJCQli
ZXN0U2hvcnR0ZXh0QiA9IHNob3J0dGV4dC5zdWJzdHJpbmcoIGogKyBwcmVmaXhMZW5ndGggKTsK
KwkJCQl9CisJCQl9CisJCQlpZiAoIGJlc3RDb21tb24ubGVuZ3RoICogMiA+PSBsb25ndGV4dC5s
ZW5ndGggKSB7CisJCQkJcmV0dXJuIFsgYmVzdExvbmd0ZXh0QSwgYmVzdExvbmd0ZXh0QiwKKwkJ
CQkJYmVzdFNob3J0dGV4dEEsIGJlc3RTaG9ydHRleHRCLCBiZXN0Q29tbW9uCisJCQkJXTsKKwkJ
CX0gZWxzZSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCX0KKworCQkvLyBGaXJzdCBjaGVj
ayBpZiB0aGUgc2Vjb25kIHF1YXJ0ZXIgaXMgdGhlIHNlZWQgZm9yIGEgaGFsZi1tYXRjaC4KKwkJ
aG0xID0gZGlmZkhhbGZNYXRjaEkoIGxvbmd0ZXh0LCBzaG9ydHRleHQsCisJCQlNYXRoLmNlaWwo
IGxvbmd0ZXh0Lmxlbmd0aCAvIDQgKSApOworCQkvLyBDaGVjayBhZ2FpbiBiYXNlZCBvbiB0aGUg
dGhpcmQgcXVhcnRlci4KKwkJaG0yID0gZGlmZkhhbGZNYXRjaEkoIGxvbmd0ZXh0LCBzaG9ydHRl
eHQsCisJCQlNYXRoLmNlaWwoIGxvbmd0ZXh0Lmxlbmd0aCAvIDIgKSApOworCQlpZiAoICFobTEg
JiYgIWhtMiApIHsKKwkJCXJldHVybiBudWxsOworCQl9IGVsc2UgaWYgKCAhaG0yICkgeworCQkJ
aG0gPSBobTE7CisJCX0gZWxzZSBpZiAoICFobTEgKSB7CisJCQlobSA9IGhtMjsKKwkJfSBlbHNl
IHsKKwkJCS8vIEJvdGggbWF0Y2hlZC4gIFNlbGVjdCB0aGUgbG9uZ2VzdC4KKwkJCWhtID0gaG0x
WyA0IF0ubGVuZ3RoID4gaG0yWyA0IF0ubGVuZ3RoID8gaG0xIDogaG0yOworCQl9CisKKwkJLy8g
QSBoYWxmLW1hdGNoIHdhcyBmb3VuZCwgc29ydCBvdXQgdGhlIHJldHVybiBkYXRhLgorCQl0ZXh0
MUEsIHRleHQxQiwgdGV4dDJBLCB0ZXh0MkI7CisJCWlmICggdGV4dDEubGVuZ3RoID4gdGV4dDIu
bGVuZ3RoICkgeworCQkJdGV4dDFBID0gaG1bIDAgXTsKKwkJCXRleHQxQiA9IGhtWyAxIF07CisJ
CQl0ZXh0MkEgPSBobVsgMiBdOworCQkJdGV4dDJCID0gaG1bIDMgXTsKKwkJfSBlbHNlIHsKKwkJ
CXRleHQyQSA9IGhtWyAwIF07CisJCQl0ZXh0MkIgPSBobVsgMSBdOworCQkJdGV4dDFBID0gaG1b
IDIgXTsKKwkJCXRleHQxQiA9IGhtWyAzIF07CisJCX0KKwkJbWlkQ29tbW9uID0gaG1bIDQgXTsK
KwkJcmV0dXJuIFsgdGV4dDFBLCB0ZXh0MUIsIHRleHQyQSwgdGV4dDJCLCBtaWRDb21tb24gXTsK
Kwl9OworCisJLyoqCisJICogRG8gYSBxdWljayBsaW5lLWxldmVsIGRpZmYgb24gYm90aCBzdHJp
bmdzLCB0aGVuIHJlZGlmZiB0aGUgcGFydHMgZm9yCisJICogZ3JlYXRlciBhY2N1cmFjeS4KKwkg
KiBUaGlzIHNwZWVkdXAgY2FuIHByb2R1Y2Ugbm9uLW1pbmltYWwgZGlmZnMuCisJICogQHBhcmFt
IHtzdHJpbmd9IHRleHQxIE9sZCBzdHJpbmcgdG8gYmUgZGlmZmVkLgorCSAqIEBwYXJhbSB7c3Ry
aW5nfSB0ZXh0MiBOZXcgc3RyaW5nIHRvIGJlIGRpZmZlZC4KKwkgKiBAcGFyYW0ge251bWJlcn0g
ZGVhZGxpbmUgVGltZSB3aGVuIHRoZSBkaWZmIHNob3VsZCBiZSBjb21wbGV0ZSBieS4KKwkgKiBA
cmV0dXJuIHshQXJyYXkuPCFEaWZmTWF0Y2hQYXRjaC5EaWZmPn0gQXJyYXkgb2YgZGlmZiB0dXBs
ZXMuCisJICogQHByaXZhdGUKKwkgKi8KKwlEaWZmTWF0Y2hQYXRjaC5wcm90b3R5cGUuZGlmZkxp
bmVNb2RlID0gZnVuY3Rpb24oIHRleHQxLCB0ZXh0MiwgZGVhZGxpbmUgKSB7CisJCXZhciBhLCBk
aWZmcywgbGluZWFycmF5LCBwb2ludGVyLCBjb3VudEluc2VydCwKKwkJCWNvdW50RGVsZXRlLCB0
ZXh0SW5zZXJ0LCB0ZXh0RGVsZXRlLCBqOworCQkvLyBTY2FuIHRoZSB0ZXh0IG9uIGEgbGluZS1i
eS1saW5lIGJhc2lzIGZpcnN0LgorCQlhID0gdGhpcy5kaWZmTGluZXNUb0NoYXJzKCB0ZXh0MSwg
dGV4dDIgKTsKKwkJdGV4dDEgPSBhLmNoYXJzMTsKKwkJdGV4dDIgPSBhLmNoYXJzMjsKKwkJbGlu
ZWFycmF5ID0gYS5saW5lQXJyYXk7CisKKwkJZGlmZnMgPSB0aGlzLkRpZmZNYWluKCB0ZXh0MSwg
dGV4dDIsIGZhbHNlLCBkZWFkbGluZSApOworCisJCS8vIENvbnZlcnQgdGhlIGRpZmYgYmFjayB0
byBvcmlnaW5hbCB0ZXh0LgorCQl0aGlzLmRpZmZDaGFyc1RvTGluZXMoIGRpZmZzLCBsaW5lYXJy
YXkgKTsKKwkJLy8gRWxpbWluYXRlIGZyZWFrIG1hdGNoZXMgKGUuZy4gYmxhbmsgbGluZXMpCisJ
CXRoaXMuZGlmZkNsZWFudXBTZW1hbnRpYyggZGlmZnMgKTsKKworCQkvLyBSZWRpZmYgYW55IHJl
cGxhY2VtZW50IGJsb2NrcywgdGhpcyB0aW1lIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIuCisJCS8v
IEFkZCBhIGR1bW15IGVudHJ5IGF0IHRoZSBlbmQuCisJCWRpZmZzLnB1c2goIFsgRElGRl9FUVVB
TCwgIiIgXSApOworCQlwb2ludGVyID0gMDsKKwkJY291bnREZWxldGUgPSAwOworCQljb3VudElu
c2VydCA9IDA7CisJCXRleHREZWxldGUgPSAiIjsKKwkJdGV4dEluc2VydCA9ICIiOworCQl3aGls
ZSAoIHBvaW50ZXIgPCBkaWZmcy5sZW5ndGggKSB7CisJCQlzd2l0Y2ggKCBkaWZmc1sgcG9pbnRl
ciBdWyAwIF0gKSB7CisJCQljYXNlIERJRkZfSU5TRVJUOgorCQkJCWNvdW50SW5zZXJ0Kys7CisJ
CQkJdGV4dEluc2VydCArPSBkaWZmc1sgcG9pbnRlciBdWyAxIF07CisJCQkJYnJlYWs7CisJCQlj
YXNlIERJRkZfREVMRVRFOgorCQkJCWNvdW50RGVsZXRlKys7CisJCQkJdGV4dERlbGV0ZSArPSBk
aWZmc1sgcG9pbnRlciBdWyAxIF07CisJCQkJYnJlYWs7CisJCQljYXNlIERJRkZfRVFVQUw6CisJ
CQkJLy8gVXBvbiByZWFjaGluZyBhbiBlcXVhbGl0eSwgY2hlY2sgZm9yIHByaW9yIHJlZHVuZGFu
Y2llcy4KKwkJCQlpZiAoIGNvdW50RGVsZXRlID49IDEgJiYgY291bnRJbnNlcnQgPj0gMSApIHsK
KwkJCQkJLy8gRGVsZXRlIHRoZSBvZmZlbmRpbmcgcmVjb3JkcyBhbmQgYWRkIHRoZSBtZXJnZWQg
b25lcy4KKwkJCQkJZGlmZnMuc3BsaWNlKCBwb2ludGVyIC0gY291bnREZWxldGUgLSBjb3VudElu
c2VydCwKKwkJCQkJCWNvdW50RGVsZXRlICsgY291bnRJbnNlcnQgKTsKKwkJCQkJcG9pbnRlciA9
IHBvaW50ZXIgLSBjb3VudERlbGV0ZSAtIGNvdW50SW5zZXJ0OworCQkJCQlhID0gdGhpcy5EaWZm
TWFpbiggdGV4dERlbGV0ZSwgdGV4dEluc2VydCwgZmFsc2UsIGRlYWRsaW5lICk7CisJCQkJCWZv
ciAoIGogPSBhLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tICkgeworCQkJCQkJZGlmZnMuc3BsaWNl
KCBwb2ludGVyLCAwLCBhWyBqIF0gKTsKKwkJCQkJfQorCQkJCQlwb2ludGVyID0gcG9pbnRlciAr
IGEubGVuZ3RoOworCQkJCX0KKwkJCQljb3VudEluc2VydCA9IDA7CisJCQkJY291bnREZWxldGUg
PSAwOworCQkJCXRleHREZWxldGUgPSAiIjsKKwkJCQl0ZXh0SW5zZXJ0ID0gIiI7CisJCQkJYnJl
YWs7CisJCQl9CisJCQlwb2ludGVyKys7CisJCX0KKwkJZGlmZnMucG9wKCk7IC8vIFJlbW92ZSB0
aGUgZHVtbXkgZW50cnkgYXQgdGhlIGVuZC4KKworCQlyZXR1cm4gZGlmZnM7CisJfTsKKworCS8q
KgorCSAqIEZpbmQgdGhlICdtaWRkbGUgc25ha2UnIG9mIGEgZGlmZiwgc3BsaXQgdGhlIHByb2Js
ZW0gaW4gdHdvCisJICogYW5kIHJldHVybiB0aGUgcmVjdXJzaXZlbHkgY29uc3RydWN0ZWQgZGlm
Zi4KKwkgKiBTZWUgTXllcnMgMTk4NiBwYXBlcjogQW4gTyhORCkgRGlmZmVyZW5jZSBBbGdvcml0
aG0gYW5kIEl0cyBWYXJpYXRpb25zLgorCSAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0MSBPbGQgc3Ry
aW5nIHRvIGJlIGRpZmZlZC4KKwkgKiBAcGFyYW0ge3N0cmluZ30gdGV4dDIgTmV3IHN0cmluZyB0
byBiZSBkaWZmZWQuCisJICogQHBhcmFtIHtudW1iZXJ9IGRlYWRsaW5lIFRpbWUgYXQgd2hpY2gg
dG8gYmFpbCBpZiBub3QgeWV0IGNvbXBsZXRlLgorCSAqIEByZXR1cm4geyFBcnJheS48IURpZmZN
YXRjaFBhdGNoLkRpZmY+fSBBcnJheSBvZiBkaWZmIHR1cGxlcy4KKwkgKiBAcHJpdmF0ZQorCSAq
LworCURpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQmlzZWN0ID0gZnVuY3Rpb24oIHRleHQx
LCB0ZXh0MiwgZGVhZGxpbmUgKSB7CisJCXZhciB0ZXh0MUxlbmd0aCwgdGV4dDJMZW5ndGgsIG1h
eEQsIHZPZmZzZXQsIHZMZW5ndGgsCisJCQl2MSwgdjIsIHgsIGRlbHRhLCBmcm9udCwgazFzdGFy
dCwgazFlbmQsIGsyc3RhcnQsCisJCQlrMmVuZCwgazJPZmZzZXQsIGsxT2Zmc2V0LCB4MSwgeDIs
IHkxLCB5MiwgZCwgazEsIGsyOworCQkvLyBDYWNoZSB0aGUgdGV4dCBsZW5ndGhzIHRvIHByZXZl
bnQgbXVsdGlwbGUgY2FsbHMuCisJCXRleHQxTGVuZ3RoID0gdGV4dDEubGVuZ3RoOworCQl0ZXh0
Mkxlbmd0aCA9IHRleHQyLmxlbmd0aDsKKwkJbWF4RCA9IE1hdGguY2VpbCggKCB0ZXh0MUxlbmd0
aCArIHRleHQyTGVuZ3RoICkgLyAyICk7CisJCXZPZmZzZXQgPSBtYXhEOworCQl2TGVuZ3RoID0g
MiAqIG1heEQ7CisJCXYxID0gbmV3IEFycmF5KCB2TGVuZ3RoICk7CisJCXYyID0gbmV3IEFycmF5
KCB2TGVuZ3RoICk7CisJCS8vIFNldHRpbmcgYWxsIGVsZW1lbnRzIHRvIC0xIGlzIGZhc3RlciBp
biBDaHJvbWUgJiBGaXJlZm94IHRoYW4gbWl4aW5nCisJCS8vIGludGVnZXJzIGFuZCB1bmRlZmlu
ZWQuCisJCWZvciAoIHggPSAwOyB4IDwgdkxlbmd0aDsgeCsrICkgeworCQkJdjFbIHggXSA9IC0x
OworCQkJdjJbIHggXSA9IC0xOworCQl9CisJCXYxWyB2T2Zmc2V0ICsgMSBdID0gMDsKKwkJdjJb
IHZPZmZzZXQgKyAxIF0gPSAwOworCQlkZWx0YSA9IHRleHQxTGVuZ3RoIC0gdGV4dDJMZW5ndGg7
CisJCS8vIElmIHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyBvZGQsIHRoZW4gdGhl
IGZyb250IHBhdGggd2lsbCBjb2xsaWRlCisJCS8vIHdpdGggdGhlIHJldmVyc2UgcGF0aC4KKwkJ
ZnJvbnQgPSAoIGRlbHRhICUgMiAhPT0gMCApOworCQkvLyBPZmZzZXRzIGZvciBzdGFydCBhbmQg
ZW5kIG9mIGsgbG9vcC4KKwkJLy8gUHJldmVudHMgbWFwcGluZyBvZiBzcGFjZSBiZXlvbmQgdGhl
IGdyaWQuCisJCWsxc3RhcnQgPSAwOworCQlrMWVuZCA9IDA7CisJCWsyc3RhcnQgPSAwOworCQlr
MmVuZCA9IDA7CisJCWZvciAoIGQgPSAwOyBkIDwgbWF4RDsgZCsrICkgeworCQkJLy8gQmFpbCBv
dXQgaWYgZGVhZGxpbmUgaXMgcmVhY2hlZC4KKwkJCWlmICggKCBuZXcgRGF0ZSgpICkuZ2V0VGlt
ZSgpID4gZGVhZGxpbmUgKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIFdhbGsgdGhlIGZy
b250IHBhdGggb25lIHN0ZXAuCisJCQlmb3IgKCBrMSA9IC1kICsgazFzdGFydDsgazEgPD0gZCAt
IGsxZW5kOyBrMSArPSAyICkgeworCQkJCWsxT2Zmc2V0ID0gdk9mZnNldCArIGsxOworCQkJCWlm
ICggazEgPT09IC1kIHx8ICggazEgIT09IGQgJiYgdjFbIGsxT2Zmc2V0IC0gMSBdIDwgdjFbIGsx
T2Zmc2V0ICsgMSBdICkgKSB7CisJCQkJCXgxID0gdjFbIGsxT2Zmc2V0ICsgMSBdOworCQkJCX0g
ZWxzZSB7CisJCQkJCXgxID0gdjFbIGsxT2Zmc2V0IC0gMSBdICsgMTsKKwkJCQl9CisJCQkJeTEg
PSB4MSAtIGsxOworCQkJCXdoaWxlICggeDEgPCB0ZXh0MUxlbmd0aCAmJiB5MSA8IHRleHQyTGVu
Z3RoICYmCisJCQkJCXRleHQxLmNoYXJBdCggeDEgKSA9PT0gdGV4dDIuY2hhckF0KCB5MSApICkg
eworCQkJCQl4MSsrOworCQkJCQl5MSsrOworCQkJCX0KKwkJCQl2MVsgazFPZmZzZXQgXSA9IHgx
OworCQkJCWlmICggeDEgPiB0ZXh0MUxlbmd0aCApIHsKKwkJCQkJLy8gUmFuIG9mZiB0aGUgcmln
aHQgb2YgdGhlIGdyYXBoLgorCQkJCQlrMWVuZCArPSAyOworCQkJCX0gZWxzZSBpZiAoIHkxID4g
dGV4dDJMZW5ndGggKSB7CisJCQkJCS8vIFJhbiBvZmYgdGhlIGJvdHRvbSBvZiB0aGUgZ3JhcGgu
CisJCQkJCWsxc3RhcnQgKz0gMjsKKwkJCQl9IGVsc2UgaWYgKCBmcm9udCApIHsKKwkJCQkJazJP
ZmZzZXQgPSB2T2Zmc2V0ICsgZGVsdGEgLSBrMTsKKwkJCQkJaWYgKCBrMk9mZnNldCA+PSAwICYm
IGsyT2Zmc2V0IDwgdkxlbmd0aCAmJiB2MlsgazJPZmZzZXQgXSAhPT0gLTEgKSB7CisJCQkJCQkv
LyBNaXJyb3IgeDIgb250byB0b3AtbGVmdCBjb29yZGluYXRlIHN5c3RlbS4KKwkJCQkJCXgyID0g
dGV4dDFMZW5ndGggLSB2MlsgazJPZmZzZXQgXTsKKwkJCQkJCWlmICggeDEgPj0geDIgKSB7CisJ
CQkJCQkJLy8gT3ZlcmxhcCBkZXRlY3RlZC4KKwkJCQkJCQlyZXR1cm4gdGhpcy5kaWZmQmlzZWN0
U3BsaXQoIHRleHQxLCB0ZXh0MiwgeDEsIHkxLCBkZWFkbGluZSApOworCQkJCQkJfQorCQkJCQl9
CisJCQkJfQorCQkJfQorCisJCQkvLyBXYWxrIHRoZSByZXZlcnNlIHBhdGggb25lIHN0ZXAuCisJ
CQlmb3IgKCBrMiA9IC1kICsgazJzdGFydDsgazIgPD0gZCAtIGsyZW5kOyBrMiArPSAyICkgewor
CQkJCWsyT2Zmc2V0ID0gdk9mZnNldCArIGsyOworCQkJCWlmICggazIgPT09IC1kIHx8ICggazIg
IT09IGQgJiYgdjJbIGsyT2Zmc2V0IC0gMSBdIDwgdjJbIGsyT2Zmc2V0ICsgMSBdICkgKSB7CisJ
CQkJCXgyID0gdjJbIGsyT2Zmc2V0ICsgMSBdOworCQkJCX0gZWxzZSB7CisJCQkJCXgyID0gdjJb
IGsyT2Zmc2V0IC0gMSBdICsgMTsKKwkJCQl9CisJCQkJeTIgPSB4MiAtIGsyOworCQkJCXdoaWxl
ICggeDIgPCB0ZXh0MUxlbmd0aCAmJiB5MiA8IHRleHQyTGVuZ3RoICYmCisJCQkJCXRleHQxLmNo
YXJBdCggdGV4dDFMZW5ndGggLSB4MiAtIDEgKSA9PT0KKwkJCQkJdGV4dDIuY2hhckF0KCB0ZXh0
Mkxlbmd0aCAtIHkyIC0gMSApICkgeworCQkJCQl4MisrOworCQkJCQl5MisrOworCQkJCX0KKwkJ
CQl2MlsgazJPZmZzZXQgXSA9IHgyOworCQkJCWlmICggeDIgPiB0ZXh0MUxlbmd0aCApIHsKKwkJ
CQkJLy8gUmFuIG9mZiB0aGUgbGVmdCBvZiB0aGUgZ3JhcGguCisJCQkJCWsyZW5kICs9IDI7CisJ
CQkJfSBlbHNlIGlmICggeTIgPiB0ZXh0Mkxlbmd0aCApIHsKKwkJCQkJLy8gUmFuIG9mZiB0aGUg
dG9wIG9mIHRoZSBncmFwaC4KKwkJCQkJazJzdGFydCArPSAyOworCQkJCX0gZWxzZSBpZiAoICFm
cm9udCApIHsKKwkJCQkJazFPZmZzZXQgPSB2T2Zmc2V0ICsgZGVsdGEgLSBrMjsKKwkJCQkJaWYg
KCBrMU9mZnNldCA+PSAwICYmIGsxT2Zmc2V0IDwgdkxlbmd0aCAmJiB2MVsgazFPZmZzZXQgXSAh
PT0gLTEgKSB7CisJCQkJCQl4MSA9IHYxWyBrMU9mZnNldCBdOworCQkJCQkJeTEgPSB2T2Zmc2V0
ICsgeDEgLSBrMU9mZnNldDsKKwkJCQkJCS8vIE1pcnJvciB4MiBvbnRvIHRvcC1sZWZ0IGNvb3Jk
aW5hdGUgc3lzdGVtLgorCQkJCQkJeDIgPSB0ZXh0MUxlbmd0aCAtIHgyOworCQkJCQkJaWYgKCB4
MSA+PSB4MiApIHsKKwkJCQkJCQkvLyBPdmVybGFwIGRldGVjdGVkLgorCQkJCQkJCXJldHVybiB0
aGlzLmRpZmZCaXNlY3RTcGxpdCggdGV4dDEsIHRleHQyLCB4MSwgeTEsIGRlYWRsaW5lICk7CisJ
CQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJLy8gRGlmZiB0b29rIHRvbyBsb25n
IGFuZCBoaXQgdGhlIGRlYWRsaW5lIG9yCisJCS8vIG51bWJlciBvZiBkaWZmcyBlcXVhbHMgbnVt
YmVyIG9mIGNoYXJhY3RlcnMsIG5vIGNvbW1vbmFsaXR5IGF0IGFsbC4KKwkJcmV0dXJuIFsKKwkJ
CVsgRElGRl9ERUxFVEUsIHRleHQxIF0sCisJCQlbIERJRkZfSU5TRVJULCB0ZXh0MiBdCisJCV07
CisJfTsKKworCS8qKgorCSAqIEdpdmVuIHRoZSBsb2NhdGlvbiBvZiB0aGUgJ21pZGRsZSBzbmFr
ZScsIHNwbGl0IHRoZSBkaWZmIGluIHR3byBwYXJ0cworCSAqIGFuZCByZWN1cnNlLgorCSAqIEBw
YXJhbSB7c3RyaW5nfSB0ZXh0MSBPbGQgc3RyaW5nIHRvIGJlIGRpZmZlZC4KKwkgKiBAcGFyYW0g
e3N0cmluZ30gdGV4dDIgTmV3IHN0cmluZyB0byBiZSBkaWZmZWQuCisJICogQHBhcmFtIHtudW1i
ZXJ9IHggSW5kZXggb2Ygc3BsaXQgcG9pbnQgaW4gdGV4dDEuCisJICogQHBhcmFtIHtudW1iZXJ9
IHkgSW5kZXggb2Ygc3BsaXQgcG9pbnQgaW4gdGV4dDIuCisJICogQHBhcmFtIHtudW1iZXJ9IGRl
YWRsaW5lIFRpbWUgYXQgd2hpY2ggdG8gYmFpbCBpZiBub3QgeWV0IGNvbXBsZXRlLgorCSAqIEBy
ZXR1cm4geyFBcnJheS48IURpZmZNYXRjaFBhdGNoLkRpZmY+fSBBcnJheSBvZiBkaWZmIHR1cGxl
cy4KKwkgKiBAcHJpdmF0ZQorCSAqLworCURpZmZNYXRjaFBhdGNoLnByb3RvdHlwZS5kaWZmQmlz
ZWN0U3BsaXQgPSBmdW5jdGlvbiggdGV4dDEsIHRleHQyLCB4LCB5LCBkZWFkbGluZSApIHsKKwkJ
dmFyIHRleHQxYSwgdGV4dDFiLCB0ZXh0MmEsIHRleHQyYiwgZGlmZnMsIGRpZmZzYjsKKwkJdGV4
dDFhID0gdGV4dDEuc3Vic3RyaW5nKCAwLCB4ICk7CisJCXRleHQyYSA9IHRleHQyLnN1YnN0cmlu
ZyggMCwgeSApOworCQl0ZXh0MWIgPSB0ZXh0MS5zdWJzdHJpbmcoIHggKTsKKwkJdGV4dDJiID0g
dGV4dDIuc3Vic3RyaW5nKCB5ICk7CisKKwkJLy8gQ29tcHV0ZSBib3RoIGRpZmZzIHNlcmlhbGx5
LgorCQlkaWZmcyA9IHRoaXMuRGlmZk1haW4oIHRleHQxYSwgdGV4dDJhLCBmYWxzZSwgZGVhZGxp
bmUgKTsKKwkJZGlmZnNiID0gdGhpcy5EaWZmTWFpbiggdGV4dDFiLCB0ZXh0MmIsIGZhbHNlLCBk
ZWFkbGluZSApOworCisJCXJldHVybiBkaWZmcy5jb25jYXQoIGRpZmZzYiApOworCX07CisKKwkv
KioKKwkgKiBSZWR1Y2UgdGhlIG51bWJlciBvZiBlZGl0cyBieSBlbGltaW5hdGluZyBzZW1hbnRp
Y2FsbHkgdHJpdmlhbCBlcXVhbGl0aWVzLgorCSAqIEBwYXJhbSB7IUFycmF5LjwhRGlmZk1hdGNo
UGF0Y2guRGlmZj59IGRpZmZzIEFycmF5IG9mIGRpZmYgdHVwbGVzLgorCSAqLworCURpZmZNYXRj
aFBhdGNoLnByb3RvdHlwZS5kaWZmQ2xlYW51cFNlbWFudGljID0gZnVuY3Rpb24oIGRpZmZzICkg
eworCQl2YXIgY2hhbmdlcywgZXF1YWxpdGllcywgZXF1YWxpdGllc0xlbmd0aCwgbGFzdGVxdWFs
aXR5LAorCQkJcG9pbnRlciwgbGVuZ3RoSW5zZXJ0aW9uczIsIGxlbmd0aERlbGV0aW9uczIsIGxl
bmd0aEluc2VydGlvbnMxLAorCQkJbGVuZ3RoRGVsZXRpb25zMSwgZGVsZXRpb24sIGluc2VydGlv
biwgb3ZlcmxhcExlbmd0aDEsIG92ZXJsYXBMZW5ndGgyOworCQljaGFuZ2VzID0gZmFsc2U7CisJ
CWVxdWFsaXRpZXMgPSBbXTsgLy8gU3RhY2sgb2YgaW5kaWNlcyB3aGVyZSBlcXVhbGl0aWVzIGFy
ZSBmb3VuZC4KKwkJZXF1YWxpdGllc0xlbmd0aCA9IDA7IC8vIEtlZXBpbmcgb3VyIG93biBsZW5n
dGggdmFyIGlzIGZhc3RlciBpbiBKUy4KKwkJLyoqIEB0eXBlIHs/c3RyaW5nfSAqLworCQlsYXN0
ZXF1YWxpdHkgPSBudWxsOworCQkvLyBBbHdheXMgZXF1YWwgdG8gZGlmZnNbZXF1YWxpdGllc1tl
cXVhbGl0aWVzTGVuZ3RoIC0gMV1dWzFdCisJCXBvaW50ZXIgPSAwOyAvLyBJbmRleCBvZiBjdXJy
ZW50IHBvc2l0aW9uLgorCQkvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGNoYW5nZWQgcHJp
b3IgdG8gdGhlIGVxdWFsaXR5LgorCQlsZW5ndGhJbnNlcnRpb25zMSA9IDA7CisJCWxlbmd0aERl
bGV0aW9uczEgPSAwOworCQkvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGNoYW5nZWQgYWZ0
ZXIgdGhlIGVxdWFsaXR5LgorCQlsZW5ndGhJbnNlcnRpb25zMiA9IDA7CisJCWxlbmd0aERlbGV0
aW9uczIgPSAwOworCQl3aGlsZSAoIHBvaW50ZXIgPCBkaWZmcy5sZW5ndGggKSB7CisJCQlpZiAo
IGRpZmZzWyBwb2ludGVyIF1bIDAgXSA9PT0gRElGRl9FUVVBTCApIHsgLy8gRXF1YWxpdHkgZm91
bmQuCisJCQkJZXF1YWxpdGllc1sgZXF1YWxpdGllc0xlbmd0aCsrIF0gPSBwb2ludGVyOworCQkJ
CWxlbmd0aEluc2VydGlvbnMxID0gbGVuZ3RoSW5zZXJ0aW9uczI7CisJCQkJbGVuZ3RoRGVsZXRp
b25zMSA9IGxlbmd0aERlbGV0aW9uczI7CisJCQkJbGVuZ3RoSW5zZXJ0aW9uczIgPSAwOworCQkJ
CWxlbmd0aERlbGV0aW9uczIgPSAwOworCQkJCWxhc3RlcXVhbGl0eSA9IGRpZmZzWyBwb2ludGVy
IF1bIDEgXTsKKwkJCX0gZWxzZSB7IC8vIEFuIGluc2VydGlvbiBvciBkZWxldGlvbi4KKwkJCQlp
ZiAoIGRpZmZzWyBwb2ludGVyIF1bIDAgXSA9PT0gRElGRl9JTlNFUlQgKSB7CisJCQkJCWxlbmd0
aEluc2VydGlvbnMyICs9IGRpZmZzWyBwb2ludGVyIF1bIDEgXS5sZW5ndGg7CisJCQkJfSBlbHNl
IHsKKwkJCQkJbGVuZ3RoRGVsZXRpb25zMiArPSBkaWZmc1sgcG9pbnRlciBdWyAxIF0ubGVuZ3Ro
OworCQkJCX0KKwkJCQkvLyBFbGltaW5hdGUgYW4gZXF1YWxpdHkgdGhhdCBpcyBzbWFsbGVyIG9y
IGVxdWFsIHRvIHRoZSBlZGl0cyBvbiBib3RoCisJCQkJLy8gc2lkZXMgb2YgaXQuCisJCQkJaWYg
KCBsYXN0ZXF1YWxpdHkgJiYgKCBsYXN0ZXF1YWxpdHkubGVuZ3RoIDw9CisJCQkJCQlNYXRoLm1h
eCggbGVuZ3RoSW5zZXJ0aW9uczEsIGxlbmd0aERlbGV0aW9uczEgKSApICYmCisJCQkJCQkoIGxh
c3RlcXVhbGl0eS5sZW5ndGggPD0gTWF0aC5tYXgoIGxlbmd0aEluc2VydGlvbnMyLAorCQkJCQkJ
CWxlbmd0aERlbGV0aW9uczIgKSApICkgeworCisJCQkJCS8vIER1cGxpY2F0ZSByZWNvcmQuCisJ
CQkJCWRpZmZzLnNwbGljZSgKKwkJCQkJCWVxdWFsaXRpZXNbIGVxdWFsaXRpZXNMZW5ndGggLSAx
IF0sCisJCQkJCQkwLAorCQkJCQkJWyBESUZGX0RFTEVURSwgbGFzdGVxdWFsaXR5IF0KKwkJCQkJ
KTsKKworCQkJCQkvLyBDaGFuZ2Ugc2Vjb25kIGNvcHkgdG8gaW5zZXJ0LgorCQkJCQlkaWZmc1sg
ZXF1YWxpdGllc1sgZXF1YWxpdGllc0xlbmd0aCAtIDEgXSArIDEgXVsgMCBdID0gRElGRl9JTlNF
UlQ7CisKKwkJCQkJLy8gVGhyb3cgYXdheSB0aGUgZXF1YWxpdHkgd2UganVzdCBkZWxldGVkLgor
CQkJCQllcXVhbGl0aWVzTGVuZ3RoLS07CisKKwkJCQkJLy8gVGhyb3cgYXdheSB0aGUgcHJldmlv
dXMgZXF1YWxpdHkgKGl0IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkKS4KKwkJCQkJZXF1YWxpdGll
c0xlbmd0aC0tOworCQkJCQlwb2ludGVyID0gZXF1YWxpdGllc0xlbmd0aCA+IDAgPyBlcXVhbGl0
aWVzWyBlcXVhbGl0aWVzTGVuZ3RoIC0gMSBdIDogLTE7CisKKwkJCQkJLy8gUmVzZXQgdGhlIGNv
dW50ZXJzLgorCQkJCQlsZW5ndGhJbnNlcnRpb25zMSA9IDA7CisJCQkJCWxlbmd0aERlbGV0aW9u
czEgPSAwOworCQkJCQlsZW5ndGhJbnNlcnRpb25zMiA9IDA7CisJCQkJCWxlbmd0aERlbGV0aW9u
czIgPSAwOworCQkJCQlsYXN0ZXF1YWxpdHkgPSBudWxsOworCQkJCQljaGFuZ2VzID0gdHJ1ZTsK
KwkJCQl9CisJCQl9CisJCQlwb2ludGVyKys7CisJCX0KKworCQkvLyBOb3JtYWxpemUgdGhlIGRp
ZmYuCisJCWlmICggY2hhbmdlcyApIHsKKwkJCXRoaXMuZGlmZkNsZWFudXBNZXJnZSggZGlmZnMg
KTsKKwkJfQorCisJCS8vIEZpbmQgYW55IG92ZXJsYXBzIGJldHdlZW4gZGVsZXRpb25zIGFuZCBp
bnNlcnRpb25zLgorCQkvLyBlLmc6IDxkZWw+YWJjeHh4PC9kZWw+PGlucz54eHhkZWY8L2lucz4K
KwkJLy8gICAtPiA8ZGVsPmFiYzwvZGVsPnh4eDxpbnM+ZGVmPC9pbnM+CisJCS8vIGUuZzogPGRl
bD54eHhhYmM8L2RlbD48aW5zPmRlZnh4eDwvaW5zPgorCQkvLyAgIC0+IDxpbnM+ZGVmPC9pbnM+
eHh4PGRlbD5hYmM8L2RlbD4KKwkJLy8gT25seSBleHRyYWN0IGFuIG92ZXJsYXAgaWYgaXQgaXMg
YXMgYmlnIGFzIHRoZSBlZGl0IGFoZWFkIG9yIGJlaGluZCBpdC4KKwkJcG9pbnRlciA9IDE7CisJ
CXdoaWxlICggcG9pbnRlciA8IGRpZmZzLmxlbmd0aCApIHsKKwkJCWlmICggZGlmZnNbIHBvaW50
ZXIgLSAxIF1bIDAgXSA9PT0gRElGRl9ERUxFVEUgJiYKKwkJCQkJZGlmZnNbIHBvaW50ZXIgXVsg
MCBdID09PSBESUZGX0lOU0VSVCApIHsKKwkJCQlkZWxldGlvbiA9IGRpZmZzWyBwb2ludGVyIC0g
MSBdWyAxIF07CisJCQkJaW5zZXJ0aW9uID0gZGlmZnNbIHBvaW50ZXIgXVsgMSBdOworCQkJCW92
ZXJsYXBMZW5ndGgxID0gdGhpcy5kaWZmQ29tbW9uT3ZlcmxhcCggZGVsZXRpb24sIGluc2VydGlv
biApOworCQkJCW92ZXJsYXBMZW5ndGgyID0gdGhpcy5kaWZmQ29tbW9uT3ZlcmxhcCggaW5zZXJ0
aW9uLCBkZWxldGlvbiApOworCQkJCWlmICggb3ZlcmxhcExlbmd0aDEgPj0gb3ZlcmxhcExlbmd0
aDIgKSB7CisJCQkJCWlmICggb3ZlcmxhcExlbmd0aDEgPj0gZGVsZXRpb24ubGVuZ3RoIC8gMiB8
fAorCQkJCQkJCW92ZXJsYXBMZW5ndGgxID49IGluc2VydGlvbi5sZW5ndGggLyAyICkgeworCQkJ
CQkJLy8gT3ZlcmxhcCBmb3VuZC4gIEluc2VydCBhbiBlcXVhbGl0eSBhbmQgdHJpbSB0aGUgc3Vy
cm91bmRpbmcgZWRpdHMuCisJCQkJCQlkaWZmcy5zcGxpY2UoCisJCQkJCQkJcG9pbnRlciwKKwkJ
CQkJCQkwLAorCQkJCQkJCVsgRElGRl9FUVVBTCwgaW5zZXJ0aW9uLnN1YnN0cmluZyggMCwgb3Zl
cmxhcExlbmd0aDEgKSBdCisJCQkJCQkpOworCQkJCQkJZGlmZnNbIHBvaW50ZXIgLSAxIF1bIDEg
XSA9CisJCQkJCQkJZGVsZXRpb24uc3Vic3RyaW5nKCAwLCBkZWxldGlvbi5sZW5ndGggLSBvdmVy
bGFwTGVuZ3RoMSApOworCQkJCQkJZGlmZnNbIHBvaW50ZXIgKyAxIF1bIDEgXSA9IGluc2VydGlv
bi5zdWJzdHJpbmcoIG92ZXJsYXBMZW5ndGgxICk7CisJCQkJCQlwb2ludGVyKys7CisJCQkJCX0K
KwkJCQl9IGVsc2UgeworCQkJCQlpZiAoIG92ZXJsYXBMZW5ndGgyID49IGRlbGV0aW9uLmxlbmd0
aCAvIDIgfHwKKwkJCQkJCQlvdmVybGFwTGVuZ3RoMiA+PSBpbnNlcnRpb24ubGVuZ3RoIC8gMiAp
IHsKKworCQkJCQkJLy8gUmV2ZXJzZSBvdmVybGFwIGZvdW5kLgorCQkJCQkJLy8gSW5zZXJ0IGFu
IGVxdWFsaXR5IGFuZCBzd2FwIGFuZCB0cmltIHRoZSBzdXJyb3VuZGluZyBlZGl0cy4KKwkJCQkJ
CWRpZmZzLnNwbGljZSgKKwkJCQkJCQlwb2ludGVyLAorCQkJCQkJCTAsCisJCQkJCQkJWyBESUZG
X0VRVUFMLCBkZWxldGlvbi5zdWJzdHJpbmcoIDAsIG92ZXJsYXBMZW5ndGgyICkgXQorCQkJCQkJ
KTsKKworCQkJCQkJZGlmZnNbIHBvaW50ZXIgLSAxIF1bIDAgXSA9IERJRkZfSU5TRVJUOworCQkJ
CQkJZGlmZnNbIHBvaW50ZXIgLSAxIF1bIDEgXSA9CisJCQkJCQkJaW5zZXJ0aW9uLnN1YnN0cmlu
ZyggMCwgaW5zZXJ0aW9uLmxlbmd0aCAtIG92ZXJsYXBMZW5ndGgyICk7CisJCQkJCQlkaWZmc1sg
cG9pbnRlciArIDEgXVsgMCBdID0gRElGRl9ERUxFVEU7CisJCQkJCQlkaWZmc1sgcG9pbnRlciAr
IDEgXVsgMSBdID0KKwkJCQkJCQlkZWxldGlvbi5zdWJzdHJpbmcoIG92ZXJsYXBMZW5ndGgyICk7
CisJCQkJCQlwb2ludGVyKys7CisJCQkJCX0KKwkJCQl9CisJCQkJcG9pbnRlcisrOworCQkJfQor
CQkJcG9pbnRlcisrOworCQl9CisJfTsKKworCS8qKgorCSAqIERldGVybWluZSBpZiB0aGUgc3Vm
Zml4IG9mIG9uZSBzdHJpbmcgaXMgdGhlIHByZWZpeCBvZiBhbm90aGVyLgorCSAqIEBwYXJhbSB7
c3RyaW5nfSB0ZXh0MSBGaXJzdCBzdHJpbmcuCisJICogQHBhcmFtIHtzdHJpbmd9IHRleHQyIFNl
Y29uZCBzdHJpbmcuCisJICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgY29tbW9uIHRvIHRoZSBlbmQgb2YgdGhlIGZpcnN0CisJICogICAgIHN0cmluZyBhbmQgdGhl
IHN0YXJ0IG9mIHRoZSBzZWNvbmQgc3RyaW5nLgorCSAqIEBwcml2YXRlCisJICovCisJRGlmZk1h
dGNoUGF0Y2gucHJvdG90eXBlLmRpZmZDb21tb25PdmVybGFwID0gZnVuY3Rpb24oIHRleHQxLCB0
ZXh0MiApIHsKKwkJdmFyIHRleHQxTGVuZ3RoLCB0ZXh0Mkxlbmd0aCwgdGV4dExlbmd0aCwKKwkJ
CWJlc3QsIGxlbmd0aCwgcGF0dGVybiwgZm91bmQ7CisJCS8vIENhY2hlIHRoZSB0ZXh0IGxlbmd0
aHMgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxscy4KKwkJdGV4dDFMZW5ndGggPSB0ZXh0MS5sZW5n
dGg7CisJCXRleHQyTGVuZ3RoID0gdGV4dDIubGVuZ3RoOworCQkvLyBFbGltaW5hdGUgdGhlIG51
bGwgY2FzZS4KKwkJaWYgKCB0ZXh0MUxlbmd0aCA9PT0gMCB8fCB0ZXh0Mkxlbmd0aCA9PT0gMCAp
IHsKKwkJCXJldHVybiAwOworCQl9CisJCS8vIFRydW5jYXRlIHRoZSBsb25nZXIgc3RyaW5nLgor
CQlpZiAoIHRleHQxTGVuZ3RoID4gdGV4dDJMZW5ndGggKSB7CisJCQl0ZXh0MSA9IHRleHQxLnN1
YnN0cmluZyggdGV4dDFMZW5ndGggLSB0ZXh0Mkxlbmd0aCApOworCQl9IGVsc2UgaWYgKCB0ZXh0
MUxlbmd0aCA8IHRleHQyTGVuZ3RoICkgeworCQkJdGV4dDIgPSB0ZXh0Mi5zdWJzdHJpbmcoIDAs
IHRleHQxTGVuZ3RoICk7CisJCX0KKwkJdGV4dExlbmd0aCA9IE1hdGgubWluKCB0ZXh0MUxlbmd0
aCwgdGV4dDJMZW5ndGggKTsKKwkJLy8gUXVpY2sgY2hlY2sgZm9yIHRoZSB3b3JzdCBjYXNlLgor
CQlpZiAoIHRleHQxID09PSB0ZXh0MiApIHsKKwkJCXJldHVybiB0ZXh0TGVuZ3RoOworCQl9CisK
KwkJLy8gU3RhcnQgYnkgbG9va2luZyBmb3IgYSBzaW5nbGUgY2hhcmFjdGVyIG1hdGNoCisJCS8v
IGFuZCBpbmNyZWFzZSBsZW5ndGggdW50aWwgbm8gbWF0Y2ggaXMgZm91bmQuCisJCS8vIFBlcmZv
cm1hbmNlIGFuYWx5c2lzOiBodHRwOi8vbmVpbC5mcmFzZXIubmFtZS9uZXdzLzIwMTAvMTEvMDQv
CisJCWJlc3QgPSAwOworCQlsZW5ndGggPSAxOworCQl3aGlsZSAoIHRydWUgKSB7CisJCQlwYXR0
ZXJuID0gdGV4dDEuc3Vic3RyaW5nKCB0ZXh0TGVuZ3RoIC0gbGVuZ3RoICk7CisJCQlmb3VuZCA9
IHRleHQyLmluZGV4T2YoIHBhdHRlcm4gKTsKKwkJCWlmICggZm91bmQgPT09IC0xICkgeworCQkJ
CXJldHVybiBiZXN0OworCQkJfQorCQkJbGVuZ3RoICs9IGZvdW5kOworCQkJaWYgKCBmb3VuZCA9
PT0gMCB8fCB0ZXh0MS5zdWJzdHJpbmcoIHRleHRMZW5ndGggLSBsZW5ndGggKSA9PT0KKwkJCQkJ
dGV4dDIuc3Vic3RyaW5nKCAwLCBsZW5ndGggKSApIHsKKwkJCQliZXN0ID0gbGVuZ3RoOworCQkJ
CWxlbmd0aCsrOworCQkJfQorCQl9CisJfTsKKworCS8qKgorCSAqIFNwbGl0IHR3byB0ZXh0cyBp
bnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuICBSZWR1Y2UgdGhlIHRleHRzIHRvIGEgc3RyaW5nIG9m
CisJICogaGFzaGVzIHdoZXJlIGVhY2ggVW5pY29kZSBjaGFyYWN0ZXIgcmVwcmVzZW50cyBvbmUg
bGluZS4KKwkgKiBAcGFyYW0ge3N0cmluZ30gdGV4dDEgRmlyc3Qgc3RyaW5nLgorCSAqIEBwYXJh
bSB7c3RyaW5nfSB0ZXh0MiBTZWNvbmQgc3RyaW5nLgorCSAqIEByZXR1cm4ge3tjaGFyczE6IHN0
cmluZywgY2hhcnMyOiBzdHJpbmcsIGxpbmVBcnJheTogIUFycmF5LjxzdHJpbmc+fX0KKwkgKiAg
ICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVuY29kZWQgdGV4dDEsIHRoZSBlbmNvZGVkIHRl
eHQyIGFuZAorCSAqICAgICB0aGUgYXJyYXkgb2YgdW5pcXVlIHN0cmluZ3MuCisJICogICAgIFRo
ZSB6ZXJvdGggZWxlbWVudCBvZiB0aGUgYXJyYXkgb2YgdW5pcXVlIHN0cmluZ3MgaXMgaW50ZW50
aW9uYWxseSBibGFuay4KKwkgKiBAcHJpdmF0ZQorCSAqLworCURpZmZNYXRjaFBhdGNoLnByb3Rv
dHlwZS5kaWZmTGluZXNUb0NoYXJzID0gZnVuY3Rpb24oIHRleHQxLCB0ZXh0MiApIHsKKwkJdmFy
IGxpbmVBcnJheSwgbGluZUhhc2gsIGNoYXJzMSwgY2hhcnMyOworCQlsaW5lQXJyYXkgPSBbXTsg
Ly8gZS5nLiBsaW5lQXJyYXlbNF0gPT09ICdIZWxsb1xuJworCQlsaW5lSGFzaCA9IHt9OyAvLyBl
LmcuIGxpbmVIYXNoWydIZWxsb1xuJ10gPT09IDQKKworCQkvLyAnXHgwMCcgaXMgYSB2YWxpZCBj
aGFyYWN0ZXIsIGJ1dCB2YXJpb3VzIGRlYnVnZ2VycyBkb24ndCBsaWtlIGl0LgorCQkvLyBTbyB3
ZSdsbCBpbnNlcnQgYSBqdW5rIGVudHJ5IHRvIGF2b2lkIGdlbmVyYXRpbmcgYSBudWxsIGNoYXJh
Y3Rlci4KKwkJbGluZUFycmF5WyAwIF0gPSAiIjsKKworCQkvKioKKwkJICogU3BsaXQgYSB0ZXh0
IGludG8gYW4gYXJyYXkgb2Ygc3RyaW5ncy4gIFJlZHVjZSB0aGUgdGV4dHMgdG8gYSBzdHJpbmcg
b2YKKwkJICogaGFzaGVzIHdoZXJlIGVhY2ggVW5pY29kZSBjaGFyYWN0ZXIgcmVwcmVzZW50cyBv
bmUgbGluZS4KKwkJICogTW9kaWZpZXMgbGluZWFycmF5IGFuZCBsaW5laGFzaCB0aHJvdWdoIGJl
aW5nIGEgY2xvc3VyZS4KKwkJICogQHBhcmFtIHtzdHJpbmd9IHRleHQgU3RyaW5nIHRvIGVuY29k
ZS4KKwkJICogQHJldHVybiB7c3RyaW5nfSBFbmNvZGVkIHN0cmluZy4KKwkJICogQHByaXZhdGUK
KwkJICovCisJCWZ1bmN0aW9uIGRpZmZMaW5lc1RvQ2hhcnNNdW5nZSggdGV4dCApIHsKKwkJCXZh
ciBjaGFycywgbGluZVN0YXJ0LCBsaW5lRW5kLCBsaW5lQXJyYXlMZW5ndGgsIGxpbmU7CisJCQlj
aGFycyA9ICIiOworCQkJLy8gV2FsayB0aGUgdGV4dCwgcHVsbGluZyBvdXQgYSBzdWJzdHJpbmcg
Zm9yIGVhY2ggbGluZS4KKwkJCS8vIHRleHQuc3BsaXQoJ1xuJykgd291bGQgd291bGQgdGVtcG9y
YXJpbHkgZG91YmxlIG91ciBtZW1vcnkgZm9vdHByaW50LgorCQkJLy8gTW9kaWZ5aW5nIHRleHQg
d291bGQgY3JlYXRlIG1hbnkgbGFyZ2Ugc3RyaW5ncyB0byBnYXJiYWdlIGNvbGxlY3QuCisJCQls
aW5lU3RhcnQgPSAwOworCQkJbGluZUVuZCA9IC0xOworCQkJLy8gS2VlcGluZyBvdXIgb3duIGxl
bmd0aCB2YXJpYWJsZSBpcyBmYXN0ZXIgdGhhbiBsb29raW5nIGl0IHVwLgorCQkJbGluZUFycmF5
TGVuZ3RoID0gbGluZUFycmF5Lmxlbmd0aDsKKwkJCXdoaWxlICggbGluZUVuZCA8IHRleHQubGVu
Z3RoIC0gMSApIHsKKwkJCQlsaW5lRW5kID0gdGV4dC5pbmRleE9mKCAiXG4iLCBsaW5lU3RhcnQg
KTsKKwkJCQlpZiAoIGxpbmVFbmQgPT09IC0xICkgeworCQkJCQlsaW5lRW5kID0gdGV4dC5sZW5n
dGggLSAxOworCQkJCX0KKwkJCQlsaW5lID0gdGV4dC5zdWJzdHJpbmcoIGxpbmVTdGFydCwgbGlu
ZUVuZCArIDEgKTsKKwkJCQlsaW5lU3RhcnQgPSBsaW5lRW5kICsgMTsKKworCQkJCWlmICggbGlu
ZUhhc2guaGFzT3duUHJvcGVydHkgPyBsaW5lSGFzaC5oYXNPd25Qcm9wZXJ0eSggbGluZSApIDoK
KwkJCQkJCQkoIGxpbmVIYXNoWyBsaW5lIF0gIT09IHVuZGVmaW5lZCApICkgeworCQkJCQljaGFy
cyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBsaW5lSGFzaFsgbGluZSBdICk7CisJCQkJfSBlbHNl
IHsKKwkJCQkJY2hhcnMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSggbGluZUFycmF5TGVuZ3RoICk7
CisJCQkJCWxpbmVIYXNoWyBsaW5lIF0gPSBsaW5lQXJyYXlMZW5ndGg7CisJCQkJCWxpbmVBcnJh
eVsgbGluZUFycmF5TGVuZ3RoKysgXSA9IGxpbmU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGNo
YXJzOworCQl9CisKKwkJY2hhcnMxID0gZGlmZkxpbmVzVG9DaGFyc011bmdlKCB0ZXh0MSApOwor
CQljaGFyczIgPSBkaWZmTGluZXNUb0NoYXJzTXVuZ2UoIHRleHQyICk7CisJCXJldHVybiB7CisJ
CQljaGFyczE6IGNoYXJzMSwKKwkJCWNoYXJzMjogY2hhcnMyLAorCQkJbGluZUFycmF5OiBsaW5l
QXJyYXkKKwkJfTsKKwl9OworCisJLyoqCisJICogUmVoeWRyYXRlIHRoZSB0ZXh0IGluIGEgZGlm
ZiBmcm9tIGEgc3RyaW5nIG9mIGxpbmUgaGFzaGVzIHRvIHJlYWwgbGluZXMgb2YKKwkgKiB0ZXh0
LgorCSAqIEBwYXJhbSB7IUFycmF5LjwhRGlmZk1hdGNoUGF0Y2guRGlmZj59IGRpZmZzIEFycmF5
IG9mIGRpZmYgdHVwbGVzLgorCSAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSBsaW5lQXJyYXkg
QXJyYXkgb2YgdW5pcXVlIHN0cmluZ3MuCisJICogQHByaXZhdGUKKwkgKi8KKwlEaWZmTWF0Y2hQ
YXRjaC5wcm90b3R5cGUuZGlmZkNoYXJzVG9MaW5lcyA9IGZ1bmN0aW9uKCBkaWZmcywgbGluZUFy
cmF5ICkgeworCQl2YXIgeCwgY2hhcnMsIHRleHQsIHk7CisJCWZvciAoIHggPSAwOyB4IDwgZGlm
ZnMubGVuZ3RoOyB4KysgKSB7CisJCQljaGFycyA9IGRpZmZzWyB4IF1bIDEgXTsKKwkJCXRleHQg
PSBbXTsKKwkJCWZvciAoIHkgPSAwOyB5IDwgY2hhcnMubGVuZ3RoOyB5KysgKSB7CisJCQkJdGV4
dFsgeSBdID0gbGluZUFycmF5WyBjaGFycy5jaGFyQ29kZUF0KCB5ICkgXTsKKwkJCX0KKwkJCWRp
ZmZzWyB4IF1bIDEgXSA9IHRleHQuam9pbiggIiIgKTsKKwkJfQorCX07CisKKwkvKioKKwkgKiBS
ZW9yZGVyIGFuZCBtZXJnZSBsaWtlIGVkaXQgc2VjdGlvbnMuICBNZXJnZSBlcXVhbGl0aWVzLgor
CSAqIEFueSBlZGl0IHNlY3Rpb24gY2FuIG1vdmUgYXMgbG9uZyBhcyBpdCBkb2Vzbid0IGNyb3Nz
IGFuIGVxdWFsaXR5LgorCSAqIEBwYXJhbSB7IUFycmF5LjwhRGlmZk1hdGNoUGF0Y2guRGlmZj59
IGRpZmZzIEFycmF5IG9mIGRpZmYgdHVwbGVzLgorCSAqLworCURpZmZNYXRjaFBhdGNoLnByb3Rv
dHlwZS5kaWZmQ2xlYW51cE1lcmdlID0gZnVuY3Rpb24oIGRpZmZzICkgeworCQl2YXIgcG9pbnRl
ciwgY291bnREZWxldGUsIGNvdW50SW5zZXJ0LCB0ZXh0SW5zZXJ0LCB0ZXh0RGVsZXRlLAorCQkJ
Y29tbW9ubGVuZ3RoLCBjaGFuZ2VzLCBkaWZmUG9pbnRlciwgcG9zaXRpb247CisJCWRpZmZzLnB1
c2goIFsgRElGRl9FUVVBTCwgIiIgXSApOyAvLyBBZGQgYSBkdW1teSBlbnRyeSBhdCB0aGUgZW5k
LgorCQlwb2ludGVyID0gMDsKKwkJY291bnREZWxldGUgPSAwOworCQljb3VudEluc2VydCA9IDA7
CisJCXRleHREZWxldGUgPSAiIjsKKwkJdGV4dEluc2VydCA9ICIiOworCQljb21tb25sZW5ndGg7
CisJCXdoaWxlICggcG9pbnRlciA8IGRpZmZzLmxlbmd0aCApIHsKKwkJCXN3aXRjaCAoIGRpZmZz
WyBwb2ludGVyIF1bIDAgXSApIHsKKwkJCWNhc2UgRElGRl9JTlNFUlQ6CisJCQkJY291bnRJbnNl
cnQrKzsKKwkJCQl0ZXh0SW5zZXJ0ICs9IGRpZmZzWyBwb2ludGVyIF1bIDEgXTsKKwkJCQlwb2lu
dGVyKys7CisJCQkJYnJlYWs7CisJCQljYXNlIERJRkZfREVMRVRFOgorCQkJCWNvdW50RGVsZXRl
Kys7CisJCQkJdGV4dERlbGV0ZSArPSBkaWZmc1sgcG9pbnRlciBdWyAxIF07CisJCQkJcG9pbnRl
cisrOworCQkJCWJyZWFrOworCQkJY2FzZSBESUZGX0VRVUFMOgorCQkJCS8vIFVwb24gcmVhY2hp
bmcgYW4gZXF1YWxpdHksIGNoZWNrIGZvciBwcmlvciByZWR1bmRhbmNpZXMuCisJCQkJaWYgKCBj
b3VudERlbGV0ZSArIGNvdW50SW5zZXJ0ID4gMSApIHsKKwkJCQkJaWYgKCBjb3VudERlbGV0ZSAh
PT0gMCAmJiBjb3VudEluc2VydCAhPT0gMCApIHsKKwkJCQkJCS8vIEZhY3RvciBvdXQgYW55IGNv
bW1vbiBwcmVmaXhpZXMuCisJCQkJCQljb21tb25sZW5ndGggPSB0aGlzLmRpZmZDb21tb25QcmVm
aXgoIHRleHRJbnNlcnQsIHRleHREZWxldGUgKTsKKwkJCQkJCWlmICggY29tbW9ubGVuZ3RoICE9
PSAwICkgeworCQkJCQkJCWlmICggKCBwb2ludGVyIC0gY291bnREZWxldGUgLSBjb3VudEluc2Vy
dCApID4gMCAmJgorCQkJCQkJCQkJZGlmZnNbIHBvaW50ZXIgLSBjb3VudERlbGV0ZSAtIGNvdW50
SW5zZXJ0IC0gMSBdWyAwIF0gPT09CisJCQkJCQkJCQlESUZGX0VRVUFMICkgeworCQkJCQkJCQlk
aWZmc1sgcG9pbnRlciAtIGNvdW50RGVsZXRlIC0gY291bnRJbnNlcnQgLSAxIF1bIDEgXSArPQor
CQkJCQkJCQkJdGV4dEluc2VydC5zdWJzdHJpbmcoIDAsIGNvbW1vbmxlbmd0aCApOworCQkJCQkJ
CX0gZWxzZSB7CisJCQkJCQkJCWRpZmZzLnNwbGljZSggMCwgMCwgWyBESUZGX0VRVUFMLAorCQkJ
CQkJCQkJdGV4dEluc2VydC5zdWJzdHJpbmcoIDAsIGNvbW1vbmxlbmd0aCApCisJCQkJCQkJCV0g
KTsKKwkJCQkJCQkJcG9pbnRlcisrOworCQkJCQkJCX0KKwkJCQkJCQl0ZXh0SW5zZXJ0ID0gdGV4
dEluc2VydC5zdWJzdHJpbmcoIGNvbW1vbmxlbmd0aCApOworCQkJCQkJCXRleHREZWxldGUgPSB0
ZXh0RGVsZXRlLnN1YnN0cmluZyggY29tbW9ubGVuZ3RoICk7CisJCQkJCQl9CisJCQkJCQkvLyBG
YWN0b3Igb3V0IGFueSBjb21tb24gc3VmZml4aWVzLgorCQkJCQkJY29tbW9ubGVuZ3RoID0gdGhp
cy5kaWZmQ29tbW9uU3VmZml4KCB0ZXh0SW5zZXJ0LCB0ZXh0RGVsZXRlICk7CisJCQkJCQlpZiAo
IGNvbW1vbmxlbmd0aCAhPT0gMCApIHsKKwkJCQkJCQlkaWZmc1sgcG9pbnRlciBdWyAxIF0gPSB0
ZXh0SW5zZXJ0LnN1YnN0cmluZyggdGV4dEluc2VydC5sZW5ndGggLQorCQkJCQkJCQkJY29tbW9u
bGVuZ3RoICkgKyBkaWZmc1sgcG9pbnRlciBdWyAxIF07CisJCQkJCQkJdGV4dEluc2VydCA9IHRl
eHRJbnNlcnQuc3Vic3RyaW5nKCAwLCB0ZXh0SW5zZXJ0Lmxlbmd0aCAtCisJCQkJCQkJCWNvbW1v
bmxlbmd0aCApOworCQkJCQkJCXRleHREZWxldGUgPSB0ZXh0RGVsZXRlLnN1YnN0cmluZyggMCwg
dGV4dERlbGV0ZS5sZW5ndGggLQorCQkJCQkJCQljb21tb25sZW5ndGggKTsKKwkJCQkJCX0KKwkJ
CQkJfQorCQkJCQkvLyBEZWxldGUgdGhlIG9mZmVuZGluZyByZWNvcmRzIGFuZCBhZGQgdGhlIG1l
cmdlZCBvbmVzLgorCQkJCQlpZiAoIGNvdW50RGVsZXRlID09PSAwICkgeworCQkJCQkJZGlmZnMu
c3BsaWNlKCBwb2ludGVyIC0gY291bnRJbnNlcnQsCisJCQkJCQkJY291bnREZWxldGUgKyBjb3Vu
dEluc2VydCwgWyBESUZGX0lOU0VSVCwgdGV4dEluc2VydCBdICk7CisJCQkJCX0gZWxzZSBpZiAo
IGNvdW50SW5zZXJ0ID09PSAwICkgeworCQkJCQkJZGlmZnMuc3BsaWNlKCBwb2ludGVyIC0gY291
bnREZWxldGUsCisJCQkJCQkJY291bnREZWxldGUgKyBjb3VudEluc2VydCwgWyBESUZGX0RFTEVU
RSwgdGV4dERlbGV0ZSBdICk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlkaWZmcy5zcGxpY2UoCisJ
CQkJCQkJcG9pbnRlciAtIGNvdW50RGVsZXRlIC0gY291bnRJbnNlcnQsCisJCQkJCQkJY291bnRE
ZWxldGUgKyBjb3VudEluc2VydCwKKwkJCQkJCQlbIERJRkZfREVMRVRFLCB0ZXh0RGVsZXRlIF0s
IFsgRElGRl9JTlNFUlQsIHRleHRJbnNlcnQgXQorCQkJCQkJKTsKKwkJCQkJfQorCQkJCQlwb2lu
dGVyID0gcG9pbnRlciAtIGNvdW50RGVsZXRlIC0gY291bnRJbnNlcnQgKworCQkJCQkJKCBjb3Vu
dERlbGV0ZSA/IDEgOiAwICkgKyAoIGNvdW50SW5zZXJ0ID8gMSA6IDAgKSArIDE7CisJCQkJfSBl
bHNlIGlmICggcG9pbnRlciAhPT0gMCAmJiBkaWZmc1sgcG9pbnRlciAtIDEgXVsgMCBdID09PSBE
SUZGX0VRVUFMICkgeworCisJCQkJCS8vIE1lcmdlIHRoaXMgZXF1YWxpdHkgd2l0aCB0aGUgcHJl
dmlvdXMgb25lLgorCQkJCQlkaWZmc1sgcG9pbnRlciAtIDEgXVsgMSBdICs9IGRpZmZzWyBwb2lu
dGVyIF1bIDEgXTsKKwkJCQkJZGlmZnMuc3BsaWNlKCBwb2ludGVyLCAxICk7CisJCQkJfSBlbHNl
IHsKKwkJCQkJcG9pbnRlcisrOworCQkJCX0KKwkJCQljb3VudEluc2VydCA9IDA7CisJCQkJY291
bnREZWxldGUgPSAwOworCQkJCXRleHREZWxldGUgPSAiIjsKKwkJCQl0ZXh0SW5zZXJ0ID0gIiI7
CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCBkaWZmc1sgZGlmZnMubGVuZ3RoIC0gMSBd
WyAxIF0gPT09ICIiICkgeworCQkJZGlmZnMucG9wKCk7IC8vIFJlbW92ZSB0aGUgZHVtbXkgZW50
cnkgYXQgdGhlIGVuZC4KKwkJfQorCisJCS8vIFNlY29uZCBwYXNzOiBsb29rIGZvciBzaW5nbGUg
ZWRpdHMgc3Vycm91bmRlZCBvbiBib3RoIHNpZGVzIGJ5IGVxdWFsaXRpZXMKKwkJLy8gd2hpY2gg
Y2FuIGJlIHNoaWZ0ZWQgc2lkZXdheXMgdG8gZWxpbWluYXRlIGFuIGVxdWFsaXR5LgorCQkvLyBl
Lmc6IEE8aW5zPkJBPC9pbnM+QyAtPiA8aW5zPkFCPC9pbnM+QUMKKwkJY2hhbmdlcyA9IGZhbHNl
OworCQlwb2ludGVyID0gMTsKKworCQkvLyBJbnRlbnRpb25hbGx5IGlnbm9yZSB0aGUgZmlyc3Qg
YW5kIGxhc3QgZWxlbWVudCAoZG9uJ3QgbmVlZCBjaGVja2luZykuCisJCXdoaWxlICggcG9pbnRl
ciA8IGRpZmZzLmxlbmd0aCAtIDEgKSB7CisJCQlpZiAoIGRpZmZzWyBwb2ludGVyIC0gMSBdWyAw
IF0gPT09IERJRkZfRVFVQUwgJiYKKwkJCQkJZGlmZnNbIHBvaW50ZXIgKyAxIF1bIDAgXSA9PT0g
RElGRl9FUVVBTCApIHsKKworCQkJCWRpZmZQb2ludGVyID0gZGlmZnNbIHBvaW50ZXIgXVsgMSBd
OworCQkJCXBvc2l0aW9uID0gZGlmZlBvaW50ZXIuc3Vic3RyaW5nKAorCQkJCQlkaWZmUG9pbnRl
ci5sZW5ndGggLSBkaWZmc1sgcG9pbnRlciAtIDEgXVsgMSBdLmxlbmd0aAorCQkJCSk7CisKKwkJ
CQkvLyBUaGlzIGlzIGEgc2luZ2xlIGVkaXQgc3Vycm91bmRlZCBieSBlcXVhbGl0aWVzLgorCQkJ
CWlmICggcG9zaXRpb24gPT09IGRpZmZzWyBwb2ludGVyIC0gMSBdWyAxIF0gKSB7CisKKwkJCQkJ
Ly8gU2hpZnQgdGhlIGVkaXQgb3ZlciB0aGUgcHJldmlvdXMgZXF1YWxpdHkuCisJCQkJCWRpZmZz
WyBwb2ludGVyIF1bIDEgXSA9IGRpZmZzWyBwb2ludGVyIC0gMSBdWyAxIF0gKworCQkJCQkJZGlm
ZnNbIHBvaW50ZXIgXVsgMSBdLnN1YnN0cmluZyggMCwgZGlmZnNbIHBvaW50ZXIgXVsgMSBdLmxl
bmd0aCAtCisJCQkJCQkJZGlmZnNbIHBvaW50ZXIgLSAxIF1bIDEgXS5sZW5ndGggKTsKKwkJCQkJ
ZGlmZnNbIHBvaW50ZXIgKyAxIF1bIDEgXSA9CisJCQkJCQlkaWZmc1sgcG9pbnRlciAtIDEgXVsg
MSBdICsgZGlmZnNbIHBvaW50ZXIgKyAxIF1bIDEgXTsKKwkJCQkJZGlmZnMuc3BsaWNlKCBwb2lu
dGVyIC0gMSwgMSApOworCQkJCQljaGFuZ2VzID0gdHJ1ZTsKKwkJCQl9IGVsc2UgaWYgKCBkaWZm
UG9pbnRlci5zdWJzdHJpbmcoIDAsIGRpZmZzWyBwb2ludGVyICsgMSBdWyAxIF0ubGVuZ3RoICkg
PT09CisJCQkJCQlkaWZmc1sgcG9pbnRlciArIDEgXVsgMSBdICkgeworCisJCQkJCS8vIFNoaWZ0
IHRoZSBlZGl0IG92ZXIgdGhlIG5leHQgZXF1YWxpdHkuCisJCQkJCWRpZmZzWyBwb2ludGVyIC0g
MSBdWyAxIF0gKz0gZGlmZnNbIHBvaW50ZXIgKyAxIF1bIDEgXTsKKwkJCQkJZGlmZnNbIHBvaW50
ZXIgXVsgMSBdID0KKwkJCQkJCWRpZmZzWyBwb2ludGVyIF1bIDEgXS5zdWJzdHJpbmcoIGRpZmZz
WyBwb2ludGVyICsgMSBdWyAxIF0ubGVuZ3RoICkgKworCQkJCQkJZGlmZnNbIHBvaW50ZXIgKyAx
IF1bIDEgXTsKKwkJCQkJZGlmZnMuc3BsaWNlKCBwb2ludGVyICsgMSwgMSApOworCQkJCQljaGFu
Z2VzID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlwb2ludGVyKys7CisJCX0KKwkJLy8gSWYgc2hp
ZnRzIHdlcmUgbWFkZSwgdGhlIGRpZmYgbmVlZHMgcmVvcmRlcmluZyBhbmQgYW5vdGhlciBzaGlm
dCBzd2VlcC4KKwkJaWYgKCBjaGFuZ2VzICkgeworCQkJdGhpcy5kaWZmQ2xlYW51cE1lcmdlKCBk
aWZmcyApOworCQl9CisJfTsKKworCXJldHVybiBmdW5jdGlvbiggbywgbiApIHsKKwkJdmFyIGRp
ZmYsIG91dHB1dCwgdGV4dDsKKwkJZGlmZiA9IG5ldyBEaWZmTWF0Y2hQYXRjaCgpOworCQlvdXRw
dXQgPSBkaWZmLkRpZmZNYWluKCBvLCBuICk7CisJCWRpZmYuZGlmZkNsZWFudXBFZmZpY2llbmN5
KCBvdXRwdXQgKTsKKwkJdGV4dCA9IGRpZmYuZGlmZlByZXR0eUh0bWwoIG91dHB1dCApOworCisJ
CXJldHVybiB0ZXh0OworCX07Cit9KCkgKTsKKworLy8gR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBn
bG9iYWwgb2JqZWN0LCBsaWtlIHdpbmRvdyBpbiBicm93c2VycworfSggKGZ1bmN0aW9uKCkgewor
CXJldHVybiB0aGlzOworfSkoKSApKTsKKworKGZ1bmN0aW9uKCkgeworCisvLyBEb24ndCBsb2Fk
IHRoZSBIVE1MIFJlcG9ydGVyIG9uIG5vbi1Ccm93c2VyIGVudmlyb25tZW50cworaWYgKCB0eXBl
b2Ygd2luZG93ID09PSAidW5kZWZpbmVkIiB8fCAhd2luZG93LmRvY3VtZW50ICkgeworCXJldHVy
bjsKK30KKworLy8gRGVwcmVjYXRlZCBRVW5pdC5pbml0IC0gUmVmICM1MzAKKy8vIFJlLWluaXRp
YWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworUVVuaXQuaW5pdCA9IGZ1bmN0aW9uKCkg
eworCXZhciB0ZXN0cywgYmFubmVyLCByZXN1bHQsIHF1bml0LAorCQljb25maWcgPSBRVW5pdC5j
b25maWc7CisKKwljb25maWcuc3RhdHMgPSB7IGFsbDogMCwgYmFkOiAwIH07CisJY29uZmlnLm1v
ZHVsZVN0YXRzID0geyBhbGw6IDAsIGJhZDogMCB9OworCWNvbmZpZy5zdGFydGVkID0gMDsKKwlj
b25maWcudXBkYXRlUmF0ZSA9IDEwMDA7CisJY29uZmlnLmJsb2NraW5nID0gZmFsc2U7CisJY29u
ZmlnLmF1dG9zdGFydCA9IHRydWU7CisJY29uZmlnLmF1dG9ydW4gPSBmYWxzZTsKKwljb25maWcu
ZmlsdGVyID0gIiI7CisJY29uZmlnLnF1ZXVlID0gW107CisKKwkvLyBSZXR1cm4gb24gbm9uLWJy
b3dzZXIgZW52aXJvbm1lbnRzCisJLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbm90IGJyZWFrIG9u
IG5vZGUgdGVzdHMKKwlpZiAoIHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiICkgeworCQly
ZXR1cm47CisJfQorCisJcXVuaXQgPSBpZCggInF1bml0IiApOworCWlmICggcXVuaXQgKSB7CisJ
CXF1bml0LmlubmVySFRNTCA9CisJCQkiPGgxIGlkPSdxdW5pdC1oZWFkZXInPiIgKyBlc2NhcGVU
ZXh0KCBkb2N1bWVudC50aXRsZSApICsgIjwvaDE+IiArCisJCQkiPGgyIGlkPSdxdW5pdC1iYW5u
ZXInPjwvaDI+IiArCisJCQkiPGRpdiBpZD0ncXVuaXQtdGVzdHJ1bm5lci10b29sYmFyJz48L2Rp
dj4iICsKKwkJCSI8aDIgaWQ9J3F1bml0LXVzZXJBZ2VudCc+PC9oMj4iICsKKwkJCSI8b2wgaWQ9
J3F1bml0LXRlc3RzJz48L29sPiI7CisJfQorCisJdGVzdHMgPSBpZCggInF1bml0LXRlc3RzIiAp
OworCWJhbm5lciA9IGlkKCAicXVuaXQtYmFubmVyIiApOworCXJlc3VsdCA9IGlkKCAicXVuaXQt
dGVzdHJlc3VsdCIgKTsKKworCWlmICggdGVzdHMgKSB7CisJCXRlc3RzLmlubmVySFRNTCA9ICIi
OworCX0KKworCWlmICggYmFubmVyICkgeworCQliYW5uZXIuY2xhc3NOYW1lID0gIiI7CisJfQor
CisJaWYgKCByZXN1bHQgKSB7CisJCXJlc3VsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCByZXN1
bHQgKTsKKwl9CisKKwlpZiAoIHRlc3RzICkgeworCQlyZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCAicCIgKTsKKwkJcmVzdWx0LmlkID0gInF1bml0LXRlc3RyZXN1bHQiOworCQlyZXN1
bHQuY2xhc3NOYW1lID0gInJlc3VsdCI7CisJCXRlc3RzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl
KCByZXN1bHQsIHRlc3RzICk7CisJCXJlc3VsdC5pbm5lckhUTUwgPSAiUnVubmluZy4uLjxiciAv
PiYjMTYwOyI7CisJfQorfTsKKwordmFyIGNvbmZpZyA9IFFVbml0LmNvbmZpZywKKwljb2xsYXBz
ZU5leHQgPSBmYWxzZSwKKwloYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LAorCWRlZmluZWQgPSB7CisJCWRvY3VtZW50OiB3aW5kb3cuZG9jdW1lbnQgIT09IHVuZGVmaW5l
ZCwKKwkJc2Vzc2lvblN0b3JhZ2U6IChmdW5jdGlvbigpIHsKKwkJCXZhciB4ID0gInF1bml0LXRl
c3Qtc3RyaW5nIjsKKwkJCXRyeSB7CisJCQkJc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSggeCwgeCAp
OworCQkJCXNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oIHggKTsKKwkJCQlyZXR1cm4gdHJ1ZTsK
KwkJCX0gY2F0Y2ggKCBlICkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfSgpKQorCX0s
CisJbW9kdWxlc0xpc3QgPSBbXTsKKworLyoqCisqIEVzY2FwZSB0ZXh0IGZvciBhdHRyaWJ1dGUg
b3IgdGV4dCBjb250ZW50LgorKi8KK2Z1bmN0aW9uIGVzY2FwZVRleHQoIHMgKSB7CisJaWYgKCAh
cyApIHsKKwkJcmV0dXJuICIiOworCX0KKwlzID0gcyArICIiOworCisJLy8gQm90aCBzaW5nbGUg
cXVvdGVzIGFuZCBkb3VibGUgcXVvdGVzIChmb3IgYXR0cmlidXRlcykKKwlyZXR1cm4gcy5yZXBs
YWNlKCAvWyciPD4mXS9nLCBmdW5jdGlvbiggcyApIHsKKwkJc3dpdGNoICggcyApIHsKKwkJY2Fz
ZSAiJyI6CisJCQlyZXR1cm4gIiYjMDM5OyI7CisJCWNhc2UgIlwiIjoKKwkJCXJldHVybiAiJnF1
b3Q7IjsKKwkJY2FzZSAiPCI6CisJCQlyZXR1cm4gIiZsdDsiOworCQljYXNlICI+IjoKKwkJCXJl
dHVybiAiJmd0OyI7CisJCWNhc2UgIiYiOgorCQkJcmV0dXJuICImYW1wOyI7CisJCX0KKwl9KTsK
K30KKworLyoqCisgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtCisgKiBAcGFyYW0ge3N0cmlu
Z30gdHlwZQorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4KKyAqLworZnVuY3Rpb24gYWRkRXZlbnQo
IGVsZW0sIHR5cGUsIGZuICkgeworCWlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkgeworCisJ
CS8vIFN0YW5kYXJkcy1iYXNlZCBicm93c2VycworCQllbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5
cGUsIGZuLCBmYWxzZSApOworCX0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZlbnQgKSB7CisKKwkJ
Ly8gc3VwcG9ydDogSUUgPDkKKwkJZWxlbS5hdHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGZ1bmN0
aW9uKCkgeworCQkJdmFyIGV2ZW50ID0gd2luZG93LmV2ZW50OworCQkJaWYgKCAhZXZlbnQudGFy
Z2V0ICkgeworCQkJCWV2ZW50LnRhcmdldCA9IGV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7
CisJCQl9CisKKwkJCWZuLmNhbGwoIGVsZW0sIGV2ZW50ICk7CisJCX0pOworCX0KK30KKworLyoq
CisgKiBAcGFyYW0ge0FycmF5fE5vZGVMaXN0fSBlbGVtcworICogQHBhcmFtIHtzdHJpbmd9IHR5
cGUKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuCisgKi8KK2Z1bmN0aW9uIGFkZEV2ZW50cyggZWxl
bXMsIHR5cGUsIGZuICkgeworCXZhciBpID0gZWxlbXMubGVuZ3RoOworCXdoaWxlICggaS0tICkg
eworCQlhZGRFdmVudCggZWxlbXNbIGkgXSwgdHlwZSwgZm4gKTsKKwl9Cit9CisKK2Z1bmN0aW9u
IGhhc0NsYXNzKCBlbGVtLCBuYW1lICkgeworCXJldHVybiAoICIgIiArIGVsZW0uY2xhc3NOYW1l
ICsgIiAiICkuaW5kZXhPZiggIiAiICsgbmFtZSArICIgIiApID49IDA7Cit9CisKK2Z1bmN0aW9u
IGFkZENsYXNzKCBlbGVtLCBuYW1lICkgeworCWlmICggIWhhc0NsYXNzKCBlbGVtLCBuYW1lICkg
KSB7CisJCWVsZW0uY2xhc3NOYW1lICs9ICggZWxlbS5jbGFzc05hbWUgPyAiICIgOiAiIiApICsg
bmFtZTsKKwl9Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZUNsYXNzKCBlbGVtLCBuYW1lICkgeworCWlm
ICggaGFzQ2xhc3MoIGVsZW0sIG5hbWUgKSApIHsKKwkJcmVtb3ZlQ2xhc3MoIGVsZW0sIG5hbWUg
KTsKKwl9IGVsc2UgeworCQlhZGRDbGFzcyggZWxlbSwgbmFtZSApOworCX0KK30KKworZnVuY3Rp
b24gcmVtb3ZlQ2xhc3MoIGVsZW0sIG5hbWUgKSB7CisJdmFyIHNldCA9ICIgIiArIGVsZW0uY2xh
c3NOYW1lICsgIiAiOworCisJLy8gQ2xhc3MgbmFtZSBtYXkgYXBwZWFyIG11bHRpcGxlIHRpbWVz
CisJd2hpbGUgKCBzZXQuaW5kZXhPZiggIiAiICsgbmFtZSArICIgIiApID49IDAgKSB7CisJCXNl
dCA9IHNldC5yZXBsYWNlKCAiICIgKyBuYW1lICsgIiAiLCAiICIgKTsKKwl9CisKKwkvLyB0cmlt
IGZvciBwcmV0dGluZXNzCisJZWxlbS5jbGFzc05hbWUgPSB0eXBlb2Ygc2V0LnRyaW0gPT09ICJm
dW5jdGlvbiIgPyBzZXQudHJpbSgpIDogc2V0LnJlcGxhY2UoIC9eXHMrfFxzKyQvZywgIiIgKTsK
K30KKworZnVuY3Rpb24gaWQoIG5hbWUgKSB7CisJcmV0dXJuIGRlZmluZWQuZG9jdW1lbnQgJiYg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG5hbWUg
KTsKK30KKworZnVuY3Rpb24gZ2V0VXJsQ29uZmlnSHRtbCgpIHsKKwl2YXIgaSwgaiwgdmFsLAor
CQllc2NhcGVkLCBlc2NhcGVkVG9vbHRpcCwKKwkJc2VsZWN0aW9uID0gZmFsc2UsCisJCWxlbiA9
IGNvbmZpZy51cmxDb25maWcubGVuZ3RoLAorCQl1cmxDb25maWdIdG1sID0gIiI7CisKKwlmb3Ig
KCBpID0gMDsgaSA8IGxlbjsgaSsrICkgeworCQl2YWwgPSBjb25maWcudXJsQ29uZmlnWyBpIF07
CisJCWlmICggdHlwZW9mIHZhbCA9PT0gInN0cmluZyIgKSB7CisJCQl2YWwgPSB7CisJCQkJaWQ6
IHZhbCwKKwkJCQlsYWJlbDogdmFsCisJCQl9OworCQl9CisKKwkJZXNjYXBlZCA9IGVzY2FwZVRl
eHQoIHZhbC5pZCApOworCQllc2NhcGVkVG9vbHRpcCA9IGVzY2FwZVRleHQoIHZhbC50b29sdGlw
ICk7CisKKwkJaWYgKCBjb25maWdbIHZhbC5pZCBdID09PSB1bmRlZmluZWQgKSB7CisJCQljb25m
aWdbIHZhbC5pZCBdID0gUVVuaXQudXJsUGFyYW1zWyB2YWwuaWQgXTsKKwkJfQorCisJCWlmICgg
IXZhbC52YWx1ZSB8fCB0eXBlb2YgdmFsLnZhbHVlID09PSAic3RyaW5nIiApIHsKKwkJCXVybENv
bmZpZ0h0bWwgKz0gIjxpbnB1dCBpZD0ncXVuaXQtdXJsY29uZmlnLSIgKyBlc2NhcGVkICsKKwkJ
CQkiJyBuYW1lPSciICsgZXNjYXBlZCArICInIHR5cGU9J2NoZWNrYm94JyIgKworCQkJCSggdmFs
LnZhbHVlID8gIiB2YWx1ZT0nIiArIGVzY2FwZVRleHQoIHZhbC52YWx1ZSApICsgIiciIDogIiIg
KSArCisJCQkJKCBjb25maWdbIHZhbC5pZCBdID8gIiBjaGVja2VkPSdjaGVja2VkJyIgOiAiIiAp
ICsKKwkJCQkiIHRpdGxlPSciICsgZXNjYXBlZFRvb2x0aXAgKyAiJyAvPjxsYWJlbCBmb3I9J3F1
bml0LXVybGNvbmZpZy0iICsgZXNjYXBlZCArCisJCQkJIicgdGl0bGU9JyIgKyBlc2NhcGVkVG9v
bHRpcCArICInPiIgKyB2YWwubGFiZWwgKyAiPC9sYWJlbD4iOworCQl9IGVsc2UgeworCQkJdXJs
Q29uZmlnSHRtbCArPSAiPGxhYmVsIGZvcj0ncXVuaXQtdXJsY29uZmlnLSIgKyBlc2NhcGVkICsK
KwkJCQkiJyB0aXRsZT0nIiArIGVzY2FwZWRUb29sdGlwICsgIic+IiArIHZhbC5sYWJlbCArCisJ
CQkJIjogPC9sYWJlbD48c2VsZWN0IGlkPSdxdW5pdC11cmxjb25maWctIiArIGVzY2FwZWQgKwor
CQkJCSInIG5hbWU9JyIgKyBlc2NhcGVkICsgIicgdGl0bGU9JyIgKyBlc2NhcGVkVG9vbHRpcCAr
ICInPjxvcHRpb24+PC9vcHRpb24+IjsKKworCQkJaWYgKCBRVW5pdC5pcyggImFycmF5IiwgdmFs
LnZhbHVlICkgKSB7CisJCQkJZm9yICggaiA9IDA7IGogPCB2YWwudmFsdWUubGVuZ3RoOyBqKysg
KSB7CisJCQkJCWVzY2FwZWQgPSBlc2NhcGVUZXh0KCB2YWwudmFsdWVbIGogXSApOworCQkJCQl1
cmxDb25maWdIdG1sICs9ICI8b3B0aW9uIHZhbHVlPSciICsgZXNjYXBlZCArICInIiArCisJCQkJ
CQkoIGNvbmZpZ1sgdmFsLmlkIF0gPT09IHZhbC52YWx1ZVsgaiBdID8KKwkJCQkJCQkoIHNlbGVj
dGlvbiA9IHRydWUgKSAmJiAiIHNlbGVjdGVkPSdzZWxlY3RlZCciIDogIiIgKSArCisJCQkJCQki
PiIgKyBlc2NhcGVkICsgIjwvb3B0aW9uPiI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmb3Ig
KCBqIGluIHZhbC52YWx1ZSApIHsKKwkJCQkJaWYgKCBoYXNPd24uY2FsbCggdmFsLnZhbHVlLCBq
ICkgKSB7CisJCQkJCQl1cmxDb25maWdIdG1sICs9ICI8b3B0aW9uIHZhbHVlPSciICsgZXNjYXBl
VGV4dCggaiApICsgIiciICsKKwkJCQkJCQkoIGNvbmZpZ1sgdmFsLmlkIF0gPT09IGogPworCQkJ
CQkJCQkoIHNlbGVjdGlvbiA9IHRydWUgKSAmJiAiIHNlbGVjdGVkPSdzZWxlY3RlZCciIDogIiIg
KSArCisJCQkJCQkJIj4iICsgZXNjYXBlVGV4dCggdmFsLnZhbHVlWyBqIF0gKSArICI8L29wdGlv
bj4iOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKCBjb25maWdbIHZhbC5pZCBdICYmICFz
ZWxlY3Rpb24gKSB7CisJCQkJZXNjYXBlZCA9IGVzY2FwZVRleHQoIGNvbmZpZ1sgdmFsLmlkIF0g
KTsKKwkJCQl1cmxDb25maWdIdG1sICs9ICI8b3B0aW9uIHZhbHVlPSciICsgZXNjYXBlZCArCisJ
CQkJCSInIHNlbGVjdGVkPSdzZWxlY3RlZCcgZGlzYWJsZWQ9J2Rpc2FibGVkJz4iICsgZXNjYXBl
ZCArICI8L29wdGlvbj4iOworCQkJfQorCQkJdXJsQ29uZmlnSHRtbCArPSAiPC9zZWxlY3Q+IjsK
KwkJfQorCX0KKworCXJldHVybiB1cmxDb25maWdIdG1sOworfQorCisvLyBIYW5kbGUgImNsaWNr
IiBldmVudHMgb24gdG9vbGJhciBjaGVja2JveGVzIGFuZCAiY2hhbmdlIiBmb3Igc2VsZWN0IG1l
bnVzLgorLy8gVXBkYXRlcyB0aGUgVVJMIHdpdGggdGhlIG5ldyBzdGF0ZSBvZiBgY29uZmlnLnVy
bENvbmZpZ2AgdmFsdWVzLgorZnVuY3Rpb24gdG9vbGJhckNoYW5nZWQoKSB7CisJdmFyIHVwZGF0
ZWRVcmwsIHZhbHVlLAorCQlmaWVsZCA9IHRoaXMsCisJCXBhcmFtcyA9IHt9OworCisJLy8gRGV0
ZWN0IGlmIGZpZWxkIGlzIGEgc2VsZWN0IG1lbnUgb3IgYSBjaGVja2JveAorCWlmICggInNlbGVj
dGVkSW5kZXgiIGluIGZpZWxkICkgeworCQl2YWx1ZSA9IGZpZWxkLm9wdGlvbnNbIGZpZWxkLnNl
bGVjdGVkSW5kZXggXS52YWx1ZSB8fCB1bmRlZmluZWQ7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBm
aWVsZC5jaGVja2VkID8gKCBmaWVsZC5kZWZhdWx0VmFsdWUgfHwgdHJ1ZSApIDogdW5kZWZpbmVk
OworCX0KKworCXBhcmFtc1sgZmllbGQubmFtZSBdID0gdmFsdWU7CisJdXBkYXRlZFVybCA9IHNl
dFVybCggcGFyYW1zICk7CisKKwlpZiAoICJoaWRlcGFzc2VkIiA9PT0gZmllbGQubmFtZSAmJiAi
cmVwbGFjZVN0YXRlIiBpbiB3aW5kb3cuaGlzdG9yeSApIHsKKwkJY29uZmlnWyBmaWVsZC5uYW1l
IF0gPSB2YWx1ZSB8fCBmYWxzZTsKKwkJaWYgKCB2YWx1ZSApIHsKKwkJCWFkZENsYXNzKCBpZCgg
InF1bml0LXRlc3RzIiApLCAiaGlkZXBhc3MiICk7CisJCX0gZWxzZSB7CisJCQlyZW1vdmVDbGFz
cyggaWQoICJxdW5pdC10ZXN0cyIgKSwgImhpZGVwYXNzIiApOworCQl9CisKKwkJLy8gSXQgaXMg
bm90IG5lY2Vzc2FyeSB0byByZWZyZXNoIHRoZSB3aG9sZSBwYWdlCisJCXdpbmRvdy5oaXN0b3J5
LnJlcGxhY2VTdGF0ZSggbnVsbCwgIiIsIHVwZGF0ZWRVcmwgKTsKKwl9IGVsc2UgeworCQl3aW5k
b3cubG9jYXRpb24gPSB1cGRhdGVkVXJsOworCX0KK30KKworZnVuY3Rpb24gc2V0VXJsKCBwYXJh
bXMgKSB7CisJdmFyIGtleSwKKwkJcXVlcnlzdHJpbmcgPSAiPyI7CisKKwlwYXJhbXMgPSBRVW5p
dC5leHRlbmQoIFFVbml0LmV4dGVuZCgge30sIFFVbml0LnVybFBhcmFtcyApLCBwYXJhbXMgKTsK
KworCWZvciAoIGtleSBpbiBwYXJhbXMgKSB7CisJCWlmICggaGFzT3duLmNhbGwoIHBhcmFtcywg
a2V5ICkgKSB7CisJCQlpZiAoIHBhcmFtc1sga2V5IF0gPT09IHVuZGVmaW5lZCApIHsKKwkJCQlj
b250aW51ZTsKKwkJCX0KKwkJCXF1ZXJ5c3RyaW5nICs9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5
ICk7CisJCQlpZiAoIHBhcmFtc1sga2V5IF0gIT09IHRydWUgKSB7CisJCQkJcXVlcnlzdHJpbmcg
Kz0gIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCBwYXJhbXNbIGtleSBdICk7CisJCQl9CisJCQlx
dWVyeXN0cmluZyArPSAiJiI7CisJCX0KKwl9CisJcmV0dXJuIGxvY2F0aW9uLnByb3RvY29sICsg
Ii8vIiArIGxvY2F0aW9uLmhvc3QgKworCQlsb2NhdGlvbi5wYXRobmFtZSArIHF1ZXJ5c3RyaW5n
LnNsaWNlKCAwLCAtMSApOworfQorCitmdW5jdGlvbiBhcHBseVVybFBhcmFtcygpIHsKKwl2YXIg
c2VsZWN0ZWRNb2R1bGUsCisJCW1vZHVsZXNMaXN0ID0gaWQoICJxdW5pdC1tb2R1bGVmaWx0ZXIi
ICksCisJCWZpbHRlciA9IGlkKCAicXVuaXQtZmlsdGVyLWlucHV0IiApLnZhbHVlOworCisJc2Vs
ZWN0ZWRNb2R1bGUgPSBtb2R1bGVzTGlzdCA/CisJCWRlY29kZVVSSUNvbXBvbmVudCggbW9kdWxl
c0xpc3Qub3B0aW9uc1sgbW9kdWxlc0xpc3Quc2VsZWN0ZWRJbmRleCBdLnZhbHVlICkgOgorCQl1
bmRlZmluZWQ7CisKKwl3aW5kb3cubG9jYXRpb24gPSBzZXRVcmwoeworCQltb2R1bGU6ICggc2Vs
ZWN0ZWRNb2R1bGUgPT09ICIiICkgPyB1bmRlZmluZWQgOiBzZWxlY3RlZE1vZHVsZSwKKwkJZmls
dGVyOiAoIGZpbHRlciA9PT0gIiIgKSA/IHVuZGVmaW5lZCA6IGZpbHRlciwKKworCQkvLyBSZW1v
dmUgdGVzdElkIGZpbHRlcgorCQl0ZXN0SWQ6IHVuZGVmaW5lZAorCX0pOworfQorCitmdW5jdGlv
biB0b29sYmFyVXJsQ29uZmlnQ29udGFpbmVyKCkgeworCXZhciB1cmxDb25maWdDb250YWluZXIg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic3BhbiIgKTsKKworCXVybENvbmZpZ0NvbnRhaW5l
ci5pbm5lckhUTUwgPSBnZXRVcmxDb25maWdIdG1sKCk7CisJYWRkQ2xhc3MoIHVybENvbmZpZ0Nv
bnRhaW5lciwgInF1bml0LXVybC1jb25maWciICk7CisKKwkvLyBGb3Igb2xkSUUgc3VwcG9ydDoK
KwkvLyAqIEFkZCBoYW5kbGVycyB0byB0aGUgaW5kaXZpZHVhbCBlbGVtZW50cyBpbnN0ZWFkIG9m
IHRoZSBjb250YWluZXIKKwkvLyAqIFVzZSAiY2xpY2siIGluc3RlYWQgb2YgImNoYW5nZSIgZm9y
IGNoZWNrYm94ZXMKKwlhZGRFdmVudHMoIHVybENvbmZpZ0NvbnRhaW5lci5nZXRFbGVtZW50c0J5
VGFnTmFtZSggImlucHV0IiApLCAiY2xpY2siLCB0b29sYmFyQ2hhbmdlZCApOworCWFkZEV2ZW50
cyggdXJsQ29uZmlnQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAic2VsZWN0IiApLCAi
Y2hhbmdlIiwgdG9vbGJhckNoYW5nZWQgKTsKKworCXJldHVybiB1cmxDb25maWdDb250YWluZXI7
Cit9CisKK2Z1bmN0aW9uIHRvb2xiYXJMb29zZUZpbHRlcigpIHsKKwl2YXIgZmlsdGVyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCggImZvcm0iICksCisJCWxhYmVsID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCggImxhYmVsIiApLAorCQlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJp
bnB1dCIgKSwKKwkJYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImJ1dHRvbiIgKTsK
KworCWFkZENsYXNzKCBmaWx0ZXIsICJxdW5pdC1maWx0ZXIiICk7CisKKwlsYWJlbC5pbm5lckhU
TUwgPSAiRmlsdGVyOiAiOworCisJaW5wdXQudHlwZSA9ICJ0ZXh0IjsKKwlpbnB1dC52YWx1ZSA9
IGNvbmZpZy5maWx0ZXIgfHwgIiI7CisJaW5wdXQubmFtZSA9ICJmaWx0ZXIiOworCWlucHV0Lmlk
ID0gInF1bml0LWZpbHRlci1pbnB1dCI7CisKKwlidXR0b24uaW5uZXJIVE1MID0gIkdvIjsKKwor
CWxhYmVsLmFwcGVuZENoaWxkKCBpbnB1dCApOworCisJZmlsdGVyLmFwcGVuZENoaWxkKCBsYWJl
bCApOworCWZpbHRlci5hcHBlbmRDaGlsZCggYnV0dG9uICk7CisJYWRkRXZlbnQoIGZpbHRlciwg
InN1Ym1pdCIsIGZ1bmN0aW9uKCBldiApIHsKKwkJYXBwbHlVcmxQYXJhbXMoKTsKKworCQlpZiAo
IGV2ICYmIGV2LnByZXZlbnREZWZhdWx0ICkgeworCQkJZXYucHJldmVudERlZmF1bHQoKTsKKwkJ
fQorCisJCXJldHVybiBmYWxzZTsKKwl9KTsKKworCXJldHVybiBmaWx0ZXI7Cit9CisKK2Z1bmN0
aW9uIHRvb2xiYXJNb2R1bGVGaWx0ZXJIdG1sKCkgeworCXZhciBpLAorCQltb2R1bGVGaWx0ZXJI
dG1sID0gIiI7CisKKwlpZiAoICFtb2R1bGVzTGlzdC5sZW5ndGggKSB7CisJCXJldHVybiBmYWxz
ZTsKKwl9CisKKwltb2R1bGVzTGlzdC5zb3J0KGZ1bmN0aW9uKCBhLCBiICkgeworCQlyZXR1cm4g
YS5sb2NhbGVDb21wYXJlKCBiICk7CisJfSk7CisKKwltb2R1bGVGaWx0ZXJIdG1sICs9ICI8bGFi
ZWwgZm9yPSdxdW5pdC1tb2R1bGVmaWx0ZXInPk1vZHVsZTogPC9sYWJlbD4iICsKKwkJIjxzZWxl
Y3QgaWQ9J3F1bml0LW1vZHVsZWZpbHRlcicgbmFtZT0nbW9kdWxlZmlsdGVyJz48b3B0aW9uIHZh
bHVlPScnICIgKworCQkoIFFVbml0LnVybFBhcmFtcy5tb2R1bGUgPT09IHVuZGVmaW5lZCA/ICJz
ZWxlY3RlZD0nc2VsZWN0ZWQnIiA6ICIiICkgKworCQkiPjwgQWxsIE1vZHVsZXMgPjwvb3B0aW9u
PiI7CisKKwlmb3IgKCBpID0gMDsgaSA8IG1vZHVsZXNMaXN0Lmxlbmd0aDsgaSsrICkgeworCQlt
b2R1bGVGaWx0ZXJIdG1sICs9ICI8b3B0aW9uIHZhbHVlPSciICsKKwkJCWVzY2FwZVRleHQoIGVu
Y29kZVVSSUNvbXBvbmVudCggbW9kdWxlc0xpc3RbIGkgXSApICkgKyAiJyAiICsKKwkJCSggUVVu
aXQudXJsUGFyYW1zLm1vZHVsZSA9PT0gbW9kdWxlc0xpc3RbIGkgXSA/ICJzZWxlY3RlZD0nc2Vs
ZWN0ZWQnIiA6ICIiICkgKworCQkJIj4iICsgZXNjYXBlVGV4dCggbW9kdWxlc0xpc3RbIGkgXSAp
ICsgIjwvb3B0aW9uPiI7CisJfQorCW1vZHVsZUZpbHRlckh0bWwgKz0gIjwvc2VsZWN0PiI7CisK
KwlyZXR1cm4gbW9kdWxlRmlsdGVySHRtbDsKK30KKworZnVuY3Rpb24gdG9vbGJhck1vZHVsZUZp
bHRlcigpIHsKKwl2YXIgdG9vbGJhciA9IGlkKCAicXVuaXQtdGVzdHJ1bm5lci10b29sYmFyIiAp
LAorCQltb2R1bGVGaWx0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic3BhbiIgKSwKKwkJ
bW9kdWxlRmlsdGVySHRtbCA9IHRvb2xiYXJNb2R1bGVGaWx0ZXJIdG1sKCk7CisKKwlpZiAoICF0
b29sYmFyIHx8ICFtb2R1bGVGaWx0ZXJIdG1sICkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ
bW9kdWxlRmlsdGVyLnNldEF0dHJpYnV0ZSggImlkIiwgInF1bml0LW1vZHVsZWZpbHRlci1jb250
YWluZXIiICk7CisJbW9kdWxlRmlsdGVyLmlubmVySFRNTCA9IG1vZHVsZUZpbHRlckh0bWw7CisK
KwlhZGRFdmVudCggbW9kdWxlRmlsdGVyLmxhc3RDaGlsZCwgImNoYW5nZSIsIGFwcGx5VXJsUGFy
YW1zICk7CisKKwl0b29sYmFyLmFwcGVuZENoaWxkKCBtb2R1bGVGaWx0ZXIgKTsKK30KKworZnVu
Y3Rpb24gYXBwZW5kVG9vbGJhcigpIHsKKwl2YXIgdG9vbGJhciA9IGlkKCAicXVuaXQtdGVzdHJ1
bm5lci10b29sYmFyIiApOworCisJaWYgKCB0b29sYmFyICkgeworCQl0b29sYmFyLmFwcGVuZENo
aWxkKCB0b29sYmFyVXJsQ29uZmlnQ29udGFpbmVyKCkgKTsKKwkJdG9vbGJhci5hcHBlbmRDaGls
ZCggdG9vbGJhckxvb3NlRmlsdGVyKCkgKTsKKwl9Cit9CisKK2Z1bmN0aW9uIGFwcGVuZEhlYWRl
cigpIHsKKwl2YXIgaGVhZGVyID0gaWQoICJxdW5pdC1oZWFkZXIiICk7CisKKwlpZiAoIGhlYWRl
ciApIHsKKwkJaGVhZGVyLmlubmVySFRNTCA9ICI8YSBocmVmPSciICsKKwkJCXNldFVybCh7IGZp
bHRlcjogdW5kZWZpbmVkLCBtb2R1bGU6IHVuZGVmaW5lZCwgdGVzdElkOiB1bmRlZmluZWQgfSkg
KworCQkJIic+IiArIGhlYWRlci5pbm5lckhUTUwgKyAiPC9hPiAiOworCX0KK30KKworZnVuY3Rp
b24gYXBwZW5kQmFubmVyKCkgeworCXZhciBiYW5uZXIgPSBpZCggInF1bml0LWJhbm5lciIgKTsK
KworCWlmICggYmFubmVyICkgeworCQliYW5uZXIuY2xhc3NOYW1lID0gIiI7CisJfQorfQorCitm
dW5jdGlvbiBhcHBlbmRUZXN0UmVzdWx0cygpIHsKKwl2YXIgdGVzdHMgPSBpZCggInF1bml0LXRl
c3RzIiApLAorCQlyZXN1bHQgPSBpZCggInF1bml0LXRlc3RyZXN1bHQiICk7CisKKwlpZiAoIHJl
c3VsdCApIHsKKwkJcmVzdWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHJlc3VsdCApOworCX0K
KworCWlmICggdGVzdHMgKSB7CisJCXRlc3RzLmlubmVySFRNTCA9ICIiOworCQlyZXN1bHQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAicCIgKTsKKwkJcmVzdWx0LmlkID0gInF1bml0LXRlc3Ry
ZXN1bHQiOworCQlyZXN1bHQuY2xhc3NOYW1lID0gInJlc3VsdCI7CisJCXRlc3RzLnBhcmVudE5v
ZGUuaW5zZXJ0QmVmb3JlKCByZXN1bHQsIHRlc3RzICk7CisJCXJlc3VsdC5pbm5lckhUTUwgPSAi
UnVubmluZy4uLjxiciAvPiYjMTYwOyI7CisJfQorfQorCitmdW5jdGlvbiBzdG9yZUZpeHR1cmUo
KSB7CisJdmFyIGZpeHR1cmUgPSBpZCggInF1bml0LWZpeHR1cmUiICk7CisJaWYgKCBmaXh0dXJl
ICkgeworCQljb25maWcuZml4dHVyZSA9IGZpeHR1cmUuaW5uZXJIVE1MOworCX0KK30KKworZnVu
Y3Rpb24gYXBwZW5kRmlsdGVyZWRUZXN0KCkgeworCXZhciB0ZXN0SWQgPSBRVW5pdC5jb25maWcu
dGVzdElkOworCWlmICggIXRlc3RJZCB8fCB0ZXN0SWQubGVuZ3RoIDw9IDAgKSB7CisJCXJldHVy
biAiIjsKKwl9CisJcmV0dXJuICI8ZGl2IGlkPSdxdW5pdC1maWx0ZXJlZFRlc3QnPlJlcnVubmlu
ZyBzZWxlY3RlZCB0ZXN0czogIiArIHRlc3RJZC5qb2luKCIsICIpICsKKwkJIiA8YSBpZD0ncXVu
aXQtY2xlYXJGaWx0ZXInIGhyZWY9JyIgKworCQlzZXRVcmwoeyBmaWx0ZXI6IHVuZGVmaW5lZCwg
bW9kdWxlOiB1bmRlZmluZWQsIHRlc3RJZDogdW5kZWZpbmVkIH0pICsKKwkJIic+IiArICJSdW4g
YWxsIHRlc3RzIiArICI8L2E+PC9kaXY+IjsKK30KKworZnVuY3Rpb24gYXBwZW5kVXNlckFnZW50
KCkgeworCXZhciB1c2VyQWdlbnQgPSBpZCggInF1bml0LXVzZXJBZ2VudCIgKTsKKworCWlmICgg
dXNlckFnZW50ICkgeworCQl1c2VyQWdlbnQuaW5uZXJIVE1MID0gIiI7CisJCXVzZXJBZ2VudC5h
cHBlbmRDaGlsZCgKKwkJCWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKAorCQkJCSJRVW5pdCAiICsg
UVVuaXQudmVyc2lvbiArICI7ICIgKyBuYXZpZ2F0b3IudXNlckFnZW50CisJCQkpCisJCSk7CisJ
fQorfQorCitmdW5jdGlvbiBhcHBlbmRUZXN0c0xpc3QoIG1vZHVsZXMgKSB7CisJdmFyIGksIGws
IHgsIHosIHRlc3QsIG1vZHVsZU9iajsKKworCWZvciAoIGkgPSAwLCBsID0gbW9kdWxlcy5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CisJCW1vZHVsZU9iaiA9IG1vZHVsZXNbIGkgXTsKKworCQlpZiAo
IG1vZHVsZU9iai5uYW1lICkgeworCQkJbW9kdWxlc0xpc3QucHVzaCggbW9kdWxlT2JqLm5hbWUg
KTsKKwkJfQorCisJCWZvciAoIHggPSAwLCB6ID0gbW9kdWxlT2JqLnRlc3RzLmxlbmd0aDsgeCA8
IHo7IHgrKyApIHsKKwkJCXRlc3QgPSBtb2R1bGVPYmoudGVzdHNbIHggXTsKKworCQkJYXBwZW5k
VGVzdCggdGVzdC5uYW1lLCB0ZXN0LnRlc3RJZCwgbW9kdWxlT2JqLm5hbWUgKTsKKwkJfQorCX0K
K30KKworZnVuY3Rpb24gYXBwZW5kVGVzdCggbmFtZSwgdGVzdElkLCBtb2R1bGVOYW1lICkgewor
CXZhciB0aXRsZSwgcmVydW5UcmlnZ2VyLCB0ZXN0QmxvY2ssIGFzc2VydExpc3QsCisJCXRlc3Rz
ID0gaWQoICJxdW5pdC10ZXN0cyIgKTsKKworCWlmICggIXRlc3RzICkgeworCQlyZXR1cm47CisJ
fQorCisJdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic3Ryb25nIiApOworCXRpdGxl
LmlubmVySFRNTCA9IGdldE5hbWVIdG1sKCBuYW1lLCBtb2R1bGVOYW1lICk7CisKKwlyZXJ1blRy
aWdnZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKwlyZXJ1blRyaWdnZXIuaW5u
ZXJIVE1MID0gIlJlcnVuIjsKKwlyZXJ1blRyaWdnZXIuaHJlZiA9IHNldFVybCh7IHRlc3RJZDog
dGVzdElkIH0pOworCisJdGVzdEJsb2NrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImxpIiAp
OworCXRlc3RCbG9jay5hcHBlbmRDaGlsZCggdGl0bGUgKTsKKwl0ZXN0QmxvY2suYXBwZW5kQ2hp
bGQoIHJlcnVuVHJpZ2dlciApOworCXRlc3RCbG9jay5pZCA9ICJxdW5pdC10ZXN0LW91dHB1dC0i
ICsgdGVzdElkOworCisJYXNzZXJ0TGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJvbCIg
KTsKKwlhc3NlcnRMaXN0LmNsYXNzTmFtZSA9ICJxdW5pdC1hc3NlcnQtbGlzdCI7CisKKwl0ZXN0
QmxvY2suYXBwZW5kQ2hpbGQoIGFzc2VydExpc3QgKTsKKworCXRlc3RzLmFwcGVuZENoaWxkKCB0
ZXN0QmxvY2sgKTsKK30KKworLy8gSFRNTCBSZXBvcnRlciBpbml0aWFsaXphdGlvbiBhbmQgbG9h
ZAorUVVuaXQuYmVnaW4oZnVuY3Rpb24oIGRldGFpbHMgKSB7CisJdmFyIHF1bml0ID0gaWQoICJx
dW5pdCIgKTsKKworCS8vIEZpeHR1cmUgaXMgdGhlIG9ubHkgb25lIG5lY2Vzc2FyeSB0byBydW4g
d2l0aG91dCB0aGUgI3F1bml0IGVsZW1lbnQKKwlzdG9yZUZpeHR1cmUoKTsKKworCWlmICggcXVu
aXQgKSB7CisJCXF1bml0LmlubmVySFRNTCA9CisJCQkiPGgxIGlkPSdxdW5pdC1oZWFkZXInPiIg
KyBlc2NhcGVUZXh0KCBkb2N1bWVudC50aXRsZSApICsgIjwvaDE+IiArCisJCQkiPGgyIGlkPSdx
dW5pdC1iYW5uZXInPjwvaDI+IiArCisJCQkiPGRpdiBpZD0ncXVuaXQtdGVzdHJ1bm5lci10b29s
YmFyJz48L2Rpdj4iICsKKwkJCWFwcGVuZEZpbHRlcmVkVGVzdCgpICsKKwkJCSI8aDIgaWQ9J3F1
bml0LXVzZXJBZ2VudCc+PC9oMj4iICsKKwkJCSI8b2wgaWQ9J3F1bml0LXRlc3RzJz48L29sPiI7
CisJfQorCisJYXBwZW5kSGVhZGVyKCk7CisJYXBwZW5kQmFubmVyKCk7CisJYXBwZW5kVGVzdFJl
c3VsdHMoKTsKKwlhcHBlbmRVc2VyQWdlbnQoKTsKKwlhcHBlbmRUb29sYmFyKCk7CisJYXBwZW5k
VGVzdHNMaXN0KCBkZXRhaWxzLm1vZHVsZXMgKTsKKwl0b29sYmFyTW9kdWxlRmlsdGVyKCk7CisK
KwlpZiAoIHF1bml0ICYmIGNvbmZpZy5oaWRlcGFzc2VkICkgeworCQlhZGRDbGFzcyggcXVuaXQu
bGFzdENoaWxkLCAiaGlkZXBhc3MiICk7CisJfQorfSk7CisKK1FVbml0LmRvbmUoZnVuY3Rpb24o
IGRldGFpbHMgKSB7CisJdmFyIGksIGtleSwKKwkJYmFubmVyID0gaWQoICJxdW5pdC1iYW5uZXIi
ICksCisJCXRlc3RzID0gaWQoICJxdW5pdC10ZXN0cyIgKSwKKwkJaHRtbCA9IFsKKwkJCSJUZXN0
cyBjb21wbGV0ZWQgaW4gIiwKKwkJCWRldGFpbHMucnVudGltZSwKKwkJCSIgbWlsbGlzZWNvbmRz
LjxiciAvPiIsCisJCQkiPHNwYW4gY2xhc3M9J3Bhc3NlZCc+IiwKKwkJCWRldGFpbHMucGFzc2Vk
LAorCQkJIjwvc3Bhbj4gYXNzZXJ0aW9ucyBvZiA8c3BhbiBjbGFzcz0ndG90YWwnPiIsCisJCQlk
ZXRhaWxzLnRvdGFsLAorCQkJIjwvc3Bhbj4gcGFzc2VkLCA8c3BhbiBjbGFzcz0nZmFpbGVkJz4i
LAorCQkJZGV0YWlscy5mYWlsZWQsCisJCQkiPC9zcGFuPiBmYWlsZWQuIgorCQldLmpvaW4oICIi
ICk7CisKKwlpZiAoIGJhbm5lciApIHsKKwkJYmFubmVyLmNsYXNzTmFtZSA9IGRldGFpbHMuZmFp
bGVkID8gInF1bml0LWZhaWwiIDogInF1bml0LXBhc3MiOworCX0KKworCWlmICggdGVzdHMgKSB7
CisJCWlkKCAicXVuaXQtdGVzdHJlc3VsdCIgKS5pbm5lckhUTUwgPSBodG1sOworCX0KKworCWlm
ICggY29uZmlnLmFsdGVydGl0bGUgJiYgZGVmaW5lZC5kb2N1bWVudCAmJiBkb2N1bWVudC50aXRs
ZSApIHsKKworCQkvLyBzaG93IOKcliBmb3IgZ29vZCwg4pyUIGZvciBiYWQgc3VpdGUgcmVzdWx0
IGluIHRpdGxlCisJCS8vIHVzZSBlc2NhcGUgc2VxdWVuY2VzIGluIGNhc2UgZmlsZSBnZXRzIGxv
YWRlZCB3aXRoIG5vbi11dGYtOC1jaGFyc2V0CisJCWRvY3VtZW50LnRpdGxlID0gWworCQkJKCBk
ZXRhaWxzLmZhaWxlZCA/ICJcdTI3MTYiIDogIlx1MjcxNCIgKSwKKwkJCWRvY3VtZW50LnRpdGxl
LnJlcGxhY2UoIC9eW1x1MjcxNFx1MjcxNl0gL2ksICIiICkKKwkJXS5qb2luKCAiICIgKTsKKwl9
CisKKwkvLyBjbGVhciBvd24gc2Vzc2lvblN0b3JhZ2UgaXRlbXMgaWYgYWxsIHRlc3RzIHBhc3Nl
ZAorCWlmICggY29uZmlnLnJlb3JkZXIgJiYgZGVmaW5lZC5zZXNzaW9uU3RvcmFnZSAmJiBkZXRh
aWxzLmZhaWxlZCA9PT0gMCApIHsKKwkJZm9yICggaSA9IDA7IGkgPCBzZXNzaW9uU3RvcmFnZS5s
ZW5ndGg7IGkrKyApIHsKKwkJCWtleSA9IHNlc3Npb25TdG9yYWdlLmtleSggaSsrICk7CisJCQlp
ZiAoIGtleS5pbmRleE9mKCAicXVuaXQtdGVzdC0iICkgPT09IDAgKSB7CisJCQkJc2Vzc2lvblN0
b3JhZ2UucmVtb3ZlSXRlbSgga2V5ICk7CisJCQl9CisJCX0KKwl9CisKKwkvLyBzY3JvbGwgYmFj
ayB0byB0b3AgdG8gc2hvdyByZXN1bHRzCisJaWYgKCBjb25maWcuc2Nyb2xsdG9wICYmIHdpbmRv
dy5zY3JvbGxUbyApIHsKKwkJd2luZG93LnNjcm9sbFRvKCAwLCAwICk7CisJfQorfSk7CisKK2Z1
bmN0aW9uIGdldE5hbWVIdG1sKCBuYW1lLCBtb2R1bGUgKSB7CisJdmFyIG5hbWVIdG1sID0gIiI7
CisKKwlpZiAoIG1vZHVsZSApIHsKKwkJbmFtZUh0bWwgPSAiPHNwYW4gY2xhc3M9J21vZHVsZS1u
YW1lJz4iICsgZXNjYXBlVGV4dCggbW9kdWxlICkgKyAiPC9zcGFuPjogIjsKKwl9CisKKwluYW1l
SHRtbCArPSAiPHNwYW4gY2xhc3M9J3Rlc3QtbmFtZSc+IiArIGVzY2FwZVRleHQoIG5hbWUgKSAr
ICI8L3NwYW4+IjsKKworCXJldHVybiBuYW1lSHRtbDsKK30KKworUVVuaXQudGVzdFN0YXJ0KGZ1
bmN0aW9uKCBkZXRhaWxzICkgeworCXZhciBydW5uaW5nLCB0ZXN0QmxvY2ssIGJhZDsKKworCXRl
c3RCbG9jayA9IGlkKCAicXVuaXQtdGVzdC1vdXRwdXQtIiArIGRldGFpbHMudGVzdElkICk7CisJ
aWYgKCB0ZXN0QmxvY2sgKSB7CisJCXRlc3RCbG9jay5jbGFzc05hbWUgPSAicnVubmluZyI7CisJ
fSBlbHNlIHsKKworCQkvLyBSZXBvcnQgbGF0ZXIgcmVnaXN0ZXJlZCB0ZXN0cworCQlhcHBlbmRU
ZXN0KCBkZXRhaWxzLm5hbWUsIGRldGFpbHMudGVzdElkLCBkZXRhaWxzLm1vZHVsZSApOworCX0K
KworCXJ1bm5pbmcgPSBpZCggInF1bml0LXRlc3RyZXN1bHQiICk7CisJaWYgKCBydW5uaW5nICkg
eworCQliYWQgPSBRVW5pdC5jb25maWcucmVvcmRlciAmJiBkZWZpbmVkLnNlc3Npb25TdG9yYWdl
ICYmCisJCQkrc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSggInF1bml0LXRlc3QtIiArIGRldGFpbHMu
bW9kdWxlICsgIi0iICsgZGV0YWlscy5uYW1lICk7CisKKwkJcnVubmluZy5pbm5lckhUTUwgPSAo
IGJhZCA/CisJCQkiUmVydW5uaW5nIHByZXZpb3VzbHkgZmFpbGVkIHRlc3Q6IDxiciAvPiIgOgor
CQkJIlJ1bm5pbmc6IDxiciAvPiIgKSArCisJCQlnZXROYW1lSHRtbCggZGV0YWlscy5uYW1lLCBk
ZXRhaWxzLm1vZHVsZSApOworCX0KKworfSk7CisKK2Z1bmN0aW9uIHN0cmlwSHRtbCggc3RyaW5n
ICkgeworCS8vIHN0cmlwIHRhZ3MsIGh0bWwgZW50aXR5IGFuZCB3aGl0ZXNwYWNlcworCXJldHVy
biBzdHJpbmcucmVwbGFjZSgvPFwvP1tePl0rKD58JCkvZywgIiIpLnJlcGxhY2UoL1wmcXVvdDsv
ZywgIiIpLnJlcGxhY2UoL1xzKy9nLCAiIik7Cit9CisKK1FVbml0LmxvZyhmdW5jdGlvbiggZGV0
YWlscyApIHsKKwl2YXIgYXNzZXJ0TGlzdCwgYXNzZXJ0TGksCisJCW1lc3NhZ2UsIGV4cGVjdGVk
LCBhY3R1YWwsIGRpZmYsCisJCXNob3dEaWZmID0gZmFsc2UsCisJCXRlc3RJdGVtID0gaWQoICJx
dW5pdC10ZXN0LW91dHB1dC0iICsgZGV0YWlscy50ZXN0SWQgKTsKKworCWlmICggIXRlc3RJdGVt
ICkgeworCQlyZXR1cm47CisJfQorCisJbWVzc2FnZSA9IGVzY2FwZVRleHQoIGRldGFpbHMubWVz
c2FnZSApIHx8ICggZGV0YWlscy5yZXN1bHQgPyAib2theSIgOiAiZmFpbGVkIiApOworCW1lc3Nh
Z2UgPSAiPHNwYW4gY2xhc3M9J3Rlc3QtbWVzc2FnZSc+IiArIG1lc3NhZ2UgKyAiPC9zcGFuPiI7
CisJbWVzc2FnZSArPSAiPHNwYW4gY2xhc3M9J3J1bnRpbWUnPkAgIiArIGRldGFpbHMucnVudGlt
ZSArICIgbXM8L3NwYW4+IjsKKworCS8vIHB1c2hGYWlsdXJlIGRvZXNuJ3QgcHJvdmlkZSBkZXRh
aWxzLmV4cGVjdGVkCisJLy8gd2hlbiBpdCBjYWxscywgaXQncyBpbXBsaWNpdCB0byBhbHNvIG5v
dCBzaG93IGV4cGVjdGVkIGFuZCBkaWZmIHN0dWZmCisJLy8gQWxzbywgd2UgbmVlZCB0byBjaGVj
ayBkZXRhaWxzLmV4cGVjdGVkIGV4aXN0ZW5jZSwgYXMgaXQgY2FuIGV4aXN0IGFuZCBiZSB1bmRl
ZmluZWQKKwlpZiAoICFkZXRhaWxzLnJlc3VsdCAmJiBoYXNPd24uY2FsbCggZGV0YWlscywgImV4
cGVjdGVkIiApICkgeworCQlpZiAoIGRldGFpbHMubmVnYXRpdmUgKSB7CisJCQlleHBlY3RlZCA9
IGVzY2FwZVRleHQoICJOT1QgIiArIFFVbml0LmR1bXAucGFyc2UoIGRldGFpbHMuZXhwZWN0ZWQg
KSApOworCQl9IGVsc2UgeworCQkJZXhwZWN0ZWQgPSBlc2NhcGVUZXh0KCBRVW5pdC5kdW1wLnBh
cnNlKCBkZXRhaWxzLmV4cGVjdGVkICkgKTsKKwkJfQorCisJCWFjdHVhbCA9IGVzY2FwZVRleHQo
IFFVbml0LmR1bXAucGFyc2UoIGRldGFpbHMuYWN0dWFsICkgKTsKKwkJbWVzc2FnZSArPSAiPHRh
YmxlPjx0ciBjbGFzcz0ndGVzdC1leHBlY3RlZCc+PHRoPkV4cGVjdGVkOiA8L3RoPjx0ZD48cHJl
PiIgKworCQkJZXhwZWN0ZWQgKworCQkJIjwvcHJlPjwvdGQ+PC90cj4iOworCisJCWlmICggYWN0
dWFsICE9PSBleHBlY3RlZCApIHsKKworCQkJbWVzc2FnZSArPSAiPHRyIGNsYXNzPSd0ZXN0LWFj
dHVhbCc+PHRoPlJlc3VsdDogPC90aD48dGQ+PHByZT4iICsKKwkJCQlhY3R1YWwgKyAiPC9wcmU+
PC90ZD48L3RyPiI7CisKKwkJCS8vIERvbid0IHNob3cgZGlmZiBpZiBhY3R1YWwgb3IgZXhwZWN0
ZWQgYXJlIGJvb2xlYW5zCisJCQlpZiAoICEoIC9eKHRydWV8ZmFsc2UpJC8udGVzdCggYWN0dWFs
ICkgKSAmJgorCQkJCQkhKCAvXih0cnVlfGZhbHNlKSQvLnRlc3QoIGV4cGVjdGVkICkgKSApIHsK
KwkJCQlkaWZmID0gUVVuaXQuZGlmZiggZXhwZWN0ZWQsIGFjdHVhbCApOworCQkJCXNob3dEaWZm
ID0gc3RyaXBIdG1sKCBkaWZmICkubGVuZ3RoICE9PQorCQkJCQlzdHJpcEh0bWwoIGV4cGVjdGVk
ICkubGVuZ3RoICsKKwkJCQkJc3RyaXBIdG1sKCBhY3R1YWwgKS5sZW5ndGg7CisJCQl9CisKKwkJ
CS8vIERvbid0IHNob3cgZGlmZiBpZiBleHBlY3RlZCBhbmQgYWN0dWFsIGFyZSB0b3RhbGx5IGRp
ZmZlcmVudAorCQkJaWYgKCBzaG93RGlmZiApIHsKKwkJCQltZXNzYWdlICs9ICI8dHIgY2xhc3M9
J3Rlc3QtZGlmZic+PHRoPkRpZmY6IDwvdGg+PHRkPjxwcmU+IiArCisJCQkJCWRpZmYgKyAiPC9w
cmU+PC90ZD48L3RyPiI7CisJCQl9CisJCX0gZWxzZSBpZiAoIGV4cGVjdGVkLmluZGV4T2YoICJb
b2JqZWN0IEFycmF5XSIgKSAhPT0gLTEgfHwKKwkJCQlleHBlY3RlZC5pbmRleE9mKCAiW29iamVj
dCBPYmplY3RdIiApICE9PSAtMSApIHsKKwkJCW1lc3NhZ2UgKz0gIjx0ciBjbGFzcz0ndGVzdC1t
ZXNzYWdlJz48dGg+TWVzc2FnZTogPC90aD48dGQ+IiArCisJCQkJIkRpZmYgc3VwcHJlc3NlZCBh
cyB0aGUgZGVwdGggb2Ygb2JqZWN0IGlzIG1vcmUgdGhhbiBjdXJyZW50IG1heCBkZXB0aCAoIiAr
CisJCQkJUVVuaXQuY29uZmlnLm1heERlcHRoICsgIikuPHA+SGludDogVXNlIDxjb2RlPlFVbml0
LmR1bXAubWF4RGVwdGg8L2NvZGU+IHRvICIgKworCQkJCSIgcnVuIHdpdGggYSBoaWdoZXIgbWF4
IGRlcHRoIG9yIDxhIGhyZWY9JyIgKyBzZXRVcmwoeyBtYXhEZXB0aDogLTEgfSkgKyAiJz4iICsK
KwkJCQkiUmVydW48L2E+IHdpdGhvdXQgbWF4IGRlcHRoLjwvcD48L3RkPjwvdHI+IjsKKwkJfQor
CisJCWlmICggZGV0YWlscy5zb3VyY2UgKSB7CisJCQltZXNzYWdlICs9ICI8dHIgY2xhc3M9J3Rl
c3Qtc291cmNlJz48dGg+U291cmNlOiA8L3RoPjx0ZD48cHJlPiIgKworCQkJCWVzY2FwZVRleHQo
IGRldGFpbHMuc291cmNlICkgKyAiPC9wcmU+PC90ZD48L3RyPiI7CisJCX0KKworCQltZXNzYWdl
ICs9ICI8L3RhYmxlPiI7CisKKwkvLyB0aGlzIG9jY291cnMgd2hlbiBwdXNoRmFpbHVyZSBpcyBz
ZXQgYW5kIHdlIGhhdmUgYW4gZXh0cmFjdGVkIHN0YWNrIHRyYWNlCisJfSBlbHNlIGlmICggIWRl
dGFpbHMucmVzdWx0ICYmIGRldGFpbHMuc291cmNlICkgeworCQltZXNzYWdlICs9ICI8dGFibGU+
IiArCisJCQkiPHRyIGNsYXNzPSd0ZXN0LXNvdXJjZSc+PHRoPlNvdXJjZTogPC90aD48dGQ+PHBy
ZT4iICsKKwkJCWVzY2FwZVRleHQoIGRldGFpbHMuc291cmNlICkgKyAiPC9wcmU+PC90ZD48L3Ry
PiIgKworCQkJIjwvdGFibGU+IjsKKwl9CisKKwlhc3NlcnRMaXN0ID0gdGVzdEl0ZW0uZ2V0RWxl
bWVudHNCeVRhZ05hbWUoICJvbCIgKVsgMCBdOworCisJYXNzZXJ0TGkgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCAibGkiICk7CisJYXNzZXJ0TGkuY2xhc3NOYW1lID0gZGV0YWlscy5yZXN1bHQg
PyAicGFzcyIgOiAiZmFpbCI7CisJYXNzZXJ0TGkuaW5uZXJIVE1MID0gbWVzc2FnZTsKKwlhc3Nl
cnRMaXN0LmFwcGVuZENoaWxkKCBhc3NlcnRMaSApOworfSk7CisKK1FVbml0LnRlc3REb25lKGZ1
bmN0aW9uKCBkZXRhaWxzICkgeworCXZhciB0ZXN0VGl0bGUsIHRpbWUsIHRlc3RJdGVtLCBhc3Nl
cnRMaXN0LAorCQlnb29kLCBiYWQsIHRlc3RDb3VudHMsIHNraXBwZWQsIHNvdXJjZU5hbWUsCisJ
CXRlc3RzID0gaWQoICJxdW5pdC10ZXN0cyIgKTsKKworCWlmICggIXRlc3RzICkgeworCQlyZXR1
cm47CisJfQorCisJdGVzdEl0ZW0gPSBpZCggInF1bml0LXRlc3Qtb3V0cHV0LSIgKyBkZXRhaWxz
LnRlc3RJZCApOworCisJYXNzZXJ0TGlzdCA9IHRlc3RJdGVtLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAib2wiIClbIDAgXTsKKworCWdvb2QgPSBkZXRhaWxzLnBhc3NlZDsKKwliYWQgPSBkZXRhaWxz
LmZhaWxlZDsKKworCS8vIHN0b3JlIHJlc3VsdCB3aGVuIHBvc3NpYmxlCisJaWYgKCBjb25maWcu
cmVvcmRlciAmJiBkZWZpbmVkLnNlc3Npb25TdG9yYWdlICkgeworCQlpZiAoIGJhZCApIHsKKwkJ
CXNlc3Npb25TdG9yYWdlLnNldEl0ZW0oICJxdW5pdC10ZXN0LSIgKyBkZXRhaWxzLm1vZHVsZSAr
ICItIiArIGRldGFpbHMubmFtZSwgYmFkICk7CisJCX0gZWxzZSB7CisJCQlzZXNzaW9uU3RvcmFn
ZS5yZW1vdmVJdGVtKCAicXVuaXQtdGVzdC0iICsgZGV0YWlscy5tb2R1bGUgKyAiLSIgKyBkZXRh
aWxzLm5hbWUgKTsKKwkJfQorCX0KKworCWlmICggYmFkID09PSAwICkgeworCisJCS8vIENvbGxh
cHNlIHRoZSBwYXNzaW5nIHRlc3RzCisJCWFkZENsYXNzKCBhc3NlcnRMaXN0LCAicXVuaXQtY29s
bGFwc2VkIiApOworCX0gZWxzZSBpZiAoIGJhZCAmJiBjb25maWcuY29sbGFwc2UgJiYgIWNvbGxh
cHNlTmV4dCApIHsKKworCQkvLyBTa2lwIGNvbGxhcHNpbmcgdGhlIGZpcnN0IGZhaWxpbmcgdGVz
dAorCQljb2xsYXBzZU5leHQgPSB0cnVlOworCX0gZWxzZSB7CisKKwkJLy8gQ29sbGFwc2UgcmVt
YWluaW5nIHRlc3RzCisJCWFkZENsYXNzKCBhc3NlcnRMaXN0LCAicXVuaXQtY29sbGFwc2VkIiAp
OworCX0KKworCS8vIHRlc3RJdGVtLmZpcnN0Q2hpbGQgaXMgdGhlIHRlc3QgbmFtZQorCXRlc3RU
aXRsZSA9IHRlc3RJdGVtLmZpcnN0Q2hpbGQ7CisKKwl0ZXN0Q291bnRzID0gYmFkID8KKwkJIjxi
IGNsYXNzPSdmYWlsZWQnPiIgKyBiYWQgKyAiPC9iPiwgIiArICI8YiBjbGFzcz0ncGFzc2VkJz4i
ICsgZ29vZCArICI8L2I+LCAiIDoKKwkJIiI7CisKKwl0ZXN0VGl0bGUuaW5uZXJIVE1MICs9ICIg
PGIgY2xhc3M9J2NvdW50cyc+KCIgKyB0ZXN0Q291bnRzICsKKwkJZGV0YWlscy5hc3NlcnRpb25z
Lmxlbmd0aCArICIpPC9iPiI7CisKKwlpZiAoIGRldGFpbHMuc2tpcHBlZCApIHsKKwkJdGVzdEl0
ZW0uY2xhc3NOYW1lID0gInNraXBwZWQiOworCQlza2lwcGVkID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCggImVtIiApOworCQlza2lwcGVkLmNsYXNzTmFtZSA9ICJxdW5pdC1za2lwcGVkLWxhYmVs
IjsKKwkJc2tpcHBlZC5pbm5lckhUTUwgPSAic2tpcHBlZCI7CisJCXRlc3RJdGVtLmluc2VydEJl
Zm9yZSggc2tpcHBlZCwgdGVzdFRpdGxlICk7CisJfSBlbHNlIHsKKwkJYWRkRXZlbnQoIHRlc3RU
aXRsZSwgImNsaWNrIiwgZnVuY3Rpb24oKSB7CisJCQl0b2dnbGVDbGFzcyggYXNzZXJ0TGlzdCwg
InF1bml0LWNvbGxhcHNlZCIgKTsKKwkJfSk7CisKKwkJdGVzdEl0ZW0uY2xhc3NOYW1lID0gYmFk
ID8gImZhaWwiIDogInBhc3MiOworCisJCXRpbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAi
c3BhbiIgKTsKKwkJdGltZS5jbGFzc05hbWUgPSAicnVudGltZSI7CisJCXRpbWUuaW5uZXJIVE1M
ID0gZGV0YWlscy5ydW50aW1lICsgIiBtcyI7CisJCXRlc3RJdGVtLmluc2VydEJlZm9yZSggdGlt
ZSwgYXNzZXJ0TGlzdCApOworCX0KKworCS8vIFNob3cgdGhlIHNvdXJjZSBvZiB0aGUgdGVzdCB3
aGVuIHNob3dpbmcgYXNzZXJ0aW9ucworCWlmICggZGV0YWlscy5zb3VyY2UgKSB7CisJCXNvdXJj
ZU5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAicCIgKTsKKwkJc291cmNlTmFtZS5pbm5l
ckhUTUwgPSAiPHN0cm9uZz5Tb3VyY2U6IDwvc3Ryb25nPiIgKyBkZXRhaWxzLnNvdXJjZTsKKwkJ
YWRkQ2xhc3MoIHNvdXJjZU5hbWUsICJxdW5pdC1zb3VyY2UiICk7CisJCWlmICggYmFkID09PSAw
ICkgeworCQkJYWRkQ2xhc3MoIHNvdXJjZU5hbWUsICJxdW5pdC1jb2xsYXBzZWQiICk7CisJCX0K
KwkJYWRkRXZlbnQoIHRlc3RUaXRsZSwgImNsaWNrIiwgZnVuY3Rpb24oKSB7CisJCQl0b2dnbGVD
bGFzcyggc291cmNlTmFtZSwgInF1bml0LWNvbGxhcHNlZCIgKTsKKwkJfSk7CisJCXRlc3RJdGVt
LmFwcGVuZENoaWxkKCBzb3VyY2VOYW1lICk7CisJfQorfSk7CisKK2lmICggZGVmaW5lZC5kb2N1
bWVudCApIHsKKworCS8vIEF2b2lkIHJlYWR5U3RhdGUgaXNzdWUgd2l0aCBwaGFudG9tanMKKwkv
LyBSZWY6ICM4MTgKKwl2YXIgbm90UGhhbnRvbSA9ICggZnVuY3Rpb24oIHAgKSB7CisJCXJldHVy
biAhKCBwICYmIHAudmVyc2lvbiAmJiBwLnZlcnNpb24ubWFqb3IgPiAwICk7CisJfSApKCB3aW5k
b3cucGhhbnRvbSApOworCisJaWYgKCBub3RQaGFudG9tICYmIGRvY3VtZW50LnJlYWR5U3RhdGUg
PT09ICJjb21wbGV0ZSIgKSB7CisJCVFVbml0LmxvYWQoKTsKKwl9IGVsc2UgeworCQlhZGRFdmVu
dCggd2luZG93LCAibG9hZCIsIFFVbml0LmxvYWQgKTsKKwl9Cit9IGVsc2UgeworCWNvbmZpZy5w
YWdlTG9hZGVkID0gdHJ1ZTsKKwljb25maWcuYXV0b3J1biA9IHRydWU7Cit9CisKK30pKCk7CmRp
ZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy90ZXN0cy9Nb2NrQnVpbGRib3RRdWV1ZS5q
cyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL01vY2tCdWlsZGJvdFF1ZXVlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMwZWMzMTY3ZTJiNTRiNThlOTdmYjFlZGM5NGNiMjM2YzA5YzU0MWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy90ZXN0cy9Nb2NrQnVpbGRib3RRdWV1ZS5q
cwpAQCAtMCwwICsxLDI1IEBACitNb2NrQnVpbGRib3RRdWV1ZSA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICBpbmZvID0geworICAgICAgICBicmFuY2hlczogIiIsCisgICAgICAgIHBsYXRmb3JtOiAiIiwK
KyAgICAgICAgZGVidWc6ICIiLAorICAgICAgICBidWlsZGVyOiAiIiwKKyAgICAgICAgdGVzdGVy
OiAiIiwKKyAgICAgICAgcGVyZm9ybWFuY2U6ICIiLAorICAgICAgICBzdGF0aWNBbmFseXplcjog
IiIsCisgICAgICAgIGxlYWtzOiAiIiwKKyAgICAgICAgYXJjaGl0ZWN0dXJlOiAiIiwKKyAgICAg
ICAgdGVzdENhdGVnb3J5OiAiIiwKKyAgICAgICAgaGVhZGluZzogIiIsCisgICAgICAgIGNyYXNo
ZXNPbmx5OiAiIgorICAgIH07CisgICAgQnVpbGRib3RRdWV1ZS5jYWxsKHRoaXMsICJNb2NrIEJ1
aWxkQm90IiwgImlkIiwgaW5mbyk7Cit9OworCitCYXNlT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVu
Y3Rpb25zKE1vY2tCdWlsZGJvdFF1ZXVlKTsKKworTW9ja0J1aWxkYm90UXVldWUucHJvdG90eXBl
ID0geworICAgIGNvbnN0cnVjdG9yOiBNb2NrQnVpbGRib3RRdWV1ZSwKKyAgICBfX3Byb3RvX186
IEJ1aWxkYm90UXVldWUucHJvdG90eXBlCit9CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2Ny
aXB0cy90ZXN0cy9Nb2NrQnVpbGRib3RRdWV1ZVZpZXcuanMgYi9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0
cy90ZXN0cy9Nb2NrQnVpbGRib3RRdWV1ZVZpZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjExMTZlM2YxYzc5
NWNjNDIwMWI3MWE1MzI0MTZmOGNlZWJlNmIyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hi
b2FyZC9TY3JpcHRzL3Rlc3RzL01vY2tCdWlsZGJvdFF1ZXVlVmlldy5qcwpAQCAtMCwwICsxLDI2
IEBACitNb2NrQnVpbGRib3RRdWV1ZVZpZXcgPSBmdW5jdGlvbihxdWV1ZXMpCit7CisgICAgdGhp
cy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVt
ZW50LmNsYXNzTGlzdC5hZGQoInF1ZXVlLXZpZXciKTsKKyAgICB0aGlzLmVsZW1lbnQuX19xdWV1
ZVZpZXcgPSB0aGlzOworCisgICAgdGhpcy5xdWV1ZXMgPSBxdWV1ZXMgfHwgW107CisKKyAgICBC
YXNlT2JqZWN0LmNhbGwodGhpcyk7Cit9OworCitCYXNlT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVu
Y3Rpb25zKE1vY2tCdWlsZGJvdFF1ZXVlVmlldyk7CisKK01vY2tCdWlsZGJvdFF1ZXVlVmlldy5w
cm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IE1vY2tCdWlsZGJvdFF1ZXVlVmlldywKKyAg
ICBfX3Byb3RvX186IEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZSwKKworICAgIF9sYXRlc3RQ
cm9kdWN0aXZlSXRlcmF0aW9uOiBmdW5jdGlvbihxdWV1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICByZXZpc2lvbjogeworICAgICAgICAgICAgICAgICJXZWJLaXQgUmVw
byI6IDMzMDIwCisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL01vY2tPdmVycmlkZXMuanMgYi9Ub29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNo
Ym9hcmQvU2NyaXB0cy90ZXN0cy9Nb2NrT3ZlcnJpZGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1NjJiODY3
MWQ1ZjJjOTJiMjNmMmQ0OTQ4MjNjYTYyMTIyNTBmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9k
YXNoYm9hcmQvU2NyaXB0cy90ZXN0cy9Nb2NrT3ZlcnJpZGVzLmpzCkBAIC0wLDAgKzEsMTEgQEAK
Ky8vIFRoZSByZWFsICJsYWJlbCIgc2V0dGVyIHdhcyB0aHJvd2luZyBhbiBleGNlcHRpb24gaW4g
dGhlIHVuaXQgdGVzdHMgc28gSSBvdmVycm9kZSBpdCB3aXRoIGEgc2ltcGxpZmllZCB2ZXJzaW9u
LgorT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YXR1c0xpbmVWaWV3LnByb3RvdHlwZSwgImxhYmVs
IiwgeworICAgIHNldDogZnVuY3Rpb24gbGFiZWwoeCkKKyAgICB7CisgICAgICAgIGlmICh4KSB7
CisgICAgICAgICAgICB0aGlzLl9sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB4OworICAgICAg
ICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9sYWJlbEVsZW1lbnQsIHRoaXMu
X21lc3NhZ2VFbGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVt
b3ZlKCJuby1sYWJlbCIpOworICAgICAgICB9CisgICAgfQorfSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9k
YXNoYm9hcmQvU2NyaXB0cy90ZXN0cy9Nb2NrVHJhYy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRz
L3Rlc3RzL01vY2tUcmFjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0OGY5MTUyYzg5MDVhYzgxODQ5MzZlYTcz
M2I4ZmNmZDUzYzhlZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy90
ZXN0cy9Nb2NrVHJhYy5qcwpAQCAtMCwwICsxLDc3IEBACitNb2NrVHJhYyA9IGZ1bmN0aW9uKCkK
K3sKKyAgICBUcmFjLmNhbGwodGhpcywgImh0dHBzOi8vdHJhYy53ZWJraXQub3JnLyIpOworICAg
IHRoaXMucmVjb3JkZWRDb21taXRzID0gWworICAgICAgICB7CisgICAgICAgICAgICAicmV2aXNp
b25OdW1iZXIiOiAzMzAxOCwKKyAgICAgICAgICAgICJsaW5rIjogImh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvcmVwb3NpdG9yeS9jaGFuZ2VzZXQvNzcwMTgvc2FmYXJpIiwKKyAgICAgICAgICAgICJ0
aXRsZSI6IHt9LAorICAgICAgICAgICAgImF1dGhvciI6ICJKb2huIiwKKyAgICAgICAgICAgICJk
YXRlIjogIjIwMTUtMTEtMTVUMTc6MDU6NDQuMDAwWiIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiZGVzY3JpcHRpb24iLAorICAgICAgICAgICAgImNvbnRhaW5zQnJhbmNoTG9jYXRpb24i
OiB0cnVlLAorICAgICAgICAgICAgImJyYW5jaCI6ICJ0cnVuayIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgInJldmlzaW9uTnVtYmVyIjogMzMwMTksCisgICAgICAgICAgICAi
bGluayI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL3JlcG9zaXRvcnkvY2hhbmdlc2V0Lzc3MDE5
L3NhZmFyaSIsCisgICAgICAgICAgICAidGl0bGUiOiB7fSwKKyAgICAgICAgICAgICJhdXRob3Ii
OiAiUGF1bCIsCisgICAgICAgICAgICAiZGF0ZSI6ICIyMDE1LTExLTE2VDAxOjE4OjIzLjAwMFoi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAg
ICJjb250YWluc0JyYW5jaExvY2F0aW9uIjogdHJ1ZSwKKyAgICAgICAgICAgICJicmFuY2giOiAi
dHJ1bmsiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJyZXZpc2lvbk51bWJl
ciI6IDMzMDIwLAorICAgICAgICAgICAgImxpbmsiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9y
ZXBvc2l0b3J5L2NoYW5nZXNldC83NzAyMC9zYWZhcmkiLAorICAgICAgICAgICAgInRpdGxlIjog
e30sCisgICAgICAgICAgICAiYXV0aG9yIjogIkdlb3JnZSIsCisgICAgICAgICAgICAiZGF0ZSI6
ICIyMDE1LTExLTE2VDAxOjE5OjI3LjAwMFoiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICJjb250YWluc0JyYW5jaExvY2F0aW9uIjogdHJ1
ZSwKKyAgICAgICAgICAgICJicmFuY2giOiAidHJ1bmsiCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJyZXZpc2lvbk51bWJlciI6IDMzMDIxLAorICAgICAgICAgICAgImxpbmsi
OiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9yZXBvc2l0b3J5L2NoYW5nZXNldC83NzAyMS9zYWZh
cmkiLAorICAgICAgICAgICAgInRpdGxlIjoge30sCisgICAgICAgICAgICAiYXV0aG9yIjogIlJp
bmdvIiwKKyAgICAgICAgICAgICJkYXRlIjogIjIwMTUtMTEtMTZUMDE6MjA6NTguMDAwWiIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZGVzY3JpcHRpb24iLAorICAgICAgICAgICAgImNv
bnRhaW5zQnJhbmNoTG9jYXRpb24iOiB0cnVlLAorICAgICAgICAgICAgImJyYW5jaCI6ICJzb21l
T3RoZXJCcmFuY2giCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJyZXZpc2lv
bk51bWJlciI6IDMzMDIyLAorICAgICAgICAgICAgImxpbmsiOiAiaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9yZXBvc2l0b3J5L2NoYW5nZXNldC83NzAyMi9zYWZhcmkiLAorICAgICAgICAgICAgInRp
dGxlIjoge30sCisgICAgICAgICAgICAiYXV0aG9yIjogIkJvYiIsCisgICAgICAgICAgICAiZGF0
ZSI6ICIyMDE1LTExLTE2VDAxOjIyOjAxLjAwMFoiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICJjb250YWluc0JyYW5jaExvY2F0aW9uIjog
dHJ1ZSwKKyAgICAgICAgICAgICJicmFuY2giOiAidHJ1bmsiCisgICAgICAgIH0KKyAgICBdOwor
fTsKKworQmFzZU9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhNb2NrVHJhYyk7CisKK01v
Y2tUcmFjLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogTW9ja1RyYWMsCisgICAgX19w
cm90b19fOiBUcmFjLnByb3RvdHlwZSwKKworICAgIGdldCBvbGRlc3RSZWNvcmRlZFJldmlzaW9u
TnVtYmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiAzMzAxODsKKyAgICB9LAorCisgICAgZ2V0
IGxhdGVzdFJlY29yZGVkUmV2aXNpb25OdW1iZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDMz
MDIyOworICAgIH0sCisKKyAgICBsb2FkTW9yZUhpc3RvcmljYWxEYXRhOiBmdW5jdGlvbigpCisg
ICAgeworICAgIH0sCit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvdGVzdHMv
aW5kZXguaHRtbCBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL2luZGV4Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWViYjg4YjJiYjNhMmE5NjVlNjE4MzQ5YjM2NjJjOWUxOTUwMTQyMgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL2luZGV4Lmh0bWwKQEAgLTAsMCAr
MSw1MSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJz
ZXQ9IlVURi04IiAvPgorCisgICAgPHRpdGxlPldlYktpdCBCb3QgV2F0Y2hlcidzIERhc2hib2Fy
ZCBRVW5pdCBUZXN0IFJ1bm5lcjwvdGl0bGU+CisKKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uL0V4dGVybmFsL3F1bml0LTEuMjAuMC5jc3MiPgorICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vU3R5bGVzL01haW4uY3NzIj48L2xpbms+CisgICAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9TdHlsZXMvUG9wb3Zlci5jc3MiPjwvbGlu
az4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL1N0eWxlcy9RdWV1ZVZp
ZXcuY3NzIj48L2xpbms+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9T
dHlsZXMvU3RhdHVzTGluZVZpZXcuY3NzIj48L2xpbms+CisKKyAgICA8c2NyaXB0IHNyYz0iLi4v
VXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vQmFzZU9iamVjdC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL0Rhc2hib2FyZC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ii4uL0J1aWxkYm90LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vQnVnemlsbGEuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9CdWJi
bGVRdWV1ZVNlcnZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL1dlYktpdEJ1
aWxkYm90LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vQnVpbGRib3RRdWV1ZS5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL0J1YmJsZVF1ZXVlLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vQnVpbGRib3RJdGVyYXRpb24uanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSIuLi9CdWlsZGJvdFRlc3RSZXN1bHRzLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vR2VvbWV0cnkuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSIuLi9Qb3BvdmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vUG9wb3ZlclRy
YWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9RdWV1ZVZpZXcuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9CdWlsZGJvdFF1ZXVlVmlldy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL0J1aWxkYm90QnVpbGRlclF1ZXVlVmlldy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL0J1aWxkYm90VGVzdGVyUXVldWVWaWV3LmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vQnVpbGRib3RDb21iaW5lZFF1ZXVlVmlldy5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1
ZVZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9CdWlsZGJvdExlYWtzUXVl
dWVWaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vQnViYmxlUXVldWVWaWV3
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vU3RhdHVzTGluZVZpZXcuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9TZXR0aW5ncy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9Ii4uL1RyYWMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9FeHRlcm5hbC9xdW5pdC0xLjIwLjAuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJN
b2NrT3ZlcnJpZGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTW9ja1RyYWMuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNb2NrQnVpbGRib3RRdWV1ZS5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1vY2tCdWlsZGJvdFF1ZXVlVmlldy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9InRlc3RzLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+
CisgICAgPGRpdiBpZD0icXVuaXQiPjwvZGl2PgorICAgIDxkaXYgaWQ9InF1bml0LWZpeHR1cmUi
PjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL3Rlc3RzLmpzIGIvVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJv
YXJkL1NjcmlwdHMvdGVzdHMvdGVzdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVmNzdhZjU3ZWE3MTYxNDIw
NmRjNzg0YTBmODQzMzY0YWI0OWY0NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9T
Y3JpcHRzL3Rlc3RzL3Rlc3RzLmpzCkBAIC0wLDAgKzEsMTcgQEAKK3ZhciBzZXR0aW5ncyA9IG5l
dyBTZXR0aW5nczsKK1FVbml0LnRlc3QoIkJ1aWxkQm90UXVldWUgVGVzdCIsIGZ1bmN0aW9uKGFz
c2VydCkKK3sKKyAgICB0cmFjID0gbmV3IE1vY2tUcmFjKCk7CisgICAgdmFyIHF1ZXVlID0gbmV3
IE1vY2tCdWlsZGJvdFF1ZXVlKCk7CisgICAgcXVldWUuYnJhbmNoZXMgPSBbeworICAgICAgICBu
YW1lOiAidHJ1bmsiLAorICAgICAgICByZXBvc2l0b3J5OiB7CisgICAgICAgICAgICBuYW1lOiAi
V2ViS2l0IFJlcG8iLAorICAgICAgICAgICAgdHJhYzogdHJhYworICAgICAgICB9CisgICAgfV0K
KyAgICB2YXIgdmlldyA9IG5ldyBNb2NrQnVpbGRib3RRdWV1ZVZpZXcoW3F1ZXVlXSk7CisgICAg
dmlldy5fYXBwZW5kUGVuZGluZ1JldmlzaW9uQ291bnQocXVldWUpOworICAgIHZhciByZXZpc2lv
bnNCZWhpbmQgPSB2aWV3LmVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibWVzc2FnZSIp
WzBdLmlubmVySFRNTC5tYXRjaCgvLiooXGQrKSByZXZpc2lvbih8cykgYmVoaW5kLylbMV07Cisg
ICAgYXNzZXJ0LmVxdWFsKHJldmlzaW9uc0JlaGluZCwgMSwgImFzc2VydCByZXZpc2lvbnMgYmVo
aW5kIik7Cit9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268730</attachid>
            <date>2016-01-11 17:03:11 -0800</date>
            <delta_ts>2016-01-13 12:38:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152982-20160111170240.patch</filename>
            <type>text/plain</type>
            <size>8415</size>
            <attacher name="Jason Marcell">jmarcell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0ODc0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjhhNTlmZjAyNjZjN2Y0NjI1NmFmMzJhZWYzN2Q2OTQz
MTczMmFjZS4uMzRiODEzYjg5MDdkMjEyNWM2ZDgyMDVjNDliNTIxZWM5NzFlZGRjOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIz
IEBACisyMDE2LTAxLTExICBKYXNvbiBNYXJjZWxsICA8am1hcmNlbGxAYXBwbGUuY29tPgorCisg
ICAgICAgIFN0YW5kYXJkaXplIHRoZSB1c2FnZSBvZiAiYnJhbmNoIiB2cy4gImJyYW5jaE5hbWUi
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyOTgy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gYW4g
ZWFybGllciBwYXRjaCB3ZSBzdGFydGVkIHVzaW5nIHRoZSBuYW1lICJicmFuY2giIHRvIGluZGlj
YXRlIGEgYnJhbmNoIG9iamVjdCwgd2hlcmVhcworICAgICAgICAiYnJhbmNoTmFtZSIgaW1wbGll
cyB0aGF0IHRoZSB2YXJpYWJsZSBvciBwcm9wZXJ0eSBpbiBxdWVzdGlvbiBpcyBzaW1wbHkgYSBz
dHJpbmcuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5qczoK
KyAgICAgICAgKEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZS5fcG9wb3ZlckxpbmVzRm9yQ29t
bWl0UmFuZ2UpOiBDaGFuZ2UgYnJhbmNoIHRvIGJyYW5jaE5hbWUuCisgICAgICAgIChCdWlsZGJv
dFF1ZXVlVmlldy5wcm90b3R5cGUuX3ByZXNlbnRQb3BvdmVyRm9yUmV2aXNpb25SYW5nZSk6IENo
YW5nZSBicmFuY2ggdG8gYnJhbmNoLm5hbWUuCisgICAgICAgIChCdWlsZGJvdFF1ZXVlVmlldy5w
cm90b3R5cGUuX3JldmlzaW9uQ29udGVudFdpdGhQb3BvdmVyRm9ySXRlcmF0aW9uKTogQ2hhbmdl
IGJyYW5jaCB0byBicmFuY2hOYW1lLgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1RyYWMuanM6
CisgICAgICAgIChUcmFjLnByb3RvdHlwZS5jb21taXRzT25CcmFuY2gpOiBDaGFuZ2UgYnJhbmNo
IHRvIGJyYW5jaE5hbWUuCisgICAgICAgIChUcmFjLnByb3RvdHlwZS5fY29udmVydENvbW1pdElu
Zm9FbGVtZW50VG9PYmplY3QpOiBEaXR0by4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy90ZXN0
cy9Nb2NrVHJhYy5qczoKKyAgICAgICAgKE1vY2tUcmFjKTogRGl0dG8uCisKIDIwMTYtMDEtMDgg
IEphc29uIE1hcmNlbGwgIDxqbWFyY2VsbEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3Ig
Y29tcGFyZUl0ZXJhdGlvbnMgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBjb2RlLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZVZpZXcuanMgYi9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQv
U2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5qcwppbmRleCA5MjY3ZjQ5ZGE3NTcyZDA0M2QzYjk2
OWI5NDdkZjgwOTI1YjE3ZTM4Li4yNDhlZGFiYzJhZmVkZDQ5YjdkN2UxM2JiYzQxNTY1NWE5OWZl
MjUwIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5q
cworKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlVmlldy5qcwpAQCAtMTEw
LDcgKzExMCw3IEBAIEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgbmV3
IFBvcG92ZXJUcmFja2VyKG1lc3NhZ2VFbGVtZW50LCB0aGlzLl9wcmVzZW50UG9wb3ZlckZvclBl
bmRpbmdDb21taXRzLmJpbmQodGhpcyksIHF1ZXVlKTsKICAgICB9LAogCi0gICAgX3BvcG92ZXJM
aW5lc0ZvckNvbW1pdFJhbmdlOiBmdW5jdGlvbih0cmFjLCBicmFuY2gsIGZpcnN0UmV2aXNpb25O
dW1iZXIsIGxhc3RSZXZpc2lvbk51bWJlcikKKyAgICBfcG9wb3ZlckxpbmVzRm9yQ29tbWl0UmFu
Z2U6IGZ1bmN0aW9uKHRyYWMsIGJyYW5jaE5hbWUsIGZpcnN0UmV2aXNpb25OdW1iZXIsIGxhc3RS
ZXZpc2lvbk51bWJlcikKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGxpbmVGb3JDb21taXQodHJh
YywgY29tbWl0KQogICAgICAgICB7CkBAIC0xNDEsNyArMTQxLDcgQEAgQnVpbGRib3RRdWV1ZVZp
ZXcucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIEZJWE1FOiBUbyBiZSAxMDAlIGNvcnJlY3Qs
IHdlIHNob3VsZCBhbHNvIGZpbHRlciBvdXQgY2hhbmdlcyB0aGF0IGFyZSBpZ25vcmVkIGJ5CiAg
ICAgICAgIC8vIHRoZSBxdWV1ZSwgc2VlIF9zaG91bGRfZmlsZV90cmlnZ2VyX2J1aWxkIGluIHdr
YnVpbGQucHkuCi0gICAgICAgIHZhciBjb21taXRzID0gdHJhYy5jb21taXRzT25CcmFuY2goYnJh
bmNoLCBmdW5jdGlvbihjb21taXQpIHsgcmV0dXJuIGNvbW1pdC5yZXZpc2lvbk51bWJlciA+PSBm
aXJzdFJldmlzaW9uTnVtYmVyICYmIGNvbW1pdC5yZXZpc2lvbk51bWJlciA8PSBsYXN0UmV2aXNp
b25OdW1iZXI7IH0pOworICAgICAgICB2YXIgY29tbWl0cyA9IHRyYWMuY29tbWl0c09uQnJhbmNo
KGJyYW5jaE5hbWUsIGZ1bmN0aW9uKGNvbW1pdCkgeyByZXR1cm4gY29tbWl0LnJldmlzaW9uTnVt
YmVyID49IGZpcnN0UmV2aXNpb25OdW1iZXIgJiYgY29tbWl0LnJldmlzaW9uTnVtYmVyIDw9IGxh
c3RSZXZpc2lvbk51bWJlcjsgfSk7CiAgICAgICAgIHJldHVybiBjb21taXRzLm1hcChmdW5jdGlv
bihjb21taXQpIHsKICAgICAgICAgICAgIHJldHVybiBsaW5lRm9yQ29tbWl0KHRyYWMsIGNvbW1p
dCk7CiAgICAgICAgIH0sIHRoaXMpLnJldmVyc2UoKTsKQEAgLTE4OCw3ICsxODgsNyBAQCBCdWls
ZGJvdFF1ZXVlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0g
ImNvbW1pdC1oaXN0b3J5LXBvcG92ZXIiOwogCiAgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1
YXJhbnRlZXMgdGhhdCBUcmFjIGhhcyBoaXN0b3JpY2FsIGRhdGEgZm9yIHRoZXNlIHJldmlzaW9u
cy4KLSAgICAgICAgdmFyIGxpbmVzRm9yQ29tbWl0cyA9IHRoaXMuX3BvcG92ZXJMaW5lc0ZvckNv
bW1pdFJhbmdlKGNvbnRleHQudHJhYywgY29udGV4dC5icmFuY2gsIGNvbnRleHQuZmlyc3RSZXZp
c2lvbiwgY29udGV4dC5sYXN0UmV2aXNpb24pOworICAgICAgICB2YXIgbGluZXNGb3JDb21taXRz
ID0gdGhpcy5fcG9wb3ZlckxpbmVzRm9yQ29tbWl0UmFuZ2UoY29udGV4dC50cmFjLCBjb250ZXh0
LmJyYW5jaE5hbWUsIGNvbnRleHQuZmlyc3RSZXZpc2lvbiwgY29udGV4dC5sYXN0UmV2aXNpb24p
OwogCiAgICAgICAgIHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAg
ICAgICAgIGxpbmUuY2xhc3NOYW1lID0gInRpdGxlIjsKQEAgLTE5OCw3ICsxOTgsNyBAQCBCdWls
ZGJvdFF1ZXVlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb250ZW50LmFwcGVuZENo
aWxkKGxpbmUpOwogICAgICAgICAgICAgdGhpcy5fYWRkRGl2aWRlclRvUG9wb3Zlcihjb250ZW50
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpbmUudGV4dENvbnRlbnQgPSAibm8g
Y29tbWl0cyB0byAiICsgY29udGV4dC5icmFuY2ggKyAiIHNpbmNlIHByZXZpb3VzIHJlc3VsdCI7
CisgICAgICAgICAgICBsaW5lLnRleHRDb250ZW50ID0gIm5vIGNvbW1pdHMgdG8gIiArIGNvbnRl
eHQuYnJhbmNoTmFtZSArICIgc2luY2UgcHJldmlvdXMgcmVzdWx0IjsKICAgICAgICAgICAgIGNv
bnRlbnQuYXBwZW5kQ2hpbGQobGluZSk7CiAgICAgICAgIH0KIApAQCAtMjMyLDcgKzIzMiw3IEBA
IEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHByZXZpb3VzSXRlcmF0aW9uLnJldmlzaW9uW3JlcG9zaXRvcnlOYW1lXSk7CiAgICAgICAg
ICAgICB2YXIgY29udGV4dCA9IHsKICAgICAgICAgICAgICAgICB0cmFjOiByZXBvc2l0b3J5LnRy
YWMsCi0gICAgICAgICAgICAgICAgYnJhbmNoOiBicmFuY2gubmFtZSwKKyAgICAgICAgICAgICAg
ICBicmFuY2hOYW1lOiBicmFuY2gubmFtZSwKICAgICAgICAgICAgICAgICBmaXJzdFJldmlzaW9u
OiBwcmV2aW91c0l0ZXJhdGlvbi5yZXZpc2lvbltyZXBvc2l0b3J5TmFtZV0gKyAxLAogICAgICAg
ICAgICAgICAgIGxhc3RSZXZpc2lvbjogaXRlcmF0aW9uLnJldmlzaW9uW3JlcG9zaXRvcnlOYW1l
XQogICAgICAgICAgICAgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1RyYWMu
anMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9UcmFjLmpzCmluZGV4IGExZGQyOGZhMjc1MGVjMjkz
M2NiOGJmZWE4ZGMwNDVjM2ExNTI2Y2IuLjJmMGE0ZjJhMWRlNGI2ZTUzZWE4ZmM0OGM1N2ZlODZj
MjcyNDllOTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1RyYWMuanMKKysrIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvZGFzaGJvYXJkL1NjcmlwdHMvVHJhYy5qcwpAQCAtNjMsMTAgKzYzLDEwIEBAIFRyYWMucHJv
dG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRlZENvbW1pdHNbdGhpcy5yZWNv
cmRlZENvbW1pdHMubGVuZ3RoIC0gMV0ucmV2aXNpb25OdW1iZXI7CiAgICAgfSwKIAotICAgIGNv
bW1pdHNPbkJyYW5jaDogZnVuY3Rpb24oYnJhbmNoLCBmaWx0ZXIpCisgICAgY29tbWl0c09uQnJh
bmNoOiBmdW5jdGlvbihicmFuY2hOYW1lLCBmaWx0ZXIpCiAgICAgewogICAgICAgICByZXR1cm4g
dGhpcy5yZWNvcmRlZENvbW1pdHMuZmlsdGVyKGZ1bmN0aW9uKGNvbW1pdCkgewotICAgICAgICAg
ICAgcmV0dXJuICghY29tbWl0LmNvbnRhaW5zQnJhbmNoTG9jYXRpb24gfHwgY29tbWl0LmJyYW5j
aCA9PT0gYnJhbmNoKSAmJiBmaWx0ZXIoY29tbWl0KTsKKyAgICAgICAgICAgIHJldHVybiAoIWNv
bW1pdC5jb250YWluc0JyYW5jaExvY2F0aW9uIHx8IGNvbW1pdC5icmFuY2hOYW1lID09PSBicmFu
Y2hOYW1lKSAmJiBmaWx0ZXIoY29tbWl0KTsKICAgICAgICAgfSk7CiAgICAgfSwKIApAQCAtMTQ5
LDExICsxNDksMTEgQEAgVHJhYy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAobG9jYXRp
b24uc3RhcnRzV2l0aCgidGFncy8iKSkKICAgICAgICAgICAgICAgICByZXN1bHQudGFnID0gbG9j
YXRpb24uc3Vic3RyKDUsIGxvY2F0aW9uLmluZGV4T2YoIi8iLCA1KSAtIDUpOwogICAgICAgICAg
ICAgZWxzZSBpZiAobG9jYXRpb24uc3RhcnRzV2l0aCgiYnJhbmNoZXMvIikpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LmJyYW5jaCA9IGxvY2F0aW9uLnN1YnN0cig5LCBsb2NhdGlvbi5pbmRleE9m
KCIvIiwgOSkgLSA5KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYnJhbmNoTmFtZSA9IGxvY2F0
aW9uLnN1YnN0cig5LCBsb2NhdGlvbi5pbmRleE9mKCIvIiwgOSkgLSA5KTsKICAgICAgICAgICAg
IGVsc2UgaWYgKGxvY2F0aW9uLnN0YXJ0c1dpdGgoInJlbGVhc2VzLyIpKQogICAgICAgICAgICAg
ICAgIHJlc3VsdC5yZWxlYXNlID0gbG9jYXRpb24uc3Vic3RyKDksIGxvY2F0aW9uLmluZGV4T2Yo
Ii8iLCA5KSAtIDkpOwogICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRpb24uc3RhcnRzV2l0aCgi
dHJ1bmsvIikpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmJyYW5jaCA9ICJ0cnVuayI7CisgICAg
ICAgICAgICAgICAgcmVzdWx0LmJyYW5jaE5hbWUgPSAidHJ1bmsiOwogICAgICAgICAgICAgZWxz
ZSBpZiAobG9jYXRpb24uc3RhcnRzV2l0aCgic3VibWlzc2lvbnMvIikpCiAgICAgICAgICAgICAg
ICAgOyAvLyBUaGVzZSBjaGFuZ2VzIGFyZSBuZXZlciByZWxldmFudCB0byB0aGUgZGFzaGJvYXJk
LgogICAgICAgICAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy90
ZXN0cy9Nb2NrVHJhYy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5v
cmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rlc3RzL01vY2tUcmFjLmpz
CmluZGV4IGE0OGY5MTUyYzg5MDVhYzgxODQ5MzZlYTczM2I4ZmNmZDUzYzhlZmUuLmE4YTIwYjdh
OWE1OTM3YzU3OTJjZDdiMTI2OGNmNGE3OGIxODY0MTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2Fy
ZC9TY3JpcHRzL3Rlc3RzL01vY2tUcmFjLmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL3Rl
c3RzL01vY2tUcmFjLmpzCkBAIC0xMCw3ICsxMCw3IEBAIE1vY2tUcmFjID0gZnVuY3Rpb24oKQog
ICAgICAgICAgICAgImRhdGUiOiAiMjAxNS0xMS0xNVQxNzowNTo0NC4wMDBaIiwKICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJkZXNjcmlwdGlvbiIsCiAgICAgICAgICAgICAiY29udGFpbnNC
cmFuY2hMb2NhdGlvbiI6IHRydWUsCi0gICAgICAgICAgICAiYnJhbmNoIjogInRydW5rIgorICAg
ICAgICAgICAgImJyYW5jaE5hbWUiOiAidHJ1bmsiCiAgICAgICAgIH0sCiAgICAgICAgIHsKICAg
ICAgICAgICAgICJyZXZpc2lvbk51bWJlciI6IDMzMDE5LApAQCAtMjAsNyArMjAsNyBAQCBNb2Nr
VHJhYyA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgICJkYXRlIjogIjIwMTUtMTEtMTZUMDE6MTg6
MjMuMDAwWiIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZGVzY3JpcHRpb24iLAogICAg
ICAgICAgICAgImNvbnRhaW5zQnJhbmNoTG9jYXRpb24iOiB0cnVlLAotICAgICAgICAgICAgImJy
YW5jaCI6ICJ0cnVuayIKKyAgICAgICAgICAgICJicmFuY2hOYW1lIjogInRydW5rIgogICAgICAg
ICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAicmV2aXNpb25OdW1iZXIiOiAzMzAyMCwKQEAg
LTMwLDcgKzMwLDcgQEAgTW9ja1RyYWMgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICAiZGF0ZSI6
ICIyMDE1LTExLTE2VDAxOjE5OjI3LjAwMFoiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImRlc2NyaXB0aW9uIiwKICAgICAgICAgICAgICJjb250YWluc0JyYW5jaExvY2F0aW9uIjogdHJ1
ZSwKLSAgICAgICAgICAgICJicmFuY2giOiAidHJ1bmsiCisgICAgICAgICAgICAiYnJhbmNoTmFt
ZSI6ICJ0cnVuayIKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgInJldmlzaW9u
TnVtYmVyIjogMzMwMjEsCkBAIC00MCw3ICs0MCw3IEBAIE1vY2tUcmFjID0gZnVuY3Rpb24oKQog
ICAgICAgICAgICAgImRhdGUiOiAiMjAxNS0xMS0xNlQwMToyMDo1OC4wMDBaIiwKICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJkZXNjcmlwdGlvbiIsCiAgICAgICAgICAgICAiY29udGFpbnNC
cmFuY2hMb2NhdGlvbiI6IHRydWUsCi0gICAgICAgICAgICAiYnJhbmNoIjogInNvbWVPdGhlckJy
YW5jaCIKKyAgICAgICAgICAgICJicmFuY2hOYW1lIjogInNvbWVPdGhlckJyYW5jaCIKICAgICAg
ICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgInJldmlzaW9uTnVtYmVyIjogMzMwMjIsCkBA
IC01MCw3ICs1MCw3IEBAIE1vY2tUcmFjID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgImRhdGUi
OiAiMjAxNS0xMS0xNlQwMToyMjowMS4wMDBaIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJkZXNjcmlwdGlvbiIsCiAgICAgICAgICAgICAiY29udGFpbnNCcmFuY2hMb2NhdGlvbiI6IHRy
dWUsCi0gICAgICAgICAgICAiYnJhbmNoIjogInRydW5rIgorICAgICAgICAgICAgImJyYW5jaE5h
bWUiOiAidHJ1bmsiCiAgICAgICAgIH0KICAgICBdOwogfTsK
</data>
<flag name="review"
          id="293720"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>