<?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>36117</bug_id>
          
          <creation_ts>2010-03-15 08:11:15 -0700</creation_ts>
          <short_desc>Web Inspector: migrate to native styles inspector in order to inspect styles from foreighn domains.</short_desc>
          <delta_ts>2010-03-16 02:33:03 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>199649</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-15 08:11:15 -0700</bug_when>
    <thetext>(This will be used for audits too)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199654</commentid>
    <comment_count>1</comment_count>
      <attachid>50708</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-15 08:13:50 -0700</bug_when>
    <thetext>Created attachment 50708
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199657</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-15 08:16:08 -0700</bug_when>
    <thetext>Attachment 50708 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/inspector/InspectorDOMAgent.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/inspector/InspectorDOMAgent.cpp:773:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/inspector/InspectorDOMAgent.cpp:853:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/inspector/InspectorDOMAgent.cpp:867:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199659</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-15 08:18:00 -0700</bug_when>
    <thetext>Attachment 50708 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/869002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199662</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-15 08:22:06 -0700</bug_when>
    <thetext>Attachment 50708 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/885001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199672</commentid>
    <comment_count>5</comment_count>
      <attachid>50708</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-03-15 08:45:31 -0700</bug_when>
    <thetext>Comment on attachment 50708
[PATCH] Proposed change.

