<?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>21726</bug_id>
          
          <creation_ts>2008-10-18 00:00:54 -0700</creation_ts>
          <short_desc>Add test for bug 20403 - adding an iframe twice to the DOM thru javascript causes a crash</short_desc>
          <delta_ts>2017-03-11 10:49:03 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jan Alonzo">jmalonzo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95841</commentid>
    <comment_count>0</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-10-18 00:00:54 -0700</bug_when>
    <thetext>Please see attached. I&apos;m not sure how to reduce this further..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95842</commentid>
    <comment_count>1</comment_count>
      <attachid>24483</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-10-18 00:01:55 -0700</bug_when>
    <thetext>Created attachment 24483
tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95844</commentid>
    <comment_count>2</comment_count>
      <attachid>24483</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-10-18 00:09:40 -0700</bug_when>
    <thetext>Comment on attachment 24483
tests

I think we really need to reduce this further before we can land it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24483</attachid>
            <date>2008-10-18 00:01:55 -0700</date>
            <delta_ts>2010-06-10 16:09:46 -0700</delta_ts>
            <desc>tests</desc>
            <filename>onload-same-frame-added-twice-crash.tests.patch</filename>
            <type>text/plain</type>
            <size>541053</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9vbmxvYWQtYWRkLXNhbWUt
aWZyYW1lLXR3aWNlLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mvb25s
b2FkLWFkZC1zYW1lLWlmcmFtZS10d2ljZS1jcmFzaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk4YTdmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL21pc2Mvb25sb2FkLWFkZC1zYW1lLWlmcmFtZS10d2ljZS1jcmFzaC5odG1sCkBA
IC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwg
MS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1z
dHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4K
KzxoZWFkPgorCis8bWV0YSBuYW1lPSJweWd3dDptb2R1bGUiIGNvbnRlbnQ9Im9ubG9hZC1hZGQt
c2FtZS1pZnJhbWUtdHdpY2UtY3Jhc2giIC8+CisKKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQt
VHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCis8L2hlYWQ+Cis8
Ym9keT4KKworPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvcHln
d3QuanMiPjwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvb25sb2FkLWFkZC1zYW1lLWlmcmFtZS10
d2ljZS1jcmFzaC1pZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNv
dXJjZXMvb25sb2FkLWFkZC1zYW1lLWlmcmFtZS10d2ljZS1jcmFzaC1pZnJhbWUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjA4YTRhCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9vbmxvYWQtYWRkLXNhbWUt
aWZyYW1lLXR3aWNlLWNyYXNoLWlmcmFtZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPGh0bWw+Cis8
dGl0bGU+dGVzdCBmcmFtZTwvdGl0bGU+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOjBweDsiPgordGVz
dCBmcmFtZQorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9taXNjL3Jlc291cmNlcy9vbmxvYWQtYWRkLXNhbWUtaWZyYW1lLXR3aWNlLWNyYXNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL29ubG9hZC1hZGQtc2Ft
ZS1pZnJhbWUtdHdpY2UtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xMmZhNTgwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9t
aXNjL3Jlc291cmNlcy9vbmxvYWQtYWRkLXNhbWUtaWZyYW1lLXR3aWNlLWNyYXNoLmh0bWwKQEAg
LTAsMCArMSwxMzA0NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+Cit2YXIgJHduZCA9IHBh
cmVudDsKK3ZhciAkZG9jID0gJHduZC5kb2N1bWVudDsKK3ZhciAkbW9kdWxlTmFtZSA9ICJpbmRl
eDIiOworPC9zY3JpcHQ+CisNCis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImlmIChwYXJlbnQgJiYg
cGFyZW50Ll9fcHlnd3Rfd2ViTW9kZUZyYW1lT25Mb2FkKSBwYXJlbnQuX19weWd3dF93ZWJNb2Rl
RnJhbWVPbkxvYWQod2luZG93LCAnaW5kZXgyJyk7Ij4KKzxmb250IGZhY2U9J2FyaWFsJyBzaXpl
PSctMSc+VGhpcyBzY3JpcHQgaXMgcGFydCBvZiBtb2R1bGU8L2ZvbnQ+IDxjb2RlPm9ubG9hZC1h
ZGQtc2FtZS1pZnJhbWUtdHdpY2UtY3Jhc2g8L2NvZGU+CisNCisNCisNCis8c2NyaXB0PjwhLS0K
KworCitTdG9wSXRlcmF0aW9uID0gZnVuY3Rpb24gKCkge307CitTdG9wSXRlcmF0aW9uLnByb3Rv
dHlwZSA9IG5ldyBFcnJvcigpOworU3RvcEl0ZXJhdGlvbi5uYW1lID0gJ1N0b3BJdGVyYXRpb24n
OworU3RvcEl0ZXJhdGlvbi5tZXNzYWdlID0gJ1N0b3BJdGVyYXRpb24nOworCitLZXlFcnJvciA9
IGZ1bmN0aW9uICgpIHt9OworS2V5RXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CitLZXlF
cnJvci5uYW1lID0gJ0tleUVycm9yJzsKK0tleUVycm9yLm1lc3NhZ2UgPSAnS2V5RXJyb3InOwor
CitmdW5jdGlvbiBweWpzbGliX1N0cmluZ19maW5kKHN1Yiwgc3RhcnQsIGVuZCkgeworICAgIHZh
ciBwb3M9dGhpcy5pbmRleE9mKHN1Yiwgc3RhcnQpOworICAgIGlmIChweWpzbGliX2lzVW5kZWZp
bmVkKGVuZCkpIHJldHVybiBwb3M7CisKKyAgICBpZiAocG9zICsgc3ViLmxlbmd0aD5lbmQpIHJl
dHVybiAtMTsKKyAgICByZXR1cm4gcG9zOworfQorICAgIAorZnVuY3Rpb24gcHlqc2xpYl9TdHJp
bmdfam9pbihkYXRhKSB7CisgICAgdmFyIHRleHQ9IiI7CisgICAgCisgICAgaWYgKHB5anNsaWJf
aXNBcnJheShkYXRhKSkgeworICAgICAgICByZXR1cm4gZGF0YS5qb2luKHRoaXMpOworICAgIH0K
KyAgICBlbHNlIGlmIChweWpzbGliX2lzSXRlcmF0YWJsZShkYXRhKSkgeworICAgICAgICB2YXIg
aXRlcj1kYXRhLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0ZXh0Kz1p
dGVyLm5leHQoKTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAg
dmFyIGl0ZW09aXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgdGV4dCs9dGhpcyArIGl0ZW07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdGV4dDsKK30KKworZnVuY3Rpb24gcHlqc2xpYl9TdHJpbmdfcmVwbGFjZShv
bGQsIHJlcGxhY2UsIGNvdW50KSB7CisgICAgdmFyIGRvX21heD1mYWxzZTsKKyAgICB2YXIgc3Rh
cnQ9MDsKKyAgICB2YXIgbmV3X3N0cj0iIjsKKyAgICB2YXIgcG9zPTA7CisgICAgCisgICAgaWYg
KCFweWpzbGliX2lzU3RyaW5nKG9sZCkpIHJldHVybiB0aGlzLl9fcmVwbGFjZShvbGQsIHJlcGxh
Y2UpOworICAgIGlmICghcHlqc2xpYl9pc1VuZGVmaW5lZChjb3VudCkpIGRvX21heD10cnVlOwor
ICAgIAorICAgIHdoaWxlIChzdGFydDx0aGlzLmxlbmd0aCkgeworICAgICAgICBpZiAoZG9fbWF4
ICYmICFjb3VudC0tKSBicmVhazsKKyAgICAgICAgCisgICAgICAgIHBvcz10aGlzLmluZGV4T2Yo
b2xkLCBzdGFydCk7CisgICAgICAgIGlmIChwb3M8MCkgYnJlYWs7CisgICAgICAgIAorICAgICAg
ICBuZXdfc3RyKz10aGlzLnN1YnN0cmluZyhzdGFydCwgcG9zKSArIHJlcGxhY2U7CisgICAgICAg
IHN0YXJ0PXBvcytvbGQubGVuZ3RoOworICAgIH0KKyAgICBpZiAoc3RhcnQ8dGhpcy5sZW5ndGgp
IG5ld19zdHIrPXRoaXMuc3Vic3RyaW5nKHN0YXJ0KTsKKworICAgIHJldHVybiBuZXdfc3RyOwor
fQorCitmdW5jdGlvbiBweWpzbGliX1N0cmluZ19zcGxpdChzZXAsIG1heHNwbGl0KSB7CisgICAg
dmFyIGl0ZW1zPW5ldyBweWpzbGliX0xpc3QoKTsKKyAgICB2YXIgZG9fbWF4PWZhbHNlOworICAg
IHZhciBzdWJqZWN0PXRoaXM7CisgICAgdmFyIHN0YXJ0PTA7CisgICAgdmFyIHBvcz0wOworICAg
IAorICAgIGlmIChweWpzbGliX2lzVW5kZWZpbmVkKHNlcCkgfHwgcHlqc2xpYl9pc051bGwoc2Vw
KSkgeworICAgICAgICBzZXA9IiAiOworICAgICAgICBzdWJqZWN0PXN1YmplY3Quc3RyaXAoKTsK
KyAgICAgICAgc3ViamVjdD1zdWJqZWN0LnJlcGxhY2UoL1xzKy9nLCBzZXApOworICAgIH0KKyAg
ICBlbHNlIGlmICghcHlqc2xpYl9pc1VuZGVmaW5lZChtYXhzcGxpdCkpIGRvX21heD10cnVlOwor
CisgICAgd2hpbGUgKHN0YXJ0PHN1YmplY3QubGVuZ3RoKSB7CisgICAgICAgIGlmIChkb19tYXgg
JiYgIW1heHNwbGl0LS0pIGJyZWFrOworICAgIAorICAgICAgICBwb3M9c3ViamVjdC5pbmRleE9m
KHNlcCwgc3RhcnQpOworICAgICAgICBpZiAocG9zPDApIGJyZWFrOworICAgICAgICAKKyAgICAg
ICAgaXRlbXMuYXBwZW5kKHN1YmplY3Quc3Vic3RyaW5nKHN0YXJ0LCBwb3MpKTsKKyAgICAgICAg
c3RhcnQ9cG9zK3NlcC5sZW5ndGg7CisgICAgfQorICAgIGlmIChzdGFydDxzdWJqZWN0Lmxlbmd0
aCkgaXRlbXMuYXBwZW5kKHN1YmplY3Quc3Vic3RyaW5nKHN0YXJ0KSk7CisgICAgCisgICAgcmV0
dXJuIGl0ZW1zOworfQorCitmdW5jdGlvbiBweWpzbGliX1N0cmluZ19zdHJpcChjaGFycykgewor
ICAgIHJldHVybiB0aGlzLmxzdHJpcChjaGFycykucnN0cmlwKGNoYXJzKTsKK30KKworZnVuY3Rp
b24gcHlqc2xpYl9TdHJpbmdfbHN0cmlwKGNoYXJzKSB7CisgICAgaWYgKHB5anNsaWJfaXNVbmRl
ZmluZWQoY2hhcnMpKSByZXR1cm4gdGhpcy5yZXBsYWNlKC9eXHMrLywgIiIpOworCisgICAgcmV0
dXJuIHRoaXMucmVwbGFjZShuZXcgUmVnRXhwKCJeWyIgKyBjaGFycyArICJdKyIpLCAiIik7Cit9
CisKK2Z1bmN0aW9uIHB5anNsaWJfU3RyaW5nX3JzdHJpcChjaGFycykgeworICAgIGlmIChweWpz
bGliX2lzVW5kZWZpbmVkKGNoYXJzKSkgcmV0dXJuIHRoaXMucmVwbGFjZSgvXHMrJC8sICIiKTsK
KworICAgIHJldHVybiB0aGlzLnJlcGxhY2UobmV3IFJlZ0V4cCgiWyIgKyBjaGFycyArICJdKyQi
KSwgIiIpOworfQorCitmdW5jdGlvbiBweWpzbGliX1N0cmluZ19zdGFydHN3aXRoKHByZWZpeCwg
c3RhcnQpIHsKKyAgICBpZiAocHlqc2xpYl9pc1VuZGVmaW5lZChzdGFydCkpIHN0YXJ0ID0gMDsK
KworICAgIGlmICh0aGlzLnN1YnN0cmluZyhzdGFydCwgcHJlZml4Lmxlbmd0aCkgPT0gcHJlZml4
KSByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZy5wcm90b3R5cGUu
X19nZXRpdGVtX18gPSBTdHJpbmcucHJvdG90eXBlLmNoYXJBdDsKK1N0cmluZy5wcm90b3R5cGUu
dXBwZXIgPSBTdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlOworU3RyaW5nLnByb3RvdHlwZS5s
b3dlciA9IFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2U7CitTdHJpbmcucHJvdG90eXBlLmZp
bmQ9cHlqc2xpYl9TdHJpbmdfZmluZDsKK1N0cmluZy5wcm90b3R5cGUuam9pbj1weWpzbGliX1N0
cmluZ19qb2luOworCitTdHJpbmcucHJvdG90eXBlLl9fcmVwbGFjZT1TdHJpbmcucHJvdG90eXBl
LnJlcGxhY2U7CitTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U9cHlqc2xpYl9TdHJpbmdfcmVwbGFj
ZTsKKworU3RyaW5nLnByb3RvdHlwZS5zcGxpdD1weWpzbGliX1N0cmluZ19zcGxpdDsKK1N0cmlu
Zy5wcm90b3R5cGUuc3RyaXA9cHlqc2xpYl9TdHJpbmdfc3RyaXA7CitTdHJpbmcucHJvdG90eXBl
LmxzdHJpcD1weWpzbGliX1N0cmluZ19sc3RyaXA7CitTdHJpbmcucHJvdG90eXBlLnJzdHJpcD1w
eWpzbGliX1N0cmluZ19yc3RyaXA7CitTdHJpbmcucHJvdG90eXBlLnN0YXJ0c3dpdGg9cHlqc2xp
Yl9TdHJpbmdfc3RhcnRzd2l0aDsKKwordmFyIHN0ciA9IFN0cmluZzsKKwordmFyIHB5anNsaWJf
YWJzID0gTWF0aC5hYnM7CisKK2Z1bmN0aW9uIHB5anNfZXh0ZW5kKGtsYXNzLCBiYXNlKSB7Cisg
ICAgZnVuY3Rpb24ga2xhc3Nfb2JqZWN0X2luaGVyaXQoKSB7fQorICAgIGtsYXNzX29iamVjdF9p
bmhlcml0LnByb3RvdHlwZSA9IGJhc2UucHJvdG90eXBlOworICAgIGtsYXNzX29iamVjdCA9IG5l
dyBrbGFzc19vYmplY3RfaW5oZXJpdCgpOworICAgIGZvciAodmFyIGkgaW4gYmFzZS5wcm90b3R5
cGUuX19jbGFzc19fKSB7CisgICAgICAgIHYgPSBiYXNlLnByb3RvdHlwZS5fX2NsYXNzX19baV07
CisgICAgICAgIGlmICh0eXBlb2YgdiA9PSAiZnVuY3Rpb24iICYmICh2LmNsYXNzX21ldGhvZCB8
fCB2LnN0YXRpY19tZXRob2QgfHwgdi51bmJvdW5kX21ldGhvZCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGtsYXNzX29iamVjdFtpXSA9IHY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
ZnVuY3Rpb24ga2xhc3NfaW5oZXJpdCgpIHt9CisgICAga2xhc3NfaW5oZXJpdC5wcm90b3R5cGUg
PSBrbGFzc19vYmplY3Q7CisgICAga2xhc3MucHJvdG90eXBlID0gbmV3IGtsYXNzX2luaGVyaXQo
KTsKKyAgICBrbGFzc19vYmplY3QuY29uc3RydWN0b3IgPSBrbGFzczsKKyAgICBrbGFzcy5wcm90
b3R5cGUuX19jbGFzc19fID0ga2xhc3Nfb2JqZWN0OworICAgIAorICAgIGZvciAodmFyIGkgaW4g
YmFzZS5wcm90b3R5cGUpIHsKKyAgICAgICAgdiA9IGJhc2UucHJvdG90eXBlW2ldOworICAgICAg
ICBpZiAodHlwZW9mIHYgPT0gImZ1bmN0aW9uIiAmJiB2Lmluc3RhbmNlX21ldGhvZCkKKyAgICAg
ICAgeworICAgICAgICAgICAga2xhc3MucHJvdG90eXBlW2ldID0gdjsKKyAgICAgICAgfQorICAg
IH0KK30KKworZnVuY3Rpb24gcHlqc19rd2FyZ3NfZnVuY3Rpb25fY2FsbChmdW5jLCBhcmdzKQor
eworICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGZ1bmMucGFyc2Vfa3dhcmdzLmFwcGx5KG51
bGwsIGFyZ3MpKTsKK30KKworZnVuY3Rpb24gcHlqc19rd2FyZ3NfbWV0aG9kX2NhbGwob2JqLCBt
ZXRob2RfbmFtZSwgYXJncykKK3sKKyAgICB2YXIgbWV0aG9kID0gb2JqW21ldGhvZF9uYW1lXTsK
KyAgICByZXR1cm4gbWV0aG9kLmFwcGx5KG9iaiwgbWV0aG9kLnBhcnNlX2t3YXJncy5hcHBseShu
dWxsLCBhcmdzKSk7Cit9CisKKworZnVuY3Rpb24gX19weWpzbGliX09iamVjdCgpIHsKK30KK2Z1
bmN0aW9uIHB5anNsaWJfT2JqZWN0KCkgeworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3B5anNs
aWJfT2JqZWN0KCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9f
LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwor
CitmdW5jdGlvbiBfX3B5anNsaWJfT2JqZWN0X2luaXRpYWxpemUoKSB7CisgICAgaWYoX19weWpz
bGliX09iamVjdC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX19weWpzbGliX09i
amVjdC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfT2JqZWN0LnBy
b3RvdHlwZS5fX2NsYXNzX18gPSB7fTsKKyAgICBfX3B5anNsaWJfT2JqZWN0LnByb3RvdHlwZS5f
X2NsYXNzX18uX19uZXdfXyA9IHB5anNsaWJfT2JqZWN0OworfQorZnVuY3Rpb24gX19weWpzbGli
X0NsYXNzKCkgeworfQorZnVuY3Rpb24gcHlqc2xpYl9DbGFzcyhuYW1lKSB7CisgICAgdmFyIGlu
c3RhbmNlID0gbmV3IF9fcHlqc2xpYl9DbGFzcygpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9f
KSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1
cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX19weWpzbGliX0NsYXNzX2luaXRpYWxpemUo
KSB7CisgICAgaWYoX19weWpzbGliX0NsYXNzLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsK
KyAgICBfX3B5anNsaWJfQ2xhc3MuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgcHlq
c19leHRlbmQoX19weWpzbGliX0NsYXNzLCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3B5anNs
aWJfQ2xhc3MucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gcHlqc2xpYl9DbGFzczsKKyAg
ICBfX3B5anNsaWJfQ2xhc3MucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24obmFtZSkgewor
ICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfTsKKyAgICBfX3B5anNsaWJfQ2xhc3MucHJvdG90
eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19w
eWpzbGliX0NsYXNzLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9fcHlqc2xpYl9DbGFz
cy5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5anNsaWJf
Q2xhc3MucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX19weWpzbGliX0NsYXNzLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fcHlqc2xpYl9DbGFzcy5wcm90b3R5cGUuX19zdHJfX18gPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gdGhpcy5uYW1lOworICAgIH07CisgICAgX19weWpzbGliX0NsYXNz
LnByb3RvdHlwZS5fX2NsYXNzX18uX19zdHJfX18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fcHlqc2xpYl9DbGFzcy5wcm90b3R5cGUuX19zdHJfX18uY2FsbC5hcHBseShfX3B5anNs
aWJfQ2xhc3MucHJvdG90eXBlLl9fc3RyX19fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19w
eWpzbGliX0NsYXNzLnByb3RvdHlwZS5fX2NsYXNzX18uX19zdHJfX18udW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fcHlqc2xpYl9DbGFzcy5wcm90b3R5cGUuX19zdHJfX18uaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIHB5anNsaWJfY21wKGEsIGIpIHsKKyAgICBpZiAo
cHlqc2xpYl9oYXNhdHRyKGEsICdfX2NtcF9fJykpIHsKKyAgICByZXR1cm4gYS5fX2NtcF9fKGIp
OworICAgIH0KKyAgICBlbHNlIGlmIChweWpzbGliX2hhc2F0dHIoYSwgJ19fY21wX18nKSkgewor
ICAgIHJldHVybiAtYi5fX2NtcF9fKGEpOworICAgIH0KKyAgICBpZiAoKGEgPiBiKSkgeworICAg
IHJldHVybiAxOworICAgIH0KKyAgICBlbHNlIGlmICgoYiA+IGEpKSB7CisgICAgcmV0dXJuIC0x
OworICAgIH0KKyAgICBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKworZnVuY3Rp
b24gX19weWpzbGliX0xpc3QoKSB7Cit9CitmdW5jdGlvbiBweWpzbGliX0xpc3QoZGF0YSkgewor
ICAgIGlmICh0eXBlb2YgZGF0YSA9PSAndW5kZWZpbmVkJykgZGF0YT1udWxsOworICAgIHZhciBp
bnN0YW5jZSA9IG5ldyBfX3B5anNsaWJfTGlzdCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9f
KSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1
cm4gaW5zdGFuY2U7Cit9CisKKworcHlqc2xpYl9MaXN0LnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9u
ICggX19rd2FyZ3MsIGRhdGEgKSB7CisgICAgaWYgKHR5cGVvZiBkYXRhID09ICd1bmRlZmluZWQn
KQorICAgICAgICBkYXRhPV9fa3dhcmdzLmRhdGE7CisgICAgdmFyIF9fciA9IFtkYXRhXTsKKyAg
ICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9fcHlqc2xpYl9MaXN0X2luaXRpYWxpemUoKSB7
CisgICAgaWYoX19weWpzbGliX0xpc3QuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAg
IF9fcHlqc2xpYl9MaXN0Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIHB5anNfZXh0
ZW5kKF9fcHlqc2xpYl9MaXN0LCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3B5anNsaWJfTGlz
dC5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSBweWpzbGliX0xpc3Q7CisgICAgX19weWpz
bGliX0xpc3QucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oZGF0YSkgeworICAgIGlmICh0
eXBlb2YgZGF0YSA9PSAndW5kZWZpbmVkJykgZGF0YT1udWxsOworCisgICAgICAgIHRoaXMubCA9
IFtdOworICAgICAgICAKKyAgICAgICAgaWYgKHB5anNsaWJfaXNBcnJheShkYXRhKSkgeworICAg
ICAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgIHRoaXMubFtpXT1kYXRhW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAocHlqc2xpYl9pc0l0ZXJhdGFibGUoZGF0YSkpIHsKKyAgICAg
ICAgICAgIHZhciBpdGVyPWRhdGEuX19pdGVyX18oKTsKKyAgICAgICAgICAgIHZhciBpPTA7Cisg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBpdGVtPWl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICB0
aGlzLmxbaSsrXT1pdGVtOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZSAhPSBTdG9w
SXRlcmF0aW9uKSB0aHJvdyBlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgfTsKK19fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9r
d2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBkYXRhICkgeworICAgIGlmICh0eXBlb2YgZGF0
YSA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgZGF0YT1fX2t3YXJncy5kYXRhOworICAgIHZhciBf
X3IgPSBbZGF0YV07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX19weWpzbGliX0xpc3QucHJv
dG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X19weWpzbGliX0xpc3QucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX19weWpzbGliX0xp
c3QucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19weWpzbGli
X0xpc3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy5w
YXJzZV9rd2FyZ3MgPSBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuX19pbml0X18ucGFyc2Vfa3dh
cmdzOworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihpdGVt
KSB7CisgICAgdGhpcy5sW3RoaXMubC5sZW5ndGhdID0gaXRlbTsKKyAgICB9OworICAgIF9fcHlq
c2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uYXBwZW5kID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuYXBwZW5kLmNhbGwuYXBwbHkoX19w
eWpzbGliX0xpc3QucHJvdG90eXBlLmFwcGVuZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9f
cHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uYXBwZW5kLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuYXBwZW5kLmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9u
KHZhbHVlKSB7CisKKyAgICAgICAgdmFyIGluZGV4PXRoaXMuaW5kZXgodmFsdWUpOworICAgICAg
ICBpZiAoaW5kZXg8MCkgcmV0dXJuIGZhbHNlOworICAgICAgICB0aGlzLmwuc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIH07CisgICAgX19weWpz
bGliX0xpc3QucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5yZW1vdmUuY2FsbC5hcHBseShfX3B5
anNsaWJfTGlzdC5wcm90b3R5cGUucmVtb3ZlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19w
eWpzbGliX0xpc3QucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5yZW1vdmUuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuaW5kZXggPSBmdW5jdGlvbih2
YWx1ZSwgc3RhcnQpIHsKKyAgICBpZiAodHlwZW9mIHN0YXJ0ID09ICd1bmRlZmluZWQnKSBzdGFy
dD0wOworCisgICAgICAgIHZhciBsZW5ndGg9dGhpcy5sLmxlbmd0aDsKKyAgICAgICAgZm9yICh2
YXIgaT1zdGFydDsgaTxsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMubFtpXT09
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgCisgICAgfTsKK19fcHlq
c2xpYl9MaXN0LnByb3RvdHlwZS5pbmRleC5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dh
cmdzLCB2YWx1ZSwgc3RhcnQgKSB7CisgICAgaWYgKHR5cGVvZiBzdGFydCA9PSAndW5kZWZpbmVk
JykKKyAgICAgICAgc3RhcnQ9X19rd2FyZ3Muc3RhcnQ7CisgICAgdmFyIF9fciA9IFt2YWx1ZSwg
c3RhcnRdOworICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlw
ZS5fX2NsYXNzX18uaW5kZXggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fcHlqc2xp
Yl9MaXN0LnByb3RvdHlwZS5pbmRleC5jYWxsLmFwcGx5KF9fcHlqc2xpYl9MaXN0LnByb3RvdHlw
ZS5pbmRleCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlw
ZS5fX2NsYXNzX18uaW5kZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9M
aXN0LnByb3RvdHlwZS5pbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xp
Yl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uaW5kZXgucGFyc2Vfa3dhcmdzID0gX19weWpzbGli
X0xpc3QucHJvdG90eXBlLmluZGV4LnBhcnNlX2t3YXJnczsKKyAgICBfX3B5anNsaWJfTGlzdC5w
cm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24oaW5kZXgsIHZhbHVlKSB7CisgICAgdmFyIGEgPSB0
aGlzLmw7IHRoaXMubD1hLnNsaWNlKDAsIGluZGV4KS5jb25jYXQodmFsdWUsIGEuc2xpY2UoaW5k
ZXgpKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uaW5z
ZXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3B5anNsaWJfTGlzdC5wcm90b3R5
cGUuaW5zZXJ0LmNhbGwuYXBwbHkoX19weWpzbGliX0xpc3QucHJvdG90eXBlLmluc2VydCwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18u
aW5zZXJ0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5
cGUuaW5zZXJ0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0xpc3QucHJv
dG90eXBlLnBvcCA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKHR5cGVvZiBpbmRleCA9PSAn
dW5kZWZpbmVkJykgaW5kZXg9LTE7CisKKyAgICAgICAgaWYgKGluZGV4PDApIGluZGV4ID0gdGhp
cy5sLmxlbmd0aCArIGluZGV4OworICAgICAgICB2YXIgYSA9IHRoaXMubFtpbmRleF07CisgICAg
ICAgIHRoaXMubC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICByZXR1cm4gYTsKKyAgICAgICAg
CisgICAgfTsKK19fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5wb3AucGFyc2Vfa3dhcmdzID0gZnVu
Y3Rpb24gKCBfX2t3YXJncywgaW5kZXggKSB7CisgICAgaWYgKHR5cGVvZiBpbmRleCA9PSAndW5k
ZWZpbmVkJykKKyAgICAgICAgaW5kZXg9X19rd2FyZ3MuaW5kZXg7CisgICAgdmFyIF9fciA9IFtp
bmRleF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBl
Ll9fY2xhc3NfXy5wb3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fcHlqc2xpYl9M
aXN0LnByb3RvdHlwZS5wb3AuY2FsbC5hcHBseShfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUucG9w
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fY2xh
c3NfXy5wb3AudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9MaXN0LnByb3Rv
dHlwZS5wb3AuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90
b3R5cGUuX19jbGFzc19fLnBvcC5wYXJzZV9rd2FyZ3MgPSBfX3B5anNsaWJfTGlzdC5wcm90b3R5
cGUucG9wLnBhcnNlX2t3YXJnczsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuc2xpY2Ug
PSBmdW5jdGlvbihsb3dlciwgdXBwZXIpIHsKKworICAgICAgICBpZiAodXBwZXI9PW51bGwpIHJl
dHVybiBweWpzbGliX0xpc3QodGhpcy5sLnNsaWNlKGxvd2VyKSk7CisgICAgICAgIHJldHVybiBw
eWpzbGliX0xpc3QodGhpcy5sLnNsaWNlKGxvd2VyLCB1cHBlcikpOworICAgICAgICAKKyAgICB9
OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2xpY2UgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5zbGljZS5jYWxs
LmFwcGx5KF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5zbGljZSwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2xpY2UudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5zbGljZS5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2dldGl0ZW1f
XyA9IGZ1bmN0aW9uKGluZGV4KSB7CisKKyAgICAgICAgaWYgKGluZGV4PDApIGluZGV4ID0gdGhp
cy5sLmxlbmd0aCArIGluZGV4OworICAgICAgICByZXR1cm4gdGhpcy5sW2luZGV4XTsKKyAgICAg
ICAgCisgICAgfTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuX19jbGFzc19fLl9fZ2V0
aXRlbV9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3B5anNsaWJfTGlzdC5wcm90
b3R5cGUuX19nZXRpdGVtX18uY2FsbC5hcHBseShfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuX19n
ZXRpdGVtX18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5
cGUuX19jbGFzc19fLl9fZ2V0aXRlbV9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5
anNsaWJfTGlzdC5wcm90b3R5cGUuX19nZXRpdGVtX18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuX19zZXRpdGVtX18gPSBmdW5jdGlvbihpbmRl
eCwgdmFsdWUpIHsKKyAgICB0aGlzLmxbaW5kZXhdPXZhbHVlOworICAgIH07CisgICAgX19weWpz
bGliX0xpc3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX3NldGl0ZW1fXyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fc2V0aXRlbV9fLmNhbGwu
YXBwbHkoX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fc2V0aXRlbV9fLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX3NldGl0ZW1f
Xy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9f
c2V0aXRlbV9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0xpc3QucHJv
dG90eXBlLl9fZGVsaXRlbV9fID0gZnVuY3Rpb24oaW5kZXgpIHsKKyAgICB0aGlzLmwuc3BsaWNl
KGluZGV4LCAxKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNz
X18uX19kZWxpdGVtX18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fcHlqc2xpYl9M
aXN0LnByb3RvdHlwZS5fX2RlbGl0ZW1fXy5jYWxsLmFwcGx5KF9fcHlqc2xpYl9MaXN0LnByb3Rv
dHlwZS5fX2RlbGl0ZW1fXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9MaXN0
LnByb3RvdHlwZS5fX2NsYXNzX18uX19kZWxpdGVtX18udW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2RlbGl0ZW1fXy5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2xlbl9fID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMubC5sZW5ndGg7CisgICAgfTsKKyAgICBfX3B5anNsaWJfTGlz
dC5wcm90b3R5cGUuX19jbGFzc19fLl9fbGVuX18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2xlbl9fLmNhbGwuYXBwbHkoX19weWpzbGli
X0xpc3QucHJvdG90eXBlLl9fbGVuX18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5anNs
aWJfTGlzdC5wcm90b3R5cGUuX19jbGFzc19fLl9fbGVuX18udW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2xlbl9fLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fY29udGFpbnNfXyA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuICh0aGlzLmluZGV4KHZhbHVlKSA+PSAwKTsKKyAgICB9
OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uX19jb250YWluc19fID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuX19j
b250YWluc19fLmNhbGwuYXBwbHkoX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fY29udGFpbnNf
XywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2Ns
YXNzX18uX19jb250YWluc19fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJf
TGlzdC5wcm90b3R5cGUuX19jb250YWluc19fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X19weWpzbGliX0xpc3QucHJvdG90eXBlLl9faXRlcl9fID0gZnVuY3Rpb24oKSB7CisKKyAgICAg
ICAgdmFyIGkgPSAwOworICAgICAgICB2YXIgbCA9IHRoaXMubDsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAnbmV4dCc6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGlmIChpID49IGwubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IFN0b3BJ
dGVyYXRpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBsW2kr
K107CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ19faXRlcl9fJzogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIAorICAgIH07CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2l0ZXJfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19weWpzbGliX0xpc3Qu
cHJvdG90eXBlLl9faXRlcl9fLmNhbGwuYXBwbHkoX19weWpzbGliX0xpc3QucHJvdG90eXBlLl9f
aXRlcl9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBl
Ll9fY2xhc3NfXy5fX2l0ZXJfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGli
X0xpc3QucHJvdG90eXBlLl9faXRlcl9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19w
eWpzbGliX0xpc3QucHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbihjb21wYXJlRnVuYywga2V5RnVu
YywgcmV2ZXJzZSkgeworICAgIGlmICh0eXBlb2YgY29tcGFyZUZ1bmMgPT0gJ3VuZGVmaW5lZCcp
IGNvbXBhcmVGdW5jPW51bGw7CisgICAgaWYgKHR5cGVvZiBrZXlGdW5jID09ICd1bmRlZmluZWQn
KSBrZXlGdW5jPW51bGw7CisgICAgaWYgKHR5cGVvZiByZXZlcnNlID09ICd1bmRlZmluZWQnKSBy
ZXZlcnNlPWZhbHNlOworICAgIGlmICghKGNvbXBhcmVGdW5jKSkgeworICAgIHZhciBjb21wYXJl
RnVuYyA9IHB5anNsaWJfY21wOworICAgIH0KKyAgICBpZiAoa2V5RnVuYyAmJiByZXZlcnNlKSB7
CitmdW5jdGlvbiB0aGlzU29ydDEoYSwgYikgeworICAgIHJldHVybiAtY29tcGFyZUZ1bmMoa2V5
RnVuYyhhKSwga2V5RnVuYyhiKSk7Cit9CisKKworICAgIHRoaXMubC5zb3J0KHRoaXNTb3J0MSk7
CisgICAgfQorICAgIGVsc2UgaWYgKGtleUZ1bmMpIHsKK2Z1bmN0aW9uIHRoaXNTb3J0MihhLCBi
KSB7CisgICAgcmV0dXJuIGNvbXBhcmVGdW5jKGtleUZ1bmMoYSksIGtleUZ1bmMoYikpOworfQor
CisKKyAgICB0aGlzLmwuc29ydCh0aGlzU29ydDIpOworICAgIH0KKyAgICBlbHNlIGlmIChyZXZl
cnNlKSB7CitmdW5jdGlvbiB0aGlzU29ydDMoYSwgYikgeworICAgIHJldHVybiAtY29tcGFyZUZ1
bmMoYSwgYik7Cit9CisKKworICAgIHRoaXMubC5zb3J0KHRoaXNTb3J0Myk7CisgICAgfQorICAg
IGVsc2UgeworICAgIHRoaXMubC5zb3J0KGNvbXBhcmVGdW5jKTsKKyAgICB9CisgICAgfTsKK19f
cHlqc2xpYl9MaXN0LnByb3RvdHlwZS5zb3J0LnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19r
d2FyZ3MsIGNvbXBhcmVGdW5jLCBrZXlGdW5jLCByZXZlcnNlICkgeworICAgIGlmICh0eXBlb2Yg
Y29tcGFyZUZ1bmMgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGNvbXBhcmVGdW5jPV9fa3dhcmdz
LmNvbXBhcmVGdW5jOworICAgIGlmICh0eXBlb2Yga2V5RnVuYyA9PSAndW5kZWZpbmVkJykKKyAg
ICAgICAga2V5RnVuYz1fX2t3YXJncy5rZXlGdW5jOworICAgIGlmICh0eXBlb2YgcmV2ZXJzZSA9
PSAndW5kZWZpbmVkJykKKyAgICAgICAgcmV2ZXJzZT1fX2t3YXJncy5yZXZlcnNlOworICAgIHZh
ciBfX3IgPSBbY29tcGFyZUZ1bmMsIGtleUZ1bmMsIHJldmVyc2VdOworICAgIHJldHVybiBfX3I7
Cit9OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uc29ydCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX19weWpzbGliX0xpc3QucHJvdG90eXBlLnNvcnQuY2Fs
bC5hcHBseShfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuc29ydCwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uc29ydC51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0xpc3QucHJvdG90eXBlLnNvcnQuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuX19jbGFzc19fLnNv
cnQucGFyc2Vfa3dhcmdzID0gX19weWpzbGliX0xpc3QucHJvdG90eXBlLnNvcnQucGFyc2Vfa3dh
cmdzOworICAgIF9fcHlqc2xpYl9MaXN0LnByb3RvdHlwZS5nZXRBcnJheSA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLmw7CisgICAgfTsKKyAgICBfX3B5anNsaWJfTGlzdC5wcm90b3R5
cGUuX19jbGFzc19fLmdldEFycmF5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3B5
anNsaWJfTGlzdC5wcm90b3R5cGUuZ2V0QXJyYXkuY2FsbC5hcHBseShfX3B5anNsaWJfTGlzdC5w
cm90b3R5cGUuZ2V0QXJyYXksIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5anNsaWJfTGlz
dC5wcm90b3R5cGUuX19jbGFzc19fLmdldEFycmF5LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuZ2V0QXJyYXkuaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKK30KK3ZhciBweWpzbGliX2xpc3QgPSBfX3B5anNsaWJfTGlzdC5wcm90b3R5cGUuX19jbGFz
c19fOworZnVuY3Rpb24gX19weWpzbGliX1R1cGxlKCkgeworfQorZnVuY3Rpb24gcHlqc2xpYl9U
dXBsZShkYXRhKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fcHlqc2xpYl9UdXBsZSgpOwor
ICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5j
ZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX19w
eWpzbGliX1R1cGxlX2luaXRpYWxpemUoKSB7CisgICAgaWYoX19weWpzbGliX1R1cGxlLl9fd2Fz
X2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3B5anNsaWJfVHVwbGUuX193YXNfaW5pdGlh
bGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fcHlqc2xpYl9MaXN0Ll9fd2FzX2luaXRpYWxpemVk
X18pCisgICAgICAgIF9fcHlqc2xpYl9MaXN0X2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVu
ZChfX3B5anNsaWJfVHVwbGUsIF9fcHlqc2xpYl9MaXN0KTsKKyAgICBfX3B5anNsaWJfVHVwbGUu
cHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gcHlqc2xpYl9UdXBsZTsKKyAgICBfX3B5anNs
aWJfVHVwbGUucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oZGF0YSkgeworICAgIF9fcHlq
c2xpYl9MaXN0LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18odGhpcywgZGF0YSk7CisgICAg
fTsKKyAgICBfX3B5anNsaWJfVHVwbGUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19weWpzbGliX1R1cGxlLnByb3RvdHlwZS5fX2lu
aXRfXy5jYWxsLmFwcGx5KF9fcHlqc2xpYl9UdXBsZS5wcm90b3R5cGUuX19pbml0X18sIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3B5anNsaWJfVHVwbGUucHJvdG90eXBlLl9fY2xhc3NfXy5f
X2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX1R1cGxlLnByb3Rv
dHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQordmFyIHB5anNsaWJfdHVw
bGUgPSBfX3B5anNsaWJfVHVwbGUucHJvdG90eXBlLl9fY2xhc3NfXzsKK2Z1bmN0aW9uIF9fcHlq
c2xpYl9EaWN0KCkgeworfQorZnVuY3Rpb24gcHlqc2xpYl9EaWN0KGRhdGEpIHsKKyAgICBpZiAo
dHlwZW9mIGRhdGEgPT0gJ3VuZGVmaW5lZCcpIGRhdGE9bnVsbDsKKyAgICB2YXIgaW5zdGFuY2Ug
PSBuZXcgX19weWpzbGliX0RpY3QoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFu
Y2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3Rh
bmNlOworfQorCisKK3B5anNsaWJfRGljdC5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dh
cmdzLCBkYXRhICkgeworICAgIGlmICh0eXBlb2YgZGF0YSA9PSAndW5kZWZpbmVkJykKKyAgICAg
ICAgZGF0YT1fX2t3YXJncy5kYXRhOworICAgIHZhciBfX3IgPSBbZGF0YV07CisgICAgcmV0dXJu
IF9fcjsKK307CitmdW5jdGlvbiBfX3B5anNsaWJfRGljdF9pbml0aWFsaXplKCkgeworICAgIGlm
KF9fcHlqc2xpYl9EaWN0Ll9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3B5anNs
aWJfRGljdC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBweWpzX2V4dGVuZChfX3B5
anNsaWJfRGljdCwgX19weWpzbGliX09iamVjdCk7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90
eXBlLl9fY2xhc3NfXy5fX25ld19fID0gcHlqc2xpYl9EaWN0OworICAgIF9fcHlqc2xpYl9EaWN0
LnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICBpZiAodHlwZW9mIGRh
dGEgPT0gJ3VuZGVmaW5lZCcpIGRhdGE9bnVsbDsKKworICAgICAgICB0aGlzLmQgPSB7fTsKKwor
ICAgICAgICBpZiAocHlqc2xpYl9pc0FycmF5KGRhdGEpKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBpIGluIGRhdGEpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbT1kYXRhW2ldOworICAgICAg
ICAgICAgICAgIHRoaXMuZFtpdGVtWzBdXT1pdGVtWzFdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHlqc2xpYl9pc0l0ZXJhdGFibGUoZGF0YSkp
IHsKKyAgICAgICAgICAgIHZhciBpdGVyPWRhdGEuX19pdGVyX18oKTsKKyAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGl0ZW09aXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZFtpdGVtLl9f
Z2V0aXRlbV9fKDApXT1pdGVtLl9fZ2V0aXRlbV9fKDEpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB0aHJvdyBlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHlqc2xpYl9pc09iamVjdChkYXRhKSkg
eworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmRba2V5XT1kYXRhW2tleV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAKKyAgICB9OworX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9faW5pdF9fLnBhcnNl
X2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIGRhdGEgKSB7CisgICAgaWYgKHR5cGVvZiBk
YXRhID09ICd1bmRlZmluZWQnKQorICAgICAgICBkYXRhPV9fa3dhcmdzLmRhdGE7CisgICAgdmFy
IF9fciA9IFtkYXRhXTsKKyAgICByZXR1cm4gX19yOworfTsKKyAgICBfX3B5anNsaWJfRGljdC5w
cm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3B5anNsaWJf
RGljdC5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5anNs
aWJfRGljdC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
LnBhcnNlX2t3YXJncyA9IF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9r
d2FyZ3M7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fc2V0aXRlbV9fID0gZnVuY3Rp
b24oa2V5LCB2YWx1ZSkgeworIHRoaXMuZFtrZXldPXZhbHVlOworICAgIH07CisgICAgX19weWpz
bGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX3NldGl0ZW1fXyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fc2V0aXRlbV9fLmNhbGwu
YXBwbHkoX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fc2V0aXRlbV9fLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX3NldGl0ZW1f
Xy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9f
c2V0aXRlbV9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJv
dG90eXBlLl9fZ2V0aXRlbV9fID0gZnVuY3Rpb24oa2V5KSB7CisKKyAgICAgICAgdmFyIHZhbHVl
PXRoaXMuZFtrZXldOworICAgICAgICAvLyBpZiAocHlqc2xpYl9pc1VuZGVmaW5lZCh2YWx1ZSkp
IHRocm93IEtleUVycm9yOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIAorICAgIH07
CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX2dldGl0ZW1fXyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fZ2V0
aXRlbV9fLmNhbGwuYXBwbHkoX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fZ2V0aXRlbV9fLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2dldGl0ZW1fXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0RpY3Qu
cHJvdG90eXBlLl9fZ2V0aXRlbV9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19weWpz
bGliX0RpY3QucHJvdG90eXBlLl9fbGVuX18gPSBmdW5jdGlvbigpIHsKKworICAgICAgICB2YXIg
c2l6ZT0wOworICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuZCkgc2l6ZSsrOworICAgICAgICBy
ZXR1cm4gc2l6ZTsKKyAgICAgICAgCisgICAgfTsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90b3R5
cGUuX19jbGFzc19fLl9fbGVuX18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fcHlq
c2xpYl9EaWN0LnByb3RvdHlwZS5fX2xlbl9fLmNhbGwuYXBwbHkoX19weWpzbGliX0RpY3QucHJv
dG90eXBlLl9fbGVuX18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5anNsaWJfRGljdC5w
cm90b3R5cGUuX19jbGFzc19fLl9fbGVuX18udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
cHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2xlbl9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLmhhc19rZXkgPSBmdW5jdGlvbihrZXkpIHsKKwor
ICAgICAgICBpZiAocHlqc2xpYl9pc1VuZGVmaW5lZCh0aGlzLmRba2V5XSkpIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIH07CisgICAgX19weWpzbGli
X0RpY3QucHJvdG90eXBlLl9fY2xhc3NfXy5oYXNfa2V5ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuaGFzX2tleS5jYWxsLmFwcGx5KF9fcHlq
c2xpYl9EaWN0LnByb3RvdHlwZS5oYXNfa2V5LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19w
eWpzbGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3NfXy5oYXNfa2V5LnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuaGFzX2tleS5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2RlbGl0ZW1fXyA9IGZ1
bmN0aW9uKGtleSkgeworIGRlbGV0ZSB0aGlzLmRba2V5XTsKKyAgICB9OworICAgIF9fcHlqc2xp
Yl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18uX19kZWxpdGVtX18gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2RlbGl0ZW1fXy5jYWxsLmFw
cGx5KF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2RlbGl0ZW1fXywgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18uX19kZWxpdGVtX18u
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2Rl
bGl0ZW1fXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9EaWN0LnByb3Rv
dHlwZS5fX2NvbnRhaW5zX18gPSBmdW5jdGlvbihrZXkpIHsKKyAgICByZXR1cm4gKHB5anNsaWJf
aXNVbmRlZmluZWQodGhpcy5kW2tleV0pKSA/IGZhbHNlIDogdHJ1ZTsKKyAgICB9OworICAgIF9f
cHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18uX19jb250YWluc19fID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuX19jb250YWluc19f
LmNhbGwuYXBwbHkoX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fY29udGFpbnNfXywgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18uX19j
b250YWluc19fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90
b3R5cGUuX19jb250YWluc19fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGli
X0RpY3QucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHsKKworICAgICAgICB2YXIga2V5cz1u
ZXcgcHlqc2xpYl9MaXN0KCk7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmQpIGtleXMu
YXBwZW5kKGtleSk7CisgICAgICAgIHJldHVybiBrZXlzOworICAgICAgICAKKyAgICB9OworICAg
IF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18ua2V5cyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBlLmtleXMuY2FsbC5hcHBseShf
X3B5anNsaWJfRGljdC5wcm90b3R5cGUua2V5cywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9f
cHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18ua2V5cy51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLmtleXMuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7
CisKKyAgICAgICAgdmFyIGtleXM9bmV3IHB5anNsaWJfTGlzdCgpOworICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gdGhpcy5kKSBrZXlzLmFwcGVuZCh0aGlzLmRba2V5XSk7CisgICAgICAgIHJldHVy
biBrZXlzOworICAgICAgICAKKyAgICB9OworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5f
X2NsYXNzX18udmFsdWVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3B5anNsaWJf
RGljdC5wcm90b3R5cGUudmFsdWVzLmNhbGwuYXBwbHkoX19weWpzbGliX0RpY3QucHJvdG90eXBl
LnZhbHVlcywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlw
ZS5fX2NsYXNzX18udmFsdWVzLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJf
RGljdC5wcm90b3R5cGUudmFsdWVzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19weWpz
bGliX0RpY3QucHJvdG90eXBlLl9faXRlcl9fID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgcmV0
dXJuIHRoaXMua2V5cygpLl9faXRlcl9fKCk7CisgICAgICAgIAorICAgIH07CisgICAgX19weWpz
bGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX2l0ZXJfXyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9faXRlcl9fLmNhbGwuYXBwbHko
X19weWpzbGliX0RpY3QucHJvdG90eXBlLl9faXRlcl9fLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX2l0ZXJfXy51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9faXRlcl9fLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLml0ZXJrZXlz
ID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgcmV0dXJuIHRoaXMua2V5cygpLl9faXRlcl9fKCk7
CisgICAgICAgIAorICAgIH07CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLl9fY2xhc3Nf
Xy5pdGVya2V5cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19weWpzbGliX0RpY3Qu
cHJvdG90eXBlLml0ZXJrZXlzLmNhbGwuYXBwbHkoX19weWpzbGliX0RpY3QucHJvdG90eXBlLml0
ZXJrZXlzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBl
Ll9fY2xhc3NfXy5pdGVya2V5cy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGli
X0RpY3QucHJvdG90eXBlLml0ZXJrZXlzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19w
eWpzbGliX0RpY3QucHJvdG90eXBlLml0ZXJ2YWx1ZXMgPSBmdW5jdGlvbigpIHsKKworICAgICAg
ICByZXR1cm4gdGhpcy52YWx1ZXMoKS5fX2l0ZXJfXygpOworICAgICAgICAKKyAgICB9OworICAg
IF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18uaXRlcnZhbHVlcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBlLml0ZXJ2YWx1ZXMu
Y2FsbC5hcHBseShfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuaXRlcnZhbHVlcywgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18uaXRlcnZh
bHVlcy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBl
Lml0ZXJ2YWx1ZXMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfRGljdC5w
cm90b3R5cGUuaXRlcml0ZW1zID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgdmFyIGQgPSB0aGlz
LmQ7CisgICAgICAgIHZhciBpdGVyPXRoaXMua2V5cygpLl9faXRlcl9fKCk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgJ19faXRlcl9fJzogZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICAnbmV4dCc6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBrZXk7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKGtleT1pdGVyLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgaXRlbT1uZXcgcHlqc2xpYl9MaXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0uYXBw
ZW5kKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kKGRba2V5XSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpdGVtOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgfTsKKyAgICBfX3B5anNsaWJfRGljdC5w
cm90b3R5cGUuX19jbGFzc19fLml0ZXJpdGVtcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBlLml0ZXJpdGVtcy5jYWxsLmFwcGx5KF9fcHlqc2xp
Yl9EaWN0LnByb3RvdHlwZS5pdGVyaXRlbXMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5
anNsaWJfRGljdC5wcm90b3R5cGUuX19jbGFzc19fLml0ZXJpdGVtcy51bmJvdW5kX21ldGhvZCA9
IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLml0ZXJpdGVtcy5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5zZXRkZWZhdWx0ID0g
ZnVuY3Rpb24oa2V5LCBkZWZhdWx0X3ZhbHVlKSB7CisgICAgaWYgKCEodGhpcy5oYXNfa2V5KGtl
eSkpKSB7CisgICAgdGhpcy5fX3NldGl0ZW1fXyhrZXksIGRlZmF1bHRfdmFsdWUpOworICAgIH0K
KyAgICB9OworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0ZGVmYXVs
dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBl
LnNldGRlZmF1bHQuY2FsbC5hcHBseShfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuc2V0ZGVmYXVs
dCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fcHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2Ns
YXNzX18uc2V0ZGVmYXVsdC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19weWpzbGliX0Rp
Y3QucHJvdG90eXBlLnNldGRlZmF1bHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5
anNsaWJfRGljdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5LCBkZWZhdWx0X3ZhbHVlKSB7
CisgICAgaWYgKHR5cGVvZiBkZWZhdWx0X3ZhbHVlID09ICd1bmRlZmluZWQnKSBkZWZhdWx0X3Zh
bHVlPW51bGw7CisgICAgdmFyIHZhbHVlID0gdGhpcy5fX2dldGl0ZW1fXyhrZXkpOworaWYocHlq
c2xpYl9pc1VuZGVmaW5lZCh2YWx1ZSkpIHsgdmFsdWUgPSBkZWZhdWx0X3ZhbHVlOyB9CisgICAg
cmV0dXJuIHZhbHVlOworICAgIH07CitfX3B5anNsaWJfRGljdC5wcm90b3R5cGUuZ2V0LnBhcnNl
X2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIGtleSwgZGVmYXVsdF92YWx1ZSApIHsKKyAg
ICBpZiAodHlwZW9mIGRlZmF1bHRfdmFsdWUgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGRlZmF1
bHRfdmFsdWU9X19rd2FyZ3MuZGVmYXVsdF92YWx1ZTsKKyAgICB2YXIgX19yID0gW2tleSwgZGVm
YXVsdF92YWx1ZV07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX19weWpzbGliX0RpY3QucHJv
dG90eXBlLl9fY2xhc3NfXy5nZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fcHlq
c2xpYl9EaWN0LnByb3RvdHlwZS5nZXQuY2FsbC5hcHBseShfX3B5anNsaWJfRGljdC5wcm90b3R5
cGUuZ2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBl
Ll9fY2xhc3NfXy5nZXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fcHlqc2xpYl9EaWN0
LnByb3RvdHlwZS5nZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3B5anNsaWJfRGlj
dC5wcm90b3R5cGUuX19jbGFzc19fLmdldC5wYXJzZV9rd2FyZ3MgPSBfX3B5anNsaWJfRGljdC5w
cm90b3R5cGUuZ2V0LnBhcnNlX2t3YXJnczsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUu
dXBkYXRlID0gZnVuY3Rpb24oZCkgeworCisgICAgICAgIHZhciBfX3RlbXBfayA9IGQuaXRlcml0
ZW1zKCkuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgdmFyIHRlbXBfayA9IF9fdGVtcF9rLm5leHQoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2YXIgayA9IHRlbXBfay5fX2dldGl0ZW1fXygw
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHRlbXBfay5fX2dl
dGl0ZW1fXygxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgdGhpcy5fX3NldGl0
ZW1fXyhrLCB2KTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cg
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9OworICAgIF9fcHlq
c2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18udXBkYXRlID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUudXBkYXRlLmNhbGwuYXBwbHkoX19w
eWpzbGliX0RpY3QucHJvdG90eXBlLnVwZGF0ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9f
cHlqc2xpYl9EaWN0LnByb3RvdHlwZS5fX2NsYXNzX18udXBkYXRlLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3B5anNsaWJfRGljdC5wcm90b3R5cGUudXBkYXRlLmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLmdldE9iamVjdCA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLmQ7CisgICAgfTsKKyAgICBfX3B5anNsaWJfRGljdC5w
cm90b3R5cGUuX19jbGFzc19fLmdldE9iamVjdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX19weWpzbGliX0RpY3QucHJvdG90eXBlLmdldE9iamVjdC5jYWxsLmFwcGx5KF9fcHlqc2xp
Yl9EaWN0LnByb3RvdHlwZS5nZXRPYmplY3QsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3B5
anNsaWJfRGljdC5wcm90b3R5cGUuX19jbGFzc19fLmdldE9iamVjdC51bmJvdW5kX21ldGhvZCA9
IHRydWU7CisgICAgX19weWpzbGliX0RpY3QucHJvdG90eXBlLmdldE9iamVjdC5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworfQordmFyIHB5anNsaWJfZGljdCA9IF9fcHlqc2xpYl9EaWN0LnByb3Rv
dHlwZS5fX2NsYXNzX187CitmdW5jdGlvbiBweWpzbGliX3JhbmdlKCkgeworCisgICAgdmFyIHN0
YXJ0ID0gMDsKKyAgICB2YXIgc3RvcCA9IDA7CisgICAgdmFyIHN0ZXAgPSAxOworCisgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPT0gMikgeworICAgICAgICBzdGFydCA9IGFyZ3VtZW50c1swXTsK
KyAgICAgICAgc3RvcCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfQorICAgIGVsc2UgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPT0gMykgeworICAgICAgICBzdGFydCA9IGFyZ3VtZW50c1swXTsKKyAg
ICAgICAgc3RvcCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgc3RlcCA9IGFyZ3VtZW50c1syXTsK
KyAgICAgICAgfQorICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGg+MCkgc3RvcCA9IGFyZ3Vt
ZW50c1swXTsKKworICAgIHJldHVybiB7CisgICAgICAgICduZXh0JzogZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBpZiAoKHN0ZXAgPiAwICYmIHN0YXJ0ID49IHN0b3ApIHx8IChzdGVwIDwgMCAm
JiBzdGFydCA8PSBzdG9wKSkgdGhyb3cgU3RvcEl0ZXJhdGlvbjsKKyAgICAgICAgICAgIHZhciBy
dmFsID0gc3RhcnQ7CisgICAgICAgICAgICBzdGFydCArPSBzdGVwOworICAgICAgICAgICAgcmV0
dXJuIHJ2YWw7CisgICAgICAgICAgICB9LAorICAgICAgICAnX19pdGVyX18nOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgCit9CisKKworZnVuY3Rpb24gcHlqc2xpYl9zbGljZShvYmplY3QsIGxvd2VyLCB1cHBlcikg
eworCisgICAgaWYgKHB5anNsaWJfaXNTdHJpbmcob2JqZWN0KSkgeworICAgICAgICBpZiAocHlq
c2xpYl9pc051bGwodXBwZXIpKSB1cHBlcj1vYmplY3QubGVuZ3RoOworICAgICAgICByZXR1cm4g
b2JqZWN0LnN1YnN0cmluZyhsb3dlciwgdXBwZXIpOworICAgICAgICB9CisgICAgaWYgKHB5anNs
aWJfaXNPYmplY3Qob2JqZWN0KSAmJiBvYmplY3Quc2xpY2UpIHJldHVybiBvYmplY3Quc2xpY2Uo
bG93ZXIsIHVwcGVyKTsKKyAgICAKKyAgICByZXR1cm4gbnVsbDsKKyAgICAKK30KKworCitmdW5j
dGlvbiBweWpzbGliX3N0cih0ZXh0KSB7CisKKyAgICByZXR1cm4gU3RyaW5nKHRleHQpOworICAg
IAorfQorCisKK2Z1bmN0aW9uIHB5anNsaWJfaW50KHRleHQsIHJhZGl4KSB7CisgICAgaWYgKHR5
cGVvZiByYWRpeCA9PSAndW5kZWZpbmVkJykgcmFkaXg9MDsKKworICAgIHJldHVybiBwYXJzZUlu
dCh0ZXh0LCByYWRpeCk7CisgICAgCit9CisKKworcHlqc2xpYl9pbnQucGFyc2Vfa3dhcmdzID0g
ZnVuY3Rpb24gKCBfX2t3YXJncywgdGV4dCwgcmFkaXggKSB7CisgICAgaWYgKHR5cGVvZiByYWRp
eCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgcmFkaXg9X19rd2FyZ3MucmFkaXg7CisgICAgdmFy
IF9fciA9IFt0ZXh0LCByYWRpeF07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5jdGlvbiBweWpz
bGliX2xlbihvYmplY3QpIHsKKworICAgIGlmIChvYmplY3Q9PW51bGwpIHJldHVybiAwOworICAg
IGlmIChweWpzbGliX2lzT2JqZWN0KG9iamVjdCkgJiYgb2JqZWN0Ll9fbGVuX18pIHJldHVybiBv
YmplY3QuX19sZW5fXygpOworICAgIHJldHVybiBvYmplY3QubGVuZ3RoOworICAgIAorfQorCisK
K2Z1bmN0aW9uIHB5anNsaWJfZ2V0YXR0cihvYmosIG1ldGhvZCkgeworCisgICAgaWYgKCFweWpz
bGliX2lzT2JqZWN0KG9iaikpIHJldHVybiBudWxsOworICAgIGlmICghcHlqc2xpYl9pc0Z1bmN0
aW9uKG9ialttZXRob2RdKSkgcmV0dXJuIG9ialttZXRob2RdOworCisgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeworICAgICAgICBvYmpbbWV0aG9kXS5jYWxsKG9iaik7CisgICAgICAgIH0KKyAgICAK
K30KKworCitmdW5jdGlvbiBweWpzbGliX2hhc2F0dHIob2JqLCBtZXRob2QpIHsKKworICAgIGlm
ICghcHlqc2xpYl9pc09iamVjdChvYmopKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKHB5anNsaWJf
aXNVbmRlZmluZWQob2JqW21ldGhvZF0pKSByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKK30KKworCitmdW5jdGlvbiBweWpzbGliX2RpcihvYmopIHsKKworICAgIHZhciBw
cm9wZXJ0aWVzPW5ldyBweWpzbGliX0xpc3QoKTsKKyAgICBmb3IgKHByb3BlcnR5IGluIG9iaikg
cHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOworICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAg
IAorfQorCisKK2Z1bmN0aW9uIHB5anNsaWJfZmlsdGVyKG9iaiwgbWV0aG9kLCBzZXF1ZW5jZSkg
eworICAgIGlmICh0eXBlb2Ygc2VxdWVuY2UgPT0gJ3VuZGVmaW5lZCcpIHNlcXVlbmNlPW51bGw7
CisgICAgdmFyIGl0ZW1zID0gbmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAgaWYgKChzZXF1ZW5j
ZSA9PSBudWxsKSkgeworICAgIHZhciBzZXF1ZW5jZSA9IG1ldGhvZDsKKyAgICB2YXIgbWV0aG9k
ID0gb2JqOworCisgICAgICAgIHZhciBfX2l0ZW0gPSBzZXF1ZW5jZS5fX2l0ZXJfXygpOworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2
YXIgaXRlbSA9IF9faXRlbS5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAg
IGlmIChtZXRob2QoaXRlbSkpIHsKKyAgICBpdGVtcy5hcHBlbmQoaXRlbSk7CisgICAgfQorCisg
ICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9
IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICBlbHNlIHsKKworICAgICAgICB2YXIg
X19pdGVtID0gc2VxdWVuY2UuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBfX2l0ZW0ubmV4dCgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBpZiAobWV0aG9kLmNhbGwob2JqLCBp
dGVtKSkgeworICAgIGl0ZW1zLmFwcGVuZChpdGVtKTsKKyAgICB9CisKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlv
bikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgfQorICAgIHJldHVybiBpdGVtczsKK30KKworCitweWpzbGliX2ZpbHRl
ci5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBvYmosIG1ldGhvZCwgc2VxdWVu
Y2UgKSB7CisgICAgaWYgKHR5cGVvZiBzZXF1ZW5jZSA9PSAndW5kZWZpbmVkJykKKyAgICAgICAg
c2VxdWVuY2U9X19rd2FyZ3Muc2VxdWVuY2U7CisgICAgdmFyIF9fciA9IFtvYmosIG1ldGhvZCwg
c2VxdWVuY2VdOworICAgIHJldHVybiBfX3I7Cit9OworZnVuY3Rpb24gcHlqc2xpYl9tYXAob2Jq
LCBtZXRob2QsIHNlcXVlbmNlKSB7CisgICAgaWYgKHR5cGVvZiBzZXF1ZW5jZSA9PSAndW5kZWZp
bmVkJykgc2VxdWVuY2U9bnVsbDsKKyAgICB2YXIgaXRlbXMgPSBuZXcgcHlqc2xpYl9MaXN0KFtd
KTsKKyAgICBpZiAoKHNlcXVlbmNlID09IG51bGwpKSB7CisgICAgdmFyIHNlcXVlbmNlID0gbWV0
aG9kOworICAgIHZhciBtZXRob2QgPSBvYmo7CisKKyAgICAgICAgdmFyIF9faXRlbSA9IHNlcXVl
bmNlLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgICAgIHZhciBpdGVtID0gX19pdGVtLm5leHQoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgCisgICAgaXRlbXMuYXBwZW5kKG1ldGhvZChpdGVtKSk7CisKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3Rv
cEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIGVsc2UgeworCisgICAgICAgIHZhciBfX2l0
ZW0gPSBzZXF1ZW5jZS5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IF9faXRlbS5uZXh0KCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGl0ZW1zLmFwcGVuZChtZXRob2QuY2FsbChv
YmosIGl0ZW0pKTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cg
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgcmV0dXJu
IGl0ZW1zOworfQorCisKK3B5anNsaWJfbWFwLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19r
d2FyZ3MsIG9iaiwgbWV0aG9kLCBzZXF1ZW5jZSApIHsKKyAgICBpZiAodHlwZW9mIHNlcXVlbmNl
ID09ICd1bmRlZmluZWQnKQorICAgICAgICBzZXF1ZW5jZT1fX2t3YXJncy5zZXF1ZW5jZTsKKyAg
ICB2YXIgX19yID0gW29iaiwgbWV0aG9kLCBzZXF1ZW5jZV07CisgICAgcmV0dXJuIF9fcjsKK307
Cit2YXIgcHlqc2xpYl9uZXh0X2hhc2hfaWQgPSAwOworZnVuY3Rpb24gcHlqc2xpYl9oYXNoKG9i
aikgeworCisgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAKKyAgICBpZiAo
b2JqLiRIKSByZXR1cm4gb2JqLiRIOworICAgIGlmIChvYmouX19oYXNoX18pIHJldHVybiBvYmou
X19oYXNoX18oKTsKKyAgICBpZiAob2JqLmNvbnN0cnVjdG9yID09IFN0cmluZyB8fCBvYmouY29u
c3RydWN0b3IgPT0gTnVtYmVyIHx8IG9iai5jb25zdHJ1Y3RvciA9PSBEYXRlKSByZXR1cm4gb2Jq
OworICAgIAorICAgIG9iai4kSCA9ICsrcHlqc2xpYl9uZXh0X2hhc2hfaWQ7CisgICAgcmV0dXJu
IG9iai4kSDsKKyAgICAKK30KKworCitmdW5jdGlvbiBweWpzbGliX2lzT2JqZWN0KGEpIHsKKwor
ICAgIHJldHVybiAoYSAmJiB0eXBlb2YgYSA9PSAnb2JqZWN0JykgfHwgcHlqc2xpYl9pc0Z1bmN0
aW9uKGEpOworICAgIAorfQorCisKK2Z1bmN0aW9uIHB5anNsaWJfaXNGdW5jdGlvbihhKSB7CisK
KyAgICByZXR1cm4gdHlwZW9mIGEgPT0gJ2Z1bmN0aW9uJzsKKyAgICAKK30KKworCitmdW5jdGlv
biBweWpzbGliX2lzU3RyaW5nKGEpIHsKKworICAgIHJldHVybiB0eXBlb2YgYSA9PSAnc3RyaW5n
JzsKKyAgICAKK30KKworCitmdW5jdGlvbiBweWpzbGliX2lzTnVsbChhKSB7CisKKyAgICByZXR1
cm4gdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgIWE7CisgICAgCit9CisKKworZnVuY3Rpb24gcHlq
c2xpYl9pc0FycmF5KGEpIHsKKworICAgIHJldHVybiBweWpzbGliX2lzT2JqZWN0KGEpICYmIGEu
Y29uc3RydWN0b3IgPT0gQXJyYXk7CisgICAgCit9CisKKworZnVuY3Rpb24gcHlqc2xpYl9pc1Vu
ZGVmaW5lZChhKSB7CisKKyAgICByZXR1cm4gdHlwZW9mIGEgPT0gJ3VuZGVmaW5lZCc7CisgICAg
Cit9CisKKworZnVuY3Rpb24gcHlqc2xpYl9pc0l0ZXJhdGFibGUoYSkgeworCisgICAgcmV0dXJu
IHB5anNsaWJfaXNPYmplY3QoYSkgJiYgYS5fX2l0ZXJfXzsKKyAgICAKK30KKworCitmdW5jdGlv
biBweWpzbGliX2lzTnVtYmVyKGEpIHsKKworICAgIHJldHVybiB0eXBlb2YgYSA9PSAnbnVtYmVy
JyAmJiBpc0Zpbml0ZShhKTsKKyAgICAKK30KKworCitmdW5jdGlvbiBweWpzbGliX3RvSlNPYmpl
Y3RzKHgpIHsKKyAgICB2YXIgcmVzdWx0ID0geDsKKyAgICBpZiAocHlqc2xpYl9pc09iamVjdCh4
KSAmJiB4Ll9fY2xhc3NfXykgeworICAgIGlmICgoeC5fX2NsYXNzX18gPT0gJ3B5anNsaWJfRGlj
dCcpKSB7CisgICAgcmV0dXJuIHB5anNsaWJfdG9KU09iamVjdHMoeC5kKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAoKHguX19jbGFzc19fID09ICdweWpzbGliX0xpc3QnKSkgeworICAgIHJldHVybiBw
eWpzbGliX3RvSlNPYmplY3RzKHgubCk7CisgICAgfQorICAgIH0KKyAgICBpZiAocHlqc2xpYl9p
c09iamVjdCh4KSkgeworCisgICAgICAgIHJlc3VsdCA9IHt9OworICAgICAgICBmb3IodmFyIGsg
aW4geCkgeworICAgICAgICAgICB2YXIgdiA9IHhba107CisgICAgICAgICAgIHZhciB0diA9IHB5
anNsaWJfdG9KU09iamVjdHModikKKyAgICAgICAgICAgcmVzdWx0W2tdID0gdHY7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgfQorICAgIGlmIChweWpzbGliX2lzQXJyYXkoeCkpIHsKKworICAg
ICAgICByZXN1bHQgPSBbXTsKKyAgICAgICAgZm9yKHZhciBrPTA7IGsgPCB4Lmxlbmd0aDsgaysr
KSB7CisgICAgICAgICAgIHZhciB2ID0geFtrXTsKKyAgICAgICAgICAgdmFyIHR2ID0gcHlqc2xp
Yl90b0pTT2JqZWN0cyh2KTsKKyAgICAgICAgICAgcmVzdWx0LnB1c2godHYpOworICAgICAgICB9
CisgICAgICAgIAorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK2Z1bmN0aW9uIHB5
anNsaWJfcHJpbnRGdW5jKG9ianMpIHsKKworICAgIHZhciBzID0gIiI7CisgICAgZm9yKHZhciBp
PTA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmKHMgIT0gIiIpIHMgKz0gIiAi
OworICAgICAgICBzICs9IG9ianNbaV07CisgICAgfQorICAgIGNvbnNvbGUuZGVidWcocykKKyAg
ICAKK30KKworCitfX3B5anNsaWJfRGljdF9pbml0aWFsaXplKCk7CitfX3B5anNsaWJfT2JqZWN0
X2luaXRpYWxpemUoKTsKK19fcHlqc2xpYl9MaXN0X2luaXRpYWxpemUoKTsKK19fcHlqc2xpYl9D
bGFzc19pbml0aWFsaXplKCk7CitfX3B5anNsaWJfVHVwbGVfaW5pdGlhbGl6ZSgpOworCit2YXIg
RE9NX3NDYXB0dXJlRWxlbSA9IG51bGw7Cit2YXIgRE9NX3NFdmVudFByZXZpZXdTdGFjayA9IG5l
dyBweWpzbGliX0xpc3QoW10pOworZnVuY3Rpb24gRE9NX2luaXQoKSB7CisKKyAgICAvLyBTZXQg
dXAgY2FwdHVyZSBldmVudCBkaXNwYXRjaGVycy4KKyAgICAkd25kLl9fZGlzcGF0Y2hDYXB0dXJl
ZE1vdXNlRXZlbnQgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgaWYgKCR3bmQuX19kaXNwYXRj
aENhcHR1cmVkRXZlbnQoZXZ0KSkgeworICAgICAgICAgICAgdmFyIGNhcCA9ICR3bmQuX19jYXB0
dXJlRWxlbTsKKyAgICAgICAgICAgIGlmIChjYXAgJiYgY2FwLl9fbGlzdGVuZXIpIHsKKyAgICAg
ICAgICAgICAgICBET01fZGlzcGF0Y2hFdmVudChldnQsIGNhcCwgY2FwLl9fbGlzdGVuZXIpOwor
ICAgICAgICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAkd25kLl9fZGlzcGF0Y2hDYXB0dXJlZEV2ZW50ID0gZnVu
Y3Rpb24oZXZ0KSB7CisgICAgICAgIGlmICghRE9NX3ByZXZpZXdFdmVudChldnQpKSB7CisgICAg
ICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgICBldnQucHJldmVudERl
ZmF1bHQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgJHduZC5hZGRFdmVudExpc3RlbmVyKAor
ICAgICAgICAnbW91c2VvdXQnLAorICAgICAgICBmdW5jdGlvbihldnQpeworICAgICAgICAgICAg
dmFyIGNhcCA9ICR3bmQuX19jYXB0dXJlRWxlbTsKKyAgICAgICAgICAgIGlmIChjYXApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWV2dC5yZWxhdGVkVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgd2luZG93IGR1cmluZyBjYXB0dXJlLCBy
ZWxlYXNlIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHN5bnRoZXNpemUgYW4g
J29ubG9zZWNhcHR1cmUnIGV2ZW50LgorICAgICAgICAgICAgICAgICAgICAkd25kLl9fY2FwdHVy
ZUVsZW0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FwLl9fbGlzdGVuZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsY0V2ZW50ID0gJGRvYy5jcmVhdGVFdmVudCgn
VUlFdmVudCcpOworICAgICAgICAgICAgICAgICAgICAgICAgbGNFdmVudC5pbml0VUlFdmVudCgn
bG9zZWNhcHR1cmUnLCBmYWxzZSwgZmFsc2UsICR3bmQsIDApOworICAgICAgICAgICAgICAgICAg
ICAgICAgRE9NX2Rpc3BhdGNoRXZlbnQobGNFdmVudCwgY2FwLCBjYXAuX19saXN0ZW5lcik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgIHRydWUKKyAgICApOworCisKKyAgICAkd25kLmFkZEV2ZW50TGlz
dGVuZXIoJ2NsaWNrJywgJHduZC5fX2Rpc3BhdGNoQ2FwdHVyZWRNb3VzZUV2ZW50LCB0cnVlKTsK
KyAgICAkd25kLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgJHduZC5fX2Rpc3BhdGNoQ2Fw
dHVyZWRNb3VzZUV2ZW50LCB0cnVlKTsKKyAgICAkd25kLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNl
ZG93bicsICR3bmQuX19kaXNwYXRjaENhcHR1cmVkTW91c2VFdmVudCwgdHJ1ZSk7CisgICAgJHdu
ZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgJHduZC5fX2Rpc3BhdGNoQ2FwdHVyZWRNb3Vz
ZUV2ZW50LCB0cnVlKTsKKyAgICAkd25kLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICR3
bmQuX19kaXNwYXRjaENhcHR1cmVkTW91c2VFdmVudCwgdHJ1ZSk7CisgICAgJHduZC5hZGRFdmVu
dExpc3RlbmVyKCdrZXlkb3duJywgJHduZC5fX2Rpc3BhdGNoQ2FwdHVyZWRFdmVudCwgdHJ1ZSk7
CisgICAgJHduZC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICR3bmQuX19kaXNwYXRjaENhcHR1
cmVkRXZlbnQsIHRydWUpOworICAgICR3bmQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAk
d25kLl9fZGlzcGF0Y2hDYXB0dXJlZEV2ZW50LCB0cnVlKTsKKyAgICAKKyAgICAkd25kLl9fZGlz
cGF0Y2hFdmVudCA9IGZ1bmN0aW9uKGV2dCkgeworICAgIAorICAgICAgICB2YXIgbGlzdGVuZXIs
IGN1ckVsZW0gPSB0aGlzOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKGN1ckVsZW0gJiYgIShs
aXN0ZW5lciA9IGN1ckVsZW0uX19saXN0ZW5lcikpIHsKKyAgICAgICAgICAgIGN1ckVsZW0gPSBj
dXJFbGVtLnBhcmVudE5vZGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1ckVsZW0gJiYgY3Vy
RWxlbS5ub2RlVHlwZSAhPSAxKSB7CisgICAgICAgICAgICBjdXJFbGVtID0gbnVsbDsKKyAgICAg
ICAgfQorICAgIAorICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIERPTV9kaXNw
YXRjaEV2ZW50KGV2dCwgY3VyRWxlbSwgbGlzdGVuZXIpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAKKyAgICAkd25kLl9fY2FwdHVyZUVsZW0gPSBudWxsOworICAgIAorfQorCisKKyAgICBET01f
aW5pdCgpOworZnVuY3Rpb24gRE9NX2FkZEV2ZW50UHJldmlldyhwcmV2aWV3KSB7CisgICAgRE9N
X3NFdmVudFByZXZpZXdTdGFjay5hcHBlbmQocHJldmlldyk7Cit9CisKKworZnVuY3Rpb24gRE9N
X2FwcGVuZENoaWxkKHBhcmVudCwgY2hpbGQpIHsKKworICAgIHBhcmVudC5hcHBlbmRDaGlsZChj
aGlsZCk7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2NvbXBhcmUoZWxlbTEsIGVsZW0yKSB7
CisKKyAgICByZXR1cm4gKGVsZW0xID09IGVsZW0yKTsKKyAgICAKK30KKworCitmdW5jdGlvbiBE
T01fY3JlYXRlQW5jaG9yKCkgeworICAgIHJldHVybiBET01fY3JlYXRlRWxlbWVudCgnQScpOwor
fQorCisKK2Z1bmN0aW9uIERPTV9jcmVhdGVCdXR0b24oKSB7CisgICAgcmV0dXJuIERPTV9jcmVh
dGVFbGVtZW50KCdidXR0b24nKTsKK30KKworCitmdW5jdGlvbiBET01fY3JlYXRlQ29sKCkgewor
ICAgIHJldHVybiBET01fY3JlYXRlRWxlbWVudCgnY29sJyk7Cit9CisKKworZnVuY3Rpb24gRE9N
X2NyZWF0ZURpdigpIHsKKyAgICByZXR1cm4gRE9NX2NyZWF0ZUVsZW1lbnQoJ2RpdicpOworfQor
CisKK2Z1bmN0aW9uIERPTV9jcmVhdGVFbGVtZW50KHRhZykgeworCisgICAgcmV0dXJuICRkb2Mu
Y3JlYXRlRWxlbWVudCh0YWcpOworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9jcmVhdGVGaWVs
ZFNldCgpIHsKKyAgICByZXR1cm4gRE9NX2NyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0Jyk7Cit9CisK
KworZnVuY3Rpb24gRE9NX2NyZWF0ZUZvcm0oKSB7CisgICAgcmV0dXJuIERPTV9jcmVhdGVFbGVt
ZW50KCdmb3JtJyk7Cit9CisKKworZnVuY3Rpb24gRE9NX2NyZWF0ZUlGcmFtZSgpIHsKKyAgICBy
ZXR1cm4gRE9NX2NyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworfQorCisKK2Z1bmN0aW9uIERPTV9j
cmVhdGVJbWcoKSB7CisgICAgcmV0dXJuIERPTV9jcmVhdGVFbGVtZW50KCdpbWcnKTsKK30KKwor
CitmdW5jdGlvbiBET01fY3JlYXRlSW5wdXRDaGVjaygpIHsKKyAgICByZXR1cm4gRE9NX2NyZWF0
ZUlucHV0RWxlbWVudCgnY2hlY2tib3gnKTsKK30KKworCitmdW5jdGlvbiBET01fY3JlYXRlSW5w
dXRFbGVtZW50KGVsZW1lbnRUeXBlKSB7CisKKyAgICB2YXIgZSA9ICRkb2MuY3JlYXRlRWxlbWVu
dCgiSU5QVVQiKTsKKyAgICBlLnR5cGUgPSBlbGVtZW50VHlwZTsKKyAgICByZXR1cm4gZTsKKyAg
ICAKK30KKworCitmdW5jdGlvbiBET01fY3JlYXRlSW5wdXRQYXNzd29yZCgpIHsKKyAgICByZXR1
cm4gRE9NX2NyZWF0ZUlucHV0RWxlbWVudCgncGFzc3dvcmQnKTsKK30KKworCitmdW5jdGlvbiBE
T01fY3JlYXRlSW5wdXRSYWRpbyhncm91cCkgeworCisgICAgdmFyIGVsZW0gPSAkZG9jLmNyZWF0
ZUVsZW1lbnQoIklOUFVUIik7CisgICAgZWxlbS50eXBlID0gJ3JhZGlvJzsKKyAgICBlbGVtLm5h
bWUgPSBncm91cDsKKyAgICByZXR1cm4gZWxlbTsKKyAgICAKK30KKworCitmdW5jdGlvbiBET01f
Y3JlYXRlSW5wdXRUZXh0KCkgeworICAgIHJldHVybiBET01fY3JlYXRlSW5wdXRFbGVtZW50KCd0
ZXh0Jyk7Cit9CisKKworZnVuY3Rpb24gRE9NX2NyZWF0ZUxhYmVsKCkgeworICAgIHJldHVybiBE
T01fY3JlYXRlRWxlbWVudCgnbGFiZWwnKTsKK30KKworCitmdW5jdGlvbiBET01fY3JlYXRlTGVn
ZW5kKCkgeworICAgIHJldHVybiBET01fY3JlYXRlRWxlbWVudCgnbGVnZW5kJyk7Cit9CisKKwor
ZnVuY3Rpb24gRE9NX2NyZWF0ZU9wdGlvbnMoKSB7CisgICAgcmV0dXJuIERPTV9jcmVhdGVFbGVt
ZW50KCdvcHRpb25zJyk7Cit9CisKKworZnVuY3Rpb24gRE9NX2NyZWF0ZVNlbGVjdCgpIHsKKyAg
ICByZXR1cm4gRE9NX2NyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpOworfQorCisKK2Z1bmN0aW9uIERP
TV9jcmVhdGVTcGFuKCkgeworICAgIHJldHVybiBET01fY3JlYXRlRWxlbWVudCgnc3BhbicpOwor
fQorCisKK2Z1bmN0aW9uIERPTV9jcmVhdGVUYWJsZSgpIHsKKyAgICByZXR1cm4gRE9NX2NyZWF0
ZUVsZW1lbnQoJ3RhYmxlJyk7Cit9CisKKworZnVuY3Rpb24gRE9NX2NyZWF0ZVRCb2R5KCkgewor
ICAgIHJldHVybiBET01fY3JlYXRlRWxlbWVudCgndGJvZHknKTsKK30KKworCitmdW5jdGlvbiBE
T01fY3JlYXRlVEQoKSB7CisgICAgcmV0dXJuIERPTV9jcmVhdGVFbGVtZW50KCd0ZCcpOworfQor
CisKK2Z1bmN0aW9uIERPTV9jcmVhdGVUZXh0QXJlYSgpIHsKKyAgICByZXR1cm4gRE9NX2NyZWF0
ZUVsZW1lbnQoJ3RleHRhcmVhJyk7Cit9CisKKworZnVuY3Rpb24gRE9NX2NyZWF0ZVRIKCkgewor
ICAgIHJldHVybiBET01fY3JlYXRlRWxlbWVudCgndGgnKTsKK30KKworCitmdW5jdGlvbiBET01f
Y3JlYXRlVFIoKSB7CisgICAgcmV0dXJuIERPTV9jcmVhdGVFbGVtZW50KCd0cicpOworfQorCisK
K2Z1bmN0aW9uIERPTV9ldmVudENhbmNlbEJ1YmJsZShldnQsIGNhbmNlbCkgeworICAgIGV2dC5j
YW5jZWxCdWJibGUgPSBjYW5jZWw7Cit9CisKKworZnVuY3Rpb24gRE9NX2V2ZW50R2V0QWx0S2V5
KGV2dCkgeworCisgICAgcmV0dXJuIGV2dC5hbHRLZXk7CisgICAgCit9CisKKworZnVuY3Rpb24g
RE9NX2V2ZW50R2V0QnV0dG9uKGV2dCkgeworCisgICAgcmV0dXJuIGV2dC5idXR0b247CisgICAg
Cit9CisKKworZnVuY3Rpb24gRE9NX2V2ZW50R2V0Q2xpZW50WChldnQpIHsKKworICAgIHJldHVy
biBldnQuY2xpZW50WDsKKyAgICAKK30KKworCitmdW5jdGlvbiBET01fZXZlbnRHZXRDbGllbnRZ
KGV2dCkgeworCisgICAgcmV0dXJuIGV2dC5jbGllbnRZOworICAgIAorfQorCisKK2Z1bmN0aW9u
IERPTV9ldmVudEdldEN0cmxLZXkoZXZ0KSB7CisKKyAgICByZXR1cm4gZXZ0LmN0cmxLZXk7Cisg
ICAgCit9CisKKworZnVuY3Rpb24gRE9NX2V2ZW50R2V0RnJvbUVsZW1lbnQoZXZ0KSB7CisKKyAg
ICByZXR1cm4gZXZ0LmZyb21FbGVtZW50ID8gZXZ0LmZyb21FbGVtZW50IDogbnVsbDsKKyAgICAK
K30KKworCitmdW5jdGlvbiBET01fZXZlbnRHZXRLZXlDb2RlKGV2dCkgeworCisgICAgcmV0dXJu
IGV2dC53aGljaCA/IGV2dC53aGljaCA6IGV2dC5rZXlDb2RlOworICAgIAorfQorCisKK2Z1bmN0
aW9uIERPTV9ldmVudEdldFJlcGVhdChldnQpIHsKKworICAgIHJldHVybiBldnQucmVwZWF0Owor
ICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9ldmVudEdldFNjcmVlblgoZXZ0KSB7CisKKyAgICBy
ZXR1cm4gZXZ0LnNjcmVlblg7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2V2ZW50R2V0U2Ny
ZWVuWShldnQpIHsKKworICAgIHJldHVybiBldnQuc2NyZWVuWTsKKyAgICAKK30KKworCitmdW5j
dGlvbiBET01fZXZlbnRHZXRTaGlmdEtleShldnQpIHsKKworICAgIHJldHVybiBldnQuc2hpZnRL
ZXk7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2V2ZW50R2V0VGFyZ2V0KGV2ZW50KSB7CisK
KyAgICByZXR1cm4gZXZlbnQudGFyZ2V0ID8gZXZlbnQudGFyZ2V0IDogbnVsbDsKKyAgICAKK30K
KworCitmdW5jdGlvbiBET01fZXZlbnRHZXRUb0VsZW1lbnQoZXZ0KSB7CisKKyAgICByZXR1cm4g
ZXZ0LnJlbGF0ZWRUYXJnZXQgPyBldnQucmVsYXRlZFRhcmdldCA6IG51bGw7CisgICAgCit9CisK
KworZnVuY3Rpb24gRE9NX2V2ZW50R2V0VHlwZShldmVudCkgeworCisgICAgcmV0dXJuIGV2ZW50
LnR5cGU7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2V2ZW50R2V0VHlwZUludChldmVudCkg
eworCisgICAgc3dpdGNoIChldmVudC50eXBlKSB7CisgICAgICBjYXNlICJibHVyIjogcmV0dXJu
IDB4MDEwMDA7CisgICAgICBjYXNlICJjaGFuZ2UiOiByZXR1cm4gMHgwMDQwMDsKKyAgICAgIGNh
c2UgImNsaWNrIjogcmV0dXJuIDB4MDAwMDE7CisgICAgICBjYXNlICJkYmxjbGljayI6IHJldHVy
biAweDAwMDAyOworICAgICAgY2FzZSAiZm9jdXMiOiByZXR1cm4gMHgwMDgwMDsKKyAgICAgIGNh
c2UgImtleWRvd24iOiByZXR1cm4gMHgwMDA4MDsKKyAgICAgIGNhc2UgImtleXByZXNzIjogcmV0
dXJuIDB4MDAxMDA7CisgICAgICBjYXNlICJrZXl1cCI6IHJldHVybiAweDAwMjAwOworICAgICAg
Y2FzZSAibG9hZCI6IHJldHVybiAweDA4MDAwOworICAgICAgY2FzZSAibG9zZWNhcHR1cmUiOiBy
ZXR1cm4gMHgwMjAwMDsKKyAgICAgIGNhc2UgIm1vdXNlZG93biI6IHJldHVybiAweDAwMDA0Owor
ICAgICAgY2FzZSAibW91c2Vtb3ZlIjogcmV0dXJuIDB4MDAwNDA7CisgICAgICBjYXNlICJtb3Vz
ZW91dCI6IHJldHVybiAweDAwMDIwOworICAgICAgY2FzZSAibW91c2VvdmVyIjogcmV0dXJuIDB4
MDAwMTA7CisgICAgICBjYXNlICJtb3VzZXVwIjogcmV0dXJuIDB4MDAwMDg7CisgICAgICBjYXNl
ICJzY3JvbGwiOiByZXR1cm4gMHgwNDAwMDsKKyAgICAgIGNhc2UgImVycm9yIjogcmV0dXJuIDB4
MTAwMDA7CisgICAgfQorICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9ldmVudEdldFR5cGVTdHJp
bmcoZXZlbnQpIHsKKyAgICByZXR1cm4gRE9NX2V2ZW50R2V0VHlwZShldmVudCk7Cit9CisKKwor
ZnVuY3Rpb24gRE9NX2V2ZW50UHJldmVudERlZmF1bHQoZXZ0KSB7CisgICAgZXZ0LnByZXZlbnRE
ZWZhdWx0KCk7Cit9CisKKworZnVuY3Rpb24gRE9NX2V2ZW50U2V0S2V5Q29kZShldnQsIGtleSkg
eworCisgICAgZXZ0LmtleUNvZGUgPSBrZXk7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2V2
ZW50VG9TdHJpbmcoZXZ0KSB7CisKKyAgICByZXR1cm4gZXZ0LnRvU3RyaW5nKCk7CisgICAgCit9
CisKKworZnVuY3Rpb24gRE9NX2lmcmFtZUdldFNyYyhlbGVtKSB7CisKKyAgICByZXR1cm4gZWxl
bS5zcmM7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2dldEFic29sdXRlTGVmdChlbGVtKSB7
CisKKyAgICB2YXIgbGVmdCA9IDA7CisgICAgd2hpbGUgKGVsZW0pIHsKKyAgICAgICAgbGVmdCAr
PSBlbGVtLm9mZnNldExlZnQgLSBlbGVtLnNjcm9sbExlZnQ7CisgICAgCisgICAgICAgIHZhciBw
YXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudDsKKyAgICAgICAgaWYgKHBhcmVudCAmJiAocGFyZW50
LnRhZ05hbWUgPT0gJ0JPRFknKSAmJiAoZWxlbS5zdHlsZS5wb3NpdGlvbiA9PSAnYWJzb2x1dGUn
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbGVtID0gcGFyZW50OworICAgIH0KKyAg
ICByZXR1cm4gbGVmdCArICRkb2MuYm9keS5zY3JvbGxMZWZ0OworICAgIAorfQorCisKK2Z1bmN0
aW9uIERPTV9nZXRBYnNvbHV0ZVRvcChlbGVtKSB7CisKKyAgICB2YXIgdG9wID0gMDsKKyAgICB3
aGlsZSAoZWxlbSkgeworICAgICAgICB0b3AgKz0gZWxlbS5vZmZzZXRUb3AgLSBlbGVtLnNjcm9s
bFRvcDsKKyAgICAKKyAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50OworICAg
ICAgICBpZiAocGFyZW50ICYmIChwYXJlbnQudGFnTmFtZSA9PSAnQk9EWScpICYmIChlbGVtLnN0
eWxlLnBvc2l0aW9uID09ICdhYnNvbHV0ZScpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGVsZW0gPSBwYXJlbnQ7CisgICAgfQorICAgIHJldHVybiB0b3AgKyAkZG9jLmJvZHkuc2Nyb2xs
VG9wOworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9nZXRBdHRyaWJ1dGUoZWxlbSwgYXR0cikg
eworCisgICAgdmFyIHJldCA9IGVsZW1bYXR0cl07CisgICAgcmV0dXJuIChyZXQgPT0gbnVsbCkg
PyBudWxsIDogU3RyaW5nKHJldCk7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2dldEJvb2xl
YW5BdHRyaWJ1dGUoZWxlbSwgYXR0cikgeworCisgICAgcmV0dXJuICEhZWxlbVthdHRyXTsKKyAg
ICAKK30KKworCitmdW5jdGlvbiBET01fZ2V0Q2FwdHVyZUVsZW1lbnQoKSB7CisgICAgcmV0dXJu
IERPTV9zQ2FwdHVyZUVsZW07Cit9CisKKworZnVuY3Rpb24gRE9NX2dldENoaWxkKGVsZW0sIGlu
ZGV4KSB7CisKKyAgICB2YXIgY291bnQgPSAwLCBjaGlsZCA9IGVsZW0uZmlyc3RDaGlsZDsKKyAg
ICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgIHZhciBuZXh0ID0gY2hpbGQubmV4dFNpYmxpbmc7Cisg
ICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMSkgeworICAgICAgICBpZiAoaW5kZXggPT0gY291
bnQpCisgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICArK2NvdW50OworICAgICAgfQor
ICAgICAgY2hpbGQgPSBuZXh0OworICAgIH0KKworICAgIHJldHVybiBudWxsOworICAgIAorfQor
CisKK2Z1bmN0aW9uIERPTV9nZXRDaGlsZENvdW50KGVsZW0pIHsKKworICAgIHZhciBjb3VudCA9
IDAsIGNoaWxkID0gZWxlbS5maXJzdENoaWxkOworICAgIHdoaWxlIChjaGlsZCkgeworICAgICAg
aWYgKGNoaWxkLm5vZGVUeXBlID09IDEpCisgICAgICArK2NvdW50OworICAgICAgY2hpbGQgPSBj
aGlsZC5uZXh0U2libGluZzsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworICAgIAorfQorCisK
K2Z1bmN0aW9uIERPTV9nZXRDaGlsZEluZGV4KHBhcmVudCwgdG9GaW5kKSB7CisKKyAgICB2YXIg
Y291bnQgPSAwLCBjaGlsZCA9IHBhcmVudC5maXJzdENoaWxkOworICAgIHdoaWxlIChjaGlsZCkg
eworICAgICAgICBpZiAoY2hpbGQgPT0gdG9GaW5kKQorICAgICAgICAgICAgcmV0dXJuIGNvdW50
OworICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMSkKKyAgICAgICAgICAgICsrY291bnQ7
CisgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7CisgICAgfQorCisgICAgcmV0dXJu
IC0xOworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9nZXRFbGVtZW50QnlJZChpZCkgeworCisg
ICAgdmFyIGVsZW0gPSAkZG9jLmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICByZXR1cm4gZWxlbSA/
IGVsZW0gOiBudWxsOworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9nZXRFdmVudExpc3RlbmVy
KGVsZW1lbnQpIHsKKworICAgIHJldHVybiBlbGVtZW50Ll9fbGlzdGVuZXI7CisgICAgCit9CisK
KworZnVuY3Rpb24gRE9NX2dldEV2ZW50c1N1bmsoZWxlbWVudCkgeworCisgICAgcmV0dXJuIGVs
ZW1lbnQuX19ldmVudEJpdHMgPyBlbGVtZW50Ll9fZXZlbnRCaXRzIDogMDsKKyAgICAKK30KKwor
CitmdW5jdGlvbiBET01fZ2V0Rmlyc3RDaGlsZChlbGVtKSB7CisKKyAgICB2YXIgY2hpbGQgPSBl
bGVtLmZpcnN0Q2hpbGQ7CisgICAgd2hpbGUgKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlICE9IDEp
CisgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOworICAgIHJldHVybiBjaGlsZCA/IGNo
aWxkIDogbnVsbDsKKyAgICAKK30KKworCitmdW5jdGlvbiBET01fZ2V0SW5uZXJIVE1MKGVsZW1l
bnQpIHsKKworICAgIHZhciByZXQgPSBlbGVtZW50LmlubmVySFRNTDsKKyAgICByZXR1cm4gKHJl
dCA9PSBudWxsKSA/IG51bGwgOiByZXQ7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2dldElu
bmVyVGV4dChlbGVtZW50KSB7CisKKyAgICAvLyBUbyBtaW1pYyBJRSdzICdpbm5lclRleHQnIHBy
b3BlcnR5IGluIHRoZSBXM0MgRE9NLCB3ZSBuZWVkIHRvIHJlY3Vyc2l2ZWx5CisgICAgLy8gY29u
Y2F0ZW5hdGUgYWxsIGNoaWxkIHRleHQgbm9kZXMgKGRlcHRoIGZpcnN0KS4KKyAgICB2YXIgdGV4
dCA9ICcnLCBjaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKKyAgICB3aGlsZSAoY2hpbGQpIHsK
KyAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxKXsgLy8gMSA9PSBFbGVtZW50IG5vZGUKKyAg
ICAgICAgdGV4dCArPSBET01fZ2V0SW5uZXJUZXh0KGNoaWxkKTsKKyAgICAgIH0gZWxzZSBpZiAo
Y2hpbGQubm9kZVZhbHVlKSB7CisgICAgICAgIHRleHQgKz0gY2hpbGQubm9kZVZhbHVlOworICAg
ICAgfQorICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZzsKKyAgICB9CisgICAgcmV0dXJu
IHRleHQ7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2dldEludEF0dHJpYnV0ZShlbGVtLCBh
dHRyKSB7CisKKyAgICB2YXIgaSA9IHBhcnNlSW50KGVsZW1bYXR0cl0pOworICAgIGlmICghaSkg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGk7CisgICAgCit9CisKKwor
ZnVuY3Rpb24gRE9NX2dldEludFN0eWxlQXR0cmlidXRlKGVsZW0sIGF0dHIpIHsKKworICAgIHZh
ciBpID0gcGFyc2VJbnQoZWxlbS5zdHlsZVthdHRyXSk7CisgICAgaWYgKCFpKSB7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gaTsKKyAgICAKK30KKworCitmdW5jdGlvbiBE
T01fZ2V0TmV4dFNpYmxpbmcoZWxlbSkgeworCisgICAgdmFyIHNpYiA9IGVsZW0ubmV4dFNpYmxp
bmc7CisgICAgd2hpbGUgKHNpYiAmJiBzaWIubm9kZVR5cGUgIT0gMSkKKyAgICAgIHNpYiA9IHNp
Yi5uZXh0U2libGluZzsKKyAgICByZXR1cm4gc2liID8gc2liIDogbnVsbDsKKyAgICAKK30KKwor
CitmdW5jdGlvbiBET01fZ2V0UGFyZW50KGVsZW0pIHsKKworICAgIHZhciBwYXJlbnQgPSBlbGVt
LnBhcmVudE5vZGU7CisgICAgaWYocGFyZW50ID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICAgIGlmIChwYXJlbnQubm9kZVR5cGUgIT0gMSkKKyAgICAgICAgcGFyZW50
ID0gbnVsbDsKKyAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50IDogbnVsbDsKKyAgICAKK30KKwor
CitmdW5jdGlvbiBET01fZ2V0U3R5bGVBdHRyaWJ1dGUoZWxlbSwgYXR0cikgeworCisgICAgdmFy
IHJldCA9IGVsZW0uc3R5bGVbYXR0cl07CisgICAgcmV0dXJuIChyZXQgPT0gbnVsbCkgPyBudWxs
IDogcmV0OworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9pbnNlcnRDaGlsZChwYXJlbnQsIHRv
QWRkLCBpbmRleCkgeworCisgICAgdmFyIGNvdW50ID0gMCwgY2hpbGQgPSBwYXJlbnQuZmlyc3RD
aGlsZCwgYmVmb3JlID0gbnVsbDsKKyAgICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgIGlmIChjaGls
ZC5ub2RlVHlwZSA9PSAxKSB7CisgICAgICAgIGlmIChjb3VudCA9PSBpbmRleCkgeworICAgICAg
ICAgIGJlZm9yZSA9IGNoaWxkOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICsrY291bnQ7CisgICAgICB9CisgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOworICAg
IH0KKworICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodG9BZGQsIGJlZm9yZSk7CisgICAgCit9CisK
KworZnVuY3Rpb24gRE9NX2l0ZXJDaGlsZHJlbihlbGVtKSB7CisKKyAgICB2YXIgcGFyZW50ID0g
ZWxlbTsKKyAgICB2YXIgY2hpbGQgPSBlbGVtLmZpcnN0Q2hpbGQ7CisgICAgdmFyIGxhc3RDaGls
ZCA9IG51bGw7CisgICAgcmV0dXJuIHsKKyAgICAgICAgJ25leHQnOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgU3Rv
cEl0ZXJhdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3RDaGlsZCA9IGNoaWxk
OworICAgICAgICAgICAgY2hpbGQgPSBET01fZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOworICAgICAg
ICAgICAgcmV0dXJuIGxhc3RDaGlsZDsKKyAgICAgICAgfSwKKyAgICAgICAgJ3JlbW92ZSc6IGZ1
bmN0aW9uKCkgeyAgICAgICAgCisgICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobGFzdENo
aWxkKTsKKyAgICAgICAgfSwKKyAgICAgICAgX19pdGVyX186IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICB9OworICAgIAorfQorCisKK2Z1bmN0
aW9uIERPTV93YWxrQ2hpbGRyZW4oZWxlbSkgeworCisgICAgdmFyIHBhcmVudCA9IGVsZW07Cisg
ICAgdmFyIGNoaWxkID0gRE9NX2dldEZpcnN0Q2hpbGQoZWxlbSk7CisgICAgdmFyIGxhc3RDaGls
ZCA9IG51bGw7CisgICAgdmFyIHN0YWNrID0gW107CisgICAgdmFyIHBhcmVudFN0YWNrID0gW107
CisgICAgcmV0dXJuIHsKKyAgICAgICAgJ25leHQnOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGlmIChjaGlsZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgU3RvcEl0ZXJhdGlv
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3RDaGlsZCA9IGNoaWxkOworICAgICAg
ICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBET01fZ2V0Rmlyc3RDaGlsZChjaGlsZCk7CisgICAgICAg
ICAgICB2YXIgbmV4dFNpYmxpbmcgPSBET01fZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOworICAgICAg
ICAgICAgaWYoZmlyc3RDaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICBpZihuZXh0U2li
bGluZyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0U2libGlu
Zyk7CisgICAgICAgICAgICAgICAgICAgcGFyZW50U3RhY2sucHVzaChwYXJlbnQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBjaGlsZDsKKyAgICAgICAgICAg
ICAgICBjaGlsZCA9IGZpcnN0Q2hpbGQ7CisgICAgICAgICAgICB9IGVsc2UgaWYobmV4dFNpYmxp
bmcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNoaWxkID0gbmV4dFNpYmxpbmc7CisgICAg
ICAgICAgICB9IGVsc2UgaWYoc3RhY2subGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGNo
aWxkID0gc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50U3RhY2su
cG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNoaWxkID0gbnVs
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsYXN0Q2hpbGQ7CisgICAgICAg
IH0sCisgICAgICAgICdyZW1vdmUnOiBmdW5jdGlvbigpIHsgICAgICAgIAorICAgICAgICAgICAg
cGFyZW50LnJlbW92ZUNoaWxkKGxhc3RDaGlsZCk7CisgICAgICAgIH0sCisgICAgICAgIF9faXRl
cl9fOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAKK30KKworCitmdW5jdGlvbiBET01faXNPckhhc0NoaWxkKHBhcmVudCwgY2hp
bGQpIHsKKworICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgaWYgKHBhcmVudCA9PSBjaGlsZCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGU7Cisg
ICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT0gMSkKKyAgICAgICAgY2hpbGQgPSBudWxsOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX3JlbGVhc2VD
YXB0dXJlKGVsZW0pIHsKKworICAgIGlmICgoRE9NX3NDYXB0dXJlRWxlbSAhPSBudWxsKSAmJiBE
T01fY29tcGFyZShlbGVtLCBET01fc0NhcHR1cmVFbGVtKSkKKyAgICAgICAgRE9NX3NDYXB0dXJl
RWxlbSA9IG51bGw7CisKKyAgICBpZiAoZWxlbSA9PSAkd25kLl9fY2FwdHVyZUVsZW0pCisgICAg
ICAgICR3bmQuX19jYXB0dXJlRWxlbSA9IG51bGw7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9N
X3JlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQpIHsKKworICAgIHBhcmVudC5yZW1vdmVDaGlsZChj
aGlsZCk7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX3JlcGxhY2VDaGlsZChwYXJlbnQsIG5l
d0NoaWxkLCBvbGRDaGlsZCkgeworCisgICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdDaGlsZCwg
b2xkQ2hpbGQpOworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9yZW1vdmVFdmVudFByZXZpZXco
cHJldmlldykgeworICAgIERPTV9zRXZlbnRQcmV2aWV3U3RhY2sucmVtb3ZlKHByZXZpZXcpOwor
fQorCisKK2Z1bmN0aW9uIERPTV9zY3JvbGxJbnRvVmlldyhlbGVtKSB7CisKKyAgICB2YXIgbGVm
dCA9IGVsZW0ub2Zmc2V0TGVmdCwgdG9wID0gZWxlbS5vZmZzZXRUb3A7CisgICAgdmFyIHdpZHRo
ID0gZWxlbS5vZmZzZXRXaWR0aCwgaGVpZ2h0ID0gZWxlbS5vZmZzZXRIZWlnaHQ7CisgICAgCisg
ICAgaWYgKGVsZW0ucGFyZW50Tm9kZSAhPSBlbGVtLm9mZnNldFBhcmVudCkgeworICAgICAgICBs
ZWZ0IC09IGVsZW0ucGFyZW50Tm9kZS5vZmZzZXRMZWZ0OworICAgICAgICB0b3AgLT0gZWxlbS5w
YXJlbnROb2RlLm9mZnNldFRvcDsKKyAgICB9CisKKyAgICB2YXIgY3VyID0gZWxlbS5wYXJlbnRO
b2RlOworICAgIHdoaWxlIChjdXIgJiYgKGN1ci5ub2RlVHlwZSA9PSAxKSkgeworICAgICAgICBp
ZiAoKGN1ci5zdHlsZS5vdmVyZmxvdyA9PSAnYXV0bycpIHx8IChjdXIuc3R5bGUub3ZlcmZsb3cg
PT0gJ3Njcm9sbCcpKSB7CisgICAgICAgICAgICBpZiAobGVmdCA8IGN1ci5zY3JvbGxMZWZ0KSB7
CisgICAgICAgICAgICAgICAgY3VyLnNjcm9sbExlZnQgPSBsZWZ0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGxlZnQgKyB3aWR0aCA+IGN1ci5zY3JvbGxMZWZ0ICsgY3VyLmNsaWVu
dFdpZHRoKSB7CisgICAgICAgICAgICAgICAgY3VyLnNjcm9sbExlZnQgPSAobGVmdCArIHdpZHRo
KSAtIGN1ci5jbGllbnRXaWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b3Ag
PCBjdXIuc2Nyb2xsVG9wKSB7CisgICAgICAgICAgICAgICAgY3VyLnNjcm9sbFRvcCA9IHRvcDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b3AgKyBoZWlnaHQgPiBjdXIuc2Nyb2xs
VG9wICsgY3VyLmNsaWVudEhlaWdodCkgeworICAgICAgICAgICAgICAgIGN1ci5zY3JvbGxUb3Ag
PSAodG9wICsgaGVpZ2h0KSAtIGN1ci5jbGllbnRIZWlnaHQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgb2Zmc2V0TGVmdCA9IGN1ci5vZmZzZXRMZWZ0LCBvZmZzZXRU
b3AgPSBjdXIub2Zmc2V0VG9wOworICAgICAgICBpZiAoY3VyLnBhcmVudE5vZGUgIT0gY3VyLm9m
ZnNldFBhcmVudCkgeworICAgICAgICAgICAgb2Zmc2V0TGVmdCAtPSBjdXIucGFyZW50Tm9kZS5v
ZmZzZXRMZWZ0OworICAgICAgICAgICAgb2Zmc2V0VG9wIC09IGN1ci5wYXJlbnROb2RlLm9mZnNl
dFRvcDsKKyAgICAgICAgfQorCisgICAgICAgIGxlZnQgKz0gb2Zmc2V0TGVmdCAtIGN1ci5zY3Jv
bGxMZWZ0OworICAgICAgICB0b3AgKz0gb2Zmc2V0VG9wIC0gY3VyLnNjcm9sbFRvcDsKKyAgICAg
ICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgfQorICAgIAorfQorCisKK2Z1bmN0aW9uIERP
TV9yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKSB7CisKKyAgICBkZWxldGUgZWxl
bWVudFthdHRyaWJ1dGVdOworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV9zZXRBdHRyaWJ1dGUo
ZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkgeworCisgICAgZWxlbWVudFthdHRyaWJ1dGVdID0g
dmFsdWU7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX3NldEJvb2xlYW5BdHRyaWJ1dGUoZWxl
bSwgYXR0ciwgdmFsdWUpIHsKKworICAgIGVsZW1bYXR0cl0gPSB2YWx1ZTsKKyAgICAKK30KKwor
CitmdW5jdGlvbiBET01fc2V0Q2FwdHVyZShlbGVtKSB7CisKKyAgICBET01fc0NhcHR1cmVFbGVt
ID0gZWxlbTsKKyAgICAkd25kLl9fY2FwdHVyZUVsZW0gPSBlbGVtOworICAgIAorfQorCisKK2Z1
bmN0aW9uIERPTV9zZXRFdmVudExpc3RlbmVyKGVsZW1lbnQsIGxpc3RlbmVyKSB7CisKKyAgICBl
bGVtZW50Ll9fbGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICAKK30KKworCitmdW5jdGlvbiBET01f
c2V0SW5uZXJIVE1MKGVsZW1lbnQsIGh0bWwpIHsKKworICAgIGlmICghaHRtbCkgeworICAgICAg
ICBodG1sID0gIiI7CisgICAgfQorICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAK
K30KKworCitmdW5jdGlvbiBET01fc2V0SW5uZXJUZXh0KGVsZW0sIHRleHQpIHsKKworICAgIC8v
IFJlbW92ZSBhbGwgY2hpbGRyZW4gZmlyc3QuCisgICAgd2hpbGUgKGVsZW0uZmlyc3RDaGlsZCkg
eworICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKGVsZW0uZmlyc3RDaGlsZCk7CisgICAgfQorICAg
IC8vIEFkZCBhIG5ldyB0ZXh0IG5vZGUuCisgICAgZWxlbS5hcHBlbmRDaGlsZCgkZG9jLmNyZWF0
ZVRleHROb2RlKHRleHQpKTsKKyAgICAKK30KKworCitmdW5jdGlvbiBET01fc2V0SW50QXR0cmli
dXRlKGVsZW0sIGF0dHIsIHZhbHVlKSB7CisKKyAgICBlbGVtW2F0dHJdID0gdmFsdWU7CisgICAg
Cit9CisKKworZnVuY3Rpb24gRE9NX3NldEludFN0eWxlQXR0cmlidXRlKGVsZW0sIGF0dHIsIHZh
bHVlKSB7CisKKyAgICBlbGVtLnN0eWxlW2F0dHJdID0gdmFsdWU7CisgICAgCit9CisKKworZnVu
Y3Rpb24gRE9NX3NldE9wdGlvblRleHQoc2VsZWN0LCB0ZXh0LCBpbmRleCkgeworCisgICAgdmFy
IG9wdGlvbiA9IHNlbGVjdC5vcHRpb25zW2luZGV4XTsKKyAgICBvcHRpb24udGV4dCA9IHRleHQ7
CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX3NldFN0eWxlQXR0cmlidXRlKGVsZW1lbnQsIG5h
bWUsIHZhbHVlKSB7CisKKyAgICBlbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7CisgICAgCit9
CisKKworZnVuY3Rpb24gRE9NX3NpbmtFdmVudHMoZWxlbWVudCwgYml0cykgeworCisgICAgZWxl
bWVudC5fX2V2ZW50Qml0cyA9IGJpdHM7CisgICAgCisgICAgZWxlbWVudC5vbmNsaWNrICAgID0g
KGJpdHMgJiAweDAwMDAxKSA/ICR3bmQuX19kaXNwYXRjaEV2ZW50IDogbnVsbDsKKyAgICBlbGVt
ZW50Lm9uZGJsY2xpY2sgID0gKGJpdHMgJiAweDAwMDAyKSA/ICR3bmQuX19kaXNwYXRjaEV2ZW50
IDogbnVsbDsKKyAgICBlbGVtZW50Lm9ubW91c2Vkb3duICAgPSAoYml0cyAmIDB4MDAwMDQpID8g
JHduZC5fX2Rpc3BhdGNoRXZlbnQgOiBudWxsOworICAgIGVsZW1lbnQub25tb3VzZXVwICAgID0g
KGJpdHMgJiAweDAwMDA4KSA/ICR3bmQuX19kaXNwYXRjaEV2ZW50IDogbnVsbDsKKyAgICBlbGVt
ZW50Lm9ubW91c2VvdmVyICAgPSAoYml0cyAmIDB4MDAwMTApID8gJHduZC5fX2Rpc3BhdGNoRXZl
bnQgOiBudWxsOworICAgIGVsZW1lbnQub25tb3VzZW91dCAgPSAoYml0cyAmIDB4MDAwMjApID8g
JHduZC5fX2Rpc3BhdGNoRXZlbnQgOiBudWxsOworICAgIGVsZW1lbnQub25tb3VzZW1vdmUgICA9
IChiaXRzICYgMHgwMDA0MCkgPyAkd25kLl9fZGlzcGF0Y2hFdmVudCA6IG51bGw7CisgICAgZWxl
bWVudC5vbmtleWRvd24gICAgPSAoYml0cyAmIDB4MDAwODApID8gJHduZC5fX2Rpc3BhdGNoRXZl
bnQgOiBudWxsOworICAgIGVsZW1lbnQub25rZXlwcmVzcyAgPSAoYml0cyAmIDB4MDAxMDApID8g
JHduZC5fX2Rpc3BhdGNoRXZlbnQgOiBudWxsOworICAgIGVsZW1lbnQub25rZXl1cCAgICA9IChi
aXRzICYgMHgwMDIwMCkgPyAkd25kLl9fZGlzcGF0Y2hFdmVudCA6IG51bGw7CisgICAgZWxlbWVu
dC5vbmNoYW5nZSAgICAgID0gKGJpdHMgJiAweDAwNDAwKSA/ICR3bmQuX19kaXNwYXRjaEV2ZW50
IDogbnVsbDsKKyAgICBlbGVtZW50Lm9uZm9jdXMgICAgPSAoYml0cyAmIDB4MDA4MDApID8gJHdu
ZC5fX2Rpc3BhdGNoRXZlbnQgOiBudWxsOworICAgIGVsZW1lbnQub25ibHVyICAgICAgPSAoYml0
cyAmIDB4MDEwMDApID8gJHduZC5fX2Rpc3BhdGNoRXZlbnQgOiBudWxsOworICAgIGVsZW1lbnQu
b25sb3NlY2FwdHVyZSA9IChiaXRzICYgMHgwMjAwMCkgPyAkd25kLl9fZGlzcGF0Y2hFdmVudCA6
IG51bGw7CisgICAgZWxlbWVudC5vbnNjcm9sbCAgICAgID0gKGJpdHMgJiAweDA0MDAwKSA/ICR3
bmQuX19kaXNwYXRjaEV2ZW50IDogbnVsbDsKKyAgICBlbGVtZW50Lm9ubG9hZCAgICAgID0gKGJp
dHMgJiAweDA4MDAwKSA/ICR3bmQuX19kaXNwYXRjaEV2ZW50IDogbnVsbDsKKyAgICBlbGVtZW50
Lm9uZXJyb3IgICAgPSAoYml0cyAmIDB4MTAwMDApID8gJHduZC5fX2Rpc3BhdGNoRXZlbnQgOiBu
dWxsOworICAgIAorfQorCisKK2Z1bmN0aW9uIERPTV90b1N0cmluZyhlbGVtKSB7CisKKyAgICB2
YXIgdGVtcCA9IGVsZW0uY2xvbmVOb2RlKHRydWUpOworICAgIHZhciB0ZW1wRGl2ID0gJGRvYy5j
cmVhdGVFbGVtZW50KCJESVYiKTsKKyAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKHRlbXApOworICAg
IG91dGVyID0gdGVtcERpdi5pbm5lckhUTUw7CisgICAgdGVtcC5pbm5lckhUTUwgPSAiIjsKKyAg
ICByZXR1cm4gb3V0ZXI7CisgICAgCit9CisKKworZnVuY3Rpb24gRE9NX2Rpc3BhdGNoRXZlbnQo
ZXZlbnQsIGVsZW1lbnQsIGxpc3RlbmVyKSB7CisgICAgRE9NX2Rpc3BhdGNoRXZlbnRJbXBsKGV2
ZW50LCBlbGVtZW50LCBsaXN0ZW5lcik7Cit9CisKKworZnVuY3Rpb24gRE9NX3ByZXZpZXdFdmVu
dChldnQpIHsKKyAgICB2YXIgcmV0ID0gdHJ1ZTsKKyAgICBpZiAoKHB5anNsaWJfbGVuKERPTV9z
RXZlbnRQcmV2aWV3U3RhY2spID4gMCkpIHsKKyAgICB2YXIgcHJldmlldyA9IERPTV9zRXZlbnRQ
cmV2aWV3U3RhY2suX19nZXRpdGVtX18oICggcHlqc2xpYl9sZW4oRE9NX3NFdmVudFByZXZpZXdT
dGFjaykgLSAxICkgKTsKKyAgICB2YXIgcmV0ID0gcHJldmlldy5vbkV2ZW50UHJldmlldyhldnQp
OworICAgIGlmICghKHJldCkpIHsKKyAgICBET01fZXZlbnRDYW5jZWxCdWJibGUoZXZ0LCB0cnVl
KTsKKyAgICBET01fZXZlbnRQcmV2ZW50RGVmYXVsdChldnQpOworICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHJldDsKK30KKworCitmdW5jdGlvbiBET01fZGlzcGF0Y2hFdmVudEFuZENhdGNoKGV2
dCwgZWxlbSwgbGlzdGVuZXIsIGhhbmRsZXIpIHsKK30KKworCitmdW5jdGlvbiBET01fZGlzcGF0
Y2hFdmVudEltcGwoZXZlbnQsIGVsZW1lbnQsIGxpc3RlbmVyKSB7CisgICAgaWYgKChlbGVtZW50
ID09IERPTV9zQ2FwdHVyZUVsZW0pKSB7CisgICAgaWYgKChET01fZXZlbnRHZXRUeXBlKGV2ZW50
KSA9PSAnbG9zZWNhcHR1cmUnKSkgeworICAgIERPTV9zQ2FwdHVyZUVsZW0gPSBudWxsOworICAg
IH0KKyAgICB9CisgICAgbGlzdGVuZXIub25Ccm93c2VyRXZlbnQoZXZlbnQpOworfQorCisKK2Z1
bmN0aW9uIERPTV9pbnNlcnRMaXN0SXRlbShzZWxlY3QsIGl0ZW0sIHZhbHVlLCBpbmRleCkgewor
ICAgIHZhciBvcHRpb24gPSBET01fY3JlYXRlRWxlbWVudCgnT1BUSU9OJyk7CisgICAgRE9NX3Nl
dElubmVyVGV4dChvcHRpb24sIGl0ZW0pOworICAgIGlmICgodmFsdWUgIT0gbnVsbCkpIHsKKyAg
ICBET01fc2V0QXR0cmlidXRlKG9wdGlvbiwgJ3ZhbHVlJywgdmFsdWUpOworICAgIH0KKyAgICBp
ZiAoKGluZGV4ID09IC0xKSkgeworICAgIERPTV9hcHBlbmRDaGlsZChzZWxlY3QsIG9wdGlvbik7
CisgICAgfQorICAgIGVsc2UgeworICAgIERPTV9pbnNlcnRDaGlsZChzZWxlY3QsIG9wdGlvbiwg
aW5kZXgpOworICAgIH0KK30KKworCitmdW5jdGlvbiBfX3NldHNfU2V0KCkgeworfQorZnVuY3Rp
b24gc2V0c19TZXQoZGF0YSkgeworICAgIGlmICh0eXBlb2YgZGF0YSA9PSAndW5kZWZpbmVkJykg
ZGF0YT1udWxsOworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3NldHNfU2V0KCk7CisgICAgaWYo
aW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1
bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCitzZXRzX1NldC5wYXJzZV9rd2Fy
Z3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBkYXRhICkgeworICAgIGlmICh0eXBlb2YgZGF0YSA9
PSAndW5kZWZpbmVkJykKKyAgICAgICAgZGF0YT1fX2t3YXJncy5kYXRhOworICAgIHZhciBfX3Ig
PSBbZGF0YV07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5jdGlvbiBfX3NldHNfU2V0X2luaXRp
YWxpemUoKSB7CisgICAgaWYoX19zZXRzX1NldC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47
CisgICAgX19zZXRzX1NldC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBweWpzX2V4
dGVuZChfX3NldHNfU2V0LCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3NldHNfU2V0LnByb3Rv
dHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHNldHNfU2V0OworICAgIF9fc2V0c19TZXQucHJvdG90
eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oZGF0YSkgeworICAgIGlmICh0eXBlb2YgZGF0YSA9PSAn
dW5kZWZpbmVkJykgZGF0YT1udWxsOworCisgICAgICAgIHRoaXMuZCA9IHt9OworICAgICAgICB0
aGlzLnVwZGF0ZShkYXRhKTsKKyAgICAgICAgCisgICAgfTsKK19fc2V0c19TZXQucHJvdG90eXBl
Ll9faW5pdF9fLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIGRhdGEgKSB7Cisg
ICAgaWYgKHR5cGVvZiBkYXRhID09ICd1bmRlZmluZWQnKQorICAgICAgICBkYXRhPV9fa3dhcmdz
LmRhdGE7CisgICAgdmFyIF9fciA9IFtkYXRhXTsKKyAgICByZXR1cm4gX19yOworfTsKKyAgICBf
X3NldHNfU2V0LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fc2V0c19TZXQucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX19z
ZXRzX1NldC5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Nl
dHNfU2V0LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnBhcnNlX2t3
YXJncyA9IF9fc2V0c19TZXQucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJnczsKKyAgICBf
X3NldHNfU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHRoaXMuZFtw
eWpzbGliX2hhc2godmFsdWUpXSA9IHZhbHVlOworICAgIH07CisgICAgX19zZXRzX1NldC5wcm90
b3R5cGUuX19jbGFzc19fLmFkZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19zZXRz
X1NldC5wcm90b3R5cGUuYWRkLmNhbGwuYXBwbHkoX19zZXRzX1NldC5wcm90b3R5cGUuYWRkLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFzc19fLmFk
ZC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuYWRkLmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuY2xlYXIgPSBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLmQgPSB7fTsKKyAgICB9OworICAgIF9fc2V0c19TZXQucHJv
dG90eXBlLl9fY2xhc3NfXy5jbGVhciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19z
ZXRzX1NldC5wcm90b3R5cGUuY2xlYXIuY2FsbC5hcHBseShfX3NldHNfU2V0LnByb3RvdHlwZS5j
bGVhciwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLl9fY2xh
c3NfXy5jbGVhci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19zZXRzX1NldC5wcm90b3R5
cGUuY2xlYXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlw
ZS5fX2NvbnRhaW5zX18gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiAodGhpcy5kW3B5
anNsaWJfaGFzaCh2YWx1ZSldKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9OworICAgIF9fc2V0c19T
ZXQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2NvbnRhaW5zX18gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fc2V0c19TZXQucHJvdG90eXBlLl9fY29udGFpbnNfXy5jYWxsLmFwcGx5KF9f
c2V0c19TZXQucHJvdG90eXBlLl9fY29udGFpbnNfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fc2V0c19TZXQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2NvbnRhaW5zX18udW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLl9fY29udGFpbnNfXy5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLmRpc2NhcmQgPSBmdW5j
dGlvbih2YWx1ZSkgeworICAgIGRlbGV0ZSB0aGlzLmRbcHlqc2xpYl9oYXNoKHZhbHVlKV07Cisg
ICAgfTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS5fX2NsYXNzX18uZGlzY2FyZCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX19zZXRzX1NldC5wcm90b3R5cGUuZGlzY2FyZC5jYWxs
LmFwcGx5KF9fc2V0c19TZXQucHJvdG90eXBlLmRpc2NhcmQsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS5fX2NsYXNzX18uZGlzY2FyZC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuZGlzY2FyZC5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLmlzc3Vic2V0ID0gZnVuY3Rpb24o
aXRlbXMpIHsKKworICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuZCkgeworICAgICAgICAgICAg
aWYgKCFpdGVtcy5fX2NvbnRhaW5zX18oaSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIH07CisgICAgX19zZXRzX1NldC5w
cm90b3R5cGUuX19jbGFzc19fLmlzc3Vic2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3NldHNfU2V0LnByb3RvdHlwZS5pc3N1YnNldC5jYWxsLmFwcGx5KF9fc2V0c19TZXQucHJv
dG90eXBlLmlzc3Vic2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19zZXRzX1NldC5wcm90
b3R5cGUuX19jbGFzc19fLmlzc3Vic2V0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Nl
dHNfU2V0LnByb3RvdHlwZS5pc3N1YnNldC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
c2V0c19TZXQucHJvdG90eXBlLmlzc3VwZXJzZXQgPSBmdW5jdGlvbihpdGVtcykgeworCisgICAg
ICAgIGZvciAodmFyIGkgaW4gaXRlbXMpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fX2NvbnRh
aW5zX18oaSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIAorICAgIH07CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFzc19f
Lmlzc3VwZXJzZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fc2V0c19TZXQucHJv
dG90eXBlLmlzc3VwZXJzZXQuY2FsbC5hcHBseShfX3NldHNfU2V0LnByb3RvdHlwZS5pc3N1cGVy
c2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFz
c19fLmlzc3VwZXJzZXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fc2V0c19TZXQucHJv
dG90eXBlLmlzc3VwZXJzZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0
LnByb3RvdHlwZS5fX2l0ZXJfXyA9IGZ1bmN0aW9uKCkgeworCisgICAgICAgIHZhciBpdGVtcz1u
ZXcgcHlqc2xpYl9MaXN0KCk7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmQpIGl0ZW1z
LmFwcGVuZCh0aGlzLmRba2V5XSk7CisgICAgICAgIHJldHVybiBpdGVtcy5fX2l0ZXJfXygpOwor
ICAgICAgICAKKyAgICB9OworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2l0
ZXJfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19zZXRzX1NldC5wcm90b3R5cGUu
X19pdGVyX18uY2FsbC5hcHBseShfX3NldHNfU2V0LnByb3RvdHlwZS5fX2l0ZXJfXywgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2l0ZXJf
Xy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19pdGVy
X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS5fX2xl
bl9fID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgdmFyIHNpemU9MDsKKyAgICAgICAgZm9yICh2
YXIgaSBpbiB0aGlzLmQpIHNpemUrKzsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIAor
ICAgIH07CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFzc19fLl9fbGVuX18gPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fc2V0c19TZXQucHJvdG90eXBlLl9fbGVuX18uY2Fs
bC5hcHBseShfX3NldHNfU2V0LnByb3RvdHlwZS5fX2xlbl9fLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFzc19fLl9fbGVuX18udW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fc2V0c19TZXQucHJvdG90eXBlLl9fbGVuX18uaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHsK
KworICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kKSB7CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSB0aGlzLmRba2V5XTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRba2V5XTsKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgfTsKKyAg
ICBfX3NldHNfU2V0LnByb3RvdHlwZS5fX2NsYXNzX18ucG9wID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3NldHNfU2V0LnByb3RvdHlwZS5wb3AuY2FsbC5hcHBseShfX3NldHNfU2V0
LnByb3RvdHlwZS5wb3AsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3NldHNfU2V0LnByb3Rv
dHlwZS5fX2NsYXNzX18ucG9wLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0
LnByb3RvdHlwZS5wb3AuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0LnBy
b3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHRoaXMuZGlzY2FyZCh2YWx1
ZSk7CisgICAgfTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3NldHNfU2V0LnByb3RvdHlwZS5yZW1vdmUu
Y2FsbC5hcHBseShfX3NldHNfU2V0LnByb3RvdHlwZS5yZW1vdmUsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlLnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS5yZW1vdmUuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3NldHNfU2V0LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihk
YXRhKSB7CisKKyAgICAgICAgaWYgKHB5anNsaWJfaXNBcnJheShkYXRhKSkgeworICAgICAgICAg
ICAgZm9yICh2YXIgaSBpbiBkYXRhKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kW3B5anNsaWJf
aGFzaChkYXRhW2ldKV09ZGF0YVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChweWpzbGliX2lzSXRlcmF0YWJsZShkYXRhKSkgeworICAgICAgICAgICAgdmFy
IGl0ZXI9ZGF0YS5fX2l0ZXJfXygpOworICAgICAgICAgICAgdmFyIGk9MDsKKyAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGl0ZW09aXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZFtweWpz
bGliX2hhc2goaXRlbSldPWl0ZW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRl
cmF0aW9uKSB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
IH07CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFzc19fLnVwZGF0ZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX19zZXRzX1NldC5wcm90b3R5cGUudXBkYXRlLmNhbGwuYXBw
bHkoX19zZXRzX1NldC5wcm90b3R5cGUudXBkYXRlLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X19zZXRzX1NldC5wcm90b3R5cGUuX19jbGFzc19fLnVwZGF0ZS51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX19zZXRzX1NldC5wcm90b3R5cGUudXBkYXRlLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7Cit9CitfX3NldHNfU2V0X2luaXRpYWxpemUoKTsKK2Z1bmN0aW9uIExvY2F0aW9uX21ha2VV
cmxEaWN0KHMpIHsKKyAgICB2YXIgZGljdCA9IG5ldyBweWpzbGliX0RpY3QoW10pOworICAgIHZh
ciBwYWlycyA9IHMuc3BsaXQoJyYnKTsKKworICAgICAgICB2YXIgX19wYWlyID0gcGFpcnMuX19p
dGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHBhaXIgPSBfX3BhaXIubmV4dCgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAKKyAgICBpZiAoKHB5anNsaWJfbGVuKHBhaXIpIDwgMykpIHsKKyAgICBjb250aW51
ZTsKKyAgICB9CisgICAgdmFyIGt2ID0gcGFpci5zcGxpdCgnPScsIDEpOworICAgIGRpY3QuX19z
ZXRpdGVtX18oa3YuX19nZXRpdGVtX18oMCksIGt2Ll9fZ2V0aXRlbV9fKDEpKTsKKworICAgICAg
ICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9w
SXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gZGljdDsKK30KKworCitmdW5jdGlvbiBMb2Nh
dGlvbl9tYWtlVXJsU3RyaW5nRnJvbURpY3QoZCkgeworICAgIHZhciBwYWlycyA9IG5ldyBweWpz
bGliX0xpc3QoW10pOworCisgICAgICAgIHZhciBfX3RlbXBfayA9IGQuaXRlcml0ZW1zKCkuX19p
dGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHRlbXBfayA9IF9fdGVtcF9rLm5leHQoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICB2YXIgayA9IHRlbXBfay5fX2dldGl0ZW1fXygwKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHRlbXBfay5fX2dldGl0ZW1fXygx
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgcGFpcnMuYXBwZW5kKCAoICAoIGsg
KyAnPScgKSAgKyB2ICkgKTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICByZXR1cm4g
JyYnLmpvaW4ocGFpcnMpOworfQorCisKK2Z1bmN0aW9uIF9fTG9jYXRpb25fTG9jYXRpb24oKSB7
Cit9CitmdW5jdGlvbiBMb2NhdGlvbl9Mb2NhdGlvbihsb2NhdGlvbikgeworICAgIHZhciBpbnN0
YW5jZSA9IG5ldyBfX0xvY2F0aW9uX0xvY2F0aW9uKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0
X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJl
dHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBfX0xvY2F0aW9uX0xvY2F0aW9uX2luaXRp
YWxpemUoKSB7CisgICAgaWYoX19Mb2NhdGlvbl9Mb2NhdGlvbi5fX3dhc19pbml0aWFsaXplZF9f
KSByZXR1cm47CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5fX3dhc19pbml0aWFsaXplZF9fID0g
dHJ1ZTsKKyAgICBweWpzX2V4dGVuZChfX0xvY2F0aW9uX0xvY2F0aW9uLCBfX3B5anNsaWJfT2Jq
ZWN0KTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdf
XyA9IExvY2F0aW9uX0xvY2F0aW9uOworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBl
Ll9faW5pdF9fID0gZnVuY3Rpb24obG9jYXRpb24pIHsKKyAgICB0aGlzLmxvY2F0aW9uID0gbG9j
YXRpb247CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNz
X18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fTG9jYXRpb25fTG9j
YXRpb24ucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX19Mb2NhdGlvbl9Mb2NhdGlvbi5w
cm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xv
Y2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0SGFzaCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmhhc2g7CisgICAgfTsKKyAg
ICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SGFzaCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0
SGFzaC5jYWxsLmFwcGx5KF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldEhhc2gsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2Ns
YXNzX18uZ2V0SGFzaC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2Nh
dGlvbi5wcm90b3R5cGUuZ2V0SGFzaC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fTG9j
YXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldEhhc2hEaWN0ID0gZnVuY3Rpb24oKSB7CisgICAg
aWYgKCEodGhpcy5oYXNoRGljdCkgfHwgKHRoaXMuaGFzaERpY3RIYXNoICE9IHRoaXMuZ2V0SGFz
aCgpKSkgeworICAgIHRoaXMuaGFzaERpY3RIYXNoID0gdGhpcy5nZXRIYXNoKCk7CisgICAgdGhp
cy5oYXNoRGljdCA9IExvY2F0aW9uX21ha2VVcmxEaWN0KHRoaXMuZ2V0SGFzaCgpLnNsaWNlKDEp
KTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuaGFzaERpY3Q7CisgICAgfTsKKyAgICBfX0xvY2F0
aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SGFzaERpY3QgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldEhhc2hE
aWN0LmNhbGwuYXBwbHkoX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0SGFzaERpY3Qs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0SGFzaERpY3QudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fTG9jYXRp
b25fTG9jYXRpb24ucHJvdG90eXBlLmdldEhhc2hEaWN0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0SG9zdCA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmhvc3Q7CisgICAgfTsKKyAgICBfX0xvY2F0aW9u
X0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SG9zdCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0SG9zdC5jYWxsLmFw
cGx5KF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldEhvc3QsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SG9z
dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5
cGUuZ2V0SG9zdC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fTG9jYXRpb25fTG9jYXRp
b24ucHJvdG90eXBlLmdldEhvc3RuYW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMu
bG9jYXRpb24uaG9zdG5hbWU7CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0SG9zdG5hbWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldEhvc3RuYW1lLmNhbGwuYXBwbHkoX19M
b2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0SG9zdG5hbWUsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SG9zdG5h
bWUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90
eXBlLmdldEhvc3RuYW1lLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9M
b2NhdGlvbi5wcm90b3R5cGUuZ2V0SHJlZiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmxvY2F0aW9uLmhyZWY7CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0SHJlZiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19Mb2Nh
dGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0SHJlZi5jYWxsLmFwcGx5KF9fTG9jYXRpb25fTG9j
YXRpb24ucHJvdG90eXBlLmdldEhyZWYsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX0xvY2F0
aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SHJlZi51bmJvdW5kX21ldGhvZCA9
IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0SHJlZi5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldFBh
Z2VIcmVmID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGhyZWYgPSB0aGlzLmxvY2F0aW9uLmhyZWY7
CisgICAgaWYgKGhyZWYuZmluZCgnPycpKSB7CisgICAgdmFyIGhyZWYgPSBocmVmLnNwbGl0KCc/
JykuX19nZXRpdGVtX18oMCk7CisgICAgfQorICAgIGlmIChocmVmLmZpbmQoJyMnKSkgeworICAg
IHZhciBocmVmID0gaHJlZi5zcGxpdCgnIycpLl9fZ2V0aXRlbV9fKDApOworICAgIH0KKyAgICBy
ZXR1cm4gaHJlZjsKKyAgICB9OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRQYWdlSHJlZiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19Mb2Nh
dGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0UGFnZUhyZWYuY2FsbC5hcHBseShfX0xvY2F0aW9u
X0xvY2F0aW9uLnByb3RvdHlwZS5nZXRQYWdlSHJlZiwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRQYWdlSHJlZi51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0
UGFnZUhyZWYuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9u
LnByb3RvdHlwZS5nZXRQYXRobmFtZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmxv
Y2F0aW9uLnBhdGhuYW1lOworICAgIH07CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5
cGUuX19jbGFzc19fLmdldFBhdGhuYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5nZXRQYXRobmFtZS5jYWxsLmFwcGx5KF9fTG9j
YXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldFBhdGhuYW1lLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuX19jbGFzc19fLmdldFBhdGhuYW1l
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlw
ZS5nZXRQYXRobmFtZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fTG9jYXRpb25fTG9j
YXRpb24ucHJvdG90eXBlLmdldFBvcnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5s
b2NhdGlvbi5wb3J0OworICAgIH07CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUu
X19jbGFzc19fLmdldFBvcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fTG9jYXRp
b25fTG9jYXRpb24ucHJvdG90eXBlLmdldFBvcnQuY2FsbC5hcHBseShfX0xvY2F0aW9uX0xvY2F0
aW9uLnByb3RvdHlwZS5nZXRQb3J0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19Mb2NhdGlv
bl9Mb2NhdGlvbi5wcm90b3R5cGUuX19jbGFzc19fLmdldFBvcnQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdldFBvcnQuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5nZXRQcm90
b2NvbCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLnByb3RvY29sOwor
ICAgIH07CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuX19jbGFzc19fLmdldFBy
b3RvY29sID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX0xvY2F0aW9uX0xvY2F0aW9u
LnByb3RvdHlwZS5nZXRQcm90b2NvbC5jYWxsLmFwcGx5KF9fTG9jYXRpb25fTG9jYXRpb24ucHJv
dG90eXBlLmdldFByb3RvY29sLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19Mb2NhdGlvbl9M
b2NhdGlvbi5wcm90b3R5cGUuX19jbGFzc19fLmdldFByb3RvY29sLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5nZXRQcm90b2NvbC5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLmdl
dFNlYXJjaCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiAgKCAnJyArIHRoaXMubG9jYXRpb24u
c2VhcmNoICkgOworICAgIH07CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuX19j
bGFzc19fLmdldFNlYXJjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19Mb2NhdGlv
bl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0U2VhcmNoLmNhbGwuYXBwbHkoX19Mb2NhdGlvbl9Mb2Nh
dGlvbi5wcm90b3R5cGUuZ2V0U2VhcmNoLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19Mb2Nh
dGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuX19jbGFzc19fLmdldFNlYXJjaC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0U2VhcmNoLmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUu
Z2V0U2VhcmNoRGljdCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghKHRoaXMuc2VhcmNoRGljdCkp
IHsKKyAgICB0aGlzLnNlYXJjaERpY3QgPSBMb2NhdGlvbl9tYWtlVXJsRGljdCh0aGlzLmdldFNl
YXJjaCgpLnNsaWNlKDEpKTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuc2VhcmNoRGljdDsKKyAg
ICB9OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTZWFy
Y2hEaWN0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX0xvY2F0aW9uX0xvY2F0aW9u
LnByb3RvdHlwZS5nZXRTZWFyY2hEaWN0LmNhbGwuYXBwbHkoX19Mb2NhdGlvbl9Mb2NhdGlvbi5w
cm90b3R5cGUuZ2V0U2VhcmNoRGljdCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fTG9jYXRp
b25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTZWFyY2hEaWN0LnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5nZXRTZWFyY2hE
aWN0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90
b3R5cGUuZ2V0U2VhcmNoVmFyID0gZnVuY3Rpb24oa2V5KSB7CisgICAgdmFyIHNlYXJjaERpY3Qg
PSB0aGlzLmdldFNlYXJjaERpY3QoKTsKKyAgICByZXR1cm4gc2VhcmNoRGljdC5fX2dldGl0ZW1f
XyhrZXkpOworICAgIH07CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuX19jbGFz
c19fLmdldFNlYXJjaFZhciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19Mb2NhdGlv
bl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0U2VhcmNoVmFyLmNhbGwuYXBwbHkoX19Mb2NhdGlvbl9M
b2NhdGlvbi5wcm90b3R5cGUuZ2V0U2VhcmNoVmFyLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuX19jbGFzc19fLmdldFNlYXJjaFZhci51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuZ2V0
U2VhcmNoVmFyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlv
bi5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5sb2NhdGlvbi5yZWxv
YWQoKTsKKyAgICB9OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3Nf
Xy5yZWxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fTG9jYXRpb25fTG9jYXRp
b24ucHJvdG90eXBlLnJlbG9hZC5jYWxsLmFwcGx5KF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90
eXBlLnJlbG9hZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24u
cHJvdG90eXBlLl9fY2xhc3NfXy5yZWxvYWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
TG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLnJlbG9hZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLnNldEhyZWYgPSBmdW5jdGlvbiho
cmVmKSB7CisgICAgdGhpcy5sb2NhdGlvbi5ocmVmID0gaHJlZjsKKyAgICB9OworICAgIF9fTG9j
YXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIcmVmID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5zZXRIcmVmLmNh
bGwuYXBwbHkoX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuc2V0SHJlZiwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3NfXy5z
ZXRIcmVmLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnBy
b3RvdHlwZS5zZXRIcmVmLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9M
b2NhdGlvbi5wcm90b3R5cGUuc2V0U2VhcmNoID0gZnVuY3Rpb24oc2VhcmNoKSB7CisgICAgdGhp
cy5sb2NhdGlvbi5zZWFyY2ggPSBzZWFyY2g7CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0
aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U2VhcmNoID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5zZXRTZWFyY2guY2FsbC5hcHBs
eShfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5zZXRTZWFyY2gsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U2Vh
cmNoLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3Rv
dHlwZS5zZXRTZWFyY2guaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xv
Y2F0aW9uLnByb3RvdHlwZS5zZXRTZWFyY2hEaWN0ID0gZnVuY3Rpb24oc2VhcmNoRGljdCkgewor
ICAgIHRoaXMuc2V0U2VhcmNoKExvY2F0aW9uX21ha2VVcmxTdHJpbmdGcm9tRGljdChzZWFyY2hE
aWN0KSk7CisgICAgfTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNz
X18uc2V0U2VhcmNoRGljdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19Mb2NhdGlv
bl9Mb2NhdGlvbi5wcm90b3R5cGUuc2V0U2VhcmNoRGljdC5jYWxsLmFwcGx5KF9fTG9jYXRpb25f
TG9jYXRpb24ucHJvdG90eXBlLnNldFNlYXJjaERpY3QsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U2VhcmNoRGljdC51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUu
c2V0U2VhcmNoRGljdC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fTG9jYXRpb25fTG9j
YXRpb24ucHJvdG90eXBlLnNldEhhc2ggPSBmdW5jdGlvbihoYXNoKSB7CisgICAgdGhpcy5sb2Nh
dGlvbi5oYXNoID0gaGFzaDsKKyAgICB9OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRIYXNoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX0xv
Y2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5zZXRIYXNoLmNhbGwuYXBwbHkoX19Mb2NhdGlvbl9M
b2NhdGlvbi5wcm90b3R5cGUuc2V0SGFzaCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fTG9j
YXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIYXNoLnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5zZXRIYXNoLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuc2V0
SGFzaERpY3QgPSBmdW5jdGlvbihoYXNoRGljdCkgeworICAgIHRoaXMuc2V0SGFzaChMb2NhdGlv
bl9tYWtlVXJsU3RyaW5nRnJvbURpY3QoaGFzaERpY3QpKTsKKyAgICB9OworICAgIF9fTG9jYXRp
b25fTG9jYXRpb24ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIYXNoRGljdCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gX19Mb2NhdGlvbl9Mb2NhdGlvbi5wcm90b3R5cGUuc2V0SGFzaERp
Y3QuY2FsbC5hcHBseShfX0xvY2F0aW9uX0xvY2F0aW9uLnByb3RvdHlwZS5zZXRIYXNoRGljdCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fTG9jYXRpb25fTG9jYXRpb24ucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXRIYXNoRGljdC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19Mb2NhdGlv
bl9Mb2NhdGlvbi5wcm90b3R5cGUuc2V0SGFzaERpY3QuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
K30KK19fTG9jYXRpb25fTG9jYXRpb25faW5pdGlhbGl6ZSgpOwordmFyIFdpbmRvd19jbG9zaW5n
TGlzdGVuZXJzID0gbmV3IHB5anNsaWJfTGlzdChbXSk7Cit2YXIgV2luZG93X3Jlc2l6ZUxpc3Rl
bmVycyA9IG5ldyBweWpzbGliX0xpc3QoW10pOworZnVuY3Rpb24gV2luZG93X2FkZFdpbmRvd0Ns
b3NlTGlzdGVuZXIobGlzdGVuZXIpIHsKKyAgICBXaW5kb3dfY2xvc2luZ0xpc3RlbmVycy5hcHBl
bmQobGlzdGVuZXIpOworfQorCisKK2Z1bmN0aW9uIFdpbmRvd19hZGRXaW5kb3dSZXNpemVMaXN0
ZW5lcihsaXN0ZW5lcikgeworICAgIFdpbmRvd19yZXNpemVMaXN0ZW5lcnMuYXBwZW5kKGxpc3Rl
bmVyKTsKK30KKworCitmdW5jdGlvbiBXaW5kb3dfYWxlcnQobXNnKSB7CisKKyAgICAkd25kLmFs
ZXJ0KG1zZyk7CisgICAgCit9CisKKworZnVuY3Rpb24gV2luZG93X2NvbmZpcm0obXNnKSB7CisK
KyAgICByZXR1cm4gJHduZC5jb25maXJtKG1zZyk7CisgICAgCit9CisKKworZnVuY3Rpb24gV2lu
ZG93X2VuYWJsZVNjcm9sbGluZyhlbmFibGUpIHsKKworICAgICRkb2MuYm9keS5zdHlsZS5vdmVy
ZmxvdyA9IGVuYWJsZSA/ICdhdXRvJyA6ICdoaWRkZW4nOworICAgIAorfQorCisKK2Z1bmN0aW9u
IFdpbmRvd19nZXRDbGllbnRIZWlnaHQoKSB7CisKKyAgICBpZiAoJHduZC5pbm5lckhlaWdodCkK
KyAgICAgICAgcmV0dXJuICR3bmQuaW5uZXJIZWlnaHQ7CisgICAgcmV0dXJuICRkb2MuYm9keS5j
bGllbnRIZWlnaHQ7CisgICAgCit9CisKKworZnVuY3Rpb24gV2luZG93X2dldENsaWVudFdpZHRo
KCkgeworCisgICAgaWYgKCR3bmQuaW5uZXJXaWR0aCkKKyAgICAgICAgcmV0dXJuICR3bmQuaW5u
ZXJXaWR0aDsKKyAgICByZXR1cm4gJGRvYy5ib2R5LmNsaWVudFdpZHRoOworICAgIAorfQorCisK
K3ZhciBXaW5kb3dfbG9jYXRpb24gPSBudWxsCitmdW5jdGlvbiBXaW5kb3dfZ2V0TG9jYXRpb24o
KSB7CisKKyAgICBpZighV2luZG93X2xvY2F0aW9uKQorICAgICAgIFdpbmRvd19sb2NhdGlvbiA9
IExvY2F0aW9uX0xvY2F0aW9uKCR3bmQubG9jYXRpb24pOworICAgIHJldHVybiBXaW5kb3dfbG9j
YXRpb247CisgICAgCit9CisKKworZnVuY3Rpb24gV2luZG93X2dldFRpdGxlKCkgeworCisgICAg
cmV0dXJuICRkb2MudGl0bGU7CisgICAgCit9CisKKworZnVuY3Rpb24gV2luZG93X29wZW4odXJs
LCBuYW1lLCBmZWF0dXJlcykgeworCisgICAgJHduZC5vcGVuKHVybCwgbmFtZSwgZmVhdHVyZXMp
OworICAgIAorfQorCisKK2Z1bmN0aW9uIFdpbmRvd19yZW1vdmVXaW5kb3dDbG9zZUxpc3RlbmVy
KGxpc3RlbmVyKSB7CisgICAgV2luZG93X2Nsb3NpbmdMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVy
KTsKK30KKworCitmdW5jdGlvbiBXaW5kb3dfcmVtb3ZlV2luZG93UmVzaXplTGlzdGVuZXIobGlz
dGVuZXIpIHsKKyAgICBXaW5kb3dfcmVzaXplTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Cit9
CisKKworZnVuY3Rpb24gV2luZG93X3NldE1hcmdpbihzaXplKSB7CisKKyAgICAkZG9jLmJvZHku
c3R5bGUubWFyZ2luID0gc2l6ZTsKKyAgICAKK30KKworCitmdW5jdGlvbiBXaW5kb3dfc2V0VGl0
bGUodGl0bGUpIHsKKworICAgICRkb2MudGl0bGUgPSB0aXRsZTsKKyAgICAKK30KKworCitmdW5j
dGlvbiBXaW5kb3dfb25DbG9zZWQoKSB7CisgICAgV2luZG93X2ZpcmVDbG9zZWRJbXBsKCk7Cit9
CisKKworZnVuY3Rpb24gV2luZG93X29uQ2xvc2luZygpIHsKKyAgICBXaW5kb3dfZmlyZUNsb3Np
bmdJbXBsKCk7Cit9CisKKworZnVuY3Rpb24gV2luZG93X29uUmVzaXplKCkgeworICAgIFdpbmRv
d19maXJlUmVzaXplZEltcGwoKTsKK30KKworCitmdW5jdGlvbiBXaW5kb3dfZmlyZUNsb3NlZEFu
ZENhdGNoKGhhbmRsZXIpIHsKK30KKworCitmdW5jdGlvbiBXaW5kb3dfZmlyZUNsb3NlZEltcGwo
KSB7CisKKyAgICAgICAgdmFyIF9fbGlzdGVuZXIgPSBXaW5kb3dfY2xvc2luZ0xpc3RlbmVycy5f
X2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgCisgICAgbGlzdGVuZXIub25XaW5kb3dDbG9zZWQoKTsKKworICAg
ICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBT
dG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKK30KKworCitmdW5jdGlvbiBXaW5kb3dfZmlyZUNsb3NpbmdB
bmRDYXRjaChoYW5kbGVyKSB7Cit9CisKKworZnVuY3Rpb24gV2luZG93X2ZpcmVDbG9zaW5nSW1w
bCgpIHsKKyAgICB2YXIgcmV0ID0gbnVsbDsKKworICAgICAgICB2YXIgX19saXN0ZW5lciA9IFdp
bmRvd19jbG9zaW5nTGlzdGVuZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9fbGlz
dGVuZXIubmV4dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICB2YXIgbXNnID0g
bGlzdGVuZXIub25XaW5kb3dDbG9zaW5nKCk7CisgICAgaWYgKChyZXQgPT0gbnVsbCkpIHsKKyAg
ICB2YXIgcmV0ID0gbXNnOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICBy
ZXR1cm4gcmV0OworfQorCisKK2Z1bmN0aW9uIFdpbmRvd19maXJlUmVzaXplZEFuZENhdGNoKGhh
bmRsZXIpIHsKK30KKworCitmdW5jdGlvbiBXaW5kb3dfZmlyZVJlc2l6ZWRJbXBsKCkgeworCisg
ICAgICAgIHZhciBfX2xpc3RlbmVyID0gV2luZG93X3Jlc2l6ZUxpc3RlbmVycy5fX2l0ZXJfXygp
OworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgCisgICAgbGlzdGVuZXIub25XaW5kb3dSZXNpemVkKFdpbmRvd19nZXRDbGllbnRX
aWR0aCgpLCBXaW5kb3dfZ2V0Q2xpZW50SGVpZ2h0KCkpOworCisgICAgICAgICAgICB9CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorfQorCisKK2Z1bmN0aW9uIFdpbmRvd19pbml0KCkgeworCisgICAgJHduZC5fX3B5Z3d0
X2luaXRIYW5kbGVycygKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBXaW5kb3df
b25SZXNpemUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICByZXR1cm4gV2luZG93X29uQ2xvc2luZygpOworICAgICAgICB9LAorICAgICAgICBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIFdpbmRvd19vbkNsb3NlZCgpOworICAgICAgICAgICAgLyokd25k
Lm9ucmVzaXplID0gbnVsbDsKKyAgICAgICAgICAgICR3bmQub25iZWZvcmVjbG9zZSA9IG51bGw7
CisgICAgICAgICAgICAkd25kLm9uY2xvc2UgPSBudWxsOyovCisgICAgICAgIH0KKyAgICApOwor
ICAgIAorfQorCisKKyAgICBXaW5kb3dfaW5pdCgpOwordmFyIFRpbWVyX3RpbWVycyA9IG5ldyBw
eWpzbGliX0xpc3QoW10pOworZnVuY3Rpb24gX19UaW1lcl9UaW1lcigpIHsKK30KK2Z1bmN0aW9u
IFRpbWVyX1RpbWVyKGRlbGF5LCBvYmplY3QpIHsKKyAgICBpZiAodHlwZW9mIGRlbGF5ID09ICd1
bmRlZmluZWQnKSBkZWxheT0wOworICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICd1bmRlZmluZWQn
KSBvYmplY3Q9bnVsbDsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX19UaW1lcl9UaW1lcigpOwor
ICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5j
ZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworVGltZXJfVGltZXIu
cGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgZGVsYXksIG9iamVjdCApIHsKKyAg
ICBpZiAodHlwZW9mIGRlbGF5ID09ICd1bmRlZmluZWQnKQorICAgICAgICBkZWxheT1fX2t3YXJn
cy5kZWxheTsKKyAgICBpZiAodHlwZW9mIG9iamVjdCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAg
b2JqZWN0PV9fa3dhcmdzLm9iamVjdDsKKyAgICB2YXIgX19yID0gW2RlbGF5LCBvYmplY3RdOwor
ICAgIHJldHVybiBfX3I7Cit9OworZnVuY3Rpb24gX19UaW1lcl9UaW1lcl9pbml0aWFsaXplKCkg
eworICAgIGlmKF9fVGltZXJfVGltZXIuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAg
IF9fVGltZXJfVGltZXIuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgcHlqc19leHRl
bmQoX19UaW1lcl9UaW1lciwgX19weWpzbGliX09iamVjdCk7CisgICAgX19UaW1lcl9UaW1lci5w
cm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSBUaW1lcl9UaW1lcjsKK19fVGltZXJfVGltZXIu
cHJvdG90eXBlLl9fY2xhc3NfXy5NSU5fUEVSSU9EID0gMTsKKyAgICBfX1RpbWVyX1RpbWVyLnBy
b3RvdHlwZS5fX2luaXRfXyA9IGZ1bmN0aW9uKGRlbGF5LCBvYmplY3QpIHsKKyAgICBpZiAodHlw
ZW9mIGRlbGF5ID09ICd1bmRlZmluZWQnKSBkZWxheT0wOworICAgIGlmICh0eXBlb2Ygb2JqZWN0
ID09ICd1bmRlZmluZWQnKSBvYmplY3Q9bnVsbDsKKyAgICB0aGlzLmlzUmVwZWF0aW5nID0gZmFs
c2U7CisgICAgdGhpcy50aW1lcklkID0gMDsKKyAgICB0aGlzLmxpc3RlbmVyID0gb2JqZWN0Owor
ICAgIGlmICgoZGVsYXkgPj0gX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLk1JTl9Q
RVJJT0QpKSB7CisgICAgdGhpcy5zY2hlZHVsZShkZWxheSk7CisgICAgfQorICAgIH07CitfX1Rp
bWVyX1RpbWVyLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9f
a3dhcmdzLCBkZWxheSwgb2JqZWN0ICkgeworICAgIGlmICh0eXBlb2YgZGVsYXkgPT0gJ3VuZGVm
aW5lZCcpCisgICAgICAgIGRlbGF5PV9fa3dhcmdzLmRlbGF5OworICAgIGlmICh0eXBlb2Ygb2Jq
ZWN0ID09ICd1bmRlZmluZWQnKQorICAgICAgICBvYmplY3Q9X19rd2FyZ3Mub2JqZWN0OworICAg
IHZhciBfX3IgPSBbZGVsYXksIG9iamVjdF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX19U
aW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5
KF9fVGltZXJfVGltZXIucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLl9fY2xhc3NfXy5f
X2luaXRfXy5wYXJzZV9rd2FyZ3MgPSBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2luaXRfXy5w
YXJzZV9rd2FyZ3M7CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuY2xlYXJJbnRlcnZhbCA9
IGZ1bmN0aW9uKGlkKSB7CisKKyAgICAgICAgJHduZC5jbGVhckludGVydmFsKGlkKTsKKyAgICAg
ICAgCisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2NsYXNzX18uY2xlYXJJ
bnRlcnZhbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19UaW1lcl9UaW1lci5wcm90
b3R5cGUuY2xlYXJJbnRlcnZhbC5jYWxsLmFwcGx5KF9fVGltZXJfVGltZXIucHJvdG90eXBlLmNs
ZWFySW50ZXJ2YWwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3Rv
dHlwZS5fX2NsYXNzX18uY2xlYXJJbnRlcnZhbC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X19UaW1lcl9UaW1lci5wcm90b3R5cGUuY2xlYXJJbnRlcnZhbC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9u
KGlkKSB7CisKKyAgICAgICAgJHduZC5jbGVhclRpbWVvdXQoaWQpOworICAgICAgICAKKyAgICB9
OworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLl9fY2xhc3NfXy5jbGVhclRpbWVvdXQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fVGltZXJfVGltZXIucHJvdG90eXBlLmNsZWFy
VGltZW91dC5jYWxsLmFwcGx5KF9fVGltZXJfVGltZXIucHJvdG90eXBlLmNsZWFyVGltZW91dCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLl9fY2xhc3Nf
Xy5jbGVhclRpbWVvdXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIu
cHJvdG90eXBlLmNsZWFyVGltZW91dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fVGlt
ZXJfVGltZXIucHJvdG90eXBlLmNyZWF0ZUludGVydmFsID0gZnVuY3Rpb24odGltZXIsIHBlcmlv
ZCkgeworCisgICAgICAgIHJldHVybiAkd25kLnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyB0aW1l
ci5maXJlKCk7IH0sIHBlcmlvZCk7CisgICAgICAgIAorICAgIH07CisgICAgX19UaW1lcl9UaW1l
ci5wcm90b3R5cGUuX19jbGFzc19fLmNyZWF0ZUludGVydmFsID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5jcmVhdGVJbnRlcnZhbC5jYWxsLmFw
cGx5KF9fVGltZXJfVGltZXIucHJvdG90eXBlLmNyZWF0ZUludGVydmFsLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLmNyZWF0ZUludGVy
dmFsLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5j
cmVhdGVJbnRlcnZhbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIu
cHJvdG90eXBlLmNyZWF0ZVRpbWVvdXQgPSBmdW5jdGlvbih0aW1lciwgZGVsYXkpIHsKKworICAg
ICAgICByZXR1cm4gJHduZC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aW1lci5maXJlKCk7IH0s
IGRlbGF5KTsKKyAgICAgICAgCisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5f
X2NsYXNzX18uY3JlYXRlVGltZW91dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19U
aW1lcl9UaW1lci5wcm90b3R5cGUuY3JlYXRlVGltZW91dC5jYWxsLmFwcGx5KF9fVGltZXJfVGlt
ZXIucHJvdG90eXBlLmNyZWF0ZVRpbWVvdXQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX1Rp
bWVyX1RpbWVyLnByb3RvdHlwZS5fX2NsYXNzX18uY3JlYXRlVGltZW91dC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuY3JlYXRlVGltZW91dC5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLmhvb2tXaW5k
b3dDbG9zaW5nID0gZnVuY3Rpb24oKSB7CisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3Rv
dHlwZS5fX2NsYXNzX18uaG9va1dpbmRvd0Nsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fVGltZXJfVGltZXIucHJvdG90eXBlLmhvb2tXaW5kb3dDbG9zaW5nLmNhbGwuYXBw
bHkoX19UaW1lcl9UaW1lci5wcm90b3R5cGUuaG9va1dpbmRvd0Nsb3NpbmcsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2NsYXNzX18uaG9va1dpbmRv
d0Nsb3NpbmcudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIucHJvdG90
eXBlLmhvb2tXaW5kb3dDbG9zaW5nLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19UaW1l
cl9UaW1lci5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMuaXNS
ZXBlYXRpbmcpIHsKKyAgICB0aGlzLmNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkKTsKKyAgICB9
CisgICAgZWxzZSB7CisgICAgdGhpcy5jbGVhclRpbWVvdXQodGhpcy50aW1lcklkKTsKKyAgICB9
CisgICAgVGltZXJfdGltZXJzLnJlbW92ZSh0aGlzKTsKKyAgICB9OworICAgIF9fVGltZXJfVGlt
ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fVGltZXJfVGltZXIucHJvdG90eXBlLmNhbmNlbC5jYWxsLmFwcGx5KF9fVGltZXJfVGlt
ZXIucHJvdG90eXBlLmNhbmNlbCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fVGltZXJfVGlt
ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5jYW5jZWwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fVGltZXJfVGltZXIucHJvdG90eXBlLmNhbmNlbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0
aGlzLmxpc3RlbmVyKSB7CisgICAgdGhpcy5saXN0ZW5lci5vblRpbWVyKHRoaXMudGltZXJJZCk7
CisgICAgfQorICAgIH07CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLnJ1
biA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19UaW1lcl9UaW1lci5wcm90b3R5cGUu
cnVuLmNhbGwuYXBwbHkoX19UaW1lcl9UaW1lci5wcm90b3R5cGUucnVuLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLnJ1bi51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUucnVuLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuc2NoZWR1bGUgPSBm
dW5jdGlvbihkZWxheU1pbGxpcykgeworICAgIGlmICgoZGVsYXlNaWxsaXMgPCBfX1RpbWVyX1Rp
bWVyLnByb3RvdHlwZS5fX2NsYXNzX18uTUlOX1BFUklPRCkpIHsKKyAgICBhbGVydCgnVGltZXIg
ZGVsYXkgbXVzdCBiZSBwb3NpdGl2ZScpOworICAgIH0KKyAgICB0aGlzLmNhbmNlbCgpOworICAg
IHRoaXMuaXNSZXBlYXRpbmcgPSBmYWxzZTsKKyAgICB0aGlzLnRpbWVySWQgPSB0aGlzLmNyZWF0
ZVRpbWVvdXQodGhpcywgZGVsYXlNaWxsaXMpOworICAgIFRpbWVyX3RpbWVycy5hcHBlbmQodGhp
cyk7CisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2NsYXNzX18uc2NoZWR1
bGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fVGltZXJfVGltZXIucHJvdG90eXBl
LnNjaGVkdWxlLmNhbGwuYXBwbHkoX19UaW1lcl9UaW1lci5wcm90b3R5cGUuc2NoZWR1bGUsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2NsYXNzX18u
c2NoZWR1bGUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIucHJvdG90
eXBlLnNjaGVkdWxlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19UaW1lcl9UaW1lci5w
cm90b3R5cGUuc2NoZWR1bGVSZXBlYXRpbmcgPSBmdW5jdGlvbihwZXJpb2RNaWxsaXMpIHsKKyAg
ICBpZiAoKHBlcmlvZE1pbGxpcyA8IF9fVGltZXJfVGltZXIucHJvdG90eXBlLl9fY2xhc3NfXy5N
SU5fUEVSSU9EKSkgeworICAgIGFsZXJ0KCdUaW1lciBwZXJpb2QgbXVzdCBiZSBwb3NpdGl2ZScp
OworICAgIH0KKyAgICB0aGlzLmNhbmNlbCgpOworICAgIHRoaXMuaXNSZXBlYXRpbmcgPSB0cnVl
OworICAgIHRoaXMudGltZXJJZCA9IHRoaXMuY3JlYXRlSW50ZXJ2YWwodGhpcywgcGVyaW9kTWls
bGlzKTsKKyAgICBUaW1lcl90aW1lcnMuYXBwZW5kKHRoaXMpOworICAgIH07CisgICAgX19UaW1l
cl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLnNjaGVkdWxlUmVwZWF0aW5nID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5zY2hlZHVsZVJlcGVh
dGluZy5jYWxsLmFwcGx5KF9fVGltZXJfVGltZXIucHJvdG90eXBlLnNjaGVkdWxlUmVwZWF0aW5n
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFz
c19fLnNjaGVkdWxlUmVwZWF0aW5nLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX1RpbWVy
X1RpbWVyLnByb3RvdHlwZS5zY2hlZHVsZVJlcGVhdGluZy5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLmZpcmUgPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLmZpcmVJbXBsKCk7CisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2Ns
YXNzX18uZmlyZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19UaW1lcl9UaW1lci5w
cm90b3R5cGUuZmlyZS5jYWxsLmFwcGx5KF9fVGltZXJfVGltZXIucHJvdG90eXBlLmZpcmUsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5fX2NsYXNzX18u
ZmlyZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUu
ZmlyZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBl
LmZpcmVJbXBsID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCEodGhpcy5pc1JlcGVhdGluZykpIHsK
KyAgICBUaW1lcl90aW1lcnMucmVtb3ZlKHRoaXMpOworICAgIH0KKyAgICB0aGlzLnJ1bigpOwor
ICAgIH07CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLmZpcmVJbXBsID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5maXJl
SW1wbC5jYWxsLmFwcGx5KF9fVGltZXJfVGltZXIucHJvdG90eXBlLmZpcmVJbXBsLCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuX19jbGFzc19fLmZpcmVJ
bXBsLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5m
aXJlSW1wbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fVGltZXJfVGltZXIucHJvdG90
eXBlLmdldElEID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMudGltZXJJZDsKKyAgICB9
OworICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRJRCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX19UaW1lcl9UaW1lci5wcm90b3R5cGUuZ2V0SUQuY2FsbC5h
cHBseShfX1RpbWVyX1RpbWVyLnByb3RvdHlwZS5nZXRJRCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fVGltZXJfVGltZXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRJRC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX19UaW1lcl9UaW1lci5wcm90b3R5cGUuZ2V0SUQuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKK30KK19fVGltZXJfVGltZXJfaW5pdGlhbGl6ZSgpOwordmFyIERlZmVycmVk
Q29tbWFuZF9kZWZlcnJlZENvbW1hbmRzID0gbmV3IHB5anNsaWJfTGlzdChbXSk7Cit2YXIgRGVm
ZXJyZWRDb21tYW5kX3RpbWVySXNBY3RpdmUgPSBmYWxzZTsKK2Z1bmN0aW9uIF9fRGVmZXJyZWRD
b21tYW5kX0RlZmVycmVkQ29tbWFuZCgpIHsKK30KK2Z1bmN0aW9uIERlZmVycmVkQ29tbWFuZF9E
ZWZlcnJlZENvbW1hbmQoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fRGVmZXJyZWRDb21t
YW5kX0RlZmVycmVkQ29tbWFuZCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5j
ZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFu
Y2U7Cit9CisKKworZnVuY3Rpb24gX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kX2lu
aXRpYWxpemUoKSB7CisgICAgaWYoX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLl9f
d2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX0RlZmVycmVkQ29tbWFuZF9EZWZlcnJl
ZENvbW1hbmQuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgcHlqc19leHRlbmQoX19E
ZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBf
X0RlZmVycmVkQ29tbWFuZF9EZWZlcnJlZENvbW1hbmQucHJvdG90eXBlLl9fY2xhc3NfXy5fX25l
d19fID0gRGVmZXJyZWRDb21tYW5kX0RlZmVycmVkQ29tbWFuZDsKKyAgICBfX0RlZmVycmVkQ29t
bWFuZF9EZWZlcnJlZENvbW1hbmQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGNtZCkgeworICAg
IERlZmVycmVkQ29tbWFuZF9kZWZlcnJlZENvbW1hbmRzLmFwcGVuZChjbWQpOworICAgIHRoaXMu
bWF5YmVTZXREZWZlcnJlZENvbW1hbmRUaW1lcigpOworICAgIH07CisgICAgX19EZWZlcnJlZENv
bW1hbmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX0RlZmVycmVkQ29tbWFuZF9EZWZlcnJlZENvbW1hbmQucHJv
dG90eXBlLmFkZC5jYWxsLmFwcGx5KF9fRGVmZXJyZWRDb21tYW5kX0RlZmVycmVkQ29tbWFuZC5w
cm90b3R5cGUuYWRkLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19EZWZlcnJlZENvbW1hbmRf
RGVmZXJyZWRDb21tYW5kLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX0RlZmVycmVkQ29tbWFuZF9EZWZlcnJlZENvbW1hbmQucHJvdG90eXBlLmFk
ZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fRGVmZXJyZWRDb21tYW5kX0RlZmVycmVk
Q29tbWFuZC5wcm90b3R5cGUuZmx1c2hEZWZlcnJlZENvbW1hbmRzID0gZnVuY3Rpb24oKSB7CisK
KyAgICAgICAgdmFyIF9faSA9IHB5anNsaWJfcmFuZ2UocHlqc2xpYl9sZW4oRGVmZXJyZWRDb21t
YW5kX2RlZmVycmVkQ29tbWFuZHMpKS5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgaSA9IF9faS5uZXh0KCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIHZhciBjdXJyZW50ID0gRGVmZXJyZWRD
b21tYW5kX2RlZmVycmVkQ29tbWFuZHMuX19nZXRpdGVtX18oMCk7CisgICAgRGVmZXJyZWRDb21t
YW5kX2RlZmVycmVkQ29tbWFuZHMuX19kZWxpdGVtX18oMCk7CisgICAgaWYgKChjdXJyZW50ID09
IG51bGwpKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICBjdXJyZW50LmV4
ZWN1dGUoKTsKKyAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRo
cm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfTsKKyAgICBf
X0RlZmVycmVkQ29tbWFuZF9EZWZlcnJlZENvbW1hbmQucHJvdG90eXBlLl9fY2xhc3NfXy5mbHVz
aERlZmVycmVkQ29tbWFuZHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fRGVmZXJy
ZWRDb21tYW5kX0RlZmVycmVkQ29tbWFuZC5wcm90b3R5cGUuZmx1c2hEZWZlcnJlZENvbW1hbmRz
LmNhbGwuYXBwbHkoX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlwZS5m
bHVzaERlZmVycmVkQ29tbWFuZHMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX0RlZmVycmVk
Q29tbWFuZF9EZWZlcnJlZENvbW1hbmQucHJvdG90eXBlLl9fY2xhc3NfXy5mbHVzaERlZmVycmVk
Q29tbWFuZHMudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fRGVmZXJyZWRDb21tYW5kX0Rl
ZmVycmVkQ29tbWFuZC5wcm90b3R5cGUuZmx1c2hEZWZlcnJlZENvbW1hbmRzLmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLnByb3Rv
dHlwZS5tYXliZVNldERlZmVycmVkQ29tbWFuZFRpbWVyID0gZnVuY3Rpb24oKSB7CisgICAgaWYg
KCEoRGVmZXJyZWRDb21tYW5kX3RpbWVySXNBY3RpdmUpICYmICEoKHB5anNsaWJfbGVuKERlZmVy
cmVkQ29tbWFuZF9kZWZlcnJlZENvbW1hbmRzKSA9PSAwKSkpIHsKKyAgICBUaW1lcl9UaW1lcigx
LCB0aGlzKTsKKyAgICBEZWZlcnJlZENvbW1hbmRfdGltZXJJc0FjdGl2ZSA9IHRydWU7CisgICAg
fQorICAgIH07CisgICAgX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlw
ZS5fX2NsYXNzX18ubWF5YmVTZXREZWZlcnJlZENvbW1hbmRUaW1lciA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlw
ZS5tYXliZVNldERlZmVycmVkQ29tbWFuZFRpbWVyLmNhbGwuYXBwbHkoX19EZWZlcnJlZENvbW1h
bmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlwZS5tYXliZVNldERlZmVycmVkQ29tbWFuZFRpbWVy
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21t
YW5kLnByb3RvdHlwZS5fX2NsYXNzX18ubWF5YmVTZXREZWZlcnJlZENvbW1hbmRUaW1lci51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5k
LnByb3RvdHlwZS5tYXliZVNldERlZmVycmVkQ29tbWFuZFRpbWVyLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlwZS5v
blRpbWVyID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5mbHVzaERlZmVycmVkQ29tbWFuZHMoKTsK
KyAgICBEZWZlcnJlZENvbW1hbmRfdGltZXJJc0FjdGl2ZSA9IGZhbHNlOworICAgIHRoaXMubWF5
YmVTZXREZWZlcnJlZENvbW1hbmRUaW1lcigpOworICAgIH07CisgICAgX19EZWZlcnJlZENvbW1h
bmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlwZS5fX2NsYXNzX18ub25UaW1lciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLnBy
b3RvdHlwZS5vblRpbWVyLmNhbGwuYXBwbHkoX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21t
YW5kLnByb3RvdHlwZS5vblRpbWVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19EZWZlcnJl
ZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kLnByb3RvdHlwZS5fX2NsYXNzX18ub25UaW1lci51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX19EZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5k
LnByb3RvdHlwZS5vblRpbWVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitfX0RlZmVycmVk
Q29tbWFuZF9EZWZlcnJlZENvbW1hbmRfaW5pdGlhbGl6ZSgpOwordmFyIHB5Z3d0X3NOZXh0SGFz
aElkID0gMDsKK2Z1bmN0aW9uIHB5Z3d0X2dldE5leHRIYXNoSWQoKSB7CisgICAgcHlnd3Rfc05l
eHRIYXNoSWQgKz0gMTsKKyAgICByZXR1cm4gcHlnd3Rfc05leHRIYXNoSWQ7Cit9CisKKworZnVu
Y3Rpb24gcHlnd3RfZ2V0SGFzaENvZGUobykgeworCisgICAgcmV0dXJuIChvID09IG51bGwpID8g
MCA6CisgICAgICAgIChvLiRIID8gby4kSCA6IChvLiRIID0gcHlnd3RfZ2V0TmV4dEhhc2hJZCgp
KSk7CisgICAgCit9CisKKworZnVuY3Rpb24gcHlnd3RfZ2V0TW9kdWxlTmFtZSgpIHsKKworICAg
IHJldHVybiAkbW9kdWxlTmFtZTsKKyAgICAKK30KKworCitmdW5jdGlvbiBweWd3dF9nZXRNb2R1
bGVCYXNlVVJMKCkgeworCisgICAgLy8gdGhpcyBpcyBpbnRlbnRpb25hbGx5IG5vdCB1c2luZyAk
ZG9jLCBiZWNhdXNlIHdlIHdhbnQgdGhlIG1vZHVsZSdzIG93biB1cmwKKyAgICB2YXIgcyA9IGRv
Y3VtZW50LmxvY2F0aW9uLmhyZWY7CisgICAgCisgICAgLy8gUHVsbCBvZmYgYW55IGhhc2guCisg
ICAgdmFyIGkgPSBzLmluZGV4T2YoJyMnKTsKKyAgICBpZiAoaSAhPSAtMSkKKyAgICAgICAgcyA9
IHMuc3Vic3RyaW5nKDAsIGkpOworICAgIAorICAgIC8vIFB1bGwgb2ZmIGFueSBxdWVyeSBzdHJp
bmcuCisgICAgaSA9IHMuaW5kZXhPZignPycpOworICAgIGlmIChpICE9IC0xKQorICAgICAgICBz
ID0gcy5zdWJzdHJpbmcoMCwgaSk7CisgICAgCisgICAgLy8gUmlwIG9mZiBldmVyeXRoaW5nIGFm
dGVyIHRoZSBsYXN0IHNsYXNoLgorICAgIGkgPSBzLmxhc3RJbmRleE9mKCcvJyk7CisgICAgaWYg
KGkgIT0gLTEpCisgICAgICAgIHMgPSBzLnN1YnN0cmluZygwLCBpKTsKKworICAgIHJldHVybiAo
cy5sZW5ndGggPiAwKSA/IHMgKyAiLyIgOiAiIjsKKyAgICAKK30KKworCitmdW5jdGlvbiBIaXN0
b3J5X2luaXQoKSB7CisKKyAgICAvLyBDaGVjayBmb3IgZXhpc3RlbmNlIG9mIHRoZSBoaXN0b3J5
IGZyYW1lLgorICAgIHZhciBoaXN0b3J5RnJhbWUgPSAkZG9jLmdldEVsZW1lbnRCeUlkKCdfX3B5
Z3d0X2hpc3RvcnlGcmFtZScpOworICAgIGlmICghaGlzdG9yeUZyYW1lKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBHZXQgdGhlIGluaXRpYWwgdG9rZW4gZnJvbSB0aGUgdXJsJ3Mg
aGFzaCBjb21wb25lbnQuCisgICAgdmFyIGhhc2ggPSAkd25kLmxvY2F0aW9uLmhhc2g7CisgICAg
aWYgKGhhc2gubGVuZ3RoID4gMCkKKyAgICAgICAgJHduZC5fX2hpc3RvcnlUb2tlbiA9IGRlY29k
ZVVSSUNvbXBvbmVudChoYXNoLnN1YnN0cmluZygxKSk7CisgICAgZWxzZQorICAgICAgICAkd25k
Ll9faGlzdG9yeVRva2VuID0gJyc7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBoaXN0b3J5IGlm
cmFtZS4gIElmICdfX2hpc3RvcnlUb2tlbicgYWxyZWFkeSBleGlzdHMsIHRoZW4KKyAgICAvLyB3
ZSdyZSBwcm9iYWJseSBiYWNraW5nIGludG8gdGhlIGFwcCwgc28gX2Rvbid0XyBzZXQgdGhlIGlm
cmFtZSdzIGxvY2F0aW9uLgorICAgIHZhciB0b2tlbkVsZW1lbnQgPSBudWxsOworICAgIGlmICho
aXN0b3J5RnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICB2YXIgZG9jID0gaGlzdG9yeUZy
YW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7CisgICAgICAgIHRva2VuRWxlbWVudCA9IGRvYyA/
IGRvYy5nZXRFbGVtZW50QnlJZCgnX19oaXN0b3J5VG9rZW4nKSA6IG51bGw7CisgICAgfQorCisg
ICAgaWYgKHRva2VuRWxlbWVudCkKKyAgICAgICAgJHduZC5fX2hpc3RvcnlUb2tlbiA9IHRva2Vu
RWxlbWVudC52YWx1ZTsKKyAgICBlbHNlCisgICAgICAgIGhpc3RvcnlGcmFtZS5zcmMgPSAnaGlz
dG9yeS5odG1sPycgKyBlbmNvZGVVUklDb21wb25lbnQoJHduZC5fX2hpc3RvcnlUb2tlbik7CisK
KyAgICAvLyBFeHBvc2UgdGhlICdfX29uSGlzdG9yeUNoYW5nZWQnIGZ1bmN0aW9uLCB3aGljaCB3
aWxsIGJlIGNhbGxlZCBieQorICAgIC8vIHRoZSBoaXN0b3J5IGZyYW1lIHdoZW4gaXQgbG9hZHMu
CisgICAgJHduZC5fX29uSGlzdG9yeUNoYW5nZWQgPSBmdW5jdGlvbih0b2tlbikgeworICAgICAg
ICAvLyBDaGFuZ2UgdGhlIFVSTCBhbmQgbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiB0aGF0IGl0cyBo
aXN0b3J5IGZyYW1lCisgICAgICAgIC8vIGlzIGNoYW5naW5nLgorICAgICAgICBpZiAodG9rZW4g
IT0gJHduZC5fX2hpc3RvcnlUb2tlbikgeworICAgICAgICAgICAgJHduZC5fX2hpc3RvcnlUb2tl
biA9IHRva2VuOworCisgICAgICAgICAgICAvLyBUT0RPKGpndyk6IGZpeCB0aGUgYm9va21hcmsg
dXBkYXRlLCBpZiBwb3NzaWJsZS4gIFRoZSBmb2xsb3dpbmcgY29kZQorICAgICAgICAgICAgLy8g
c2NyZXdzIHVwIHRoZSBicm93c2VyIGJ5IChhKSBtYWtpbmcgaXQgcHJldGVuZCB0aGF0IGl0J3Mg
bG9hZGluZyB0aGUKKyAgICAgICAgICAgIC8vIHBhZ2UgaW5kZWZpbml0ZWx5LCBhbmQgKGIpIGNh
dXNpbmcgYWxsIHRleHQgdG8gZGlzYXBwZWFyICghKQorICAgICAgICAgICAgLy8gICAgICAgIHZh
ciBiYXNlID0gJHduZC5sb2NhdGlvbi5ocmVmOworICAgICAgICAgICAgLy8gICAgICAgIHZhciBo
YXNoSWR4ID0gYmFzZS5pbmRleE9mKCcjJyk7CisgICAgICAgICAgICAvLyAgICAgICAgaWYgKGhh
c2hJZHggIT0gLTEpCisgICAgICAgICAgICAvLyAgICAgICAgICBiYXNlID0gYmFzZS5zdWJzdHJp
bmcoMCwgaGFzaElkeCk7CisgICAgICAgICAgICAvLyAgICAgICAgJHduZC5sb2NhdGlvbi5yZXBs
YWNlKGJhc2UgKyAnIycgKyB0b2tlbik7CisKKyAgICAgICAgICAgIC8vIFRPRE8gLSBtb3ZlIGlu
aXQgYmFjayBpbnRvIEhpc3RvcnkKKyAgICAgICAgICAgIC8vIHRoaXMub25IaXN0b3J5Q2hhbmdl
ZCh0b2tlbik7CisgICAgICAgICAgICB2YXIgaCA9IG5ldyBfX0hpc3RvcnlfSGlzdG9yeSgpOwor
ICAgICAgICAgICAgaC5vbkhpc3RvcnlDaGFuZ2VkKHRva2VuKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICAKK30KKworCit2YXIgSGlzdG9yeV9oaXN0b3J5TGlz
dGVuZXJzID0gbmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAgSGlzdG9yeV9pbml0KCk7CitmdW5j
dGlvbiBfX0hpc3RvcnlfSGlzdG9yeSgpIHsKK30KK2Z1bmN0aW9uIEhpc3RvcnlfSGlzdG9yeSgp
IHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX19IaXN0b3J5X0hpc3RvcnkoKTsKKyAgICBpZihp
bnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3Vt
ZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fSGlzdG9yeV9I
aXN0b3J5X2luaXRpYWxpemUoKSB7CisgICAgaWYoX19IaXN0b3J5X0hpc3RvcnkuX193YXNfaW5p
dGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fSGlzdG9yeV9IaXN0b3J5Ll9fd2FzX2luaXRpYWxp
emVkX18gPSB0cnVlOworICAgIHB5anNfZXh0ZW5kKF9fSGlzdG9yeV9IaXN0b3J5LCBfX3B5anNs
aWJfT2JqZWN0KTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuX19jbGFzc19fLl9f
bmV3X18gPSBIaXN0b3J5X0hpc3Rvcnk7CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBl
LmFkZEhpc3RvcnlMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAgSGlzdG9yeV9o
aXN0b3J5TGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX0hpc3Rvcnlf
SGlzdG9yeS5wcm90b3R5cGUuX19jbGFzc19fLmFkZEhpc3RvcnlMaXN0ZW5lciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLmFkZEhpc3Rv
cnlMaXN0ZW5lci5jYWxsLmFwcGx5KF9fSGlzdG9yeV9IaXN0b3J5LnByb3RvdHlwZS5hZGRIaXN0
b3J5TGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5w
cm90b3R5cGUuX19jbGFzc19fLmFkZEhpc3RvcnlMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLmFkZEhpc3RvcnlMaXN0ZW5lci5p
bnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fSGlzdG9yeV9IaXN0b3J5LnByb3RvdHlwZS5i
YWNrID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgJHduZC5oaXN0b3J5LmJhY2soKTsKKyAgICAg
ICAgCisgICAgfTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuX19jbGFzc19fLmJh
Y2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fSGlzdG9yeV9IaXN0b3J5LnByb3Rv
dHlwZS5iYWNrLmNhbGwuYXBwbHkoX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLmJhY2ssIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuX19jbGFz
c19fLmJhY2sudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fSGlzdG9yeV9IaXN0b3J5LnBy
b3RvdHlwZS5iYWNrLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19IaXN0b3J5X0hpc3Rv
cnkucHJvdG90eXBlLmZvcndhcmQgPSBmdW5jdGlvbigpIHsKKworICAgICAgICAkd25kLmhpc3Rv
cnkuZm9yd2FyZCgpOworICAgICAgICAKKyAgICB9OworICAgIF9fSGlzdG9yeV9IaXN0b3J5LnBy
b3RvdHlwZS5fX2NsYXNzX18uZm9yd2FyZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLmZvcndhcmQuY2FsbC5hcHBseShfX0hpc3Rvcnlf
SGlzdG9yeS5wcm90b3R5cGUuZm9yd2FyZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fSGlz
dG9yeV9IaXN0b3J5LnByb3RvdHlwZS5fX2NsYXNzX18uZm9yd2FyZC51bmJvdW5kX21ldGhvZCA9
IHRydWU7CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLmZvcndhcmQuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuZ2V0VG9rZW4g
PSBmdW5jdGlvbigpIHsKKworICAgICAgICByZXR1cm4gJHduZC5fX2hpc3RvcnlUb2tlbjsKKyAg
ICAgICAgCisgICAgfTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuX19jbGFzc19f
LmdldFRva2VuID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX0hpc3RvcnlfSGlzdG9y
eS5wcm90b3R5cGUuZ2V0VG9rZW4uY2FsbC5hcHBseShfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5
cGUuZ2V0VG9rZW4sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5w
cm90b3R5cGUuX19jbGFzc19fLmdldFRva2VuLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuZ2V0VG9rZW4uaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUubmV3SXRlbSA9IGZ1bmN0aW9uKGhp
c3RvcnlUb2tlbikgeworCisgICAgICAgIHZhciBpZnJhbWUgPSAkZG9jLmdldEVsZW1lbnRCeUlk
KCdfX3B5Z3d0X2hpc3RvcnlGcmFtZScpOworICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5s
b2NhdGlvbi5ocmVmID0gJ2hpc3RvcnkuaHRtbD8nICsgaGlzdG9yeVRva2VuOworICAgICAgICAK
KyAgICB9OworICAgIF9fSGlzdG9yeV9IaXN0b3J5LnByb3RvdHlwZS5fX2NsYXNzX18ubmV3SXRl
bSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19IaXN0b3J5X0hpc3RvcnkucHJvdG90
eXBlLm5ld0l0ZW0uY2FsbC5hcHBseShfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUubmV3SXRl
bSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fSGlzdG9yeV9IaXN0b3J5LnByb3RvdHlwZS5f
X2NsYXNzX18ubmV3SXRlbS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX19IaXN0b3J5X0hp
c3RvcnkucHJvdG90eXBlLm5ld0l0ZW0uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX0hp
c3RvcnlfSGlzdG9yeS5wcm90b3R5cGUub25IaXN0b3J5Q2hhbmdlZCA9IGZ1bmN0aW9uKGhpc3Rv
cnlUb2tlbikgeworICAgIHRoaXMuZmlyZUhpc3RvcnlDaGFuZ2VkSW1wbChoaXN0b3J5VG9rZW4p
OworICAgIH07CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLl9fY2xhc3NfXy5vbkhp
c3RvcnlDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX0hpc3RvcnlfSGlz
dG9yeS5wcm90b3R5cGUub25IaXN0b3J5Q2hhbmdlZC5jYWxsLmFwcGx5KF9fSGlzdG9yeV9IaXN0
b3J5LnByb3RvdHlwZS5vbkhpc3RvcnlDaGFuZ2VkLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLl9fY2xhc3NfXy5vbkhpc3RvcnlDaGFuZ2VkLnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUub25I
aXN0b3J5Q2hhbmdlZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fSGlzdG9yeV9IaXN0
b3J5LnByb3RvdHlwZS5maXJlSGlzdG9yeUNoYW5nZWRBbmRDYXRjaCA9IGZ1bmN0aW9uKCkgewor
ICAgIH07CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlSGlz
dG9yeUNoYW5nZWRBbmRDYXRjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX19IaXN0
b3J5X0hpc3RvcnkucHJvdG90eXBlLmZpcmVIaXN0b3J5Q2hhbmdlZEFuZENhdGNoLmNhbGwuYXBw
bHkoX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLmZpcmVIaXN0b3J5Q2hhbmdlZEFuZENhdGNo
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLl9f
Y2xhc3NfXy5maXJlSGlzdG9yeUNoYW5nZWRBbmRDYXRjaC51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLmZpcmVIaXN0b3J5Q2hhbmdlZEFuZENh
dGNoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90
eXBlLmZpcmVIaXN0b3J5Q2hhbmdlZEltcGwgPSBmdW5jdGlvbihoaXN0b3J5VG9rZW4pIHsKKwor
ICAgICAgICB2YXIgX19saXN0ZW5lciA9IEhpc3RvcnlfaGlzdG9yeUxpc3RlbmVycy5fX2l0ZXJf
XygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgCisgICAgbGlzdGVuZXIub25IaXN0b3J5Q2hhbmdlZChoaXN0b3J5VG9rZW4p
OworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlm
IChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH07CisgICAgX19IaXN0b3J5X0hpc3Rv
cnkucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlSGlzdG9yeUNoYW5nZWRJbXBsID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuZmlyZUhpc3Rv
cnlDaGFuZ2VkSW1wbC5jYWxsLmFwcGx5KF9fSGlzdG9yeV9IaXN0b3J5LnByb3RvdHlwZS5maXJl
SGlzdG9yeUNoYW5nZWRJbXBsLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19IaXN0b3J5X0hp
c3RvcnkucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlSGlzdG9yeUNoYW5nZWRJbXBsLnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX0hpc3RvcnlfSGlzdG9yeS5wcm90b3R5cGUuZmlyZUhpc3Rv
cnlDaGFuZ2VkSW1wbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fSGlzdG9yeV9IaXN0
b3J5LnByb3RvdHlwZS5yZW1vdmVIaXN0b3J5TGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikg
eworICAgIEhpc3RvcnlfaGlzdG9yeUxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgIH07
CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVIaXN0b3J5
TGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fSGlzdG9yeV9IaXN0b3J5
LnByb3RvdHlwZS5yZW1vdmVIaXN0b3J5TGlzdGVuZXIuY2FsbC5hcHBseShfX0hpc3RvcnlfSGlz
dG9yeS5wcm90b3R5cGUucmVtb3ZlSGlzdG9yeUxpc3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX19IaXN0b3J5X0hpc3RvcnkucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVIaXN0b3J5
TGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fSGlzdG9yeV9IaXN0b3J5LnBy
b3RvdHlwZS5yZW1vdmVIaXN0b3J5TGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30K
K19fSGlzdG9yeV9IaXN0b3J5X2luaXRpYWxpemUoKTsKK2Z1bmN0aW9uIF9fdWlfRXZlbnQoKSB7
Cit9CitmdW5jdGlvbiB1aV9FdmVudCgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9F
dmVudCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBs
eShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVu
Y3Rpb24gX191aV9FdmVudF9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfRXZlbnQuX193YXNf
aW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfRXZlbnQuX193YXNfaW5pdGlhbGl6ZWRf
XyA9IHRydWU7CisgICAgcHlqc19leHRlbmQoX191aV9FdmVudCwgX19weWpzbGliX09iamVjdCk7
CisgICAgX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9FdmVudDsK
K19fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5CVVRUT05fTEVGVCA9IDE7CitfX3VpX0V2
ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uQlVUVE9OX01JRERMRSA9IDQ7CitfX3VpX0V2ZW50LnBy
b3RvdHlwZS5fX2NsYXNzX18uQlVUVE9OX1JJR0hUID0gMjsKK19fdWlfRXZlbnQucHJvdG90eXBl
Ll9fY2xhc3NfXy5PTkJMVVIgPSA0MDk2OworX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19f
Lk9OQ0hBTkdFID0gMTAyNDsKK19fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTkNMSUNL
ID0gMTsKK19fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTkRCTENMSUNLID0gMjsKK19f
dWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTkVSUk9SID0gNjU1MzY7CitfX3VpX0V2ZW50
LnByb3RvdHlwZS5fX2NsYXNzX18uT05GT0NVUyA9IDIwNDg7CitfX3VpX0V2ZW50LnByb3RvdHlw
ZS5fX2NsYXNzX18uT05LRVlET1dOID0gMTI4OworX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFz
c19fLk9OS0VZUFJFU1MgPSAyNTY7CitfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05L
RVlVUCA9IDUxMjsKK19fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTkxPQUQgPSAzMjc2
ODsKK19fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTkxPU0VDQVBUVVJFID0gODE5MjsK
K19fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTk1PVVNFRE9XTiA9IDQ7CitfX3VpX0V2
ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05NT1VTRU1PVkUgPSA2NDsKK19fdWlfRXZlbnQucHJv
dG90eXBlLl9fY2xhc3NfXy5PTk1PVVNFT1VUID0gMzI7CitfX3VpX0V2ZW50LnByb3RvdHlwZS5f
X2NsYXNzX18uT05NT1VTRU9WRVIgPSAxNjsKK19fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3Nf
Xy5PTk1PVVNFVVAgPSA4OworX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLk9OU0NST0xM
ID0gMTYzODQ7CitfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uRk9DVVNFVkVOVFMgPSA2
MTQ0OworX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLktFWUVWRU5UUyA9IDg5NjsKK19f
dWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5NT1VTRUVWRU5UUyA9IDEyNDsKK30KK2Z1bmN0
aW9uIF9fdWlfRm9jdXNMaXN0ZW5lcigpIHsKK30KK2Z1bmN0aW9uIHVpX0ZvY3VzTGlzdGVuZXIo
KSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfRm9jdXNMaXN0ZW5lcigpOworICAgIGlm
KGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJn
dW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191aV9Gb2N1
c0xpc3RlbmVyX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9Gb2N1c0xpc3RlbmVyLl9fd2Fz
X2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX0ZvY3VzTGlzdGVuZXIuX193YXNfaW5p
dGlhbGl6ZWRfXyA9IHRydWU7CisgICAgcHlqc19leHRlbmQoX191aV9Gb2N1c0xpc3RlbmVyLCBf
X3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3VpX0ZvY3VzTGlzdGVuZXIucHJvdG90eXBlLl9fY2xh
c3NfXy5fX25ld19fID0gdWlfRm9jdXNMaXN0ZW5lcjsKKyAgICBfX3VpX0ZvY3VzTGlzdGVuZXIu
cHJvdG90eXBlLmZpcmVGb2N1c0V2ZW50ID0gZnVuY3Rpb24obGlzdGVuZXJzLCBzZW5kZXIsIGV2
ZW50KSB7CisgICAgdmFyIHR5cGUgPSBET01fZXZlbnRHZXRUeXBlKGV2ZW50KTsKKyAgICBpZiAo
KHR5cGUgPT0gJ2ZvY3VzJykpIHsKKworICAgICAgICB2YXIgX19saXN0ZW5lciA9IGxpc3RlbmVy
cy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgCisgICAgbGlzdGVuZXIub25Gb2N1cyhzZW5kZXIpOworCisg
ICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9
IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICBlbHNlIGlmICgodHlwZSA9PSAnYmx1
cicpKSB7CisKKyAgICAgICAgdmFyIF9fbGlzdGVuZXIgPSBsaXN0ZW5lcnMuX19pdGVyX18oKTsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGxpc3RlbmVyID0gX19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIAorICAgIGxpc3RlbmVyLm9uTG9zdEZvY3VzKHNlbmRlcik7CisKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJh
dGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgfQorICAgIH07CisgICAgX191aV9Gb2N1c0xpc3RlbmVyLnByb3Rv
dHlwZS5fX2NsYXNzX18uZmlyZUZvY3VzRXZlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfRm9jdXNMaXN0ZW5lci5wcm90b3R5cGUuZmlyZUZvY3VzRXZlbnQuY2FsbC5hcHBs
eShfX3VpX0ZvY3VzTGlzdGVuZXIucHJvdG90eXBlLmZpcmVGb2N1c0V2ZW50LCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9Gb2N1c0xpc3RlbmVyLnByb3RvdHlwZS5fX2NsYXNzX18uZmly
ZUZvY3VzRXZlbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNMaXN0ZW5l
ci5wcm90b3R5cGUuZmlyZUZvY3VzRXZlbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1
bmN0aW9uIF9fdWlfS2V5Ym9hcmRMaXN0ZW5lcigpIHsKK30KK2Z1bmN0aW9uIHVpX0tleWJvYXJk
TGlzdGVuZXIoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfS2V5Ym9hcmRMaXN0ZW5l
cigpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShp
bnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rp
b24gX191aV9LZXlib2FyZExpc3RlbmVyX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9LZXli
b2FyZExpc3RlbmVyLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX0tleWJv
YXJkTGlzdGVuZXIuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgcHlqc19leHRlbmQo
X191aV9LZXlib2FyZExpc3RlbmVyLCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3VpX0tleWJv
YXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfS2V5Ym9hcmRMaXN0
ZW5lcjsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLktFWV9BTFQg
PSAxODsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLktFWV9CQUNL
U1BBQ0UgPSA4OworX191aV9LZXlib2FyZExpc3RlbmVyLnByb3RvdHlwZS5fX2NsYXNzX18uS0VZ
X0NUUkwgPSAxNzsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLktF
WV9ERUxFVEUgPSA0NjsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19f
LktFWV9ET1dOID0gNDA7CitfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3Nf
Xy5LRVlfRU5EID0gMzU7CitfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3Nf
Xy5LRVlfRU5URVIgPSAxMzsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFz
c19fLktFWV9FU0NBUEUgPSAyNzsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19j
bGFzc19fLktFWV9IT01FID0gMzY7CitfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9f
Y2xhc3NfXy5LRVlfTEVGVCA9IDM3OworX191aV9LZXlib2FyZExpc3RlbmVyLnByb3RvdHlwZS5f
X2NsYXNzX18uS0VZX1BBR0VET1dOID0gMzQ7CitfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90
eXBlLl9fY2xhc3NfXy5LRVlfUEFHRVVQID0gMzM7CitfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJv
dG90eXBlLl9fY2xhc3NfXy5LRVlfUklHSFQgPSAzOTsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5w
cm90b3R5cGUuX19jbGFzc19fLktFWV9TSElGVCA9IDE2OworX191aV9LZXlib2FyZExpc3RlbmVy
LnByb3RvdHlwZS5fX2NsYXNzX18uS0VZX1RBQiA9IDk7CitfX3VpX0tleWJvYXJkTGlzdGVuZXIu
cHJvdG90eXBlLl9fY2xhc3NfXy5LRVlfVVAgPSAzODsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5lci5w
cm90b3R5cGUuX19jbGFzc19fLk1PRElGSUVSX0FMVCA9IDQ7CitfX3VpX0tleWJvYXJkTGlzdGVu
ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5NT0RJRklFUl9DVFJMID0gMjsKK19fdWlfS2V5Ym9hcmRM
aXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLk1PRElGSUVSX1NISUZUID0gMTsKKyAgICBfX3Vp
X0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLmdldEtleWJvYXJkTW9kaWZpZXJzID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICB2YXIgc2hpZnQgPSAwOworICAgIHZhciBjdHJsID0gMDsKKyAgICB2
YXIgYWx0ID0gMDsKKyAgICBpZiAoRE9NX2V2ZW50R2V0U2hpZnRLZXkoZXZlbnQpKSB7CisgICAg
dmFyIHNoaWZ0ID0gX191aV9LZXlib2FyZExpc3RlbmVyLnByb3RvdHlwZS5fX2NsYXNzX18uTU9E
SUZJRVJfU0hJRlQ7CisgICAgfQorICAgIGlmIChET01fZXZlbnRHZXRDdHJsS2V5KGV2ZW50KSkg
eworICAgIHZhciBjdHJsID0gX191aV9LZXlib2FyZExpc3RlbmVyLnByb3RvdHlwZS5fX2NsYXNz
X18uTU9ESUZJRVJfQ1RSTDsKKyAgICB9CisgICAgaWYgKERPTV9ldmVudEdldEFsdEtleShldmVu
dCkpIHsKKyAgICB2YXIgYWx0ID0gX191aV9LZXlib2FyZExpc3RlbmVyLnByb3RvdHlwZS5fX2Ns
YXNzX18uTU9ESUZJRVJfQUxUOworICAgIH0KKyAgICByZXR1cm4gc2hpZnQgfCBjdHJsIHwgYWx0
OworICAgIH07CisgICAgX191aV9LZXlib2FyZExpc3RlbmVyLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0S2V5Ym9hcmRNb2RpZmllcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
S2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuZ2V0S2V5Ym9hcmRNb2RpZmllcnMuY2FsbC5hcHBs
eShfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLmdldEtleWJvYXJkTW9kaWZpZXJzLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9LZXlib2FyZExpc3RlbmVyLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0S2V5Ym9hcmRNb2RpZmllcnMudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuZ2V0S2V5Ym9hcmRNb2RpZmllcnMuaW5z
dGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBl
LmZpcmVLZXlib2FyZEV2ZW50ID0gZnVuY3Rpb24obGlzdGVuZXJzLCBzZW5kZXIsIGV2ZW50KSB7
CisgICAgdmFyIG1vZGlmaWVycyA9IF9fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19j
bGFzc19fLmdldEtleWJvYXJkTW9kaWZpZXJzKHRoaXMsIGV2ZW50KTsKKyAgICB2YXIgdHlwZSA9
IERPTV9ldmVudEdldFR5cGUoZXZlbnQpOworICAgIGlmICgodHlwZSA9PSAna2V5ZG93bicpKSB7
CisKKyAgICAgICAgdmFyIF9fbGlzdGVuZXIgPSBsaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFy
IGxpc3RlbmVyID0gX19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IAorICAgIGxpc3RlbmVyLm9uS2V5RG93bihzZW5kZXIsIERPTV9ldmVudEdldEtleUNvZGUoZXZl
bnQpLCBtb2RpZmllcnMpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0
aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICBl
bHNlIGlmICgodHlwZSA9PSAna2V5dXAnKSkgeworCisgICAgICAgIHZhciBfX2xpc3RlbmVyID0g
bGlzdGVuZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9fbGlzdGVuZXIubmV4dCgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBsaXN0ZW5lci5vbktleVVwKHNlbmRl
ciwgRE9NX2V2ZW50R2V0S2V5Q29kZShldmVudCksIG1vZGlmaWVycyk7CisKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJh
dGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdrZXlwcmVzcycpKSB7
CisKKyAgICAgICAgdmFyIF9fbGlzdGVuZXIgPSBsaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFy
IGxpc3RlbmVyID0gX19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IAorICAgIGxpc3RlbmVyLm9uS2V5UHJlc3Moc2VuZGVyLCBET01fZXZlbnRHZXRLZXlDb2RlKGV2
ZW50KSwgbW9kaWZpZXJzKTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAg
fTsKKyAgICBfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlS2V5
Ym9hcmRFdmVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9LZXlib2FyZExp
c3RlbmVyLnByb3RvdHlwZS5maXJlS2V5Ym9hcmRFdmVudC5jYWxsLmFwcGx5KF9fdWlfS2V5Ym9h
cmRMaXN0ZW5lci5wcm90b3R5cGUuZmlyZUtleWJvYXJkRXZlbnQsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlS2V5
Ym9hcmRFdmVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9LZXlib2FyZExpc3Rl
bmVyLnByb3RvdHlwZS5maXJlS2V5Ym9hcmRFdmVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
fQorZnVuY3Rpb24gX191aV9Nb3VzZUxpc3RlbmVyKCkgeworfQorZnVuY3Rpb24gdWlfTW91c2VM
aXN0ZW5lcigpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9Nb3VzZUxpc3RlbmVyKCk7
CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3Rh
bmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBf
X3VpX01vdXNlTGlzdGVuZXJfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX01vdXNlTGlzdGVu
ZXIuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfTW91c2VMaXN0ZW5lci5f
X3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBweWpzX2V4dGVuZChfX3VpX01vdXNlTGlz
dGVuZXIsIF9fcHlqc2xpYl9PYmplY3QpOworICAgIF9fdWlfTW91c2VMaXN0ZW5lci5wcm90b3R5
cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9Nb3VzZUxpc3RlbmVyOworICAgIF9fdWlfTW91c2VM
aXN0ZW5lci5wcm90b3R5cGUuZmlyZU1vdXNlRXZlbnQgPSBmdW5jdGlvbihsaXN0ZW5lcnMsIHNl
bmRlciwgZXZlbnQpIHsKKyAgICB2YXIgeCA9ICAoIERPTV9ldmVudEdldENsaWVudFgoZXZlbnQp
IC0gRE9NX2dldEFic29sdXRlTGVmdChzZW5kZXIuZ2V0RWxlbWVudCgpKSApIDsKKyAgICB2YXIg
eSA9ICAoIERPTV9ldmVudEdldENsaWVudFkoZXZlbnQpIC0gRE9NX2dldEFic29sdXRlVG9wKHNl
bmRlci5nZXRFbGVtZW50KCkpICkgOworICAgIHZhciB0eXBlID0gRE9NX2V2ZW50R2V0VHlwZShl
dmVudCk7CisgICAgaWYgKCh0eXBlID09ICdtb3VzZWRvd24nKSkgeworCisgICAgICAgIHZhciBf
X2xpc3RlbmVyID0gbGlzdGVuZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9fbGlz
dGVuZXIubmV4dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBsaXN0ZW5lci5v
bk1vdXNlRG93bihzZW5kZXIsIHgsIHkpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAg
ICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
IH0KKyAgICBlbHNlIGlmICgodHlwZSA9PSAnbW91c2V1cCcpKSB7CisKKyAgICAgICAgdmFyIF9f
bGlzdGVuZXIgPSBsaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gX19saXN0
ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGxpc3RlbmVyLm9u
TW91c2VVcChzZW5kZXIsIHgsIHkpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH0K
KyAgICBlbHNlIGlmICgodHlwZSA9PSAnbW91c2Vtb3ZlJykpIHsKKworICAgICAgICB2YXIgX19s
aXN0ZW5lciA9IGxpc3RlbmVycy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3Rl
bmVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgbGlzdGVuZXIub25N
b3VzZU1vdmUoc2VuZGVyLCB4LCB5KTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9
CisgICAgZWxzZSBpZiAoKHR5cGUgPT0gJ21vdXNlb3ZlcicpKSB7CisgICAgdmFyIGZyb21fZWxl
bWVudCA9IERPTV9ldmVudEdldEZyb21FbGVtZW50KGV2ZW50KTsKKyAgICBpZiAoIShET01faXNP
ckhhc0NoaWxkKHNlbmRlci5nZXRFbGVtZW50KCksIGZyb21fZWxlbWVudCkpKSB7CisKKyAgICAg
ICAgdmFyIF9fbGlzdGVuZXIgPSBsaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVy
ID0gX19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGxp
c3RlbmVyLm9uTW91c2VFbnRlcihzZW5kZXIpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoKHR5cGUgPT0gJ21vdXNlb3V0JykpIHsKKyAgICB2
YXIgdG9fZWxlbWVudCA9IERPTV9ldmVudEdldFRvRWxlbWVudChldmVudCk7CisgICAgaWYgKCEo
RE9NX2lzT3JIYXNDaGlsZChzZW5kZXIuZ2V0RWxlbWVudCgpLCB0b19lbGVtZW50KSkpIHsKKwor
ICAgICAgICB2YXIgX19saXN0ZW5lciA9IGxpc3RlbmVycy5fX2l0ZXJfXygpOworICAgICAgICB0
cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlz
dGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisg
ICAgbGlzdGVuZXIub25Nb3VzZUxlYXZlKHNlbmRlcik7CisKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgewor
ICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgfQorICAgIH0KKyAgICB9OworICAgIF9fdWlfTW91c2VMaXN0ZW5lci5wcm90b3R5
cGUuX19jbGFzc19fLmZpcmVNb3VzZUV2ZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX01vdXNlTGlzdGVuZXIucHJvdG90eXBlLmZpcmVNb3VzZUV2ZW50LmNhbGwuYXBwbHko
X191aV9Nb3VzZUxpc3RlbmVyLnByb3RvdHlwZS5maXJlTW91c2VFdmVudCwgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfTW91c2VMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLmZpcmVN
b3VzZUV2ZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01vdXNlTGlzdGVuZXIu
cHJvdG90eXBlLmZpcmVNb3VzZUV2ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5j
dGlvbiB1aV9maW5kX2lkeChmaW5kX2luLCB0YXJnZXQsIHN0YXJ0KSB7CisgICAgaWYgKHR5cGVv
ZiBzdGFydCA9PSAndW5kZWZpbmVkJykgc3RhcnQ9MDsKKworCQlyZXR1cm4gZmluZF9pbi5pbmRl
eE9mKHRhcmdldCwgc3RhcnQpOworCQorfQorCisKK3VpX2ZpbmRfaWR4LnBhcnNlX2t3YXJncyA9
IGZ1bmN0aW9uICggX19rd2FyZ3MsIGZpbmRfaW4sIHRhcmdldCwgc3RhcnQgKSB7CisgICAgaWYg
KHR5cGVvZiBzdGFydCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgc3RhcnQ9X19rd2FyZ3Muc3Rh
cnQ7CisgICAgdmFyIF9fciA9IFtmaW5kX2luLCB0YXJnZXQsIHN0YXJ0XTsKKyAgICByZXR1cm4g
X19yOworfTsKK2Z1bmN0aW9uIHVpX2dldF9yaWdodCh0YXJnZXQsIGlkeCkgeworCisJCXJldHVy
biB0YXJnZXQuc2xpY2UoaWR4KTsKKwkKK30KKworCitmdW5jdGlvbiB1aV9nZXRfbGVmdCh0YXJn
ZXQsIGlkeCkgeworCisJCXJldHVybiB0YXJnZXQuc2xpY2UoMCwgaWR4KTsKKwkKK30KKworCitm
dW5jdGlvbiB1aV9nZXRfY2hhcih0YXJnZXQsIGlkeCkgeworCisJCXJldHVybiB0YXJnZXRbaWR4
XTsKKwkKK30KKworCitmdW5jdGlvbiBfX3VpX1VJT2JqZWN0KCkgeworfQorZnVuY3Rpb24gdWlf
VUlPYmplY3QoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfVUlPYmplY3QoKTsKKyAg
ICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2Us
IGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlf
VUlPYmplY3RfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX1VJT2JqZWN0Ll9fd2FzX2luaXRp
YWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1VJT2JqZWN0Ll9fd2FzX2luaXRpYWxpemVkX18g
PSB0cnVlOworICAgIHB5anNfZXh0ZW5kKF9fdWlfVUlPYmplY3QsIF9fcHlqc2xpYl9PYmplY3Qp
OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfVUlP
YmplY3Q7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0QWJzb2x1dGVMZWZ0ID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRBYnNvbHV0ZUxlZnQodGhpcy5nZXRFbGVtZW50
KCkpOworICAgIH07CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuX19jbGFzc19fLmdldEFi
c29sdXRlTGVmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9VSU9iamVjdC5w
cm90b3R5cGUuZ2V0QWJzb2x1dGVMZWZ0LmNhbGwuYXBwbHkoX191aV9VSU9iamVjdC5wcm90b3R5
cGUuZ2V0QWJzb2x1dGVMZWZ0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9VSU9iamVj
dC5wcm90b3R5cGUuX19jbGFzc19fLmdldEFic29sdXRlTGVmdC51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0QWJzb2x1dGVMZWZ0Lmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0QWJzb2x1dGVU
b3AgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldEFic29sdXRlVG9wKHRoaXMuZ2V0
RWxlbWVudCgpKTsKKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRBYnNvbHV0ZVRvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9VSU9i
amVjdC5wcm90b3R5cGUuZ2V0QWJzb2x1dGVUb3AuY2FsbC5hcHBseShfX3VpX1VJT2JqZWN0LnBy
b3RvdHlwZS5nZXRBYnNvbHV0ZVRvcCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVUlP
YmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRBYnNvbHV0ZVRvcC51bmJvdW5kX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0QWJzb2x1dGVUb3AuaW5zdGFu
Y2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5nZXRFbGVtZW50
ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgICB9OworICAgIF9f
dWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRFbGVtZW50ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5nZXRFbGVtZW50LmNhbGwu
YXBwbHkoX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0RWxlbWVudCwgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRFbGVtZW50LnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5nZXRFbGVt
ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUu
Z2V0T2Zmc2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRJbnRBdHRy
aWJ1dGUodGhpcy5lbGVtZW50LCAnb2Zmc2V0SGVpZ2h0Jyk7CisgICAgfTsKKyAgICBfX3VpX1VJ
T2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0T2Zmc2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5nZXRPZmZzZXRIZWlnaHQu
Y2FsbC5hcHBseShfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5nZXRPZmZzZXRIZWlnaHQsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0
T2Zmc2V0SGVpZ2h0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1VJT2JqZWN0LnBy
b3RvdHlwZS5nZXRPZmZzZXRIZWlnaHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1VJT2JqZWN0LnByb3RvdHlwZS5nZXRPZmZzZXRXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgJ29mZnNldFdpZHRoJyk7Cisg
ICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0T2Zmc2V0V2lk
dGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3QucHJvdG90eXBl
LmdldE9mZnNldFdpZHRoLmNhbGwuYXBwbHkoX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0T2Zm
c2V0V2lkdGgsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0T2Zmc2V0V2lkdGgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVUlPYmplY3QucHJvdG90eXBlLmdldE9mZnNldFdpZHRoLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0U3R5bGVOYW1lID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIERPTV9nZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCAnY2xhc3NOYW1l
Jyk7CisgICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0U3R5
bGVOYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1VJT2JqZWN0LnByb3Rv
dHlwZS5nZXRTdHlsZU5hbWUuY2FsbC5hcHBseShfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5nZXRT
dHlsZU5hbWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0U3R5bGVOYW1lLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1VJT2JqZWN0LnByb3RvdHlwZS5nZXRTdHlsZU5hbWUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5nZXRUaXRsZSA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBET01fZ2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgJ3RpdGxlJyk7CisgICAgfTsK
KyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGl0bGUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmdldFRpdGxlLmNh
bGwuYXBwbHkoX191aV9VSU9iamVjdC5wcm90b3R5cGUuZ2V0VGl0bGUsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGl0bGUudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmdldFRpdGxl
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuc2V0
RWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50
OworICAgIH07CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuX19jbGFzc19fLnNldEVsZW1l
bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3QucHJvdG90eXBl
LnNldEVsZW1lbnQuY2FsbC5hcHBseShfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5zZXRFbGVtZW50
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuX19jbGFz
c19fLnNldEVsZW1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3Qu
cHJvdG90eXBlLnNldEVsZW1lbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1VJ
T2JqZWN0LnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQpIHsKKyAgICBET01f
c2V0U3R5bGVBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCAnaGVpZ2h0JywgaGVpZ2h0KTsKKyAgICB9
OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIZWlnaHQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLnNldEhlaWdo
dC5jYWxsLmFwcGx5KF9fdWlfVUlPYmplY3QucHJvdG90eXBlLnNldEhlaWdodCwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIZWln
aHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLnNl
dEhlaWdodC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90
eXBlLnNldFBpeGVsU2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHsKKyAgICBpZiAoKHdp
ZHRoID49IDApKSB7CisgICAgdGhpcy5zZXRXaWR0aCggKCB3aWR0aCArICdweCcgKSApOworICAg
IH0KKyAgICBpZiAoKGhlaWdodCA+PSAwKSkgeworICAgIHRoaXMuc2V0SGVpZ2h0KCAoIGhlaWdo
dCArICdweCcgKSApOworICAgIH0KKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRQaXhlbFNpemUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfVUlPYmplY3QucHJvdG90eXBlLnNldFBpeGVsU2l6ZS5jYWxsLmFwcGx5KF9fdWlfVUlPYmpl
Y3QucHJvdG90eXBlLnNldFBpeGVsU2l6ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
VUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRQaXhlbFNpemUudW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLnNldFBpeGVsU2l6ZS5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLnNldFNpemUgPSBm
dW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CisgICAgdGhpcy5zZXRXaWR0aCh3aWR0aCk7CisgICAg
dGhpcy5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRTaXplID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3Vp
X1VJT2JqZWN0LnByb3RvdHlwZS5zZXRTaXplLmNhbGwuYXBwbHkoX191aV9VSU9iamVjdC5wcm90
b3R5cGUuc2V0U2l6ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRTaXplLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1VJT2JqZWN0LnByb3RvdHlwZS5zZXRTaXplLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9VSU9iamVjdC5wcm90b3R5cGUuYWRkU3R5bGVOYW1lID0gZnVuY3Rpb24oc3R5bGUpIHsK
KyAgICB0aGlzLnNldFN0eWxlTmFtZSh0aGlzLmVsZW1lbnQsIHN0eWxlLCB0cnVlKTsKKyAgICB9
OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRTdHlsZU5hbWUgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmFkZFN0
eWxlTmFtZS5jYWxsLmFwcGx5KF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmFkZFN0eWxlTmFtZSwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3Nf
Xy5hZGRTdHlsZU5hbWUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3Qu
cHJvdG90eXBlLmFkZFN0eWxlTmFtZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VUlPYmplY3QucHJvdG90eXBlLnJlbW92ZVN0eWxlTmFtZSA9IGZ1bmN0aW9uKHN0eWxlKSB7Cisg
ICAgdGhpcy5zZXRTdHlsZU5hbWUodGhpcy5lbGVtZW50LCBzdHlsZSwgZmFsc2UpOworICAgIH07
CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZVN0eWxlTmFtZSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9VSU9iamVjdC5wcm90b3R5cGUucmVt
b3ZlU3R5bGVOYW1lLmNhbGwuYXBwbHkoX191aV9VSU9iamVjdC5wcm90b3R5cGUucmVtb3ZlU3R5
bGVOYW1lLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUu
X19jbGFzc19fLnJlbW92ZVN0eWxlTmFtZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9VSU9iamVjdC5wcm90b3R5cGUucmVtb3ZlU3R5bGVOYW1lLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuc2V0U3R5bGVOYW1lID0gZnVuY3Rpb24o
ZWxlbWVudCwgc3R5bGUsIGFkZCkgeworICAgIGlmICh0eXBlb2Ygc3R5bGUgPT0gJ3VuZGVmaW5l
ZCcpIHN0eWxlPW51bGw7CisgICAgaWYgKHR5cGVvZiBhZGQgPT0gJ3VuZGVmaW5lZCcpIGFkZD10
cnVlOworICAgIGlmICgoc3R5bGUgPT0gbnVsbCkpIHsKKyAgICB2YXIgc3R5bGUgPSBlbGVtZW50
OworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCAnY2xhc3NOYW1lJywgc3R5bGUp
OworICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIG9sZFN0eWxlID0gRE9NX2dldEF0dHJpYnV0
ZShlbGVtZW50LCAnY2xhc3NOYW1lJyk7CisgICAgaWYgKG9sZFN0eWxlKSB7CisgICAgdmFyIGlk
eCA9IHVpX2ZpbmRfaWR4KG9sZFN0eWxlLCBzdHlsZSk7CisgICAgfQorICAgIGVsc2UgeworICAg
IHZhciBvbGRTdHlsZSA9ICcnOworICAgIHZhciBpZHggPSAtMTsKKyAgICB9CisgICAgdmFyIGxh
c3RQb3MgPSBweWpzbGliX2xlbihvbGRTdHlsZSk7CisgICAgd2hpbGUgKChpZHggIT0gLTEpKSB7
CisgICAgaWYgKChpZHggPT0gMCkgfHwgKHVpX2dldF9jaGFyKG9sZFN0eWxlLCAgKCBpZHggLSAx
ICkgKSA9PSAnICcpKSB7CisgICAgdmFyIGxhc3QgPSAgKCBpZHggKyBweWpzbGliX2xlbihzdHls
ZSkgKSA7CisgICAgaWYgKChsYXN0ID09IGxhc3RQb3MpIHx8IChsYXN0IDwgbGFzdFBvcykgJiYg
KHVpX2dldF9jaGFyKG9sZFN0eWxlLCBsYXN0KSA9PSAnICcpKSB7CisgICAgYnJlYWs7CisgICAg
fQorICAgIH0KKyAgICB2YXIgaWR4ID0gdWlfZmluZF9pZHgob2xkU3R5bGUsIHN0eWxlLCAgKCBp
ZHggKyAxICkgKTsKKyAgICB9CisgICAgaWYgKGFkZCkgeworICAgIGlmICgoaWR4ID09IC0xKSkg
eworICAgIERPTV9zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2NsYXNzTmFtZScsICAoICAoIG9sZFN0
eWxlICsgJyAnICkgICsgc3R5bGUgKSApOworICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAg
aWYgKChpZHggIT0gLTEpKSB7CisgICAgdmFyIGJlZ2luID0gdWlfZ2V0X2xlZnQob2xkU3R5bGUs
IGlkeCk7CisgICAgdmFyIGVuZCA9IHVpX2dldF9yaWdodChvbGRTdHlsZSwgICggaWR4ICsgcHlq
c2xpYl9sZW4oc3R5bGUpICkgKTsKKyAgICBET01fc2V0QXR0cmlidXRlKGVsZW1lbnQsICdjbGFz
c05hbWUnLCAgKCBiZWdpbiArIGVuZCApICk7CisgICAgfQorICAgIH0KKyAgICB9OworX191aV9V
SU9iamVjdC5wcm90b3R5cGUuc2V0U3R5bGVOYW1lLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICgg
X19rd2FyZ3MsIGVsZW1lbnQsIHN0eWxlLCBhZGQgKSB7CisgICAgaWYgKHR5cGVvZiBzdHlsZSA9
PSAndW5kZWZpbmVkJykKKyAgICAgICAgc3R5bGU9X19rd2FyZ3Muc3R5bGU7CisgICAgaWYgKHR5
cGVvZiBhZGQgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGFkZD1fX2t3YXJncy5hZGQ7CisgICAg
dmFyIF9fciA9IFtlbGVtZW50LCBzdHlsZSwgYWRkXTsKKyAgICByZXR1cm4gX19yOworfTsKKyAg
ICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U3R5bGVOYW1lID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5zZXRTdHlsZU5h
bWUuY2FsbC5hcHBseShfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5zZXRTdHlsZU5hbWUsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0
U3R5bGVOYW1lLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3Rv
dHlwZS5zZXRTdHlsZU5hbWUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1VJT2Jq
ZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U3R5bGVOYW1lLnBhcnNlX2t3YXJncyA9IF9fdWlf
VUlPYmplY3QucHJvdG90eXBlLnNldFN0eWxlTmFtZS5wYXJzZV9rd2FyZ3M7CisgICAgX191aV9V
SU9iamVjdC5wcm90b3R5cGUuc2V0VGl0bGUgPSBmdW5jdGlvbih0aXRsZSkgeworICAgIERPTV9z
ZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCAndGl0bGUnLCB0aXRsZSk7CisgICAgfTsKKyAgICBf
X3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGl0bGUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLnNldFRpdGxlLmNhbGwuYXBw
bHkoX191aV9VSU9iamVjdC5wcm90b3R5cGUuc2V0VGl0bGUsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGl0bGUudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLnNldFRpdGxlLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuc2V0V2lkdGgg
PSBmdW5jdGlvbih3aWR0aCkgeworICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0aGlzLmVsZW1l
bnQsICd3aWR0aCcsIHdpZHRoKTsKKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9V
SU9iamVjdC5wcm90b3R5cGUuc2V0V2lkdGguY2FsbC5hcHBseShfX3VpX1VJT2JqZWN0LnByb3Rv
dHlwZS5zZXRXaWR0aCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVUlPYmplY3QucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRXaWR0aC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9VSU9iamVjdC5wcm90b3R5cGUuc2V0V2lkdGguaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5zaW5rRXZlbnRzID0gZnVuY3Rpb24oZXZlbnRCaXRz
VG9BZGQpIHsKKyAgICBpZiAodGhpcy5lbGVtZW50KSB7CisgICAgRE9NX3NpbmtFdmVudHModGhp
cy5nZXRFbGVtZW50KCksIGV2ZW50Qml0c1RvQWRkIHwgRE9NX2dldEV2ZW50c1N1bmsodGhpcy5n
ZXRFbGVtZW50KCkpKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlw
ZS5fX2NsYXNzX18uc2lua0V2ZW50cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9VSU9iamVjdC5wcm90b3R5cGUuc2lua0V2ZW50cy5jYWxsLmFwcGx5KF9fdWlfVUlPYmplY3Qu
cHJvdG90eXBlLnNpbmtFdmVudHMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1VJT2Jq
ZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2lua0V2ZW50cy51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuc2lua0V2ZW50cy5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmlzVmlzaWJsZSA9IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKyAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3VuZGVmaW5lZCcpIGVsZW1l
bnQ9bnVsbDsKKyAgICBpZiAoIShlbGVtZW50KSkgeworICAgIHZhciBlbGVtZW50ID0gdGhpcy5l
bGVtZW50OworICAgIH0KKyAgICByZXR1cm4gKGVsZW1lbnQuc3R5bGUuZGlzcGxheSAhPSAnbm9u
ZScpOworICAgIH07CitfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5pc1Zpc2libGUucGFyc2Vfa3dh
cmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgZWxlbWVudCApIHsKKyAgICBpZiAodHlwZW9mIGVs
ZW1lbnQgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGVsZW1lbnQ9X19rd2FyZ3MuZWxlbWVudDsK
KyAgICB2YXIgX19yID0gW2VsZW1lbnRdOworICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fdWlf
VUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5pc1Zpc2libGUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmlzVmlzaWJsZS5jYWxsLmFwcGx5
KF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmlzVmlzaWJsZSwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3NfXy5pc1Zpc2libGUudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLmlzVmlzaWJsZS5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVUlPYmplY3QucHJvdG90eXBlLl9fY2xhc3Nf
Xy5pc1Zpc2libGUucGFyc2Vfa3dhcmdzID0gX191aV9VSU9iamVjdC5wcm90b3R5cGUuaXNWaXNp
YmxlLnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5zZXRWaXNpYmxl
ID0gZnVuY3Rpb24oZWxlbWVudCwgdmlzaWJsZSkgeworICAgIGlmICh0eXBlb2YgdmlzaWJsZSA9
PSAndW5kZWZpbmVkJykgdmlzaWJsZT1udWxsOworICAgIGlmICgodmlzaWJsZSA9PSBudWxsKSkg
eworICAgIHZhciB2aXNpYmxlID0gZWxlbWVudDsKKyAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxl
bWVudDsKKyAgICB9CisgICAgaWYgKHZpc2libGUpIHsKKyAgICBlbGVtZW50LnN0eWxlLmRpc3Bs
YXkgPSAnJzsKKyAgICB9CisgICAgZWxzZSB7CisgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOworICAgIH0KKyAgICB9OworX191aV9VSU9iamVjdC5wcm90b3R5cGUuc2V0VmlzaWJs
ZS5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBlbGVtZW50LCB2aXNpYmxlICkg
eworICAgIGlmICh0eXBlb2YgdmlzaWJsZSA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgdmlzaWJs
ZT1fX2t3YXJncy52aXNpYmxlOworICAgIHZhciBfX3IgPSBbZWxlbWVudCwgdmlzaWJsZV07Cisg
ICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuX19jbGFzc19f
LnNldFZpc2libGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVUlPYmplY3Qu
cHJvdG90eXBlLnNldFZpc2libGUuY2FsbC5hcHBseShfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5z
ZXRWaXNpYmxlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5
cGUuX19jbGFzc19fLnNldFZpc2libGUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VUlPYmplY3QucHJvdG90eXBlLnNldFZpc2libGUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VmlzaWJsZS5wYXJzZV9rd2Fy
Z3MgPSBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS5zZXRWaXNpYmxlLnBhcnNlX2t3YXJnczsKKyAg
ICBfX3VpX1VJT2JqZWN0LnByb3RvdHlwZS51bnNpbmtFdmVudHMgPSBmdW5jdGlvbihldmVudEJp
dHNUb1JlbW92ZSkgeworICAgIERPTV9zaW5rRXZlbnRzKHRoaXMuZ2V0RWxlbWVudCgpLCB+ZXZl
bnRCaXRzVG9SZW1vdmUgJiBET01fZ2V0RXZlbnRzU3Vuayh0aGlzLmdldEVsZW1lbnQoKSkpOwor
ICAgIH07CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuX19jbGFzc19fLnVuc2lua0V2ZW50
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9VSU9iamVjdC5wcm90b3R5cGUu
dW5zaW5rRXZlbnRzLmNhbGwuYXBwbHkoX191aV9VSU9iamVjdC5wcm90b3R5cGUudW5zaW5rRXZl
bnRzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9VSU9iamVjdC5wcm90b3R5cGUuX19j
bGFzc19fLnVuc2lua0V2ZW50cy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9VSU9i
amVjdC5wcm90b3R5cGUudW5zaW5rRXZlbnRzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9Citm
dW5jdGlvbiBfX3VpX1dpZGdldCgpIHsKK30KK2Z1bmN0aW9uIHVpX1dpZGdldCgpIHsKKyAgICB2
YXIgaW5zdGFuY2UgPSBuZXcgX191aV9XaWRnZXQoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRf
XykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0
dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfV2lkZ2V0X2luaXRpYWxpemUoKSB7
CisgICAgaWYoX191aV9XaWRnZXQuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9f
dWlfV2lkZ2V0Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX1VJT2Jq
ZWN0Ll9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfVUlPYmplY3RfaW5pdGlhbGl6
ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfV2lkZ2V0LCBfX3VpX1VJT2JqZWN0KTsKKyAgICBf
X3VpX1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9XaWRnZXQ7CisgICAg
X191aV9XaWRnZXQucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5h
dHRhY2hlZCA9IGZhbHNlOworICAgIHRoaXMucGFyZW50ID0gbnVsbDsKKyAgICB0aGlzLmxheW91
dERhdGEgPSBudWxsOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9XaWRnZXQucHJv
dG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9XaWRnZXQucHJvdG90eXBlLl9faW5pdF9f
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9XaWRnZXQucHJvdG90
eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9XaWRnZXQucHJv
dG90eXBlLmdldExheW91dERhdGEgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5sYXlv
dXREYXRhOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRM
YXlvdXREYXRhID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1dpZGdldC5wcm90
b3R5cGUuZ2V0TGF5b3V0RGF0YS5jYWxsLmFwcGx5KF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5nZXRM
YXlvdXREYXRhLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBl
Ll9fY2xhc3NfXy5nZXRMYXlvdXREYXRhLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1dpZGdldC5wcm90b3R5cGUuZ2V0TGF5b3V0RGF0YS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5wYXJlbnQ7CisgICAgfTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUuX19j
bGFzc19fLmdldFBhcmVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9XaWRn
ZXQucHJvdG90eXBlLmdldFBhcmVudC5jYWxsLmFwcGx5KF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5n
ZXRQYXJlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUu
X19jbGFzc19fLmdldFBhcmVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9XaWRn
ZXQucHJvdG90eXBlLmdldFBhcmVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
V2lkZ2V0LnByb3RvdHlwZS5pc0F0dGFjaGVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMuYXR0YWNoZWQ7CisgICAgfTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19f
LmlzQXR0YWNoZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfV2lkZ2V0LnBy
b3RvdHlwZS5pc0F0dGFjaGVkLmNhbGwuYXBwbHkoX191aV9XaWRnZXQucHJvdG90eXBlLmlzQXR0
YWNoZWQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUuX19j
bGFzc19fLmlzQXR0YWNoZWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfV2lkZ2V0
LnByb3RvdHlwZS5pc0F0dGFjaGVkLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9X
aWRnZXQucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB9
OworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5vbkJyb3dz
ZXJFdmVudC5jYWxsLmFwcGx5KF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5vbkJyb3dzZXJFdmVudCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18u
b25Ccm93c2VyRXZlbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfV2lkZ2V0LnBy
b3RvdHlwZS5vbkJyb3dzZXJFdmVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
V2lkZ2V0LnByb3RvdHlwZS5vbkxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICB9OworICAgIF9fdWlf
V2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18ub25Mb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX1dpZGdldC5wcm90b3R5cGUub25Mb2FkLmNhbGwuYXBwbHkoX191aV9XaWRn
ZXQucHJvdG90eXBlLm9uTG9hZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfV2lkZ2V0
LnByb3RvdHlwZS5fX2NsYXNzX18ub25Mb2FkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1dpZGdldC5wcm90b3R5cGUub25Mb2FkLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9XaWRnZXQucHJvdG90eXBlLm9uQXR0YWNoID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRo
aXMuYXR0YWNoZWQpIHsKKyAgICByZXR1cm47CisgICAgfQorICAgIHRoaXMuYXR0YWNoZWQgPSB0
cnVlOworICAgIERPTV9zZXRFdmVudExpc3RlbmVyKHRoaXMuZ2V0RWxlbWVudCgpLCB0aGlzKTsK
KyAgICB0aGlzLm9uTG9hZCgpOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9f
Y2xhc3NfXy5vbkF0dGFjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9XaWRn
ZXQucHJvdG90eXBlLm9uQXR0YWNoLmNhbGwuYXBwbHkoX191aV9XaWRnZXQucHJvdG90eXBlLm9u
QXR0YWNoLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9f
Y2xhc3NfXy5vbkF0dGFjaC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9XaWRnZXQu
cHJvdG90eXBlLm9uQXR0YWNoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9XaWRn
ZXQucHJvdG90eXBlLm9uRGV0YWNoID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCEodGhpcy5hdHRh
Y2hlZCkpIHsKKyAgICByZXR1cm47CisgICAgfQorICAgIHRoaXMuYXR0YWNoZWQgPSBmYWxzZTsK
KyAgICBET01fc2V0RXZlbnRMaXN0ZW5lcih0aGlzLmdldEVsZW1lbnQoKSwgbnVsbCk7CisgICAg
fTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1dpZGdldC5wcm90b3R5cGUub25EZXRhY2guY2Fs
bC5hcHBseShfX3VpX1dpZGdldC5wcm90b3R5cGUub25EZXRhY2gsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoLnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUub25EZXRhY2guaW5zdGFu
Y2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUuc2V0TGF5b3V0RGF0
YSA9IGZ1bmN0aW9uKGxheW91dERhdGEpIHsKKyAgICB0aGlzLmxheW91dERhdGEgPSBsYXlvdXRE
YXRhOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRMYXlv
dXREYXRhID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1dpZGdldC5wcm90b3R5
cGUuc2V0TGF5b3V0RGF0YS5jYWxsLmFwcGx5KF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5zZXRMYXlv
dXREYXRhLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXRMYXlvdXREYXRhLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1dp
ZGdldC5wcm90b3R5cGUuc2V0TGF5b3V0RGF0YS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbihwYXJlbnQpIHsKKyAg
ICB0aGlzLnBhcmVudCA9IHBhcmVudDsKKyAgICBpZiAoKHBhcmVudCA9PSBudWxsKSkgeworICAg
IHRoaXMub25EZXRhY2goKTsKKyAgICB9CisgICAgZWxzZSBpZiAocGFyZW50LmF0dGFjaGVkKSB7
CisgICAgdGhpcy5vbkF0dGFjaCgpOworICAgIH0KKyAgICB9OworICAgIF9fdWlfV2lkZ2V0LnBy
b3RvdHlwZS5fX2NsYXNzX18uc2V0UGFyZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX1dpZGdldC5wcm90b3R5cGUuc2V0UGFyZW50LmNhbGwuYXBwbHkoX191aV9XaWRnZXQu
cHJvdG90eXBlLnNldFBhcmVudCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfV2lkZ2V0
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0UGFyZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1dpZGdldC5wcm90b3R5cGUuc2V0UGFyZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLnJlbW92ZUZyb21QYXJlbnQgPSBmdW5jdGlvbigp
IHsKKyAgICBpZiAocHlqc2xpYl9oYXNhdHRyKHRoaXMucGFyZW50LCAncmVtb3ZlJykpIHsKKyAg
ICB0aGlzLnBhcmVudC5yZW1vdmUodGhpcyk7CisgICAgfQorICAgIH07CisgICAgX191aV9XaWRn
ZXQucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVGcm9tUGFyZW50ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX1dpZGdldC5wcm90b3R5cGUucmVtb3ZlRnJvbVBhcmVudC5jYWxs
LmFwcGx5KF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5yZW1vdmVGcm9tUGFyZW50LCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVGcm9t
UGFyZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUu
cmVtb3ZlRnJvbVBhcmVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfV2lkZ2V0
LnByb3RvdHlwZS5nZXRJRCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0QXR0cmli
dXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAnaWQnKTsKKyAgICB9OworICAgIF9fdWlfV2lkZ2V0LnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0SUQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfV2lkZ2V0LnByb3RvdHlwZS5nZXRJRC5jYWxsLmFwcGx5KF9fdWlfV2lkZ2V0LnByb3RvdHlw
ZS5nZXRJRCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0SUQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfV2lkZ2V0LnBy
b3RvdHlwZS5nZXRJRC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfV2lkZ2V0LnBy
b3RvdHlwZS5zZXRJRCA9IGZ1bmN0aW9uKGlkKSB7CisgICAgRE9NX3NldEF0dHJpYnV0ZSh0aGlz
LmdldEVsZW1lbnQoKSwgJ2lkJywgaWQpOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRJRCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9X
aWRnZXQucHJvdG90eXBlLnNldElELmNhbGwuYXBwbHkoX191aV9XaWRnZXQucHJvdG90eXBlLnNl
dElELCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRJRC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9XaWRnZXQucHJvdG90
eXBlLnNldElELmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX0ZvY3Vz
V2lkZ2V0KCkgeworfQorZnVuY3Rpb24gdWlfRm9jdXNXaWRnZXQoZWxlbWVudCkgeworICAgIHZh
ciBpbnN0YW5jZSA9IG5ldyBfX3VpX0ZvY3VzV2lkZ2V0KCk7CisgICAgaWYoaW5zdGFuY2UuX19p
bml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAg
IHJldHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBfX3VpX0ZvY3VzV2lkZ2V0X2luaXRp
YWxpemUoKSB7CisgICAgaWYoX191aV9Gb2N1c1dpZGdldC5fX3dhc19pbml0aWFsaXplZF9fKSBy
ZXR1cm47CisgICAgX191aV9Gb2N1c1dpZGdldC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsK
KyAgICBpZighX191aV9XaWRnZXQuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAgX191aV9X
aWRnZXRfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfRm9jdXNXaWRnZXQsIF9f
dWlfV2lkZ2V0KTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18uX19u
ZXdfXyA9IHVpX0ZvY3VzV2lkZ2V0OworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9f
aW5pdF9fID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5f
X2NsYXNzX18uX19pbml0X18odGhpcyk7CisgICAgdGhpcy5jbGlja0xpc3RlbmVycyA9IG5ldyBw
eWpzbGliX0xpc3QoW10pOworICAgIHRoaXMuZm9jdXNMaXN0ZW5lcnMgPSBuZXcgcHlqc2xpYl9M
aXN0KFtdKTsKKyAgICB0aGlzLmtleWJvYXJkTGlzdGVuZXJzID0gbmV3IHB5anNsaWJfTGlzdChb
XSk7CisgICAgdGhpcy5zZXRFbGVtZW50KGVsZW1lbnQpOworICAgIHRoaXMuc2lua0V2ZW50cyhf
X3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05DTElDSyB8IF9fdWlfRXZlbnQucHJvdG90
eXBlLl9fY2xhc3NfXy5GT0NVU0VWRU5UUyB8IF9fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3Nf
Xy5LRVlFVkVOVFMpOworICAgIH07CisgICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19j
bGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZvY3Vz
V2lkZ2V0LnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9fdWlfRm9jdXNXaWRnZXQucHJv
dG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb2N1c1dpZGdl
dC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLmFkZENsaWNrTGlzdGVuZXIgPSBm
dW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMuY2xpY2tMaXN0ZW5lcnMuYXBwZW5kKGxpc3Rl
bmVyKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5h
ZGRDbGlja0xpc3RlbmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZvY3Vz
V2lkZ2V0LnByb3RvdHlwZS5hZGRDbGlja0xpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9Gb2N1c1dp
ZGdldC5wcm90b3R5cGUuYWRkQ2xpY2tMaXN0ZW5lciwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRDbGlja0xpc3RlbmVyLnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5hZGRD
bGlja0xpc3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1c1dpZGdl
dC5wcm90b3R5cGUuYWRkRm9jdXNMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAg
dGhpcy5mb2N1c0xpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpOworICAgIH07CisgICAgX191aV9G
b2N1c1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLmFkZEZvY3VzTGlzdGVuZXIgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLmFkZEZvY3Vz
TGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5hZGRGb2N1c0xp
c3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5
cGUuX19jbGFzc19fLmFkZEZvY3VzTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLmFkZEZvY3VzTGlzdGVuZXIuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5hZGRLZXlib2FyZExp
c3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLmtleWJvYXJkTGlzdGVuZXJz
LmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlw
ZS5fX2NsYXNzX18uYWRkS2V5Ym9hcmRMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuYWRkS2V5Ym9hcmRMaXN0ZW5lci5jYWxs
LmFwcGx5KF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLmFkZEtleWJvYXJkTGlzdGVuZXIsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNz
X18uYWRkS2V5Ym9hcmRMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9G
b2N1c1dpZGdldC5wcm90b3R5cGUuYWRkS2V5Ym9hcmRMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLmdldFRhYkluZGV4ID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRU
YWJJbmRleCh0aGlzLCB0aGlzLmdldEVsZW1lbnQoKSk7CisgICAgfTsKKyAgICBfX3VpX0ZvY3Vz
V2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGFiSW5kZXggPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLmdldFRhYkluZGV4LmNhbGwu
YXBwbHkoX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuZ2V0VGFiSW5kZXgsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGFi
SW5kZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90
eXBlLmdldFRhYkluZGV4Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1c1dp
ZGdldC5wcm90b3R5cGUuaXNFbmFibGVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuICEoRE9N
X2dldEJvb2xlYW5BdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdkaXNhYmxlZCcpKTsKKyAg
ICB9OworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5pc0VuYWJsZWQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBl
LmlzRW5hYmxlZC5jYWxsLmFwcGx5KF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLmlzRW5hYmxl
ZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9f
Y2xhc3NfXy5pc0VuYWJsZWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNX
aWRnZXQucHJvdG90eXBlLmlzRW5hYmxlZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50ID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICB2YXIgdHlwZSA9IERPTV9ldmVudEdldFR5cGUoZXZlbnQpOworICAgIGlmICgodHlw
ZSA9PSAnY2xpY2snKSkgeworCisgICAgICAgIHZhciBfX2xpc3RlbmVyID0gdGhpcy5jbGlja0xp
c3RlbmVycy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgaWYgKGxpc3RlbmVyLm9uQ2xpY2spIHsK
KyAgICBsaXN0ZW5lci5vbkNsaWNrKHRoaXMsIGV2ZW50KTsKKyAgICB9CisgICAgZWxzZSB7Cisg
ICAgbGlzdGVuZXIodGhpcywgZXZlbnQpOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICB9CisgICAgZWxzZSBpZiAoKHR5cGUgPT0gJ2JsdXInKSB8fCAodHlwZSA9PSAnZm9j
dXMnKSkgeworICAgIF9fdWlfRm9jdXNMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLmZpcmVG
b2N1c0V2ZW50KHRoaXMsIHRoaXMuZm9jdXNMaXN0ZW5lcnMsIHRoaXMsIGV2ZW50KTsKKyAgICB9
CisgICAgZWxzZSBpZiAoKHR5cGUgPT0gJ2tleWRvd24nKSB8fCAodHlwZSA9PSAna2V5cHJlc3Mn
KSB8fCAodHlwZSA9PSAna2V5dXAnKSkgeworICAgIF9fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90
b3R5cGUuX19jbGFzc19fLmZpcmVLZXlib2FyZEV2ZW50KHRoaXMsIHRoaXMua2V5Ym9hcmRMaXN0
ZW5lcnMsIHRoaXMsIGV2ZW50KTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0
LnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50LmNhbGwu
YXBwbHkoX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18ub25C
cm93c2VyRXZlbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQu
cHJvdG90eXBlLm9uQnJvd3NlckV2ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUucmVtb3ZlQ2xpY2tMaXN0ZW5lciA9IGZ1bmN0aW9uKGxp
c3RlbmVyKSB7CisgICAgdGhpcy5jbGlja0xpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAg
IH07CisgICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUNsaWNr
TGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXNXaWRnZXQu
cHJvdG90eXBlLnJlbW92ZUNsaWNrTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX0ZvY3VzV2lkZ2V0
LnByb3RvdHlwZS5yZW1vdmVDbGlja0xpc3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUNsaWNrTGlzdGVuZXIu
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLnJl
bW92ZUNsaWNrTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3Vz
V2lkZ2V0LnByb3RvdHlwZS5yZW1vdmVGb2N1c0xpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIp
IHsKKyAgICB0aGlzLmZvY3VzTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAgfTsKKyAg
ICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlRm9jdXNMaXN0ZW5l
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb2N1c1dpZGdldC5wcm90b3R5
cGUucmVtb3ZlRm9jdXNMaXN0ZW5lci5jYWxsLmFwcGx5KF9fdWlfRm9jdXNXaWRnZXQucHJvdG90
eXBlLnJlbW92ZUZvY3VzTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0Zv
Y3VzV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlRm9jdXNMaXN0ZW5lci51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUucmVtb3ZlRm9j
dXNMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQu
cHJvdG90eXBlLnJlbW92ZUtleWJvYXJkTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgewor
ICAgIHRoaXMua2V5Ym9hcmRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKyAgICB9OworICAg
IF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVLZXlib2FyZExpc3Rl
bmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZvY3VzV2lkZ2V0LnByb3Rv
dHlwZS5yZW1vdmVLZXlib2FyZExpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9Gb2N1c1dpZGdldC5w
cm90b3R5cGUucmVtb3ZlS2V5Ym9hcmRMaXN0ZW5lciwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVLZXlib2FyZExpc3Rl
bmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlw
ZS5yZW1vdmVLZXlib2FyZExpc3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuc2V0QWNjZXNzS2V5ID0gZnVuY3Rpb24oa2V5KSB7Cisg
ICAgRE9NX3NldEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ2FjY2Vzc0tleScsICAoICcn
ICsga2V5ICkgKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRBY2Nlc3NLZXkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9j
dXNXaWRnZXQucHJvdG90eXBlLnNldEFjY2Vzc0tleS5jYWxsLmFwcGx5KF9fdWlfRm9jdXNXaWRn
ZXQucHJvdG90eXBlLnNldEFjY2Vzc0tleSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
Rm9jdXNXaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRBY2Nlc3NLZXkudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLnNldEFjY2Vzc0tleS5p
bnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLnNl
dEVuYWJsZWQgPSBmdW5jdGlvbihlbmFibGVkKSB7CisgICAgRE9NX3NldEJvb2xlYW5BdHRyaWJ1
dGUodGhpcy5nZXRFbGVtZW50KCksICdkaXNhYmxlZCcsICEoZW5hYmxlZCkpOworICAgIH07Cisg
ICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLnNldEVuYWJsZWQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLnNldEVu
YWJsZWQuY2FsbC5hcHBseShfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5zZXRFbmFibGVkLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19jbGFz
c19fLnNldEVuYWJsZWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNXaWRn
ZXQucHJvdG90eXBlLnNldEVuYWJsZWQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5zZXRGb2N1cyA9IGZ1bmN0aW9uKGZvY3VzZWQpIHsKKyAg
ICBpZiAoZm9jdXNlZCkgeworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5mb2N1
cyh0aGlzLCB0aGlzLmdldEVsZW1lbnQoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgIF9fdWlf
Rm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5ibHVyKHRoaXMsIHRoaXMuZ2V0RWxlbWVudCgpKTsK
KyAgICB9CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18u
c2V0Rm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXNXaWRnZXQu
cHJvdG90eXBlLnNldEZvY3VzLmNhbGwuYXBwbHkoX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUu
c2V0Rm9jdXMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3Rv
dHlwZS5fX2NsYXNzX18uc2V0Rm9jdXMudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
Rm9jdXNXaWRnZXQucHJvdG90eXBlLnNldEZvY3VzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuc2V0VGFiSW5kZXggPSBmdW5jdGlvbihpbmRl
eCkgeworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRUYWJJbmRleCh0aGlz
LCB0aGlzLmdldEVsZW1lbnQoKSwgaW5kZXgpOworICAgIH07CisgICAgX191aV9Gb2N1c1dpZGdl
dC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRhYkluZGV4ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5zZXRUYWJJbmRleC5jYWxsLmFwcGx5
KF9fdWlfRm9jdXNXaWRnZXQucHJvdG90eXBlLnNldFRhYkluZGV4LCBhcmd1bWVudHMpOworICAg
IH07CisgICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRhYkluZGV4
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzV2lkZ2V0LnByb3RvdHlwZS5z
ZXRUYWJJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9CdXR0
b25CYXNlKCkgeworfQorZnVuY3Rpb24gdWlfQnV0dG9uQmFzZShlbGVtZW50KSB7CisgICAgdmFy
IGluc3RhbmNlID0gbmV3IF9fdWlfQnV0dG9uQmFzZSgpOworICAgIGlmKGluc3RhbmNlLl9faW5p
dF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICBy
ZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191aV9CdXR0b25CYXNlX2luaXRpYWxp
emUoKSB7CisgICAgaWYoX191aV9CdXR0b25CYXNlLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVy
bjsKKyAgICBfX3VpX0J1dHRvbkJhc2UuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAg
aWYoIV9fdWlfRm9jdXNXaWRnZXQuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAgX191aV9G
b2N1c1dpZGdldF9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9CdXR0b25CYXNl
LCBfX3VpX0ZvY3VzV2lkZ2V0KTsKKyAgICBfX3VpX0J1dHRvbkJhc2UucHJvdG90eXBlLl9fY2xh
c3NfXy5fX25ld19fID0gdWlfQnV0dG9uQmFzZTsKKyAgICBfX3VpX0J1dHRvbkJhc2UucHJvdG90
eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIF9fdWlfRm9jdXNXaWRnZXQu
cHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlzLCBlbGVtZW50KTsKKyAgICB9OworICAg
IF9fdWlfQnV0dG9uQmFzZS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX0J1dHRvbkJhc2UucHJvdG90eXBlLl9faW5pdF9fLmNh
bGwuYXBwbHkoX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfQnV0dG9uQmFzZS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0J1dHRvbkJhc2UucHJvdG90eXBlLl9f
aW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9CdXR0b25CYXNlLnByb3Rv
dHlwZS5nZXRIVE1MID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRJbm5lckhUTUwo
dGhpcy5nZXRFbGVtZW50KCkpOworICAgIH07CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0SFRNTCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9C
dXR0b25CYXNlLnByb3RvdHlwZS5nZXRIVE1MLmNhbGwuYXBwbHkoX191aV9CdXR0b25CYXNlLnBy
b3RvdHlwZS5nZXRIVE1MLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9CdXR0b25CYXNl
LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5nZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIERPTV9nZXRJbm5lclRleHQodGhpcy5nZXRFbGVtZW50KCkpOworICAgIH07Cisg
ICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGV4dCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5nZXRUZXh0LmNh
bGwuYXBwbHkoX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5nZXRUZXh0LCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGV4dC51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5nZXRU
ZXh0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlw
ZS5zZXRIVE1MID0gZnVuY3Rpb24oaHRtbCkgeworICAgIERPTV9zZXRJbm5lckhUTUwodGhpcy5n
ZXRFbGVtZW50KCksIGh0bWwpOworICAgIH07CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlw
ZS5fX2NsYXNzX18uc2V0SFRNTCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9C
dXR0b25CYXNlLnByb3RvdHlwZS5zZXRIVE1MLmNhbGwuYXBwbHkoX191aV9CdXR0b25CYXNlLnBy
b3RvdHlwZS5zZXRIVE1MLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9CdXR0b25CYXNl
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5zZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dCkg
eworICAgIERPTV9zZXRJbm5lclRleHQodGhpcy5nZXRFbGVtZW50KCksIHRleHQpOworICAgIH07
CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGV4dCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5zZXRUZXh0
LmNhbGwuYXBwbHkoX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5zZXRUZXh0LCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGV4
dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5z
ZXRUZXh0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX0J1dHRvbigp
IHsKK30KK2Z1bmN0aW9uIHVpX0J1dHRvbihodG1sLCBsaXN0ZW5lcikgeworICAgIGlmICh0eXBl
b2YgaHRtbCA9PSAndW5kZWZpbmVkJykgaHRtbD1udWxsOworICAgIGlmICh0eXBlb2YgbGlzdGVu
ZXIgPT0gJ3VuZGVmaW5lZCcpIGxpc3RlbmVyPW51bGw7CisgICAgdmFyIGluc3RhbmNlID0gbmV3
IF9fdWlfQnV0dG9uKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5p
dF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30K
KworCit1aV9CdXR0b24ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgaHRtbCwg
bGlzdGVuZXIgKSB7CisgICAgaWYgKHR5cGVvZiBodG1sID09ICd1bmRlZmluZWQnKQorICAgICAg
ICBodG1sPV9fa3dhcmdzLmh0bWw7CisgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciA9PSAndW5kZWZp
bmVkJykKKyAgICAgICAgbGlzdGVuZXI9X19rd2FyZ3MubGlzdGVuZXI7CisgICAgdmFyIF9fciA9
IFtodG1sLCBsaXN0ZW5lcl07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5jdGlvbiBfX3VpX0J1
dHRvbl9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfQnV0dG9uLl9fd2FzX2luaXRpYWxpemVk
X18pIHJldHVybjsKKyAgICBfX3VpX0J1dHRvbi5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsK
KyAgICBpZighX191aV9CdXR0b25CYXNlLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9f
dWlfQnV0dG9uQmFzZV9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9CdXR0b24s
IF9fdWlfQnV0dG9uQmFzZSk7CisgICAgX191aV9CdXR0b24ucHJvdG90eXBlLl9fY2xhc3NfXy5f
X25ld19fID0gdWlfQnV0dG9uOworICAgIF9fdWlfQnV0dG9uLnByb3RvdHlwZS5fX2luaXRfXyA9
IGZ1bmN0aW9uKGh0bWwsIGxpc3RlbmVyKSB7CisgICAgaWYgKHR5cGVvZiBodG1sID09ICd1bmRl
ZmluZWQnKSBodG1sPW51bGw7CisgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciA9PSAndW5kZWZpbmVk
JykgbGlzdGVuZXI9bnVsbDsKKyAgICBfX3VpX0J1dHRvbkJhc2UucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXyh0aGlzLCBET01fY3JlYXRlQnV0dG9uKCkpOworICAgIHRoaXMuYWRqdXN0VHlw
ZSh0aGlzLmdldEVsZW1lbnQoKSk7CisgICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1CdXR0b24n
KTsKKyAgICBpZiAoaHRtbCkgeworICAgIHRoaXMuc2V0SFRNTChodG1sKTsKKyAgICB9CisgICAg
aWYgKGxpc3RlbmVyKSB7CisgICAgdGhpcy5hZGRDbGlja0xpc3RlbmVyKGxpc3RlbmVyKTsKKyAg
ICB9CisgICAgfTsKK19fdWlfQnV0dG9uLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3Mg
PSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBodG1sLCBsaXN0ZW5lciApIHsKKyAgICBpZiAodHlwZW9m
IGh0bWwgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGh0bWw9X19rd2FyZ3MuaHRtbDsKKyAgICBp
ZiAodHlwZW9mIGxpc3RlbmVyID09ICd1bmRlZmluZWQnKQorICAgICAgICBsaXN0ZW5lcj1fX2t3
YXJncy5saXN0ZW5lcjsKKyAgICB2YXIgX19yID0gW2h0bWwsIGxpc3RlbmVyXTsKKyAgICByZXR1
cm4gX19yOworfTsKKyAgICBfX3VpX0J1dHRvbi5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0J1dHRvbi5wcm90b3R5cGUuX19p
bml0X18uY2FsbC5hcHBseShfX3VpX0J1dHRvbi5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0J1dHRvbi5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0J1dHRvbi5wcm90b3R5cGUuX19pbml0
X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0J1dHRvbi5wcm90b3R5cGUuX19j
bGFzc19fLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IF9fdWlfQnV0dG9uLnByb3RvdHlwZS5fX2lu
aXRfXy5wYXJzZV9rd2FyZ3M7CisgICAgX191aV9CdXR0b24ucHJvdG90eXBlLmFkanVzdFR5cGUg
PSBmdW5jdGlvbihidXR0b24pIHsKKworICAgICAgICBpZiAoYnV0dG9uLnR5cGUgPT0gJ3N1Ym1p
dCcpIHsKKyAgICAgICAgICAgIHRyeSB7IGJ1dHRvbi5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiYnV0
dG9uIik7IH0gY2F0Y2ggKGUpIHsgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH07CisgICAg
X191aV9CdXR0b24ucHJvdG90eXBlLl9fY2xhc3NfXy5hZGp1c3RUeXBlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0J1dHRvbi5wcm90b3R5cGUuYWRqdXN0VHlwZS5jYWxsLmFw
cGx5KF9fdWlfQnV0dG9uLnByb3RvdHlwZS5hZGp1c3RUeXBlLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9CdXR0b24ucHJvdG90eXBlLl9fY2xhc3NfXy5hZGp1c3RUeXBlLnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0J1dHRvbi5wcm90b3R5cGUuYWRqdXN0VHlwZS5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQnV0dG9uLnByb3RvdHlwZS5jbGljayA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuZ2V0RWxlbWVudCgpLmNsaWNrKCk7CisgICAgfTsKKyAgICBf
X3VpX0J1dHRvbi5wcm90b3R5cGUuX19jbGFzc19fLmNsaWNrID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX0J1dHRvbi5wcm90b3R5cGUuY2xpY2suY2FsbC5hcHBseShfX3VpX0J1
dHRvbi5wcm90b3R5cGUuY2xpY2ssIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0J1dHRv
bi5wcm90b3R5cGUuX19jbGFzc19fLmNsaWNrLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0J1dHRvbi5wcm90b3R5cGUuY2xpY2suaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1
bmN0aW9uIF9fdWlfQ2hlY2tCb3goKSB7Cit9CitmdW5jdGlvbiB1aV9DaGVja0JveChsYWJlbCwg
YXNIVE1MKSB7CisgICAgaWYgKHR5cGVvZiBsYWJlbCA9PSAndW5kZWZpbmVkJykgbGFiZWw9bnVs
bDsKKyAgICBpZiAodHlwZW9mIGFzSFRNTCA9PSAndW5kZWZpbmVkJykgYXNIVE1MPWZhbHNlOwor
ICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX0NoZWNrQm94KCk7CisgICAgaWYoaW5zdGFuY2Uu
X19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOwor
ICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCit1aV9DaGVja0JveC5wYXJzZV9rd2FyZ3MgPSBm
dW5jdGlvbiAoIF9fa3dhcmdzLCBsYWJlbCwgYXNIVE1MICkgeworICAgIGlmICh0eXBlb2YgbGFi
ZWwgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGxhYmVsPV9fa3dhcmdzLmxhYmVsOworICAgIGlm
ICh0eXBlb2YgYXNIVE1MID09ICd1bmRlZmluZWQnKQorICAgICAgICBhc0hUTUw9X19rd2FyZ3Mu
YXNIVE1MOworICAgIHZhciBfX3IgPSBbbGFiZWwsIGFzSFRNTF07CisgICAgcmV0dXJuIF9fcjsK
K307CitmdW5jdGlvbiBfX3VpX0NoZWNrQm94X2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9D
aGVja0JveC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9DaGVja0JveC5f
X3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBpZighX191aV9CdXR0b25CYXNlLl9fd2Fz
X2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfQnV0dG9uQmFzZV9pbml0aWFsaXplKCk7Cisg
ICAgcHlqc19leHRlbmQoX191aV9DaGVja0JveCwgX191aV9CdXR0b25CYXNlKTsKKyAgICBfX3Vp
X0NoZWNrQm94LnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX0NoZWNrQm94OworICAg
IF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24obGFiZWwsIGFzSFRN
TCkgeworICAgIGlmICh0eXBlb2YgbGFiZWwgPT0gJ3VuZGVmaW5lZCcpIGxhYmVsPW51bGw7Cisg
ICAgaWYgKHR5cGVvZiBhc0hUTUwgPT0gJ3VuZGVmaW5lZCcpIGFzSFRNTD1mYWxzZTsKKyAgICB0
aGlzLmluaXRFbGVtZW50KERPTV9jcmVhdGVJbnB1dENoZWNrKCkpOworICAgIHRoaXMuc2V0U3R5
bGVOYW1lKCdnd3QtQ2hlY2tCb3gnKTsKKyAgICBpZiAobGFiZWwpIHsKKyAgICBpZiAoYXNIVE1M
KSB7CisgICAgdGhpcy5zZXRIVE1MKGxhYmVsKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgdGhp
cy5zZXRUZXh0KGxhYmVsKTsKKyAgICB9CisgICAgfQorICAgIH07CitfX3VpX0NoZWNrQm94LnBy
b3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBsYWJl
bCwgYXNIVE1MICkgeworICAgIGlmICh0eXBlb2YgbGFiZWwgPT0gJ3VuZGVmaW5lZCcpCisgICAg
ICAgIGxhYmVsPV9fa3dhcmdzLmxhYmVsOworICAgIGlmICh0eXBlb2YgYXNIVE1MID09ICd1bmRl
ZmluZWQnKQorICAgICAgICBhc0hUTUw9X19rd2FyZ3MuYXNIVE1MOworICAgIHZhciBfX3IgPSBb
bGFiZWwsIGFzSFRNTF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9DaGVja0JveC5w
cm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tC
b3gucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9DaGVj
a0JveC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy5wYXJz
ZV9rd2FyZ3MgPSBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3M7
CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuaW5pdEVsZW1lbnQgPSBmdW5jdGlvbihlbGVt
ZW50KSB7CisgICAgX191aV9CdXR0b25CYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18o
dGhpcywgRE9NX2NyZWF0ZVNwYW4oKSk7CisgICAgdGhpcy5pbnB1dEVsZW0gPSBlbGVtZW50Owor
ICAgIHRoaXMubGFiZWxFbGVtID0gRE9NX2NyZWF0ZUxhYmVsKCk7CisgICAgdGhpcy51bnNpbmtF
dmVudHMoX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLkZPQ1VTRVZFTlRTIHwgX191aV9F
dmVudC5wcm90b3R5cGUuX19jbGFzc19fLk9OQ0xJQ0spOworICAgIERPTV9zaW5rRXZlbnRzKHRo
aXMuaW5wdXRFbGVtLCBfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uRk9DVVNFVkVOVFMg
fCBfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05DTElDSyB8IERPTV9nZXRFdmVudHNT
dW5rKHRoaXMuaW5wdXRFbGVtKSk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRoaXMuZ2V0RWxlbWVu
dCgpLCB0aGlzLmlucHV0RWxlbSk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRoaXMuZ2V0RWxlbWVu
dCgpLCB0aGlzLmxhYmVsRWxlbSk7CisgICAgdmFyIHVpZCA9ICAoICdjaGVjaycgKyB0aGlzLmdl
dFVuaXF1ZUlEKCkgKSA7CisgICAgRE9NX3NldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbSwgJ2lk
JywgdWlkKTsKKyAgICBET01fc2V0QXR0cmlidXRlKHRoaXMubGFiZWxFbGVtLCAnaHRtbEZvcics
IHVpZCk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2NsYXNzX18uaW5p
dEVsZW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2hlY2tCb3gucHJv
dG90eXBlLmluaXRFbGVtZW50LmNhbGwuYXBwbHkoX191aV9DaGVja0JveC5wcm90b3R5cGUuaW5p
dEVsZW1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlw
ZS5fX2NsYXNzX18uaW5pdEVsZW1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
Q2hlY2tCb3gucHJvdG90eXBlLmluaXRFbGVtZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuZ2V0VW5pcXVlSUQgPSBmdW5jdGlvbigpIHsKKwor
ICAgICAgICBfQ2hlY2tCb3hfdW5pcXVlX2lkKys7CisgICAgICAgIHJldHVybiBfQ2hlY2tCb3hf
dW5pcXVlX2lkOworICAgICAgICB9OworICAgICAgICB2YXIgX0NoZWNrQm94X3VuaXF1ZV9pZD0w
OworICAgICAgICB7CisgICAgICAgIAorICAgIH07CisgICAgX191aV9DaGVja0JveC5wcm90b3R5
cGUuX19jbGFzc19fLmdldFVuaXF1ZUlEID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX0NoZWNrQm94LnByb3RvdHlwZS5nZXRVbmlxdWVJRC5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tC
b3gucHJvdG90eXBlLmdldFVuaXF1ZUlELCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9D
aGVja0JveC5wcm90b3R5cGUuX19jbGFzc19fLmdldFVuaXF1ZUlELnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5nZXRVbmlxdWVJRC5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLmdldEhUTUwgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldElubmVySFRNTCh0aGlzLmxhYmVsRWxlbSk7Cisg
ICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SFRNTCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9DaGVja0JveC5wcm90b3R5cGUuZ2V0SFRN
TC5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLmdldEhUTUwsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SFRNTC51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuZ2V0SFRN
TC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLmdl
dE5hbWUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldEF0dHJpYnV0ZSh0aGlzLmlu
cHV0RWxlbSwgJ25hbWUnKTsKKyAgICB9OworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXROYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NoZWNr
Qm94LnByb3RvdHlwZS5nZXROYW1lLmNhbGwuYXBwbHkoX191aV9DaGVja0JveC5wcm90b3R5cGUu
Z2V0TmFtZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBl
Ll9fY2xhc3NfXy5nZXROYW1lLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NoZWNr
Qm94LnByb3RvdHlwZS5nZXROYW1lLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9D
aGVja0JveC5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01f
Z2V0SW5uZXJUZXh0KHRoaXMubGFiZWxFbGVtKTsKKyAgICB9OworICAgIF9fdWlfQ2hlY2tCb3gu
cHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5nZXRUZXh0LmNhbGwuYXBwbHkoX191aV9DaGVja0Jv
eC5wcm90b3R5cGUuZ2V0VGV4dCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2hlY2tC
b3gucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUZXh0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5nZXRUZXh0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0Q2hlY2tlZCA9IGZ1bmN0aW9uKGNoZWNr
ZWQpIHsKKyAgICBET01fc2V0Qm9vbGVhbkF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbSwgJ2NoZWNr
ZWQnLCBjaGVja2VkKTsKKyAgICBET01fc2V0Qm9vbGVhbkF0dHJpYnV0ZSh0aGlzLmlucHV0RWxl
bSwgJ2RlZmF1bHRDaGVja2VkJywgY2hlY2tlZCk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q2hlY2tlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0Q2hlY2tlZC5jYWxsLmFwcGx5KF9fdWlf
Q2hlY2tCb3gucHJvdG90eXBlLnNldENoZWNrZWQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q2hlY2tlZC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0Q2hlY2tlZC5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLmlzQ2hlY2tlZCA9
IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmF0dGFjaGVkKSB7CisgICAgdmFyIHByb3BOYW1l
ID0gJ2NoZWNrZWQnOworICAgIH0KKyAgICBlbHNlIHsKKyAgICB2YXIgcHJvcE5hbWUgPSAnZGVm
YXVsdENoZWNrZWQnOworICAgIH0KKyAgICByZXR1cm4gRE9NX2dldEJvb2xlYW5BdHRyaWJ1dGUo
dGhpcy5pbnB1dEVsZW0sIHByb3BOYW1lKTsKKyAgICB9OworICAgIF9fdWlfQ2hlY2tCb3gucHJv
dG90eXBlLl9fY2xhc3NfXy5pc0NoZWNrZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLmlzQ2hlY2tlZC5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tC
b3gucHJvdG90eXBlLmlzQ2hlY2tlZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2hl
Y2tCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5pc0NoZWNrZWQudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLmlzQ2hlY2tlZC5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLmlzRW5hYmxlZCA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiAhKERPTV9nZXRCb29sZWFuQXR0cmlidXRlKHRoaXMuaW5wdXRFbGVt
LCAnZGlzYWJsZWQnKSk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5fX2Ns
YXNzX18uaXNFbmFibGVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NoZWNr
Qm94LnByb3RvdHlwZS5pc0VuYWJsZWQuY2FsbC5hcHBseShfX3VpX0NoZWNrQm94LnByb3RvdHlw
ZS5pc0VuYWJsZWQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3Rv
dHlwZS5fX2NsYXNzX18uaXNFbmFibGVkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0NoZWNrQm94LnByb3RvdHlwZS5pc0VuYWJsZWQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5zZXRFbmFibGVkID0gZnVuY3Rpb24oZW5hYmxlZCkg
eworICAgIERPTV9zZXRCb29sZWFuQXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtLCAnZGlzYWJsZWQn
LCAhKGVuYWJsZWQpKTsKKyAgICB9OworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRFbmFibGVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NoZWNr
Qm94LnByb3RvdHlwZS5zZXRFbmFibGVkLmNhbGwuYXBwbHkoX191aV9DaGVja0JveC5wcm90b3R5
cGUuc2V0RW5hYmxlZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2hlY2tCb3gucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRFbmFibGVkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0NoZWNrQm94LnByb3RvdHlwZS5zZXRFbmFibGVkLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0Rm9jdXMgPSBmdW5jdGlvbihmb2N1c2Vk
KSB7CisgICAgaWYgKGZvY3VzZWQpIHsKKyAgICBfX3VpX0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNz
X18uZm9jdXModGhpcywgdGhpcy5pbnB1dEVsZW0pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICBf
X3VpX0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNzX18uYmx1cih0aGlzLCB0aGlzLmlucHV0RWxlbSk7
CisgICAgfQorICAgIH07CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuX19jbGFzc19fLnNl
dEZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NoZWNrQm94LnByb3Rv
dHlwZS5zZXRGb2N1cy5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLnNldEZvY3Vz
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuX19jbGFz
c19fLnNldEZvY3VzLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NoZWNrQm94LnBy
b3RvdHlwZS5zZXRGb2N1cy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2hlY2tC
b3gucHJvdG90eXBlLnNldEhUTUwgPSBmdW5jdGlvbihodG1sKSB7CisgICAgRE9NX3NldElubmVy
SFRNTCh0aGlzLmxhYmVsRWxlbSwgaHRtbCk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnBy
b3RvdHlwZS5fX2NsYXNzX18uc2V0SFRNTCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0SFRNTC5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tCb3gu
cHJvdG90eXBlLnNldEhUTUwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0SFRNTC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbihuYW1lKSB7Cisg
ICAgRE9NX3NldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbSwgJ25hbWUnLCBuYW1lKTsKKyAgICB9
OworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5zZXROYW1lID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5zZXROYW1lLmNh
bGwuYXBwbHkoX191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0TmFtZSwgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5zZXROYW1lLnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5zZXROYW1lLmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuc2V0VGFi
SW5kZXggPSBmdW5jdGlvbihpbmRleCkgeworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRUYWJJbmRleCh0aGlzLCB0aGlzLmlucHV0RWxlbSwgaW5kZXgpOworICAgIH07Cisg
ICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRhYkluZGV4ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5zZXRUYWJJbmRl
eC5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLnNldFRhYkluZGV4LCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9DaGVja0JveC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRh
YkluZGV4LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlw
ZS5zZXRUYWJJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2hlY2tCb3gu
cHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgRE9NX3NldElubmVyVGV4
dCh0aGlzLmxhYmVsRWxlbSwgdGV4dCk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3Rv
dHlwZS5fX2NsYXNzX18uc2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9DaGVja0JveC5wcm90b3R5cGUuc2V0VGV4dC5jYWxsLmFwcGx5KF9fdWlfQ2hlY2tCb3gucHJv
dG90eXBlLnNldFRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NoZWNrQm94LnBy
b3RvdHlwZS5fX2NsYXNzX18uc2V0VGV4dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9DaGVja0JveC5wcm90b3R5cGUuc2V0VGV4dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfQ2hlY2tCb3gucHJvdG90eXBlLm9uRGV0YWNoID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5zZXRDaGVja2VkKHRoaXMuaXNDaGVja2VkKCkpOworICAgIF9fdWlfQnV0dG9uQmFzZS5wcm90
b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoKHRoaXMpOworICAgIH07CisgICAgX191aV9DaGVja0Jv
eC5wcm90b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5vbkRldGFjaC5jYWxsLmFwcGx5KF9fdWlfQ2hl
Y2tCb3gucHJvdG90eXBlLm9uRGV0YWNoLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9D
aGVja0JveC5wcm90b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX0NoZWNrQm94LnByb3RvdHlwZS5vbkRldGFjaC5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworfQorZnVuY3Rpb24gX191aV9SYWRpb0J1dHRvbigpIHsKK30KK2Z1bmN0aW9uIHVp
X1JhZGlvQnV0dG9uKGdyb3VwLCBsYWJlbCwgYXNIVE1MKSB7CisgICAgaWYgKHR5cGVvZiBsYWJl
bCA9PSAndW5kZWZpbmVkJykgbGFiZWw9bnVsbDsKKyAgICBpZiAodHlwZW9mIGFzSFRNTCA9PSAn
dW5kZWZpbmVkJykgYXNIVE1MPWZhbHNlOworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX1Jh
ZGlvQnV0dG9uKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9f
LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwor
Cit1aV9SYWRpb0J1dHRvbi5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBncm91
cCwgbGFiZWwsIGFzSFRNTCApIHsKKyAgICBpZiAodHlwZW9mIGxhYmVsID09ICd1bmRlZmluZWQn
KQorICAgICAgICBsYWJlbD1fX2t3YXJncy5sYWJlbDsKKyAgICBpZiAodHlwZW9mIGFzSFRNTCA9
PSAndW5kZWZpbmVkJykKKyAgICAgICAgYXNIVE1MPV9fa3dhcmdzLmFzSFRNTDsKKyAgICB2YXIg
X19yID0gW2dyb3VwLCBsYWJlbCwgYXNIVE1MXTsKKyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0
aW9uIF9fdWlfUmFkaW9CdXR0b25faW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX1JhZGlvQnV0
dG9uLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1JhZGlvQnV0dG9uLl9f
d2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX0NoZWNrQm94Ll9fd2FzX2lu
aXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfQ2hlY2tCb3hfaW5pdGlhbGl6ZSgpOworICAgIHB5
anNfZXh0ZW5kKF9fdWlfUmFkaW9CdXR0b24sIF9fdWlfQ2hlY2tCb3gpOworICAgIF9fdWlfUmFk
aW9CdXR0b24ucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfUmFkaW9CdXR0b247Cisg
ICAgX191aV9SYWRpb0J1dHRvbi5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbihncm91cCwg
bGFiZWwsIGFzSFRNTCkgeworICAgIGlmICh0eXBlb2YgbGFiZWwgPT0gJ3VuZGVmaW5lZCcpIGxh
YmVsPW51bGw7CisgICAgaWYgKHR5cGVvZiBhc0hUTUwgPT0gJ3VuZGVmaW5lZCcpIGFzSFRNTD1m
YWxzZTsKKyAgICB0aGlzLmluaXRFbGVtZW50KERPTV9jcmVhdGVJbnB1dFJhZGlvKGdyb3VwKSk7
CisgICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1SYWRpb0J1dHRvbicpOworICAgIGlmIChsYWJl
bCkgeworICAgIGlmIChhc0hUTUwpIHsKKyAgICB0aGlzLnNldEhUTUwobGFiZWwpOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICB0aGlzLnNldFRleHQobGFiZWwpOworICAgIH0KKyAgICB9CisgICAg
fTsKK19fdWlfUmFkaW9CdXR0b24ucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IGZ1
bmN0aW9uICggX19rd2FyZ3MsIGdyb3VwLCBsYWJlbCwgYXNIVE1MICkgeworICAgIGlmICh0eXBl
b2YgbGFiZWwgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGxhYmVsPV9fa3dhcmdzLmxhYmVsOwor
ICAgIGlmICh0eXBlb2YgYXNIVE1MID09ICd1bmRlZmluZWQnKQorICAgICAgICBhc0hUTUw9X19r
d2FyZ3MuYXNIVE1MOworICAgIHZhciBfX3IgPSBbZ3JvdXAsIGxhYmVsLCBhc0hUTUxdOworICAg
IHJldHVybiBfX3I7Cit9OworICAgIF9fdWlfUmFkaW9CdXR0b24ucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9SYWRpb0J1dHRv
bi5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX1JhZGlvQnV0dG9uLnByb3RvdHlw
ZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUmFkaW9CdXR0b24ucHJv
dG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9SYWRpb0J1dHRvbi5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1JhZGlvQnV0dG9uLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18ucGFyc2Vf
a3dhcmdzID0gX191aV9SYWRpb0J1dHRvbi5wcm90b3R5cGUuX19pbml0X18ucGFyc2Vfa3dhcmdz
OworfQorZnVuY3Rpb24gX191aV9Db21wb3NpdGUoKSB7Cit9CitmdW5jdGlvbiB1aV9Db21wb3Np
dGUoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfQ29tcG9zaXRlKCk7CisgICAgaWYo
aW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1
bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBfX3VpX0NvbXBv
c2l0ZV9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfQ29tcG9zaXRlLl9fd2FzX2luaXRpYWxp
emVkX18pIHJldHVybjsKKyAgICBfX3VpX0NvbXBvc2l0ZS5fX3dhc19pbml0aWFsaXplZF9fID0g
dHJ1ZTsKKyAgICBpZighX191aV9XaWRnZXQuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAg
X191aV9XaWRnZXRfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfQ29tcG9zaXRl
LCBfX3VpX1dpZGdldCk7CisgICAgX191aV9Db21wb3NpdGUucHJvdG90eXBlLl9fY2xhc3NfXy5f
X25ld19fID0gdWlfQ29tcG9zaXRlOworICAgIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5fX2lu
aXRfXyA9IGZ1bmN0aW9uKCkgeworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18u
X19pbml0X18odGhpcyk7CisgICAgdGhpcy53aWRnZXQgPSBudWxsOworICAgIH07CisgICAgX191
aV9Db21wb3NpdGUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9Db21wb3NpdGUucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBw
bHkoX191aV9Db21wb3NpdGUucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9Db21wb3NpdGUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9Db21wb3NpdGUucHJvdG90eXBlLl9faW5pdF9fLmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Db21wb3NpdGUucHJvdG90eXBlLmluaXRX
aWRnZXQgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICBpZiAoKHRoaXMud2lkZ2V0ICE9IG51bGwp
KSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICB3aWRnZXQucmVtb3ZlRnJvbVBhcmVudCgpOwor
ICAgIHRoaXMuc2V0RWxlbWVudCh3aWRnZXQuZ2V0RWxlbWVudCgpKTsKKyAgICB0aGlzLndpZGdl
dCA9IHdpZGdldDsKKyAgICB3aWRnZXQuc2V0UGFyZW50KHRoaXMpOworICAgIH07CisgICAgX191
aV9Db21wb3NpdGUucHJvdG90eXBlLl9fY2xhc3NfXy5pbml0V2lkZ2V0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0NvbXBvc2l0ZS5wcm90b3R5cGUuaW5pdFdpZGdldC5jYWxs
LmFwcGx5KF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5pbml0V2lkZ2V0LCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9Db21wb3NpdGUucHJvdG90eXBlLl9fY2xhc3NfXy5pbml0V2lkZ2V0
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NvbXBvc2l0ZS5wcm90b3R5cGUuaW5p
dFdpZGdldC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ29tcG9zaXRlLnByb3Rv
dHlwZS5vbkF0dGFjaCA9IGZ1bmN0aW9uKCkgeworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5f
X2NsYXNzX18ub25BdHRhY2godGhpcyk7CisgICAgdGhpcy53aWRnZXQub25BdHRhY2goKTsKKyAg
ICB9OworICAgIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5fX2NsYXNzX18ub25BdHRhY2ggPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5vbkF0
dGFjaC5jYWxsLmFwcGx5KF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5vbkF0dGFjaCwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5fX2NsYXNzX18ub25B
dHRhY2gudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlw
ZS5vbkF0dGFjaC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ29tcG9zaXRlLnBy
b3RvdHlwZS5vbkRldGFjaCA9IGZ1bmN0aW9uKCkgeworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlw
ZS5fX2NsYXNzX18ub25EZXRhY2godGhpcyk7CisgICAgdGhpcy53aWRnZXQub25EZXRhY2goKTsK
KyAgICB9OworICAgIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5fX2NsYXNzX18ub25EZXRhY2gg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5v
bkRldGFjaC5jYWxsLmFwcGx5KF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5vbkRldGFjaCwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5fX2NsYXNzX18u
b25EZXRhY2gudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ29tcG9zaXRlLnByb3Rv
dHlwZS5vbkRldGFjaC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ29tcG9zaXRl
LnByb3RvdHlwZS5zZXRXaWRnZXQgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICB0aGlzLmluaXRX
aWRnZXQod2lkZ2V0KTsKKyAgICB9OworICAgIF9fdWlfQ29tcG9zaXRlLnByb3RvdHlwZS5fX2Ns
YXNzX18uc2V0V2lkZ2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NvbXBv
c2l0ZS5wcm90b3R5cGUuc2V0V2lkZ2V0LmNhbGwuYXBwbHkoX191aV9Db21wb3NpdGUucHJvdG90
eXBlLnNldFdpZGdldCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ29tcG9zaXRlLnBy
b3RvdHlwZS5fX2NsYXNzX18uc2V0V2lkZ2V0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0NvbXBvc2l0ZS5wcm90b3R5cGUuc2V0V2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7
Cit9CitmdW5jdGlvbiBfX3VpX1BhbmVsKCkgeworfQorZnVuY3Rpb24gdWlfUGFuZWwoKSB7Cisg
ICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfUGFuZWwoKTsKKyAgICBpZihpbnN0YW5jZS5fX2lu
aXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAg
cmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfUGFuZWxfaW5pdGlhbGl6ZSgp
IHsKKyAgICBpZihfX3VpX1BhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBf
X3VpX1BhbmVsLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX1dpZGdl
dC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX1dpZGdldF9pbml0aWFsaXplKCk7
CisgICAgcHlqc19leHRlbmQoX191aV9QYW5lbCwgX191aV9XaWRnZXQpOworICAgIF9fdWlfUGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfUGFuZWw7CisgICAgX191aV9QYW5l
bC5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICBfX3VpX1dpZGdldC5wcm90
b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMpOworICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcg
cHlqc2xpYl9MaXN0KFtdKTsKKyAgICB9OworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9QYW5lbC5w
cm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX1BhbmVsLnByb3RvdHlwZS5fX2luaXRf
XywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9QYW5lbC5wcm90b3R5
cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BhbmVsLnByb3Rv
dHlwZS5hZGQgPSBmdW5jdGlvbigpIHsKKyAgICBjb25zb2xlLmVycm9yKCdUaGlzIHBhbmVsIGRv
ZXMgbm90IHN1cHBvcnQgbm8tYXJnIGFkZCgpJyk7CisgICAgfTsKKyAgICBfX3VpX1BhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18uYWRkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3Vp
X1BhbmVsLnByb3RvdHlwZS5hZGQuY2FsbC5hcHBseShfX3VpX1BhbmVsLnByb3RvdHlwZS5hZGQs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
YWRkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5hZGQu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5jbGVhciA9
IGZ1bmN0aW9uKCkgeworCisgICAgICAgIHZhciBfX2NoaWxkID0gbGlzdCh0aGlzKS5fX2l0ZXJf
XygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY2hpbGQgPSBfX2NoaWxkLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgCisgICAgdGhpcy5yZW1vdGUoY2hpbGQpOworCisgICAgICAgICAgICB9CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAg
ICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgIH07CisgICAgX191aV9QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmNsZWFyID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1BhbmVsLnByb3RvdHlwZS5jbGVhci5jYWxs
LmFwcGx5KF9fdWlfUGFuZWwucHJvdG90eXBlLmNsZWFyLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmNsZWFyLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5jbGVhci5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLmRpc293biA9IGZ1bmN0aW9uKHdpZGdldCkg
eworICAgIGlmICgod2lkZ2V0LmdldFBhcmVudCgpICE9IHRoaXMpKSB7CisgICAgY29uc29sZS5l
cnJvcignd2lkZ2V0ICVvIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgcGFuZWwgJW8nLCB3aWRnZXQs
IHRoaXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICB2YXIgZWxlbWVudCA9IHdpZGdldC5nZXRF
bGVtZW50KCk7CisgICAgd2lkZ2V0LnNldFBhcmVudChudWxsKTsKKyAgICB2YXIgcGFyZW50RWxl
bWVudCA9IERPTV9nZXRQYXJlbnQoZWxlbWVudCk7CisgICAgaWYgKHBhcmVudEVsZW1lbnQpIHsK
KyAgICBET01fcmVtb3ZlQ2hpbGQocGFyZW50RWxlbWVudCwgZWxlbWVudCk7CisgICAgfQorICAg
IH0KKyAgICB9OworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5kaXNvd24gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUGFuZWwucHJvdG90eXBlLmRpc293bi5j
YWxsLmFwcGx5KF9fdWlfUGFuZWwucHJvdG90eXBlLmRpc293biwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5kaXNvd24udW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLmRpc293bi5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLmFkb3B0ID0gZnVuY3Rpb24od2lk
Z2V0LCBjb250YWluZXIpIHsKKyAgICB3aWRnZXQucmVtb3ZlRnJvbVBhcmVudCgpOworICAgIGlm
IChjb250YWluZXIpIHsKKyAgICBET01fYXBwZW5kQ2hpbGQoY29udGFpbmVyLCB3aWRnZXQuZ2V0
RWxlbWVudCgpKTsKKyAgICB9CisgICAgd2lkZ2V0LnNldFBhcmVudCh0aGlzKTsKKyAgICB9Owor
ICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZG9wdCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9QYW5lbC5wcm90b3R5cGUuYWRvcHQuY2FsbC5hcHBseShfX3Vp
X1BhbmVsLnByb3RvdHlwZS5hZG9wdCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZG9wdC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9QYW5lbC5wcm90b3R5cGUuYWRvcHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1BhbmVsLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICB9Owor
ICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfUGFuZWwucHJvdG90eXBlLnJlbW92ZS5jYWxsLmFwcGx5KF9f
dWlfUGFuZWwucHJvdG90eXBlLnJlbW92ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLnJlbW92ZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLm9uQXR0YWNoID0gZnVuY3Rpb24oKSB7CisgICAgX191
aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5vbkF0dGFjaCh0aGlzKTsKKworICAgICAgICB2
YXIgX19jaGlsZCA9IHRoaXMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX19jaGlsZC5uZXh0
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGNoaWxkLm9uQXR0YWNoKCk7CisK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUg
IT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18ub25BdHRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
UGFuZWwucHJvdG90eXBlLm9uQXR0YWNoLmNhbGwuYXBwbHkoX191aV9QYW5lbC5wcm90b3R5cGUu
b25BdHRhY2gsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5f
X2NsYXNzX18ub25BdHRhY2gudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUGFuZWwu
cHJvdG90eXBlLm9uQXR0YWNoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9QYW5l
bC5wcm90b3R5cGUub25EZXRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICBfX3VpX1dpZGdldC5wcm90
b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoKHRoaXMpOworCisgICAgICAgIHZhciBfX2NoaWxkID0g
dGhpcy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBfX2NoaWxkLm5leHQoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgCisgICAgY2hpbGQub25EZXRhY2goKTsKKworICAgICAgICAgICAg
fQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICB9OworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5v
bkRldGFjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9QYW5lbC5wcm90b3R5
cGUub25EZXRhY2guY2FsbC5hcHBseShfX3VpX1BhbmVsLnByb3RvdHlwZS5vbkRldGFjaCwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5vbkRl
dGFjaC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9QYW5lbC5wcm90b3R5cGUub25E
ZXRhY2guaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5f
X2l0ZXJfXyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLl9faXRlcl9f
KCk7CisgICAgfTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pdGVyX18g
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUGFuZWwucHJvdG90eXBlLl9faXRl
cl9fLmNhbGwuYXBwbHkoX191aV9QYW5lbC5wcm90b3R5cGUuX19pdGVyX18sIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pdGVyX18udW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUGFuZWwucHJvdG90eXBlLl9faXRlcl9fLmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX0NlbGxGb3JtYXR0ZXIoKSB7
Cit9CitmdW5jdGlvbiB1aV9DZWxsRm9ybWF0dGVyKG91dGVyKSB7CisgICAgdmFyIGluc3RhbmNl
ID0gbmV3IF9fdWlfQ2VsbEZvcm1hdHRlcigpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBp
bnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4g
aW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191aV9DZWxsRm9ybWF0dGVyX2luaXRpYWxpemUo
KSB7CisgICAgaWYoX191aV9DZWxsRm9ybWF0dGVyLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVy
bjsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7Cisg
ICAgcHlqc19leHRlbmQoX191aV9DZWxsRm9ybWF0dGVyLCBfX3B5anNsaWJfT2JqZWN0KTsKKyAg
ICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfQ2Vs
bEZvcm1hdHRlcjsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9faW5pdF9fID0g
ZnVuY3Rpb24ob3V0ZXIpIHsKKyAgICB0aGlzLm91dGVyID0gb3V0ZXI7CisgICAgfTsKKyAgICBf
X3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2luaXRf
Xy5jYWxsLmFwcGx5KF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19pbml0X18sIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVy
LnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2Vs
bEZvcm1hdHRlci5wcm90b3R5cGUuYWRkU3R5bGVOYW1lID0gZnVuY3Rpb24ocm93LCBjb2x1bW4s
IHN0eWxlTmFtZSkgeworICAgIHRoaXMub3V0ZXIucHJlcGFyZUNlbGwocm93LCBjb2x1bW4pOwor
ICAgIHRoaXMub3V0ZXIuc2V0U3R5bGVOYW1lKHRoaXMuZ2V0RWxlbWVudChyb3csIGNvbHVtbiks
IHN0eWxlTmFtZSwgdHJ1ZSk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90
eXBlLl9fY2xhc3NfXy5hZGRTdHlsZU5hbWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuYWRkU3R5bGVOYW1lLmNhbGwuYXBwbHkoX191
aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5hZGRTdHlsZU5hbWUsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRTdHlsZU5h
bWUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5
cGUuYWRkU3R5bGVOYW1lLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9y
bWF0dGVyLnByb3RvdHlwZS5nZXRFbGVtZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAg
ICB0aGlzLm91dGVyLmNoZWNrQ2VsbEJvdW5kcyhyb3csIGNvbHVtbik7CisgICAgcmV0dXJuIERP
TV9nZXRDaGlsZCh0aGlzLm91dGVyLnJvd0Zvcm1hdHRlci5nZXRSb3codGhpcy5vdXRlci5ib2R5
RWxlbSwgcm93KSwgY29sdW1uKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90
b3R5cGUuX19jbGFzc19fLmdldEVsZW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuZ2V0RWxlbWVudC5jYWxsLmFwcGx5KF9fdWlf
Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUuZ2V0RWxlbWVudCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLmdldEVsZW1lbnQudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuZ2V0
RWxlbWVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5w
cm90b3R5cGUuZ2V0U3R5bGVOYW1lID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICByZXR1
cm4gRE9NX2dldEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQocm93LCBjb2x1bW4pLCAnY2xhc3NO
YW1lJyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRTdHlsZU5hbWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbEZv
cm1hdHRlci5wcm90b3R5cGUuZ2V0U3R5bGVOYW1lLmNhbGwuYXBwbHkoX191aV9DZWxsRm9ybWF0
dGVyLnByb3RvdHlwZS5nZXRTdHlsZU5hbWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTdHlsZU5hbWUudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuZ2V0U3R5bGVO
YW1lLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3Rv
dHlwZS5pc1Zpc2libGUgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgIHZhciBlbGVtZW50
ID0gdGhpcy5nZXRFbGVtZW50KHJvdywgY29sdW1uKTsKKyAgICByZXR1cm4gdGhpcy5vdXRlci5p
c1Zpc2libGUoZWxlbWVudCk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90
eXBlLl9fY2xhc3NfXy5pc1Zpc2libGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuaXNWaXNpYmxlLmNhbGwuYXBwbHkoX191aV9DZWxs
Rm9ybWF0dGVyLnByb3RvdHlwZS5pc1Zpc2libGUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5pc1Zpc2libGUudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuaXNWaXNpYmxl
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlw
ZS5yZW1vdmVTdHlsZU5hbWUgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgc3R5bGVOYW1lKSB7Cisg
ICAgdGhpcy5jaGVja0NlbGxCb3VuZHMocm93LCBjb2x1bW4pOworICAgIHRoaXMub3V0ZXIuc2V0
U3R5bGVOYW1lKHRoaXMuZ2V0RWxlbWVudChyb3csIGNvbHVtbiksIHN0eWxlTmFtZSwgZmFsc2Up
OworICAgIH07CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18ucmVt
b3ZlU3R5bGVOYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NlbGxGb3Jt
YXR0ZXIucHJvdG90eXBlLnJlbW92ZVN0eWxlTmFtZS5jYWxsLmFwcGx5KF9fdWlfQ2VsbEZvcm1h
dHRlci5wcm90b3R5cGUucmVtb3ZlU3R5bGVOYW1lLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlU3R5bGVOYW1lLnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLnJl
bW92ZVN0eWxlTmFtZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1h
dHRlci5wcm90b3R5cGUuc2V0QWxpZ25tZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGhBbGln
biwgdkFsaWduKSB7CisgICAgdGhpcy5zZXRIb3Jpem9udGFsQWxpZ25tZW50KHJvdywgY29sdW1u
LCBoQWxpZ24pOworICAgIHRoaXMuc2V0VmVydGljYWxBbGlnbm1lbnQocm93LCBjb2x1bW4sIHZB
bGlnbik7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3Nf
Xy5zZXRBbGlnbm1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbEZv
cm1hdHRlci5wcm90b3R5cGUuc2V0QWxpZ25tZW50LmNhbGwuYXBwbHkoX191aV9DZWxsRm9ybWF0
dGVyLnByb3RvdHlwZS5zZXRBbGlnbm1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRBbGlnbm1lbnQudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0QWxpZ25t
ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3Rv
dHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgaGVpZ2h0KSB7CisgICAgdGhp
cy5vdXRlci5wcmVwYXJlQ2VsbChyb3csIGNvbHVtbik7CisgICAgdmFyIGVsZW1lbnQgPSB0aGlz
LmdldENlbGxFbGVtZW50KHRoaXMub3V0ZXIuYm9keUVsZW0sIHJvdywgY29sdW1uKTsKKyAgICBE
T01fc2V0U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCwgJ2hlaWdodCcsIGhlaWdodCk7CisgICAgfTsK
KyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIZWlnaHQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUu
c2V0SGVpZ2h0LmNhbGwuYXBwbHkoX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRIZWln
aHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRIZWlnaHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2Vs
bEZvcm1hdHRlci5wcm90b3R5cGUuc2V0SGVpZ2h0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRIb3Jpem9udGFsQWxpZ25tZW50ID0g
ZnVuY3Rpb24ocm93LCBjb2x1bW4sIGFsaWduKSB7CisgICAgdGhpcy5vdXRlci5wcmVwYXJlQ2Vs
bChyb3csIGNvbHVtbik7CisgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdldENlbGxFbGVtZW50KHRo
aXMub3V0ZXIuYm9keUVsZW0sIHJvdywgY29sdW1uKTsKKyAgICBET01fc2V0QXR0cmlidXRlKGVs
ZW1lbnQsICdhbGlnbicsIGFsaWduKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5w
cm90b3R5cGUuX19jbGFzc19fLnNldEhvcml6b250YWxBbGlnbm1lbnQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0SG9yaXpvbnRh
bEFsaWdubWVudC5jYWxsLmFwcGx5KF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0SG9y
aXpvbnRhbEFsaWdubWVudCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1h
dHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldEhvcml6b250YWxBbGlnbm1lbnQudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0SG9yaXpv
bnRhbEFsaWdubWVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1h
dHRlci5wcm90b3R5cGUuc2V0U3R5bGVOYW1lID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIHN0eWxl
TmFtZSkgeworICAgIHRoaXMub3V0ZXIucHJlcGFyZUNlbGwocm93LCBjb2x1bW4pOworICAgIHRo
aXMuc2V0QXR0cihyb3csIGNvbHVtbiwgJ2NsYXNzTmFtZScsIHN0eWxlTmFtZSk7CisgICAgfTsK
KyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRTdHlsZU5hbWUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5
cGUuc2V0U3R5bGVOYW1lLmNhbGwuYXBwbHkoX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5z
ZXRTdHlsZU5hbWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIu
cHJvdG90eXBlLl9fY2xhc3NfXy5zZXRTdHlsZU5hbWUudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0U3R5bGVOYW1lLmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRWZXJ0aWNh
bEFsaWdubWVudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBhbGlnbikgeworICAgIHRoaXMub3V0
ZXIucHJlcGFyZUNlbGwocm93LCBjb2x1bW4pOworICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0
aGlzLmdldENlbGxFbGVtZW50KHRoaXMub3V0ZXIuYm9keUVsZW0sIHJvdywgY29sdW1uKSwgJ3Zl
cnRpY2FsQWxpZ24nLCBhbGlnbik7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRWZXJ0aWNhbEFsaWdubWVudCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRWZXJ0aWNhbEFsaWdu
bWVudC5jYWxsLmFwcGx5KF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0VmVydGljYWxB
bGlnbm1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRWZXJ0aWNhbEFsaWdubWVudC51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRWZXJ0aWNhbEFsaWdubWVu
dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5
cGUuc2V0VmlzaWJsZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCB2aXNpYmxlKSB7CisgICAgdmFy
IGVsZW1lbnQgPSB0aGlzLmVuc3VyZUVsZW1lbnQocm93LCBjb2x1bW4pOworICAgIHRoaXMub3V0
ZXIuc2V0VmlzaWJsZShlbGVtZW50LCB2aXNpYmxlKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZv
cm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldFZpc2libGUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0VmlzaWJsZS5jYWxs
LmFwcGx5KF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0VmlzaWJsZSwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNl
dFZpc2libGUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5w
cm90b3R5cGUuc2V0VmlzaWJsZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2Vs
bEZvcm1hdHRlci5wcm90b3R5cGUuc2V0V2lkdGggPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgd2lk
dGgpIHsKKyAgICB0aGlzLm91dGVyLnByZXBhcmVDZWxsKHJvdywgY29sdW1uKTsKKyAgICBET01f
c2V0U3R5bGVBdHRyaWJ1dGUodGhpcy5nZXRDZWxsRWxlbWVudCh0aGlzLm91dGVyLmJvZHlFbGVt
LCByb3csIGNvbHVtbiksICd3aWR0aCcsIHdpZHRoKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZv
cm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldFdpZHRoID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLnNldFdpZHRoLmNhbGwuYXBw
bHkoX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRXaWR0aCwgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldFdpZHRo
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBl
LnNldFdpZHRoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVy
LnByb3RvdHlwZS5zZXRXb3JkV3JhcCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCB3cmFwKSB7Cisg
ICAgdGhpcy5vdXRlci5wcmVwYXJlQ2VsbChyb3csIGNvbHVtbik7CisgICAgaWYgKHdyYXApIHsK
KyAgICB2YXIgd3JhcF9zdHIgPSAnJzsKKyAgICB9CisgICAgZWxzZSB7CisgICAgdmFyIHdyYXBf
c3RyID0gJ25vd3JhcCc7CisgICAgfQorICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0aGlzLmdl
dEVsZW1lbnQocm93LCBjb2x1bW4pLCAnd2hpdGVTcGFjZScsIHdyYXBfc3RyKTsKKyAgICB9Owor
ICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldFdvcmRXcmFwID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBl
LnNldFdvcmRXcmFwLmNhbGwuYXBwbHkoX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRX
b3JkV3JhcCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90
b3R5cGUuX19jbGFzc19fLnNldFdvcmRXcmFwLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLnNldFdvcmRXcmFwLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5nZXRDZWxsRWxlbWVudCA9
IGZ1bmN0aW9uKHRhYmxlLCByb3csIGNvbCkgeworCisgICAgICAgIHZhciBvdXQgPSB0YWJsZS5y
b3dzW3Jvd10uY2VsbHNbY29sXTsKKyAgICAgICAgcmV0dXJuIChvdXQgPT0gbnVsbCA/IG51bGwg
OiBvdXQpOworICAgICAgICAKKyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5
cGUuX19jbGFzc19fLmdldENlbGxFbGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldENlbGxFbGVtZW50LmNhbGwuYXBwbHko
X191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5nZXRDZWxsRWxlbWVudCwgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLmdldENl
bGxFbGVtZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIu
cHJvdG90eXBlLmdldENlbGxFbGVtZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5nZXRSYXdFbGVtZW50ID0gZnVuY3Rpb24ocm93LCBj
b2x1bW4pIHsKKyAgICByZXR1cm4gdGhpcy5nZXRDZWxsRWxlbWVudCh0aGlzLm91dGVyLmJvZHlF
bGVtLCByb3csIGNvbHVtbik7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90
eXBlLl9fY2xhc3NfXy5nZXRSYXdFbGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldFJhd0VsZW1lbnQuY2FsbC5hcHBseShf
X3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldFJhd0VsZW1lbnQsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRSYXdF
bGVtZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJv
dG90eXBlLmdldFJhd0VsZW1lbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Nl
bGxGb3JtYXR0ZXIucHJvdG90eXBlLmVuc3VyZUVsZW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVt
bikgeworICAgIHRoaXMub3V0ZXIucHJlcGFyZUNlbGwocm93LCBjb2x1bW4pOworICAgIHJldHVy
biBET01fZ2V0Q2hpbGQodGhpcy5vdXRlci5yb3dGb3JtYXR0ZXIuZW5zdXJlRWxlbWVudChyb3cp
LCBjb2x1bW4pOworICAgIH07CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2Ns
YXNzX18uZW5zdXJlRWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9D
ZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5lbnN1cmVFbGVtZW50LmNhbGwuYXBwbHkoX191aV9DZWxs
Rm9ybWF0dGVyLnByb3RvdHlwZS5lbnN1cmVFbGVtZW50LCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18uZW5zdXJlRWxlbWVudC51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5l
bnN1cmVFbGVtZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsRm9ybWF0
dGVyLnByb3RvdHlwZS5nZXRBdHRyID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGF0dHIpIHsKKyAg
ICB2YXIgZWxlbSA9IHRoaXMuZ2V0RWxlbWVudChyb3csIGNvbHVtbik7CisgICAgcmV0dXJuIERP
TV9nZXRBdHRyaWJ1dGUoZWxlbSwgYXR0cik7CisgICAgfTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0
ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRBdHRyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldEF0dHIuY2FsbC5hcHBseShfX3Vp
X0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldEF0dHIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRBdHRyLnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldEF0dHIu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxGb3JtYXR0ZXIucHJvdG90eXBl
LnNldEF0dHIgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgYXR0ck5hbWUsIHZhbHVlKSB7CisgICAg
dmFyIGVsZW0gPSB0aGlzLmdldEVsZW1lbnQocm93LCBjb2x1bW4pOworICAgIERPTV9zZXRBdHRy
aWJ1dGUoZWxlbSwgYXR0ck5hbWUsIHZhbHVlKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbEZvcm1h
dHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldEF0dHIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0QXR0ci5jYWxsLmFwcGx5KF9f
dWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0QXR0ciwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldEF0dHIudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0QXR0
ci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9Sb3dGb3JtYXR0ZXIo
KSB7Cit9CitmdW5jdGlvbiB1aV9Sb3dGb3JtYXR0ZXIob3V0ZXIpIHsKKyAgICB2YXIgaW5zdGFu
Y2UgPSBuZXcgX191aV9Sb3dGb3JtYXR0ZXIoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykg
aW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJu
IGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfUm93Rm9ybWF0dGVyX2luaXRpYWxpemUo
KSB7CisgICAgaWYoX191aV9Sb3dGb3JtYXR0ZXIuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJu
OworICAgIF9fdWlfUm93Rm9ybWF0dGVyLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAg
IHB5anNfZXh0ZW5kKF9fdWlfUm93Rm9ybWF0dGVyLCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBf
X3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9Sb3dGb3Jt
YXR0ZXI7CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rp
b24ob3V0ZXIpIHsKKyAgICB0aGlzLm91dGVyID0gb3V0ZXI7CisgICAgfTsKKyAgICBfX3VpX1Jv
d0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19pbml0X18uY2FsbC5h
cHBseShfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUu
X19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5w
cm90b3R5cGUuYWRkU3R5bGVOYW1lID0gZnVuY3Rpb24ocm93LCBzdHlsZU5hbWUpIHsKKyAgICB0
aGlzLm91dGVyLnNldFN0eWxlTmFtZSh0aGlzLmVuc3VyZUVsZW1lbnQocm93KSwgc3R5bGVOYW1l
LCB0cnVlKTsKKyAgICB9OworICAgIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNz
X18uYWRkU3R5bGVOYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1Jvd0Zv
cm1hdHRlci5wcm90b3R5cGUuYWRkU3R5bGVOYW1lLmNhbGwuYXBwbHkoX191aV9Sb3dGb3JtYXR0
ZXIucHJvdG90eXBlLmFkZFN0eWxlTmFtZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
Um93Rm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkU3R5bGVOYW1lLnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuYWRkU3R5bGVOYW1l
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBl
LmdldEVsZW1lbnQgPSBmdW5jdGlvbihyb3cpIHsKKyAgICB0aGlzLm91dGVyLmNoZWNrUm93Qm91
bmRzKHJvdyk7CisgICAgcmV0dXJuIHRoaXMuZ2V0Um93KHRoaXMub3V0ZXIuYm9keUVsZW0sIHJv
dyk7CisgICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLmdl
dEVsZW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUm93Rm9ybWF0dGVy
LnByb3RvdHlwZS5nZXRFbGVtZW50LmNhbGwuYXBwbHkoX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90
eXBlLmdldEVsZW1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRl
ci5wcm90b3R5cGUuX19jbGFzc19fLmdldEVsZW1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5nZXRFbGVtZW50Lmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLmdldFN0eWxlTmFtZSA9
IGZ1bmN0aW9uKHJvdykgeworICAgIHJldHVybiBET01fZ2V0QXR0cmlidXRlKHRoaXMuZ2V0RWxl
bWVudChyb3cpLCAnY2xhc3NOYW1lJyk7CisgICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5w
cm90b3R5cGUuX19jbGFzc19fLmdldFN0eWxlTmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLmdldFN0eWxlTmFtZS5jYWxsLmFwcGx5
KF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5nZXRTdHlsZU5hbWUsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLmdldFN0eWxl
TmFtZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90
eXBlLmdldFN0eWxlTmFtZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUm93Rm9y
bWF0dGVyLnByb3RvdHlwZS5pc1Zpc2libGUgPSBmdW5jdGlvbihyb3cpIHsKKyAgICB2YXIgZWxl
bWVudCA9IHRoaXMuZ2V0RWxlbWVudChyb3cpOworICAgIHJldHVybiB0aGlzLm91dGVyLmlzVmlz
aWJsZShlbGVtZW50KTsKKyAgICB9OworICAgIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5f
X2NsYXNzX18uaXNWaXNpYmxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1Jv
d0Zvcm1hdHRlci5wcm90b3R5cGUuaXNWaXNpYmxlLmNhbGwuYXBwbHkoX191aV9Sb3dGb3JtYXR0
ZXIucHJvdG90eXBlLmlzVmlzaWJsZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUm93
Rm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18uaXNWaXNpYmxlLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuaXNWaXNpYmxlLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLnJlbW92ZVN0
eWxlTmFtZSA9IGZ1bmN0aW9uKHJvdywgc3R5bGVOYW1lKSB7CisgICAgdGhpcy5vdXRlci5zZXRT
dHlsZU5hbWUodGhpcy5nZXRFbGVtZW50KHJvdyksIHN0eWxlTmFtZSwgZmFsc2UpOworICAgIH07
CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVTdHlsZU5h
bWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUm93Rm9ybWF0dGVyLnByb3Rv
dHlwZS5yZW1vdmVTdHlsZU5hbWUuY2FsbC5hcHBseShfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5
cGUucmVtb3ZlU3R5bGVOYW1lLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Sb3dGb3Jt
YXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVTdHlsZU5hbWUudW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5yZW1vdmVTdHlsZU5hbWUu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUu
c2V0U3R5bGVOYW1lID0gZnVuY3Rpb24ocm93LCBzdHlsZU5hbWUpIHsKKyAgICB2YXIgZWxlbSA9
IHRoaXMuZW5zdXJlRWxlbWVudChyb3cpOworICAgIERPTV9zZXRBdHRyaWJ1dGUoZWxlbSwgJ2Ns
YXNzTmFtZScsIHN0eWxlTmFtZSk7CisgICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90
b3R5cGUuX19jbGFzc19fLnNldFN0eWxlTmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLnNldFN0eWxlTmFtZS5jYWxsLmFwcGx5KF9f
dWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5zZXRTdHlsZU5hbWUsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldFN0eWxlTmFt
ZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBl
LnNldFN0eWxlTmFtZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUm93Rm9ybWF0
dGVyLnByb3RvdHlwZS5zZXRWZXJ0aWNhbEFsaWduID0gZnVuY3Rpb24ocm93LCBhbGlnbikgewor
ICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0aGlzLmVuc3VyZUVsZW1lbnQocm93KSwgJ3ZlcnRp
Y2FsQWxpZ24nLCBhbGlnbik7CisgICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5
cGUuX19jbGFzc19fLnNldFZlcnRpY2FsQWxpZ24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5zZXRWZXJ0aWNhbEFsaWduLmNhbGwuYXBw
bHkoX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLnNldFZlcnRpY2FsQWxpZ24sIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNl
dFZlcnRpY2FsQWxpZ24udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUm93Rm9ybWF0
dGVyLnByb3RvdHlwZS5zZXRWZXJ0aWNhbEFsaWduLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLnNldFZpc2libGUgPSBmdW5jdGlvbihyb3cs
IHZpc2libGUpIHsKKyAgICB2YXIgZWxlbWVudCA9IHRoaXMuZW5zdXJlRWxlbWVudChyb3cpOwor
ICAgIHRoaXMub3V0ZXIuc2V0VmlzaWJsZShlbGVtZW50LCB2aXNpYmxlKTsKKyAgICB9OworICAg
IF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VmlzaWJsZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLnNldFZp
c2libGUuY2FsbC5hcHBseShfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuc2V0VmlzaWJsZSwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5fX2Ns
YXNzX18uc2V0VmlzaWJsZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb3dGb3Jt
YXR0ZXIucHJvdG90eXBlLnNldFZpc2libGUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuZW5zdXJlRWxlbWVudCA9IGZ1bmN0aW9uKHJvdykg
eworICAgIHRoaXMub3V0ZXIucHJlcGFyZVJvdyhyb3cpOworICAgIHJldHVybiB0aGlzLmdldFJv
dyh0aGlzLm91dGVyLmJvZHlFbGVtLCByb3cpOworICAgIH07CisgICAgX191aV9Sb3dGb3JtYXR0
ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5lbnN1cmVFbGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuZW5zdXJlRWxlbWVudC5jYWxs
LmFwcGx5KF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5lbnN1cmVFbGVtZW50LCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5l
bnN1cmVFbGVtZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRl
ci5wcm90b3R5cGUuZW5zdXJlRWxlbWVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5nZXRSb3cgPSBmdW5jdGlvbihlbGVtZW50LCByb3cp
IHsKKworICAgICAgICByZXR1cm4gZWxlbWVudC5yb3dzW3Jvd107CisgICAgICAgIAorICAgIH07
CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRSb3cgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5nZXRS
b3cuY2FsbC5hcHBseShfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuZ2V0Um93LCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5n
ZXRSb3cudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUm93Rm9ybWF0dGVyLnByb3Rv
dHlwZS5nZXRSb3cuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvd0Zvcm1hdHRl
ci5wcm90b3R5cGUuc2V0QXR0ciA9IGZ1bmN0aW9uKHJvdywgYXR0ck5hbWUsIHZhbHVlKSB7Cisg
ICAgdmFyIGVsZW1lbnQgPSB0aGlzLmVuc3VyZUVsZW1lbnQocm93KTsKKyAgICBET01fc2V0QXR0
cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lLCB2YWx1ZSk7CisgICAgfTsKKyAgICBfX3VpX1Jvd0Zv
cm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldEF0dHIgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5zZXRBdHRyLmNhbGwuYXBwbHko
X191aV9Sb3dGb3JtYXR0ZXIucHJvdG90eXBlLnNldEF0dHIsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX1Jvd0Zvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldEF0dHIudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUm93Rm9ybWF0dGVyLnByb3RvdHlwZS5zZXRBdHRy
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX0hUTUxUYWJsZSgpIHsK
K30KK2Z1bmN0aW9uIHVpX0hUTUxUYWJsZSgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191
aV9IVE1MVGFibGUoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0
X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQor
CisKK2Z1bmN0aW9uIF9fdWlfSFRNTFRhYmxlX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9I
VE1MVGFibGUuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfSFRNTFRhYmxl
Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX1BhbmVsLl9fd2FzX2lu
aXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfUGFuZWxfaW5pdGlhbGl6ZSgpOworICAgIHB5anNf
ZXh0ZW5kKF9fdWlfSFRNTFRhYmxlLCBfX3VpX1BhbmVsKTsKKyAgICBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9IVE1MVGFibGU7CisgICAgX191aV9IVE1M
VGFibGUucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgX191aV9QYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMpOworICAgIHRoaXMuY2VsbEZvcm1hdHRl
ciA9IHVpX0NlbGxGb3JtYXR0ZXIodGhpcyk7CisgICAgdGhpcy5yb3dGb3JtYXR0ZXIgPSB1aV9S
b3dGb3JtYXR0ZXIodGhpcyk7CisgICAgdGhpcy50YWJsZUxpc3RlbmVycyA9IG5ldyBweWpzbGli
X0xpc3QoW10pOworICAgIHRoaXMud2lkZ2V0TWFwID0gbmV3IHB5anNsaWJfRGljdChbXSk7Cisg
ICAgdGhpcy50YWJsZUVsZW0gPSBET01fY3JlYXRlVGFibGUoKTsKKyAgICB0aGlzLmJvZHlFbGVt
ID0gRE9NX2NyZWF0ZVRCb2R5KCk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRoaXMudGFibGVFbGVt
LCB0aGlzLmJvZHlFbGVtKTsKKyAgICB0aGlzLnNldEVsZW1lbnQodGhpcy50YWJsZUVsZW0pOwor
ICAgIHRoaXMuc2lua0V2ZW50cyhfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05DTElD
Syk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5p
dF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5
cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19pbml0X18s
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFz
c19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxU
YWJsZS5wcm90b3R5cGUuYWRkVGFibGVMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7Cisg
ICAgdGhpcy50YWJsZUxpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpOworICAgIH07CisgICAgX191
aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRUYWJsZUxpc3RlbmVyID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuYWRkVGFibGVM
aXN0ZW5lci5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5hZGRUYWJsZUxpc3Rl
bmVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9f
Y2xhc3NfXy5hZGRUYWJsZUxpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0hUTUxUYWJsZS5wcm90b3R5cGUuYWRkVGFibGVMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewor
CisgICAgICAgIHZhciBfX3JvdyA9IHB5anNsaWJfcmFuZ2UodGhpcy5nZXRSb3dDb3VudCgpKS5f
X2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcm93ID0gX19yb3cubmV4dCgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAKKworICAgICAgICB2YXIgX19jb2wgPSBweWpzbGliX3JhbmdlKHRoaXMuZ2V0Q2Vs
bENvdW50KHJvdykpLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBjb2wgPSBfX2NvbC5uZXh0KCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgIAorICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0V2lkZ2V0KHJv
dywgY29sKTsKKyAgICBpZiAoKGNoaWxkICE9IG51bGwpKSB7CisgICAgdGhpcy5yZW1vdmVXaWRn
ZXQoY2hpbGQpOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKworICAgICAgICAg
ICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRl
cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2Ns
YXNzX18uY2xlYXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5jbGVhci5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5jbGVh
ciwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2Ns
YXNzX18uY2xlYXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnBy
b3RvdHlwZS5jbGVhci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5jbGVhckNlbGwgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgIHZhciB0
ZCA9IHRoaXMuY2VsbEZvcm1hdHRlci5nZXRFbGVtZW50KHJvdywgY29sdW1uKTsKKyAgICByZXR1
cm4gdGhpcy5pbnRlcm5hbENsZWFyQ2VsbCh0ZCk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJs
ZS5wcm90b3R5cGUuX19jbGFzc19fLmNsZWFyQ2VsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLmNsZWFyQ2VsbC5jYWxsLmFwcGx5KF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5jbGVhckNlbGwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmNsZWFyQ2VsbC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmNsZWFyQ2VsbC5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsQ291
bnQgPSBmdW5jdGlvbihyb3cpIHsKKyAgICByZXR1cm4gMDsKKyAgICB9OworICAgIF9fdWlfSFRN
TFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q2VsbENvdW50ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0Q2VsbENvdW50LmNhbGwu
YXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLmdldENlbGxDb3VudCwgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q2VsbENv
dW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUu
Z2V0Q2VsbENvdW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUu
cHJvdG90eXBlLmdldENlbGxGb3JtYXR0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhp
cy5jZWxsRm9ybWF0dGVyOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRDZWxsRm9ybWF0dGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0Q2VsbEZvcm1hdHRlci5jYWxsLmFwcGx5KF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsRm9ybWF0dGVyLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDZWxsRm9ybWF0dGVy
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0
Q2VsbEZvcm1hdHRlci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5nZXRDZWxsUGFkZGluZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01f
Z2V0SW50QXR0cmlidXRlKHRoaXMudGFibGVFbGVtLCAnY2VsbFBhZGRpbmcnKTsKKyAgICB9Owor
ICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q2VsbFBhZGRpbmcgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRD
ZWxsUGFkZGluZy5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsUGFk
ZGluZywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0Q2VsbFBhZGRpbmcudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsUGFkZGluZy5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsU3BhY2luZyA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMudGFibGVFbGVtLCAnY2Vs
bFNwYWNpbmcnKTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNz
X18uZ2V0Q2VsbFNwYWNpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRN
TFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsU3BhY2luZy5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5nZXRDZWxsU3BhY2luZywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q2VsbFNwYWNpbmcudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsU3BhY2luZy5p
bnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRI
VE1MID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICB2YXIgZWxlbWVudCA9IHRoaXMuY2Vs
bEZvcm1hdHRlci5nZXRFbGVtZW50KHJvdywgY29sdW1uKTsKKyAgICByZXR1cm4gRE9NX2dldElu
bmVySFRNTChlbGVtZW50KTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0SFRNTCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IVE1M
VGFibGUucHJvdG90eXBlLmdldEhUTUwuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5
cGUuZ2V0SFRNTCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9I
VE1MVGFibGUucHJvdG90eXBlLmdldEhUTUwuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0Um93Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gMDsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0Um93Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5nZXRSb3dDb3VudC5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlw
ZS5nZXRSb3dDb3VudCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0Um93Q291bnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRSb3dDb3VudC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRSb3dGb3JtYXR0ZXIgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5yb3dGb3JtYXR0ZXI7CisgICAgfTsKKyAgICBfX3Vp
X0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldFJvd0Zvcm1hdHRlciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLmdldFJvd0Zvcm1h
dHRlci5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRSb3dGb3JtYXR0ZXIs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFz
c19fLmdldFJvd0Zvcm1hdHRlci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1M
VGFibGUucHJvdG90eXBlLmdldFJvd0Zvcm1hdHRlci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4pIHsKKyAgICB0aGlzLmNoZWNrQ2VsbEJvdW5kcyhyb3csIGNvbHVtbik7CisgICAgdmFyIGVs
ZW1lbnQgPSB0aGlzLmNlbGxGb3JtYXR0ZXIuZ2V0RWxlbWVudChyb3csIGNvbHVtbik7CisgICAg
cmV0dXJuIERPTV9nZXRJbm5lclRleHQoZWxlbWVudCk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxU
YWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldFRleHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRUZXh0LmNhbGwuYXBwbHkoX191aV9I
VE1MVGFibGUucHJvdG90eXBlLmdldFRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldFRleHQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRUZXh0Lmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmdldFdpZGdldCA9IGZ1bmN0
aW9uKHJvdywgY29sdW1uKSB7CisgICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gJ3VuZGVmaW5lZCcp
IGNvbHVtbj1udWxsOworICAgIGlmICgoY29sdW1uID09IG51bGwpKSB7CisgICAgdmFyIGtleSA9
IHRoaXMuY29tcHV0ZUtleUZvckVsZW1lbnQocm93KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
dGhpcy5jaGVja0NlbGxCb3VuZHMocm93LCBjb2x1bW4pOworICAgIHZhciBrZXkgPSB0aGlzLmNv
bXB1dGVLZXkocm93LCBjb2x1bW4pOworICAgIH0KKyAgICBpZiAoKGtleSA9PSBudWxsKSkgewor
ICAgIHJldHVybjsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMud2lkZ2V0TWFwLl9fZ2V0aXRlbV9f
KGtleSk7CisgICAgfTsKK19fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRXaWRnZXQucGFyc2Vf
a3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgcm93LCBjb2x1bW4gKSB7CisgICAgaWYgKHR5
cGVvZiBjb2x1bW4gPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGNvbHVtbj1fX2t3YXJncy5jb2x1
bW47CisgICAgdmFyIF9fciA9IFtyb3csIGNvbHVtbl07CisgICAgcmV0dXJuIF9fcjsKK307Cisg
ICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRXaWRnZXQu
Y2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0V2lkZ2V0LCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRn
ZXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5n
ZXRXaWRnZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90
b3R5cGUuX19jbGFzc19fLmdldFdpZGdldC5wYXJzZV9rd2FyZ3MgPSBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuZ2V0V2lkZ2V0LnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90
b3R5cGUuaXNDZWxsUHJlc2VudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgaWYgKChy
b3cgPj0gdGhpcy5nZXRSb3dDb3VudCgpKSB8fCAocm93IDwgMCkpIHsKKyAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICgoY29sdW1uIDwgMCkgfHwgKGNvbHVtbiA+PSB0aGlzLmdldENl
bGxDb3VudChyb3cpKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmlzQ2Vs
bFByZXNlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnBy
b3RvdHlwZS5pc0NlbGxQcmVzZW50LmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBl
LmlzQ2VsbFByZXNlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuX19jbGFzc19fLmlzQ2VsbFByZXNlbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5pc0NlbGxQcmVzZW50Lmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9faXRlcl9fID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMud2lkZ2V0TWFwLml0ZXJ2YWx1ZXMoKTsKKyAgICB9Owor
ICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uX19pdGVyX18gPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2l0ZXJfXy5j
YWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2l0ZXJfXywgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uX19pdGVyX18u
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2l0
ZXJfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlw
ZS5vbkJyb3dzZXJFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKChET01fZXZlbnRH
ZXRUeXBlKGV2ZW50KSA9PSAnY2xpY2snKSkgeworICAgIHZhciB0ZCA9IHRoaXMuZ2V0RXZlbnRU
YXJnZXRDZWxsKGV2ZW50KTsKKyAgICBpZiAoISh0ZCkpIHsKKyAgICByZXR1cm47CisgICAgfQor
ICAgIHZhciB0ciA9IERPTV9nZXRQYXJlbnQodGQpOworICAgIHZhciBib2R5ID0gRE9NX2dldFBh
cmVudCh0cik7CisgICAgdmFyIHJvdyA9IERPTV9nZXRDaGlsZEluZGV4KGJvZHksIHRyKTsKKyAg
ICB2YXIgY29sdW1uID0gRE9NX2dldENoaWxkSW5kZXgodHIsIHRkKTsKKworICAgICAgICB2YXIg
X19saXN0ZW5lciA9IHRoaXMudGFibGVMaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpc3Rl
bmVyID0gX19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAg
IGlmIChsaXN0ZW5lci5vbkNlbGxDbGlja2VkKSB7CisgICAgbGlzdGVuZXIub25DZWxsQ2xpY2tl
ZCh0aGlzLCByb3csIGNvbHVtbik7CisgICAgfQorICAgIGVsc2UgeworICAgIGxpc3RlbmVyKHRo
aXMpOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cg
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgfTsKKyAg
ICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLm9uQnJvd3NlckV2ZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUub25Ccm93
c2VyRXZlbnQuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUub25Ccm93c2VyRXZl
bnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19j
bGFzc19fLm9uQnJvd3NlckV2ZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hU
TUxUYWJsZS5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24od2lkZ2V0KSB7
CisgICAgaWYgKCh3aWRnZXQuZ2V0UGFyZW50KCkgIT0gdGhpcykpIHsKKyAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHRoaXMucmVtb3ZlV2lkZ2V0KHdpZGdldCk7CisgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92
ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBl
LnJlbW92ZS5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5yZW1vdmUsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnJl
bW92ZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBl
LnJlbW92ZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3Rv
dHlwZS5yZW1vdmVUYWJsZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlz
LnRhYmxlTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0hUTUxU
YWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZVRhYmxlTGlzdGVuZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5yZW1vdmVUYWJsZUxp
c3RlbmVyLmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLnJlbW92ZVRhYmxlTGlz
dGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUu
X19jbGFzc19fLnJlbW92ZVRhYmxlTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5yZW1vdmVUYWJsZUxpc3RlbmVyLmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldEJvcmRlcldpZHRo
ID0gZnVuY3Rpb24od2lkdGgpIHsKKyAgICBET01fc2V0QXR0cmlidXRlKHRoaXMudGFibGVFbGVt
LCAnYm9yZGVyJywgd2lkdGgpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRCb3JkZXJXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldEJvcmRlcldpZHRoLmNhbGwuYXBwbHkoX191aV9I
VE1MVGFibGUucHJvdG90eXBlLnNldEJvcmRlcldpZHRoLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRCb3JkZXJXaWR0aC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldEJvcmRl
cldpZHRoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90
eXBlLnNldENlbGxQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykgeworICAgIERPTV9zZXRJbnRB
dHRyaWJ1dGUodGhpcy50YWJsZUVsZW0sICdjZWxsUGFkZGluZycsIHBhZGRpbmcpOworICAgIH07
CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsUGFkZGluZyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNl
dENlbGxQYWRkaW5nLmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldENlbGxQ
YWRkaW5nLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRDZWxsUGFkZGluZy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9IVE1MVGFibGUucHJvdG90eXBlLnNldENlbGxQYWRkaW5nLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldENlbGxTcGFjaW5nID0gZnVuY3Rp
b24oc3BhY2luZykgeworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGhpcy50YWJsZUVsZW0sICdj
ZWxsU3BhY2luZycsIHNwYWNpbmcpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRDZWxsU3BhY2luZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldENlbGxTcGFjaW5nLmNhbGwuYXBwbHkoX191
aV9IVE1MVGFibGUucHJvdG90eXBlLnNldENlbGxTcGFjaW5nLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsU3BhY2luZy51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldENl
bGxTcGFjaW5nLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJv
dG90eXBlLnNldEhUTUwgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgaHRtbCkgeworICAgIHRoaXMu
cHJlcGFyZUNlbGwocm93LCBjb2x1bW4pOworICAgIHZhciB0ZCA9IHRoaXMuY2xlYW5DZWxsKHJv
dywgY29sdW1uKTsKKyAgICBpZiAoKGh0bWwgIT0gbnVsbCkpIHsKKyAgICBET01fc2V0SW5uZXJI
VE1MKHRkLCBodG1sKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5
cGUuX19jbGFzc19fLnNldEhUTUwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5zZXRIVE1MLmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJv
dG90eXBlLnNldEhUTUwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuX19jbGFzc19fLnNldEhUTUwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfSFRNTFRhYmxlLnByb3RvdHlwZS5zZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbihyb3csIGNvbHVt
biwgdGV4dCkgeworICAgIHRoaXMucHJlcGFyZUNlbGwocm93LCBjb2x1bW4pOworICAgIHZhciB0
ZCA9IHRoaXMuY2xlYW5DZWxsKHJvdywgY29sdW1uKTsKKyAgICBpZiAoKHRleHQgIT0gbnVsbCkp
IHsKKyAgICBET01fc2V0SW5uZXJUZXh0KHRkLCB0ZXh0KTsKKyAgICB9CisgICAgfTsKKyAgICBf
X3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnNldFRleHQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5zZXRUZXh0LmNhbGwuYXBw
bHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldFRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnNldFRleHQudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5zZXRUZXh0Lmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldFdpZGdl
dCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCB3aWRnZXQpIHsKKyAgICB0aGlzLnByZXBhcmVDZWxs
KHJvdywgY29sdW1uKTsKKyAgICBpZiAoKHdpZGdldCA9PSBudWxsKSkgeworICAgIHJldHVybjsK
KyAgICB9CisgICAgd2lkZ2V0LnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2YXIgdGQgPSB0aGlz
LmNsZWFuQ2VsbChyb3csIGNvbHVtbik7CisgICAgdmFyIHdpZGdldF9oYXNoID0gcHlqc2xpYl9o
YXNoKHdpZGdldCk7CisgICAgdmFyIGVsZW1lbnQgPSB3aWRnZXQuZ2V0RWxlbWVudCgpOworICAg
IERPTV9zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ19faGFzaCcsIHdpZGdldF9oYXNoKTsKKyAgICB0
aGlzLndpZGdldE1hcC5fX3NldGl0ZW1fXyh3aWRnZXRfaGFzaCwgd2lkZ2V0KTsKKyAgICB0aGlz
LmFkb3B0KHdpZGdldCwgdGQpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRXaWRnZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5zZXRXaWRnZXQuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuc2V0V2lkZ2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFi
bGUucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRXaWRnZXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5zZXRXaWRnZXQuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuY2xlYW5DZWxsID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4pIHsKKyAgICB2YXIgdGQgPSB0aGlzLmNlbGxGb3JtYXR0ZXIuZ2V0UmF3RWxl
bWVudChyb3csIGNvbHVtbik7CisgICAgdGhpcy5pbnRlcm5hbENsZWFyQ2VsbCh0ZCk7CisgICAg
cmV0dXJuIHRkOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3Nf
Xy5jbGVhbkNlbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5jbGVhbkNlbGwuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUu
Y2xlYW5DZWxsLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90
eXBlLl9fY2xhc3NfXy5jbGVhbkNlbGwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5jbGVhbkNlbGwuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuY29tcHV0ZUtleSA9IGZ1bmN0aW9uKHJvdywgY29s
dW1uKSB7CisgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmNlbGxGb3JtYXR0ZXIuZ2V0UmF3RWxlbWVu
dChyb3csIGNvbHVtbik7CisgICAgdmFyIGNoaWxkID0gRE9NX2dldEZpcnN0Q2hpbGQoZWxlbWVu
dCk7CisgICAgaWYgKChjaGlsZCA9PSBudWxsKSkgeworICAgIHJldHVybjsKKyAgICB9CisgICAg
cmV0dXJuIHRoaXMuY29tcHV0ZUtleUZvckVsZW1lbnQoY2hpbGQpOworICAgIH07CisgICAgX191
aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5jb21wdXRlS2V5ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuY29tcHV0ZUtleS5jYWxs
LmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5jb21wdXRlS2V5LCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5jb21wdXRlS2V5
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuY29t
cHV0ZUtleS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3Rv
dHlwZS5jb21wdXRlS2V5Rm9yRWxlbWVudCA9IGZ1bmN0aW9uKHdpZGdldEVsZW1lbnQpIHsKKyAg
ICByZXR1cm4gRE9NX2dldEF0dHJpYnV0ZSh3aWRnZXRFbGVtZW50LCAnX19oYXNoJyk7CisgICAg
fTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmNvbXB1dGVLZXlGb3JF
bGVtZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90
b3R5cGUuY29tcHV0ZUtleUZvckVsZW1lbnQuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90
b3R5cGUuY29tcHV0ZUtleUZvckVsZW1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmNvbXB1dGVLZXlGb3JFbGVtZW50LnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuY29tcHV0ZUtl
eUZvckVsZW1lbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUucmVtb3ZlV2lkZ2V0ID0gZnVuY3Rpb24od2lkZ2V0KSB7CisgICAgdGhpcy5kaXNv
d24od2lkZ2V0KTsKKyAgICB0aGlzLndpZGdldE1hcC5fX2RlbGl0ZW1fXyh0aGlzLmNvbXB1dGVL
ZXlGb3JFbGVtZW50KHdpZGdldC5nZXRFbGVtZW50KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlV2lkZ2V0
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUu
cmVtb3ZlV2lkZ2V0LmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLnJlbW92ZVdp
ZGdldCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5f
X2NsYXNzX18ucmVtb3ZlV2lkZ2V0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hU
TUxUYWJsZS5wcm90b3R5cGUucmVtb3ZlV2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmNoZWNrQ2VsbEJvdW5kcyA9IGZ1bmN0aW9uKHJv
dywgY29sdW1uKSB7CisgICAgdGhpcy5jaGVja1Jvd0JvdW5kcyhyb3cpOworICAgIHZhciBjZWxs
U2l6ZSA9IHRoaXMuZ2V0Q2VsbENvdW50KHJvdyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJs
ZS5wcm90b3R5cGUuX19jbGFzc19fLmNoZWNrQ2VsbEJvdW5kcyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLmNoZWNrQ2VsbEJvdW5kcy5jYWxs
LmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5jaGVja0NlbGxCb3VuZHMsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmNoZWNr
Q2VsbEJvdW5kcy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJv
dG90eXBlLmNoZWNrQ2VsbEJvdW5kcy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5jaGVja1Jvd0JvdW5kcyA9IGZ1bmN0aW9uKHJvdykgeworICAg
IHZhciByb3dTaXplID0gdGhpcy5nZXRSb3dDb3VudCgpOworICAgIH07CisgICAgX191aV9IVE1M
VGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5jaGVja1Jvd0JvdW5kcyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLmNoZWNrUm93Qm91bmRzLmNh
bGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLmNoZWNrUm93Qm91bmRzLCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5jaGVj
a1Jvd0JvdW5kcy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJv
dG90eXBlLmNoZWNrUm93Qm91bmRzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9I
VE1MVGFibGUucHJvdG90eXBlLmNyZWF0ZUNlbGwgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
RE9NX2NyZWF0ZVREKCk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19j
bGFzc19fLmNyZWF0ZUNlbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRN
TFRhYmxlLnByb3RvdHlwZS5jcmVhdGVDZWxsLmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJv
dG90eXBlLmNyZWF0ZUNlbGwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJs
ZS5wcm90b3R5cGUuX19jbGFzc19fLmNyZWF0ZUNlbGwudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5jcmVhdGVDZWxsLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmdldEJvZHlFbGVtZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYm9keUVsZW07CisgICAgfTsKKyAgICBfX3VpX0hU
TUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldEJvZHlFbGVtZW50ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0Qm9keUVsZW1lbnQu
Y2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0Qm9keUVsZW1lbnQsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdl
dEJvZHlFbGVtZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuZ2V0Qm9keUVsZW1lbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0RE9NQ2VsbENvdW50ID0gZnVuY3Rpb24oZWxlbWVudCwg
cm93KSB7CisgICAgaWYgKHR5cGVvZiByb3cgPT0gJ3VuZGVmaW5lZCcpIHJvdz1udWxsOworICAg
IGlmICgocm93ID09IG51bGwpKSB7CisgICAgcmV0dXJuIHRoaXMuZ2V0RE9NQ2VsbENvdW50SW1w
bCh0aGlzLmJvZHlFbGVtLCBlbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuZ2V0RE9N
Q2VsbENvdW50SW1wbChlbGVtZW50LCByb3cpOworICAgIH07CitfX3VpX0hUTUxUYWJsZS5wcm90
b3R5cGUuZ2V0RE9NQ2VsbENvdW50LnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3Ms
IGVsZW1lbnQsIHJvdyApIHsKKyAgICBpZiAodHlwZW9mIHJvdyA9PSAndW5kZWZpbmVkJykKKyAg
ICAgICAgcm93PV9fa3dhcmdzLnJvdzsKKyAgICB2YXIgX19yID0gW2VsZW1lbnQsIHJvd107Cisg
ICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRET01DZWxsQ291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRN
TFRhYmxlLnByb3RvdHlwZS5nZXRET01DZWxsQ291bnQuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJs
ZS5wcm90b3R5cGUuZ2V0RE9NQ2VsbENvdW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRET01DZWxsQ291bnQudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRET01DZWxsQ291
bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUu
X19jbGFzc19fLmdldERPTUNlbGxDb3VudC5wYXJzZV9rd2FyZ3MgPSBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuZ2V0RE9NQ2VsbENvdW50LnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX0hUTUxUYWJs
ZS5wcm90b3R5cGUuZ2V0RE9NQ2VsbENvdW50SW1wbCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJvdykg
eworCisgICAgICAgIHJldHVybiBlbGVtZW50LnJvd3Nbcm93XS5jZWxscy5sZW5ndGg7CisgICAg
ICAgIAorICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRE
T01DZWxsQ291bnRJbXBsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hUTUxU
YWJsZS5wcm90b3R5cGUuZ2V0RE9NQ2VsbENvdW50SW1wbC5jYWxsLmFwcGx5KF9fdWlfSFRNTFRh
YmxlLnByb3RvdHlwZS5nZXRET01DZWxsQ291bnRJbXBsLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRET01DZWxsQ291bnRJbXBs
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0
RE9NQ2VsbENvdW50SW1wbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRh
YmxlLnByb3RvdHlwZS5nZXRET01Sb3dDb3VudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBp
ZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3VuZGVmaW5lZCcpIGVsZW1lbnQ9bnVsbDsKKyAgICBpZiAo
KGVsZW1lbnQgPT0gbnVsbCkpIHsKKyAgICB2YXIgZWxlbWVudCA9IHRoaXMuYm9keUVsZW07Cisg
ICAgfQorICAgIHJldHVybiB0aGlzLmdldERPTVJvd0NvdW50SW1wbChlbGVtZW50KTsKKyAgICB9
OworX191aV9IVE1MVGFibGUucHJvdG90eXBlLmdldERPTVJvd0NvdW50LnBhcnNlX2t3YXJncyA9
IGZ1bmN0aW9uICggX19rd2FyZ3MsIGVsZW1lbnQgKSB7CisgICAgaWYgKHR5cGVvZiBlbGVtZW50
ID09ICd1bmRlZmluZWQnKQorICAgICAgICBlbGVtZW50PV9fa3dhcmdzLmVsZW1lbnQ7CisgICAg
dmFyIF9fciA9IFtlbGVtZW50XTsKKyAgICByZXR1cm4gX19yOworfTsKKyAgICBfX3VpX0hUTUxU
YWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldERPTVJvd0NvdW50ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0RE9NUm93Q291bnQuY2Fs
bC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0RE9NUm93Q291bnQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldERP
TVJvd0NvdW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90
b3R5cGUuZ2V0RE9NUm93Q291bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hU
TUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldERPTVJvd0NvdW50LnBhcnNlX2t3YXJncyA9
IF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRET01Sb3dDb3VudC5wYXJzZV9rd2FyZ3M7Cisg
ICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmdldERPTVJvd0NvdW50SW1wbCA9IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKworICAgICAgICByZXR1cm4gZWxlbWVudC5yb3dzLmxlbmd0aDsKKyAgICAg
ICAgCisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldERP
TVJvd0NvdW50SW1wbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IVE1MVGFi
bGUucHJvdG90eXBlLmdldERPTVJvd0NvdW50SW1wbC5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5nZXRET01Sb3dDb3VudEltcGwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldERPTVJvd0NvdW50SW1wbC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmdldERPTVJv
d0NvdW50SW1wbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnBy
b3RvdHlwZS5nZXRFdmVudFRhcmdldENlbGwgPSBmdW5jdGlvbihldmVudCkgeworICAgIHZhciB0
ZCA9IERPTV9ldmVudEdldFRhcmdldChldmVudCk7CisgICAgd2hpbGUgKCh0ZCAhPSBudWxsKSkg
eworICAgIGlmICgoRE9NX2dldEF0dHJpYnV0ZSh0ZCwgJ3RhZ05hbWUnKS5sb3dlcigpID09ICd0
ZCcpKSB7CisgICAgdmFyIHRyID0gRE9NX2dldFBhcmVudCh0ZCk7CisgICAgdmFyIGJvZHkgPSBE
T01fZ2V0UGFyZW50KHRyKTsKKyAgICBpZiAoRE9NX2NvbXBhcmUoYm9keSwgdGhpcy5ib2R5RWxl
bSkpIHsKKyAgICByZXR1cm4gdGQ7CisgICAgfQorICAgIH0KKyAgICBpZiAoRE9NX2NvbXBhcmUo
dGQsIHRoaXMuYm9keUVsZW0pKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgdGQgPSBE
T01fZ2V0UGFyZW50KHRkKTsKKyAgICB9CisgICAgcmV0dXJuOworICAgIH07CisgICAgX191aV9I
VE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRFdmVudFRhcmdldENlbGwgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRFdmVudFRh
cmdldENlbGwuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuZ2V0RXZlbnRUYXJn
ZXRDZWxsLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBl
Ll9fY2xhc3NfXy5nZXRFdmVudFRhcmdldENlbGwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5nZXRFdmVudFRhcmdldENlbGwuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuaW5zZXJ0Q2VsbCA9IGZ1
bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgdmFyIHRyID0gdGhpcy5yb3dGb3JtYXR0ZXIuZ2V0
Um93KHRoaXMuYm9keUVsZW0sIHJvdyk7CisgICAgdmFyIHRkID0gdGhpcy5jcmVhdGVDZWxsKCk7
CisgICAgRE9NX2luc2VydENoaWxkKHRyLCB0ZCwgY29sdW1uKTsKKyAgICB9OworICAgIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uaW5zZXJ0Q2VsbCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLmluc2VydENlbGwuY2FsbC5h
cHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuaW5zZXJ0Q2VsbCwgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uaW5zZXJ0Q2VsbC51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmluc2Vy
dENlbGwuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5
cGUuaW5zZXJ0Q2VsbHMgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgY291bnQpIHsKKyAgICB2YXIg
dHIgPSB0aGlzLnJvd0Zvcm1hdHRlci5nZXRSb3codGhpcy5ib2R5RWxlbSwgcm93KTsKKworICAg
ICAgICB2YXIgX19pID0gcHlqc2xpYl9yYW5nZShjb2x1bW4sICAoIGNvbHVtbiArIGNvdW50ICkg
KS5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgaSA9IF9faS5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIAorICAgIHZhciB0ZCA9IHRoaXMuY3JlYXRlQ2VsbCgpOworICAgIERPTV9pbnNlcnRD
aGlsZCh0ciwgdGQsIGkpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0
aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH07CisgICAg
X191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5pbnNlcnRDZWxscyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLmluc2VydENlbGxz
LmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLmluc2VydENlbGxzLCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5pbnNl
cnRDZWxscy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90
eXBlLmluc2VydENlbGxzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFi
bGUucHJvdG90eXBlLmluc2VydFJvdyA9IGZ1bmN0aW9uKGJlZm9yZVJvdykgeworICAgIGlmICgo
YmVmb3JlUm93ICE9IHRoaXMuZ2V0Um93Q291bnQoKSkpIHsKKyAgICB0aGlzLmNoZWNrUm93Qm91
bmRzKGJlZm9yZVJvdyk7CisgICAgfQorICAgIHZhciB0ciA9IERPTV9jcmVhdGVUUigpOworICAg
IERPTV9pbnNlcnRDaGlsZCh0aGlzLmJvZHlFbGVtLCB0ciwgYmVmb3JlUm93KTsKKyAgICByZXR1
cm4gYmVmb3JlUm93OworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xh
c3NfXy5pbnNlcnRSb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRh
YmxlLnByb3RvdHlwZS5pbnNlcnRSb3cuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5
cGUuaW5zZXJ0Um93LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJv
dG90eXBlLl9fY2xhc3NfXy5pbnNlcnRSb3cudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfSFRNTFRhYmxlLnByb3RvdHlwZS5pbnNlcnRSb3cuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuaW50ZXJuYWxDbGVhckNlbGwgPSBmdW5jdGlv
bih0ZCkgeworICAgIHZhciBtYXliZUNoaWxkID0gRE9NX2dldEZpcnN0Q2hpbGQodGQpOworICAg
IHZhciB3aWRnZXQgPSBudWxsOworICAgIGlmICgobWF5YmVDaGlsZCAhPSBudWxsKSkgeworICAg
IHZhciB3aWRnZXQgPSB0aGlzLmdldFdpZGdldChtYXliZUNoaWxkKTsKKyAgICB9CisgICAgaWYg
KCh3aWRnZXQgIT0gbnVsbCkpIHsKKyAgICB0aGlzLnJlbW92ZVdpZGdldCh3aWRnZXQpOworICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBET01fc2V0SW5uZXJIVE1MKHRkLCAnJyk7CisgICAg
cmV0dXJuIGZhbHNlOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xh
c3NfXy5pbnRlcm5hbENsZWFyQ2VsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9IVE1MVGFibGUucHJvdG90eXBlLmludGVybmFsQ2xlYXJDZWxsLmNhbGwuYXBwbHkoX191aV9I
VE1MVGFibGUucHJvdG90eXBlLmludGVybmFsQ2xlYXJDZWxsLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5pbnRlcm5hbENsZWFyQ2Vs
bC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLmlu
dGVybmFsQ2xlYXJDZWxsLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFi
bGUucHJvdG90eXBlLnByZXBhcmVDZWxsID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICB9
OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18ucHJlcGFyZUNlbGwgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5wcmVw
YXJlQ2VsbC5jYWxsLmFwcGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5wcmVwYXJlQ2VsbCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNz
X18ucHJlcGFyZUNlbGwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxl
LnByb3RvdHlwZS5wcmVwYXJlQ2VsbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
SFRNTFRhYmxlLnByb3RvdHlwZS5wcmVwYXJlUm93ID0gZnVuY3Rpb24ocm93KSB7CisgICAgfTsK
KyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnByZXBhcmVSb3cgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5wcmVwYXJl
Um93LmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLnByZXBhcmVSb3csIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnBy
ZXBhcmVSb3cudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3Rv
dHlwZS5wcmVwYXJlUm93Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFi
bGUucHJvdG90eXBlLnJlbW92ZUNlbGwgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgIHRo
aXMuY2hlY2tDZWxsQm91bmRzKHJvdywgY29sdW1uKTsKKyAgICB2YXIgdGQgPSB0aGlzLmNsZWFu
Q2VsbChyb3csIGNvbHVtbik7CisgICAgdmFyIHRyID0gdGhpcy5yb3dGb3JtYXR0ZXIuZ2V0Um93
KHRoaXMuYm9keUVsZW0sIHJvdyk7CisgICAgRE9NX3JlbW92ZUNoaWxkKHRyLCB0ZCk7CisgICAg
fTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUNlbGwgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5yZW1v
dmVDZWxsLmNhbGwuYXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLnJlbW92ZUNlbGwsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19f
LnJlbW92ZUNlbGwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnBy
b3RvdHlwZS5yZW1vdmVDZWxsLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1M
VGFibGUucHJvdG90eXBlLnJlbW92ZVJvdyA9IGZ1bmN0aW9uKHJvdykgeworCisgICAgICAgIHZh
ciBfX2NvbHVtbiA9IHB5anNsaWJfcmFuZ2UodGhpcy5nZXRDZWxsQ291bnQocm93KSkuX19pdGVy
X18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGNvbHVtbiA9IF9fY29sdW1uLm5leHQoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgCisgICAgdGhpcy5jbGVhbkNlbGwocm93LCBjb2x1bW4pOworCisgICAgICAgICAg
ICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVy
YXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgIERPTV9yZW1vdmVDaGlsZCh0aGlzLmJvZHlFbGVtLCB0aGlzLnJv
d0Zvcm1hdHRlci5nZXRSb3codGhpcy5ib2R5RWxlbSwgcm93KSk7CisgICAgfTsKKyAgICBfX3Vp
X0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZVJvdyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9IVE1MVGFibGUucHJvdG90eXBlLnJlbW92ZVJvdy5jYWxsLmFw
cGx5KF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5yZW1vdmVSb3csIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZVJvdy51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLnJlbW92ZVJv
dy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5z
ZXRDZWxsRm9ybWF0dGVyID0gZnVuY3Rpb24oY2VsbEZvcm1hdHRlcikgeworICAgIHRoaXMuY2Vs
bEZvcm1hdHRlciA9IGNlbGxGb3JtYXR0ZXI7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5w
cm90b3R5cGUuX19jbGFzc19fLnNldENlbGxGb3JtYXR0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5zZXRDZWxsRm9ybWF0dGVyLmNhbGwu
YXBwbHkoX191aV9IVE1MVGFibGUucHJvdG90eXBlLnNldENlbGxGb3JtYXR0ZXIsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnNldENl
bGxGb3JtYXR0ZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFRhYmxlLnBy
b3RvdHlwZS5zZXRDZWxsRm9ybWF0dGVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9IVE1MVGFibGUucHJvdG90eXBlLnNldFJvd0Zvcm1hdHRlciA9IGZ1bmN0aW9uKHJvd0Zvcm1h
dHRlcikgeworICAgIHRoaXMucm93Rm9ybWF0dGVyID0gcm93Rm9ybWF0dGVyOworICAgIH07Cisg
ICAgX191aV9IVE1MVGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRSb3dGb3JtYXR0ZXIgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5zZXRS
b3dGb3JtYXR0ZXIuY2FsbC5hcHBseShfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuc2V0Um93Rm9y
bWF0dGVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1MVGFibGUucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRSb3dGb3JtYXR0ZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfSFRNTFRhYmxlLnByb3RvdHlwZS5zZXRSb3dGb3JtYXR0ZXIuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfR3JpZCgpIHsKK30KK2Z1bmN0aW9uIHVpX0dyaWQocm93
cywgY29sdW1ucykgeworICAgIGlmICh0eXBlb2Ygcm93cyA9PSAndW5kZWZpbmVkJykgcm93cz0w
OworICAgIGlmICh0eXBlb2YgY29sdW1ucyA9PSAndW5kZWZpbmVkJykgY29sdW1ucz0wOworICAg
IHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX0dyaWQoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRf
XykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0
dXJuIGluc3RhbmNlOworfQorCisKK3VpX0dyaWQucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBf
X2t3YXJncywgcm93cywgY29sdW1ucyApIHsKKyAgICBpZiAodHlwZW9mIHJvd3MgPT0gJ3VuZGVm
aW5lZCcpCisgICAgICAgIHJvd3M9X19rd2FyZ3Mucm93czsKKyAgICBpZiAodHlwZW9mIGNvbHVt
bnMgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGNvbHVtbnM9X19rd2FyZ3MuY29sdW1uczsKKyAg
ICB2YXIgX19yID0gW3Jvd3MsIGNvbHVtbnNdOworICAgIHJldHVybiBfX3I7Cit9OworZnVuY3Rp
b24gX191aV9HcmlkX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9HcmlkLl9fd2FzX2luaXRp
YWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX0dyaWQuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRy
dWU7CisgICAgaWYoIV9fdWlfSFRNTFRhYmxlLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAg
IF9fdWlfSFRNTFRhYmxlX2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0dyaWQs
IF9fdWlfSFRNTFRhYmxlKTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5fX25l
d19fID0gdWlfR3JpZDsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rp
b24ocm93cywgY29sdW1ucykgeworICAgIGlmICh0eXBlb2Ygcm93cyA9PSAndW5kZWZpbmVkJykg
cm93cz0wOworICAgIGlmICh0eXBlb2YgY29sdW1ucyA9PSAndW5kZWZpbmVkJykgY29sdW1ucz0w
OworICAgIF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18odGhpcyk7
CisgICAgdGhpcy5jZWxsRm9ybWF0dGVyID0gdWlfQ2VsbEZvcm1hdHRlcih0aGlzKTsKKyAgICB0
aGlzLnJvd0Zvcm1hdHRlciA9IHVpX1Jvd0Zvcm1hdHRlcih0aGlzKTsKKyAgICB0aGlzLm51bUNv
bHVtbnMgPSAwOworICAgIHRoaXMubnVtUm93cyA9IDA7CisgICAgaWYgKChyb3dzID4gMCkgfHwg
KGNvbHVtbnMgPiAwKSkgeworICAgIHRoaXMucmVzaXplKHJvd3MsIGNvbHVtbnMpOworICAgIH0K
KyAgICB9OworX191aV9HcmlkLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3MgPSBmdW5j
dGlvbiAoIF9fa3dhcmdzLCByb3dzLCBjb2x1bW5zICkgeworICAgIGlmICh0eXBlb2Ygcm93cyA9
PSAndW5kZWZpbmVkJykKKyAgICAgICAgcm93cz1fX2t3YXJncy5yb3dzOworICAgIGlmICh0eXBl
b2YgY29sdW1ucyA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgY29sdW1ucz1fX2t3YXJncy5jb2x1
bW5zOworICAgIHZhciBfX3IgPSBbcm93cywgY29sdW1uc107CisgICAgcmV0dXJuIF9fcjsKK307
CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfR3JpZC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBs
eShfX3VpX0dyaWQucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9HcmlkLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy5wYXJzZV9r
d2FyZ3MgPSBfX3VpX0dyaWQucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJnczsKKyAgICBf
X3VpX0dyaWQucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHJvd3MsIGNvbHVtbnMpIHsKKyAg
ICB0aGlzLnJlc2l6ZUNvbHVtbnMoY29sdW1ucyk7CisgICAgdGhpcy5yZXNpemVSb3dzKHJvd3Mp
OworICAgIH07CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5fX2NsYXNzX18ucmVzaXplID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0dyaWQucHJvdG90eXBlLnJlc2l6ZS5jYWxs
LmFwcGx5KF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9HcmlkLnByb3RvdHlwZS5fX2NsYXNzX18ucmVzaXplLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLnJlc2l6ZS5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplQ29sdW1ucyA9IGZ1bmN0aW9uKGNv
bHVtbnMpIHsKKyAgICBpZiAoKHRoaXMubnVtQ29sdW1ucyA9PSBjb2x1bW5zKSkgeworICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCh0aGlzLm51bUNvbHVtbnMgPiBjb2x1bW5zKSkgeworCisg
ICAgICAgIHZhciBfX2kgPSBweWpzbGliX3JhbmdlKDAsIHRoaXMubnVtUm93cykuX19pdGVyX18o
KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGkgPSBfX2kubmV4dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAKKwor
ICAgICAgICB2YXIgX19qID0gcHlqc2xpYl9yYW5nZSggKCB0aGlzLm51bUNvbHVtbnMgLSAxICkg
LCAgKCBjb2x1bW5zIC0gMSApICwgLTEpLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBqID0gX19qLm5leHQo
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgdGhpcy5yZW1vdmVDZWxsKGksIGop
OworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlm
IChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorCisgICAgICAgICAgICB9CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgIH0KKyAgICBlbHNlIHsKKworICAgICAgICB2YXIgX19pID0gcHlqc2xpYl9yYW5nZSh0aGlz
Lm51bVJvd3MpLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBpID0gX19pLm5leHQoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgCisKKyAgICAgICAgdmFyIF9faiA9IHB5anNsaWJfcmFuZ2UodGhpcy5u
dW1Db2x1bW5zLCBjb2x1bW5zKS5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgaiA9IF9fai5uZXh0KCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIHRoaXMuaW5zZXJ0Q2VsbChpLCBqKTsKKwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAh
PSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9
CisgICAgdGhpcy5udW1Db2x1bW5zID0gY29sdW1uczsKKyAgICB9OworICAgIF9fdWlfR3JpZC5w
cm90b3R5cGUuX19jbGFzc19fLnJlc2l6ZUNvbHVtbnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplQ29sdW1ucy5jYWxsLmFwcGx5KF9fdWlf
R3JpZC5wcm90b3R5cGUucmVzaXplQ29sdW1ucywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9f
dWlfR3JpZC5wcm90b3R5cGUuX19jbGFzc19fLnJlc2l6ZUNvbHVtbnMudW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplQ29sdW1ucy5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplUm93cyA9IGZ1bmN0
aW9uKHJvd3MpIHsKKyAgICBpZiAoKHRoaXMubnVtUm93cyA9PSByb3dzKSkgeworICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKCh0aGlzLm51bVJvd3MgPCByb3dzKSkgeworICAgIHRoaXMuYWRk
Um93cyh0aGlzLmdldEJvZHlFbGVtZW50KCksICAoIHJvd3MgLSB0aGlzLm51bVJvd3MgKSAsIHRo
aXMubnVtQ29sdW1ucyk7CisgICAgdGhpcy5udW1Sb3dzID0gcm93czsKKyAgICB9CisgICAgZWxz
ZSB7CisgICAgd2hpbGUgKCh0aGlzLm51bVJvd3MgPiByb3dzKSkgeworICAgIHRoaXMubnVtUm93
cyAtPSAxOworICAgIHRoaXMucmVtb3ZlUm93KHRoaXMubnVtUm93cyk7CisgICAgfQorICAgIH0K
KyAgICB9OworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuX19jbGFzc19fLnJlc2l6ZVJvd3MgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplUm93
cy5jYWxsLmFwcGx5KF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplUm93cywgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuX19jbGFzc19fLnJlc2l6ZVJvd3MudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUucmVzaXplUm93cy5p
bnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuY3JlYXRlQ2Vs
bCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB0ZCA9IF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5f
X2NsYXNzX18uY3JlYXRlQ2VsbCh0aGlzKTsKKyAgICBET01fc2V0SW5uZXJIVE1MKHRkLCAnJm5i
c3A7Jyk7CisgICAgcmV0dXJuIHRkOworICAgIH07CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5f
X2NsYXNzX18uY3JlYXRlQ2VsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9H
cmlkLnByb3RvdHlwZS5jcmVhdGVDZWxsLmNhbGwuYXBwbHkoX191aV9HcmlkLnByb3RvdHlwZS5j
cmVhdGVDZWxsLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5f
X2NsYXNzX18uY3JlYXRlQ2VsbC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Hcmlk
LnByb3RvdHlwZS5jcmVhdGVDZWxsLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9H
cmlkLnByb3RvdHlwZS5jbGVhckNlbGwgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgIHZh
ciB0ZCA9IHRoaXMuY2VsbEZvcm1hdHRlci5nZXRFbGVtZW50KHJvdywgY29sdW1uKTsKKyAgICB2
YXIgYiA9IF9fdWlfSFRNTFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uaW50ZXJuYWxDbGVhckNl
bGwodGhpcywgdGQpOworICAgIERPTV9zZXRJbm5lckhUTUwodGQsICcmbmJzcDsnKTsKKyAgICBy
ZXR1cm4gYjsKKyAgICB9OworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuX19jbGFzc19fLmNsZWFy
Q2VsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9HcmlkLnByb3RvdHlwZS5j
bGVhckNlbGwuY2FsbC5hcHBseShfX3VpX0dyaWQucHJvdG90eXBlLmNsZWFyQ2VsbCwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuX19jbGFzc19fLmNsZWFyQ2Vs
bC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5jbGVhckNl
bGwuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLnByZXBh
cmVDZWxsID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKKyAgICB9OworICAgIF9fdWlfR3JpZC5w
cm90b3R5cGUuX19jbGFzc19fLnByZXBhcmVDZWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX0dyaWQucHJvdG90eXBlLnByZXBhcmVDZWxsLmNhbGwuYXBwbHkoX191aV9Hcmlk
LnByb3RvdHlwZS5wcmVwYXJlQ2VsbCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfR3Jp
ZC5wcm90b3R5cGUuX19jbGFzc19fLnByZXBhcmVDZWxsLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0dyaWQucHJvdG90eXBlLnByZXBhcmVDZWxsLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5wcmVwYXJlUm93ID0gZnVuY3Rpb24ocm93KSB7
CisgICAgfTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5wcmVwYXJlUm93ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0dyaWQucHJvdG90eXBlLnByZXBhcmVS
b3cuY2FsbC5hcHBseShfX3VpX0dyaWQucHJvdG90eXBlLnByZXBhcmVSb3csIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5wcmVwYXJlUm93LnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLnByZXBhcmVSb3cu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLmdldENlbGxD
b3VudCA9IGZ1bmN0aW9uKHJvdykgeworICAgIHJldHVybiB0aGlzLm51bUNvbHVtbnM7CisgICAg
fTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDZWxsQ291bnQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfR3JpZC5wcm90b3R5cGUuZ2V0Q2VsbENvdW50
LmNhbGwuYXBwbHkoX191aV9HcmlkLnByb3RvdHlwZS5nZXRDZWxsQ291bnQsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDZWxsQ291bnQu
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuZ2V0Q2VsbENv
dW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5nZXRD
b2x1bW5Db3VudCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLm51bUNvbHVtbnM7Cisg
ICAgfTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDb2x1bW5Db3VudCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9HcmlkLnByb3RvdHlwZS5nZXRDb2x1
bW5Db3VudC5jYWxsLmFwcGx5KF9fdWlfR3JpZC5wcm90b3R5cGUuZ2V0Q29sdW1uQ291bnQsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRD
b2x1bW5Db3VudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9HcmlkLnByb3RvdHlw
ZS5nZXRDb2x1bW5Db3VudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfR3JpZC5w
cm90b3R5cGUuZ2V0Um93Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5udW1S
b3dzOworICAgIH07CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Um93Q291
bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfR3JpZC5wcm90b3R5cGUuZ2V0
Um93Q291bnQuY2FsbC5hcHBseShfX3VpX0dyaWQucHJvdG90eXBlLmdldFJvd0NvdW50LCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9HcmlkLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Um93
Q291bnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfR3JpZC5wcm90b3R5cGUuZ2V0
Um93Q291bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0dyaWQucHJvdG90eXBl
LmFkZFJvd3MgPSBmdW5jdGlvbih0YWJsZSwgbnVtUm93cywgY29sdW1ucykgeworCisgICAgICAg
IHZhciB0ZCA9ICRkb2MuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgdGQuaW5uZXJIVE1M
ID0gIiZuYnNwOyI7CisgICAgICAgIHZhciByb3cgPSAkZG9jLmNyZWF0ZUVsZW1lbnQoInRyIik7
CisgICAgICAgIGZvcih2YXIgY2VsbE51bSA9IDA7IGNlbGxOdW0gPCBjb2x1bW5zOyBjZWxsTnVt
KyspIHsKKyAgICAgICAgICAgIHZhciBjZWxsID0gdGQuY2xvbmVOb2RlKHRydWUpOworICAgICAg
ICAgICAgcm93LmFwcGVuZENoaWxkKGNlbGwpOworICAgICAgICB9CisgICAgICAgIHRhYmxlLmFw
cGVuZENoaWxkKHJvdyk7CisgICAgICAgIGZvcih2YXIgcm93TnVtID0gMTsgcm93TnVtIDwgbnVt
Um93czsgcm93TnVtKyspIHsKKyAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHJvdy5jbG9u
ZU5vZGUodHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgIH07CisgICAgX191aV9Hcmlk
LnByb3RvdHlwZS5fX2NsYXNzX18uYWRkUm93cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9HcmlkLnByb3RvdHlwZS5hZGRSb3dzLmNhbGwuYXBwbHkoX191aV9HcmlkLnByb3Rv
dHlwZS5hZGRSb3dzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9HcmlkLnByb3RvdHlw
ZS5fX2NsYXNzX18uYWRkUm93cy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Hcmlk
LnByb3RvdHlwZS5hZGRSb3dzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBf
X3VpX0ZsZXhDZWxsRm9ybWF0dGVyKCkgeworfQorZnVuY3Rpb24gdWlfRmxleENlbGxGb3JtYXR0
ZXIob3V0ZXIpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9GbGV4Q2VsbEZvcm1hdHRl
cigpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShp
bnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rp
b24gX191aV9GbGV4Q2VsbEZvcm1hdHRlcl9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfRmxl
eENlbGxGb3JtYXR0ZXIuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfRmxl
eENlbGxGb3JtYXR0ZXIuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlf
Q2VsbEZvcm1hdHRlci5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX0NlbGxGb3Jt
YXR0ZXJfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfRmxleENlbGxGb3JtYXR0
ZXIsIF9fdWlfQ2VsbEZvcm1hdHRlcik7CisgICAgX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90
b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9GbGV4Q2VsbEZvcm1hdHRlcjsKKyAgICBfX3Vp
X0ZsZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1bmN0aW9uKG91dGVyKSB7
CisgICAgX191aV9DZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18odGhp
cywgb3V0ZXIpOworICAgIH07CisgICAgX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUu
X19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zs
ZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9fdWlfRmxleENl
bGxGb3JtYXR0ZXIucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZsZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5f
X2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxleENlbGxGb3JtYXR0
ZXIucHJvdG90eXBlLmdldENvbFNwYW4gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgIHJl
dHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudChyb3csIGNvbHVtbiksICdj
b2xTcGFuJyk7CisgICAgfTsKKyAgICBfX3VpX0ZsZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0Q29sU3BhbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9G
bGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUuZ2V0Q29sU3Bhbi5jYWxsLmFwcGx5KF9fdWlfRmxl
eENlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldENvbFNwYW4sIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX0ZsZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q29sU3Bh
bi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90
b3R5cGUuZ2V0Q29sU3Bhbi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxleENl
bGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldFJvd1NwYW4gPSBmdW5jdGlvbihyb3csIGNvbHVtbikg
eworICAgIHJldHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudChyb3csIGNv
bHVtbiksICdyb3dTcGFuJyk7CisgICAgfTsKKyAgICBfX3VpX0ZsZXhDZWxsRm9ybWF0dGVyLnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0Um93U3BhbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUuZ2V0Um93U3Bhbi5jYWxsLmFwcGx5
KF9fdWlfRmxleENlbGxGb3JtYXR0ZXIucHJvdG90eXBlLmdldFJvd1NwYW4sIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0ZsZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0Um93U3Bhbi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GbGV4Q2VsbEZvcm1h
dHRlci5wcm90b3R5cGUuZ2V0Um93U3Bhbi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfRmxleENlbGxGb3JtYXR0ZXIucHJvdG90eXBlLnNldENvbFNwYW4gPSBmdW5jdGlvbihyb3cs
IGNvbHVtbiwgY29sU3BhbikgeworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGhpcy5lbnN1cmVF
bGVtZW50KHJvdywgY29sdW1uKSwgJ2NvbFNwYW4nLCBjb2xTcGFuKTsKKyAgICB9OworICAgIF9f
dWlfRmxleENlbGxGb3JtYXR0ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDb2xTcGFuID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZsZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlw
ZS5zZXRDb2xTcGFuLmNhbGwuYXBwbHkoX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUu
c2V0Q29sU3BhbiwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRmxleENlbGxGb3JtYXR0
ZXIucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDb2xTcGFuLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0ZsZXhDZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRDb2xTcGFuLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUuc2V0
Um93U3BhbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCByb3dTcGFuKSB7CisgICAgRE9NX3NldElu
dEF0dHJpYnV0ZSh0aGlzLmVuc3VyZUVsZW1lbnQocm93LCBjb2x1bW4pLCAncm93U3BhbicsIHJv
d1NwYW4pOworICAgIH07CisgICAgX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19j
bGFzc19fLnNldFJvd1NwYW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRmxl
eENlbGxGb3JtYXR0ZXIucHJvdG90eXBlLnNldFJvd1NwYW4uY2FsbC5hcHBseShfX3VpX0ZsZXhD
ZWxsRm9ybWF0dGVyLnByb3RvdHlwZS5zZXRSb3dTcGFuLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9GbGV4Q2VsbEZvcm1hdHRlci5wcm90b3R5cGUuX19jbGFzc19fLnNldFJvd1NwYW4u
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxleENlbGxGb3JtYXR0ZXIucHJvdG90
eXBlLnNldFJvd1NwYW4uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlf
RmxleFRhYmxlKCkgeworfQorZnVuY3Rpb24gdWlfRmxleFRhYmxlKCkgeworICAgIHZhciBpbnN0
YW5jZSA9IG5ldyBfX3VpX0ZsZXhUYWJsZSgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBp
bnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4g
aW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191aV9GbGV4VGFibGVfaW5pdGlhbGl6ZSgpIHsK
KyAgICBpZihfX3VpX0ZsZXhUYWJsZS5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAg
X191aV9GbGV4VGFibGUuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlf
SFRNTFRhYmxlLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfSFRNTFRhYmxlX2lu
aXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0ZsZXhUYWJsZSwgX191aV9IVE1MVGFi
bGUpOworICAgIF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVp
X0ZsZXhUYWJsZTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuX19pbml0X18gPSBmdW5j
dGlvbigpIHsKKyAgICBfX3VpX0hUTUxUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
KHRoaXMpOworICAgIHRoaXMuY2VsbEZvcm1hdHRlciA9IHVpX0ZsZXhDZWxsRm9ybWF0dGVyKHRo
aXMpOworICAgIHRoaXMucm93Rm9ybWF0dGVyID0gdWlfUm93Rm9ybWF0dGVyKHRoaXMpOworICAg
IH07CisgICAgX191aV9GbGV4VGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9GbGV4VGFibGUucHJvdG90eXBlLl9faW5p
dF9fLmNhbGwuYXBwbHkoX191aV9GbGV4VGFibGUucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9GbGV4VGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GbGV4VGFibGUucHJvdG90eXBl
Ll9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GbGV4VGFibGUucHJv
dG90eXBlLmFkZENlbGwgPSBmdW5jdGlvbihyb3cpIHsKKyAgICB0aGlzLmluc2VydENlbGwocm93
LCB0aGlzLmdldENlbGxDb3VudChyb3cpKTsKKyAgICB9OworICAgIF9fdWlfRmxleFRhYmxlLnBy
b3RvdHlwZS5fX2NsYXNzX18uYWRkQ2VsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9GbGV4VGFibGUucHJvdG90eXBlLmFkZENlbGwuY2FsbC5hcHBseShfX3VpX0ZsZXhUYWJs
ZS5wcm90b3R5cGUuYWRkQ2VsbCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRmxleFRh
YmxlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkQ2VsbC51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9GbGV4VGFibGUucHJvdG90eXBlLmFkZENlbGwuaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuZ2V0Q2VsbENvdW50ID0gZnVuY3Rpb24o
cm93KSB7CisgICAgdGhpcy5jaGVja1Jvd0JvdW5kcyhyb3cpOworICAgIHJldHVybiB0aGlzLmdl
dERPTUNlbGxDb3VudCh0aGlzLmdldEJvZHlFbGVtZW50KCksIHJvdyk7CisgICAgfTsKKyAgICBf
X3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldENlbGxDb3VudCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9GbGV4VGFibGUucHJvdG90eXBlLmdldENlbGxDb3Vu
dC5jYWxsLmFwcGx5KF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5nZXRDZWxsQ291bnQsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdl
dENlbGxDb3VudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GbGV4VGFibGUucHJv
dG90eXBlLmdldENlbGxDb3VudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxl
eFRhYmxlLnByb3RvdHlwZS5nZXRGbGV4Q2VsbEZvcm1hdHRlciA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiB0aGlzLmdldENlbGxGb3JtYXR0ZXIoKTsKKyAgICB9OworICAgIF9fdWlfRmxleFRh
YmxlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0RmxleENlbGxGb3JtYXR0ZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5nZXRGbGV4Q2VsbEZv
cm1hdHRlci5jYWxsLmFwcGx5KF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5nZXRGbGV4Q2VsbEZv
cm1hdHRlciwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRmxleFRhYmxlLnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0RmxleENlbGxGb3JtYXR0ZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5nZXRGbGV4Q2VsbEZvcm1hdHRlci5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5nZXRSb3dDb3Vu
dCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmdldERPTVJvd0NvdW50KCk7CisgICAg
fTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLmdldFJvd0NvdW50ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuZ2V0
Um93Q291bnQuY2FsbC5hcHBseShfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuZ2V0Um93Q291bnQs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuX19jbGFz
c19fLmdldFJvd0NvdW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZsZXhUYWJs
ZS5wcm90b3R5cGUuZ2V0Um93Q291bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0ZsZXhUYWJsZS5wcm90b3R5cGUucmVtb3ZlQ2VsbHMgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwg
bnVtKSB7CisKKyAgICAgICAgdmFyIF9faSA9IHB5anNsaWJfcmFuZ2UobnVtKS5fX2l0ZXJfXygp
OworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgaSA9IF9faS5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAg
IHRoaXMucmVtb3ZlQ2VsbChyb3csIGNvbHVtbik7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAg
ICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgfTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUNl
bGxzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5
cGUucmVtb3ZlQ2VsbHMuY2FsbC5hcHBseShfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUucmVtb3Zl
Q2VsbHMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUu
X19jbGFzc19fLnJlbW92ZUNlbGxzLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zs
ZXhUYWJsZS5wcm90b3R5cGUucmVtb3ZlQ2VsbHMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUucHJlcGFyZUNlbGwgPSBmdW5jdGlvbihyb3csIGNv
bHVtbikgeworICAgIHRoaXMucHJlcGFyZVJvdyhyb3cpOworICAgIHZhciBjZWxsQ291bnQgPSB0
aGlzLmdldENlbGxDb3VudChyb3cpOworICAgIHZhciByZXF1aXJlZCA9ICAoICAoIGNvbHVtbiAr
IDEgKSAgLSBjZWxsQ291bnQgKSA7CisgICAgaWYgKChyZXF1aXJlZCA+IDApKSB7CisgICAgdGhp
cy5hZGRDZWxscyh0aGlzLmdldEJvZHlFbGVtZW50KCksIHJvdywgcmVxdWlyZWQpOworICAgIH0K
KyAgICB9OworICAgIF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5fX2NsYXNzX18ucHJlcGFyZUNl
bGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRmxleFRhYmxlLnByb3RvdHlw
ZS5wcmVwYXJlQ2VsbC5jYWxsLmFwcGx5KF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5wcmVwYXJl
Q2VsbCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5f
X2NsYXNzX18ucHJlcGFyZUNlbGwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxl
eFRhYmxlLnByb3RvdHlwZS5wcmVwYXJlQ2VsbC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5wcmVwYXJlUm93ID0gZnVuY3Rpb24ocm93KSB7Cisg
ICAgdmFyIHJvd0NvdW50ID0gdGhpcy5nZXRSb3dDb3VudCgpOworCisgICAgICAgIHZhciBfX2kg
PSBweWpzbGliX3JhbmdlKHJvd0NvdW50LCAgKCByb3cgKyAxICkgKS5fX2l0ZXJfXygpOworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2
YXIgaSA9IF9faS5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIHRoaXMu
aW5zZXJ0Um93KGkpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJv
dyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH07CisgICAgX191
aV9GbGV4VGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5wcmVwYXJlUm93ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUucHJlcGFyZVJvdy5jYWxs
LmFwcGx5KF9fdWlfRmxleFRhYmxlLnByb3RvdHlwZS5wcmVwYXJlUm93LCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9GbGV4VGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5wcmVwYXJlUm93
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZsZXhUYWJsZS5wcm90b3R5cGUucHJl
cGFyZVJvdy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxleFRhYmxlLnByb3Rv
dHlwZS5hZGRDZWxscyA9IGZ1bmN0aW9uKHRhYmxlLCByb3csIG51bSkgeworCisgICAgICAgIHZh
ciByb3dFbGVtID0gdGFibGUucm93c1tyb3ddOworICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwg
bnVtOyBpKyspeworICAgICAgICAgICAgdmFyIGNlbGwgPSAkZG9jLmNyZWF0ZUVsZW1lbnQoInRk
Iik7CisgICAgICAgICAgICByb3dFbGVtLmFwcGVuZENoaWxkKGNlbGwpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgIH07CisgICAgX191aV9GbGV4VGFibGUucHJvdG90eXBlLl9fY2xhc3NfXy5h
ZGRDZWxscyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9GbGV4VGFibGUucHJv
dG90eXBlLmFkZENlbGxzLmNhbGwuYXBwbHkoX191aV9GbGV4VGFibGUucHJvdG90eXBlLmFkZENl
bGxzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9GbGV4VGFibGUucHJvdG90eXBlLl9f
Y2xhc3NfXy5hZGRDZWxscy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GbGV4VGFi
bGUucHJvdG90eXBlLmFkZENlbGxzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlv
biBfX3VpX0NvbXBsZXhQYW5lbCgpIHsKK30KK2Z1bmN0aW9uIHVpX0NvbXBsZXhQYW5lbCgpIHsK
KyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9Db21wbGV4UGFuZWwoKTsKKyAgICBpZihpbnN0
YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50
cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfQ29tcGxleFBh
bmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9Db21wbGV4UGFuZWwuX193YXNfaW5pdGlh
bGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfQ29tcGxleFBhbmVsLl9fd2FzX2luaXRpYWxpemVk
X18gPSB0cnVlOworICAgIGlmKCFfX3VpX1BhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAg
ICAgIF9fdWlfUGFuZWxfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfQ29tcGxl
eFBhbmVsLCBfX3VpX1BhbmVsKTsKKyAgICBfX3VpX0NvbXBsZXhQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLl9fbmV3X18gPSB1aV9Db21wbGV4UGFuZWw7CisgICAgX191aV9Db21wbGV4UGFuZWwu
cHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgX191aV9QYW5lbC5wcm90b3R5
cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMpOworICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgcHlq
c2xpYl9MaXN0KFtdKTsKKyAgICB9OworICAgIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5f
X2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ29t
cGxleFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9fdWlfQ29tcGxleFBhbmVs
LnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ29tcGxl
eFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlv
bih3aWRnZXQsIGNvbnRhaW5lcikgeworICAgIHRoaXMuaW5zZXJ0KHdpZGdldCwgY29udGFpbmVy
LCBweWpzbGliX2xlbih0aGlzLmNoaWxkcmVuKSk7CisgICAgfTsKKyAgICBfX3VpX0NvbXBsZXhQ
YW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLmFkZC5jYWxsLmFwcGx5KF9fdWlfQ29tcGxl
eFBhbmVsLnByb3RvdHlwZS5hZGQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NvbXBs
ZXhQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZC51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLmFkZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiB0aGlzLmNoaWxkcmVuOworICAgIH07CisgICAgX191aV9Db21wbGV4
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLmdldENoaWxkcmVuLmNhbGwu
YXBwbHkoX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLmdldENoaWxkcmVuLCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRD
aGlsZHJlbi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Db21wbGV4UGFuZWwucHJv
dG90eXBlLmdldENoaWxkcmVuLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Db21w
bGV4UGFuZWwucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uKHdpZGdldCwgY29udGFpbmVyLCBi
ZWZvcmVJbmRleCkgeworICAgIGlmICgod2lkZ2V0LmdldFBhcmVudCgpID09IHRoaXMpKSB7Cisg
ICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLmFkb3B0KHdpZGdldCwgY29udGFpbmVyKTsKKyAg
ICB0aGlzLmNoaWxkcmVuLmluc2VydChiZWZvcmVJbmRleCwgd2lkZ2V0KTsKKyAgICB9OworICAg
IF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uaW5zZXJ0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX0NvbXBsZXhQYW5lbC5wcm90b3R5cGUuaW5zZXJ0LmNh
bGwuYXBwbHkoX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLmluc2VydCwgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uaW5zZXJ0
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NvbXBsZXhQYW5lbC5wcm90b3R5cGUu
aW5zZXJ0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Db21wbGV4UGFuZWwucHJv
dG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHdpZGdldCkgeworICAgIGlmICghdGhpcy5jaGlsZHJl
bi5fX2NvbnRhaW5zX18od2lkZ2V0KSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
dGhpcy5kaXNvd24od2lkZ2V0KTsKKyAgICB0aGlzLmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOwor
ICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBl
Ll9fY2xhc3NfXy5yZW1vdmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ29t
cGxleFBhbmVsLnByb3RvdHlwZS5yZW1vdmUuY2FsbC5hcHBseShfX3VpX0NvbXBsZXhQYW5lbC5w
cm90b3R5cGUucmVtb3ZlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Db21wbGV4UGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5yZW1vdmUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKK30KK2Z1bmN0aW9uIF9fdWlfQWJzb2x1dGVQYW5lbCgpIHsKK30KK2Z1bmN0aW9uIHVpX0Fi
c29sdXRlUGFuZWwoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfQWJzb2x1dGVQYW5l
bCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShp
bnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rp
b24gX191aV9BYnNvbHV0ZVBhbmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9BYnNvbHV0
ZVBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX0Fic29sdXRlUGFu
ZWwuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfQ29tcGxleFBhbmVs
Ll9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfQ29tcGxleFBhbmVsX2luaXRpYWxp
emUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0Fic29sdXRlUGFuZWwsIF9fdWlfQ29tcGxleFBh
bmVsKTsKKyAgICBfX3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19f
ID0gdWlfQWJzb2x1dGVQYW5lbDsKKyAgICBfX3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBlLl9f
aW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX2luaXRfXyh0aGlzKTsKKyAgICB0aGlzLnNldEVsZW1lbnQoRE9NX2NyZWF0ZURp
digpKTsKKyAgICBET01fc2V0U3R5bGVBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdwb3Np
dGlvbicsICdyZWxhdGl2ZScpOworICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0aGlzLmdldEVs
ZW1lbnQoKSwgJ292ZXJmbG93JywgJ2hpZGRlbicpOworICAgIH07CisgICAgX191aV9BYnNvbHV0
ZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfQWJzb2x1dGVQYW5lbC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBs
eShfX3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAg
IH07CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18u
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQWJzb2x1dGVQYW5lbC5wcm90b3R5cGUu
X19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Fic29sdXRlUGFuZWwu
cHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHdpZGdldCwgbGVmdCwgdG9wKSB7CisgICAgaWYgKHR5
cGVvZiBsZWZ0ID09ICd1bmRlZmluZWQnKSBsZWZ0PW51bGw7CisgICAgaWYgKHR5cGVvZiB0b3Ag
PT0gJ3VuZGVmaW5lZCcpIHRvcD1udWxsOworICAgIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18uYWRkKHRoaXMsIHdpZGdldCwgdGhpcy5nZXRFbGVtZW50KCkpOworICAgIGlm
ICgobGVmdCAhPSBudWxsKSkgeworICAgIHRoaXMuc2V0V2lkZ2V0UG9zaXRpb24od2lkZ2V0LCBs
ZWZ0LCB0b3ApOworICAgIH0KKyAgICB9OworX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5h
ZGQucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgd2lkZ2V0LCBsZWZ0LCB0b3Ag
KSB7CisgICAgaWYgKHR5cGVvZiBsZWZ0ID09ICd1bmRlZmluZWQnKQorICAgICAgICBsZWZ0PV9f
a3dhcmdzLmxlZnQ7CisgICAgaWYgKHR5cGVvZiB0b3AgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAg
IHRvcD1fX2t3YXJncy50b3A7CisgICAgdmFyIF9fciA9IFt3aWRnZXQsIGxlZnQsIHRvcF07Cisg
ICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18uYWRkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Fic29sdXRlUGFu
ZWwucHJvdG90eXBlLmFkZC5jYWxsLmFwcGx5KF9fdWlfQWJzb2x1dGVQYW5lbC5wcm90b3R5cGUu
YWRkLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18uYWRkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Fic29sdXRl
UGFuZWwucHJvdG90eXBlLmFkZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQWJz
b2x1dGVQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZC5wYXJzZV9rd2FyZ3MgPSBfX3VpX0Fi
c29sdXRlUGFuZWwucHJvdG90eXBlLmFkZC5wYXJzZV9rd2FyZ3M7CisgICAgX191aV9BYnNvbHV0
ZVBhbmVsLnByb3RvdHlwZS5zZXRXaWRnZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHdpZGdldCwgbGVm
dCwgdG9wKSB7CisgICAgdGhpcy5jaGVja1dpZGdldFBhcmVudCh3aWRnZXQpOworICAgIHZhciBo
ID0gd2lkZ2V0LmdldEVsZW1lbnQoKTsKKyAgICBpZiAoKGxlZnQgPT0gLTEpICYmICh0b3AgPT0g
LTEpKSB7CisgICAgRE9NX3NldFN0eWxlQXR0cmlidXRlKGgsICdsZWZ0JywgJycpOworICAgIERP
TV9zZXRTdHlsZUF0dHJpYnV0ZShoLCAndG9wJywgJycpOworICAgIERPTV9zZXRTdHlsZUF0dHJp
YnV0ZShoLCAncG9zaXRpb24nLCAnc3RhdGljJyk7CisgICAgfQorICAgIGVsc2UgeworICAgIERP
TV9zZXRTdHlsZUF0dHJpYnV0ZShoLCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTsKKyAgICBET01f
c2V0U3R5bGVBdHRyaWJ1dGUoaCwgJ2xlZnQnLCAgKCBsZWZ0ICsgJ3B4JyApICk7CisgICAgRE9N
X3NldFN0eWxlQXR0cmlidXRlKGgsICd0b3AnLCAgKCB0b3AgKyAncHgnICkgKTsKKyAgICB9Cisg
ICAgfTsKKyAgICBfX3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRXaWRn
ZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9BYnNvbHV0ZVBh
bmVsLnByb3RvdHlwZS5zZXRXaWRnZXRQb3NpdGlvbi5jYWxsLmFwcGx5KF9fdWlfQWJzb2x1dGVQ
YW5lbC5wcm90b3R5cGUuc2V0V2lkZ2V0UG9zaXRpb24sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRXaWRnZXRQb3NpdGlv
bi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlw
ZS5zZXRXaWRnZXRQb3NpdGlvbi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQWJz
b2x1dGVQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0TGVmdCA9IGZ1bmN0aW9uKHdpZGdldCkgewor
ICAgIHRoaXMuY2hlY2tXaWRnZXRQYXJlbnQod2lkZ2V0KTsKKyAgICByZXR1cm4gRE9NX2dldElu
dEF0dHJpYnV0ZSh3aWRnZXQuZ2V0RWxlbWVudCgpLCAnb2Zmc2V0TGVmdCcpOworICAgIH07Cisg
ICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0TGVmdCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlw
ZS5nZXRXaWRnZXRMZWZ0LmNhbGwuYXBwbHkoX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5n
ZXRXaWRnZXRMZWZ0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9BYnNvbHV0ZVBhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0TGVmdC51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRMZWZ0Lmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5nZXRXaWRn
ZXRUb3AgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICB0aGlzLmNoZWNrV2lkZ2V0UGFyZW50KHdp
ZGdldCk7CisgICAgcmV0dXJuIERPTV9nZXRJbnRBdHRyaWJ1dGUod2lkZ2V0LmdldEVsZW1lbnQo
KSwgJ29mZnNldFRvcCcpOworICAgIH07CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0V2lkZ2V0VG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBlLmdldFdpZGdldFRvcC5jYWxsLmFwcGx5KF9fdWlf
QWJzb2x1dGVQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0VG9wLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0VG9w
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBl
LmdldFdpZGdldFRvcC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQWJzb2x1dGVQ
YW5lbC5wcm90b3R5cGUuY2hlY2tXaWRnZXRQYXJlbnQgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAg
ICBpZiAoKHdpZGdldC5nZXRQYXJlbnQoKSAhPSB0aGlzKSkgeworICAgIGNvbnNvbGUuZXJyb3Io
J1dpZGdldCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhpcyBwYW5lbC4nKTsKKyAgICB9CisgICAgfTsK
KyAgICBfX3VpX0Fic29sdXRlUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5jaGVja1dpZGdldFBh
cmVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9BYnNvbHV0ZVBhbmVsLnBy
b3RvdHlwZS5jaGVja1dpZGdldFBhcmVudC5jYWxsLmFwcGx5KF9fdWlfQWJzb2x1dGVQYW5lbC5w
cm90b3R5cGUuY2hlY2tXaWRnZXRQYXJlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X0Fic29sdXRlUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5jaGVja1dpZGdldFBhcmVudC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5jaGVj
a1dpZGdldFBhcmVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9M
YWJlbCgpIHsKK30KK2Z1bmN0aW9uIHVpX0xhYmVsKHRleHQsIHdvcmRXcmFwKSB7CisgICAgaWYg
KHR5cGVvZiB0ZXh0ID09ICd1bmRlZmluZWQnKSB0ZXh0PW51bGw7CisgICAgaWYgKHR5cGVvZiB3
b3JkV3JhcCA9PSAndW5kZWZpbmVkJykgd29yZFdyYXA9dHJ1ZTsKKyAgICB2YXIgaW5zdGFuY2Ug
PSBuZXcgX191aV9MYWJlbCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5f
X2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7
Cit9CisKKwordWlfTGFiZWwucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgdGV4
dCwgd29yZFdyYXAgKSB7CisgICAgaWYgKHR5cGVvZiB0ZXh0ID09ICd1bmRlZmluZWQnKQorICAg
ICAgICB0ZXh0PV9fa3dhcmdzLnRleHQ7CisgICAgaWYgKHR5cGVvZiB3b3JkV3JhcCA9PSAndW5k
ZWZpbmVkJykKKyAgICAgICAgd29yZFdyYXA9X19rd2FyZ3Mud29yZFdyYXA7CisgICAgdmFyIF9f
ciA9IFt0ZXh0LCB3b3JkV3JhcF07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5jdGlvbiBfX3Vp
X0xhYmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9MYWJlbC5fX3dhc19pbml0aWFsaXpl
ZF9fKSByZXR1cm47CisgICAgX191aV9MYWJlbC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsK
KyAgICBpZighX191aV9XaWRnZXQuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAgX191aV9X
aWRnZXRfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfTGFiZWwsIF9fdWlfV2lk
Z2V0KTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX0xh
YmVsOworICAgIF9fdWlfTGFiZWwucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24odGV4dCwg
d29yZFdyYXApIHsKKyAgICBpZiAodHlwZW9mIHRleHQgPT0gJ3VuZGVmaW5lZCcpIHRleHQ9bnVs
bDsKKyAgICBpZiAodHlwZW9mIHdvcmRXcmFwID09ICd1bmRlZmluZWQnKSB3b3JkV3JhcD10cnVl
OworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18odGhpcyk7Cisg
ICAgdGhpcy5ob3J6QWxpZ24gPSAnJzsKKyAgICB0aGlzLmNsaWNrTGlzdGVuZXJzID0gbmV3IHB5
anNsaWJfTGlzdChbXSk7CisgICAgdGhpcy5tb3VzZUxpc3RlbmVycyA9IG5ldyBweWpzbGliX0xp
c3QoW10pOworICAgIHRoaXMuc2V0RWxlbWVudChET01fY3JlYXRlRGl2KCkpOworICAgIHRoaXMu
c2lua0V2ZW50cyhfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05DTElDSyB8IF9fdWlf
RXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5NT1VTRUVWRU5UUyk7CisgICAgdGhpcy5zZXRTdHls
ZU5hbWUoJ2d3dC1MYWJlbCcpOworICAgIGlmICh0ZXh0KSB7CisgICAgdGhpcy5zZXRUZXh0KHRl
eHQpOworICAgIH0KKyAgICB0aGlzLnNldFdvcmRXcmFwKHdvcmRXcmFwKTsKKyAgICB9OworX191
aV9MYWJlbC5wcm90b3R5cGUuX19pbml0X18ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3
YXJncywgdGV4dCwgd29yZFdyYXAgKSB7CisgICAgaWYgKHR5cGVvZiB0ZXh0ID09ICd1bmRlZmlu
ZWQnKQorICAgICAgICB0ZXh0PV9fa3dhcmdzLnRleHQ7CisgICAgaWYgKHR5cGVvZiB3b3JkV3Jh
cCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgd29yZFdyYXA9X19rd2FyZ3Mud29yZFdyYXA7Cisg
ICAgdmFyIF9fciA9IFt0ZXh0LCB3b3JkV3JhcF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAg
X191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9f
dWlfTGFiZWwucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfTGFiZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy5wYXJzZV9r
d2FyZ3MgPSBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3M7CisgICAg
X191aV9MYWJlbC5wcm90b3R5cGUuYWRkQ2xpY2tMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVy
KSB7CisgICAgdGhpcy5jbGlja0xpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpOworICAgIH07Cisg
ICAgX191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZENsaWNrTGlzdGVuZXIgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGFiZWwucHJvdG90eXBlLmFkZENsaWNrTGlz
dGVuZXIuY2FsbC5hcHBseShfX3VpX0xhYmVsLnByb3RvdHlwZS5hZGRDbGlja0xpc3RlbmVyLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19fLmFk
ZENsaWNrTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGFiZWwucHJv
dG90eXBlLmFkZENsaWNrTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0xhYmVsLnByb3RvdHlwZS5hZGRNb3VzZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsK
KyAgICB0aGlzLm1vdXNlTGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBf
X3VpX0xhYmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkTW91c2VMaXN0ZW5lciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9MYWJlbC5wcm90b3R5cGUuYWRkTW91c2VMaXN0ZW5l
ci5jYWxsLmFwcGx5KF9fdWlfTGFiZWwucHJvdG90eXBlLmFkZE1vdXNlTGlzdGVuZXIsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkTW91
c2VMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MYWJlbC5wcm90b3R5
cGUuYWRkTW91c2VMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGFi
ZWwucHJvdG90eXBlLmdldEhvcml6b250YWxBbGlnbm1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5ob3J6QWxpZ247CisgICAgfTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0SG9yaXpvbnRhbEFsaWdubWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9MYWJlbC5wcm90b3R5cGUuZ2V0SG9yaXpvbnRhbEFsaWdubWVudC5jYWxsLmFw
cGx5KF9fdWlfTGFiZWwucHJvdG90eXBlLmdldEhvcml6b250YWxBbGlnbm1lbnQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SG9yaXpv
bnRhbEFsaWdubWVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MYWJlbC5wcm90
b3R5cGUuZ2V0SG9yaXpvbnRhbEFsaWdubWVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfTGFiZWwucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
RE9NX2dldElubmVyVGV4dCh0aGlzLmdldEVsZW1lbnQoKSk7CisgICAgfTsKKyAgICBfX3VpX0xh
YmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9MYWJlbC5wcm90b3R5cGUuZ2V0VGV4dC5jYWxsLmFwcGx5KF9fdWlfTGFiZWwu
cHJvdG90eXBlLmdldFRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xhYmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0VGV4dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9MYWJlbC5wcm90b3R5cGUuZ2V0VGV4dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfTGFiZWwucHJvdG90eXBlLmdldFdvcmRXcmFwID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
ICEoKERPTV9nZXRTdHlsZUF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ3doaXRlU3BhY2Un
KSA9PSAnbm93cmFwJykpOworICAgIH07CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFz
c19fLmdldFdvcmRXcmFwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0xhYmVs
LnByb3RvdHlwZS5nZXRXb3JkV3JhcC5jYWxsLmFwcGx5KF9fdWlfTGFiZWwucHJvdG90eXBlLmdl
dFdvcmRXcmFwLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUu
X19jbGFzc19fLmdldFdvcmRXcmFwLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xh
YmVsLnByb3RvdHlwZS5nZXRXb3JkV3JhcC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfTGFiZWwucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICB2YXIgdHlwZSA9IERPTV9ldmVudEdldFR5cGUoZXZlbnQpOworICAgIGlmICgodHlwZSA9PSAn
Y2xpY2snKSkgeworCisgICAgICAgIHZhciBfX2xpc3RlbmVyID0gdGhpcy5jbGlja0xpc3RlbmVy
cy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgCisgICAgaWYgKGxpc3RlbmVyLm9uQ2xpY2spIHsKKyAgICBs
aXN0ZW5lci5vbkNsaWNrKHRoaXMsIGV2ZW50KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgbGlz
dGVuZXIodGhpcywgZXZlbnQpOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICB9CisgICAgZWxzZSBpZiAoKHR5cGUgPT0gJ21vdXNlZG93bicpIHx8ICh0eXBlID09ICdtb3Vz
ZXVwJykgfHwgKHR5cGUgPT0gJ21vdXNlbW92ZScpIHx8ICh0eXBlID09ICdtb3VzZW92ZXInKSB8
fCAodHlwZSA9PSAnbW91c2VvdXQnKSkgeworICAgIF9fdWlfTW91c2VMaXN0ZW5lci5wcm90b3R5
cGUuX19jbGFzc19fLmZpcmVNb3VzZUV2ZW50KHRoaXMsIHRoaXMubW91c2VMaXN0ZW5lcnMsIHRo
aXMsIGV2ZW50KTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18ub25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
TGFiZWwucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50LmNhbGwuYXBwbHkoX191aV9MYWJlbC5wcm90
b3R5cGUub25Ccm93c2VyRXZlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xhYmVs
LnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfTGFiZWwucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50Lmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUucmVtb3ZlQ2xpY2tMaXN0ZW5lciA9
IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAgdGhpcy5jbGlja0xpc3RlbmVycy5yZW1vdmUobGlz
dGVuZXIpOworICAgIH07CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92
ZUNsaWNrTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGFiZWwu
cHJvdG90eXBlLnJlbW92ZUNsaWNrTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX0xhYmVsLnByb3Rv
dHlwZS5yZW1vdmVDbGlja0xpc3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9M
YWJlbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUNsaWNrTGlzdGVuZXIudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfTGFiZWwucHJvdG90eXBlLnJlbW92ZUNsaWNrTGlzdGVuZXIu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5yZW1vdmVN
b3VzZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLm1vdXNlTGlzdGVu
ZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5f
X2NsYXNzX18ucmVtb3ZlTW91c2VMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9MYWJlbC5wcm90b3R5cGUucmVtb3ZlTW91c2VMaXN0ZW5lci5jYWxsLmFwcGx5KF9f
dWlfTGFiZWwucHJvdG90eXBlLnJlbW92ZU1vdXNlTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlTW91c2VMaXN0ZW5l
ci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUucmVtb3Zl
TW91c2VMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGFiZWwucHJv
dG90eXBlLnNldEhvcml6b250YWxBbGlnbm1lbnQgPSBmdW5jdGlvbihhbGlnbikgeworICAgIHRo
aXMuaG9yekFsaWduID0gYWxpZ247CisgICAgRE9NX3NldFN0eWxlQXR0cmlidXRlKHRoaXMuZ2V0
RWxlbWVudCgpLCAndGV4dEFsaWduJywgYWxpZ24pOworICAgIH07CisgICAgX191aV9MYWJlbC5w
cm90b3R5cGUuX19jbGFzc19fLnNldEhvcml6b250YWxBbGlnbm1lbnQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfTGFiZWwucHJvdG90eXBlLnNldEhvcml6b250YWxBbGlnbm1l
bnQuY2FsbC5hcHBseShfX3VpX0xhYmVsLnByb3RvdHlwZS5zZXRIb3Jpem9udGFsQWxpZ25tZW50
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19f
LnNldEhvcml6b250YWxBbGlnbm1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
TGFiZWwucHJvdG90eXBlLnNldEhvcml6b250YWxBbGlnbm1lbnQuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dCkg
eworICAgIERPTV9zZXRJbm5lclRleHQodGhpcy5nZXRFbGVtZW50KCksIHRleHQpOworICAgIH07
CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRleHQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGFiZWwucHJvdG90eXBlLnNldFRleHQuY2FsbC5hcHBs
eShfX3VpX0xhYmVsLnByb3RvdHlwZS5zZXRUZXh0LCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9MYWJlbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRleHQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfTGFiZWwucHJvdG90eXBlLnNldFRleHQuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0xhYmVsLnByb3RvdHlwZS5zZXRXb3JkV3JhcCA9IGZ1bmN0aW9uKHdy
YXApIHsKKyAgICBpZiAod3JhcCkgeworICAgIHZhciBzdHlsZSA9ICdub3JtYWwnOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICB2YXIgc3R5bGUgPSAnbm93cmFwJzsKKyAgICB9CisgICAgRE9NX3Nl
dFN0eWxlQXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAnd2hpdGVTcGFjZScsIHN0eWxlKTsK
KyAgICB9OworICAgIF9fdWlfTGFiZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRXb3JkV3JhcCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9MYWJlbC5wcm90b3R5cGUuc2V0V29y
ZFdyYXAuY2FsbC5hcHBseShfX3VpX0xhYmVsLnByb3RvdHlwZS5zZXRXb3JkV3JhcCwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfTGFiZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRXb3Jk
V3JhcC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MYWJlbC5wcm90b3R5cGUuc2V0
V29yZFdyYXAuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfSFRNTCgp
IHsKK30KK2Z1bmN0aW9uIHVpX0hUTUwoaHRtbCwgd29yZFdyYXApIHsKKyAgICBpZiAodHlwZW9m
IGh0bWwgPT0gJ3VuZGVmaW5lZCcpIGh0bWw9bnVsbDsKKyAgICBpZiAodHlwZW9mIHdvcmRXcmFw
ID09ICd1bmRlZmluZWQnKSB3b3JkV3JhcD10cnVlOworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBf
X3VpX0hUTUwoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18u
YXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisK
K3VpX0hUTUwucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgaHRtbCwgd29yZFdy
YXAgKSB7CisgICAgaWYgKHR5cGVvZiBodG1sID09ICd1bmRlZmluZWQnKQorICAgICAgICBodG1s
PV9fa3dhcmdzLmh0bWw7CisgICAgaWYgKHR5cGVvZiB3b3JkV3JhcCA9PSAndW5kZWZpbmVkJykK
KyAgICAgICAgd29yZFdyYXA9X19rd2FyZ3Mud29yZFdyYXA7CisgICAgdmFyIF9fciA9IFtodG1s
LCB3b3JkV3JhcF07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5jdGlvbiBfX3VpX0hUTUxfaW5p
dGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX0hUTUwuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJu
OworICAgIF9fdWlfSFRNTC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBpZighX191
aV9MYWJlbC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX0xhYmVsX2luaXRpYWxp
emUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0hUTUwsIF9fdWlfTGFiZWwpOworICAgIF9fdWlf
SFRNTC5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9IVE1MOworICAgIF9fdWlfSFRN
TC5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbihodG1sLCB3b3JkV3JhcCkgeworICAgIGlm
ICh0eXBlb2YgaHRtbCA9PSAndW5kZWZpbmVkJykgaHRtbD1udWxsOworICAgIGlmICh0eXBlb2Yg
d29yZFdyYXAgPT0gJ3VuZGVmaW5lZCcpIHdvcmRXcmFwPXRydWU7CisgICAgX191aV9MYWJlbC5w
cm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMpOworICAgIHRoaXMuc2V0RWxlbWVudChE
T01fY3JlYXRlRGl2KCkpOworICAgIHRoaXMuc2lua0V2ZW50cyhfX3VpX0V2ZW50LnByb3RvdHlw
ZS5fX2NsYXNzX18uT05DTElDSyB8IF9fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5NT1VT
RUVWRU5UUyk7CisgICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1IVE1MJyk7CisgICAgaWYgKGh0
bWwpIHsKKyAgICB0aGlzLnNldEhUTUwoaHRtbCk7CisgICAgfQorICAgIHRoaXMuc2V0V29yZFdy
YXAod29yZFdyYXApOworICAgIH07CitfX3VpX0hUTUwucHJvdG90eXBlLl9faW5pdF9fLnBhcnNl
X2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIGh0bWwsIHdvcmRXcmFwICkgeworICAgIGlm
ICh0eXBlb2YgaHRtbCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgaHRtbD1fX2t3YXJncy5odG1s
OworICAgIGlmICh0eXBlb2Ygd29yZFdyYXAgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIHdvcmRX
cmFwPV9fa3dhcmdzLndvcmRXcmFwOworICAgIHZhciBfX3IgPSBbaHRtbCwgd29yZFdyYXBdOwor
ICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fdWlfSFRNTC5wcm90b3R5cGUuX19jbGFzc19fLl9f
aW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hUTUwucHJvdG90eXBl
Ll9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9IVE1MLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfSFRNTC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUwucHJvdG90eXBlLl9faW5pdF9f
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IVE1MLnByb3RvdHlwZS5fX2NsYXNz
X18uX19pbml0X18ucGFyc2Vfa3dhcmdzID0gX191aV9IVE1MLnByb3RvdHlwZS5fX2luaXRfXy5w
YXJzZV9rd2FyZ3M7CisgICAgX191aV9IVE1MLnByb3RvdHlwZS5nZXRIVE1MID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIERPTV9nZXRJbm5lckhUTUwodGhpcy5nZXRFbGVtZW50KCkpOworICAg
IH07CisgICAgX191aV9IVE1MLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SFRNTCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9IVE1MLnByb3RvdHlwZS5nZXRIVE1MLmNhbGwuYXBw
bHkoX191aV9IVE1MLnByb3RvdHlwZS5nZXRIVE1MLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9IVE1MLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9IVE1MLnByb3RvdHlwZS5nZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9IVE1MLnByb3RvdHlwZS5zZXRIVE1MID0gZnVuY3Rpb24oaHRtbCkgewor
ICAgIERPTV9zZXRJbm5lckhUTUwodGhpcy5nZXRFbGVtZW50KCksIGh0bWwpOworICAgIH07Cisg
ICAgX191aV9IVE1MLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0SFRNTCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9IVE1MLnByb3RvdHlwZS5zZXRIVE1MLmNhbGwuYXBwbHkoX191
aV9IVE1MLnByb3RvdHlwZS5zZXRIVE1MLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9I
VE1MLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9IVE1MLnByb3RvdHlwZS5zZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9
CitmdW5jdGlvbiBfX3VpX0hhc0hvcml6b250YWxBbGlnbm1lbnQoKSB7Cit9CitmdW5jdGlvbiB1
aV9IYXNIb3Jpem9udGFsQWxpZ25tZW50KCkgeworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3Vp
X0hhc0hvcml6b250YWxBbGlnbm1lbnQoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5z
dGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGlu
c3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfSGFzSG9yaXpvbnRhbEFsaWdubWVudF9pbml0
aWFsaXplKCkgeworICAgIGlmKF9fdWlfSGFzSG9yaXpvbnRhbEFsaWdubWVudC5fX3dhc19pbml0
aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9IYXNIb3Jpem9udGFsQWxpZ25tZW50Ll9fd2Fz
X2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIHB5anNfZXh0ZW5kKF9fdWlfSGFzSG9yaXpvbnRh
bEFsaWdubWVudCwgX19weWpzbGliX09iamVjdCk7CisgICAgX191aV9IYXNIb3Jpem9udGFsQWxp
Z25tZW50LnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX0hhc0hvcml6b250YWxBbGln
bm1lbnQ7CitfX3VpX0hhc0hvcml6b250YWxBbGlnbm1lbnQucHJvdG90eXBlLl9fY2xhc3NfXy5B
TElHTl9MRUZUID0gJ2xlZnQnOworX191aV9IYXNIb3Jpem9udGFsQWxpZ25tZW50LnByb3RvdHlw
ZS5fX2NsYXNzX18uQUxJR05fQ0VOVEVSID0gJ2NlbnRlcic7CitfX3VpX0hhc0hvcml6b250YWxB
bGlnbm1lbnQucHJvdG90eXBlLl9fY2xhc3NfXy5BTElHTl9SSUdIVCA9ICdyaWdodCc7Cit9Citm
dW5jdGlvbiBfX3VpX0hhc1ZlcnRpY2FsQWxpZ25tZW50KCkgeworfQorZnVuY3Rpb24gdWlfSGFz
VmVydGljYWxBbGlnbm1lbnQoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfSGFzVmVy
dGljYWxBbGlnbm1lbnQoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19p
bml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOwor
fQorCisKK2Z1bmN0aW9uIF9fdWlfSGFzVmVydGljYWxBbGlnbm1lbnRfaW5pdGlhbGl6ZSgpIHsK
KyAgICBpZihfX3VpX0hhc1ZlcnRpY2FsQWxpZ25tZW50Ll9fd2FzX2luaXRpYWxpemVkX18pIHJl
dHVybjsKKyAgICBfX3VpX0hhc1ZlcnRpY2FsQWxpZ25tZW50Ll9fd2FzX2luaXRpYWxpemVkX18g
PSB0cnVlOworICAgIHB5anNfZXh0ZW5kKF9fdWlfSGFzVmVydGljYWxBbGlnbm1lbnQsIF9fcHlq
c2xpYl9PYmplY3QpOworICAgIF9fdWlfSGFzVmVydGljYWxBbGlnbm1lbnQucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX25ld19fID0gdWlfSGFzVmVydGljYWxBbGlnbm1lbnQ7CitfX3VpX0hhc1ZlcnRp
Y2FsQWxpZ25tZW50LnByb3RvdHlwZS5fX2NsYXNzX18uQUxJR05fVE9QID0gJ3RvcCc7CitfX3Vp
X0hhc1ZlcnRpY2FsQWxpZ25tZW50LnByb3RvdHlwZS5fX2NsYXNzX18uQUxJR05fTUlERExFID0g
J21pZGRsZSc7CitfX3VpX0hhc1ZlcnRpY2FsQWxpZ25tZW50LnByb3RvdHlwZS5fX2NsYXNzX18u
QUxJR05fQk9UVE9NID0gJ2JvdHRvbSc7Cit9CitmdW5jdGlvbiBfX3VpX0hhc0FsaWdubWVudCgp
IHsKK30KK2Z1bmN0aW9uIHVpX0hhc0FsaWdubWVudCgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBu
ZXcgX191aV9IYXNBbGlnbm1lbnQoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFu
Y2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3Rh
bmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfSGFzQWxpZ25tZW50X2luaXRpYWxpemUoKSB7Cisg
ICAgaWYoX191aV9IYXNBbGlnbm1lbnQuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAg
IF9fdWlfSGFzQWxpZ25tZW50Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIHB5anNf
ZXh0ZW5kKF9fdWlfSGFzQWxpZ25tZW50LCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3VpX0hh
c0FsaWdubWVudC5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9IYXNBbGlnbm1lbnQ7
CitfX3VpX0hhc0FsaWdubWVudC5wcm90b3R5cGUuX19jbGFzc19fLkFMSUdOX0JPVFRPTSA9ICdi
b3R0b20nOworX191aV9IYXNBbGlnbm1lbnQucHJvdG90eXBlLl9fY2xhc3NfXy5BTElHTl9NSURE
TEUgPSAnbWlkZGxlJzsKK19fdWlfSGFzQWxpZ25tZW50LnByb3RvdHlwZS5fX2NsYXNzX18uQUxJ
R05fVE9QID0gJ3RvcCc7CitfX3VpX0hhc0FsaWdubWVudC5wcm90b3R5cGUuX19jbGFzc19fLkFM
SUdOX0NFTlRFUiA9ICdjZW50ZXInOworX191aV9IYXNBbGlnbm1lbnQucHJvdG90eXBlLl9fY2xh
c3NfXy5BTElHTl9MRUZUID0gJ2xlZnQnOworX191aV9IYXNBbGlnbm1lbnQucHJvdG90eXBlLl9f
Y2xhc3NfXy5BTElHTl9SSUdIVCA9ICdyaWdodCc7Cit9CitmdW5jdGlvbiBfX3VpX0NlbGxQYW5l
bCgpIHsKK30KK2Z1bmN0aW9uIHVpX0NlbGxQYW5lbCgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBu
ZXcgX191aV9DZWxsUGFuZWwoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2Uu
X19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQorCisKK2Z1bmN0aW9uIF9fdWlfQ2VsbFBhbmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYo
X191aV9DZWxsUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfQ2Vs
bFBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX0NvbXBsZXhQ
YW5lbC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX0NvbXBsZXhQYW5lbF9pbml0
aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9DZWxsUGFuZWwsIF9fdWlfQ29tcGxleFBh
bmVsKTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1
aV9DZWxsUGFuZWw7CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9faW5pdF9fID0gZnVu
Y3Rpb24oKSB7CisgICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXyh0aGlzKTsKKyAgICB0aGlzLnRhYmxlID0gRE9NX2NyZWF0ZVRhYmxlKCk7CisgICAgdGhp
cy5ib2R5ID0gRE9NX2NyZWF0ZVRCb2R5KCk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRoaXMudGFi
bGUsIHRoaXMuYm9keSk7CisgICAgdGhpcy5zZXRFbGVtZW50KHRoaXMudGFibGUpOworICAgIH07
CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9faW5pdF9f
LmNhbGwuYXBwbHkoX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRf
Xy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9f
aW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90
eXBlLmdldFRhYmxlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGU7CisgICAg
fTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFRhYmxlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuZ2V0VGFi
bGUuY2FsbC5hcHBseShfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuZ2V0VGFibGUsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFRh
YmxlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUu
Z2V0VGFibGUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90
b3R5cGUuZ2V0Qm9keSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJvZHk7CisgICAg
fTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldEJvZHkgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5nZXRCb2R5
LmNhbGwuYXBwbHkoX191aV9DZWxsUGFuZWwucHJvdG90eXBlLmdldEJvZHksIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldEJvZHku
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5nZXRC
b2R5Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBl
LmdldFNwYWNpbmcgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zcGFjaW5nOworICAg
IH07CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTcGFjaW5nID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuZ2V0
U3BhY2luZy5jYWxsLmFwcGx5KF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5nZXRTcGFjaW5nLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRTcGFjaW5nLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxQYW5lbC5w
cm90b3R5cGUuZ2V0U3BhY2luZy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2Vs
bFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRUZCA9IGZ1bmN0aW9uKHdpZGdldCkgeworICAgIGlm
ICgod2lkZ2V0LmdldFBhcmVudCgpICE9IHRoaXMpKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAg
ICByZXR1cm4gRE9NX2dldFBhcmVudCh3aWRnZXQuZ2V0RWxlbWVudCgpKTsKKyAgICB9OworICAg
IF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0VGQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRU
ZC5jYWxsLmFwcGx5KF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRUZCwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0
V2lkZ2V0VGQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3Rv
dHlwZS5nZXRXaWRnZXRUZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbFBh
bmVsLnByb3RvdHlwZS5zZXRCb3JkZXJXaWR0aCA9IGZ1bmN0aW9uKHdpZHRoKSB7CisgICAgRE9N
X3NldEF0dHJpYnV0ZSh0aGlzLnRhYmxlLCAnYm9yZGVyJywgICggJycgKyB3aWR0aCApICk7Cisg
ICAgfTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldEJvcmRlcldp
ZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0NlbGxQYW5lbC5wcm90b3R5
cGUuc2V0Qm9yZGVyV2lkdGguY2FsbC5hcHBseShfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuc2V0
Qm9yZGVyV2lkdGgsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLnNldEJvcmRlcldpZHRoLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuc2V0Qm9yZGVyV2lkdGguaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuc2V0Q2VsbEhlaWdodCA9IGZ1
bmN0aW9uKHdpZGdldCwgaGVpZ2h0KSB7CisgICAgdmFyIHRkID0gRE9NX2dldFBhcmVudCh3aWRn
ZXQuZ2V0RWxlbWVudCgpKTsKKyAgICBET01fc2V0QXR0cmlidXRlKHRkLCAnaGVpZ2h0JywgaGVp
Z2h0KTsKKyAgICB9OworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0
Q2VsbEhlaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9DZWxsUGFuZWwu
cHJvdG90eXBlLnNldENlbGxIZWlnaHQuY2FsbC5hcHBseShfX3VpX0NlbGxQYW5lbC5wcm90b3R5
cGUuc2V0Q2VsbEhlaWdodCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfQ2VsbFBhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q2VsbEhlaWdodC51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLnNldENlbGxIZWlnaHQuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuc2V0Q2VsbEhvcml6b250
YWxBbGlnbm1lbnQgPSBmdW5jdGlvbih3aWRnZXQsIGFsaWduKSB7CisgICAgdmFyIHRkID0gdGhp
cy5nZXRXaWRnZXRUZCh3aWRnZXQpOworICAgIGlmICgodGQgIT0gbnVsbCkpIHsKKyAgICBET01f
c2V0QXR0cmlidXRlKHRkLCAnYWxpZ24nLCBhbGlnbik7CisgICAgfQorICAgIH07CisgICAgX191
aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsSG9yaXpvbnRhbEFsaWdubWVu
dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9DZWxsUGFuZWwucHJvdG90eXBl
LnNldENlbGxIb3Jpem9udGFsQWxpZ25tZW50LmNhbGwuYXBwbHkoX191aV9DZWxsUGFuZWwucHJv
dG90eXBlLnNldENlbGxIb3Jpem9udGFsQWxpZ25tZW50LCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsSG9yaXpvbnRhbEFs
aWdubWVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90
eXBlLnNldENlbGxIb3Jpem9udGFsQWxpZ25tZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLnNldENlbGxWZXJ0aWNhbEFsaWdubWVudCA9IGZ1
bmN0aW9uKHdpZGdldCwgYWxpZ24pIHsKKyAgICB2YXIgdGQgPSB0aGlzLmdldFdpZGdldFRkKHdp
ZGdldCk7CisgICAgaWYgKCh0ZCAhPSBudWxsKSkgeworICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0
ZSh0ZCwgJ3ZlcnRpY2FsQWxpZ24nLCBhbGlnbik7CisgICAgfQorICAgIH07CisgICAgX191aV9D
ZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsVmVydGljYWxBbGlnbm1lbnQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5zZXRD
ZWxsVmVydGljYWxBbGlnbm1lbnQuY2FsbC5hcHBseShfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUu
c2V0Q2VsbFZlcnRpY2FsQWxpZ25tZW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9D
ZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsVmVydGljYWxBbGlnbm1lbnQudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5zZXRDZWxs
VmVydGljYWxBbGlnbm1lbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxQ
YW5lbC5wcm90b3R5cGUuc2V0Q2VsbFdpZHRoID0gZnVuY3Rpb24od2lkZ2V0LCB3aWR0aCkgewor
ICAgIHZhciB0ZCA9IERPTV9nZXRQYXJlbnQod2lkZ2V0LmdldEVsZW1lbnQoKSk7CisgICAgRE9N
X3NldEF0dHJpYnV0ZSh0ZCwgJ3dpZHRoJywgd2lkdGgpOworICAgIH07CisgICAgX191aV9DZWxs
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsV2lkdGggPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5zZXRDZWxsV2lkdGguY2FsbC5h
cHBseShfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuc2V0Q2VsbFdpZHRoLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsV2lk
dGgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5z
ZXRDZWxsV2lkdGguaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0NlbGxQYW5lbC5w
cm90b3R5cGUuc2V0U3BhY2luZyA9IGZ1bmN0aW9uKHNwYWNpbmcpIHsKKyAgICB0aGlzLnNwYWNp
bmcgPSBzcGFjaW5nOworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGhpcy50YWJsZSwgJ2NlbGxT
cGFjaW5nJywgc3BhY2luZyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUu
X19jbGFzc19fLnNldFNwYWNpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
Q2VsbFBhbmVsLnByb3RvdHlwZS5zZXRTcGFjaW5nLmNhbGwuYXBwbHkoX191aV9DZWxsUGFuZWwu
cHJvdG90eXBlLnNldFNwYWNpbmcsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0NlbGxQ
YW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFNwYWNpbmcudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5zZXRTcGFjaW5nLmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX0hvcml6b250YWxQYW5lbCgpIHsKK30KK2Z1bmN0
aW9uIHVpX0hvcml6b250YWxQYW5lbCgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9I
b3Jpem9udGFsUGFuZWwoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19p
bml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOwor
fQorCisKK2Z1bmN0aW9uIF9fdWlfSG9yaXpvbnRhbFBhbmVsX2luaXRpYWxpemUoKSB7CisgICAg
aWYoX191aV9Ib3Jpem9udGFsUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAg
IF9fdWlfSG9yaXpvbnRhbFBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlm
KCFfX3VpX0NlbGxQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX0NlbGxQ
YW5lbF9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9Ib3Jpem9udGFsUGFuZWws
IF9fdWlfQ2VsbFBhbmVsKTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLl9fbmV3X18gPSB1aV9Ib3Jpem9udGFsUGFuZWw7CisgICAgX191aV9Ib3Jpem9udGFs
UGFuZWwucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgX191aV9DZWxsUGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlzKTsKKyAgICB0aGlzLmhvcnpBbGln
biA9IF9fdWlfSGFzSG9yaXpvbnRhbEFsaWdubWVudC5wcm90b3R5cGUuX19jbGFzc19fLkFMSUdO
X0xFRlQ7CisgICAgdGhpcy52ZXJ0QWxpZ24gPSBfX3VpX0hhc1ZlcnRpY2FsQWxpZ25tZW50LnBy
b3RvdHlwZS5fX2NsYXNzX18uQUxJR05fVE9QOworICAgIHRoaXMudGFibGVSb3cgPSBET01fY3Jl
YXRlVFIoKTsKKyAgICBET01fYXBwZW5kQ2hpbGQodGhpcy5nZXRCb2R5KCksIHRoaXMudGFibGVS
b3cpOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5nZXRUYWJsZSgpLCAnY2VsbFNwYWNpbmcn
LCAnMCcpOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5nZXRUYWJsZSgpLCAnY2VsbFBhZGRp
bmcnLCAnMCcpOworICAgIH07CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Ib3Jp
em9udGFsUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9Ib3Jpem9udGFs
UGFuZWwucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9I
b3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBl
LmFkZCA9IGZ1bmN0aW9uKHdpZGdldCkgeworICAgIHRoaXMuaW5zZXJ0KHdpZGdldCwgdGhpcy5n
ZXRXaWRnZXRDb3VudCgpKTsKKyAgICB9OworICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uYWRkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hv
cml6b250YWxQYW5lbC5wcm90b3R5cGUuYWRkLmNhbGwuYXBwbHkoX191aV9Ib3Jpem9udGFsUGFu
ZWwucHJvdG90eXBlLmFkZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSG9yaXpvbnRh
bFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuYWRkLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmdldEhvcml6b250YWxBbGln
bm1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5ob3J6QWxpZ247CisgICAgfTsK
KyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldEhvcml6b250
YWxBbGlnbm1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSG9yaXpvbnRh
bFBhbmVsLnByb3RvdHlwZS5nZXRIb3Jpem9udGFsQWxpZ25tZW50LmNhbGwuYXBwbHkoX191aV9I
b3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmdldEhvcml6b250YWxBbGlnbm1lbnQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LmdldEhvcml6b250YWxBbGlnbm1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
SG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5nZXRIb3Jpem9udGFsQWxpZ25tZW50Lmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmdldFZl
cnRpY2FsQWxpZ25tZW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMudmVydEFsaWdu
OworICAgIH07CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5n
ZXRWZXJ0aWNhbEFsaWdubWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9I
b3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmdldFZlcnRpY2FsQWxpZ25tZW50LmNhbGwuYXBwbHko
X191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmdldFZlcnRpY2FsQWxpZ25tZW50LCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5nZXRWZXJ0aWNhbEFsaWdubWVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmdldFZlcnRpY2FsQWxpZ25tZW50Lmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmdldFdp
ZGdldCA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uX19nZXRp
dGVtX18oaW5kZXgpOworICAgIH07CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBl
Ll9fY2xhc3NfXy5nZXRXaWRnZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
SG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQuY2FsbC5hcHBseShfX3VpX0hvcml6
b250YWxQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXQudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5nZXRX
aWRnZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5w
cm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gcHlqc2xp
Yl9sZW4odGhpcy5jaGlsZHJlbik7CisgICAgfTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdldENvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQuY2Fs
bC5hcHBseShfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLmdldFdpZGdldENvdW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hv
cml6b250YWxQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0SW5kZXgg
PSBmdW5jdGlvbihjaGlsZCkgeworICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmluZGV4KGNoaWxk
KTsKKyAgICB9OworICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0V2lkZ2V0SW5kZXggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSG9yaXpv
bnRhbFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleC5jYWxsLmFwcGx5KF9fdWlfSG9yaXpv
bnRhbFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0SW5k
ZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3Rv
dHlwZS5nZXRXaWRnZXRJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSG9y
aXpvbnRhbFBhbmVsLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbih3aWRnZXQsIGJlZm9yZUlu
ZGV4KSB7CisgICAgd2lkZ2V0LnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2YXIgdGQgPSBET01f
Y3JlYXRlVEQoKTsKKyAgICBET01faW5zZXJ0Q2hpbGQodGhpcy50YWJsZVJvdywgdGQsIGJlZm9y
ZUluZGV4KTsKKyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmluc2VydCh0
aGlzLCB3aWRnZXQsIHRkLCBiZWZvcmVJbmRleCk7CisgICAgdGhpcy5zZXRDZWxsSG9yaXpvbnRh
bEFsaWdubWVudCh3aWRnZXQsIHRoaXMuaG9yekFsaWduKTsKKyAgICB0aGlzLnNldENlbGxWZXJ0
aWNhbEFsaWdubWVudCh3aWRnZXQsIHRoaXMudmVydEFsaWduKTsKKyAgICB9OworICAgIF9fdWlf
SG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uaW5zZXJ0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuaW5zZXJ0LmNh
bGwuYXBwbHkoX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLmluc2VydCwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
aW5zZXJ0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5w
cm90b3R5cGUuaW5zZXJ0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Ib3Jpem9u
dGFsUGFuZWwucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHdpZGdldCkgeworICAgIGlmICgo
d2lkZ2V0LmdldFBhcmVudCgpICE9IHRoaXMpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICB2YXIgdGQgPSBET01fZ2V0UGFyZW50KHdpZGdldC5nZXRFbGVtZW50KCkpOworICAgIERP
TV9yZW1vdmVDaGlsZCh0aGlzLnRhYmxlUm93LCB0ZCk7CisgICAgX191aV9DZWxsUGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5yZW1vdmUod2lkZ2V0KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5
cGUucmVtb3ZlLmNhbGwuYXBwbHkoX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLnJlbW92
ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSG9yaXpvbnRhbFBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18ucmVtb3ZlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hvcml6
b250YWxQYW5lbC5wcm90b3R5cGUucmVtb3ZlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLnNldEhvcml6b250YWxBbGlnbm1lbnQgPSBm
dW5jdGlvbihhbGlnbikgeworICAgIHRoaXMuaG9yekFsaWduID0gYWxpZ247CisgICAgfTsKKyAg
ICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldEhvcml6b250YWxB
bGlnbm1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSG9yaXpvbnRhbFBh
bmVsLnByb3RvdHlwZS5zZXRIb3Jpem9udGFsQWxpZ25tZW50LmNhbGwuYXBwbHkoX191aV9Ib3Jp
em9udGFsUGFuZWwucHJvdG90eXBlLnNldEhvcml6b250YWxBbGlnbm1lbnQsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0hvcml6b250YWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNl
dEhvcml6b250YWxBbGlnbm1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSG9y
aXpvbnRhbFBhbmVsLnByb3RvdHlwZS5zZXRIb3Jpem9udGFsQWxpZ25tZW50Lmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLnNldFZlcnRp
Y2FsQWxpZ25tZW50ID0gZnVuY3Rpb24oYWxpZ24pIHsKKyAgICB0aGlzLnZlcnRBbGlnbiA9IGFs
aWduOworICAgIH07CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9fY2xhc3Nf
Xy5zZXRWZXJ0aWNhbEFsaWdubWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLnNldFZlcnRpY2FsQWxpZ25tZW50LmNhbGwuYXBw
bHkoX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLnNldFZlcnRpY2FsQWxpZ25tZW50LCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXRWZXJ0aWNhbEFsaWdubWVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9Ib3Jpem9udGFsUGFuZWwucHJvdG90eXBlLnNldFZlcnRpY2FsQWxpZ25tZW50Lmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX1ZlcnRpY2FsUGFuZWwoKSB7Cit9
CitmdW5jdGlvbiB1aV9WZXJ0aWNhbFBhbmVsKCkgeworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBf
X3VpX1ZlcnRpY2FsUGFuZWwoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2Uu
X19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQorCisKK2Z1bmN0aW9uIF9fdWlfVmVydGljYWxQYW5lbF9pbml0aWFsaXplKCkgeworICAg
IGlmKF9fdWlfVmVydGljYWxQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAg
X191aV9WZXJ0aWNhbFBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFf
X3VpX0NlbGxQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX0NlbGxQYW5l
bF9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9WZXJ0aWNhbFBhbmVsLCBfX3Vp
X0NlbGxQYW5lbCk7CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
X19uZXdfXyA9IHVpX1ZlcnRpY2FsUGFuZWw7CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3Rv
dHlwZS5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18uX19pbml0X18odGhpcyk7CisgICAgdGhpcy5ob3J6QWxpZ24gPSBfX3VpX0hh
c0hvcml6b250YWxBbGlnbm1lbnQucHJvdG90eXBlLl9fY2xhc3NfXy5BTElHTl9MRUZUOworICAg
IHRoaXMudmVydEFsaWduID0gX191aV9IYXNWZXJ0aWNhbEFsaWdubWVudC5wcm90b3R5cGUuX19j
bGFzc19fLkFMSUdOX1RPUDsKKyAgICBET01fc2V0QXR0cmlidXRlKHRoaXMuZ2V0VGFibGUoKSwg
J2NlbGxTcGFjaW5nJywgJzAnKTsKKyAgICBET01fc2V0QXR0cmlidXRlKHRoaXMuZ2V0VGFibGUo
KSwgJ2NlbGxQYWRkaW5nJywgJzAnKTsKKyAgICB9OworICAgIF9fdWlfVmVydGljYWxQYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9W
ZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLl9faW5pdF9f
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlw
ZS5hZGQgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICB0aGlzLmluc2VydCh3aWRnZXQsIHRoaXMu
Z2V0V2lkZ2V0Q291bnQoKSk7CisgICAgfTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90
eXBlLl9fY2xhc3NfXy5hZGQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVmVy
dGljYWxQYW5lbC5wcm90b3R5cGUuYWRkLmNhbGwuYXBwbHkoX191aV9WZXJ0aWNhbFBhbmVsLnBy
b3RvdHlwZS5hZGQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5hZGQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VmVydGljYWxQYW5lbC5wcm90b3R5cGUuYWRkLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5nZXRIb3Jpem9udGFsQWxpZ25tZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaG9yekFsaWduOworICAgIH07CisgICAgX191aV9W
ZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SG9yaXpvbnRhbEFsaWdubWVudCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlw
ZS5nZXRIb3Jpem9udGFsQWxpZ25tZW50LmNhbGwuYXBwbHkoX191aV9WZXJ0aWNhbFBhbmVsLnBy
b3RvdHlwZS5nZXRIb3Jpem9udGFsQWxpZ25tZW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SG9yaXpvbnRhbEFsaWdu
bWVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3Rv
dHlwZS5nZXRIb3Jpem9udGFsQWxpZ25tZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5nZXRWZXJ0aWNhbEFsaWdubWVudCA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLnZlcnRBbGlnbjsKKyAgICB9OworICAgIF9fdWlfVmVy
dGljYWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFZlcnRpY2FsQWxpZ25tZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLmdl
dFZlcnRpY2FsQWxpZ25tZW50LmNhbGwuYXBwbHkoX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlw
ZS5nZXRWZXJ0aWNhbEFsaWdubWVudCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVmVy
dGljYWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFZlcnRpY2FsQWxpZ25tZW50LnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLmdldFZl
cnRpY2FsQWxpZ25tZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9WZXJ0aWNh
bFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQgPSBmdW5jdGlvbihpbmRleCkgeworICAgIHJldHVy
biB0aGlzLmNoaWxkcmVuLl9fZ2V0aXRlbV9fKGluZGV4KTsKKyAgICB9OworICAgIF9fdWlfVmVy
dGljYWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdldCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQuY2Fs
bC5hcHBseShfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLmdldFdpZGdldCwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdl
dFdpZGdldC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnBy
b3RvdHlwZS5nZXRXaWRnZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1ZlcnRp
Y2FsUGFuZWwucHJvdG90eXBlLmdldFdpZGdldENvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHB5anNsaWJfbGVuKHRoaXMuY2hpbGRyZW4pOworICAgIH07CisgICAgX191aV9WZXJ0aWNh
bFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0Q291bnQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291
bnQuY2FsbC5hcHBseShfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLmdldFdpZGdldENvdW50
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0V2lkZ2V0Q291bnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VmVydGljYWxQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLmdldFdpZGdldEluZGV4ID0g
ZnVuY3Rpb24oY2hpbGQpIHsKKyAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5pbmRleChjaGlsZCk7
CisgICAgfTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRX
aWRnZXRJbmRleCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9WZXJ0aWNhbFBh
bmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleC5jYWxsLmFwcGx5KF9fdWlfVmVydGljYWxQYW5l
bC5wcm90b3R5cGUuZ2V0V2lkZ2V0SW5kZXgsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXRJbmRleC51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5nZXRXaWRn
ZXRJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVmVydGljYWxQYW5lbC5w
cm90b3R5cGUuc2V0V2lkZ2V0ID0gZnVuY3Rpb24oaW5kZXgsIHdpZGdldCkgeworICAgIHZhciBl
eGlzdGluZyA9IHRoaXMuZ2V0V2lkZ2V0KGluZGV4KTsKKyAgICBpZiAoZXhpc3RpbmcpIHsKKyAg
ICB0aGlzLnJlbW92ZShleGlzdGluZyk7CisgICAgfQorICAgIHRoaXMuaW5zZXJ0KHdpZGdldCwg
aW5kZXgpOworICAgIH07CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNz
X18uc2V0V2lkZ2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1ZlcnRpY2Fs
UGFuZWwucHJvdG90eXBlLnNldFdpZGdldC5jYWxsLmFwcGx5KF9fdWlfVmVydGljYWxQYW5lbC5w
cm90b3R5cGUuc2V0V2lkZ2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9WZXJ0aWNh
bFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0V2lkZ2V0LnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLnNldFdpZGdldC5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuaW5zZXJ0ID0g
ZnVuY3Rpb24od2lkZ2V0LCBiZWZvcmVJbmRleCkgeworICAgIHdpZGdldC5yZW1vdmVGcm9tUGFy
ZW50KCk7CisgICAgdmFyIHRyID0gRE9NX2NyZWF0ZVRSKCk7CisgICAgdmFyIHRkID0gRE9NX2Ny
ZWF0ZVREKCk7CisgICAgRE9NX2luc2VydENoaWxkKHRoaXMuZ2V0Qm9keSgpLCB0ciwgYmVmb3Jl
SW5kZXgpOworICAgIERPTV9hcHBlbmRDaGlsZCh0ciwgdGQpOworICAgIF9fdWlfQ2VsbFBhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uaW5zZXJ0KHRoaXMsIHdpZGdldCwgdGQsIGJlZm9yZUluZGV4
KTsKKyAgICB0aGlzLnNldENlbGxIb3Jpem9udGFsQWxpZ25tZW50KHdpZGdldCwgdGhpcy5ob3J6
QWxpZ24pOworICAgIHRoaXMuc2V0Q2VsbFZlcnRpY2FsQWxpZ25tZW50KHdpZGdldCwgdGhpcy52
ZXJ0QWxpZ24pOworICAgIH07CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18uaW5zZXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1ZlcnRpY2Fs
UGFuZWwucHJvdG90eXBlLmluc2VydC5jYWxsLmFwcGx5KF9fdWlfVmVydGljYWxQYW5lbC5wcm90
b3R5cGUuaW5zZXJ0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9WZXJ0aWNhbFBhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uaW5zZXJ0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLmluc2VydC5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24od2lk
Z2V0KSB7CisgICAgaWYgKHB5anNsaWJfaXNOdW1iZXIod2lkZ2V0KSkgeworICAgIHZhciB3aWRn
ZXQgPSB0aGlzLmdldFdpZGdldCh3aWRnZXQpOworICAgIH0KKyAgICBpZiAoKHdpZGdldC5nZXRQ
YXJlbnQoKSAhPSB0aGlzKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdmFyIHRk
ID0gRE9NX2dldFBhcmVudCh3aWRnZXQuZ2V0RWxlbWVudCgpKTsKKyAgICB2YXIgdHIgPSBET01f
Z2V0UGFyZW50KHRkKTsKKyAgICBET01fcmVtb3ZlQ2hpbGQodGhpcy5nZXRCb2R5KCksIHRyKTsK
KyAgICBfX3VpX0NlbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZSh0aGlzLCB3aWRn
ZXQpOworICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgX191aV9WZXJ0aWNhbFBhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLnJlbW92ZS5jYWxsLmFwcGx5KF9fdWlfVmVydGlj
YWxQYW5lbC5wcm90b3R5cGUucmVtb3ZlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9W
ZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLnJlbW92ZS5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuc2V0SG9yaXpv
bnRhbEFsaWdubWVudCA9IGZ1bmN0aW9uKGFsaWduKSB7CisgICAgdGhpcy5ob3J6QWxpZ24gPSBh
bGlnbjsKKyAgICB9OworICAgIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LnNldEhvcml6b250YWxBbGlnbm1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbEFsaWdubWVudC5jYWxsLmFw
cGx5KF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbEFsaWdubWVudCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLnNldEhvcml6b250YWxBbGlnbm1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbEFsaWdubWVudC5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuc2V0
VmVydGljYWxBbGlnbm1lbnQgPSBmdW5jdGlvbihhbGlnbikgeworICAgIHRoaXMudmVydEFsaWdu
ID0gYWxpZ247CisgICAgfTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRWZXJ0aWNhbEFsaWdubWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5zZXRWZXJ0aWNhbEFsaWdubWVudC5jYWxsLmFw
cGx5KF9fdWlfVmVydGljYWxQYW5lbC5wcm90b3R5cGUuc2V0VmVydGljYWxBbGlnbm1lbnQsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1ZlcnRpY2FsUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRWZXJ0aWNhbEFsaWdubWVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9WZXJ0aWNhbFBhbmVsLnByb3RvdHlwZS5zZXRWZXJ0aWNhbEFsaWdubWVudC5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9MYXlvdXREYXRhKCkgeworfQorZnVuY3Rp
b24gdWlfTGF5b3V0RGF0YShkaXJlY3Rpb24pIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191
aV9MYXlvdXREYXRhKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5p
dF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30K
KworCitmdW5jdGlvbiBfX3VpX0xheW91dERhdGFfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3Vp
X0xheW91dERhdGEuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfTGF5b3V0
RGF0YS5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0xh
eW91dERhdGEsIF9fcHlqc2xpYl9PYmplY3QpOworICAgIF9fdWlfTGF5b3V0RGF0YS5wcm90b3R5
cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9MYXlvdXREYXRhOworICAgIF9fdWlfTGF5b3V0RGF0
YS5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbihkaXJlY3Rpb24pIHsKKyAgICB0aGlzLmRp
cmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICB0aGlzLmhBbGlnbiA9ICdsZWZ0JzsKKyAgICB0aGlz
LmhlaWdodCA9ICcnOworICAgIHRoaXMudGQgPSBudWxsOworICAgIHRoaXMudkFsaWduID0gJ3Rv
cCc7CisgICAgdGhpcy53aWR0aCA9ICcnOworICAgIH07CisgICAgX191aV9MYXlvdXREYXRhLnBy
b3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfTGF5b3V0RGF0YS5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX0xheW91
dERhdGEucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9M
YXlvdXREYXRhLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfTGF5b3V0RGF0YS5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfRG9ja1BhbmVsKCkgeworfQorZnVuY3Rpb24g
dWlfRG9ja1BhbmVsKCkgeworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX0RvY2tQYW5lbCgp
OworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0
YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24g
X191aV9Eb2NrUGFuZWxfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX0RvY2tQYW5lbC5fX3dh
c19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9Eb2NrUGFuZWwuX193YXNfaW5pdGlh
bGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfQ2VsbFBhbmVsLl9fd2FzX2luaXRpYWxpemVk
X18pCisgICAgICAgIF9fdWlfQ2VsbFBhbmVsX2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVu
ZChfX3VpX0RvY2tQYW5lbCwgX191aV9DZWxsUGFuZWwpOworICAgIF9fdWlfRG9ja1BhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX0RvY2tQYW5lbDsKK19fdWlfRG9ja1BhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uQ0VOVEVSID0gJ2NlbnRlcic7CitfX3VpX0RvY2tQYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLkVBU1QgPSAnZWFzdCc7CitfX3VpX0RvY2tQYW5lbC5wcm90b3R5
cGUuX19jbGFzc19fLk5PUlRIID0gJ25vcnRoJzsKK19fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5f
X2NsYXNzX18uU09VVEggPSAnc291dGgnOworX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5XRVNUID0gJ3dlc3QnOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5fX2luaXRf
XyA9IGZ1bmN0aW9uKCkgeworICAgIF9fdWlfQ2VsbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
X19pbml0X18odGhpcyk7CisgICAgdGhpcy5ob3J6QWxpZ24gPSBfX3VpX0hhc0hvcml6b250YWxB
bGlnbm1lbnQucHJvdG90eXBlLl9fY2xhc3NfXy5BTElHTl9MRUZUOworICAgIHRoaXMudmVydEFs
aWduID0gX191aV9IYXNWZXJ0aWNhbEFsaWdubWVudC5wcm90b3R5cGUuX19jbGFzc19fLkFMSUdO
X1RPUDsKKyAgICB0aGlzLmNlbnRlciA9IG51bGw7CisgICAgdGhpcy5kb2NrX2NoaWxkcmVuID0g
bmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAgRE9NX3NldEludEF0dHJpYnV0ZSh0aGlzLmdldFRh
YmxlKCksICdjZWxsU3BhY2luZycsIDApOworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGhpcy5n
ZXRUYWJsZSgpLCAnY2VsbFBhZGRpbmcnLCAwKTsKKyAgICB9OworICAgIF9fdWlfRG9ja1BhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9fdWlfRG9j
a1BhbmVsLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
RG9ja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih3
aWRnZXQsIGRpcmVjdGlvbikgeworICAgIGlmICgoZGlyZWN0aW9uID09IHRoaXMuQ0VOVEVSKSkg
eworICAgIGlmICgodGhpcy5jZW50ZXIgIT0gbnVsbCkpIHsKKyAgICBjb25zb2xlLmVycm9yKCdP
bmx5IG9uZSBDRU5URVIgd2lkZ2V0IG1heSBiZSBhZGRlZCcpOworICAgIH0KKyAgICB0aGlzLmNl
bnRlciA9IHdpZGdldDsKKyAgICB9CisgICAgdmFyIGxheW91dCA9IHVpX0xheW91dERhdGEoZGly
ZWN0aW9uKTsKKyAgICB3aWRnZXQuc2V0TGF5b3V0RGF0YShsYXlvdXQpOworICAgIHRoaXMuc2V0
Q2VsbEhvcml6b250YWxBbGlnbm1lbnQod2lkZ2V0LCB0aGlzLmhvcnpBbGlnbik7CisgICAgdGhp
cy5zZXRDZWxsVmVydGljYWxBbGlnbm1lbnQod2lkZ2V0LCB0aGlzLnZlcnRBbGlnbik7CisgICAg
dGhpcy5kb2NrX2NoaWxkcmVuLmFwcGVuZCh3aWRnZXQpOworICAgIHRoaXMucmVhbGl6ZVRhYmxl
KHdpZGdldCk7CisgICAgfTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LmFkZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Eb2NrUGFuZWwucHJvdG90
eXBlLmFkZC5jYWxsLmFwcGx5KF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5hZGQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZC51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLmFkZC5p
bnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5nZXRI
b3Jpem9udGFsQWxpZ25tZW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaG9yekFs
aWduOworICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRI
b3Jpem9udGFsQWxpZ25tZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Rv
Y2tQYW5lbC5wcm90b3R5cGUuZ2V0SG9yaXpvbnRhbEFsaWdubWVudC5jYWxsLmFwcGx5KF9fdWlf
RG9ja1BhbmVsLnByb3RvdHlwZS5nZXRIb3Jpem9udGFsQWxpZ25tZW50LCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRIb3Jpem9u
dGFsQWxpZ25tZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RvY2tQYW5lbC5w
cm90b3R5cGUuZ2V0SG9yaXpvbnRhbEFsaWdubWVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5nZXRWZXJ0aWNhbEFsaWdubWVudCA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLnZlcnRBbGlnbjsKKyAgICB9OworICAgIF9fdWlfRG9j
a1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VmVydGljYWxBbGlnbm1lbnQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5nZXRWZXJ0aWNh
bEFsaWdubWVudC5jYWxsLmFwcGx5KF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5nZXRWZXJ0aWNh
bEFsaWdubWVudCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRG9ja1BhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0VmVydGljYWxBbGlnbm1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5nZXRWZXJ0aWNhbEFsaWdubWVudC5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRn
ZXREaXJlY3Rpb24gPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICBpZiAoKHdpZGdldC5nZXRQYXJl
bnQoKSAhPSB0aGlzKSkgeworICAgIHJldHVybjsKKyAgICB9CisgICAgcmV0dXJuIHdpZGdldC5n
ZXRMYXlvdXREYXRhKCkuZGlyZWN0aW9uOworICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXREaXJlY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXREaXJlY3Rpb24uY2Fs
bC5hcHBseShfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0RGlyZWN0aW9uLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5n
ZXRXaWRnZXREaXJlY3Rpb24udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1Bh
bmVsLnByb3RvdHlwZS5nZXRXaWRnZXREaXJlY3Rpb24uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24od2lkZ2V0KSB7
CisgICAgaWYgKCh3aWRnZXQgPT0gdGhpcy5jZW50ZXIpKSB7CisgICAgdGhpcy5jZW50ZXIgPSBu
dWxsOworICAgIH0KKyAgICB2YXIgcmV0ID0gX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5yZW1vdmUodGhpcywgd2lkZ2V0KTsKKyAgICBpZiAocmV0KSB7CisgICAgdGhpcy5kb2Nr
X2NoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOworICAgIHRoaXMucmVhbGl6ZVRhYmxlKG51bGwpOwor
ICAgIH0KKyAgICByZXR1cm4gcmV0OworICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90
eXBlLl9fY2xhc3NfXy5yZW1vdmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
RG9ja1BhbmVsLnByb3RvdHlwZS5yZW1vdmUuY2FsbC5hcHBseShfX3VpX0RvY2tQYW5lbC5wcm90
b3R5cGUucmVtb3ZlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5yZW1vdmUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
RG9ja1BhbmVsLnByb3RvdHlwZS5yZW1vdmUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuc2V0Q2VsbEhlaWdodCA9IGZ1bmN0aW9uKHdpZGdldCwg
aGVpZ2h0KSB7CisgICAgdmFyIGRhdGEgPSB3aWRnZXQuZ2V0TGF5b3V0RGF0YSgpOworICAgIGRh
dGEuaGVpZ2h0ID0gaGVpZ2h0OworICAgIGlmIChkYXRhLnRkKSB7CisgICAgRE9NX3NldFN0eWxl
QXR0cmlidXRlKGRhdGEudGQsICdoZWlnaHQnLCBkYXRhLmhlaWdodCk7CisgICAgfQorICAgIH07
CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsSGVpZ2h0ID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuc2V0
Q2VsbEhlaWdodC5jYWxsLmFwcGx5KF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsSGVp
Z2h0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXRDZWxsSGVpZ2h0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Rv
Y2tQYW5lbC5wcm90b3R5cGUuc2V0Q2VsbEhlaWdodC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsSG9yaXpvbnRhbEFsaWdubWVudCA9
IGZ1bmN0aW9uKHdpZGdldCwgYWxpZ24pIHsKKyAgICB2YXIgZGF0YSA9IHdpZGdldC5nZXRMYXlv
dXREYXRhKCk7CisgICAgZGF0YS5oQWxpZ24gPSBhbGlnbjsKKyAgICBpZiAoZGF0YS50ZCkgewor
ICAgIERPTV9zZXRBdHRyaWJ1dGUoZGF0YS50ZCwgJ2FsaWduJywgZGF0YS5oQWxpZ24pOworICAg
IH0KKyAgICB9OworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q2Vs
bEhvcml6b250YWxBbGlnbm1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
RG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsSG9yaXpvbnRhbEFsaWdubWVudC5jYWxsLmFwcGx5
KF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsSG9yaXpvbnRhbEFsaWdubWVudCwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
c2V0Q2VsbEhvcml6b250YWxBbGlnbm1lbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsSG9yaXpvbnRhbEFsaWdubWVudC5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsVmVy
dGljYWxBbGlnbm1lbnQgPSBmdW5jdGlvbih3aWRnZXQsIGFsaWduKSB7CisgICAgdmFyIGRhdGEg
PSB3aWRnZXQuZ2V0TGF5b3V0RGF0YSgpOworICAgIGRhdGEudkFsaWduID0gYWxpZ247CisgICAg
aWYgKGRhdGEudGQpIHsKKyAgICBET01fc2V0U3R5bGVBdHRyaWJ1dGUoZGF0YS50ZCwgJ3ZlcnRp
Y2FsQWxpZ24nLCBkYXRhLnZBbGlnbik7CisgICAgfQorICAgIH07CisgICAgX191aV9Eb2NrUGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsVmVydGljYWxBbGlnbm1lbnQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsVmVy
dGljYWxBbGlnbm1lbnQuY2FsbC5hcHBseShfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuc2V0Q2Vs
bFZlcnRpY2FsQWxpZ25tZW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Eb2NrUGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsVmVydGljYWxBbGlnbm1lbnQudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsVmVydGlj
YWxBbGlnbm1lbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RvY2tQYW5lbC5w
cm90b3R5cGUuc2V0Q2VsbFdpZHRoID0gZnVuY3Rpb24od2lkZ2V0LCB3aWR0aCkgeworICAgIHZh
ciBkYXRhID0gd2lkZ2V0LmdldExheW91dERhdGEoKTsKKyAgICBkYXRhLndpZHRoID0gd2lkdGg7
CisgICAgaWYgKGRhdGEudGQpIHsKKyAgICBET01fc2V0U3R5bGVBdHRyaWJ1dGUoZGF0YS50ZCwg
J3dpZHRoJywgZGF0YS53aWR0aCk7CisgICAgfQorICAgIH07CisgICAgX191aV9Eb2NrUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsV2lkdGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxsV2lkdGguY2FsbC5hcHBseShf
X3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuc2V0Q2VsbFdpZHRoLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDZWxsV2lkdGgudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5zZXRDZWxs
V2lkdGguaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5
cGUuc2V0SG9yaXpvbnRhbEFsaWdubWVudCA9IGZ1bmN0aW9uKGFsaWduKSB7CisgICAgdGhpcy5o
b3J6QWxpZ24gPSBhbGlnbjsKKyAgICB9OworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5f
X2NsYXNzX18uc2V0SG9yaXpvbnRhbEFsaWdubWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLnNldEhvcml6b250YWxBbGlnbm1lbnQuY2Fs
bC5hcHBseShfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbEFsaWdubWVudCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNz
X18uc2V0SG9yaXpvbnRhbEFsaWdubWVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9Eb2NrUGFuZWwucHJvdG90eXBlLnNldEhvcml6b250YWxBbGlnbm1lbnQuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuc2V0VmVydGljYWxBbGln
bm1lbnQgPSBmdW5jdGlvbihhbGlnbikgeworICAgIHRoaXMudmVydEFsaWduID0gYWxpZ247Cisg
ICAgfTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFZlcnRpY2Fs
QWxpZ25tZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0RvY2tQYW5lbC5w
cm90b3R5cGUuc2V0VmVydGljYWxBbGlnbm1lbnQuY2FsbC5hcHBseShfX3VpX0RvY2tQYW5lbC5w
cm90b3R5cGUuc2V0VmVydGljYWxBbGlnbm1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFZlcnRpY2FsQWxpZ25tZW50LnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuc2V0VmVy
dGljYWxBbGlnbm1lbnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RvY2tQYW5l
bC5wcm90b3R5cGUucmVhbGl6ZVRhYmxlID0gZnVuY3Rpb24oYmVpbmdBZGRlZCkgeworICAgIHZh
ciBib2R5RWxlbWVudCA9IHRoaXMuZ2V0Qm9keSgpOworICAgIHdoaWxlICgoRE9NX2dldENoaWxk
Q291bnQoYm9keUVsZW1lbnQpID4gMCkpIHsKKyAgICBET01fcmVtb3ZlQ2hpbGQoYm9keUVsZW1l
bnQsIERPTV9nZXRDaGlsZChib2R5RWxlbWVudCwgMCkpOworICAgIH0KKyAgICB2YXIgcm93Q291
bnQgPSAxOworICAgIHZhciBjb2xDb3VudCA9IDE7CisKKyAgICAgICAgdmFyIF9fY2hpbGQgPSB0
aGlzLmRvY2tfY2hpbGRyZW4uX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX19jaGlsZC5uZXh0
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIHZhciBkaXIgPSBjaGlsZC5nZXRM
YXlvdXREYXRhKCkuZGlyZWN0aW9uOworICAgIGlmICgoZGlyID09IHRoaXMuTk9SVEgpIHx8IChk
aXIgPT0gdGhpcy5TT1VUSCkpIHsKKyAgICByb3dDb3VudCArPSAxOworICAgIH0KKyAgICBlbHNl
IGlmICgoZGlyID09IHRoaXMuRUFTVCkgfHwgKGRpciA9PSB0aGlzLldFU1QpKSB7CisgICAgY29s
Q291bnQgKz0gMTsKKyAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAg
IHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgdmFyIHJv
d3MgPSBuZXcgcHlqc2xpYl9MaXN0KFtdKTsKKworICAgICAgICB2YXIgX19pID0gcHlqc2xpYl9y
YW5nZShyb3dDb3VudCkuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGkgPSBfX2kubmV4dCgpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAKKyAgICByb3dzLl9fc2V0aXRlbV9fKGksIHVpX0RvY2tQYW5l
bFRtcFJvdygpKTsKKyAgICByb3dzLl9fZ2V0aXRlbV9fKGkpLnRyID0gRE9NX2NyZWF0ZVRSKCk7
CisgICAgRE9NX2FwcGVuZENoaWxkKGJvZHlFbGVtZW50LCByb3dzLl9fZ2V0aXRlbV9fKGkpLnRy
KTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBp
ZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB2YXIgd2VzdENvbCA9IDA7CisgICAg
dmFyIGVhc3RDb2wgPSAgKCBjb2xDb3VudCAtIDEgKSA7CisgICAgdmFyIG5vcnRoUm93ID0gMDsK
KyAgICB2YXIgc291dGhSb3cgPSAgKCByb3dDb3VudCAtIDEgKSA7CisgICAgdmFyIGNlbnRlclRk
ID0gbnVsbDsKKworICAgICAgICB2YXIgX19jaGlsZCA9IHRoaXMuZG9ja19jaGlsZHJlbi5fX2l0
ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgY2hpbGQgPSBfX2NoaWxkLm5leHQoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgCisgICAgdmFyIGxheW91dCA9IGNoaWxkLmdldExheW91dERhdGEoKTsKKyAgICB2
YXIgdGQgPSBET01fY3JlYXRlVEQoKTsKKyAgICBsYXlvdXQudGQgPSB0ZDsKKyAgICBET01fc2V0
QXR0cmlidXRlKGxheW91dC50ZCwgJ2FsaWduJywgbGF5b3V0LmhBbGlnbik7CisgICAgRE9NX3Nl
dFN0eWxlQXR0cmlidXRlKGxheW91dC50ZCwgJ3ZlcnRpY2FsQWxpZ24nLCBsYXlvdXQudkFsaWdu
KTsKKyAgICBET01fc2V0QXR0cmlidXRlKGxheW91dC50ZCwgJ3dpZHRoJywgbGF5b3V0LndpZHRo
KTsKKyAgICBET01fc2V0QXR0cmlidXRlKGxheW91dC50ZCwgJ2hlaWdodCcsIGxheW91dC5oZWln
aHQpOworICAgIGlmICgobGF5b3V0LmRpcmVjdGlvbiA9PSB0aGlzLk5PUlRIKSkgeworICAgIERP
TV9pbnNlcnRDaGlsZChyb3dzLl9fZ2V0aXRlbV9fKG5vcnRoUm93KS50ciwgdGQsIHJvd3MuX19n
ZXRpdGVtX18obm9ydGhSb3cpLmNlbnRlcik7CisgICAgdGhpcy5hcHBlbmRBbmRNYXliZUFkb3B0
KHRkLCBjaGlsZC5nZXRFbGVtZW50KCksIGJlaW5nQWRkZWQpOworICAgIERPTV9zZXRJbnRBdHRy
aWJ1dGUodGQsICdjb2xTcGFuJywgICggICggZWFzdENvbCAtIHdlc3RDb2wgKSAgKyAxICkgKTsK
KyAgICBub3J0aFJvdyArPSAxOworICAgIH0KKyAgICBlbHNlIGlmICgobGF5b3V0LmRpcmVjdGlv
biA9PSB0aGlzLlNPVVRIKSkgeworICAgIERPTV9pbnNlcnRDaGlsZChyb3dzLl9fZ2V0aXRlbV9f
KHNvdXRoUm93KS50ciwgdGQsIHJvd3MuX19nZXRpdGVtX18oc291dGhSb3cpLmNlbnRlcik7Cisg
ICAgdGhpcy5hcHBlbmRBbmRNYXliZUFkb3B0KHRkLCBjaGlsZC5nZXRFbGVtZW50KCksIGJlaW5n
QWRkZWQpOworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGQsICdjb2xTcGFuJywgICggICggZWFz
dENvbCAtIHdlc3RDb2wgKSAgKyAxICkgKTsKKyAgICBzb3V0aFJvdyAtPSAxOworICAgIH0KKyAg
ICBlbHNlIGlmICgobGF5b3V0LmRpcmVjdGlvbiA9PSB0aGlzLldFU1QpKSB7CisgICAgdmFyIHJv
dyA9IHJvd3MuX19nZXRpdGVtX18obm9ydGhSb3cpOworICAgIERPTV9pbnNlcnRDaGlsZChyb3cu
dHIsIHRkLCByb3cuY2VudGVyKTsKKyAgICByb3cuY2VudGVyICs9IDE7CisgICAgdGhpcy5hcHBl
bmRBbmRNYXliZUFkb3B0KHRkLCBjaGlsZC5nZXRFbGVtZW50KCksIGJlaW5nQWRkZWQpOworICAg
IERPTV9zZXRJbnRBdHRyaWJ1dGUodGQsICdyb3dTcGFuJywgICggICggc291dGhSb3cgLSBub3J0
aFJvdyApICArIDEgKSApOworICAgIHdlc3RDb2wgKz0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAo
KGxheW91dC5kaXJlY3Rpb24gPT0gdGhpcy5FQVNUKSkgeworICAgIHZhciByb3cgPSByb3dzLl9f
Z2V0aXRlbV9fKG5vcnRoUm93KTsKKyAgICBET01faW5zZXJ0Q2hpbGQocm93LnRyLCB0ZCwgcm93
LmNlbnRlcik7CisgICAgdGhpcy5hcHBlbmRBbmRNYXliZUFkb3B0KHRkLCBjaGlsZC5nZXRFbGVt
ZW50KCksIGJlaW5nQWRkZWQpOworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGQsICdyb3dTcGFu
JywgICggICggc291dGhSb3cgLSBub3J0aFJvdyApICArIDEgKSApOworICAgIGVhc3RDb2wgLT0g
MTsKKyAgICB9CisgICAgZWxzZSBpZiAoKGxheW91dC5kaXJlY3Rpb24gPT0gdGhpcy5DRU5URVIp
KSB7CisgICAgdmFyIGNlbnRlclRkID0gdGQ7CisgICAgfQorCisgICAgICAgICAgICB9CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgIGlmICgodGhpcy5jZW50ZXIgIT0gbnVsbCkpIHsKKyAgICB2YXIgcm93ID0gcm93
cy5fX2dldGl0ZW1fXyhub3J0aFJvdyk7CisgICAgRE9NX2luc2VydENoaWxkKHJvdy50ciwgY2Vu
dGVyVGQsIHJvdy5jZW50ZXIpOworICAgIHRoaXMuYXBwZW5kQW5kTWF5YmVBZG9wdChjZW50ZXJU
ZCwgdGhpcy5jZW50ZXIuZ2V0RWxlbWVudCgpLCBiZWluZ0FkZGVkKTsKKyAgICB9CisgICAgfTsK
KyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlYWxpemVUYWJsZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLnJlYWxp
emVUYWJsZS5jYWxsLmFwcGx5KF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5yZWFsaXplVGFibGUs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuX19jbGFz
c19fLnJlYWxpemVUYWJsZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Eb2NrUGFu
ZWwucHJvdG90eXBlLnJlYWxpemVUYWJsZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfRG9ja1BhbmVsLnByb3RvdHlwZS5hcHBlbmRBbmRNYXliZUFkb3B0ID0gZnVuY3Rpb24ocGFy
ZW50LCBjaGlsZCwgYmVpbmdBZGRlZCkgeworICAgIGlmICgoYmVpbmdBZGRlZCAhPSBudWxsKSkg
eworICAgIGlmIChET01fY29tcGFyZShjaGlsZCwgYmVpbmdBZGRlZC5nZXRFbGVtZW50KCkpKSB7
CisgICAgX191aV9DZWxsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZGQodGhpcywgYmVpbmdB
ZGRlZCwgcGFyZW50KTsKKyAgICByZXR1cm47CisgICAgfQorICAgIH0KKyAgICBET01fYXBwZW5k
Q2hpbGQocGFyZW50LCBjaGlsZCk7CisgICAgfTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5
cGUuX19jbGFzc19fLmFwcGVuZEFuZE1heWJlQWRvcHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfRG9ja1BhbmVsLnByb3RvdHlwZS5hcHBlbmRBbmRNYXliZUFkb3B0LmNhbGwu
YXBwbHkoX191aV9Eb2NrUGFuZWwucHJvdG90eXBlLmFwcGVuZEFuZE1heWJlQWRvcHQsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RvY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFw
cGVuZEFuZE1heWJlQWRvcHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRG9ja1Bh
bmVsLnByb3RvdHlwZS5hcHBlbmRBbmRNYXliZUFkb3B0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7
Cit9CitmdW5jdGlvbiBfX3VpX0RvY2tQYW5lbFRtcFJvdygpIHsKK30KK2Z1bmN0aW9uIHVpX0Rv
Y2tQYW5lbFRtcFJvdygpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9Eb2NrUGFuZWxU
bXBSb3coKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBw
bHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1
bmN0aW9uIF9fdWlfRG9ja1BhbmVsVG1wUm93X2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9E
b2NrUGFuZWxUbXBSb3cuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfRG9j
a1BhbmVsVG1wUm93Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIHB5anNfZXh0ZW5k
KF9fdWlfRG9ja1BhbmVsVG1wUm93LCBfX3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3VpX0RvY2tQ
YW5lbFRtcFJvdy5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9Eb2NrUGFuZWxUbXBS
b3c7CitfX3VpX0RvY2tQYW5lbFRtcFJvdy5wcm90b3R5cGUuX19jbGFzc19fLmNlbnRlciA9IDA7
CitfX3VpX0RvY2tQYW5lbFRtcFJvdy5wcm90b3R5cGUuX19jbGFzc19fLnRyID0gbnVsbDsKK30K
K3ZhciB1aV9yb290UGFuZWxzID0gbmV3IHB5anNsaWJfRGljdChbXSk7CitmdW5jdGlvbiBfX3Vp
X1Jvb3RQYW5lbENscygpIHsKK30KK2Z1bmN0aW9uIHVpX1Jvb3RQYW5lbENscyhlbGVtZW50KSB7
CisgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICd1bmRlZmluZWQnKSBlbGVtZW50PW51bGw7Cisg
ICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfUm9vdFBhbmVsQ2xzKCk7CisgICAgaWYoaW5zdGFu
Y2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMp
OworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCit1aV9Sb290UGFuZWxDbHMucGFyc2Vfa3dh
cmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgZWxlbWVudCApIHsKKyAgICBpZiAodHlwZW9mIGVs
ZW1lbnQgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGVsZW1lbnQ9X19rd2FyZ3MuZWxlbWVudDsK
KyAgICB2YXIgX19yID0gW2VsZW1lbnRdOworICAgIHJldHVybiBfX3I7Cit9OworZnVuY3Rpb24g
X191aV9Sb290UGFuZWxDbHNfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX1Jvb3RQYW5lbENs
cy5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9Sb290UGFuZWxDbHMuX193
YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfQWJzb2x1dGVQYW5lbC5fX3dh
c19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX0Fic29sdXRlUGFuZWxfaW5pdGlhbGl6ZSgp
OworICAgIHB5anNfZXh0ZW5kKF9fdWlfUm9vdFBhbmVsQ2xzLCBfX3VpX0Fic29sdXRlUGFuZWwp
OworICAgIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVp
X1Jvb3RQYW5lbENsczsKKyAgICBfX3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUuX19pbml0X18g
PSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICd1bmRlZmlu
ZWQnKSBlbGVtZW50PW51bGw7CisgICAgX191aV9BYnNvbHV0ZVBhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18uX19pbml0X18odGhpcyk7CisgICAgaWYgKChlbGVtZW50ID09IG51bGwpKSB7CisgICAg
dmFyIGVsZW1lbnQgPSB0aGlzLmdldEJvZHlFbGVtZW50KCk7CisgICAgfQorICAgIHRoaXMuc2V0
RWxlbWVudChlbGVtZW50KTsKKyAgICB0aGlzLm9uQXR0YWNoKCk7CisgICAgfTsKK19fdWlfUm9v
dFBhbmVsQ2xzLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9f
a3dhcmdzLCBlbGVtZW50ICkgeworICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAndW5kZWZpbmVk
JykKKyAgICAgICAgZWxlbWVudD1fX2t3YXJncy5lbGVtZW50OworICAgIHZhciBfX3IgPSBbZWxl
bWVudF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9Sb290UGFuZWxDbHMucHJvdG90
eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9Sb290UGFu
ZWxDbHMucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9S
b290UGFuZWxDbHMucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXy5wYXJzZV9rd2FyZ3MgPSBfX3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUuX19p
bml0X18ucGFyc2Vfa3dhcmdzOworICAgIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlwZS5nZXRC
b2R5RWxlbWVudCA9IGZ1bmN0aW9uKCkgeworCisgICAgICAgIHJldHVybiAkZG9jLmJvZHk7Cisg
ICAgICAgIAorICAgIH07CisgICAgX191aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRCb2R5RWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Sb290
UGFuZWxDbHMucHJvdG90eXBlLmdldEJvZHlFbGVtZW50LmNhbGwuYXBwbHkoX191aV9Sb290UGFu
ZWxDbHMucHJvdG90eXBlLmdldEJvZHlFbGVtZW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRCb2R5RWxlbWVudC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLmdldEJv
ZHlFbGVtZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Sb290UGFuZWxDbHMu
cHJvdG90eXBlLl9fY2xhc3NfXy5nZXQgPSBmdW5jdGlvbihpZCkgeworICAgIGlmICh0eXBlb2Yg
aWQgPT0gJ3VuZGVmaW5lZCcpIGlkPW51bGw7CisgICAgaWYgKHVpX3Jvb3RQYW5lbHMuaGFzX2tl
eShpZCkpIHsKKyAgICByZXR1cm4gdWlfcm9vdFBhbmVscy5fX2dldGl0ZW1fXyhpZCk7CisgICAg
fQorICAgIHZhciBlbGVtZW50ID0gbnVsbDsKKyAgICBpZiAoaWQpIHsKKyAgICB2YXIgZWxlbWVu
dCA9IERPTV9nZXRFbGVtZW50QnlJZChpZCk7CisgICAgaWYgKCEoZWxlbWVudCkpIHsKKyAgICBy
ZXR1cm47CisgICAgfQorICAgIH0KKyAgICBpZiAoKHB5anNsaWJfbGVuKHVpX3Jvb3RQYW5lbHMp
IDwgMSkpIHsKKyAgICB0aGlzLmhvb2tXaW5kb3dDbG9zaW5nKCk7CisgICAgfQorICAgIHZhciBw
YW5lbCA9IHVpX1Jvb3RQYW5lbChlbGVtZW50KTsKKyAgICB1aV9yb290UGFuZWxzLl9fc2V0aXRl
bV9fKGlkLCBwYW5lbCk7CisgICAgcmV0dXJuIHBhbmVsOworICAgIH07CitfX3VpX1Jvb3RQYW5l
bENscy5wcm90b3R5cGUuX19jbGFzc19fLmdldC5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9f
a3dhcmdzLCBpZCApIHsKKyAgICBpZiAodHlwZW9mIGlkID09ICd1bmRlZmluZWQnKQorICAgICAg
ICBpZD1fX2t3YXJncy5pZDsKKyAgICB2YXIgX19yID0gW2lkXTsKKyAgICByZXR1cm4gX19yOwor
fTsKKyAgICBfX3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUuX19jbGFzc19fLmdldC5h
cHBseSh0aGlzLl9fY2xhc3NfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUm9vdFBh
bmVsQ2xzLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0LmNsYXNzX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLmdldC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlwZS5nZXQucGFyc2Vfa3dhcmdzID0gX191aV9S
b290UGFuZWxDbHMucHJvdG90eXBlLl9fY2xhc3NfXy5nZXQucGFyc2Vfa3dhcmdzOworICAgIF9f
dWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlwZS5fX2NsYXNzX18uaG9va1dpbmRvd0Nsb3NpbmcgPSBm
dW5jdGlvbigpIHsKKyAgICBXaW5kb3dfYWRkV2luZG93Q2xvc2VMaXN0ZW5lcih0aGlzKTsKKyAg
ICB9OworICAgIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlwZS5ob29rV2luZG93Q2xvc2luZyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Sb290UGFuZWxDbHMucHJvdG90eXBl
Ll9fY2xhc3NfXy5ob29rV2luZG93Q2xvc2luZy5hcHBseSh0aGlzLl9fY2xhc3NfXywgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlwZS5fX2NsYXNzX18u
aG9va1dpbmRvd0Nsb3NpbmcuY2xhc3NfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvb3RQYW5l
bENscy5wcm90b3R5cGUuaG9va1dpbmRvd0Nsb3NpbmcuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUuX19jbGFzc19fLm9uV2luZG93Q2xvc2Vk
ID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgdmFyIF9fcGFuZWwgPSB1aV9yb290UGFuZWxzLml0
ZXJ2YWx1ZXMoKS5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFuZWwgPSBfX3BhbmVsLm5leHQoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgcGFuZWwub25EZXRhY2goKTsKKworICAgICAg
ICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9w
SXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICB9OworICAgIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlw
ZS5vbldpbmRvd0Nsb3NlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Sb290
UGFuZWxDbHMucHJvdG90eXBlLl9fY2xhc3NfXy5vbldpbmRvd0Nsb3NlZC5hcHBseSh0aGlzLl9f
Y2xhc3NfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3Rv
dHlwZS5fX2NsYXNzX18ub25XaW5kb3dDbG9zZWQuY2xhc3NfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUub25XaW5kb3dDbG9zZWQuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUuX19jbGFzc19fLm9uV2lu
ZG93Q2xvc2luZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybjsKKyAgICB9OworICAgIF9fdWlf
Um9vdFBhbmVsQ2xzLnByb3RvdHlwZS5vbldpbmRvd0Nsb3NpbmcgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfUm9vdFBhbmVsQ2xzLnByb3RvdHlwZS5fX2NsYXNzX18ub25XaW5k
b3dDbG9zaW5nLmFwcGx5KHRoaXMuX19jbGFzc19fLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9Sb290UGFuZWxDbHMucHJvdG90eXBlLl9fY2xhc3NfXy5vbldpbmRvd0Nsb3NpbmcuY2xh
c3NfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Jvb3RQYW5lbENscy5wcm90b3R5cGUub25XaW5k
b3dDbG9zaW5nLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiB1aV9Sb290UGFu
ZWwoZWxlbWVudCkgeworICAgIGlmIChweWpzbGliX2lzU3RyaW5nKGVsZW1lbnQpKSB7CisgICAg
cmV0dXJuIHVpX1Jvb3RQYW5lbENscygpLmdldChlbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJu
IHVpX1Jvb3RQYW5lbENscyhlbGVtZW50KTsKK30KKworCitmdW5jdGlvbiBfX3VpX0h5cGVybGlu
aygpIHsKK30KK2Z1bmN0aW9uIHVpX0h5cGVybGluayh0ZXh0LCBhc0hUTUwsIHRhcmdldEhpc3Rv
cnlUb2tlbikgeworICAgIGlmICh0eXBlb2YgdGV4dCA9PSAndW5kZWZpbmVkJykgdGV4dD0nJzsK
KyAgICBpZiAodHlwZW9mIGFzSFRNTCA9PSAndW5kZWZpbmVkJykgYXNIVE1MPWZhbHNlOworICAg
IGlmICh0eXBlb2YgdGFyZ2V0SGlzdG9yeVRva2VuID09ICd1bmRlZmluZWQnKSB0YXJnZXRIaXN0
b3J5VG9rZW49Jyc7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfSHlwZXJsaW5rKCk7Cisg
ICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNl
LCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCit1aV9IeXBlcmxpbmsu
cGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgdGV4dCwgYXNIVE1MLCB0YXJnZXRI
aXN0b3J5VG9rZW4gKSB7CisgICAgaWYgKHR5cGVvZiB0ZXh0ID09ICd1bmRlZmluZWQnKQorICAg
ICAgICB0ZXh0PV9fa3dhcmdzLnRleHQ7CisgICAgaWYgKHR5cGVvZiBhc0hUTUwgPT0gJ3VuZGVm
aW5lZCcpCisgICAgICAgIGFzSFRNTD1fX2t3YXJncy5hc0hUTUw7CisgICAgaWYgKHR5cGVvZiB0
YXJnZXRIaXN0b3J5VG9rZW4gPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIHRhcmdldEhpc3RvcnlU
b2tlbj1fX2t3YXJncy50YXJnZXRIaXN0b3J5VG9rZW47CisgICAgdmFyIF9fciA9IFt0ZXh0LCBh
c0hUTUwsIHRhcmdldEhpc3RvcnlUb2tlbl07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5jdGlv
biBfX3VpX0h5cGVybGlua19pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfSHlwZXJsaW5rLl9f
d2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX0h5cGVybGluay5fX3dhc19pbml0
aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBpZighX191aV9XaWRnZXQuX193YXNfaW5pdGlhbGl6ZWRf
XykKKyAgICAgICAgX191aV9XaWRnZXRfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9f
dWlfSHlwZXJsaW5rLCBfX3VpX1dpZGdldCk7CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBl
Ll9fY2xhc3NfXy5fX25ld19fID0gdWlfSHlwZXJsaW5rOworICAgIF9fdWlfSHlwZXJsaW5rLnBy
b3RvdHlwZS5fX2luaXRfXyA9IGZ1bmN0aW9uKHRleHQsIGFzSFRNTCwgdGFyZ2V0SGlzdG9yeVRv
a2VuKSB7CisgICAgaWYgKHR5cGVvZiB0ZXh0ID09ICd1bmRlZmluZWQnKSB0ZXh0PScnOworICAg
IGlmICh0eXBlb2YgYXNIVE1MID09ICd1bmRlZmluZWQnKSBhc0hUTUw9ZmFsc2U7CisgICAgaWYg
KHR5cGVvZiB0YXJnZXRIaXN0b3J5VG9rZW4gPT0gJ3VuZGVmaW5lZCcpIHRhcmdldEhpc3RvcnlU
b2tlbj0nJzsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRo
aXMpOworICAgIHRoaXMuY2xpY2tMaXN0ZW5lcnMgPSBuZXcgcHlqc2xpYl9MaXN0KFtdKTsKKyAg
ICB0aGlzLnRhcmdldEhpc3RvcnlUb2tlbiA9ICcnOworICAgIHRoaXMuc2V0RWxlbWVudChET01f
Y3JlYXRlRGl2KCkpOworICAgIHRoaXMuYW5jaG9yRWxlbSA9IERPTV9jcmVhdGVBbmNob3IoKTsK
KyAgICBET01fYXBwZW5kQ2hpbGQodGhpcy5nZXRFbGVtZW50KCksIHRoaXMuYW5jaG9yRWxlbSk7
CisgICAgdGhpcy5zaW5rRXZlbnRzKF9fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTkNM
SUNLKTsKKyAgICB0aGlzLnNldFN0eWxlTmFtZSgnZ3d0LUh5cGVybGluaycpOworICAgIGlmIChh
c0hUTUwpIHsKKyAgICB0aGlzLnNldEhUTUwodGV4dCk7CisgICAgfQorICAgIGVsc2UgeworICAg
IHRoaXMuc2V0VGV4dCh0ZXh0KTsKKyAgICB9CisgICAgaWYgKHRhcmdldEhpc3RvcnlUb2tlbikg
eworICAgIHRoaXMuc2V0VGFyZ2V0SGlzdG9yeVRva2VuKHRhcmdldEhpc3RvcnlUb2tlbik7Cisg
ICAgfQorICAgIH07CitfX3VpX0h5cGVybGluay5wcm90b3R5cGUuX19pbml0X18ucGFyc2Vfa3dh
cmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgdGV4dCwgYXNIVE1MLCB0YXJnZXRIaXN0b3J5VG9r
ZW4gKSB7CisgICAgaWYgKHR5cGVvZiB0ZXh0ID09ICd1bmRlZmluZWQnKQorICAgICAgICB0ZXh0
PV9fa3dhcmdzLnRleHQ7CisgICAgaWYgKHR5cGVvZiBhc0hUTUwgPT0gJ3VuZGVmaW5lZCcpCisg
ICAgICAgIGFzSFRNTD1fX2t3YXJncy5hc0hUTUw7CisgICAgaWYgKHR5cGVvZiB0YXJnZXRIaXN0
b3J5VG9rZW4gPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIHRhcmdldEhpc3RvcnlUb2tlbj1fX2t3
YXJncy50YXJnZXRIaXN0b3J5VG9rZW47CisgICAgdmFyIF9fciA9IFt0ZXh0LCBhc0hUTUwsIHRh
cmdldEhpc3RvcnlUb2tlbl07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9IeXBlcmxp
bmsucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9IeXBlcmxpbmsucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9I
eXBlcmxpbmsucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9IeXBlcmxpbmsucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXy5wYXJzZV9rd2FyZ3MgPSBfX3VpX0h5cGVybGluay5wcm90b3R5cGUuX19pbml0X18ucGFy
c2Vfa3dhcmdzOworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5hZGRDbGlja0xpc3RlbmVy
ID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLmNsaWNrTGlzdGVuZXJzLmFwcGVuZChs
aXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0h5cGVybGluay5wcm90b3R5cGUuX19jbGFzc19f
LmFkZENsaWNrTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSHlw
ZXJsaW5rLnByb3RvdHlwZS5hZGRDbGlja0xpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9IeXBlcmxp
bmsucHJvdG90eXBlLmFkZENsaWNrTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0h5cGVybGluay5wcm90b3R5cGUuX19jbGFzc19fLmFkZENsaWNrTGlzdGVuZXIudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5hZGRDbGlja0xp
c3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90
eXBlLmdldEhUTUwgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldElubmVySFRNTCh0
aGlzLmFuY2hvckVsZW0pOworICAgIH07CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRIVE1MID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0h5cGVy
bGluay5wcm90b3R5cGUuZ2V0SFRNTC5jYWxsLmFwcGx5KF9fdWlfSHlwZXJsaW5rLnByb3RvdHlw
ZS5nZXRIVE1MLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90
eXBlLl9fY2xhc3NfXy5nZXRIVE1MLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0h5
cGVybGluay5wcm90b3R5cGUuZ2V0SFRNTC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfSHlwZXJsaW5rLnByb3RvdHlwZS5nZXRUYXJnZXRIaXN0b3J5VG9rZW4gPSBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpcy50YXJnZXRIaXN0b3J5VG9rZW47CisgICAgfTsKKyAgICBfX3Vp
X0h5cGVybGluay5wcm90b3R5cGUuX19jbGFzc19fLmdldFRhcmdldEhpc3RvcnlUb2tlbiA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IeXBlcmxpbmsucHJvdG90eXBlLmdldFRh
cmdldEhpc3RvcnlUb2tlbi5jYWxsLmFwcGx5KF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5nZXRU
YXJnZXRIaXN0b3J5VG9rZW4sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0h5cGVybGlu
ay5wcm90b3R5cGUuX19jbGFzc19fLmdldFRhcmdldEhpc3RvcnlUb2tlbi51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLmdldFRhcmdldEhpc3RvcnlU
b2tlbi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlw
ZS5nZXRUZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRJbm5lclRleHQodGhp
cy5hbmNob3JFbGVtKTsKKyAgICB9OworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5fX2Ns
YXNzX18uZ2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IeXBlcmxp
bmsucHJvdG90eXBlLmdldFRleHQuY2FsbC5hcHBseShfX3VpX0h5cGVybGluay5wcm90b3R5cGUu
Z2V0VGV4dCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0VGV4dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IeXBl
cmxpbmsucHJvdG90eXBlLmdldFRleHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0h5cGVybGluay5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbihldmVudCkgewor
ICAgIGlmICgoRE9NX2V2ZW50R2V0VHlwZShldmVudCkgPT0gJ2NsaWNrJykpIHsKKworICAgICAg
ICB2YXIgX19saXN0ZW5lciA9IHRoaXMuY2xpY2tMaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFy
IGxpc3RlbmVyID0gX19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IAorICAgIGlmIChsaXN0ZW5lci5vbkNsaWNrKSB7CisgICAgbGlzdGVuZXIub25DbGljayh0aGlz
LCBldmVudCk7CisgICAgfQorICAgIGVsc2UgeworICAgIGxpc3RlbmVyKHRoaXMsIGV2ZW50KTsK
KyAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgSGlzdG9yeV9IaXN0b3J5KCku
bmV3SXRlbSh0aGlzLnRhcmdldEhpc3RvcnlUb2tlbik7CisgICAgRE9NX2V2ZW50UHJldmVudERl
ZmF1bHQoZXZlbnQpOworICAgIH0KKyAgICB9OworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlw
ZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5vbkJyb3dzZXJFdmVudC5jYWxsLmFwcGx5KF9fdWlf
SHlwZXJsaW5rLnByb3RvdHlwZS5vbkJyb3dzZXJFdmVudCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5vbkJyb3dz
ZXJFdmVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSHlwZXJsaW5rLnByb3Rv
dHlwZS5yZW1vdmVDbGlja0xpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlz
LmNsaWNrTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0h5cGVy
bGluay5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUNsaWNrTGlzdGVuZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5yZW1vdmVDbGlja0xp
c3RlbmVyLmNhbGwuYXBwbHkoX191aV9IeXBlcmxpbmsucHJvdG90eXBlLnJlbW92ZUNsaWNrTGlz
dGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0h5cGVybGluay5wcm90b3R5cGUu
X19jbGFzc19fLnJlbW92ZUNsaWNrTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5yZW1vdmVDbGlja0xpc3RlbmVyLmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLnNldEhUTUwgPSBmdW5j
dGlvbihodG1sKSB7CisgICAgRE9NX3NldElubmVySFRNTCh0aGlzLmFuY2hvckVsZW0sIGh0bWwp
OworICAgIH07CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIVE1M
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0h5cGVybGluay5wcm90b3R5cGUu
c2V0SFRNTC5jYWxsLmFwcGx5KF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5zZXRIVE1MLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLl9fY2xhc3NfXy5z
ZXRIVE1MLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0h5cGVybGluay5wcm90b3R5
cGUuc2V0SFRNTC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSHlwZXJsaW5rLnBy
b3RvdHlwZS5zZXRUYXJnZXRIaXN0b3J5VG9rZW4gPSBmdW5jdGlvbih0YXJnZXRIaXN0b3J5VG9r
ZW4pIHsKKyAgICB0aGlzLnRhcmdldEhpc3RvcnlUb2tlbiA9IHRhcmdldEhpc3RvcnlUb2tlbjsK
KyAgICBET01fc2V0QXR0cmlidXRlKHRoaXMuYW5jaG9yRWxlbSwgJ2hyZWYnLCAgKCAnIycgKyB0
YXJnZXRIaXN0b3J5VG9rZW4gKSApOworICAgIH07CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRUYXJnZXRIaXN0b3J5VG9rZW4gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5zZXRUYXJnZXRIaXN0b3J5VG9rZW4u
Y2FsbC5hcHBseShfX3VpX0h5cGVybGluay5wcm90b3R5cGUuc2V0VGFyZ2V0SGlzdG9yeVRva2Vu
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IeXBlcmxpbmsucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRUYXJnZXRIaXN0b3J5VG9rZW4udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfSHlwZXJsaW5rLnByb3RvdHlwZS5zZXRUYXJnZXRIaXN0b3J5VG9rZW4uaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0h5cGVybGluay5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0
aW9uKHRleHQpIHsKKyAgICBET01fc2V0SW5uZXJUZXh0KHRoaXMuYW5jaG9yRWxlbSwgdGV4dCk7
CisgICAgfTsKKyAgICBfX3VpX0h5cGVybGluay5wcm90b3R5cGUuX19jbGFzc19fLnNldFRleHQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlwZS5z
ZXRUZXh0LmNhbGwuYXBwbHkoX191aV9IeXBlcmxpbmsucHJvdG90eXBlLnNldFRleHQsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0h5cGVybGluay5wcm90b3R5cGUuX19jbGFzc19fLnNl
dFRleHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSHlwZXJsaW5rLnByb3RvdHlw
ZS5zZXRUZXh0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9Cit2YXIgdWlfcHJlZmV0Y2hJbWFn
ZXMgPSBuZXcgcHlqc2xpYl9EaWN0KFtdKTsKK2Z1bmN0aW9uIF9fdWlfSW1hZ2UoKSB7Cit9Citm
dW5jdGlvbiB1aV9JbWFnZSh1cmwpIHsKKyAgICBpZiAodHlwZW9mIHVybCA9PSAndW5kZWZpbmVk
JykgdXJsPScnOworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX0ltYWdlKCk7CisgICAgaWYo
aW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1
bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCit1aV9JbWFnZS5wYXJzZV9rd2Fy
Z3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCB1cmwgKSB7CisgICAgaWYgKHR5cGVvZiB1cmwgPT0g
J3VuZGVmaW5lZCcpCisgICAgICAgIHVybD1fX2t3YXJncy51cmw7CisgICAgdmFyIF9fciA9IFt1
cmxdOworICAgIHJldHVybiBfX3I7Cit9OworZnVuY3Rpb24gX191aV9JbWFnZV9pbml0aWFsaXpl
KCkgeworICAgIGlmKF9fdWlfSW1hZ2UuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAg
IF9fdWlfSW1hZ2UuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfV2lk
Z2V0Ll9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfV2lkZ2V0X2luaXRpYWxpemUo
KTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0ltYWdlLCBfX3VpX1dpZGdldCk7CisgICAgX191aV9J
bWFnZS5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9JbWFnZTsKKyAgICBfX3VpX0lt
YWdlLnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1bmN0aW9uKHVybCkgeworICAgIGlmICh0eXBlb2Yg
dXJsID09ICd1bmRlZmluZWQnKSB1cmw9Jyc7CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX2luaXRfXyh0aGlzKTsKKyAgICB0aGlzLmNsaWNrTGlzdGVuZXJzID0gbmV3IHB5
anNsaWJfTGlzdChbXSk7CisgICAgdGhpcy5sb2FkTGlzdGVuZXJzID0gbmV3IHB5anNsaWJfTGlz
dChbXSk7CisgICAgdGhpcy5tb3VzZUxpc3RlbmVycyA9IG5ldyBweWpzbGliX0xpc3QoW10pOwor
ICAgIHRoaXMuc2V0RWxlbWVudChET01fY3JlYXRlSW1nKCkpOworICAgIHRoaXMuc2lua0V2ZW50
cyhfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05DTElDSyB8IF9fdWlfRXZlbnQucHJv
dG90eXBlLl9fY2xhc3NfXy5NT1VTRUVWRU5UUyB8IF9fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xh
c3NfXy5PTkxPQUQgfCBfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05FUlJPUik7Cisg
ICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1JbWFnZScpOworICAgIGlmICh1cmwpIHsKKyAgICB0
aGlzLnNldFVybCh1cmwpOworICAgIH0KKyAgICB9OworX191aV9JbWFnZS5wcm90b3R5cGUuX19p
bml0X18ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgdXJsICkgeworICAgIGlm
ICh0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnKQorICAgICAgICB1cmw9X19rd2FyZ3MudXJsOwor
ICAgIHZhciBfX3IgPSBbdXJsXTsKKyAgICByZXR1cm4gX19yOworfTsKKyAgICBfX3VpX0ltYWdl
LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfSW1hZ2UucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9JbWFnZS5w
cm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ltYWdlLnBy
b3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfSW1hZ2UucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9JbWFnZS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IF9f
dWlfSW1hZ2UucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX0ltYWdl
LnByb3RvdHlwZS5hZGRDbGlja0xpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0
aGlzLmNsaWNrTGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0lt
YWdlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkQ2xpY2tMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9JbWFnZS5wcm90b3R5cGUuYWRkQ2xpY2tMaXN0ZW5lci5jYWxs
LmFwcGx5KF9fdWlfSW1hZ2UucHJvdG90eXBlLmFkZENsaWNrTGlzdGVuZXIsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkQ2xpY2tMaXN0
ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9JbWFnZS5wcm90b3R5cGUuYWRk
Q2xpY2tMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSW1hZ2UucHJv
dG90eXBlLmFkZExvYWRMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAgdGhpcy5s
b2FkTGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0ltYWdlLnBy
b3RvdHlwZS5fX2NsYXNzX18uYWRkTG9hZExpc3RlbmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX0ltYWdlLnByb3RvdHlwZS5hZGRMb2FkTGlzdGVuZXIuY2FsbC5hcHBseShf
X3VpX0ltYWdlLnByb3RvdHlwZS5hZGRMb2FkTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkTG9hZExpc3RlbmVyLnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5hZGRMb2FkTGlzdGVu
ZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5hZGRN
b3VzZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLm1vdXNlTGlzdGVu
ZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5f
X2NsYXNzX18uYWRkTW91c2VMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9JbWFnZS5wcm90b3R5cGUuYWRkTW91c2VMaXN0ZW5lci5jYWxsLmFwcGx5KF9fdWlfSW1h
Z2UucHJvdG90eXBlLmFkZE1vdXNlTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0ltYWdlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkTW91c2VMaXN0ZW5lci51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9JbWFnZS5wcm90b3R5cGUuYWRkTW91c2VMaXN0ZW5lci5p
bnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSW1hZ2UucHJvdG90eXBlLmdldFVybCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVu
dCgpLCAnc3JjJyk7CisgICAgfTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0VXJsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ltYWdlLnByb3RvdHlw
ZS5nZXRVcmwuY2FsbC5hcHBseShfX3VpX0ltYWdlLnByb3RvdHlwZS5nZXRVcmwsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VXJsLnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5nZXRVcmwuaW5z
dGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5vbkJyb3dzZXJF
dmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIHR5cGUgPSBET01fZXZlbnRHZXRUeXBl
KGV2ZW50KTsKKyAgICBpZiAoKHR5cGUgPT0gJ2NsaWNrJykpIHsKKworICAgICAgICB2YXIgX19s
aXN0ZW5lciA9IHRoaXMuY2xpY2tMaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVy
ID0gX19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGlm
IChsaXN0ZW5lci5vbkNsaWNrKSB7CisgICAgbGlzdGVuZXIub25DbGljayh0aGlzLCBldmVudCk7
CisgICAgfQorICAgIGVsc2UgeworICAgIGxpc3RlbmVyKHRoaXMsIGV2ZW50KTsKKyAgICB9CisK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUg
IT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdt
b3VzZWRvd24nKSB8fCAodHlwZSA9PSAnbW91c2V1cCcpIHx8ICh0eXBlID09ICdtb3VzZW1vdmUn
KSB8fCAodHlwZSA9PSAnbW91c2VvdmVyJykgfHwgKHR5cGUgPT0gJ21vdXNlb3V0JykpIHsKKyAg
ICBfX3VpX01vdXNlTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlTW91c2VFdmVudCh0
aGlzLCB0aGlzLm1vdXNlTGlzdGVuZXJzLCB0aGlzLCBldmVudCk7CisgICAgfQorICAgIGVsc2Ug
aWYgKCh0eXBlID09ICdsb2FkJykpIHsKKworICAgICAgICB2YXIgX19saXN0ZW5lciA9IHRoaXMu
bG9hZExpc3RlbmVycy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5l
eHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgbGlzdGVuZXIub25Mb2FkKHRo
aXMpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICBlbHNlIGlmICgodHlw
ZSA9PSAnZXJyb3InKSkgeworCisgICAgICAgIHZhciBfX2xpc3RlbmVyID0gdGhpcy5sb2FkTGlz
dGVuZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9fbGlzdGVuZXIubmV4dCgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBsaXN0ZW5lci5vbkVycm9yKHRoaXMpOwor
CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChl
ICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICB9OworICAgIF9fdWlfSW1hZ2Uu
cHJvdG90eXBlLl9fY2xhc3NfXy5vbkJyb3dzZXJFdmVudCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gX191aV9JbWFnZS5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQuY2FsbC5hcHBseShf
X3VpX0ltYWdlLnByb3RvdHlwZS5vbkJyb3dzZXJFdmVudCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfSW1hZ2UucHJvdG90eXBlLl9fY2xhc3NfXy5vbkJyb3dzZXJFdmVudC51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9JbWFnZS5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ltYWdlLnByb3RvdHlwZS5wcmVmZXRj
aCA9IGZ1bmN0aW9uKHVybCkgeworICAgIHZhciBpbWcgPSBET01fY3JlYXRlSW1nKCk7CisgICAg
RE9NX3NldEF0dHJpYnV0ZShpbWcsICdzcmMnLCB1cmwpOworICAgIHVpX3ByZWZldGNoSW1hZ2Vz
Ll9fc2V0aXRlbV9fKHVybCwgaW1nKTsKKyAgICB9OworICAgIF9fdWlfSW1hZ2UucHJvdG90eXBl
Ll9fY2xhc3NfXy5wcmVmZXRjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9J
bWFnZS5wcm90b3R5cGUucHJlZmV0Y2guY2FsbC5hcHBseShfX3VpX0ltYWdlLnByb3RvdHlwZS5w
cmVmZXRjaCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSW1hZ2UucHJvdG90eXBlLl9f
Y2xhc3NfXy5wcmVmZXRjaC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9JbWFnZS5w
cm90b3R5cGUucHJlZmV0Y2guaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ltYWdl
LnByb3RvdHlwZS5zZXRVcmwgPSBmdW5jdGlvbih1cmwpIHsKKyAgICBET01fc2V0QXR0cmlidXRl
KHRoaXMuZ2V0RWxlbWVudCgpLCAnc3JjJywgdXJsKTsKKyAgICB9OworICAgIF9fdWlfSW1hZ2Uu
cHJvdG90eXBlLl9fY2xhc3NfXy5zZXRVcmwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfSW1hZ2UucHJvdG90eXBlLnNldFVybC5jYWxsLmFwcGx5KF9fdWlfSW1hZ2UucHJvdG90
eXBlLnNldFVybCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSW1hZ2UucHJvdG90eXBl
Ll9fY2xhc3NfXy5zZXRVcmwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSW1hZ2Uu
cHJvdG90eXBlLnNldFVybC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191
aV9GbG93UGFuZWwoKSB7Cit9CitmdW5jdGlvbiB1aV9GbG93UGFuZWwoKSB7CisgICAgdmFyIGlu
c3RhbmNlID0gbmV3IF9fdWlfRmxvd1BhbmVsKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18p
IGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVy
biBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBfX3VpX0Zsb3dQYW5lbF9pbml0aWFsaXplKCkg
eworICAgIGlmKF9fdWlfRmxvd1BhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAg
ICBfX3VpX0Zsb3dQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBpZighX191
aV9Db21wbGV4UGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAgX191aV9Db21wbGV4
UGFuZWxfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfRmxvd1BhbmVsLCBfX3Vp
X0NvbXBsZXhQYW5lbCk7CisgICAgX191aV9GbG93UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5f
X25ld19fID0gdWlfRmxvd1BhbmVsOworICAgIF9fdWlfRmxvd1BhbmVsLnByb3RvdHlwZS5fX2lu
aXRfXyA9IGZ1bmN0aW9uKCkgeworICAgIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18uX19pbml0X18odGhpcyk7CisgICAgdGhpcy5zZXRFbGVtZW50KERPTV9jcmVhdGVEaXYo
KSk7CisgICAgfTsKKyAgICBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5p
dF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5
cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuX19pbml0X18s
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuX19jbGFz
c19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zsb3dQYW5lbC5w
cm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zsb3dQ
YW5lbC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24odykgeworICAgIF9fdWlfQ29tcGxleFBhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uYWRkKHRoaXMsIHcsIHRoaXMuZ2V0RWxlbWVudCgpKTsKKyAg
ICB9OworICAgIF9fdWlfRmxvd1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuYWRkLmNhbGwu
YXBwbHkoX191aV9GbG93UGFuZWwucHJvdG90eXBlLmFkZCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfRmxvd1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkLnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuYWRkLmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9GbG93UGFuZWwucHJvdG90eXBlLmdldFdpZGdldCA9IGZ1bmN0
aW9uKGluZGV4KSB7CisgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uX19nZXRpdGVtX18oaW5kZXgp
OworICAgIH07CisgICAgX191aV9GbG93UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRn
ZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRmxvd1BhbmVsLnByb3RvdHlw
ZS5nZXRXaWRnZXQuY2FsbC5hcHBseShfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9GbG93UGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5nZXRXaWRnZXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxvd1BhbmVs
LnByb3RvdHlwZS5nZXRXaWRnZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zs
b3dQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gcHlqc2xpYl9sZW4odGhpcy5jaGlsZHJlbik7CisgICAgfTsKKyAgICBfX3VpX0Zsb3dQYW5l
bC5wcm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdldENvdW50ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQuY2FsbC5h
cHBseShfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdl
dENvdW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zsb3dQYW5lbC5wcm90b3R5
cGUuZ2V0V2lkZ2V0Q291bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zsb3dQ
YW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0SW5kZXggPSBmdW5jdGlvbihjaGlsZCkgeworICAgIHJl
dHVybiB0aGlzLmNoaWxkcmVuLmluZGV4KGNoaWxkKTsKKyAgICB9OworICAgIF9fdWlfRmxvd1Bh
bmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0SW5kZXggPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfRmxvd1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleC5jYWxs
LmFwcGx5KF9fdWlfRmxvd1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleCwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfRmxvd1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lk
Z2V0SW5kZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxvd1BhbmVsLnByb3Rv
dHlwZS5nZXRXaWRnZXRJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmxv
d1BhbmVsLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpbmRleCkgeworICAgIGlmIChweWpz
bGliX2lzTnVtYmVyKGluZGV4KSkgeworICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0V2lkZ2V0KGlu
ZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18ucmVtb3ZlKHRoaXMsIGluZGV4KTsKKyAgICB9OworICAgIF9fdWlfRmxvd1BhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUucmVtb3ZlLmNhbGwuYXBwbHkoX191aV9GbG93UGFuZWwu
cHJvdG90eXBlLnJlbW92ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRmxvd1BhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0Zsb3dQYW5lbC5wcm90b3R5cGUucmVtb3ZlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9
Cit2YXIgdWlfSFRNTFBhbmVsX3NVaWQgPSAwOworZnVuY3Rpb24gX191aV9IVE1MUGFuZWwoKSB7
Cit9CitmdW5jdGlvbiB1aV9IVE1MUGFuZWwoaHRtbCkgeworICAgIHZhciBpbnN0YW5jZSA9IG5l
dyBfX3VpX0hUTUxQYW5lbCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5f
X2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7
Cit9CisKKworZnVuY3Rpb24gX191aV9IVE1MUGFuZWxfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihf
X3VpX0hUTUxQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9IVE1M
UGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfQ29tcGxleFBh
bmVsLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfQ29tcGxleFBhbmVsX2luaXRp
YWxpemUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0hUTUxQYW5lbCwgX191aV9Db21wbGV4UGFu
ZWwpOworICAgIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVp
X0hUTUxQYW5lbDsKKyAgICBfX3VpX0hUTUxQYW5lbC5wcm90b3R5cGUuX19pbml0X18gPSBmdW5j
dGlvbihodG1sKSB7CisgICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5f
X2luaXRfXyh0aGlzKTsKKyAgICB0aGlzLnNldEVsZW1lbnQoRE9NX2NyZWF0ZURpdigpKTsKKyAg
ICBET01fc2V0SW5uZXJIVE1MKHRoaXMuZ2V0RWxlbWVudCgpLCBodG1sKTsKKyAgICB9OworICAg
IF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXy5jYWxs
LmFwcGx5KF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5fX2luaXRf
Xy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5h
ZGQgPSBmdW5jdGlvbih3aWRnZXQsIGlkKSB7CisgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdldEVs
ZW1lbnRCeUlkKHRoaXMuZ2V0RWxlbWVudCgpLCBpZCk7CisgICAgaWYgKChlbGVtZW50ID09IG51
bGwpKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICBfX3VpX0NvbXBsZXhQYW5lbC5wcm90b3R5
cGUuX19jbGFzc19fLmFkZCh0aGlzLCB3aWRnZXQsIGVsZW1lbnQpOworICAgIH07CisgICAgX191
aV9IVE1MUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZGQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5hZGQuY2FsbC5hcHBseShfX3VpX0hU
TUxQYW5lbC5wcm90b3R5cGUuYWRkLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IVE1M
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZGQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5hZGQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0hUTUxQYW5lbC5wcm90b3R5cGUuY3JlYXRlVW5pcXVlSWQgPSBmdW5jdGlvbigpIHsK
KyAgICB1aV9IVE1MUGFuZWxfc1VpZCArPSAxOworICAgIHJldHVybiAgKCAnSFRNTFBhbmVsXycg
KyB1aV9IVE1MUGFuZWxfc1VpZCApIDsKKyAgICB9OworICAgIF9fdWlfSFRNTFBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uY3JlYXRlVW5pcXVlSWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5jcmVhdGVVbmlxdWVJZC5jYWxsLmFwcGx5KF9f
dWlfSFRNTFBhbmVsLnByb3RvdHlwZS5jcmVhdGVVbmlxdWVJZCwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uY3JlYXRlVW5pcXVlSWQu
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFBhbmVsLnByb3RvdHlwZS5jcmVh
dGVVbmlxdWVJZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSFRNTFBhbmVsLnBy
b3RvdHlwZS5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlkKSB7CisgICAgdmFy
IGVsZW1lbnRfaWQgPSBET01fZ2V0QXR0cmlidXRlKGVsZW1lbnQsICdpZCcpOworICAgIGlmICgo
ZWxlbWVudF9pZCAhPSBudWxsKSAmJiAoZWxlbWVudF9pZCA9PSBpZCkpIHsKKyAgICByZXR1cm4g
ZWxlbWVudDsKKyAgICB9CisgICAgdmFyIGNoaWxkID0gRE9NX2dldEZpcnN0Q2hpbGQoZWxlbWVu
dCk7CisgICAgd2hpbGUgKChjaGlsZCAhPSBudWxsKSkgeworICAgIHZhciByZXQgPSB0aGlzLmdl
dEVsZW1lbnRCeUlkKGNoaWxkLCBpZCk7CisgICAgaWYgKChyZXQgIT0gbnVsbCkpIHsKKyAgICBy
ZXR1cm4gcmV0OworICAgIH0KKyAgICB2YXIgY2hpbGQgPSBET01fZ2V0TmV4dFNpYmxpbmcoY2hp
bGQpOworICAgIH0KKyAgICByZXR1cm47CisgICAgfTsKKyAgICBfX3VpX0hUTUxQYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX0hUTUxQYW5lbC5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQuY2FsbC5hcHBseShf
X3VpX0hUTUxQYW5lbC5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0hUTUxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldEVsZW1lbnRCeUlk
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hUTUxQYW5lbC5wcm90b3R5cGUuZ2V0
RWxlbWVudEJ5SWQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfRGVj
a1BhbmVsKCkgeworfQorZnVuY3Rpb24gdWlfRGVja1BhbmVsKCkgeworICAgIHZhciBpbnN0YW5j
ZSA9IG5ldyBfX3VpX0RlY2tQYW5lbCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0
YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5z
dGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191aV9EZWNrUGFuZWxfaW5pdGlhbGl6ZSgpIHsKKyAg
ICBpZihfX3VpX0RlY2tQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191
aV9EZWNrUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfQ29t
cGxleFBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfQ29tcGxleFBhbmVs
X2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0RlY2tQYW5lbCwgX191aV9Db21w
bGV4UGFuZWwpOworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdf
XyA9IHVpX0RlY2tQYW5lbDsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19pbml0X18g
PSBmdW5jdGlvbigpIHsKKyAgICBfX3VpX0NvbXBsZXhQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
Ll9faW5pdF9fKHRoaXMpOworICAgIHRoaXMudmlzaWJsZVdpZGdldCA9IG51bGw7CisgICAgdGhp
cy5zZXRFbGVtZW50KERPTV9jcmVhdGVEaXYoKSk7CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5l
bC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX0Rl
Y2tQYW5lbC5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X0RlY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24o
d2lkZ2V0KSB7CisgICAgdGhpcy5pbnNlcnQod2lkZ2V0LCB0aGlzLmdldFdpZGdldENvdW50KCkp
OworICAgIH07CisgICAgX191aV9EZWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZGQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5hZGQu
Y2FsbC5hcHBseShfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuYWRkLCBhcmd1bWVudHMpOworICAg
IH07CisgICAgX191aV9EZWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZGQudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5hZGQuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuZ2V0VmlzaWJsZVdp
ZGdldCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmdldFdpZGdldEluZGV4KHRoaXMu
dmlzaWJsZVdpZGdldCk7CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLmdldFZpc2libGVXaWRnZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfRGVja1BhbmVsLnByb3RvdHlwZS5nZXRWaXNpYmxlV2lkZ2V0LmNhbGwuYXBwbHkoX191aV9E
ZWNrUGFuZWwucHJvdG90eXBlLmdldFZpc2libGVXaWRnZXQsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFZpc2libGVXaWRnZXQu
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5nZXRW
aXNpYmxlV2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EZWNrUGFuZWwu
cHJvdG90eXBlLmdldFdpZGdldCA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgcmV0dXJuIHRoaXMu
Y2hpbGRyZW4uX19nZXRpdGVtX18oaW5kZXgpOworICAgIH07CisgICAgX191aV9EZWNrUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQuY2FsbC5hcHBseShfX3VpX0Rl
Y2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9EZWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXQudW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291
bnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gcHlqc2xpYl9sZW4odGhpcy5jaGlsZHJlbik7
CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdl
dENvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0RlY2tQYW5lbC5wcm90
b3R5cGUuZ2V0V2lkZ2V0Q291bnQuY2FsbC5hcHBseShfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUu
Z2V0V2lkZ2V0Q291bnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdldENvdW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0SW5kZXgg
PSBmdW5jdGlvbihjaGlsZCkgeworICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmluZGV4KGNoaWxk
KTsKKyAgICB9OworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lk
Z2V0SW5kZXggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRGVja1BhbmVsLnBy
b3RvdHlwZS5nZXRXaWRnZXRJbmRleC5jYWxsLmFwcGx5KF9fdWlfRGVja1BhbmVsLnByb3RvdHlw
ZS5nZXRXaWRnZXRJbmRleCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRGVja1BhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0SW5kZXgudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleC5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5j
dGlvbih3aWRnZXQsIGJlZm9yZUluZGV4KSB7CisgICAgaWYgKCh0aGlzLmJlZm9yZUluZGV4IDwg
MCkgfHwgKHRoaXMuYmVmb3JlSW5kZXggPiB0aGlzLmdldFdpZGdldENvdW50KCkpKSB7CisgICAg
cmV0dXJuOworICAgIH0KKyAgICBfX3VpX0NvbXBsZXhQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
Lmluc2VydCh0aGlzLCB3aWRnZXQsIHRoaXMuZ2V0RWxlbWVudCgpLCBiZWZvcmVJbmRleCk7Cisg
ICAgdmFyIGNoaWxkID0gd2lkZ2V0LmdldEVsZW1lbnQoKTsKKyAgICBET01fc2V0U3R5bGVBdHRy
aWJ1dGUoY2hpbGQsICd3aWR0aCcsICcxMDAlJyk7CisgICAgRE9NX3NldFN0eWxlQXR0cmlidXRl
KGNoaWxkLCAnaGVpZ2h0JywgJzEwMCUnKTsKKyAgICB3aWRnZXQuc2V0VmlzaWJsZShmYWxzZSk7
CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmluc2VydCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9EZWNrUGFuZWwucHJvdG90eXBlLmlu
c2VydC5jYWxsLmFwcGx5KF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5pbnNlcnQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmluc2Vy
dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EZWNrUGFuZWwucHJvdG90eXBlLmlu
c2VydC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICBpZiAocHlqc2xpYl9pc051bWJlcih3
aWRnZXQpKSB7CisgICAgdmFyIHdpZGdldCA9IHRoaXMuZ2V0V2lkZ2V0KHdpZGdldCk7CisgICAg
fQorICAgIGlmICghKF9fdWlfQ29tcGxleFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3Zl
KHRoaXMsIHdpZGdldCkpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoKHRo
aXMudmlzaWJsZVdpZGdldCA9PSB3aWRnZXQpKSB7CisgICAgdGhpcy52aXNpYmxlV2lkZ2V0ID0g
bnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5l
bC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9EZWNrUGFuZWwucHJvdG90eXBlLnJlbW92ZS5jYWxsLmFwcGx5KF9fdWlfRGVja1Bh
bmVsLnByb3RvdHlwZS5yZW1vdmUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RlY2tQ
YW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZS51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9EZWNrUGFuZWwucHJvdG90eXBlLnJlbW92ZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5zaG93V2lkZ2V0ID0gZnVuY3Rpb24oaW5k
ZXgpIHsKKyAgICB0aGlzLmNoZWNrSW5kZXgoaW5kZXgpOworICAgIGlmICgodGhpcy52aXNpYmxl
V2lkZ2V0ICE9IG51bGwpKSB7CisgICAgdGhpcy52aXNpYmxlV2lkZ2V0LnNldFZpc2libGUoZmFs
c2UpOworICAgIH0KKyAgICB0aGlzLnZpc2libGVXaWRnZXQgPSB0aGlzLmdldFdpZGdldChpbmRl
eCk7CisgICAgdGhpcy52aXNpYmxlV2lkZ2V0LnNldFZpc2libGUodHJ1ZSk7CisgICAgfTsKKyAg
ICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNob3dXaWRnZXQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5zaG93V2lkZ2V0
LmNhbGwuYXBwbHkoX191aV9EZWNrUGFuZWwucHJvdG90eXBlLnNob3dXaWRnZXQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNob3dX
aWRnZXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlw
ZS5zaG93V2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EZWNrUGFuZWwu
cHJvdG90eXBlLmNoZWNrSW5kZXggPSBmdW5jdGlvbihpbmRleCkgeworICAgIGlmICgoaW5kZXgg
PCAwKSB8fCAoaW5kZXggPj0gdGhpcy5nZXRXaWRnZXRDb3VudCgpKSkgeworICAgIH0KKyAgICB9
OworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uY2hlY2tJbmRleCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9EZWNrUGFuZWwucHJvdG90eXBlLmNoZWNr
SW5kZXguY2FsbC5hcHBseShfX3VpX0RlY2tQYW5lbC5wcm90b3R5cGUuY2hlY2tJbmRleCwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRGVja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
Y2hlY2tJbmRleC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EZWNrUGFuZWwucHJv
dG90eXBlLmNoZWNrSW5kZXguaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9f
dWlfU2ltcGxlUGFuZWwoKSB7Cit9CitmdW5jdGlvbiB1aV9TaW1wbGVQYW5lbChlbGVtZW50KSB7
CisgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICd1bmRlZmluZWQnKSBlbGVtZW50PW51bGw7Cisg
ICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfU2ltcGxlUGFuZWwoKTsKKyAgICBpZihpbnN0YW5j
ZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7
CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK3VpX1NpbXBsZVBhbmVsLnBhcnNlX2t3YXJn
cyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIGVsZW1lbnQgKSB7CisgICAgaWYgKHR5cGVvZiBlbGVt
ZW50ID09ICd1bmRlZmluZWQnKQorICAgICAgICBlbGVtZW50PV9fa3dhcmdzLmVsZW1lbnQ7Cisg
ICAgdmFyIF9fciA9IFtlbGVtZW50XTsKKyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9f
dWlfU2ltcGxlUGFuZWxfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX1NpbXBsZVBhbmVsLl9f
d2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1NpbXBsZVBhbmVsLl9fd2FzX2lu
aXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX1BhbmVsLl9fd2FzX2luaXRpYWxpemVk
X18pCisgICAgICAgIF9fdWlfUGFuZWxfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9f
dWlfU2ltcGxlUGFuZWwsIF9fdWlfUGFuZWwpOworICAgIF9fdWlfU2ltcGxlUGFuZWwucHJvdG90
eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfU2ltcGxlUGFuZWw7CisgICAgX191aV9TaW1wbGVQ
YW5lbC5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgaWYgKHR5
cGVvZiBlbGVtZW50ID09ICd1bmRlZmluZWQnKSBlbGVtZW50PW51bGw7CisgICAgX191aV9QYW5l
bC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMpOworICAgIGlmICgoZWxlbWVudCA9
PSBudWxsKSkgeworICAgIHZhciBlbGVtZW50ID0gRE9NX2NyZWF0ZURpdigpOworICAgIH0KKyAg
ICB0aGlzLnNldEVsZW1lbnQoZWxlbWVudCk7CisgICAgfTsKK19fdWlfU2ltcGxlUGFuZWwucHJv
dG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIGVsZW1l
bnQgKSB7CisgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICd1bmRlZmluZWQnKQorICAgICAgICBl
bGVtZW50PV9fa3dhcmdzLmVsZW1lbnQ7CisgICAgdmFyIF9fciA9IFtlbGVtZW50XTsKKyAgICBy
ZXR1cm4gX19yOworfTsKKyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
X19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU2ltcGxlUGFuZWwu
cHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUu
X19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
U2ltcGxlUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnBhcnNlX2t3
YXJncyA9IF9fdWlfU2ltcGxlUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJnczsK
KyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih3aWRnZXQpIHsK
KyAgICBpZiAoKHRoaXMuZ2V0V2lkZ2V0KCkgIT0gbnVsbCkpIHsKKyAgICBjb25zb2xlLmVycm9y
KCdTaW1wbGVQYW5lbCBjYW4gb25seSBjb250YWluIG9uZSBjaGlsZCB3aWRnZXQnKTsKKyAgICBy
ZXR1cm47CisgICAgfQorICAgIHRoaXMuc2V0V2lkZ2V0KHdpZGdldCk7CisgICAgfTsKKyAgICBf
X3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5hZGQuY2FsbC5hcHBseShf
X3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5hZGQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5hZGQuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQgPSBmdW5j
dGlvbigpIHsKKyAgICBpZiAocHlqc2xpYl9sZW4odGhpcy5jaGlsZHJlbikpIHsKKyAgICByZXR1
cm4gdGhpcy5jaGlsZHJlbi5fX2dldGl0ZW1fXygwKTsKKyAgICB9CisgICAgcmV0dXJuOworICAg
IH07CisgICAgX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdldCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUu
Z2V0V2lkZ2V0LmNhbGwuYXBwbHkoX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLmdldFdpZGdldC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TaW1wbGVQ
YW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24od2lkZ2V0KSB7CisgICAg
aWYgKCh0aGlzLmdldFdpZGdldCgpID09IHdpZGdldCkpIHsKKyAgICB0aGlzLmRpc293bih3aWRn
ZXQpOworICAgIHRoaXMuY2hpbGRyZW4uX19kZWxpdGVtX18oMCk7CisgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIF9fdWlfU2ltcGxlUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfU2ltcGxlUGFuZWwucHJvdG90eXBlLnJlbW92ZS5jYWxsLmFwcGx5KF9fdWlfU2ltcGxl
UGFuZWwucHJvdG90eXBlLnJlbW92ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfU2lt
cGxlUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfU2ltcGxlUGFuZWwucHJvdG90eXBlLnJlbW92ZS5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfU2ltcGxlUGFuZWwucHJvdG90eXBlLmdldENvbnRhaW5lckVsZW1l
bnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50KCk7CisgICAgfTsK
KyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q29udGFpbmVyRWxl
bWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9TaW1wbGVQYW5lbC5wcm90
b3R5cGUuZ2V0Q29udGFpbmVyRWxlbWVudC5jYWxsLmFwcGx5KF9fdWlfU2ltcGxlUGFuZWwucHJv
dG90eXBlLmdldENvbnRhaW5lckVsZW1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X1NpbXBsZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q29udGFpbmVyRWxlbWVudC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuZ2V0Q29u
dGFpbmVyRWxlbWVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfU2ltcGxlUGFu
ZWwucHJvdG90eXBlLnNldFdpZGdldCA9IGZ1bmN0aW9uKHdpZGdldCkgeworICAgIGlmICgodGhp
cy5nZXRXaWRnZXQoKSAhPSBudWxsKSkgeworICAgIHRoaXMuZGlzb3duKHRoaXMuZ2V0V2lkZ2V0
KCkpOworICAgIHRoaXMuY2hpbGRyZW4uX19kZWxpdGVtX18oMCk7CisgICAgfQorICAgIGlmICgo
d2lkZ2V0ICE9IG51bGwpKSB7CisgICAgdGhpcy5hZG9wdCh3aWRnZXQsIHRoaXMuZ2V0Q29udGFp
bmVyRWxlbWVudCgpKTsKKyAgICB0aGlzLmNoaWxkcmVuLl9fc2V0aXRlbV9fKDAsIHdpZGdldCk7
CisgICAgfQorICAgIH07CisgICAgX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LnNldFdpZGdldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9TaW1wbGVQYW5l
bC5wcm90b3R5cGUuc2V0V2lkZ2V0LmNhbGwuYXBwbHkoX191aV9TaW1wbGVQYW5lbC5wcm90b3R5
cGUuc2V0V2lkZ2V0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9TaW1wbGVQYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLnNldFdpZGdldC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuc2V0V2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7Cit9CitmdW5jdGlvbiBfX3VpX1Njcm9sbFBhbmVsKCkgeworfQorZnVuY3Rpb24gdWlfU2Ny
b2xsUGFuZWwoY2hpbGQpIHsKKyAgICBpZiAodHlwZW9mIGNoaWxkID09ICd1bmRlZmluZWQnKSBj
aGlsZD1udWxsOworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX1Njcm9sbFBhbmVsKCk7Cisg
ICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNl
LCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCit1aV9TY3JvbGxQYW5l
bC5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBjaGlsZCApIHsKKyAgICBpZiAo
dHlwZW9mIGNoaWxkID09ICd1bmRlZmluZWQnKQorICAgICAgICBjaGlsZD1fX2t3YXJncy5jaGls
ZDsKKyAgICB2YXIgX19yID0gW2NoaWxkXTsKKyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9u
IF9fdWlfU2Nyb2xsUGFuZWxfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX1Njcm9sbFBhbmVs
Ll9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLl9fd2Fz
X2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX1NpbXBsZVBhbmVsLl9fd2FzX2lu
aXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfU2ltcGxlUGFuZWxfaW5pdGlhbGl6ZSgpOworICAg
IHB5anNfZXh0ZW5kKF9fdWlfU2Nyb2xsUGFuZWwsIF9fdWlfU2ltcGxlUGFuZWwpOworICAgIF9f
dWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfU2Nyb2xsUGFu
ZWw7CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbihj
aGlsZCkgeworICAgIGlmICh0eXBlb2YgY2hpbGQgPT0gJ3VuZGVmaW5lZCcpIGNoaWxkPW51bGw7
CisgICAgX191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMp
OworICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJzID0gbmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAg
dGhpcy5zZXRBbHdheXNTaG93U2Nyb2xsQmFycyhmYWxzZSk7CisgICAgdGhpcy5zaW5rRXZlbnRz
KF9fdWlfRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5PTlNDUk9MTCk7CisgICAgaWYgKChjaGls
ZCAhPSBudWxsKSkgeworICAgIHRoaXMuc2V0V2lkZ2V0KGNoaWxkKTsKKyAgICB9CisgICAgfTsK
K19fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IGZ1bmN0
aW9uICggX19rd2FyZ3MsIGNoaWxkICkgeworICAgIGlmICh0eXBlb2YgY2hpbGQgPT0gJ3VuZGVm
aW5lZCcpCisgICAgICAgIGNoaWxkPV9fa3dhcmdzLmNoaWxkOworICAgIHZhciBfX3IgPSBbY2hp
bGRdOworICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBl
Ll9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9T
Y3JvbGxQYW5lbC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX1Njcm9sbFBhbmVs
LnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfU2Nyb2xs
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0
X18ucGFyc2Vfa3dhcmdzID0gX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19pbml0X18ucGFy
c2Vfa3dhcmdzOworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLmFkZFNjcm9sbExpc3Rl
bmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLnNjcm9sbExpc3RlbmVycy5hcHBl
bmQobGlzdGVuZXIpOworICAgIH07CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLmFkZFNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5hZGRTY3JvbGxMaXN0ZW5lci5jYWxsLmFwcGx5KF9f
dWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLmFkZFNjcm9sbExpc3RlbmVyLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZFNjcm9s
bExpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnBy
b3RvdHlwZS5hZGRTY3JvbGxMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLmVuc3VyZVZpc2libGUgPSBmdW5jdGlvbihpdGVtKSB7
CisgICAgdmFyIHNjcm9sbCA9IHRoaXMuZ2V0RWxlbWVudCgpOworICAgIHZhciBlbGVtZW50ID0g
aXRlbS5nZXRFbGVtZW50KCk7CisgICAgdGhpcy5lbnN1cmVWaXNpYmxlSW1wbChzY3JvbGwsIGVs
ZW1lbnQpOworICAgIH07CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LmVuc3VyZVZpc2libGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU2Nyb2xs
UGFuZWwucHJvdG90eXBlLmVuc3VyZVZpc2libGUuY2FsbC5hcHBseShfX3VpX1Njcm9sbFBhbmVs
LnByb3RvdHlwZS5lbnN1cmVWaXNpYmxlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9T
Y3JvbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmVuc3VyZVZpc2libGUudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLmVuc3VyZVZpc2libGUu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5n
ZXRTY3JvbGxQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0SW50QXR0
cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAnc2Nyb2xsVG9wJyk7CisgICAgfTsKKyAgICBfX3Vp
X1Njcm9sbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0U2Nyb2xsUG9zaXRpb24gPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLmdldFNj
cm9sbFBvc2l0aW9uLmNhbGwuYXBwbHkoX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuZ2V0U2Ny
b2xsUG9zaXRpb24sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0U2Nyb2xsUG9zaXRpb24udW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLmdldFNjcm9sbFBvc2l0aW9uLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuZ2V0SG9y
aXpvbnRhbFNjcm9sbFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRJ
bnRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdzY3JvbGxMZWZ0Jyk7CisgICAgfTsKKyAg
ICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SG9yaXpvbnRhbFNjcm9s
bFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1Njcm9sbFBhbmVs
LnByb3RvdHlwZS5nZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb24uY2FsbC5hcHBseShfX3VpX1Nj
cm9sbFBhbmVsLnByb3RvdHlwZS5nZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb24sIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0
SG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1Njcm9sbFBhbmVsLnByb3RvdHlwZS5nZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb24uaW5zdGFu
Y2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5vbkJyb3dz
ZXJFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIHR5cGUgPSBET01fZXZlbnRHZXRU
eXBlKGV2ZW50KTsKKyAgICBpZiAoKHR5cGUgPT0gJ3Njcm9sbCcpKSB7CisKKyAgICAgICAgdmFy
IF9fbGlzdGVuZXIgPSB0aGlzLnNjcm9sbExpc3RlbmVycy5fX2l0ZXJfXygpOworICAgICAgICB0
cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlz
dGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisg
ICAgbGlzdGVuZXIub25TY3JvbGwodGhpcywgdGhpcy5nZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRp
b24oKSwgdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpKTsKKworICAgICAgICAgICAgfQorICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNz
X18ub25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU2Ny
b2xsUGFuZWwucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50LmNhbGwuYXBwbHkoX191aV9TY3JvbGxQ
YW5lbC5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLm9uQnJvd3Nl
ckV2ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90
b3R5cGUucmVtb3ZlU2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRo
aXMuc2Nyb2xsTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX1Nj
cm9sbFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlU2Nyb2xsTGlzdGVuZXIgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLnJlbW92
ZVNjcm9sbExpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUucmVt
b3ZlU2Nyb2xsTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1Njcm9sbFBh
bmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlU2Nyb2xsTGlzdGVuZXIudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLnJlbW92ZVNjcm9sbExp
c3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90
b3R5cGUuc2V0QWx3YXlzU2hvd1Njcm9sbEJhcnMgPSBmdW5jdGlvbihhbHdheXNTaG93KSB7Cisg
ICAgaWYgKGFsd2F5c1Nob3cpIHsKKyAgICB2YXIgc3R5bGUgPSAnc2Nyb2xsJzsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgdmFyIHN0eWxlID0gJ2F1dG8nOworICAgIH0KKyAgICBET01fc2V0U3R5
bGVBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdvdmVyZmxvdycsIHN0eWxlKTsKKyAgICB9
OworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRBbHdheXNTaG93
U2Nyb2xsQmFycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9TY3JvbGxQYW5l
bC5wcm90b3R5cGUuc2V0QWx3YXlzU2hvd1Njcm9sbEJhcnMuY2FsbC5hcHBseShfX3VpX1Njcm9s
bFBhbmVsLnByb3RvdHlwZS5zZXRBbHdheXNTaG93U2Nyb2xsQmFycywgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRBbHdheXNT
aG93U2Nyb2xsQmFycy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TY3JvbGxQYW5l
bC5wcm90b3R5cGUuc2V0QWx3YXlzU2hvd1Njcm9sbEJhcnMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5zZXRTY3JvbGxQb3NpdGlvbiA9IGZ1
bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgRE9NX3NldEludEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1l
bnQoKSwgJ3Njcm9sbFRvcCcsIHBvc2l0aW9uKTsKKyAgICB9OworICAgIF9fdWlfU2Nyb2xsUGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRTY3JvbGxQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuc2V0U2Nyb2xsUG9zaXRp
b24uY2FsbC5hcHBseShfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5zZXRTY3JvbGxQb3NpdGlv
biwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXRTY3JvbGxQb3NpdGlvbi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuc2V0U2Nyb2xsUG9zaXRpb24uaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1Njcm9sbFBhbmVsLnByb3RvdHlwZS5zZXRIb3Jpem9udGFsU2Ny
b2xsUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgIERPTV9zZXRJbnRBdHRyaWJ1
dGUodGhpcy5nZXRFbGVtZW50KCksICdzY3JvbGxMZWZ0JywgcG9zaXRpb24pOworICAgIH07Cisg
ICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldEhvcml6b250YWxTY3Jv
bGxQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9TY3JvbGxQYW5l
bC5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uLmNhbGwuYXBwbHkoX191aV9T
Y3JvbGxQYW5lbC5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uLCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNl
dEhvcml6b250YWxTY3JvbGxQb3NpdGlvbi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuZW5zdXJl
VmlzaWJsZUltcGwgPSBmdW5jdGlvbihzY3JvbGwsIGUpIHsKKworICAgICAgICBpZiAoIWUpIHJl
dHVybjsKKworICAgICAgICB2YXIgaXRlbSA9IGU7CisgICAgICAgIHZhciByZWFsT2Zmc2V0ID0g
MDsKKyAgICAgICAgd2hpbGUgKGl0ZW0gJiYgKGl0ZW0gIT0gc2Nyb2xsKSkgeworICAgICAgICAg
ICAgcmVhbE9mZnNldCArPSBpdGVtLm9mZnNldFRvcDsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVt
Lm9mZnNldFBhcmVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBzY3JvbGwuc2Nyb2xsVG9w
ID0gcmVhbE9mZnNldCAtIHNjcm9sbC5vZmZzZXRIZWlnaHQgLyAyOworICAgICAgICAKKyAgICB9
OworICAgIF9fdWlfU2Nyb2xsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5lbnN1cmVWaXNpYmxl
SW1wbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9TY3JvbGxQYW5lbC5wcm90
b3R5cGUuZW5zdXJlVmlzaWJsZUltcGwuY2FsbC5hcHBseShfX3VpX1Njcm9sbFBhbmVsLnByb3Rv
dHlwZS5lbnN1cmVWaXNpYmxlSW1wbCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfU2Ny
b2xsUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5lbnN1cmVWaXNpYmxlSW1wbC51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9TY3JvbGxQYW5lbC5wcm90b3R5cGUuZW5zdXJlVmlzaWJs
ZUltcGwuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfUG9wdXBQYW5l
bCgpIHsKK30KK2Z1bmN0aW9uIHVpX1BvcHVwUGFuZWwoYXV0b0hpZGUpIHsKKyAgICBpZiAodHlw
ZW9mIGF1dG9IaWRlID09ICd1bmRlZmluZWQnKSBhdXRvSGlkZT1mYWxzZTsKKyAgICB2YXIgaW5z
dGFuY2UgPSBuZXcgX191aV9Qb3B1cFBhbmVsKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18p
IGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVy
biBpbnN0YW5jZTsKK30KKworCit1aV9Qb3B1cFBhbmVsLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9u
ICggX19rd2FyZ3MsIGF1dG9IaWRlICkgeworICAgIGlmICh0eXBlb2YgYXV0b0hpZGUgPT0gJ3Vu
ZGVmaW5lZCcpCisgICAgICAgIGF1dG9IaWRlPV9fa3dhcmdzLmF1dG9IaWRlOworICAgIHZhciBf
X3IgPSBbYXV0b0hpZGVdOworICAgIHJldHVybiBfX3I7Cit9OworZnVuY3Rpb24gX191aV9Qb3B1
cFBhbmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9Qb3B1cFBhbmVsLl9fd2FzX2luaXRp
YWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1BvcHVwUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRf
XyA9IHRydWU7CisgICAgaWYoIV9fdWlfU2ltcGxlUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykK
KyAgICAgICAgX191aV9TaW1wbGVQYW5lbF9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQo
X191aV9Qb3B1cFBhbmVsLCBfX3VpX1NpbXBsZVBhbmVsKTsKKyAgICBfX3VpX1BvcHVwUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfUG9wdXBQYW5lbDsKKyAgICBfX3VpX1Bv
cHVwUGFuZWwucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oYXV0b0hpZGUpIHsKKyAgICBp
ZiAodHlwZW9mIGF1dG9IaWRlID09ICd1bmRlZmluZWQnKSBhdXRvSGlkZT1mYWxzZTsKKyAgICB0
aGlzLnBvcHVwTGlzdGVuZXJzID0gbmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAgdGhpcy5zaG93
aW5nID0gZmFsc2U7CisgICAgdGhpcy5hdXRvSGlkZSA9IGZhbHNlOworICAgIF9fdWlfU2ltcGxl
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlzLCB0aGlzLmNyZWF0ZUVsZW1l
bnQoKSk7CisgICAgRE9NX3NldFN0eWxlQXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAncG9z
aXRpb24nLCAnYWJzb2x1dGUnKTsKKyAgICBpZiAoYXV0b0hpZGUpIHsKKyAgICB0aGlzLmF1dG9I
aWRlID0gYXV0b0hpZGU7CisgICAgfQorICAgIH07CitfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBl
Ll9faW5pdF9fLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIGF1dG9IaWRlICkg
eworICAgIGlmICh0eXBlb2YgYXV0b0hpZGUgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGF1dG9I
aWRlPV9fa3dhcmdzLmF1dG9IaWRlOworICAgIHZhciBfX3IgPSBbYXV0b0hpZGVdOworICAgIHJl
dHVybiBfX3I7Cit9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9f
aW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1BvcHVwUGFuZWwucHJv
dG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2lu
aXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUu
X19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVw
UGFuZWwucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18ucGFyc2Vfa3dhcmdzID0g
X191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3M7CisgICAgX191
aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5hZGRQb3B1cExpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVu
ZXIpIHsKKyAgICB0aGlzLnBvcHVwTGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsK
KyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRQb3B1cExpc3RlbmVy
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBl
LmFkZFBvcHVwTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLmFk
ZFBvcHVwTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1BvcHVwUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5hZGRQb3B1cExpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLmFkZFBvcHVwTGlzdGVuZXIuaW5zdGFu
Y2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLmdldFBvcHVw
TGVmdCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMu
Z2V0RWxlbWVudCgpLCAnb2Zmc2V0TGVmdCcpOworICAgIH07CisgICAgX191aV9Qb3B1cFBhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0UG9wdXBMZWZ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLmdldFBvcHVwTGVmdC5jYWxsLmFwcGx5
KF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuZ2V0UG9wdXBMZWZ0LCBhcmd1bWVudHMpOworICAg
IH07CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0UG9wdXBMZWZ0
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLmdl
dFBvcHVwTGVmdC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUG9wdXBQYW5lbC5w
cm90b3R5cGUuZ2V0UG9wdXBUb3AgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldElu
dEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ29mZnNldFRvcCcpOworICAgIH07CisgICAg
X191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0UG9wdXBUb3AgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuZ2V0UG9wdXBU
b3AuY2FsbC5hcHBseShfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLmdldFBvcHVwVG9wLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0UG9wdXBUb3AudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUG9wdXBQYW5lbC5w
cm90b3R5cGUuZ2V0UG9wdXBUb3AuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Bv
cHVwUGFuZWwucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gRE9NX2NyZWF0ZURpdigpOworICAgIH07CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18uY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LmNhbGwuYXBwbHkoX191aV9Q
b3B1cFBhbmVsLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uY3JlYXRlRWxlbWVudC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5jcmVhdGVF
bGVtZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3Rv
dHlwZS5oaWRlID0gZnVuY3Rpb24oYXV0b0Nsb3NlZCkgeworICAgIGlmICh0eXBlb2YgYXV0b0Ns
b3NlZCA9PSAndW5kZWZpbmVkJykgYXV0b0Nsb3NlZD1mYWxzZTsKKyAgICBpZiAoISh0aGlzLnNo
b3dpbmcpKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnNob3dpbmcgPSBmYWxzZTsK
KyAgICBET01fcmVtb3ZlRXZlbnRQcmV2aWV3KHRoaXMpOworICAgIHVpX1Jvb3RQYW5lbCgpLmdl
dCgpLnJlbW92ZSh0aGlzKTsKKyAgICB0aGlzLm9uSGlkZUltcGwodGhpcy5nZXRFbGVtZW50KCkp
OworCisgICAgICAgIHZhciBfX2xpc3RlbmVyID0gdGhpcy5wb3B1cExpc3RlbmVycy5fX2l0ZXJf
XygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgCisgICAgaWYgKGxpc3RlbmVyLm9uUG9wdXBDbG9zZWQpIHsKKyAgICBsaXN0
ZW5lci5vblBvcHVwQ2xvc2VkKHRoaXMsIGF1dG9DbG9zZWQpOworICAgIH0KKyAgICBlbHNlIHsK
KyAgICBsaXN0ZW5lcih0aGlzLCBhdXRvQ2xvc2VkKTsKKyAgICB9CisKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlv
bikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgfTsKK19fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuaGlkZS5wYXJzZV9r
d2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBhdXRvQ2xvc2VkICkgeworICAgIGlmICh0eXBl
b2YgYXV0b0Nsb3NlZCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgYXV0b0Nsb3NlZD1fX2t3YXJn
cy5hdXRvQ2xvc2VkOworICAgIHZhciBfX3IgPSBbYXV0b0Nsb3NlZF07CisgICAgcmV0dXJuIF9f
cjsKK307CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uaGlkZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5oaWRl
LmNhbGwuYXBwbHkoX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5oaWRlLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uaGlkZS51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5oaWRlLmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18uaGlkZS5wYXJzZV9rd2FyZ3MgPSBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLmhpZGUu
cGFyc2Vfa3dhcmdzOworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25FdmVudFByZXZp
ZXcgPSBmdW5jdGlvbihldmVudCkgeworICAgIHZhciB0YXJnZXQgPSBET01fZXZlbnRHZXRUYXJn
ZXQoZXZlbnQpOworICAgIHZhciBldmVudF90YXJnZXRzX3BvcHVwID0gdGFyZ2V0ICYmIERPTV9p
c09ySGFzQ2hpbGQodGhpcy5nZXRFbGVtZW50KCksIHRhcmdldCk7CisgICAgdmFyIHR5cGUgPSBE
T01fZXZlbnRHZXRUeXBlKGV2ZW50KTsKKyAgICBpZiAoKHR5cGUgPT0gJ2tleWRvd24nKSkgewor
ICAgIHJldHVybiB0aGlzLm9uS2V5RG93blByZXZpZXcoRE9NX2V2ZW50R2V0S2V5Q29kZShldmVu
dCksIF9fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLmdldEtleWJvYXJk
TW9kaWZpZXJzKHRoaXMsIGV2ZW50KSkgJiYgZXZlbnRfdGFyZ2V0c19wb3B1cDsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoKHR5cGUgPT0gJ2tleXVwJykpIHsKKyAgICByZXR1cm4gdGhpcy5vbktleVVw
UHJldmlldyhET01fZXZlbnRHZXRLZXlDb2RlKGV2ZW50KSwgX191aV9LZXlib2FyZExpc3RlbmVy
LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0S2V5Ym9hcmRNb2RpZmllcnModGhpcywgZXZlbnQpKSAm
JiBldmVudF90YXJnZXRzX3BvcHVwOworICAgIH0KKyAgICBlbHNlIGlmICgodHlwZSA9PSAna2V5
cHJlc3MnKSkgeworICAgIHJldHVybiB0aGlzLm9uS2V5UHJlc3NQcmV2aWV3KERPTV9ldmVudEdl
dEtleUNvZGUoZXZlbnQpLCBfX3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRLZXlib2FyZE1vZGlmaWVycyh0aGlzLCBldmVudCkpICYmIGV2ZW50X3RhcmdldHNfcG9w
dXA7CisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdtb3VzZWRvd24nKSB8fCAodHlwZSA9
PSAnbW91c2V1cCcpIHx8ICh0eXBlID09ICdtb3VzZW1vdmUnKSB8fCAodHlwZSA9PSAnY2xpY2sn
KSB8fCAodHlwZSA9PSAnZGJsY2xpY2snKSkgeworICAgIGlmICgoRE9NX2dldENhcHR1cmVFbGVt
ZW50KCkgPT0gbnVsbCkpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCEoZXZl
bnRfdGFyZ2V0c19wb3B1cCkgJiYgdGhpcy5hdXRvSGlkZSAmJiAodHlwZSA9PSAnbW91c2Vkb3du
JykpIHsKKyAgICB0aGlzLmhpZGUodHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IH0KKyAgICByZXR1cm4gZXZlbnRfdGFyZ2V0c19wb3B1cDsKKyAgICB9OworICAgIF9fdWlfUG9w
dXBQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uRXZlbnRQcmV2aWV3ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLm9uRXZlbnRQcmV2aWV3
LmNhbGwuYXBwbHkoX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5vbkV2ZW50UHJldmlldywgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
Lm9uRXZlbnRQcmV2aWV3LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVwUGFu
ZWwucHJvdG90eXBlLm9uRXZlbnRQcmV2aWV3Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5vbktleURvd25QcmV2aWV3ID0gZnVuY3Rpb24oa2V5
LCBtb2RpZmllcnMpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQ
YW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uS2V5RG93blByZXZpZXcgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25LZXlEb3duUHJldmll
dy5jYWxsLmFwcGx5KF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25LZXlEb3duUHJldmlldywg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19jbGFz
c19fLm9uS2V5RG93blByZXZpZXcudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUG9w
dXBQYW5lbC5wcm90b3R5cGUub25LZXlEb3duUHJldmlldy5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25LZXlQcmVzc1ByZXZpZXcgPSBmdW5j
dGlvbihrZXksIG1vZGlmaWVycykgeworICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgX191
aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25LZXlQcmVzc1ByZXZpZXcgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25LZXlQ
cmVzc1ByZXZpZXcuY2FsbC5hcHBseShfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLm9uS2V5UHJl
c3NQcmV2aWV3LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18ub25LZXlQcmVzc1ByZXZpZXcudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25LZXlQcmVzc1ByZXZpZXcuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLm9uS2V5VXBQcmV2
aWV3ID0gZnVuY3Rpb24oa2V5LCBtb2RpZmllcnMpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uS2V5VXBQcmV2aWV3
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBl
Lm9uS2V5VXBQcmV2aWV3LmNhbGwuYXBwbHkoX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5vbktl
eVVwUHJldmlldywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLm9uS2V5VXBQcmV2aWV3LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLm9uS2V5VXBQcmV2aWV3Lmluc3RhbmNlX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5vbkhpZGVJbXBsID0gZnVu
Y3Rpb24ocG9wdXApIHsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLm9uSGlkZUltcGwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfUG9w
dXBQYW5lbC5wcm90b3R5cGUub25IaWRlSW1wbC5jYWxsLmFwcGx5KF9fdWlfUG9wdXBQYW5lbC5w
cm90b3R5cGUub25IaWRlSW1wbCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQ
YW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uSGlkZUltcGwudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25IaWRlSW1wbC5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUub25TaG93SW1wbCA9IGZ1
bmN0aW9uKHBvcHVwKSB7CisgICAgfTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5vblNob3dJbXBsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1Bv
cHVwUGFuZWwucHJvdG90eXBlLm9uU2hvd0ltcGwuY2FsbC5hcHBseShfX3VpX1BvcHVwUGFuZWwu
cHJvdG90eXBlLm9uU2hvd0ltcGwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1BvcHVw
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5vblNob3dJbXBsLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLm9uU2hvd0ltcGwuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLnJlbW92ZVBvcHVwTGlz
dGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMucG9wdXBMaXN0ZW5lcnMucmVt
b3ZlKGxpc3RlbmVyKTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLnJlbW92ZVBvcHVwTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUucmVtb3ZlUG9wdXBMaXN0ZW5lci5jYWxsLmFwcGx5
KF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUucmVtb3ZlUG9wdXBMaXN0ZW5lciwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92
ZVBvcHVwTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfUG9wdXBQYW5l
bC5wcm90b3R5cGUucmVtb3ZlUG9wdXBMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuc2V0UG9wdXBQb3NpdGlvbiA9IGZ1bmN0aW9u
KGxlZnQsIHRvcCkgeworICAgIGlmICgobGVmdCA8IDApKSB7CisgICAgdmFyIGxlZnQgPSAwOwor
ICAgIH0KKyAgICBpZiAoKHRvcCA8IDApKSB7CisgICAgdmFyIHRvcCA9IDA7CisgICAgfQorICAg
IHZhciBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KCk7CisgICAgRE9NX3NldFN0eWxlQXR0cmli
dXRlKGVsZW1lbnQsICdsZWZ0JywgICggbGVmdCArICdweCcgKSApOworICAgIERPTV9zZXRTdHls
ZUF0dHJpYnV0ZShlbGVtZW50LCAndG9wJywgICggdG9wICsgJ3B4JyApICk7CisgICAgfTsKKyAg
ICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRQb3B1cFBvc2l0aW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLnNl
dFBvcHVwUG9zaXRpb24uY2FsbC5hcHBseShfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLnNldFBv
cHVwUG9zaXRpb24sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRQb3B1cFBvc2l0aW9uLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLnNldFBvcHVwUG9zaXRpb24uaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLnNob3cgPSBmdW5j
dGlvbigpIHsKKyAgICBpZiAodGhpcy5zaG93aW5nKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAg
ICB0aGlzLnNob3dpbmcgPSB0cnVlOworICAgIERPTV9hZGRFdmVudFByZXZpZXcodGhpcyk7Cisg
ICAgdWlfUm9vdFBhbmVsKCkuZ2V0KCkuYWRkKHRoaXMpOworICAgIHRoaXMub25TaG93SW1wbCh0
aGlzLmdldEVsZW1lbnQoKSk7CisgICAgfTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBl
Ll9fY2xhc3NfXy5zaG93ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1BvcHVw
UGFuZWwucHJvdG90eXBlLnNob3cuY2FsbC5hcHBseShfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBl
LnNob3csIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBl
Ll9fY2xhc3NfXy5zaG93LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1BvcHVwUGFu
ZWwucHJvdG90eXBlLnNob3cuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9f
dWlfTWVudUl0ZW0oKSB7Cit9CitmdW5jdGlvbiB1aV9NZW51SXRlbSh0ZXh0LCBhc0hUTUwsIHN1
Yk1lbnUpIHsKKyAgICBpZiAodHlwZW9mIHN1Yk1lbnUgPT0gJ3VuZGVmaW5lZCcpIHN1Yk1lbnU9
bnVsbDsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9NZW51SXRlbSgpOworICAgIGlmKGlu
c3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1l
bnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKwordWlfTWVudUl0ZW0ucGFyc2Vfa3dh
cmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgdGV4dCwgYXNIVE1MLCBzdWJNZW51ICkgeworICAg
IGlmICh0eXBlb2Ygc3ViTWVudSA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgc3ViTWVudT1fX2t3
YXJncy5zdWJNZW51OworICAgIHZhciBfX3IgPSBbdGV4dCwgYXNIVE1MLCBzdWJNZW51XTsKKyAg
ICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9fdWlfTWVudUl0ZW1faW5pdGlhbGl6ZSgpIHsK
KyAgICBpZihfX3VpX01lbnVJdGVtLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBf
X3VpX01lbnVJdGVtLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX1VJ
T2JqZWN0Ll9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfVUlPYmplY3RfaW5pdGlh
bGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfTWVudUl0ZW0sIF9fdWlfVUlPYmplY3QpOwor
ICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfTWVudUl0
ZW07CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbih0ZXh0
LCBhc0hUTUwsIHN1Yk1lbnUpIHsKKyAgICBpZiAodHlwZW9mIHN1Yk1lbnUgPT0gJ3VuZGVmaW5l
ZCcpIHN1Yk1lbnU9bnVsbDsKKyAgICB2YXIgY21kID0gbnVsbDsKKyAgICBpZiAoKHN1Yk1lbnUg
PT0gbnVsbCkpIHsKKyAgICBpZiAocHlqc2xpYl9oYXNhdHRyKGFzSFRNTCwgJ2V4ZWN1dGUnKSkg
eworICAgIHZhciBjbWQgPSBhc0hUTUw7CisgICAgdmFyIGFzSFRNTCA9IGZhbHNlOworICAgIH0K
KyAgICBlbHNlIGlmIChweWpzbGliX2hhc2F0dHIoYXNIVE1MLCAnb25TaG93JykpIHsKKyAgICB2
YXIgc3ViTWVudSA9IGFzSFRNTDsKKyAgICB2YXIgYXNIVE1MID0gZmFsc2U7CisgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmIChweWpzbGliX2hhc2F0dHIoc3ViTWVudSwgJ2V4ZWN1dGUnKSkgewor
ICAgIHZhciBjbWQgPSBzdWJNZW51OworICAgIHZhciBzdWJNZW51ID0gbnVsbDsKKyAgICB9Cisg
ICAgdGhpcy5jb21tYW5kID0gbnVsbDsKKyAgICB0aGlzLnBhcmVudE1lbnUgPSBudWxsOworICAg
IHRoaXMuc3ViTWVudSA9IG51bGw7CisgICAgdGhpcy5zZXRFbGVtZW50KERPTV9jcmVhdGVURCgp
KTsKKyAgICB0aGlzLnNpbmtFdmVudHMoX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLk9O
Q0xJQ0sgfCBfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05NT1VTRU9WRVIgfCBfX3Vp
X0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uT05NT1VTRU9VVCk7CisgICAgdGhpcy5zZXRTZWxl
Y3Rpb25TdHlsZShmYWxzZSk7CisgICAgaWYgKGFzSFRNTCkgeworICAgIHRoaXMuc2V0SFRNTCh0
ZXh0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgdGhpcy5zZXRUZXh0KHRleHQpOworICAgIH0K
KyAgICB0aGlzLnNldFN0eWxlTmFtZSgnZ3d0LU1lbnVJdGVtJyk7CisgICAgaWYgKGNtZCkgewor
ICAgIHRoaXMuc2V0Q29tbWFuZChjbWQpOworICAgIH0KKyAgICBpZiAoc3ViTWVudSkgeworICAg
IHRoaXMuc2V0U3ViTWVudShzdWJNZW51KTsKKyAgICB9CisgICAgfTsKK19fdWlfTWVudUl0ZW0u
cHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIHRl
eHQsIGFzSFRNTCwgc3ViTWVudSApIHsKKyAgICBpZiAodHlwZW9mIHN1Yk1lbnUgPT0gJ3VuZGVm
aW5lZCcpCisgICAgICAgIHN1Yk1lbnU9X19rd2FyZ3Muc3ViTWVudTsKKyAgICB2YXIgX19yID0g
W3RleHQsIGFzSFRNTCwgc3ViTWVudV07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9N
ZW51SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5KF9f
dWlfTWVudUl0ZW0ucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9NZW51SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXy5wYXJzZV9rd2FyZ3MgPSBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2luaXRfXy5wYXJz
ZV9rd2FyZ3M7CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuZ2V0Q29tbWFuZCA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLmNvbW1hbmQ7CisgICAgfTsKKyAgICBfX3VpX01lbnVJ
dGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q29tbWFuZCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gX191aV9NZW51SXRlbS5wcm90b3R5cGUuZ2V0Q29tbWFuZC5jYWxsLmFwcGx5KF9f
dWlfTWVudUl0ZW0ucHJvdG90eXBlLmdldENvbW1hbmQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q29tbWFuZC51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuZ2V0Q29tbWFuZC5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLmdldEhUTUwg
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldElubmVySFRNTCh0aGlzLmdldEVsZW1l
bnQoKSk7CisgICAgfTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0
SFRNTCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9NZW51SXRlbS5wcm90b3R5
cGUuZ2V0SFRNTC5jYWxsLmFwcGx5KF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLmdldEhUTUwsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5
cGUuZ2V0SFRNTC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUl0ZW0ucHJv
dG90eXBlLmdldFBhcmVudE1lbnUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5wYXJl
bnRNZW51OworICAgIH07CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdl
dFBhcmVudE1lbnUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUl0ZW0u
cHJvdG90eXBlLmdldFBhcmVudE1lbnUuY2FsbC5hcHBseShfX3VpX01lbnVJdGVtLnByb3RvdHlw
ZS5nZXRQYXJlbnRNZW51LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9NZW51SXRlbS5w
cm90b3R5cGUuX19jbGFzc19fLmdldFBhcmVudE1lbnUudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLmdldFBhcmVudE1lbnUuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5nZXRTdWJNZW51ID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMuc3ViTWVudTsKKyAgICB9OworICAgIF9fdWlfTWVudUl0
ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTdWJNZW51ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5nZXRTdWJNZW51LmNhbGwuYXBwbHkoX191
aV9NZW51SXRlbS5wcm90b3R5cGUuZ2V0U3ViTWVudSwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTdWJNZW51LnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5nZXRTdWJNZW51Lmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuZ2V0VGV4dCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0SW5uZXJUZXh0KHRoaXMuZ2V0RWxlbWVu
dCgpKTsKKyAgICB9OworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRU
ZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX01lbnVJdGVtLnByb3RvdHlw
ZS5nZXRUZXh0LmNhbGwuYXBwbHkoX191aV9NZW51SXRlbS5wcm90b3R5cGUuZ2V0VGV4dCwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5n
ZXRUZXh0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlw
ZS5nZXRUZXh0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51SXRlbS5wcm90
b3R5cGUuc2V0Q29tbWFuZCA9IGZ1bmN0aW9uKGNtZCkgeworICAgIHRoaXMuY29tbWFuZCA9IGNt
ZDsKKyAgICB9OworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRDb21t
YW5kID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX01lbnVJdGVtLnByb3RvdHlw
ZS5zZXRDb21tYW5kLmNhbGwuYXBwbHkoX191aV9NZW51SXRlbS5wcm90b3R5cGUuc2V0Q29tbWFu
ZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRDb21tYW5kLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVJdGVt
LnByb3RvdHlwZS5zZXRDb21tYW5kLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9N
ZW51SXRlbS5wcm90b3R5cGUuc2V0SFRNTCA9IGZ1bmN0aW9uKGh0bWwpIHsKKyAgICBET01fc2V0
SW5uZXJIVE1MKHRoaXMuZ2V0RWxlbWVudCgpLCBodG1sKTsKKyAgICB9OworICAgIF9fdWlfTWVu
dUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIVE1MID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5zZXRIVE1MLmNhbGwuYXBwbHkoX191aV9N
ZW51SXRlbS5wcm90b3R5cGUuc2V0SFRNTCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
TWVudUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRIVE1MLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5zZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuc2V0U3ViTWVudSA9IGZ1bmN0aW9u
KHN1Yk1lbnUpIHsKKyAgICB0aGlzLnN1Yk1lbnUgPSBzdWJNZW51OworICAgIH07CisgICAgX191
aV9NZW51SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnNldFN1Yk1lbnUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLnNldFN1Yk1lbnUuY2FsbC5h
cHBseShfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5zZXRTdWJNZW51LCBhcmd1bWVudHMpOworICAg
IH07CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnNldFN1Yk1lbnUudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLnNldFN1Yk1l
bnUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5z
ZXRUZXh0ID0gZnVuY3Rpb24odGV4dCkgeworICAgIERPTV9zZXRJbm5lclRleHQodGhpcy5nZXRF
bGVtZW50KCksIHRleHQpOworICAgIH07CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuX19j
bGFzc19fLnNldFRleHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUl0
ZW0ucHJvdG90eXBlLnNldFRleHQuY2FsbC5hcHBseShfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5z
ZXRUZXh0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUu
X19jbGFzc19fLnNldFRleHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUl0
ZW0ucHJvdG90eXBlLnNldFRleHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01l
bnVJdGVtLnByb3RvdHlwZS5zZXRQYXJlbnRNZW51ID0gZnVuY3Rpb24ocGFyZW50TWVudSkgewor
ICAgIHRoaXMucGFyZW50TWVudSA9IHBhcmVudE1lbnU7CisgICAgfTsKKyAgICBfX3VpX01lbnVJ
dGVtLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0UGFyZW50TWVudSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9NZW51SXRlbS5wcm90b3R5cGUuc2V0UGFyZW50TWVudS5jYWxsLmFw
cGx5KF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLnNldFBhcmVudE1lbnUsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0UGFyZW50TWVu
dS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51SXRlbS5wcm90b3R5cGUuc2V0
UGFyZW50TWVudS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUl0ZW0ucHJv
dG90eXBlLnNldFNlbGVjdGlvblN0eWxlID0gZnVuY3Rpb24oc2VsZWN0ZWQpIHsKKyAgICBpZiAo
c2VsZWN0ZWQpIHsKKyAgICB0aGlzLmFkZFN0eWxlTmFtZSgnZ3d0LU1lbnVJdGVtLXNlbGVjdGVk
Jyk7CisgICAgfQorICAgIGVsc2UgeworICAgIHRoaXMucmVtb3ZlU3R5bGVOYW1lKCdnd3QtTWVu
dUl0ZW0tc2VsZWN0ZWQnKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3Rv
dHlwZS5fX2NsYXNzX18uc2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfTWVudUl0ZW0ucHJvdG90eXBlLnNldFNlbGVjdGlvblN0eWxlLmNhbGwuYXBw
bHkoX191aV9NZW51SXRlbS5wcm90b3R5cGUuc2V0U2VsZWN0aW9uU3R5bGUsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX01lbnVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U2VsZWN0
aW9uU3R5bGUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUl0ZW0ucHJvdG90
eXBlLnNldFNlbGVjdGlvblN0eWxlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlv
biBfX3VpX01lbnVCYXIoKSB7Cit9CitmdW5jdGlvbiB1aV9NZW51QmFyKHZlcnRpY2FsKSB7Cisg
ICAgaWYgKHR5cGVvZiB2ZXJ0aWNhbCA9PSAndW5kZWZpbmVkJykgdmVydGljYWw9ZmFsc2U7Cisg
ICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfTWVudUJhcigpOworICAgIGlmKGluc3RhbmNlLl9f
aW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAg
ICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKwordWlfTWVudUJhci5wYXJzZV9rd2FyZ3MgPSBmdW5j
dGlvbiAoIF9fa3dhcmdzLCB2ZXJ0aWNhbCApIHsKKyAgICBpZiAodHlwZW9mIHZlcnRpY2FsID09
ICd1bmRlZmluZWQnKQorICAgICAgICB2ZXJ0aWNhbD1fX2t3YXJncy52ZXJ0aWNhbDsKKyAgICB2
YXIgX19yID0gW3ZlcnRpY2FsXTsKKyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9fdWlf
TWVudUJhcl9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfTWVudUJhci5fX3dhc19pbml0aWFs
aXplZF9fKSByZXR1cm47CisgICAgX191aV9NZW51QmFyLl9fd2FzX2luaXRpYWxpemVkX18gPSB0
cnVlOworICAgIGlmKCFfX3VpX1dpZGdldC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBf
X3VpX1dpZGdldF9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9NZW51QmFyLCBf
X3VpX1dpZGdldCk7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdf
XyA9IHVpX01lbnVCYXI7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1
bmN0aW9uKHZlcnRpY2FsKSB7CisgICAgaWYgKHR5cGVvZiB2ZXJ0aWNhbCA9PSAndW5kZWZpbmVk
JykgdmVydGljYWw9ZmFsc2U7CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5f
X2luaXRfXyh0aGlzKTsKKyAgICB0aGlzLmJvZHkgPSBudWxsOworICAgIHRoaXMuaXRlbXMgPSBu
ZXcgcHlqc2xpYl9MaXN0KFtdKTsKKyAgICB0aGlzLnBhcmVudE1lbnUgPSBudWxsOworICAgIHRo
aXMucG9wdXAgPSBudWxsOworICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKKyAgICB0aGlz
LnNob3duQ2hpbGRNZW51ID0gbnVsbDsKKyAgICB0aGlzLnZlcnRpY2FsID0gZmFsc2U7CisgICAg
dGhpcy5hdXRvT3BlbiA9IGZhbHNlOworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNz
X18uX19pbml0X18odGhpcyk7CisgICAgdmFyIHRhYmxlID0gRE9NX2NyZWF0ZVRhYmxlKCk7Cisg
ICAgdGhpcy5ib2R5ID0gRE9NX2NyZWF0ZVRCb2R5KCk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRh
YmxlLCB0aGlzLmJvZHkpOworICAgIGlmICghKHZlcnRpY2FsKSkgeworICAgIHZhciB0ciA9IERP
TV9jcmVhdGVUUigpOworICAgIERPTV9hcHBlbmRDaGlsZCh0aGlzLmJvZHksIHRyKTsKKyAgICB9
CisgICAgdGhpcy52ZXJ0aWNhbCA9IHZlcnRpY2FsOworICAgIHZhciBvdXRlciA9IERPTV9jcmVh
dGVEaXYoKTsKKyAgICBET01fYXBwZW5kQ2hpbGQob3V0ZXIsIHRhYmxlKTsKKyAgICB0aGlzLnNl
dEVsZW1lbnQob3V0ZXIpOworICAgIHRoaXMuc2V0U3R5bGVOYW1lKCdnd3QtTWVudUJhcicpOwor
ICAgIH07CitfX3VpX01lbnVCYXIucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IGZ1
bmN0aW9uICggX19rd2FyZ3MsIHZlcnRpY2FsICkgeworICAgIGlmICh0eXBlb2YgdmVydGljYWwg
PT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIHZlcnRpY2FsPV9fa3dhcmdzLnZlcnRpY2FsOworICAg
IHZhciBfX3IgPSBbdmVydGljYWxdOworICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fdWlfTWVu
dUJhci5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX01lbnVCYXIucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9N
ZW51QmFyLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
TWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18ucGFy
c2Vfa3dhcmdzID0gX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3M7
CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5hZGRJdGVtID0gZnVuY3Rpb24oaXRlbSwgYXNI
VE1MLCBwb3B1cCkgeworICAgIGlmICh0eXBlb2YgYXNIVE1MID09ICd1bmRlZmluZWQnKSBhc0hU
TUw9bnVsbDsKKyAgICBpZiAodHlwZW9mIHBvcHVwID09ICd1bmRlZmluZWQnKSBwb3B1cD1udWxs
OworICAgIGlmICghKHB5anNsaWJfaGFzYXR0cihpdGVtLCAnc2V0U3ViTWVudScpKSkgeworICAg
IHZhciBpdGVtID0gdWlfTWVudUl0ZW0oaXRlbSwgYXNIVE1MLCBwb3B1cCk7CisgICAgfQorICAg
IGlmICh0aGlzLnZlcnRpY2FsKSB7CisgICAgdmFyIHRyID0gRE9NX2NyZWF0ZVRSKCk7CisgICAg
RE9NX2FwcGVuZENoaWxkKHRoaXMuYm9keSwgdHIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICB2
YXIgdHIgPSBET01fZ2V0Q2hpbGQodGhpcy5ib2R5LCAwKTsKKyAgICB9CisgICAgRE9NX2FwcGVu
ZENoaWxkKHRyLCBpdGVtLmdldEVsZW1lbnQoKSk7CisgICAgaXRlbS5zZXRQYXJlbnRNZW51KHRo
aXMpOworICAgIGl0ZW0uc2V0U2VsZWN0aW9uU3R5bGUoZmFsc2UpOworICAgIHRoaXMuaXRlbXMu
YXBwZW5kKGl0ZW0pOworICAgIHJldHVybiBpdGVtOworICAgIH07CitfX3VpX01lbnVCYXIucHJv
dG90eXBlLmFkZEl0ZW0ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgaXRlbSwg
YXNIVE1MLCBwb3B1cCApIHsKKyAgICBpZiAodHlwZW9mIGFzSFRNTCA9PSAndW5kZWZpbmVkJykK
KyAgICAgICAgYXNIVE1MPV9fa3dhcmdzLmFzSFRNTDsKKyAgICBpZiAodHlwZW9mIHBvcHVwID09
ICd1bmRlZmluZWQnKQorICAgICAgICBwb3B1cD1fX2t3YXJncy5wb3B1cDsKKyAgICB2YXIgX19y
ID0gW2l0ZW0sIGFzSFRNTCwgcG9wdXBdOworICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fdWlf
TWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmFkZEl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfTWVudUJhci5wcm90b3R5cGUuYWRkSXRlbS5jYWxsLmFwcGx5KF9fdWlf
TWVudUJhci5wcm90b3R5cGUuYWRkSXRlbSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
TWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmFkZEl0ZW0udW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuYWRkSXRlbS5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmFkZEl0ZW0ucGFyc2Vf
a3dhcmdzID0gX191aV9NZW51QmFyLnByb3RvdHlwZS5hZGRJdGVtLnBhcnNlX2t3YXJnczsKKyAg
ICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmNsZWFySXRlbXMgPSBmdW5jdGlvbigpIHsKKyAgICB2
YXIgY29udGFpbmVyID0gdGhpcy5nZXRJdGVtQ29udGFpbmVyRWxlbWVudCgpOworICAgIHdoaWxl
ICgoRE9NX2dldENoaWxkQ291bnQoY29udGFpbmVyKSA+IDApKSB7CisgICAgRE9NX3JlbW92ZUNo
aWxkKGNvbnRhaW5lciwgRE9NX2dldENoaWxkKGNvbnRhaW5lciwgMCkpOworICAgIH0KKyAgICB0
aGlzLml0ZW1zID0gbmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAgfTsKKyAgICBfX3VpX01lbnVC
YXIucHJvdG90eXBlLl9fY2xhc3NfXy5jbGVhckl0ZW1zID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX01lbnVCYXIucHJvdG90eXBlLmNsZWFySXRlbXMuY2FsbC5hcHBseShfX3Vp
X01lbnVCYXIucHJvdG90eXBlLmNsZWFySXRlbXMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX01lbnVCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5jbGVhckl0ZW1zLnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmNsZWFySXRlbXMuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmdldEF1dG9PcGVuID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYXV0b09wZW47CisgICAgfTsKKyAgICBfX3Vp
X01lbnVCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRBdXRvT3BlbiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9NZW51QmFyLnByb3RvdHlwZS5nZXRBdXRvT3Blbi5jYWxsLmFw
cGx5KF9fdWlfTWVudUJhci5wcm90b3R5cGUuZ2V0QXV0b09wZW4sIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRBdXRvT3Blbi51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5nZXRBdXRvT3Bl
bi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUub25C
cm93c2VyRXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlw
ZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQodGhpcywgZXZlbnQpOworICAgIHZhciBpdGVtID0g
dGhpcy5maW5kSXRlbShET01fZXZlbnRHZXRUYXJnZXQoZXZlbnQpKTsKKyAgICBpZiAoKGl0ZW0g
PT0gbnVsbCkpIHsKKyAgICByZXR1cm47CisgICAgfQorICAgIHZhciB0eXBlID0gRE9NX2V2ZW50
R2V0VHlwZShldmVudCk7CisgICAgaWYgKCh0eXBlID09ICdjbGljaycpKSB7CisgICAgdGhpcy5k
b0l0ZW1BY3Rpb24oaXRlbSwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdt
b3VzZW92ZXInKSkgeworICAgIHRoaXMuaXRlbU92ZXIoaXRlbSk7CisgICAgfQorICAgIGVsc2Ug
aWYgKCh0eXBlID09ICdtb3VzZW91dCcpKSB7CisgICAgdGhpcy5pdGVtT3ZlcihudWxsKTsKKyAg
ICB9CisgICAgfTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5vbkJyb3dz
ZXJFdmVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9NZW51QmFyLnByb3Rv
dHlwZS5vbkJyb3dzZXJFdmVudC5jYWxsLmFwcGx5KF9fdWlfTWVudUJhci5wcm90b3R5cGUub25C
cm93c2VyRXZlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90
eXBlLl9fY2xhc3NfXy5vbkJyb3dzZXJFdmVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9NZW51QmFyLnByb3RvdHlwZS5vbkJyb3dzZXJFdmVudC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUub25Qb3B1cENsb3NlZCA9IGZ1bmN0aW9u
KHNlbmRlciwgYXV0b0Nsb3NlZCkgeworICAgIGlmIChhdXRvQ2xvc2VkKSB7CisgICAgdGhpcy5j
bG9zZUFsbFBhcmVudHMoKTsKKyAgICB9CisgICAgdGhpcy5vbkhpZGUoKTsKKyAgICB0aGlzLnNo
b3duQ2hpbGRNZW51ID0gbnVsbDsKKyAgICB0aGlzLnBvcHVwID0gbnVsbDsKKyAgICB9OworICAg
IF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLm9uUG9wdXBDbG9zZWQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUJhci5wcm90b3R5cGUub25Qb3B1cENsb3Nl
ZC5jYWxsLmFwcGx5KF9fdWlfTWVudUJhci5wcm90b3R5cGUub25Qb3B1cENsb3NlZCwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLm9uUG9w
dXBDbG9zZWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5
cGUub25Qb3B1cENsb3NlZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJh
ci5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB2YXIgaWR4ID0g
dGhpcy5pdGVtcy5pbmRleChpdGVtKTsKKyAgICBpZiAoKGlkeCA9PSAtMSkpIHsKKyAgICByZXR1
cm47CisgICAgfQorICAgIHZhciBjb250YWluZXIgPSB0aGlzLmdldEl0ZW1Db250YWluZXJFbGVt
ZW50KCk7CisgICAgRE9NX3JlbW92ZUNoaWxkKGNvbnRhaW5lciwgRE9NX2dldENoaWxkKGNvbnRh
aW5lciwgaWR4KSk7CisgICAgdGhpcy5pdGVtcy5fX2RlbGl0ZW1fXyhpZHgpOworICAgIH07Cisg
ICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlSXRlbSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9NZW51QmFyLnByb3RvdHlwZS5yZW1vdmVJdGVtLmNh
bGwuYXBwbHkoX191aV9NZW51QmFyLnByb3RvdHlwZS5yZW1vdmVJdGVtLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlSXRlbS51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5yZW1vdmVJ
dGVtLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5z
ZXRBdXRvT3BlbiA9IGZ1bmN0aW9uKGF1dG9PcGVuKSB7CisgICAgdGhpcy5hdXRvT3BlbiA9IGF1
dG9PcGVuOworICAgIH07CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0
QXV0b09wZW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUJhci5wcm90
b3R5cGUuc2V0QXV0b09wZW4uY2FsbC5hcHBseShfX3VpX01lbnVCYXIucHJvdG90eXBlLnNldEF1
dG9PcGVuLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5f
X2NsYXNzX18uc2V0QXV0b09wZW4udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVu
dUJhci5wcm90b3R5cGUuc2V0QXV0b09wZW4uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX01lbnVCYXIucHJvdG90eXBlLmNsb3NlQWxsUGFyZW50cyA9IGZ1bmN0aW9uKCkgeworICAg
IHZhciBjdXJNZW51ID0gdGhpczsKKyAgICB3aGlsZSAoKGN1ck1lbnUgIT0gbnVsbCkpIHsKKyAg
ICBjdXJNZW51LmNsb3NlKCk7CisgICAgaWYgKChjdXJNZW51LnBhcmVudE1lbnUgPT0gbnVsbCkg
JiYgKGN1ck1lbnUuc2VsZWN0ZWRJdGVtICE9IG51bGwpKSB7CisgICAgY3VyTWVudS5zZWxlY3Rl
ZEl0ZW0uc2V0U2VsZWN0aW9uU3R5bGUoZmFsc2UpOworICAgIGN1ck1lbnUuc2VsZWN0ZWRJdGVt
ID0gbnVsbDsKKyAgICB9CisgICAgdmFyIGN1ck1lbnUgPSBjdXJNZW51LnBhcmVudE1lbnU7Cisg
ICAgfQorICAgIH07CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uY2xvc2VB
bGxQYXJlbnRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX01lbnVCYXIucHJv
dG90eXBlLmNsb3NlQWxsUGFyZW50cy5jYWxsLmFwcGx5KF9fdWlfTWVudUJhci5wcm90b3R5cGUu
Y2xvc2VBbGxQYXJlbnRzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9NZW51QmFyLnBy
b3RvdHlwZS5fX2NsYXNzX18uY2xvc2VBbGxQYXJlbnRzLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmNsb3NlQWxsUGFyZW50cy5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuZG9JdGVtQWN0aW9uID0gZnVu
Y3Rpb24oaXRlbSwgZmlyZUNvbW1hbmQpIHsKKyAgICBpZiAoKHRoaXMuc2hvd25DaGlsZE1lbnUg
IT0gbnVsbCkgJiYgKGl0ZW0uZ2V0U3ViTWVudSgpID09IHRoaXMuc2hvd25DaGlsZE1lbnUpKSB7
CisgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoKHRoaXMuc2hvd25DaGlsZE1lbnUgIT0gbnVs
bCkpIHsKKyAgICB0aGlzLnNob3duQ2hpbGRNZW51Lm9uSGlkZSgpOworICAgIHRoaXMucG9wdXAu
aGlkZSgpOworICAgIH0KKyAgICBpZiAoKGl0ZW0uZ2V0U3ViTWVudSgpID09IG51bGwpKSB7Cisg
ICAgaWYgKGZpcmVDb21tYW5kKSB7CisgICAgdGhpcy5jbG9zZUFsbFBhcmVudHMoKTsKKyAgICB2
YXIgY21kID0gaXRlbS5nZXRDb21tYW5kKCk7CisgICAgaWYgKChjbWQgIT0gbnVsbCkpIHsKKyAg
ICBEZWZlcnJlZENvbW1hbmRfRGVmZXJyZWRDb21tYW5kKCkuYWRkKGNtZCk7CisgICAgfQorICAg
IH0KKyAgICByZXR1cm47CisgICAgfQorICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtKTsKKyAgICB0
aGlzLnBvcHVwID0gdWlfTWVudUJhclBvcHVwUGFuZWwoaXRlbSk7CisgICAgdGhpcy5wb3B1cC5h
ZGRQb3B1cExpc3RlbmVyKHRoaXMpOworICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7CisgICAgdGhp
cy5wb3B1cC5zZXRQb3B1cFBvc2l0aW9uKCAoIGl0ZW0uZ2V0QWJzb2x1dGVMZWZ0KCkgKyBpdGVt
LmdldE9mZnNldFdpZHRoKCkgKSAsIGl0ZW0uZ2V0QWJzb2x1dGVUb3AoKSk7CisgICAgfQorICAg
IGVsc2UgeworICAgIHRoaXMucG9wdXAuc2V0UG9wdXBQb3NpdGlvbihpdGVtLmdldEFic29sdXRl
TGVmdCgpLCAgKCBpdGVtLmdldEFic29sdXRlVG9wKCkgKyBpdGVtLmdldE9mZnNldEhlaWdodCgp
ICkgKTsKKyAgICB9CisgICAgdGhpcy5zaG93bkNoaWxkTWVudSA9IGl0ZW0uZ2V0U3ViTWVudSgp
OworICAgIHZhciBzdWJfbWVudSA9IGl0ZW0uZ2V0U3ViTWVudSgpOworICAgIHN1Yl9tZW51LnBh
cmVudE1lbnUgPSB0aGlzOworICAgIHRoaXMucG9wdXAuc2hvdygpOworICAgIH07CisgICAgX191
aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uZG9JdGVtQWN0aW9uID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX01lbnVCYXIucHJvdG90eXBlLmRvSXRlbUFjdGlvbi5jYWxs
LmFwcGx5KF9fdWlfTWVudUJhci5wcm90b3R5cGUuZG9JdGVtQWN0aW9uLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uZG9JdGVtQWN0aW9u
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmRvSXRl
bUFjdGlvbi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5
cGUub25EZXRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoKHRoaXMucG9wdXAgIT0gbnVsbCkp
IHsKKyAgICB0aGlzLnBvcHVwLmhpZGUoKTsKKyAgICB9CisgICAgX191aV9XaWRnZXQucHJvdG90
eXBlLl9fY2xhc3NfXy5vbkRldGFjaCh0aGlzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhci5w
cm90b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX01lbnVCYXIucHJvdG90eXBlLm9uRGV0YWNoLmNhbGwuYXBwbHkoX191aV9NZW51QmFy
LnByb3RvdHlwZS5vbkRldGFjaCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJh
ci5wcm90b3R5cGUuX19jbGFzc19fLm9uRGV0YWNoLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX01lbnVCYXIucHJvdG90eXBlLm9uRGV0YWNoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5pdGVtT3ZlciA9IGZ1bmN0aW9uKGl0ZW0pIHsK
KyAgICBpZiAoKGl0ZW0gPT0gbnVsbCkpIHsKKyAgICBpZiAoKHRoaXMuc2VsZWN0ZWRJdGVtICE9
IG51bGwpICYmICh0aGlzLnNob3duQ2hpbGRNZW51ID09IHRoaXMuc2VsZWN0ZWRJdGVtLmdldFN1
Yk1lbnUoKSkpIHsKKyAgICByZXR1cm47CisgICAgfQorICAgIH0KKyAgICB0aGlzLnNlbGVjdEl0
ZW0oaXRlbSk7CisgICAgaWYgKChpdGVtICE9IG51bGwpKSB7CisgICAgaWYgKCh0aGlzLnNob3du
Q2hpbGRNZW51ICE9IG51bGwpIHx8ICh0aGlzLnBhcmVudE1lbnUgIT0gbnVsbCkgfHwgdGhpcy5h
dXRvT3BlbikgeworICAgIHRoaXMuZG9JdGVtQWN0aW9uKGl0ZW0sIGZhbHNlKTsKKyAgICB9Cisg
ICAgfQorICAgIH07CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uaXRlbU92
ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUJhci5wcm90b3R5cGUu
aXRlbU92ZXIuY2FsbC5hcHBseShfX3VpX01lbnVCYXIucHJvdG90eXBlLml0ZW1PdmVyLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uaXRl
bU92ZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUu
aXRlbU92ZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90
eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCh0aGlzLnBhcmVudE1lbnUgIT0gbnVs
bCkpIHsKKyAgICB0aGlzLnBhcmVudE1lbnUucG9wdXAuaGlkZSgpOworICAgIH0KKyAgICB9Owor
ICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmNsb3NlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX01lbnVCYXIucHJvdG90eXBlLmNsb3NlLmNhbGwuYXBwbHko
X191aV9NZW51QmFyLnByb3RvdHlwZS5jbG9zZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9f
dWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmNsb3NlLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmNsb3NlLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5maW5kSXRlbSA9IGZ1bmN0aW9uKGhJdGVt
KSB7CisKKyAgICAgICAgdmFyIF9faXRlbSA9IHRoaXMuaXRlbXMuX19pdGVyX18oKTsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFy
IGl0ZW0gPSBfX2l0ZW0ubmV4dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBp
ZiAoRE9NX2lzT3JIYXNDaGlsZChpdGVtLmdldEVsZW1lbnQoKSwgaEl0ZW0pKSB7CisgICAgcmV0
dXJuIGl0ZW07CisgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0
aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIHJldHVybjsK
KyAgICB9OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmZpbmRJdGVtID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX01lbnVCYXIucHJvdG90eXBlLmZpbmRJ
dGVtLmNhbGwuYXBwbHkoX191aV9NZW51QmFyLnByb3RvdHlwZS5maW5kSXRlbSwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmZpbmRJdGVt
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmZpbmRJ
dGVtLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5n
ZXRJdGVtQ29udGFpbmVyRWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLnZlcnRp
Y2FsKSB7CisgICAgcmV0dXJuIHRoaXMuYm9keTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgcmV0
dXJuIERPTV9nZXRDaGlsZCh0aGlzLmJvZHksIDApOworICAgIH0KKyAgICB9OworICAgIF9fdWlf
TWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLmdldEl0ZW1Db250YWluZXJFbGVtZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX01lbnVCYXIucHJvdG90eXBlLmdldEl0ZW1D
b250YWluZXJFbGVtZW50LmNhbGwuYXBwbHkoX191aV9NZW51QmFyLnByb3RvdHlwZS5nZXRJdGVt
Q29udGFpbmVyRWxlbWVudCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhci5w
cm90b3R5cGUuX19jbGFzc19fLmdldEl0ZW1Db250YWluZXJFbGVtZW50LnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLmdldEl0ZW1Db250YWluZXJFbGVt
ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5v
bkhpZGUgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoKHRoaXMuc2hvd25DaGlsZE1lbnUgIT0gbnVs
bCkpIHsKKyAgICB0aGlzLnNob3duQ2hpbGRNZW51Lm9uSGlkZSgpOworICAgIHRoaXMucG9wdXAu
aGlkZSgpOworICAgIH0KKyAgICB9OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFz
c19fLm9uSGlkZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9NZW51QmFyLnBy
b3RvdHlwZS5vbkhpZGUuY2FsbC5hcHBseShfX3VpX01lbnVCYXIucHJvdG90eXBlLm9uSGlkZSwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19f
Lm9uSGlkZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlw
ZS5vbkhpZGUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90
eXBlLm9uU2hvdyA9IGZ1bmN0aW9uKCkgeworICAgIGlmICgocHlqc2xpYl9sZW4odGhpcy5pdGVt
cykgPiAwKSkgeworICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLml0ZW1zLl9fZ2V0aXRlbV9fKDAp
KTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5v
blNob3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUJhci5wcm90b3R5
cGUub25TaG93LmNhbGwuYXBwbHkoX191aV9NZW51QmFyLnByb3RvdHlwZS5vblNob3csIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX01lbnVCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5vblNo
b3cudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUub25T
aG93Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyLnByb3RvdHlwZS5z
ZWxlY3RJdGVtID0gZnVuY3Rpb24oaXRlbSkgeworICAgIGlmICgoaXRlbSA9PSB0aGlzLnNlbGVj
dGVkSXRlbSkpIHsKKyAgICByZXR1cm47CisgICAgfQorICAgIGlmICgodGhpcy5zZWxlY3RlZEl0
ZW0gIT0gbnVsbCkpIHsKKyAgICB0aGlzLnNlbGVjdGVkSXRlbS5zZXRTZWxlY3Rpb25TdHlsZShm
YWxzZSk7CisgICAgfQorICAgIGlmICgoaXRlbSAhPSBudWxsKSkgeworICAgIGl0ZW0uc2V0U2Vs
ZWN0aW9uU3R5bGUodHJ1ZSk7CisgICAgfQorICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsK
KyAgICB9OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLnNlbGVjdEl0ZW0g
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTWVudUJhci5wcm90b3R5cGUuc2Vs
ZWN0SXRlbS5jYWxsLmFwcGx5KF9fdWlfTWVudUJhci5wcm90b3R5cGUuc2VsZWN0SXRlbSwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhci5wcm90b3R5cGUuX19jbGFzc19fLnNl
bGVjdEl0ZW0udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTWVudUJhci5wcm90b3R5
cGUuc2VsZWN0SXRlbS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9N
ZW51QmFyUG9wdXBQYW5lbCgpIHsKK30KK2Z1bmN0aW9uIHVpX01lbnVCYXJQb3B1cFBhbmVsKGl0
ZW0pIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9NZW51QmFyUG9wdXBQYW5lbCgpOwor
ICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5j
ZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191
aV9NZW51QmFyUG9wdXBQYW5lbF9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfTWVudUJhclBv
cHVwUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfTWVudUJhclBv
cHVwUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfUG9wdXBQ
YW5lbC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX1BvcHVwUGFuZWxfaW5pdGlh
bGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfTWVudUJhclBvcHVwUGFuZWwsIF9fdWlfUG9w
dXBQYW5lbCk7CisgICAgX191aV9NZW51QmFyUG9wdXBQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
Ll9fbmV3X18gPSB1aV9NZW51QmFyUG9wdXBQYW5lbDsKKyAgICBfX3VpX01lbnVCYXJQb3B1cFBh
bmVsLnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGlzLml0ZW0g
PSBpdGVtOworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
KHRoaXMsIHRydWUpOworICAgIHRoaXMuc2V0V2lkZ2V0KGl0ZW0uZ2V0U3ViTWVudSgpKTsKKyAg
ICBpdGVtLmdldFN1Yk1lbnUoKS5vblNob3coKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhclBv
cHVwUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9NZW51QmFyUG9wdXBQYW5lbC5wcm90b3R5cGUuX19pbml0X18uY2Fs
bC5hcHBseShfX3VpX01lbnVCYXJQb3B1cFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfTWVudUJhclBvcHVwUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9NZW51QmFyUG9w
dXBQYW5lbC5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX01lbnVCYXJQb3B1cFBhbmVsLnByb3RvdHlwZS5vbkV2ZW50UHJldmlldyA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgdmFyIHR5cGUgPSBET01fZXZlbnRHZXRUeXBlKGV2ZW50KTsKKyAgICBp
ZiAoKHR5cGUgPT0gJ2NsaWNrJykpIHsKKyAgICB2YXIgdGFyZ2V0ID0gRE9NX2V2ZW50R2V0VGFy
Z2V0KGV2ZW50KTsKKyAgICB2YXIgcGFyZW50TWVudUVsZW1lbnQgPSB0aGlzLml0ZW0uZ2V0UGFy
ZW50TWVudSgpLmdldEVsZW1lbnQoKTsKKyAgICBpZiAoRE9NX2lzT3JIYXNDaGlsZChwYXJlbnRN
ZW51RWxlbWVudCwgdGFyZ2V0KSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgfQor
ICAgIHJldHVybiBfX3VpX1BvcHVwUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5vbkV2ZW50UHJl
dmlldyh0aGlzLCBldmVudCk7CisgICAgfTsKKyAgICBfX3VpX01lbnVCYXJQb3B1cFBhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18ub25FdmVudFByZXZpZXcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfTWVudUJhclBvcHVwUGFuZWwucHJvdG90eXBlLm9uRXZlbnRQcmV2aWV3LmNh
bGwuYXBwbHkoX191aV9NZW51QmFyUG9wdXBQYW5lbC5wcm90b3R5cGUub25FdmVudFByZXZpZXcs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX01lbnVCYXJQb3B1cFBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18ub25FdmVudFByZXZpZXcudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfTWVudUJhclBvcHVwUGFuZWwucHJvdG90eXBlLm9uRXZlbnRQcmV2aWV3Lmluc3RhbmNlX21l
dGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX0xpc3RCb3goKSB7Cit9CitmdW5jdGlvbiB1
aV9MaXN0Qm94KCkgeworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX0xpc3RCb3goKTsKKyAg
ICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2Us
IGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlf
TGlzdEJveF9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfTGlzdEJveC5fX3dhc19pbml0aWFs
aXplZF9fKSByZXR1cm47CisgICAgX191aV9MaXN0Qm94Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0
cnVlOworICAgIGlmKCFfX3VpX0ZvY3VzV2lkZ2V0Ll9fd2FzX2luaXRpYWxpemVkX18pCisgICAg
ICAgIF9fdWlfRm9jdXNXaWRnZXRfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlf
TGlzdEJveCwgX191aV9Gb2N1c1dpZGdldCk7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5f
X2NsYXNzX18uX19uZXdfXyA9IHVpX0xpc3RCb3g7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlw
ZS5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY2hhbmdlTGlzdGVuZXJzID0gbmV3
IHB5anNsaWJfTGlzdChbXSk7CisgICAgdGhpcy5JTlNFUlRfQVRfRU5EID0gLTE7CisgICAgX191
aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMsIERPTV9jcmVh
dGVTZWxlY3QoKSk7CisgICAgdGhpcy5zaW5rRXZlbnRzKF9fdWlfRXZlbnQucHJvdG90eXBlLl9f
Y2xhc3NfXy5PTkNIQU5HRSk7CisgICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1MaXN0Qm94Jyk7
CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9MaXN0Qm94LnByb3RvdHlwZS5fX2lu
aXRfXy5jYWxsLmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRf
Xy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5fX2lu
aXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUu
YWRkQ2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMuY2hhbmdl
TGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJv
dG90eXBlLl9fY2xhc3NfXy5hZGRDaGFuZ2VMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gX191aV9MaXN0Qm94LnByb3RvdHlwZS5hZGRDaGFuZ2VMaXN0ZW5lci5jYWxsLmFw
cGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUuYWRkQ2hhbmdlTGlzdGVuZXIsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRDaGFuZ2VM
aXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlw
ZS5hZGRDaGFuZ2VMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlz
dEJveC5wcm90b3R5cGUuYWRkSXRlbSA9IGZ1bmN0aW9uKGl0ZW0sIHZhbHVlKSB7CisgICAgaWYg
KHR5cGVvZiB2YWx1ZSA9PSAndW5kZWZpbmVkJykgdmFsdWU9bnVsbDsKKyAgICB0aGlzLmluc2Vy
dEl0ZW0oaXRlbSwgdmFsdWUsIHRoaXMuSU5TRVJUX0FUX0VORCk7CisgICAgfTsKK19fdWlfTGlz
dEJveC5wcm90b3R5cGUuYWRkSXRlbS5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdz
LCBpdGVtLCB2YWx1ZSApIHsKKyAgICBpZiAodHlwZW9mIHZhbHVlID09ICd1bmRlZmluZWQnKQor
ICAgICAgICB2YWx1ZT1fX2t3YXJncy52YWx1ZTsKKyAgICB2YXIgX19yID0gW2l0ZW0sIHZhbHVl
XTsKKyAgICByZXR1cm4gX19yOworfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xh
c3NfXy5hZGRJdGVtID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0xpc3RCb3gu
cHJvdG90eXBlLmFkZEl0ZW0uY2FsbC5hcHBseShfX3VpX0xpc3RCb3gucHJvdG90eXBlLmFkZEl0
ZW0sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xh
c3NfXy5hZGRJdGVtLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xpc3RCb3gucHJv
dG90eXBlLmFkZEl0ZW0uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xpc3RCb3gu
cHJvdG90eXBlLl9fY2xhc3NfXy5hZGRJdGVtLnBhcnNlX2t3YXJncyA9IF9fdWlfTGlzdEJveC5w
cm90b3R5cGUuYWRkSXRlbS5wYXJzZV9rd2FyZ3M7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlw
ZS5jbGVhciA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBoID0gdGhpcy5nZXRFbGVtZW50KCk7Cisg
ICAgd2hpbGUgKChET01fZ2V0Q2hpbGRDb3VudChoKSA+IDApKSB7CisgICAgRE9NX3JlbW92ZUNo
aWxkKGgsIERPTV9nZXRDaGlsZChoLCAwKSk7CisgICAgfQorICAgIH07CisgICAgX191aV9MaXN0
Qm94LnByb3RvdHlwZS5fX2NsYXNzX18uY2xlYXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuY2xlYXIuY2FsbC5hcHBseShfX3VpX0xpc3RCb3gu
cHJvdG90eXBlLmNsZWFyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9MaXN0Qm94LnBy
b3RvdHlwZS5fX2NsYXNzX18uY2xlYXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
TGlzdEJveC5wcm90b3R5cGUuY2xlYXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0xpc3RCb3gucHJvdG90eXBlLmdldEl0ZW1Db3VudCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biBET01fZ2V0Q2hpbGRDb3VudCh0aGlzLmdldEVsZW1lbnQoKSk7CisgICAgfTsKKyAgICBfX3Vp
X0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRJdGVtQ291bnQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuZ2V0SXRlbUNvdW50LmNhbGwu
YXBwbHkoX191aV9MaXN0Qm94LnByb3RvdHlwZS5nZXRJdGVtQ291bnQsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRJdGVtQ291bnQu
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuZ2V0SXRl
bUNvdW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlw
ZS5nZXRJdGVtVGV4dCA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgdmFyIGNoaWxkID0gRE9NX2dl
dENoaWxkKHRoaXMuZ2V0RWxlbWVudCgpLCBpbmRleCk7CisgICAgcmV0dXJuIERPTV9nZXRJbm5l
clRleHQoY2hpbGQpOworICAgIH07CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5fX2NsYXNz
X18uZ2V0SXRlbVRleHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGlzdEJv
eC5wcm90b3R5cGUuZ2V0SXRlbVRleHQuY2FsbC5hcHBseShfX3VpX0xpc3RCb3gucHJvdG90eXBl
LmdldEl0ZW1UZXh0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9MaXN0Qm94LnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0SXRlbVRleHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfTGlzdEJveC5wcm90b3R5cGUuZ2V0SXRlbVRleHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gRE9NX2dldEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ25hbWUnKTsKKyAgICB9
OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmdldE5hbWUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuZ2V0TmFtZS5jYWxs
LmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUuZ2V0TmFtZSwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmdldE5hbWUudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuZ2V0TmFtZS5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRJ
bmRleCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMu
Z2V0RWxlbWVudCgpLCAnc2VsZWN0ZWRJbmRleCcpOworICAgIH07CisgICAgX191aV9MaXN0Qm94
LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0U2VsZWN0ZWRJbmRleCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9MaXN0Qm94LnByb3RvdHlwZS5nZXRTZWxlY3RlZEluZGV4LmNhbGwu
YXBwbHkoX191aV9MaXN0Qm94LnByb3RvdHlwZS5nZXRTZWxlY3RlZEluZGV4LCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0U2VsZWN0
ZWRJbmRleC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlw
ZS5nZXRTZWxlY3RlZEluZGV4Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0
Qm94LnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgdGhpcy5jaGVj
a0luZGV4KGluZGV4KTsKKyAgICB2YXIgb3B0aW9uID0gRE9NX2dldENoaWxkKHRoaXMuZ2V0RWxl
bWVudCgpLCBpbmRleCk7CisgICAgcmV0dXJuIERPTV9nZXRBdHRyaWJ1dGUob3B0aW9uLCAndmFs
dWUnKTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmdldFZh
bHVlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0xpc3RCb3gucHJvdG90eXBl
LmdldFZhbHVlLmNhbGwuYXBwbHkoX191aV9MaXN0Qm94LnByb3RvdHlwZS5nZXRWYWx1ZSwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmdl
dFZhbHVlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBl
LmdldFZhbHVlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3Rv
dHlwZS5nZXRWaXNpYmxlSXRlbUNvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9n
ZXRJbnRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdzaXplJyk7CisgICAgfTsKKyAgICBf
X3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRWaXNpYmxlSXRlbUNvdW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0xpc3RCb3gucHJvdG90eXBlLmdldFZpc2li
bGVJdGVtQ291bnQuY2FsbC5hcHBseShfX3VpX0xpc3RCb3gucHJvdG90eXBlLmdldFZpc2libGVJ
dGVtQ291bnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBl
Ll9fY2xhc3NfXy5nZXRWaXNpYmxlSXRlbUNvdW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLmdldFZpc2libGVJdGVtQ291bnQuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLmluc2VydEl0ZW0gPSBmdW5j
dGlvbihpdGVtLCB2YWx1ZSwgaW5kZXgpIHsKKyAgICBpZiAodHlwZW9mIGluZGV4ID09ICd1bmRl
ZmluZWQnKSBpbmRleD1udWxsOworICAgIGlmICgoaW5kZXggPT0gbnVsbCkpIHsKKyAgICB2YXIg
aW5kZXggPSB2YWx1ZTsKKyAgICB2YXIgdmFsdWUgPSBudWxsOworICAgIH0KKyAgICBET01faW5z
ZXJ0TGlzdEl0ZW0odGhpcy5nZXRFbGVtZW50KCksIGl0ZW0sIHZhbHVlLCBpbmRleCk7CisgICAg
fTsKK19fdWlfTGlzdEJveC5wcm90b3R5cGUuaW5zZXJ0SXRlbS5wYXJzZV9rd2FyZ3MgPSBmdW5j
dGlvbiAoIF9fa3dhcmdzLCBpdGVtLCB2YWx1ZSwgaW5kZXggKSB7CisgICAgaWYgKHR5cGVvZiBp
bmRleCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgaW5kZXg9X19rd2FyZ3MuaW5kZXg7CisgICAg
dmFyIF9fciA9IFtpdGVtLCB2YWx1ZSwgaW5kZXhdOworICAgIHJldHVybiBfX3I7Cit9OworICAg
IF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmluc2VydEl0ZW0gPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuaW5zZXJ0SXRlbS5jYWxs
LmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUuaW5zZXJ0SXRlbSwgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmluc2VydEl0ZW0udW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuaW5zZXJ0SXRl
bS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19j
bGFzc19fLmluc2VydEl0ZW0ucGFyc2Vfa3dhcmdzID0gX191aV9MaXN0Qm94LnByb3RvdHlwZS5p
bnNlcnRJdGVtLnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLmlzSXRl
bVNlbGVjdGVkID0gZnVuY3Rpb24oaW5kZXgpIHsKKyAgICB0aGlzLmNoZWNrSW5kZXgoaW5kZXgp
OworICAgIHZhciBvcHRpb24gPSBET01fZ2V0Q2hpbGQodGhpcy5nZXRFbGVtZW50KCksIGluZGV4
KTsKKyAgICByZXR1cm4gRE9NX2dldEJvb2xlYW5BdHRyaWJ1dGUob3B0aW9uLCAnc2VsZWN0ZWQn
KTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmlzSXRlbVNl
bGVjdGVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0xpc3RCb3gucHJvdG90
eXBlLmlzSXRlbVNlbGVjdGVkLmNhbGwuYXBwbHkoX191aV9MaXN0Qm94LnByb3RvdHlwZS5pc0l0
ZW1TZWxlY3RlZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5
cGUuX19jbGFzc19fLmlzSXRlbVNlbGVjdGVkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0xpc3RCb3gucHJvdG90eXBlLmlzSXRlbVNlbGVjdGVkLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5pc011bHRpcGxlU2VsZWN0ID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRCb29sZWFuQXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVu
dCgpLCAnbXVsdGlwbGUnKTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19j
bGFzc19fLmlzTXVsdGlwbGVTZWxlY3QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfTGlzdEJveC5wcm90b3R5cGUuaXNNdWx0aXBsZVNlbGVjdC5jYWxsLmFwcGx5KF9fdWlfTGlz
dEJveC5wcm90b3R5cGUuaXNNdWx0aXBsZVNlbGVjdCwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLmlzTXVsdGlwbGVTZWxlY3QudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuaXNNdWx0aXBsZVNl
bGVjdC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUu
b25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmICgoRE9NX2V2ZW50R2V0
VHlwZShldmVudCkgPT0gJ2NoYW5nZScpKSB7CisKKyAgICAgICAgdmFyIF9fbGlzdGVuZXIgPSB0
aGlzLmNoYW5nZUxpc3RlbmVycy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3Rl
bmVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgaWYgKGxpc3RlbmVy
Lm9uQ2hhbmdlKSB7CisgICAgbGlzdGVuZXIub25DaGFuZ2UodGhpcyk7CisgICAgfQorICAgIGVs
c2UgeworICAgIGxpc3RlbmVyKHRoaXMpOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICB9CisgICAgZWxzZSB7CisgICAgX191aV9Gb2N1c1dpZGdldC5wcm90b3R5cGUuX19j
bGFzc19fLm9uQnJvd3NlckV2ZW50KHRoaXMsIGV2ZW50KTsKKyAgICB9CisgICAgfTsKKyAgICBf
X3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5vbkJyb3dzZXJFdmVudCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9MaXN0Qm94LnByb3RvdHlwZS5vbkJyb3dzZXJFdmVu
dC5jYWxsLmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5vbkJy
b3dzZXJFdmVudC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3Rv
dHlwZS5vbkJyb3dzZXJFdmVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlz
dEJveC5wcm90b3R5cGUucmVtb3ZlQ2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikg
eworICAgIHRoaXMuY2hhbmdlTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAgfTsKKyAg
ICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVDaGFuZ2VMaXN0ZW5lciA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9MaXN0Qm94LnByb3RvdHlwZS5yZW1v
dmVDaGFuZ2VMaXN0ZW5lci5jYWxsLmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUucmVtb3Zl
Q2hhbmdlTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJv
dG90eXBlLl9fY2xhc3NfXy5yZW1vdmVDaGFuZ2VMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5yZW1vdmVDaGFuZ2VMaXN0ZW5lci5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUucmVtb3ZlSXRl
bSA9IGZ1bmN0aW9uKGlkeCkgeworICAgIHZhciBjaGlsZCA9IERPTV9nZXRDaGlsZCh0aGlzLmdl
dEVsZW1lbnQoKSwgaWR4KTsKKyAgICBET01fcmVtb3ZlQ2hpbGQodGhpcy5nZXRFbGVtZW50KCks
IGNoaWxkKTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLnJl
bW92ZUl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGlzdEJveC5wcm90
b3R5cGUucmVtb3ZlSXRlbS5jYWxsLmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUucmVtb3Zl
SXRlbSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19j
bGFzc19fLnJlbW92ZUl0ZW0udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJv
eC5wcm90b3R5cGUucmVtb3ZlSXRlbS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
TGlzdEJveC5wcm90b3R5cGUuc2V0SXRlbVNlbGVjdGVkID0gZnVuY3Rpb24oaW5kZXgsIHNlbGVj
dGVkKSB7CisgICAgdGhpcy5jaGVja0luZGV4KGluZGV4KTsKKyAgICB2YXIgb3B0aW9uID0gRE9N
X2dldENoaWxkKHRoaXMuZ2V0RWxlbWVudCgpLCBpbmRleCk7CisgICAgRE9NX3NldEJvb2xlYW5B
dHRyaWJ1dGUob3B0aW9uLCAnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7CisgICAgfTsKKyAgICBfX3Vp
X0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRJdGVtU2VsZWN0ZWQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuc2V0SXRlbVNlbGVjdGVk
LmNhbGwuYXBwbHkoX191aV9MaXN0Qm94LnByb3RvdHlwZS5zZXRJdGVtU2VsZWN0ZWQsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRJ
dGVtU2VsZWN0ZWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5wcm90
b3R5cGUuc2V0SXRlbVNlbGVjdGVkLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9M
aXN0Qm94LnByb3RvdHlwZS5zZXRNdWx0aXBsZVNlbGVjdCA9IGZ1bmN0aW9uKG11bHRpcGxlKSB7
CisgICAgRE9NX3NldEJvb2xlYW5BdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdtdWx0aXBs
ZScsIG11bHRpcGxlKTsKKyAgICB9OworICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFz
c19fLnNldE11bHRpcGxlU2VsZWN0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3Vp
X0xpc3RCb3gucHJvdG90eXBlLnNldE11bHRpcGxlU2VsZWN0LmNhbGwuYXBwbHkoX191aV9MaXN0
Qm94LnByb3RvdHlwZS5zZXRNdWx0aXBsZVNlbGVjdCwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfTGlzdEJveC5wcm90b3R5cGUuX19jbGFzc19fLnNldE11bHRpcGxlU2VsZWN0LnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLnNldE11bHRpcGxl
U2VsZWN0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlw
ZS5zZXROYW1lID0gZnVuY3Rpb24obmFtZSkgeworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5n
ZXRFbGVtZW50KCksICduYW1lJywgbmFtZSk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXROYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX0xpc3RCb3gucHJvdG90eXBlLnNldE5hbWUuY2FsbC5hcHBseShfX3VpX0xpc3RCb3gucHJv
dG90eXBlLnNldE5hbWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXROYW1lLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0xpc3RCb3gucHJvdG90eXBlLnNldE5hbWUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0xpc3RCb3gucHJvdG90eXBlLnNldFNlbGVjdGVkSW5kZXggPSBmdW5jdGlvbihpbmRleCkg
eworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdzZWxlY3RlZElu
ZGV4JywgaW5kZXgpOworICAgIH07CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5fX2NsYXNz
X18uc2V0U2VsZWN0ZWRJbmRleCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9M
aXN0Qm94LnByb3RvdHlwZS5zZXRTZWxlY3RlZEluZGV4LmNhbGwuYXBwbHkoX191aV9MaXN0Qm94
LnByb3RvdHlwZS5zZXRTZWxlY3RlZEluZGV4LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9MaXN0Qm94LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U2VsZWN0ZWRJbmRleC51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5zZXRTZWxlY3RlZEluZGV4
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlwZS5zZWxl
Y3RWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisKKyAgICAgICAgdmFyIF9fbiA9IHB5anNsaWJf
cmFuZ2UodGhpcy5nZXRJdGVtQ291bnQoKSkuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIG4gPSBfX24ubmV4
dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBpZiAoKHRoaXMuZ2V0VmFsdWUo
bikgPT0gdmFsdWUpKSB7CisgICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KG4pOworICAgIHJldHVy
biBuOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cg
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICByZXR1cm47CisgICAg
fTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5zZWxlY3RWYWx1ZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9MaXN0Qm94LnByb3RvdHlwZS5zZWxlY3RW
YWx1ZS5jYWxsLmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUuc2VsZWN0VmFsdWUsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5zZWxl
Y3RWYWx1ZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9MaXN0Qm94LnByb3RvdHlw
ZS5zZWxlY3RWYWx1ZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTGlzdEJveC5w
cm90b3R5cGUuc2V0SXRlbVRleHQgPSBmdW5jdGlvbihpbmRleCwgdGV4dCkgeworICAgIHRoaXMu
Y2hlY2tJbmRleChpbmRleCk7CisgICAgaWYgKCh0ZXh0ID09IG51bGwpKSB7CisgICAgY29uc29s
ZS5lcnJvcignQ2Fubm90IHNldCBhbiBvcHRpb24gdG8gaGF2ZSBudWxsIHRleHQnKTsKKyAgICBy
ZXR1cm47CisgICAgfQorICAgIERPTV9zZXRPcHRpb25UZXh0KHRoaXMuZ2V0RWxlbWVudCgpLCB0
ZXh0LCBpbmRleCk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3Nf
Xy5zZXRJdGVtVGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9MaXN0Qm94
LnByb3RvdHlwZS5zZXRJdGVtVGV4dC5jYWxsLmFwcGx5KF9fdWlfTGlzdEJveC5wcm90b3R5cGUu
c2V0SXRlbVRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRJdGVtVGV4dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9MaXN0Qm94LnByb3RvdHlwZS5zZXRJdGVtVGV4dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfTGlzdEJveC5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbihpbmRleCwgdmFs
dWUpIHsKKyAgICB0aGlzLmNoZWNrSW5kZXgoaW5kZXgpOworICAgIHZhciBvcHRpb24gPSBET01f
Z2V0Q2hpbGQodGhpcy5nZXRFbGVtZW50KCksIGluZGV4KTsKKyAgICBET01fc2V0QXR0cmlidXRl
KG9wdGlvbiwgJ3ZhbHVlJywgdmFsdWUpOworICAgIH07CisgICAgX191aV9MaXN0Qm94LnByb3Rv
dHlwZS5fX2NsYXNzX18uc2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfTGlzdEJveC5wcm90b3R5cGUuc2V0VmFsdWUuY2FsbC5hcHBseShfX3VpX0xpc3RCb3gucHJv
dG90eXBlLnNldFZhbHVlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9MaXN0Qm94LnBy
b3RvdHlwZS5fX2NsYXNzX18uc2V0VmFsdWUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfTGlzdEJveC5wcm90b3R5cGUuc2V0VmFsdWUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLnNldFZpc2libGVJdGVtQ291bnQgPSBmdW5jdGlvbih2
aXNpYmxlSXRlbXMpIHsKKyAgICBET01fc2V0SW50QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgp
LCAnc2l6ZScsIHZpc2libGVJdGVtcyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRWaXNpYmxlSXRlbUNvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX0xpc3RCb3gucHJvdG90eXBlLnNldFZpc2libGVJdGVtQ291bnQuY2FsbC5h
cHBseShfX3VpX0xpc3RCb3gucHJvdG90eXBlLnNldFZpc2libGVJdGVtQ291bnQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRWaXNp
YmxlSXRlbUNvdW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xpc3RCb3gucHJv
dG90eXBlLnNldFZpc2libGVJdGVtQ291bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0xpc3RCb3gucHJvdG90eXBlLmNoZWNrSW5kZXggPSBmdW5jdGlvbihpbmRleCkgeworICAg
IHZhciBlbGVtID0gdGhpcy5nZXRFbGVtZW50KCk7CisgICAgaWYgKChpbmRleCA8IDApIHx8IChp
bmRleCA+PSBET01fZ2V0Q2hpbGRDb3VudChlbGVtKSkpIHsKKyAgICB9CisgICAgfTsKKyAgICBf
X3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5jaGVja0luZGV4ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0xpc3RCb3gucHJvdG90eXBlLmNoZWNrSW5kZXguY2FsbC5h
cHBseShfX3VpX0xpc3RCb3gucHJvdG90eXBlLmNoZWNrSW5kZXgsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5jaGVja0luZGV4LnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0xpc3RCb3gucHJvdG90eXBlLmNoZWNrSW5kZXgu
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfRGlhbG9nQm94KCkgewor
fQorZnVuY3Rpb24gdWlfRGlhbG9nQm94KGF1dG9IaWRlKSB7CisgICAgaWYgKHR5cGVvZiBhdXRv
SGlkZSA9PSAndW5kZWZpbmVkJykgYXV0b0hpZGU9bnVsbDsKKyAgICB2YXIgaW5zdGFuY2UgPSBu
ZXcgX191aV9EaWFsb2dCb3goKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2Uu
X19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQorCisKK3VpX0RpYWxvZ0JveC5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdz
LCBhdXRvSGlkZSApIHsKKyAgICBpZiAodHlwZW9mIGF1dG9IaWRlID09ICd1bmRlZmluZWQnKQor
ICAgICAgICBhdXRvSGlkZT1fX2t3YXJncy5hdXRvSGlkZTsKKyAgICB2YXIgX19yID0gW2F1dG9I
aWRlXTsKKyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9fdWlfRGlhbG9nQm94X2luaXRp
YWxpemUoKSB7CisgICAgaWYoX191aV9EaWFsb2dCb3guX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0
dXJuOworICAgIF9fdWlfRGlhbG9nQm94Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAg
IGlmKCFfX3VpX1BvcHVwUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAgX191aV9Q
b3B1cFBhbmVsX2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0RpYWxvZ0JveCwg
X191aV9Qb3B1cFBhbmVsKTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUuX19jbGFzc19f
Ll9fbmV3X18gPSB1aV9EaWFsb2dCb3g7CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBlLl9f
aW5pdF9fID0gZnVuY3Rpb24oYXV0b0hpZGUpIHsKKyAgICBpZiAodHlwZW9mIGF1dG9IaWRlID09
ICd1bmRlZmluZWQnKSBhdXRvSGlkZT1udWxsOworICAgIF9fdWlfUG9wdXBQYW5lbC5wcm90b3R5
cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMsIGF1dG9IaWRlKTsKKyAgICB0aGlzLmNhcHRpb24g
PSB1aV9IVE1MKCk7CisgICAgdGhpcy5jaGlsZCA9IG51bGw7CisgICAgdGhpcy5kcmFnZ2luZyA9
IGZhbHNlOworICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IDA7CisgICAgdGhpcy5kcmFnU3RhcnRZID0g
MDsKKyAgICB0aGlzLnBhbmVsID0gdWlfRmxleFRhYmxlKCk7CisgICAgdGhpcy5wYW5lbC5zZXRX
aWRnZXQoMCwgMCwgdGhpcy5jYXB0aW9uKTsKKyAgICB0aGlzLnBhbmVsLnNldEhlaWdodCgnMTAw
JScpOworICAgIHRoaXMucGFuZWwuc2V0Qm9yZGVyV2lkdGgoMCk7CisgICAgdGhpcy5wYW5lbC5z
ZXRDZWxsUGFkZGluZygwKTsKKyAgICB0aGlzLnBhbmVsLnNldENlbGxTcGFjaW5nKDApOworICAg
IHRoaXMucGFuZWwuZ2V0Q2VsbEZvcm1hdHRlcigpLnNldEhlaWdodCgxLCAwLCAnMTAwJScpOwor
ICAgIHRoaXMucGFuZWwuZ2V0Q2VsbEZvcm1hdHRlcigpLnNldFdpZHRoKDEsIDAsICcxMDAlJyk7
CisgICAgdGhpcy5wYW5lbC5nZXRDZWxsRm9ybWF0dGVyKCkuc2V0QWxpZ25tZW50KDEsIDAsIF9f
dWlfSGFzSG9yaXpvbnRhbEFsaWdubWVudC5wcm90b3R5cGUuX19jbGFzc19fLkFMSUdOX0NFTlRF
UiwgX191aV9IYXNWZXJ0aWNhbEFsaWdubWVudC5wcm90b3R5cGUuX19jbGFzc19fLkFMSUdOX01J
RERMRSk7CisgICAgX191aV9Qb3B1cFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0V2lkZ2V0
KHRoaXMsIHRoaXMucGFuZWwpOworICAgIHRoaXMuc2V0U3R5bGVOYW1lKCdnd3QtRGlhbG9nQm94
Jyk7CisgICAgdGhpcy5jYXB0aW9uLnNldFN0eWxlTmFtZSgnQ2FwdGlvbicpOworICAgIHRoaXMu
Y2FwdGlvbi5hZGRNb3VzZUxpc3RlbmVyKHRoaXMpOworICAgIH07CitfX3VpX0RpYWxvZ0JveC5w
cm90b3R5cGUuX19pbml0X18ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgYXV0
b0hpZGUgKSB7CisgICAgaWYgKHR5cGVvZiBhdXRvSGlkZSA9PSAndW5kZWZpbmVkJykKKyAgICAg
ICAgYXV0b0hpZGU9X19rd2FyZ3MuYXV0b0hpZGU7CisgICAgdmFyIF9fciA9IFthdXRvSGlkZV07
CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBlLl9fY2xh
c3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9EaWFsb2dC
b3gucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9EaWFsb2dCb3gucHJvdG90eXBl
Ll9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90
eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9E
aWFsb2dCb3gucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9EaWFsb2dCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy5wYXJzZV9rd2FyZ3Mg
PSBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUuX19pbml0X18ucGFyc2Vfa3dhcmdzOworICAgIF9f
dWlfRGlhbG9nQm94LnByb3RvdHlwZS5nZXRIVE1MID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IHRoaXMuY2FwdGlvbi5nZXRIVE1MKCk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90
b3R5cGUuX19jbGFzc19fLmdldEhUTUwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfRGlhbG9nQm94LnByb3RvdHlwZS5nZXRIVE1MLmNhbGwuYXBwbHkoX191aV9EaWFsb2dCb3gu
cHJvdG90eXBlLmdldEhUTUwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0Jv
eC5wcm90b3R5cGUuX19jbGFzc19fLmdldEhUTUwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5nZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gdGhpcy5jYXB0aW9uLmdldFRleHQoKTsKKyAgICB9OworICAgIF9fdWlfRGlhbG9n
Qm94LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9EaWFsb2dCb3gucHJvdG90eXBlLmdldFRleHQuY2FsbC5hcHBseShfX3VpX0Rp
YWxvZ0JveC5wcm90b3R5cGUuZ2V0VGV4dCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
RGlhbG9nQm94LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGV4dC51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBlLmdldFRleHQuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5j
dGlvbihzZW5kZXIsIHgsIHkpIHsKKyAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTsKKyAgICBET01f
c2V0Q2FwdHVyZSh0aGlzLmNhcHRpb24uZ2V0RWxlbWVudCgpKTsKKyAgICB0aGlzLmRyYWdTdGFy
dFggPSB4OworICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxv
Z0JveC5wcm90b3R5cGUuX19jbGFzc19fLm9uTW91c2VEb3duID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUub25Nb3VzZURvd24uY2FsbC5hcHBs
eShfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUub25Nb3VzZURvd24sIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUuX19jbGFzc19fLm9uTW91c2VEb3duLnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUub25Nb3Vz
ZURvd24uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5
cGUub25Nb3VzZUVudGVyID0gZnVuY3Rpb24oc2VuZGVyKSB7CisgICAgfTsKKyAgICBfX3VpX0Rp
YWxvZ0JveC5wcm90b3R5cGUuX19jbGFzc19fLm9uTW91c2VFbnRlciA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9EaWFsb2dCb3gucHJvdG90eXBlLm9uTW91c2VFbnRlci5jYWxs
LmFwcGx5KF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5vbk1vdXNlRW50ZXIsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUuX19jbGFzc19fLm9uTW91c2VF
bnRlci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBl
Lm9uTW91c2VFbnRlci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRGlhbG9nQm94
LnByb3RvdHlwZS5vbk1vdXNlTGVhdmUgPSBmdW5jdGlvbihzZW5kZXIpIHsKKyAgICB9OworICAg
IF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5fX2NsYXNzX18ub25Nb3VzZUxlYXZlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUub25Nb3VzZUxl
YXZlLmNhbGwuYXBwbHkoX191aV9EaWFsb2dCb3gucHJvdG90eXBlLm9uTW91c2VMZWF2ZSwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5fX2NsYXNzX18u
b25Nb3VzZUxlYXZlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RpYWxvZ0JveC5w
cm90b3R5cGUub25Nb3VzZUxlYXZlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9E
aWFsb2dCb3gucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24oc2VuZGVyLCB4LCB5KSB7
CisgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHsKKyAgICB2YXIgYWJzWCA9ICAoIHggKyB0aGlzLmdl
dEFic29sdXRlTGVmdCgpICkgOworICAgIHZhciBhYnNZID0gICggeSArIHRoaXMuZ2V0QWJzb2x1
dGVUb3AoKSApIDsKKyAgICB0aGlzLnNldFBvcHVwUG9zaXRpb24oICggYWJzWCAtIHRoaXMuZHJh
Z1N0YXJ0WCApICwgICggYWJzWSAtIHRoaXMuZHJhZ1N0YXJ0WSApICk7CisgICAgfQorICAgIH07
CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5vbk1vdXNlTW92ZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9EaWFsb2dCb3gucHJvdG90eXBlLm9uTW91
c2VNb3ZlLmNhbGwuYXBwbHkoX191aV9EaWFsb2dCb3gucHJvdG90eXBlLm9uTW91c2VNb3ZlLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBlLl9fY2xhc3Nf
Xy5vbk1vdXNlTW92ZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EaWFsb2dCb3gu
cHJvdG90eXBlLm9uTW91c2VNb3ZlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9E
aWFsb2dCb3gucHJvdG90eXBlLm9uTW91c2VVcCA9IGZ1bmN0aW9uKHNlbmRlciwgeCwgeSkgewor
ICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTsKKyAgICBET01fcmVsZWFzZUNhcHR1cmUodGhpcy5j
YXB0aW9uLmdldEVsZW1lbnQoKSk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5
cGUuX19jbGFzc19fLm9uTW91c2VVcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9EaWFsb2dCb3gucHJvdG90eXBlLm9uTW91c2VVcC5jYWxsLmFwcGx5KF9fdWlfRGlhbG9nQm94
LnByb3RvdHlwZS5vbk1vdXNlVXAsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxv
Z0JveC5wcm90b3R5cGUuX19jbGFzc19fLm9uTW91c2VVcC51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9EaWFsb2dCb3gucHJvdG90eXBlLm9uTW91c2VVcC5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih3
aWRnZXQpIHsKKyAgICBpZiAoKHRoaXMuY2hpbGQgIT0gd2lkZ2V0KSkgeworICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgdGhpcy5wYW5lbC5yZW1vdmUod2lkZ2V0KTsKKyAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5fX2NsYXNzX18ucmVt
b3ZlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0RpYWxvZ0JveC5wcm90b3R5
cGUucmVtb3ZlLmNhbGwuYXBwbHkoX191aV9EaWFsb2dCb3gucHJvdG90eXBlLnJlbW92ZSwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5fX2NsYXNzX18u
cmVtb3ZlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5
cGUucmVtb3ZlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EaWFsb2dCb3gucHJv
dG90eXBlLnNldEhUTUwgPSBmdW5jdGlvbihodG1sKSB7CisgICAgdGhpcy5jYXB0aW9uLnNldEhU
TUwoaHRtbCk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUuX19jbGFzc19f
LnNldEhUTUwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRGlhbG9nQm94LnBy
b3RvdHlwZS5zZXRIVE1MLmNhbGwuYXBwbHkoX191aV9EaWFsb2dCb3gucHJvdG90eXBlLnNldEhU
TUwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUuX19j
bGFzc19fLnNldEhUTUwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRGlhbG9nQm94
LnByb3RvdHlwZS5zZXRIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EaWFs
b2dCb3gucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KSB7CisgICAgdGhpcy5jYXB0
aW9uLnNldFRleHQodGV4dCk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUu
X19jbGFzc19fLnNldFRleHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRGlh
bG9nQm94LnByb3RvdHlwZS5zZXRUZXh0LmNhbGwuYXBwbHkoX191aV9EaWFsb2dCb3gucHJvdG90
eXBlLnNldFRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90
b3R5cGUuX19jbGFzc19fLnNldFRleHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
RGlhbG9nQm94LnByb3RvdHlwZS5zZXRUZXh0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9EaWFsb2dCb3gucHJvdG90eXBlLnNldFdpZGdldCA9IGZ1bmN0aW9uKHdpZGdldCkgewor
ICAgIGlmICgodGhpcy5jaGlsZCAhPSBudWxsKSkgeworICAgIHRoaXMucGFuZWwucmVtb3ZlKHRo
aXMuY2hpbGQpOworICAgIH0KKyAgICBpZiAoKHdpZGdldCAhPSBudWxsKSkgeworICAgIHRoaXMu
cGFuZWwuc2V0V2lkZ2V0KDEsIDAsIHdpZGdldCk7CisgICAgfQorICAgIHRoaXMuY2hpbGQgPSB3
aWRnZXQ7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUuX19jbGFzc19fLnNl
dFdpZGdldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9EaWFsb2dCb3gucHJv
dG90eXBlLnNldFdpZGdldC5jYWxsLmFwcGx5KF9fdWlfRGlhbG9nQm94LnByb3RvdHlwZS5zZXRX
aWRnZXQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0RpYWxvZ0JveC5wcm90b3R5cGUu
X19jbGFzc19fLnNldFdpZGdldC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9EaWFs
b2dCb3gucHJvdG90eXBlLnNldFdpZGdldC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVu
Y3Rpb24gX191aV9GcmFtZSgpIHsKK30KK2Z1bmN0aW9uIHVpX0ZyYW1lKHVybCkgeworICAgIGlm
ICh0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnKSB1cmw9Jyc7CisgICAgdmFyIGluc3RhbmNlID0g
bmV3IF9fdWlfRnJhbWUoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19p
bml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOwor
fQorCisKK3VpX0ZyYW1lLnBhcnNlX2t3YXJncyA9IGZ1bmN0aW9uICggX19rd2FyZ3MsIHVybCAp
IHsKKyAgICBpZiAodHlwZW9mIHVybCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgdXJsPV9fa3dh
cmdzLnVybDsKKyAgICB2YXIgX19yID0gW3VybF07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5j
dGlvbiBfX3VpX0ZyYW1lX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9GcmFtZS5fX3dhc19p
bml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9GcmFtZS5fX3dhc19pbml0aWFsaXplZF9f
ID0gdHJ1ZTsKKyAgICBpZighX191aV9XaWRnZXQuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAg
ICAgX191aV9XaWRnZXRfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfRnJhbWUs
IF9fdWlfV2lkZ2V0KTsKKyAgICBfX3VpX0ZyYW1lLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdf
XyA9IHVpX0ZyYW1lOworICAgIF9fdWlfRnJhbWUucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rp
b24odXJsKSB7CisgICAgaWYgKHR5cGVvZiB1cmwgPT0gJ3VuZGVmaW5lZCcpIHVybD0nJzsKKyAg
ICBfX3VpX1dpZGdldC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMpOworICAgIHRo
aXMuc2V0RWxlbWVudChET01fY3JlYXRlSUZyYW1lKCkpOworICAgIGlmICh1cmwpIHsKKyAgICB0
aGlzLnNldFVybCh1cmwpOworICAgIH0KKyAgICB9OworX191aV9GcmFtZS5wcm90b3R5cGUuX19p
bml0X18ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgdXJsICkgeworICAgIGlm
ICh0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnKQorICAgICAgICB1cmw9X19rd2FyZ3MudXJsOwor
ICAgIHZhciBfX3IgPSBbdXJsXTsKKyAgICByZXR1cm4gX19yOworfTsKKyAgICBfX3VpX0ZyYW1l
LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfRnJhbWUucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9GcmFtZS5w
cm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZyYW1lLnBy
b3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfRnJhbWUucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9GcmFtZS5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IF9f
dWlfRnJhbWUucHJvdG90eXBlLl9faW5pdF9fLnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX0ZyYW1l
LnByb3RvdHlwZS5nZXRVcmwgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldEF0dHJp
YnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ3NyYycpOworICAgIH07CisgICAgX191aV9GcmFtZS5w
cm90b3R5cGUuX19jbGFzc19fLmdldFVybCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9GcmFtZS5wcm90b3R5cGUuZ2V0VXJsLmNhbGwuYXBwbHkoX191aV9GcmFtZS5wcm90b3R5
cGUuZ2V0VXJsLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9GcmFtZS5wcm90b3R5cGUu
X19jbGFzc19fLmdldFVybC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GcmFtZS5w
cm90b3R5cGUuZ2V0VXJsLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GcmFtZS5w
cm90b3R5cGUuc2V0VXJsID0gZnVuY3Rpb24odXJsKSB7CisgICAgcmV0dXJuIERPTV9zZXRBdHRy
aWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdzcmMnLCB1cmwpOworICAgIH07CisgICAgX191aV9G
cmFtZS5wcm90b3R5cGUuX19jbGFzc19fLnNldFVybCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9GcmFtZS5wcm90b3R5cGUuc2V0VXJsLmNhbGwuYXBwbHkoX191aV9GcmFtZS5w
cm90b3R5cGUuc2V0VXJsLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9GcmFtZS5wcm90
b3R5cGUuX19jbGFzc19fLnNldFVybC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9G
cmFtZS5wcm90b3R5cGUuc2V0VXJsLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlv
biBfX3VpX1RhYkJhcigpIHsKK30KK2Z1bmN0aW9uIHVpX1RhYkJhcigpIHsKKyAgICB2YXIgaW5z
dGFuY2UgPSBuZXcgX191aV9UYWJCYXIoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5z
dGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGlu
c3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfVGFiQmFyX2luaXRpYWxpemUoKSB7CisgICAg
aWYoX191aV9UYWJCYXIuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9fdWlfVGFi
QmFyLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX0NvbXBvc2l0ZS5f
X3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX0NvbXBvc2l0ZV9pbml0aWFsaXplKCk7
CisgICAgcHlqc19leHRlbmQoX191aV9UYWJCYXIsIF9fdWlfQ29tcG9zaXRlKTsKKyAgICBfX3Vp
X1RhYkJhci5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9UYWJCYXI7CisgICAgX191
aV9UYWJCYXIucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgX191aV9Db21w
b3NpdGUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlzKTsKKyAgICB0aGlzLnBhbmVs
ID0gdWlfSG9yaXpvbnRhbFBhbmVsKCk7CisgICAgdGhpcy5zZWxlY3RlZFRhYiA9IG51bGw7Cisg
ICAgdGhpcy50YWJMaXN0ZW5lcnMgPSBuZXcgcHlqc2xpYl9MaXN0KFtdKTsKKyAgICB0aGlzLmlu
aXRXaWRnZXQodGhpcy5wYW5lbCk7CisgICAgdGhpcy5zaW5rRXZlbnRzKF9fdWlfRXZlbnQucHJv
dG90eXBlLl9fY2xhc3NfXy5PTkNMSUNLKTsKKyAgICB0aGlzLnNldFN0eWxlTmFtZSgnZ3d0LVRh
YkJhcicpOworICAgIHRoaXMucGFuZWwuc2V0VmVydGljYWxBbGlnbm1lbnQoX191aV9IYXNBbGln
bm1lbnQucHJvdG90eXBlLl9fY2xhc3NfXy5BTElHTl9CT1RUT00pOworICAgIHZhciBmaXJzdCA9
IHVpX0hUTUwoJyZuYnNwOycsIHRydWUpOworICAgIHZhciByZXN0ID0gdWlfSFRNTCgnJm5ic3A7
JywgdHJ1ZSk7CisgICAgZmlyc3Quc2V0U3R5bGVOYW1lKCdnd3QtVGFiQmFyRmlyc3QnKTsKKyAg
ICByZXN0LnNldFN0eWxlTmFtZSgnZ3d0LVRhYkJhclJlc3QnKTsKKyAgICBmaXJzdC5zZXRIZWln
aHQoJzEwMCUnKTsKKyAgICByZXN0LnNldEhlaWdodCgnMTAwJScpOworICAgIHRoaXMucGFuZWwu
YWRkKGZpcnN0KTsKKyAgICB0aGlzLnBhbmVsLmFkZChyZXN0KTsKKyAgICBmaXJzdC5zZXRIZWln
aHQoJzEwMCUnKTsKKyAgICB0aGlzLnBhbmVsLnNldENlbGxIZWlnaHQoZmlyc3QsICcxMDAlJyk7
CisgICAgdGhpcy5wYW5lbC5zZXRDZWxsV2lkdGgocmVzdCwgJzEwMCUnKTsKKyAgICB9OworICAg
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5
KF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5hZGRUYWIgPSBmdW5jdGlvbih0
ZXh0LCBhc0hUTUwpIHsKKyAgICBpZiAodHlwZW9mIGFzSFRNTCA9PSAndW5kZWZpbmVkJykgYXNI
VE1MPWZhbHNlOworICAgIHRoaXMuaW5zZXJ0VGFiKHRleHQsIGFzSFRNTCwgdGhpcy5nZXRUYWJD
b3VudCgpKTsKKyAgICB9OworX191aV9UYWJCYXIucHJvdG90eXBlLmFkZFRhYi5wYXJzZV9rd2Fy
Z3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCB0ZXh0LCBhc0hUTUwgKSB7CisgICAgaWYgKHR5cGVv
ZiBhc0hUTUwgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGFzSFRNTD1fX2t3YXJncy5hc0hUTUw7
CisgICAgdmFyIF9fciA9IFt0ZXh0LCBhc0hUTUxdOworICAgIHJldHVybiBfX3I7Cit9OworICAg
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkVGFiID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBfX3VpX1RhYkJhci5wcm90b3R5cGUuYWRkVGFiLmNhbGwuYXBwbHkoX191
aV9UYWJCYXIucHJvdG90eXBlLmFkZFRhYiwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
VGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkVGFiLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUuYWRkVGFiLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9UYWJCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRUYWIucGFyc2Vfa3dhcmdz
ID0gX191aV9UYWJCYXIucHJvdG90eXBlLmFkZFRhYi5wYXJzZV9rd2FyZ3M7CisgICAgX191aV9U
YWJCYXIucHJvdG90eXBlLmFkZFRhYkxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAg
ICB0aGlzLnRhYkxpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpOworICAgIH07CisgICAgX191aV9U
YWJCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRUYWJMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9UYWJCYXIucHJvdG90eXBlLmFkZFRhYkxpc3RlbmVyLmNhbGwu
YXBwbHkoX191aV9UYWJCYXIucHJvdG90eXBlLmFkZFRhYkxpc3RlbmVyLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9UYWJCYXIucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRUYWJMaXN0ZW5l
ci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJCYXIucHJvdG90eXBlLmFkZFRh
Ykxpc3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJCYXIucHJvdG90
eXBlLmdldFNlbGVjdGVkVGFiID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCh0aGlzLnNlbGVjdGVk
VGFiID09IG51bGwpKSB7CisgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gICggdGhp
cy5wYW5lbC5nZXRXaWRnZXRJbmRleCh0aGlzLnNlbGVjdGVkVGFiKSAtIDEgKSA7CisgICAgfTsK
KyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUuX19jbGFzc19fLmdldFNlbGVjdGVkVGFiID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RhYkJhci5wcm90b3R5cGUuZ2V0U2VsZWN0
ZWRUYWIuY2FsbC5hcHBseShfX3VpX1RhYkJhci5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRUYWIsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUuX19jbGFzc19fLmdl
dFNlbGVjdGVkVGFiLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYkJhci5wcm90
b3R5cGUuZ2V0U2VsZWN0ZWRUYWIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Rh
YkJhci5wcm90b3R5cGUuZ2V0VGFiQ291bnQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gICgg
dGhpcy5wYW5lbC5nZXRXaWRnZXRDb3VudCgpIC0gMiApIDsKKyAgICB9OworICAgIF9fdWlfVGFi
QmFyLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGFiQ291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5nZXRUYWJDb3VudC5jYWxsLmFwcGx5KF9f
dWlfVGFiQmFyLnByb3RvdHlwZS5nZXRUYWJDb3VudCwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGFiQ291bnQudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5nZXRUYWJDb3VudC5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5nZXRUYWJIVE1MID0g
ZnVuY3Rpb24oaW5kZXgpIHsKKyAgICBpZiAoKGluZGV4ID49IHRoaXMuZ2V0VGFiQ291bnQoKSkp
IHsKKyAgICByZXR1cm47CisgICAgfQorICAgIHZhciB3aWRnZXQgPSB0aGlzLnBhbmVsLmdldFdp
ZGdldCggKCBpbmRleCArIDEgKSApOworICAgIGlmICh3aWRnZXQuZ2V0SFRNTCkgeworICAgIHJl
dHVybiB3aWRnZXQuZ2V0SFRNTCgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICByZXR1cm4gd2lk
Z2V0LmdldFRleHQoKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUu
X19jbGFzc19fLmdldFRhYkhUTUwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
VGFiQmFyLnByb3RvdHlwZS5nZXRUYWJIVE1MLmNhbGwuYXBwbHkoX191aV9UYWJCYXIucHJvdG90
eXBlLmdldFRhYkhUTUwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RhYkJhci5wcm90
b3R5cGUuX19jbGFzc19fLmdldFRhYkhUTUwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVGFiQmFyLnByb3RvdHlwZS5nZXRUYWJIVE1MLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UYWJCYXIucHJvdG90eXBlLmluc2VydFRhYiA9IGZ1bmN0aW9uKHRleHQsIGFzSFRN
TCwgYmVmb3JlSW5kZXgpIHsKKyAgICBpZiAodHlwZW9mIGJlZm9yZUluZGV4ID09ICd1bmRlZmlu
ZWQnKSBiZWZvcmVJbmRleD1udWxsOworICAgIGlmICgoYmVmb3JlSW5kZXggPT0gbnVsbCkpIHsK
KyAgICB2YXIgYmVmb3JlSW5kZXggPSBhc0hUTUw7CisgICAgdmFyIGFzSFRNTCA9IGZhbHNlOwor
ICAgIH0KKyAgICBpZiAoKGJlZm9yZUluZGV4IDwgMCkgfHwgKGJlZm9yZUluZGV4ID4gdGhpcy5n
ZXRUYWJDb3VudCgpKSkgeworICAgIH0KKyAgICBpZiAoYXNIVE1MKSB7CisgICAgdmFyIGl0ZW0g
PSB1aV9IVE1MKHRleHQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICB2YXIgaXRlbSA9IHVpX0xh
YmVsKHRleHQpOworICAgIH0KKyAgICBpdGVtLnNldFdvcmRXcmFwKGZhbHNlKTsKKyAgICBpdGVt
LmFkZENsaWNrTGlzdGVuZXIodGhpcyk7CisgICAgaXRlbS5zZXRTdHlsZU5hbWUoJ2d3dC1UYWJC
YXJJdGVtJyk7CisgICAgdGhpcy5wYW5lbC5pbnNlcnQoaXRlbSwgICggYmVmb3JlSW5kZXggKyAx
ICkgKTsKKyAgICB9OworX191aV9UYWJCYXIucHJvdG90eXBlLmluc2VydFRhYi5wYXJzZV9rd2Fy
Z3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCB0ZXh0LCBhc0hUTUwsIGJlZm9yZUluZGV4ICkgewor
ICAgIGlmICh0eXBlb2YgYmVmb3JlSW5kZXggPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGJlZm9y
ZUluZGV4PV9fa3dhcmdzLmJlZm9yZUluZGV4OworICAgIHZhciBfX3IgPSBbdGV4dCwgYXNIVE1M
LCBiZWZvcmVJbmRleF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9UYWJCYXIucHJv
dG90eXBlLl9fY2xhc3NfXy5pbnNlcnRUYWIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5pbnNlcnRUYWIuY2FsbC5hcHBseShfX3VpX1RhYkJhci5w
cm90b3R5cGUuaW5zZXJ0VGFiLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UYWJCYXIu
cHJvdG90eXBlLl9fY2xhc3NfXy5pbnNlcnRUYWIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5pbnNlcnRUYWIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUuX19jbGFzc19fLmluc2VydFRhYi5wYXJzZV9rd2Fy
Z3MgPSBfX3VpX1RhYkJhci5wcm90b3R5cGUuaW5zZXJ0VGFiLnBhcnNlX2t3YXJnczsKKyAgICBf
X3VpX1RhYkJhci5wcm90b3R5cGUub25DbGljayA9IGZ1bmN0aW9uKHNlbmRlcikgeworCisgICAg
ICAgIHZhciBfX2kgPSBweWpzbGliX3JhbmdlKDEsICAoIHRoaXMucGFuZWwuZ2V0V2lkZ2V0Q291
bnQoKSAtIDEgKSApLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBpID0gX19pLm5leHQoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgCisgICAgaWYgKCh0aGlzLnBhbmVsLmdldFdpZGdldChpKSA9PSBz
ZW5kZXIpKSB7CisgICAgdGhpcy5zZWxlY3RUYWIoICggaSAtIDEgKSApOworICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfTsKKyAgICBfX3VpX1RhYkJh
ci5wcm90b3R5cGUuX19jbGFzc19fLm9uQ2xpY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5vbkNsaWNrLmNhbGwuYXBwbHkoX191aV9UYWJCYXIu
cHJvdG90eXBlLm9uQ2xpY2ssIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RhYkJhci5w
cm90b3R5cGUuX19jbGFzc19fLm9uQ2xpY2sudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVGFiQmFyLnByb3RvdHlwZS5vbkNsaWNrLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9UYWJCYXIucHJvdG90eXBlLnJlbW92ZVRhYiA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAg
dGhpcy5jaGVja1RhYkluZGV4KGluZGV4KTsKKyAgICB2YXIgdG9SZW1vdmUgPSB0aGlzLnBhbmVs
LmdldFdpZGdldCggKCBpbmRleCArIDEgKSApOworICAgIGlmICgodG9SZW1vdmUgPT0gdGhpcy5z
ZWxlY3RlZFRhYikpIHsKKyAgICB0aGlzLnNlbGVjdGVkVGFiID0gbnVsbDsKKyAgICB9CisgICAg
dGhpcy5wYW5lbC5yZW1vdmUodG9SZW1vdmUpOworICAgIH07CisgICAgX191aV9UYWJCYXIucHJv
dG90eXBlLl9fY2xhc3NfXy5yZW1vdmVUYWIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5yZW1vdmVUYWIuY2FsbC5hcHBseShfX3VpX1RhYkJhci5w
cm90b3R5cGUucmVtb3ZlVGFiLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UYWJCYXIu
cHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVUYWIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5yZW1vdmVUYWIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUucmVtb3ZlVGFiTGlzdGVuZXIgPSBmdW5jdGlvbihs
aXN0ZW5lcikgeworICAgIHRoaXMudGFiTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAg
fTsKKyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZVRhYkxpc3RlbmVy
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RhYkJhci5wcm90b3R5cGUucmVt
b3ZlVGFiTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX1RhYkJhci5wcm90b3R5cGUucmVtb3ZlVGFi
TGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUu
X19jbGFzc19fLnJlbW92ZVRhYkxpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1RhYkJhci5wcm90b3R5cGUucmVtb3ZlVGFiTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUuc2VsZWN0VGFiID0gZnVuY3Rpb24oaW5k
ZXgpIHsKKyAgICB0aGlzLmNoZWNrVGFiSW5kZXgoaW5kZXgpOworCisgICAgICAgIHZhciBfX2xp
c3RlbmVyID0gdGhpcy50YWJMaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0g
X19saXN0ZW5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGlmICgh
KGxpc3RlbmVyLm9uQmVmb3JlVGFiU2VsZWN0ZWQodGhpcywgaW5kZXgpKSkgeworICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRo
cm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgdGhpcy5zZXRT
ZWxlY3Rpb25TdHlsZSh0aGlzLnNlbGVjdGVkVGFiLCBmYWxzZSk7CisgICAgaWYgKChpbmRleCA9
PSAtMSkpIHsKKyAgICB0aGlzLnNlbGVjdGVkVGFiID0gbnVsbDsKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMucGFuZWwuZ2V0V2lkZ2V0KCAoIGlu
ZGV4ICsgMSApICk7CisgICAgdGhpcy5zZXRTZWxlY3Rpb25TdHlsZSh0aGlzLnNlbGVjdGVkVGFi
LCB0cnVlKTsKKworICAgICAgICB2YXIgX19saXN0ZW5lciA9IHRoaXMudGFiTGlzdGVuZXJzLl9f
aXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9fbGlzdGVuZXIubmV4dCgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAKKyAgICBsaXN0ZW5lci5vblRhYlNlbGVjdGVkKHRoaXMsIGluZGV4
KTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBp
ZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Owor
ICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uc2VsZWN0VGFiID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX1RhYkJhci5wcm90b3R5cGUuc2VsZWN0VGFiLmNhbGwu
YXBwbHkoX191aV9UYWJCYXIucHJvdG90eXBlLnNlbGVjdFRhYiwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uc2VsZWN0VGFiLnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYkJhci5wcm90b3R5cGUuc2VsZWN0VGFiLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJCYXIucHJvdG90eXBlLmNoZWNrVGFiSW5k
ZXggPSBmdW5jdGlvbihpbmRleCkgeworICAgIGlmICgoaW5kZXggPCAtMSkgfHwgKGluZGV4ID49
IHRoaXMuZ2V0VGFiQ291bnQoKSkpIHsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1RhYkJhci5w
cm90b3R5cGUuX19jbGFzc19fLmNoZWNrVGFiSW5kZXggPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5jaGVja1RhYkluZGV4LmNhbGwuYXBwbHkoX191
aV9UYWJCYXIucHJvdG90eXBlLmNoZWNrVGFiSW5kZXgsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX1RhYkJhci5wcm90b3R5cGUuX19jbGFzc19fLmNoZWNrVGFiSW5kZXgudW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5jaGVja1RhYkluZGV4Lmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJCYXIucHJvdG90eXBlLnNldFNlbGVj
dGlvblN0eWxlID0gZnVuY3Rpb24oaXRlbSwgc2VsZWN0ZWQpIHsKKyAgICBpZiAoKGl0ZW0gIT0g
bnVsbCkpIHsKKyAgICBpZiAoc2VsZWN0ZWQpIHsKKyAgICBpdGVtLmFkZFN0eWxlTmFtZSgnZ3d0
LVRhYkJhckl0ZW0tc2VsZWN0ZWQnKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgaXRlbS5yZW1v
dmVTdHlsZU5hbWUoJ2d3dC1UYWJCYXJJdGVtLXNlbGVjdGVkJyk7CisgICAgfQorICAgIH0KKyAg
ICB9OworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U2VsZWN0aW9uU3R5
bGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGFiQmFyLnByb3RvdHlwZS5z
ZXRTZWxlY3Rpb25TdHlsZS5jYWxsLmFwcGx5KF9fdWlfVGFiQmFyLnByb3RvdHlwZS5zZXRTZWxl
Y3Rpb25TdHlsZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGFiQmFyLnByb3RvdHlw
ZS5fX2NsYXNzX18uc2V0U2VsZWN0aW9uU3R5bGUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVGFiQmFyLnByb3RvdHlwZS5zZXRTZWxlY3Rpb25TdHlsZS5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworfQorZnVuY3Rpb24gX191aV9UYWJQYW5lbCgpIHsKK30KK2Z1bmN0aW9uIHVpX1Rh
YlBhbmVsKCkgeworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX1RhYlBhbmVsKCk7CisgICAg
aWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBh
cmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBfX3VpX1Rh
YlBhbmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9UYWJQYW5lbC5fX3dhc19pbml0aWFs
aXplZF9fKSByZXR1cm47CisgICAgX191aV9UYWJQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fID0g
dHJ1ZTsKKyAgICBpZighX191aV9Db21wb3NpdGUuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAg
ICAgX191aV9Db21wb3NpdGVfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfVGFi
UGFuZWwsIF9fdWlfQ29tcG9zaXRlKTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18uX19uZXdfXyA9IHVpX1RhYlBhbmVsOworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBl
Ll9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgX191aV9Db21wb3NpdGUucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX2luaXRfXyh0aGlzKTsKKyAgICB0aGlzLnRhYl9jaGlsZHJlbiA9IG5ldyBweWpz
bGliX0xpc3QoW10pOworICAgIHRoaXMuZGVjayA9IHVpX0RlY2tQYW5lbCgpOworICAgIHRoaXMu
dGFiQmFyID0gdWlfVGFiQmFyKCk7CisgICAgdGhpcy50YWJMaXN0ZW5lcnMgPSBuZXcgcHlqc2xp
Yl9MaXN0KFtdKTsKKyAgICB2YXIgcGFuZWwgPSB1aV9WZXJ0aWNhbFBhbmVsKCk7CisgICAgcGFu
ZWwuYWRkKHRoaXMudGFiQmFyKTsKKyAgICBwYW5lbC5hZGQodGhpcy5kZWNrKTsKKyAgICBwYW5l
bC5zZXRDZWxsSGVpZ2h0KHRoaXMuZGVjaywgJzEwMCUnKTsKKyAgICB0aGlzLnRhYkJhci5zZXRX
aWR0aCgnMTAwJScpOworICAgIHRoaXMudGFiQmFyLmFkZFRhYkxpc3RlbmVyKHRoaXMpOworICAg
IHRoaXMuaW5pdFdpZGdldChwYW5lbCk7CisgICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1UYWJQ
YW5lbCcpOworICAgIHRoaXMuZGVjay5zZXRTdHlsZU5hbWUoJ2d3dC1UYWJQYW5lbEJvdHRvbScp
OworICAgIH07CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5f
X2luaXRfXy5jYWxsLmFwcGx5KF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9f
aW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlw
ZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFiUGFuZWwucHJv
dG90eXBlLmFkZCA9IGZ1bmN0aW9uKHdpZGdldCwgdGFiVGV4dCwgYXNIVE1MKSB7CisgICAgaWYg
KHR5cGVvZiB0YWJUZXh0ID09ICd1bmRlZmluZWQnKSB0YWJUZXh0PW51bGw7CisgICAgaWYgKHR5
cGVvZiBhc0hUTUwgPT0gJ3VuZGVmaW5lZCcpIGFzSFRNTD1mYWxzZTsKKyAgICBpZiAoKHRhYlRl
eHQgPT0gbnVsbCkpIHsKKyAgICBjb25zb2xlLmVycm9yKCdBIHRhYlRleHQgcGFyYW1ldGVyIG11
c3QgYmUgc3BlY2lmaWVkIHdpdGggYWRkKCkuJyk7CisgICAgfQorICAgIHRoaXMuaW5zZXJ0KHdp
ZGdldCwgdGFiVGV4dCwgYXNIVE1MLCB0aGlzLmdldFdpZGdldENvdW50KCkpOworICAgIH07Citf
X3VpX1RhYlBhbmVsLnByb3RvdHlwZS5hZGQucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3
YXJncywgd2lkZ2V0LCB0YWJUZXh0LCBhc0hUTUwgKSB7CisgICAgaWYgKHR5cGVvZiB0YWJUZXh0
ID09ICd1bmRlZmluZWQnKQorICAgICAgICB0YWJUZXh0PV9fa3dhcmdzLnRhYlRleHQ7CisgICAg
aWYgKHR5cGVvZiBhc0hUTUwgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGFzSFRNTD1fX2t3YXJn
cy5hc0hUTUw7CisgICAgdmFyIF9fciA9IFt3aWRnZXQsIHRhYlRleHQsIGFzSFRNTF07CisgICAg
cmV0dXJuIF9fcjsKK307CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFk
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UYWJQYW5lbC5wcm90b3R5cGUu
YWRkLmNhbGwuYXBwbHkoX191aV9UYWJQYW5lbC5wcm90b3R5cGUuYWRkLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZC51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuYWRkLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFk
ZC5wYXJzZV9rd2FyZ3MgPSBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5hZGQucGFyc2Vfa3dhcmdz
OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmFkZFRhYkxpc3RlbmVyID0gZnVuY3Rpb24o
bGlzdGVuZXIpIHsKKyAgICB0aGlzLnRhYkxpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpOworICAg
IH07CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZFRhYkxpc3RlbmVy
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5h
ZGRUYWJMaXN0ZW5lci5jYWxsLmFwcGx5KF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmFkZFRhYkxp
c3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUu
X19jbGFzc19fLmFkZFRhYkxpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1RhYlBhbmVsLnByb3RvdHlwZS5hZGRUYWJMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CisgICAg
d2hpbGUgKCh0aGlzLmdldFdpZGdldENvdW50KCkgPiAwKSkgeworICAgIHRoaXMucmVtb3ZlKHRo
aXMuZ2V0V2lkZ2V0KDApKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uY2xlYXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
VGFiUGFuZWwucHJvdG90eXBlLmNsZWFyLmNhbGwuYXBwbHkoX191aV9UYWJQYW5lbC5wcm90b3R5
cGUuY2xlYXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18uY2xlYXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFiUGFu
ZWwucHJvdG90eXBlLmNsZWFyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJQ
YW5lbC5wcm90b3R5cGUuZ2V0RGVja1BhbmVsID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMuZGVjazsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5n
ZXREZWNrUGFuZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGFiUGFuZWwu
cHJvdG90eXBlLmdldERlY2tQYW5lbC5jYWxsLmFwcGx5KF9fdWlfVGFiUGFuZWwucHJvdG90eXBl
LmdldERlY2tQYW5lbCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5nZXREZWNrUGFuZWwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmdldERlY2tQYW5lbC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmdldFRhYkJhciA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLnRhYkJhcjsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5nZXRUYWJCYXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmdldFRhYkJhci5jYWxsLmFwcGx5KF9fdWlfVGFiUGFu
ZWwucHJvdG90eXBlLmdldFRhYkJhciwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGFi
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUYWJCYXIudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmdldFRhYkJhci5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmdldFdpZGdldCA9IGZ1bmN0aW9u
KGluZGV4KSB7CisgICAgcmV0dXJuIHRoaXMudGFiX2NoaWxkcmVuLl9fZ2V0aXRlbV9fKGluZGV4
KTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRn
ZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGFiUGFuZWwucHJvdG90eXBl
LmdldFdpZGdldC5jYWxsLmFwcGx5KF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLmdldFdpZGdldCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRXaWRnZXQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFiUGFuZWwucHJv
dG90eXBlLmdldFdpZGdldC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFiUGFu
ZWwucHJvdG90eXBlLmdldFdpZGdldENvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHB5
anNsaWJfbGVuKHRoaXMudGFiX2NoaWxkcmVuKTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXRDb3VudCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gX191aV9UYWJQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQuY2FsbC5hcHBs
eShfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRDb3VudCwgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXRDb3Vu
dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuZ2V0
V2lkZ2V0Q291bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYlBhbmVsLnBy
b3RvdHlwZS5nZXRXaWRnZXRJbmRleCA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgcmV0dXJuIHRo
aXMudGFiX2NoaWxkcmVuLmluZGV4KGNoaWxkKTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXRJbmRleCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gX191aV9UYWJQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0SW5kZXguY2FsbC5hcHBs
eShfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleCwgYXJndW1lbnRzKTsKKyAg
ICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXRJbmRl
eC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuZ2V0
V2lkZ2V0SW5kZXguaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYlBhbmVsLnBy
b3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbih3aWRnZXQsIHRhYlRleHQsIGFzSFRNTCwgYmVmb3Jl
SW5kZXgpIHsKKyAgICBpZiAodHlwZW9mIGJlZm9yZUluZGV4ID09ICd1bmRlZmluZWQnKSBiZWZv
cmVJbmRleD1udWxsOworICAgIGlmICgoYmVmb3JlSW5kZXggPT0gbnVsbCkpIHsKKyAgICB2YXIg
YmVmb3JlSW5kZXggPSBhc0hUTUw7CisgICAgdmFyIGFzSFRNTCA9IGZhbHNlOworICAgIH0KKyAg
ICB0aGlzLnRhYl9jaGlsZHJlbi5pbnNlcnQoYmVmb3JlSW5kZXgsIHdpZGdldCk7CisgICAgdGhp
cy50YWJCYXIuaW5zZXJ0VGFiKHRhYlRleHQsIGFzSFRNTCwgYmVmb3JlSW5kZXgpOworICAgIHRo
aXMuZGVjay5pbnNlcnQod2lkZ2V0LCBiZWZvcmVJbmRleCk7CisgICAgfTsKK19fdWlfVGFiUGFu
ZWwucHJvdG90eXBlLmluc2VydC5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCB3
aWRnZXQsIHRhYlRleHQsIGFzSFRNTCwgYmVmb3JlSW5kZXggKSB7CisgICAgaWYgKHR5cGVvZiBi
ZWZvcmVJbmRleCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgYmVmb3JlSW5kZXg9X19rd2FyZ3Mu
YmVmb3JlSW5kZXg7CisgICAgdmFyIF9fciA9IFt3aWRnZXQsIHRhYlRleHQsIGFzSFRNTCwgYmVm
b3JlSW5kZXhdOworICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90
eXBlLl9fY2xhc3NfXy5pbnNlcnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
VGFiUGFuZWwucHJvdG90eXBlLmluc2VydC5jYWxsLmFwcGx5KF9fdWlfVGFiUGFuZWwucHJvdG90
eXBlLmluc2VydCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90
eXBlLl9fY2xhc3NfXy5pbnNlcnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFi
UGFuZWwucHJvdG90eXBlLmluc2VydC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VGFiUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5pbnNlcnQucGFyc2Vfa3dhcmdzID0gX191aV9U
YWJQYW5lbC5wcm90b3R5cGUuaW5zZXJ0LnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX1RhYlBhbmVs
LnByb3RvdHlwZS5fX2l0ZXJfXyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnRhYl9j
aGlsZHJlbi5fX2l0ZXJfXygpOworICAgIH07CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUu
X19jbGFzc19fLl9faXRlcl9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1Rh
YlBhbmVsLnByb3RvdHlwZS5fX2l0ZXJfXy5jYWxsLmFwcGx5KF9fdWlfVGFiUGFuZWwucHJvdG90
eXBlLl9faXRlcl9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UYWJQYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLl9faXRlcl9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1RhYlBhbmVsLnByb3RvdHlwZS5fX2l0ZXJfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLm9uQmVmb3JlVGFiU2VsZWN0ZWQgPSBmdW5jdGlvbihz
ZW5kZXIsIHRhYkluZGV4KSB7CisKKyAgICAgICAgdmFyIF9fbGlzdGVuZXIgPSB0aGlzLnRhYkxp
c3RlbmVycy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgaWYgKCEobGlzdGVuZXIub25CZWZvcmVU
YWJTZWxlY3RlZChzZW5kZXIsIHRhYkluZGV4KSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlm
IChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIHJldHVybiB0cnVlOworICAgIH07Cisg
ICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uQmVmb3JlVGFiU2VsZWN0ZWQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLm9u
QmVmb3JlVGFiU2VsZWN0ZWQuY2FsbC5hcHBseShfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5vbkJl
Zm9yZVRhYlNlbGVjdGVkLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UYWJQYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLm9uQmVmb3JlVGFiU2VsZWN0ZWQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLm9uQmVmb3JlVGFiU2VsZWN0ZWQuaW5z
dGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5vblRhYlNl
bGVjdGVkID0gZnVuY3Rpb24oc2VuZGVyLCB0YWJJbmRleCkgeworICAgIHRoaXMuZGVjay5zaG93
V2lkZ2V0KHRhYkluZGV4KTsKKworICAgICAgICB2YXIgX19saXN0ZW5lciA9IHRoaXMudGFiTGlz
dGVuZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9fbGlzdGVuZXIubmV4dCgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBsaXN0ZW5lci5vblRhYlNlbGVjdGVkKHNl
bmRlciwgdGFiSW5kZXgpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0
aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH07CisgICAg
X191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uVGFiU2VsZWN0ZWQgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLm9uVGFiU2VsZWN0
ZWQuY2FsbC5hcHBseShfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5vblRhYlNlbGVjdGVkLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9UYWJQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9u
VGFiU2VsZWN0ZWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGFiUGFuZWwucHJv
dG90eXBlLm9uVGFiU2VsZWN0ZWQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Rh
YlBhbmVsLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICBpZiAocHlq
c2xpYl9pc051bWJlcih3aWRnZXQpKSB7CisgICAgdmFyIHdpZGdldCA9IHRoaXMuZ2V0V2lkZ2V0
KHdpZGdldCk7CisgICAgfQorICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0V2lkZ2V0SW5kZXgod2lk
Z2V0KTsKKyAgICBpZiAoKGluZGV4ID09IC0xKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgdGhpcy50YWJfY2hpbGRyZW4ucmVtb3ZlKHdpZGdldCk7CisgICAgdGhpcy50YWJCYXIu
cmVtb3ZlVGFiKGluZGV4KTsKKyAgICB0aGlzLmRlY2sucmVtb3ZlKHdpZGdldCk7CisgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
cmVtb3ZlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RhYlBhbmVsLnByb3Rv
dHlwZS5yZW1vdmUuY2FsbC5hcHBseShfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5yZW1vdmUsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
cmVtb3ZlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlw
ZS5yZW1vdmUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3Rv
dHlwZS5yZW1vdmVUYWJMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAgdGhpcy50
YWJMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwu
cHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVUYWJMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9UYWJQYW5lbC5wcm90b3R5cGUucmVtb3ZlVGFiTGlzdGVuZXIuY2Fs
bC5hcHBseShfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5yZW1vdmVUYWJMaXN0ZW5lciwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfVGFiUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1v
dmVUYWJMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UYWJQYW5lbC5w
cm90b3R5cGUucmVtb3ZlVGFiTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1RhYlBhbmVsLnByb3RvdHlwZS5zZWxlY3RUYWIgPSBmdW5jdGlvbihpbmRleCkgeworICAg
IHRoaXMudGFiQmFyLnNlbGVjdFRhYihpbmRleCk7CisgICAgfTsKKyAgICBfX3VpX1RhYlBhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uc2VsZWN0VGFiID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5zZWxlY3RUYWIuY2FsbC5hcHBseShfX3VpX1Rh
YlBhbmVsLnByb3RvdHlwZS5zZWxlY3RUYWIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X1RhYlBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uc2VsZWN0VGFiLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RhYlBhbmVsLnByb3RvdHlwZS5zZWxlY3RUYWIuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfU3RhY2tQYW5lbCgpIHsKK30KK2Z1bmN0aW9u
IHVpX1N0YWNrUGFuZWwoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfU3RhY2tQYW5l
bCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShp
bnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rp
b24gX191aV9TdGFja1BhbmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9TdGFja1BhbmVs
Ll9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1N0YWNrUGFuZWwuX193YXNf
aW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfQ29tcGxleFBhbmVsLl9fd2FzX2lu
aXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfQ29tcGxleFBhbmVsX2luaXRpYWxpemUoKTsKKyAg
ICBweWpzX2V4dGVuZChfX3VpX1N0YWNrUGFuZWwsIF9fdWlfQ29tcGxleFBhbmVsKTsKKyAgICBf
X3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfU3RhY2tQYW5l
bDsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7
CisgICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlz
KTsKKyAgICB0aGlzLmJvZHkgPSBudWxsOworICAgIHRoaXMudmlzaWJsZVN0YWNrID0gLTE7Cisg
ICAgdmFyIHRhYmxlID0gRE9NX2NyZWF0ZVRhYmxlKCk7CisgICAgdGhpcy5zZXRFbGVtZW50KHRh
YmxlKTsKKyAgICB0aGlzLmJvZHkgPSBET01fY3JlYXRlVEJvZHkoKTsKKyAgICBET01fYXBwZW5k
Q2hpbGQodGFibGUsIHRoaXMuYm9keSk7CisgICAgRE9NX3NldEludEF0dHJpYnV0ZSh0YWJsZSwg
J2NlbGxTcGFjaW5nJywgMCk7CisgICAgRE9NX3NldEludEF0dHJpYnV0ZSh0YWJsZSwgJ2NlbGxQ
YWRkaW5nJywgMCk7CisgICAgRE9NX3NpbmtFdmVudHModGFibGUsIF9fdWlfRXZlbnQucHJvdG90
eXBlLl9fY2xhc3NfXy5PTkNMSUNLKTsKKyAgICB0aGlzLnNldFN0eWxlTmFtZSgnZ3d0LVN0YWNr
UGFuZWwnKTsKKyAgICB9OworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
Ll9faW5pdF9fID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1N0YWNrUGFuZWwu
cHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5f
X2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5
cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1N0
YWNrUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih3aWRnZXQsIHN0YWNrVGV4
dCwgYXNIVE1MKSB7CisgICAgaWYgKHR5cGVvZiBzdGFja1RleHQgPT0gJ3VuZGVmaW5lZCcpIHN0
YWNrVGV4dD0nJzsKKyAgICBpZiAodHlwZW9mIGFzSFRNTCA9PSAndW5kZWZpbmVkJykgYXNIVE1M
PWZhbHNlOworICAgIHdpZGdldC5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdmFyIGluZGV4ID0g
dGhpcy5nZXRXaWRnZXRDb3VudCgpOworICAgIHZhciB0ciA9IERPTV9jcmVhdGVUUigpOworICAg
IHZhciB0ZCA9IERPTV9jcmVhdGVURCgpOworICAgIERPTV9hcHBlbmRDaGlsZCh0aGlzLmJvZHks
IHRyKTsKKyAgICBET01fYXBwZW5kQ2hpbGQodHIsIHRkKTsKKyAgICB0aGlzLnNldFN0eWxlTmFt
ZSh0ZCwgJ2d3dC1TdGFja1BhbmVsSXRlbScsIHRydWUpOworICAgIERPTV9zZXRJbnRBdHRyaWJ1
dGUodGQsICdfX2luZGV4JywgaW5kZXgpOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGQsICdoZWln
aHQnLCAnMXB4Jyk7CisgICAgdmFyIHRyID0gRE9NX2NyZWF0ZVRSKCk7CisgICAgdmFyIHRkID0g
RE9NX2NyZWF0ZVREKCk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRoaXMuYm9keSwgdHIpOworICAg
IERPTV9hcHBlbmRDaGlsZCh0ciwgdGQpOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGQsICdoZWln
aHQnLCAnMTAwJScpOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGQsICd2QWxpZ24nLCAndG9wJyk7
CisgICAgX191aV9Db21wbGV4UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5hZGQodGhpcywgd2lk
Z2V0LCB0ZCk7CisgICAgdGhpcy5zZXRTdGFja1Zpc2libGUoaW5kZXgsIGZhbHNlKTsKKyAgICBp
ZiAoKHRoaXMudmlzaWJsZVN0YWNrID09IC0xKSkgeworICAgIHRoaXMuc2hvd1N0YWNrKDApOwor
ICAgIH0KKyAgICBpZiAoKHN0YWNrVGV4dCAhPSAnJykpIHsKKyAgICB0aGlzLnNldFN0YWNrVGV4
dCggKCB0aGlzLmdldFdpZGdldENvdW50KCkgLSAxICkgLCBzdGFja1RleHQsIGFzSFRNTCk7Cisg
ICAgfQorICAgIH07CitfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmFkZC5wYXJzZV9rd2FyZ3Mg
PSBmdW5jdGlvbiAoIF9fa3dhcmdzLCB3aWRnZXQsIHN0YWNrVGV4dCwgYXNIVE1MICkgeworICAg
IGlmICh0eXBlb2Ygc3RhY2tUZXh0ID09ICd1bmRlZmluZWQnKQorICAgICAgICBzdGFja1RleHQ9
X19rd2FyZ3Muc3RhY2tUZXh0OworICAgIGlmICh0eXBlb2YgYXNIVE1MID09ICd1bmRlZmluZWQn
KQorICAgICAgICBhc0hUTUw9X19rd2FyZ3MuYXNIVE1MOworICAgIHZhciBfX3IgPSBbd2lkZ2V0
LCBzdGFja1RleHQsIGFzSFRNTF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9TdGFj
a1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmFkZC5jYWxsLmFwcGx5KF9fdWlfU3RhY2tQ
YW5lbC5wcm90b3R5cGUuYWRkLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9TdGFja1Bh
bmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmFkZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZC5wYXJzZV9rd2FyZ3MgPSBf
X3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmFkZC5wYXJzZV9rd2FyZ3M7CisgICAgX191aV9TdGFj
a1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQgPSBmdW5jdGlvbihpbmRleCkgeworICAgIHJldHVy
biB0aGlzLmNoaWxkcmVuLl9fZ2V0aXRlbV9fKGluZGV4KTsKKyAgICB9OworICAgIF9fdWlfU3Rh
Y2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdldCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXQuY2FsbC5hcHBs
eShfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmdldFdpZGdldCwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFdpZGdldC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRn
ZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBl
LmdldFdpZGdldENvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHB5anNsaWJfbGVuKHRo
aXMuY2hpbGRyZW4pOworICAgIH07CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5fX2Ns
YXNzX18uZ2V0V2lkZ2V0Q291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
U3RhY2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0Q291bnQuY2FsbC5hcHBseShfX3VpX1N0YWNr
UGFuZWwucHJvdG90eXBlLmdldFdpZGdldENvdW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lkZ2V0Q291bnQudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0
Q291bnQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90
eXBlLmdldFdpZGdldEluZGV4ID0gZnVuY3Rpb24oY2hpbGQpIHsKKyAgICByZXR1cm4gdGhpcy5j
aGlsZHJlbi5pbmRleChjaGlsZCk7CisgICAgfTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90
eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXRJbmRleCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5nZXRXaWRnZXRJbmRleC5jYWxsLmFwcGx5KF9f
dWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuZ2V0V2lkZ2V0SW5kZXgsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRXaWRnZXRJbmRl
eC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5n
ZXRXaWRnZXRJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfU3RhY2tQYW5l
bC5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmICgo
RE9NX2V2ZW50R2V0VHlwZShldmVudCkgPT0gJ2NsaWNrJykpIHsKKyAgICB2YXIgaW5kZXggPSB0
aGlzLmdldERpdmlkZXJJbmRleChET01fZXZlbnRHZXRUYXJnZXQoZXZlbnQpKTsKKyAgICBpZiAo
KGluZGV4ICE9IC0xKSkgeworICAgIHRoaXMuc2hvd1N0YWNrKGluZGV4KTsKKyAgICB9CisgICAg
fQorICAgIH07CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93
c2VyRXZlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU3RhY2tQYW5lbC5w
cm90b3R5cGUub25Ccm93c2VyRXZlbnQuY2FsbC5hcHBseShfX3VpX1N0YWNrUGFuZWwucHJvdG90
eXBlLm9uQnJvd3NlckV2ZW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9TdGFja1Bh
bmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQuaW5zdGFu
Y2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLnJlbW92ZSA9
IGZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgeworICAgIGlmICh0eXBlb2YgaW5kZXggPT0gJ3VuZGVm
aW5lZCcpIGluZGV4PW51bGw7CisgICAgaWYgKChpbmRleCA9PSBudWxsKSkgeworICAgIGlmIChw
eWpzbGliX2lzTnVtYmVyKGNoaWxkKSkgeworICAgIHZhciBpbmRleCA9IGNoaWxkOworICAgIHZh
ciBjaGlsZCA9IHRoaXMuZ2V0V2lkZ2V0KGNoaWxkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
dmFyIGluZGV4ID0gdGhpcy5nZXRXaWRnZXRJbmRleChjaGlsZCk7CisgICAgfQorICAgIH0KKyAg
ICBpZiAoKGNoaWxkLmdldFBhcmVudCgpICE9IHRoaXMpKSB7CisgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBpZiAoKHRoaXMudmlzaWJsZVN0YWNrID09IGluZGV4KSkgeworICAgIHRoaXMu
dmlzaWJsZVN0YWNrID0gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKCh0aGlzLnZpc2libGVTdGFj
ayA+IGluZGV4KSkgeworICAgIHRoaXMudmlzaWJsZVN0YWNrIC09IDE7CisgICAgfQorICAgIHZh
ciByb3dJbmRleCA9ICAoIDIgKiBpbmRleCApIDsKKyAgICB2YXIgdHIgPSBET01fZ2V0Q2hpbGQo
dGhpcy5ib2R5LCByb3dJbmRleCk7CisgICAgRE9NX3JlbW92ZUNoaWxkKHRoaXMuYm9keSwgdHIp
OworICAgIHZhciB0ciA9IERPTV9nZXRDaGlsZCh0aGlzLmJvZHksIHJvd0luZGV4KTsKKyAgICBE
T01fcmVtb3ZlQ2hpbGQodGhpcy5ib2R5LCB0cik7CisgICAgX191aV9Db21wbGV4UGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5yZW1vdmUodGhpcywgY2hpbGQpOworICAgIHZhciByb3dzID0gICgg
dGhpcy5nZXRXaWRnZXRDb3VudCgpICogMiApIDsKKworICAgICAgICB2YXIgX19pID0gcHlqc2xp
Yl9yYW5nZShyb3dJbmRleCwgcm93cywgMikuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGkgPSBfX2kubmV4
dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICB2YXIgY2hpbGRUUiA9IERPTV9n
ZXRDaGlsZCh0aGlzLmJvZHksIGkpOworICAgIHZhciB0ZCA9IERPTV9nZXRGaXJzdENoaWxkKGNo
aWxkVFIpOworICAgIHZhciBjdXJJbmRleCA9IERPTV9nZXRJbnRBdHRyaWJ1dGUodGQsICdfX2lu
ZGV4Jyk7CisgICAgRE9NX3NldEludEF0dHJpYnV0ZSh0ZCwgJ19faW5kZXgnLCBpbmRleCk7Cisg
ICAgaW5kZXggKz0gMTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhy
b3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5yZW1vdmUucGFyc2Vfa3dhcmdz
ID0gZnVuY3Rpb24gKCBfX2t3YXJncywgY2hpbGQsIGluZGV4ICkgeworICAgIGlmICh0eXBlb2Yg
aW5kZXggPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGluZGV4PV9fa3dhcmdzLmluZGV4OworICAg
IHZhciBfX3IgPSBbY2hpbGQsIGluZGV4XTsKKyAgICByZXR1cm4gX19yOworfTsKKyAgICBfX3Vp
X1N0YWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUucmVtb3ZlLmNhbGwuYXBwbHko
X191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5yZW1vdmUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUucmVtb3ZlLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
cmVtb3ZlLnBhcnNlX2t3YXJncyA9IF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUucmVtb3ZlLnBh
cnNlX2t3YXJnczsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLnNldFN0YWNrVGV4dCA9
IGZ1bmN0aW9uKGluZGV4LCB0ZXh0LCBhc0hUTUwpIHsKKyAgICBpZiAodHlwZW9mIGFzSFRNTCA9
PSAndW5kZWZpbmVkJykgYXNIVE1MPWZhbHNlOworICAgIGlmICgoaW5kZXggPj0gdGhpcy5nZXRX
aWRnZXRDb3VudCgpKSkgeworICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIHRkID0gRE9NX2dl
dENoaWxkKERPTV9nZXRDaGlsZCh0aGlzLmJvZHksICAoIGluZGV4ICogMiApICksIDApOworICAg
IGlmIChhc0hUTUwpIHsKKyAgICBET01fc2V0SW5uZXJIVE1MKHRkLCB0ZXh0KTsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgRE9NX3NldElubmVyVGV4dCh0ZCwgdGV4dCk7CisgICAgfQorICAgIH07
CitfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLnNldFN0YWNrVGV4dC5wYXJzZV9rd2FyZ3MgPSBm
dW5jdGlvbiAoIF9fa3dhcmdzLCBpbmRleCwgdGV4dCwgYXNIVE1MICkgeworICAgIGlmICh0eXBl
b2YgYXNIVE1MID09ICd1bmRlZmluZWQnKQorICAgICAgICBhc0hUTUw9X19rd2FyZ3MuYXNIVE1M
OworICAgIHZhciBfX3IgPSBbaW5kZXgsIHRleHQsIGFzSFRNTF07CisgICAgcmV0dXJuIF9fcjsK
K307CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0U3RhY2tUZXh0
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBl
LnNldFN0YWNrVGV4dC5jYWxsLmFwcGx5KF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuc2V0U3Rh
Y2tUZXh0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlw
ZS5fX2NsYXNzX18uc2V0U3RhY2tUZXh0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1N0YWNrUGFuZWwucHJvdG90eXBlLnNldFN0YWNrVGV4dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFN0YWNrVGV4dC5w
YXJzZV9rd2FyZ3MgPSBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLnNldFN0YWNrVGV4dC5wYXJz
ZV9rd2FyZ3M7CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5zaG93U3RhY2sgPSBmdW5j
dGlvbihpbmRleCkgeworICAgIGlmICgoaW5kZXggPj0gdGhpcy5nZXRXaWRnZXRDb3VudCgpKSB8
fCAoaW5kZXggPT0gdGhpcy52aXNpYmxlU3RhY2spKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoKHRoaXMudmlzaWJsZVN0YWNrID49IDApKSB7CisgICAgdGhpcy5zZXRTdGFja1Zpc2li
bGUodGhpcy52aXNpYmxlU3RhY2ssIGZhbHNlKTsKKyAgICB9CisgICAgdGhpcy52aXNpYmxlU3Rh
Y2sgPSBpbmRleDsKKyAgICB0aGlzLnNldFN0YWNrVmlzaWJsZSh0aGlzLnZpc2libGVTdGFjaywg
dHJ1ZSk7CisgICAgfTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5z
aG93U3RhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU3RhY2tQYW5lbC5w
cm90b3R5cGUuc2hvd1N0YWNrLmNhbGwuYXBwbHkoX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5z
aG93U3RhY2ssIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90
eXBlLl9fY2xhc3NfXy5zaG93U3RhY2sudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
U3RhY2tQYW5lbC5wcm90b3R5cGUuc2hvd1N0YWNrLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5nZXREaXZpZGVySW5kZXggPSBmdW5jdGlvbihl
bGVtKSB7CisgICAgd2hpbGUgKChlbGVtICE9IG51bGwpICYmICEoRE9NX2NvbXBhcmUoZWxlbSwg
dGhpcy5nZXRFbGVtZW50KCkpKSkgeworICAgIHZhciBleHBhbmRvID0gRE9NX2dldEF0dHJpYnV0
ZShlbGVtLCAnX19pbmRleCcpOworICAgIGlmICgoZXhwYW5kbyAhPSBudWxsKSkgeworICAgIHJl
dHVybiBweWpzbGliX2ludChleHBhbmRvKTsKKyAgICB9CisgICAgdmFyIGVsZW0gPSBET01fZ2V0
UGFyZW50KGVsZW0pOworICAgIH0KKyAgICByZXR1cm4gLTE7CisgICAgfTsKKyAgICBfX3VpX1N0
YWNrUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXREaXZpZGVySW5kZXggPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuZ2V0RGl2aWRlcklu
ZGV4LmNhbGwuYXBwbHkoX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5nZXREaXZpZGVySW5kZXgs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5nZXREaXZpZGVySW5kZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfU3Rh
Y2tQYW5lbC5wcm90b3R5cGUuZ2V0RGl2aWRlckluZGV4Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5zZXRTdGFja1Zpc2libGUgPSBmdW5jdGlv
bihpbmRleCwgdmlzaWJsZSkgeworICAgIHZhciB0ciA9IERPTV9nZXRDaGlsZCh0aGlzLmJvZHks
ICAoIGluZGV4ICogMiApICk7CisgICAgaWYgKCh0ciA9PSBudWxsKSkgeworICAgIHJldHVybjsK
KyAgICB9CisgICAgdmFyIHRkID0gRE9NX2dldEZpcnN0Q2hpbGQodHIpOworICAgIHRoaXMuc2V0
U3R5bGVOYW1lKHRkLCAnZ3d0LVN0YWNrUGFuZWxJdGVtLXNlbGVjdGVkJywgdmlzaWJsZSk7Cisg
ICAgdmFyIHRyID0gRE9NX2dldENoaWxkKHRoaXMuYm9keSwgICggICggaW5kZXggKiAyICkgICsg
MSApICk7CisgICAgdGhpcy5zZXRWaXNpYmxlKHRyLCB2aXNpYmxlKTsKKyAgICB0aGlzLmdldFdp
ZGdldChpbmRleCkuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKyAgICB9OworICAgIF9fdWlfU3RhY2tQ
YW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFN0YWNrVmlzaWJsZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9TdGFja1BhbmVsLnByb3RvdHlwZS5zZXRTdGFja1Zpc2libGUu
Y2FsbC5hcHBseShfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLnNldFN0YWNrVmlzaWJsZSwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfU3RhY2tQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LnNldFN0YWNrVmlzaWJsZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9TdGFja1Bh
bmVsLnByb3RvdHlwZS5zZXRTdGFja1Zpc2libGUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmdldFNlbGVjdGVkSW5kZXggPSBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpcy52aXNpYmxlU3RhY2s7CisgICAgfTsKKyAgICBfX3VpX1N0YWNr
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTZWxlY3RlZEluZGV4ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmdldFNlbGVjdGVkSW5k
ZXguY2FsbC5hcHBseShfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLmdldFNlbGVjdGVkSW5kZXgs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1N0YWNrUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5nZXRTZWxlY3RlZEluZGV4LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1N0
YWNrUGFuZWwucHJvdG90eXBlLmdldFNlbGVjdGVkSW5kZXguaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKK30KK2Z1bmN0aW9uIF9fdWlfVGV4dEJveEJhc2UoKSB7Cit9CitmdW5jdGlvbiB1aV9UZXh0
Qm94QmFzZShlbGVtZW50KSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfVGV4dEJveEJh
c2UoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHko
aW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0
aW9uIF9fdWlfVGV4dEJveEJhc2VfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX1RleHRCb3hC
YXNlLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1RleHRCb3hCYXNlLl9f
d2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX0ZvY3VzV2lkZ2V0Ll9fd2Fz
X2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfRm9jdXNXaWRnZXRfaW5pdGlhbGl6ZSgpOwor
ICAgIHB5anNfZXh0ZW5kKF9fdWlfVGV4dEJveEJhc2UsIF9fdWlfRm9jdXNXaWRnZXQpOworICAg
IF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfVGV4dEJv
eEJhc2U7CitfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uQUxJR05fQ0VOVEVS
ID0gJ2NlbnRlcic7CitfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uQUxJR05f
SlVTVElGWSA9ICdqdXN0aWZ5JzsKK19fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3Nf
Xy5BTElHTl9MRUZUID0gJ2xlZnQnOworX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFz
c19fLkFMSUdOX1JJR0hUID0gJ3JpZ2h0JzsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlw
ZS5fX2luaXRfXyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICB0aGlzLmNoYW5nZUxpc3RlbmVy
cyA9IG5ldyBweWpzbGliX0xpc3QoW10pOworICAgIHRoaXMuY2xpY2tMaXN0ZW5lcnMgPSBuZXcg
cHlqc2xpYl9MaXN0KFtdKTsKKyAgICB0aGlzLmN1cnJlbnRFdmVudCA9IG51bGw7CisgICAgdGhp
cy5rZXlib2FyZExpc3RlbmVycyA9IG5ldyBweWpzbGliX0xpc3QoW10pOworICAgIF9fdWlfRm9j
dXNXaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlzLCBlbGVtZW50KTsKKyAg
ICB0aGlzLnNpbmtFdmVudHMoX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLk9OQ0hBTkdF
KTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UZXh0Qm94QmFzZS5wcm90
b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2lu
aXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBl
Ll9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0
Qm94QmFzZS5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5hZGRDaGFuZ2VMaXN0ZW5lciA9IGZ1bmN0aW9uKGxp
c3RlbmVyKSB7CisgICAgdGhpcy5jaGFuZ2VMaXN0ZW5lcnMuYXBwZW5kKGxpc3RlbmVyKTsKKyAg
ICB9OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRDaGFuZ2VM
aXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UZXh0Qm94QmFzZS5w
cm90b3R5cGUuYWRkQ2hhbmdlTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX1RleHRCb3hCYXNlLnBy
b3RvdHlwZS5hZGRDaGFuZ2VMaXN0ZW5lciwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
VGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRDaGFuZ2VMaXN0ZW5lci51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuYWRkQ2hhbmdl
TGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnBy
b3RvdHlwZS5hZGRDbGlja0xpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlz
LmNsaWNrTGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX1RleHRC
b3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkQ2xpY2tMaXN0ZW5lciA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuYWRkQ2xpY2tMaXN0
ZW5lci5jYWxsLmFwcGx5KF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLmFkZENsaWNrTGlzdGVu
ZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5f
X2NsYXNzX18uYWRkQ2xpY2tMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuYWRkQ2xpY2tMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLmFkZEtleWJvYXJkTGlzdGVu
ZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMua2V5Ym9hcmRMaXN0ZW5lcnMuYXBw
ZW5kKGxpc3RlbmVyKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9f
Y2xhc3NfXy5hZGRLZXlib2FyZExpc3RlbmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5hZGRLZXlib2FyZExpc3RlbmVyLmNhbGwuYXBw
bHkoX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuYWRkS2V5Ym9hcmRMaXN0ZW5lciwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5h
ZGRLZXlib2FyZExpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRC
b3hCYXNlLnByb3RvdHlwZS5hZGRLZXlib2FyZExpc3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuY2FuY2VsS2V5ID0gZnVuY3Rpb24o
KSB7CisgICAgaWYgKCh0aGlzLmN1cnJlbnRFdmVudCAhPSBudWxsKSkgeworICAgIERPTV9ldmVu
dFByZXZlbnREZWZhdWx0KHRoaXMuY3VycmVudEV2ZW50KTsKKyAgICB9CisgICAgfTsKKyAgICBf
X3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uY2FuY2VsS2V5ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5jYW5jZWxLZXku
Y2FsbC5hcHBseShfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5jYW5jZWxLZXksIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uY2Fu
Y2VsS2V5LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3Rv
dHlwZS5jYW5jZWxLZXkuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hC
YXNlLnByb3RvdHlwZS5nZXRDdXJzb3JQb3MgPSBmdW5jdGlvbigpIHsKKworICAgICAgICB0cnkg
eworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKQorICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgIH07CisgICAg
X191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFzc19fLmdldEN1cnNvclBvcyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuZ2V0Q3Vy
c29yUG9zLmNhbGwuYXBwbHkoX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9z
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19j
bGFzc19fLmdldEN1cnNvclBvcy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0
Qm94QmFzZS5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9zLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBET01fZ2V0QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAnbmFtZScpOworICAg
IH07CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFzc19fLmdldE5hbWUgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLmdl
dE5hbWUuY2FsbC5hcHBseShfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5nZXROYW1lLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFzc19f
LmdldE5hbWUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveEJhc2UucHJv
dG90eXBlLmdldE5hbWUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hC
YXNlLnByb3RvdHlwZS5nZXRTZWxlY3RlZFRleHQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgc3Rh
cnQgPSB0aGlzLmdldEN1cnNvclBvcygpOworICAgIHZhciBsZW5ndGggPSB0aGlzLmdldFNlbGVj
dGlvbkxlbmd0aCgpOworICAgIHZhciB0ZXh0ID0gdGhpcy5nZXRUZXh0KCk7CisgICAgcmV0dXJu
IHB5anNsaWJfc2xpY2UodGV4dCwgc3RhcnQsICAoIHN0YXJ0ICsgbGVuZ3RoICkgKTsKKyAgICB9
OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTZWxlY3RlZFRl
eHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGV4dEJveEJhc2UucHJvdG90
eXBlLmdldFNlbGVjdGVkVGV4dC5jYWxsLmFwcGx5KF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBl
LmdldFNlbGVjdGVkVGV4dCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveEJh
c2UucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTZWxlY3RlZFRleHQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLmdldFNlbGVjdGVkVGV4dC5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLmdldFNl
bGVjdGlvbkxlbmd0aCA9IGZ1bmN0aW9uKCkgeworCisgICAgICAgIHRyeXsKKyAgICAgICAgICAg
IHZhciBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KCkKKyAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50LnNlbGVjdGlvbkVuZCAtIGVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7CisgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAg
IH07CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFzc19fLmdldFNlbGVjdGlv
bkxlbmd0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UZXh0Qm94QmFzZS5w
cm90b3R5cGUuZ2V0U2VsZWN0aW9uTGVuZ3RoLmNhbGwuYXBwbHkoX191aV9UZXh0Qm94QmFzZS5w
cm90b3R5cGUuZ2V0U2VsZWN0aW9uTGVuZ3RoLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFzc19fLmdldFNlbGVjdGlvbkxlbmd0aC51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuZ2V0U2Vs
ZWN0aW9uTGVuZ3RoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0Qm94QmFz
ZS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0QXR0
cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAndmFsdWUnKTsKKyAgICB9OworICAgIF9fdWlfVGV4
dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUZXh0ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5nZXRUZXh0LmNhbGwuYXBwbHko
X191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuZ2V0VGV4dCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUZXh0LnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5nZXRUZXh0Lmlu
c3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUub25C
cm93c2VyRXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIF9fdWlfRm9jdXNXaWRnZXQucHJv
dG90eXBlLl9fY2xhc3NfXy5vbkJyb3dzZXJFdmVudCh0aGlzLCBldmVudCk7CisgICAgdmFyIHR5
cGUgPSBET01fZXZlbnRHZXRUeXBlKGV2ZW50KTsKKyAgICBpZiAoKHR5cGUgPT0gJ2NoYW5nZScp
KSB7CisKKyAgICAgICAgdmFyIF9fbGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVycy5fX2l0
ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfX2xpc3RlbmVyLm5leHQoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgCisgICAgaWYgKGxpc3RlbmVyLm9uQ2hhbmdlKSB7CisgICAgbGlzdGVu
ZXIub25DaGFuZ2UodGhpcyk7CisgICAgfQorICAgIGVsc2UgeworICAgIGxpc3RlbmVyKHRoaXMp
OworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgfTsKKyAgICBf
X3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLm9uQnJv
d3NlckV2ZW50LmNhbGwuYXBwbHkoX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUub25Ccm93c2Vy
RXZlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlw
ZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVGV4dEJveEJhc2UucHJvdG90eXBlLm9uQnJvd3NlckV2ZW50Lmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUucmVtb3ZlQ2hhbmdlTGlzdGVu
ZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMuY2hhbmdlTGlzdGVuZXJzLnJlbW92
ZShsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2Ns
YXNzX18ucmVtb3ZlQ2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnJlbW92ZUNoYW5nZUxpc3RlbmVyLmNhbGwuYXBw
bHkoX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUucmVtb3ZlQ2hhbmdlTGlzdGVuZXIsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18u
cmVtb3ZlQ2hhbmdlTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4
dEJveEJhc2UucHJvdG90eXBlLnJlbW92ZUNoYW5nZUxpc3RlbmVyLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUucmVtb3ZlQ2xpY2tMaXN0ZW5l
ciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAgdGhpcy5jbGlja0xpc3RlbmVycy5yZW1vdmUo
bGlzdGVuZXIpOworICAgIH07CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFz
c19fLnJlbW92ZUNsaWNrTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnJlbW92ZUNsaWNrTGlzdGVuZXIuY2FsbC5hcHBseShf
X3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5yZW1vdmVDbGlja0xpc3RlbmVyLCBhcmd1bWVudHMp
OworICAgIH07CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92
ZUNsaWNrTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveEJh
c2UucHJvdG90eXBlLnJlbW92ZUNsaWNrTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5yZW1vdmVLZXlib2FyZExpc3RlbmVyID0g
ZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLmtleWJvYXJkTGlzdGVuZXJzLnJlbW92ZShs
aXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNz
X18ucmVtb3ZlS2V5Ym9hcmRMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUucmVtb3ZlS2V5Ym9hcmRMaXN0ZW5lci5jYWxsLmFw
cGx5KF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnJlbW92ZUtleWJvYXJkTGlzdGVuZXIsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNz
X18ucmVtb3ZlS2V5Ym9hcmRMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUucmVtb3ZlS2V5Ym9hcmRMaXN0ZW5lci5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnNlbGVjdEFsbCA9
IGZ1bmN0aW9uKCkgeworICAgIHZhciBsZW5ndGggPSBweWpzbGliX2xlbih0aGlzLmdldFRleHQo
KSk7CisgICAgaWYgKChsZW5ndGggPiAwKSkgeworICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Uo
MCwgbGVuZ3RoKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlw
ZS5fX2NsYXNzX18uc2VsZWN0QWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3Vp
X1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZWxlY3RBbGwuY2FsbC5hcHBseShfX3VpX1RleHRCb3hC
YXNlLnByb3RvdHlwZS5zZWxlY3RBbGwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1Rl
eHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2VsZWN0QWxsLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZWxlY3RBbGwuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRDdXJzb3JQ
b3MgPSBmdW5jdGlvbihwb3MpIHsKKyAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHBvcywgMCk7
CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q3Vy
c29yUG9zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RleHRCb3hCYXNlLnBy
b3RvdHlwZS5zZXRDdXJzb3JQb3MuY2FsbC5hcHBseShfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlw
ZS5zZXRDdXJzb3JQb3MsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNl
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q3Vyc29yUG9zLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRDdXJzb3JQb3MuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRLZXkgPSBmdW5j
dGlvbihrZXkpIHsKKyAgICBpZiAoKHRoaXMuY3VycmVudEV2ZW50ICE9IG51bGwpKSB7CisgICAg
RE9NX2V2ZW50U2V0S2V5Q29kZSh0aGlzLmN1cnJlbnRFdmVudCwga2V5KTsKKyAgICB9CisgICAg
fTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0S2V5ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRL
ZXkuY2FsbC5hcHBseShfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRLZXksIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0
S2V5LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlw
ZS5zZXRLZXkuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnBy
b3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24obmFtZSkgeworICAgIERPTV9zZXRBdHRyaWJ1dGUo
dGhpcy5nZXRFbGVtZW50KCksICduYW1lJywgbmFtZSk7CisgICAgfTsKKyAgICBfX3VpX1RleHRC
b3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuc2V0TmFtZS5jYWxsLmFwcGx5KF9f
dWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnNldE5hbWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0TmFtZS51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuc2V0TmFtZS5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnNldFNl
bGVjdGlvblJhbmdlID0gZnVuY3Rpb24ocG9zLCBsZW5ndGgpIHsKKyAgICBpZiAoKGxlbmd0aCA8
IDApKSB7CisgICAgY29uc29sZS5lcnJvciggKCAnTGVuZ3RoIG11c3QgYmUgYSBwb3NpdGl2ZSBp
bnRlZ2VyLiBMZW5ndGg6ICcgKyBsZW5ndGggKSApOworICAgIH0KKyAgICBpZiAoKHBvcyA8IDAp
IHx8ICggKCBsZW5ndGggKyBwb3MgKSAgPiBweWpzbGliX2xlbih0aGlzLmdldFRleHQoKSkpKSB7
CisgICAgY29uc29sZS5lcnJvciggKCAgKCAgKCAgKCAgKCAnRnJvbSBJbmRleDogJyArIHBvcyAp
ICArICcgIFRvIEluZGV4OiAnICkgICsgICggcG9zICsgbGVuZ3RoICkgICkgICsgJyAgVGV4dCBM
ZW5ndGg6ICcgKSAgKyBweWpzbGliX2xlbih0aGlzLmdldFRleHQoKSkgKSApOworICAgIH0KKyAg
ICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCgpOworICAgIGVsZW1lbnQuc2V0U2VsZWN0
aW9uUmFuZ2UocG9zLCAgKCBwb3MgKyBsZW5ndGggKSApOworICAgIH07CisgICAgX191aV9UZXh0
Qm94QmFzZS5wcm90b3R5cGUuX19jbGFzc19fLnNldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRTZWxlY3Rp
b25SYW5nZS5jYWxsLmFwcGx5KF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnNldFNlbGVjdGlv
blJhbmdlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UZXh0Qm94QmFzZS5wcm90b3R5
cGUuX19jbGFzc19fLnNldFNlbGVjdGlvblJhbmdlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRTZWxlY3Rpb25SYW5nZS5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnNldFRleHQgPSBm
dW5jdGlvbih0ZXh0KSB7CisgICAgRE9NX3NldEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwg
J3ZhbHVlJywgdGV4dCk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5f
X2NsYXNzX18uc2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UZXh0
Qm94QmFzZS5wcm90b3R5cGUuc2V0VGV4dC5jYWxsLmFwcGx5KF9fdWlfVGV4dEJveEJhc2UucHJv
dG90eXBlLnNldFRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3hCYXNl
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGV4dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuc2V0VGV4dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLnNldFRleHRBbGlnbm1lbnQgPSBmdW5j
dGlvbihhbGlnbikgeworICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQo
KSwgJ3RleHRBbGlnbicsIGFsaWduKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRUZXh0QWxpZ25tZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5zZXRUZXh0QWxpZ25tZW50LmNhbGwu
YXBwbHkoX191aV9UZXh0Qm94QmFzZS5wcm90b3R5cGUuc2V0VGV4dEFsaWdubWVudCwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5z
ZXRUZXh0QWxpZ25tZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRCb3hC
YXNlLnByb3RvdHlwZS5zZXRUZXh0QWxpZ25tZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9
CitmdW5jdGlvbiBfX3VpX1RleHRCb3goKSB7Cit9CitmdW5jdGlvbiB1aV9UZXh0Qm94KCkgewor
ICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX1RleHRCb3goKTsKKyAgICBpZihpbnN0YW5jZS5f
X2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7Cisg
ICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfVGV4dEJveF9pbml0aWFs
aXplKCkgeworICAgIGlmKF9fdWlfVGV4dEJveC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47
CisgICAgX191aV9UZXh0Qm94Ll9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFf
X3VpX1RleHRCb3hCYXNlLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfVGV4dEJv
eEJhc2VfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfVGV4dEJveCwgX191aV9U
ZXh0Qm94QmFzZSk7CisgICAgX191aV9UZXh0Qm94LnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdf
XyA9IHVpX1RleHRCb3g7CisgICAgX191aV9UZXh0Qm94LnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1
bmN0aW9uKCkgeworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXyh0aGlzLCBET01fY3JlYXRlSW5wdXRUZXh0KCkpOworICAgIHRoaXMuc2V0U3R5bGVOYW1l
KCdnd3QtVGV4dEJveCcpOworICAgIH07CisgICAgX191aV9UZXh0Qm94LnByb3RvdHlwZS5fX2Ns
YXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGV4dEJv
eC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX1RleHRCb3gucHJvdG90eXBlLl9f
aW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UZXh0Qm94LnByb3RvdHlwZS5f
X2NsYXNzX18uX19pbml0X18udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJv
eC5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Rl
eHRCb3gucHJvdG90eXBlLmdldE1heExlbmd0aCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBE
T01fZ2V0SW50QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAnbWF4TGVuZ3RoJyk7CisgICAg
fTsKKyAgICBfX3VpX1RleHRCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRNYXhMZW5ndGggPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGV4dEJveC5wcm90b3R5cGUuZ2V0TWF4
TGVuZ3RoLmNhbGwuYXBwbHkoX191aV9UZXh0Qm94LnByb3RvdHlwZS5nZXRNYXhMZW5ndGgsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5n
ZXRNYXhMZW5ndGgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveC5wcm90
b3R5cGUuZ2V0TWF4TGVuZ3RoLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0
Qm94LnByb3RvdHlwZS5nZXRWaXNpYmxlTGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IERPTV9nZXRJbnRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdzaXplJyk7CisgICAgfTsK
KyAgICBfX3VpX1RleHRCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRWaXNpYmxlTGVuZ3RoID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RleHRCb3gucHJvdG90eXBlLmdldFZp
c2libGVMZW5ndGguY2FsbC5hcHBseShfX3VpX1RleHRCb3gucHJvdG90eXBlLmdldFZpc2libGVM
ZW5ndGgsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRCb3gucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRWaXNpYmxlTGVuZ3RoLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1RleHRCb3gucHJvdG90eXBlLmdldFZpc2libGVMZW5ndGguaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1RleHRCb3gucHJvdG90eXBlLnNldE1heExlbmd0aCA9IGZ1bmN0aW9uKGxl
bmd0aCkgeworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdtYXhM
ZW5ndGgnLCBsZW5ndGgpOworICAgIH07CisgICAgX191aV9UZXh0Qm94LnByb3RvdHlwZS5fX2Ns
YXNzX18uc2V0TWF4TGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1Rl
eHRCb3gucHJvdG90eXBlLnNldE1heExlbmd0aC5jYWxsLmFwcGx5KF9fdWlfVGV4dEJveC5wcm90
b3R5cGUuc2V0TWF4TGVuZ3RoLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UZXh0Qm94
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0TWF4TGVuZ3RoLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RleHRCb3gucHJvdG90eXBlLnNldE1heExlbmd0aC5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVGV4dEJveC5wcm90b3R5cGUuc2V0VmlzaWJsZUxlbmd0aCA9IGZ1
bmN0aW9uKGxlbmd0aCkgeworICAgIERPTV9zZXRJbnRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50
KCksICdzaXplJywgbGVuZ3RoKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEJveC5wcm90b3R5cGUu
X19jbGFzc19fLnNldFZpc2libGVMZW5ndGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVGV4dEJveC5wcm90b3R5cGUuc2V0VmlzaWJsZUxlbmd0aC5jYWxsLmFwcGx5KF9fdWlf
VGV4dEJveC5wcm90b3R5cGUuc2V0VmlzaWJsZUxlbmd0aCwgYXJndW1lbnRzKTsKKyAgICB9Owor
ICAgIF9fdWlfVGV4dEJveC5wcm90b3R5cGUuX19jbGFzc19fLnNldFZpc2libGVMZW5ndGgudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEJveC5wcm90b3R5cGUuc2V0VmlzaWJs
ZUxlbmd0aC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9QYXNzd29y
ZFRleHRCb3goKSB7Cit9CitmdW5jdGlvbiB1aV9QYXNzd29yZFRleHRCb3goKSB7CisgICAgdmFy
IGluc3RhbmNlID0gbmV3IF9fdWlfUGFzc3dvcmRUZXh0Qm94KCk7CisgICAgaWYoaW5zdGFuY2Uu
X19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOwor
ICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBfX3VpX1Bhc3N3b3JkVGV4dEJv
eF9pbml0aWFsaXplKCkgeworICAgIGlmKF9fdWlfUGFzc3dvcmRUZXh0Qm94Ll9fd2FzX2luaXRp
YWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1Bhc3N3b3JkVGV4dEJveC5fX3dhc19pbml0aWFs
aXplZF9fID0gdHJ1ZTsKKyAgICBpZighX191aV9UZXh0Qm94QmFzZS5fX3dhc19pbml0aWFsaXpl
ZF9fKQorICAgICAgICBfX3VpX1RleHRCb3hCYXNlX2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4
dGVuZChfX3VpX1Bhc3N3b3JkVGV4dEJveCwgX191aV9UZXh0Qm94QmFzZSk7CisgICAgX191aV9Q
YXNzd29yZFRleHRCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlfUGFzc3dvcmRU
ZXh0Qm94OworICAgIF9fdWlfUGFzc3dvcmRUZXh0Qm94LnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1
bmN0aW9uKCkgeworICAgIF9fdWlfVGV4dEJveEJhc2UucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXyh0aGlzLCBET01fY3JlYXRlSW5wdXRQYXNzd29yZCgpKTsKKyAgICB0aGlzLnNldFN0eWxl
TmFtZSgnZ3d0LVBhc3N3b3JkVGV4dEJveCcpOworICAgIH07CisgICAgX191aV9QYXNzd29yZFRl
eHRCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gX191aV9QYXNzd29yZFRleHRCb3gucHJvdG90eXBlLl9faW5pdF9fLmNhbGwuYXBw
bHkoX191aV9QYXNzd29yZFRleHRCb3gucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9QYXNzd29yZFRleHRCb3gucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9QYXNzd29yZFRleHRCb3gucHJv
dG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3Vp
X1RleHRBcmVhKCkgeworfQorZnVuY3Rpb24gdWlfVGV4dEFyZWEoKSB7CisgICAgdmFyIGluc3Rh
bmNlID0gbmV3IF9fdWlfVGV4dEFyZWEoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5z
dGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGlu
c3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfVGV4dEFyZWFfaW5pdGlhbGl6ZSgpIHsKKyAg
ICBpZihfX3VpX1RleHRBcmVhLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3Vp
X1RleHRBcmVhLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFfX3VpX1RleHRC
b3hCYXNlLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfVGV4dEJveEJhc2VfaW5p
dGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfVGV4dEFyZWEsIF9fdWlfVGV4dEJveEJh
c2UpOworICAgIF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gdWlf
VGV4dEFyZWE7CisgICAgX191aV9UZXh0QXJlYS5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlv
bigpIHsKKyAgICBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18o
dGhpcywgRE9NX2NyZWF0ZVRleHRBcmVhKCkpOworICAgIHRoaXMuc2V0U3R5bGVOYW1lKCdnd3Qt
VGV4dEFyZWEnKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UZXh0QXJlYS5w
cm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX1RleHRBcmVhLnByb3RvdHlwZS5fX2lu
aXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0QXJl
YS5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1Rl
eHRBcmVhLnByb3RvdHlwZS5nZXRDaGFyYWN0ZXJXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAnY29scycpOworICAg
IH07CisgICAgX191aV9UZXh0QXJlYS5wcm90b3R5cGUuX19jbGFzc19fLmdldENoYXJhY3Rlcldp
ZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RleHRBcmVhLnByb3RvdHlw
ZS5nZXRDaGFyYWN0ZXJXaWR0aC5jYWxsLmFwcGx5KF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLmdl
dENoYXJhY3RlcldpZHRoLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UZXh0QXJlYS5w
cm90b3R5cGUuX19jbGFzc19fLmdldENoYXJhY3RlcldpZHRoLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1RleHRBcmVhLnByb3RvdHlwZS5nZXRDaGFyYWN0ZXJXaWR0aC5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLmdldEN1cnNvclBv
cyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBfX3VpX1RleHRCb3hCYXNlLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0Q3Vyc29yUG9zKHRoaXMpOworICAgIH07CisgICAgX191aV9UZXh0QXJlYS5w
cm90b3R5cGUuX19jbGFzc19fLmdldEN1cnNvclBvcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9UZXh0QXJlYS5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9zLmNhbGwuYXBwbHkoX191
aV9UZXh0QXJlYS5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9zLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9UZXh0QXJlYS5wcm90b3R5cGUuX19jbGFzc19fLmdldEN1cnNvclBvcy51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0QXJlYS5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9z
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0QXJlYS5wcm90b3R5cGUuZ2V0
VmlzaWJsZUxpbmVzID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRJbnRBdHRyaWJ1
dGUodGhpcy5nZXRFbGVtZW50KCksICdyb3dzJyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRBcmVh
LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VmlzaWJsZUxpbmVzID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX1RleHRBcmVhLnByb3RvdHlwZS5nZXRWaXNpYmxlTGluZXMuY2FsbC5h
cHBseShfX3VpX1RleHRBcmVhLnByb3RvdHlwZS5nZXRWaXNpYmxlTGluZXMsIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX1RleHRBcmVhLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VmlzaWJs
ZUxpbmVzLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRBcmVhLnByb3RvdHlw
ZS5nZXRWaXNpYmxlTGluZXMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RleHRB
cmVhLnByb3RvdHlwZS5zZXRDaGFyYWN0ZXJXaWR0aCA9IGZ1bmN0aW9uKHdpZHRoKSB7CisgICAg
RE9NX3NldEludEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ2NvbHMnLCB3aWR0aCk7Cisg
ICAgfTsKKyAgICBfX3VpX1RleHRBcmVhLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q2hhcmFjdGVy
V2lkdGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVGV4dEFyZWEucHJvdG90
eXBlLnNldENoYXJhY3RlcldpZHRoLmNhbGwuYXBwbHkoX191aV9UZXh0QXJlYS5wcm90b3R5cGUu
c2V0Q2hhcmFjdGVyV2lkdGgsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RleHRBcmVh
LnByb3RvdHlwZS5fX2NsYXNzX18uc2V0Q2hhcmFjdGVyV2lkdGgudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLnNldENoYXJhY3RlcldpZHRoLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UZXh0QXJlYS5wcm90b3R5cGUuc2V0VmlzaWJs
ZUxpbmVzID0gZnVuY3Rpb24obGluZXMpIHsKKyAgICBET01fc2V0SW50QXR0cmlidXRlKHRoaXMu
Z2V0RWxlbWVudCgpLCAncm93cycsIGxpbmVzKTsKKyAgICB9OworICAgIF9fdWlfVGV4dEFyZWEu
cHJvdG90eXBlLl9fY2xhc3NfXy5zZXRWaXNpYmxlTGluZXMgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLnNldFZpc2libGVMaW5lcy5jYWxsLmFw
cGx5KF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLnNldFZpc2libGVMaW5lcywgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfVGV4dEFyZWEucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRWaXNpYmxl
TGluZXMudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVGV4dEFyZWEucHJvdG90eXBl
LnNldFZpc2libGVMaW5lcy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191
aV9UcmVlQ29udGVudFBhbmVsKCkgeworfQorZnVuY3Rpb24gdWlfVHJlZUNvbnRlbnRQYW5lbChl
bGVtZW50KSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfVHJlZUNvbnRlbnRQYW5lbCgp
OworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0
YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24g
X191aV9UcmVlQ29udGVudFBhbmVsX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9UcmVlQ29u
dGVudFBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX1RyZWVDb250
ZW50UGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfU2ltcGxl
UGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAgX191aV9TaW1wbGVQYW5lbF9pbml0
aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9UcmVlQ29udGVudFBhbmVsLCBfX3VpX1Np
bXBsZVBhbmVsKTsKKyAgICBfX3VpX1RyZWVDb250ZW50UGFuZWwucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX25ld19fID0gdWlfVHJlZUNvbnRlbnRQYW5lbDsKKyAgICBfX3VpX1RyZWVDb250ZW50UGFu
ZWwucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIF9fdWlfU2lt
cGxlUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlzLCBlbGVtZW50KTsKKyAg
ICB0aGlzLnRyZWVfaXRlbSA9IG51bGw7CisgICAgfTsKKyAgICBfX3VpX1RyZWVDb250ZW50UGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9UcmVlQ29udGVudFBhbmVsLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFwcGx5
KF9fdWlfVHJlZUNvbnRlbnRQYW5lbC5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX1RyZWVDb250ZW50UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5fX2lu
aXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlQ29udGVudFBhbmVsLnBy
b3RvdHlwZS5fX2luaXRfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUNv
bnRlbnRQYW5lbC5wcm90b3R5cGUuZ2V0VHJlZUl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy50cmVlX2l0ZW07CisgICAgfTsKKyAgICBfX3VpX1RyZWVDb250ZW50UGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5nZXRUcmVlSXRlbSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9UcmVlQ29udGVudFBhbmVsLnByb3RvdHlwZS5nZXRUcmVlSXRlbS5jYWxsLmFwcGx5
KF9fdWlfVHJlZUNvbnRlbnRQYW5lbC5wcm90b3R5cGUuZ2V0VHJlZUl0ZW0sIGFyZ3VtZW50cyk7
CisgICAgfTsKKyAgICBfX3VpX1RyZWVDb250ZW50UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5n
ZXRUcmVlSXRlbS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlQ29udGVudFBh
bmVsLnByb3RvdHlwZS5nZXRUcmVlSXRlbS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVHJlZUNvbnRlbnRQYW5lbC5wcm90b3R5cGUuc2V0VHJlZUl0ZW0gPSBmdW5jdGlvbih0cmVl
X2l0ZW0pIHsKKyAgICB0aGlzLnRyZWVfaXRlbSA9IHRyZWVfaXRlbTsKKyAgICB9OworICAgIF9f
dWlfVHJlZUNvbnRlbnRQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRyZWVJdGVtID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWVDb250ZW50UGFuZWwucHJvdG90eXBl
LnNldFRyZWVJdGVtLmNhbGwuYXBwbHkoX191aV9UcmVlQ29udGVudFBhbmVsLnByb3RvdHlwZS5z
ZXRUcmVlSXRlbSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZUNvbnRlbnRQYW5l
bC5wcm90b3R5cGUuX19jbGFzc19fLnNldFRyZWVJdGVtLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RyZWVDb250ZW50UGFuZWwucHJvdG90eXBlLnNldFRyZWVJdGVtLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlQ29udGVudFBhbmVsLnByb3RvdHlwZS5zZXRQ
YXJlbnQgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgZGly
ZWN0bHkgc2V0UGFyZW50IG9uIGEgV2lkZ2V0VHJlZUl0ZW1cJ3MgQ29udGVudFBhbmVsJyk7Cisg
ICAgfTsKKyAgICBfX3VpX1RyZWVDb250ZW50UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRQ
YXJlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZUNvbnRlbnRQYW5l
bC5wcm90b3R5cGUuc2V0UGFyZW50LmNhbGwuYXBwbHkoX191aV9UcmVlQ29udGVudFBhbmVsLnBy
b3RvdHlwZS5zZXRQYXJlbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVDb250
ZW50UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRQYXJlbnQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVHJlZUNvbnRlbnRQYW5lbC5wcm90b3R5cGUuc2V0UGFyZW50Lmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlQ29udGVudFBhbmVsLnByb3RvdHlwZS50
cmVlU2V0UGFyZW50ID0gZnVuY3Rpb24od2lkZ2V0KSB7CisgICAgX191aV9TaW1wbGVQYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLnNldFBhcmVudCh0aGlzLCB3aWRnZXQpOworICAgIH07CisgICAg
X191aV9UcmVlQ29udGVudFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18udHJlZVNldFBhcmVudCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlQ29udGVudFBhbmVsLnByb3Rv
dHlwZS50cmVlU2V0UGFyZW50LmNhbGwuYXBwbHkoX191aV9UcmVlQ29udGVudFBhbmVsLnByb3Rv
dHlwZS50cmVlU2V0UGFyZW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlQ29u
dGVudFBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18udHJlZVNldFBhcmVudC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9UcmVlQ29udGVudFBhbmVsLnByb3RvdHlwZS50cmVlU2V0UGFy
ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX1RyZWVJdGVtKCkg
eworfQorZnVuY3Rpb24gdWlfVHJlZUl0ZW0oaHRtbCkgeworICAgIGlmICh0eXBlb2YgaHRtbCA9
PSAndW5kZWZpbmVkJykgaHRtbD1udWxsOworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX1Ry
ZWVJdGVtKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFw
cGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCit1
aV9UcmVlSXRlbS5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBodG1sICkgewor
ICAgIGlmICh0eXBlb2YgaHRtbCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgaHRtbD1fX2t3YXJn
cy5odG1sOworICAgIHZhciBfX3IgPSBbaHRtbF07CisgICAgcmV0dXJuIF9fcjsKK307CitmdW5j
dGlvbiBfX3VpX1RyZWVJdGVtX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9UcmVlSXRlbS5f
X3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9UcmVlSXRlbS5fX3dhc19pbml0
aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBpZighX191aV9VSU9iamVjdC5fX3dhc19pbml0aWFsaXpl
ZF9fKQorICAgICAgICBfX3VpX1VJT2JqZWN0X2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVu
ZChfX3VpX1RyZWVJdGVtLCBfX3VpX1VJT2JqZWN0KTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX1RyZWVJdGVtOworICAgIF9fdWlfVHJlZUl0ZW0u
cHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oaHRtbCkgeworICAgIGlmICh0eXBlb2YgaHRt
bCA9PSAndW5kZWZpbmVkJykgaHRtbD1udWxsOworICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgcHlq
c2xpYl9MaXN0KFtdKTsKKyAgICB0aGlzLmNvbnRlbnRQYW5lbCA9IG51bGw7CisgICAgdGhpcy5p
dGVtVGFibGUgPSBudWxsOworICAgIHRoaXMuY29udGVudEVsZW0gPSBudWxsOworICAgIHRoaXMu
aW1nRWxlbSA9IG51bGw7CisgICAgdGhpcy5jaGlsZFNwYW5FbGVtID0gbnVsbDsKKyAgICB0aGlz
Lm9wZW4gPSBmYWxzZTsKKyAgICB0aGlzLnBhcmVudCA9IG51bGw7CisgICAgdGhpcy5zZWxlY3Rl
ZCA9IGZhbHNlOworICAgIHRoaXMudHJlZSA9IG51bGw7CisgICAgdGhpcy51c2VyT2JqZWN0ID0g
bnVsbDsKKyAgICB0aGlzLnNldEVsZW1lbnQoRE9NX2NyZWF0ZURpdigpKTsKKyAgICB0aGlzLml0
ZW1UYWJsZSA9IERPTV9jcmVhdGVUYWJsZSgpOworICAgIHRoaXMuY29udGVudEVsZW0gPSBET01f
Y3JlYXRlU3BhbigpOworICAgIHRoaXMuY2hpbGRTcGFuRWxlbSA9IERPTV9jcmVhdGVTcGFuKCk7
CisgICAgdGhpcy5pbWdFbGVtID0gRE9NX2NyZWF0ZUltZygpOworICAgIHZhciB0Ym9keSA9IERP
TV9jcmVhdGVUQm9keSgpOworICAgIHZhciB0ciA9IERPTV9jcmVhdGVUUigpOworICAgIHZhciB0
ZEltZyA9IERPTV9jcmVhdGVURCgpOworICAgIHZhciB0ZENvbnRlbnQgPSBET01fY3JlYXRlVEQo
KTsKKyAgICBET01fYXBwZW5kQ2hpbGQodGhpcy5pdGVtVGFibGUsIHRib2R5KTsKKyAgICBET01f
YXBwZW5kQ2hpbGQodGJvZHksIHRyKTsKKyAgICBET01fYXBwZW5kQ2hpbGQodHIsIHRkSW1nKTsK
KyAgICBET01fYXBwZW5kQ2hpbGQodHIsIHRkQ29udGVudCk7CisgICAgRE9NX3NldFN0eWxlQXR0
cmlidXRlKHRkSW1nLCAndmVydGljYWxBbGlnbicsICdtaWRkbGUnKTsKKyAgICBET01fc2V0U3R5
bGVBdHRyaWJ1dGUodGRDb250ZW50LCAndmVydGljYWxBbGlnbicsICdtaWRkbGUnKTsKKyAgICBE
T01fYXBwZW5kQ2hpbGQodGhpcy5nZXRFbGVtZW50KCksIHRoaXMuaXRlbVRhYmxlKTsKKyAgICBE
T01fYXBwZW5kQ2hpbGQodGhpcy5nZXRFbGVtZW50KCksIHRoaXMuY2hpbGRTcGFuRWxlbSk7Cisg
ICAgRE9NX2FwcGVuZENoaWxkKHRkSW1nLCB0aGlzLmltZ0VsZW0pOworICAgIERPTV9hcHBlbmRD
aGlsZCh0ZENvbnRlbnQsIHRoaXMuY29udGVudEVsZW0pOworICAgIERPTV9zZXRBdHRyaWJ1dGUo
dGhpcy5nZXRFbGVtZW50KCksICdwb3NpdGlvbicsICdyZWxhdGl2ZScpOworICAgIERPTV9zZXRT
dHlsZUF0dHJpYnV0ZSh0aGlzLmNvbnRlbnRFbGVtLCAnZGlzcGxheScsICdpbmxpbmUnKTsKKyAg
ICBET01fc2V0U3R5bGVBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICd3aGl0ZVNwYWNlJywg
J25vd3JhcCcpOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5pdGVtVGFibGUsICd3aGl0ZVNw
YWNlJywgJ25vd3JhcCcpOworICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0aGlzLmNoaWxkU3Bh
bkVsZW0sICd3aGl0ZVNwYWNlJywgJ25vd3JhcCcpOworICAgIHRoaXMuc2V0U3R5bGVOYW1lKHRo
aXMuY29udGVudEVsZW0sICdnd3QtVHJlZUl0ZW0nLCB0cnVlKTsKKyAgICBpZiAoKGh0bWwgIT0g
bnVsbCkpIHsKKyAgICBpZiAocHlqc2xpYl9pc1N0cmluZyhodG1sKSkgeworICAgIHRoaXMuc2V0
SFRNTChodG1sKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgdGhpcy5zZXRXaWRnZXQoaHRtbCk7
CisgICAgfQorICAgIH0KKyAgICB9OworX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19pbml0X18u
cGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgaHRtbCApIHsKKyAgICBpZiAodHlw
ZW9mIGh0bWwgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIGh0bWw9X19rd2FyZ3MuaHRtbDsKKyAg
ICB2YXIgX19yID0gW2h0bWxdOworICAgIHJldHVybiBfX3I7Cit9OworICAgIF9fdWlfVHJlZUl0
ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX1Ry
ZWVJdGVtLnByb3RvdHlwZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
VHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18u
cGFyc2Vfa3dhcmdzID0gX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19pbml0X18ucGFyc2Vfa3dh
cmdzOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmFkZEl0ZW0gPSBmdW5jdGlvbihpdGVt
KSB7CisgICAgaWYgKCEocHlqc2xpYl9oYXNhdHRyKGl0ZW0sICdnZXRUcmVlJykpKSB7CisgICAg
dmFyIGl0ZW0gPSB1aV9UcmVlSXRlbShpdGVtKTsKKyAgICB9CisgICAgaWYgKChpdGVtLmdldFBh
cmVudEl0ZW0oKSAhPSBudWxsKSB8fCAoaXRlbS5nZXRUcmVlKCkgIT0gbnVsbCkpIHsKKyAgICBp
dGVtLnJlbW92ZSgpOworICAgIH0KKyAgICBpdGVtLnNldFRyZWUodGhpcy50cmVlKTsKKyAgICBp
dGVtLnNldFBhcmVudEl0ZW0odGhpcyk7CisgICAgdGhpcy5jaGlsZHJlbi5hcHBlbmQoaXRlbSk7
CisgICAgRE9NX3NldFN0eWxlQXR0cmlidXRlKGl0ZW0uZ2V0RWxlbWVudCgpLCAnbWFyZ2luTGVm
dCcsICAoIDE2ICsgJ3B4JyApICk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRoaXMuY2hpbGRTcGFu
RWxlbSwgaXRlbS5nZXRFbGVtZW50KCkpOworICAgIGlmICgocHlqc2xpYl9sZW4odGhpcy5jaGls
ZHJlbikgPT0gMSkpIHsKKyAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7CisgICAgfQorICAgIHJldHVy
biBpdGVtOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmFk
ZEl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZUl0ZW0ucHJvdG90
eXBlLmFkZEl0ZW0uY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5hZGRJdGVtLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19f
LmFkZEl0ZW0udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90
eXBlLmFkZEl0ZW0uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnBy
b3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKChpbmRleCA8IDAp
IHx8IChpbmRleCA+PSBweWpzbGliX2xlbih0aGlzLmNoaWxkcmVuKSkpIHsKKyAgICByZXR1cm47
CisgICAgfQorICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLl9fZ2V0aXRlbV9fKGluZGV4KTsKKyAg
ICB9OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDaGlsZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Q2hp
bGQuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRDaGlsZCwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDaGls
ZC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0
Q2hpbGQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlw
ZS5nZXRDaGlsZENvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHB5anNsaWJfbGVuKHRo
aXMuY2hpbGRyZW4pOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFz
c19fLmdldENoaWxkQ291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJl
ZUl0ZW0ucHJvdG90eXBlLmdldENoaWxkQ291bnQuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnBy
b3RvdHlwZS5nZXRDaGlsZENvdW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVl
SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdldENoaWxkQ291bnQudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdldENoaWxkQ291bnQuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRDaGlsZEluZGV4
ID0gZnVuY3Rpb24oY2hpbGQpIHsKKyAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5pbmRleChjaGls
ZCk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q2hp
bGRJbmRleCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRlbS5wcm90
b3R5cGUuZ2V0Q2hpbGRJbmRleC5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdl
dENoaWxkSW5kZXgsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0Q2hpbGRJbmRleC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdldEhUTUwgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gRE9NX2dldElubmVySFRNTCh0aGlzLmNvbnRlbnRFbGVtKTsKKyAgICB9Owor
ICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRIVE1MID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRIVE1MLmNhbGwu
YXBwbHkoX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0SFRNTCwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRIVE1MLnVuYm91bmRf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRIVE1MLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0VGV4dCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0SW5uZXJUZXh0KHRoaXMuY29udGVudEVs
ZW0pOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdldFRl
eHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBl
LmdldFRleHQuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRUZXh0LCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdl
dFRleHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBl
LmdldFRleHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5nZXRQYXJlbnRJdGVtID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucGFyZW50
OworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdldFBhcmVu
dEl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZUl0ZW0ucHJvdG90
eXBlLmdldFBhcmVudEl0ZW0uY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRQ
YXJlbnRJdGVtLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5
cGUuX19jbGFzc19fLmdldFBhcmVudEl0ZW0udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdldFBhcmVudEl0ZW0uaW5zdGFuY2VfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB0aGlzLm9wZW47CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlw
ZS5fX2NsYXNzX18uZ2V0U3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
VHJlZUl0ZW0ucHJvdG90eXBlLmdldFN0YXRlLmNhbGwuYXBwbHkoX191aV9UcmVlSXRlbS5wcm90
b3R5cGUuZ2V0U3RhdGUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0U3RhdGUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdldFN0YXRlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0VHJlZSA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLnRyZWU7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2Ns
YXNzX18uZ2V0VHJlZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRl
bS5wcm90b3R5cGUuZ2V0VHJlZS5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdl
dFRyZWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0VHJlZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRl
bS5wcm90b3R5cGUuZ2V0VHJlZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJl
ZUl0ZW0ucHJvdG90eXBlLmdldFVzZXJPYmplY3QgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy51c2VyT2JqZWN0OworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19j
bGFzc19fLmdldFVzZXJPYmplY3QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
VHJlZUl0ZW0ucHJvdG90eXBlLmdldFVzZXJPYmplY3QuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVt
LnByb3RvdHlwZS5nZXRVc2VyT2JqZWN0LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9U
cmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdldFVzZXJPYmplY3QudW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdldFVzZXJPYmplY3QuaW5zdGFu
Y2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRXaWRnZXQg
PSBmdW5jdGlvbigpIHsKKyAgICBpZiAoKHRoaXMuY29udGVudFBhbmVsID09IG51bGwpKSB7Cisg
ICAgcmV0dXJuOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5jb250ZW50UGFuZWwuZ2V0V2lkZ2V0
KCk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0V2lk
Z2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWVJdGVtLnByb3RvdHlw
ZS5nZXRXaWRnZXQuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRXaWRnZXQs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNz
X18uZ2V0V2lkZ2V0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnBy
b3RvdHlwZS5nZXRXaWRnZXQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJ
dGVtLnByb3RvdHlwZS5pc1NlbGVjdGVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMu
c2VsZWN0ZWQ7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18u
aXNTZWxlY3RlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRlbS5w
cm90b3R5cGUuaXNTZWxlY3RlZC5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmlz
U2VsZWN0ZWQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlw
ZS5fX2NsYXNzX18uaXNTZWxlY3RlZC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9U
cmVlSXRlbS5wcm90b3R5cGUuaXNTZWxlY3RlZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICgo
dGhpcy5wYXJlbnQgIT0gbnVsbCkpIHsKKyAgICB0aGlzLnBhcmVudC5yZW1vdmVJdGVtKHRoaXMp
OworICAgIH0KKyAgICBlbHNlIGlmICgodGhpcy50cmVlICE9IG51bGwpKSB7CisgICAgdGhpcy50
cmVlLnJlbW92ZUl0ZW0odGhpcyk7CisgICAgfQorICAgIH07CisgICAgX191aV9UcmVlSXRlbS5w
cm90b3R5cGUuX19jbGFzc19fLnJlbW92ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9UcmVlSXRlbS5wcm90b3R5cGUucmVtb3ZlLmNhbGwuYXBwbHkoX191aV9UcmVlSXRlbS5w
cm90b3R5cGUucmVtb3ZlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5w
cm90b3R5cGUuX19jbGFzc19fLnJlbW92ZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9UcmVlSXRlbS5wcm90b3R5cGUucmVtb3ZlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9UcmVlSXRlbS5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAg
ICBpZiAoIXRoaXMuY2hpbGRyZW4uX19jb250YWluc19fKGl0ZW0pKSB7CisgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpdGVtLnNldFRyZWUobnVsbCk7CisgICAgaXRlbS5zZXRQYXJlbnRJdGVtKG51
bGwpOworICAgIHRoaXMuY2hpbGRyZW4ucmVtb3ZlKGl0ZW0pOworICAgIERPTV9yZW1vdmVDaGls
ZCh0aGlzLmNoaWxkU3BhbkVsZW0sIGl0ZW0uZ2V0RWxlbWVudCgpKTsKKyAgICBpZiAoKHB5anNs
aWJfbGVuKHRoaXMuY2hpbGRyZW4pID09IDApKSB7CisgICAgdGhpcy51cGRhdGVTdGF0ZSgpOwor
ICAgIH0KKyAgICB9OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1v
dmVJdGVtID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5yZW1vdmVJdGVtLmNhbGwuYXBwbHkoX191aV9UcmVlSXRlbS5wcm90b3R5cGUucmVtb3Zl
SXRlbSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9f
Y2xhc3NfXy5yZW1vdmVJdGVtLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJ
dGVtLnByb3RvdHlwZS5yZW1vdmVJdGVtLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9UcmVlSXRlbS5wcm90b3R5cGUucmVtb3ZlSXRlbXMgPSBmdW5jdGlvbigpIHsKKyAgICB3aGls
ZSAoKHRoaXMuZ2V0Q2hpbGRDb3VudCgpID4gMCkpIHsKKyAgICB0aGlzLnJlbW92ZUl0ZW0odGhp
cy5nZXRDaGlsZCgwKSk7CisgICAgfQorICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5
cGUuX19jbGFzc19fLnJlbW92ZUl0ZW1zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX1RyZWVJdGVtLnByb3RvdHlwZS5yZW1vdmVJdGVtcy5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0
ZW0ucHJvdG90eXBlLnJlbW92ZUl0ZW1zLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9U
cmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUl0ZW1zLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5yZW1vdmVJdGVtcy5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLnNldEhUTUwgPSBmdW5j
dGlvbihodG1sKSB7CisgICAgdGhpcy5jbGVhckNvbnRlbnRQYW5lbCgpOworICAgIERPTV9zZXRJ
bm5lckhUTUwodGhpcy5jb250ZW50RWxlbSwgaHRtbCk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJ
dGVtLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0SFRNTCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9UcmVlSXRlbS5wcm90b3R5cGUuc2V0SFRNTC5jYWxsLmFwcGx5KF9fdWlfVHJl
ZUl0ZW0ucHJvdG90eXBlLnNldEhUTUwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1Ry
ZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0SFRNTC51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuc2V0SFRNTC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0
KSB7CisgICAgdGhpcy5jbGVhckNvbnRlbnRQYW5lbCgpOworICAgIERPTV9zZXRJbm5lclRleHQo
dGhpcy5jb250ZW50RWxlbSwgdGV4dCk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5fX2NsYXNzX18uc2V0VGV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9UcmVlSXRlbS5wcm90b3R5cGUuc2V0VGV4dC5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0ZW0ucHJv
dG90eXBlLnNldFRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnBy
b3RvdHlwZS5fX2NsYXNzX18uc2V0VGV4dC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9UcmVlSXRlbS5wcm90b3R5cGUuc2V0VGV4dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLnNldFNlbGVjdGVkID0gZnVuY3Rpb24oc2VsZWN0ZWQp
IHsKKyAgICBpZiAoKHRoaXMuc2VsZWN0ZWQgPT0gc2VsZWN0ZWQpKSB7CisgICAgcmV0dXJuOwor
ICAgIH0KKyAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7CisgICAgdGhpcy5zZXRTdHlsZU5h
bWUodGhpcy5jb250ZW50RWxlbSwgJ2d3dC1UcmVlSXRlbS1zZWxlY3RlZCcsIHNlbGVjdGVkKTsK
KyAgICB9OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRTZWxlY3Rl
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRlbS5wcm90b3R5cGUu
c2V0U2VsZWN0ZWQuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5zZXRTZWxlY3Rl
ZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRTZWxlY3RlZC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRl
bS5wcm90b3R5cGUuc2V0U2VsZWN0ZWQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1RyZWVJdGVtLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uKG9wZW4sIGZpcmVFdmVudHMp
IHsKKyAgICBpZiAodHlwZW9mIGZpcmVFdmVudHMgPT0gJ3VuZGVmaW5lZCcpIGZpcmVFdmVudHM9
dHJ1ZTsKKyAgICBpZiAob3BlbiAmJiAocHlqc2xpYl9sZW4odGhpcy5jaGlsZHJlbikgPT0gMCkp
IHsKKyAgICByZXR1cm47CisgICAgfQorICAgIHRoaXMub3BlbiA9IG9wZW47CisgICAgdGhpcy51
cGRhdGVTdGF0ZSgpOworICAgIGlmIChmaXJlRXZlbnRzKSB7CisgICAgdGhpcy50cmVlLmZpcmVT
dGF0ZUNoYW5nZWQodGhpcyk7CisgICAgfQorICAgIH07CitfX3VpX1RyZWVJdGVtLnByb3RvdHlw
ZS5zZXRTdGF0ZS5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBvcGVuLCBmaXJl
RXZlbnRzICkgeworICAgIGlmICh0eXBlb2YgZmlyZUV2ZW50cyA9PSAndW5kZWZpbmVkJykKKyAg
ICAgICAgZmlyZUV2ZW50cz1fX2t3YXJncy5maXJlRXZlbnRzOworICAgIHZhciBfX3IgPSBbb3Bl
biwgZmlyZUV2ZW50c107CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9UcmVlSXRlbS5w
cm90b3R5cGUuX19jbGFzc19fLnNldFN0YXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5zZXRTdGF0ZS5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0
ZW0ucHJvdG90eXBlLnNldFN0YXRlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVl
SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnNldFN0YXRlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5zZXRTdGF0ZS5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRTdGF0ZS5wYXJz
ZV9rd2FyZ3MgPSBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5zZXRTdGF0ZS5wYXJzZV9rd2FyZ3M7
CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuc2V0VXNlck9iamVjdCA9IGZ1bmN0aW9uKHVz
ZXJPYmopIHsKKyAgICB0aGlzLnVzZXJPYmplY3QgPSB1c2VyT2JqOworICAgIH07CisgICAgX191
aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnNldFVzZXJPYmplY3QgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLnNldFVzZXJPYmplY3Qu
Y2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5zZXRVc2VyT2JqZWN0LCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnNldFVz
ZXJPYmplY3QudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90
eXBlLnNldFVzZXJPYmplY3QuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJ
dGVtLnByb3RvdHlwZS5zZXRXaWRnZXQgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICB0aGlzLmVu
c3VyZUNvbnRlbnRQYW5lbCgpOworICAgIHRoaXMuY29udGVudFBhbmVsLnNldFdpZGdldCh3aWRn
ZXQpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnNldFdp
ZGdldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRlbS5wcm90b3R5
cGUuc2V0V2lkZ2V0LmNhbGwuYXBwbHkoX191aV9UcmVlSXRlbS5wcm90b3R5cGUuc2V0V2lkZ2V0
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFz
c19fLnNldFdpZGdldC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5w
cm90b3R5cGUuc2V0V2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVl
SXRlbS5wcm90b3R5cGUuY2xlYXJDb250ZW50UGFuZWwgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAo
KHRoaXMuY29udGVudFBhbmVsICE9IG51bGwpKSB7CisgICAgdmFyIGNoaWxkID0gdGhpcy5jb250
ZW50UGFuZWwuZ2V0V2lkZ2V0KCk7CisgICAgaWYgKChjaGlsZCAhPSBudWxsKSkgeworICAgIHRo
aXMuY29udGVudFBhbmVsLnJlbW92ZShjaGlsZCk7CisgICAgfQorICAgIGlmICgodGhpcy50cmVl
ICE9IG51bGwpKSB7CisgICAgdGhpcy50cmVlLmRpc293bih0aGlzLmNvbnRlbnRQYW5lbCk7Cisg
ICAgdGhpcy5jb250ZW50UGFuZWwgPSBudWxsOworICAgIH0KKyAgICB9CisgICAgfTsKKyAgICBf
X3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uY2xlYXJDb250ZW50UGFuZWwgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmNsZWFyQ29u
dGVudFBhbmVsLmNhbGwuYXBwbHkoX191aV9UcmVlSXRlbS5wcm90b3R5cGUuY2xlYXJDb250ZW50
UGFuZWwsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5f
X2NsYXNzX18uY2xlYXJDb250ZW50UGFuZWwudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfVHJlZUl0ZW0ucHJvdG90eXBlLmNsZWFyQ29udGVudFBhbmVsLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZW5zdXJlQ29udGVudFBhbmVsID0g
ZnVuY3Rpb24oKSB7CisgICAgaWYgKCh0aGlzLmNvbnRlbnRQYW5lbCA9PSBudWxsKSkgeworICAg
IERPTV9zZXRJbm5lckhUTUwodGhpcy5jb250ZW50RWxlbSwgJycpOworICAgIHRoaXMuY29udGVu
dFBhbmVsID0gdWlfVHJlZUNvbnRlbnRQYW5lbCh0aGlzLmNvbnRlbnRFbGVtKTsKKyAgICB0aGlz
LmNvbnRlbnRQYW5lbC5zZXRUcmVlSXRlbSh0aGlzKTsKKyAgICBpZiAoKHRoaXMuZ2V0VHJlZSgp
ICE9IG51bGwpKSB7CisgICAgdGhpcy50cmVlLmFkb3B0KHRoaXMuY29udGVudFBhbmVsKTsKKyAg
ICB9CisgICAgfQorICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19f
LmVuc3VyZUNvbnRlbnRQYW5lbCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9U
cmVlSXRlbS5wcm90b3R5cGUuZW5zdXJlQ29udGVudFBhbmVsLmNhbGwuYXBwbHkoX191aV9UcmVl
SXRlbS5wcm90b3R5cGUuZW5zdXJlQ29udGVudFBhbmVsLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmVuc3VyZUNvbnRlbnRQYW5lbC51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZW5zdXJl
Q29udGVudFBhbmVsLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5w
cm90b3R5cGUuYWRkVHJlZUl0ZW1zID0gZnVuY3Rpb24oYWNjdW0pIHsKKworICAgICAgICB2YXIg
X19pdGVtID0gdGhpcy5jaGlsZHJlbi5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IF9faXRlbS5u
ZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGFjY3VtLmFwcGVuZChpdGVt
KTsKKyAgICBpdGVtLmFkZFRyZWVJdGVtcyhhY2N1bSk7CisKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgewor
ICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkVHJl
ZUl0ZW1zID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5hZGRUcmVlSXRlbXMuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5hZGRU
cmVlSXRlbXMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlw
ZS5fX2NsYXNzX18uYWRkVHJlZUl0ZW1zLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1RyZWVJdGVtLnByb3RvdHlwZS5hZGRUcmVlSXRlbXMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB0aGlzLmNoaWxkcmVuOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90
b3R5cGUuX19jbGFzc19fLmdldENoaWxkcmVuID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRDaGlsZHJlbi5jYWxsLmFwcGx5KF9fdWlfVHJl
ZUl0ZW0ucHJvdG90eXBlLmdldENoaWxkcmVuLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdldENoaWxkcmVuLnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRDaGlsZHJlbi5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdldENvbnRlbnRF
bGVtID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuY29udGVudEVsZW07CisgICAgfTsK
KyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q29udGVudEVsZW0gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdldENv
bnRlbnRFbGVtLmNhbGwuYXBwbHkoX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Q29udGVudEVs
ZW0sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2Ns
YXNzX18uZ2V0Q29udGVudEVsZW0udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJl
ZUl0ZW0ucHJvdG90eXBlLmdldENvbnRlbnRFbGVtLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Q29udGVudEhlaWdodCA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiBET01fZ2V0SW50QXR0cmlidXRlKHRoaXMuaXRlbVRhYmxlLCAnb2Zmc2V0
SGVpZ2h0Jyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18u
Z2V0Q29udGVudEhlaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVl
SXRlbS5wcm90b3R5cGUuZ2V0Q29udGVudEhlaWdodC5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0ZW0u
cHJvdG90eXBlLmdldENvbnRlbnRIZWlnaHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0Q29udGVudEhlaWdodC51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Q29udGVudEhlaWdo
dC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLmdl
dEltYWdlRWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmltZ0VsZW07Cisg
ICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0SW1hZ2VFbGVt
ZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWVJdGVtLnByb3RvdHlw
ZS5nZXRJbWFnZUVsZW1lbnQuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRJ
bWFnZUVsZW1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0SW1hZ2VFbGVtZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRJbWFnZUVsZW1lbnQuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRUcmVlVG9wID0gZnVuY3Rp
b24oKSB7CisgICAgdmFyIGl0ZW0gPSB0aGlzOworICAgIHZhciByZXQgPSAwOworICAgIHdoaWxl
ICgoaXRlbSAhPSBudWxsKSkgeworICAgIHJldCArPSBET01fZ2V0SW50QXR0cmlidXRlKGl0ZW0u
Z2V0RWxlbWVudCgpLCAnb2Zmc2V0VG9wJyk7CisgICAgdmFyIGl0ZW0gPSBpdGVtLmdldFBhcmVu
dEl0ZW0oKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIF9fdWlfVHJlZUl0
ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUcmVlVG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRUcmVlVG9wLmNhbGwuYXBwbHkoX191
aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0VHJlZVRvcCwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUcmVlVG9wLnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5nZXRUcmVlVG9wLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Rm9jdXNh
YmxlV2lkZ2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHdpZGdldCA9IHRoaXMuZ2V0V2lkZ2V0
KCk7CisgICAgaWYgKHB5anNsaWJfaGFzYXR0cih3aWRnZXQsICdzZXRGb2N1cycpKSB7CisgICAg
cmV0dXJuIHdpZGdldDsKKyAgICB9CisgICAgcmV0dXJuOworICAgIH07CisgICAgX191aV9UcmVl
SXRlbS5wcm90b3R5cGUuX19jbGFzc19fLmdldEZvY3VzYWJsZVdpZGdldCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Rm9jdXNhYmxlV2lk
Z2V0LmNhbGwuYXBwbHkoX191aV9UcmVlSXRlbS5wcm90b3R5cGUuZ2V0Rm9jdXNhYmxlV2lkZ2V0
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFz
c19fLmdldEZvY3VzYWJsZVdpZGdldC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9U
cmVlSXRlbS5wcm90b3R5cGUuZ2V0Rm9jdXNhYmxlV2lkZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuaW1nU3JjID0gZnVuY3Rpb24oaW1nKSB7
CisgICAgaWYgKCh0aGlzLnRyZWUgPT0gbnVsbCkpIHsKKyAgICByZXR1cm4gaW1nOworICAgIH0K
KyAgICB2YXIgc3JjID0gICggdGhpcy50cmVlLmdldEltYWdlQmFzZSgpICsgaW1nICkgOworICAg
IHJldHVybiBzcmM7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNz
X18uaW1nU3JjID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWVJdGVtLnBy
b3RvdHlwZS5pbWdTcmMuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5pbWdTcmMs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNz
X18uaW1nU3JjLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3Rv
dHlwZS5pbWdTcmMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnBy
b3RvdHlwZS5zZXRQYXJlbnRJdGVtID0gZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdGhpcy5wYXJl
bnQgPSBwYXJlbnQ7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNz
X18uc2V0UGFyZW50SXRlbSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVl
SXRlbS5wcm90b3R5cGUuc2V0UGFyZW50SXRlbS5jYWxsLmFwcGx5KF9fdWlfVHJlZUl0ZW0ucHJv
dG90eXBlLnNldFBhcmVudEl0ZW0sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWVJ
dGVtLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0UGFyZW50SXRlbS51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUuc2V0UGFyZW50SXRlbS5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLnNldFRyZWUgPSBmdW5j
dGlvbih0cmVlKSB7CisgICAgaWYgKCh0aGlzLnRyZWUgPT0gdHJlZSkpIHsKKyAgICByZXR1cm47
CisgICAgfQorICAgIGlmICgodGhpcy50cmVlICE9IG51bGwpKSB7CisgICAgaWYgKCh0aGlzLnRy
ZWUuZ2V0U2VsZWN0ZWRJdGVtKCkgPT0gdGhpcykpIHsKKyAgICB0aGlzLnRyZWUuc2V0U2VsZWN0
ZWRJdGVtKG51bGwpOworICAgIH0KKyAgICBpZiAoKHRoaXMuY29udGVudFBhbmVsICE9IG51bGwp
KSB7CisgICAgdGhpcy50cmVlLmRpc293bih0aGlzLmNvbnRlbnRQYW5lbCk7CisgICAgfQorICAg
IH0KKyAgICB0aGlzLnRyZWUgPSB0cmVlOworCisgICAgICAgIHZhciBfX2NoaWxkID0gdGhpcy5j
aGlsZHJlbi5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBfX2NoaWxkLm5leHQoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgCisgICAgY2hpbGQuc2V0VHJlZSh0cmVlKTsKKworICAgICAg
ICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9w
SXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7CisgICAgaWYgKCh0cmVl
ICE9IG51bGwpICYmICh0aGlzLmNvbnRlbnRQYW5lbCAhPSBudWxsKSkgeworICAgIHRyZWUuYWRv
cHQodGhpcy5jb250ZW50UGFuZWwpOworICAgIH0KKyAgICB9OworICAgIF9fdWlfVHJlZUl0ZW0u
cHJvdG90eXBlLl9fY2xhc3NfXy5zZXRUcmVlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5zZXRUcmVlLmNhbGwuYXBwbHkoX191aV9UcmVlSXRl
bS5wcm90b3R5cGUuc2V0VHJlZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZUl0
ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRUcmVlLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS5zZXRUcmVlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUudXBkYXRlU3RhdGUgPSBmdW5jdGlvbigpIHsK
KyAgICBpZiAoKHB5anNsaWJfbGVuKHRoaXMuY2hpbGRyZW4pID09IDApKSB7CisgICAgdGhpcy5z
ZXRWaXNpYmxlKHRoaXMuY2hpbGRTcGFuRWxlbSwgZmFsc2UpOworICAgIERPTV9zZXRBdHRyaWJ1
dGUodGhpcy5pbWdFbGVtLCAnc3JjJywgdGhpcy5pbWdTcmMoJ3RyZWVfd2hpdGUuZ2lmJykpOwor
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRoaXMub3BlbikgeworICAgIHRoaXMuc2V0Vmlz
aWJsZSh0aGlzLmNoaWxkU3BhbkVsZW0sIHRydWUpOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhp
cy5pbWdFbGVtLCAnc3JjJywgdGhpcy5pbWdTcmMoJ3RyZWVfb3Blbi5naWYnKSk7CisgICAgfQor
ICAgIGVsc2UgeworICAgIHRoaXMuc2V0VmlzaWJsZSh0aGlzLmNoaWxkU3BhbkVsZW0sIGZhbHNl
KTsKKyAgICBET01fc2V0QXR0cmlidXRlKHRoaXMuaW1nRWxlbSwgJ3NyYycsIHRoaXMuaW1nU3Jj
KCd0cmVlX2Nsb3NlZC5naWYnKSk7CisgICAgfQorICAgIH07CisgICAgX191aV9UcmVlSXRlbS5w
cm90b3R5cGUuX19jbGFzc19fLnVwZGF0ZVN0YXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS51cGRhdGVTdGF0ZS5jYWxsLmFwcGx5KF9fdWlf
VHJlZUl0ZW0ucHJvdG90eXBlLnVwZGF0ZVN0YXRlLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9UcmVlSXRlbS5wcm90b3R5cGUuX19jbGFzc19fLnVwZGF0ZVN0YXRlLnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWVJdGVtLnByb3RvdHlwZS51cGRhdGVTdGF0ZS5pbnN0
YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLnVwZGF0ZVN0
YXRlUmVjdXJzaXZlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy51cGRhdGVTdGF0ZSgpOworCisg
ICAgICAgIHZhciBfX2kgPSBweWpzbGliX3JhbmdlKHB5anNsaWJfbGVuKHRoaXMuY2hpbGRyZW4p
KS5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgaSA9IF9faS5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIAorICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW4uX19nZXRpdGVtX18oaSk7Cisg
ICAgY2hpbGQudXBkYXRlU3RhdGVSZWN1cnNpdmUoKTsKKworICAgICAgICAgICAgfQorICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICB9OworICAgIF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy51cGRhdGVT
dGF0ZVJlY3Vyc2l2ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlSXRl
bS5wcm90b3R5cGUudXBkYXRlU3RhdGVSZWN1cnNpdmUuY2FsbC5hcHBseShfX3VpX1RyZWVJdGVt
LnByb3RvdHlwZS51cGRhdGVTdGF0ZVJlY3Vyc2l2ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfVHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy51cGRhdGVTdGF0ZVJlY3Vyc2l2ZS51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlSXRlbS5wcm90b3R5cGUudXBkYXRl
U3RhdGVSZWN1cnNpdmUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlf
Um9vdFRyZWVJdGVtKCkgeworfQorZnVuY3Rpb24gdWlfUm9vdFRyZWVJdGVtKCkgeworICAgIHZh
ciBpbnN0YW5jZSA9IG5ldyBfX3VpX1Jvb3RUcmVlSXRlbSgpOworICAgIGlmKGluc3RhbmNlLl9f
aW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAg
ICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191aV9Sb290VHJlZUl0ZW1faW5p
dGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX1Jvb3RUcmVlSXRlbS5fX3dhc19pbml0aWFsaXplZF9f
KSByZXR1cm47CisgICAgX191aV9Sb290VHJlZUl0ZW0uX193YXNfaW5pdGlhbGl6ZWRfXyA9IHRy
dWU7CisgICAgaWYoIV9fdWlfVHJlZUl0ZW0uX193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAg
X191aV9UcmVlSXRlbV9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9Sb290VHJl
ZUl0ZW0sIF9fdWlfVHJlZUl0ZW0pOworICAgIF9fdWlfUm9vdFRyZWVJdGVtLnByb3RvdHlwZS5f
X2NsYXNzX18uX19uZXdfXyA9IHVpX1Jvb3RUcmVlSXRlbTsKKyAgICBfX3VpX1Jvb3RUcmVlSXRl
bS5wcm90b3R5cGUuYWRkSXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICBpZiAoKGl0ZW0uZ2V0
UGFyZW50SXRlbSgpICE9IG51bGwpIHx8IChpdGVtLmdldFRyZWUoKSAhPSBudWxsKSkgeworICAg
IGl0ZW0ucmVtb3ZlKCk7CisgICAgfQorICAgIGl0ZW0uc2V0VHJlZSh0aGlzLmdldFRyZWUoKSk7
CisgICAgaXRlbS5zZXRQYXJlbnRJdGVtKG51bGwpOworICAgIHRoaXMuY2hpbGRyZW4uYXBwZW5k
KGl0ZW0pOworICAgIERPTV9zZXRJbnRTdHlsZUF0dHJpYnV0ZShpdGVtLmdldEVsZW1lbnQoKSwg
J21hcmdpbkxlZnQnLCAwKTsKKyAgICB9OworICAgIF9fdWlfUm9vdFRyZWVJdGVtLnByb3RvdHlw
ZS5fX2NsYXNzX18uYWRkSXRlbSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9S
b290VHJlZUl0ZW0ucHJvdG90eXBlLmFkZEl0ZW0uY2FsbC5hcHBseShfX3VpX1Jvb3RUcmVlSXRl
bS5wcm90b3R5cGUuYWRkSXRlbSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfUm9vdFRy
ZWVJdGVtLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkSXRlbS51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9Sb290VHJlZUl0ZW0ucHJvdG90eXBlLmFkZEl0ZW0uaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX1Jvb3RUcmVlSXRlbS5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1
bmN0aW9uKGl0ZW0pIHsKKyAgICBpZiAoIXRoaXMuY2hpbGRyZW4uX19jb250YWluc19fKGl0ZW0p
KSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICBpdGVtLnNldFRyZWUobnVsbCk7CisgICAgaXRl
bS5zZXRQYXJlbnRJdGVtKG51bGwpOworICAgIHRoaXMuY2hpbGRyZW4ucmVtb3ZlKGl0ZW0pOwor
ICAgIH07CisgICAgX191aV9Sb290VHJlZUl0ZW0ucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVJ
dGVtID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1Jvb3RUcmVlSXRlbS5wcm90
b3R5cGUucmVtb3ZlSXRlbS5jYWxsLmFwcGx5KF9fdWlfUm9vdFRyZWVJdGVtLnByb3RvdHlwZS5y
ZW1vdmVJdGVtLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Sb290VHJlZUl0ZW0ucHJv
dG90eXBlLl9fY2xhc3NfXy5yZW1vdmVJdGVtLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1Jvb3RUcmVlSXRlbS5wcm90b3R5cGUucmVtb3ZlSXRlbS5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworfQorZnVuY3Rpb24gX191aV9UcmVlKCkgeworfQorZnVuY3Rpb24gdWlfVHJlZSgpIHsK
KyAgICB2YXIgaW5zdGFuY2UgPSBuZXcgX191aV9UcmVlKCk7CisgICAgaWYoaW5zdGFuY2UuX19p
bml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAg
IHJldHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlvbiBfX3VpX1RyZWVfaW5pdGlhbGl6ZSgp
IHsKKyAgICBpZihfX3VpX1RyZWUuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJuOworICAgIF9f
dWlfVHJlZS5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBpZighX191aV9XaWRnZXQu
X193YXNfaW5pdGlhbGl6ZWRfXykKKyAgICAgICAgX191aV9XaWRnZXRfaW5pdGlhbGl6ZSgpOwor
ICAgIHB5anNfZXh0ZW5kKF9fdWlfVHJlZSwgX191aV9XaWRnZXQpOworICAgIF9fdWlfVHJlZS5w
cm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9UcmVlOworICAgIF9fdWlfVHJlZS5wcm90
b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAgICBfX3VpX1dpZGdldC5wcm90b3R5cGUu
X19jbGFzc19fLl9faW5pdF9fKHRoaXMpOworICAgIHRoaXMucm9vdCA9IG51bGw7CisgICAgdGhp
cy5jaGlsZFdpZGdldHMgPSBzZXRzX1NldCgpOworICAgIHRoaXMuY3VyU2VsZWN0aW9uID0gbnVs
bDsKKyAgICB0aGlzLmZvY3VzYWJsZSA9IG51bGw7CisgICAgdGhpcy5mb2N1c0xpc3RlbmVycyA9
IG5ldyBweWpzbGliX0xpc3QoW10pOworICAgIHRoaXMubW91c2VMaXN0ZW5lcnMgPSBuZXcgcHlq
c2xpYl9MaXN0KFtdKTsKKyAgICB0aGlzLmltYWdlQmFzZSA9IHB5Z3d0X2dldE1vZHVsZUJhc2VV
UkwoKTsKKyAgICB0aGlzLmtleWJvYXJkTGlzdGVuZXJzID0gbmV3IHB5anNsaWJfTGlzdChbXSk7
CisgICAgdGhpcy5saXN0ZW5lcnMgPSBuZXcgcHlqc2xpYl9MaXN0KFtdKTsKKyAgICB0aGlzLmxh
c3RFdmVudFR5cGUgPSAnJzsKKyAgICB0aGlzLnNldEVsZW1lbnQoRE9NX2NyZWF0ZURpdigpKTsK
KyAgICBET01fc2V0U3R5bGVBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdwb3NpdGlvbics
ICdyZWxhdGl2ZScpOworICAgIHRoaXMuZm9jdXNhYmxlID0gX191aV9Gb2N1cy5wcm90b3R5cGUu
X19jbGFzc19fLmNyZWF0ZUZvY3VzYWJsZSgpOworICAgIERPTV9zZXRTdHlsZUF0dHJpYnV0ZSh0
aGlzLmZvY3VzYWJsZSwgJ2ZvbnRTaXplJywgJzAnKTsKKyAgICBET01fc2V0U3R5bGVBdHRyaWJ1
dGUodGhpcy5mb2N1c2FibGUsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpOworICAgIERPTV9zZXRJ
bnRTdHlsZUF0dHJpYnV0ZSh0aGlzLmZvY3VzYWJsZSwgJ3pJbmRleCcsIC0xKTsKKyAgICBET01f
YXBwZW5kQ2hpbGQodGhpcy5nZXRFbGVtZW50KCksIHRoaXMuZm9jdXNhYmxlKTsKKyAgICB0aGlz
LnNpbmtFdmVudHMoX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLk1PVVNFRVZFTlRTIHwg
X191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLk9OQ0xJQ0sgfCBfX3VpX0V2ZW50LnByb3Rv
dHlwZS5fX2NsYXNzX18uS0VZRVZFTlRTKTsKKyAgICBET01fc2lua0V2ZW50cyh0aGlzLmZvY3Vz
YWJsZSwgX191aV9FdmVudC5wcm90b3R5cGUuX19jbGFzc19fLkZPQ1VTRVZFTlRTIHwgX191aV9F
dmVudC5wcm90b3R5cGUuX19jbGFzc19fLktFWUVWRU5UUyB8IERPTV9nZXRFdmVudHNTdW5rKHRo
aXMuZm9jdXNhYmxlKSk7CisgICAgdGhpcy5yb290ID0gdWlfUm9vdFRyZWVJdGVtKCk7CisgICAg
dGhpcy5yb290LnNldFRyZWUodGhpcyk7CisgICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1UcmVl
Jyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5fX2luaXRf
Xy5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2luaXRfXy5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24o
d2lkZ2V0KSB7CisgICAgdGhpcy5hZGRJdGVtKHdpZGdldCk7CisgICAgfTsKKyAgICBfX3VpX1Ry
ZWUucHJvdG90eXBlLl9fY2xhc3NfXy5hZGQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVHJlZS5wcm90b3R5cGUuYWRkLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5h
ZGQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3Nf
Xy5hZGQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuYWRk
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5hZGRGb2N1
c0xpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLmZvY3VzTGlzdGVuZXJz
LmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xh
c3NfXy5hZGRGb2N1c0xpc3RlbmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3Vp
X1RyZWUucHJvdG90eXBlLmFkZEZvY3VzTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX1RyZWUucHJv
dG90eXBlLmFkZEZvY3VzTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1Ry
ZWUucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRGb2N1c0xpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLmFkZEZvY3VzTGlzdGVuZXIuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLmFkZEl0ZW0gPSBmdW5jdGlv
bihpdGVtKSB7CisgICAgaWYgKHB5anNsaWJfaXNTdHJpbmcoaXRlbSkpIHsKKyAgICB2YXIgaXRl
bSA9IHVpX1RyZWVJdGVtKGl0ZW0pOworICAgIH0KKyAgICB2YXIgcmV0ID0gdGhpcy5yb290LmFk
ZEl0ZW0oaXRlbSk7CisgICAgRE9NX2FwcGVuZENoaWxkKHRoaXMuZ2V0RWxlbWVudCgpLCBpdGVt
LmdldEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIF9fdWlfVHJlZS5w
cm90b3R5cGUuX19jbGFzc19fLmFkZEl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVHJlZS5wcm90b3R5cGUuYWRkSXRlbS5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5
cGUuYWRkSXRlbSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUu
X19jbGFzc19fLmFkZEl0ZW0udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5w
cm90b3R5cGUuYWRkSXRlbS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5w
cm90b3R5cGUuYWRkS2V5Ym9hcmRMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAg
dGhpcy5rZXlib2FyZExpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpOworICAgIH07CisgICAgX191
aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkS2V5Ym9hcmRMaXN0ZW5lciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5hZGRLZXlib2FyZExpc3Rl
bmVyLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5hZGRLZXlib2FyZExpc3RlbmVyLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uYWRk
S2V5Ym9hcmRMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnBy
b3RvdHlwZS5hZGRLZXlib2FyZExpc3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9UcmVlLnByb3RvdHlwZS5hZGRNb3VzZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIp
IHsKKyAgICB0aGlzLm1vdXNlTGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAg
ICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRNb3VzZUxpc3RlbmVyID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLmFkZE1vdXNlTGlzdGVu
ZXIuY2FsbC5hcHBseShfX3VpX1RyZWUucHJvdG90eXBlLmFkZE1vdXNlTGlzdGVuZXIsIGFyZ3Vt
ZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5hZGRNb3Vz
ZUxpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBl
LmFkZE1vdXNlTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUu
cHJvdG90eXBlLmFkZFRyZWVMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAgdGhp
cy5saXN0ZW5lcnMuYXBwZW5kKGxpc3RlbmVyKTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90
b3R5cGUuX19jbGFzc19fLmFkZFRyZWVMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5hZGRUcmVlTGlzdGVuZXIuY2FsbC5hcHBseShfX3Vp
X1RyZWUucHJvdG90eXBlLmFkZFRyZWVMaXN0ZW5lciwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLmFkZFRyZWVMaXN0ZW5lci51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5hZGRUcmVlTGlzdGVuZXIuaW5z
dGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLmNsZWFyID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIHNpemUgPSB0aGlzLnJvb3QuZ2V0Q2hpbGRDb3VudCgpOworCisg
ICAgICAgIHZhciBfX2kgPSBweWpzbGliX3JhbmdlKHNpemUsIDAsIC0xKS5fX2l0ZXJfXygpOwor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgaSA9IF9faS5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIHRo
aXMucm9vdC5nZXRDaGlsZCggKCBpIC0gMSApICkucmVtb3ZlKCk7CisKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlv
bikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5jbGVh
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5jbGVh
ci5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUuY2xlYXIsIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5jbGVhci51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5jbGVhci5pbnN0YW5jZV9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuZW5zdXJlU2VsZWN0ZWRJdGVtVmlzaWJs
ZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICgodGhpcy5jdXJTZWxlY3Rpb24gPT0gbnVsbCkpIHsK
KyAgICByZXR1cm47CisgICAgfQorICAgIHZhciBwYXJlbnQgPSB0aGlzLmN1clNlbGVjdGlvbi5n
ZXRQYXJlbnRJdGVtKCk7CisgICAgd2hpbGUgKChwYXJlbnQgIT0gbnVsbCkpIHsKKyAgICBwYXJl
bnQuc2V0U3RhdGUodHJ1ZSk7CisgICAgdmFyIHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnRJdGVt
KCk7CisgICAgfQorICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uZW5z
dXJlU2VsZWN0ZWRJdGVtVmlzaWJsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9UcmVlLnByb3RvdHlwZS5lbnN1cmVTZWxlY3RlZEl0ZW1WaXNpYmxlLmNhbGwuYXBwbHkoX191
aV9UcmVlLnByb3RvdHlwZS5lbnN1cmVTZWxlY3RlZEl0ZW1WaXNpYmxlLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uZW5zdXJlU2VsZWN0ZWRJ
dGVtVmlzaWJsZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlw
ZS5lbnN1cmVTZWxlY3RlZEl0ZW1WaXNpYmxlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9UcmVlLnByb3RvdHlwZS5nZXRJbWFnZUJhc2UgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5pbWFnZUJhc2U7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xh
c3NfXy5nZXRJbWFnZUJhc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJl
ZS5wcm90b3R5cGUuZ2V0SW1hZ2VCYXNlLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5n
ZXRJbWFnZUJhc2UsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBl
Ll9fY2xhc3NfXy5nZXRJbWFnZUJhc2UudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VHJlZS5wcm90b3R5cGUuZ2V0SW1hZ2VCYXNlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9UcmVlLnByb3RvdHlwZS5nZXRJdGVtID0gZnVuY3Rpb24oaW5kZXgpIHsKKyAgICByZXR1
cm4gdGhpcy5yb290LmdldENoaWxkKGluZGV4KTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90
b3R5cGUuX19jbGFzc19fLmdldEl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfVHJlZS5wcm90b3R5cGUuZ2V0SXRlbS5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUu
Z2V0SXRlbSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19j
bGFzc19fLmdldEl0ZW0udW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90
b3R5cGUuZ2V0SXRlbS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90
b3R5cGUuZ2V0SXRlbUNvdW50ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucm9vdC5n
ZXRDaGlsZENvdW50KCk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3Nf
Xy5nZXRJdGVtQ291bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZS5w
cm90b3R5cGUuZ2V0SXRlbUNvdW50LmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5nZXRJ
dGVtQ291bnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRJdGVtQ291bnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJl
ZS5wcm90b3R5cGUuZ2V0SXRlbUNvdW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9UcmVlLnByb3RvdHlwZS5nZXRTZWxlY3RlZEl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5jdXJTZWxlY3Rpb247CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRTZWxlY3RlZEl0ZW0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfVHJlZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRJdGVtLmNhbGwuYXBwbHkoX191aV9UcmVlLnBy
b3RvdHlwZS5nZXRTZWxlY3RlZEl0ZW0sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1Ry
ZWUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRTZWxlY3RlZEl0ZW0udW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRJdGVtLmluc3RhbmNlX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5nZXRUYWJJbmRleCA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBfX3VpX0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0VGFi
SW5kZXgodGhpcywgdGhpcy5mb2N1c2FibGUpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0VGFiSW5kZXggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVHJlZS5wcm90b3R5cGUuZ2V0VGFiSW5kZXguY2FsbC5hcHBseShfX3VpX1RyZWUucHJv
dG90eXBlLmdldFRhYkluZGV4LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlLnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0VGFiSW5kZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfVHJlZS5wcm90b3R5cGUuZ2V0VGFiSW5kZXguaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9faXRlcl9fID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuY2hpbGRXaWRnZXRzLl9faXRlcl9fKCk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUu
cHJvdG90eXBlLl9fY2xhc3NfXy5fX2l0ZXJfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9UcmVlLnByb3RvdHlwZS5fX2l0ZXJfXy5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90
b3R5cGUuX19pdGVyX18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90
eXBlLl9fY2xhc3NfXy5fX2l0ZXJfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9U
cmVlLnByb3RvdHlwZS5fX2l0ZXJfXy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VHJlZS5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIHZh
ciB0eXBlID0gRE9NX2V2ZW50R2V0VHlwZShldmVudCk7CisgICAgaWYgKCh0eXBlID09ICdjbGlj
aycpKSB7CisgICAgdmFyIGUgPSBET01fZXZlbnRHZXRUYXJnZXQoZXZlbnQpOworICAgIGlmICgh
KHRoaXMuc2hvdWxkVHJlZURlbGVnYXRlRm9jdXNUb0VsZW1lbnQoZSkpKSB7CisgICAgdGhpcy5z
ZXRGb2N1cyh0cnVlKTsKKyAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdtb3Vz
ZWRvd24nKSkgeworICAgIF9fdWlfTW91c2VMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLmZp
cmVNb3VzZUV2ZW50KHRoaXMsIHRoaXMubW91c2VMaXN0ZW5lcnMsIHRoaXMsIGV2ZW50KTsKKyAg
ICB0aGlzLmVsZW1lbnRDbGlja2VkKHRoaXMucm9vdCwgRE9NX2V2ZW50R2V0VGFyZ2V0KGV2ZW50
KSk7CisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdtb3VzZXVwJykgfHwgKHR5cGUgPT0g
J21vdXNlbW92ZScpIHx8ICh0eXBlID09ICdtb3VzZW92ZXInKSB8fCAodHlwZSA9PSAnbW91c2Vv
dXQnKSkgeworICAgIF9fdWlfTW91c2VMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLmZpcmVN
b3VzZUV2ZW50KHRoaXMsIHRoaXMubW91c2VMaXN0ZW5lcnMsIHRoaXMsIGV2ZW50KTsKKyAgICB9
CisgICAgZWxzZSBpZiAoKHR5cGUgPT0gJ2JsdXInKSB8fCAodHlwZSA9PSAnZm9jdXMnKSkgewor
ICAgIF9fdWlfRm9jdXNMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLmZpcmVGb2N1c0V2ZW50
KHRoaXMsIHRoaXMuZm9jdXNMaXN0ZW5lcnMsIHRoaXMsIGV2ZW50KTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoKHR5cGUgPT0gJ2tleWRvd24nKSkgeworICAgIGlmICgodGhpcy5jdXJTZWxlY3Rpb24g
PT0gbnVsbCkpIHsKKyAgICBpZiAoKHRoaXMucm9vdC5nZXRDaGlsZENvdW50KCkgPiAwKSkgewor
ICAgIHRoaXMub25TZWxlY3Rpb24odGhpcy5yb290LmdldENoaWxkKDApLCB0cnVlKTsKKyAgICB9
CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5vbkJyb3dzZXJFdmVudCh0aGlz
LCBldmVudCk7CisgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoKHRoaXMubGFzdEV2ZW50VHlw
ZSA9PSAna2V5ZG93bicpKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIga2V5Y29kZSA9
IERPTV9ldmVudEdldEtleUNvZGUoZXZlbnQpOworICAgIGlmICgoa2V5Y29kZSA9PSBfX3VpX0tl
eWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5LRVlfVVApKSB7CisgICAgdGhpcy5t
b3ZlU2VsZWN0aW9uVXAodGhpcy5jdXJTZWxlY3Rpb24pOworICAgIERPTV9ldmVudFByZXZlbnRE
ZWZhdWx0KGV2ZW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAoKGtleWNvZGUgPT0gX191aV9LZXli
b2FyZExpc3RlbmVyLnByb3RvdHlwZS5fX2NsYXNzX18uS0VZX0RPV04pKSB7CisgICAgdGhpcy5t
b3ZlU2VsZWN0aW9uRG93bih0aGlzLmN1clNlbGVjdGlvbiwgdHJ1ZSk7CisgICAgRE9NX2V2ZW50
UHJldmVudERlZmF1bHQoZXZlbnQpOworICAgIH0KKyAgICBlbHNlIGlmICgoa2V5Y29kZSA9PSBf
X3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5LRVlfTEVGVCkpIHsKKyAg
ICBpZiAodGhpcy5jdXJTZWxlY3Rpb24uZ2V0U3RhdGUoKSkgeworICAgIHRoaXMuY3VyU2VsZWN0
aW9uLnNldFN0YXRlKGZhbHNlKTsKKyAgICB9CisgICAgRE9NX2V2ZW50UHJldmVudERlZmF1bHQo
ZXZlbnQpOworICAgIH0KKyAgICBlbHNlIGlmICgoa2V5Y29kZSA9PSBfX3VpX0tleWJvYXJkTGlz
dGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5LRVlfUklHSFQpKSB7CisgICAgaWYgKCEodGhpcy5j
dXJTZWxlY3Rpb24uZ2V0U3RhdGUoKSkpIHsKKyAgICB0aGlzLmN1clNlbGVjdGlvbi5zZXRTdGF0
ZSh0cnVlKTsKKyAgICB9CisgICAgRE9NX2V2ZW50UHJldmVudERlZmF1bHQoZXZlbnQpOworICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoKHR5cGUgPT0gJ2tleXVwJykpIHsKKyAgICBpZiAoKERP
TV9ldmVudEdldEtleUNvZGUoZXZlbnQpID09IF9fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5
cGUuX19jbGFzc19fLktFWV9UQUIpKSB7CisgICAgdmFyIGNoYWluID0gbmV3IHB5anNsaWJfTGlz
dChbXSk7CisgICAgdGhpcy5jb2xsZWN0RWxlbWVudENoYWluKGNoYWluLCB0aGlzLmdldEVsZW1l
bnQoKSwgRE9NX2V2ZW50R2V0VGFyZ2V0KGV2ZW50KSk7CisgICAgdmFyIGl0ZW0gPSB0aGlzLmZp
bmRJdGVtQnlDaGFpbihjaGFpbiwgMCwgdGhpcy5yb290KTsKKyAgICBpZiAoKGl0ZW0gIT0gdGhp
cy5nZXRTZWxlY3RlZEl0ZW0oKSkpIHsKKyAgICB0aGlzLnNldFNlbGVjdGVkSXRlbShpdGVtLCB0
cnVlKTsKKyAgICB9CisgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICgodHlwZSA9PSAna2V5cHJl
c3MnKSkgeworICAgIF9fdWlfS2V5Ym9hcmRMaXN0ZW5lci5wcm90b3R5cGUuX19jbGFzc19fLmZp
cmVLZXlib2FyZEV2ZW50KHRoaXMsIHRoaXMua2V5Ym9hcmRMaXN0ZW5lcnMsIHRoaXMsIGV2ZW50
KTsKKyAgICB9CisgICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5vbkJyb3dzZXJF
dmVudCh0aGlzLCBldmVudCk7CisgICAgdGhpcy5sYXN0RXZlbnRUeXBlID0gdHlwZTsKKyAgICB9
OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLm9uQnJvd3NlckV2ZW50ID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLm9uQnJvd3NlckV2
ZW50LmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5vbkJyb3dzZXJFdmVudCwgYXJndW1l
bnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLm9uQnJvd3Nl
ckV2ZW50LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLm9u
QnJvd3NlckV2ZW50Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3Rv
dHlwZS5yZW1vdmUgPSBmdW5jdGlvbih3aWRnZXQpIHsKKyAgICBjb25zb2xlLmVycm9yKCdXaWRn
ZXRzIHNob3VsZCBuZXZlciBiZSBkaXJlY3RseSByZW1vdmVkIGZyb20gYSB0cmVlJyk7CisgICAg
fTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZS5wcm90b3R5cGUucmVtb3ZlLmNhbGwuYXBwbHko
X191aV9UcmVlLnByb3RvdHlwZS5yZW1vdmUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmUudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfVHJlZS5wcm90b3R5cGUucmVtb3ZlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UcmVlLnByb3RvdHlwZS5yZW1vdmVGb2N1c0xpc3RlbmVyID0gZnVuY3Rpb24obGlz
dGVuZXIpIHsKKyAgICB0aGlzLmZvY3VzTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAg
fTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVGb2N1c0xpc3RlbmVy
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLnJlbW92
ZUZvY3VzTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX1RyZWUucHJvdG90eXBlLnJlbW92ZUZvY3Vz
TGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9f
Y2xhc3NfXy5yZW1vdmVGb2N1c0xpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX1RyZWUucHJvdG90eXBlLnJlbW92ZUZvY3VzTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbihpdGVt
KSB7CisgICAgdGhpcy5yb290LnJlbW92ZUl0ZW0oaXRlbSk7CisgICAgRE9NX3JlbW92ZUNoaWxk
KHRoaXMuZ2V0RWxlbWVudCgpLCBpdGVtLmdldEVsZW1lbnQoKSk7CisgICAgfTsKKyAgICBfX3Vp
X1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVJdGVtID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLnJlbW92ZUl0ZW0uY2FsbC5hcHBseShfX3Vp
X1RyZWUucHJvdG90eXBlLnJlbW92ZUl0ZW0sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVJdGVtLnVuYm91bmRfbWV0aG9kID0gdHJ1
ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLnJlbW92ZUl0ZW0uaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLnJlbW92ZUl0ZW1zID0gZnVuY3Rpb24oKSB7
CisgICAgd2hpbGUgKCh0aGlzLmdldEl0ZW1Db3VudCgpID4gMCkpIHsKKyAgICB0aGlzLnJlbW92
ZUl0ZW0odGhpcy5nZXRJdGVtKDApKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJv
dG90eXBlLl9fY2xhc3NfXy5yZW1vdmVJdGVtcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gX191aV9UcmVlLnByb3RvdHlwZS5yZW1vdmVJdGVtcy5jYWxsLmFwcGx5KF9fdWlfVHJlZS5w
cm90b3R5cGUucmVtb3ZlSXRlbXMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUu
cHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVJdGVtcy51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UcmVlLnByb3RvdHlwZS5yZW1vdmVJdGVtcy5pbnN0YW5jZV9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUucmVtb3ZlS2V5Ym9hcmRMaXN0ZW5lciA9IGZ1bmN0
aW9uKGxpc3RlbmVyKSB7CisgICAgdGhpcy5rZXlib2FyZExpc3RlbmVycy5yZW1vdmUobGlzdGVu
ZXIpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlS2V5
Ym9hcmRMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnBy
b3RvdHlwZS5yZW1vdmVLZXlib2FyZExpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3Rv
dHlwZS5yZW1vdmVLZXlib2FyZExpc3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191
aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlS2V5Ym9hcmRMaXN0ZW5lci51bmJvdW5k
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5yZW1vdmVLZXlib2FyZExp
c3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5y
ZW1vdmVUcmVlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMubGlzdGVu
ZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9f
Y2xhc3NfXy5yZW1vdmVUcmVlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfVHJlZS5wcm90b3R5cGUucmVtb3ZlVHJlZUxpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9U
cmVlLnByb3RvdHlwZS5yZW1vdmVUcmVlTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVUcmVlTGlzdGVuZXIudW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUucmVtb3ZlVHJlZUxpc3Rl
bmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5zZXRB
Y2Nlc3NLZXkgPSBmdW5jdGlvbihrZXkpIHsKKyAgICBfX3VpX0ZvY3VzLnByb3RvdHlwZS5fX2Ns
YXNzX18uc2V0QWNjZXNzS2V5KHRoaXMsIHRoaXMuZm9jdXNhYmxlLCBrZXkpOworICAgIH07Cisg
ICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0QWNjZXNzS2V5ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLnNldEFjY2Vzc0tleS5jYWxs
LmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUuc2V0QWNjZXNzS2V5LCBhcmd1bWVudHMpOworICAg
IH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0QWNjZXNzS2V5LnVuYm91
bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLnNldEFjY2Vzc0tleS5p
bnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuc2V0Rm9jdXMg
PSBmdW5jdGlvbihmb2N1cykgeworICAgIGlmIChmb2N1cykgeworICAgIF9fdWlfRm9jdXMucHJv
dG90eXBlLl9fY2xhc3NfXy5mb2N1cyh0aGlzLCB0aGlzLmZvY3VzYWJsZSk7CisgICAgfQorICAg
IGVsc2UgeworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5ibHVyKHRoaXMsIHRo
aXMuZm9jdXNhYmxlKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXRGb2N1cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVl
LnByb3RvdHlwZS5zZXRGb2N1cy5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUuc2V0Rm9j
dXMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3Nf
Xy5zZXRGb2N1cy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlw
ZS5zZXRGb2N1cy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5
cGUuc2V0SW1hZ2VCYXNlID0gZnVuY3Rpb24oYmFzZVVybCkgeworICAgIHRoaXMuaW1hZ2VCYXNl
ID0gYmFzZVVybDsKKyAgICB0aGlzLnJvb3QudXBkYXRlU3RhdGVSZWN1cnNpdmUoKTsKKyAgICB9
OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLnNldEltYWdlQmFzZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5zZXRJbWFnZUJhc2Uu
Y2FsbC5hcHBseShfX3VpX1RyZWUucHJvdG90eXBlLnNldEltYWdlQmFzZSwgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLnNldEltYWdlQmFzZS51
bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5zZXRJbWFnZUJh
c2UuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLnNldFNl
bGVjdGVkSXRlbSA9IGZ1bmN0aW9uKGl0ZW0sIGZpcmVFdmVudHMpIHsKKyAgICBpZiAodHlwZW9m
IGZpcmVFdmVudHMgPT0gJ3VuZGVmaW5lZCcpIGZpcmVFdmVudHM9dHJ1ZTsKKyAgICBpZiAoKGl0
ZW0gPT0gbnVsbCkpIHsKKyAgICBpZiAoKHRoaXMuY3VyU2VsZWN0aW9uID09IG51bGwpKSB7Cisg
ICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLmN1clNlbGVjdGlvbi5zZXRTZWxlY3RlZChmYWxz
ZSk7CisgICAgdGhpcy5jdXJTZWxlY3Rpb24gPSBudWxsOworICAgIHJldHVybjsKKyAgICB9Cisg
ICAgdGhpcy5vblNlbGVjdGlvbihpdGVtLCBmaXJlRXZlbnRzKTsKKyAgICB9OworX191aV9UcmVl
LnByb3RvdHlwZS5zZXRTZWxlY3RlZEl0ZW0ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3
YXJncywgaXRlbSwgZmlyZUV2ZW50cyApIHsKKyAgICBpZiAodHlwZW9mIGZpcmVFdmVudHMgPT0g
J3VuZGVmaW5lZCcpCisgICAgICAgIGZpcmVFdmVudHM9X19rd2FyZ3MuZmlyZUV2ZW50czsKKyAg
ICB2YXIgX19yID0gW2l0ZW0sIGZpcmVFdmVudHNdOworICAgIHJldHVybiBfX3I7Cit9OworICAg
IF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLnNldFNlbGVjdGVkSXRlbSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5zZXRTZWxlY3RlZEl0ZW0u
Y2FsbC5hcHBseShfX3VpX1RyZWUucHJvdG90eXBlLnNldFNlbGVjdGVkSXRlbSwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLnNldFNlbGVjdGVk
SXRlbS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5zZXRT
ZWxlY3RlZEl0ZW0uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRTZWxlY3RlZEl0ZW0ucGFyc2Vfa3dhcmdzID0gX191aV9UcmVlLnBy
b3RvdHlwZS5zZXRTZWxlY3RlZEl0ZW0ucGFyc2Vfa3dhcmdzOworICAgIF9fdWlfVHJlZS5wcm90
b3R5cGUuc2V0VGFiSW5kZXggPSBmdW5jdGlvbihpbmRleCkgeworICAgIF9fdWlfRm9jdXMucHJv
dG90eXBlLl9fY2xhc3NfXy5zZXRUYWJJbmRleCh0aGlzLCB0aGlzLmZvY3VzYWJsZSwgaW5kZXgp
OworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGFiSW5kZXgg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZS5wcm90b3R5cGUuc2V0VGFi
SW5kZXguY2FsbC5hcHBseShfX3VpX1RyZWUucHJvdG90eXBlLnNldFRhYkluZGV4LCBhcmd1bWVu
dHMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGFiSW5k
ZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuc2V0VGFi
SW5kZXguaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLnRy
ZWVJdGVtSXRlcmF0b3IgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgYWNjdW0gPSBuZXcgcHlqc2xp
Yl9MaXN0KFtdKTsKKyAgICB0aGlzLnJvb3QuYWRkVHJlZUl0ZW1zKGFjY3VtKTsKKyAgICByZXR1
cm4gYWNjdW0uX19pdGVyX18oKTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19j
bGFzc19fLnRyZWVJdGVtSXRlcmF0b3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfVHJlZS5wcm90b3R5cGUudHJlZUl0ZW1JdGVyYXRvci5jYWxsLmFwcGx5KF9fdWlfVHJlZS5w
cm90b3R5cGUudHJlZUl0ZW1JdGVyYXRvciwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
VHJlZS5wcm90b3R5cGUuX19jbGFzc19fLnRyZWVJdGVtSXRlcmF0b3IudW5ib3VuZF9tZXRob2Qg
PSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUudHJlZUl0ZW1JdGVyYXRvci5pbnN0YW5j
ZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuY29sbGVjdEVsZW1lbnRD
aGFpbiA9IGZ1bmN0aW9uKGNoYWluLCBoUm9vdCwgaEVsZW0pIHsKKyAgICBpZiAoKGhFbGVtID09
IG51bGwpIHx8IERPTV9jb21wYXJlKGhFbGVtLCBoUm9vdCkpIHsKKyAgICByZXR1cm47CisgICAg
fQorICAgIHRoaXMuY29sbGVjdEVsZW1lbnRDaGFpbihjaGFpbiwgaFJvb3QsIERPTV9nZXRQYXJl
bnQoaEVsZW0pKTsKKyAgICBjaGFpbi5hcHBlbmQoaEVsZW0pOworICAgIH07CisgICAgX191aV9U
cmVlLnByb3RvdHlwZS5fX2NsYXNzX18uY29sbGVjdEVsZW1lbnRDaGFpbiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5jb2xsZWN0RWxlbWVudENoYWlu
LmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5jb2xsZWN0RWxlbWVudENoYWluLCBhcmd1
bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uY29sbGVj
dEVsZW1lbnRDaGFpbi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3Rv
dHlwZS5jb2xsZWN0RWxlbWVudENoYWluLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9UcmVlLnByb3RvdHlwZS5lbGVtZW50Q2xpY2tlZCA9IGZ1bmN0aW9uKHJvb3QsIGhFbGVtKSB7
CisgICAgdmFyIGNoYWluID0gbmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAgdGhpcy5jb2xsZWN0
RWxlbWVudENoYWluKGNoYWluLCB0aGlzLmdldEVsZW1lbnQoKSwgaEVsZW0pOworICAgIHZhciBp
dGVtID0gdGhpcy5maW5kSXRlbUJ5Q2hhaW4oY2hhaW4sIDAsIHJvb3QpOworICAgIGlmICgoaXRl
bSAhPSBudWxsKSkgeworICAgIGlmIChET01fY29tcGFyZShpdGVtLmdldEltYWdlRWxlbWVudCgp
LCBoRWxlbSkpIHsKKyAgICBpdGVtLnNldFN0YXRlKCEoaXRlbS5nZXRTdGF0ZSgpKSwgdHJ1ZSk7
CisgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKERPTV9pc09ySGFzQ2hpbGQo
aXRlbS5nZXRFbGVtZW50KCksIGhFbGVtKSkgeworICAgIHRoaXMub25TZWxlY3Rpb24oaXRlbSwg
dHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5lbGVtZW50Q2xpY2tl
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5lbGVt
ZW50Q2xpY2tlZC5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUuZWxlbWVudENsaWNrZWQs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5l
bGVtZW50Q2xpY2tlZC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3Rv
dHlwZS5lbGVtZW50Q2xpY2tlZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJl
ZS5wcm90b3R5cGUuZmluZERlZXBlc3RPcGVuQ2hpbGQgPSBmdW5jdGlvbihpdGVtKSB7CisgICAg
aWYgKCEoaXRlbS5nZXRTdGF0ZSgpKSkgeworICAgIHJldHVybiBpdGVtOworICAgIH0KKyAgICBy
ZXR1cm4gdGhpcy5maW5kRGVlcGVzdE9wZW5DaGlsZChpdGVtLmdldENoaWxkKCAoIGl0ZW0uZ2V0
Q2hpbGRDb3VudCgpIC0gMSApICkpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5f
X2NsYXNzX18uZmluZERlZXBlc3RPcGVuQ2hpbGQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfVHJlZS5wcm90b3R5cGUuZmluZERlZXBlc3RPcGVuQ2hpbGQuY2FsbC5hcHBseShf
X3VpX1RyZWUucHJvdG90eXBlLmZpbmREZWVwZXN0T3BlbkNoaWxkLCBhcmd1bWVudHMpOworICAg
IH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uZmluZERlZXBlc3RPcGVuQ2hp
bGQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuZmluZERl
ZXBlc3RPcGVuQ2hpbGQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJv
dG90eXBlLmZpbmRJdGVtQnlDaGFpbiA9IGZ1bmN0aW9uKGNoYWluLCBpZHgsIHJvb3QpIHsKKyAg
ICBpZiAoKGlkeCA9PSBweWpzbGliX2xlbihjaGFpbikpKSB7CisgICAgcmV0dXJuIHJvb3Q7Cisg
ICAgfQorICAgIHZhciBoQ3VyRWxlbSA9IGNoYWluLl9fZ2V0aXRlbV9fKGlkeCk7CisKKyAgICAg
ICAgdmFyIF9faSA9IHB5anNsaWJfcmFuZ2Uocm9vdC5nZXRDaGlsZENvdW50KCkpLl9faXRlcl9f
KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgICAgIHZhciBpID0gX19pLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisg
ICAgdmFyIGNoaWxkID0gcm9vdC5nZXRDaGlsZChpKTsKKyAgICBpZiAoRE9NX2NvbXBhcmUoY2hp
bGQuZ2V0RWxlbWVudCgpLCBoQ3VyRWxlbSkpIHsKKyAgICB2YXIgcmV0SXRlbSA9IHRoaXMuZmlu
ZEl0ZW1CeUNoYWluKGNoYWluLCAgKCBpZHggKyAxICkgLCByb290LmdldENoaWxkKGkpKTsKKyAg
ICBpZiAoKHJldEl0ZW0gPT0gbnVsbCkpIHsKKyAgICByZXR1cm4gY2hpbGQ7CisgICAgfQorICAg
IHJldHVybiByZXRJdGVtOworICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICBy
ZXR1cm4gdGhpcy5maW5kSXRlbUJ5Q2hhaW4oY2hhaW4sICAoIGlkeCArIDEgKSAsIHJvb3QpOwor
ICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uZmluZEl0ZW1CeUNoYWlu
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLmZpbmRJ
dGVtQnlDaGFpbi5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUuZmluZEl0ZW1CeUNoYWlu
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18u
ZmluZEl0ZW1CeUNoYWluLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJv
dG90eXBlLmZpbmRJdGVtQnlDaGFpbi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
VHJlZS5wcm90b3R5cGUubW92ZUZvY3VzID0gZnVuY3Rpb24oc2VsZWN0aW9uKSB7CisgICAgdmFy
IGZvY3VzYWJsZVdpZGdldCA9IHNlbGVjdGlvbi5nZXRGb2N1c2FibGVXaWRnZXQoKTsKKyAgICBp
ZiAoKGZvY3VzYWJsZVdpZGdldCAhPSBudWxsKSkgeworICAgIGZvY3VzYWJsZVdpZGdldC5zZXRG
b2N1cyh0cnVlKTsKKyAgICBET01fc2Nyb2xsSW50b1ZpZXcoZm9jdXNhYmxlV2lkZ2V0LmdldEVs
ZW1lbnQoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgIHZhciBzZWxlY3RlZEVsZW0gPSBzZWxl
Y3Rpb24uZ2V0Q29udGVudEVsZW0oKTsKKyAgICB2YXIgY29udGFpbmVyTGVmdCA9IHRoaXMuZ2V0
QWJzb2x1dGVMZWZ0KCk7CisgICAgdmFyIGNvbnRhaW5lclRvcCA9IHRoaXMuZ2V0QWJzb2x1dGVU
b3AoKTsKKyAgICB2YXIgbGVmdCA9ICAoIERPTV9nZXRBYnNvbHV0ZUxlZnQoc2VsZWN0ZWRFbGVt
KSAtIGNvbnRhaW5lckxlZnQgKSA7CisgICAgdmFyIHRvcCA9ICAoIERPTV9nZXRBYnNvbHV0ZVRv
cChzZWxlY3RlZEVsZW0pIC0gY29udGFpbmVyVG9wICkgOworICAgIHZhciB3aWR0aCA9IERPTV9n
ZXRJbnRBdHRyaWJ1dGUoc2VsZWN0ZWRFbGVtLCAnb2Zmc2V0V2lkdGgnKTsKKyAgICB2YXIgaGVp
Z2h0ID0gRE9NX2dldEludEF0dHJpYnV0ZShzZWxlY3RlZEVsZW0sICdvZmZzZXRIZWlnaHQnKTsK
KyAgICBET01fc2V0SW50U3R5bGVBdHRyaWJ1dGUodGhpcy5mb2N1c2FibGUsICdsZWZ0JywgbGVm
dCk7CisgICAgRE9NX3NldEludFN0eWxlQXR0cmlidXRlKHRoaXMuZm9jdXNhYmxlLCAndG9wJywg
dG9wKTsKKyAgICBET01fc2V0SW50U3R5bGVBdHRyaWJ1dGUodGhpcy5mb2N1c2FibGUsICd3aWR0
aCcsIHdpZHRoKTsKKyAgICBET01fc2V0SW50U3R5bGVBdHRyaWJ1dGUodGhpcy5mb2N1c2FibGUs
ICdoZWlnaHQnLCBoZWlnaHQpOworICAgIERPTV9zY3JvbGxJbnRvVmlldyh0aGlzLmZvY3VzYWJs
ZSk7CisgICAgX191aV9Gb2N1cy5wcm90b3R5cGUuX19jbGFzc19fLmZvY3VzKHRoaXMsIHRoaXMu
Zm9jdXNhYmxlKTsKKyAgICB9CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xh
c3NfXy5tb3ZlRm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZS5w
cm90b3R5cGUubW92ZUZvY3VzLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5tb3ZlRm9j
dXMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3Nf
Xy5tb3ZlRm9jdXMudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5
cGUubW92ZUZvY3VzLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3Rv
dHlwZS5tb3ZlU2VsZWN0aW9uRG93biA9IGZ1bmN0aW9uKHNlbCwgZGlnKSB7CisgICAgaWYgKChz
ZWwgPT0gdGhpcy5yb290KSkgeworICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIHBhcmVudCA9
IHNlbC5nZXRQYXJlbnRJdGVtKCk7CisgICAgaWYgKChwYXJlbnQgPT0gbnVsbCkpIHsKKyAgICB2
YXIgcGFyZW50ID0gdGhpcy5yb290OworICAgIH0KKyAgICB2YXIgaWR4ID0gcGFyZW50LmdldENo
aWxkSW5kZXgoc2VsKTsKKyAgICBpZiAoIShkaWcpIHx8ICEoc2VsLmdldFN0YXRlKCkpKSB7Cisg
ICAgaWYgKChpZHggPCAgKCBwYXJlbnQuZ2V0Q2hpbGRDb3VudCgpIC0gMSApICkpIHsKKyAgICB0
aGlzLm9uU2VsZWN0aW9uKHBhcmVudC5nZXRDaGlsZCggKCBpZHggKyAxICkgKSwgdHJ1ZSk7Cisg
ICAgfQorICAgIGVsc2UgeworICAgIHRoaXMubW92ZVNlbGVjdGlvbkRvd24ocGFyZW50LCBmYWxz
ZSk7CisgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICgoc2VsLmdldENoaWxkQ291bnQoKSA+IDAp
KSB7CisgICAgdGhpcy5vblNlbGVjdGlvbihzZWwuZ2V0Q2hpbGQoMCksIHRydWUpOworICAgIH0K
KyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLm1vdmVTZWxlY3Rpb25E
b3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLm1v
dmVTZWxlY3Rpb25Eb3duLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5tb3ZlU2VsZWN0
aW9uRG93biwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19j
bGFzc19fLm1vdmVTZWxlY3Rpb25Eb3duLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X1RyZWUucHJvdG90eXBlLm1vdmVTZWxlY3Rpb25Eb3duLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5tb3ZlU2VsZWN0aW9uVXAgPSBmdW5jdGlvbihzZWws
IGNsaW1iKSB7CisgICAgdmFyIHBhcmVudCA9IHNlbC5nZXRQYXJlbnRJdGVtKCk7CisgICAgaWYg
KChwYXJlbnQgPT0gbnVsbCkpIHsKKyAgICB2YXIgcGFyZW50ID0gdGhpcy5yb290OworICAgIH0K
KyAgICB2YXIgaWR4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoc2VsKTsKKyAgICBpZiAoKGlkeCA+
IDApKSB7CisgICAgdmFyIHNpYmxpbmcgPSBwYXJlbnQuZ2V0Q2hpbGQoICggaWR4IC0gMSApICk7
CisgICAgdGhpcy5vblNlbGVjdGlvbih0aGlzLmZpbmREZWVwZXN0T3BlbkNoaWxkKHNpYmxpbmcp
LCB0cnVlKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgdGhpcy5vblNlbGVjdGlvbihwYXJlbnQs
IHRydWUpOworICAgIH0KKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19f
Lm1vdmVTZWxlY3Rpb25VcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVl
LnByb3RvdHlwZS5tb3ZlU2VsZWN0aW9uVXAuY2FsbC5hcHBseShfX3VpX1RyZWUucHJvdG90eXBl
Lm1vdmVTZWxlY3Rpb25VcCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90
b3R5cGUuX19jbGFzc19fLm1vdmVTZWxlY3Rpb25VcC51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UcmVlLnByb3RvdHlwZS5tb3ZlU2VsZWN0aW9uVXAuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLm9uU2VsZWN0aW9uID0gZnVuY3Rpb24oaXRl
bSwgZmlyZUV2ZW50cykgeworICAgIGlmICgoaXRlbSA9PSB0aGlzLnJvb3QpKSB7CisgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoKHRoaXMuY3VyU2VsZWN0aW9uICE9IG51bGwpKSB7CisgICAg
dGhpcy5jdXJTZWxlY3Rpb24uc2V0U2VsZWN0ZWQoZmFsc2UpOworICAgIH0KKyAgICB0aGlzLmN1
clNlbGVjdGlvbiA9IGl0ZW07CisgICAgaWYgKCh0aGlzLmN1clNlbGVjdGlvbiAhPSBudWxsKSkg
eworICAgIHRoaXMubW92ZUZvY3VzKHRoaXMuY3VyU2VsZWN0aW9uKTsKKyAgICB0aGlzLmN1clNl
bGVjdGlvbi5zZXRTZWxlY3RlZCh0cnVlKTsKKyAgICBpZiAoZmlyZUV2ZW50cyAmJiBweWpzbGli
X2xlbih0aGlzLmxpc3RlbmVycykpIHsKKworICAgICAgICB2YXIgX19saXN0ZW5lciA9IHRoaXMu
bGlzdGVuZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9fbGlzdGVuZXIubmV4dCgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBsaXN0ZW5lci5vblRyZWVJdGVtU2Vs
ZWN0ZWQoaXRlbSk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93
IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIH0KKyAg
ICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLm9uU2VsZWN0aW9uID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX1RyZWUucHJvdG90eXBlLm9uU2VsZWN0aW9u
LmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5vblNlbGVjdGlvbiwgYXJndW1lbnRzKTsK
KyAgICB9OworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuX19jbGFzc19fLm9uU2VsZWN0aW9uLnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLm9uU2VsZWN0aW9u
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5vbkF0dGFj
aCA9IGZ1bmN0aW9uKCkgeworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18ub25B
dHRhY2godGhpcyk7CisKKyAgICAgICAgdmFyIF9fY2hpbGQgPSB0aGlzLl9faXRlcl9fKCk7Cisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAg
IHZhciBjaGlsZCA9IF9fY2hpbGQubmV4dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAK
KyAgICBjaGlsZC5vbkF0dGFjaCgpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH07
CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18ub25BdHRhY2ggPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZS5wcm90b3R5cGUub25BdHRhY2guY2FsbC5hcHBs
eShfX3VpX1RyZWUucHJvdG90eXBlLm9uQXR0YWNoLCBhcmd1bWVudHMpOworICAgIH07CisgICAg
X191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18ub25BdHRhY2gudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUub25BdHRhY2guaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLm9uRGV0YWNoID0gZnVuY3Rpb24oKSB7Cisg
ICAgX191aV9XaWRnZXQucHJvdG90eXBlLl9fY2xhc3NfXy5vbkRldGFjaCh0aGlzKTsKKworICAg
ICAgICB2YXIgX19jaGlsZCA9IHRoaXMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX19jaGls
ZC5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGNoaWxkLm9uRGV0YWNo
KCk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
aWYgKGUgIT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJv
dG90eXBlLl9fY2xhc3NfXy5vbkRldGFjaCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9UcmVlLnByb3RvdHlwZS5vbkRldGFjaC5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5
cGUub25EZXRhY2gsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBl
Ll9fY2xhc3NfXy5vbkRldGFjaC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVl
LnByb3RvdHlwZS5vbkRldGFjaC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJl
ZS5wcm90b3R5cGUub25Mb2FkID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yb290LnVwZGF0ZVN0
YXRlUmVjdXJzaXZlKCk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3Nf
Xy5vbkxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfVHJlZS5wcm90b3R5
cGUub25Mb2FkLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5vbkxvYWQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5vbkxvYWQudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUub25Mb2FkLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5hZG9wdCA9IGZ1bmN0
aW9uKGNvbnRlbnQpIHsKKyAgICB0aGlzLmNoaWxkV2lkZ2V0cy5hZGQoY29udGVudCk7CisgICAg
Y29udGVudC50cmVlU2V0UGFyZW50KHRoaXMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3Rv
dHlwZS5fX2NsYXNzX18uYWRvcHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlf
VHJlZS5wcm90b3R5cGUuYWRvcHQuY2FsbC5hcHBseShfX3VpX1RyZWUucHJvdG90eXBlLmFkb3B0
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18u
YWRvcHQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuYWRv
cHQuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLmRpc293
biA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGlzLmNoaWxkV2lkZ2V0cy5yZW1vdmUoaXRlbSk7
CisgICAgaXRlbS50cmVlU2V0UGFyZW50KG51bGwpOworICAgIH07CisgICAgX191aV9UcmVlLnBy
b3RvdHlwZS5fX2NsYXNzX18uZGlzb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBf
X3VpX1RyZWUucHJvdG90eXBlLmRpc293bi5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUu
ZGlzb3duLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2Ns
YXNzX18uZGlzb3duLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX1RyZWUucHJvdG90
eXBlLmRpc293bi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5
cGUuZmlyZVN0YXRlQ2hhbmdlZCA9IGZ1bmN0aW9uKGl0ZW0pIHsKKworICAgICAgICB2YXIgX19s
aXN0ZW5lciA9IHRoaXMubGlzdGVuZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9f
bGlzdGVuZXIubmV4dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICBsaXN0ZW5l
ci5vblRyZWVJdGVtU3RhdGVDaGFuZ2VkKGl0ZW0pOworCisgICAgICAgICAgICB9CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAg
ICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2NsYXNzX18uZmlyZVN0YXRlQ2hh
bmdlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5m
aXJlU3RhdGVDaGFuZ2VkLmNhbGwuYXBwbHkoX191aV9UcmVlLnByb3RvdHlwZS5maXJlU3RhdGVD
aGFuZ2VkLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5fX2Ns
YXNzX18uZmlyZVN0YXRlQ2hhbmdlZC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9U
cmVlLnByb3RvdHlwZS5maXJlU3RhdGVDaGFuZ2VkLmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9UcmVlLnByb3RvdHlwZS5nZXRDaGlsZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gdGhpcy5jaGlsZFdpZGdldHM7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90
eXBlLl9fY2xhc3NfXy5nZXRDaGlsZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfVHJlZS5wcm90b3R5cGUuZ2V0Q2hpbGRXaWRnZXRzLmNhbGwuYXBwbHkoX191aV9U
cmVlLnByb3RvdHlwZS5nZXRDaGlsZFdpZGdldHMsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX1RyZWUucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRDaGlsZFdpZGdldHMudW5ib3VuZF9tZXRo
b2QgPSB0cnVlOworICAgIF9fdWlfVHJlZS5wcm90b3R5cGUuZ2V0Q2hpbGRXaWRnZXRzLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5zaG91bGRUcmVlRGVs
ZWdhdGVGb2N1c1RvRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW0pIHsKKworICAgICAgICB2YXIgZm9j
dXMgPSAoKGVsZW0ubm9kZU5hbWUgPT0gIlNFTEVDVCIpIHx8IChlbGVtLm5vZGVOYW1lID09ICJJ
TlBVVCIpICB8fCAoZWxlbS5ub2RlTmFtZSA9PSAiQ0hFQ0tCT1giKSk7CisgICAgICAgIHJldHVy
biBmb2N1czsKKyAgICAgICAgCisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90eXBlLl9fY2xh
c3NfXy5zaG91bGRUcmVlRGVsZWdhdGVGb2N1c1RvRWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9UcmVlLnByb3RvdHlwZS5zaG91bGRUcmVlRGVsZWdhdGVGb2N1c1Rv
RWxlbWVudC5jYWxsLmFwcGx5KF9fdWlfVHJlZS5wcm90b3R5cGUuc2hvdWxkVHJlZURlbGVnYXRl
Rm9jdXNUb0VsZW1lbnQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX1RyZWUucHJvdG90
eXBlLl9fY2xhc3NfXy5zaG91bGRUcmVlRGVsZWdhdGVGb2N1c1RvRWxlbWVudC51bmJvdW5kX21l
dGhvZCA9IHRydWU7CisgICAgX191aV9UcmVlLnByb3RvdHlwZS5zaG91bGRUcmVlRGVsZWdhdGVG
b2N1c1RvRWxlbWVudC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9G
b2N1c1BhbmVsKCkgeworfQorZnVuY3Rpb24gdWlfRm9jdXNQYW5lbChjaGlsZCkgeworICAgIGlm
ICh0eXBlb2YgY2hpbGQgPT0gJ3VuZGVmaW5lZCcpIGNoaWxkPW51bGw7CisgICAgdmFyIGluc3Rh
bmNlID0gbmV3IF9fdWlfRm9jdXNQYW5lbCgpOworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBp
bnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4g
aW5zdGFuY2U7Cit9CisKKwordWlfRm9jdXNQYW5lbC5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAo
IF9fa3dhcmdzLCBjaGlsZCApIHsKKyAgICBpZiAodHlwZW9mIGNoaWxkID09ICd1bmRlZmluZWQn
KQorICAgICAgICBjaGlsZD1fX2t3YXJncy5jaGlsZDsKKyAgICB2YXIgX19yID0gW2NoaWxkXTsK
KyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9fdWlfRm9jdXNQYW5lbF9pbml0aWFsaXpl
KCkgeworICAgIGlmKF9fdWlfRm9jdXNQYW5lbC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47
CisgICAgX191aV9Gb2N1c1BhbmVsLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlm
KCFfX3VpX1NpbXBsZVBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfU2lt
cGxlUGFuZWxfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfRm9jdXNQYW5lbCwg
X191aV9TaW1wbGVQYW5lbCk7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5fX2NsYXNz
X18uX19uZXdfXyA9IHVpX0ZvY3VzUGFuZWw7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlw
ZS5fX2luaXRfXyA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgaWYgKHR5cGVvZiBjaGlsZCA9PSAn
dW5kZWZpbmVkJykgY2hpbGQ9bnVsbDsKKyAgICB0aGlzLmNsaWNrTGlzdGVuZXJzID0gbmV3IHB5
anNsaWJfTGlzdChbXSk7CisgICAgdGhpcy5mb2N1c0xpc3RlbmVycyA9IG5ldyBweWpzbGliX0xp
c3QoW10pOworICAgIHRoaXMua2V5Ym9hcmRMaXN0ZW5lcnMgPSBuZXcgcHlqc2xpYl9MaXN0KFtd
KTsKKyAgICB0aGlzLm1vdXNlTGlzdGVuZXJzID0gbmV3IHB5anNsaWJfTGlzdChbXSk7CisgICAg
X191aV9TaW1wbGVQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMsIF9fdWlf
Rm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5jcmVhdGVGb2N1c2FibGUodGhpcykpOworICAgIHRo
aXMuc2lua0V2ZW50cyhfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uRk9DVVNFVkVOVFMg
fCBfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uS0VZRVZFTlRTIHwgX191aV9FdmVudC5w
cm90b3R5cGUuX19jbGFzc19fLk9OQ0xJQ0sgfCBfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2NsYXNz
X18uTU9VU0VFVkVOVFMpOworICAgIGlmIChjaGlsZCkgeworICAgIHRoaXMuc2V0V2lkZ2V0KGNo
aWxkKTsKKyAgICB9CisgICAgfTsKK19fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19pbml0X18u
cGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgY2hpbGQgKSB7CisgICAgaWYgKHR5
cGVvZiBjaGlsZCA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgY2hpbGQ9X19rd2FyZ3MuY2hpbGQ7
CisgICAgdmFyIF9fciA9IFtjaGlsZF07CisgICAgcmV0dXJuIF9fcjsKK307CisgICAgX191aV9G
b2N1c1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBs
eShfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLl9faW5pdF9fLCBhcmd1bWVudHMpOworICAgIH07
CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18udW5ib3Vu
ZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19pbml0X18u
aW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX2luaXRfXy5wYXJzZV9rd2FyZ3MgPSBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBl
Ll9faW5pdF9fLnBhcnNlX2t3YXJnczsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLmFk
ZENsaWNrTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMuY2xpY2tMaXN0
ZW5lcnMuYXBwZW5kKGxpc3RlbmVyKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLmFkZENsaWNrTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuYWRkQ2xpY2tMaXN0ZW5lci5jYWxsLmFw
cGx5KF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuYWRkQ2xpY2tMaXN0ZW5lciwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZENs
aWNrTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNQYW5lbC5w
cm90b3R5cGUuYWRkQ2xpY2tMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuYWRkRm9jdXNMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3Rl
bmVyKSB7CisgICAgdGhpcy5mb2N1c0xpc3RlbmVycy5hcHBlbmQobGlzdGVuZXIpOworICAgIH07
CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkRm9jdXNMaXN0ZW5l
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb2N1c1BhbmVsLnByb3RvdHlw
ZS5hZGRGb2N1c0xpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5h
ZGRGb2N1c0xpc3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb2N1c1BhbmVs
LnByb3RvdHlwZS5fX2NsYXNzX18uYWRkRm9jdXNMaXN0ZW5lci51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5hZGRGb2N1c0xpc3RlbmVyLmluc3Rh
bmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5hZGRLZXli
b2FyZExpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICB0aGlzLmtleWJvYXJkTGlz
dGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJv
dG90eXBlLl9fY2xhc3NfXy5hZGRLZXlib2FyZExpc3RlbmVyID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLmFkZEtleWJvYXJkTGlzdGVuZXIu
Y2FsbC5hcHBseShfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLmFkZEtleWJvYXJkTGlzdGVuZXIs
IGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5hZGRLZXlib2FyZExpc3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0ZvY3VzUGFuZWwucHJvdG90eXBlLmFkZEtleWJvYXJkTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLmFkZE1vdXNlTGlzdGVuZXIg
PSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMubW91c2VMaXN0ZW5lcnMuYXBwZW5kKGxp
c3RlbmVyKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LmFkZE1vdXNlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9j
dXNQYW5lbC5wcm90b3R5cGUuYWRkTW91c2VMaXN0ZW5lci5jYWxsLmFwcGx5KF9fdWlfRm9jdXNQ
YW5lbC5wcm90b3R5cGUuYWRkTW91c2VMaXN0ZW5lciwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmFkZE1vdXNlTGlzdGVuZXIudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuYWRkTW91
c2VMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNQYW5lbC5w
cm90b3R5cGUuZ2V0VGFiSW5kZXggPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gX191aV9Gb2N1
cy5wcm90b3R5cGUuX19jbGFzc19fLmdldFRhYkluZGV4KHRoaXMsIHRoaXMuZ2V0RWxlbWVudCgp
KTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFRh
YkluZGV4ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZvY3VzUGFuZWwucHJv
dG90eXBlLmdldFRhYkluZGV4LmNhbGwuYXBwbHkoX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5n
ZXRUYWJJbmRleCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLmdldFRhYkluZGV4LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLmdldFRhYkluZGV4Lmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5vbkJyb3dzZXJFdmVudCA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgdmFyIHR5cGUgPSBET01fZXZlbnRHZXRUeXBlKGV2ZW50KTsKKyAg
ICBpZiAoKHR5cGUgPT0gJ2NsaWNrJykpIHsKKworICAgICAgICB2YXIgX19saXN0ZW5lciA9IHRo
aXMuY2xpY2tMaXN0ZW5lcnMuX19pdGVyX18oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gX19saXN0ZW5l
ci5uZXh0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGlmIChsaXN0ZW5lci5v
bkNsaWNrKSB7CisgICAgbGlzdGVuZXIub25DbGljayh0aGlzLCBldmVudCk7CisgICAgfQorICAg
IGVsc2UgeworICAgIGxpc3RlbmVyKHRoaXMsIGV2ZW50KTsKKyAgICB9CisKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT0gU3RvcEl0ZXJh
dGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdtb3VzZWRvd24nKSB8
fCAodHlwZSA9PSAnbW91c2V1cCcpIHx8ICh0eXBlID09ICdtb3VzZW1vdmUnKSB8fCAodHlwZSA9
PSAnbW91c2VvdmVyJykgfHwgKHR5cGUgPT0gJ21vdXNlb3V0JykpIHsKKyAgICBfX3VpX01vdXNl
TGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlTW91c2VFdmVudCh0aGlzLCB0aGlzLm1v
dXNlTGlzdGVuZXJzLCB0aGlzLCBldmVudCk7CisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09
ICdibHVyJykgfHwgKHR5cGUgPT0gJ2ZvY3VzJykpIHsKKyAgICBfX3VpX0ZvY3VzTGlzdGVuZXIu
cHJvdG90eXBlLl9fY2xhc3NfXy5maXJlRm9jdXNFdmVudCh0aGlzLCB0aGlzLmZvY3VzTGlzdGVu
ZXJzLCB0aGlzLCBldmVudCk7CisgICAgfQorICAgIGVsc2UgaWYgKCh0eXBlID09ICdrZXlkb3du
JykgfHwgKHR5cGUgPT0gJ2tleXByZXNzJykgfHwgKHR5cGUgPT0gJ2tleXVwJykpIHsKKyAgICBf
X3VpX0tleWJvYXJkTGlzdGVuZXIucHJvdG90eXBlLl9fY2xhc3NfXy5maXJlS2V5Ym9hcmRFdmVu
dCh0aGlzLCB0aGlzLmtleWJvYXJkTGlzdGVuZXJzLCB0aGlzLCBldmVudCk7CisgICAgfQorICAg
IH07CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZl
bnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5
cGUub25Ccm93c2VyRXZlbnQuY2FsbC5hcHBseShfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLm9u
QnJvd3NlckV2ZW50LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb2N1c1BhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18ub25Ccm93c2VyRXZlbnQudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUub25Ccm93c2VyRXZlbnQuaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLnJlbW92ZUNsaWNrTGlz
dGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgIHRoaXMuY2xpY2tMaXN0ZW5lcnMucmVt
b3ZlKGxpc3RlbmVyKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLnJlbW92ZUNsaWNrTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUucmVtb3ZlQ2xpY2tMaXN0ZW5lci5jYWxsLmFwcGx5
KF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUucmVtb3ZlQ2xpY2tMaXN0ZW5lciwgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92
ZUNsaWNrTGlzdGVuZXIudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNQYW5l
bC5wcm90b3R5cGUucmVtb3ZlQ2xpY2tMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUucmVtb3ZlRm9jdXNMaXN0ZW5lciA9IGZ1bmN0
aW9uKGxpc3RlbmVyKSB7CisgICAgdGhpcy5mb2N1c0xpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIp
OworICAgIH07CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3Zl
Rm9jdXNMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb2N1c1Bh
bmVsLnByb3RvdHlwZS5yZW1vdmVGb2N1c0xpc3RlbmVyLmNhbGwuYXBwbHkoX191aV9Gb2N1c1Bh
bmVsLnByb3RvdHlwZS5yZW1vdmVGb2N1c0xpc3RlbmVyLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ucmVtb3ZlRm9jdXNMaXN0ZW5l
ci51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5y
ZW1vdmVGb2N1c0xpc3RlbmVyLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1
c1BhbmVsLnByb3RvdHlwZS5yZW1vdmVLZXlib2FyZExpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVu
ZXIpIHsKKyAgICB0aGlzLmtleWJvYXJkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisgICAg
fTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVLZXlib2Fy
ZExpc3RlbmVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZvY3VzUGFuZWwu
cHJvdG90eXBlLnJlbW92ZUtleWJvYXJkTGlzdGVuZXIuY2FsbC5hcHBseShfX3VpX0ZvY3VzUGFu
ZWwucHJvdG90eXBlLnJlbW92ZUtleWJvYXJkTGlzdGVuZXIsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5yZW1vdmVLZXlib2FyZExp
c3RlbmVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90
eXBlLnJlbW92ZUtleWJvYXJkTGlzdGVuZXIuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLnJlbW92ZU1vdXNlTGlzdGVuZXIgPSBmdW5jdGlvbihs
aXN0ZW5lcikgeworICAgIHRoaXMubW91c2VMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKyAg
ICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZU1vdXNl
TGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXNQYW5lbC5w
cm90b3R5cGUucmVtb3ZlTW91c2VMaXN0ZW5lci5jYWxsLmFwcGx5KF9fdWlfRm9jdXNQYW5lbC5w
cm90b3R5cGUucmVtb3ZlTW91c2VMaXN0ZW5lciwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9f
dWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZU1vdXNlTGlzdGVuZXIudW5i
b3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUucmVtb3Zl
TW91c2VMaXN0ZW5lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXNQYW5l
bC5wcm90b3R5cGUuc2V0QWNjZXNzS2V5ID0gZnVuY3Rpb24oa2V5KSB7CisgICAgX191aV9Gb2N1
cy5wcm90b3R5cGUuX19jbGFzc19fLnNldEFjY2Vzc0tleSh0aGlzLCB0aGlzLmdldEVsZW1lbnQo
KSwga2V5KTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LnNldEFjY2Vzc0tleSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb2N1c1Bh
bmVsLnByb3RvdHlwZS5zZXRBY2Nlc3NLZXkuY2FsbC5hcHBseShfX3VpX0ZvY3VzUGFuZWwucHJv
dG90eXBlLnNldEFjY2Vzc0tleSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXNQ
YW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldEFjY2Vzc0tleS51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5zZXRBY2Nlc3NLZXkuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLnNldEZvY3VzID0g
ZnVuY3Rpb24oZm9jdXNlZCkgeworICAgIGlmIChmb2N1c2VkKSB7CisgICAgX191aV9Gb2N1cy5w
cm90b3R5cGUuX19jbGFzc19fLmZvY3VzKHRoaXMsIHRoaXMuZ2V0RWxlbWVudCgpKTsKKyAgICB9
CisgICAgZWxzZSB7CisgICAgX191aV9Gb2N1cy5wcm90b3R5cGUuX19jbGFzc19fLmJsdXIodGhp
cywgdGhpcy5nZXRFbGVtZW50KCkpOworICAgIH0KKyAgICB9OworICAgIF9fdWlfRm9jdXNQYW5l
bC5wcm90b3R5cGUuX19jbGFzc19fLnNldEZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLnNldEZvY3VzLmNhbGwuYXBwbHkoX191aV9G
b2N1c1BhbmVsLnByb3RvdHlwZS5zZXRGb2N1cywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9f
dWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnNldEZvY3VzLnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLnNldEZvY3VzLmluc3RhbmNl
X21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5zZXRUYWJJbmRl
eCA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgX191aV9Gb2N1cy5wcm90b3R5cGUuX19jbGFzc19f
LnNldFRhYkluZGV4KHRoaXMsIHRoaXMuZ2V0RWxlbWVudCgpLCBpbmRleCk7CisgICAgfTsKKyAg
ICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRUYWJJbmRleCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb2N1c1BhbmVsLnByb3RvdHlwZS5zZXRUYWJJ
bmRleC5jYWxsLmFwcGx5KF9fdWlfRm9jdXNQYW5lbC5wcm90b3R5cGUuc2V0VGFiSW5kZXgsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzUGFuZWwucHJvdG90eXBlLl9fY2xhc3Nf
Xy5zZXRUYWJJbmRleC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1c1BhbmVs
LnByb3RvdHlwZS5zZXRUYWJJbmRleC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorZnVuY3Rp
b24gX191aV9Gb2N1cygpIHsKK30KK2Z1bmN0aW9uIHVpX0ZvY3VzKCkgeworICAgIHZhciBpbnN0
YW5jZSA9IG5ldyBfX3VpX0ZvY3VzKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3Rh
bmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0
YW5jZTsKK30KKworCitmdW5jdGlvbiBfX3VpX0ZvY3VzX2luaXRpYWxpemUoKSB7CisgICAgaWYo
X191aV9Gb2N1cy5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47CisgICAgX191aV9Gb2N1cy5f
X3dhc19pbml0aWFsaXplZF9fID0gdHJ1ZTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0ZvY3VzLCBf
X3B5anNsaWJfT2JqZWN0KTsKKyAgICBfX3VpX0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNzX18uX19u
ZXdfXyA9IHVpX0ZvY3VzOworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlv
bihlbGVtKSB7CisKKyAgICAgICAgZWxlbS5maXJzdENoaWxkLmJsdXIoKTsKKyAgICAgICAgCisg
ICAgfTsKKyAgICBfX3VpX0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNzX18uYmx1ciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gX191aV9Gb2N1cy5wcm90b3R5cGUuYmx1ci5jYWxsLmFwcGx5
KF9fdWlfRm9jdXMucHJvdG90eXBlLmJsdXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3Vp
X0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNzX18uYmx1ci51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9Gb2N1cy5wcm90b3R5cGUuYmx1ci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfRm9jdXMucHJvdG90eXBlLmNyZWF0ZUZvY3VzYWJsZSA9IGZ1bmN0aW9uKCkgeworCisg
ICAgICAgIHZhciBkaXYgPSAkZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICB2YXIg
aW5wdXQgPSAkZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgICAgIGlucHV0LnR5cGUg
PSAndGV4dCc7CisgICAgICAgIGlucHV0LnN0eWxlLndpZHRoID0gaW5wdXQuc3R5bGUuaGVpZ2h0
ID0gMDsKKyAgICAgICAgaW5wdXQuc3R5bGUuekluZGV4ID0gLTE7CisgICAgICAgIGlucHV0LnN0
eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKKworICAgICAgICBpbnB1dC5hZGRFdmVudExpc3Rl
bmVyKAorICAgICAgICAgICAgJ2JsdXInLAorICAgICAgICAgICAgZnVuY3Rpb24oZXZ0KSB7IGlm
ICh0aGlzLnBhcmVudE5vZGUub25ibHVyKSB0aGlzLnBhcmVudE5vZGUub25ibHVyKGV2dCk7IH0s
CisgICAgICAgICAgICBmYWxzZSk7CisKKyAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigK
KyAgICAgICAgICAgICdmb2N1cycsCisgICAgICAgICAgICBmdW5jdGlvbihldnQpIHsgaWYgKHRo
aXMucGFyZW50Tm9kZS5vbmZvY3VzKSB0aGlzLnBhcmVudE5vZGUub25mb2N1cyhldnQpOyB9LAor
ICAgICAgICAgICAgZmFsc2UpOworCisgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKAorICAg
ICAgICAgICAgJ21vdXNlZG93bicsCisgICAgICAgICAgICBmdW5jdGlvbihldnQpIHsgdGhpcy5m
aXJzdENoaWxkLmZvY3VzKCk7IH0sCisgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgIAorICAg
ICAgICBkaXYuYXBwZW5kQ2hpbGQoaW5wdXQpOworICAgICAgICByZXR1cm4gZGl2OworICAgICAg
ICAKKyAgICB9OworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5jcmVhdGVGb2N1
c2FibGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXMucHJvdG90eXBl
LmNyZWF0ZUZvY3VzYWJsZS5jYWxsLmFwcGx5KF9fdWlfRm9jdXMucHJvdG90eXBlLmNyZWF0ZUZv
Y3VzYWJsZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLl9f
Y2xhc3NfXy5jcmVhdGVGb2N1c2FibGUudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlf
Rm9jdXMucHJvdG90eXBlLmNyZWF0ZUZvY3VzYWJsZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24oZWxlbSkgeworCisgICAg
ICAgIGVsZW0uZmlyc3RDaGlsZC5mb2N1cygpOworICAgICAgICAKKyAgICB9OworICAgIF9fdWlf
Rm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5mb2N1cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9Gb2N1cy5wcm90b3R5cGUuZm9jdXMuY2FsbC5hcHBseShfX3VpX0ZvY3VzLnBy
b3RvdHlwZS5mb2N1cywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXMucHJvdG90
eXBlLl9fY2xhc3NfXy5mb2N1cy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb2N1
cy5wcm90b3R5cGUuZm9jdXMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3Vz
LnByb3RvdHlwZS5nZXRUYWJJbmRleCA9IGZ1bmN0aW9uKGVsZW0pIHsKKworICAgICAgICByZXR1
cm4gZWxlbS5maXJzdENoaWxkLnRhYkluZGV4OworICAgICAgICAKKyAgICB9OworICAgIF9fdWlf
Rm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUYWJJbmRleCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gX191aV9Gb2N1cy5wcm90b3R5cGUuZ2V0VGFiSW5kZXguY2FsbC5hcHBseShf
X3VpX0ZvY3VzLnByb3RvdHlwZS5nZXRUYWJJbmRleCwgYXJndW1lbnRzKTsKKyAgICB9OworICAg
IF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUYWJJbmRleC51bmJvdW5kX21ldGhv
ZCA9IHRydWU7CisgICAgX191aV9Gb2N1cy5wcm90b3R5cGUuZ2V0VGFiSW5kZXguaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZvY3VzLnByb3RvdHlwZS5zZXRBY2Nlc3NLZXkgPSBm
dW5jdGlvbihlbGVtLCBrZXkpIHsKKworICAgICAgICBlbGVtLmZpcnN0Q2hpbGQuYWNjZXNzS2V5
ID0ga2V5OworICAgICAgICAKKyAgICB9OworICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRBY2Nlc3NLZXkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9j
dXMucHJvdG90eXBlLnNldEFjY2Vzc0tleS5jYWxsLmFwcGx5KF9fdWlfRm9jdXMucHJvdG90eXBl
LnNldEFjY2Vzc0tleSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9jdXMucHJvdG90
eXBlLl9fY2xhc3NfXy5zZXRBY2Nlc3NLZXkudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9f
dWlfRm9jdXMucHJvdG90eXBlLnNldEFjY2Vzc0tleS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRm9jdXMucHJvdG90eXBlLnNldFRhYkluZGV4ID0gZnVuY3Rpb24oZWxlbSwgaW5k
ZXgpIHsKKworICAgICAgICBlbGVtLmZpcnN0Q2hpbGQudGFiSW5kZXggPSBpbmRleDsKKyAgICAg
ICAgCisgICAgfTsKKyAgICBfX3VpX0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VGFiSW5k
ZXggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9jdXMucHJvdG90eXBlLnNl
dFRhYkluZGV4LmNhbGwuYXBwbHkoX191aV9Gb2N1cy5wcm90b3R5cGUuc2V0VGFiSW5kZXgsIGFy
Z3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZvY3VzLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0
VGFiSW5kZXgudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9jdXMucHJvdG90eXBl
LnNldFRhYkluZGV4Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cit9CitmdW5jdGlvbiBfX3VpX0Zp
bGVVcGxvYWQoKSB7Cit9CitmdW5jdGlvbiB1aV9GaWxlVXBsb2FkKCkgeworICAgIHZhciBpbnN0
YW5jZSA9IG5ldyBfX3VpX0ZpbGVVcGxvYWQoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykg
aW5zdGFuY2UuX19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJu
IGluc3RhbmNlOworfQorCisKK2Z1bmN0aW9uIF9fdWlfRmlsZVVwbG9hZF9pbml0aWFsaXplKCkg
eworICAgIGlmKF9fdWlfRmlsZVVwbG9hZC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47Cisg
ICAgX191aV9GaWxlVXBsb2FkLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFf
X3VpX1dpZGdldC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX1dpZGdldF9pbml0
aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9GaWxlVXBsb2FkLCBfX3VpX1dpZGdldCk7
CisgICAgX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX0Zp
bGVVcGxvYWQ7CisgICAgX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5fX2luaXRfXyA9IGZ1bmN0
aW9uKCkgeworICAgIF9fdWlfV2lkZ2V0LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18odGhp
cyk7CisgICAgdGhpcy5zZXRFbGVtZW50KERPTV9jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAg
ICBET01fc2V0QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAndHlwZScsICdmaWxlJyk7Cisg
ICAgdGhpcy5zZXRTdHlsZU5hbWUoJ2d3dC1GaWxlVXBsb2FkJyk7CisgICAgfTsKKyAgICBfX3Vp
X0ZpbGVVcGxvYWQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFw
cGx5KF9fdWlfRmlsZVVwbG9hZC5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX0ZpbGVVcGxvYWQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5fX2luaXRf
Xy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmlsZVVwbG9hZC5wcm90b3R5cGUu
Z2V0RmlsZW5hbWUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldEF0dHJpYnV0ZSh0
aGlzLmdldEVsZW1lbnQoKSwgJ3ZhbHVlJyk7CisgICAgfTsKKyAgICBfX3VpX0ZpbGVVcGxvYWQu
cHJvdG90eXBlLl9fY2xhc3NfXy5nZXRGaWxlbmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5nZXRGaWxlbmFtZS5jYWxsLmFwcGx5KF9f
dWlfRmlsZVVwbG9hZC5wcm90b3R5cGUuZ2V0RmlsZW5hbWUsIGFyZ3VtZW50cyk7CisgICAgfTsK
KyAgICBfX3VpX0ZpbGVVcGxvYWQucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRGaWxlbmFtZS51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5nZXRGaWxl
bmFtZS5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRmlsZVVwbG9hZC5wcm90b3R5
cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0QXR0cmlidXRlKHRo
aXMuZ2V0RWxlbWVudCgpLCAnbmFtZScpOworICAgIH07CisgICAgX191aV9GaWxlVXBsb2FkLnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
X191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5nZXROYW1lLmNhbGwuYXBwbHkoX191aV9GaWxlVXBs
b2FkLnByb3RvdHlwZS5nZXROYW1lLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9GaWxl
VXBsb2FkLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0TmFtZS51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5nZXROYW1lLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7CisgICAgX191aV9GaWxlVXBsb2FkLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24o
bmFtZSkgeworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICduYW1lJywg
bmFtZSk7CisgICAgfTsKKyAgICBfX3VpX0ZpbGVVcGxvYWQucHJvdG90eXBlLl9fY2xhc3NfXy5z
ZXROYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0ZpbGVVcGxvYWQucHJv
dG90eXBlLnNldE5hbWUuY2FsbC5hcHBseShfX3VpX0ZpbGVVcGxvYWQucHJvdG90eXBlLnNldE5h
bWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0ZpbGVVcGxvYWQucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXROYW1lLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0ZpbGVVcGxv
YWQucHJvdG90eXBlLnNldE5hbWUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9u
IF9fdWlfSGlkZGVuKCkgeworfQorZnVuY3Rpb24gdWlfSGlkZGVuKG5hbWUsIHZhbHVlKSB7Cisg
ICAgaWYgKHR5cGVvZiBuYW1lID09ICd1bmRlZmluZWQnKSBuYW1lPW51bGw7CisgICAgaWYgKHR5
cGVvZiB2YWx1ZSA9PSAndW5kZWZpbmVkJykgdmFsdWU9bnVsbDsKKyAgICB2YXIgaW5zdGFuY2Ug
PSBuZXcgX191aV9IaWRkZW4oKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2Uu
X19pbml0X18uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQorCisKK3VpX0hpZGRlbi5wYXJzZV9rd2FyZ3MgPSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBu
YW1lLCB2YWx1ZSApIHsKKyAgICBpZiAodHlwZW9mIG5hbWUgPT0gJ3VuZGVmaW5lZCcpCisgICAg
ICAgIG5hbWU9X19rd2FyZ3MubmFtZTsKKyAgICBpZiAodHlwZW9mIHZhbHVlID09ICd1bmRlZmlu
ZWQnKQorICAgICAgICB2YWx1ZT1fX2t3YXJncy52YWx1ZTsKKyAgICB2YXIgX19yID0gW25hbWUs
IHZhbHVlXTsKKyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9fdWlfSGlkZGVuX2luaXRp
YWxpemUoKSB7CisgICAgaWYoX191aV9IaWRkZW4uX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJu
OworICAgIF9fdWlfSGlkZGVuLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlmKCFf
X3VpX1dpZGdldC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAgICBfX3VpX1dpZGdldF9pbml0
aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191aV9IaWRkZW4sIF9fdWlfV2lkZ2V0KTsKKyAg
ICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19jbGFzc19fLl9fbmV3X18gPSB1aV9IaWRkZW47Cisg
ICAgX191aV9IaWRkZW4ucHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24obmFtZSwgdmFsdWUp
IHsKKyAgICBpZiAodHlwZW9mIG5hbWUgPT0gJ3VuZGVmaW5lZCcpIG5hbWU9bnVsbDsKKyAgICBp
ZiAodHlwZW9mIHZhbHVlID09ICd1bmRlZmluZWQnKSB2YWx1ZT1udWxsOworICAgIF9fdWlfV2lk
Z2V0LnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18odGhpcyk7CisgICAgdmFyIGVsZW1lbnQg
PSBET01fY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICB0aGlzLnNldEVsZW1lbnQoZWxlbWVu
dCk7CisgICAgRE9NX3NldEF0dHJpYnV0ZShlbGVtZW50LCAndHlwZScsICdoaWRkZW4nKTsKKyAg
ICBpZiAoKG5hbWUgIT0gbnVsbCkpIHsKKyAgICB0aGlzLnNldE5hbWUobmFtZSk7CisgICAgfQor
ICAgIGlmICgodmFsdWUgIT0gbnVsbCkpIHsKKyAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTsKKyAg
ICB9CisgICAgfTsKK19fdWlfSGlkZGVuLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3Mg
PSBmdW5jdGlvbiAoIF9fa3dhcmdzLCBuYW1lLCB2YWx1ZSApIHsKKyAgICBpZiAodHlwZW9mIG5h
bWUgPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIG5hbWU9X19rd2FyZ3MubmFtZTsKKyAgICBpZiAo
dHlwZW9mIHZhbHVlID09ICd1bmRlZmluZWQnKQorICAgICAgICB2YWx1ZT1fX2t3YXJncy52YWx1
ZTsKKyAgICB2YXIgX19yID0gW25hbWUsIHZhbHVlXTsKKyAgICByZXR1cm4gX19yOworfTsKKyAg
ICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBs
eShfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
ICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnVuYm91bmRfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9f
LnBhcnNlX2t3YXJncyA9IF9fdWlfSGlkZGVuLnByb3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2Fy
Z3M7CisgICAgX191aV9IaWRkZW4ucHJvdG90eXBlLmdldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBET01fZ2V0QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAnZGVm
YXVsdFZhbHVlJyk7CisgICAgfTsKKyAgICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19jbGFzc19f
LmdldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IaWRk
ZW4ucHJvdG90eXBlLmdldERlZmF1bHRWYWx1ZS5jYWxsLmFwcGx5KF9fdWlfSGlkZGVuLnByb3Rv
dHlwZS5nZXREZWZhdWx0VmFsdWUsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0hpZGRl
bi5wcm90b3R5cGUuX19jbGFzc19fLmdldERlZmF1bHRWYWx1ZS51bmJvdW5kX21ldGhvZCA9IHRy
dWU7CisgICAgX191aV9IaWRkZW4ucHJvdG90eXBlLmdldERlZmF1bHRWYWx1ZS5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdu
YW1lJyk7CisgICAgfTsKKyAgICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19jbGFzc19fLmdldE5h
bWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5n
ZXROYW1lLmNhbGwuYXBwbHkoX191aV9IaWRkZW4ucHJvdG90eXBlLmdldE5hbWUsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuX19jbGFzc19fLmdldE5hbWUu
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5nZXROYW1l
Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IaWRkZW4ucHJvdG90eXBlLmdldFZh
bHVlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERPTV9nZXRBdHRyaWJ1dGUodGhpcy5nZXRF
bGVtZW50KCksICd2YWx1ZScpOworICAgIH07CisgICAgX191aV9IaWRkZW4ucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IaWRk
ZW4ucHJvdG90eXBlLmdldFZhbHVlLmNhbGwuYXBwbHkoX191aV9IaWRkZW4ucHJvdG90eXBlLmdl
dFZhbHVlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IaWRkZW4ucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRWYWx1ZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IaWRkZW4u
cHJvdG90eXBlLmdldFZhbHVlLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IaWRk
ZW4ucHJvdG90eXBlLnNldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKGRlZmF1bHRWYWx1ZSkgewor
ICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdkZWZhdWx0VmFsdWUnLCBk
ZWZhdWx0VmFsdWUpOworICAgIH07CisgICAgX191aV9IaWRkZW4ucHJvdG90eXBlLl9fY2xhc3Nf
Xy5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfSGlk
ZGVuLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUuY2FsbC5hcHBseShfX3VpX0hpZGRlbi5wcm90
b3R5cGUuc2V0RGVmYXVsdFZhbHVlLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9IaWRk
ZW4ucHJvdG90eXBlLl9fY2xhc3NfXy5zZXREZWZhdWx0VmFsdWUudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUuaW5zdGFuY2Vf
bWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hpZGRlbi5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0
aW9uKG5hbWUpIHsKKyAgICBpZiAoKG5hbWUgPT0gbnVsbCkpIHsKKyAgICBjb25zb2xlLmVycm9y
KCdOYW1lIGNhbm5vdCBiZSBudWxsJyk7CisgICAgfQorICAgIGVsc2UgaWYgKChweWpzbGliX2xl
bihuYW1lKSA9PSAwKSkgeworICAgIGNvbnNvbGUuZXJyb3IoJ05hbWUgY2Fubm90IGJlIGFuIGVt
cHR5IHN0cmluZy4nKTsKKyAgICB9CisgICAgRE9NX3NldEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1l
bnQoKSwgJ25hbWUnLCBuYW1lKTsKKyAgICB9OworICAgIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5f
X2NsYXNzX18uc2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9IaWRk
ZW4ucHJvdG90eXBlLnNldE5hbWUuY2FsbC5hcHBseShfX3VpX0hpZGRlbi5wcm90b3R5cGUuc2V0
TmFtZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5fX2Ns
YXNzX18uc2V0TmFtZS51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9IaWRkZW4ucHJv
dG90eXBlLnNldE5hbWUuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0hpZGRlbi5w
cm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIERPTV9zZXRBdHRyaWJ1
dGUodGhpcy5nZXRFbGVtZW50KCksICd2YWx1ZScsIHZhbHVlKTsKKyAgICB9OworICAgIF9fdWlf
SGlkZGVuLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5zZXRWYWx1ZS5jYWxsLmFwcGx5KF9fdWlf
SGlkZGVuLnByb3RvdHlwZS5zZXRWYWx1ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlf
SGlkZGVuLnByb3RvdHlwZS5fX2NsYXNzX18uc2V0VmFsdWUudW5ib3VuZF9tZXRob2QgPSB0cnVl
OworICAgIF9fdWlfSGlkZGVuLnByb3RvdHlwZS5zZXRWYWx1ZS5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworfQorZnVuY3Rpb24gX191aV9OYW1lZEZyYW1lKCkgeworfQorZnVuY3Rpb24gdWlfTmFt
ZWRGcmFtZShuYW1lKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfTmFtZWRGcmFtZSgp
OworICAgIGlmKGluc3RhbmNlLl9faW5pdF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0
YW5jZSwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24g
X191aV9OYW1lZEZyYW1lX2luaXRpYWxpemUoKSB7CisgICAgaWYoX191aV9OYW1lZEZyYW1lLl9f
d2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX05hbWVkRnJhbWUuX193YXNfaW5p
dGlhbGl6ZWRfXyA9IHRydWU7CisgICAgaWYoIV9fdWlfRnJhbWUuX193YXNfaW5pdGlhbGl6ZWRf
XykKKyAgICAgICAgX191aV9GcmFtZV9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQoX191
aV9OYW1lZEZyYW1lLCBfX3VpX0ZyYW1lKTsKKyAgICBfX3VpX05hbWVkRnJhbWUucHJvdG90eXBl
Ll9fY2xhc3NfXy5fX25ld19fID0gdWlfTmFtZWRGcmFtZTsKKyAgICBfX3VpX05hbWVkRnJhbWUu
cHJvdG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24obmFtZSkgeworICAgIF9fdWlfRnJhbWUucHJv
dG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyh0aGlzKTsKKyAgICB2YXIgZGl2ID0gRE9NX2NyZWF0
ZURpdigpOworICAgIERPTV9zZXRJbm5lckhUTUwoZGl2LCAgKCAgKCAnPGlmcmFtZSBuYW1lPVwn
JyArIG5hbWUgKSAgKyAnXCc+JyApICk7CisgICAgdmFyIGlmcmFtZSA9IERPTV9nZXRGaXJzdENo
aWxkKGRpdik7CisgICAgdGhpcy5zZXRFbGVtZW50KGlmcmFtZSk7CisgICAgfTsKKyAgICBfX3Vp
X05hbWVkRnJhbWUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9OYW1lZEZyYW1lLnByb3RvdHlwZS5fX2luaXRfXy5jYWxsLmFw
cGx5KF9fdWlfTmFtZWRGcmFtZS5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50cyk7CisgICAg
fTsKKyAgICBfX3VpX05hbWVkRnJhbWUucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJv
dW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9OYW1lZEZyYW1lLnByb3RvdHlwZS5fX2luaXRf
Xy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfTmFtZWRGcmFtZS5wcm90b3R5cGUu
Z2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBET01fZ2V0QXR0cmlidXRlKHRoaXMu
Z2V0RWxlbWVudCgpLCAnbmFtZScpOworICAgIH07CisgICAgX191aV9OYW1lZEZyYW1lLnByb3Rv
dHlwZS5fX2NsYXNzX18uZ2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191
aV9OYW1lZEZyYW1lLnByb3RvdHlwZS5nZXROYW1lLmNhbGwuYXBwbHkoX191aV9OYW1lZEZyYW1l
LnByb3RvdHlwZS5nZXROYW1lLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9OYW1lZEZy
YW1lLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0TmFtZS51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9OYW1lZEZyYW1lLnByb3RvdHlwZS5nZXROYW1lLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7Cit9CitmdW5jdGlvbiBfX3VpX0V2ZW50T2JqZWN0KCkgeworfQorZnVuY3Rpb24gdWlfRXZl
bnRPYmplY3Qoc291cmNlKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9fdWlfRXZlbnRPYmpl
Y3QoKTsKKyAgICBpZihpbnN0YW5jZS5fX2luaXRfXykgaW5zdGFuY2UuX19pbml0X18uYXBwbHko
aW5zdGFuY2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisKK2Z1bmN0
aW9uIF9fdWlfRXZlbnRPYmplY3RfaW5pdGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX0V2ZW50T2Jq
ZWN0Ll9fd2FzX2luaXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX3VpX0V2ZW50T2JqZWN0Ll9f
d2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIHB5anNfZXh0ZW5kKF9fdWlfRXZlbnRPYmpl
Y3QsIF9fcHlqc2xpYl9PYmplY3QpOworICAgIF9fdWlfRXZlbnRPYmplY3QucHJvdG90eXBlLl9f
Y2xhc3NfXy5fX25ld19fID0gdWlfRXZlbnRPYmplY3Q7CisgICAgX191aV9FdmVudE9iamVjdC5w
cm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlvbihzb3VyY2UpIHsKKyAgICB0aGlzLnNvdXJjZSA9
IHNvdXJjZTsKKyAgICB9OworICAgIF9fdWlfRXZlbnRPYmplY3QucHJvdG90eXBlLl9fY2xhc3Nf
Xy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9FdmVudE9iamVj
dC5wcm90b3R5cGUuX19pbml0X18uY2FsbC5hcHBseShfX3VpX0V2ZW50T2JqZWN0LnByb3RvdHlw
ZS5fX2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRXZlbnRPYmplY3QucHJv
dG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9FdmVudE9iamVjdC5wcm90b3R5cGUuX19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX3VpX0V2ZW50T2JqZWN0LnByb3RvdHlwZS5nZXRTb3VyY2UgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5zb3VyY2U7CisgICAgfTsKKyAgICBfX3VpX0V2ZW50T2JqZWN0LnBy
b3RvdHlwZS5fX2NsYXNzX18uZ2V0U291cmNlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBfX3VpX0V2ZW50T2JqZWN0LnByb3RvdHlwZS5nZXRTb3VyY2UuY2FsbC5hcHBseShfX3VpX0V2
ZW50T2JqZWN0LnByb3RvdHlwZS5nZXRTb3VyY2UsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBf
X3VpX0V2ZW50T2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0U291cmNlLnVuYm91bmRfbWV0
aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0V2ZW50T2JqZWN0LnByb3RvdHlwZS5nZXRTb3VyY2UuaW5z
dGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30KK2Z1bmN0aW9uIF9fdWlfRm9ybVN1Ym1pdEV2ZW50KCkg
eworfQorZnVuY3Rpb24gdWlfRm9ybVN1Ym1pdEV2ZW50KHNvdXJjZSkgeworICAgIHZhciBpbnN0
YW5jZSA9IG5ldyBfX3VpX0Zvcm1TdWJtaXRFdmVudCgpOworICAgIGlmKGluc3RhbmNlLl9faW5p
dF9fKSBpbnN0YW5jZS5fX2luaXRfXy5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKKyAgICBy
ZXR1cm4gaW5zdGFuY2U7Cit9CisKKworZnVuY3Rpb24gX191aV9Gb3JtU3VibWl0RXZlbnRfaW5p
dGlhbGl6ZSgpIHsKKyAgICBpZihfX3VpX0Zvcm1TdWJtaXRFdmVudC5fX3dhc19pbml0aWFsaXpl
ZF9fKSByZXR1cm47CisgICAgX191aV9Gb3JtU3VibWl0RXZlbnQuX193YXNfaW5pdGlhbGl6ZWRf
XyA9IHRydWU7CisgICAgaWYoIV9fdWlfRXZlbnRPYmplY3QuX193YXNfaW5pdGlhbGl6ZWRfXykK
KyAgICAgICAgX191aV9FdmVudE9iamVjdF9pbml0aWFsaXplKCk7CisgICAgcHlqc19leHRlbmQo
X191aV9Gb3JtU3VibWl0RXZlbnQsIF9fdWlfRXZlbnRPYmplY3QpOworICAgIF9fdWlfRm9ybVN1
Ym1pdEV2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX0Zvcm1TdWJtaXRFdmVu
dDsKKyAgICBfX3VpX0Zvcm1TdWJtaXRFdmVudC5wcm90b3R5cGUuX19pbml0X18gPSBmdW5jdGlv
bihzb3VyY2UpIHsKKyAgICBfX3VpX0V2ZW50T2JqZWN0LnByb3RvdHlwZS5fX2NsYXNzX18uX19p
bml0X18odGhpcywgc291cmNlKTsKKyAgICB0aGlzLmNhbmNlbCA9IGZhbHNlOworICAgIH07Cisg
ICAgX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBl
Ll9faW5pdF9fLmNhbGwuYXBwbHkoX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLl9faW5p
dF9fLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90
eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9G
b3JtU3VibWl0RXZlbnQucHJvdG90eXBlLl9faW5pdF9fLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLmlzQ2FuY2VsbGVkID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMuY2FuY2VsOworICAgIH07CisgICAgX191aV9Gb3JtU3Vi
bWl0RXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5pc0NhbmNlbGxlZCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLmlzQ2FuY2VsbGVk
LmNhbGwuYXBwbHkoX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLmlzQ2FuY2VsbGVkLCBh
cmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLl9f
Y2xhc3NfXy5pc0NhbmNlbGxlZC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb3Jt
U3VibWl0RXZlbnQucHJvdG90eXBlLmlzQ2FuY2VsbGVkLmluc3RhbmNlX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLnNldENhbmNlbGxlZCA9IGZ1bmN0
aW9uKCkgeworICAgIHRoaXMuY2FuY2VsID0gdGhpcy5jYW5jZWw7CisgICAgfTsKKyAgICBfX3Vp
X0Zvcm1TdWJtaXRFdmVudC5wcm90b3R5cGUuX19jbGFzc19fLnNldENhbmNlbGxlZCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLnNl
dENhbmNlbGxlZC5jYWxsLmFwcGx5KF9fdWlfRm9ybVN1Ym1pdEV2ZW50LnByb3RvdHlwZS5zZXRD
YW5jZWxsZWQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1TdWJtaXRFdmVudC5w
cm90b3R5cGUuX19jbGFzc19fLnNldENhbmNlbGxlZC51bmJvdW5kX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9Gb3JtU3VibWl0RXZlbnQucHJvdG90eXBlLnNldENhbmNlbGxlZC5pbnN0YW5jZV9t
ZXRob2QgPSB0cnVlOworfQorZnVuY3Rpb24gX191aV9Gb3JtU3VibWl0Q29tcGxldGVFdmVudCgp
IHsKK30KK2Z1bmN0aW9uIHVpX0Zvcm1TdWJtaXRDb21wbGV0ZUV2ZW50KHNvdXJjZSwgcmVzdWx0
cykgeworICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfX3VpX0Zvcm1TdWJtaXRDb21wbGV0ZUV2ZW50
KCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFwcGx5KGlu
c3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCitmdW5jdGlv
biBfX3VpX0Zvcm1TdWJtaXRDb21wbGV0ZUV2ZW50X2luaXRpYWxpemUoKSB7CisgICAgaWYoX191
aV9Gb3JtU3VibWl0Q29tcGxldGVFdmVudC5fX3dhc19pbml0aWFsaXplZF9fKSByZXR1cm47Cisg
ICAgX191aV9Gb3JtU3VibWl0Q29tcGxldGVFdmVudC5fX3dhc19pbml0aWFsaXplZF9fID0gdHJ1
ZTsKKyAgICBpZighX191aV9FdmVudE9iamVjdC5fX3dhc19pbml0aWFsaXplZF9fKQorICAgICAg
ICBfX3VpX0V2ZW50T2JqZWN0X2luaXRpYWxpemUoKTsKKyAgICBweWpzX2V4dGVuZChfX3VpX0Zv
cm1TdWJtaXRDb21wbGV0ZUV2ZW50LCBfX3VpX0V2ZW50T2JqZWN0KTsKKyAgICBfX3VpX0Zvcm1T
dWJtaXRDb21wbGV0ZUV2ZW50LnByb3RvdHlwZS5fX2NsYXNzX18uX19uZXdfXyA9IHVpX0Zvcm1T
dWJtaXRDb21wbGV0ZUV2ZW50OworICAgIF9fdWlfRm9ybVN1Ym1pdENvbXBsZXRlRXZlbnQucHJv
dG90eXBlLl9faW5pdF9fID0gZnVuY3Rpb24oc291cmNlLCByZXN1bHRzKSB7CisgICAgX191aV9F
dmVudE9iamVjdC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fKHRoaXMsIHNvdXJjZSk7Cisg
ICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0czsKKyAgICB9OworICAgIF9fdWlfRm9ybVN1Ym1pdENv
bXBsZXRlRXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gX191aV9Gb3JtU3VibWl0Q29tcGxldGVFdmVudC5wcm90b3R5cGUuX19p
bml0X18uY2FsbC5hcHBseShfX3VpX0Zvcm1TdWJtaXRDb21wbGV0ZUV2ZW50LnByb3RvdHlwZS5f
X2luaXRfXywgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVN1Ym1pdENvbXBsZXRl
RXZlbnQucHJvdG90eXBlLl9fY2xhc3NfXy5fX2luaXRfXy51bmJvdW5kX21ldGhvZCA9IHRydWU7
CisgICAgX191aV9Gb3JtU3VibWl0Q29tcGxldGVFdmVudC5wcm90b3R5cGUuX19pbml0X18uaW5z
dGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1TdWJtaXRDb21wbGV0ZUV2ZW50LnBy
b3RvdHlwZS5nZXRSZXN1bHRzID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucmVzdWx0
czsKKyAgICB9OworICAgIF9fdWlfRm9ybVN1Ym1pdENvbXBsZXRlRXZlbnQucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRSZXN1bHRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zv
cm1TdWJtaXRDb21wbGV0ZUV2ZW50LnByb3RvdHlwZS5nZXRSZXN1bHRzLmNhbGwuYXBwbHkoX191
aV9Gb3JtU3VibWl0Q29tcGxldGVFdmVudC5wcm90b3R5cGUuZ2V0UmVzdWx0cywgYXJndW1lbnRz
KTsKKyAgICB9OworICAgIF9fdWlfRm9ybVN1Ym1pdENvbXBsZXRlRXZlbnQucHJvdG90eXBlLl9f
Y2xhc3NfXy5nZXRSZXN1bHRzLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1T
dWJtaXRDb21wbGV0ZUV2ZW50LnByb3RvdHlwZS5nZXRSZXN1bHRzLmluc3RhbmNlX21ldGhvZCA9
IHRydWU7Cit9Cit2YXIgdWlfRm9ybVBhbmVsX2Zvcm1JZCA9IDA7CitmdW5jdGlvbiBfX3VpX0Zv
cm1QYW5lbCgpIHsKK30KK2Z1bmN0aW9uIHVpX0Zvcm1QYW5lbCh0YXJnZXQpIHsKKyAgICBpZiAo
dHlwZW9mIHRhcmdldCA9PSAndW5kZWZpbmVkJykgdGFyZ2V0PW51bGw7CisgICAgdmFyIGluc3Rh
bmNlID0gbmV3IF9fdWlfRm9ybVBhbmVsKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGlu
c3RhbmNlLl9faW5pdF9fLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBp
bnN0YW5jZTsKK30KKworCit1aV9Gb3JtUGFuZWwucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBf
X2t3YXJncywgdGFyZ2V0ICkgeworICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09ICd1bmRlZmluZWQn
KQorICAgICAgICB0YXJnZXQ9X19rd2FyZ3MudGFyZ2V0OworICAgIHZhciBfX3IgPSBbdGFyZ2V0
XTsKKyAgICByZXR1cm4gX19yOworfTsKK2Z1bmN0aW9uIF9fdWlfRm9ybVBhbmVsX2luaXRpYWxp
emUoKSB7CisgICAgaWYoX191aV9Gb3JtUGFuZWwuX193YXNfaW5pdGlhbGl6ZWRfXykgcmV0dXJu
OworICAgIF9fdWlfRm9ybVBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18gPSB0cnVlOworICAgIGlm
KCFfX3VpX1NpbXBsZVBhbmVsLl9fd2FzX2luaXRpYWxpemVkX18pCisgICAgICAgIF9fdWlfU2lt
cGxlUGFuZWxfaW5pdGlhbGl6ZSgpOworICAgIHB5anNfZXh0ZW5kKF9fdWlfRm9ybVBhbmVsLCBf
X3VpX1NpbXBsZVBhbmVsKTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
Ll9fbmV3X18gPSB1aV9Gb3JtUGFuZWw7CitfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFz
c19fLkVOQ09ESU5HX01VTFRJUEFSVCA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKK19fdWlfRm9y
bVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uRU5DT0RJTkdfVVJMRU5DT0RFRCA9ICdhcHBsaWNh
dGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOworX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5NRVRIT0RfR0VUID0gJ2dldCc7CitfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19j
bGFzc19fLk1FVEhPRF9QT1NUID0gJ3Bvc3QnOworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlw
ZS5fX2luaXRfXyA9IGZ1bmN0aW9uKHRhcmdldCkgeworICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09
ICd1bmRlZmluZWQnKSB0YXJnZXQ9bnVsbDsKKyAgICBpZiAocHlqc2xpYl9oYXNhdHRyKHRhcmdl
dCwgJ2dldE5hbWUnKSkgeworICAgIHZhciB0YXJnZXQgPSB0YXJnZXQuZ2V0TmFtZSgpOworICAg
IH0KKyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uX19pbml0X18odGhp
cywgRE9NX2NyZWF0ZUZvcm0oKSk7CisgICAgdGhpcy5mb3JtSGFuZGxlcnMgPSBuZXcgcHlqc2xp
Yl9MaXN0KFtdKTsKKyAgICB0aGlzLmlmcmFtZSA9IG51bGw7CisgICAgdWlfRm9ybVBhbmVsX2Zv
cm1JZCArPSAxOworICAgIHZhciBmb3JtTmFtZSA9ICAoICdGb3JtUGFuZWxfJyArIHB5anNsaWJf
c3RyKHVpX0Zvcm1QYW5lbF9mb3JtSWQpICkgOworICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5n
ZXRFbGVtZW50KCksICd0YXJnZXQnLCBmb3JtTmFtZSk7CisgICAgRE9NX3NldElubmVySFRNTCh0
aGlzLmdldEVsZW1lbnQoKSwgICggICggJzxpZnJhbWUgbmFtZT1cJycgKyBmb3JtTmFtZSApICAr
ICdcJz4nICkgKTsKKyAgICB0aGlzLmlmcmFtZSA9IERPTV9nZXRGaXJzdENoaWxkKHRoaXMuZ2V0
RWxlbWVudCgpKTsKKyAgICBET01fc2V0SW50U3R5bGVBdHRyaWJ1dGUodGhpcy5pZnJhbWUsICd3
aWR0aCcsIDApOworICAgIERPTV9zZXRJbnRTdHlsZUF0dHJpYnV0ZSh0aGlzLmlmcmFtZSwgJ2hl
aWdodCcsIDApOworICAgIERPTV9zZXRJbnRTdHlsZUF0dHJpYnV0ZSh0aGlzLmlmcmFtZSwgJ2Jv
cmRlcicsIDApOworICAgIHRoaXMuc2lua0V2ZW50cyhfX3VpX0V2ZW50LnByb3RvdHlwZS5fX2Ns
YXNzX18uT05MT0FEKTsKKyAgICBpZiAoKHRhcmdldCAhPSBudWxsKSkgeworICAgIHRoaXMuc2V0
VGFyZ2V0KHRhcmdldCk7CisgICAgfQorICAgIH07CitfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUu
X19pbml0X18ucGFyc2Vfa3dhcmdzID0gZnVuY3Rpb24gKCBfX2t3YXJncywgdGFyZ2V0ICkgewor
ICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09ICd1bmRlZmluZWQnKQorICAgICAgICB0YXJnZXQ9X19r
d2FyZ3MudGFyZ2V0OworICAgIHZhciBfX3IgPSBbdGFyZ2V0XTsKKyAgICByZXR1cm4gX19yOwor
fTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5pdF9fID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19pbml0
X18uY2FsbC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19pbml0X18sIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLl9faW5p
dF9fLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUu
X19pbml0X18uaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLl9faW5pdF9fLnBhcnNlX2t3YXJncyA9IF9fdWlfRm9ybVBhbmVsLnBy
b3RvdHlwZS5fX2luaXRfXy5wYXJzZV9rd2FyZ3M7CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90
eXBlLmFkZEZvcm1IYW5kbGVyID0gZnVuY3Rpb24oaGFuZGxlcikgeworICAgIHRoaXMuZm9ybUhh
bmRsZXJzLmFwcGVuZChoYW5kbGVyKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uYWRkRm9ybUhhbmRsZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5hZGRGb3JtSGFuZGxlci5jYWxsLmFwcGx5KF9f
dWlfRm9ybVBhbmVsLnByb3RvdHlwZS5hZGRGb3JtSGFuZGxlciwgYXJndW1lbnRzKTsKKyAgICB9
OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uYWRkRm9ybUhhbmRsZXIu
dW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5hZGRG
b3JtSGFuZGxlci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnBy
b3RvdHlwZS5nZXRBY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRE9NX2dldEF0dHJp
YnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ2FjdGlvbicpOworICAgIH07CisgICAgX191aV9Gb3Jt
UGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRBY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5nZXRBY3Rpb24uY2FsbC5hcHBseShf
X3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuZ2V0QWN0aW9uLCBhcmd1bWVudHMpOworICAgIH07Cisg
ICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRBY3Rpb24udW5ib3VuZF9t
ZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5nZXRBY3Rpb24uaW5z
dGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuZ2V0RW5j
b2RpbmcgPSBmdW5jdGlvbihmb3JtKSB7CisKKyAgICAgICAgcmV0dXJuIGZvcm0uZW5jdHlwZTsK
KyAgICAgICAgCisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LmdldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zvcm1QYW5l
bC5wcm90b3R5cGUuZ2V0RW5jb2RpbmcuY2FsbC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5
cGUuZ2V0RW5jb2RpbmcsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5w
cm90b3R5cGUuX19jbGFzc19fLmdldEVuY29kaW5nLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAg
ICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuZ2V0RW5jb2RpbmcuaW5zdGFuY2VfbWV0aG9kID0g
dHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuZ2V0TWV0aG9kID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIERPTV9nZXRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdtZXRo
b2QnKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uZ2V0
TWV0aG9kID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zvcm1QYW5lbC5wcm90
b3R5cGUuZ2V0TWV0aG9kLmNhbGwuYXBwbHkoX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLmdldE1l
dGhvZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5f
X2NsYXNzX18uZ2V0TWV0aG9kLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1Q
YW5lbC5wcm90b3R5cGUuZ2V0TWV0aG9kLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAgX191
aV9Gb3JtUGFuZWwucHJvdG90eXBlLmdldFRhcmdldCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biBET01fZ2V0QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAndGFyZ2V0Jyk7CisgICAgfTsK
KyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFRhcmdldCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLmdldFRhcmdl
dC5jYWxsLmFwcGx5KF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5nZXRUYXJnZXQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLmdldFRh
cmdldC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBl
LmdldFRhcmdldC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnBy
b3RvdHlwZS5nZXRUZXh0Q29udGVudHMgPSBmdW5jdGlvbihpZnJhbWUpIHsKKworICAgICAgICB0
cnkgeworICAgICAgICAgICAgaWYgKCFpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
aWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw7CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAg
IAorICAgIH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUZXh0
Q29udGVudHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9ybVBhbmVsLnBy
b3RvdHlwZS5nZXRUZXh0Q29udGVudHMuY2FsbC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5
cGUuZ2V0VGV4dENvbnRlbnRzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb3JtUGFu
ZWwucHJvdG90eXBlLl9fY2xhc3NfXy5nZXRUZXh0Q29udGVudHMudW5ib3VuZF9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5nZXRUZXh0Q29udGVudHMuaW5zdGFu
Y2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuaG9va0V2ZW50
cyA9IGZ1bmN0aW9uKGlmcmFtZSwgZm9ybSwgbGlzdGVuZXIpIHsKKworICAgICAgICBpZiAoaWZy
YW1lKSB7CisgICAgICAgICAgICBpZnJhbWUub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFpZnJhbWUuX19mb3JtQWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uRnJhbWVMb2FkKCk7
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgZm9ybS5vbnN1Ym1pdCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKGlmcmFtZSkKKyAgICAgICAgICAgICAgICBpZnJh
bWUuX19mb3JtQWN0aW9uID0gZm9ybS5hY3Rpb247CisgICAgICAgICAgICByZXR1cm4gbGlzdGVu
ZXIub25Gb3JtU3VibWl0KCk7CisgICAgICAgIH07CisgICAgICAgIAorICAgIH07CisgICAgX191
aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5ob29rRXZlbnRzID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuaG9va0V2ZW50cy5jYWxs
LmFwcGx5KF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5ob29rRXZlbnRzLCBhcmd1bWVudHMpOwor
ICAgIH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5ob29rRXZlbnRz
LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuaG9v
a0V2ZW50cy5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnByb3Rv
dHlwZS5vbkZvcm1TdWJtaXQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgZXZlbnQgPSB1aV9Gb3Jt
U3VibWl0RXZlbnQodGhpcyk7CisKKyAgICAgICAgdmFyIF9faGFuZGxlciA9IHRoaXMuZm9ybUhh
bmRsZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX19oYW5kbGVyLm5leHQoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgaGFuZGxlci5vblN1Ym1pdChldmVudCk7CisK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUg
IT0gU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuICEoZXZlbnQuaXNDYW5jZWxsZWQo
KSk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uRm9y
bVN1Ym1pdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb3JtUGFuZWwucHJv
dG90eXBlLm9uRm9ybVN1Ym1pdC5jYWxsLmFwcGx5KF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5v
bkZvcm1TdWJtaXQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90
b3R5cGUuX19jbGFzc19fLm9uRm9ybVN1Ym1pdC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9Gb3JtUGFuZWwucHJvdG90eXBlLm9uRm9ybVN1Ym1pdC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5vbkZyYW1lTG9hZCA9IGZ1bmN0aW9u
KCkgeworICAgIHZhciBldmVudCA9IHVpX0Zvcm1TdWJtaXRDb21wbGV0ZUV2ZW50KHRoaXMsIHRo
aXMuZ2V0VGV4dENvbnRlbnRzKHRoaXMuaWZyYW1lKSk7CisKKyAgICAgICAgdmFyIF9faGFuZGxl
ciA9IHRoaXMuZm9ybUhhbmRsZXJzLl9faXRlcl9fKCk7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX19oYW5k
bGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgaGFuZGxlci5vblN1
Ym1pdENvbXBsZXRlKGV2ZW50KTsKKworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICBpZiAoZSAhPSBTdG9wSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9Owor
ICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25GcmFtZUxvYWQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5vbkZyYW1l
TG9hZC5jYWxsLmFwcGx5KF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5vbkZyYW1lTG9hZCwgYXJn
dW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18u
b25GcmFtZUxvYWQudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnBy
b3RvdHlwZS5vbkZyYW1lTG9hZC5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9y
bVBhbmVsLnByb3RvdHlwZS5yZW1vdmVGb3JtSGFuZGxlciA9IGZ1bmN0aW9uKGhhbmRsZXIpIHsK
KyAgICB0aGlzLmZvcm1IYW5kbGVycy5yZW1vdmUoaGFuZGxlcik7CisgICAgfTsKKyAgICBfX3Vp
X0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLnJlbW92ZUZvcm1IYW5kbGVyID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUucmVtb3ZlRm9y
bUhhbmRsZXIuY2FsbC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUucmVtb3ZlRm9ybUhh
bmRsZXIsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUu
X19jbGFzc19fLnJlbW92ZUZvcm1IYW5kbGVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBf
X3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUucmVtb3ZlRm9ybUhhbmRsZXIuaW5zdGFuY2VfbWV0aG9k
ID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuc2V0QWN0aW9uID0gZnVuY3Rp
b24odXJsKSB7CisgICAgRE9NX3NldEF0dHJpYnV0ZSh0aGlzLmdldEVsZW1lbnQoKSwgJ2FjdGlv
bicsIHVybCk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19f
LnNldEFjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb3JtUGFuZWwu
cHJvdG90eXBlLnNldEFjdGlvbi5jYWxsLmFwcGx5KF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5z
ZXRBY3Rpb24sIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5
cGUuX19jbGFzc19fLnNldEFjdGlvbi51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9G
b3JtUGFuZWwucHJvdG90eXBlLnNldEFjdGlvbi5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworICAg
IF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKGZvcm0sIGVu
Y29kaW5nKSB7CisKKyAgICAgICAgZm9ybS5lbmN0eXBlID0gZW5jb2Rpbmc7CisgICAgICAgIAor
ICAgIH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRFbmNvZGlu
ZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb3JtUGFuZWwucHJvdG90eXBl
LnNldEVuY29kaW5nLmNhbGwuYXBwbHkoX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLnNldEVuY29k
aW5nLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy5zZXRFbmNvZGluZy51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb3Jt
UGFuZWwucHJvdG90eXBlLnNldEVuY29kaW5nLmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9Gb3JtUGFuZWwucHJvdG90eXBlLnNldE1ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCkgewor
ICAgIERPTV9zZXRBdHRyaWJ1dGUodGhpcy5nZXRFbGVtZW50KCksICdtZXRob2QnLCBtZXRob2Qp
OworICAgIH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy5zZXRNZXRo
b2QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlw
ZS5zZXRNZXRob2QuY2FsbC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuc2V0TWV0aG9k
LCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xh
c3NfXy5zZXRNZXRob2QudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9ybVBhbmVs
LnByb3RvdHlwZS5zZXRNZXRob2QuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zv
cm1QYW5lbC5wcm90b3R5cGUuc3VibWl0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGV2ZW50ID0g
dWlfRm9ybVN1Ym1pdEV2ZW50KHRoaXMpOworCisgICAgICAgIHZhciBfX2hhbmRsZXIgPSB0aGlz
LmZvcm1IYW5kbGVycy5fX2l0ZXJfXygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IF9faGFuZGxlci5uZXh0
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGhhbmRsZXIub25TdWJtaXQoZXZl
bnQpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IGlmIChlICE9IFN0b3BJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIGlmIChldmVudC5pc0NhbmNlbGxl
ZCgpKSB7CisgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnN1Ym1pdEltcGwodGhpcy5nZXRF
bGVtZW50KCksIHRoaXMuaWZyYW1lKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uc3VibWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3Vp
X0Zvcm1QYW5lbC5wcm90b3R5cGUuc3VibWl0LmNhbGwuYXBwbHkoX191aV9Gb3JtUGFuZWwucHJv
dG90eXBlLnN1Ym1pdCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnBy
b3RvdHlwZS5fX2NsYXNzX18uc3VibWl0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0Zvcm1QYW5lbC5wcm90b3R5cGUuc3VibWl0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7CisgICAg
X191aV9Gb3JtUGFuZWwucHJvdG90eXBlLnN1Ym1pdEltcGwgPSBmdW5jdGlvbihmb3JtLCBpZnJh
bWUpIHsKKworICAgICAgICBpZiAoaWZyYW1lKQorICAgICAgICAgICAgaWZyYW1lLl9fZm9ybUFj
dGlvbiA9IGZvcm0uYWN0aW9uOworICAgICAgICBmb3JtLnN1Ym1pdCgpOworICAgICAgICAKKyAg
ICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18uc3VibWl0SW1wbCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLnN1
Ym1pdEltcGwuY2FsbC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuc3VibWl0SW1wbCwg
YXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5fX2NsYXNz
X18uc3VibWl0SW1wbC51bmJvdW5kX21ldGhvZCA9IHRydWU7CisgICAgX191aV9Gb3JtUGFuZWwu
cHJvdG90eXBlLnN1Ym1pdEltcGwuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zv
cm1QYW5lbC5wcm90b3R5cGUub25BdHRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICBfX3VpX1NpbXBs
ZVBhbmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25BdHRhY2godGhpcyk7CisgICAgdGhpcy5ob29r
RXZlbnRzKHRoaXMuaWZyYW1lLCB0aGlzLmdldEVsZW1lbnQoKSwgdGhpcyk7CisgICAgfTsKKyAg
ICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uQXR0YWNoID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUub25BdHRhY2guY2Fs
bC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUub25BdHRhY2gsIGFyZ3VtZW50cyk7Cisg
ICAgfTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUuX19jbGFzc19fLm9uQXR0YWNoLnVu
Ym91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUub25BdHRh
Y2guaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUu
b25EZXRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICBfX3VpX1NpbXBsZVBhbmVsLnByb3RvdHlwZS5f
X2NsYXNzX18ub25EZXRhY2godGhpcyk7CisgICAgdGhpcy51bmhvb2tFdmVudHModGhpcy5pZnJh
bWUsIHRoaXMuZ2V0RWxlbWVudCgpKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18ub25EZXRhY2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9f
dWlfRm9ybVBhbmVsLnByb3RvdHlwZS5vbkRldGFjaC5jYWxsLmFwcGx5KF9fdWlfRm9ybVBhbmVs
LnByb3RvdHlwZS5vbkRldGFjaCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBh
bmVsLnByb3RvdHlwZS5fX2NsYXNzX18ub25EZXRhY2gudW5ib3VuZF9tZXRob2QgPSB0cnVlOwor
ICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5vbkRldGFjaC5pbnN0YW5jZV9tZXRob2QgPSB0
cnVlOworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5zZXRUYXJnZXQgPSBmdW5jdGlvbih0
YXJnZXQpIHsKKyAgICBET01fc2V0QXR0cmlidXRlKHRoaXMuZ2V0RWxlbWVudCgpLCAndGFyZ2V0
JywgdGFyZ2V0KTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS5fX2NsYXNz
X18uc2V0VGFyZ2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBfX3VpX0Zvcm1QYW5l
bC5wcm90b3R5cGUuc2V0VGFyZ2V0LmNhbGwuYXBwbHkoX191aV9Gb3JtUGFuZWwucHJvdG90eXBl
LnNldFRhcmdldCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9fdWlfRm9ybVBhbmVsLnByb3Rv
dHlwZS5fX2NsYXNzX18uc2V0VGFyZ2V0LnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX3Vp
X0Zvcm1QYW5lbC5wcm90b3R5cGUuc2V0VGFyZ2V0Lmluc3RhbmNlX21ldGhvZCA9IHRydWU7Cisg
ICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLnVuaG9va0V2ZW50cyA9IGZ1bmN0aW9uKGlmcmFt
ZSwgZm9ybSkgeworCisgICAgICAgIGlmIChpZnJhbWUpCisgICAgICAgICAgICBpZnJhbWUub25s
b2FkID0gbnVsbDsKKyAgICAgICAgZm9ybS5vbnN1Ym1pdCA9IG51bGw7CisgICAgICAgIAorICAg
IH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9fY2xhc3NfXy51bmhvb2tFdmVudHMg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9fdWlfRm9ybVBhbmVsLnByb3RvdHlwZS51
bmhvb2tFdmVudHMuY2FsbC5hcHBseShfX3VpX0Zvcm1QYW5lbC5wcm90b3R5cGUudW5ob29rRXZl
bnRzLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX191aV9Gb3JtUGFuZWwucHJvdG90eXBlLl9f
Y2xhc3NfXy51bmhvb2tFdmVudHMudW5ib3VuZF9tZXRob2QgPSB0cnVlOworICAgIF9fdWlfRm9y
bVBhbmVsLnByb3RvdHlwZS51bmhvb2tFdmVudHMuaW5zdGFuY2VfbWV0aG9kID0gdHJ1ZTsKK30K
K19fdWlfUm9vdFRyZWVJdGVtX2luaXRpYWxpemUoKTsKK19fdWlfQ2hlY2tCb3hfaW5pdGlhbGl6
ZSgpOworX191aV9OYW1lZEZyYW1lX2luaXRpYWxpemUoKTsKK19fdWlfRmlsZVVwbG9hZF9pbml0
aWFsaXplKCk7CitfX3VpX0xhYmVsX2luaXRpYWxpemUoKTsKK19fdWlfS2V5Ym9hcmRMaXN0ZW5l
cl9pbml0aWFsaXplKCk7CitfX3VpX0RvY2tQYW5lbF9pbml0aWFsaXplKCk7CitfX3VpX0V2ZW50
T2JqZWN0X2luaXRpYWxpemUoKTsKK19fdWlfRm9ybVN1Ym1pdEV2ZW50X2luaXRpYWxpemUoKTsK
K19fdWlfVGV4dEJveEJhc2VfaW5pdGlhbGl6ZSgpOworX191aV9IaWRkZW5faW5pdGlhbGl6ZSgp
OworX191aV9UcmVlQ29udGVudFBhbmVsX2luaXRpYWxpemUoKTsKK19fdWlfRGlhbG9nQm94X2lu
aXRpYWxpemUoKTsKK19fdWlfTWVudUJhcl9pbml0aWFsaXplKCk7CitfX3VpX1dpZGdldF9pbml0
aWFsaXplKCk7CitfX3VpX0Zsb3dQYW5lbF9pbml0aWFsaXplKCk7CitfX3VpX0ZsZXhDZWxsRm9y
bWF0dGVyX2luaXRpYWxpemUoKTsKK19fdWlfSG9yaXpvbnRhbFBhbmVsX2luaXRpYWxpemUoKTsK
K19fdWlfVGV4dEFyZWFfaW5pdGlhbGl6ZSgpOworX191aV9Db21wb3NpdGVfaW5pdGlhbGl6ZSgp
OworX191aV9Sb3dGb3JtYXR0ZXJfaW5pdGlhbGl6ZSgpOworX191aV9VSU9iamVjdF9pbml0aWFs
aXplKCk7CitfX3VpX1Bhc3N3b3JkVGV4dEJveF9pbml0aWFsaXplKCk7CitfX3VpX0hUTUxfaW5p
dGlhbGl6ZSgpOworX191aV9HcmlkX2luaXRpYWxpemUoKTsKK19fdWlfRm9jdXNXaWRnZXRfaW5p
dGlhbGl6ZSgpOworX191aV9Gb2N1c1BhbmVsX2luaXRpYWxpemUoKTsKK19fdWlfSGFzSG9yaXpv
bnRhbEFsaWdubWVudF9pbml0aWFsaXplKCk7CitfX3VpX0RlY2tQYW5lbF9pbml0aWFsaXplKCk7
CitfX3VpX0ZyYW1lX2luaXRpYWxpemUoKTsKK19fdWlfUGFuZWxfaW5pdGlhbGl6ZSgpOworX191
aV9IYXNBbGlnbm1lbnRfaW5pdGlhbGl6ZSgpOworX191aV9TaW1wbGVQYW5lbF9pbml0aWFsaXpl
KCk7CitfX3VpX1ZlcnRpY2FsUGFuZWxfaW5pdGlhbGl6ZSgpOworX191aV9IeXBlcmxpbmtfaW5p
dGlhbGl6ZSgpOworX191aV9TdGFja1BhbmVsX2luaXRpYWxpemUoKTsKK19fdWlfQnV0dG9uX2lu
aXRpYWxpemUoKTsKK19fdWlfVHJlZV9pbml0aWFsaXplKCk7CitfX3VpX1Njcm9sbFBhbmVsX2lu
aXRpYWxpemUoKTsKK19fdWlfQ29tcGxleFBhbmVsX2luaXRpYWxpemUoKTsKK19fdWlfVGFiUGFu
ZWxfaW5pdGlhbGl6ZSgpOworX191aV9UYWJCYXJfaW5pdGlhbGl6ZSgpOworX191aV9DZWxsUGFu
ZWxfaW5pdGlhbGl6ZSgpOworX191aV9Qb3B1cFBhbmVsX2luaXRpYWxpemUoKTsKK19fdWlfRG9j
a1BhbmVsVG1wUm93X2luaXRpYWxpemUoKTsKK19fdWlfTGlzdEJveF9pbml0aWFsaXplKCk7Citf
X3VpX0ZvY3VzTGlzdGVuZXJfaW5pdGlhbGl6ZSgpOworX191aV9UZXh0Qm94X2luaXRpYWxpemUo
KTsKK19fdWlfRmxleFRhYmxlX2luaXRpYWxpemUoKTsKK19fdWlfQ2VsbEZvcm1hdHRlcl9pbml0
aWFsaXplKCk7CitfX3VpX0xheW91dERhdGFfaW5pdGlhbGl6ZSgpOworX191aV9IYXNWZXJ0aWNh
bEFsaWdubWVudF9pbml0aWFsaXplKCk7CitfX3VpX0ltYWdlX2luaXRpYWxpemUoKTsKK19fdWlf
TW91c2VMaXN0ZW5lcl9pbml0aWFsaXplKCk7CitfX3VpX1JhZGlvQnV0dG9uX2luaXRpYWxpemUo
KTsKK19fdWlfSFRNTFBhbmVsX2luaXRpYWxpemUoKTsKK19fdWlfRXZlbnRfaW5pdGlhbGl6ZSgp
OworX191aV9CdXR0b25CYXNlX2luaXRpYWxpemUoKTsKK19fdWlfRm9jdXNfaW5pdGlhbGl6ZSgp
OworX191aV9UcmVlSXRlbV9pbml0aWFsaXplKCk7CitfX3VpX1Jvb3RQYW5lbENsc19pbml0aWFs
aXplKCk7CitfX3VpX01lbnVCYXJQb3B1cFBhbmVsX2luaXRpYWxpemUoKTsKK19fdWlfTWVudUl0
ZW1faW5pdGlhbGl6ZSgpOworX191aV9Gb3JtU3VibWl0Q29tcGxldGVFdmVudF9pbml0aWFsaXpl
KCk7CitfX3VpX0hUTUxUYWJsZV9pbml0aWFsaXplKCk7CitfX3VpX0Fic29sdXRlUGFuZWxfaW5p
dGlhbGl6ZSgpOworX191aV9Gb3JtUGFuZWxfaW5pdGlhbGl6ZSgpOworZnVuY3Rpb24gX19pbmRl
eDIoKSB7Cit9CitmdW5jdGlvbiBpbmRleDIoKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IF9f
aW5kZXgyKCk7CisgICAgaWYoaW5zdGFuY2UuX19pbml0X18pIGluc3RhbmNlLl9faW5pdF9fLmFw
cGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworCitm
dW5jdGlvbiBfX2luZGV4Ml9pbml0aWFsaXplKCkgeworICAgIGlmKF9faW5kZXgyLl9fd2FzX2lu
aXRpYWxpemVkX18pIHJldHVybjsKKyAgICBfX2luZGV4Mi5fX3dhc19pbml0aWFsaXplZF9fID0g
dHJ1ZTsKKyAgICBweWpzX2V4dGVuZChfX2luZGV4MiwgX19weWpzbGliX09iamVjdCk7CisgICAg
X19pbmRleDIucHJvdG90eXBlLl9fY2xhc3NfXy5fX25ld19fID0gaW5kZXgyOworICAgIF9faW5k
ZXgyLnByb3RvdHlwZS5vbk1vZHVsZUxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnBhbmVs
ID0gdWlfVmVydGljYWxQYW5lbCgpOworICAgIHVpX1Jvb3RQYW5lbCgpLmFkZCh0aGlzLnBhbmVs
KTsKKyAgICBUaW1lcl9UaW1lcigxMDAwLCB0aGlzKTsKKyAgICB9OworICAgIF9faW5kZXgyLnBy
b3RvdHlwZS5fX2NsYXNzX18ub25Nb2R1bGVMb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBfX2luZGV4Mi5wcm90b3R5cGUub25Nb2R1bGVMb2FkLmNhbGwuYXBwbHkoX19pbmRleDIu
cHJvdG90eXBlLm9uTW9kdWxlTG9hZCwgYXJndW1lbnRzKTsKKyAgICB9OworICAgIF9faW5kZXgy
LnByb3RvdHlwZS5fX2NsYXNzX18ub25Nb2R1bGVMb2FkLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsK
KyAgICBfX2luZGV4Mi5wcm90b3R5cGUub25Nb2R1bGVMb2FkLmluc3RhbmNlX21ldGhvZCA9IHRy
dWU7CisgICAgX19pbmRleDIucHJvdG90eXBlLm9uVGltZXIgPSBmdW5jdGlvbih0KSB7CisgICAg
dmFyIGFkX2ZyYW1lID0gdWlfRnJhbWUoJy4vcmVzb3VyY2VzL29ubG9hZC1hZGQtc2FtZS1pZnJh
bWUtdHdpY2UtY3Jhc2gtaWZyYW1lLmh0bWwnKTsKKyAgICB0aGlzLnBhbmVsLmFkZChhZF9mcmFt
ZSk7CisgICAgdWlfUm9vdFBhbmVsKCkuYWRkKHRoaXMucGFuZWwpOworICAgIH07CisgICAgX19p
bmRleDIucHJvdG90eXBlLl9fY2xhc3NfXy5vblRpbWVyID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBfX2luZGV4Mi5wcm90b3R5cGUub25UaW1lci5jYWxsLmFwcGx5KF9faW5kZXgyLnBy
b3RvdHlwZS5vblRpbWVyLCBhcmd1bWVudHMpOworICAgIH07CisgICAgX19pbmRleDIucHJvdG90
eXBlLl9fY2xhc3NfXy5vblRpbWVyLnVuYm91bmRfbWV0aG9kID0gdHJ1ZTsKKyAgICBfX2luZGV4
Mi5wcm90b3R5cGUub25UaW1lci5pbnN0YW5jZV9tZXRob2QgPSB0cnVlOworfQorX19pbmRleDJf
aW5pdGlhbGl6ZSgpOworCisKK2Z1bmN0aW9uIHJ1bigpIHsKKyAgICBhcHAgPSBuZXcgaW5kZXgy
KCk7CisgICAgYXBwLm9uTW9kdWxlTG9hZCgpOworfQorCitmdW5jdGlvbiBweWd3dE9uTG9hZChv
bkxvYWRFcnJvciwgbmFtZSkgeworICAgIGlmIChvbkxvYWRFcnJvcikKKyAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgIHJ1bigpOworICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAg
ICAgICAgIG9uTG9hZEVycm9yKG5hbWUpOworICAgICAgICB9CisgICAgZWxzZSB7CisgICAgICAg
ICAgICBydW4oKTsKKyAgICB9Cit9CisKKy0tPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL3B5Z3d0
LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9weWd3dC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTI1MGQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9weWd3dC5qcwpAQCAtMCww
ICsxLDEzOSBAQAorLy8gdGhpcyBpcyBhbG1vc3QgZGlyZWN0bHkgdGFrZW4gZnJvbSBHb29nbGUn
cyBHV1Qgd2hpY2ggaXMgbm93IG9wZW4gc291cmNlCisKK3ZhciBfX1BZR1dUX0pTX0lOQ0xVREVE
OworCitpZiAoIV9fUFlHV1RfSlNfSU5DTFVERUQpIHsKKyAgX19QWUdXVF9KU19JTkNMVURFRCA9
IHRydWU7CisKK3ZhciBfX3B5Z3d0X3JldHJ5V2FpdE1zID0gNTA7Cit2YXIgX19weWd3dF9tb2R1
bGVOYW1lcyA9IFtdOwordmFyIF9fcHlnd3RfaXNIb3N0UGFnZUxvYWRlZCA9IGZhbHNlOwordmFy
IF9fcHlnd3Rfb25Mb2FkRXJyb3IgPSBudWxsOworCisKK2Z1bmN0aW9uIF9fcHlnd3RfcHJvY2Vz
c01ldGFzKCkgeworICB2YXIgbWV0YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
bWV0YSIpOworICBmb3IgKHZhciBpID0gMCwgbiA9IG1ldGFzLmxlbmd0aDsgaSA8IG47ICsraSkg
eworICAgIHZhciBtZXRhID0gbWV0YXNbaV07CisgICAgdmFyIG5hbWUgPSBtZXRhLmdldEF0dHJp
YnV0ZSgibmFtZSIpOworICAgIGlmIChuYW1lKSB7CisgICAgICBpZiAobmFtZSA9PSAicHlnd3Q6
bW9kdWxlIikgeworICAgICAgICB2YXIgY29udGVudCA9IG1ldGEuZ2V0QXR0cmlidXRlKCJjb250
ZW50Iik7CisgICAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAgICAgX19weWd3dF9tb2R1bGVO
YW1lcyA9IF9fcHlnd3RfbW9kdWxlTmFtZXMuY29uY2F0KGNvbnRlbnQpOworICAgICAgICB9Cisg
ICAgICB9CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gX19weWd3dF9mb3JFYWNoTW9kdWxl
KGxhbWJkYSkgeworICBmb3IgKHZhciBpID0gMDsgaSA8IF9fcHlnd3RfbW9kdWxlTmFtZXMubGVu
Z3RoOyArK2kpIHsKKyAgICBsYW1iZGEoX19weWd3dF9tb2R1bGVOYW1lc1tpXSk7CisgIH0KK30K
KworCisvLyBXaGVuIG5lc3RlZCBJRlJBTUVzIGxvYWQsIHRoZXkgcmVhY2ggdXAgaW50byB0aGUg
cGFyZW50IHBhZ2UgdG8gYW5ub3VuY2UgdGhhdAorLy8gdGhleSBhcmUgcmVhZHkgdG8gcnVuLiBC
ZWNhdXNlIElGUkFNRXMgbG9hZCBhc3luY2hyb25vdXNseSByZWxhdGl2ZSB0byB0aGUgCisvLyBo
b3N0IHBhZ2UsIG9uZSBvZiB0d28gdGhpbmdzIGNhbiBoYXBwZW4gd2hlbiB0aGV5IHJlYWNoIHVw
OgorLy8gKDEpIFRoZSBob3N0IHBhZ2UncyBvbmxvYWQgaGFuZGxlciBoYXMgbm90IHlldCBiZWVu
IGNhbGxlZCwgaW4gd2hpY2ggY2FzZSB3ZSAKKy8vICAgICByZXRyeSB1bnRpbCBpdCBoYXMgYmVl
biBjYWxsZWQuCisvLyAoMikgVGhlIGhvc3QgcGFnZSdzIG9ubG9hZCBoYW5kbGVyIGhhcyBhbHJl
YWR5IGJlZW4gY2FsbGVkLCBpbiB3aGljaCBjYXNlIHRoZQorLy8gICAgIG5lc3RlZCBJRlJBTUUg
c2hvdWxkIGJlIGluaXRpYWxpemVkIGltbWVkaWF0ZWx5LgorLy8KK2Z1bmN0aW9uIF9fcHlnd3Rf
d2ViTW9kZUZyYW1lT25Mb2FkKGlmcmFtZVdpbmRvdywgbmFtZSkgeworICB2YXIgbW9kdWxlSW5p
dEZuID0gaWZyYW1lV2luZG93LnB5Z3d0T25Mb2FkOworICBpZiAoX19weWd3dF9pc0hvc3RQYWdl
TG9hZGVkICYmIG1vZHVsZUluaXRGbikgeworICAgIHZhciBvbGQgPSB3aW5kb3cuc3RhdHVzOwor
ICAgIHdpbmRvdy5zdGF0dXMgPSAiSW5pdGlhbGl6aW5nIG1vZHVsZSAnIiArIG5hbWUgKyAiJyI7
CisgICAgdHJ5IHsKKyAgICAgICAgbW9kdWxlSW5pdEZuKF9fcHlnd3Rfb25Mb2FkRXJyb3IsIG5h
bWUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHdpbmRvdy5zdGF0dXMgPSBvbGQ7CisgICAg
fQorICB9IGVsc2UgeworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IF9fcHlnd3Rfd2ViTW9k
ZUZyYW1lT25Mb2FkKGlmcmFtZVdpbmRvdywgbmFtZSk7IH0sIF9fcHlnd3RfcmV0cnlXYWl0TXMp
OworICB9Cit9CisKKworZnVuY3Rpb24gX19weWd3dF9ob29rT25Mb2FkKCkgeworICB2YXIgb2xk
SGFuZGxlciA9IHdpbmRvdy5vbmxvYWQ7CisgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsK
KyAgICBfX3B5Z3d0X2lzSG9zdFBhZ2VMb2FkZWQgPSB0cnVlOworICAgIGlmIChvbGRIYW5kbGVy
KSB7CisgICAgICBvbGRIYW5kbGVyKCk7CisgICAgfQorICB9OworfQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v
IENhbGxlZCBkaXJlY3RseSBmcm9tIGNvbXBpbGVkIGNvZGUKKy8vCitmdW5jdGlvbiBfX3B5Z3d0
X2luaXRIYW5kbGVycyhyZXNpemUsIGJlZm9yZXVubG9hZCwgdW5sb2FkKSB7CisgICB2YXIgb2xk
T25SZXNpemUgPSB3aW5kb3cub25yZXNpemU7CisgICB3aW5kb3cub25yZXNpemUgPSBmdW5jdGlv
bigpIHsKKyAgICAgIHJlc2l6ZSgpOworICAgICAgaWYgKG9sZE9uUmVzaXplKQorICAgICAgICAg
b2xkT25SZXNpemUoKTsKKyAgIH07CisKKyAgIHZhciBvbGRPbkJlZm9yZVVubG9hZCA9IHdpbmRv
dy5vbmJlZm9yZXVubG9hZDsKKyAgIHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgdmFyIHJldCA9IGJlZm9yZXVubG9hZCgpOworCisgICAgICB2YXIgb2xkUmV0Owor
ICAgICAgaWYgKG9sZE9uQmVmb3JlVW5sb2FkKQorICAgICAgICBvbGRSZXQgPSBvbGRPbkJlZm9y
ZVVubG9hZCgpOworCisgICAgICBpZiAocmV0ICE9PSBudWxsKQorICAgICAgICByZXR1cm4gcmV0
OworICAgICAgcmV0dXJuIG9sZFJldDsKKyAgIH07CisKKyAgIHZhciBvbGRPblVubG9hZCA9IHdp
bmRvdy5vbnVubG9hZDsKKyAgIHdpbmRvdy5vbnVubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAg
dW5sb2FkKCk7CisgICAgICBpZiAob2xkT25VbmxvYWQpCisgICAgICAgICBvbGRPblVubG9hZCgp
OworICAgfTsKK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFdlYiBNb2RlCisvLworZnVuY3Rpb24gX19w
eWd3dF9pbmplY3RXZWJNb2RlRnJhbWUobmFtZSkgeworICAgaWYgKGRvY3VtZW50LmJvZHkpIHsK
KyAgICAgIC8vIEluc2VydCBhbiBJRlJBTUUKKyAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgIHZhciBzZWxlY3RvclVSTCA9ICJyZXNvdXJj
ZXMvb25sb2FkLWFkZC1zYW1lLWlmcmFtZS10d2ljZS1jcmFzaC5odG1sIjsKKyAgICAgIGlmcmFt
ZS5zcmMgPSBzZWxlY3RvclVSTDsKKyAgICAgIGlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnMHB4JzsK
KyAgICAgIGlmcmFtZS5zdHlsZS53aWR0aCA9ICcwcHgnOworICAgICAgaWZyYW1lLnN0eWxlLmhl
aWdodCA9ICcwcHgnOworICAgICAgaWYgKGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCkgeworICAg
ICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoaWZyYW1lLCBkb2N1bWVudC5ib2R5LmZp
cnN0Q2hpbGQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoaWZyYW1lKTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICAvLyBUcnkgYWdhaW4g
aW4gYSBtb21lbnQuCisgICAgICAvLworICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7IF9fcHlnd3RfaW5qZWN0V2ViTW9kZUZyYW1lKG5hbWUpOyB9LCBfX3B5Z3d0X3JldHJ5V2Fp
dE1zKTsKKyAgIH0KK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNldCBpdCB1cAorLy8KK19fcHlnd3Rf
cHJvY2Vzc01ldGFzKCk7CitfX3B5Z3d0X2hvb2tPbkxvYWQoKTsKK19fcHlnd3RfZm9yRWFjaE1v
ZHVsZShfX3B5Z3d0X2luamVjdFdlYk1vZGVGcmFtZSk7CisKKworfSAvLyBfX1BZR1dUX0pTX0lO
Q0xVREVECisK
</data>
<flag name="review"
          id="11142"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>