<?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>44028</bug_id>
          
          <creation_ts>2010-08-15 05:39:48 -0700</creation_ts>
          <short_desc>Web Inspector: Make InjectedScript proto-based.</short_desc>
          <delta_ts>2010-08-16 09:34:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44055</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>abarth</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>264817</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 05:39:48 -0700</bug_when>
    <thetext>As a part of a &apos;better protocol&apos; initiative, I am re-thinking the InjectedScript exposure. My present thinking is that InspectorDebugAgent (or new InspectorRuntimeAgent) will have &apos;installFunction&apos; and &apos;evaluateInWindow&apos; methods. Front-ends will install whatever functions they want into the injected script (like ours will install &quot;getCompletions&quot; and &quot;getPrototypes&quot;). The only functionality that will be &apos;pre-installed&apos; in injected script is going to be wrapping and unwrapping of objects. Here is the first step towards that goal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264818</commentid>
    <comment_count>1</comment_count>
      <attachid>64445</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 05:45:58 -0700</bug_when>
    <thetext>Created attachment 64445
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264979</commentid>
    <comment_count>2</comment_count>
      <attachid>64445</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-16 01:09:28 -0700</bug_when>
    <thetext>Comment on attachment 64445
[PATCH] Proposed change.

WebCore/inspector/front-end/InjectedScript.js:44
 +          result.type = typeof object;
Please construct the result using a factory method on InjectedScript.RemoteObject like you do in other places.

WebCore/ChangeLog:6
 +          https://bugs.webkit.org/show_bug.cgi?id=44028
Please add meaningful description for semantic changes in this patch, they are very hard to track among code formatting changes.

WebCore/ChangeLog:5
 +          Web Inspector: Make InjectedScript proto-based.
How does this change relate to the final goal of reducing number of predefined methods on the InjectedScript and introducing installFunction? We may well have installFunction defined on the InjectedScript instance as there is anyway the only one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265033</commentid>
    <comment_count>3</comment_count>
      <attachid>64445</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-16 05:20:14 -0700</bug_when>
    <thetext>Comment on attachment 64445
[PATCH] Proposed change.

Clearing flags on attachment: 64445

Committed r65414: &lt;http://trac.webkit.org/changeset/65414&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265034</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-16 05:20:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265051</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 06:03:18 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65414 might have broken Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/65414
http://trac.webkit.org/changeset/65415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265078</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-08-16 07:03:58 -0700</bug_when>
    <thetext>Reopen, because it was rolled out by http://trac.webkit.org/changeset/65423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265144</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-16 09:34:38 -0700</bug_when>
    <thetext>This has been rolled out and re-landed with the console test fixed (test had a race condition):

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	D	LayoutTests/http/tests/inspector-enabled/resources/console-log-before-frame-navigation.js
	M	LayoutTests/ChangeLog
	M	LayoutTests/http/tests/inspector-enabled/console-log-before-frame-navigation-expected.txt
	M	LayoutTests/http/tests/inspector-enabled/console-log-before-frame-navigation.html
	M	LayoutTests/http/tests/inspector-enabled/resources/console-log-frame-before-navigation.html
	M	WebCore/ChangeLog
	M	WebCore/inspector/front-end/InjectedScript.js
Committed r65434</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64445</attachid>
            <date>2010-08-15 05:45:58 -0700</date>
            <delta_ts>2010-08-16 05:20:14 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>is_proto</filename>
            <type>text/plain</type>
            <size>39199</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQ3NDM1Ny4uNWJjOTM4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wOC0xNSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBNYWtlIEluamVjdGVkU2NyaXB0IHBy