&gt; +    for (unsigned i = 0; …

Use size_t instead for for loops.


&gt; +    bool isUserAgent = parentStyleSheet &amp;&amp; !parentStyleSheet-&gt;ownerNode() &amp;&amp; parentStyleSheet-&gt;href().isEmpty();
&gt; +    bool isUser = parentStyleSheet &amp;&amp; parentStyleSheet-&gt;ownerNode() &amp;&amp; parentStyleSheet-&gt;ownerNode()-&gt;nodeName() == &quot;#document&quot;;

I suspect there is a more direct way to get this info now that we are in native code.


I lament to loss of easier to write JavaScript…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199673</commentid>
    <comment_count>6</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-03-15 08:46:22 -0700</bug_when>
    <thetext>Make sure to fix the flagged style errors and the build errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199846</commentid>
    <comment_count>7</comment_count>
      <attachid>50744</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-15 14:45:07 -0700</bug_when>
    <thetext>Created attachment 50744
[PATCH] Patch to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199889</commentid>
    <comment_count>8</comment_count>
      <attachid>50708</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-15 15:55:13 -0700</bug_when>
    <thetext>Comment on attachment 50708
[PATCH] Proposed change.

Cleared Timothy Hatcher&apos;s review+ from obsolete attachment 50708 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199980</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-15 21:13:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Make sure to fix the flagged style errors and the build errors.

Also, is it really &quot;foreighn&quot; or should it be &quot;foreign&quot; or just &quot;any domain&quot;? It would be nice to update the bug + ChangeLog if that is a typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200073</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-16 02:33:03 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/inspector/styles-iframe.html
	M	WebCore/ChangeLog
	M	WebCore/bindings/js/ScriptValue.h
	M	WebCore/bindings/v8/ScriptValue.h
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorBackend.idl
	M	WebCore/inspector/InspectorDOMAgent.cpp
	M	WebCore/inspector/InspectorDOMAgent.h
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorFrontend.h
	M	WebCore/inspector/front-end/DOMAgent.js
	M	WebCore/inspector/front-end/ElementsTreeOutline.js
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/MetricsSidebarPane.js
	M	WebCore/inspector/front-end/StylesSidebarPane.js
	M	WebCore/inspector/front-end/inspector.js
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/src/js/InspectorControllerImpl.js
Committed r56049</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50708</attachid>
            <date>2010-03-15 08:13:50 -0700</date>
            <delta_ts>2010-03-15 15:55:13 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>native_styles</filename>
            <type>text/plain</type>
            <size>65506</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjMyMTI3Yi4uZGY1MGI2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBAQAorMjAxMC0wMy0xNSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtaWdyYXRlIHRvIG5hdGl2ZSBzdHls
ZXMgaW5zcGVjdG9yIGluIG9yZGVyIHRvIGluc3BlY3Qgc3R5bGVzIGZyb20gZm9yZWlnaG4gZG9t
YWlucy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzYxMTcKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmdldFN0eWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckJhY2tlbmQ6OmFwcGx5U3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckJhY2tlbmQ6OnNldFN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCYWNrZW5kOjpzZXRTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckJhY2tlbmQ6OnRvZ2dsZVN0eWxlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCYWNrZW5kOjpzZXRSdWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QmFja2VuZDo6YWRkUnVsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpnZXRJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0TWF0Y2hlZENTU1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpnZXRBdHRyaWJ1dGVTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpzZXRTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnNldFN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnRvZ2dsZVN0eWxlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6c2V0UnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjphZGRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpiaW5k
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmRSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpwb3B1bGF0ZU9iamVjdFdp
dGhTdHlsZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6dW5pcXVlU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50Ojpsb25naGFuZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnNob3J0aGFuZFByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpydWxlQWZmZWN0c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnRvQXJyYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRTdHlsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldENvbXB1dGVkU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldElubGluZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRBcHBseVN0eWxlVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0U3R5bGVUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRTdHlsZVByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRUb2dnbGVTdHls
ZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldFJ1
bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQWRk
UnVsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzVHJlZU91dGxpbmUuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Jbmpl
Y3RlZFNjcmlwdC5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJpY3NTaWRl
YmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5NZXRyaWNzU2lkZWJhclBhbmUucHJv
dG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTWV0cmljc1NpZGViYXJQYW5l
LnByb3RvdHlwZS5lZGl0aW5nQ29tbWl0dGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1Np
ZGViYXJQYW5lLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZC5jYWxs
YmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90
b3R5cGUuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
bGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1p
dHRlZC5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRp
ZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuKToKKwog
MjAxMC0wMy0xNSAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmNwcAppbmRleCBmNTIyZDQzLi44ZWFkYzJiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMzU2LDYgKzM1Niw2MCBAQCB2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogICAgIGZyb250ZW5k
LT5kaWRSZW1vdmVOb2RlKGNhbGxJZCwgbm9kZUlkKTsKIH0KIAordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkp
Cit7CisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckRPTUFn
ZW50KCkpCisgICAgICAgIGRvbUFnZW50LT5nZXRTdHlsZXMoY2FsbElkLCBub2RlSWQsIGF1dGhv
ck9ubHkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldElubGluZVN0eWxlKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFn
ZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmdldENvbXB1dGVk
U3R5bGUoY2FsbElkLCBub2RlSWQpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldENv
bXB1dGVkU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQoreworICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQorICAgICAgICBkb21B
Z2VudC0+Z2V0Q29tcHV0ZWRTdHlsZShjYWxsSWQsIG5vZGVJZCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29u
c3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAg
IGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQor
ICAgICAgICBkb21BZ2VudC0+YXBwbHlTdHlsZVRleHQoY2FsbElkLCBzdHlsZUlkLCBzdHlsZVRl
eHQsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0U3R5bGVU
ZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCkKK3sK
KyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQo
KSkKKyAgICAgICAgZG9tQWdlbnQtPnNldFN0eWxlVGV4dChjYWxsSWQsIHN0eWxlSWQsIGNzc1Rl
eHQpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldFN0eWxlUHJvcGVydHkobG9uZyBj
YWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+c2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsIHN0
eWxlSWQsIG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjp0b2dnbGVT
dHlsZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQpCit7CisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBk
b21BZ2VudCA9IGluc3BlY3RvckRPTUFnZW50KCkpCisgICAgICAgIGRvbUFnZW50LT50b2dnbGVT
dHlsZUVuYWJsZWQoY2FsbElkLCBzdHlsZUlkLCBwcm9wZXJ0eU5hbWUsIGRpc2FibGVkKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxv
bmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKQor
eworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2Vu
dCgpKQorICAgICAgICBkb21BZ2VudC0+c2V0UnVsZVNlbGVjdG9yKGNhbGxJZCwgcnVsZUlkLCBz
ZWxlY3Rvciwgc2VsZWN0ZWROb2RlSWQpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmFk
ZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWRO
b2RlSWQpCit7CisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3Rv
ckRPTUFnZW50KCkpCisgICAgICAgIGRvbUFnZW50LT5hZGRSdWxlKGNhbGxJZCwgc2VsZWN0b3Is
IHNlbGVjdGVkTm9kZUlkKTsKK30KKwogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpoaWdobGlnaHRE
T01Ob2RlKGxvbmcgbm9kZUlkKQogewogICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZvcklkKG5v
ZGVJZCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggNmI4MWE5Ni4uOTNk
YzI3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtMTA0LDYgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJ
ZCwgbG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0
IFN0cmluZyYgYXJndW1lbnRzLCBib29sIGFzeW5jKTsKICAgICB2b2lkIGFkZFNjcmlwdFRvRXZh
bHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogICAgIHZvaWQgcmVtb3ZlQWxsU2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsKKwogICAgIHZvaWQgZ2V0Q2hpbGROb2Rlcyhsb25nIGNh
bGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgc2V0QXR0cmlidXRlKGxvbmcgY2FsbElkLCBs
b25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
ICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CkBAIC0xMTEsNiArMTEyLDE3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAg
IHZvaWQgY29weU5vZGUobG9uZyBub2RlSWQpOwogICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNh
bGxJZCwgbG9uZyBub2RlSWQpOworCisgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkLCBib29sIGF1dGhPbmx5KTsKKyAgICB2b2lkIGdldElubGluZVN0eWxlKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCk7CisgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlKGxvbmcgY2Fs
bElkLCBsb25nIG5vZGVJZCk7CisgICAgdm9pZCBhcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwg
bG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHN0eWxlVGV4dCwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOworICAgIHZvaWQgc2V0U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxl
SWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCk7CisgICAgdm9pZCBzZXRTdHlsZVByb3BlcnR5KGxv
bmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CisgICAgdm9pZCB0b2dnbGVTdHlsZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcg
c3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQpOworICAg
IHZvaWQgc2V0UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBsb25nIHJ1bGVJZCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCk7CisgICAgdm9pZCBhZGRSdWxlKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKTsK
KwogICAgIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBoaWRl
RE9NTm9kZUhpZ2hsaWdodCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRs
CmluZGV4IDcyNmY4ODkuLmIwYmU2ZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsCkBAIC05MCw2ICs5MCwxNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgaGln
aGxpZ2h0RE9NTm9kZShpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgaGlkZURPTU5vZGVI
aWdobGlnaHQoKTsKIAorICAgICAgICB2b2lkIGdldFN0eWxlcyhpbiBsb25nIGNhbGxJZCwgaW4g
bG9uZyBub2RlSWQsIGluIGJvb2xlYW4gYXV0aE9ubHkpOworICAgICAgICB2b2lkIGdldElubGlu
ZVN0eWxlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7CisgICAgICAgIHZvaWQgZ2V0
Q29tcHV0ZWRTdHlsZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQpOworICAgICAgICB2
b2lkIGFwcGx5U3R5bGVUZXh0KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIHN0eWxlSWQsIGluIERP
TVN0cmluZyBzdHlsZVRleHQsIGluIERPTVN0cmluZyBwcm9wZXJ0eU5hbWUpOworICAgICAgICB2
b2lkIHNldFN0eWxlVGV4dChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBzdHlsZUlkLCBpbiBET01T
dHJpbmcgc3R5bGVUZXh0KTsKKyAgICAgICAgdm9pZCBzZXRTdHlsZVByb3BlcnR5KGluIGxvbmcg
Y2FsbElkLCBpbiBsb25nIHN0eWxlSWQsIGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcg
dmFsdWUpOworICAgICAgICB2b2lkIHRvZ2dsZVN0eWxlRW5hYmxlZChpbiBsb25nIGNhbGxJZCwg
aW4gbG9uZyBzdHlsZUlkLCBpbiBET01TdHJpbmcgcHJvcGVydHlOYW1lLCBpbiBib29sZWFuIGRp
c2FibGVkKTsKKyAgICAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IoaW4gbG9uZyBjYWxsSWQsIGlu
IGxvbmcgcnVsZUlkLCBpbiBET01TdHJpbmcgc2VsZWN0b3IsIGluIGxvbmcgc2VsZWN0ZWROb2Rl
SWQpOworICAgICAgICB2b2lkIGFkZFJ1bGUoaW4gbG9uZyBjYWxsSWQsIGluIERPTVN0cmluZyBz
ZWxlY3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCk7CisKICAgICAgICAgdm9pZCBnZXRDb29r
aWVzKGluIGxvbmcgY2FsbElkKTsKICAgICAgICAgdm9pZCBkZWxldGVDb29raWUoaW4gRE9NU3Ry
aW5nIGNvb2tpZU5hbWUsIGluIERPTVN0cmluZyBkb21haW4pOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggMDM4N2YzMC4uMmY5ODlkYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMzcsNiArMzcsMTIgQEAKICNpbmNsdWRl
ICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHls
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCkBAIC00NSw2ICs1MSw3IEBACiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSFRN
TEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCkBAIC01Myw4ICs2MCwxMCBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNj
cmlwdE9iamVjdC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4
dC5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02NCw2ICs3Myw4IEBAIEluc3BlY3RvckRP
TUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAg
ICAgOiBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fZnJvbnRl
bmQoZnJvbnRlbmQpCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKKyAgICAsIG1fbGFzdFN0eWxlSWQo
MSkKKyAgICAsIG1fbGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC02NzEsNiArNjgyLDQ2MSBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgbV9mcm9udGVuZC0+YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJyYXlGb3JFbGVt
ZW50QXR0cmlidXRlcyhlbGVtZW50KSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKK3sKKyAg
ICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlIHx8IG5vZGUt
Pm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CisgICAgICAgIG1fZnJvbnRlbmQt
PmRpZEdldFN0eWxlcyhjYWxsSWQsIG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpOworCisgICAgRE9NV2luZG93KiBkZWZhdWx0VmlldyA9IG5vZGUtPm93
bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKKyAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJh
dGlvbj4gY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1l
bnQsICIiKTsKKworICAgIFNjcmlwdE9iamVjdCByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3Jp
cHRPYmplY3QoKTsKKyAgICByZXN1bHQuc2V0KCJpbmxpbmVTdHlsZSIsIGJ1aWxkT2JqZWN0Rm9y
U3R5bGUoZWxlbWVudC0+c3R5bGUoKSwgdHJ1ZSkpOworICAgIHJlc3VsdC5zZXQoImNvbXB1dGVk
U3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKGNvbXB1dGVkU3R5bGUuZ2V0KCksIGZhbHNlKSk7
CisgICAgcmVzdWx0LnNldCgibWF0Y2hlZENTU1J1bGVzIiwgZ2V0TWF0Y2hlZENTU1J1bGVzKGVs
ZW1lbnQsIGF1dGhvck9ubHkpKTsKKyAgICByZXN1bHQuc2V0KCJzdHlsZUF0dHJpYnV0ZXMiLCBn
ZXRBdHRyaWJ1dGVTdHlsZXMoZWxlbWVudCkpOworICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxl
cyhjYWxsSWQsIHJlc3VsdCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldElubGlu
ZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKK3sKKyAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldElubGluZVN0eWxl
KGNhbGxJZCwgbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSk7CisgICAgbV9mcm9udGVuZC0+ZGlkR2V0SW5saW5lU3R5bGUoY2FsbElkLCBidWlsZE9iamVj
dEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCksIHRydWUpKTsKK30KKwordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCit7Cisg
ICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOworICAgIGlmICghbm9kZSB8fCBub2Rl
LT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkgeworICAgICAgICBtX2Zyb250ZW5k
LT5kaWRHZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwgbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisKKyAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0g
bm9kZS0+b3duZXJEb2N1bWVudCgpLT5kZWZhdWx0VmlldygpOworICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5
bGUoZWxlbWVudCwgIiIpOworICAgIG1fZnJvbnRlbmQtPmRpZEdldENvbXB1dGVkU3R5bGUoY2Fs
bElkLCBidWlsZE9iamVjdEZvclN0eWxlKGNvbXB1dGVkU3R5bGUuZ2V0KCksIGZhbHNlKSk7Cit9
CisKK1NjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50OjpnZXRNYXRjaGVkQ1NTUnVsZXMoRWxl
bWVudCogZWxlbWVudCwgYm9vbCBhdXRob3JPbmx5KQoreworICAgIERPTVdpbmRvdyogZGVmYXVs
dFZpZXcgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCk7CisgICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBkZWZhdWx0Vmlldy0+Z2V0TWF0Y2hlZENT
U1J1bGVzKGVsZW1lbnQsICIiLCBhdXRob3JPbmx5KTsKKyAgICBTY3JpcHRBcnJheSBtYXRjaGVk
Q1NTUnVsZXMgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IG1hdGNoZWRSdWxlcy5nZXQoKSAmJiBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBtYXRjaGVkUnVsZXMtPml0ZW0oaSk7
CisgICAgICAgIGlmIChydWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAg
ICAgICAgIG1hdGNoZWRDU1NSdWxlcy5zZXQoaSwgYnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19j
YXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpKSk7CisgICAgfQorICAgIHJldHVybiBtYXRjaGVkQ1NT
UnVsZXM7Cit9CisKK1NjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRl
U3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgU2NyaXB0T2JqZWN0IHN0eWxlQXR0cmli
dXRlcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgIE5hbWVkTm9kZU1hcCog
YXR0cmlidXRlcyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBhdHRyaWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsK
KyAgICAgICAgaWYgKGF0dHJpYnV0ZS0+c3R5bGUoKSkgeworICAgICAgICAgICAgU3RyaW5nIGF0
dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpOworICAgICAgICAgICAgc3R5bGVB
dHRyaWJ1dGVzLnNldChhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCksIGJ1aWxkT2JqZWN0Rm9y
U3R5bGUoYXR0cmlidXRlLT5zdHlsZSgpLCB0cnVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHN0eWxlQXR0cmlidXRlczsKK30KKwordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBw
bHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHls
ZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIElkVG9TdHlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2lkVG9TdHlsZS5maW5kKHN0eWxlSWQpOworICAgIGlmIChpdCA9PSBt
X2lkVG9TdHlsZS5lbmQoKSkgeworICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4
dChjYWxsSWQsIGZhbHNlLCBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKSwgbV9mcm9udGVu
ZC0+bmV3U2NyaXB0QXJyYXkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgaW50IHN0eWxl
VGV4dExlbmd0aCA9IHN0eWxlVGV4dC5sZW5ndGgoKTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBl
bGVtZW50IHRvIHBhcnNlIHRoZSB1c2VyIGlucHV0IENTUy4KKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBSZWZQdHI8RWxlbWVudD4gcGFyc2VFbGVtZW50ID0gbWFpbkZyYW1lRG9jdW1l
bnQoKS0+Y3JlYXRlRWxlbWVudCgic3BhbiIsIGVjKTsKKyAgICBpZiAoIWVjKSB7CisgICAgICAg
IHBhcnNlRWxlbWVudC0+c2V0QXR0cmlidXRlKCJzdHlsZSIsIHN0eWxlVGV4dCwgZWMpOworICAg
IH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQo
Y2FsbElkLCBmYWxzZSwgbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCksIG1fZnJvbnRlbmQt
Pm5ld1NjcmlwdEFycmF5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogdGVtcFN0eWxlID0gcGFyc2VFbGVtZW50LT5zdHlsZSgpOworICAgIGlm
ICgodGVtcFN0eWxlICYmIHRlbXBTdHlsZS0+bGVuZ3RoKCkpIHx8ICFzdHlsZVRleHRMZW5ndGgp
IHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIC8vIFRoZSBpbnB1dCB3
YXMgcGFyc2FibGUgb3IgdGhlIHVzZXIgZGVsZXRlZCBldmVyeXRoaW5nLCBzbyByZW1vdmUgdGhl
CisgICAgICAgIC8vIG9yaWdpbmFsIHByb3BlcnR5IGZyb20gdGhlIHJlYWwgc3R5bGUgZGVjbGFy
YXRpb24uIElmIHRoaXMgcmVwcmVzZW50cworICAgICAgICAvLyBhIHNob3J0aGFuZCByZW1vdmUg
YWxsIHRoZSBsb25naGFuZCBwcm9wZXJ0aWVzLgorICAgICAgICBpZiAoc3R5bGUtPmdldFByb3Bl
cnR5U2hvcnRoYW5kKHByb3BlcnR5TmFtZSkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBsb25naGFuZFByb3BzID0gbG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvbmdoYW5k
UHJvcHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KGxvbmdoYW5kUHJvcHNbaV0sIGVjKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHls
ZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lLCBlYyk7CisgICAgICAgIGlmIChlYykgewor
ICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwg
bV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCksIG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm90
aWZ5IGNhbGxlciB0aGF0IHRoZSBwcm9wZXJ0eSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuCisg
ICAgaWYgKCFzdHlsZVRleHRMZW5ndGgpIHsKKyAgICAgICAgU2NyaXB0QXJyYXkgY2hhbmdlZFBy
b3BlcnRpZXMgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgICAgICBjaGFuZ2Vk
UHJvcGVydGllcy5zZXQoMCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlk
QXBwbHlTdHlsZVRleHQoY2FsbElkLCB0cnVlLCBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3Qo
KSwgY2hhbmdlZFByb3BlcnRpZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCF0ZW1wU3R5bGUtPmxlbmd0aCgpKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5
bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCksIG1fZnJv
bnRlbmQtPm5ld1NjcmlwdEFycmF5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gSXRlcmF0ZSBvZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVzdCBlbGVtZW50J3Mgc3R5bGUg
ZGVjbGFyYXRpb24gYW5kCisgICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5bGUgZGVjbGFy
YXRpb24uIFdlIHRha2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCisgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKKyAgICBWZWN0b3I8U3RyaW5nPiBjaGFuZ2VkUHJvcGVydGll
czsKKworICAgIFZlY3RvcjxTdHJpbmc+IHVuaXF1ZVByb3BlcnRpZXMgPSB1bmlxdWVTdHlsZVBy
b3BlcnRpZXModGVtcFN0eWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5pcXVl
UHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9IHVuaXF1ZVBy
b3BlcnRpZXNbaV07CisgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSB0ZW1wU3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKG5hbWUpOworCisgICAgICAgIGlmIChzaG9ydGhhbmQuaXNFbXB0eSgp
IHx8IGZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBTdHJpbmcgcHJpb3JpdHk7
CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdmFsdWUg
PSB0ZW1wU3R5bGUtPmdldFByb3BlcnR5VmFsdWUoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHBy
aW9yaXR5ID0gc2hvcnRoYW5kUHJpb3JpdHkodGVtcFN0eWxlLCBzaG9ydGhhbmQpOworICAgICAg
ICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOworICAgICAgICAgICAgbmFtZSA9
IHNob3J0aGFuZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlID0gdGVtcFN0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICAgICAgcHJpb3JpdHkgPSB0ZW1w
U3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBTZXQgdGhlIHByb3BlcnR5IG9uIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLgorICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KG5hbWUs
IHZhbHVlLCBwcmlvcml0eSwgZWMpOworICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy5hcHBlbmQo
bmFtZSk7CisgICAgfQorICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwg
dHJ1ZSwgYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSksIHRvQXJyYXkoY2hhbmdlZFBy
b3BlcnRpZXMpKTsKK30KKwordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVUZXh0KGxv
bmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCkKK3sKKyAgICBJ
ZFRvU3R5bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKKyAg
ICBpZiAoaXQgPT0gbV9pZFRvU3R5bGUuZW5kKCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlk
U2V0U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBzdHlsZS0+c2V0Q3NzVGV4dChjc3NUZXh0LCBlYyk7Cisg
ICAgbV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVUZXh0KGNhbGxJZCwgZWMgPT0gMCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxvbmcg
c3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9TdHlsZS5maW5kKHN0eWxlSWQpOwor
ICAgIGlmIChpdCA9PSBtX2lkVG9TdHlsZS5lbmQoKSkgeworICAgICAgICBtX2Zyb250ZW5kLT5k
aWRTZXRTdHlsZVByb3BlcnR5KGNhbGxJZCwgZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShuYW1lLCB2
YWx1ZSwgZWMpOworICAgIG1fZnJvbnRlbmQtPmRpZFNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBl
YyA9PSAwKTsKK30KKwordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5bGVFbmFibGVk
KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBi
b29sIGRpc2FibGVkKQoreworICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9T
dHlsZS5maW5kKHN0eWxlSWQpOworICAgIGlmIChpdCA9PSBtX2lkVG9TdHlsZS5lbmQoKSkgewor
ICAgICAgICBtX2Zyb250ZW5kLT5kaWRUb2dnbGVTdHlsZUVuYWJsZWQoY2FsbElkLCBtX2Zyb250
ZW5kLT5uZXdTY3JpcHRPYmplY3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOworCisgICAgSWRUb1N0
eWxlTWFwOjppdGVyYXRvciBkaXNhYmxlZEl0ID0gbV9pZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0
eWxlSWQpOworICAgIGlmIChkaXNhYmxlZEl0ID09IG1faWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkp
CisgICAgICAgIGRpc2FibGVkSXQgPSBtX2lkVG9EaXNhYmxlZFN0eWxlLnNldChzdHlsZUlkLCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpLmZpcnN0OworICAgIENTU1N0eWxl
RGVjbGFyYXRpb24qIGRpc2FibGVkU3R5bGUgPSBkaXNhYmxlZEl0LT5zZWNvbmQuZ2V0KCk7CisK
KyAgICAvLyBUT0RPOiBtYWtlIHN1cmUgdGhpcyB3b3JrcyB3aXRoIHNob3J0aGFuZHMgcmlnaHQu
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGRpc2FibGVkKSB7CisgICAgICAg
IGRpc2FibGVkU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUocHJvcGVydHlOYW1lKSwgc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVy
dHlOYW1lKSwgZWMpOworICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAgc3R5bGUtPnJlbW92
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgZWMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRpc2FibGVkU3R5bGUtPmdldFByb3BlcnR5VmFs
dWUocHJvcGVydHlOYW1lKSwgZGlzYWJsZWRTdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShwcm9w
ZXJ0eU5hbWUpLCBlYyk7CisgICAgICAgIGlmICghZWMpCisgICAgICAgICAgICBkaXNhYmxlZFN0
eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGVjKTsKKyAgICB9CisgICAgaWYgKGVj
KSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIG1f
ZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2Zyb250ZW5kLT5kaWRUb2dnbGVTdHlsZUVuYWJsZWQoY2FsbElkLCBidWlsZE9iamVjdEZv
clN0eWxlKHN0eWxlLCB0cnVlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFJ1
bGVTZWxlY3Rvcihsb25nIGNhbGxJZCwgbG9uZyBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQpCit7CisgICAgSWRUb1J1bGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvUnVsZS5maW5kKHJ1bGVJZCk7CisgICAgaWYgKGl0ID09IG1faWRUb1J1bGUuZW5k
KCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNlbGVjdG9yKGNhbGxJZCwgbV9m
cm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgTm9k
ZSogbm9kZSA9IG5vZGVGb3JJZChzZWxlY3RlZE5vZGVJZCk7CisKKyAgICBDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGludCBpbmRleCA9IHN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3Is
IHJ1bGUtPnN0eWxlKCktPmNzc1RleHQoKSwgZWMpOworICAgIGlmIChlYyB8fCBpbmRleCA9PSAt
MSkgeworICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBtX2Zy
b250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKSwgZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQ1NTU3R5bGVSdWxlKiBuZXdSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxl
Kj4oc3R5bGVTaGVldC0+aXRlbShpbmRleCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChzdHlsZVNoZWV0LT5p
dGVtKGkpID09IHJ1bGUpIHsKKyAgICAgICAgICAgIHN0eWxlU2hlZXQtPmRlbGV0ZVJ1bGUoaSwg
ZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNlbGVjdG9yKGNhbGxJZCwgbV9mcm9u
dGVuZC0+bmV3U2NyaXB0T2JqZWN0KCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZnJvbnRlbmQtPmRpZFNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIGJ1aWxkT2JqZWN0
Rm9yUnVsZShuZXdSdWxlKSwgcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUpKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCkKK3sKKyAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKHNlbGVjdGVkTm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgbV9mcm9u
dGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpLCBm
YWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1faW5zcGVjdG9yU3R5
bGVTaGVldC5nZXQoKSkgeworICAgICAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCA9IG5vZGUt
Pm93bmVyRG9jdW1lbnQoKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAg
IFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBvd25lckRvY3VtZW50LT5jcmVhdGVFbGVt
ZW50KCJzdHlsZSIsIGVjKTsKKyAgICAgICAgaWYgKCFlYykKKyAgICAgICAgICAgIHN0eWxlRWxl
bWVudC0+c2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIiwgZWMpOworICAgICAgICBpZiAo
IWVjKQorICAgICAgICAgICAgb3duZXJEb2N1bWVudC0+aGVhZCgpLT5hcHBlbmRDaGlsZChzdHls
ZUVsZW1lbnQsIGVjKTsKKyAgICAgICAgaWYgKGVjKSB7CisgICAgICAgICAgICBtX2Zyb250ZW5k
LT5kaWRBZGRSdWxlKGNhbGxJZCwgbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCksIGZhbHNl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHlsZVNoZWV0TGlz
dCogc3R5bGVTaGVldHMgPSBvd25lckRvY3VtZW50LT5zdHlsZVNoZWV0cygpOworICAgICAgICBT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oc3R5bGVTaGVldHMtPmxl
bmd0aCgpIC0gMSk7CisgICAgICAgIGlmICghc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkp
IHsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1bGUoY2FsbElkLCBtX2Zyb250ZW5k
LT5uZXdTY3JpcHRPYmplY3QoKSwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIG1faW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXQqPihzdHlsZVNoZWV0KTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpbnQgaW5kZXggPSBtX2luc3BlY3RvclN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3Is
ICIiLCBlYyk7CisgICAgaWYgKGVjICYmIGluZGV4ID09IC0xKSB7CisgICAgICAgIG1fZnJvbnRl
bmQtPmRpZEFkZFJ1bGUoY2FsbElkLCBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKSwgZmFs
c2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NTU3R5bGVSdWxlKiBuZXdSdWxl
ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4obV9pbnNwZWN0b3JTdHlsZVNoZWV0LT5pdGVt
KGluZGV4KSk7CisgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIGJ1aWxkT2JqZWN0
Rm9yUnVsZShuZXdSdWxlKSwgcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUpKTsKK30KKwor
bG9uZyBJbnNwZWN0b3JET01BZ2VudDo6YmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQoreworICAgIGxvbmcgaWQgPSBtX3N0eWxlVG9JZC5nZXQoc3R5bGUpOworICAgIGlmICgh
aWQpIHsKKyAgICAgICAgaWQgPSBtX2xhc3RTdHlsZUlkKys7CisgICAgICAgIG1faWRUb1N0eWxl
LnNldChpZCwgc3R5bGUpOworICAgICAgICBtX3N0eWxlVG9JZC5zZXQoc3R5bGUsIGlkKTsKKyAg
ICB9CisgICAgcmV0dXJuIGlkOworfQorCitsb25nIEluc3BlY3RvckRPTUFnZW50OjpiaW5kUnVs
ZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgbG9uZyBpZCA9IG1fcnVsZVRvSWQuZ2V0KHJ1
bGUpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBtX2xhc3RSdWxlSWQrKzsKKyAgICAg
ICAgbV9pZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOworICAgICAgICBtX3J1bGVUb0lkLnNldChydWxl
LCBpZCk7CisgICAgfQorICAgIHJldHVybiBpZDsKK30KKworU2NyaXB0T2JqZWN0IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBib29sIGJpbmQpCit7CisgICAgU2NyaXB0T2JqZWN0IHJlc3VsdCA9IG1fZnJvbnRlbmQtPm5l
d1NjcmlwdE9iamVjdCgpOworICAgIGlmIChiaW5kKSB7CisgICAgICAgIGxvbmcgc3R5bGVJZCA9
IGJpbmRTdHlsZShzdHlsZSk7CisgICAgICAgIHJlc3VsdC5zZXQoImlkIiwgc3R5bGVJZCk7CisK
KyAgICAgICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBkaXNhYmxlZEl0ID0gbV9pZFRvRGlzYWJs
ZWRTdHlsZS5maW5kKHN0eWxlSWQpOworICAgICAgICBpZiAoZGlzYWJsZWRJdCAhPSBtX2lkVG9E
aXNhYmxlZFN0eWxlLmVuZCgpKSB7CisgICAgICAgICAgICBTY3JpcHRPYmplY3QgZGlzYWJsZWRT
dHlsZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgICAgICAgICAgcG9wdWxh
dGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKGRpc2FibGVkSXQtPnNlY29uZC5nZXQoKSwgZGlz
YWJsZWRTdHlsZSk7CisgICAgICAgICAgICByZXN1bHQuc2V0KCJkaXNhYmxlZCIsIGRpc2FibGVk
U3R5bGUpOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdC5zZXQoIndpZHRoIiwgc3R5bGUt
PmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHJlc3VsdC5zZXQoImhlaWdodCIsIHN0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CisgICAgcG9wdWxhdGVPYmplY3RXaXRo
U3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGll
cyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgU2NyaXB0T2JqZWN0JiByZXN1bHQpCit7Cisg
ICAgU2NyaXB0QXJyYXkgcHJvcGVydGllcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7
CisgICAgU2NyaXB0T2JqZWN0IHNob3J0aGFuZFZhbHVlcyA9IG1fZnJvbnRlbmQtPm5ld1Njcmlw
dE9iamVjdCgpOworICAgIHJlc3VsdC5zZXQoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVzKTsKKyAg
ICByZXN1bHQuc2V0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOworCisgICAg
SGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRoYW5kczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgU2NyaXB0T2JqZWN0IHByb3Bl
cnR5ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CisgICAgICAgIFN0cmluZyBuYW1l
ID0gc3R5bGUtPml0ZW0oaSk7CisgICAgICAgIHByb3BlcnR5LnNldCgibmFtZSIsIG5hbWUpOwor
ICAgICAgICBwcm9wZXJ0eS5zZXQoInByaW9yaXR5Iiwgc3R5bGUtPmdldFByb3BlcnR5UHJpb3Jp
dHkobmFtZSkpOworICAgICAgICBwcm9wZXJ0eS5zZXQoImltcGxpY2l0Iiwgc3R5bGUtPmlzUHJv
cGVydHlJbXBsaWNpdChuYW1lKSk7CisgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSAgc3R5bGUt
PmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICBwcm9wZXJ0eS5zZXQoInNob3J0
aGFuZCIsIHNob3J0aGFuZCk7CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAh
Zm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlcy5z
ZXQoc2hvcnRoYW5kLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmQpKTsKKyAgICAg
ICAgfQorICAgICAgICBwcm9wZXJ0eS5zZXQoInZhbHVlIiwgc3R5bGUtPmdldFByb3BlcnR5VmFs
dWUobmFtZSkpOworICAgICAgICBwcm9wZXJ0aWVzLnNldChpLCBwcm9wZXJ0eSk7CisgICAgfQor
ICAgIHJlc3VsdC5zZXQoInVuaXF1ZVN0eWxlUHJvcGVydGllcyIsIHRvQXJyYXkodW5pcXVlU3R5
bGVQcm9wZXJ0aWVzKHN0eWxlKSkpOworfQorCitTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgQ1NTU3R5
bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKKwor
ICAgIFNjcmlwdE9iamVjdCByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsK
KyAgICByZXN1bHQuc2V0KCJzZWxlY3RvclRleHQiLCBydWxlLT5zZWxlY3RvclRleHQoKSk7Cisg
ICAgaWYgKHBhcmVudFN0eWxlU2hlZXQpIHsKKyAgICAgICAgU2NyaXB0T2JqZWN0IHBhcmVudFN0
eWxlU2hlZXRWYWx1ZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgICAgICBy
ZXN1bHQuc2V0KCJwYXJlbnRTdHlsZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZhbHVlKTsKKyAg
ICAgICAgcGFyZW50U3R5bGVTaGVldFZhbHVlLnNldCgiaHJlZiIsIHBhcmVudFN0eWxlU2hlZXQt
PmhyZWYoKSk7CisgICAgfQorICAgIGJvb2wgaXNVc2VyQWdlbnQgPSBwYXJlbnRTdHlsZVNoZWV0
ICYmICFwYXJlbnRTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYXJlbnRTdHlsZVNoZWV0LT5o
cmVmKCkuaXNFbXB0eSgpOworICAgIGJvb2wgaXNVc2VyID0gcGFyZW50U3R5bGVTaGVldCAmJiBw
YXJlbnRTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYXJlbnRTdHlsZVNoZWV0LT5vd25lck5v
ZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2RvY3VtZW50IjsKKyAgICByZXN1bHQuc2V0KCJpc1VzZXJB
Z2VudCIsIGlzVXNlckFnZW50KTsKKyAgICByZXN1bHQuc2V0KCJpc1VzZXIiLCBpc1VzZXIpOwor
ICAgIHJlc3VsdC5zZXQoImlzVmlhSW5zcGVjdG9yIiwgcnVsZS0+cGFyZW50U3R5bGVTaGVldCgp
ID09IG1faW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSk7CisKKyAgICAvLyBCaW5kIGVkaXRhYmxl
IHNjcmlwdHMgb25seS4KKyAgICBib29sIGJpbmQgPSAhaXNVc2VyQWdlbnQgJiYgIWlzVXNlcjsK
KyAgICByZXN1bHQuc2V0KCJzdHlsZSIsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUocnVsZS0+c3R5bGUo
KSwgYmluZCkpOworCisgICAgaWYgKGJpbmQpCisgICAgICAgIHJlc3VsdC5zZXQoImlkIiwgYmlu
ZFJ1bGUocnVsZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IElu
c3BlY3RvckRPTUFnZW50Ojp1bmlxdWVTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGllczsKKyAgICBIYXNoU2V0
PFN0cmluZz4gZm91bmRQcm9wZXJ0aWVzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBwcm9wZXJ0eSA9IHN0eWxl
LT5pdGVtKGkpOworICAgICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKHByb3BlcnR5
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZFByb3BlcnRpZXMuYWRkKHBy
b3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOworICAgIH0KKyAg
ICByZXR1cm4gcHJvcGVydGllczsKK30KKworVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3Qg
U3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwcm9wZXJ0
aWVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFByb3BlcnRpZXM7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5n
IGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICBpZiAoZm91bmRQ
cm9wZXJ0aWVzLmNvbnRhaW5zKGluZGl2aWR1YWxQcm9wZXJ0eSkgfHwgc3R5bGUtPmdldFByb3Bl
cnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm91bmRQcm9wZXJ0aWVzLmFkZChpbmRpdmlk
dWFsUHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpbmRpdmlkdWFsUHJvcGVy
dHkpOworICAgIH0KKworICAgIHJldHVybiBwcm9wZXJ0aWVzOworfQorCitTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNob3J0aGFuZFByaW9yaXR5KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQoreworICAgIFN0cmluZyBwcmlvcml0
eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBp
ZiAocHJpb3JpdHkuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQ
cm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHN0eWxlLT5nZXRQcm9w
ZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcHJpb3JpdHkgPSBzdHlsZS0+
Z2V0UHJvcGVydHlQcmlvcml0eShpbmRpdmlkdWFsUHJvcGVydHkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHByaW9yaXR5OworfQorCitib29sIElu
c3BlY3RvckRPTUFnZW50OjpydWxlQWZmZWN0c05vZGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBOb2Rl
KiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZXMgPSBub2RlLT5v
d25lckRvY3VtZW50KCktPnF1ZXJ5U2VsZWN0b3JBbGwocnVsZS0+c2VsZWN0b3JUZXh0KCksIGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG5vZGVzLT5p
dGVtKGkpID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitTY3JpcHRBcnJheSBJbnNwZWN0b3JET01BZ2VudDo6dG9BcnJheShj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YSkKK3sKKyAgICBTY3JpcHRBcnJheSByZXN1bHQgPSBt
X2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkYXRhLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuc2V0KGksIGRhdGFbaV0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRl
eCBkNzMzNGI3Li5iN2Y1NTZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgK
QEAgLTQ1LDYgKzQ1LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENvbnRh
aW5lck5vZGU7CisgICAgY2xhc3MgQ1NTUnVsZTsKKyAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0
aW9uOworICAgIGNsYXNzIENTU1N0eWxlUnVsZTsKICAgICBjbGFzcyBFbGVtZW50OwogICAgIGNs
YXNzIEV2ZW50OwogICAgIGNsYXNzIERvY3VtZW50OwpAQCAtODcsMTMgKzkwLDI0IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBF
dmVudExpc3RlbmVyJiBvdGhlcik7CiAKLSAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0
aGUgZnJvbnRlbmQuCisgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIGZyb250ZW5k
IGZvciBET00gbm9kZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRDaGlsZE5vZGVzKGxv
bmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGxvbmcg
Y2FsbElkLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKICAgICAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcg
ZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgICAgICB2b2lkIHNldFRleHROb2Rl
VmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAg
ICAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkKTsKIAorICAgICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3Ig
Q1NTIHN0eWxlcyBpbnNwZWN0aW9uLgorICAgICAgICB2b2lkIGdldFN0eWxlcyhsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSk7CisgICAgICAgIHZvaWQgZ2V0SW5saW5l
U3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBnZXRDb21wdXRl
ZFN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CisgICAgICAgIHZvaWQgYXBwbHlTdHls
ZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQs
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdm9pZCBzZXRTdHlsZVRleHQo
bG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBjc3NUZXh0KTsKKyAgICAg
ICAgdm9pZCBzZXRTdHlsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgICAgIHZvaWQgdG9nZ2xl
U3R5bGVFbmFibGVkKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lLCBib29sIGRpc2FibGVkKTsKKyAgICAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3Io
bG9uZyBjYWxsSWQsIGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNl
bGVjdGVkTm9kZUlkKTsKKyAgICAgICAgdm9pZCBhZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKTsKKwogICAgICAgICAvLyBNZXRo
b2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lkIHNl
dERvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCk7CiAgICAgICAgIHZvaWQgcmVsZWFzZURhbmds
aW5nTm9kZXMoKTsKQEAgLTExMywxNiArMTI3LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEV2ZW50KiBldmVudCk7CiAKKyAgICAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMuCiAgICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIGxvbmc+IE5vZGVUb0lkTWFwOwogICAg
ICAgICBsb25nIGJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICAg
ICAgdm9pZCB1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKIAogICAg
ICAgICBib29sIHB1c2hEb2N1bWVudFRvRnJvbnRlbmQoKTsKIAorICAgICAgICBTY3JpcHRBcnJh
eSBnZXRNYXRjaGVkQ1NTUnVsZXMoRWxlbWVudCogZWxlbWVudCwgYm9vbCBhdXRob3JPbmx5KTsK
KyAgICAgICAgU2NyaXB0T2JqZWN0IGdldEF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50
KTsKICAgICAgICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBp
bnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7CiAgICAgICAgIFNjcmlwdEFycmF5IGJ1
aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KTsKICAgICAgICAg
U2NyaXB0QXJyYXkgYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5l
ciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOwotCiAgICAgICAgIFNjcmlwdE9i
amVjdCBidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgTm9kZSogbm9kZSk7CiAKICAgICAgICAgLy8gV2UgcmVwcmVzZW50IGVtYmVkZGVkIGRv
bXMgYXMgYSBwYXJ0IG9mIHRoZSBzYW1lIGhpZXJhcmNoeS4gSGVuY2Ugd2UgdHJlYXQgY2hpbGRy
ZW4gb2YgZnJhbWUgb3duZXJzIGRpZmZlcmVudGx5LgpAQCAtMTM2LDYgKzE1MiwxOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRG9jdW1lbnQqIG1haW5GcmFtZURvY3VtZW50KCkg
Y29uc3Q7CiAgICAgICAgIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1l
bnQpIGNvbnN0OworCisgICAgICAgIGxvbmcgYmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
KTsKKyAgICAgICAgbG9uZyBiaW5kUnVsZShDU1NTdHlsZVJ1bGUqKTsKKyAgICAgICAgU2NyaXB0
T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYmlu
ZCk7CisgICAgICAgIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0
eWxlRGVjbGFyYXRpb24qLCBTY3JpcHRPYmplY3QmIHJlc3VsdCk7CisgICAgICAgIFNjcmlwdE9i
amVjdCBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IHVuaXF1ZVN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9u
KiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgICAgIFN0cmluZyBzaG9y
dGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhh
bmRQcm9wZXJ0eSk7CisgICAgICAgIGJvb2wgcnVsZUFmZmVjdHNOb2RlKENTU1N0eWxlUnVsZSos
IE5vZGUqKTsKKyAgICAgICAgU2NyaXB0QXJyYXkgdG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZGF0YSk7CisKICAgICAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIAogICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKQEAgLTE0Niw2ICsxNzQsMjAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoTWFwPGxvbmcsIE5vZGVUb0lkTWFwKj4gbV9pZFRv
Tm9kZXNNYXA7CiAgICAgICAgIEhhc2hTZXQ8bG9uZz4gbV9jaGlsZHJlblJlcXVlc3RlZDsKICAg
ICAgICAgbG9uZyBtX2xhc3ROb2RlSWQ7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0
eWxlRGVjbGFyYXRpb24qLCBsb25nPiBTdHlsZVRvSWRNYXA7CisgICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPiBJZFRvU3R5bGVNYXA7Cisg
ICAgICAgIFN0eWxlVG9JZE1hcCBtX3N0eWxlVG9JZDsKKyAgICAgICAgSWRUb1N0eWxlTWFwIG1f
aWRUb1N0eWxlOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVSdWxlKiwgbG9uZz4g
UnVsZVRvSWRNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5
bGVSdWxlPiA+IElkVG9SdWxlTWFwOworICAgICAgICBSdWxlVG9JZE1hcCBtX3J1bGVUb0lkOwor
ICAgICAgICBJZFRvUnVsZU1hcCBtX2lkVG9SdWxlOworICAgICAgICBJZFRvU3R5bGVNYXAgbV9p
ZFRvRGlzYWJsZWRTdHlsZTsKKyAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1faW5zcGVj
dG9yU3R5bGVTaGVldDsKKworICAgICAgICBsb25nIG1fbGFzdFN0eWxlSWQ7CisgICAgICAgIGxv
bmcgbV9sYXN0UnVsZUlkOwogICAgICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4g
bV9kb2N1bWVudHM7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwCmluZGV4IGFmNTYyMGYuLjY4MjcyMDMgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5jcHAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRBcHBseURvbUNoYW5nZShpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpCiAgICAgZnVuY3Rpb24u
Y2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUoaW50IGNhbGxJZCwgaW50IG5vZGVJZCwgU2NyaXB0QXJyYXkmIGxpc3RlbmVyc0Fy
cmF5KQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KGludCBjYWxsSWQsIGludCBub2RlSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJh
eSkKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0RXZlbnRMaXN0
ZW5lcnNGb3JOb2RlIik7CkBAIC00NzUsNiArNDc1LDkxIEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkLCBT
Y3JpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRHZXRTdHlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdE9iamVjdCYgc3R5bGVzKQorewor
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRTdHlsZXMiKTsKKyAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KHN0eWxlcyk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRHZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRPYmpl
Y3QmIHN0eWxlKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRD
b21wdXRlZFN0eWxlIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzdHlsZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOwor
fQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJ
ZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBzdHlsZSkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudCgiZGlkR2V0SW5saW5lU3R5bGUiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlKTsKKyAgICBm
dW5jdGlvbi5jYWxsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEFwcGx5U3R5
bGVUZXh0KGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcywgY29uc3QgU2NyaXB0T2JqZWN0JiBzdHls
ZSwgY29uc3QgU2NyaXB0QXJyYXkmIGNoYW5nZWRQcm9wZXJ0aWVzKQoreworICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRBcHBseVN0eWxlVGV4dCIpOworICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3Vj
Y2Vzcyk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3R5bGUpOworICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KGNoYW5nZWRQcm9wZXJ0aWVzKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldFN0eWxlVGV4dChpbnQgY2FsbElk
LCBib29sIHN1Y2Nlc3MpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRp
ZFNldFN0eWxlVGV4dCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7Cisg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7CisgICAgZnVuY3Rpb24uY2FsbCgp
OworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRTdHlsZVByb3BlcnR5KGludCBj
YWxsSWQsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dCgiZGlkU2V0U3R5bGVQcm9wZXJ0eSIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNh
bGxJZCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7CisgICAgZnVuY3Rp
b24uY2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRUb2dnbGVTdHlsZUVu
YWJsZWQoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBzdHlsZSkKK3sKKyAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkVG9nZ2xlU3R5bGVFbmFibGVkIik7CisgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChzdHlsZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRTZXRSdWxlU2VsZWN0b3IoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0T2JqZWN0
JiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0c05vZGUpCit7CisgICAgU2NyaXB0RnVuY3Rpb25D
YWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoImRpZFNldFJ1bGVTZWxlY3RvciIpOworICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KGNhbGxJZCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocnVsZSk7Cisg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc2VsZWN0b3JBZmZlY3RzTm9kZSk7CisgICAgZnVu
Y3Rpb24uY2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRBZGRSdWxlKGlu
dCBjYWxsSWQsIGNvbnN0IFNjcmlwdE9iamVjdCYgcnVsZSwgYm9vbCBzZWxlY3RvckFmZmVjdHNO
b2RlKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rvciwg
ImRpc3BhdGNoIik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRBZGRSdWxlIik7
CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChydWxlKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzZWxlY3RvckFm
ZmVjdHNOb2RlKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKICNpZiBFTkFCTEUoV09SS0VS
UykKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZENyZWF0ZVdvcmtlcihjb25zdCBJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZSYgd29ya2VyKQogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kLmgKaW5kZXggODYxYTZmNy4uMWMzMDIyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5oCkBAIC0xMjUsOSArMTI1LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBhdHRyaWJ1dGVzVXBkYXRlZChpbnQgaWQsIGNvbnN0IFNjcmlwdEFycmF5JiBhdHRy
aWJ1dGVzKTsKICAgICAgICAgdm9pZCBkaWRHZXRDaGlsZE5vZGVzKGludCBjYWxsSWQpOwogICAg
ICAgICB2b2lkIGRpZEFwcGx5RG9tQ2hhbmdlKGludCBjYWxsSWQsIGJvb2wgc3VjY2Vzcyk7Ci0g
ICAgICAgIHZvaWQgZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGludCBjYWxsSWQsIGludCBu
b2RlSWQsIFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJheSk7CisgICAgICAgIHZvaWQgZGlkR2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGludCBjYWxsSWQsIGludCBub2RlSWQsIGNvbnN0IFNjcmlw
dEFycmF5JiBsaXN0ZW5lcnNBcnJheSk7CiAgICAgICAgIHZvaWQgZGlkUmVtb3ZlTm9kZShpbnQg
Y2FsbElkLCBpbnQgbm9kZUlkKTsKIAorICAgICAgICB2b2lkIGRpZEdldFN0eWxlcyhsb25nIGNh
bGxJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBzdHlsZXMpOworICAgICAgICB2b2lkIGRpZEdldElu
bGluZVN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRPYmplY3QmIHN0eWxlKTsKKyAgICAg
ICAgdm9pZCBkaWRHZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRPYmpl
Y3QmIHN0eWxlKTsKKyAgICAgICAgdm9pZCBkaWRBcHBseVN0eWxlVGV4dChpbnQgY2FsbElkLCBi
b29sIHN1Y2Nlc3MsIGNvbnN0IFNjcmlwdE9iamVjdCYgc3R5bGUsIGNvbnN0IFNjcmlwdEFycmF5
JiBjaGFuZ2VkUHJvcGVydGllcyk7CisgICAgICAgIHZvaWQgZGlkU2V0U3R5bGVUZXh0KGludCBj
YWxsSWQsIGJvb2wgc3VjY2Vzcyk7CisgICAgICAgIHZvaWQgZGlkU2V0U3R5bGVQcm9wZXJ0eShp
bnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIGRpZFRvZ2dsZVN0eWxlRW5h
YmxlZChpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRPYmplY3QmIHN0eWxlKTsKKyAgICAgICAgdm9p
ZCBkaWRTZXRSdWxlU2VsZWN0b3IoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBydWxl
LCBib29sIHNlbGVjdG9yQWZmZWN0c05vZGUpOworICAgICAgICB2b2lkIGRpZEFkZFJ1bGUoaW50
IGNhbGxJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0c05v
ZGUpOworCiAgICAgICAgIHZvaWQgdGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKICAgICAg
ICAgdm9pZCB0aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpOwogICAgICAgICB2b2lkIGFkZFJl
Y29yZFRvVGltZWxpbmUoY29uc3QgU2NyaXB0T2JqZWN0Jik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRE9NQWdlbnQuanMKaW5kZXggODM0ZjUyNy4uNWI3OWNiNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtNTI2LDkgKzUyNiwxOSBAQCBXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHBheWxvYWQpCiAgICAgdGhpcy5pbmpl
Y3RlZFNjcmlwdElkID0gcGF5bG9hZC5pbmplY3RlZFNjcmlwdElkOwogICAgIHRoaXMud2lkdGgg
PSBwYXlsb2FkLndpZHRoOwogICAgIHRoaXMuaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7Ci0gICAg
dGhpcy5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHBheWxvYWQuX19kaXNhYmxlZFByb3BlcnRpZXM7
Ci0gICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXMgPSBwYXlsb2FkLl9fZGlzYWJsZWRQ
cm9wZXJ0eVZhbHVlczsKLSAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXMgPSBw
YXlsb2FkLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXM7CisgICAgdGhpcy5fX2Rpc2FibGVk
UHJvcGVydGllcyA9IHt9OworICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzID0ge307
CisgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzID0ge307CisgICAgaWYgKHBh
eWxvYWQuZGlzYWJsZWQpIHsKKyAgICAgICAgdmFyIGRpc2FibGVkUHJvcGVydGllcyA9IHBheWxv
YWQuZGlzYWJsZWQucHJvcGVydGllczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNh
YmxlZFByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBkaXNhYmxlZFBy
b3BlcnR5ID0gZGlzYWJsZWRQcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAgdmFyIG5hbWUgPSBk
aXNhYmxlZFByb3BlcnR5Lm5hbWU7CisgICAgICAgICAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0
aWVzW25hbWVdID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5VmFs
dWVzW25hbWVdID0gZGlzYWJsZWRQcm9wZXJ0eS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX19k
aXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1tuYW1lXSA9IGRpc2FibGVkUHJvcGVydHkucHJpb3Jp
dHk7CisgICAgICAgIH0KKyAgICB9CiAgICAgdGhpcy51bmlxdWVTdHlsZVByb3BlcnRpZXMgPSBw
YXlsb2FkLnVuaXF1ZVN0eWxlUHJvcGVydGllczsKICAgICB0aGlzLl9zaG9ydGhhbmRWYWx1ZXMg
PSBwYXlsb2FkLnNob3J0aGFuZFZhbHVlczsKICAgICB0aGlzLl9wcm9wZXJ0eU1hcCA9IHt9OwpA
QCAtNjk3LDQgKzcwNywxNSBAQCBXZWJJbnNwZWN0b3IuZGlkUGVyZm9ybVNlYXJjaCA9IFdlYklu
c3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkQXBwbHlE
b21DaGFuZ2UgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5z
cGVjdG9yLmRpZFJlbW92ZUF0dHJpYnV0ZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNz
Q2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkU2V0VGV4dE5vZGVWYWx1ZSA9IFdlYkluc3BlY3Rv
ci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkUmVtb3ZlTm9kZSA9
IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlk
R2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3ND
YWxsYmFjazsKKworV2ViSW5zcGVjdG9yLmRpZEdldFN0eWxlcyA9IFdlYkluc3BlY3Rvci5DYWxs
YmFjay5wcm9jZXNzQ2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkR2V0SW5saW5lU3R5bGUgPSBX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZEdl
dENvbXB1dGVkU3R5bGUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwor
V2ViSW5zcGVjdG9yLmRpZEFwcGx5U3R5bGVUZXh0ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnBy
b2Nlc3NDYWxsYmFjazsKK1dlYkluc3BlY3Rvci5kaWRTZXRTdHlsZVRleHQgPSBXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZFNldFN0eWxlUHJv
cGVydHkgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVj
dG9yLmRpZFRvZ2dsZVN0eWxlRW5hYmxlZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNz
Q2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkU2V0UnVsZVNlbGVjdG9yID0gV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKK1dlYkluc3BlY3Rvci5kaWRBZGRSdWxlID0gV2Vi
SW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKaW5kZXggZmU3YWU1My4uOGNh
MGI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKQEAgLTEyNDIsNSArMTI0MiwzIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVs
ZW1lbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFRyZWVFbGVtZW50LnByb3RvdHlwZTsKLQotV2Vi
SW5zcGVjdG9yLmRpZFJlbW92ZU5vZGUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0Nh
bGxiYWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0Lmpz
CmluZGV4IDhkOGZhODguLjhjN2Q0OGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTkxLDM3OCArOTEsNiBAQCBJbmplY3RlZFNjcmlwdC5k
aXNwYXRjaCA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGFyZ3MsIGNhbGxJZCkKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1JbmplY3RlZFNjcmlwdC5nZXRTdHlsZXMgPSBmdW5jdGlvbihub2RlSWQs
IGF1dGhvck9ubHkpCi17Ci0gICAgdmFyIG5vZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklk
KG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFy
IGRlZmF1bHRWaWV3ID0gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OwotICAgIHZhciBt
YXRjaGVkUnVsZXMgPSBkZWZhdWx0Vmlldy5nZXRNYXRjaGVkQ1NTUnVsZXMobm9kZSwgIiIsIGF1
dGhvck9ubHkpOwotICAgIHZhciBtYXRjaGVkQ1NTUnVsZXMgPSBbXTsKLSAgICBmb3IgKHZhciBp
ID0gMDsgbWF0Y2hlZFJ1bGVzICYmIGkgPCBtYXRjaGVkUnVsZXMubGVuZ3RoOyArK2kpCi0gICAg
ICAgIG1hdGNoZWRDU1NSdWxlcy5wdXNoKEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKG1h
dGNoZWRSdWxlc1tpXSkpOwotCi0gICAgdmFyIHN0eWxlQXR0cmlidXRlcyA9IHt9OwotICAgIHZh
ciBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzOwotICAgIGZvciAodmFyIGkgPSAwOyBhdHRy
aWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhdHRy
aWJ1dGVzW2ldLnN0eWxlKQotICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzW2F0dHJpYnV0ZXNb
aV0ubmFtZV0gPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUoYXR0cmlidXRlc1tpXS5z
dHlsZSwgdHJ1ZSk7Ci0gICAgfQotICAgIHZhciByZXN1bHQgPSB7fTsKLSAgICByZXN1bHQuaW5s
aW5lU3R5bGUgPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUobm9kZS5zdHlsZSwgdHJ1
ZSk7Ci0gICAgcmVzdWx0LmNvbXB1dGVkU3R5bGUgPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXpl
U3R5bGUoZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKSk7Ci0gICAgcmVzdWx0Lm1h
dGNoZWRDU1NSdWxlcyA9IG1hdGNoZWRDU1NSdWxlczsKLSAgICByZXN1bHQuc3R5bGVBdHRyaWJ1
dGVzID0gc3R5bGVBdHRyaWJ1dGVzOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUluamVjdGVk
U2NyaXB0LmdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihub2RlSWQpCi17Ci0gICAgdmFyIG5v
ZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9zZXJpYWxp
emVTdHlsZShub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShu
b2RlKSk7Ci19Ci0KLUluamVjdGVkU2NyaXB0LmdldElubGluZVN0eWxlID0gZnVuY3Rpb24obm9k
ZUlkKQotewotICAgIHZhciBub2RlID0gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQp
OwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUobm9kZS5zdHlsZSwgdHJ1ZSk7Ci19Ci0KLUluamVj
dGVkU2NyaXB0LmFwcGx5U3R5bGVUZXh0ID0gZnVuY3Rpb24oc3R5bGVJZCwgc3R5bGVUZXh0LCBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgdmFyIHN0eWxlID0gSW5qZWN0ZWRTY3JpcHQuX3N0eWxlc1tz
dHlsZUlkXTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2
YXIgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVUZXh0Lmxlbmd0aDsKLQotICAgIC8vIENyZWF0ZSBh
IG5ldyBlbGVtZW50IHRvIHBhcnNlIHRoZSB1c2VyIGlucHV0IENTUy4KLSAgICB2YXIgcGFyc2VF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIHBhcnNlRWxlbWVu
dC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgc3R5bGVUZXh0KTsKLQotICAgIHZhciB0ZW1wU3R5bGUg
PSBwYXJzZUVsZW1lbnQuc3R5bGU7Ci0gICAgaWYgKHRlbXBTdHlsZS5sZW5ndGggfHwgIXN0eWxl
VGV4dExlbmd0aCkgewotICAgICAgICAvLyBUaGUgaW5wdXQgd2FzIHBhcnNhYmxlIG9yIHRoZSB1
c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZQotICAgICAgICAvLyBvcmlnaW5h
bCBwcm9wZXJ0eSBmcm9tIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLiBJZiB0aGlzIHJlcHJl
c2VudHMKLSAgICAgICAgLy8gYSBzaG9ydGhhbmQgcmVtb3ZlIGFsbCB0aGUgbG9uZ2hhbmQgcHJv
cGVydGllcy4KLSAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgIHZhciBsb25naGFuZFByb3BlcnRpZXMgPSBJbmplY3RlZFNj
cmlwdC5fZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZFByb3BlcnRpZXMubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wZXJ0aWVz
W2ldKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhhdCB0aGUgcHJv
cGVydHkgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLgotICAgIGlmICghc3R5bGVUZXh0TGVuZ3Ro
KQotICAgICAgICByZXR1cm4gW251bGwsIFtwcm9wZXJ0eU5hbWVdXTsKLQotICAgIGlmICghdGVt
cFN0eWxlLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSXRlcmF0ZSBv
ZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVzdCBlbGVtZW50J3Mgc3R5bGUgZGVjbGFyYXRpb24g
YW5kCi0gICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIFdlIHRh
a2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCi0gICAgdmFyIGZvdW5kU2hvcnRoYW5kcyA9IHt9
OwotICAgIHZhciBjaGFuZ2VkUHJvcGVydGllcyA9IFtdOwotICAgIHZhciB1bmlxdWVQcm9wZXJ0
aWVzID0gSW5qZWN0ZWRTY3JpcHQuX2dldFVuaXF1ZVN0eWxlUHJvcGVydGllcyh0ZW1wU3R5bGUp
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pcXVlUHJvcGVydGllcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICB2YXIgbmFtZSA9IHVuaXF1ZVByb3BlcnRpZXNbaV07Ci0gICAgICAgIHZhciBz
aG9ydGhhbmQgPSB0ZW1wU3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0KLSAgICAg
ICAgaWYgKHNob3J0aGFuZCAmJiBzaG9ydGhhbmQgaW4gZm91bmRTaG9ydGhhbmRzKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHNob3J0aGFuZCkgewotICAgICAgICAgICAg
dmFyIHZhbHVlID0gSW5qZWN0ZWRTY3JpcHQuX2dldFNob3J0aGFuZFZhbHVlKHRlbXBTdHlsZSwg
c2hvcnRoYW5kKTsKLSAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IEluamVjdGVkU2NyaXB0Ll9n
ZXRTaG9ydGhhbmRQcmlvcml0eSh0ZW1wU3R5bGUsIHNob3J0aGFuZCk7Ci0gICAgICAgICAgICBm
b3VuZFNob3J0aGFuZHNbc2hvcnRoYW5kXSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB2YXIgdmFsdWUgPSB0ZW1wU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKLSAg
ICAgICAgICAgIHZhciBwcmlvcml0eSA9IHRlbXBTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5h
bWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0eSBvbiB0aGUgcmVh
bCBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoKHNob3J0aGFu
ZCB8fCBuYW1lKSwgdmFsdWUsIHByaW9yaXR5KTsKLSAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMu
cHVzaChzaG9ydGhhbmQgfHwgbmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBbSW5qZWN0ZWRTY3Jp
cHQuX3NlcmlhbGl6ZVN0eWxlKHN0eWxlLCB0cnVlKSwgY2hhbmdlZFByb3BlcnRpZXNdOwotfQot
Ci1JbmplY3RlZFNjcmlwdC5zZXRTdHlsZVRleHQgPSBmdW5jdGlvbihzdHlsZSwgY3NzVGV4dCkK
LXsKLSAgICBzdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
SW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVFbmFibGVkID0gZnVuY3Rpb24oc3R5bGVJZCwgcHJv
cGVydHlOYW1lLCBkaXNhYmxlZCkKLXsKLSAgICB2YXIgc3R5bGUgPSBJbmplY3RlZFNjcmlwdC5f
c3R5bGVzW3N0eWxlSWRdOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICBpZiAoIXN0eWxlLl9fZGlzYWJsZWRQcm9w
ZXJ0eVZhbHVlcyB8fCAhc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcykgewotICAg
ICAgICAgICAgc3R5bGUuX19kaXNhYmxlZFByb3BlcnRpZXMgPSB7fTsKLSAgICAgICAgICAgIHN0
eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlcyA9IHt9OwotICAgICAgICAgICAgc3R5bGUuX19k
aXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcyA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgc3R5
bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV0gPSBzdHlsZS5nZXRQcm9w
ZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0
eVByaW9yaXRpZXNbcHJvcGVydHlOYW1lXSA9IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkocHJv
cGVydHlOYW1lKTsKLQotICAgICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgdmFyIGxvbmdoYW5kUHJvcGVydGllcyA9IEluamVj
dGVkU2NyaXB0Ll9nZXRMb25naGFuZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW2xvbmdo
YW5kUHJvcGVydGllc1tpXV0gPSB0cnVlOwotICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZVBy
b3BlcnR5KGxvbmdoYW5kUHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllc1twcm9wZXJ0eU5h
bWVdID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVz
ICYmIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pIHsKLSAgICAgICAg
dmFyIHZhbHVlID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07
Ci0gICAgICAgIHZhciBwcmlvcml0eSA9IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRp
ZXNbcHJvcGVydHlOYW1lXTsKLQotICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBwcmlvcml0eSk7Ci0gICAgICAgIGRlbGV0ZSBzdHlsZS5fX2Rpc2FibGVkUHJv
cGVydGllc1twcm9wZXJ0eU5hbWVdOwotICAgICAgICBkZWxldGUgc3R5bGUuX19kaXNhYmxlZFBy
b3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07Ci0gICAgICAgIGRlbGV0ZSBzdHlsZS5fX2Rpc2Fi
bGVkUHJvcGVydHlQcmlvcml0aWVzW3Byb3BlcnR5TmFtZV07Ci0gICAgfQotICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUoc3R5bGUsIHRydWUpOwotfQotCi1JbmplY3Rl
ZFNjcmlwdC5hcHBseVN0eWxlUnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQs
IHNlbGVjdGVkTm9kZUlkKQotewotICAgIHZhciBydWxlID0gSW5qZWN0ZWRTY3JpcHQuX3N0eWxl
UnVsZXNbcnVsZUlkXTsKLSAgICBpZiAoIXJ1bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHZhciBzZWxlY3RlZE5vZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKHNlbGVjdGVk
Tm9kZUlkKTsKLQotICAgIHRyeSB7Ci0gICAgICAgIHZhciBzdHlsZXNoZWV0ID0gcnVsZS5wYXJl
bnRTdHlsZVNoZWV0OwotICAgICAgICBzdHlsZXNoZWV0LmFkZFJ1bGUobmV3Q29udGVudCk7Ci0g
ICAgICAgIHZhciBuZXdSdWxlID0gc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1
bGVzLmxlbmd0aCAtIDFdOwotICAgICAgICBuZXdSdWxlLnN0eWxlLmNzc1RleHQgPSBydWxlLnN0
eWxlLmNzc1RleHQ7Ci0KLSAgICAgICAgdmFyIHBhcmVudFJ1bGVzID0gc3R5bGVzaGVldC5jc3NS
dWxlczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRSdWxlcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgaWYgKHBhcmVudFJ1bGVzW2ldID09PSBydWxlKSB7Ci0gICAgICAg
ICAgICAgICAgcnVsZS5wYXJlbnRTdHlsZVNoZWV0LnJlbW92ZVJ1bGUoaSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
W0luamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKG5ld1J1bGUpLCBJbmplY3RlZFNjcmlwdC5f
ZG9lc1NlbGVjdG9yQWZmZWN0Tm9kZShuZXdDb250ZW50LCBzZWxlY3RlZE5vZGUpXTsKLSAgICB9
IGNhdGNoKGUpIHsKLSAgICAgICAgLy8gUmVwb3J0IGludmFsaWQgc3ludGF4LgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1JbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9y
ID0gZnVuY3Rpb24obmV3Q29udGVudCwgc2VsZWN0ZWROb2RlSWQpCi17Ci0gICAgdmFyIHNlbGVj
dGVkTm9kZSA9IEluamVjdGVkU2NyaXB0Ll9ub2RlRm9ySWQoc2VsZWN0ZWROb2RlSWQpOwotICAg
IGlmICghc2VsZWN0ZWROb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIG93bmVy
RG9jdW1lbnQgPSBzZWxlY3RlZE5vZGUub3duZXJEb2N1bWVudDsKLQotICAgIHZhciBzdHlsZXNo
ZWV0ID0gb3duZXJEb2N1bWVudC5fX3N0eWxlc2hlZXQ7Ci0gICAgaWYgKCFzdHlsZXNoZWV0KSB7
Ci0gICAgICAgIHZhciBoZWFkID0gb3duZXJEb2N1bWVudC5oZWFkOwotICAgICAgICB2YXIgc3R5
bGVFbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwotICAgICAg
ICBzdHlsZUVsZW1lbnQudHlwZSA9ICJ0ZXh0L2NzcyI7Ci0gICAgICAgIGhlYWQuYXBwZW5kQ2hp
bGQoc3R5bGVFbGVtZW50KTsKLSAgICAgICAgc3R5bGVzaGVldCA9IG93bmVyRG9jdW1lbnQuc3R5
bGVTaGVldHNbb3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGggLSAxXTsKLSAgICAgICAg
b3duZXJEb2N1bWVudC5fX3N0eWxlc2hlZXQgPSBzdHlsZXNoZWV0OwotICAgIH0KLQotICAgIHRy
eSB7Ci0gICAgICAgIHN0eWxlc2hlZXQuYWRkUnVsZShuZXdDb250ZW50KTsKLSAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIC8vIEludmFsaWQgU3ludGF4IGZvciBhIFNlbGVjdG9yCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YXIgcnVsZSA9IHN0eWxlc2hlZXQuY3NzUnVs
ZXNbc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggLSAxXTsKLSAgICBydWxlLl9faXNWaWFJbnNw
ZWN0b3IgPSB0cnVlOwotCi0gICAgcmV0dXJuIFsgSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVJ1
bGUocnVsZSksIEluamVjdGVkU2NyaXB0Ll9kb2VzU2VsZWN0b3JBZmZlY3ROb2RlKG5ld0NvbnRl
bnQsIHNlbGVjdGVkTm9kZSkgXTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2RvZXNTZWxlY3RvckFm
ZmVjdE5vZGUgPSBmdW5jdGlvbihzZWxlY3RvclRleHQsIG5vZGUpCi17Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIG5vZGVzID0gbm9kZS5vd25lckRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JUZXh0KTsKLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChub2Rlc1tpXSA9PT0gbm9kZSkg
ewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1JbmplY3RlZFNjcmlwdC5zZXRTdHlsZVByb3BlcnR5ID0gZnVuY3Rpb24o
c3R5bGVJZCwgbmFtZSwgdmFsdWUpCi17Ci0gICAgdmFyIHN0eWxlID0gSW5qZWN0ZWRTY3JpcHQu
X3N0eWxlc1tzdHlsZUlkXTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBzdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgIiIpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1JbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplUnVsZSA9IGZ1bmN0aW9uKHJ1bGUp
Ci17Ci0gICAgdmFyIHBhcmVudFN0eWxlU2hlZXQgPSBydWxlLnBhcmVudFN0eWxlU2hlZXQ7Ci0K
LSAgICB2YXIgcnVsZVZhbHVlID0ge307Ci0gICAgcnVsZVZhbHVlLnNlbGVjdG9yVGV4dCA9IHJ1
bGUuc2VsZWN0b3JUZXh0OwotICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7Ci0gICAgICAgIHJ1
bGVWYWx1ZS5wYXJlbnRTdHlsZVNoZWV0ID0ge307Ci0gICAgICAgIHJ1bGVWYWx1ZS5wYXJlbnRT
dHlsZVNoZWV0LmhyZWYgPSBwYXJlbnRTdHlsZVNoZWV0LmhyZWY7Ci0gICAgfQotICAgIHJ1bGVW
YWx1ZS5pc1VzZXJBZ2VudCA9IHBhcmVudFN0eWxlU2hlZXQgJiYgIXBhcmVudFN0eWxlU2hlZXQu
b3duZXJOb2RlICYmICFwYXJlbnRTdHlsZVNoZWV0LmhyZWY7Ci0gICAgcnVsZVZhbHVlLmlzVXNl
ciA9IHBhcmVudFN0eWxlU2hlZXQgJiYgcGFyZW50U3R5bGVTaGVldC5vd25lck5vZGUgJiYgcGFy
ZW50U3R5bGVTaGVldC5vd25lck5vZGUubm9kZU5hbWUgPT0gIiNkb2N1bWVudCI7Ci0gICAgcnVs
ZVZhbHVlLmlzVmlhSW5zcGVjdG9yID0gISFydWxlLl9faXNWaWFJbnNwZWN0b3I7Ci0KLSAgICAv
LyBCaW5kIGVkaXRhYmxlIHNjcmlwdHMgb25seS4KLSAgICB2YXIgZG9CaW5kID0gIXJ1bGVWYWx1
ZS5pc1VzZXJBZ2VudCAmJiAhcnVsZVZhbHVlLmlzVXNlcjsKLSAgICBydWxlVmFsdWUuc3R5bGUg
PSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUocnVsZS5zdHlsZSwgZG9CaW5kKTsKLQot
ICAgIGlmIChkb0JpbmQpIHsKLSAgICAgICAgaWYgKCFydWxlLmlkKSB7Ci0gICAgICAgICAgICBy
dWxlLmlkID0gSW5qZWN0ZWRTY3JpcHQuX2xhc3RTdHlsZVJ1bGVJZCsrOwotICAgICAgICAgICAg
SW5qZWN0ZWRTY3JpcHQuX3N0eWxlUnVsZXNbcnVsZS5pZF0gPSBydWxlOwotICAgICAgICB9Ci0g
ICAgICAgIHJ1bGVWYWx1ZS5pZCA9IHJ1bGUuaWQ7Ci0gICAgICAgIHJ1bGVWYWx1ZS5pbmplY3Rl
ZFNjcmlwdElkID0gaW5qZWN0ZWRTY3JpcHRJZDsKLSAgICB9Ci0gICAgcmV0dXJuIHJ1bGVWYWx1
ZTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlID0gZnVuY3Rpb24oc3R5bGUs
IGRvQmluZCkKLXsKLSAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgcmVzdWx0LndpZHRoID0gc3R5
bGUud2lkdGg7Ci0gICAgcmVzdWx0LmhlaWdodCA9IHN0eWxlLmhlaWdodDsKLSAgICByZXN1bHQu
X19kaXNhYmxlZFByb3BlcnRpZXMgPSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllczsKLSAgICBy
ZXN1bHQuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5
VmFsdWVzOwotICAgIHJlc3VsdC5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzID0gc3R5bGUu
X19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllczsKLSAgICByZXN1bHQucHJvcGVydGllcyA9IFtd
OwotICAgIHJlc3VsdC5zaG9ydGhhbmRWYWx1ZXMgPSB7fTsKLSAgICB2YXIgZm91bmRTaG9ydGhh
bmRzID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZS5sZW5ndGg7ICsraSkgewot
ICAgICAgICB2YXIgcHJvcGVydHkgPSB7fTsKLSAgICAgICAgdmFyIG5hbWUgPSBzdHlsZVtpXTsK
LSAgICAgICAgcHJvcGVydHkubmFtZSA9IG5hbWU7Ci0gICAgICAgIHByb3BlcnR5LnByaW9yaXR5
ID0gc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLSAgICAgICAgcHJvcGVydHkuaW1w
bGljaXQgPSBzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSk7Ci0gICAgICAgIHZhciBzaG9y
dGhhbmQgPSAgc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0gICAgICAgIHByb3Bl
cnR5LnNob3J0aGFuZCA9IHNob3J0aGFuZDsKLSAgICAgICAgaWYgKHNob3J0aGFuZCAmJiAhKHNo
b3J0aGFuZCBpbiBmb3VuZFNob3J0aGFuZHMpKSB7Ci0gICAgICAgICAgICBmb3VuZFNob3J0aGFu
ZHNbc2hvcnRoYW5kXSA9IHRydWU7Ci0gICAgICAgICAgICByZXN1bHQuc2hvcnRoYW5kVmFsdWVz
W3Nob3J0aGFuZF0gPSBJbmplY3RlZFNjcmlwdC5fZ2V0U2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNo
b3J0aGFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydHkudmFsdWUgPSBzdHlsZS5nZXRQ
cm9wZXJ0eVZhbHVlKG5hbWUpOwotICAgICAgICByZXN1bHQucHJvcGVydGllcy5wdXNoKHByb3Bl
cnR5KTsKLSAgICB9Ci0gICAgcmVzdWx0LnVuaXF1ZVN0eWxlUHJvcGVydGllcyA9IEluamVjdGVk
U2NyaXB0Ll9nZXRVbmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5bGUpOwotCi0gICAgaWYgKGRvQmlu
ZCkgewotICAgICAgICBpZiAoIXN0eWxlLmlkKSB7Ci0gICAgICAgICAgICBzdHlsZS5pZCA9IElu
amVjdGVkU2NyaXB0Ll9sYXN0U3R5bGVJZCsrOwotICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQu
X3N0eWxlc1tzdHlsZS5pZF0gPSBzdHlsZTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuaWQg
PSBzdHlsZS5pZDsKLSAgICAgICAgcmVzdWx0LmluamVjdGVkU2NyaXB0SWQgPSBpbmplY3RlZFNj
cmlwdElkOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbmplY3RlZFNjcmlwdC5f
Z2V0VW5pcXVlU3R5bGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24oc3R5bGUpCi17Ci0gICAgdmFyIHBy
b3BlcnRpZXMgPSBbXTsKLSAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307Ci0KLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0
eSA9IHN0eWxlW2ldOwotICAgICAgICBpZiAocHJvcGVydHkgaW4gZm91bmRQcm9wZXJ0aWVzKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvdW5kUHJvcGVydGllc1twcm9wZXJ0eV0g
PSB0cnVlOwotICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOwotICAgIH0KLQotICAg
IHJldHVybiBwcm9wZXJ0aWVzOwotfQotCi0KLUluamVjdGVkU2NyaXB0Ll9nZXRMb25naGFuZFBy
b3BlcnRpZXMgPSBmdW5jdGlvbihzdHlsZSwgc2hvcnRoYW5kUHJvcGVydHkpCi17Ci0gICAgdmFy
IHByb3BlcnRpZXMgPSBbXTsKLSAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307Ci0KLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBpbmRp
dmlkdWFsUHJvcGVydHkgPSBzdHlsZVtpXTsKLSAgICAgICAgaWYgKGluZGl2aWR1YWxQcm9wZXJ0
eSBpbiBmb3VuZFByb3BlcnRpZXMgfHwgc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZp
ZHVhbFByb3BlcnR5KSAhPT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZm91bmRQcm9wZXJ0aWVzW2luZGl2aWR1YWxQcm9wZXJ0eV0gPSB0cnVlOwot
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2goaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcHJvcGVydGllczsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2dldFNob3J0aGFuZFZh
bHVlID0gZnVuY3Rpb24oc3R5bGUsIHNob3J0aGFuZFByb3BlcnR5KQotewotICAgIHZhciB2YWx1
ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoc2hvcnRoYW5kUHJvcGVydHkpOwotICAgIGlmICgh
dmFsdWUpIHsKLSAgICAgICAgLy8gU29tZSBzaG9ydGhhbmRzIChsaWtlIGJvcmRlcikgcmV0dXJu
IGEgbnVsbCB2YWx1ZSwgc28gY29tcHV0ZSBhIHNob3J0aGFuZCB2YWx1ZS4KLSAgICAgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU4MjMgaXMgZml4ZWQuCi0KLSAgICAgICAgdmFyIGZvdW5kUHJvcGVydGllcyA9IHt9
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGVbaV07Ci0gICAgICAgICAgICBp
ZiAoaW5kaXZpZHVhbFByb3BlcnR5IGluIGZvdW5kUHJvcGVydGllcyB8fCBzdHlsZS5nZXRQcm9w
ZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9PSBzaG9ydGhhbmRQcm9wZXJ0eSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdmFyIGluZGl2aWR1YWxW
YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICAg
ICAgICAgIGlmIChzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQoaW5kaXZpZHVhbFByb3BlcnR5KSB8
fCBpbmRpdmlkdWFsVmFsdWUgPT09ICJpbml0aWFsIikKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgZm91bmRQcm9wZXJ0aWVzW2luZGl2aWR1YWxQcm9wZXJ0eV0gPSB0
cnVlOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHZhbHVlID0g
IiI7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGgpCi0gICAgICAgICAgICAgICAg
dmFsdWUgKz0gIiAiOwotICAgICAgICAgICAgdmFsdWUgKz0gaW5kaXZpZHVhbFZhbHVlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2dl
dFNob3J0aGFuZFByaW9yaXR5ID0gZnVuY3Rpb24oc3R5bGUsIHNob3J0aGFuZFByb3BlcnR5KQot
ewotICAgIHZhciBwcmlvcml0eSA9IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoc2hvcnRoYW5k
UHJvcGVydHkpOwotICAgIGlmICghcHJpb3JpdHkpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzdHlsZS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGluZGl2aWR1YWxQcm9w
ZXJ0eSA9IHN0eWxlW2ldOwotICAgICAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5U2hvcnRo
YW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT09IHNob3J0aGFuZFByb3BlcnR5KQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJpb3JpdHkgPSBzdHlsZS5nZXRQcm9wZXJ0
eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJpb3JpdHk7Ci19Ci0KIEluamVjdGVkU2NyaXB0Lmdl
dFByb3RvdHlwZXMgPSBmdW5jdGlvbihub2RlSWQpCiB7CiAgICAgdmFyIG5vZGUgPSBJbmplY3Rl
ZFNjcmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKaW5kZXggMjU1ODI2Ny4uNGNjYjNmYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNj
ZXNzLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFj
Y2Vzcy5qcwpAQCAtNzEsMTkgKzcxLDEzIEBAIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlciA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGFzeW5jKQogLy8gLSBNYWtlIHN1cmUgbGFz
dCBwYXJhbWV0ZXIgb2YgYWxsIHRoZSBJbmplY3RlZFNyaXB0QWNjZXNzLiogY2FsbHMgaXMgYSBj
YWxsYmFjayBmdW5jdGlvbi4KIC8vIFdlIGtlZXAgdGhlc2Ugc29ydGVkLgogSW5qZWN0ZWRTY3Jp
cHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJhZGRJbnNwZWN0ZWROb2RlIik7Ci1JbmplY3RlZFNj
cmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImFkZFN0eWxlU2VsZWN0b3IiKTsKLUluamVjdGVk
U2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiYXBwbHlTdHlsZVJ1bGVUZXh0Iik7Ci1Jbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImFwcGx5U3R5bGVUZXh0Iik7CiBJbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImNsZWFyQ29uc29sZU1lc3NhZ2VzIik7
CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRlIik7CiBJbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRlSW5DYWxsRnJhbWUiKTsK
IEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0Q29tcGxldGlvbnMiKTsK
LUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0Q29tcHV0ZWRTdHlsZSIp
OwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRJbmxpbmVTdHlsZSIp
OwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXROb2RlUHJvcGVydHlW
YWx1ZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRQcm9wZXJ0
aWVzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldFByb3RvdHlw
ZXMiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0U3R5bGVzIik7
CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoIm9wZW5Jbkluc3BlY3RlZFdp
bmRvdyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJwZXJmb3JtU2Vh
cmNoIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInB1c2hOb2RlVG9G
cm9udGVuZCIpOwpAQCAtOTEsOSArODUsNiBAQCBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFs
bEhhbmRsZXIoIm5vZGVCeVBhdGgiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigic2VhcmNoQ2FuY2VsZWQiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigic2V0T3V0ZXJIVE1MIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRs
ZXIoInNldFByb3BlcnR5VmFsdWUiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigic2V0U3R5bGVQcm9wZXJ0eSIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJzZXRTdHlsZVRleHQiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigidG9nZ2xlU3R5bGVFbmFibGVkIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFs
bEhhbmRsZXIoImV2YWx1YXRlT25TZWxmIik7CiAKIC8vIFNvbWUgbWV0aG9kcyBjYW4ndCBydW4g
c3luY2hyb25vdXNseSBldmVuIG9uIHRoZSBpbmplY3RlZCBzY3JpcHQgc2lkZSAoc3VjaCBhcyBE
QiB0cmFuc2FjdGlvbnMpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L01ldHJpY3NTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRy
aWNzU2lkZWJhclBhbmUuanMKaW5kZXggNzY3ZGExZi4uZDEzYWMyNyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpzCkBAIC01Myw3ICs1
Myw3IEBAIFdlYkluc3BlY3Rvci5NZXRyaWNzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgdmFyIHN0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFy
c2VTdHlsZShzdHlsZVBheWxvYWQpOwogICAgICAgICAgICAgc2VsZi5fdXBkYXRlKHN0eWxlKTsK
ICAgICAgICAgfTsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0KG5vZGUuaW5qZWN0
ZWRTY3JpcHRJZCkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLmlkLCBjYWxsYmFjayk7CisgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuZ2V0Q29tcHV0ZWRTdHlsZShXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
d3JhcChjYWxsYmFjayksIG5vZGUuaWQpOwogCiAgICAgICAgIHZhciBpbmxpbmVTdHlsZUNhbGxi
YWNrID0gZnVuY3Rpb24oc3R5bGVQYXlsb2FkKSB7CiAgICAgICAgICAgICBpZiAoIXN0eWxlUGF5
bG9hZCkKQEAgLTYxLDcgKzYxLDcgQEAgV2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICBzZWxmLl9pbmxpbmVTdHlsZUlkID0gc3R5bGVQYXls
b2FkLmlkOwogICAgICAgICAgICAgc2VsZi5faW5saW5lU3R5bGVJbmplY3RlZFNjcmlwdElkID0g
c3R5bGVQYXlsb2FkLmluamVjdGVkU2NyaXB0SWQ7CiAgICAgICAgIH07Ci0gICAgICAgIEluamVj
dGVkU2NyaXB0QWNjZXNzLmdldChub2RlLmluamVjdGVkU2NyaXB0SWQpLmdldElubGluZVN0eWxl
KG5vZGUuaWQsIGlubGluZVN0eWxlQ2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LmdldElubGluZVN0eWxlKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGlubGluZVN0eWxlQ2Fs
bGJhY2spLCBub2RlLmlkKTsKICAgICB9LAogCiAgICAgX3VwZGF0ZTogZnVuY3Rpb24oc3R5bGUp
CkBAIC0yMDYsNyArMjA2LDggQEAgV2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygibWV0
cmljcyBlZGl0ZWQiKTsKICAgICAgICAgICAgIHNlbGYudXBkYXRlKCk7CiAgICAgICAgIH07Ci0g
ICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldCh0aGlzLl9pbmxpbmVTdHlsZUluamVjdGVk
U2NyaXB0SWQpLnNldFN0eWxlUHJvcGVydHkodGhpcy5faW5saW5lU3R5bGVJZCwgY29udGV4dC5z
dHlsZVByb3BlcnR5LCB1c2VySW5wdXQsIGNhbGxiYWNrKTsKKworICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnNldFN0eWxlUHJvcGVydHkoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJh
Y2spLCB0aGlzLl9pbmxpbmVTdHlsZUlkLCBjb250ZXh0LnN0eWxlUHJvcGVydHksIHVzZXJJbnB1
dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U3R5bGVzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVz
U2lkZWJhclBhbmUuanMKaW5kZXggY2FiYWE4ZS4uODhhNGRlNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtMTE1LDcgKzExNSw3
IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBzZWxmLl91cGRhdGUocmVmcmVzaCwgYm9keSwgbm9kZSwgZWRpdGVkU2VjdGlvbiwgZm9y
Y2VVcGRhdGUpOwogICAgICAgICB9CiAKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0
KG5vZGUuaW5qZWN0ZWRTY3JpcHRJZCkuZ2V0U3R5bGVzKG5vZGUuaWQsICFXZWJJbnNwZWN0b3Iu
c2V0dGluZ3Muc2hvd1VzZXJBZ2VudFN0eWxlcywgY2FsbGJhY2spOworICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayks
IG5vZGUuaWQsICFXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd1VzZXJBZ2VudFN0eWxlcyk7CiAg
ICAgfSwKIAogICAgIF91cGRhdGU6IGZ1bmN0aW9uKHJlZnJlc2gsIGJvZHksIG5vZGUsIGVkaXRl
ZFNlY3Rpb24sIGZvcmNlVXBkYXRlKQpAQCAtNjU5LDE2ICs2NTksMTQgQEAgV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJu
IG1vdmVUb05leHRJZk5lZWRlZC5jYWxsKHRoaXMpOwogCiAgICAgICAgIHZhciBzZWxmID0gdGhp
czsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzdWx0KQorICAgICAgICBmdW5jdGlvbiBj
YWxsYmFjayhuZXdSdWxlUGF5bG9hZCwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmICghbmV3UnVsZVBh
eWxvYWQpIHsKICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIFN5bnRheCBmb3IgYSBTZWxlY3Rv
cgogICAgICAgICAgICAgICAgIG1vdmVUb05leHRJZk5lZWRlZC5jYWxsKHNlbGYpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIG5ld1J1
bGVQYXlsb2FkID0gcmVzdWx0WzBdOwotICAgICAgICAgICAgdmFyIGRvZXNBZmZlY3RTZWxlY3Rl
ZE5vZGUgPSByZXN1bHRbMV07CiAgICAgICAgICAgICBpZiAoIWRvZXNBZmZlY3RTZWxlY3RlZE5v
ZGUpIHsKICAgICAgICAgICAgICAgICBzZWxmLm5vQWZmZWN0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBzZWxmLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygibm8tYWZmZWN0Iik7CkBAIC02OTEsNyAr
Njg5LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgbW92ZVRvTmV4dElmTmVlZGVkLmNhbGwoc2VsZik7CiAgICAgICAgIH0K
IAotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQodGhpcy5ydWxlLmluamVjdGVkU2Ny
aXB0SWQpLmFwcGx5U3R5bGVSdWxlVGV4dCh0aGlzLnJ1bGUuaWQsIG5ld0NvbnRlbnQsIHRoaXMu
cGFuZS5ub2RlLmlkLCBjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVs
ZVNlbGVjdG9yKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgdGhpcy5ydWxl
LmlkLCBuZXdDb250ZW50LCB0aGlzLnBhbmUubm9kZS5pZCk7CiAgICAgfSwKIAogICAgIGVkaXRp
bmdTZWxlY3RvckNhbmNlbGxlZDogZnVuY3Rpb24oKQpAQCAtNzE4LDE3ICs3MTYsMTQgQEAgV2Vi
SW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAg
ZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdDb250ZW50LCBv
bGRDb250ZW50LCBjb250ZXh0KQogICAgIHsKICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KHJ1bGUsIGRvZXNTZWxlY3RvckFmZmVjdFNlbGVjdGVkTm9kZSkKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmICghcnVsZSkgewogICAgICAgICAg
ICAgICAgIC8vIEludmFsaWQgU3ludGF4IGZvciBhIFNlbGVjdG9yCiAgICAgICAgICAgICAgICAg
c2VsZi5lZGl0aW5nU2VsZWN0b3JDYW5jZWxsZWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBydWxlID0gcmVzdWx0WzBdOwotICAg
ICAgICAgICAgdmFyIGRvZXNTZWxlY3RvckFmZmVjdFNlbGVjdGVkTm9kZSA9IHJlc3VsdFsxXTsK
LQogICAgICAgICAgICAgdmFyIHN0eWxlUnVsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uLnBhcnNlUnVsZShydWxlKTsKICAgICAgICAgICAgIHN0eWxlUnVsZS5ydWxlID0gcnVs
ZTsKIApAQCAtNzQ1LDcgKzc0MCw3IEBAIFdlYkluc3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGll
c1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2VsZi5hZGROZXdCbGFua1Byb3Bl
cnR5KCkuc3RhcnRFZGl0aW5nKCk7CiAgICAgICAgIH0KIAotICAgICAgICBJbmplY3RlZFNjcmlw
dEFjY2Vzcy5nZXQodGhpcy5wYW5lLm5vZGUuaW5qZWN0ZWRTY3JpcHRJZCkuYWRkU3R5bGVTZWxl
Y3RvcihuZXdDb250ZW50LCB0aGlzLnBhbmUubm9kZS5pZCwgY2FsbGJhY2spOworICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLmFkZFJ1bGUoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJh
Y2spLCBuZXdDb250ZW50LCB0aGlzLnBhbmUubm9kZS5pZCk7CiAgICAgfSwKIAogICAgIGVkaXRp
bmdTZWxlY3RvckNhbmNlbGxlZDogZnVuY3Rpb24oKQpAQCAtMTA1Miw3ICsxMDQ3LDcgQEAgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBzZWxmLnVwZGF0ZUFsbCh0cnVlKTsKICAgICAgICAgfQogCi0gICAgICAgIEluamVjdGVk
U2NyaXB0QWNjZXNzLmdldCh0aGlzLnN0eWxlLmluamVjdGVkU2NyaXB0SWQpLnRvZ2dsZVN0eWxl
RW5hYmxlZCh0aGlzLnN0eWxlLmlkLCB0aGlzLm5hbWUsIGRpc2FibGVkLCBjYWxsYmFjayk7Cisg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQudG9nZ2xlU3R5bGVFbmFibGVkKFdlYkluc3BlY3Rvci5D
YWxsYmFjay53cmFwKGNhbGxiYWNrKSwgdGhpcy5zdHlsZS5pZCwgdGhpcy5uYW1lLCBkaXNhYmxl
ZCk7CiAgICAgfSwKIAogICAgIHVwZGF0ZVN0YXRlOiBmdW5jdGlvbigpCkBAIC0xMjE0LDcgKzEy
MDksNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9
IHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFs
IENTUyB0ZXh0IGJlZm9yZSBhcHBseWluZyB1c2VyIGNoYW5nZXMuIFRoaXMgaXMgbmVlZGVkIHRv
IHByZXZlbnQKICAgICAgICAgICAgIC8vIG5ldyBwcm9wZXJ0aWVzIGZyb20gc3RpY2tpbmcgYXJv
dW5kIGlmIHRoZSB1c2VyIGFkZHMgb25lLCB0aGVuIHJlbW92ZXMgaXQuCi0gICAgICAgICAgICBJ
bmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQodGhpcy5zdHlsZS5pbmplY3RlZFNjcmlwdElkKS5zZXRT
dHlsZVRleHQodGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOworICAgICAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVRleHQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndy
YXAobnVsbCksIHRoaXMuc3R5bGUuaWQsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKICAgICAgICAg
fQogCiAgICAgICAgIHRoaXMuYXBwbHlTdHlsZVRleHQodGhpcy5saXN0SXRlbUVsZW1lbnQudGV4
dENvbnRlbnQpOwpAQCAtMTIzNCw3ICsxMjI5LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVy
dHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0
eSkKICAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICAg
ICAgIGVsc2UgaWYgKHRoaXMub3JpZ2luYWxDU1NUZXh0KSB7Ci0gICAgICAgICAgICBJbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5nZXQodGhpcy5zdHlsZS5pbmplY3RlZFNjcmlwdElkKS5zZXRTdHlsZVRl
eHQodGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOworICAgICAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5zZXRTdHlsZVRleHQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAobnVs
bCksIHRoaXMuc3R5bGUuaWQsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKIAogICAgICAgICAgICAg
aWYgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24u
cGFuZSkKICAgICAgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZS5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0eWxlIGVkaXRlZCIpOwpAQCAtMTMyMCw5ICsxMzE1LDkg
QEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KIAogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNh
bGxiYWNrKHJlc3VsdCkKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soc3VjY2VzcywgbmV3UGF5
bG9hZCwgY2hhbmdlZFByb3BlcnRpZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghcmVz
dWx0KSB7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAvLyBU
aGUgdXNlciB0eXBlZCBzb21ldGhpbmcsIGJ1dCBpdCBkaWRuJ3QgcGFyc2UuIEp1c3QgYWJvcnQg
YW5kIHJlc3RvcmUKICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgdGl0bGUgZm9yIHRo
aXMgcHJvcGVydHkuICBJZiB0aGlzIHdhcyBhIG5ldyBhdHRyaWJ1dGUgYW5kCiAgICAgICAgICAg
ICAgICAgLy8gd2UgY291bGRuJ3QgcGFyc2UsIHRoZW4ganVzdCByZW1vdmUgaXQuCkBAIC0xMzM1
LDggKzEzMzAsNiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHZhciBuZXdQYXlsb2FkID0gcmVzdWx0WzBdOwotICAgICAgICAgICAgdmFyIGNoYW5n
ZWRQcm9wZXJ0aWVzID0gcmVzdWx0WzFdOwogICAgICAgICAgICAgZWxlbWVudHNQYW5lbC5yZW1v
dmVTdHlsZUNoYW5nZShzZWN0aW9uLmlkZW50aWZpZXIsIHNlbGYuc3R5bGUsIHNlbGYubmFtZSk7
CiAKICAgICAgICAgICAgIGlmICghc3R5bGVUZXh0TGVuZ3RoKSB7CkBAIC0xMzU1LDggKzEzNDgs
NyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCiAgICAgICAgICAgICAgICAgc2VsZi51
cGRhdGVBbGwodHJ1ZSk7CiAgICAgICAgIH0KLQotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vz
cy5nZXQodGhpcy5zdHlsZS5pbmplY3RlZFNjcmlwdElkKS5hcHBseVN0eWxlVGV4dCh0aGlzLnN0
eWxlLmlkLCBzdHlsZVRleHQudHJpbSgpLCB0aGlzLm5hbWUsIGNhbGxiYWNrKTsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5hcHBseVN0eWxlVGV4dChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3Jh
cChjYWxsYmFjayksIHRoaXMuc3R5bGUuaWQsIHN0eWxlVGV4dC50cmltKCksIHRoaXMubmFtZSk7
CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50744</attachid>
            <date>2010-03-15 14:45:07 -0700</date>
            <delta_ts>2010-03-15 14:45:07 -0700</delta_ts>
            <desc>[PATCH] Patch to land.</desc>
            <filename>native_styles</filename>
            <type>text/plain</type>
            <size>69055</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtaWZyYW1lLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWlmcmFtZS5odG1sCmluZGV4IDgzY2VmOTEuLjA1
OGQwMTcgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtaWZyYW1lLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1pZnJhbWUuaHRtbApAQCAtNTgs
MTAgKzU4LDEyIEBAIGZ1bmN0aW9uIGZyb250ZW5kX2R1bXBTdHlsZXNDb250aW51YXRpb24odGVz
dENvbnRyb2xsZXIpCiAgICAgLy8gMS4gR2V0IHN0eWxlcyBmb3IgYm9keSwgc3RvcmUgdGhlbSBp
biBtYWluU3R5bGVzIHZhci4KICAgICB2YXIgYm9keSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5k
b2N1bWVudC5ib2R5OwogICAgIHZhciBtYWluU3R5bGVzID0gbnVsbDsKLSAgICBmdW5jdGlvbiBt
YWluRnJhbWVDYWxsYmFjayhzdHlsZXMpIHsKKyAgICBmdW5jdGlvbiBtYWluRnJhbWVDYWxsYmFj
ayhzdHlsZXMpCisgICAgewogICAgICAgICBtYWluU3R5bGVzID0gc3R5bGVzOwogICAgIH0KLSAg
ICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQoYm9keS5pbmplY3RlZFNjcmlwdElkKS5nZXRTdHls
ZXMoYm9keS5pZCwgZmFsc2UsIG1haW5GcmFtZUNhbGxiYWNrKTsKKworICAgIEluc3BlY3RvckJh
Y2tlbmQuZ2V0U3R5bGVzKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKG1haW5GcmFtZUNhbGxi
YWNrKSwgYm9keS5pZCwgZmFsc2UpOwogCiAgICAgLy8gMi4gRmluZCBpZnJhbWUgbm9kZQogICAg
IHZhciBpbm5lck1hcHBpbmcgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuX2lkVG9ET01Ob2RlOwpA
QCAtNzcsMTAgKzc5LDEyIEBAIGZ1bmN0aW9uIGZyb250ZW5kX2R1bXBTdHlsZXNDb250aW51YXRp
b24odGVzdENvbnRyb2xsZXIpCiAgICAgfQogCiAgICAgLy8gMy4gR2V0IHN0eWxlcyBmb3IgaWZy
YW1lJ3MgYm9keSwgcmV0dXJuIHRoZW0gdG9nZXRoZXIgd2l0aCBtYWluIHN0eWxlcy4KLSAgICBm
dW5jdGlvbiBpZnJhbWVDYWxsYmFjayhzdHlsZXMpIHsKKyAgICBmdW5jdGlvbiBpZnJhbWVDYWxs
YmFjayhzdHlsZXMpCisgICAgewogICAgICAgICB0ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKFtt
YWluU3R5bGVzLCBzdHlsZXNdKTsKICAgICB9Ci0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0
KGlmcmFtZUJvZHkuaW5qZWN0ZWRTY3JpcHRJZCkuZ2V0U3R5bGVzKGlmcmFtZUJvZHkuaWQsIGZh
bHNlLCBpZnJhbWVDYWxsYmFjayk7CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChpZnJhbWVDYWxsYmFjayksIGlmcmFtZUJvZHkuaWQs
IGZhbHNlKTsKIH0KIAogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIzMjEyN2IuLjlkNTU3NDIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUgQEAK
KzIwMTAtMDMtMTUgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1pZ3JhdGUgdG8gbmF0aXZlIHN0eWxlcyBpbnNwZWN0b3IgaW4gb3JkZXIgdG8gaW5zcGVj
dCBzdHlsZXMgZnJvbSBmb3JlaWdobiBkb21haW5zLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjExNworCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6
Z2V0U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmdldElubGlu
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmdldENvbXB1dGVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6YXBwbHlTdHlsZVRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2V0U3R5bGVUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnNldFN0eWxlUHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6dG9nZ2xlU3R5bGVFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnNldFJ1bGVTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjphZGRSdWxlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldElubGluZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRDb21wdXRlZFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRNYXRjaGVkQ1NTUnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEF0dHJpYnV0ZVN0eWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5bGVFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2VsZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6YmluZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp1bmlxdWVTdHlsZVByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmxvbmdoYW5kUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2hvcnRoYW5kUHJpb3JpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJ1bGVBZmZlY3RzTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dG9BcnJheSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpk
aWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZEdldFN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6ZGlkR2V0Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZDo6ZGlkR2V0SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZEFwcGx5U3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kOjpkaWRTZXRTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZFNldFN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZFRvZ2dsZVN0eWxlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0UnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kOjpkaWRBZGRSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qczoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5NZXRyaWNzU2lkZWJhclBhbmUucHJvdG90eXBlLmVkaXRpbmdDb21taXR0ZWQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRp
dGluZ1NlbGVjdG9yQ29tbWl0dGVkLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90
b3R5cGUuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxl
Y3RvckNvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50LnByb3RvdHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZS4pOgorCiAyMDEwLTAzLTE1ICBNT1JJVEEgSGFqaW1lICA8bW9y
cml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFr
b3YuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmggYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKaW5kZXggOWNjYjdhYy4uM2QwZDk0NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJvdGVjdC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKQEAgLTU4LDYgKzU5LDggQEAgcHVibGljOgogICAgIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqKTsKICAg
ICBzdGF0aWMgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVk
U2NyaXB0VmFsdWUqKTsKIAorICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSB1bmRlZmluZWQoKSB7IHJl
dHVybiBTY3JpcHRWYWx1ZShKU0M6OmpzVW5kZWZpbmVkKCkpOyB9CisKIHByaXZhdGU6CiAgICAg
SlNDOjpQcm90ZWN0ZWRKU1ZhbHVlIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1
ZS5oCmluZGV4IDE3MTNmODAuLjgyNDEyMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgK
QEAgLTEyNyw2ICsxMjcsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSopOwogICAgIHN0YXRpYyBTY3JpcHRWYWx1
ZSBkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopOwogCisg
ICAgc3RhdGljIFNjcmlwdFZhbHVlIHVuZGVmaW5lZCgpIHsgcmV0dXJuIFNjcmlwdFZhbHVlKHY4
OjpVbmRlZmluZWQoKSk7IH0KKwogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgaWYg
KG1fdmFsdWUuSXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApp
bmRleCBmNTIyZDQzLi41YTNmZDY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmNwcApAQCAtMzU2LDYgKzM1Niw2MCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbW92ZU5v
ZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogICAgIGZyb250ZW5kLT5kaWRSZW1vdmVOb2Rl
KGNhbGxJZCwgbm9kZUlkKTsKIH0KIAordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMo
bG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCit7CisgICAgaWYgKElu
c3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckRPTUFnZW50KCkpCisgICAgICAg
IGRvbUFnZW50LT5nZXRTdHlsZXMoY2FsbElkLCBub2RlSWQsIGF1dGhvck9ubHkpOworfQorCit2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9y
RE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmdldElubGluZVN0eWxlKGNhbGxJZCwgbm9k
ZUlkKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRDb21wdXRlZFN0eWxlKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFn
ZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmdldENvbXB1dGVk
U3R5bGUoY2FsbElkLCBub2RlSWQpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmFwcGx5
U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgc3R5bGVU
ZXh0LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAoSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQt
PmFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgc3R5bGVJZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUp
OworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwg
bG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQpCit7CisgICAgaWYgKEluc3BlY3Rv
ckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckRPTUFnZW50KCkpCisgICAgICAgIGRvbUFn
ZW50LT5zZXRTdHlsZVRleHQoY2FsbElkLCBzdHlsZUlkLCBjc3NUZXh0KTsKK30KKwordm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpzZXRTdHlsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBsb25nIHN0eWxl
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAo
SW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICAg
ICAgZG9tQWdlbnQtPnNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBzdHlsZUlkLCBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6dG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcg
Y2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRp
c2FibGVkKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JET01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+dG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJ
ZCwgc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6c2V0UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBsb25nIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCkKK3sKKyAgICBpZiAoSW5zcGVj
dG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9t
QWdlbnQtPnNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIHJ1bGVJZCwgc2VsZWN0b3IsIHNlbGVjdGVk
Tm9kZUlkKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjphZGRSdWxlKGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKQoreworICAgIGlm
IChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQorICAg
ICAgICBkb21BZ2VudC0+YWRkUnVsZShjYWxsSWQsIHNlbGVjdG9yLCBzZWxlY3RlZE5vZGVJZCk7
Cit9CisKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6aGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJ
ZCkKIHsKICAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5oCmluZGV4IDZiODFhOTYuLjkzZGMyN2MgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBjYWxsSWQsIGxvbmcgaW5qZWN0ZWRT
Y3JpcHRJZCwgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50
cywgYm9vbCBhc3luYyk7CiAgICAgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNvbnN0
IFN0cmluZyYgc291cmNlKTsKICAgICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25M
b2FkKCk7CisKICAgICB2b2lkIGdldENoaWxkTm9kZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCByZW1vdmVB
dHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUp
OwpAQCAtMTExLDYgKzExMiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIGNvcHlOb2RlKGxv
bmcgbm9kZUlkKTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlk
KTsKKworICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBh
dXRoT25seSk7CisgICAgdm9pZCBnZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2Rl
SWQpOworICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQp
OworICAgIHZvaWQgYXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29u
c3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2
b2lkIHNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcm
IGNzc1RleHQpOworICAgIHZvaWQgc2V0U3R5bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgbG9uZyBz
dHlsZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZv
aWQgdG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVkKTsKKyAgICB2b2lkIHNldFJ1bGVTZWxl
Y3Rvcihsb25nIGNhbGxJZCwgbG9uZyBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxv
bmcgc2VsZWN0ZWROb2RlSWQpOworICAgIHZvaWQgYWRkUnVsZShsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCk7CisKICAgICB2b2lkIGhpZ2hs
aWdodERPTU5vZGUobG9uZyBub2RlSWQpOwogICAgIHZvaWQgaGlkZURPTU5vZGVIaWdobGlnaHQo
KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCA3MjZmODg5Li5i
MGJlNmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlk
bAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTAsNiAr
OTAsMTYgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4g
bG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiAKKyAg
ICAgICAgdm9pZCBnZXRTdHlsZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBi
b29sZWFuIGF1dGhPbmx5KTsKKyAgICAgICAgdm9pZCBnZXRJbmxpbmVTdHlsZShpbiBsb25nIGNh
bGxJZCwgaW4gbG9uZyBub2RlSWQpOworICAgICAgICB2b2lkIGdldENvbXB1dGVkU3R5bGUoaW4g
bG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBhcHBseVN0eWxlVGV4
dChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBzdHlsZUlkLCBpbiBET01TdHJpbmcgc3R5bGVUZXh0
LCBpbiBET01TdHJpbmcgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdm9pZCBzZXRTdHlsZVRleHQo
aW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgc3R5bGVJZCwgaW4gRE9NU3RyaW5nIHN0eWxlVGV4dCk7
CisgICAgICAgIHZvaWQgc2V0U3R5bGVQcm9wZXJ0eShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBz
dHlsZUlkLCBpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZhbHVlKTsKKyAgICAgICAg
dm9pZCB0b2dnbGVTdHlsZUVuYWJsZWQoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgc3R5bGVJZCwg
aW4gRE9NU3RyaW5nIHByb3BlcnR5TmFtZSwgaW4gYm9vbGVhbiBkaXNhYmxlZCk7CisgICAgICAg
IHZvaWQgc2V0UnVsZVNlbGVjdG9yKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIHJ1bGVJZCwgaW4g
RE9NU3RyaW5nIHNlbGVjdG9yLCBpbiBsb25nIHNlbGVjdGVkTm9kZUlkKTsKKyAgICAgICAgdm9p
ZCBhZGRSdWxlKGluIGxvbmcgY2FsbElkLCBpbiBET01TdHJpbmcgc2VsZWN0b3IsIGluIGxvbmcg
c2VsZWN0ZWROb2RlSWQpOworCiAgICAgICAgIHZvaWQgZ2V0Q29va2llcyhpbiBsb25nIGNhbGxJ
ZCk7CiAgICAgICAgIHZvaWQgZGVsZXRlQ29va2llKGluIERPTVN0cmluZyBjb29raWVOYW1lLCBp
biBET01TdHJpbmcgZG9tYWluKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCmluZGV4IDAzODdmMzAuLmZjMWEwNjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTM0LDkgKzM0LDE2IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAog
I2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0Lmgi
CisjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2Rl
LmgiCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCkBAIC00NSw2ICs1Miw3IEBACiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSFRN
TEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCkBAIC01Myw4ICs2MSwxMCBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNj
cmlwdE9iamVjdC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4
dC5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02NCw2ICs3NCw4IEBAIEluc3BlY3RvckRP
TUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAg
ICAgOiBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fZnJvbnRl
bmQoZnJvbnRlbmQpCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKKyAgICAsIG1fbGFzdFN0eWxlSWQo
MSkKKyAgICAsIG1fbGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC02NzEsNiArNjgzLDQ2MCBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgbV9mcm9udGVuZC0+YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJyYXlGb3JFbGVt
ZW50QXR0cmlidXRlcyhlbGVtZW50KSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKK3sKKyAg
ICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlIHx8IG5vZGUt
Pm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CisgICAgICAgIG1fZnJvbnRlbmQt
PmRpZEdldFN0eWxlcyhjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKTsKKworICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBub2RlLT5vd25lckRv
Y3VtZW50KCktPmRlZmF1bHRWaWV3KCk7CisgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+
IGNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0Vmlldy0+Z2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAi
Iik7CisKKyAgICBTY3JpcHRPYmplY3QgcmVzdWx0ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2Jq
ZWN0KCk7CisgICAgcmVzdWx0LnNldCgiaW5saW5lU3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxl
KGVsZW1lbnQtPnN0eWxlKCksIHRydWUpKTsKKyAgICByZXN1bHQuc2V0KCJjb21wdXRlZFN0eWxl
IiwgYnVpbGRPYmplY3RGb3JTdHlsZShjb21wdXRlZFN0eWxlLmdldCgpLCBmYWxzZSkpOworICAg
IHJlc3VsdC5zZXQoIm1hdGNoZWRDU1NSdWxlcyIsIGdldE1hdGNoZWRDU1NSdWxlcyhlbGVtZW50
LCBhdXRob3JPbmx5KSk7CisgICAgcmVzdWx0LnNldCgic3R5bGVBdHRyaWJ1dGVzIiwgZ2V0QXR0
cmlidXRlU3R5bGVzKGVsZW1lbnQpKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZXMoY2Fs
bElkLCByZXN1bHQpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRJbmxpbmVTdHls
ZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCit7CisgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJ
ZChub2RlSWQpOworICAgIGlmICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVM
RU1FTlRfTk9ERSkgeworICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRJbmxpbmVTdHlsZShjYWxs
SWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICBt
X2Zyb250ZW5kLT5kaWRHZXRJbmxpbmVTdHlsZShjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUo
ZWxlbWVudC0+c3R5bGUoKSwgdHJ1ZSkpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKK3sKKyAgICBOb2RlKiBu
b2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBl
KCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldENv
bXB1dGVkU3R5bGUoY2FsbElkLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSk7CisKKyAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0gbm9kZS0+b3duZXJEb2N1
bWVudCgpLT5kZWZhdWx0VmlldygpOworICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBj
b21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIp
OworICAgIG1fZnJvbnRlbmQtPmRpZEdldENvbXB1dGVkU3R5bGUoY2FsbElkLCBidWlsZE9iamVj
dEZvclN0eWxlKGNvbXB1dGVkU3R5bGUuZ2V0KCksIGZhbHNlKSk7Cit9CisKK1NjcmlwdEFycmF5
IEluc3BlY3RvckRPTUFnZW50OjpnZXRNYXRjaGVkQ1NTUnVsZXMoRWxlbWVudCogZWxlbWVudCwg
Ym9vbCBhdXRob3JPbmx5KQoreworICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBlbGVtZW50
LT5vd25lckRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCk7CisgICAgUmVmUHRyPENTU1J1bGVMaXN0
PiBtYXRjaGVkUnVsZXMgPSBkZWZhdWx0Vmlldy0+Z2V0TWF0Y2hlZENTU1J1bGVzKGVsZW1lbnQs
ICIiLCBhdXRob3JPbmx5KTsKKyAgICBTY3JpcHRBcnJheSBtYXRjaGVkQ1NTUnVsZXMgPSBtX2Zy
b250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG1hdGNo
ZWRSdWxlcy5nZXQoKSAmJiBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIENTU1J1bGUqIHJ1bGUgPSBtYXRjaGVkUnVsZXMtPml0ZW0oaSk7CisgICAgICAgIGlmIChy
dWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAgICAgICAgIG1hdGNoZWRD
U1NSdWxlcy5zZXQoaSwgYnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVs
ZSo+KHJ1bGUpKSk7CisgICAgfQorICAgIHJldHVybiBtYXRjaGVkQ1NTUnVsZXM7Cit9CisKK1Nj
cmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlU3R5bGVzKEVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgU2NyaXB0T2JqZWN0IHN0eWxlQXR0cmlidXRlcyA9IG1fZnJvbnRl
bmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVs
ZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBhdHRyaWJ1dGVz
ICYmIGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgaWYgKGF0
dHJpYnV0ZS0+c3R5bGUoKSkgeworICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBh
dHRyaWJ1dGUtPmxvY2FsTmFtZSgpOworICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLnNldChh
dHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCksIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoYXR0cmlidXRl
LT5zdHlsZSgpLCB0cnVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0eWxlQXR0
cmlidXRlczsKK30KKwordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQobG9u
ZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2lkVG9TdHlsZS5maW5kKHN0eWxlSWQpOworICAgIGlmIChpdCA9PSBtX2lkVG9TdHlsZS5lbmQo
KSkgeworICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNl
LCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKCksIG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIGludCBzdHlsZVRleHRMZW5ndGggPSBzdHlsZVRl
eHQubGVuZ3RoKCk7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgZWxlbWVudCB0byBwYXJzZSB0aGUg
dXNlciBpbnB1dCBDU1MuCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPEVs
ZW1lbnQ+IHBhcnNlRWxlbWVudCA9IG1haW5GcmFtZURvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQo
InNwYW4iLCBlYyk7CisgICAgaWYgKCFlYykKKyAgICAgICAgcGFyc2VFbGVtZW50LT5zZXRBdHRy
aWJ1dGUoInN0eWxlIiwgc3R5bGVUZXh0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIG1f
ZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UsIFNjcmlwdFZhbHVlOjp1
bmRlZmluZWQoKSwgbV9mcm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiB0ZW1wU3R5bGUgPSBwYXJzZUVs
ZW1lbnQtPnN0eWxlKCk7CisgICAgaWYgKCh0ZW1wU3R5bGUgJiYgdGVtcFN0eWxlLT5sZW5ndGgo
KSkgfHwgIXN0eWxlVGV4dExlbmd0aCkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICAgICAgLy8gVGhlIGlucHV0IHdhcyBwYXJzYWJsZSBvciB0aGUgdXNlciBkZWxldGVkIGV2
ZXJ5dGhpbmcsIHNvIHJlbW92ZSB0aGUKKyAgICAgICAgLy8gb3JpZ2luYWwgcHJvcGVydHkgZnJv
bSB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4gSWYgdGhpcyByZXByZXNlbnRzCisgICAgICAg
IC8vIGEgc2hvcnRoYW5kIHJlbW92ZSBhbGwgdGhlIGxvbmdoYW5kIHByb3BlcnRpZXMuCisgICAg
ICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlOYW1lKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcHMgPSBsb25naGFu
ZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbG9uZ2hhbmRQcm9wcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wc1tpXSwgZWMpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGVj
KTsKKyAgICAgICAgaWYgKGVjKSB7CisgICAgICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0
eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKCksIG1fZnJvbnRl
bmQtPm5ld1NjcmlwdEFycmF5KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gTm90aWZ5IGNhbGxlciB0aGF0IHRoZSBwcm9wZXJ0eSB3YXMgc3VjY2Vz
c2Z1bGx5IGRlbGV0ZWQuCisgICAgaWYgKCFzdHlsZVRleHRMZW5ndGgpIHsKKyAgICAgICAgU2Ny
aXB0QXJyYXkgY2hhbmdlZFByb3BlcnRpZXMgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgp
OworICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy5zZXQoMCwgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCB0cnVlLCBTY3JpcHRWYWx1
ZTo6dW5kZWZpbmVkKCksIGNoYW5nZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghdGVtcFN0eWxlLT5sZW5ndGgoKSkgeworICAgICAgICBtX2Zyb250ZW5k
LT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVk
KCksIG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gSXRlcmF0ZSBvZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVzdCBlbGVtZW50
J3Mgc3R5bGUgZGVjbGFyYXRpb24gYW5kCisgICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5
bGUgZGVjbGFyYXRpb24uIFdlIHRha2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCisgICAgSGFz
aFNldDxTdHJpbmc+IGZvdW5kU2hvcnRoYW5kczsKKyAgICBWZWN0b3I8U3RyaW5nPiBjaGFuZ2Vk
UHJvcGVydGllczsKKworICAgIFZlY3RvcjxTdHJpbmc+IHVuaXF1ZVByb3BlcnRpZXMgPSB1bmlx
dWVTdHlsZVByb3BlcnRpZXModGVtcFN0eWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdW5pcXVlUHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcgbmFtZSA9
IHVuaXF1ZVByb3BlcnRpZXNbaV07CisgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSB0ZW1wU3R5
bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworCisgICAgICAgIGlmICghc2hvcnRoYW5k
LmlzRW1wdHkoKSAmJiBmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgU3RyaW5n
IHByaW9yaXR5OworICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIHZhbHVlID0gdGVtcFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHNob3J0aGFuZCk7CisgICAg
ICAgICAgICBwcmlvcml0eSA9IHNob3J0aGFuZFByaW9yaXR5KHRlbXBTdHlsZSwgc2hvcnRoYW5k
KTsKKyAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAg
ICAgIG5hbWUgPSBzaG9ydGhhbmQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1
ZSA9IHRlbXBTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKKyAgICAgICAgICAgIHByaW9y
aXR5ID0gdGVtcFN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0eSBvbiB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlv
bi4KKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHksIGVjKTsKKyAgICAgICAgY2hhbmdlZFByb3BlcnRp
ZXMuYXBwZW5kKG5hbWUpOworICAgIH0KKyAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4
dChjYWxsSWQsIHRydWUsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpLCB0b0FycmF5
KGNoYW5nZWRQcm9wZXJ0aWVzKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0
eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQp
Cit7CisgICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBpdCA9IG1faWRUb1N0eWxlLmZpbmQoc3R5
bGVJZCk7CisgICAgaWYgKGl0ID09IG1faWRUb1N0eWxlLmVuZCgpKSB7CisgICAgICAgIG1fZnJv
bnRlbmQtPmRpZFNldFN0eWxlVGV4dChjYWxsSWQsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgc3R5bGUtPnNldENzc1RleHQoY3NzVGV4
dCwgZWMpOworICAgIG1fZnJvbnRlbmQtPmRpZFNldFN0eWxlVGV4dChjYWxsSWQsICFlYyk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQs
IGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9TdHlsZS5maW5kKHN0eWxl
SWQpOworICAgIGlmIChpdCA9PSBtX2lkVG9TdHlsZS5lbmQoKSkgeworICAgICAgICBtX2Zyb250
ZW5kLT5kaWRTZXRTdHlsZVByb3BlcnR5KGNhbGxJZCwgZmFsc2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdl
dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShu
YW1lLCB2YWx1ZSwgZWMpOworICAgIG1fZnJvbnRlbmQtPmRpZFNldFN0eWxlUHJvcGVydHkoY2Fs
bElkLCAhZWMpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp0b2dnbGVTdHlsZUVuYWJs
ZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGJvb2wgZGlzYWJsZWQpCit7CisgICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBpdCA9IG1faWRU
b1N0eWxlLmZpbmQoc3R5bGVJZCk7CisgICAgaWYgKGl0ID09IG1faWRUb1N0eWxlLmVuZCgpKSB7
CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIFNjcmlw
dFZhbHVlOjp1bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOworCisgICAgSWRUb1N0eWxl
TWFwOjppdGVyYXRvciBkaXNhYmxlZEl0ID0gbV9pZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0eWxl
SWQpOworICAgIGlmIChkaXNhYmxlZEl0ID09IG1faWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCisg
ICAgICAgIGRpc2FibGVkSXQgPSBtX2lkVG9EaXNhYmxlZFN0eWxlLnNldChzdHlsZUlkLCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpLmZpcnN0OworICAgIENTU1N0eWxlRGVj
bGFyYXRpb24qIGRpc2FibGVkU3R5bGUgPSBkaXNhYmxlZEl0LT5zZWNvbmQuZ2V0KCk7CisKKyAg
ICAvLyBUT0RPOiBtYWtlIHN1cmUgdGhpcyB3b3JrcyB3aXRoIHNob3J0aGFuZHMgcmlnaHQuCisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGRpc2FibGVkKSB7CisgICAgICAgIGRp
c2FibGVkU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R5bGUtPmdldFByb3BlcnR5
VmFsdWUocHJvcGVydHlOYW1lKSwgc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVydHlO
YW1lKSwgZWMpOworICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSwgZWMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRpc2FibGVkU3R5bGUtPmdldFByb3BlcnR5VmFsdWUo
cHJvcGVydHlOYW1lKSwgZGlzYWJsZWRTdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0
eU5hbWUpLCBlYyk7CisgICAgICAgIGlmICghZWMpCisgICAgICAgICAgICBkaXNhYmxlZFN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGVjKTsKKyAgICB9CisgICAgaWYgKGVjKSB7
CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIFNjcmlw
dFZhbHVlOjp1bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9mcm9u
dGVuZC0+ZGlkVG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JTdHlsZShz
dHlsZSwgdHJ1ZSkpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2VsZWN0
b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25n
IHNlbGVjdGVkTm9kZUlkKQoreworICAgIElkVG9SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1faWRU
b1J1bGUuZmluZChydWxlSWQpOworICAgIGlmIChpdCA9PSBtX2lkVG9SdWxlLmVuZCgpKSB7Cisg
ICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIFNjcmlwdFZhbHVl
Ojp1bmRlZmluZWQoKSwgZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NT
U3R5bGVSdWxlKiBydWxlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKHNlbGVjdGVkTm9kZUlkKTsKKworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgc3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3RvciwgcnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgp
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFJ1bGVTZWxl
Y3RvcihjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFsc2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQ1NTU3R5bGVSdWxlKiBuZXdSdWxlID0gc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVSdWxlKj4oc3R5bGVTaGVldC0+aXRlbShzdHlsZVNoZWV0LT5sZW5ndGgoKSAtIDEp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBpZiAoc3R5bGVTaGVldC0+aXRlbShpKSA9PSBydWxlKSB7CisgICAgICAg
ICAgICBzdHlsZVNoZWV0LT5kZWxldGVSdWxlKGksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVjKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRp
ZFNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNl
bGVjdG9yKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JSdWxlKG5ld1J1bGUpLCBydWxlQWZmZWN0c05v
ZGUobmV3UnVsZSwgbm9kZSkpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRSdWxl
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlk
KQoreworICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQoc2VsZWN0ZWROb2RlSWQpOworICAgIGlm
ICghbm9kZSkgeworICAgICAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgU2NyaXB0
VmFsdWU6OnVuZGVmaW5lZCgpLCBmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIW1faW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSkgeworICAgICAgICBEb2N1bWVudCog
b3duZXJEb2N1bWVudCA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKTsKKyAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBvd25l
ckRvY3VtZW50LT5jcmVhdGVFbGVtZW50KCJzdHlsZSIsIGVjKTsKKyAgICAgICAgaWYgKCFlYykK
KyAgICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3Nz
IiwgZWMpOworICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAgb3duZXJEb2N1bWVudC0+aGVh
ZCgpLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAgICAgICAgaWYgKGVjKSB7Cisg
ICAgICAgICAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVu
ZGVmaW5lZCgpLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzID0gb3duZXJEb2N1bWVudC0+c3R5bGVTaGVl
dHMoKTsKKyAgICAgICAgU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzLT5pdGVt
KHN0eWxlU2hlZXRzLT5sZW5ndGgoKSAtIDEpOworICAgICAgICBpZiAoIXN0eWxlU2hlZXQtPmlz
Q1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNh
bGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgbV9pbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIG1faW5zcGVjdG9yU3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3Rvciwg
IiIsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShj
YWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFsc2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ1NTU3R5bGVSdWxlKiBuZXdSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVSdWxlKj4obV9pbnNwZWN0b3JTdHlsZVNoZWV0LT5pdGVtKG1faW5zcGVjdG9yU3R5bGVTaGVl
dC0+bGVuZ3RoKCkgLSAxKSk7CisgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIGJ1
aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxlKSwgcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUp
KTsKK30KKworbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6YmluZFN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKQoreworICAgIGxvbmcgaWQgPSBtX3N0eWxlVG9JZC5nZXQoc3R5bGUpOwor
ICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBtX2xhc3RTdHlsZUlkKys7CisgICAgICAgIG1f
aWRUb1N0eWxlLnNldChpZCwgc3R5bGUpOworICAgICAgICBtX3N0eWxlVG9JZC5zZXQoc3R5bGUs
IGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGlkOworfQorCitsb25nIEluc3BlY3RvckRPTUFnZW50
OjpiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgbG9uZyBpZCA9IG1fcnVsZVRv
SWQuZ2V0KHJ1bGUpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBtX2xhc3RSdWxlSWQr
KzsKKyAgICAgICAgbV9pZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOworICAgICAgICBtX3J1bGVUb0lk
LnNldChydWxlLCBpZCk7CisgICAgfQorICAgIHJldHVybiBpZDsKK30KKworU2NyaXB0T2JqZWN0
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBib29sIGJpbmQpCit7CisgICAgU2NyaXB0T2JqZWN0IHJlc3VsdCA9IG1fZnJv
bnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgIGlmIChiaW5kKSB7CisgICAgICAgIGxvbmcg
c3R5bGVJZCA9IGJpbmRTdHlsZShzdHlsZSk7CisgICAgICAgIHJlc3VsdC5zZXQoImlkIiwgc3R5
bGVJZCk7CisKKyAgICAgICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBkaXNhYmxlZEl0ID0gbV9p
ZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOworICAgICAgICBpZiAoZGlzYWJsZWRJdCAh
PSBtX2lkVG9EaXNhYmxlZFN0eWxlLmVuZCgpKSB7CisgICAgICAgICAgICBTY3JpcHRPYmplY3Qg
ZGlzYWJsZWRTdHlsZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOworICAgICAgICAg
ICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKGRpc2FibGVkSXQtPnNlY29uZC5n
ZXQoKSwgZGlzYWJsZWRTdHlsZSk7CisgICAgICAgICAgICByZXN1bHQuc2V0KCJkaXNhYmxlZCIs
IGRpc2FibGVkU3R5bGUpOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdC5zZXQoIndpZHRo
Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHJlc3VsdC5zZXQoImhl
aWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CisgICAgcG9wdWxhdGVP
YmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxl
UHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgU2NyaXB0T2JqZWN0JiByZXN1
bHQpCit7CisgICAgU2NyaXB0QXJyYXkgcHJvcGVydGllcyA9IG1fZnJvbnRlbmQtPm5ld1Njcmlw
dEFycmF5KCk7CisgICAgU2NyaXB0T2JqZWN0IHNob3J0aGFuZFZhbHVlcyA9IG1fZnJvbnRlbmQt
Pm5ld1NjcmlwdE9iamVjdCgpOworICAgIHJlc3VsdC5zZXQoInByb3BlcnRpZXMiLCBwcm9wZXJ0
aWVzKTsKKyAgICByZXN1bHQuc2V0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMp
OworCisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRoYW5kczsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgU2NyaXB0T2Jq
ZWN0IHByb3BlcnR5ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CisgICAgICAgIFN0
cmluZyBuYW1lID0gc3R5bGUtPml0ZW0oaSk7CisgICAgICAgIHByb3BlcnR5LnNldCgibmFtZSIs
IG5hbWUpOworICAgICAgICBwcm9wZXJ0eS5zZXQoInByaW9yaXR5Iiwgc3R5bGUtPmdldFByb3Bl
cnR5UHJpb3JpdHkobmFtZSkpOworICAgICAgICBwcm9wZXJ0eS5zZXQoImltcGxpY2l0Iiwgc3R5
bGUtPmlzUHJvcGVydHlJbXBsaWNpdChuYW1lKSk7CisgICAgICAgIFN0cmluZyBzaG9ydGhhbmQg
PSAgc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICBwcm9wZXJ0eS5z
ZXQoInNob3J0aGFuZCIsIHNob3J0aGFuZCk7CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1w
dHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAg
ICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHNob3J0aGFu
ZFZhbHVlcy5zZXQoc2hvcnRoYW5kLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmQp
KTsKKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0eS5zZXQoInZhbHVlIiwgc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUobmFtZSkpOworICAgICAgICBwcm9wZXJ0aWVzLnNldChpLCBwcm9wZXJ0eSk7
CisgICAgfQorICAgIHJlc3VsdC5zZXQoInVuaXF1ZVN0eWxlUHJvcGVydGllcyIsIHRvQXJyYXko
dW5pcXVlU3R5bGVQcm9wZXJ0aWVzKHN0eWxlKSkpOworfQorCitTY3JpcHRPYmplY3QgSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7Cisg
ICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hl
ZXQoKTsKKworICAgIFNjcmlwdE9iamVjdCByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRP
YmplY3QoKTsKKyAgICByZXN1bHQuc2V0KCJzZWxlY3RvclRleHQiLCBydWxlLT5zZWxlY3RvclRl
eHQoKSk7CisgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQpIHsKKyAgICAgICAgU2NyaXB0T2JqZWN0
IHBhcmVudFN0eWxlU2hlZXRWYWx1ZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwor
ICAgICAgICByZXN1bHQuc2V0KCJwYXJlbnRTdHlsZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZh
bHVlKTsKKyAgICAgICAgcGFyZW50U3R5bGVTaGVldFZhbHVlLnNldCgiaHJlZiIsIHBhcmVudFN0
eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgfQorICAgIGJvb2wgaXNVc2VyQWdlbnQgPSBwYXJlbnRT
dHlsZVNoZWV0ICYmICFwYXJlbnRTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYXJlbnRTdHls
ZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgpOworICAgIGJvb2wgaXNVc2VyID0gcGFyZW50U3R5bGVT
aGVldCAmJiBwYXJlbnRTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYXJlbnRTdHlsZVNoZWV0
LT5vd25lck5vZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2RvY3VtZW50IjsKKyAgICByZXN1bHQuc2V0
KCJpc1VzZXJBZ2VudCIsIGlzVXNlckFnZW50KTsKKyAgICByZXN1bHQuc2V0KCJpc1VzZXIiLCBp
c1VzZXIpOworICAgIHJlc3VsdC5zZXQoImlzVmlhSW5zcGVjdG9yIiwgcnVsZS0+cGFyZW50U3R5
bGVTaGVldCgpID09IG1faW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSk7CisKKyAgICAvLyBCaW5k
IGVkaXRhYmxlIHNjcmlwdHMgb25seS4KKyAgICBib29sIGJpbmQgPSAhaXNVc2VyQWdlbnQgJiYg
IWlzVXNlcjsKKyAgICByZXN1bHQuc2V0KCJzdHlsZSIsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUocnVs
ZS0+c3R5bGUoKSwgYmluZCkpOworCisgICAgaWYgKGJpbmQpCisgICAgICAgIHJlc3VsdC5zZXQo
ImlkIiwgYmluZFJ1bGUocnVsZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IEluc3BlY3RvckRPTUFnZW50Ojp1bmlxdWVTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGllczsKKyAg
ICBIYXNoU2V0PFN0cmluZz4gZm91bmRQcm9wZXJ0aWVzOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBwcm9wZXJ0
eSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5z
KHByb3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZFByb3BlcnRp
ZXMuYWRkKHByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwor
ICAgIH0KKyAgICByZXR1cm4gcHJvcGVydGllczsKK30KKworVmVjdG9yPFN0cmluZz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBwcm9wZXJ0aWVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFByb3BlcnRpZXM7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICBp
ZiAoZm91bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGluZGl2aWR1YWxQcm9wZXJ0eSkgfHwgc3R5bGUt
PmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJv
cGVydHkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm91bmRQcm9wZXJ0aWVzLmFk
ZChpbmRpdmlkdWFsUHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpbmRpdmlk
dWFsUHJvcGVydHkpOworICAgIH0KKworICAgIHJldHVybiBwcm9wZXJ0aWVzOworfQorCitTdHJp
bmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnNob3J0aGFuZFByaW9yaXR5KENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQoreworICAgIFN0cmlu
ZyBwcmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KHNob3J0aGFuZFByb3BlcnR5
KTsKKyAgICBpZiAocHJpb3JpdHkuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGlu
ZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHN0eWxl
LT5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFBy
b3BlcnR5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcHJpb3JpdHkg
PSBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShpbmRpdmlkdWFsUHJvcGVydHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHByaW9yaXR5OworfQor
Citib29sIEluc3BlY3RvckRPTUFnZW50OjpydWxlQWZmZWN0c05vZGUoQ1NTU3R5bGVSdWxlKiBy
dWxlLCBOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZXMg
PSBub2RlLT5vd25lckRvY3VtZW50KCktPnF1ZXJ5U2VsZWN0b3JBbGwocnVsZS0+c2VsZWN0b3JU
ZXh0KCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG5vZGVzLT5pdGVtKGkpID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTY3JpcHRBcnJheSBJbnNwZWN0b3JET01BZ2VudDo6
dG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YSkKK3sKKyAgICBTY3JpcHRBcnJheSBy
ZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuc2V0KGksIGRhdGFb
aV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaAppbmRleCBkNzMzNGI3Li4wY2RiY2MzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmgKQEAgLTQ1LDYgKzQ1LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBDb250YWluZXJOb2RlOworICAgIGNsYXNzIENTU1J1bGU7CisgICAgY2xhc3MgQ1NTU3R5
bGVEZWNsYXJhdGlvbjsKKyAgICBjbGFzcyBDU1NTdHlsZVJ1bGU7CisgICAgY2xhc3MgQ1NTU3R5
bGVTaGVldDsKICAgICBjbGFzcyBFbGVtZW50OwogICAgIGNsYXNzIEV2ZW50OwogICAgIGNsYXNz
IERvY3VtZW50OwpAQCAtODcsMTMgKzkxLDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBvdGhlcik7
CiAKLSAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQuCisgICAgICAg
IC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIGZyb250ZW5kIGZvciBET00gbm9kZXMgaW5zcGVj
dGlvbi4KICAgICAgICAgdm9pZCBnZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJ
ZCk7CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGxvbmcgY2FsbElkLCBsb25nIGVsZW1lbnRJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICAgdm9p
ZCByZW1vdmVBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwogICAgICAgICB2b2lkIHNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICAgdm9pZCBnZXRFdmVudExp
c3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKIAorICAgICAgICAvLyBN
ZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3IgQ1NTIHN0eWxlcyBpbnNwZWN0aW9u
LgorICAgICAgICB2b2lkIGdldFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wg
YXV0aG9yT25seSk7CisgICAgICAgIHZvaWQgZ2V0SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCk7CisgICAgICAgIHZvaWQgYXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxv
bmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgdm9pZCBzZXRTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJiBjc3NUZXh0KTsKKyAgICAgICAgdm9pZCBzZXRTdHlsZVByb3Bl
cnR5KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CisgICAgICAgIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcgY2Fs
bElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2Fi
bGVkKTsKKyAgICAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVs
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkKTsKKyAgICAg
ICAgdm9pZCBhZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25n
IHNlbGVjdGVkTm9kZUlkKTsKKwogICAgICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBJ
bnNwZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudCk7CiAgICAgICAgIHZvaWQgcmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKQEAgLTExMywx
NiArMTI4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCk7CiAKKyAg
ICAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMuCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8Tm9kZT4sIGxvbmc+IE5vZGVUb0lkTWFwOwogICAgICAgICBsb25nIGJpbmQoTm9kZSog
bm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICAgICAgdm9pZCB1bmJpbmQoTm9kZSog
bm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKIAogICAgICAgICBib29sIHB1c2hEb2N1bWVu
dFRvRnJvbnRlbmQoKTsKIAorICAgICAgICBTY3JpcHRBcnJheSBnZXRNYXRjaGVkQ1NTUnVsZXMo
RWxlbWVudCogZWxlbWVudCwgYm9vbCBhdXRob3JPbmx5KTsKKyAgICAgICAgU2NyaXB0T2JqZWN0
IGdldEF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KTsKICAgICAgICAgU2NyaXB0T2Jq
ZWN0IGJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCk7CiAgICAgICAgIFNjcmlwdEFycmF5IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0
cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KTsKICAgICAgICAgU2NyaXB0QXJyYXkgYnVpbGRBcnJh
eUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9J
ZE1hcCogbm9kZXNNYXApOwotCiAgICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvckV2
ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSk7CiAK
ICAgICAgICAgLy8gV2UgcmVwcmVzZW50IGVtYmVkZGVkIGRvbXMgYXMgYSBwYXJ0IG9mIHRoZSBz
YW1lIGhpZXJhcmNoeS4gSGVuY2Ugd2UgdHJlYXQgY2hpbGRyZW4gb2YgZnJhbWUgb3duZXJzIGRp
ZmZlcmVudGx5LgpAQCAtMTM2LDYgKzE1MywxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgRG9jdW1lbnQqIG1haW5GcmFtZURvY3VtZW50KCkgY29uc3Q7CiAgICAgICAgIFN0cmlu
ZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0OworCisgICAgICAg
IGxvbmcgYmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICAgICAgbG9uZyBiaW5k
UnVsZShDU1NTdHlsZVJ1bGUqKTsKKyAgICAgICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9y
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYmluZCk7CisgICAgICAgIHZvaWQgcG9w
dWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBTY3Jp
cHRPYmplY3QmIHJlc3VsdCk7CisgICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclJ1
bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHVuaXF1ZVN0eWxlUHJv
cGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxv
bmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9y
dGhhbmRQcm9wZXJ0eSk7CisgICAgICAgIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHls
ZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgICAg
IGJvb2wgcnVsZUFmZmVjdHNOb2RlKENTU1N0eWxlUnVsZSosIE5vZGUqKTsKKyAgICAgICAgU2Ny
aXB0QXJyYXkgdG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YSk7CisKICAgICAgICAg
dm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIAogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9m
cm9udGVuZDsKQEAgLTE0Niw2ICsxNzUsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBIYXNoTWFwPGxvbmcsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7CiAgICAgICAgIEhh
c2hTZXQ8bG9uZz4gbV9jaGlsZHJlblJlcXVlc3RlZDsKICAgICAgICAgbG9uZyBtX2xhc3ROb2Rl
SWQ7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24qLCBsb25n
PiBTdHlsZVRvSWRNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NT
U3R5bGVEZWNsYXJhdGlvbj4gPiBJZFRvU3R5bGVNYXA7CisgICAgICAgIFN0eWxlVG9JZE1hcCBt
X3N0eWxlVG9JZDsKKyAgICAgICAgSWRUb1N0eWxlTWFwIG1faWRUb1N0eWxlOworICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVSdWxlKiwgbG9uZz4gUnVsZVRvSWRNYXA7CisgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IElkVG9SdWxlTWFw
OworICAgICAgICBSdWxlVG9JZE1hcCBtX3J1bGVUb0lkOworICAgICAgICBJZFRvUnVsZU1hcCBt
X2lkVG9SdWxlOworICAgICAgICBJZFRvU3R5bGVNYXAgbV9pZFRvRGlzYWJsZWRTdHlsZTsKKyAg
ICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1faW5zcGVjdG9yU3R5bGVTaGVldDsKKworICAg
ICAgICBsb25nIG1fbGFzdFN0eWxlSWQ7CisgICAgICAgIGxvbmcgbV9sYXN0UnVsZUlkOwogICAg
ICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4gbV9kb2N1bWVudHM7CiAgICAgfTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IGFmNTYyMGYuLjU0
YTQ0MTQgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTQ2NSw3
ICs0NjUsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRBcHBseURvbUNoYW5nZShpbnQg
Y2FsbElkLCBib29sIHN1Y2Nlc3MpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIElu
c3BlY3RvckZyb250ZW5kOjpkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoaW50IGNhbGxJZCwg
aW50IG5vZGVJZCwgU2NyaXB0QXJyYXkmIGxpc3RlbmVyc0FycmF5KQordm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGludCBjYWxsSWQsIGludCBub2Rl
SWQsIGNvbnN0IFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJheSkKIHsKICAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlIik7CkBAIC00
NzUsNiArNDc1LDkxIEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkLCBTY3JpCiAgICAgZnVuY3Rpb24uY2Fs
bCgpOwogfQogCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRTdHlsZXMobG9uZyBjYWxs
SWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZXMpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoImRpZEdldFN0eWxlcyIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KGNhbGxJZCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3R5bGVzKTsKKyAgICBmdW5j
dGlvbi5jYWxsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldENvbXB1dGVk
U3R5bGUobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZSkKK3sKKyAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0Q29tcHV0ZWRTdHlsZSIpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQoc3R5bGUpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6ZGlkR2V0SW5saW5lU3R5bGUobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBz
dHlsZSkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3Is
ICJkaXNwYXRjaCIpOyAKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0SW5saW5l
U3R5bGUiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEFwcGx5U3R5bGVUZXh0KGludCBjYWxsSWQsIGJvb2wg
c3VjY2VzcywgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlLCBjb25zdCBTY3JpcHRBcnJheSYgY2hh
bmdlZFByb3BlcnRpZXMpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRp
ZEFwcGx5U3R5bGVUZXh0Iik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsK
KyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzdWNjZXNzKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChzdHlsZSk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2hhbmdlZFBy
b3BlcnRpZXMpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6ZGlkU2V0U3R5bGVUZXh0KGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAK
KyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkU2V0U3R5bGVUZXh0Iik7CisgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dChzdWNjZXNzKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmRpZFNldFN0eWxlUHJvcGVydHkoaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKQorewor
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRTZXRTdHlsZVByb3BlcnR5Iik7
CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChzdWNjZXNzKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChpbnQgY2FsbElkLCBjb25zdCBT
Y3JpcHRWYWx1ZSYgc3R5bGUpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
ImRpZFRvZ2dsZVN0eWxlRW5hYmxlZCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNh
bGxJZCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3R5bGUpOworICAgIGZ1bmN0aW9u
LmNhbGwoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0UnVsZVNlbGVjdG9y
KGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0
c05vZGUpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZFNldFJ1bGVT
ZWxlY3RvciIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CisgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQocnVsZSk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
c2VsZWN0b3JBZmZlY3RzTm9kZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpkaWRBZGRSdWxlKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVl
JiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0c05vZGUpCit7CisgICAgU2NyaXB0RnVuY3Rpb25D
YWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoImRpZEFkZFJ1bGUiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHJ1bGUpOworICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KHNlbGVjdG9yQWZmZWN0c05vZGUpOworICAgIGZ1bmN0aW9uLmNh
bGwoKTsKK30KKwogI2lmIEVOQUJMRShXT1JLRVJTKQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkQ3JlYXRlV29ya2VyKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIpCiB7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCA4NjFhNmY3Li42MWMxYThj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTEyNSw5ICsxMjUsMTkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGF0dHJpYnV0ZXNVcGRhdGVkKGlu
dCBpZCwgY29uc3QgU2NyaXB0QXJyYXkmIGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lkIGRpZEdl
dENoaWxkTm9kZXMoaW50IGNhbGxJZCk7CiAgICAgICAgIHZvaWQgZGlkQXBwbHlEb21DaGFuZ2Uo
aW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKTsKLSAgICAgICAgdm9pZCBkaWRHZXRFdmVudExpc3Rl
bmVyc0Zvck5vZGUoaW50IGNhbGxJZCwgaW50IG5vZGVJZCwgU2NyaXB0QXJyYXkmIGxpc3RlbmVy
c0FycmF5KTsKKyAgICAgICAgdm9pZCBkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoaW50IGNh
bGxJZCwgaW50IG5vZGVJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGxpc3RlbmVyc0FycmF5KTsKICAg
ICAgICAgdm9pZCBkaWRSZW1vdmVOb2RlKGludCBjYWxsSWQsIGludCBub2RlSWQpOwogCisgICAg
ICAgIHZvaWQgZGlkR2V0U3R5bGVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5
bGVzKTsKKyAgICAgICAgdm9pZCBkaWRHZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgY29uc3Qg
U2NyaXB0VmFsdWUmIHN0eWxlKTsKKyAgICAgICAgdm9pZCBkaWRHZXRDb21wdXRlZFN0eWxlKGxv
bmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5bGUpOworICAgICAgICB2b2lkIGRpZEFw
cGx5U3R5bGVUZXh0KGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcywgY29uc3QgU2NyaXB0VmFsdWUm
IHN0eWxlLCBjb25zdCBTY3JpcHRBcnJheSYgY2hhbmdlZFByb3BlcnRpZXMpOworICAgICAgICB2
b2lkIGRpZFNldFN0eWxlVGV4dChpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpOworICAgICAgICB2
b2lkIGRpZFNldFN0eWxlUHJvcGVydHkoaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKTsKKyAgICAg
ICAgdm9pZCBkaWRUb2dnbGVTdHlsZUVuYWJsZWQoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0VmFs
dWUmIHN0eWxlKTsKKyAgICAgICAgdm9pZCBkaWRTZXRSdWxlU2VsZWN0b3IoaW50IGNhbGxJZCwg
Y29uc3QgU2NyaXB0VmFsdWUmIHJ1bGUsIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZSk7CisgICAg
ICAgIHZvaWQgZGlkQWRkUnVsZShpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgcnVsZSwg
Ym9vbCBzZWxlY3RvckFmZmVjdHNOb2RlKTsKKwogICAgICAgICB2b2lkIHRpbWVsaW5lUHJvZmls
ZXJXYXNTdGFydGVkKCk7CiAgICAgICAgIHZvaWQgdGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQo
KTsKICAgICAgICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKGNvbnN0IFNjcmlwdE9iamVjdCYp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDgzNGY1MjcuLjYy
ZmVkNzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTUyNiw5
ICs1MjYsMjYgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbihw
YXlsb2FkKQogICAgIHRoaXMuaW5qZWN0ZWRTY3JpcHRJZCA9IHBheWxvYWQuaW5qZWN0ZWRTY3Jp
cHRJZDsKICAgICB0aGlzLndpZHRoID0gcGF5bG9hZC53aWR0aDsKICAgICB0aGlzLmhlaWdodCA9
IHBheWxvYWQuaGVpZ2h0OwotICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnRpZXMgPSBwYXlsb2Fk
Ll9fZGlzYWJsZWRQcm9wZXJ0aWVzOwotICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVz
ID0gcGF5bG9hZC5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXM7Ci0gICAgdGhpcy5fX2Rpc2FibGVk
UHJvcGVydHlQcmlvcml0aWVzID0gcGF5bG9hZC5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVz
OworICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnRpZXMgPSB7fTsKKyAgICB0aGlzLl9fZGlzYWJs
ZWRQcm9wZXJ0eVZhbHVlcyA9IHt9OworICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5UHJpb3Jp
dGllcyA9IHt9OworICAgIGlmIChwYXlsb2FkLmRpc2FibGVkKSB7CisgICAgICAgIHZhciBkaXNh
YmxlZFByb3BlcnRpZXMgPSBwYXlsb2FkLmRpc2FibGVkLnByb3BlcnRpZXM7CisgICAgICAgIHZh
ciBzaG9ydGhhbmRWYWx1ZXMgPSBwYXlsb2FkLmRpc2FibGVkLnNob3J0aGFuZFZhbHVlczsKKyAg
ICAgICAgZm9yICh2YXIgbmFtZSBpbiBzaG9ydGhhbmRWYWx1ZXMpIHsKKyAgICAgICAgICAgIHRo
aXMuX19kaXNhYmxlZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlOworICAgICAgICAgICAgdGhpcy5f
X2Rpc2FibGVkUHJvcGVydHlWYWx1ZXNbbmFtZV0gPSBzaG9ydGhhbmRWYWx1ZXNbbmFtZV07Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNhYmxlZFByb3BlcnRpZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBkaXNhYmxlZFByb3BlcnR5ID0gZGlzYWJs
ZWRQcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAgaWYgKGRpc2FibGVkUHJvcGVydHkuc2hvcnRo
YW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIG5hbWUgPSBk
aXNhYmxlZFByb3BlcnR5Lm5hbWU7CisgICAgICAgICAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0
aWVzW25hbWVdID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5VmFs
dWVzW25hbWVdID0gZGlzYWJsZWRQcm9wZXJ0eS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX19k
aXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1tuYW1lXSA9IGRpc2FibGVkUHJvcGVydHkucHJpb3Jp
dHk7CisgICAgICAgIH0KKyAgICB9CiAgICAgdGhpcy51bmlxdWVTdHlsZVByb3BlcnRpZXMgPSBw
YXlsb2FkLnVuaXF1ZVN0eWxlUHJvcGVydGllczsKICAgICB0aGlzLl9zaG9ydGhhbmRWYWx1ZXMg
PSBwYXlsb2FkLnNob3J0aGFuZFZhbHVlczsKICAgICB0aGlzLl9wcm9wZXJ0eU1hcCA9IHt9OwpA
QCAtNjk3LDQgKzcxNCwxNSBAQCBXZWJJbnNwZWN0b3IuZGlkUGVyZm9ybVNlYXJjaCA9IFdlYklu
c3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkQXBwbHlE
b21DaGFuZ2UgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5z
cGVjdG9yLmRpZFJlbW92ZUF0dHJpYnV0ZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNz
Q2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkU2V0VGV4dE5vZGVWYWx1ZSA9IFdlYkluc3BlY3Rv
ci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkUmVtb3ZlTm9kZSA9
IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlk
R2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3ND
YWxsYmFjazsKKworV2ViSW5zcGVjdG9yLmRpZEdldFN0eWxlcyA9IFdlYkluc3BlY3Rvci5DYWxs
YmFjay5wcm9jZXNzQ2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkR2V0SW5saW5lU3R5bGUgPSBX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZEdl
dENvbXB1dGVkU3R5bGUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwor
V2ViSW5zcGVjdG9yLmRpZEFwcGx5U3R5bGVUZXh0ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnBy
b2Nlc3NDYWxsYmFjazsKK1dlYkluc3BlY3Rvci5kaWRTZXRTdHlsZVRleHQgPSBXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZFNldFN0eWxlUHJv
cGVydHkgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVj
dG9yLmRpZFRvZ2dsZVN0eWxlRW5hYmxlZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNz
Q2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkU2V0UnVsZVNlbGVjdG9yID0gV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKK1dlYkluc3BlY3Rvci5kaWRBZGRSdWxlID0gV2Vi
SW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKaW5kZXggZmU3YWU1My4uOGNh
MGI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKQEAgLTEyNDIsNSArMTI0MiwzIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVs
ZW1lbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFRyZWVFbGVtZW50LnByb3RvdHlwZTsKLQotV2Vi
SW5zcGVjdG9yLmRpZFJlbW92ZU5vZGUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0Nh
bGxiYWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0Lmpz
CmluZGV4IDhkOGZhODguLjhjN2Q0OGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTkxLDM3OCArOTEsNiBAQCBJbmplY3RlZFNjcmlwdC5k
aXNwYXRjaCA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGFyZ3MsIGNhbGxJZCkKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1JbmplY3RlZFNjcmlwdC5nZXRTdHlsZXMgPSBmdW5jdGlvbihub2RlSWQs
IGF1dGhvck9ubHkpCi17Ci0gICAgdmFyIG5vZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklk
KG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFy
IGRlZmF1bHRWaWV3ID0gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OwotICAgIHZhciBt
YXRjaGVkUnVsZXMgPSBkZWZhdWx0Vmlldy5nZXRNYXRjaGVkQ1NTUnVsZXMobm9kZSwgIiIsIGF1
dGhvck9ubHkpOwotICAgIHZhciBtYXRjaGVkQ1NTUnVsZXMgPSBbXTsKLSAgICBmb3IgKHZhciBp
ID0gMDsgbWF0Y2hlZFJ1bGVzICYmIGkgPCBtYXRjaGVkUnVsZXMubGVuZ3RoOyArK2kpCi0gICAg
ICAgIG1hdGNoZWRDU1NSdWxlcy5wdXNoKEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKG1h
dGNoZWRSdWxlc1tpXSkpOwotCi0gICAgdmFyIHN0eWxlQXR0cmlidXRlcyA9IHt9OwotICAgIHZh
ciBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzOwotICAgIGZvciAodmFyIGkgPSAwOyBhdHRy
aWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhdHRy
aWJ1dGVzW2ldLnN0eWxlKQotICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzW2F0dHJpYnV0ZXNb
aV0ubmFtZV0gPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUoYXR0cmlidXRlc1tpXS5z
dHlsZSwgdHJ1ZSk7Ci0gICAgfQotICAgIHZhciByZXN1bHQgPSB7fTsKLSAgICByZXN1bHQuaW5s
aW5lU3R5bGUgPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUobm9kZS5zdHlsZSwgdHJ1
ZSk7Ci0gICAgcmVzdWx0LmNvbXB1dGVkU3R5bGUgPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXpl
U3R5bGUoZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKSk7Ci0gICAgcmVzdWx0Lm1h
dGNoZWRDU1NSdWxlcyA9IG1hdGNoZWRDU1NSdWxlczsKLSAgICByZXN1bHQuc3R5bGVBdHRyaWJ1
dGVzID0gc3R5bGVBdHRyaWJ1dGVzOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUluamVjdGVk
U2NyaXB0LmdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihub2RlSWQpCi17Ci0gICAgdmFyIG5v
ZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9zZXJpYWxp
emVTdHlsZShub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShu
b2RlKSk7Ci19Ci0KLUluamVjdGVkU2NyaXB0LmdldElubGluZVN0eWxlID0gZnVuY3Rpb24obm9k
ZUlkKQotewotICAgIHZhciBub2RlID0gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQp
OwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUobm9kZS5zdHlsZSwgdHJ1ZSk7Ci19Ci0KLUluamVj
dGVkU2NyaXB0LmFwcGx5U3R5bGVUZXh0ID0gZnVuY3Rpb24oc3R5bGVJZCwgc3R5bGVUZXh0LCBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgdmFyIHN0eWxlID0gSW5qZWN0ZWRTY3JpcHQuX3N0eWxlc1tz
dHlsZUlkXTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2
YXIgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVUZXh0Lmxlbmd0aDsKLQotICAgIC8vIENyZWF0ZSBh
IG5ldyBlbGVtZW50IHRvIHBhcnNlIHRoZSB1c2VyIGlucHV0IENTUy4KLSAgICB2YXIgcGFyc2VF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIHBhcnNlRWxlbWVu
dC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgc3R5bGVUZXh0KTsKLQotICAgIHZhciB0ZW1wU3R5bGUg
PSBwYXJzZUVsZW1lbnQuc3R5bGU7Ci0gICAgaWYgKHRlbXBTdHlsZS5sZW5ndGggfHwgIXN0eWxl
VGV4dExlbmd0aCkgewotICAgICAgICAvLyBUaGUgaW5wdXQgd2FzIHBhcnNhYmxlIG9yIHRoZSB1
c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZQotICAgICAgICAvLyBvcmlnaW5h
bCBwcm9wZXJ0eSBmcm9tIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLiBJZiB0aGlzIHJlcHJl
c2VudHMKLSAgICAgICAgLy8gYSBzaG9ydGhhbmQgcmVtb3ZlIGFsbCB0aGUgbG9uZ2hhbmQgcHJv
cGVydGllcy4KLSAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgIHZhciBsb25naGFuZFByb3BlcnRpZXMgPSBJbmplY3RlZFNj
cmlwdC5fZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZFByb3BlcnRpZXMubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wZXJ0aWVz
W2ldKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhhdCB0aGUgcHJv
cGVydHkgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLgotICAgIGlmICghc3R5bGVUZXh0TGVuZ3Ro
KQotICAgICAgICByZXR1cm4gW251bGwsIFtwcm9wZXJ0eU5hbWVdXTsKLQotICAgIGlmICghdGVt
cFN0eWxlLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSXRlcmF0ZSBv
ZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVzdCBlbGVtZW50J3Mgc3R5bGUgZGVjbGFyYXRpb24g
YW5kCi0gICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIFdlIHRh
a2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCi0gICAgdmFyIGZvdW5kU2hvcnRoYW5kcyA9IHt9
OwotICAgIHZhciBjaGFuZ2VkUHJvcGVydGllcyA9IFtdOwotICAgIHZhciB1bmlxdWVQcm9wZXJ0
aWVzID0gSW5qZWN0ZWRTY3JpcHQuX2dldFVuaXF1ZVN0eWxlUHJvcGVydGllcyh0ZW1wU3R5bGUp
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pcXVlUHJvcGVydGllcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICB2YXIgbmFtZSA9IHVuaXF1ZVByb3BlcnRpZXNbaV07Ci0gICAgICAgIHZhciBz
aG9ydGhhbmQgPSB0ZW1wU3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0KLSAgICAg
ICAgaWYgKHNob3J0aGFuZCAmJiBzaG9ydGhhbmQgaW4gZm91bmRTaG9ydGhhbmRzKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHNob3J0aGFuZCkgewotICAgICAgICAgICAg
dmFyIHZhbHVlID0gSW5qZWN0ZWRTY3JpcHQuX2dldFNob3J0aGFuZFZhbHVlKHRlbXBTdHlsZSwg
c2hvcnRoYW5kKTsKLSAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IEluamVjdGVkU2NyaXB0Ll9n
ZXRTaG9ydGhhbmRQcmlvcml0eSh0ZW1wU3R5bGUsIHNob3J0aGFuZCk7Ci0gICAgICAgICAgICBm
b3VuZFNob3J0aGFuZHNbc2hvcnRoYW5kXSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB2YXIgdmFsdWUgPSB0ZW1wU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKLSAg
ICAgICAgICAgIHZhciBwcmlvcml0eSA9IHRlbXBTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5h
bWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0eSBvbiB0aGUgcmVh
bCBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoKHNob3J0aGFu
ZCB8fCBuYW1lKSwgdmFsdWUsIHByaW9yaXR5KTsKLSAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMu
cHVzaChzaG9ydGhhbmQgfHwgbmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBbSW5qZWN0ZWRTY3Jp
cHQuX3NlcmlhbGl6ZVN0eWxlKHN0eWxlLCB0cnVlKSwgY2hhbmdlZFByb3BlcnRpZXNdOwotfQot
Ci1JbmplY3RlZFNjcmlwdC5zZXRTdHlsZVRleHQgPSBmdW5jdGlvbihzdHlsZSwgY3NzVGV4dCkK
LXsKLSAgICBzdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
SW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVFbmFibGVkID0gZnVuY3Rpb24oc3R5bGVJZCwgcHJv
cGVydHlOYW1lLCBkaXNhYmxlZCkKLXsKLSAgICB2YXIgc3R5bGUgPSBJbmplY3RlZFNjcmlwdC5f
c3R5bGVzW3N0eWxlSWRdOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICBpZiAoIXN0eWxlLl9fZGlzYWJsZWRQcm9w
ZXJ0eVZhbHVlcyB8fCAhc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcykgewotICAg
ICAgICAgICAgc3R5bGUuX19kaXNhYmxlZFByb3BlcnRpZXMgPSB7fTsKLSAgICAgICAgICAgIHN0
eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlcyA9IHt9OwotICAgICAgICAgICAgc3R5bGUuX19k
aXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcyA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgc3R5
bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV0gPSBzdHlsZS5nZXRQcm9w
ZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0
eVByaW9yaXRpZXNbcHJvcGVydHlOYW1lXSA9IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkocHJv
cGVydHlOYW1lKTsKLQotICAgICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgdmFyIGxvbmdoYW5kUHJvcGVydGllcyA9IEluamVj
dGVkU2NyaXB0Ll9nZXRMb25naGFuZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW2xvbmdo
YW5kUHJvcGVydGllc1tpXV0gPSB0cnVlOwotICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZVBy
b3BlcnR5KGxvbmdoYW5kUHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllc1twcm9wZXJ0eU5h
bWVdID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVz
ICYmIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pIHsKLSAgICAgICAg
dmFyIHZhbHVlID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07
Ci0gICAgICAgIHZhciBwcmlvcml0eSA9IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRp
ZXNbcHJvcGVydHlOYW1lXTsKLQotICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBwcmlvcml0eSk7Ci0gICAgICAgIGRlbGV0ZSBzdHlsZS5fX2Rpc2FibGVkUHJv
cGVydGllc1twcm9wZXJ0eU5hbWVdOwotICAgICAgICBkZWxldGUgc3R5bGUuX19kaXNhYmxlZFBy
b3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07Ci0gICAgICAgIGRlbGV0ZSBzdHlsZS5fX2Rpc2Fi
bGVkUHJvcGVydHlQcmlvcml0aWVzW3Byb3BlcnR5TmFtZV07Ci0gICAgfQotICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUoc3R5bGUsIHRydWUpOwotfQotCi1JbmplY3Rl
ZFNjcmlwdC5hcHBseVN0eWxlUnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQs
IHNlbGVjdGVkTm9kZUlkKQotewotICAgIHZhciBydWxlID0gSW5qZWN0ZWRTY3JpcHQuX3N0eWxl
UnVsZXNbcnVsZUlkXTsKLSAgICBpZiAoIXJ1bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHZhciBzZWxlY3RlZE5vZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKHNlbGVjdGVk
Tm9kZUlkKTsKLQotICAgIHRyeSB7Ci0gICAgICAgIHZhciBzdHlsZXNoZWV0ID0gcnVsZS5wYXJl
bnRTdHlsZVNoZWV0OwotICAgICAgICBzdHlsZXNoZWV0LmFkZFJ1bGUobmV3Q29udGVudCk7Ci0g
ICAgICAgIHZhciBuZXdSdWxlID0gc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1
bGVzLmxlbmd0aCAtIDFdOwotICAgICAgICBuZXdSdWxlLnN0eWxlLmNzc1RleHQgPSBydWxlLnN0
eWxlLmNzc1RleHQ7Ci0KLSAgICAgICAgdmFyIHBhcmVudFJ1bGVzID0gc3R5bGVzaGVldC5jc3NS
dWxlczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRSdWxlcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgaWYgKHBhcmVudFJ1bGVzW2ldID09PSBydWxlKSB7Ci0gICAgICAg
ICAgICAgICAgcnVsZS5wYXJlbnRTdHlsZVNoZWV0LnJlbW92ZVJ1bGUoaSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
W0luamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKG5ld1J1bGUpLCBJbmplY3RlZFNjcmlwdC5f
ZG9lc1NlbGVjdG9yQWZmZWN0Tm9kZShuZXdDb250ZW50LCBzZWxlY3RlZE5vZGUpXTsKLSAgICB9
IGNhdGNoKGUpIHsKLSAgICAgICAgLy8gUmVwb3J0IGludmFsaWQgc3ludGF4LgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1JbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9y
ID0gZnVuY3Rpb24obmV3Q29udGVudCwgc2VsZWN0ZWROb2RlSWQpCi17Ci0gICAgdmFyIHNlbGVj
dGVkTm9kZSA9IEluamVjdGVkU2NyaXB0Ll9ub2RlRm9ySWQoc2VsZWN0ZWROb2RlSWQpOwotICAg
IGlmICghc2VsZWN0ZWROb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIG93bmVy
RG9jdW1lbnQgPSBzZWxlY3RlZE5vZGUub3duZXJEb2N1bWVudDsKLQotICAgIHZhciBzdHlsZXNo
ZWV0ID0gb3duZXJEb2N1bWVudC5fX3N0eWxlc2hlZXQ7Ci0gICAgaWYgKCFzdHlsZXNoZWV0KSB7
Ci0gICAgICAgIHZhciBoZWFkID0gb3duZXJEb2N1bWVudC5oZWFkOwotICAgICAgICB2YXIgc3R5
bGVFbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwotICAgICAg
ICBzdHlsZUVsZW1lbnQudHlwZSA9ICJ0ZXh0L2NzcyI7Ci0gICAgICAgIGhlYWQuYXBwZW5kQ2hp
bGQoc3R5bGVFbGVtZW50KTsKLSAgICAgICAgc3R5bGVzaGVldCA9IG93bmVyRG9jdW1lbnQuc3R5
bGVTaGVldHNbb3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGggLSAxXTsKLSAgICAgICAg
b3duZXJEb2N1bWVudC5fX3N0eWxlc2hlZXQgPSBzdHlsZXNoZWV0OwotICAgIH0KLQotICAgIHRy
eSB7Ci0gICAgICAgIHN0eWxlc2hlZXQuYWRkUnVsZShuZXdDb250ZW50KTsKLSAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIC8vIEludmFsaWQgU3ludGF4IGZvciBhIFNlbGVjdG9yCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YXIgcnVsZSA9IHN0eWxlc2hlZXQuY3NzUnVs
ZXNbc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggLSAxXTsKLSAgICBydWxlLl9faXNWaWFJbnNw
ZWN0b3IgPSB0cnVlOwotCi0gICAgcmV0dXJuIFsgSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVJ1
bGUocnVsZSksIEluamVjdGVkU2NyaXB0Ll9kb2VzU2VsZWN0b3JBZmZlY3ROb2RlKG5ld0NvbnRl
bnQsIHNlbGVjdGVkTm9kZSkgXTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2RvZXNTZWxlY3RvckFm
ZmVjdE5vZGUgPSBmdW5jdGlvbihzZWxlY3RvclRleHQsIG5vZGUpCi17Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIG5vZGVzID0gbm9kZS5vd25lckRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JUZXh0KTsKLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChub2Rlc1tpXSA9PT0gbm9kZSkg
ewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1JbmplY3RlZFNjcmlwdC5zZXRTdHlsZVByb3BlcnR5ID0gZnVuY3Rpb24o
c3R5bGVJZCwgbmFtZSwgdmFsdWUpCi17Ci0gICAgdmFyIHN0eWxlID0gSW5qZWN0ZWRTY3JpcHQu
X3N0eWxlc1tzdHlsZUlkXTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBzdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgIiIpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1JbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplUnVsZSA9IGZ1bmN0aW9uKHJ1bGUp
Ci17Ci0gICAgdmFyIHBhcmVudFN0eWxlU2hlZXQgPSBydWxlLnBhcmVudFN0eWxlU2hlZXQ7Ci0K
LSAgICB2YXIgcnVsZVZhbHVlID0ge307Ci0gICAgcnVsZVZhbHVlLnNlbGVjdG9yVGV4dCA9IHJ1
bGUuc2VsZWN0b3JUZXh0OwotICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7Ci0gICAgICAgIHJ1
bGVWYWx1ZS5wYXJlbnRTdHlsZVNoZWV0ID0ge307Ci0gICAgICAgIHJ1bGVWYWx1ZS5wYXJlbnRT
dHlsZVNoZWV0LmhyZWYgPSBwYXJlbnRTdHlsZVNoZWV0LmhyZWY7Ci0gICAgfQotICAgIHJ1bGVW
YWx1ZS5pc1VzZXJBZ2VudCA9IHBhcmVudFN0eWxlU2hlZXQgJiYgIXBhcmVudFN0eWxlU2hlZXQu
b3duZXJOb2RlICYmICFwYXJlbnRTdHlsZVNoZWV0LmhyZWY7Ci0gICAgcnVsZVZhbHVlLmlzVXNl
ciA9IHBhcmVudFN0eWxlU2hlZXQgJiYgcGFyZW50U3R5bGVTaGVldC5vd25lck5vZGUgJiYgcGFy
ZW50U3R5bGVTaGVldC5vd25lck5vZGUubm9kZU5hbWUgPT0gIiNkb2N1bWVudCI7Ci0gICAgcnVs
ZVZhbHVlLmlzVmlhSW5zcGVjdG9yID0gISFydWxlLl9faXNWaWFJbnNwZWN0b3I7Ci0KLSAgICAv
LyBCaW5kIGVkaXRhYmxlIHNjcmlwdHMgb25seS4KLSAgICB2YXIgZG9CaW5kID0gIXJ1bGVWYWx1
ZS5pc1VzZXJBZ2VudCAmJiAhcnVsZVZhbHVlLmlzVXNlcjsKLSAgICBydWxlVmFsdWUuc3R5bGUg
PSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUocnVsZS5zdHlsZSwgZG9CaW5kKTsKLQot
ICAgIGlmIChkb0JpbmQpIHsKLSAgICAgICAgaWYgKCFydWxlLmlkKSB7Ci0gICAgICAgICAgICBy
dWxlLmlkID0gSW5qZWN0ZWRTY3JpcHQuX2xhc3RTdHlsZVJ1bGVJZCsrOwotICAgICAgICAgICAg
SW5qZWN0ZWRTY3JpcHQuX3N0eWxlUnVsZXNbcnVsZS5pZF0gPSBydWxlOwotICAgICAgICB9Ci0g
ICAgICAgIHJ1bGVWYWx1ZS5pZCA9IHJ1bGUuaWQ7Ci0gICAgICAgIHJ1bGVWYWx1ZS5pbmplY3Rl
ZFNjcmlwdElkID0gaW5qZWN0ZWRTY3JpcHRJZDsKLSAgICB9Ci0gICAgcmV0dXJuIHJ1bGVWYWx1
ZTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlID0gZnVuY3Rpb24oc3R5bGUs
IGRvQmluZCkKLXsKLSAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgcmVzdWx0LndpZHRoID0gc3R5
bGUud2lkdGg7Ci0gICAgcmVzdWx0LmhlaWdodCA9IHN0eWxlLmhlaWdodDsKLSAgICByZXN1bHQu
X19kaXNhYmxlZFByb3BlcnRpZXMgPSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllczsKLSAgICBy
ZXN1bHQuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5
VmFsdWVzOwotICAgIHJlc3VsdC5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzID0gc3R5bGUu
X19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllczsKLSAgICByZXN1bHQucHJvcGVydGllcyA9IFtd
OwotICAgIHJlc3VsdC5zaG9ydGhhbmRWYWx1ZXMgPSB7fTsKLSAgICB2YXIgZm91bmRTaG9ydGhh
bmRzID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZS5sZW5ndGg7ICsraSkgewot
ICAgICAgICB2YXIgcHJvcGVydHkgPSB7fTsKLSAgICAgICAgdmFyIG5hbWUgPSBzdHlsZVtpXTsK
LSAgICAgICAgcHJvcGVydHkubmFtZSA9IG5hbWU7Ci0gICAgICAgIHByb3BlcnR5LnByaW9yaXR5
ID0gc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLSAgICAgICAgcHJvcGVydHkuaW1w
bGljaXQgPSBzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSk7Ci0gICAgICAgIHZhciBzaG9y
dGhhbmQgPSAgc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0gICAgICAgIHByb3Bl
cnR5LnNob3J0aGFuZCA9IHNob3J0aGFuZDsKLSAgICAgICAgaWYgKHNob3J0aGFuZCAmJiAhKHNo
b3J0aGFuZCBpbiBmb3VuZFNob3J0aGFuZHMpKSB7Ci0gICAgICAgICAgICBmb3VuZFNob3J0aGFu
ZHNbc2hvcnRoYW5kXSA9IHRydWU7Ci0gICAgICAgICAgICByZXN1bHQuc2hvcnRoYW5kVmFsdWVz
W3Nob3J0aGFuZF0gPSBJbmplY3RlZFNjcmlwdC5fZ2V0U2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNo
b3J0aGFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydHkudmFsdWUgPSBzdHlsZS5nZXRQ
cm9wZXJ0eVZhbHVlKG5hbWUpOwotICAgICAgICByZXN1bHQucHJvcGVydGllcy5wdXNoKHByb3Bl
cnR5KTsKLSAgICB9Ci0gICAgcmVzdWx0LnVuaXF1ZVN0eWxlUHJvcGVydGllcyA9IEluamVjdGVk
U2NyaXB0Ll9nZXRVbmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5bGUpOwotCi0gICAgaWYgKGRvQmlu
ZCkgewotICAgICAgICBpZiAoIXN0eWxlLmlkKSB7Ci0gICAgICAgICAgICBzdHlsZS5pZCA9IElu
amVjdGVkU2NyaXB0Ll9sYXN0U3R5bGVJZCsrOwotICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQu
X3N0eWxlc1tzdHlsZS5pZF0gPSBzdHlsZTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuaWQg
PSBzdHlsZS5pZDsKLSAgICAgICAgcmVzdWx0LmluamVjdGVkU2NyaXB0SWQgPSBpbmplY3RlZFNj
cmlwdElkOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbmplY3RlZFNjcmlwdC5f
Z2V0VW5pcXVlU3R5bGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24oc3R5bGUpCi17Ci0gICAgdmFyIHBy
b3BlcnRpZXMgPSBbXTsKLSAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307Ci0KLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0
eSA9IHN0eWxlW2ldOwotICAgICAgICBpZiAocHJvcGVydHkgaW4gZm91bmRQcm9wZXJ0aWVzKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvdW5kUHJvcGVydGllc1twcm9wZXJ0eV0g
PSB0cnVlOwotICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOwotICAgIH0KLQotICAg
IHJldHVybiBwcm9wZXJ0aWVzOwotfQotCi0KLUluamVjdGVkU2NyaXB0Ll9nZXRMb25naGFuZFBy
b3BlcnRpZXMgPSBmdW5jdGlvbihzdHlsZSwgc2hvcnRoYW5kUHJvcGVydHkpCi17Ci0gICAgdmFy
IHByb3BlcnRpZXMgPSBbXTsKLSAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307Ci0KLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBpbmRp
dmlkdWFsUHJvcGVydHkgPSBzdHlsZVtpXTsKLSAgICAgICAgaWYgKGluZGl2aWR1YWxQcm9wZXJ0
eSBpbiBmb3VuZFByb3BlcnRpZXMgfHwgc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZp
ZHVhbFByb3BlcnR5KSAhPT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZm91bmRQcm9wZXJ0aWVzW2luZGl2aWR1YWxQcm9wZXJ0eV0gPSB0cnVlOwot
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2goaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcHJvcGVydGllczsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2dldFNob3J0aGFuZFZh
bHVlID0gZnVuY3Rpb24oc3R5bGUsIHNob3J0aGFuZFByb3BlcnR5KQotewotICAgIHZhciB2YWx1
ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoc2hvcnRoYW5kUHJvcGVydHkpOwotICAgIGlmICgh
dmFsdWUpIHsKLSAgICAgICAgLy8gU29tZSBzaG9ydGhhbmRzIChsaWtlIGJvcmRlcikgcmV0dXJu
IGEgbnVsbCB2YWx1ZSwgc28gY29tcHV0ZSBhIHNob3J0aGFuZCB2YWx1ZS4KLSAgICAgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU4MjMgaXMgZml4ZWQuCi0KLSAgICAgICAgdmFyIGZvdW5kUHJvcGVydGllcyA9IHt9
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGVbaV07Ci0gICAgICAgICAgICBp
ZiAoaW5kaXZpZHVhbFByb3BlcnR5IGluIGZvdW5kUHJvcGVydGllcyB8fCBzdHlsZS5nZXRQcm9w
ZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9PSBzaG9ydGhhbmRQcm9wZXJ0eSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdmFyIGluZGl2aWR1YWxW
YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKLSAgICAg
ICAgICAgIGlmIChzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQoaW5kaXZpZHVhbFByb3BlcnR5KSB8
fCBpbmRpdmlkdWFsVmFsdWUgPT09ICJpbml0aWFsIikKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgZm91bmRQcm9wZXJ0aWVzW2luZGl2aWR1YWxQcm9wZXJ0eV0gPSB0
cnVlOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHZhbHVlID0g
IiI7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGgpCi0gICAgICAgICAgICAgICAg
dmFsdWUgKz0gIiAiOwotICAgICAgICAgICAgdmFsdWUgKz0gaW5kaXZpZHVhbFZhbHVlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuX2dl
dFNob3J0aGFuZFByaW9yaXR5ID0gZnVuY3Rpb24oc3R5bGUsIHNob3J0aGFuZFByb3BlcnR5KQot
ewotICAgIHZhciBwcmlvcml0eSA9IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoc2hvcnRoYW5k
UHJvcGVydHkpOwotICAgIGlmICghcHJpb3JpdHkpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzdHlsZS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGluZGl2aWR1YWxQcm9w
ZXJ0eSA9IHN0eWxlW2ldOwotICAgICAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5U2hvcnRo
YW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT09IHNob3J0aGFuZFByb3BlcnR5KQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJpb3JpdHkgPSBzdHlsZS5nZXRQcm9wZXJ0
eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJpb3JpdHk7Ci19Ci0KIEluamVjdGVkU2NyaXB0Lmdl
dFByb3RvdHlwZXMgPSBmdW5jdGlvbihub2RlSWQpCiB7CiAgICAgdmFyIG5vZGUgPSBJbmplY3Rl
ZFNjcmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcwppbmRleCA3NjdkYTFmLi43MzVjZTk0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpz
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMK
QEAgLTMwLDcgKzMwLDYgQEAgV2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZSA9IGZ1bmN0
aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIk1ldHJpY3MiKSk7CiAgICAgdGhpcy5faW5saW5lU3R5bGVJZCA9IG51
bGw7Ci0gICAgdGhpcy5faW5saW5lU3R5bGVJbmplY3RlZFNjcmlwdElkID0gbnVsbDsKIH0KIAog
V2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CkBAIC01MywxNSAr
NTIsMTQgQEAgV2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICB2YXIgc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5w
YXJzZVN0eWxlKHN0eWxlUGF5bG9hZCk7CiAgICAgICAgICAgICBzZWxmLl91cGRhdGUoc3R5bGUp
OwogICAgICAgICB9OwotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQobm9kZS5pbmpl
Y3RlZFNjcmlwdElkKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUuaWQsIGNhbGxiYWNrKTsKKyAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0eWxlKFdlYkluc3BlY3Rvci5DYWxsYmFj
ay53cmFwKGNhbGxiYWNrKSwgbm9kZS5pZCk7CiAKICAgICAgICAgdmFyIGlubGluZVN0eWxlQ2Fs
bGJhY2sgPSBmdW5jdGlvbihzdHlsZVBheWxvYWQpIHsKICAgICAgICAgICAgIGlmICghc3R5bGVQ
YXlsb2FkKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHNlbGYuX2lubGlu
ZVN0eWxlSWQgPSBzdHlsZVBheWxvYWQuaWQ7Ci0gICAgICAgICAgICBzZWxmLl9pbmxpbmVTdHls
ZUluamVjdGVkU2NyaXB0SWQgPSBzdHlsZVBheWxvYWQuaW5qZWN0ZWRTY3JpcHRJZDsKICAgICAg
ICAgfTsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0KG5vZGUuaW5qZWN0ZWRTY3Jp
cHRJZCkuZ2V0SW5saW5lU3R5bGUobm9kZS5pZCwgaW5saW5lU3R5bGVDYWxsYmFjayk7CisgICAg
ICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0SW5saW5lU3R5bGUoV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LndyYXAoaW5saW5lU3R5bGVDYWxsYmFjayksIG5vZGUuaWQpOwogICAgIH0sCiAKICAgICBfdXBk
YXRlOiBmdW5jdGlvbihzdHlsZSkKQEAgLTIwNiw3ICsyMDQsOCBAQCBXZWJJbnNwZWN0b3IuTWV0
cmljc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJtZXRyaWNzIGVkaXRlZCIpOwogICAgICAgICAgICAgc2VsZi51cGRh
dGUoKTsKICAgICAgICAgfTsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0KHRoaXMu
X2lubGluZVN0eWxlSW5qZWN0ZWRTY3JpcHRJZCkuc2V0U3R5bGVQcm9wZXJ0eSh0aGlzLl9pbmxp
bmVTdHlsZUlkLCBjb250ZXh0LnN0eWxlUHJvcGVydHksIHVzZXJJbnB1dCwgY2FsbGJhY2spOwor
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVQcm9wZXJ0eShXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sud3JhcChjYWxsYmFjayksIHRoaXMuX2lubGluZVN0eWxlSWQsIGNvbnRleHQuc3R5
bGVQcm9wZXJ0eSwgdXNlcklucHV0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRleCBjYWJhYThlLi44OGE0ZGU3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBh
bmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5l
LmpzCkBAIC0xMTUsNyArMTE1LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZShyZWZyZXNoLCBib2R5LCBub2Rl
LCBlZGl0ZWRTZWN0aW9uLCBmb3JjZVVwZGF0ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBJbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5nZXQobm9kZS5pbmplY3RlZFNjcmlwdElkKS5nZXRTdHlsZXMobm9k
ZS5pZCwgIVdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93VXNlckFnZW50U3R5bGVzLCBjYWxsYmFj
ayk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzKFdlYkluc3BlY3Rvci5DYWxs
YmFjay53cmFwKGNhbGxiYWNrKSwgbm9kZS5pZCwgIVdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93
VXNlckFnZW50U3R5bGVzKTsKICAgICB9LAogCiAgICAgX3VwZGF0ZTogZnVuY3Rpb24ocmVmcmVz
aCwgYm9keSwgbm9kZSwgZWRpdGVkU2VjdGlvbiwgZm9yY2VVcGRhdGUpCkBAIC02NTksMTYgKzY1
OSwxNCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm4gbW92ZVRvTmV4dElmTmVlZGVkLmNhbGwodGhpcyk7CiAKICAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQp
CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1J1bGVQYXlsb2FkLCBkb2VzQWZmZWN0U2Vs
ZWN0ZWROb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICAgICAgaWYgKCFuZXdSdWxlUGF5bG9hZCkgewogICAgICAgICAgICAgICAgIC8vIEludmFsaWQg
U3ludGF4IGZvciBhIFNlbGVjdG9yCiAgICAgICAgICAgICAgICAgbW92ZVRvTmV4dElmTmVlZGVk
LmNhbGwoc2VsZik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB2YXIgbmV3UnVsZVBheWxvYWQgPSByZXN1bHRbMF07Ci0gICAgICAgICAgICB2
YXIgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSA9IHJlc3VsdFsxXTsKICAgICAgICAgICAgIGlmICgh
ZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkgewogICAgICAgICAgICAgICAgIHNlbGYubm9BZmZlY3Qg
PSB0cnVlOwogICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJuby1h
ZmZlY3QiKTsKQEAgLTY5MSw3ICs2ODksNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVz
U2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2Fs
bChzZWxmKTsKICAgICAgICAgfQogCi0gICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldCh0
aGlzLnJ1bGUuaW5qZWN0ZWRTY3JpcHRJZCkuYXBwbHlTdHlsZVJ1bGVUZXh0KHRoaXMucnVsZS5p
ZCwgbmV3Q29udGVudCwgdGhpcy5wYW5lLm5vZGUuaWQsIGNhbGxiYWNrKTsKKyAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5zZXRSdWxlU2VsZWN0b3IoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAo
Y2FsbGJhY2spLCB0aGlzLnJ1bGUuaWQsIG5ld0NvbnRlbnQsIHRoaXMucGFuZS5ub2RlLmlkKTsK
ICAgICB9LAogCiAgICAgZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkOiBmdW5jdGlvbigpCkBAIC03
MTgsMTcgKzcxNiwxNCBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9u
LnByb3RvdHlwZSA9IHsKICAgICBlZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQ6IGZ1bmN0aW9uKGVs
ZW1lbnQsIG5ld0NvbnRlbnQsIG9sZENvbnRlbnQsIGNvbnRleHQpCiAgICAgewogICAgICAgICB2
YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc3VsdCkKKyAgICAg
ICAgZnVuY3Rpb24gY2FsbGJhY2socnVsZSwgZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2Rl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgaWYg
KCFydWxlKSB7CiAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBTeW50YXggZm9yIGEgU2VsZWN0
b3IKICAgICAgICAgICAgICAgICBzZWxmLmVkaXRpbmdTZWxlY3RvckNhbmNlbGxlZCgpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHJ1
bGUgPSByZXN1bHRbMF07Ci0gICAgICAgICAgICB2YXIgZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0
ZWROb2RlID0gcmVzdWx0WzFdOwotCiAgICAgICAgICAgICB2YXIgc3R5bGVSdWxlID0gV2ViSW5z
cGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VSdWxlKHJ1bGUpOwogICAgICAgICAgICAg
c3R5bGVSdWxlLnJ1bGUgPSBydWxlOwogCkBAIC03NDUsNyArNzQwLDcgQEAgV2ViSW5zcGVjdG9y
LkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBz
ZWxmLmFkZE5ld0JsYW5rUHJvcGVydHkoKS5zdGFydEVkaXRpbmcoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldCh0aGlzLnBhbmUubm9kZS5pbmplY3RlZFNj
cmlwdElkKS5hZGRTdHlsZVNlbGVjdG9yKG5ld0NvbnRlbnQsIHRoaXMucGFuZS5ub2RlLmlkLCBj
YWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuYWRkUnVsZShXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sud3JhcChjYWxsYmFjayksIG5ld0NvbnRlbnQsIHRoaXMucGFuZS5ub2RlLmlkKTsK
ICAgICB9LAogCiAgICAgZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkOiBmdW5jdGlvbigpCkBAIC0x
MDUyLDcgKzEwNDcsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNlbGYudXBkYXRlQWxsKHRydWUpOwogICAgICAgICB9
CiAKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0KHRoaXMuc3R5bGUuaW5qZWN0ZWRT
Y3JpcHRJZCkudG9nZ2xlU3R5bGVFbmFibGVkKHRoaXMuc3R5bGUuaWQsIHRoaXMubmFtZSwgZGlz
YWJsZWQsIGNhbGxiYWNrKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC50b2dnbGVTdHlsZUVu
YWJsZWQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spLCB0aGlzLnN0eWxlLmlk
LCB0aGlzLm5hbWUsIGRpc2FibGVkKTsKICAgICB9LAogCiAgICAgdXBkYXRlU3RhdGU6IGZ1bmN0
aW9uKCkKQEAgLTEyMTQsNyArMTIwOSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJl
ZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgb3JpZ2luYWwgQ1NTIHRleHQgYmVmb3JlIGFwcGx5aW5nIHVzZXIgY2hhbmdl
cy4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudAogICAgICAgICAgICAgLy8gbmV3IHByb3BlcnRp
ZXMgZnJvbSBzdGlja2luZyBhcm91bmQgaWYgdGhlIHVzZXIgYWRkcyBvbmUsIHRoZW4gcmVtb3Zl
cyBpdC4KLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldCh0aGlzLnN0eWxlLmlu
amVjdGVkU2NyaXB0SWQpLnNldFN0eWxlVGV4dCh0aGlzLnN0eWxlLmlkLCB0aGlzLm9yaWdpbmFs
Q1NTVGV4dCk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlVGV4dChXZWJJ
bnNwZWN0b3IuQ2FsbGJhY2sud3JhcChudWxsKSwgdGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5h
bENTU1RleHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh0aGlz
Lmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCk7CkBAIC0xMjM0LDcgKzEyMjksNyBAQCBXZWJJ
bnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAg
aWYgKHRoaXMuX25ld1Byb3BlcnR5KQogICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5yZW1v
dmVDaGlsZCh0aGlzKTsKICAgICAgICAgZWxzZSBpZiAodGhpcy5vcmlnaW5hbENTU1RleHQpIHsK
LSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldCh0aGlzLnN0eWxlLmluamVjdGVk
U2NyaXB0SWQpLnNldFN0eWxlVGV4dCh0aGlzLnN0eWxlLmlkLCB0aGlzLm9yaWdpbmFsQ1NTVGV4
dCk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlVGV4dChXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sud3JhcChudWxsKSwgdGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1Rl
eHQpOwogCiAgICAgICAgICAgICBpZiAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uICYmIHRoaXMu
dHJlZU91dGxpbmUuc2VjdGlvbi5wYW5lKQogICAgICAgICAgICAgICAgIHRoaXMudHJlZU91dGxp
bmUuc2VjdGlvbi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgZWRpdGVkIik7
CkBAIC0xMzIwLDkgKzEzMTUsOSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHZhciBzZWxmID0gdGhpczsK
LSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzdWx0KQorICAgICAgICBmdW5jdGlvbiBjYWxs
YmFjayhzdWNjZXNzLCBuZXdQYXlsb2FkLCBjaGFuZ2VkUHJvcGVydGllcykKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmICghc3VjY2Vzcykgewog
ICAgICAgICAgICAgICAgIC8vIFRoZSB1c2VyIHR5cGVkIHNvbWV0aGluZywgYnV0IGl0IGRpZG4n
dCBwYXJzZS4gSnVzdCBhYm9ydCBhbmQgcmVzdG9yZQogICAgICAgICAgICAgICAgIC8vIHRoZSBv
cmlnaW5hbCB0aXRsZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIElmIHRoaXMgd2FzIGEgbmV3IGF0dHJp
YnV0ZSBhbmQKICAgICAgICAgICAgICAgICAvLyB3ZSBjb3VsZG4ndCBwYXJzZSwgdGhlbiBqdXN0
IHJlbW92ZSBpdC4KQEAgLTEzMzUsOCArMTMzMCw2IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3Bl
cnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIG5ld1BheWxvYWQgPSByZXN1bHRbMF07Ci0g
ICAgICAgICAgICB2YXIgY2hhbmdlZFByb3BlcnRpZXMgPSByZXN1bHRbMV07CiAgICAgICAgICAg
ICBlbGVtZW50c1BhbmVsLnJlbW92ZVN0eWxlQ2hhbmdlKHNlY3Rpb24uaWRlbnRpZmllciwgc2Vs
Zi5zdHlsZSwgc2VsZi5uYW1lKTsKIAogICAgICAgICAgICAgaWYgKCFzdHlsZVRleHRMZW5ndGgp
IHsKQEAgLTEzNTUsOCArMTM0OCw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKICAg
ICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUFsbCh0cnVlKTsKICAgICAgICAgfQotCi0gICAgICAg
IEluamVjdGVkU2NyaXB0QWNjZXNzLmdldCh0aGlzLnN0eWxlLmluamVjdGVkU2NyaXB0SWQpLmFw
cGx5U3R5bGVUZXh0KHRoaXMuc3R5bGUuaWQsIHN0eWxlVGV4dC50cmltKCksIHRoaXMubmFtZSwg
Y2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFwcGx5U3R5bGVUZXh0KFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgdGhpcy5zdHlsZS5pZCwgc3R5bGVUZXh0
LnRyaW0oKSwgdGhpcy5uYW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCmluZGV4IDU5MTIwY2QuLjdlZTJjODYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNjE1LDYgKzYxNSw4IEBAIFdlYkluc3BlY3Rv
ci5kb2N1bWVudE1vdXNlT3ZlciA9IGZ1bmN0aW9uKGV2ZW50KQogICAgIGNvbnN0IGFuY2hvciA9
IGV2ZW50LnRhcmdldDsKICAgICBpZiAoIWFuY2hvci5oYXNTdHlsZUNsYXNzKCJ3ZWJraXQtaHRt
bC1yZXNvdXJjZS1saW5rIikpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoYW5jaG9yLmhyZWYg
JiYgYW5jaG9yLmhyZWYuaW5kZXhPZigiL2RhdGE6IikgIT0gLTEpCisgICAgICAgIHJldHVybjsK
ICAgICBpZiAoV2ViSW5zcGVjdG9yLmNhblNob3dTb3VyY2VMaW5lKGFuY2hvci5ocmVmLCBhbmNo
b3IubGluZU51bWJlciwgYW5jaG9yLnByZWZlcnJlZFBhbmVsKSB8fCBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUuVVJMUmVnRXhwLmV4ZWMoYW5jaG9yLmhyZWYpKSB7CiAgICAgICAgIGlmIChldmVu
dC50YXJnZXQub3JpZ2luYWxUaXRsZSkKICAgICAgICAgICAgIGV2ZW50LnRhcmdldC50aXRsZSA9
IGV2ZW50LnRhcmdldC5vcmlnaW5hbFRpdGxlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDkyOWNmMS4uMWU0
MDI5MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDMtMTUgIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGlt
b3RoeSBIYXRjaGVyLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1pZ3JhdGUgdG8gbmF0aXZl
IHN0eWxlcyBpbnNwZWN0b3IgaW4gb3JkZXIgdG8gaW5zcGVjdCBzdHlsZXMgZnJvbSBmb3JlaWdo
biBkb21haW5zLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNjExNworCisgICAgICAgICogc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpz
OgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwpOgorCiAyMDEwLTAzLTEz
ICBFcmljIFJvbWFuICA8ZXJvbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0
b3JDb250cm9sbGVySW1wbC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29u
dHJvbGxlckltcGwuanMKaW5kZXggMzgzMjViNi4uOWJjZWRmNCAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcworKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCkBAIC03MSw2ICs3MSwx
NSBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlz
Lmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzdGFydFRpbWVsaW5lUHJvZmls
ZXIiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzdG9w
VGltZWxpbmVQcm9maWxlciIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJE
ZWxlZ2F0ZV8oInN0b3JlTGFzdEFjdGl2ZVBhbmVsIik7CisKKyAgICB0aGlzLmluc3RhbGxJbnNw
ZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJnZXRTdHlsZXMiKTsKKyAgICB0aGlzLmluc3RhbGxJ
bnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJnZXRDb21wdXRlZFN0eWxlIik7CisgICAgdGhp
cy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiYXBwbHlTdHlsZVRleHQiKTsK
KyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRTdHlsZVRl
eHQiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRT
dHlsZVByb3BlcnR5Iik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVn
YXRlXygidG9nZ2xlU3R5bGVFbmFibGVkIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29u
dHJvbGxlckRlbGVnYXRlXygic2V0UnVsZVNlbGVjdG9yIik7CisgICAgdGhpcy5pbnN0YWxsSW5z
cGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiYWRkUnVsZSIpOwogfTsKIGRldnRvb2xzLkluc3Bl
Y3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSW5zcGVj
dG9yQmFja2VuZFN0dWIucHJvdG90eXBlOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>