b3RvLWJhc2VkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDQwMjgKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQu
anM6CisgICAgICAgIChpbmplY3RlZFNjcmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKGluamVj
dGVkU2NyaXB0Q29uc3RydWN0b3IuKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorCiAyMDEwLTA4LTE0
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByNjUzNzQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXggZmEwYmE2My4uY2FmZmQzZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtMjgsMzMwICsy
OCw0ODcgQEAKIAogdmFyIGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IgPSAoZnVuY3Rpb24gKElu
amVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkLCBqc0Vu
Z2luZSkgewogCi12YXIgSW5qZWN0ZWRTY3JpcHQgPSB7fTsKLQotSW5qZWN0ZWRTY3JpcHQubGFz
dEJvdW5kT2JqZWN0SWQgPSAxOwotSW5qZWN0ZWRTY3JpcHQuaWRUb1dyYXBwZWRPYmplY3QgPSB7
fTsKLUluamVjdGVkU2NyaXB0Lm9iamVjdEdyb3VwcyA9IHt9OwotCi1JbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0Rm9yQ29uc29sZSA9IGZ1bmN0aW9uKG9iamVjdCwgY2FuQWNjZXNzSW5zcGVjdGVk
V2luZG93KQordmFyIEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQogewotICAgIGlmIChjYW5B
Y2Nlc3NJbnNwZWN0ZWRXaW5kb3cpCi0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC53cmFw
T2JqZWN0KG9iamVjdCwgImNvbnNvbGUiKTsKLSAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgcmVz
dWx0LnR5cGUgPSB0eXBlb2Ygb2JqZWN0OwotICAgIHJlc3VsdC5kZXNjcmlwdGlvbiA9IEluamVj
dGVkU2NyaXB0Ll90b1N0cmluZyhvYmplY3QpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgdGhp
cy5fbGFzdEJvdW5kT2JqZWN0SWQgPSAxOworICAgIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0ID0g
e307CisgICAgdGhpcy5fb2JqZWN0R3JvdXBzID0ge307CiB9CiAKLUluamVjdGVkU2NyaXB0Lndy
YXBPYmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSkKLXsKLSAgICB0cnkg
ewotICAgICAgICB2YXIgb2JqZWN0SWQ7Ci0gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAi
b2JqZWN0IiB8fCB0eXBlb2Ygb2JqZWN0ID09PSAiZnVuY3Rpb24iIHx8IEluamVjdGVkU2NyaXB0
Ll9pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCkpIHsKLSAgICAgICAgICAgIHZhciBpZCA9IElu
amVjdGVkU2NyaXB0Lmxhc3RCb3VuZE9iamVjdElkKys7Ci0gICAgICAgICAgICBvYmplY3RJZCA9
IGlkOwotICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQuaWRUb1dyYXBwZWRPYmplY3RbaWRdID0g
b2JqZWN0OwotCi0gICAgICAgICAgICB2YXIgZ3JvdXAgPSBJbmplY3RlZFNjcmlwdC5vYmplY3RH
cm91cHNbb2JqZWN0R3JvdXBOYW1lXTsKLSAgICAgICAgICAgIGlmICghZ3JvdXApIHsKLSAgICAg
ICAgICAgICAgICBncm91cCA9IFtdOwotICAgICAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Lm9i
amVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdID0gZ3JvdXA7CitJbmplY3RlZFNjcmlwdC5wcm90
b3R5cGUgPSB7CisgICAgd3JhcE9iamVjdEZvckNvbnNvbGU6IGZ1bmN0aW9uKG9iamVjdCwgY2Fu
QWNjZXNzSW5zcGVjdGVkV2luZG93KQorICAgIHsKKyAgICAgICAgaWYgKGNhbkFjY2Vzc0luc3Bl
Y3RlZFdpbmRvdykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl93cmFwT2JqZWN0KG9iamVjdCwg
ImNvbnNvbGUiKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHt9OworICAgICAgICByZXN1bHQudHlw
ZSA9IHR5cGVvZiBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5kZXNjcmlwdGlvbiA9IHRoaXMuX3Rv
U3RyaW5nKG9iamVjdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIF93
cmFwT2JqZWN0OiBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSkKKyAgICB7CisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgb2JqZWN0SWQ7CisgICAgICAgICAgICBpZiAodHlw
ZW9mIG9iamVjdCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG9iamVjdCA9PT0gImZ1bmN0aW9uIiB8
fCB0aGlzLl9pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICB2
YXIgaWQgPSB0aGlzLl9sYXN0Qm91bmRPYmplY3RJZCsrOworICAgICAgICAgICAgICAgIG9iamVj
dElkID0gaWQ7CisgICAgICAgICAgICAgICAgdGhpcy5faWRUb1dyYXBwZWRPYmplY3RbaWRdID0g
b2JqZWN0OworICAgIAorICAgICAgICAgICAgICAgIHZhciBncm91cCA9IHRoaXMuX29iamVjdEdy
b3Vwc1tvYmplY3RHcm91cE5hbWVdOworICAgICAgICAgICAgICAgIGlmICghZ3JvdXApIHsKKyAg
ICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
b2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV0gPSBncm91cDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZ3JvdXAucHVzaChpZCk7CisgICAgICAgICAgICAgICAgb2JqZWN0
SWQgPSBuZXcgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0SWQoSW5qZWN0ZWRTY3JpcHQuUmVt
b3RlT2JqZWN0SWQuVHlwZS5Kc09iamVjdCwgaWQpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZ3JvdXAucHVzaChpZCk7Ci0gICAgICAgICAgICBvYmplY3RJZCA9IG5ldyBJbmplY3RlZFNj
cmlwdC5SZW1vdGVPYmplY3RJZChJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3RJZC5UeXBlLkpz
T2JqZWN0LCBpZCk7CisgICAgICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2Jq
ZWN0LmZyb21PYmplY3Qob2JqZWN0LCBvYmplY3RJZCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuZnJvbU9iamVj
dCgiWyBFeGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkgKyAiIF0iKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmZyb21PYmplY3Qob2JqZWN0
LCBvYmplY3RJZCk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRT
Y3JpcHQuUmVtb3RlT2JqZWN0LmZyb21PYmplY3QoIlsgRXhjZXB0aW9uOiAiICsgZS50b1N0cmlu
ZygpICsgIiBdIik7Ci0gICAgfQotfTsKLQotSW5qZWN0ZWRTY3JpcHQudW53cmFwT2JqZWN0ID0g
ZnVuY3Rpb24ob2JqZWN0SWQpIHsKLSAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuaWRUb1dyYXBw
ZWRPYmplY3Rbb2JqZWN0SWRdOwotfTsKLQotSW5qZWN0ZWRTY3JpcHQucmVsZWFzZVdyYXBwZXJP
YmplY3RHcm91cCA9IGZ1bmN0aW9uKG9iamVjdEdyb3VwTmFtZSkgewotICAgIHZhciBncm91cCA9
IEluamVjdGVkU2NyaXB0Lm9iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOwotICAgIGlmICgh
Z3JvdXApCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxl
bmd0aDsgaSsrKQotICAgICAgICBkZWxldGUgSW5qZWN0ZWRTY3JpcHQuaWRUb1dyYXBwZWRPYmpl
Y3RbZ3JvdXBbaV1dOwotICAgIGRlbGV0ZSBJbmplY3RlZFNjcmlwdC5vYmplY3RHcm91cHNbb2Jq
ZWN0R3JvdXBOYW1lXTsKLX07Ci0KLUluamVjdGVkU2NyaXB0LmRpc3BhdGNoID0gZnVuY3Rpb24o
bWV0aG9kTmFtZSwgYXJncykKLXsKLSAgICB2YXIgYXJnc0FycmF5ID0gZXZhbCgiKCIgKyBhcmdz
ICsgIikiKTsKLSAgICB2YXIgcmVzdWx0ID0gSW5qZWN0ZWRTY3JpcHRbbWV0aG9kTmFtZV0uYXBw
bHkoSW5qZWN0ZWRTY3JpcHQsIGFyZ3NBcnJheSk7Ci0gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09
ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmVycm9yKCJX
ZWIgSW5zcGVjdG9yIGVycm9yOiBJbmplY3RlZFNjcmlwdC4lcyByZXR1cm5zIHVuZGVmaW5lZCIs
IG1ldGhvZE5hbWUpOwotICAgICAgICByZXN1bHQgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQorICAgIH0sCiAKLUluamVjdGVkU2NyaXB0LmdldFByb3RvdHlwZXMgPSBmdW5j
dGlvbihub2RlSWQpCi17Ci0gICAgdmFyIG5vZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklk
KG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2
YXIgcmVzdWx0ID0gW107Ci0gICAgdmFyIHByb3RvdHlwZSA9IG5vZGU7Ci0gICAgdmFyIHByb3Rv
dHlwZUlkID0gbmV3IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdElkKEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdElkLlR5cGUuTm9kZSwgbm9kZUlkKTsKLSAgICBkbyB7Ci0gICAgICAgIHJl
c3VsdC5wdXNoKEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5mcm9tT2JqZWN0KHByb3RvdHlw
ZSwgcHJvdG90eXBlSWQpKTsKLSAgICAgICAgcHJvdG90eXBlID0gcHJvdG90eXBlLl9fcHJvdG9f
XzsKLSAgICAgICAgcHJvdG90eXBlSWQgPSBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3RJZC5k
ZXJpdmVQcm9wZXJ0eShwcm90b3R5cGVJZCwgIl9fcHJvdG9fXyIpOwotICAgIH0gd2hpbGUgKHBy
b3RvdHlwZSkKLQotICAgIHJldHVybiByZXN1bHQ7Ci19CisgICAgcmVsZWFzZVdyYXBwZXJPYmpl
Y3RHcm91cDogZnVuY3Rpb24ob2JqZWN0R3JvdXBOYW1lKQorICAgIHsKKyAgICAgICAgdmFyIGdy
b3VwID0gdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07CisgICAgICAgIGlmICgh
Z3JvdXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Z3JvdXAubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBkZWxldGUgdGhpcy5faWRUb1dyYXBwZWRP
YmplY3RbZ3JvdXBbaV1dOworICAgICAgICBkZWxldGUgdGhpcy5fb2JqZWN0R3JvdXBzW29iamVj
dEdyb3VwTmFtZV07CisgICAgfSwKIAotSW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyA9IGZ1
bmN0aW9uKG9iamVjdElkLCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJicmV2aWF0ZSkKLXsKLSAg
ICB2YXIgb2JqZWN0ID0gSW5qZWN0ZWRTY3JpcHQuX29iamVjdEZvcklkKG9iamVjdElkKTsKLSAg
ICBpZiAoIUluamVjdGVkU2NyaXB0Ll9pc0RlZmluZWQob2JqZWN0KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHZhciBwcm9wZXJ0aWVzID0gW107CisgICAgZGlzcGF0Y2g6IGZ1bmN0aW9u
KG1ldGhvZE5hbWUsIGFyZ3MpCisgICAgeworICAgICAgICB2YXIgYXJnc0FycmF5ID0gZXZhbCgi
KCIgKyBhcmdzICsgIikiKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXNbbWV0aG9kTmFtZV0u
YXBwbHkodGhpcywgYXJnc0FycmF5KTsKKyAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJ1
bmRlZmluZWQiKSB7CisgICAgICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuY29uc29sZS5lcnJvcigi
V2ViIEluc3BlY3RvciBlcnJvcjogSW5qZWN0ZWRTY3JpcHQuJXMgcmV0dXJucyB1bmRlZmluZWQi
LCBtZXRob2ROYW1lKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgZ2V0UHJvdG90eXBlczogZnVuY3Rp
b24obm9kZUlkKQorICAgIHsKKyAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9ub2RlRm9ySWQobm9k
ZUlkKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIHZhciBwcm9wZXJ0eU5hbWVzID0gaWdub3JlSGFzT3duUHJvcGVydHkgPyBJbmplY3Rl
ZFNjcmlwdC5fZ2V0UHJvcGVydHlOYW1lcyhvYmplY3QpIDogT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0KTsKLSAgICBpZiAoIWlnbm9yZUhhc093blByb3BlcnR5ICYmIG9iamVjdC5f
X3Byb3RvX18pCi0gICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiX19wcm90b19fIik7Ci0KLSAg
ICAvLyBHbyBvdmVyIHByb3BlcnRpZXMsIHByZXBhcmUgcmVzdWx0cy4KLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHByb3Bl
cnR5TmFtZSA9IHByb3BlcnR5TmFtZXNbaV07Ci0KLSAgICAgICAgdmFyIHByb3BlcnR5ID0ge307
Ci0gICAgICAgIHByb3BlcnR5Lm5hbWUgPSBwcm9wZXJ0eU5hbWUgKyAiIjsKLSAgICAgICAgdmFy
IGlzR2V0dGVyID0gb2JqZWN0WyJfX2xvb2t1cEdldHRlcl9fIl0gJiYgb2JqZWN0Ll9fbG9va3Vw
R2V0dGVyX18ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKCFpc0dldHRlcikgewotICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBvYmplY3RbcHJv
cGVydHlOYW1lXTsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGRPYmplY3RJZCA9IEluamVjdGVk
U2NyaXB0LlJlbW90ZU9iamVjdElkLmRlcml2ZVByb3BlcnR5KG9iamVjdElkLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICAgICAgICAgIHZhciBjaGlsZE9iamVjdFByb3h5ID0gbmV3IEluamVjdGVk
U2NyaXB0LlJlbW90ZU9iamVjdC5mcm9tT2JqZWN0KGNoaWxkT2JqZWN0LCBjaGlsZE9iamVjdElk
LCBhYmJyZXZpYXRlKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS52YWx1ZSA9IGNoaWxkT2Jq
ZWN0UHJveHk7Ci0gICAgICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgICAgICBwcm9w
ZXJ0eS52YWx1ZSA9IG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuZnJvbUV4Y2VwdGlv
bihlKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICB2YXIgcHJvdG90eXBlID0g
bm9kZTsKKyAgICAgICAgdmFyIHByb3RvdHlwZUlkID0gbmV3IEluamVjdGVkU2NyaXB0LlJlbW90
ZU9iamVjdElkKEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdElkLlR5cGUuTm9kZSwgbm9kZUlk
KTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmVzdWx0LnB1c2goSW5qZWN0ZWRTY3JpcHQu
UmVtb3RlT2JqZWN0LmZyb21PYmplY3QocHJvdG90eXBlLCBwcm90b3R5cGVJZCkpOworICAgICAg
ICAgICAgcHJvdG90eXBlID0gcHJvdG90eXBlLl9fcHJvdG9fXzsKKyAgICAgICAgICAgIHByb3Rv
dHlwZUlkID0gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0SWQuZGVyaXZlUHJvcGVydHkocHJv
dG90eXBlSWQsICJfX3Byb3RvX18iKTsKKyAgICAgICAgfSB3aGlsZSAocHJvdG90eXBlKQorICAg
IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBnZXRQcm9wZXJ0aWVzOiBm
dW5jdGlvbihvYmplY3RJZCwgaWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJldmlhdGUpCisgICAg
eworICAgICAgICB2YXIgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQob2JqZWN0SWQpOworICAg
ICAgICBpZiAoIXRoaXMuX2lzRGVmaW5lZChvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICAKKyAgICAgICAgdmFy
IHByb3BlcnR5TmFtZXMgPSBpZ25vcmVIYXNPd25Qcm9wZXJ0eSA/IHRoaXMuX2dldFByb3BlcnR5
TmFtZXMob2JqZWN0KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7CisgICAg
ICAgIGlmICghaWdub3JlSGFzT3duUHJvcGVydHkgJiYgb2JqZWN0Ll9fcHJvdG9fXykKKyAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiX19wcm90b19fIik7CisgICAgCisgICAgICAgIC8v
IEdvIG92ZXIgcHJvcGVydGllcywgcHJlcGFyZSByZXN1bHRzLgorICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBw
cm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldOworICAgIAorICAgICAgICAgICAgdmFyIHBy
b3BlcnR5ID0ge307CisgICAgICAgICAgICBwcm9wZXJ0eS5uYW1lID0gcHJvcGVydHlOYW1lICsg
IiI7CisgICAgICAgICAgICB2YXIgaXNHZXR0ZXIgPSBvYmplY3RbIl9fbG9va3VwR2V0dGVyX18i
XSAmJiBvYmplY3QuX19sb29rdXBHZXR0ZXJfXyhwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAg
aWYgKCFpc0dldHRlcikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBjaGlsZE9iamVjdCA9IG9iamVjdFtwcm9wZXJ0eU5hbWVdOworICAgICAgICAgICAg
ICAgICAgICB2YXIgY2hpbGRPYmplY3RJZCA9IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdElk
LmRlcml2ZVByb3BlcnR5KG9iamVjdElkLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAg
ICAgICB2YXIgY2hpbGRPYmplY3RQcm94eSA9IG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmpl
Y3QuZnJvbU9iamVjdChjaGlsZE9iamVjdCwgY2hpbGRPYmplY3RJZCwgYWJicmV2aWF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LnZhbHVlID0gY2hpbGRPYmplY3RQcm94eTsKKyAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHku
dmFsdWUgPSBuZXcgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmZyb21FeGNlcHRpb24oZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogdGhpcyBzaG91bGQgc2hvdyBzb21ldGhpbmcgbGlrZSAiZ2V0dGVyIiAoYnVn
IDE2NzM0KS4KKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS52YWx1ZSA9IG5ldyBJbmplY3RlZFNj
cmlwdC5SZW1vdGVPYmplY3QuZnJvbU9iamVjdCgiXHUyMDE0Iik7IC8vIGVtIGRhc2gKKyAgICAg
ICAgICAgICAgICBwcm9wZXJ0eS5pc0dldHRlciA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgc2hvdyBzb21l
dGhpbmcgbGlrZSAiZ2V0dGVyIiAoYnVnIDE2NzM0KS4KLSAgICAgICAgICAgIHByb3BlcnR5LnZh
bHVlID0gbmV3IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5mcm9tT2JqZWN0KCJcdTIwMTQi
KTsgLy8gZW0gZGFzaAotICAgICAgICAgICAgcHJvcGVydHkuaXNHZXR0ZXIgPSB0cnVlOworICAg
ICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKICAgICAgICAgfQotICAgICAgICBw
cm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOwotICAgIH0KLSAgICByZXR1cm4gcHJvcGVydGllczsK
LX0KLQotSW5qZWN0ZWRTY3JpcHQuc2V0UHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKG9iamVjdElk
LCBwcm9wZXJ0eU5hbWUsIGV4cHJlc3Npb24pCi17Ci0gICAgdmFyIG9iamVjdCA9IEluamVjdGVk
U2NyaXB0Ll9vYmplY3RGb3JJZChvYmplY3RJZCk7Ci0gICAgaWYgKCFJbmplY3RlZFNjcmlwdC5f
aXNEZWZpbmVkKG9iamVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHZhciBleHBy
ZXNzaW9uTGVuZ3RoID0gZXhwcmVzc2lvbi5sZW5ndGg7Ci0gICAgaWYgKCFleHByZXNzaW9uTGVu
Z3RoKSB7Ci0gICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHlOYW1lXTsKLSAgICAgICAgcmV0
dXJuICEocHJvcGVydHlOYW1lIGluIG9iamVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcHJv
cGVydGllczsKKyAgICB9LAogCi0gICAgdHJ5IHsKLSAgICAgICAgLy8gU3Vycm91bmQgdGhlIGV4
cHJlc3Npb24gaW4gcGFyZW50aGVzaXMgc28gdGhlIHJlc3VsdCBvZiB0aGUgZXZhbCBpcyB0aGUg
cmVzdWx0Ci0gICAgICAgIC8vIG9mIHRoZSB3aG9sZSBleHByZXNzaW9uIG5vdCB0aGUgbGFzdCBw
b3RlbnRpYWwgc3ViLWV4cHJlc3Npb24uCi0KLSAgICAgICAgLy8gVGhlcmUgaXMgYSByZWdyZXNz
aW9uIGludHJvZHVjZWQgaGVyZTogZXZhbCBpcyBub3cgaGFwcGVuaW5nIGFnYWluc3QgZ2xvYmFs
IG9iamVjdCwKLSAgICAgICAgLy8gbm90IGNhbGwgZnJhbWUgd2hpbGUgb24gYSBicmVha3BvaW50
LgotICAgICAgICAvLyBUT0RPOiBicmluZyBldmFsdWF0aW9uIGFnYWluc3QgY2FsbCBmcmFtZSBi
YWNrLgotICAgICAgICB2YXIgcmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmV2YWwoIigiICsgZXhw
cmVzc2lvbiArICIpIik7Ci0gICAgICAgIC8vIFN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIHByb3Bl
cnR5LgotICAgICAgICBvYmplY3RbcHJvcGVydHlOYW1lXSA9IHJlc3VsdDsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSBjYXRjaChlKSB7CisgICAgc2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rp
b24ob2JqZWN0SWQsIHByb3BlcnR5TmFtZSwgZXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIHZh
ciBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChvYmplY3RJZCk7CisgICAgICAgIGlmICghdGhp
cy5faXNEZWZpbmVkKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgICAgIHZhciBleHByZXNzaW9uTGVuZ3RoID0gZXhwcmVzc2lvbi5sZW5ndGg7CisgICAgICAg
IGlmICghZXhwcmVzc2lvbkxlbmd0aCkgeworICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9w
ZXJ0eU5hbWVdOworICAgICAgICAgICAgcmV0dXJuICEocHJvcGVydHlOYW1lIGluIG9iamVjdCk7
CisgICAgICAgIH0KKyAgICAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQg
PSBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgiXCIiICsgZXhwcmVzc2lvbi5yZXBsYWNlKC8iL2csICJc
XFwiIikgKyAiXCIiKTsKKyAgICAgICAgICAgIC8vIFN1cnJvdW5kIHRoZSBleHByZXNzaW9uIGlu
IHBhcmVudGhlc2lzIHNvIHRoZSByZXN1bHQgb2YgdGhlIGV2YWwgaXMgdGhlIHJlc3VsdAorICAg
ICAgICAgICAgLy8gb2YgdGhlIHdob2xlIGV4cHJlc3Npb24gbm90IHRoZSBsYXN0IHBvdGVudGlh
bCBzdWItZXhwcmVzc2lvbi4KKyAgICAKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcmVncmVz
c2lvbiBpbnRyb2R1Y2VkIGhlcmU6IGV2YWwgaXMgbm93IGhhcHBlbmluZyBhZ2FpbnN0IGdsb2Jh
bCBvYmplY3QsCisgICAgICAgICAgICAvLyBub3QgY2FsbCBmcmFtZSB3aGlsZSBvbiBhIGJyZWFr
cG9pbnQuCisgICAgICAgICAgICAvLyBUT0RPOiBicmluZyBldmFsdWF0aW9uIGFnYWluc3QgY2Fs
bCBmcmFtZSBiYWNrLgorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGluc3BlY3RlZFdpbmRvdy5l
dmFsKCIoIiArIGV4cHJlc3Npb24gKyAiKSIpOworICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHJl
c3VsdCBpbiB0aGUgcHJvcGVydHkuCiAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHlOYW1lXSA9
IHJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGNhdGNoKGUpIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IGluc3BlY3RlZFdpbmRvdy5ldmFsKCJcIiIgKyBleHByZXNzaW9u
LnJlcGxhY2UoLyIvZywgIlxcXCIiKSArICJcIiIpOworICAgICAgICAgICAgICAgIG9iamVjdFtw
cm9wZXJ0eU5hbWVdID0gcmVzdWx0OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotfQorICAgIH0sCiAKLUluamVjdGVkU2NyaXB0
Ll9wb3B1bGF0ZVByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbihvYmplY3QsIHJlc3VsdFNldCkKLXsK
LSAgICBmb3IgKHZhciBvID0gb2JqZWN0OyBvOyBvID0gby5fX3Byb3RvX18pIHsKLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIHZhciBuYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG8pOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkK
LSAgICAgICAgICAgICAgICByZXN1bHRTZXRbbmFtZXNbaV1dID0gdHJ1ZTsKLSAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgIF9wb3B1bGF0ZVByb3BlcnR5TmFtZXM6IGZ1bmN0aW9uKG9iamVjdCwg
cmVzdWx0U2V0KQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgbyA9IG9iamVjdDsgbzsgbyA9IG8u
X19wcm90b19fKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZhciBuYW1l
cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pOworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFNldFtuYW1lc1tpXV0gPSB0cnVlOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotfQorICAgIH0sCiAKLUluamVjdGVkU2NyaXB0
Ll9nZXRQcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24ob2JqZWN0LCByZXN1bHRTZXQpCi17Ci0gICAg
dmFyIHByb3BlcnR5TmFtZVNldCA9IHt9OwotICAgIEluamVjdGVkU2NyaXB0Ll9wb3B1bGF0ZVBy
b3BlcnR5TmFtZXMob2JqZWN0LCBwcm9wZXJ0eU5hbWVTZXQpOwotICAgIHJldHVybiBPYmplY3Qu
a2V5cyhwcm9wZXJ0eU5hbWVTZXQpOwotfQorICAgIF9nZXRQcm9wZXJ0eU5hbWVzOiBmdW5jdGlv
bihvYmplY3QsIHJlc3VsdFNldCkKKyAgICB7CisgICAgICAgIHZhciBwcm9wZXJ0eU5hbWVTZXQg
PSB7fTsKKyAgICAgICAgdGhpcy5fcG9wdWxhdGVQcm9wZXJ0eU5hbWVzKG9iamVjdCwgcHJvcGVy
dHlOYW1lU2V0KTsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BlcnR5TmFtZVNldCk7
CisgICAgfSwKIAotSW5qZWN0ZWRTY3JpcHQuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihleHBy
ZXNzaW9uLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIGNhbGxGcmFtZUlkKQotewot
ICAgIHZhciBwcm9wcyA9IHt9OwotICAgIHRyeSB7Ci0gICAgICAgIHZhciBleHByZXNzaW9uUmVz
dWx0OwotICAgICAgICAvLyBFdmFsdWF0ZSBvbiBjYWxsIGZyYW1lIGlmIGNhbGwgZnJhbWUgaWQg
aXMgYXZhaWxhYmxlLgotICAgICAgICBpZiAodHlwZW9mIGNhbGxGcmFtZUlkID09PSAibnVtYmVy
IikgewotICAgICAgICAgICAgdmFyIGNhbGxGcmFtZSA9IEluamVjdGVkU2NyaXB0Ll9jYWxsRnJh
bWVGb3JJZChjYWxsRnJhbWVJZCk7Ci0gICAgICAgICAgICBpZiAoIWNhbGxGcmFtZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcHJvcHM7Ci0gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbikKLSAg
ICAgICAgICAgICAgICBleHByZXNzaW9uUmVzdWx0ID0gSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRl
T24oY2FsbEZyYW1lLmV2YWx1YXRlLCBjYWxsRnJhbWUsIGV4cHJlc3Npb24sIHRydWUpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRXZhbHVhdGUgaW50byBwcm9wZXJ0
aWVzIGluIHNjb3BlIG9mIHRoZSBzZWxlY3RlZCBjYWxsIGZyYW1lLgotICAgICAgICAgICAgICAg
IHZhciBzY29wZUNoYWluID0gY2FsbEZyYW1lLnNjb3BlQ2hhaW47Ci0gICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzY29wZUNoYWluLmxlbmd0aDsgKytpKQotICAgICAgICAgICAg
ICAgICAgICBJbmplY3RlZFNjcmlwdC5fcG9wdWxhdGVQcm9wZXJ0eU5hbWVzKHNjb3BlQ2hhaW5b
aV0sIHByb3BzKTsKKyAgICBnZXRDb21wbGV0aW9uczogZnVuY3Rpb24oZXhwcmVzc2lvbiwgaW5j
bHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBjYWxsRnJhbWVJZCkKKyAgICB7CisgICAgICAg
IHZhciBwcm9wcyA9IHt9OworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIGV4cHJlc3Np
b25SZXN1bHQ7CisgICAgICAgICAgICAvLyBFdmFsdWF0ZSBvbiBjYWxsIGZyYW1lIGlmIGNhbGwg
ZnJhbWUgaWQgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsRnJhbWVJ
ZCA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0gdGhpcy5f
Y2FsbEZyYW1lRm9ySWQoY2FsbEZyYW1lSWQpOworICAgICAgICAgICAgICAgIGlmICghY2FsbEZy
YW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7CisgICAgICAgICAgICAgICAg
aWYgKGV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25SZXN1bHQgPSB0
aGlzLl9ldmFsdWF0ZU9uKGNhbGxGcmFtZS5ldmFsdWF0ZSwgY2FsbEZyYW1lLCBleHByZXNzaW9u
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
RXZhbHVhdGUgaW50byBwcm9wZXJ0aWVzIGluIHNjb3BlIG9mIHRoZSBzZWxlY3RlZCBjYWxsIGZy
YW1lLgorICAgICAgICAgICAgICAgICAgICB2YXIgc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS5zY29w
ZUNoYWluOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjb3BlQ2hh
aW4ubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZVBy
b3BlcnR5TmFtZXMoc2NvcGVDaGFpbltpXSwgcHJvcHMpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAg
ICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gInRoaXMiOworICAgICAgICAgICAgICAgIGV4
cHJlc3Npb25SZXN1bHQgPSB0aGlzLl9ldmFsdWF0ZU9uKGluc3BlY3RlZFdpbmRvdy5ldmFsLCBp
bnNwZWN0ZWRXaW5kb3csIGV4cHJlc3Npb24sIGZhbHNlKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgICAgICAg
ICBleHByZXNzaW9uID0gInRoaXMiOwotICAgICAgICAgICAgZXhwcmVzc2lvblJlc3VsdCA9IElu
amVjdGVkU2NyaXB0Ll9ldmFsdWF0ZU9uKGluc3BlY3RlZFdpbmRvdy5ldmFsLCBpbnNwZWN0ZWRX
aW5kb3csIGV4cHJlc3Npb24sIGZhbHNlKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwcmVz
c2lvblJlc3VsdCA9PT0gIm9iamVjdCIpCisgICAgICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVQ
cm9wZXJ0eU5hbWVzKGV4cHJlc3Npb25SZXN1bHQsIHByb3BzKTsKKyAgICAKKyAgICAgICAgICAg
IGlmIChpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBwcm9wIGluIHRoaXMuX2NvbW1hbmRMaW5lQVBJKQorICAgICAgICAgICAgICAgICAg
ICBwcm9wc1twcm9wXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goZSkg
ewogICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvblJlc3VsdCA9PT0gIm9i
amVjdCIpCi0gICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5fcG9wdWxhdGVQcm9wZXJ0eU5hbWVz
KGV4cHJlc3Npb25SZXN1bHQsIHByb3BzKTsKKyAgICAgICAgcmV0dXJuIHByb3BzOworICAgIH0s
CiAKLSAgICAgICAgaWYgKGluY2x1ZGVJbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgewotICAgICAg
ICAgICAgZm9yICh2YXIgcHJvcCBpbiBJbmplY3RlZFNjcmlwdC5fY29tbWFuZExpbmVBUEkpCi0g
ICAgICAgICAgICAgICAgcHJvcHNbcHJvcF0gPSB0cnVlOworICAgIGV2YWx1YXRlOiBmdW5jdGlv
bihleHByZXNzaW9uLCBvYmplY3RHcm91cCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9l
dmFsdWF0ZUFuZFdyYXAoaW5zcGVjdGVkV2luZG93LmV2YWwsIGluc3BlY3RlZFdpbmRvdywgZXhw
cmVzc2lvbiwgb2JqZWN0R3JvdXApOworICAgIH0sCisKKyAgICBfZXZhbHVhdGVBbmRXcmFwOiBm
dW5jdGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGRv
bnRVc2VDb21tYW5kTGluZUFQSSkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fd3JhcE9iamVjdCh0aGlzLl9ldmFsdWF0ZU9uKGV2YWxGdW5jdGlvbiwgb2Jq
ZWN0LCBleHByZXNzaW9uLCBkb250VXNlQ29tbWFuZExpbmVBUEkpLCBvYmplY3RHcm91cCk7Cisg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5S
ZW1vdGVPYmplY3QuZnJvbUV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotICAgIH0gY2F0Y2goZSkg
ewotICAgIH0KLSAgICByZXR1cm4gcHJvcHM7Ci19CisgICAgfSwKIAotSW5qZWN0ZWRTY3JpcHQu
ZXZhbHVhdGUgPSBmdW5jdGlvbihleHByZXNzaW9uLCBvYmplY3RHcm91cCkKLXsKLSAgICByZXR1
cm4gSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlQW5kV3JhcChpbnNwZWN0ZWRXaW5kb3cuZXZhbCwg
aW5zcGVjdGVkV2luZG93LCBleHByZXNzaW9uLCBvYmplY3RHcm91cCk7Ci19CisgICAgX2V2YWx1
YXRlT246IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uLCBkb250VXNl
Q29tbWFuZExpbmVBUEkpCisgICAgeworICAgICAgICBpZiAoIWRvbnRVc2VDb21tYW5kTGluZUFQ
SSkgeworICAgICAgICAgICAgLy8gT25seSBpbnN0YWxsIGNvbW1hbmQgbGluZSBhcGkgb2JqZWN0
IGZvciB0aGUgdGltZSBvZiBldmFsdWF0aW9uLgorICAgIAorICAgICAgICAgICAgLy8gU3Vycm91
bmQgdGhlIGV4cHJlc3Npb24gaW4gd2l0aCBzdGF0ZW1lbnRzIHRvIGluamVjdCBvdXIgY29tbWFu
ZCBsaW5lIEFQSSBzbyB0aGF0CisgICAgICAgICAgICAvLyB0aGUgd2luZG93IG9iamVjdCBwcm9w
ZXJ0aWVzIHN0aWxsIHRha2UgbW9yZSBwcmVjZWRlbnQgdGhhbiBvdXIgQVBJIGZ1bmN0aW9ucy4K
KyAgICAgICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLl9jb21tYW5kTGluZUFQSSA9IHRo
aXMuX2NvbW1hbmRMaW5lQVBJOworICAgIAorICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICJ3aXRo
ICh3aW5kb3cuY29uc29sZS5fY29tbWFuZExpbmVBUEkpIHsgd2l0aCAod2luZG93KSB7XG4iICsg
ZXhwcmVzc2lvbiArICJcbn0gfSI7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdmFyIHZhbHVl
ID0gZXZhbEZ1bmN0aW9uLmNhbGwob2JqZWN0LCBleHByZXNzaW9uKTsKKyAgICAKKyAgICAgICAg
aWYgKCFkb250VXNlQ29tbWFuZExpbmVBUEkpCisgICAgICAgICAgICBkZWxldGUgaW5zcGVjdGVk
V2luZG93LmNvbnNvbGUuX2NvbW1hbmRMaW5lQVBJOworICAgIAorICAgICAgICAvLyBXaGVuIGV2
YWx1YXRpbmcgb24gY2FsbCBmcmFtZSBlcnJvciBpcyBub3QgdGhyb3duLCBidXQgcmV0dXJuZWQg
YXMgYSB2YWx1ZS4KKyAgICAgICAgaWYgKHRoaXMuX3R5cGUodmFsdWUpID09PSAiZXJyb3IiKQor
ICAgICAgICAgICAgdGhyb3cgdmFsdWUudG9TdHJpbmcoKTsKKyAgICAKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIH0sCiAKLUluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZUFuZFdyYXAgPSBmdW5j
dGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGRvbnRV
c2VDb21tYW5kTGluZUFQSSkKLXsKLSAgICB0cnkgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdChJbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbihldmFsRnVuY3Rpb24s
IG9iamVjdCwgZXhwcmVzc2lvbiwgZG9udFVzZUNvbW1hbmRMaW5lQVBJKSwgb2JqZWN0R3JvdXAp
OwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0LlJlbW90
ZU9iamVjdC5mcm9tRXhjZXB0aW9uKGUpOwotICAgIH0KLX0KKyAgICBnZXROb2RlSWQ6IGZ1bmN0
aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgZmFsc2UsIGZhbHNlKTsKKyAgICB9LAogCi1JbmplY3Rl
ZFNjcmlwdC5fZXZhbHVhdGVPbiA9IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHBy
ZXNzaW9uLCBkb250VXNlQ29tbWFuZExpbmVBUEkpCi17Ci0gICAgaWYgKCFkb250VXNlQ29tbWFu
ZExpbmVBUEkpIHsKLSAgICAgICAgLy8gT25seSBpbnN0YWxsIGNvbW1hbmQgbGluZSBhcGkgb2Jq
ZWN0IGZvciB0aGUgdGltZSBvZiBldmFsdWF0aW9uLgorICAgIGNhbGxGcmFtZXM6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBjYWxsRnJhbWUgPSBJbmplY3RlZFNjcmlwdEhvc3QuY3Vy
cmVudENhbGxGcmFtZSgpOworICAgICAgICBpZiAoIWNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICB2YXIg
ZGVwdGggPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgSW5q
ZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkoZGVwdGgrKywgY2FsbEZyYW1lKSk7CisgICAgICAg
ICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUuY2FsbGVyOworICAgICAgICB9IHdoaWxlIChjYWxs
RnJhbWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCiAKLSAgICAgICAgLy8gU3Vy
cm91bmQgdGhlIGV4cHJlc3Npb24gaW4gd2l0aCBzdGF0ZW1lbnRzIHRvIGluamVjdCBvdXIgY29t
bWFuZCBsaW5lIEFQSSBzbyB0aGF0Ci0gICAgICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3Bl
cnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgot
ICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuY29uc29sZS5fY29tbWFuZExpbmVBUEkgPSBJbmplY3Rl
ZFNjcmlwdC5fY29tbWFuZExpbmVBUEk7CisgICAgZXZhbHVhdGVJbkNhbGxGcmFtZTogZnVuY3Rp
b24oY2FsbEZyYW1lSWQsIGNvZGUsIG9iamVjdEdyb3VwKQorICAgIHsKKyAgICAgICAgdmFyIGNh
bGxGcmFtZSA9IHRoaXMuX2NhbGxGcmFtZUZvcklkKGNhbGxGcmFtZUlkKTsKKyAgICAgICAgaWYg
KCFjYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0
aGlzLl9ldmFsdWF0ZUFuZFdyYXAoY2FsbEZyYW1lLmV2YWx1YXRlLCBjYWxsRnJhbWUsIGNvZGUs
IG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICB9LAogCi0gICAgICAgIGV4cHJlc3Npb24gPSAid2l0
aCAod2luZG93LmNvbnNvbGUuX2NvbW1hbmRMaW5lQVBJKSB7IHdpdGggKHdpbmRvdykge1xuIiAr
IGV4cHJlc3Npb24gKyAiXG59IH0iOwotICAgIH0KKyAgICBfY2FsbEZyYW1lRm9ySWQ6IGZ1bmN0
aW9uKGlkKQorICAgIHsKKyAgICAgICAgdmFyIGNhbGxGcmFtZSA9IEluamVjdGVkU2NyaXB0SG9z
dC5jdXJyZW50Q2FsbEZyYW1lKCk7CisgICAgICAgIHdoaWxlICgtLWlkID49IDAgJiYgY2FsbEZy
YW1lKQorICAgICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLmNhbGxlcjsKKyAgICAgICAg
cmV0dXJuIGNhbGxGcmFtZTsKKyAgICB9LAogCi0gICAgdmFyIHZhbHVlID0gZXZhbEZ1bmN0aW9u
LmNhbGwob2JqZWN0LCBleHByZXNzaW9uKTsKKyAgICBfbm9kZUZvcklkOiBmdW5jdGlvbihub2Rl
SWQpCisgICAgeworICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0Lm5vZGVGb3JJZChub2RlSWQpOwor
ICAgIH0sCiAKLSAgICBpZiAoIWRvbnRVc2VDb21tYW5kTGluZUFQSSkKLSAgICAgICAgZGVsZXRl
IGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLl9jb21tYW5kTGluZUFQSTsKKyAgICBfb2JqZWN0Rm9y
SWQ6IGZ1bmN0aW9uKG9iamVjdElkKQorICAgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVl
IHR5cGVzIG9mIG9iamVjdCBpZHMgdXNlZDoKKyAgICAgICAgLy8gLSBudW1iZXJzIHBvaW50IHRv
IERPTSBOb2RlIHZpYSB0aGUgSW5zcGVjdG9yRE9NQWdlbnQgbWFwcGluZworICAgICAgICAvLyAt
IHN0cmluZ3MgcG9pbnQgdG8gY29uc29sZSBvYmplY3RzIGNhY2hlZCBpbiBJbnNwZWN0b3JDb250
cm9sbGVyIGZvciBsYXp5IGV2YWx1YXRpb24gdXBvbiB0aGVtCisgICAgICAgIC8vIC0gb2JqZWN0
cyBjb250YWluIGNvbXBsZXggaWRzIGFuZCBhcmUgY3VycmVudGx5IHVzZWQgZm9yIHNjb3BlZCBv
YmplY3RzCisgICAgICAgIHZhciBvYmplY3Q7CisgICAgICAgIGlmIChvYmplY3RJZC50eXBlID09
PSBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3RJZC5UeXBlLk5vZGUpCisgICAgICAgICAgICBv
YmplY3QgPSB0aGlzLl9ub2RlRm9ySWQob2JqZWN0SWQudmFsdWUpOworICAgICAgICBlbHNlIGlm
IChvYmplY3RJZC50eXBlID09PSBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3RJZC5UeXBlLkpz
T2JqZWN0KQorICAgICAgICAgICAgb2JqZWN0ID0gdGhpcy5faWRUb1dyYXBwZWRPYmplY3Rbb2Jq
ZWN0SWQudmFsdWVdOworICAgICAgICBlbHNlIGlmIChvYmplY3RJZC50eXBlID09PSBJbmplY3Rl
ZFNjcmlwdC5SZW1vdGVPYmplY3RJZC5UeXBlLlNjb3BlT2JqZWN0KSB7CisgICAgICAgICAgICB2
YXIgY2FsbEZyYW1lID0gdGhpcy5fY2FsbEZyYW1lRm9ySWQob2JqZWN0SWQudmFsdWUuY2FsbEZy
YW1lKTsKKyAgICAgICAgICAgIGlmIChvYmplY3RJZC50aGlzT2JqZWN0KQorICAgICAgICAgICAg
ICAgIG9iamVjdCA9IGNhbGxGcmFtZS50aGlzT2JqZWN0OworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG9iamVjdCA9IGNhbGxGcmFtZS5zY29wZUNoYWluW29iamVjdElkLnZhbHVl
LmNoYWluSW5kZXhdOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBvYmplY3RJ
ZDsKKyAgICAKKyAgICAgICAgdmFyIHBhdGggPSBvYmplY3RJZC5wYXRoOworICAgIAorICAgICAg
ICAvLyBGb2xsb3cgdGhlIHByb3BlcnR5IHBhdGguCisgICAgICAgIGZvciAodmFyIGkgPSAwOyB0
aGlzLl9pc0RlZmluZWQob2JqZWN0KSAmJiBwYXRoICYmIGkgPCBwYXRoLmxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3BhdGhbaV1dOworICAgIAorICAgICAgICByZXR1
cm4gb2JqZWN0OworICAgIH0sCiAKLSAgICAvLyBXaGVuIGV2YWx1YXRpbmcgb24gY2FsbCBmcmFt
ZSBlcnJvciBpcyBub3QgdGhyb3duLCBidXQgcmV0dXJuZWQgYXMgYSB2YWx1ZS4KLSAgICBpZiAo
SW5qZWN0ZWRTY3JpcHQuX3R5cGUodmFsdWUpID09PSAiZXJyb3IiKQotICAgICAgICB0aHJvdyB2
YWx1ZS50b1N0cmluZygpOworICAgIHB1c2hOb2RlVG9Gcm9udGVuZDogZnVuY3Rpb24ob2JqZWN0
SWQpCisgICAgeworICAgICAgICB2YXIgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQob2JqZWN0
SWQpOworICAgICAgICBpZiAoIW9iamVjdCB8fCB0aGlzLl90eXBlKG9iamVjdCkgIT09ICJub2Rl
IikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0SG9zdC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG9iamVjdCwgZmFsc2UsIGZhbHNlKTsKKyAg
ICB9LAogCi0gICAgcmV0dXJuIHZhbHVlOwotfQorICAgIGV2YWx1YXRlT25TZWxmOiBmdW5jdGlv
bihmdW5jQm9keSwgYXJncykKKyAgICB7CisgICAgICAgIHZhciBmdW5jID0gd2luZG93LmV2YWwo
IigiICsgZnVuY0JvZHkgKyAiKSIpOworICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBh
cmdzIHx8IFtdKTsKKyAgICB9LAogCi1JbmplY3RlZFNjcmlwdC5nZXROb2RlSWQgPSBmdW5jdGlv
bihub2RlKQotewotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucHVzaE5vZGVQYXRoVG9G
cm9udGVuZChub2RlLCBmYWxzZSwgZmFsc2UpOwotfQorICAgIF9pc0RlZmluZWQ6IGZ1bmN0aW9u
KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBvYmplY3QgfHwgdGhpcy5faXNIVE1MQWxs
Q29sbGVjdGlvbihvYmplY3QpOworICAgIH0sCiAKLUluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMg
PSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIGNhbGxGcmFtZSA9IEluamVjdGVkU2NyaXB0SG9zdC5j
dXJyZW50Q2FsbEZyYW1lKCk7Ci0gICAgaWYgKCFjYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICB2YXIgZGVwdGggPSAwOwotICAgIGRv
IHsKLSAgICAgICAgcmVzdWx0LnB1c2gobmV3IEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5
KGRlcHRoKyssIGNhbGxGcmFtZSkpOwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUuY2Fs
bGVyOwotICAgIH0gd2hpbGUgKGNhbGxGcmFtZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKyAg
ICBfaXNIVE1MQWxsQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAg
Ly8gZG9jdW1lbnQuYWxsIGlzIHJlcG9ydGVkIGFzIHVuZGVmaW5lZCwgYnV0IHdlIHN0aWxsIHdh
bnQgdG8gcHJvY2VzcyBpdC4KKyAgICAgICAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0ID09PSAidW5k
ZWZpbmVkIikgJiYgaW5zcGVjdGVkV2luZG93LkhUTUxBbGxDb2xsZWN0aW9uICYmIG9iamVjdCBp
bnN0YW5jZW9mIGluc3BlY3RlZFdpbmRvdy5IVE1MQWxsQ29sbGVjdGlvbjsKKyAgICB9LAogCi1J
bmplY3RlZFNjcmlwdC5ldmFsdWF0ZUluQ2FsbEZyYW1lID0gZnVuY3Rpb24oY2FsbEZyYW1lSWQs
IGNvZGUsIG9iamVjdEdyb3VwKQotewotICAgIHZhciBjYWxsRnJhbWUgPSBJbmplY3RlZFNjcmlw
dC5fY2FsbEZyYW1lRm9ySWQoY2FsbEZyYW1lSWQpOwotICAgIGlmICghY2FsbEZyYW1lKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZUFu
ZFdyYXAoY2FsbEZyYW1lLmV2YWx1YXRlLCBjYWxsRnJhbWUsIGNvZGUsIG9iamVjdEdyb3VwLCB0
cnVlKTsKLX0KKyAgICBfdHlwZTogZnVuY3Rpb24ob2JqKQorICAgIHsKKyAgICAgICAgaWYgKG9i
aiA9PT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiAibnVsbCI7CisKKyAgICAgICAgdmFyIHR5
cGUgPSB0eXBlb2Ygb2JqOworICAgICAgICBpZiAodHlwZSAhPT0gIm9iamVjdCIgJiYgdHlwZSAh
PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgLy8gRklYTUUoMzM3MTYpOiB0eXBlb2YgZG9j
dW1lbnQuYWxsIGlzIGFsd2F5cyAndW5kZWZpbmVkJy4KKyAgICAgICAgICAgIGlmICh0aGlzLl9p
c0hUTUxBbGxDb2xsZWN0aW9uKG9iaikpCisgICAgICAgICAgICAgICAgcmV0dXJuICJhcnJheSI7
CisgICAgICAgICAgICByZXR1cm4gdHlwZTsKKyAgICAgICAgfQogCi1JbmplY3RlZFNjcmlwdC5f
Y2FsbEZyYW1lRm9ySWQgPSBmdW5jdGlvbihpZCkKLXsKLSAgICB2YXIgY2FsbEZyYW1lID0gSW5q
ZWN0ZWRTY3JpcHRIb3N0LmN1cnJlbnRDYWxsRnJhbWUoKTsKLSAgICB3aGlsZSAoLS1pZCA+PSAw
ICYmIGNhbGxGcmFtZSkKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLmNhbGxlcjsKLSAg
ICByZXR1cm4gY2FsbEZyYW1lOwotfQorICAgICAgICAvLyBJZiBvd25pbmcgZnJhbWUgaGFzIG5h
dmlnYXRlZCB0byBzb21ld2hlcmUgZWxzZSB3aW5kb3cgcHJvcGVydGllcyB3aWxsIGJlIHVuZGVm
aW5lZC4KKyAgICAgICAgLy8gSW4gdGhpcyBjYXNlIGp1c3QgcmV0dXJuIHJlc3VsdCBvZiB0aGUg
dHlwZW9mLgorICAgICAgICBpZiAoIWluc3BlY3RlZFdpbmRvdy5kb2N1bWVudCkKKyAgICAgICAg
ICAgIHJldHVybiB0eXBlOwogCi1JbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkID0gZnVuY3Rpb24o
bm9kZUlkKQotewotICAgIGlmICghbm9kZUlkKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICBy
ZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0Lm5vZGVGb3JJZChub2RlSWQpOwotfQorICAgICAgICBp
ZiAob2JqIGluc3RhbmNlb2YgaW5zcGVjdGVkV2luZG93Lk5vZGUpCisgICAgICAgICAgICByZXR1
cm4gKG9iai5ub2RlVHlwZSA9PT0gdW5kZWZpbmVkID8gdHlwZSA6ICJub2RlIik7CisgICAgICAg
IGlmIChvYmogaW5zdGFuY2VvZiBpbnNwZWN0ZWRXaW5kb3cuU3RyaW5nKQorICAgICAgICAgICAg
cmV0dXJuICJzdHJpbmciOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgaW5zcGVjdGVkV2lu
ZG93LkFycmF5KQorICAgICAgICAgICAgcmV0dXJuICJhcnJheSI7CisgICAgICAgIGlmIChvYmog
aW5zdGFuY2VvZiBpbnNwZWN0ZWRXaW5kb3cuQm9vbGVhbikKKyAgICAgICAgICAgIHJldHVybiAi
Ym9vbGVhbiI7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBpbnNwZWN0ZWRXaW5kb3cuTnVt
YmVyKQorICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiOworICAgICAgICBpZiAob2JqIGluc3Rh
bmNlb2YgaW5zcGVjdGVkV2luZG93LkRhdGUpCisgICAgICAgICAgICByZXR1cm4gImRhdGUiOwor
ICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgaW5zcGVjdGVkV2luZG93LlJlZ0V4cCkKKyAgICAg
ICAgICAgIHJldHVybiAicmVnZXhwIjsKKyAgICAgICAgLy8gRmlyZUJ1ZydzIGFycmF5IGRldGVj
dGlvbi4KKyAgICAgICAgaWYgKGlzRmluaXRlKG9iai5sZW5ndGgpICYmIHR5cGVvZiBvYmouc3Bs
aWNlID09PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgcmV0dXJuICJhcnJheSI7CisgICAgICAg
IGlmIChpc0Zpbml0ZShvYmoubGVuZ3RoKSAmJiB0eXBlb2Ygb2JqLmNhbGxlZSA9PT0gImZ1bmN0
aW9uIikgLy8gYXJndW1lbnRzLgorICAgICAgICAgICAgcmV0dXJuICJhcnJheSI7CisgICAgICAg
IGlmIChvYmogaW5zdGFuY2VvZiBpbnNwZWN0ZWRXaW5kb3cuTm9kZUxpc3QpCisgICAgICAgICAg
ICByZXR1cm4gImFycmF5IjsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIGluc3BlY3RlZFdp
bmRvdy5IVE1MQ29sbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiAiYXJyYXkiOworICAgICAg
ICBpZiAob2JqIGluc3RhbmNlb2YgaW5zcGVjdGVkV2luZG93LkVycm9yKQorICAgICAgICAgICAg
cmV0dXJuICJlcnJvciI7CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0sCiAKLUluamVjdGVk
U2NyaXB0Ll9vYmplY3RGb3JJZCA9IGZ1bmN0aW9uKG9iamVjdElkKQotewotICAgIC8vIFRoZXJl
IGFyZSB0aHJlZSB0eXBlcyBvZiBvYmplY3QgaWRzIHVzZWQ6Ci0gICAgLy8gLSBudW1iZXJzIHBv
aW50IHRvIERPTSBOb2RlIHZpYSB0aGUgSW5zcGVjdG9yRE9NQWdlbnQgbWFwcGluZwotICAgIC8v
IC0gc3RyaW5ncyBwb2ludCB0byBjb25zb2xlIG9iamVjdHMgY2FjaGVkIGluIEluc3BlY3RvckNv
bnRyb2xsZXIgZm9yIGxhenkgZXZhbHVhdGlvbiB1cG9uIHRoZW0KLSAgICAvLyAtIG9iamVjdHMg
Y29udGFpbiBjb21wbGV4IGlkcyBhbmQgYXJlIGN1cnJlbnRseSB1c2VkIGZvciBzY29wZWQgb2Jq
ZWN0cwotICAgIHZhciBvYmplY3Q7Ci0gICAgaWYgKG9iamVjdElkLnR5cGUgPT09IEluamVjdGVk
U2NyaXB0LlJlbW90ZU9iamVjdElkLlR5cGUuTm9kZSkKLSAgICAgICAgb2JqZWN0ID0gSW5qZWN0
ZWRTY3JpcHQuX25vZGVGb3JJZChvYmplY3RJZC52YWx1ZSk7Ci0gICAgZWxzZSBpZiAob2JqZWN0
SWQudHlwZSA9PT0gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0SWQuVHlwZS5Kc09iamVjdCkK
LSAgICAgICAgb2JqZWN0ID0gSW5qZWN0ZWRTY3JpcHQudW53cmFwT2JqZWN0KG9iamVjdElkLnZh
bHVlKTsKLSAgICBlbHNlIGlmIChvYmplY3RJZC50eXBlID09PSBJbmplY3RlZFNjcmlwdC5SZW1v
dGVPYmplY3RJZC5UeXBlLlNjb3BlT2JqZWN0KSB7Ci0gICAgICAgIHZhciBjYWxsRnJhbWUgPSBJ
bmplY3RlZFNjcmlwdC5fY2FsbEZyYW1lRm9ySWQob2JqZWN0SWQudmFsdWUuY2FsbEZyYW1lKTsK
LSAgICAgICAgaWYgKG9iamVjdElkLnRoaXNPYmplY3QpCi0gICAgICAgICAgICBvYmplY3QgPSBj
YWxsRnJhbWUudGhpc09iamVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb2JqZWN0ID0g
Y2FsbEZyYW1lLnNjb3BlQ2hhaW5bb2JqZWN0SWQudmFsdWUuY2hhaW5JbmRleF07Ci0gICAgfSBl
bHNlCi0gICAgICAgIHJldHVybiBvYmplY3RJZDsKLQotICAgIHZhciBwYXRoID0gb2JqZWN0SWQu
cGF0aDsKLQotICAgIC8vIEZvbGxvdyB0aGUgcHJvcGVydHkgcGF0aC4KLSAgICBmb3IgKHZhciBp
ID0gMDsgSW5qZWN0ZWRTY3JpcHQuX2lzRGVmaW5lZChvYmplY3QpICYmIHBhdGggJiYgaSA8IHBh
dGgubGVuZ3RoOyArK2kpCi0gICAgICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2ldXTsKLQotICAg
IHJldHVybiBvYmplY3Q7Ci19CisgICAgX2Rlc2NyaWJlOiBmdW5jdGlvbihvYmosIGFiYnJldmlh
dGVkKQorICAgIHsKKyAgICAgICAgdmFyIHR5cGUgPSB0aGlzLl90eXBlKG9iaik7CisKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgIm9iamVjdCI6CisgICAgICAgIGNhc2Ug
Im5vZGUiOgorICAgICAgICBjYXNlICJhcnJheSI6CisgICAgICAgICAgICB2YXIgY2xhc3NOYW1l
ID0gdGhpcy5fY2xhc3NOYW1lKG9iaik7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5sZW5n
dGggPT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSAiWyIgKyBvYmou
bGVuZ3RoICsgIl0iOworICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKKyAgICAgICAgY2Fz
ZSAic3RyaW5nIjoKKyAgICAgICAgICAgIGlmICghYWJicmV2aWF0ZWQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG9iajsKKyAgICAgICAgICAgIGlmIChvYmoubGVuZ3RoID4gMTAwKQorICAgICAg
ICAgICAgICAgIHJldHVybiAiXCIiICsgb2JqLnN1YnN0cmluZygwLCAxMDApICsgIlx1MjAyNlwi
IjsKKyAgICAgICAgICAgIHJldHVybiAiXCIiICsgb2JqICsgIlwiIjsKKyAgICAgICAgY2FzZSAi
ZnVuY3Rpb24iOgorICAgICAgICAgICAgdmFyIG9iamVjdFRleHQgPSB0aGlzLl90b1N0cmluZyhv
YmopOworICAgICAgICAgICAgaWYgKGFiYnJldmlhdGVkKQorICAgICAgICAgICAgICAgIG9iamVj
dFRleHQgPSAvLiovLmV4ZWMob2JqZWN0VGV4dClbMF0ucmVwbGFjZSgvICskL2csICIiKTsKKyAg
ICAgICAgICAgIHJldHVybiBvYmplY3RUZXh0OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3RvU3RyaW5nKG9iaik7CisgICAgICAgIH0KKyAgICB9LAogCi1Jbmpl
Y3RlZFNjcmlwdC5wdXNoTm9kZVRvRnJvbnRlbmQgPSBmdW5jdGlvbihvYmplY3RJZCkKLXsKLSAg
ICB2YXIgb2JqZWN0ID0gSW5qZWN0ZWRTY3JpcHQuX29iamVjdEZvcklkKG9iamVjdElkKTsKLSAg
ICBpZiAoIW9iamVjdCB8fCBJbmplY3RlZFNjcmlwdC5fdHlwZShvYmplY3QpICE9PSAibm9kZSIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQob2JqZWN0LCBmYWxzZSwgZmFsc2UpOworICAgIF90b1N0cmlu
ZzogZnVuY3Rpb24ob2JqKQorICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIFN0cmluZyhv
YmopIGJlY2F1c2UgaW5zcGVjdGVkV2luZG93LlN0cmluZyBpcyB1bmRlZmluZWQgaWYgb3duaW5n
IGZyYW1lIG5hdmlnYXRlZCB0byBhbm90aGVyIHBhZ2UuCisgICAgICAgIHJldHVybiAiIiArIG9i
ajsKKyAgICB9LAorCisgICAgX2NsYXNzTmFtZTogZnVuY3Rpb24ob2JqKQorICAgIHsKKyAgICAg
ICAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBzYW1lIGNvZGUgZm9yIGZldGNoaW5nIGNsYXNzIG5hbWVz
IG9mIHRoZSBkb20gYmluZGluZ3MgcHJvdG90eXBlIGNoYWluLgorICAgICAgICAvLyBCb3RoIG9m
IHRoZSBtZXRob2RzIGJlbG93IHJlc3VsdCBpbiAiT2JqZWN0IiBuYW1lcyBvbiB0aGUgZm9yZWln
biBlbmdpbmUgYmluZGluZ3MuCisgICAgICAgIC8vIEkgZ2F2ZSB1cCBhbmQgYW0gdXNpbmcgYSBj
aGVjayBiZWxvdyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBlZ2luZSBiaW5naW5ncy4KKwor
ICAgICAgICBpZiAoanNFbmdpbmUgPT0gIkpTQyIpIHsKKyAgICAgICAgICAgIHZhciBzdHIgPSBp
bnNwZWN0ZWRXaW5kb3cuT2JqZWN0ID8gaW5zcGVjdGVkV2luZG93Lk9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmcuY2FsbChvYmopIDogdGhpcy5fdG9TdHJpbmcob2JqKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdHIucmVwbGFjZSgvXlxbb2JqZWN0ICguKilcXSQvaSwgIiQxIik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBWOAorICAgICAgICAgICAgcmV0dXJuIG9iai5jb25zdHJ1
Y3RvciAmJiBvYmouY29uc3RydWN0b3IubmFtZSB8fCAiT2JqZWN0IjsKKyAgICAgICAgfQorICAg
IH0sCisKKyAgICBfbG9nRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgY29u
c29sZS5sb2coZXZlbnQudHlwZSwgZXZlbnQpOworICAgIH0sCisKKyAgICBfbm9ybWFsaXplRXZl
bnRUeXBlczogZnVuY3Rpb24odHlwZXMpCisgICAgeworICAgICAgICBpZiAodHlwZW9mIHR5cGVz
ID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIHR5cGVzID0gWyAibW91c2UiLCAia2V5Iiwg
ImxvYWQiLCAidW5sb2FkIiwgImFib3J0IiwgImVycm9yIiwgInNlbGVjdCIsICJjaGFuZ2UiLCAi
c3VibWl0IiwgInJlc2V0IiwgImZvY3VzIiwgImJsdXIiLCAicmVzaXplIiwgInNjcm9sbCIgXTsK
KyAgICAgICAgZWxzZSBpZiAodHlwZW9mIHR5cGVzID09PSAic3RyaW5nIikKKyAgICAgICAgICAg
IHR5cGVzID0gWyB0eXBlcyBdOworCisgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYg
KHR5cGVzW2ldID09PSAibW91c2UiKQorICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwg
MCwgIm1vdXNlZG93biIsICJtb3VzZXVwIiwgImNsaWNrIiwgImRibGNsaWNrIiwgIm1vdXNlbW92
ZSIsICJtb3VzZW92ZXIiLCAibW91c2VvdXQiKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVz
W2ldID09PSAia2V5IikKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKDAsIDAsICJrZXlk
b3duIiwgImtleXVwIiwgImtleXByZXNzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2godHlwZXNbaV0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfSwKKworICAgIF9pbnNwZWN0ZWROb2RlOiBmdW5jdGlvbihudW0pCisgICAg
eworICAgICAgICB2YXIgbm9kZUlkID0gSW5qZWN0ZWRTY3JpcHRIb3N0Lmluc3BlY3RlZE5vZGUo
bnVtKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVGb3JJZChub2RlSWQpOworICAgIH0sCisK
KyAgICBfYmluZFRvU2NyaXB0OiBmdW5jdGlvbihmdW5jKQorICAgIHsKKyAgICAgICAgdmFyIGFy
Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworICAgICAgICBm
dW5jdGlvbiBib3VuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5
KGluamVjdGVkU2NyaXB0LCBhcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMpKSk7CisgICAgICAgIH0KKyAgICAgICAgYm91bmQudG9TdHJpbmcgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHJldHVybiAiYm91bmQ6ICIgKyBmdW5jOworICAgICAgICB9Owor
ICAgICAgICByZXR1cm4gYm91bmQ7CisgICAgfQogfQogCit2YXIgaW5qZWN0ZWRTY3JpcHQgPSBu
ZXcgSW5qZWN0ZWRTY3JpcHQoKTsKKwogLy8gRklYTUU6IFJlbW90ZU9iamVjdElkIGFuZCBSZW1v
dGVPYmplY3Qgc3RydWN0cyBtdXN0IG1hdGNoIHRoZSBXZWJJbnNwZWN0b3IuKiBvbmVzLiBTaG91
bGQgcmV1c2Ugc2FtZSBmaWxlIGluc3RlYWQuCiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3RJ
ZCA9IGZ1bmN0aW9uKHR5cGUsIHZhbHVlLCBwYXRoKQogewpAQCAtMzg5LDI0ICs1NDYsMTggQEAg
SW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmZyb21FeGNlcHRpb24gPSBmdW5jdGlvbihlKQog
CiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKG9iamVj
dCwgb2JqZWN0SWQsIGFiYnJldmlhdGUpCiB7Ci0gICAgdmFyIHR5cGUgPSBJbmplY3RlZFNjcmlw
dC5fdHlwZShvYmplY3QpOworICAgIHZhciB0eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3R5cGUob2Jq
ZWN0KTsKICAgICB2YXIgcmF3VHlwZSA9IHR5cGVvZiBvYmplY3Q7CiAgICAgdmFyIGhhc0NoaWxk
cmVuID0gKHJhd1R5cGUgPT09ICJvYmplY3QiICYmIG9iamVjdCAhPT0gbnVsbCAmJiAoT2JqZWN0
LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KS5sZW5ndGggfHwgISFvYmplY3QuX19wcm90b19f
KSkgfHwgcmF3VHlwZSA9PT0gImZ1bmN0aW9uIjsKICAgICB2YXIgZGVzY3JpcHRpb24gPSAiIjsK
ICAgICB0cnkgewotICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBJbmplY3RlZFNjcmlwdC5fZGVz
Y3JpYmUob2JqZWN0LCBhYmJyZXZpYXRlKTsKKyAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gaW5q
ZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKG9iamVjdCwgYWJicmV2aWF0ZSk7CiAgICAgICAgIHJldHVy
biBuZXcgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0KG9iamVjdElkLCB0eXBlLCBkZXNjcmlw
dGlvbiwgaGFzQ2hpbGRyZW4pOwogICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgcmV0dXJuIElu
amVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5mcm9tRXhjZXB0aW9uKGUpOwogICAgIH0KIH0KIAot
SW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPblNlbGYgPSBmdW5jdGlvbihmdW5jQm9keSwgYXJncykK
LXsKLSAgICB2YXIgZnVuYyA9IHdpbmRvdy5ldmFsKCIoIiArIGZ1bmNCb2R5ICsgIikiKTsKLSAg
ICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzIHx8IFtdKTsKLX0KLQogSW5qZWN0ZWRTY3Jp
cHQuQ2FsbEZyYW1lUHJveHkgPSBmdW5jdGlvbihpZCwgY2FsbEZyYW1lKQogewogICAgIHRoaXMu
aWQgPSBpZDsKQEAgLTQ2NSwxNDQgKzYxNiwxMCBAQCBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQ
cm94eS5wcm90b3R5cGUgPSB7CiAgICAgfQogfQogCi1JbmplY3RlZFNjcmlwdC5faXNEZWZpbmVk
ID0gZnVuY3Rpb24ob2JqZWN0KQotewotICAgIHJldHVybiBvYmplY3QgfHwgSW5qZWN0ZWRTY3Jp
cHQuX2lzSFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0KTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2lz
SFRNTEFsbENvbGxlY3Rpb24gPSBmdW5jdGlvbihvYmplY3QpCi17Ci0gICAgLy8gZG9jdW1lbnQu
YWxsIGlzIHJlcG9ydGVkIGFzIHVuZGVmaW5lZCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gcHJvY2Vz
cyBpdC4KLSAgICByZXR1cm4gKHR5cGVvZiBvYmplY3QgPT09ICJ1bmRlZmluZWQiKSAmJiBpbnNw
ZWN0ZWRXaW5kb3cuSFRNTEFsbENvbGxlY3Rpb24gJiYgb2JqZWN0IGluc3RhbmNlb2YgaW5zcGVj
dGVkV2luZG93LkhUTUxBbGxDb2xsZWN0aW9uOwotfQotCi1JbmplY3RlZFNjcmlwdC5fdHlwZSA9
IGZ1bmN0aW9uKG9iaikKLXsKLSAgICBpZiAob2JqID09PSBudWxsKQotICAgICAgICByZXR1cm4g
Im51bGwiOwotCi0gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqOwotICAgIGlmICh0eXBlICE9PSAi
b2JqZWN0IiAmJiB0eXBlICE9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgIC8vIEZJWE1FKDMzNzE2
KTogdHlwZW9mIGRvY3VtZW50LmFsbCBpcyBhbHdheXMgJ3VuZGVmaW5lZCcuCi0gICAgICAgIGlm
IChJbmplY3RlZFNjcmlwdC5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmopKQotICAgICAgICAgICAg
cmV0dXJuICJhcnJheSI7Ci0gICAgICAgIHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIC8vIElm
IG93bmluZyBmcmFtZSBoYXMgbmF2aWdhdGVkIHRvIHNvbWV3aGVyZSBlbHNlIHdpbmRvdyBwcm9w
ZXJ0aWVzIHdpbGwgYmUgdW5kZWZpbmVkLgotICAgIC8vIEluIHRoaXMgY2FzZSBqdXN0IHJldHVy
biByZXN1bHQgb2YgdGhlIHR5cGVvZi4KLSAgICBpZiAoIWluc3BlY3RlZFdpbmRvdy5kb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuIHR5cGU7Ci0KLSAgICBpZiAob2JqIGluc3RhbmNlb2YgaW5zcGVj
dGVkV2luZG93Lk5vZGUpCi0gICAgICAgIHJldHVybiAob2JqLm5vZGVUeXBlID09PSB1bmRlZmlu
ZWQgPyB0eXBlIDogIm5vZGUiKTsKLSAgICBpZiAob2JqIGluc3RhbmNlb2YgaW5zcGVjdGVkV2lu
ZG93LlN0cmluZykKLSAgICAgICAgcmV0dXJuICJzdHJpbmciOwotICAgIGlmIChvYmogaW5zdGFu
Y2VvZiBpbnNwZWN0ZWRXaW5kb3cuQXJyYXkpCi0gICAgICAgIHJldHVybiAiYXJyYXkiOwotICAg
IGlmIChvYmogaW5zdGFuY2VvZiBpbnNwZWN0ZWRXaW5kb3cuQm9vbGVhbikKLSAgICAgICAgcmV0
dXJuICJib29sZWFuIjsKLSAgICBpZiAob2JqIGluc3RhbmNlb2YgaW5zcGVjdGVkV2luZG93Lk51
bWJlcikKLSAgICAgICAgcmV0dXJuICJudW1iZXIiOwotICAgIGlmIChvYmogaW5zdGFuY2VvZiBp
bnNwZWN0ZWRXaW5kb3cuRGF0ZSkKLSAgICAgICAgcmV0dXJuICJkYXRlIjsKLSAgICBpZiAob2Jq
IGluc3RhbmNlb2YgaW5zcGVjdGVkV2luZG93LlJlZ0V4cCkKLSAgICAgICAgcmV0dXJuICJyZWdl
eHAiOwotICAgIC8vIEZpcmVCdWcncyBhcnJheSBkZXRlY3Rpb24uCi0gICAgaWYgKGlzRmluaXRl
KG9iai5sZW5ndGgpICYmIHR5cGVvZiBvYmouc3BsaWNlID09PSAiZnVuY3Rpb24iKQotICAgICAg
ICByZXR1cm4gImFycmF5IjsKLSAgICBpZiAoaXNGaW5pdGUob2JqLmxlbmd0aCkgJiYgdHlwZW9m
IG9iai5jYWxsZWUgPT09ICJmdW5jdGlvbiIpIC8vIGFyZ3VtZW50cy4KLSAgICAgICAgcmV0dXJu
ICJhcnJheSI7Ci0gICAgaWYgKG9iaiBpbnN0YW5jZW9mIGluc3BlY3RlZFdpbmRvdy5Ob2RlTGlz
dCkKLSAgICAgICAgcmV0dXJuICJhcnJheSI7Ci0gICAgaWYgKG9iaiBpbnN0YW5jZW9mIGluc3Bl
Y3RlZFdpbmRvdy5IVE1MQ29sbGVjdGlvbikKLSAgICAgICAgcmV0dXJuICJhcnJheSI7Ci0gICAg
aWYgKG9iaiBpbnN0YW5jZW9mIGluc3BlY3RlZFdpbmRvdy5FcnJvcikKLSAgICAgICAgcmV0dXJu
ICJlcnJvciI7Ci0gICAgcmV0dXJuIHR5cGU7Ci19Ci0KLUluamVjdGVkU2NyaXB0Ll9kZXNjcmli
ZSA9IGZ1bmN0aW9uKG9iaiwgYWJicmV2aWF0ZWQpCi17Ci0gICAgdmFyIHR5cGUgPSBJbmplY3Rl
ZFNjcmlwdC5fdHlwZShvYmopOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSAib2Jq
ZWN0IjoKLSAgICBjYXNlICJub2RlIjoKLSAgICBjYXNlICJhcnJheSI6Ci0gICAgICAgIHZhciBj
bGFzc05hbWUgPSBJbmplY3RlZFNjcmlwdC5fY2xhc3NOYW1lKG9iaik7Ci0gICAgICAgIGlmICh0
eXBlb2Ygb2JqLmxlbmd0aCA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICBjbGFzc05hbWUgKz0g
IlsiICsgb2JqLmxlbmd0aCArICJdIjsKLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgICBj
YXNlICJzdHJpbmciOgotICAgICAgICBpZiAoIWFiYnJldmlhdGVkKQotICAgICAgICAgICAgcmV0
dXJuIG9iajsKLSAgICAgICAgaWYgKG9iai5sZW5ndGggPiAxMDApCi0gICAgICAgICAgICByZXR1
cm4gIlwiIiArIG9iai5zdWJzdHJpbmcoMCwgMTAwKSArICJcdTIwMjZcIiI7Ci0gICAgICAgIHJl
dHVybiAiXCIiICsgb2JqICsgIlwiIjsKLSAgICBjYXNlICJmdW5jdGlvbiI6Ci0gICAgICAgIHZh
ciBvYmplY3RUZXh0ID0gSW5qZWN0ZWRTY3JpcHQuX3RvU3RyaW5nKG9iaik7Ci0gICAgICAgIGlm
IChhYmJyZXZpYXRlZCkKLSAgICAgICAgICAgIG9iamVjdFRleHQgPSAvLiovLmV4ZWMob2JqZWN0
VGV4dClbMF0ucmVwbGFjZSgvICskL2csICIiKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdFRleHQ7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll90b1N0cmluZyhv
YmopOwotICAgIH0KLX0KLQotSW5qZWN0ZWRTY3JpcHQuX3RvU3RyaW5nID0gZnVuY3Rpb24ob2Jq
KQotewotICAgIC8vIFdlIGRvbid0IHVzZSBTdHJpbmcob2JqKSBiZWNhdXNlIGluc3BlY3RlZFdp
bmRvdy5TdHJpbmcgaXMgdW5kZWZpbmVkIGlmIG93bmluZyBmcmFtZSBuYXZpZ2F0ZWQgdG8gYW5v
dGhlciBwYWdlLgotICAgIHJldHVybiAiIiArIG9iajsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2Ns
YXNzTmFtZSA9IGZ1bmN0aW9uKG9iaikKLXsKLSAgICAvLyBXZSBjYW4ndCB1c2UgdGhlIHNhbWUg
Y29kZSBmb3IgZmV0Y2hpbmcgY2xhc3MgbmFtZXMgb2YgdGhlIGRvbSBiaW5kaW5ncyBwcm90b3R5
cGUgY2hhaW4uCi0gICAgLy8gQm90aCBvZiB0aGUgbWV0aG9kcyBiZWxvdyByZXN1bHQgaW4gIk9i
amVjdCIgbmFtZXMgb24gdGhlIGZvcmVpZ24gZW5naW5lIGJpbmRpbmdzLgotICAgIC8vIEkgZ2F2
ZSB1cCBhbmQgYW0gdXNpbmcgYSBjaGVjayBiZWxvdyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRo
ZSBlZ2luZSBiaW5naW5ncy4KLQotICAgIGlmIChqc0VuZ2luZSA9PSAiSlNDIikgewotICAgICAg
ICB2YXIgc3RyID0gaW5zcGVjdGVkV2luZG93Lk9iamVjdCA/IGluc3BlY3RlZFdpbmRvdy5PYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA6IEluamVjdGVkU2NyaXB0Ll90b1N0cmlu
ZyhvYmopOwotICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15cW29iamVjdCAoLiopXF0kL2ks
ICIkMSIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFY4Ci0gICAgICAgIHJldHVybiBvYmou
Y29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgfHwgIk9iamVjdCI7Ci0gICAgfQot
fQotCi1JbmplY3RlZFNjcmlwdC5fbG9nRXZlbnQgPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICBj
b25zb2xlLmxvZyhldmVudC50eXBlLCBldmVudCk7Ci19Ci0KLUluamVjdGVkU2NyaXB0Ll9ub3Jt
YWxpemVFdmVudFR5cGVzID0gZnVuY3Rpb24odHlwZXMpCi17Ci0gICAgaWYgKHR5cGVvZiB0eXBl
cyA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgIHR5cGVzID0gWyAibW91c2UiLCAia2V5IiwgImxv
YWQiLCAidW5sb2FkIiwgImFib3J0IiwgImVycm9yIiwgInNlbGVjdCIsICJjaGFuZ2UiLCAic3Vi
bWl0IiwgInJlc2V0IiwgImZvY3VzIiwgImJsdXIiLCAicmVzaXplIiwgInNjcm9sbCIgXTsKLSAg
ICBlbHNlIGlmICh0eXBlb2YgdHlwZXMgPT09ICJzdHJpbmciKQotICAgICAgICB0eXBlcyA9IFsg
dHlwZXMgXTsKLQotICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmICh0eXBlc1tpXSA9PT0gIm1vdXNlIikK
LSAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwgMCwgIm1vdXNlZG93biIsICJtb3VzZXVwIiwg
ImNsaWNrIiwgImRibGNsaWNrIiwgIm1vdXNlbW92ZSIsICJtb3VzZW92ZXIiLCAibW91c2VvdXQi
KTsKLSAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0gPT09ICJrZXkiKQotICAgICAgICAgICAgcmVz
dWx0LnNwbGljZSgwLCAwLCAia2V5ZG93biIsICJrZXl1cCIsICJrZXlwcmVzcyIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXN1bHQucHVzaCh0eXBlc1tpXSk7Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLUluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlID0gZnVuY3Rp
b24obnVtKQotewotICAgIHZhciBub2RlSWQgPSBJbmplY3RlZFNjcmlwdEhvc3QuaW5zcGVjdGVk
Tm9kZShudW0pOwotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7
Ci19Ci0KIGZ1bmN0aW9uIENvbW1hbmRMaW5lQVBJKCkKIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDU7ICsraSkKKyAgICAgICAgdGhpcy5fX2RlZmluZUdldHRlcl9fKCIkIiArIGksIGluamVj
dGVkU2NyaXB0Ll9iaW5kVG9TY3JpcHQoaW5qZWN0ZWRTY3JpcHQuX2luc3BlY3RlZE5vZGUsIGkp
KTsKIH0KIAogQ29tbWFuZExpbmVBUEkucHJvdG90eXBlID0gewpAQCAtNjY5LDEwICs2ODYsMTAg
QEAgQ29tbWFuZExpbmVBUEkucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCFvYmpl
Y3QgfHwgIW9iamVjdC5hZGRFdmVudExpc3RlbmVyIHx8ICFvYmplY3QucmVtb3ZlRXZlbnRMaXN0
ZW5lcikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdHlwZXMgPSBJbmplY3RlZFNjcmlw
dC5fbm9ybWFsaXplRXZlbnRUeXBlcyh0eXBlcyk7CisgICAgICAgIHR5cGVzID0gaW5qZWN0ZWRT
Y3JpcHQuX25vcm1hbGl6ZUV2ZW50VHlwZXModHlwZXMpOwogICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBvYmplY3QucmVtb3ZlRXZl
bnRMaXN0ZW5lcih0eXBlc1tpXSwgSW5qZWN0ZWRTY3JpcHQuX2xvZ0V2ZW50LCBmYWxzZSk7Ci0g
ICAgICAgICAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcih0eXBlc1tpXSwgSW5qZWN0ZWRTY3Jp
cHQuX2xvZ0V2ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBvYmplY3QucmVtb3ZlRXZlbnRMaXN0
ZW5lcih0eXBlc1tpXSwgaW5qZWN0ZWRTY3JpcHQuX2xvZ0V2ZW50LCBmYWxzZSk7CisgICAgICAg
ICAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcih0eXBlc1tpXSwgaW5qZWN0ZWRTY3JpcHQuX2xv
Z0V2ZW50LCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9LAogCkBAIC02ODAsOSArNjk3LDkgQEAg
Q29tbWFuZExpbmVBUEkucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCFvYmplY3Qg
fHwgIW9iamVjdC5hZGRFdmVudExpc3RlbmVyIHx8ICFvYmplY3QucmVtb3ZlRXZlbnRMaXN0ZW5l
cikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdHlwZXMgPSBJbmplY3RlZFNjcmlwdC5f
bm9ybWFsaXplRXZlbnRUeXBlcyh0eXBlcyk7CisgICAgICAgIHR5cGVzID0gaW5qZWN0ZWRTY3Jp
cHQuX25vcm1hbGl6ZUV2ZW50VHlwZXModHlwZXMpOwogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHR5cGVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgb2JqZWN0LnJlbW92ZUV2ZW50TGlz
dGVuZXIodHlwZXNbaV0sIEluamVjdGVkU2NyaXB0Ll9sb2dFdmVudCwgZmFsc2UpOworICAgICAg
ICAgICAgb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZXNbaV0sIGluamVjdGVkU2NyaXB0
Ll9sb2dFdmVudCwgZmFsc2UpOwogICAgIH0sCiAKICAgICBpbnNwZWN0OiBmdW5jdGlvbihvYmpl
Y3QpCkBAIC02OTEsMTAgKzcwOCwxMCBAQCBDb21tYW5kTGluZUFQSS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUubG9n
KG9iamVjdCk7Ci0gICAgICAgIGlmIChJbmplY3RlZFNjcmlwdC5fdHlwZShvYmplY3QpID09PSAi
bm9kZSIpCisgICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5fdHlwZShvYmplY3QpID09PSAibm9k
ZSIpCiAgICAgICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QucHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChvYmplY3QsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKEluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSAiRGF0YWJhc2UiOgogICAgICAgICAgICAgICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3Qu
c2VsZWN0RGF0YWJhc2Uob2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03
MDcsNyArNzI0LDcgQEAgQ29tbWFuZExpbmVBUEkucHJvdG90eXBlID0gewogCiAgICAgY29weTog
ZnVuY3Rpb24ob2JqZWN0KQogICAgIHsKLSAgICAgICAgaWYgKEluamVjdGVkU2NyaXB0Ll90eXBl
KG9iamVjdCkgPT09ICJub2RlIikgeworICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuX3R5cGUo
b2JqZWN0KSA9PT0gIm5vZGUiKSB7CiAgICAgICAgICAgICB2YXIgbm9kZUlkID0gSW5qZWN0ZWRT
Y3JpcHRIb3N0LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQob2JqZWN0LCBmYWxzZSwgZmFsc2UpOwog
ICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0LmNvcHlOb2RlKG5vZGVJZCk7CiAgICAgICAg
IH0gZWxzZQpAQCAtNzE3LDM1ICs3MzQsOSBAQCBDb21tYW5kTGluZUFQSS5wcm90b3R5cGUgPSB7
CiAgICAgY2xlYXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIEluamVjdGVkU2NyaXB0SG9z
dC5jbGVhckNvbnNvbGVNZXNzYWdlcygpOwotICAgIH0sCi0KLSAgICBnZXQgJDAoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDApOwotICAgIH0s
Ci0KLSAgICBnZXQgJDEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9p
bnNwZWN0ZWROb2RlKDEpOwotICAgIH0sCi0KLSAgICBnZXQgJDIoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDIpOwotICAgIH0sCi0KLSAgICBn
ZXQgJDMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWRO
b2RlKDMpOwotICAgIH0sCi0KLSAgICBnZXQgJDQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIElu
amVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDQpOwogICAgIH0KIH0KIAotSW5qZWN0ZWRTY3Jp
cHQuX2NvbW1hbmRMaW5lQVBJID0gbmV3IENvbW1hbmRMaW5lQVBJKCk7Ci0KLXJldHVybiBJbmpl
Y3RlZFNjcmlwdDsKK2luamVjdGVkU2NyaXB0Ll9jb21tYW5kTGluZUFQSSA9IG5ldyBDb21tYW5k
TGluZUFQSSgpOworcmV0dXJuIGluamVjdGVkU2NyaXB0OwogfSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>