<?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>86204</bug_id>
          
          <creation_ts>2012-05-11 05:56:41 -0700</creation_ts>
          <short_desc>Web Inspector: heap profiler should allow revealing an element which is logged to the console</short_desc>
          <delta_ts>2012-05-12 09:35:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>86211</dependson>
    
    <dependson>86230</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>gustavo</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>philn</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>621540</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-05-11 05:56:41 -0700</bug_when>
    <thetext>At the moment we can select an element in a heap snapshot and than access the element in the console expressions using $0 variable. It is logical to have backward navigation: from an object in the console to the corresponding heap snapshot entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621542</commentid>
    <comment_count>1</comment_count>
      <attachid>141391</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-05-11 06:03:20 -0700</bug_when>
    <thetext>Created attachment 141391
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621557</commentid>
    <comment_count>2</comment_count>
      <attachid>141391</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-11 06:23:06 -0700</bug_when>
    <thetext>Comment on attachment 141391
Patch

Attachment 141391 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12674164</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621567</commentid>
    <comment_count>3</comment_count>
      <attachid>141391</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-11 06:30:17 -0700</bug_when>
    <thetext>Comment on attachment 141391
Patch

Attachment 141391 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12663686</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621568</commentid>
    <comment_count>4</comment_count>
      <attachid>141391</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-11 06:30:35 -0700</bug_when>
    <thetext>Comment on attachment 141391
Patch

Attachment 141391 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12664666</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621570</commentid>
    <comment_count>5</comment_count>
      <attachid>141391</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-11 06:31:01 -0700</bug_when>
    <thetext>Comment on attachment 141391
Patch

Attachment 141391 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12672307</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621572</commentid>
    <comment_count>6</comment_count>
      <attachid>141400</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-05-11 06:32:11 -0700</bug_when>
    <thetext>Created attachment 141400
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621619</commentid>
    <comment_count>7</comment_count>
      <attachid>141400</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-11 07:12:57 -0700</bug_when>
    <thetext>Comment on attachment 141400
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        JS objects in the console have context menu item that allows to reveal them in a heap snapshot view.

Please be more verbose here, what is SnapshotObjectId?

&gt; Source/WebCore/inspector/InjectedScript.cpp:193
&gt; +ScriptValue InjectedScript::findObjectById(const String&amp; objectId) const

objectForId?

&gt; Source/WebCore/inspector/Inspector.json:2680
&gt; +                    { &quot;name&quot;: &quot;heapSnapshotObjectId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Heap snapshot object id.&quot; }

Please define a type for object id.

&gt; Source/WebCore/inspector/InspectorProfilerAgent.cpp:455
&gt; +    ScriptValue jsValue = injectedScript.findObjectById(objectId);

jsValue name is misleading - I started thinking it was jsc-specific.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1569
&gt; +    serializeItemsRange: function(begin, end)

Please annotate.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1572
&gt; +        if (end &gt;= this._iterationOrder.length)

Is this a part of this change?

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1626
&gt; +    serializeItem: function(edge)

Please annotate.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1721
&gt; +    getNodePosition: function(snapshotObjectId)

Please annotate.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotDataGrids.js:73
&gt; +    selectObjectByHeapSnapshotId: function(heapSnapshotObjectId)

Please annotate.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotDataGrids.js:392
&gt; +    selectObjectByHeapSnapshotId: function(id)

Please annotate.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotGridNodes.js:158
&gt; +            if (!this._positionRanges.length) {

Is it the part of this change?

&gt; Source/WebCore/inspector/front-end/HeapSnapshotGridNodes.js:724
&gt; +        WebInspector.log(&quot;findAndSerializeItems &quot; + snapshotObjectId);

Please remove logging.

&gt; Source/WebCore/inspector/front-end/ObjectPropertiesSection.js:64
&gt; +            WebInspector.log(&quot;revealInDominatorsView &quot; + objectId);

Please remove logging.

&gt; Source/WebCore/inspector/front-end/ObjectPropertiesSection.js:68
&gt; +            ProfilerAgent.getHeapObjectId(objectId, didReceiveHeapObjectId.bind(this));

ObjectPropertiesSection is in components module, outsite profiler module. Ideally, this should not compile.

&gt; Source/WebCore/inspector/front-end/ObjectPropertiesSection.js:73
&gt; +            WebInspector.log(&quot;didReceiveHeapObjectId error = &quot; + error + &quot; result = &quot; + result);

logging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622366</commentid>
    <comment_count>8</comment_count>
      <attachid>141581</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-05-12 08:55:07 -0700</bug_when>
    <thetext>Created attachment 141581
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622370</commentid>
    <comment_count>9</comment_count>
      <attachid>141581</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-12 09:24:25 -0700</bug_when>
    <thetext>Comment on attachment 141581
Patch

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

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1289
&gt; +    getNodeClassName: function(snapshotObjectId)

nodeClassName:

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1605
&gt; +    getNodePosition: function(snapshotObjectId)

nodePosition

&gt; Source/WebCore/inspector/front-end/ObjectPropertiesSection.js:80
&gt; +WebInspector.ObjectPropertiesSection.addContextMenuProvier = function(provider)

Provider

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:1066
&gt; +WebInspector.RevealInHeapSnapshotContextMenuProvier = function()

Provider</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622371</commentid>
    <comment_count>10</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-05-12 09:31:08 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 141581 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141581&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1289
&gt; &gt; +    getNodeClassName: function(snapshotObjectId)
&gt; 
&gt; nodeClassName:
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1605
&gt; &gt; +    getNodePosition: function(snapshotObjectId)
&gt; 
&gt; nodePosition
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/ObjectPropertiesSection.js:80
&gt; &gt; +WebInspector.ObjectPropertiesSection.addContextMenuProvier = function(provider)
&gt; 
&gt; Provider
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:1066
&gt; &gt; +WebInspector.RevealInHeapSnapshotContextMenuProvier = function()
&gt; 
&gt; Provider
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622372</commentid>
    <comment_count>11</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-05-12 09:35:06 -0700</bug_when>
    <thetext>Committed r116857: &lt;http://trac.webkit.org/changeset/116857&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141391</attachid>
            <date>2012-05-11 06:03:20 -0700</date>
            <delta_ts>2012-05-11 06:32:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86204-20120511170318.patch</filename>
            <type>text/plain</type>
            <size>45923</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTgyMTAxNmFjZmFhZDE0
ZTQ5MjI1OTE2YTlhY2U3ZGJmZDZjMTZlMC4uYTQ2ZDBkMTJiMTRiMjY0ZjNjMTc1NmI0NGE2ZWZk
ODI0OTI3ZmQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA1LTExICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGhlYXAgcHJvZmlsZXIgc2hvdWxkIGFsbG93IHJldmVhbGluZyBhbiBlbGVtZW50IHdoaWNo
IGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODYyMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBKUyBvYmplY3RzIGluIHRoZSBjb25zb2xlIGhhdmUgY29udGV4dCBt
ZW51IGl0ZW0gdGhhdCBhbGxvd3MgdG8gcmV2ZWFsIHRoZW0gaW4gYSBoZWFwIHNuYXBzaG90IHZp
ZXcuCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6Z2V0SGVhcE9iamVjdElkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFNjcmlwdFByb2ZpbGVyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6
OmZpbmRPYmplY3RCeUlkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5oOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qczoKKyAgICAgICAgKC4pOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjpnZXRIZWFwT2JqZWN0SWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1lc3Nh
Z2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlw
ZS5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5w
cm90b3R5cGUuZ2V0Tm9kZUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5zZXJpYWxpemVJdGVt
c1JhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVy
ZWRJdGVyYXRvci5wcm90b3R5cGUuc29ydEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBlLnNvcnRBbmRSZXdpbmQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIucHJvdG90
eXBlLnNlcmlhbGl6ZUl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGVzUHJvdmlkZXIucHJvdG90eXBlLmdldE5vZGVQb3NpdGlvbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUuc2VyaWFsaXplSXRlbSk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90
b3R5cGUuc2VsZWN0T2JqZWN0QnlIZWFwU25hcHNob3RJZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQucHJvdG90eXBlLnNlbGVjdE9iamVj
dEJ5SGVhcFNuYXBzaG90SWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90R3JpZE5vZGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdy
aWROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90
b3R5cGUuX3BvcHVsYXRlLnNvcnRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90R3JpZE5vZGUucHJvdG90eXBlLl9wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLl9wb3B1bGF0ZUNoaWxkcmVuLnNlcmlhbGl6
ZU5leHRDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUu
cHJvdG90eXBlLl9wb3B1bGF0ZUNoaWxkcmVuLmluc2VydFJldHJpZXZlZENoaWxkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUuX3BvcHVsYXRl
Q2hpbGRyZW4uaW5zZXJ0U2hvd01vcmVCdXR0b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5fcG9wdWxhdGVDaGlsZHJlbi5jaGlsZHJlblJl
dHJpZXZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJv
dG90eXBlLl9wb3B1bGF0ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHcmlkTm9kZS5wcm90b3R5cGUuX3NhdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnNvcnQuYWZ0ZXJTb3J0KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUuc29ydCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlLnByb3Rv
dHlwZS5yZXZlYWxOb2RlQnlTbmFwc2hvdE9iamVjdElkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rvck5vZGUucHJvdG90eXBlLnJldmVhbE5vZGVCeVNuYXBz
aG90T2JqZWN0SWQuZGlkUG9wdWxhdGVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlLnByb3RvdHlwZS5faGlnaGxpZ2h0Q2hpbGQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rlc1Byb3ZpZGVyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZXNQcm92aWRlci5wcm90b3R5
cGUuc2VyaWFsaXplSXRlbXNSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RGlmZk5vZGVzUHJvdmlkZXIucHJvdG90eXBlLnNlcmlhbGl6ZUl0ZW1zUmFuZ2UuZGlkUmVj
ZWl2ZURlbGV0ZWRJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlm
Zk5vZGVzUHJvdmlkZXIucHJvdG90eXBlLnNlcmlhbGl6ZUl0ZW1zUmFuZ2UuZGlkUmVjZWl2ZUFk
ZGVkSXRlbXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rlc1By
b3ZpZGVyLnByb3RvdHlwZS5zb3J0QW5kUmV3aW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFdvcmtlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHku
cHJvdG90eXBlLmdldE5vZGVDbGFzc05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldE5vZGVQb3NpdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eS5wcm90b3R5cGUuc2VyaWFs
aXplSXRlbXNSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlk
ZXJQcm94eS5wcm90b3R5cGUuZmluZEFuZFNlcmlhbGl6ZUl0ZW1zKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5hZGRSZXZlYWxBY3Rp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLnByb3Rv
dHlwZS5fY29udGV4dE1lbnVFdmVudEZpcmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmpl
Y3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX2NvbnRleHRNZW51RXZlbnRGaXJlZC5kaWRS
ZWNlaXZlSGVhcE9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2Zp
bGVzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUuc2hvd09iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TaG93TW9yZURh
dGFHcmlkTm9kZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlkTm9k
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5vZGUucHJvdG90eXBl
Ll9zaG93TmV4dENodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlk
Tm9kZS5wcm90b3R5cGUuX3Nob3dBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNob3dNb3Jl
RGF0YUdyaWROb2RlLnByb3RvdHlwZS5fdXBkYXRlTGFiZWxzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TaG93TW9yZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuc2V0U3RhcnRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnNldEVu
ZFBvc2l0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVzUGFuZWwu
Y3NzOgorICAgICAgICAoLmhpZ2hsaWdodGVkLXJvdyk6CisgICAgICAgIChALXdlYmtpdC1rZXlm
cmFtZXMgcm93X2hpZ2hsaWdodCk6CisgICAgICAgICh0byk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC91dGlsaXRpZXMuanM6CisKIDIwMTItMDUtMTEgIFNoaW55YSBLYXdhbmFrYSAg
PHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtSZWZhY3RvcmluZ10gTW92ZSBTZWxl
Y3Rpb24gZnJvbSBET01XaW5kb3cgdG8gVHJlZVNjb3BlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCmluZGV4IDA1NmQ5MmUzMGU0M2QzMmEyZDM1NGY0
YjQ4Y2Y4MmNmNjhiOWVmOTAuLjQyZTM1YzM2N2IyMzAwMzAzODhmNTg1OWFhMDc3MTg1N2VhMTc1
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAK
QEAgLTEyMSw2ICsxMjEsMTIgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdFByb2ZpbGVyOjpvYmplY3RC
eUhlYXBPYmplY3RJZCh1bnNpZ25lZCBpZCkKICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KHNjcmlw
dFN0YXRlLCBvYmplY3QpOwogfQogCitTdHJpbmcgU2NyaXB0UHJvZmlsZXI6OmdldEhlYXBPYmpl
Y3RJZChTY3JpcHRWYWx1ZSB2YWx1ZSkKK3sKKyAgICB2ODo6U25hcHNob3RPYmplY3RJZCBpZCA9
IHY4OjpIZWFwUHJvZmlsZXI6OkdldFNuYXBzaG90T2JqZWN0SWQodmFsdWUudjhWYWx1ZSgpKTsK
KyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIoaWQpOworfQorCiBuYW1lc3BhY2UgewogCiBjbGFz
cyBBY3Rpdml0eUNvbnRyb2xBZGFwdGVyIDogcHVibGljIHY4OjpBY3Rpdml0eUNvbnRyb2wgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKaW5kZXggNWQzYjk2
OGEyNzZlYTgzMDAyZjEyMzQ4M2Y2ZWQ1NGM2YzA1YmZiZC4uYWMwMDM4OTZiMTkzZWEwYWJiMWYx
YzViYzQxYmMzNzcyZDFmNjEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0UHJvZmlsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRQcm9maWxlci5oCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IERPTVdyYXBwZXJWaXNpdG9yOwogY2xhc3MgUGFnZTsKIGNsYXNzIFNjcmlwdE9iamVjdDsKK2Ns
YXNzIFNjcmlwdFZhbHVlOwogY2xhc3MgV29ya2VyQ29udGV4dDsKIAogY2xhc3MgU2NyaXB0UHJv
ZmlsZXIgewpAQCAtNTksNiArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjb2xs
ZWN0R2FyYmFnZSgpOwogICAgIHN0YXRpYyBTY3JpcHRPYmplY3Qgb2JqZWN0QnlIZWFwT2JqZWN0
SWQodW5zaWduZWQgaWQpOworICAgIHN0YXRpYyBTdHJpbmcgZ2V0SGVhcE9iamVjdElkKFNjcmlw
dFZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0
IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0Rm9yUGFnZShQYWdlKiwgY29u
c3QgU3RyaW5nJiB0aXRsZSk7CiAjaWYgRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAppbmRleCAxYTMxZjA2ZWQ0NzEyZjdmNTE1NjZk
YzhjNmZiODBlYjcxZjI4Zjg1Li4yZjBlNjE3ODQ0MjY3NjAwMzJlZGI3YThmNTIwMGJjZjA4YTRk
OWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAg
LTE5MCw2ICsxOTAsMTggQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFNlcmlhbGl6ZWRPYmoKICAgICByZXR1cm4gc2Ny
aXB0VmFsdWUuaGFzTm9WYWx1ZSgpID8gMCA6IHdyYXBPYmplY3Qoc2NyaXB0VmFsdWUsIGdyb3Vw
TmFtZSk7CiB9CiAKK1NjcmlwdFZhbHVlIEluamVjdGVkU2NyaXB0OjpmaW5kT2JqZWN0QnlJZChj
b25zdCBTdHJpbmcmIG9iamVjdElkKSBjb25zdAoreworICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgp
KTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9pbmplY3RlZFNjcmlwdE9iamVj
dCwgImZpbmRPYmplY3RCeUlkIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0
SWQpOworCisgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBTY3JpcHRWYWx1ZSBy
ZXN1bHRWYWx1ZSA9IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChmdW5jdGlvbiwgaGFkRXhj
ZXB0aW9uKTsKKyAgICBBU1NFUlQoIWhhZEV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdFZh
bHVlOworfQorCiB2b2lkIEluamVjdGVkU2NyaXB0OjppbnNwZWN0Tm9kZShOb2RlKiBub2RlKQog
ewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmgKaW5kZXggNmVmMzUyNTFiM2JlYzg5OTM5ZWZlZWE1ZmRjZTcxNTI2NGJi
NTNlNi4uOGM2NzM2ZDkzODgwNjU5Yzk1N2Q0OGRkZjdjYjg4NjYxYWM2NTAyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTkzLDYgKzkzLDggQEAgcHVi
bGljOgogICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
d3JhcE9iamVjdChTY3JpcHRWYWx1ZSwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUpIGNvbnN0Owog
ICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE5v
ZGUoTm9kZSosIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKTsKICAgICBQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHdyYXBTZXJpYWxpemVkT2JqZWN0KFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSosIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKSBjb25zdDsKKyAgICBT
Y3JpcHRWYWx1ZSBmaW5kT2JqZWN0QnlJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKSBjb25zdDsK
KwogICAgIHZvaWQgaW5zcGVjdE5vZGUoTm9kZSopOwogICAgIHZvaWQgcmVsZWFzZU9iamVjdEdy
b3VwKGNvbnN0IFN0cmluZyYpOwogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCmluZGV4IDg4
NjlkN2E0MGYwMjUxNGMyNTdjMmY5MDgyNzNiOWNlMjZiZTZmZjcuLjdlOTEzYzhhMmRmNDZjN2Uy
YTAzZGNiNTczNWQ4ZTViMDU5OWRlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTM4NCwxMCArMzg0LDE1IEBAIEluamVjdGVk
U2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVkT2Jq
ZWN0W29iamVjdElkLmlkXTsKICAgICB9LAogCi0gICAgbm9kZUZvck9iamVjdElkOiBmdW5jdGlv
bihvYmplY3RJZCkKKyAgICBmaW5kT2JqZWN0QnlJZDogZnVuY3Rpb24ob2JqZWN0SWQpCiAgICAg
ewogICAgICAgICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVj
dElkKTsKLSAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVj
dElkKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsK
KyAgICB9LAorCisgICAgbm9kZUZvck9iamVjdElkOiBmdW5jdGlvbihvYmplY3RJZCkKKyAgICB7
CisgICAgICAgIHZhciBvYmplY3QgPSB0aGlzLmZpbmRPYmplY3RCeUlkKG9iamVjdElkKTsKICAg
ICAgICAgaWYgKCFvYmplY3QgfHwgdGhpcy5fc3VidHlwZShvYmplY3QpICE9PSAibm9kZSIpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA0ODIyOTU5NWZlOTNiMDk1YmFhMTVj
ZTNiOGE5ZGEyODU0MTgwMWZiLi5lZTIzNTk4NmRmNDc5OWIwMDRlNzkzMDE2MzE4Zjg5MmNiNmNl
YzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0yNjcwLDYg
KzI2NzAsMTUgQEAKICAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAiJHJlZiI6ICJSdW50aW1lLlJlbW90ZU9iamVjdCIs
ICJkZXNjcmlwdGlvbiI6ICJFdmFsdWF0aW9uIHJlc3VsdC4iIH0KICAgICAgICAgICAgICAgICBd
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjog
ImdldEhlYXBPYmplY3RJZCIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0SWQiLCAiJHJlZiI6ICJSdW50aW1lLlJl
bW90ZU9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIgb2YgdGhlIG9iamVjdCB0
byBnZXQgaGVhcCBvYmplY3QgaWQgZm9yLiIgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGVh
cFNuYXBzaG90T2JqZWN0SWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiSGVh
cCBzbmFwc2hvdCBvYmplY3QgaWQuIiB9CisgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAg
fQogICAgICAgICBdLAogICAgICAgICAiZXZlbnRzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IGMxYmM4YTRhY2Mw
ZTc1MDZjMGJhYmE2YzliMWExNzY5YzcwNmRjNzAuLmUxOTg2MWJlMjhlOGFkZDQzM2Y1OWNlMjAx
ZWY0YzZjNDU4ODViNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTQ0NSw2ICs0NDUsMjEgQEAgdm9pZCBJbnNwZWN0
b3JQcm9maWxlckFnZW50OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyogZXJy
b3IsIGludCBpZCwKICAgICAgICAgKmVycm9yID0gIkZhaWxlZCB0byB3cmFwIG9iamVjdCI7CiB9
CiAKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0SGVhcE9iamVjdElkKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgU3RyaW5nKiBoZWFwU25h
cHNob3RPYmplY3RJZCkKK3sKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElk
KTsKKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CisgICAgICAgICplcnJv
clN0cmluZyA9ICJJbnNwZWN0ZWQgY29udGV4dCBoYXMgZ29uZSI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgU2NyaXB0VmFsdWUganNWYWx1ZSA9IGluamVjdGVkU2NyaXB0LmZpbmRPYmpl
Y3RCeUlkKG9iamVjdElkKTsKKyAgICBpZiAoanNWYWx1ZS5oYXNOb1ZhbHVlKCkgfHwganNWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICplcnJvclN0cmluZyA9ICJPYmplY3Qgd2l0aCBn
aXZlbiBpZCBub3QgZm91bmQiOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICpoZWFwU25h
cHNob3RPYmplY3RJZCA9IFNjcmlwdFByb2ZpbGVyOjpnZXRIZWFwT2JqZWN0SWQoanNWYWx1ZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKaW5kZXggYjE1ODM5ODgwY2I0NWU4
ZDQzM2M2NzRjYzA5MjY2OGQ4ODBmODJkMi4uOGQ4ZmRiOTM1YmI0NTJmZTc1NzRlZTVkNDQxNDJi
Yzg0Yjc0ZWVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clByb2ZpbGVyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5oCkBAIC05Nyw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRvZ2ds
ZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRP
YmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGludCBpZCwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBnZXRIZWFwT2JqZWN0SWQoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBTdHJpbmcqIGhlYXBTbmFwc2hvdE9iamVjdElkKTsKIAog
cHJvdGVjdGVkOgogICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbnNvbGVNZXNzYWdlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlTWVzc2FnZS5qcwppbmRleCBlMDFiOWRiYThiMjI2MzUzOWZlODExYWI1OTUwMjll
NTkwZGU0MGY1Li4xNGNhZTc1NDBiZTA0ZjFkMDRmNGUwYjkyZTRjNmNhNGFmM2VkODNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVNZXNzYWdl
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1lc3Nh
Z2UuanMKQEAgLTI2NCw3ICsyNjQsOSBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBs
LnByb3RvdHlwZSA9IHsKIAogICAgIF9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdDogZnVuY3Rpb24o
b2JqLCBlbGVtKQogICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVj
dG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uKS5lbGVtZW50
KTsKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRp
ZXNTZWN0aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgc2VjdGlvbi5hZGRSZXZl
YWxBY3Rpb24oKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzZWN0aW9uLmVsZW1lbnQpOwog
ICAgIH0sCiAKICAgICBfZm9ybWF0UGFyYW1ldGVyQXNOb2RlOiBmdW5jdGlvbihvYmplY3QsIGVs
ZW0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBT
bmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzCmluZGV4IDBiMWM5YzUxZmI0YWU2Y2NlMGU0Y2QzYjdjOGI2NzJhMDU5ZDQ2ODIuLjNi
YTFlOTQ3YTc5YzUxOTI4MjZiNDM4NDA1YTI1ZWZkMzU4Y2I2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC0xNDA4LDYg
KzE0MDgsMTUgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHJldHVybiBkaWZmOwogICAgIH0sCiAKKyAgICBnZXROb2RlQ2xhc3NOYW1lOiBmdW5jdGlv
bihzbmFwc2hvdE9iamVjdElkKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaXQgPSB0aGlzLl9h
bGxOb2RlczsgaXQuaGFzTmV4dCgpOyBpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChpdC5u
b2RlLmlkID09PSBzbmFwc2hvdE9iamVjdElkKQorICAgICAgICAgICAgICAgIHJldHVybiBpdC5u
b2RlLmNsYXNzTmFtZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAor
CiAgICAgX3BhcnNlRmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIpCiAgICAgewogICAgICAgICBpZiAo
IWZpbHRlcikKQEAgLTE0NjksNyArMTQ3OCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RG
aWx0ZXJlZE9yZGVyZWRJdGVyYXRvciA9IGZ1bmN0aW9uKGl0ZXJhdG9yLCBmaWx0ZXIsIHVuCiAg
ICAgdGhpcy5faXRlcmF0aW9uT3JkZXIgPSBudWxsOwogICAgIHRoaXMuX3Bvc2l0aW9uID0gMDsK
ICAgICB0aGlzLl9jdXJyZW50Q29tcGFyYXRvciA9IG51bGw7Ci0gICAgdGhpcy5fbGFzdENvbXBh
cmF0b3IgPSBudWxsOworICAgIHRoaXMuX3NvcnRlZFByZWZpeExlbmd0aCA9IDA7CiB9CiAKIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUg
PSB7CkBAIC0xNTU3LDI4ICsxNTY2LDQ0IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0
ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICsrdGhpcy5fcG9zaXRp
b247CiAgICAgfSwKIAotICAgIHNlcmlhbGl6ZVN1YnNlcXVlbnRJdGVtczogZnVuY3Rpb24oY291
bnQpCisgICAgc2VyaWFsaXplSXRlbXNSYW5nZTogZnVuY3Rpb24oYmVnaW4sIGVuZCkKICAgICB7
CiAgICAgICAgIHRoaXMuX2NyZWF0ZUl0ZXJhdGlvbk9yZGVyKCk7CisgICAgICAgIGlmIChlbmQg
Pj0gdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoKQorICAgICAgICAgICAgZW5kID0gdGhpcy5f
aXRlcmF0aW9uT3JkZXIubGVuZ3RoOworICAgICAgICBpZiAodGhpcy5fc29ydGVkUHJlZml4TGVu
Z3RoIDwgZW5kKSB7CisgICAgICAgICAgICB0aGlzLnNvcnQodGhpcy5fY3VycmVudENvbXBhcmF0
b3IsIHRoaXMuX3NvcnRlZFByZWZpeExlbmd0aCwgdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3Ro
IC0gMSwgZW5kIC0gdGhpcy5fc29ydGVkUHJlZml4TGVuZ3RoKTsKKyAgICAgICAgICAgIHRoaXMu
X3NvcnRlZFByZWZpeExlbmd0aCA9IGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3Bv
c2l0aW9uID0gYmVnaW47CisgICAgICAgIHZhciBzdGFydFBvc2l0aW9uID0gdGhpcy5fcG9zaXRp
b247CisgICAgICAgIHZhciBjb3VudCA9IGVuZCAtIGJlZ2luOwogICAgICAgICB2YXIgcmVzdWx0
ID0gbmV3IEFycmF5KGNvdW50KTsKLSAgICAgICAgaWYgKHRoaXMuX2xhc3RDb21wYXJhdG9yICE9
PSB0aGlzLl9jdXJyZW50Q29tcGFyYXRvcikKLSAgICAgICAgICAgIHRoaXMuc29ydCh0aGlzLl9j
dXJyZW50Q29tcGFyYXRvciwgdGhpcy5fcG9zaXRpb24sIHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxl
bmd0aCAtIDEsIGNvdW50KTsKICAgICAgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgY291bnQgJiYg
dGhpcy5oYXNOZXh0KCk7ICsraSwgdGhpcy5uZXh0KCkpCi0gICAgICAgICAgICByZXN1bHRbaV0g
PSB0aGlzLl9zZXJpYWxpemUodGhpcy5pdGVtKTsKKyAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRo
aXMuc2VyaWFsaXplSXRlbSh0aGlzLml0ZW0pOwogICAgICAgICByZXN1bHQubGVuZ3RoID0gaTsK
LSAgICAgICAgcmVzdWx0Lmhhc05leHQgPSB0aGlzLmhhc05leHQoKTsKICAgICAgICAgcmVzdWx0
LnRvdGFsTGVuZ3RoID0gdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoOworCisgICAgICAgIHJl
c3VsdC5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgcmVzdWx0LmVuZFBv
c2l0aW9uID0gdGhpcy5fcG9zaXRpb247CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSwK
IAorICAgIHNvcnRBbGw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NyZWF0ZUl0
ZXJhdGlvbk9yZGVyKCk7CisgICAgICAgIGlmICh0aGlzLl9zb3J0ZWRQcmVmaXhMZW5ndGggPj0g
dGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB0aGlzLnNvcnQodGhpcy5fY3VycmVudENvbXBhcmF0b3IsIHRoaXMuX3NvcnRlZFByZWZpeExl
bmd0aCwgdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoIC0gMSwgdGhpcy5faXRlcmF0aW9uT3Jk
ZXIubGVuZ3RoKTsKKyAgICAgICAgdGhpcy5fc29ydGVkUHJlZml4TGVuZ3RoID0gdGhpcy5faXRl
cmF0aW9uT3JkZXIubGVuZ3RoOworICAgIH0sCisKICAgICBzb3J0QW5kUmV3aW5kOiBmdW5jdGlv
bihjb21wYXJhdG9yKQogICAgIHsKLSAgICAgICAgdGhpcy5fbGFzdENvbXBhcmF0b3IgPSB0aGlz
Ll9jdXJyZW50Q29tcGFyYXRvcjsKICAgICAgICAgdGhpcy5fY3VycmVudENvbXBhcmF0b3IgPSBj
b21wYXJhdG9yOwotICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fbGFzdENvbXBhcmF0b3IgIT09
IHRoaXMuX2N1cnJlbnRDb21wYXJhdG9yOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAg
ICAgdGhpcy5maXJzdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB0aGlzLl9z
b3J0ZWRQcmVmaXhMZW5ndGggPSAwOworICAgICAgICB0aGlzLmZpcnN0KCk7CiAgICAgfQogfQog
CkBAIC0xNTk4LDEyICsxNjIzLDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1By
b3ZpZGVyID0gZnVuY3Rpb24oc25hcHNob3QsIGZpbHRlciwgZWRnZXNJdGVyKQogfQogCiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUgPSB7Ci0gICAgX3Nl
cmlhbGl6ZTogZnVuY3Rpb24oZWRnZSkKKyAgICBzZXJpYWxpemVJdGVtOiBmdW5jdGlvbihlZGdl
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgIG5hbWU6IGVkZ2UubmFtZSwK
ICAgICAgICAgICAgIHByb3BlcnR5QWNjZXNzb3I6IGVkZ2UudG9TdHJpbmcoKSwKLSAgICAgICAg
ICAgIG5vZGU6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyLnByb3RvdHlw
ZS5fc2VyaWFsaXplKGVkZ2Uubm9kZSksCisgICAgICAgICAgICBub2RlOiBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUuc2VyaWFsaXplSXRlbShlZGdlLm5v
ZGUpLAogICAgICAgICAgICAgbm9kZUluZGV4OiBlZGdlLm5vZGVJbmRleCwKICAgICAgICAgICAg
IHR5cGU6IGVkZ2UudHlwZSwKICAgICAgICAgICAgIGRpc3RhbmNlVG9XaW5kb3c6IGVkZ2Uubm9k
ZS5kaXN0YW5jZVRvV2luZG93CkBAIC0xNjkzLDcgKzE3MTgsMjMgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIgPSBmdW5jdGlvbihzbmFwc2hvdCwgZmlsdGVyLCBub2Rl
SW5kZXhlcykKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIucHJv
dG90eXBlID0gewotICAgIF9zZXJpYWxpemU6IGZ1bmN0aW9uKG5vZGUpCisgICAgZ2V0Tm9kZVBv
c2l0aW9uOiBmdW5jdGlvbihzbmFwc2hvdE9iamVjdElkKQorICAgIHsKKyAgICAgICAgdGhpcy5f
Y3JlYXRlSXRlcmF0aW9uT3JkZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgdGhpcy5zb3J0QWxsKCk7CisKKyAgICAgICAgdmFy
IG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5zbmFwc2hvdCk7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIG5vZGUubm9kZUluZGV4ID0gdGhpcy5faXRlcmF0aW9uT3Jk
ZXJbaV07CisgICAgICAgICAgICBpZiAobm9kZS5pZCA9PT0gc25hcHNob3RPYmplY3RJZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7Cisg
ICAgfSwKKworICAgIHNlcmlhbGl6ZUl0ZW06IGZ1bmN0aW9uKG5vZGUpCiAgICAgewogICAgICAg
ICByZXR1cm4gewogICAgICAgICAgICAgaWQ6IG5vZGUuaWQsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERhdGFHcmlkcy5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpz
CmluZGV4IDJmODIzYzQwNDQ2YTA0NTgxNDQzMDdlODU0N2U3NjQ2MjFjNzI3M2QuLjgyNzA2NWE1
MmNhZmMwOWI0NTBlNzg2YjA5YTBiMzk2OWE5NDZlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpz
CkBAIC03MCw2ICs3MCwxMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRh
R3JpZC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLnJvb3ROb2RlKCkuY2hpbGRy
ZW47CiAgICAgfSwKIAorICAgIHNlbGVjdE9iamVjdEJ5SGVhcFNuYXBzaG90SWQ6IGZ1bmN0aW9u
KGhlYXBTbmFwc2hvdE9iamVjdElkKQorICAgIHsKKyAgICB9LAorCiAgICAgY2hhbmdlTmFtZUZp
bHRlcjogZnVuY3Rpb24oZmlsdGVyKQogICAgIHsKICAgICAgICAgZmlsdGVyID0gZmlsdGVyLnRv
TG93ZXJDYXNlKCk7CkBAIC0zODUsNiArMzg5LDI2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RDb25zdHJ1Y3RvcnNEYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH1bc29ydENvbHVt
bl07CiAgICAgfSwKIAorICAgIHNlbGVjdE9iamVjdEJ5SGVhcFNuYXBzaG90SWQ6IGZ1bmN0aW9u
KGlkKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZGlkR2V0Q2xhc3NOYW1lKGNsYXNzTmFtZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjbGFzc05hbWUpIHsKKyAgICAgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IubG9nKCJDYW5ub3QgZGV0ZXJtaW5lIG5vZGUgY2xhc3MgbmFtZS4iKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
Y29uc3RydWN0b3JOb2RlcyA9IHRoaXMudG9wTGV2ZWxOb2RlcygpOworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjb25zdHJ1Y3Rvck5vZGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnN0cnVjdG9yTm9kZXNbaV07CisgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudC5fbmFtZSA9PT0gY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAgICAgICAg
IHBhcmVudC5yZXZlYWxOb2RlQnlTbmFwc2hvdE9iamVjdElkKHBhcnNlSW50KGlkLCAxMCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc25hcHNob3QuZ2V0Tm9kZUNsYXNzTmFtZShw
YXJzZUludChpZCwgMTApLCBkaWRHZXRDbGFzc05hbWUuYmluZCh0aGlzKSk7CisgICAgfSwKKwog
ICAgIHNldERhdGFTb3VyY2U6IGZ1bmN0aW9uKHNuYXBzaG90Vmlldywgc25hcHNob3QpCiAgICAg
ewogICAgICAgICB0aGlzLnNuYXBzaG90VmlldyA9IHNuYXBzaG90VmlldzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90R3JpZE5vZGVz
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RHcmlk
Tm9kZXMuanMKaW5kZXggNjRkOGY2ODI4Y2JlNjQ3ODBhY2ViNzBhMGQ5YzE4YThlZDA2MDU1Mi4u
ODdiN2UwODk4NzkwZGE4ODliMDc3MTJhNjEzNTdkYWZhODNlZjhiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RHcmlkTm9kZXMuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RHcmlk
Tm9kZXMuanMKQEAgLTQ0LDYgKzQ0LDkgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWRO
b2RlID0gZnVuY3Rpb24odHJlZSwgaGFzQ2hpbGRyZW4sIHByb3ZpZGVyKQogICAgIHRoaXMuX3By
b3ZpZGVyID0gcHJvdmlkZXI7CiAgICAgdGhpcy5fZGF0YUdyaWQgPSB0cmVlOwogICAgIHRoaXMu
X2luc3RhbmNlQ291bnQgPSAwOworCisgICAgdGhpcy5fc2F2ZWRDaGlsZHJlbiA9IG51bGw7Cisg
ICAgdGhpcy5fcG9zaXRpb25SYW5nZXMgPSBbXTsKICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIo
InBvcHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOwogfQogCkBAIC0xMDYsNyArMTA5LDcg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZSA9IHsKICAgICBf
cG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5yZW1vdmVFdmVu
dExpc3RlbmVyKCJwb3B1bGF0ZSIsIHRoaXMuX3BvcHVsYXRlLCB0aGlzKTsKLSAgICAgICAgZnVu
Y3Rpb24gc29ydGVkKGlnbm9yZWQpCisgICAgICAgIGZ1bmN0aW9uIHNvcnRlZCgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlQ2hpbGRyZW4oKTsKICAgICAgICAgfQpAQCAt
MTE0LDg0ICsxMTcsMTU5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90
b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7P251bWJlcn0gaG93
TWFueQotICAgICAqIEBwYXJhbSB7P251bWJlcn0gYXRJbmRleAorICAgICAqIEBwYXJhbSB7P251
bWJlcn0gZnJvbVBvc2l0aW9uCisgICAgICogQHBhcmFtIHs/bnVtYmVyfSB0b1Bvc2l0aW9uCiAg
ICAgICovCi0gICAgX3BvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGhvd01hbnksIGF0SW5kZXgs
IGFmdGVyUG9wdWxhdGUpCi0gICAgewotICAgICAgICBob3dNYW55ID0gaG93TWFueSB8fCB0aGlz
Ll9kYXRhR3JpZC5kZWZhdWx0UG9wdWxhdGVDb3VudCgpOwotICAgICAgICBhdEluZGV4ID0gYXRJ
bmRleCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKLSAgICAgICAgdmFyIGhhdmVTYXZlZENoaWxk
cmVuID0gISF0aGlzLl9zYXZlZENoaWxkcmVuOwotICAgICAgICBpZiAoaGF2ZVNhdmVkQ2hpbGRy
ZW4pIHsKLSAgICAgICAgICAgIGhhdmVTYXZlZENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBjIGluIHRoaXMuX3NhdmVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICBo
YXZlU2F2ZWRDaGlsZHJlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgX3Bv
cHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbiwgYWZ0ZXJQ
b3B1bGF0ZSkKKyAgICB7CisgICAgICAgIGZyb21Qb3NpdGlvbiA9IGZyb21Qb3NpdGlvbiB8fCAw
OworICAgICAgICB0b1Bvc2l0aW9uID0gdG9Qb3NpdGlvbiB8fCBmcm9tUG9zaXRpb24gKyB0aGlz
Ll9kYXRhR3JpZC5kZWZhdWx0UG9wdWxhdGVDb3VudCgpOworICAgICAgICB2YXIgZmlyc3ROb3RT
ZXJpYWxpemVkUG9zaXRpb24gPSBmcm9tUG9zaXRpb247CisgICAgICAgIGZ1bmN0aW9uIHNlcmlh
bGl6ZU5leHRDaHVuaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaXJzdE5vdFNlcmlh
bGl6ZWRQb3NpdGlvbiA+PSB0b1Bvc2l0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHZhciBlbmQgPSBNYXRoLm1pbihmaXJzdE5vdFNlcmlhbGl6ZWRQb3NpdGlvbiAr
IHRoaXMuX2RhdGFHcmlkLmRlZmF1bHRQb3B1bGF0ZUNvdW50KCksIHRvUG9zaXRpb24pOworICAg
ICAgICAgICAgdGhpcy5fcHJvdmlkZXIuc2VyaWFsaXplSXRlbXNSYW5nZShmaXJzdE5vdFNlcmlh
bGl6ZWRQb3NpdGlvbiwgZW5kLCBjaGlsZHJlblJldHJpZXZlZC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgICAgIGZpcnN0Tm90U2VyaWFsaXplZFBvc2l0aW9uID0gZW5kOworICAgICAgICB9CisgICAg
ICAgIGZ1bmN0aW9uIGluc2VydFJldHJpZXZlZENoaWxkKGl0ZW0sIGluc2VydGlvbkluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2F2ZWRDaGlsZHJlbikgeworICAgICAg
ICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fY2hpbGRIYXNoRm9yRW50aXR5KGl0ZW0pOworICAg
ICAgICAgICAgICAgIGlmIChoYXNoIGluIHRoaXMuX3NhdmVkQ2hpbGRyZW4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5pbnNlcnRDaGlsZCh0aGlzLl9zYXZlZENoaWxkcmVuW2hhc2hdLCBp
bnNlcnRpb25JbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmluc2VydENoaWxkKHRoaXMu
X2NyZWF0ZUNoaWxkTm9kZShpdGVtKSwgaW5zZXJ0aW9uSW5kZXgpOwogICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIHBhcnQgPSAwOwotICAgICAgICBmdW5jdGlvbiBjYWxsU2VyaWFsaXplKCkKKyAg
ICAgICAgZnVuY3Rpb24gaW5zZXJ0U2hvd01vcmVCdXR0b24oZnJvbSwgdG8sIGluc2VydGlvbklu
ZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocGFydCA+PSBob3dNYW55KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHBhcnQgKz0gdGhpcy5fZGF0YUdyaWQuZGVm
YXVsdFBvcHVsYXRlQ291bnQoKTsKLSAgICAgICAgICAgIHRoaXMuX3Byb3ZpZGVyLnNlcmlhbGl6
ZVN1YnNlcXVlbnRJdGVtcyh0aGlzLl9kYXRhR3JpZC5kZWZhdWx0UG9wdWxhdGVDb3VudCgpLCBj
aGlsZHJlblJldHJpZXZlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHZhciBidXR0b24gPSBu
ZXcgV2ViSW5zcGVjdG9yLlNob3dNb3JlRGF0YUdyaWROb2RlKHRoaXMuX3BvcHVsYXRlQ2hpbGRy
ZW4uYmluZCh0aGlzKSwgZnJvbSwgdG8sIHRoaXMuX2RhdGFHcmlkLmRlZmF1bHRQb3B1bGF0ZUNv
dW50KCkpOworICAgICAgICAgICAgdGhpcy5pbnNlcnRDaGlsZChidXR0b24sIGluc2VydGlvbklu
ZGV4KTsKICAgICAgICAgfQogICAgICAgICBmdW5jdGlvbiBjaGlsZHJlblJldHJpZXZlZChpdGVt
cykKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGl0ZW1zLnRvdGFsTGVuZ3Ro
OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldOwotICAgICAgICAgICAg
ICAgIGlmIChoYXZlU2F2ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgICAgICAgICB2YXIgaGFz
aCA9IHRoaXMuX2NoaWxkSGFzaEZvckVudGl0eShpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc2ggaW4gdGhpcy5fc2F2ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5pbnNlcnRDaGlsZCh0aGlzLl9zYXZlZENoaWxkcmVuW2hhc2hdLCBhdEluZGV4Kysp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB2YXIgaXRl
bUluZGV4ID0gMDsKKyAgICAgICAgICAgIHZhciBpdGVtUG9zaXRpb24gPSBpdGVtcy5zdGFydFBv
c2l0aW9uOworICAgICAgICAgICAgdmFyIGluc2VydGlvbkluZGV4ID0gMDsKKworICAgICAgICAg
ICAgaWYgKCF0aGlzLl9wb3NpdGlvblJhbmdlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXRlbXMuc3RhcnRQb3NpdGlvbiA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
cG9zaXRpb25SYW5nZXMucHVzaCh7ZnJvbTogMCwgdG86IDB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0U2hvd01vcmVCdXR0b24uY2FsbCh0aGlzLCAwLCBpdGVtcy5zdGFydFBvc2l0aW9u
LCBpbnNlcnRpb25JbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMuX3Bvc2l0aW9uUmFuZ2VzLnB1c2goe2Zyb206IGl0ZW1zLnN0YXJ0UG9zaXRpb24sIHRvOiBp
dGVtcy5lbmRQb3NpdGlvbn0pOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
aXRlbXMubGVuZ3RoOyBpIDwgbDsgKytpKQorICAgICAgICAgICAgICAgICAgICBpbnNlcnRSZXRy
aWV2ZWRDaGlsZC5jYWxsKHRoaXMsIGl0ZW1zW2ldLCBpbnNlcnRpb25JbmRleCsrKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXRlbXMuZW5kUG9zaXRpb24gPCBpdGVtcy50b3RhbExlbmd0aCkKKyAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0U2hvd01vcmVCdXR0b24uY2FsbCh0aGlzLCBpdGVtcy5l
bmRQb3NpdGlvbiwgaXRlbXMudG90YWxMZW5ndGgsIGluc2VydGlvbkluZGV4KyspOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2VJbmRleCA9IDA7CisgICAg
ICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdmFyIHJhbmdl
OworICAgICAgICAgICAgICAgIHdoaWxlIChyYW5nZUluZGV4IDwgdGhpcy5fcG9zaXRpb25SYW5n
ZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fcG9zaXRpb25S
YW5nZXNbcmFuZ2VJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS50byA+PSBp
dGVtUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvbkluZGV4ICs9IHJhbmdlLnRvIC0gcmFuZ2UuZnJvbTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCB0aGUgYnV0dG9uIGlmIHRoZXJlIGlzIG9uZS4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnRvIDwgaXRlbXMudG90YWxMZW5ndGgpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCArPSAxOworICAgICAgICAgICAg
ICAgICAgICArK3JhbmdlSW5kZXg7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJldmlvdXMg
YnV0dG9uLgorICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luc2VydGlvbkluZGV4
IC0gMV0uc2V0RW5kUG9zaXRpb24oaXRlbXMuc3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIGluc2VydFNob3dNb3JlQnV0dG9uLmNhbGwodGhpcywgaXRlbXMuc3RhcnRQb3NpdGlv
biwgaXRlbXMudG90YWxMZW5ndGgsIGluc2VydGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmFuZ2UgPSB7ZnJvbTogaXRlbXMuc3RhcnRQb3NpdGlvbiwgdG86IGl0ZW1zLnN0YXJ0UG9z
aXRpb259OworICAgICAgICAgICAgICAgICAgICByYW5nZUluZGV4ID0gdGhpcy5fcG9zaXRpb25S
YW5nZXMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblJhbmdlcy5w
dXNoKHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zLnN0YXJ0UG9zaXRp
b24gPCByYW5nZS5mcm9tKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcmV2aW91
cyBidXR0b24uCisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baW5zZXJ0aW9uSW5k
ZXggLSAxXS5zZXRFbmRQb3NpdGlvbihpdGVtcy5zdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0U2hvd01vcmVCdXR0b24uY2FsbCh0aGlzLCBpdGVtcy5zdGFydFBvc2l0
aW9uLCByYW5nZS5mcm9tLCBpbnNlcnRpb25JbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHJh
bmdlID0ge2Zyb206IGl0ZW1zLnN0YXJ0UG9zaXRpb24sIHRvOiBpdGVtcy5zdGFydFBvc2l0aW9u
fTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25SYW5nZXMuc3BsaWNlKHJhbmdl
SW5kZXgsIDAsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25JbmRleCArPSBpdGVtUG9zaXRpb24gLSByYW5nZS5mcm9tOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGluc2VydGlv
bkluZGV4IGlzIGFsd2F5cyBhbiBpbmRleCBiZWZvcmUgYnV0dG9uIG9yIGJldHdlZW4gbm9kZXMu
CisgICAgICAgICAgICAgICAgLy8gQWxzbyBpdCBpcyBhbHdheXMgdHJ1ZSBoZXJlIHRoYXQgcmFu
Z2UuZnJvbSA8PSBpdGVtUG9zaXRpb24gPD0gcmFuZ2UudG8KKworICAgICAgICAgICAgICAgIC8v
IFN0cmV0Y2ggdGhlIHJhbmdlIHJpZ2h0IGJvdW5kIHRvIGluY2x1ZGUgYWxsIG5ldyBpdGVtcy4K
KyAgICAgICAgICAgICAgICB3aGlsZSAocmFuZ2UudG8gPCBpdGVtcy5lbmRQb3NpdGlvbikgewor
ICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGFscmVhZHkgYWRkZWQgbm9kZXMuCisgICAgICAg
ICAgICAgICAgICAgIHZhciBza2lwQ291bnQgPSByYW5nZS50byAtIGl0ZW1Qb3NpdGlvbjsKKyAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXggKz0gc2tpcENvdW50OworICAgICAgICAg
ICAgICAgICAgICBpdGVtSW5kZXggKz0gc2tpcENvdW50OworICAgICAgICAgICAgICAgICAgICBp
dGVtUG9zaXRpb24gPSByYW5nZS50bzsKKworICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBh
dCB0aGUgcG9zaXRpb24gYmVmb3JlIGJ1dHRvbjogLi4uPD9ub2RlPng8YnV0dG9uPgorICAgICAg
ICAgICAgICAgICAgICB2YXIgbmV4dFJhbmdlID0gdGhpcy5fcG9zaXRpb25SYW5nZXNbcmFuZ2VJ
bmRleCArIDFdOworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3RW5kT2ZSYW5nZSA9IG5leHRS
YW5nZSA/IG5leHRSYW5nZS5mcm9tIDogaXRlbXMudG90YWxMZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChuZXdFbmRPZlJhbmdlID4gaXRlbXMuZW5kUG9zaXRpb24pCisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdFbmRPZlJhbmdlID0gaXRlbXMuZW5kUG9zaXRpb247CisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChpdGVtUG9zaXRpb24gPCBuZXdFbmRPZlJhbmdlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRSZXRyaWV2ZWRDaGlsZC5jYWxsKHRoaXMsIGl0ZW1z
W2l0ZW1JbmRleCsrXSwgaW5zZXJ0aW9uSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICArK2l0ZW1Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAvLyBNZXJnZSB3aXRoIHRoZSBuZXh0IHJhbmdlLgorICAgICAgICAgICAgICAgICAgICBp
ZiAobmV4dFJhbmdlICYmIG5ld0VuZE9mUmFuZ2UgPT09IG5leHRSYW5nZS5mcm9tKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZS50byA9IG5leHRSYW5nZS50bzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlbW92ZSAic2hvdyBuZXh0IiBidXR0b24gaWYgdGhlcmUgaXMgb25l
LgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmNoaWxkcmVu
W2luc2VydGlvbkluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlv
blJhbmdlcy5zcGxpY2UocmFuZ2VJbmRleCArIDEsIDEpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UudG8gPSBuZXdFbmRPZlJhbmdl
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG9yIHVwZGF0ZSBuZXh0IGJ1dHRv
bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdFbmRPZlJhbmdlID09PSBpdGVtcy50
b3RhbExlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxk
KHRoaXMuY2hpbGRyZW5baW5zZXJ0aW9uSW5kZXhdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luc2VydGlv
bkluZGV4XS5zZXRTdGFydFBvc2l0aW9uKGl0ZW1zLmVuZFBvc2l0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmluc2Vy
dENoaWxkKHRoaXMuX2NyZWF0ZUNoaWxkTm9kZShpdGVtKSwgYXRJbmRleCsrKTsKICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gVE9ETzogZml4IHRoaXMuCiAgICAgICAgICAgICB0aGlz
Ll9pbnN0YW5jZUNvdW50ICs9IGl0ZW1zLmxlbmd0aDsKLSAgICAgICAgICAgIGlmIChwYXJ0IDwg
aG93TWFueSkgewotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2FsbFNlcmlhbGl6ZS5iaW5k
KHRoaXMpLCAwKTsKKyAgICAgICAgICAgIGlmIChmaXJzdE5vdFNlcmlhbGl6ZWRQb3NpdGlvbiA8
IHRvUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHNlcmlhbGl6ZU5leHRD
aHVuay5iaW5kKHRoaXMpLCAwKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChpdGVtcy5oYXNOZXh0KQotICAgICAgICAgICAgICAgIHRo
aXMuaW5zZXJ0Q2hpbGQobmV3IFdlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlkTm9kZSh0aGlz
Ll9wb3B1bGF0ZUNoaWxkcmVuLmJpbmQodGhpcyksIHRoaXMuX2RhdGFHcmlkLmRlZmF1bHRQb3B1
bGF0ZUNvdW50KCksIGxlbmd0aCksIGF0SW5kZXgrKyk7CiAgICAgICAgICAgICBpZiAoYWZ0ZXJQ
b3B1bGF0ZSkKICAgICAgICAgICAgICAgICBhZnRlclBvcHVsYXRlKCk7Ci0gICAgICAgICAgICBm
dW5jdGlvbiBub3RpZnkoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJwb3B1bGF0ZSBjb21wbGV0ZSIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc2V0VGltZW91dChub3RpZnkuYmluZCh0aGlzKSwgMCk7CisgICAgICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygicG9wdWxhdGUgY29tcGxldGUiKTsK
ICAgICAgICAgfQotICAgICAgICBzZXRUaW1lb3V0KGNhbGxTZXJpYWxpemUuYmluZCh0aGlzKSwg
MCk7CisgICAgICAgIHNldFRpbWVvdXQoc2VyaWFsaXplTmV4dENodW5rLmJpbmQodGhpcyksIDAp
OwogICAgIH0sCiAKICAgICBfc2F2ZUNoaWxkcmVuOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICB0aGlzLl9zYXZlZENoaWxkcmVuID0ge307CisgICAgICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW4g
PSBudWxsOwogICAgICAgICBmb3IgKHZhciBpID0gMCwgY2hpbGRyZW5Db3VudCA9IHRoaXMuY2hp
bGRyZW4ubGVuZ3RoOyBpIDwgY2hpbGRyZW5Db3VudDsgKytpKSB7CiAgICAgICAgICAgICB2YXIg
Y2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOwotICAgICAgICAgICAgaWYgKGNoaWxkLmV4cGFuZGVk
KQotICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW5bdGhpcy5fY2hpbGRIYXNoRm9y
Tm9kZShjaGlsZCldID0gY2hpbGQ7CisgICAgICAgICAgICBpZiAoIWNoaWxkLmV4cGFuZGVkKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCF0aGlzLl9zYXZlZENo
aWxkcmVuKQorICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW4gPSB7fTsKKyAgICAg
ICAgICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW5bdGhpcy5fY2hpbGRIYXNoRm9yTm9kZShjaGlsZCld
ID0gY2hpbGQ7CiAgICAgICAgIH0KICAgICB9LAogCiAgICAgc29ydDogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgdGhpcy5fZGF0YUdyaWQucmVjdXJzaXZlU29ydGluZ0VudGVyKCk7Ci0gICAg
ICAgIGZ1bmN0aW9uIGFmdGVyU29ydChzb3J0ZWQpCisgICAgICAgIGZ1bmN0aW9uIGFmdGVyU29y
dCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc29ydGVkKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fZGF0YUdyaWQucmVjdXJzaXZlU29ydGluZ0xlYXZlKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5fc2F2ZUNoaWxkcmVu
KCk7CiAgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB0aGlz
Ll9wb3NpdGlvblJhbmdlcyA9IFtdOwogCiAgICAgICAgICAgICBmdW5jdGlvbiBhZnRlclBvcHVs
YXRlKCkKICAgICAgICAgICAgIHsKQEAgLTIwNCw3ICsyODIsNyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgdmFyIGluc3RhbmNlQ291bnQgPSB0aGlzLl9pbnN0YW5jZUNvdW50OwogICAgICAgICAgICAg
dGhpcy5faW5zdGFuY2VDb3VudCA9IDA7Ci0gICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZUNoaWxk
cmVuKGluc3RhbmNlQ291bnQsIG51bGwsIGFmdGVyUG9wdWxhdGUuYmluZCh0aGlzKSk7CisgICAg
ICAgICAgICB0aGlzLl9wb3B1bGF0ZUNoaWxkcmVuKDAsIGluc3RhbmNlQ291bnQsIGFmdGVyUG9w
dWxhdGUuYmluZCh0aGlzKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5fcHJvdmlkZXIuc29y
dEFuZFJld2luZCh0aGlzLmNvbXBhcmF0b3IoKSwgYWZ0ZXJTb3J0LmJpbmQodGhpcykpOwogICAg
IH0KQEAgLTYxMiw2ICs2OTAsNTAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVj
dG9yTm9kZSA9IGZ1bmN0aW9uKHRyZWUsIGNsYXNzTmFtZSwgYWdncmVnYXRlLAogfQogCiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlLnByb3RvdHlwZSA9IHsKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gc25hcHNob3RPYmplY3RJZAorICAgICAqLworICAg
IHJldmVhbE5vZGVCeVNuYXBzaG90T2JqZWN0SWQ6IGZ1bmN0aW9uKHNuYXBzaG90T2JqZWN0SWQp
CisgICAgeworICAgICAgICBmdW5jdGlvbiBkaWRHZXROb2RlUG9zaXRpb24obm9kZVBvc2l0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKCJkaWRHZXROb2RlUG9z
aXRpb24gIiArIG5vZGVQb3NpdGlvbik7CisgICAgICAgICAgICBpZiAobm9kZVBvc2l0aW9uICE9
PSAtMSkKKyAgICAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZUNoaWxkcmVuKG5vZGVQb3NpdGlv
biwgbnVsbCwgZGlkUG9wdWxhdGVDaGlsZHJlbi5iaW5kKHRoaXMsIG5vZGVQb3NpdGlvbikpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZGlkUG9wdWxhdGVDaGlsZHJlbihub2RlUG9z
aXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBpbmRleE9mRmlyc0NoaWxkSW5SYW5n
ZSA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Bvc2l0aW9uUmFu
Z2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9wb3Np
dGlvblJhbmdlc1tpXTsKKyAgICAgICAgICAgICAgIGlmIChyYW5nZS5mcm9tIDw9IG5vZGVQb3Np
dGlvbiAmJiBub2RlUG9zaXRpb24gPCByYW5nZS50bykgeworICAgICAgICAgICAgICAgICAgIHZh
ciBjaGlsZEluZGV4ID0gaW5kZXhPZkZpcnNDaGlsZEluUmFuZ2UgKyBub2RlUG9zaXRpb24gLSBy
YW5nZS5mcm9tOworICAgICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZU5vZGUgPSB0aGlzLmNo
aWxkcmVuW2NoaWxkSW5kZXhdOworICAgICAgICAgICAgICAgICAgIC8vaW5zdGFuY2VOb2RlLmVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlnaGxpZ2h0Iik7CisgICAgICAgICAgICAgICAgICAgaW5z
dGFuY2VOb2RlLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlnaGxpZ2h0ZWQtcm93Iik7CisgICAg
ICAgICAgICAgICAgICAgaW5zdGFuY2VOb2RlLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRl
ZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICBpbmRleE9mRmlyc0NoaWxkSW5SYW5nZSArPSByYW5nZS50byAtIHJhbmdl
LmZyb20gKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5leHBh
bmQoKTsKKyAgICAgICAgdGhpcy5fcHJvdmlkZXIuZ2V0Tm9kZVBvc2l0aW9uKHNuYXBzaG90T2Jq
ZWN0SWQsIGRpZEdldE5vZGVQb3NpdGlvbi5iaW5kKHRoaXMpKTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLmxvZygiZmluZEFuZFNlcmlhbGl6ZUl0ZW1zICIgKyBzbmFwc2hvdE9iamVjdElkKTsKKyAg
ICB9LAorCisgICAgX2hpZ2hsaWdodENoaWxkOiBmdW5jdGlvbihjaGlsZEluZGV4KQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX2RhdGFHcmlkLl9oaWdobGlnaHRlZFJvd0VsZW1lbnQpCisgICAg
ICAgICAgICB0aGlzLl9kYXRhR3JpZC5faGlnaGxpZ2h0ZWRSb3dFbGVtZW50LnJlbW92ZWRTdHls
ZUNsYXNzKCJoaWdobGlnaHRlZC1yb3ciKTsKKyAgICAgICAgdmFyIGluc3RhbmNlTm9kZUVsZW1l
bnQgPSB0aGlzLmNoaWxkcmVuW2NoaWxkSW5kZXhdLmVsZW1lbnQ7CisgICAgICAgIGluc3RhbmNl
Tm9kZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKKyAgICAgICAgaW5zdGFu
Y2VOb2RlRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWdobGlnaHRlZC1yb3ciKTsKKyAgICAgICAg
dGhpcy5fZGF0YUdyaWQuX2hpZ2hsaWdodGVkUm93RWxlbWVudCA9IGluc3RhbmNlTm9kZUVsZW1l
bnQ7CisgICAgfSwKKwogICAgIGNyZWF0ZUNlbGw6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIp
CiAgICAgewogICAgICAgICB2YXIgY2VsbCA9IGNvbHVtbklkZW50aWZpZXIgIT09ICJvYmplY3Qi
ID8gdGhpcy5fY3JlYXRlVmFsdWVDZWxsKGNvbHVtbklkZW50aWZpZXIpIDogV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsLmNhbGwodGhpcywgY29s
dW1uSWRlbnRpZmllcik7CkBAIC02OTMsNyArODE1LDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERpZmZOb2Rlc1Byb3ZpZGVyID0gZnVuY3Rpb24oYWRkZWROb2Rlc1Byb3ZpZGVyLCBkZWxl
dGUKICAgICB0aGlzLl9kZWxldGVkTm9kZXNQcm92aWRlciA9IGRlbGV0ZWROb2Rlc1Byb3ZpZGVy
OwogICAgIHRoaXMuX2FkZGVkQ291bnQgPSBhZGRlZENvdW50OwogICAgIHRoaXMuX3JlbW92ZWRD
b3VudCA9IHJlbW92ZWRDb3VudDsKLSAgICB0aGlzLl9zZXJpYWxpemVkSXRlbXNDb3VudCA9IDA7
CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZXNQcm92aWRlci5wcm90b3R5
cGUgPSB7CkBAIC03MDgsMjIgKzgyOSwyMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlm
Zk5vZGVzUHJvdmlkZXIucHJvdG90eXBlID0gewogICAgICAgICBjYWxsYmFjayhmYWxzZSk7CiAg
ICAgfSwKIAotICAgIHNlcmlhbGl6ZVN1YnNlcXVlbnRJdGVtczogZnVuY3Rpb24oY291bnQsIGNh
bGxiYWNrKQorICAgIHNlcmlhbGl6ZUl0ZW1zUmFuZ2U6IGZ1bmN0aW9uKGJlZ2luUG9zaXRpb24s
IGVuZFBvc2l0aW9uLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGRpZFJlY2Vp
dmVBbGxJdGVtcyhpdGVtcykKICAgICAgICAgewotICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXpl
ZEl0ZW1zQ291bnQgKz0gaXRlbXMubGVuZ3RoOwogICAgICAgICAgICAgaXRlbXMudG90YWxMZW5n
dGggPSB0aGlzLl9hZGRlZENvdW50ICsgdGhpcy5fcmVtb3ZlZENvdW50OwogICAgICAgICAgICAg
Y2FsbGJhY2soaXRlbXMpOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gZGlkUmVjZWl2
ZURlbGV0ZWRJdGVtcyhhZGRlZEl0ZW1zLCBpdGVtcykKICAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFhZGRlZEl0ZW1zLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBhZGRlZEl0ZW1zLmJlZ2lu
UG9zaXRpb24gPSB0aGlzLl9hZGRlZENvdW50ICsgaXRlbXMuYmVnaW5Qb3NpdGlvbjsKICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAg
ICAgICAgICBpdGVtc1tpXS5pc0FkZGVkTm90UmVtb3ZlZCA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGFkZGVkSXRlbXMucHVzaChpdGVtc1tpXSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhZGRlZEl0ZW1zLmhhc05leHQgPSBpdGVtcy5oYXNOZXh0OworICAgICAgICAgICAgYWRkZWRJ
dGVtcy5lbmRQb3NpdGlvbiA9IHRoaXMuX2FkZGVkQ291bnQgKyBpdGVtcy5lbmRQb3NpdGlvbjsK
ICAgICAgICAgICAgIGRpZFJlY2VpdmVBbGxJdGVtcy5jYWxsKHRoaXMsIGFkZGVkSXRlbXMpOwog
ICAgICAgICB9CiAKQEAgLTczMSwyNiArODUzLDIyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REaWZmTm9kZXNQcm92aWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAg
aXRlbXNbaV0uaXNBZGRlZE5vdFJlbW92ZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGl0ZW1z
Lmxlbmd0aCA8IGNvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxldGVkTm9k
ZXNQcm92aWRlci5zZXJpYWxpemVTdWJzZXF1ZW50SXRlbXMoY291bnQgLSBpdGVtcy5sZW5ndGgs
IGRpZFJlY2VpdmVEZWxldGVkSXRlbXMuYmluZCh0aGlzLCBpdGVtcykpOworICAgICAgICAgICAg
aWYgKGl0ZW1zLmVuZFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2RlbGV0ZWROb2Rlc1Byb3ZpZGVyLnNlcmlhbGl6ZUl0ZW1zUmFuZ2UoMCwgZW5k
UG9zaXRpb24gLSBpdGVtcy5lbmRQb3NpdGlvbiwgZGlkUmVjZWl2ZURlbGV0ZWRJdGVtcy5iaW5k
KHRoaXMsIGl0ZW1zKSk7CiAKICAgICAgICAgICAgIGl0ZW1zLnRvdGFsTGVuZ3RoID0gdGhpcy5f
YWRkZWRDb3VudCArIHRoaXMuX3JlbW92ZWRDb3VudDsKLSAgICAgICAgICAgIGlmICghaXRlbXMu
aGFzTmV4dCkKLSAgICAgICAgICAgICAgICBpdGVtcy5oYXNOZXh0ID0gISF0aGlzLl9yZW1vdmVk
Q291bnQ7CiAgICAgICAgICAgICBkaWRSZWNlaXZlQWxsSXRlbXMuY2FsbCh0aGlzLCBpdGVtcyk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodGhpcy5fc2VyaWFsaXplZEl0ZW1zQ291bnQgPCB0
aGlzLl9hZGRlZENvdW50KQotICAgICAgICAgICAgdGhpcy5fYWRkZWROb2Rlc1Byb3ZpZGVyLnNl
cmlhbGl6ZVN1YnNlcXVlbnRJdGVtcyhjb3VudCwgZGlkUmVjZWl2ZUFkZGVkSXRlbXMuYmluZCh0
aGlzKSk7CisgICAgICAgIGlmIChiZWdpblBvc2l0aW9uIDwgdGhpcy5fYWRkZWRDb3VudCkKKyAg
ICAgICAgICAgIHRoaXMuX2FkZGVkTm9kZXNQcm92aWRlci5zZXJpYWxpemVJdGVtc1JhbmdlKGJl
Z2luUG9zaXRpb24sIGVuZFBvc2l0aW9uLCBkaWRSZWNlaXZlQWRkZWRJdGVtcy5iaW5kKHRoaXMp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fZGVsZXRlZE5vZGVzUHJvdmlkZXIu
c2VyaWFsaXplU3Vic2VxdWVudEl0ZW1zKGNvdW50LCBkaWRSZWNlaXZlRGVsZXRlZEl0ZW1zLmJp
bmQodGhpcywgW10pKTsKKyAgICAgICAgICAgIHRoaXMuX2RlbGV0ZWROb2Rlc1Byb3ZpZGVyLnNl
cmlhbGl6ZUl0ZW1zUmFuZ2UoYmVnaW5Qb3NpdGlvbiAtIHRoaXMuX2FkZGVkQ291bnQsIGVuZFBv
c2l0aW9uIC0gdGhpcy5fYWRkZWRDb3VudCwgZGlkUmVjZWl2ZURlbGV0ZWRJdGVtcy5iaW5kKHRo
aXMsIFtdKSk7CiAgICAgfSwKIAogICAgIHNvcnRBbmRSZXdpbmQ6IGZ1bmN0aW9uKGNvbXBhcmF0
b3IsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgdGhpcy5fc2VyaWFsaXplZEl0ZW1zQ291bnQg
PSAwOwotCi0gICAgICAgIGZ1bmN0aW9uIGFmdGVyU29ydChpZ25vcmVkKQorICAgICAgICBmdW5j
dGlvbiBhZnRlclNvcnQoKQogICAgICAgICB7CiAgICAgICAgICAgICB0aGlzLl9kZWxldGVkTm9k
ZXNQcm92aWRlci5zb3J0QW5kUmV3aW5kKGNvbXBhcmF0b3IsIGNhbGxiYWNrKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25h
cHNob3RQcm94eS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90UHJveHkuanMKaW5kZXggMmJjNGUwNGM0ZmY2YTk4NWZlMDZiYzcwZTE4ZTQ3YTRlZjA2
OTQ2ZS4uNjc4NjYyZDM4ODk3MDk2NzVlOGIyNjRkODFkZWJmMDU5YTcwOTAxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFBy
b3h5LmpzCkBAIC0xMjQsNyArMTI0LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtl
ciA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLl9jYWxsYmFja3MgPSBbXTsKICAgICB0aGlzLl9wcmV2
aW91c0NhbGxiYWNrcyA9IFtdOwogICAgIC8vIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHdvcmtl
cnMgaW4gQ2hyb21pdW0gRFJULgotICAgIHRoaXMuX3dvcmtlciA9IHR5cGVvZiBJbnNwZWN0b3JU
ZXN0ID09PSAidW5kZWZpbmVkIiA/IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVhbFdv
cmtlcigpIDogbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGYWtlV29ya2VyKCk7CisgICAg
dGhpcy5fd29ya2VyID0gIC8qdHlwZW9mIEluc3BlY3RvclRlc3QgPT09ICJ1bmRlZmluZWQiID8g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWFsV29ya2VyKCkgOiovIG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RmFrZVdvcmtlcigpOwogICAgIHRoaXMuX3dvcmtlci5hZGRFdmVu
dExpc3RlbmVyKCJtZXNzYWdlIiwgdGhpcy5fbWVzc2FnZVJlY2VpdmVkLCB0aGlzKTsKIH0KIApA
QCAtMzgyLDYgKzM4MiwxMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLmNhbGxNZXRob2QoY2FsbGJhY2ssICJjYWxjdWxhdGVTbmFw
c2hvdERpZmYiLCBiYXNlU25hcHNob3RJZCwgYmFzZVNuYXBzaG90QWdncmVnYXRlcyk7CiAgICAg
fSwKIAorICAgIGdldE5vZGVDbGFzc05hbWU6IGZ1bmN0aW9uKHNuYXBzaG90T2JqZWN0SWQsIGNh
bGxiYWNrKQorICAgIHsKKyAgICAgICAgdGhpcy5jYWxsTWV0aG9kKGNhbGxiYWNrLCAiZ2V0Tm9k
ZUNsYXNzTmFtZSIsIHNuYXBzaG90T2JqZWN0SWQpOworICAgIH0sCisKICAgICBjcmVhdGVFZGdl
c1Byb3ZpZGVyOiBmdW5jdGlvbihub2RlSW5kZXgsIGZpbHRlcikKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLmNhbGxGYWN0b3J5TWV0aG9kKG51bGwsICJjcmVhdGVFZGdlc1Byb3ZpZGVyIiwg
IldlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5Iiwgbm9kZUluZGV4LCBmaWx0
ZXIpOwpAQCAtNDg2LDE0ICs0OTEsMjQgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3Zp
ZGVyUHJveHkgPSBmdW5jdGlvbih3b3JrZXIsIG9iamVjdElkKQogfQogCiBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eS5wcm90b3R5cGUgPSB7CisgICAgZ2V0Tm9kZVBvc2l0
aW9uOiBmdW5jdGlvbihzbmFwc2hvdE9iamVjdElkLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAg
IHRoaXMuY2FsbE1ldGhvZChjYWxsYmFjaywgImdldE5vZGVQb3NpdGlvbiIsIHNuYXBzaG90T2Jq
ZWN0SWQpOworICAgIH0sCisKICAgICBpc0VtcHR5OiBmdW5jdGlvbihjYWxsYmFjaykKICAgICB7
CiAgICAgICAgIHRoaXMuY2FsbEdldHRlcihjYWxsYmFjaywgImlzRW1wdHkiKTsKICAgICB9LAog
Ci0gICAgc2VyaWFsaXplU3Vic2VxdWVudEl0ZW1zOiBmdW5jdGlvbihjb3VudCwgY2FsbGJhY2sp
CisgICAgc2VyaWFsaXplSXRlbXNSYW5nZTogZnVuY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24sIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGhpcy5jYWxsTWV0aG9kKGNhbGxiYWNr
LCAic2VyaWFsaXplSXRlbXNSYW5nZSIsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAg
ICB9LAorCisgICAgZmluZEFuZFNlcmlhbGl6ZUl0ZW1zOiBmdW5jdGlvbihzbmFwc2hvdE9iamVj
dElkLCBjb3VudCwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB0aGlzLmNhbGxNZXRob2QoY2Fs
bGJhY2ssICJzZXJpYWxpemVTdWJzZXF1ZW50SXRlbXMiLCBjb3VudCk7CisgICAgICAgIHRoaXMu
Y2FsbE1ldGhvZChjYWxsYmFjaywgImZpbmRBbmRTZXJpYWxpemVJdGVtcyIsIHNuYXBzaG90T2Jq
ZWN0SWQsIGNvdW50KTsKICAgICB9LAogCiAgICAgc29ydEFuZFJld2luZDogZnVuY3Rpb24oY29t
cGFyYXRvciwgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwppbmRleCBiNDY1NmQy
NDUzYjc0Njc2ZDNkOGQwZDlkZTI1MWJkZTM1NTViM2MzLi44MWZmNWIwM2JlNGVkMjY5NTgzZWM2
ZmExYzJlMWMzM2M2MmQ0YWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKQEAgLTUxLDYg
KzUxLDM1IEBAIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW9u
KG9iamVjdCwgdGl0bGUsIHN1YnRpdGxlLCBlbXB0eVBsCiBXZWJJbnNwZWN0b3IuT2JqZWN0UHJv
cGVydGllc1NlY3Rpb24uX2FycmF5TG9hZFRocmVzaG9sZCA9IDEwMDsKIAogV2ViSW5zcGVjdG9y
Lk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBhZGRSZXZlYWxBY3Rp
b246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51RXZlbnRGaXJlZC5iaW5kKHRoaXMp
LCB0cnVlKTsKKyAgICB9LAorCisgICAgX2NvbnRleHRNZW51RXZlbnRGaXJlZDogZnVuY3Rpb24o
ZXZlbnQpCisgICAgeworICAgICAgICBmdW5jdGlvbiByZXZlYWxJbkRvbWluYXRvcnNWaWV3KCkK
KyAgICAgICAgeworICAgICAgICAgICAgdmFyIG9iamVjdElkID0gdGhpcy5vYmplY3Qub2JqZWN0
SWQ7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKCJyZXZlYWxJbkRvbWluYXRvcnNWaWV3
ICIgKyBvYmplY3RJZCk7CisgICAgICAgICAgICAvLyBGSVhNRTogRG9uJ3Qgc2hvdyBtZW51IGl0
ZW0gZm9yIHN1Y2ggb2JqZWN0cy4KKyAgICAgICAgICAgIGlmICghb2JqZWN0SWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRIZWFwT2JqZWN0
SWQob2JqZWN0SWQsIGRpZFJlY2VpdmVIZWFwT2JqZWN0SWQuYmluZCh0aGlzKSk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZlSGVhcE9iamVjdElkKGVycm9yLCByZXN1
bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2coImRpZFJlY2VpdmVI
ZWFwT2JqZWN0SWQgZXJyb3IgPSAiICsgZXJyb3IgKyAiIHJlc3VsdCA9ICIgKyByZXN1bHQpOwor
ICAgICAgICAgICAgaWYgKCFlcnJvcikKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLnByb2ZpbGVzLnNob3dPYmplY3QocmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKKyAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJldmVhbCBpbiBE
b21pbmF0b3JzIFZpZXciKSwgcmV2ZWFsSW5Eb21pbmF0b3JzVmlldy5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgY29udGV4dE1lbnUuc2hvdyhldmVudCk7CisgICAgfSwKKwogICAgIG9ucG9wdWxhdGU6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMudXBkYXRlKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKaW5kZXggYTgy
MWM5Mjg5MzhhYzIyNjNhYWJjY2Q1NDY4NGJiZDZmZWJmNTU3YS4uM2NiNjU1YWY5ZWNiYjc5M2U3
ZmY4NDAyZmFlYmMzZjM4NDY2ZDU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwpAQCAtNTIyLDYgKzUyMiwyNSBAQCBXZWJJ
bnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfSwKIAorICAgIHNob3dPYmplY3Q6IGZ1bmN0aW9uKHNuYXBzaG90T2JqZWN0SWQp
CisgICAgeworICAgICAgICB2YXIgaGVhcFByb2ZpbGVzID0gdGhpcy5nZXRQcm9maWxlcyhXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBoZWFwUHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZh
ciBwcm9maWxlID0gaGVhcFByb2ZpbGVzW2ldOworICAgICAgICAgICAgLy8gVE9ETzogYWxsb3cg
dG8gY2hvb3NlIHNuYXBzaG90IGlmIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMuCisgICAgICAg
ICAgICBpZiAocHJvZmlsZS5tYXhKU09iamVjdElkID49IHNuYXBzaG90T2JqZWN0SWQpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNob3dQcm9maWxlKHByb2ZpbGUpOworICAgICAgICAgICAgICAg
IHByb2ZpbGUuX3Byb2ZpbGVWaWV3LmNoYW5nZVZpZXcoIlN1bW1hcnkiLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZygic3dpdGNoZWQgdG8gc3VtbWFy
eSB2aWV3Iik7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLl9wcm9maWxlVmlldy5k
YXRhR3JpZCAhPT0gIHByb2ZpbGUuX3Byb2ZpbGVWaWV3LmNvbnN0cnVjdG9yc0RhdGFHcmlkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBwcm9m
aWxlLl9wcm9maWxlVmlldy5kYXRhR3JpZC5zZWxlY3RPYmplY3RCeUhlYXBTbmFwc2hvdElkKHNu
YXBzaG90T2JqZWN0SWQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKwogICAgIC8qKgogICAgICAq
IEBwYXJhbSB7c3RyaW5nfSB0eXBlSWQKICAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJv
ZmlsZUhlYWRlcn0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2hvd01vcmVEYXRhR3JpZE5vZGUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Nob3dNb3JlRGF0YUdyaWROb2RlLmpzCmluZGV4IGU5YWM2YzUxNGJjZDJhN2I0MTM2
NzQ1MzUzOTZhMjBmY2UyZDM5YmYuLmQ5YmE1MThlMDQ5ZTY4OTkxYzIzOWY2NjcwMmI1ZDQ2ZTNk
NDI1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2hv
d01vcmVEYXRhR3JpZE5vZGUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TaG93TW9yZURhdGFHcmlkTm9kZS5qcwpAQCAtMzIsMzIgKzMyLDQ1IEBACiAgKiBAY29u
c3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlfQogICovCi1X
ZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5vZGUgPSBmdW5jdGlvbihjYWxsYmFjaywgbmV4
dENvdW50LCBhbGxDb3VudCkKK1dlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlkTm9kZSA9IGZ1
bmN0aW9uKGNhbGxiYWNrLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY2h1bmtTaXplKQog
ewotICAgIGZ1bmN0aW9uIHBvcHVsYXRlKGNvdW50KQotICAgIHsKLSAgICAgICAgdmFyIGluZGV4
ID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTsKLSAgICAgICAgdGhpcy5wYXJl
bnQucmVtb3ZlQ2hpbGQodGhpcyk7Ci0gICAgICAgIGNhbGxiYWNrKGNvdW50LCBpbmRleCk7Ci0g
ICAgfQorICAgIFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUuY2FsbCh0aGlzLCB7c3VtbWFyeVJv
dzp0cnVlfSwgZmFsc2UpOworICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdGhp
cy5fc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CisgICAgdGhpcy5fZW5kUG9zaXRpb24g
PSBlbmRQb3NpdGlvbjsKKyAgICB0aGlzLl9jaHVua1NpemUgPSBjaHVua1NpemU7CiAKICAgICB0
aGlzLnNob3dOZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgdGhp
cy5zaG93TmV4dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiYnV0dG9uIik7Ci0gICAgdGhpcy5zaG93
TmV4dC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBuZXh0ICVkIiwg
bmV4dENvdW50KTsKLSAgICB0aGlzLnNob3dOZXh0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
cG9wdWxhdGUuYmluZCh0aGlzLCBuZXh0Q291bnQpLCBmYWxzZSk7CisgICAgdGhpcy5zaG93TmV4
dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3Nob3dOZXh0Q2h1bmsuYmluZCh0aGlz
KSwgZmFsc2UpOwogCi0gICAgaWYgKGFsbENvdW50KSB7Ci0gICAgICAgIHRoaXMuc2hvd0FsbCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwotICAgICAgICB0aGlzLnNob3dBbGwu
c2V0QXR0cmlidXRlKCJ0eXBlIiwgImJ1dHRvbiIpOwotICAgICAgICB0aGlzLnNob3dBbGwudGV4
dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgYWxsICVkIiwgYWxsQ291bnQp
OwotICAgICAgICB0aGlzLnNob3dBbGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBwb3B1bGF0
ZS5iaW5kKHRoaXMsIGFsbENvdW50KSwgZmFsc2UpOwotICAgIH0KKyAgICB0aGlzLnNob3dBbGwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKKyAgICB0aGlzLnNob3dBbGwuc2V0
QXR0cmlidXRlKCJ0eXBlIiwgImJ1dHRvbiIpOworICAgIHRoaXMuc2hvd0FsbC5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIHRoaXMuX3Nob3dBbGwuYmluZCh0aGlzKSwgZmFsc2UpOwogCi0gICAg
V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5jYWxsKHRoaXMsIHtzdW1tYXJ5Um93OnRydWV9LCBm
YWxzZSk7CisgICAgdGhpcy5fdXBkYXRlTGFiZWxzKCk7CiAgICAgdGhpcy5zZWxlY3RhYmxlID0g
ZmFsc2U7CiB9CiAKIFdlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlkTm9kZS5wcm90b3R5cGUg
PSB7CisgICAgX3Nob3dOZXh0Q2h1bms6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
X2NhbGxiYWNrKHRoaXMuX3N0YXJ0UG9zaXRpb24sIHRoaXMuX3N0YXJ0UG9zaXRpb24gKyB0aGlz
Ll9jaHVua1NpemUpOworICAgIH0sCisKKyAgICBfc2hvd0FsbDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fY2FsbGJhY2sodGhpcy5fc3RhcnRQb3NpdGlvbiwgdGhpcy5fZW5kUG9z
aXRpb24pOworICAgIH0sCisKKyAgICBfdXBkYXRlTGFiZWxzOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB2YXIgdG90YWxTaXplID0gdGhpcy5fZW5kUG9zaXRpb24gLSB0aGlzLl9zdGFydFBv
c2l0aW9uOworICAgICAgICB2YXIgbmV4dENodW5rU2l6ZSA9IE1hdGgubWluKHRoaXMuX2NodW5r
U2l6ZSwgdG90YWxTaXplKTsKKyAgICAgICAgdGhpcy5zaG93TmV4dC50ZXh0Q29udGVudCA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBuZXh0ICVkIiwgbmV4dENodW5rU2l6ZSk7CisgICAg
ICAgIHRoaXMuc2hvd0FsbC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hv
dyBhbGwgJWQiLCB0b3RhbFNpemUpOworICAgIH0sCisKICAgICBjcmVhdGVDZWxsczogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0
ZCIpOwpAQCAtNzksNiArOTIsMjQgQEAgV2ViSW5zcGVjdG9yLlNob3dNb3JlRGF0YUdyaWROb2Rl
LnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9
IGZyb20KKyAgICAgKi8KKyAgICBzZXRTdGFydFBvc2l0aW9uOiBmdW5jdGlvbihmcm9tKQorICAg
IHsKKyAgICAgICAgdGhpcy5fc3RhcnRQb3NpdGlvbiA9IGZyb207CisgICAgICAgIHRoaXMuX3Vw
ZGF0ZUxhYmVscygpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0g
dG8KKyAgICAgKi8KKyAgICBzZXRFbmRQb3NpdGlvbjogZnVuY3Rpb24odG8pCisgICAgeworICAg
ICAgICB0aGlzLl9lbmRQb3NpdGlvbiA9IHRvOworICAgICAgICB0aGlzLl91cGRhdGVMYWJlbHMo
KTsKKyAgICB9LAorCisgICAgLyoqCiAgICAgICogQG92ZXJyaWRlCiAgICAgICogQHJldHVybiB7
bnVtYmVyfQogICAgICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9wcm9maWxlc1BhbmVsLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvcHJvZmlsZXNQYW5lbC5jc3MKaW5kZXggMTBmNmI0OWZlZGYzN2I1ZDc1ODVlYTlmZmEz
Y2FlODFjN2EyM2JkZC4uYTdmMmJhY2ZiMTM4MjNlOTAxNzhmMDRiMTRkZDg5YjY4ZTJhMDczNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9wcm9maWxlc1Bh
bmVsLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVz
UGFuZWwuY3NzCkBAIC0xODYsMyArMTg2LDEyIEBACiBib2R5LmluYWN0aXZlIC5wcm9maWxlLWxh
dW5jaGVyLXZpZXctY29udGVudCBidXR0b24ucnVubmluZzpub3QoLnN0YXR1cy1iYXItaXRlbSkg
ewogICAgIGNvbG9yOiByZ2IoMjIwLCAxMzAsIDEzMCk7CiB9CisKKy5oaWdobGlnaHRlZC1yb3cg
eworICAgIC13ZWJraXQtYW5pbWF0aW9uOiAicm93X2hpZ2hsaWdodCIgMnMgMHM7Cit9CisKK0At
d2Via2l0LWtleWZyYW1lcyByb3dfaGlnaGxpZ2h0IHsKKyAgICBmcm9tIHtiYWNrZ3JvdW5kLWNv
bG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7IH0KKyAgICB0byB7IGJhY2tncm91bmQtY29sb3I6IHdo
aXRlOyB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3V0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0
aWVzLmpzCmluZGV4IDAxNmQwNTYxMzZmYjM5MTdlNmEyYTRkYTBkMDY2NGIwODAyMDA4N2YuLmU1
MjBlYmRhZmNmNWEzM2FkNjRiZTg1NTUyZjQxMjdiOWM3ODkyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBAIC0yMTgsNiArMjE4LDEw
IEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJ1cHBlckJvdW5kIiwK
ICAgICB9CiB9KTsKIAorT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQzMkFycmF5LnByb3RvdHlw
ZSwgInNvcnQiLCB7CisgICB2YWx1ZTogQXJyYXkucHJvdG90eXBlLnNvcnQKK30pOworCiAoZnVu
Y3Rpb24oKSB7CiB2YXIgcGFydGl0aW9uID0gewogICAgIC8qKgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141400</attachid>
            <date>2012-05-11 06:32:11 -0700</date>
            <delta_ts>2012-05-12 08:54:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86204-20120511173209.patch</filename>
            <type>text/plain</type>
            <size>47358</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTgyMTAxNmFjZmFhZDE0
ZTQ5MjI1OTE2YTlhY2U3ZGJmZDZjMTZlMC4uYTQ2ZDBkMTJiMTRiMjY0ZjNjMTc1NmI0NGE2ZWZk
ODI0OTI3ZmQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA1LTExICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGhlYXAgcHJvZmlsZXIgc2hvdWxkIGFsbG93IHJldmVhbGluZyBhbiBlbGVtZW50IHdoaWNo
IGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODYyMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBKUyBvYmplY3RzIGluIHRoZSBjb25zb2xlIGhhdmUgY29udGV4dCBt
ZW51IGl0ZW0gdGhhdCBhbGxvd3MgdG8gcmV2ZWFsIHRoZW0gaW4gYSBoZWFwIHNuYXBzaG90IHZp
ZXcuCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6Z2V0SGVhcE9iamVjdElkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFNjcmlwdFByb2ZpbGVyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6
OmZpbmRPYmplY3RCeUlkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5oOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qczoKKyAgICAgICAgKC4pOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjpnZXRIZWFwT2JqZWN0SWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1lc3Nh
Z2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlw
ZS5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5w
cm90b3R5cGUuZ2V0Tm9kZUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5zZXJpYWxpemVJdGVt
c1JhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVy
ZWRJdGVyYXRvci5wcm90b3R5cGUuc29ydEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBlLnNvcnRBbmRSZXdpbmQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIucHJvdG90
eXBlLnNlcmlhbGl6ZUl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGVzUHJvdmlkZXIucHJvdG90eXBlLmdldE5vZGVQb3NpdGlvbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUuc2VyaWFsaXplSXRlbSk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90
b3R5cGUuc2VsZWN0T2JqZWN0QnlIZWFwU25hcHNob3RJZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQucHJvdG90eXBlLnNlbGVjdE9iamVj
dEJ5SGVhcFNuYXBzaG90SWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90R3JpZE5vZGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdy
aWROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90
b3R5cGUuX3BvcHVsYXRlLnNvcnRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90R3JpZE5vZGUucHJvdG90eXBlLl9wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLl9wb3B1bGF0ZUNoaWxkcmVuLnNlcmlhbGl6
ZU5leHRDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUu
cHJvdG90eXBlLl9wb3B1bGF0ZUNoaWxkcmVuLmluc2VydFJldHJpZXZlZENoaWxkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUuX3BvcHVsYXRl
Q2hpbGRyZW4uaW5zZXJ0U2hvd01vcmVCdXR0b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5fcG9wdWxhdGVDaGlsZHJlbi5jaGlsZHJlblJl
dHJpZXZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJv
dG90eXBlLl9wb3B1bGF0ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHcmlkTm9kZS5wcm90b3R5cGUuX3NhdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnNvcnQuYWZ0ZXJTb3J0KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUuc29ydCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlLnByb3Rv
dHlwZS5yZXZlYWxOb2RlQnlTbmFwc2hvdE9iamVjdElkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rvck5vZGUucHJvdG90eXBlLnJldmVhbE5vZGVCeVNuYXBz
aG90T2JqZWN0SWQuZGlkUG9wdWxhdGVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlLnByb3RvdHlwZS5faGlnaGxpZ2h0Q2hpbGQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rlc1Byb3ZpZGVyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZXNQcm92aWRlci5wcm90b3R5
cGUuc2VyaWFsaXplSXRlbXNSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RGlmZk5vZGVzUHJvdmlkZXIucHJvdG90eXBlLnNlcmlhbGl6ZUl0ZW1zUmFuZ2UuZGlkUmVj
ZWl2ZURlbGV0ZWRJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlm
Zk5vZGVzUHJvdmlkZXIucHJvdG90eXBlLnNlcmlhbGl6ZUl0ZW1zUmFuZ2UuZGlkUmVjZWl2ZUFk
ZGVkSXRlbXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rlc1By
b3ZpZGVyLnByb3RvdHlwZS5zb3J0QW5kUmV3aW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFdvcmtlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHku
cHJvdG90eXBlLmdldE5vZGVDbGFzc05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldE5vZGVQb3NpdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eS5wcm90b3R5cGUuc2VyaWFs
aXplSXRlbXNSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlk
ZXJQcm94eS5wcm90b3R5cGUuZmluZEFuZFNlcmlhbGl6ZUl0ZW1zKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5hZGRSZXZlYWxBY3Rp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLnByb3Rv
dHlwZS5fY29udGV4dE1lbnVFdmVudEZpcmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmpl
Y3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX2NvbnRleHRNZW51RXZlbnRGaXJlZC5kaWRS
ZWNlaXZlSGVhcE9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2Zp
bGVzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUuc2hvd09iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TaG93TW9yZURh
dGFHcmlkTm9kZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlkTm9k
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5vZGUucHJvdG90eXBl
Ll9zaG93TmV4dENodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlk
Tm9kZS5wcm90b3R5cGUuX3Nob3dBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNob3dNb3Jl
RGF0YUdyaWROb2RlLnByb3RvdHlwZS5fdXBkYXRlTGFiZWxzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TaG93TW9yZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuc2V0U3RhcnRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnNldEVu
ZFBvc2l0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVzUGFuZWwu
Y3NzOgorICAgICAgICAoLmhpZ2hsaWdodGVkLXJvdyk6CisgICAgICAgIChALXdlYmtpdC1rZXlm
cmFtZXMgcm93X2hpZ2hsaWdodCk6CisgICAgICAgICh0byk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC91dGlsaXRpZXMuanM6CisKIDIwMTItMDUtMTEgIFNoaW55YSBLYXdhbmFrYSAg
PHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtSZWZhY3RvcmluZ10gTW92ZSBTZWxl
Y3Rpb24gZnJvbSBET01XaW5kb3cgdG8gVHJlZVNjb3BlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuY3BwCmluZGV4IGM4ZGRkYmFjMzJmMGQ0YzA3NDczMTU3
NjIzOWZlZmVmZjA2ODQ3ZDQuLjJmOTUxYjA4YmEwOGI3NGE5MzMwMjc2Zjk5Njc3NjY4NjJjNDk5
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAK
QEAgLTUxLDYgKzUxLDExIEBAIFNjcmlwdE9iamVjdCBTY3JpcHRQcm9maWxlcjo6b2JqZWN0QnlI
ZWFwT2JqZWN0SWQodW5zaWduZWQpCiAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwogfQogCitT
dHJpbmcgU2NyaXB0UHJvZmlsZXI6OmdldEhlYXBPYmplY3RJZChTY3JpcHRWYWx1ZSkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0KFNjcmlw
dFN0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBKU0M6OlByb2ZpbGVy
Ojpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyhzdGF0ZSwgc3RyaW5nVG9VU3RyaW5nKHRpdGxl
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxl
ci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaAppbmRleCBl
ZmVkMDMxYTcxYWIzZjczZWJkNDZmYmE4MmI5ODEwNWMyZTg3YjBmLi4xZGM5YjYyNTc4NGQ1ZWU1
MjQzZjJkOWYzMDdkZDYxODdlNWEyMmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFByb2ZpbGVyLmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRE9NV3JhcHBlclZpc2l0b3I7CiBjbGFzcyBQYWdlOwogY2xhc3MgU2NyaXB0T2JqZWN0
OworY2xhc3MgU2NyaXB0VmFsdWU7CiBjbGFzcyBXb3JrZXJDb250ZXh0OwogCiBjbGFzcyBTY3Jp
cHRQcm9maWxlciB7CkBAIC01NSw2ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lk
IGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBvYmplY3RCeUhlYXBP
YmplY3RJZCh1bnNpZ25lZCBpZCk7CisgICAgc3RhdGljIFN0cmluZyBnZXRIZWFwT2JqZWN0SWQo
U2NyaXB0VmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0KFNjcmlwdFN0YXRlKiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIHZvaWQgc3RhcnRGb3JQYWdlKFBhZ2Uq
LCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICNpZiBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCAwNTZkOTJlMzBlNDNk
MzJhMmQzNTRmNGI0OGNmODJjZjY4YjllZjkwLi40MmUzNWMzNjdiMjMwMDMwMzg4ZjU4NTlhYTA3
NzE4NTdlYTE3NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRQcm9maWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJv
ZmlsZXIuY3BwCkBAIC0xMjEsNiArMTIxLDEyIEBAIFNjcmlwdE9iamVjdCBTY3JpcHRQcm9maWxl
cjo6b2JqZWN0QnlIZWFwT2JqZWN0SWQodW5zaWduZWQgaWQpCiAgICAgcmV0dXJuIFNjcmlwdE9i
amVjdChzY3JpcHRTdGF0ZSwgb2JqZWN0KTsKIH0KIAorU3RyaW5nIFNjcmlwdFByb2ZpbGVyOjpn
ZXRIZWFwT2JqZWN0SWQoU2NyaXB0VmFsdWUgdmFsdWUpCit7CisgICAgdjg6OlNuYXBzaG90T2Jq
ZWN0SWQgaWQgPSB2ODo6SGVhcFByb2ZpbGVyOjpHZXRTbmFwc2hvdE9iamVjdElkKHZhbHVlLnY4
VmFsdWUoKSk7CisgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGlkKTsKK30KKwogbmFtZXNwYWNl
IHsKIAogY2xhc3MgQWN0aXZpdHlDb250cm9sQWRhcHRlciA6IHB1YmxpYyB2ODo6QWN0aXZpdHlD
b250cm9sIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFBy
b2ZpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCmlu
ZGV4IDVkM2I5NjhhMjc2ZWE4MzAwMmYxMjM0ODNmNmVkNTRjNmMwNWJmYmQuLmFjMDAzODk2YjE5
M2VhMGFiYjFmMWM1YmM0MWJjMzc3MmQxZjYxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0UHJvZmlsZXIuaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBET01XcmFwcGVyVmlzaXRvcjsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBTY3JpcHRP
YmplY3Q7CitjbGFzcyBTY3JpcHRWYWx1ZTsKIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKIGNsYXNz
IFNjcmlwdFByb2ZpbGVyIHsKQEAgLTU5LDYgKzYwLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKICAgICBzdGF0aWMgU2NyaXB0T2JqZWN0IG9iamVjdEJ5
SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldEhlYXBPYmpl
Y3RJZChTY3JpcHRWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgc3RhcnQoU2NyaXB0U3RhdGUqIHN0
YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydEZvclBhZ2Uo
UGFnZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogI2lmIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggMWEzMWYwNmVkNDcx
MmY3ZjUxNTY2ZGM4YzZmYjgwZWI3MWYyOGY4NS4uMmYwZTYxNzg0NDI2NzYwMDMyZWRiN2E4ZjUy
MDBiY2YwOGE0ZDljNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuY3BwCkBAIC0xOTAsNiArMTkwLDE4IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBTZXJpYWxpemVkT2JqCiAgICAg
cmV0dXJuIHNjcmlwdFZhbHVlLmhhc05vVmFsdWUoKSA/IDAgOiB3cmFwT2JqZWN0KHNjcmlwdFZh
bHVlLCBncm91cE5hbWUpOwogfQogCitTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdDo6ZmluZE9i
amVjdEJ5SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWhh
c05vVmFsdWUoKSk7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1faW5qZWN0ZWRT
Y3JpcHRPYmplY3QsICJmaW5kT2JqZWN0QnlJZCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KG9iamVjdElkKTsKKworICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgU2Ny
aXB0VmFsdWUgcmVzdWx0VmFsdWUgPSBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rp
b24sIGhhZEV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOworICAgIHJldHVy
biByZXN1bHRWYWx1ZTsKK30KKwogdm9pZCBJbmplY3RlZFNjcmlwdDo6aW5zcGVjdE5vZGUoTm9k
ZSogbm9kZSkKIHsKICAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDZlZjM1MjUxYjNiZWM4OTkzOWVmZWVhNWZk
Y2U3MTUyNjRiYjUzZTYuLjhjNjczNmQ5Mzg4MDY1OWM5NTdkNDhkZGY3Y2I4ODY2MWFjNjUwMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCkBAIC05Myw2ICs5
Myw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHdyYXBPYmplY3QoU2NyaXB0VmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1l
KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IHdyYXBOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSk7CiAgICAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB3cmFwU2VyaWFsaXplZE9i
amVjdChTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSkgY29u
c3Q7CisgICAgU2NyaXB0VmFsdWUgZmluZE9iamVjdEJ5SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJ
ZCkgY29uc3Q7CisKICAgICB2b2lkIGluc3BlY3ROb2RlKE5vZGUqKTsKICAgICB2b2lkIHJlbGVh
c2VPYmplY3RHcm91cChjb25zdCBTdHJpbmcmKTsKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNv
dXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cwppbmRleCA4ODY5ZDdhNDBmMDI1MTRjMjU3YzJmOTA4MjczYjljZTI2YmU2ZmY3Li43ZTkxM2M4
YTJkZjQ2YzdlMmEwM2RjYjU3MzVkOGU1YjA1OTlkZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC0zODQsMTAgKzM4NCwxNSBA
QCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9pZFRv
V3JhcHBlZE9iamVjdFtvYmplY3RJZC5pZF07CiAgICAgfSwKIAotICAgIG5vZGVGb3JPYmplY3RJ
ZDogZnVuY3Rpb24ob2JqZWN0SWQpCisgICAgZmluZE9iamVjdEJ5SWQ6IGZ1bmN0aW9uKG9iamVj
dElkKQogICAgIHsKICAgICAgICAgdmFyIHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmpl
Y3RJZChvYmplY3RJZCk7Ci0gICAgICAgIHZhciBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChw
YXJzZWRPYmplY3RJZCk7CisgICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRP
YmplY3RJZCk7CisgICAgfSwKKworICAgIG5vZGVGb3JPYmplY3RJZDogZnVuY3Rpb24ob2JqZWN0
SWQpCisgICAgeworICAgICAgICB2YXIgb2JqZWN0ID0gdGhpcy5maW5kT2JqZWN0QnlJZChvYmpl
Y3RJZCk7CiAgICAgICAgIGlmICghb2JqZWN0IHx8IHRoaXMuX3N1YnR5cGUob2JqZWN0KSAhPT0g
Im5vZGUiKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHJldHVybiBvYmplY3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5kZXggNDgyMjk1OTVmZTkz
YjA5NWJhYTE1Y2UzYjhhOWRhMjg1NDE4MDFmYi4uZWUyMzU5ODZkZjQ3OTliMDA0ZTc5MzAxNjMx
OGY4OTJjYjZjZWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpA
QCAtMjY3MCw2ICsyNjcwLDE1IEBACiAgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCiAgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgIiRyZWYiOiAiUnVudGltZS5SZW1v
dGVPYmplY3QiLCAiZGVzY3JpcHRpb24iOiAiRXZhbHVhdGlvbiByZXN1bHQuIiB9CiAgICAgICAg
ICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAibmFtZSI6ICJnZXRIZWFwT2JqZWN0SWQiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdElkIiwgIiRyZWYiOiAi
UnVudGltZS5SZW1vdGVPYmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJJZGVudGlmaWVyIG9mIHRo
ZSBvYmplY3QgdG8gZ2V0IGhlYXAgb2JqZWN0IGlkIGZvci4iIH0KKyAgICAgICAgICAgICAgICBd
LAorICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImhlYXBTbmFwc2hvdE9iamVjdElkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkhlYXAgc25hcHNob3Qgb2JqZWN0IGlkLiIgfQorICAgICAgICAgICAgICAgIF0KICAg
ICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRleCBj
MWJjOGE0YWNjMGU3NTA2YzBiYWJhNmM5YjFhMTc2OWM3MDZkYzcwLi5lMTk4NjFiZTI4ZThhZGQ0
MzNmNTljZTIwMWVmNGM2YzQ1ODg1YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC00NDUsNiArNDQ1LDIxIEBAIHZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoRXJyb3JT
dHJpbmcqIGVycm9yLCBpbnQgaWQsCiAgICAgICAgICplcnJvciA9ICJGYWlsZWQgdG8gd3JhcCBv
YmplY3QiOwogfQogCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldEhlYXBPYmplY3RJ
ZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFN0cmlu
ZyogaGVhcFNuYXBzaG90T2JqZWN0SWQpCit7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJ
ZChvYmplY3RJZCk7CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgeworICAg
ICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGNvbnRleHQgaGFzIGdvbmUiOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFNjcmlwdFZhbHVlIGpzVmFsdWUgPSBpbmplY3RlZFNjcmlw
dC5maW5kT2JqZWN0QnlJZChvYmplY3RJZCk7CisgICAgaWYgKGpzVmFsdWUuaGFzTm9WYWx1ZSgp
IHx8IGpzVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiT2Jq
ZWN0IHdpdGggZ2l2ZW4gaWQgbm90IGZvdW5kIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAqaGVhcFNuYXBzaG90T2JqZWN0SWQgPSBTY3JpcHRQcm9maWxlcjo6Z2V0SGVhcE9iamVjdElk
KGpzVmFsdWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCmluZGV4IGIxNTgz
OTg4MGNiNDVlOGQ0MzNjNjc0Y2MwOTI2NjhkODgwZjgyZDIuLjhkOGZkYjkzNWJiNDUyZmU3NTc0
ZWU1ZDQ0MTQyYmM4NGI3NGVlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtOTcsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZyk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoRXJyb3JTdHJpbmcqLCBpbnQgaWQsIGNvbnN0
IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SGVhcE9iamVjdElkKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgU3RyaW5nKiBoZWFwU25hcHNob3RPYmpl
Y3RJZCk7CiAKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Db25zb2xlTWVzc2FnZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29uc29sZU1lc3NhZ2UuanMKaW5kZXggZTAxYjlkYmE4YjIyNjM1MzlmZTgx
MWFiNTk1MDI5ZTU5MGRlNDBmNS4uMTRjYWU3NTQwYmUwNGYxZDA0ZjRlMGI5MmU0YzZjYTRhZjNl
ZDgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25z
b2xlTWVzc2FnZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bnNvbGVNZXNzYWdlLmpzCkBAIC0yNjQsNyArMjY0LDkgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlSW1wbC5wcm90b3R5cGUgPSB7CiAKICAgICBfZm9ybWF0UGFyYW1ldGVyQXNPYmplY3Q6
IGZ1bmN0aW9uKG9iaiwgZWxlbSkKICAgICB7Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobmV3
IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbihvYmosIG9iai5kZXNjcmlwdGlv
bikuZWxlbWVudCk7CisgICAgICAgIHZhciBzZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5PYmpl
Y3RQcm9wZXJ0aWVzU2VjdGlvbihvYmosIG9iai5kZXNjcmlwdGlvbik7CisgICAgICAgIHNlY3Rp
b24uYWRkUmV2ZWFsQWN0aW9uKCk7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoc2VjdGlvbi5l
bGVtZW50KTsKICAgICB9LAogCiAgICAgX2Zvcm1hdFBhcmFtZXRlckFzTm9kZTogZnVuY3Rpb24o
b2JqZWN0LCBlbGVtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3QuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdC5qcwppbmRleCAwYjFjOWM1MWZiNGFlNmNjZTBlNGNkM2I3YzhiNjcyYTA1
OWQ0NjgyLi4zYmExZTk0N2E3OWM1MTkyODI2YjQzODQwNWEyNWVmZDM1OGNiNmI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcwpA
QCAtMTQwOCw2ICsxNDA4LDE1IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBl
ID0gewogICAgICAgICByZXR1cm4gZGlmZjsKICAgICB9LAogCisgICAgZ2V0Tm9kZUNsYXNzTmFt
ZTogZnVuY3Rpb24oc25hcHNob3RPYmplY3RJZCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGl0
ID0gdGhpcy5fYWxsTm9kZXM7IGl0Lmhhc05leHQoKTsgaXQubmV4dCgpKSB7CisgICAgICAgICAg
ICBpZiAoaXQubm9kZS5pZCA9PT0gc25hcHNob3RPYmplY3RJZCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaXQubm9kZS5jbGFzc05hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgfSwKKwogICAgIF9wYXJzZUZpbHRlcjogZnVuY3Rpb24oZmlsdGVyKQogICAgIHsKICAg
ICAgICAgaWYgKCFmaWx0ZXIpCkBAIC0xNDY5LDcgKzE0NzgsNyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IgPSBmdW5jdGlvbihpdGVyYXRvciwgZmls
dGVyLCB1bgogICAgIHRoaXMuX2l0ZXJhdGlvbk9yZGVyID0gbnVsbDsKICAgICB0aGlzLl9wb3Np
dGlvbiA9IDA7CiAgICAgdGhpcy5fY3VycmVudENvbXBhcmF0b3IgPSBudWxsOwotICAgIHRoaXMu
X2xhc3RDb21wYXJhdG9yID0gbnVsbDsKKyAgICB0aGlzLl9zb3J0ZWRQcmVmaXhMZW5ndGggPSAw
OwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3Iu
cHJvdG90eXBlID0gewpAQCAtMTU1NywyOCArMTU2Niw0NCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBlID0gewogICAgICAgICArK3Ro
aXMuX3Bvc2l0aW9uOwogICAgIH0sCiAKLSAgICBzZXJpYWxpemVTdWJzZXF1ZW50SXRlbXM6IGZ1
bmN0aW9uKGNvdW50KQorICAgIHNlcmlhbGl6ZUl0ZW1zUmFuZ2U6IGZ1bmN0aW9uKGJlZ2luLCBl
bmQpCiAgICAgewogICAgICAgICB0aGlzLl9jcmVhdGVJdGVyYXRpb25PcmRlcigpOworICAgICAg
ICBpZiAoZW5kID49IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aCkKKyAgICAgICAgICAgIGVu
ZCA9IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKKyAgICAgICAgaWYgKHRoaXMuX3NvcnRl
ZFByZWZpeExlbmd0aCA8IGVuZCkgeworICAgICAgICAgICAgdGhpcy5zb3J0KHRoaXMuX2N1cnJl
bnRDb21wYXJhdG9yLCB0aGlzLl9zb3J0ZWRQcmVmaXhMZW5ndGgsIHRoaXMuX2l0ZXJhdGlvbk9y
ZGVyLmxlbmd0aCAtIDEsIGVuZCAtIHRoaXMuX3NvcnRlZFByZWZpeExlbmd0aCk7CisgICAgICAg
ICAgICB0aGlzLl9zb3J0ZWRQcmVmaXhMZW5ndGggPSBlbmQ7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLl9wb3NpdGlvbiA9IGJlZ2luOworICAgICAgICB2YXIgc3RhcnRQb3NpdGlvbiA9IHRo
aXMuX3Bvc2l0aW9uOworICAgICAgICB2YXIgY291bnQgPSBlbmQgLSBiZWdpbjsKICAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7Ci0gICAgICAgIGlmICh0aGlzLl9sYXN0Q29t
cGFyYXRvciAhPT0gdGhpcy5fY3VycmVudENvbXBhcmF0b3IpCi0gICAgICAgICAgICB0aGlzLnNv
cnQodGhpcy5fY3VycmVudENvbXBhcmF0b3IsIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9pdGVyYXRp
b25PcmRlci5sZW5ndGggLSAxLCBjb3VudCk7CiAgICAgICAgIGZvciAodmFyIGkgPSAwIDsgaSA8
IGNvdW50ICYmIHRoaXMuaGFzTmV4dCgpOyArK2ksIHRoaXMubmV4dCgpKQotICAgICAgICAgICAg
cmVzdWx0W2ldID0gdGhpcy5fc2VyaWFsaXplKHRoaXMuaXRlbSk7CisgICAgICAgICAgICByZXN1
bHRbaV0gPSB0aGlzLnNlcmlhbGl6ZUl0ZW0odGhpcy5pdGVtKTsKICAgICAgICAgcmVzdWx0Lmxl
bmd0aCA9IGk7Ci0gICAgICAgIHJlc3VsdC5oYXNOZXh0ID0gdGhpcy5oYXNOZXh0KCk7CiAgICAg
ICAgIHJlc3VsdC50b3RhbExlbmd0aCA9IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKKwor
ICAgICAgICByZXN1bHQuc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CisgICAgICAgIHJl
c3VsdC5lbmRQb3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0sCiAKKyAgICBzb3J0QWxsOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlz
Ll9jcmVhdGVJdGVyYXRpb25PcmRlcigpOworICAgICAgICBpZiAodGhpcy5fc29ydGVkUHJlZml4
TGVuZ3RoID49IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdGhpcy5zb3J0KHRoaXMuX2N1cnJlbnRDb21wYXJhdG9yLCB0aGlzLl9zb3J0
ZWRQcmVmaXhMZW5ndGgsIHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aCAtIDEsIHRoaXMuX2l0
ZXJhdGlvbk9yZGVyLmxlbmd0aCk7CisgICAgICAgIHRoaXMuX3NvcnRlZFByZWZpeExlbmd0aCA9
IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKKyAgICB9LAorCiAgICAgc29ydEFuZFJld2lu
ZDogZnVuY3Rpb24oY29tcGFyYXRvcikKICAgICB7Ci0gICAgICAgIHRoaXMuX2xhc3RDb21wYXJh
dG9yID0gdGhpcy5fY3VycmVudENvbXBhcmF0b3I7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRDb21w
YXJhdG9yID0gY29tcGFyYXRvcjsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2xhc3RDb21w
YXJhdG9yICE9PSB0aGlzLl9jdXJyZW50Q29tcGFyYXRvcjsKLSAgICAgICAgaWYgKHJlc3VsdCkK
LSAgICAgICAgICAgIHRoaXMuZmlyc3QoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgdGhpcy5fc29ydGVkUHJlZml4TGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy5maXJzdCgpOwog
ICAgIH0KIH0KIApAQCAtMTU5OCwxMiArMTYyMywxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNQcm92aWRlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBmaWx0ZXIsIGVkZ2VzSXRlcikK
IH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIucHJvdG90eXBlID0g
ewotICAgIF9zZXJpYWxpemU6IGZ1bmN0aW9uKGVkZ2UpCisgICAgc2VyaWFsaXplSXRlbTogZnVu
Y3Rpb24oZWRnZSkKICAgICB7CiAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICBuYW1lOiBl
ZGdlLm5hbWUsCiAgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc29yOiBlZGdlLnRvU3RyaW5nKCks
Ci0gICAgICAgICAgICBub2RlOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRl
ci5wcm90b3R5cGUuX3NlcmlhbGl6ZShlZGdlLm5vZGUpLAorICAgICAgICAgICAgbm9kZTogV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIucHJvdG90eXBlLnNlcmlhbGl6ZUl0
ZW0oZWRnZS5ub2RlKSwKICAgICAgICAgICAgIG5vZGVJbmRleDogZWRnZS5ub2RlSW5kZXgsCiAg
ICAgICAgICAgICB0eXBlOiBlZGdlLnR5cGUsCiAgICAgICAgICAgICBkaXN0YW5jZVRvV2luZG93
OiBlZGdlLm5vZGUuZGlzdGFuY2VUb1dpbmRvdwpAQCAtMTY5Myw3ICsxNzE4LDIzIEBAIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyID0gZnVuY3Rpb24oc25hcHNob3QsIGZp
bHRlciwgbm9kZUluZGV4ZXMpCiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1By
b3ZpZGVyLnByb3RvdHlwZSA9IHsKLSAgICBfc2VyaWFsaXplOiBmdW5jdGlvbihub2RlKQorICAg
IGdldE5vZGVQb3NpdGlvbjogZnVuY3Rpb24oc25hcHNob3RPYmplY3RJZCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2NyZWF0ZUl0ZXJhdGlvbk9yZGVyKCk7CisgICAgICAgIGlmICh0aGlzLmlzRW1w
dHkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHRoaXMuc29ydEFsbCgpOworCisg
ICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMu
c25hcHNob3QpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2l0ZXJhdGlvbk9y
ZGVyLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9IHRoaXMuX2l0
ZXJhdGlvbk9yZGVyW2ldOworICAgICAgICAgICAgaWYgKG5vZGUuaWQgPT09IHNuYXBzaG90T2Jq
ZWN0SWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIC0xOworICAgIH0sCisKKyAgICBzZXJpYWxpemVJdGVtOiBmdW5jdGlvbihub2RlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgIGlkOiBub2RlLmlkLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3REYXRhR3Jp
ZHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERh
dGFHcmlkcy5qcwppbmRleCAyZjgyM2M0MDQ0NmEwNDU4MTQ0MzA3ZTg1NDdlNzY0NjIxYzcyNzNk
Li44MjcwNjVhNTJjYWZjMDliNDUwZTc4NmIwOWEwYjM5NjlhOTQ2ZTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERhdGFHcmlkcy5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERh
dGFHcmlkcy5qcwpAQCAtNzAsNiArNzAsMTAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNv
cnRhYmxlRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5yb290Tm9k
ZSgpLmNoaWxkcmVuOwogICAgIH0sCiAKKyAgICBzZWxlY3RPYmplY3RCeUhlYXBTbmFwc2hvdElk
OiBmdW5jdGlvbihoZWFwU25hcHNob3RPYmplY3RJZCkKKyAgICB7CisgICAgfSwKKwogICAgIGNo
YW5nZU5hbWVGaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlcikKICAgICB7CiAgICAgICAgIGZpbHRlciA9
IGZpbHRlci50b0xvd2VyQ2FzZSgpOwpAQCAtMzg1LDYgKzM4OSwyNiBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICB9
W3NvcnRDb2x1bW5dOwogICAgIH0sCiAKKyAgICBzZWxlY3RPYmplY3RCeUhlYXBTbmFwc2hvdElk
OiBmdW5jdGlvbihpZCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGRpZEdldENsYXNzTmFtZShj
bGFzc05hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7CisgICAg
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZygiQ2Fubm90IGRldGVybWluZSBub2RlIGNsYXNz
IG5hbWUuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIGNvbnN0cnVjdG9yTm9kZXMgPSB0aGlzLnRvcExldmVsTm9kZXMoKTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb25zdHJ1Y3Rvck5vZGVzW2ldOworICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnQuX25hbWUgPT09IGNsYXNzTmFtZSkgeworICAgICAgICAg
ICAgICAgICAgICBwYXJlbnQucmV2ZWFsTm9kZUJ5U25hcHNob3RPYmplY3RJZChwYXJzZUludChp
ZCwgMTApKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnNuYXBzaG90LmdldE5vZGVD
bGFzc05hbWUocGFyc2VJbnQoaWQsIDEwKSwgZGlkR2V0Q2xhc3NOYW1lLmJpbmQodGhpcykpOwor
ICAgIH0sCisKICAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hvdFZpZXcsIHNuYXBz
aG90KQogICAgIHsKICAgICAgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dEdyaWROb2Rlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90R3JpZE5vZGVzLmpzCmluZGV4IDY0ZDhmNjgyOGNiZTY0NzgwYWNlYjcwYTBkOWMxOGE4
ZWQwNjA1NTIuLjg3YjdlMDg5ODc5MGRhODg5YjA3NzEyYTYxMzU3ZGFmYTgzZWY4YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90R3Jp
ZE5vZGVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90R3JpZE5vZGVzLmpzCkBAIC00NCw2ICs0NCw5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHcmlkTm9kZSA9IGZ1bmN0aW9uKHRyZWUsIGhhc0NoaWxkcmVuLCBwcm92aWRlcikKICAg
ICB0aGlzLl9wcm92aWRlciA9IHByb3ZpZGVyOwogICAgIHRoaXMuX2RhdGFHcmlkID0gdHJlZTsK
ICAgICB0aGlzLl9pbnN0YW5jZUNvdW50ID0gMDsKKworICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW4g
PSBudWxsOworICAgIHRoaXMuX3Bvc2l0aW9uUmFuZ2VzID0gW107CiAgICAgdGhpcy5hZGRFdmVu
dExpc3RlbmVyKCJwb3B1bGF0ZSIsIHRoaXMuX3BvcHVsYXRlLCB0aGlzKTsKIH0KIApAQCAtMTA2
LDcgKzEwOSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUg
PSB7CiAgICAgX3BvcHVsYXRlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUiLCB0aGlzLl9wb3B1bGF0ZSwgdGhpcyk7Ci0g
ICAgICAgIGZ1bmN0aW9uIHNvcnRlZChpZ25vcmVkKQorICAgICAgICBmdW5jdGlvbiBzb3J0ZWQo
KQogICAgICAgICB7CiAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZUNoaWxkcmVuKCk7CiAgICAg
ICAgIH0KQEAgLTExNCw4NCArMTE3LDE1OSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3Jp
ZE5vZGUucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0gez9u
dW1iZXJ9IGhvd01hbnkKLSAgICAgKiBAcGFyYW0gez9udW1iZXJ9IGF0SW5kZXgKKyAgICAgKiBA
cGFyYW0gez9udW1iZXJ9IGZyb21Qb3NpdGlvbgorICAgICAqIEBwYXJhbSB7P251bWJlcn0gdG9Q
b3NpdGlvbgogICAgICAqLwotICAgIF9wb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihob3dNYW55
LCBhdEluZGV4LCBhZnRlclBvcHVsYXRlKQotICAgIHsKLSAgICAgICAgaG93TWFueSA9IGhvd01h
bnkgfHwgdGhpcy5fZGF0YUdyaWQuZGVmYXVsdFBvcHVsYXRlQ291bnQoKTsKLSAgICAgICAgYXRJ
bmRleCA9IGF0SW5kZXggfHwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7Ci0gICAgICAgIHZhciBoYXZl
U2F2ZWRDaGlsZHJlbiA9ICEhdGhpcy5fc2F2ZWRDaGlsZHJlbjsKLSAgICAgICAgaWYgKGhhdmVT
YXZlZENoaWxkcmVuKSB7Ci0gICAgICAgICAgICBoYXZlU2F2ZWRDaGlsZHJlbiA9IGZhbHNlOwot
ICAgICAgICAgICAgZm9yICh2YXIgYyBpbiB0aGlzLl9zYXZlZENoaWxkcmVuKSB7Ci0gICAgICAg
ICAgICAgICAgaGF2ZVNhdmVkQ2hpbGRyZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgIF9wb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihmcm9tUG9zaXRpb24sIHRvUG9zaXRp
b24sIGFmdGVyUG9wdWxhdGUpCisgICAgeworICAgICAgICBmcm9tUG9zaXRpb24gPSBmcm9tUG9z
aXRpb24gfHwgMDsKKyAgICAgICAgdG9Qb3NpdGlvbiA9IHRvUG9zaXRpb24gfHwgZnJvbVBvc2l0
aW9uICsgdGhpcy5fZGF0YUdyaWQuZGVmYXVsdFBvcHVsYXRlQ291bnQoKTsKKyAgICAgICAgdmFy
IGZpcnN0Tm90U2VyaWFsaXplZFBvc2l0aW9uID0gZnJvbVBvc2l0aW9uOworICAgICAgICBmdW5j
dGlvbiBzZXJpYWxpemVOZXh0Q2h1bmsoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmly
c3ROb3RTZXJpYWxpemVkUG9zaXRpb24gPj0gdG9Qb3NpdGlvbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB2YXIgZW5kID0gTWF0aC5taW4oZmlyc3ROb3RTZXJpYWxpemVk
UG9zaXRpb24gKyB0aGlzLl9kYXRhR3JpZC5kZWZhdWx0UG9wdWxhdGVDb3VudCgpLCB0b1Bvc2l0
aW9uKTsKKyAgICAgICAgICAgIHRoaXMuX3Byb3ZpZGVyLnNlcmlhbGl6ZUl0ZW1zUmFuZ2UoZmly
c3ROb3RTZXJpYWxpemVkUG9zaXRpb24sIGVuZCwgY2hpbGRyZW5SZXRyaWV2ZWQuYmluZCh0aGlz
KSk7CisgICAgICAgICAgICBmaXJzdE5vdFNlcmlhbGl6ZWRQb3NpdGlvbiA9IGVuZDsKKyAgICAg
ICAgfQorICAgICAgICBmdW5jdGlvbiBpbnNlcnRSZXRyaWV2ZWRDaGlsZChpdGVtLCBpbnNlcnRp
b25JbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRoaXMuX3NhdmVkQ2hpbGRyZW4p
IHsKKyAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2NoaWxkSGFzaEZvckVudGl0eShp
dGVtKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzaCBpbiB0aGlzLl9zYXZlZENoaWxkcmVuKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQodGhpcy5fc2F2ZWRDaGlsZHJl
bltoYXNoXSwgaW5zZXJ0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5pbnNlcnRD
aGlsZCh0aGlzLl9jcmVhdGVDaGlsZE5vZGUoaXRlbSksIGluc2VydGlvbkluZGV4KTsKICAgICAg
ICAgfQotCi0gICAgICAgIHZhciBwYXJ0ID0gMDsKLSAgICAgICAgZnVuY3Rpb24gY2FsbFNlcmlh
bGl6ZSgpCisgICAgICAgIGZ1bmN0aW9uIGluc2VydFNob3dNb3JlQnV0dG9uKGZyb20sIHRvLCBp
bnNlcnRpb25JbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHBhcnQgPj0gaG93TWFu
eSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBwYXJ0ICs9IHRoaXMuX2Rh
dGFHcmlkLmRlZmF1bHRQb3B1bGF0ZUNvdW50KCk7Ci0gICAgICAgICAgICB0aGlzLl9wcm92aWRl
ci5zZXJpYWxpemVTdWJzZXF1ZW50SXRlbXModGhpcy5fZGF0YUdyaWQuZGVmYXVsdFBvcHVsYXRl
Q291bnQoKSwgY2hpbGRyZW5SZXRyaWV2ZWQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICB2YXIg
YnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TaG93TW9yZURhdGFHcmlkTm9kZSh0aGlzLl9wb3B1
bGF0ZUNoaWxkcmVuLmJpbmQodGhpcyksIGZyb20sIHRvLCB0aGlzLl9kYXRhR3JpZC5kZWZhdWx0
UG9wdWxhdGVDb3VudCgpKTsKKyAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQoYnV0dG9uLCBp
bnNlcnRpb25JbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgZnVuY3Rpb24gY2hpbGRyZW5SZXRy
aWV2ZWQoaXRlbXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBsZW5ndGggPSBpdGVtcy50
b3RhbExlbmd0aDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3Ro
OyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKLSAg
ICAgICAgICAgICAgICBpZiAoaGF2ZVNhdmVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGhhc2ggPSB0aGlzLl9jaGlsZEhhc2hGb3JFbnRpdHkoaXRlbSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNoIGluIHRoaXMuX3NhdmVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQodGhpcy5fc2F2ZWRDaGlsZHJlbltoYXNoXSwg
YXRJbmRleCsrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgdmFyIGl0ZW1JbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgaXRlbVBvc2l0aW9uID0gaXRl
bXMuc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgIHZhciBpbnNlcnRpb25JbmRleCA9IDA7CisK
KyAgICAgICAgICAgIGlmICghdGhpcy5fcG9zaXRpb25SYW5nZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZW1zLnN0YXJ0UG9zaXRpb24gPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3Bvc2l0aW9uUmFuZ2VzLnB1c2goe2Zyb206IDAsIHRvOiAwfSk7CisgICAgICAg
ICAgICAgICAgICAgIGluc2VydFNob3dNb3JlQnV0dG9uLmNhbGwodGhpcywgMCwgaXRlbXMuc3Rh
cnRQb3NpdGlvbiwgaW5zZXJ0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0aGlzLl9wb3NpdGlvblJhbmdlcy5wdXNoKHtmcm9tOiBpdGVtcy5zdGFydFBvc2l0
aW9uLCB0bzogaXRlbXMuZW5kUG9zaXRpb259KTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0UmV0cmlldmVkQ2hpbGQuY2FsbCh0aGlzLCBpdGVtc1tpXSwgaW5zZXJ0aW9uSW5kZXgr
Kyk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmVuZFBvc2l0aW9uIDwgaXRlbXMudG90YWxM
ZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGluc2VydFNob3dNb3JlQnV0dG9uLmNhbGwodGhp
cywgaXRlbXMuZW5kUG9zaXRpb24sIGl0ZW1zLnRvdGFsTGVuZ3RoLCBpbnNlcnRpb25JbmRleCsr
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbmdlSW5kZXgg
PSAwOworICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IHZhciByYW5nZTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocmFuZ2VJbmRleCA8IHRoaXMuX3Bv
c2l0aW9uUmFuZ2VzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMu
X3Bvc2l0aW9uUmFuZ2VzW3JhbmdlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAocmFu
Z2UudG8gPj0gaXRlbVBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCArPSByYW5nZS50byAtIHJh
bmdlLmZyb207CisgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIGJ1dHRvbiBpZiB0aGVy
ZSBpcyBvbmUuCisgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS50byA8IGl0ZW1zLnRvdGFs
TGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXggKz0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgKytyYW5nZUluZGV4OworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRl
IHByZXZpb3VzIGJ1dHRvbi4KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbnNl
cnRpb25JbmRleCAtIDFdLnNldEVuZFBvc2l0aW9uKGl0ZW1zLnN0YXJ0UG9zaXRpb24pOworICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRTaG93TW9yZUJ1dHRvbi5jYWxsKHRoaXMsIGl0ZW1zLnN0
YXJ0UG9zaXRpb24sIGl0ZW1zLnRvdGFsTGVuZ3RoLCBpbnNlcnRpb25JbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlID0ge2Zyb206IGl0ZW1zLnN0YXJ0UG9zaXRpb24sIHRvOiBpdGVt
cy5zdGFydFBvc2l0aW9ufTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VJbmRleCA9IHRoaXMu
X3Bvc2l0aW9uUmFuZ2VzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRp
b25SYW5nZXMucHVzaChyYW5nZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtcy5z
dGFydFBvc2l0aW9uIDwgcmFuZ2UuZnJvbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBVcGRh
dGUgcHJldmlvdXMgYnV0dG9uLgorICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2lu
c2VydGlvbkluZGV4IC0gMV0uc2V0RW5kUG9zaXRpb24oaXRlbXMuc3RhcnRQb3NpdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgIGluc2VydFNob3dNb3JlQnV0dG9uLmNhbGwodGhpcywgaXRlbXMu
c3RhcnRQb3NpdGlvbiwgcmFuZ2UuZnJvbSwgaW5zZXJ0aW9uSW5kZXgpOworICAgICAgICAgICAg
ICAgICAgICByYW5nZSA9IHtmcm9tOiBpdGVtcy5zdGFydFBvc2l0aW9uLCB0bzogaXRlbXMuc3Rh
cnRQb3NpdGlvbn07CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uUmFuZ2VzLnNw
bGljZShyYW5nZUluZGV4LCAwLCByYW5nZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXggKz0gaXRlbVBvc2l0aW9uIC0gcmFuZ2Uu
ZnJvbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCBpbnNlcnRpb25JbmRleCBpcyBhbHdheXMgYW4gaW5kZXggYmVmb3JlIGJ1dHRvbiBvciBiZXR3
ZWVuIG5vZGVzLgorICAgICAgICAgICAgICAgIC8vIEFsc28gaXQgaXMgYWx3YXlzIHRydWUgaGVy
ZSB0aGF0IHJhbmdlLmZyb20gPD0gaXRlbVBvc2l0aW9uIDw9IHJhbmdlLnRvCisKKyAgICAgICAg
ICAgICAgICAvLyBTdHJldGNoIHRoZSByYW5nZSByaWdodCBib3VuZCB0byBpbmNsdWRlIGFsbCBu
ZXcgaXRlbXMuCisgICAgICAgICAgICAgICAgd2hpbGUgKHJhbmdlLnRvIDwgaXRlbXMuZW5kUG9z
aXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBhbHJlYWR5IGFkZGVkIG5vZGVz
LgorICAgICAgICAgICAgICAgICAgICB2YXIgc2tpcENvdW50ID0gcmFuZ2UudG8gLSBpdGVtUG9z
aXRpb247CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvbkluZGV4ICs9IHNraXBDb3VudDsK
KyAgICAgICAgICAgICAgICAgICAgaXRlbUluZGV4ICs9IHNraXBDb3VudDsKKyAgICAgICAgICAg
ICAgICAgICAgaXRlbVBvc2l0aW9uID0gcmFuZ2UudG87CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UncmUgYXQgdGhlIHBvc2l0aW9uIGJlZm9yZSBidXR0b246IC4uLjw/bm9kZT54PGJ1dHRv
bj4KKyAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRSYW5nZSA9IHRoaXMuX3Bvc2l0aW9uUmFu
Z2VzW3JhbmdlSW5kZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0VuZE9mUmFu
Z2UgPSBuZXh0UmFuZ2UgPyBuZXh0UmFuZ2UuZnJvbSA6IGl0ZW1zLnRvdGFsTGVuZ3RoOworICAg
ICAgICAgICAgICAgICAgICBpZiAobmV3RW5kT2ZSYW5nZSA+IGl0ZW1zLmVuZFBvc2l0aW9uKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3RW5kT2ZSYW5nZSA9IGl0ZW1zLmVuZFBvc2l0aW9u
OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlbVBvc2l0aW9uIDwgbmV3RW5kT2ZSYW5n
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0UmV0cmlldmVkQ2hpbGQuY2FsbCh0
aGlzLCBpdGVtc1tpdGVtSW5kZXgrK10sIGluc2VydGlvbkluZGV4KyspOworICAgICAgICAgICAg
ICAgICAgICAgICAgKytpdGVtUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCB0aGUgbmV4dCByYW5nZS4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5leHRSYW5nZSAmJiBuZXdFbmRPZlJhbmdlID09PSBuZXh0UmFuZ2UuZnJv
bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UudG8gPSBuZXh0UmFuZ2UudG87Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgInNob3cgbmV4dCIgYnV0dG9uIGlmIHRo
ZXJlIGlzIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhp
cy5jaGlsZHJlbltpbnNlcnRpb25JbmRleF0pOworICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fcG9zaXRpb25SYW5nZXMuc3BsaWNlKHJhbmdlSW5kZXggKyAxLCAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnRvID0gbmV3
RW5kT2ZSYW5nZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBvciB1cGRhdGUg
bmV4dCBidXR0b24uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3RW5kT2ZSYW5nZSA9
PT0gaXRlbXMudG90YWxMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5y
ZW1vdmVDaGlsZCh0aGlzLmNoaWxkcmVuW2luc2VydGlvbkluZGV4XSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJl
bltpbnNlcnRpb25JbmRleF0uc2V0U3RhcnRQb3NpdGlvbihpdGVtcy5lbmRQb3NpdGlvbik7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dGhpcy5pbnNlcnRDaGlsZCh0aGlzLl9jcmVhdGVDaGlsZE5vZGUoaXRlbSksIGF0SW5kZXgrKyk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IGZpeCB0aGlzLgogICAgICAg
ICAgICAgdGhpcy5faW5zdGFuY2VDb3VudCArPSBpdGVtcy5sZW5ndGg7Ci0gICAgICAgICAgICBp
ZiAocGFydCA8IGhvd01hbnkpIHsKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNhbGxTZXJp
YWxpemUuYmluZCh0aGlzKSwgMCk7CisgICAgICAgICAgICBpZiAoZmlyc3ROb3RTZXJpYWxpemVk
UG9zaXRpb24gPCB0b1Bvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChzZXJp
YWxpemVOZXh0Q2h1bmsuYmluZCh0aGlzKSwgMCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaXRlbXMuaGFzTmV4dCkKLSAgICAgICAg
ICAgICAgICB0aGlzLmluc2VydENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3Jp
ZE5vZGUodGhpcy5fcG9wdWxhdGVDaGlsZHJlbi5iaW5kKHRoaXMpLCB0aGlzLl9kYXRhR3JpZC5k
ZWZhdWx0UG9wdWxhdGVDb3VudCgpLCBsZW5ndGgpLCBhdEluZGV4KyspOwogICAgICAgICAgICAg
aWYgKGFmdGVyUG9wdWxhdGUpCiAgICAgICAgICAgICAgICAgYWZ0ZXJQb3B1bGF0ZSgpOwotICAg
ICAgICAgICAgZnVuY3Rpb24gbm90aWZ5KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygicG9wdWxhdGUgY29tcGxldGUiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldFRpbWVvdXQobm90aWZ5LmJpbmQodGhpcyksIDAp
OworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInBvcHVsYXRlIGNv
bXBsZXRlIik7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VGltZW91dChjYWxsU2VyaWFsaXplLmJp
bmQodGhpcyksIDApOworICAgICAgICBzZXRUaW1lb3V0KHNlcmlhbGl6ZU5leHRDaHVuay5iaW5k
KHRoaXMpLCAwKTsKICAgICB9LAogCiAgICAgX3NhdmVDaGlsZHJlbjogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgdGhpcy5fc2F2ZWRDaGlsZHJlbiA9IHt9OworICAgICAgICB0aGlzLl9zYXZl
ZENoaWxkcmVuID0gbnVsbDsKICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGNoaWxkcmVuQ291bnQg
PSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGNoaWxkcmVuQ291bnQ7ICsraSkgewogICAgICAg
ICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTsKLSAgICAgICAgICAgIGlmIChjaGls
ZC5leHBhbmRlZCkKLSAgICAgICAgICAgICAgICB0aGlzLl9zYXZlZENoaWxkcmVuW3RoaXMuX2No
aWxkSGFzaEZvck5vZGUoY2hpbGQpXSA9IGNoaWxkOworICAgICAgICAgICAgaWYgKCFjaGlsZC5l
eHBhbmRlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghdGhp
cy5fc2F2ZWRDaGlsZHJlbikKKyAgICAgICAgICAgICAgICB0aGlzLl9zYXZlZENoaWxkcmVuID0g
e307CisgICAgICAgICAgICB0aGlzLl9zYXZlZENoaWxkcmVuW3RoaXMuX2NoaWxkSGFzaEZvck5v
ZGUoY2hpbGQpXSA9IGNoaWxkOwogICAgICAgICB9CiAgICAgfSwKIAogICAgIHNvcnQ6IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnJlY3Vyc2l2ZVNvcnRpbmdFbnRl
cigpOwotICAgICAgICBmdW5jdGlvbiBhZnRlclNvcnQoc29ydGVkKQorICAgICAgICBmdW5jdGlv
biBhZnRlclNvcnQoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNvcnRlZCkgewotICAg
ICAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnJlY3Vyc2l2ZVNvcnRpbmdMZWF2ZSgpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuX3Nh
dmVDaGlsZHJlbigpOwogICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOworICAgICAg
ICAgICAgdGhpcy5fcG9zaXRpb25SYW5nZXMgPSBbXTsKIAogICAgICAgICAgICAgZnVuY3Rpb24g
YWZ0ZXJQb3B1bGF0ZSgpCiAgICAgICAgICAgICB7CkBAIC0yMDQsNyArMjgyLDcgQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHZhciBpbnN0YW5jZUNvdW50ID0gdGhpcy5faW5zdGFuY2VDb3VudDsKICAg
ICAgICAgICAgIHRoaXMuX2luc3RhbmNlQ291bnQgPSAwOwotICAgICAgICAgICAgdGhpcy5fcG9w
dWxhdGVDaGlsZHJlbihpbnN0YW5jZUNvdW50LCBudWxsLCBhZnRlclBvcHVsYXRlLmJpbmQodGhp
cykpOworICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVDaGlsZHJlbigwLCBpbnN0YW5jZUNvdW50
LCBhZnRlclBvcHVsYXRlLmJpbmQodGhpcykpOwogICAgICAgICB9CiAgICAgICAgIHRoaXMuX3By
b3ZpZGVyLnNvcnRBbmRSZXdpbmQodGhpcy5jb21wYXJhdG9yKCksIGFmdGVyU29ydC5iaW5kKHRo
aXMpKTsKICAgICB9CkBAIC02MTIsNiArNjkwLDUwIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RDb25zdHJ1Y3Rvck5vZGUgPSBmdW5jdGlvbih0cmVlLCBjbGFzc05hbWUsIGFnZ3JlZ2F0ZSwK
IH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZS5wcm90b3R5cGUg
PSB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNuYXBzaG90T2JqZWN0SWQKKyAg
ICAgKi8KKyAgICByZXZlYWxOb2RlQnlTbmFwc2hvdE9iamVjdElkOiBmdW5jdGlvbihzbmFwc2hv
dE9iamVjdElkKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZGlkR2V0Tm9kZVBvc2l0aW9uKG5v
ZGVQb3NpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZygiZGlk
R2V0Tm9kZVBvc2l0aW9uICIgKyBub2RlUG9zaXRpb24pOworICAgICAgICAgICAgaWYgKG5vZGVQ
b3NpdGlvbiAhPT0gLTEpCisgICAgICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVDaGlsZHJlbihu
b2RlUG9zaXRpb24sIG51bGwsIGRpZFBvcHVsYXRlQ2hpbGRyZW4uYmluZCh0aGlzLCBub2RlUG9z
aXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRpZFBvcHVsYXRlQ2hpbGRy
ZW4obm9kZVBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW5kZXhPZkZpcnND
aGlsZEluUmFuZ2UgPSAwOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9w
b3NpdGlvblJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5fcG9zaXRpb25SYW5nZXNbaV07CisgICAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSA8
PSBub2RlUG9zaXRpb24gJiYgbm9kZVBvc2l0aW9uIDwgcmFuZ2UudG8pIHsKKyAgICAgICAgICAg
ICAgICAgICB2YXIgY2hpbGRJbmRleCA9IGluZGV4T2ZGaXJzQ2hpbGRJblJhbmdlICsgbm9kZVBv
c2l0aW9uIC0gcmFuZ2UuZnJvbTsKKyAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2VOb2Rl
ID0gdGhpcy5jaGlsZHJlbltjaGlsZEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAvL2luc3Rh
bmNlTm9kZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIpOworICAgICAgICAgICAg
ICAgICAgIGluc3RhbmNlTm9kZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodGVkLXJv
dyIpOworICAgICAgICAgICAgICAgICAgIGluc3RhbmNlTm9kZS5lbGVtZW50LnNjcm9sbEludG9W
aWV3SWZOZWVkZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgaW5kZXhPZkZpcnNDaGlsZEluUmFuZ2UgKz0gcmFuZ2Uu
dG8gLSByYW5nZS5mcm9tICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMuZXhwYW5kKCk7CisgICAgICAgIHRoaXMuX3Byb3ZpZGVyLmdldE5vZGVQb3NpdGlvbihz
bmFwc2hvdE9iamVjdElkLCBkaWRHZXROb2RlUG9zaXRpb24uYmluZCh0aGlzKSk7CisgICAgICAg
IFdlYkluc3BlY3Rvci5sb2coImZpbmRBbmRTZXJpYWxpemVJdGVtcyAiICsgc25hcHNob3RPYmpl
Y3RJZCk7CisgICAgfSwKKworICAgIF9oaWdobGlnaHRDaGlsZDogZnVuY3Rpb24oY2hpbGRJbmRl
eCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9kYXRhR3JpZC5faGlnaGxpZ2h0ZWRSb3dFbGVt
ZW50KQorICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQuX2hpZ2hsaWdodGVkUm93RWxlbWVudC5y
ZW1vdmVkU3R5bGVDbGFzcygiaGlnaGxpZ2h0ZWQtcm93Iik7CisgICAgICAgIHZhciBpbnN0YW5j
ZU5vZGVFbGVtZW50ID0gdGhpcy5jaGlsZHJlbltjaGlsZEluZGV4XS5lbGVtZW50OworICAgICAg
ICBpbnN0YW5jZU5vZGVFbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQodHJ1ZSk7CisgICAg
ICAgIGluc3RhbmNlTm9kZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlnaGxpZ2h0ZWQtcm93Iik7
CisgICAgICAgIHRoaXMuX2RhdGFHcmlkLl9oaWdobGlnaHRlZFJvd0VsZW1lbnQgPSBpbnN0YW5j
ZU5vZGVFbGVtZW50OworICAgIH0sCisKICAgICBjcmVhdGVDZWxsOiBmdW5jdGlvbihjb2x1bW5J
ZGVudGlmaWVyKQogICAgIHsKICAgICAgICAgdmFyIGNlbGwgPSBjb2x1bW5JZGVudGlmaWVyICE9
PSAib2JqZWN0IiA/IHRoaXMuX2NyZWF0ZVZhbHVlQ2VsbChjb2x1bW5JZGVudGlmaWVyKSA6IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbC5jYWxs
KHRoaXMsIGNvbHVtbklkZW50aWZpZXIpOwpAQCAtNjkzLDcgKzgxNSw2IEBAIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REaWZmTm9kZXNQcm92aWRlciA9IGZ1bmN0aW9uKGFkZGVkTm9kZXNQcm92
aWRlciwgZGVsZXRlCiAgICAgdGhpcy5fZGVsZXRlZE5vZGVzUHJvdmlkZXIgPSBkZWxldGVkTm9k
ZXNQcm92aWRlcjsKICAgICB0aGlzLl9hZGRlZENvdW50ID0gYWRkZWRDb3VudDsKICAgICB0aGlz
Ll9yZW1vdmVkQ291bnQgPSByZW1vdmVkQ291bnQ7Ci0gICAgdGhpcy5fc2VyaWFsaXplZEl0ZW1z
Q291bnQgPSAwOwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGVzUHJvdmlk
ZXIucHJvdG90eXBlID0gewpAQCAtNzA4LDIyICs4MjksMjMgQEAgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERpZmZOb2Rlc1Byb3ZpZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgY2FsbGJhY2so
ZmFsc2UpOwogICAgIH0sCiAKLSAgICBzZXJpYWxpemVTdWJzZXF1ZW50SXRlbXM6IGZ1bmN0aW9u
KGNvdW50LCBjYWxsYmFjaykKKyAgICBzZXJpYWxpemVJdGVtc1JhbmdlOiBmdW5jdGlvbihiZWdp
blBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY2FsbGJhY2spCiAgICAgewogICAgICAgICBmdW5jdGlv
biBkaWRSZWNlaXZlQWxsSXRlbXMoaXRlbXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMu
X3NlcmlhbGl6ZWRJdGVtc0NvdW50ICs9IGl0ZW1zLmxlbmd0aDsKICAgICAgICAgICAgIGl0ZW1z
LnRvdGFsTGVuZ3RoID0gdGhpcy5fYWRkZWRDb3VudCArIHRoaXMuX3JlbW92ZWRDb3VudDsKICAg
ICAgICAgICAgIGNhbGxiYWNrKGl0ZW1zKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9u
IGRpZFJlY2VpdmVEZWxldGVkSXRlbXMoYWRkZWRJdGVtcywgaXRlbXMpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghYWRkZWRJdGVtcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgYWRkZWRJ
dGVtcy5iZWdpblBvc2l0aW9uID0gdGhpcy5fYWRkZWRDb3VudCArIGl0ZW1zLmJlZ2luUG9zaXRp
b247CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgaXRlbXNbaV0uaXNBZGRlZE5vdFJlbW92ZWQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goaXRlbXNbaV0pOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYWRkZWRJdGVtcy5oYXNOZXh0ID0gaXRlbXMuaGFzTmV4dDsKKyAgICAgICAg
ICAgIGFkZGVkSXRlbXMuZW5kUG9zaXRpb24gPSB0aGlzLl9hZGRlZENvdW50ICsgaXRlbXMuZW5k
UG9zaXRpb247CiAgICAgICAgICAgICBkaWRSZWNlaXZlQWxsSXRlbXMuY2FsbCh0aGlzLCBhZGRl
ZEl0ZW1zKTsKICAgICAgICAgfQogCkBAIC03MzEsMjYgKzg1MywyMiBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGlmZk5vZGVzUHJvdmlkZXIucHJvdG90eXBlID0gewogICAgICAgICB7CiAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQogICAgICAg
ICAgICAgICAgIGl0ZW1zW2ldLmlzQWRkZWROb3RSZW1vdmVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChpdGVtcy5sZW5ndGggPCBjb3VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZGVsZXRlZE5vZGVzUHJvdmlkZXIuc2VyaWFsaXplU3Vic2VxdWVudEl0ZW1zKGNvdW50IC0gaXRl
bXMubGVuZ3RoLCBkaWRSZWNlaXZlRGVsZXRlZEl0ZW1zLmJpbmQodGhpcywgaXRlbXMpKTsKKyAg
ICAgICAgICAgIGlmIChpdGVtcy5lbmRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9kZWxldGVkTm9kZXNQcm92aWRlci5zZXJpYWxpemVJdGVtc1Jh
bmdlKDAsIGVuZFBvc2l0aW9uIC0gaXRlbXMuZW5kUG9zaXRpb24sIGRpZFJlY2VpdmVEZWxldGVk
SXRlbXMuYmluZCh0aGlzLCBpdGVtcykpOwogCiAgICAgICAgICAgICBpdGVtcy50b3RhbExlbmd0
aCA9IHRoaXMuX2FkZGVkQ291bnQgKyB0aGlzLl9yZW1vdmVkQ291bnQ7Ci0gICAgICAgICAgICBp
ZiAoIWl0ZW1zLmhhc05leHQpCi0gICAgICAgICAgICAgICAgaXRlbXMuaGFzTmV4dCA9ICEhdGhp
cy5fcmVtb3ZlZENvdW50OwogICAgICAgICAgICAgZGlkUmVjZWl2ZUFsbEl0ZW1zLmNhbGwodGhp
cywgaXRlbXMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHRoaXMuX3NlcmlhbGl6ZWRJdGVt
c0NvdW50IDwgdGhpcy5fYWRkZWRDb3VudCkKLSAgICAgICAgICAgIHRoaXMuX2FkZGVkTm9kZXNQ
cm92aWRlci5zZXJpYWxpemVTdWJzZXF1ZW50SXRlbXMoY291bnQsIGRpZFJlY2VpdmVBZGRlZEl0
ZW1zLmJpbmQodGhpcykpOworICAgICAgICBpZiAoYmVnaW5Qb3NpdGlvbiA8IHRoaXMuX2FkZGVk
Q291bnQpCisgICAgICAgICAgICB0aGlzLl9hZGRlZE5vZGVzUHJvdmlkZXIuc2VyaWFsaXplSXRl
bXNSYW5nZShiZWdpblBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgZGlkUmVjZWl2ZUFkZGVkSXRlbXMu
YmluZCh0aGlzKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2RlbGV0ZWROb2Rl
c1Byb3ZpZGVyLnNlcmlhbGl6ZVN1YnNlcXVlbnRJdGVtcyhjb3VudCwgZGlkUmVjZWl2ZURlbGV0
ZWRJdGVtcy5iaW5kKHRoaXMsIFtdKSk7CisgICAgICAgICAgICB0aGlzLl9kZWxldGVkTm9kZXNQ
cm92aWRlci5zZXJpYWxpemVJdGVtc1JhbmdlKGJlZ2luUG9zaXRpb24gLSB0aGlzLl9hZGRlZENv
dW50LCBlbmRQb3NpdGlvbiAtIHRoaXMuX2FkZGVkQ291bnQsIGRpZFJlY2VpdmVEZWxldGVkSXRl
bXMuYmluZCh0aGlzLCBbXSkpOwogICAgIH0sCiAKICAgICBzb3J0QW5kUmV3aW5kOiBmdW5jdGlv
bihjb21wYXJhdG9yLCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHRoaXMuX3NlcmlhbGl6ZWRJ
dGVtc0NvdW50ID0gMDsKLQotICAgICAgICBmdW5jdGlvbiBhZnRlclNvcnQoaWdub3JlZCkKKyAg
ICAgICAgZnVuY3Rpb24gYWZ0ZXJTb3J0KCkKICAgICAgICAgewogICAgICAgICAgICAgdGhpcy5f
ZGVsZXRlZE5vZGVzUHJvdmlkZXIuc29ydEFuZFJld2luZChjb21wYXJhdG9yLCBjYWxsYmFjayk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90UHJveHkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCmluZGV4IDJiYzRlMDRjNGZmNmE5ODVmZTA2YmM3MGUx
OGU0N2E0ZWYwNjk0NmUuLjY3ODY2MmQzODg5NzA5Njc1ZThiMjY0ZDgxZGViZjA1OWE3MDkwMTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90UHJveHkuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3RQcm94eS5qcwpAQCAtMTI0LDcgKzEyNCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RXb3JrZXIgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5fY2FsbGJhY2tzID0gW107CiAgICAg
dGhpcy5fcHJldmlvdXNDYWxsYmFja3MgPSBbXTsKICAgICAvLyBUaGVyZSBpcyBubyBzdXBwb3J0
IGZvciB3b3JrZXJzIGluIENocm9taXVtIERSVC4KLSAgICB0aGlzLl93b3JrZXIgPSB0eXBlb2Yg
SW5zcGVjdG9yVGVzdCA9PT0gInVuZGVmaW5lZCIgPyBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFJlYWxXb3JrZXIoKSA6IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmFrZVdvcmtl
cigpOworICAgIHRoaXMuX3dvcmtlciA9ICAvKnR5cGVvZiBJbnNwZWN0b3JUZXN0ID09PSAidW5k
ZWZpbmVkIiA/IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVhbFdvcmtlcigpIDoqLyBu
ZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZha2VXb3JrZXIoKTsKICAgICB0aGlzLl93b3Jr
ZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHRoaXMuX21lc3NhZ2VSZWNlaXZlZCwgdGhp
cyk7CiB9CiAKQEAgLTM4Miw2ICszODIsMTEgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBy
b3h5LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5jYWxsTWV0aG9kKGNhbGxiYWNrLCAiY2Fs
Y3VsYXRlU25hcHNob3REaWZmIiwgYmFzZVNuYXBzaG90SWQsIGJhc2VTbmFwc2hvdEFnZ3JlZ2F0
ZXMpOwogICAgIH0sCiAKKyAgICBnZXROb2RlQ2xhc3NOYW1lOiBmdW5jdGlvbihzbmFwc2hvdE9i
amVjdElkLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuY2FsbE1ldGhvZChjYWxsYmFj
aywgImdldE5vZGVDbGFzc05hbWUiLCBzbmFwc2hvdE9iamVjdElkKTsKKyAgICB9LAorCiAgICAg
Y3JlYXRlRWRnZXNQcm92aWRlcjogZnVuY3Rpb24obm9kZUluZGV4LCBmaWx0ZXIpCiAgICAgewog
ICAgICAgICByZXR1cm4gdGhpcy5jYWxsRmFjdG9yeU1ldGhvZChudWxsLCAiY3JlYXRlRWRnZXNQ
cm92aWRlciIsICJXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eSIsIG5vZGVJ
bmRleCwgZmlsdGVyKTsKQEAgLTQ4NiwxNCArNDkxLDI0IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm92aWRlclByb3h5ID0gZnVuY3Rpb24od29ya2VyLCBvYmplY3RJZCkKIH0KIAogV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkucHJvdG90eXBlID0geworICAgIGdl
dE5vZGVQb3NpdGlvbjogZnVuY3Rpb24oc25hcHNob3RPYmplY3RJZCwgY2FsbGJhY2spCisgICAg
eworICAgICAgICB0aGlzLmNhbGxNZXRob2QoY2FsbGJhY2ssICJnZXROb2RlUG9zaXRpb24iLCBz
bmFwc2hvdE9iamVjdElkKTsKKyAgICB9LAorCiAgICAgaXNFbXB0eTogZnVuY3Rpb24oY2FsbGJh
Y2spCiAgICAgewogICAgICAgICB0aGlzLmNhbGxHZXR0ZXIoY2FsbGJhY2ssICJpc0VtcHR5Iik7
CiAgICAgfSwKIAotICAgIHNlcmlhbGl6ZVN1YnNlcXVlbnRJdGVtczogZnVuY3Rpb24oY291bnQs
IGNhbGxiYWNrKQorICAgIHNlcmlhbGl6ZUl0ZW1zUmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuY2FsbE1ldGhv
ZChjYWxsYmFjaywgInNlcmlhbGl6ZUl0ZW1zUmFuZ2UiLCBzdGFydFBvc2l0aW9uLCBlbmRQb3Np
dGlvbik7CisgICAgfSwKKworICAgIGZpbmRBbmRTZXJpYWxpemVJdGVtczogZnVuY3Rpb24oc25h
cHNob3RPYmplY3RJZCwgY291bnQsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgdGhpcy5jYWxs
TWV0aG9kKGNhbGxiYWNrLCAic2VyaWFsaXplU3Vic2VxdWVudEl0ZW1zIiwgY291bnQpOworICAg
ICAgICB0aGlzLmNhbGxNZXRob2QoY2FsbGJhY2ssICJmaW5kQW5kU2VyaWFsaXplSXRlbXMiLCBz
bmFwc2hvdE9iamVjdElkLCBjb3VudCk7CiAgICAgfSwKIAogICAgIHNvcnRBbmRSZXdpbmQ6IGZ1
bmN0aW9uKGNvbXBhcmF0b3IsIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKaW5k
ZXggYjQ2NTZkMjQ1M2I3NDY3NmQzZDhkMGQ5ZGUyNTFiZGUzNTU1YjNjMy4uODFmZjViMDNiZTRl
ZDI2OTU4M2VjNmZhMWMyZTFjMzNjNjJkNGFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpz
CkBAIC01MSw2ICs1MSwzNSBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24g
PSBmdW5jdGlvbihvYmplY3QsIHRpdGxlLCBzdWJ0aXRsZSwgZW1wdHlQbAogV2ViSW5zcGVjdG9y
Lk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLl9hcnJheUxvYWRUaHJlc2hvbGQgPSAxMDA7CiAKIFdl
Ykluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CisgICAgYWRk
UmV2ZWFsQWN0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudUV2ZW50RmlyZWQu
YmluZCh0aGlzKSwgdHJ1ZSk7CisgICAgfSwKKworICAgIF9jb250ZXh0TWVudUV2ZW50RmlyZWQ6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gcmV2ZWFsSW5Eb21pbmF0
b3JzVmlldygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBvYmplY3RJZCA9IHRoaXMub2Jq
ZWN0Lm9iamVjdElkOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZygicmV2ZWFsSW5Eb21p
bmF0b3JzVmlldyAiICsgb2JqZWN0SWQpOworICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IHNo
b3cgbWVudSBpdGVtIGZvciBzdWNoIG9iamVjdHMuCisgICAgICAgICAgICBpZiAoIW9iamVjdElk
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0
SGVhcE9iamVjdElkKG9iamVjdElkLCBkaWRSZWNlaXZlSGVhcE9iamVjdElkLmJpbmQodGhpcykp
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZGlkUmVjZWl2ZUhlYXBPYmplY3RJZChl
cnJvciwgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKCJk
aWRSZWNlaXZlSGVhcE9iamVjdElkIGVycm9yID0gIiArIGVycm9yICsgIiByZXN1bHQgPSAiICsg
cmVzdWx0KTsKKyAgICAgICAgICAgIGlmICghZXJyb3IpCisgICAgICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLnBhbmVscy5wcm9maWxlcy5zaG93T2JqZWN0KHJlc3VsdCk7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KCk7
CisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJS
ZXZlYWwgaW4gRG9taW5hdG9ycyBWaWV3IiksIHJldmVhbEluRG9taW5hdG9yc1ZpZXcuYmluZCh0
aGlzKSk7CisgICAgICAgIGNvbnRleHRNZW51LnNob3coZXZlbnQpOworICAgIH0sCisKICAgICBv
bnBvcHVsYXRlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLnVwZGF0ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVs
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpz
CmluZGV4IGE4MjFjOTI4OTM4YWMyMjYzYWFiY2NkNTQ2ODRiYmQ2ZmViZjU1N2EuLjNjYjY1NWFm
OWVjYmI3OTNlN2ZmODQwMmZhZWJjM2YzODQ2NmQ1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKQEAgLTUyMiw2ICs1MjIs
MjUgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0sCiAKKyAgICBzaG93T2JqZWN0OiBmdW5jdGlvbihzbmFwc2hv
dE9iamVjdElkKQorICAgIHsKKyAgICAgICAgdmFyIGhlYXBQcm9maWxlcyA9IHRoaXMuZ2V0UHJv
ZmlsZXMoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhcFByb2ZpbGVzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB2YXIgcHJvZmlsZSA9IGhlYXBQcm9maWxlc1tpXTsKKyAgICAgICAgICAgIC8vIFRP
RE86IGFsbG93IHRvIGNob29zZSBzbmFwc2hvdCBpZiB0aGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25z
LgorICAgICAgICAgICAgaWYgKHByb2ZpbGUubWF4SlNPYmplY3RJZCA+PSBzbmFwc2hvdE9iamVj
dElkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zaG93UHJvZmlsZShwcm9maWxlKTsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLl9wcm9maWxlVmlldy5jaGFuZ2VWaWV3KCJTdW1tYXJ5IiwgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2coInN3aXRjaGVk
IHRvIHN1bW1hcnkgdmlldyIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5fcHJv
ZmlsZVZpZXcuZGF0YUdyaWQgIT09ICBwcm9maWxlLl9wcm9maWxlVmlldy5jb25zdHJ1Y3RvcnNE
YXRhR3JpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvZmlsZS5fcHJvZmlsZVZpZXcuZGF0YUdyaWQuc2VsZWN0T2JqZWN0QnlIZWFwU25h
cHNob3RJZChzbmFwc2hvdE9iamVjdElkKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKICAgICAv
KioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZUlkCiAgICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXJ9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1Nob3dNb3JlRGF0YUdyaWROb2RlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TaG93TW9yZURhdGFHcmlkTm9kZS5qcwppbmRleCBlOWFjNmM1MTRi
Y2QyYTdiNDEzNjc0NTM1Mzk2YTIwZmNlMmQzOWJmLi5kOWJhNTE4ZTA0OWU2ODk5MWMyMzlmNjY3
MDJiNWQ0NmUzZDQyNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Nob3dNb3JlRGF0YUdyaWROb2RlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2hvd01vcmVEYXRhR3JpZE5vZGUuanMKQEAgLTMyLDMyICszMiw0NSBA
QAogICogQGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9k
ZX0KICAqLwotV2ViSW5zcGVjdG9yLlNob3dNb3JlRGF0YUdyaWROb2RlID0gZnVuY3Rpb24oY2Fs
bGJhY2ssIG5leHRDb3VudCwgYWxsQ291bnQpCitXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3Jp
ZE5vZGUgPSBmdW5jdGlvbihjYWxsYmFjaywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNo
dW5rU2l6ZSkKIHsKLSAgICBmdW5jdGlvbiBwb3B1bGF0ZShjb3VudCkKLSAgICB7Ci0gICAgICAg
IHZhciBpbmRleCA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7Ci0gICAgICAg
IHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpOwotICAgICAgICBjYWxsYmFjayhjb3VudCwg
aW5kZXgpOwotICAgIH0KKyAgICBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLmNhbGwodGhpcywg
e3N1bW1hcnlSb3c6dHJ1ZX0sIGZhbHNlKTsKKyAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNr
OworICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHRoaXMuX2Vu
ZFBvc2l0aW9uID0gZW5kUG9zaXRpb247CisgICAgdGhpcy5fY2h1bmtTaXplID0gY2h1bmtTaXpl
OwogCiAgICAgdGhpcy5zaG93TmV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIp
OwogICAgIHRoaXMuc2hvd05leHQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImJ1dHRvbiIpOwotICAg
IHRoaXMuc2hvd05leHQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cg
bmV4dCAlZCIsIG5leHRDb3VudCk7Ci0gICAgdGhpcy5zaG93TmV4dC5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIHBvcHVsYXRlLmJpbmQodGhpcywgbmV4dENvdW50KSwgZmFsc2UpOworICAgIHRo
aXMuc2hvd05leHQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9zaG93TmV4dENodW5r
LmJpbmQodGhpcyksIGZhbHNlKTsKIAotICAgIGlmIChhbGxDb3VudCkgewotICAgICAgICB0aGlz
LnNob3dBbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKLSAgICAgICAgdGhp
cy5zaG93QWxsLnNldEF0dHJpYnV0ZSgidHlwZSIsICJidXR0b24iKTsKLSAgICAgICAgdGhpcy5z
aG93QWxsLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGFsbCAlZCIs
IGFsbENvdW50KTsKLSAgICAgICAgdGhpcy5zaG93QWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IiwgcG9wdWxhdGUuYmluZCh0aGlzLCBhbGxDb3VudCksIGZhbHNlKTsKLSAgICB9CisgICAgdGhp
cy5zaG93QWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CisgICAgdGhpcy5z
aG93QWxsLnNldEF0dHJpYnV0ZSgidHlwZSIsICJidXR0b24iKTsKKyAgICB0aGlzLnNob3dBbGwu
YWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9zaG93QWxsLmJpbmQodGhpcyksIGZhbHNl
KTsKIAotICAgIFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUuY2FsbCh0aGlzLCB7c3VtbWFyeVJv
dzp0cnVlfSwgZmFsc2UpOworICAgIHRoaXMuX3VwZGF0ZUxhYmVscygpOwogICAgIHRoaXMuc2Vs
ZWN0YWJsZSA9IGZhbHNlOwogfQogCiBXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5vZGUu
cHJvdG90eXBlID0geworICAgIF9zaG93TmV4dENodW5rOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl9jYWxsYmFjayh0aGlzLl9zdGFydFBvc2l0aW9uLCB0aGlzLl9zdGFydFBvc2l0
aW9uICsgdGhpcy5fY2h1bmtTaXplKTsKKyAgICB9LAorCisgICAgX3Nob3dBbGw6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKHRoaXMuX3N0YXJ0UG9zaXRpb24sIHRo
aXMuX2VuZFBvc2l0aW9uKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZUxhYmVsczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIHRvdGFsU2l6ZSA9IHRoaXMuX2VuZFBvc2l0aW9uIC0gdGhp
cy5fc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgdmFyIG5leHRDaHVua1NpemUgPSBNYXRoLm1pbih0
aGlzLl9jaHVua1NpemUsIHRvdGFsU2l6ZSk7CisgICAgICAgIHRoaXMuc2hvd05leHQudGV4dENv
bnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgbmV4dCAlZCIsIG5leHRDaHVua1Np
emUpOworICAgICAgICB0aGlzLnNob3dBbGwudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlNob3cgYWxsICVkIiwgdG90YWxTaXplKTsKKyAgICB9LAorCiAgICAgY3JlYXRlQ2Vs
bHM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgidGQiKTsKQEAgLTc5LDYgKzkyLDI0IEBAIFdlYkluc3BlY3Rvci5TaG93TW9yZURh
dGFHcmlkTm9kZS5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBmcm9tCisgICAgICovCisgICAgc2V0U3RhcnRQb3NpdGlvbjogZnVuY3Rpb24o
ZnJvbSkKKyAgICB7CisgICAgICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSBmcm9tOworICAgICAg
ICB0aGlzLl91cGRhdGVMYWJlbHMoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtudW1iZXJ9IHRvCisgICAgICovCisgICAgc2V0RW5kUG9zaXRpb246IGZ1bmN0aW9uKHRvKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fZW5kUG9zaXRpb24gPSB0bzsKKyAgICAgICAgdGhpcy5fdXBk
YXRlTGFiZWxzKCk7CisgICAgfSwKKworICAgIC8qKgogICAgICAqIEBvdmVycmlkZQogICAgICAq
IEByZXR1cm4ge251bWJlcn0KICAgICAgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvcHJvZmlsZXNQYW5lbC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVzUGFuZWwuY3NzCmluZGV4IDEwZjZiNDlmZWRmMzdiNWQ3
NTg1ZWE5ZmZhM2NhZTgxYzdhMjNiZGQuLmE3ZjJiYWNmYjEzODIzZTkwMTc4ZjA0YjE0ZGQ4OWI2
OGUyYTA3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
cHJvZmlsZXNQYW5lbC5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9wcm9maWxlc1BhbmVsLmNzcwpAQCAtMTg2LDMgKzE4NiwxMiBAQAogYm9keS5pbmFjdGl2ZSAu
cHJvZmlsZS1sYXVuY2hlci12aWV3LWNvbnRlbnQgYnV0dG9uLnJ1bm5pbmc6bm90KC5zdGF0dXMt
YmFyLWl0ZW0pIHsKICAgICBjb2xvcjogcmdiKDIyMCwgMTMwLCAxMzApOwogfQorCisuaGlnaGxp
Z2h0ZWQtcm93IHsKKyAgICAtd2Via2l0LWFuaW1hdGlvbjogInJvd19oaWdobGlnaHQiIDJzIDBz
OworfQorCitALXdlYmtpdC1rZXlmcmFtZXMgcm93X2hpZ2hsaWdodCB7CisgICAgZnJvbSB7YmFj
a2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAxMjApOyB9CisgICAgdG8geyBiYWNrZ3JvdW5k
LWNvbG9yOiB3aGl0ZTsgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL3V0aWxpdGllcy5qcwppbmRleCAwMTZkMDU2MTM2ZmIzOTE3ZTZhMmE0ZGEwZDA2NjRiMDgw
MjAwODdmLi5lNTIwZWJkYWZjZjVhMzNhZDY0YmU4NTU1MmY0MTI3YjljNzg5MmIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpAQCAtMjE4
LDYgKzIxOCwxMCBAQCBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAidXBw
ZXJCb3VuZCIsCiAgICAgfQogfSk7CiAKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50MzJBcnJh
eS5wcm90b3R5cGUsICJzb3J0IiwgeworICAgdmFsdWU6IEFycmF5LnByb3RvdHlwZS5zb3J0Cit9
KTsKKwogKGZ1bmN0aW9uKCkgewogdmFyIHBhcnRpdGlvbiA9IHsKICAgICAvKioK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141581</attachid>
            <date>2012-05-12 08:55:07 -0700</date>
            <delta_ts>2012-05-12 09:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86204-20120512195506.patch</filename>
            <type>text/plain</type>
            <size>22103</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2ODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWExOTc1NzE4N2RjMDli
ODhjOTA2YzFhOTk3MTdmMzI5MjM3ZDVlMC4uODE5Mzg4YzEzNjk3NTUyZGVkYzg5Y2JlN2Y1ZmE2
ZmJhZjcyMmE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA1LTEyICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGhlYXAgcHJvZmlsZXIgc2hvdWxkIGFsbG93IHJldmVhbGluZyBhbiBlbGVtZW50IHdoaWNo
IGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODYyMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBKUyBvYmplY3RzIGluIHRoZSBjb25zb2xlIGhhdmUgY29udGV4dCBt
ZW51IGl0ZW0gdGhhdCBhbGxvd3MgdG8gcmV2ZWFsIHRoZW0gaW4gYSBoZWFwIHNuYXBzaG90IHZp
ZXcuCisKKyAgICAgICAgKiBFbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlTWVzc2FnZS5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlLl9mb3JtYXRQYXJhbWV0ZXJB
c09iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZXh0TWVudS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5wcm90b3R5cGUuaXNFbXB0eSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLl9kZXRhY2gpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUud2FzRGV0YWNoZWQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZ2V0Tm9kZUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUuZ2V0Tm9kZVBvc2l0
aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERhdGFHcmlk
cy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnBy
b3RvdHlwZS5oaWdobGlnaHRPYmplY3RCeUhlYXBTbmFwc2hvdElkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5oaWdobGlnaHRO
b2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlk
LnByb3RvdHlwZS5ub2RlV2FzRGV0YWNoZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlLl9jbGVhckN1cnJlbnRIaWdobGlnaHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXdwb3J0RGF0YUdyaWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXdwb3J0RGF0YUdyaWQucHJvdG90
eXBlLmhpZ2hsaWdodE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXdwb3J0RGF0YUdyaWQucHJvdG90eXBlLl9vblNjcm9sbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5oaWdobGlnaHRP
YmplY3RCeUhlYXBTbmFwc2hvdElkLmRpZEdldENsYXNzTmFtZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQucHJvdG90eXBlLmhpZ2hsaWdo
dE9iamVjdEJ5SGVhcFNuYXBzaG90SWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdENvbnN0cnVjdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5zZXREYXRhU291cmNlKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdEdyaWROb2Rlcy5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUud2FzRGV0YWNo
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZS5w
cm90b3R5cGUucmV2ZWFsTm9kZUJ5U25hcHNob3RPYmplY3RJZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlLnByb3RvdHlwZS5yZXZlYWxOb2RlQnlT
bmFwc2hvdE9iamVjdElkLmRpZFBvcHVsYXRlQ2hpbGRyZW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBlLmdldE5vZGVDbGFzc05hbWUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldE5vZGVQ
b3NpdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVz
U2VjdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlv
bi5Db250ZXh0TWVudVByb3ZpZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3Bl
cnRpZXNTZWN0aW9uLkNvbnRleHRNZW51UHJvdmllci5wcm90b3R5cGUucG9wdWxhdGVDb250ZXh0
TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uYWRk
Q29udGV4dE1lbnVQcm92aWVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0
aWVzU2VjdGlvbi5wcm90b3R5cGUuZW5hYmxlQ29udGV4dE1lbnUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5fY29udGV4dE1lbnVFdmVu
dEZpcmVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuc2hvd09iamVj
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmV2ZWFsSW5IZWFwU25hcHNob3RDb250ZXh0TWVu
dVByb3ZpZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJldmVhbEluSGVhcFNuYXBzaG90Q29u
dGV4dE1lbnVQcm92aWVyLnByb3RvdHlwZS5wb3B1bGF0ZUNvbnRleHRNZW51LnJldmVhbEluU3Vt
bWFyeVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJldmVhbEluSGVhcFNuYXBzaG90Q29u
dGV4dE1lbnVQcm92aWVyLnByb3RvdHlwZS5wb3B1bGF0ZUNvbnRleHRNZW51LmRpZFJlY2VpdmVI
ZWFwT2JqZWN0SWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJldmVhbEluSGVhcFNuYXBzaG90
Q29udGV4dE1lbnVQcm92aWVyLnByb3RvdHlwZS5wb3B1bGF0ZUNvbnRleHRNZW51KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVzUGFuZWwuY3NzOgorICAgICAgICAoLmhp
Z2hsaWdodGVkLXJvdyk6CisgICAgICAgIChALXdlYmtpdC1rZXlmcmFtZXMgcm93X2hpZ2hsaWdo
dCk6CisgICAgICAgICh0byk6CisKIDIwMTItMDUtMTIgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1h
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYWRkIHRhYiBjb250ZXh0
IG1lbnUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5n
cy5qcwppbmRleCA4MjYxMTkwNzU4ZTJkNDMyODQ5M2QxYjAzNDQwMDY5Mjk2MzcwZjllLi5lMTg2
ZDhkNzRkMDZhN2NjZDZlMjhmMmEyMGI4MmIzNmViNmMwYzYxIDEwMDY0NApHSVQgYmluYXJ5IHBh
dGNoCmRlbHRhIDcyCnpjbVhAbyVYK0RnYjtHQipsVmohemkzYzszR1VOaGJCMH57RkM0Jk0oNygq
c1FEbnQyWGA0NkkjPWdzOTIjRV9wewpNK2hlJS0hYHYkPzBBWmFNPWx9byEKCmRlbHRhIDE0Cldj
bWNjQSQ5a2xmYjtHQipuO1lnYFNeKXEkaHpMZGkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVNZXNzYWdlLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlTWVzc2FnZS5qcwppbmRleCBlMDFiOWRiYThiMjI2
MzUzOWZlODExYWI1OTUwMjllNTkwZGU0MGY1Li45MWVkOTY1ODQyZjUwMmU0ZTc2OTQwMWIwMGVk
MmNlODk5YTdlYzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbnNvbGVNZXNzYWdlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ29uc29sZU1lc3NhZ2UuanMKQEAgLTI2NCw3ICsyNjQsOSBAQCBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZSA9IHsKIAogICAgIF9mb3JtYXRQYXJhbWV0ZXJB
c09iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVtKQogICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRD
aGlsZChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKG9iaiwgb2JqLmRl
c2NyaXB0aW9uKS5lbGVtZW50KTsKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVj
dG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uKTsKKyAgICAg
ICAgc2VjdGlvbi5lbmFibGVDb250ZXh0TWVudSgpOworICAgICAgICBlbGVtLmFwcGVuZENoaWxk
KHNlY3Rpb24uZWxlbWVudCk7CiAgICAgfSwKIAogICAgIF9mb3JtYXRQYXJhbWV0ZXJBc05vZGU6
IGZ1bmN0aW9uKG9iamVjdCwgZWxlbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29udGV4dE1lbnUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NvbnRleHRNZW51LmpzCmluZGV4IDgwZGYwNmMwZWU2NjM0NTA0ZTQyNGM5YTBl
NTI3ZDYzNTdmZmY2Y2QuLjg3NmZjOGUzOTNjM2M2NTgwZmEyNGUzMDhkNTIzY2E0ZTA5MDE5NDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29udGV4dE1l
bnUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZXh0TWVu
dS5qcwpAQCAtODAsNiArODAsMTQgQEAgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5faXRlbXMucHVzaCh7dHlwZTogInNlcGFyYXRvciJ9KTsKICAg
ICB9LAogCisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBp
c0VtcHR5OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gIXRoaXMuX2l0ZW1zLmxl
bmd0aDsKKyAgICB9LAorCiAgICAgX2l0ZW1TZWxlY3RlZDogZnVuY3Rpb24oaWQpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5faGFuZGxlcnNbaWRdKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMKaW5kZXggYzNlN2M0MzY3ZTcwZGE1ZmVlNDlkNTU1
YjhjZTk4N2M5MzI4MTgzMS4uY2Y2NmNiNjU3ZDM1MjFjYTdkMjE3Y2RhNDJmOWVhNDAwZDdmMzBi
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3Jp
ZC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpz
CkBAIC0xNjA2LDYgKzE2MDYsMTIgQEAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0
aDsgKytpKQogICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5fZGV0YWNoKCk7CisKKyAgICAg
ICAgdGhpcy53YXNEZXRhY2hlZCgpOworICAgIH0sCisKKyAgICB3YXNEZXRhY2hlZDogZnVuY3Rp
b24oKQorICAgIHsKICAgICB9LAogCiAgICAgc2F2ZVBvc2l0aW9uOiBmdW5jdGlvbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmlu
ZGV4IGJkYTQ3Y2U5NGY3ZmYyMTkzOTA1NTVmZmY2YjU3ZWRjZmQ4ZGM0OGUuLjBmMTljNjg2NmMx
NTYwZDRmYTYzODNlY2U1M2I5MDEwYmUwMzlhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC0xMjg2LDYgKzEyODYsMTUg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biBkaWZmOwogICAgIH0sCiAKKyAgICBnZXROb2RlQ2xhc3NOYW1lOiBmdW5jdGlvbihzbmFwc2hv
dE9iamVjdElkKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaXQgPSB0aGlzLl9hbGxOb2Rlczsg
aXQuaGFzTmV4dCgpOyBpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChpdC5ub2RlLmlkID09
PSBzbmFwc2hvdE9iamVjdElkKQorICAgICAgICAgICAgICAgIHJldHVybiBpdC5ub2RlLmNsYXNz
TmFtZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCiAgICAgX3Bh
cnNlRmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIpCiAgICAgewogICAgICAgICBpZiAoIWZpbHRlcikK
QEAgLTE1OTMsNiArMTYwMiwyMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92
aWRlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBmaWx0ZXIsIG5vZGVJbmRleGVzKQogfQogCiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUgPSB7CisgICAgZ2V0
Tm9kZVBvc2l0aW9uOiBmdW5jdGlvbihzbmFwc2hvdE9iamVjdElkKQorICAgIHsKKyAgICAgICAg
dGhpcy5fY3JlYXRlSXRlcmF0aW9uT3JkZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgdGhpcy5zb3J0QWxsKCk7CisKKyAgICAg
ICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5zbmFw
c2hvdCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faXRlcmF0aW9uT3JkZXIu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIG5vZGUubm9kZUluZGV4ID0gdGhpcy5faXRlcmF0
aW9uT3JkZXJbaV07CisgICAgICAgICAgICBpZiAobm9kZS5pZCA9PT0gc25hcHNob3RPYmplY3RJ
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
LTE7CisgICAgfSwKKwogICAgIHNlcmlhbGl6ZUl0ZW06IGZ1bmN0aW9uKG5vZGUpCiAgICAgewog
ICAgICAgICByZXR1cm4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERhdGFHcmlkcy5qcwppbmRleCAyZjgyM2M0MDQ0NmEw
NDU4MTQ0MzA3ZTg1NDdlNzY0NjIxYzcyNzNkLi5lNWU3ZjUzN2VkZDYyODYzZmM0NDg0YzlmNjdk
YTM1MTFhNjI5MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0hlYXBTbmFwc2hvdERhdGFHcmlkcy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERhdGFHcmlkcy5qcwpAQCAtNDAsNiArNDAsMTAgQEAg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQgPSBmdW5jdGlvbihjb2x1
bW5zKQogICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICovCiAgICAgdGhpcy5fcmVjdXJzaXZl
U29ydGluZ0RlcHRoID0gMDsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEdyaWROb2RlfQorICAgICAqLworICAgIHRoaXMuX2hpZ2hsaWdodGVkTm9kZSA9
IG51bGw7CiAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5nIGNoYW5nZWQiLCB0aGlz
LnNvcnRpbmdDaGFuZ2VkLCB0aGlzKTsKIH0KIApAQCAtNzAsNiArNzQsMzcgQEAgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gdGhpcy5yb290Tm9kZSgpLmNoaWxkcmVuOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge1Byb2ZpbGVyQWdlbnQuSGVhcFNuYXBzaG90T2JqZWN0SWR9IGhlYXBTbmFwc2hv
dE9iamVjdElkCisgICAgICovCisgICAgaGlnaGxpZ2h0T2JqZWN0QnlIZWFwU25hcHNob3RJZDog
ZnVuY3Rpb24oaGVhcFNuYXBzaG90T2JqZWN0SWQpCisgICAgeworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZX0gbm9kZQor
ICAgICAqLworICAgIGhpZ2hsaWdodE5vZGU6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAg
ICB0aGlzLl9jbGVhckN1cnJlbnRIaWdobGlnaHQoKTsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0
ZWROb2RlID0gbm9kZTsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWROb2RlLmVsZW1lbnQuYWRk
U3R5bGVDbGFzcygiaGlnaGxpZ2h0ZWQtcm93Iik7CisgICAgfSwKKworICAgIG5vZGVXYXNEZXRh
Y2hlZDogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRl
ZE5vZGUgPT09IG5vZGUpCisgICAgICAgICAgICB0aGlzLl9jbGVhckN1cnJlbnRIaWdobGlnaHQo
KTsKKyAgICB9LAorCisgICAgX2NsZWFyQ3VycmVudEhpZ2hsaWdodDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9oaWdobGlnaHRlZE5vZGUpCisgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWROb2RlLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFz
cygiaGlnaGxpZ2h0ZWQtcm93Iik7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkTm9kZSA9IG51
bGw7CisgICAgfSwKKwogICAgIGNoYW5nZU5hbWVGaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlcikKICAg
ICB7CiAgICAgICAgIGZpbHRlciA9IGZpbHRlci50b0xvd2VyQ2FzZSgpOwpAQCAtMTY2LDYgKzIw
MSwxMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlld3BvcnREYXRhR3JpZCA9IGZ1bmN0
aW9uKGNvbHVtbnMpCiAgICAgdGhpcy5fdG9wTGV2ZWxOb2RlcyA9IFtdOwogICAgIHRoaXMuX3Rv
cFBhZGRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhZGRpbmdOb2RlKCk7CiAg
ICAgdGhpcy5fYm90dG9tUGFkZGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGFk
ZGluZ05vZGUoKTsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEdyaWROb2RlfQorICAgICAqLworICAgIHRoaXMuX25vZGVUb0hpZ2hsaWdodEFmdGVyU2Ny
b2xsID0gbnVsbDsKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXdwb3J0RGF0YUdy
aWQucHJvdG90eXBlID0gewpAQCAtMjMzLDYgKzI3MiwxNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Vmlld3BvcnREYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3RvcExl
dmVsTm9kZXMgPSBbXTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGV9IG5vZGUKKyAgICAg
Ki8KKyAgICBoaWdobGlnaHROb2RlOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9k
ZS5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQodHJ1ZSk7CisgICAgICAgIHRoaXMuX25v
ZGVUb0hpZ2hsaWdodEFmdGVyU2Nyb2xsID0gbm9kZTsKKyAgICB9LAorCiAgICAgX2FkZFBhZGRp
bmdSb3dzOiBmdW5jdGlvbih0b3AsIGJvdHRvbSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl90
b3BQYWRkaW5nLmVsZW1lbnQucGFyZW50Tm9kZSAhPT0gdGhpcy5kYXRhVGFibGVCb2R5KQpAQCAt
MjU3LDYgKzMwNiwxMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlld3BvcnREYXRhR3Jp
ZC5wcm90b3R5cGUgPSB7CiAgICAgX29uU2Nyb2xsOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAg
ICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZU5vZGVzKCk7CisKKyAgICAgICAgaWYgKHRoaXMuX25v
ZGVUb0hpZ2hsaWdodEFmdGVyU2Nyb2xsKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90b3R5cGUuaGlnaGxpZ2h0Tm9kZS5jYWxsKHRo
aXMsIHRoaXMuX25vZGVUb0hpZ2hsaWdodEFmdGVyU2Nyb2xsKTsKKyAgICAgICAgICAgIHRoaXMu
X25vZGVUb0hpZ2hsaWdodEFmdGVyU2Nyb2xsID0gbnVsbDsKKyAgICAgICAgfQogICAgIH0KIH0K
IApAQCAtMzcxLDYgKzQyNSw4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rv
cnNEYXRhR3JpZCA9IGZ1bmN0aW9uKCkKICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmll
d3BvcnREYXRhR3JpZC5jYWxsKHRoaXMsIGNvbHVtbnMpOwogICAgIHRoaXMuX3Byb2ZpbGVJbmRl
eCA9IC0xOwogICAgIHRoaXMuX3RvcExldmVsTm9kZXMgPSBbXTsKKworICAgIHRoaXMuX29iamVj
dElkVG9TZWxlY3QgPSBudWxsOwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3Ry
dWN0b3JzRGF0YUdyaWQucHJvdG90eXBlID0gewpAQCAtMzg1LDEyICs0NDEsNDIgQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yc0RhdGFHcmlkLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgfVtzb3J0Q29sdW1uXTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQG92ZXJyaWRl
CisgICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LkhlYXBTbmFwc2hvdE9iamVjdElkfSBpZAor
ICAgICAqLworICAgIGhpZ2hsaWdodE9iamVjdEJ5SGVhcFNuYXBzaG90SWQ6IGZ1bmN0aW9uKGlk
KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLnNuYXBzaG90KSB7CisgICAgICAgICAgICB0aGlz
Ll9vYmplY3RJZFRvU2VsZWN0ID0gaWQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBkaWRHZXRDbGFzc05hbWUoY2xhc3NOYW1lKQorICAgICAgICB7
CisgICAgICAgICAgICB2YXIgY29uc3RydWN0b3JOb2RlcyA9IHRoaXMudG9wTGV2ZWxOb2Rlcygp
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdHJ1Y3Rvck5vZGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnN0cnVjdG9yTm9kZXNb
aV07CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC5fbmFtZSA9PT0gY2xhc3NOYW1lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZXZlYWxOb2RlQnlTbmFwc2hvdE9iamVjdElkKHBh
cnNlSW50KGlkLCAxMCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc25hcHNob3Qu
Z2V0Tm9kZUNsYXNzTmFtZShwYXJzZUludChpZCwgMTApLCBkaWRHZXRDbGFzc05hbWUuYmluZCh0
aGlzKSk7CisgICAgfSwKKwogICAgIHNldERhdGFTb3VyY2U6IGZ1bmN0aW9uKHNuYXBzaG90Vmll
dywgc25hcHNob3QpCiAgICAgewogICAgICAgICB0aGlzLnNuYXBzaG90VmlldyA9IHNuYXBzaG90
VmlldzsKICAgICAgICAgdGhpcy5zbmFwc2hvdCA9IHNuYXBzaG90OwogICAgICAgICBpZiAodGhp
cy5fcHJvZmlsZUluZGV4ID09PSAtMSkKICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlQ2hpbGRy
ZW4oKTsKKworICAgICAgICBpZiAodGhpcy5fb2JqZWN0SWRUb1NlbGVjdCkgeworICAgICAgICAg
ICAgdGhpcy5oaWdobGlnaHRPYmplY3RCeUhlYXBTbmFwc2hvdElkKHRoaXMuX29iamVjdElkVG9T
ZWxlY3QpOworICAgICAgICAgICAgdGhpcy5fb2JqZWN0SWRUb1NlbGVjdCA9IG51bGw7CisgICAg
ICAgIH0KICAgICB9LAogCiAgICAgX3BvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90R3Jp
ZE5vZGVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNo
b3RHcmlkTm9kZXMuanMKaW5kZXggODFmZTkxZjZmYzY1ODY2MWU3YThiODg0MGQxMTYzMjM5ZjYx
NzdjZS4uYjM3ODc4ZTkwZjQ3ZDc1NTJhNmNmOGZjOTMyNDNkYWE4MzBhM2RiNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RHcmlkTm9k
ZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNo
b3RHcmlkTm9kZXMuanMKQEAgLTg0LDYgKzg0LDE0IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RHcmlkTm9kZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAgIH0sCiAKKyAgICAvKioKKyAgICAg
KiBAb3ZlcnJpZGUKKyAgICAgKi8KKyAgICB3YXNEZXRhY2hlZDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fZGF0YUdyaWQubm9kZVdhc0RldGFjaGVkKHRoaXMpOworICAgIH0sCisK
ICAgICBfdG9QZXJjZW50U3RyaW5nOiBmdW5jdGlvbihudW0pCiAgICAgewogICAgICAgICByZXR1
cm4gbnVtLnRvRml4ZWQoMCkgKyAiXHUyMDA5JSI7IC8vIFx1MjAwOSBpcyBhIHRoaW4gc3BhY2Uu
CkBAIC02ODksNiArNjk3LDM2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rv
ck5vZGUgPSBmdW5jdGlvbih0cmVlLCBjbGFzc05hbWUsIGFnZ3JlZ2F0ZSwKIH0KIAogV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZS5wcm90b3R5cGUgPSB7CisgICAgLyoq
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNuYXBzaG90T2JqZWN0SWQKKyAgICAgKi8KKyAgICBy
ZXZlYWxOb2RlQnlTbmFwc2hvdE9iamVjdElkOiBmdW5jdGlvbihzbmFwc2hvdE9iamVjdElkKQor
ICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZGlkR2V0Tm9kZVBvc2l0aW9uKG5vZGVQb3NpdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGVQb3NpdGlvbiAhPT0gLTEpCisgICAgICAg
ICAgICAgICAgdGhpcy5fcG9wdWxhdGVDaGlsZHJlbihub2RlUG9zaXRpb24sIG51bGwsIGRpZFBv
cHVsYXRlQ2hpbGRyZW4uYmluZCh0aGlzLCBub2RlUG9zaXRpb24pKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGRpZFBvcHVsYXRlQ2hpbGRyZW4obm9kZVBvc2l0aW9uKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgaW5kZXhPZkZpcnNDaGlsZEluUmFuZ2UgPSAwOworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZXRyaWV2ZWRDaGlsZHJlblJhbmdlcy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fcmV0cmlldmVk
Q2hpbGRyZW5SYW5nZXNbaV07CisgICAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSA8PSBub2Rl
UG9zaXRpb24gJiYgbm9kZVBvc2l0aW9uIDwgcmFuZ2UudG8pIHsKKyAgICAgICAgICAgICAgICAg
ICB2YXIgY2hpbGRJbmRleCA9IGluZGV4T2ZGaXJzQ2hpbGRJblJhbmdlICsgbm9kZVBvc2l0aW9u
IC0gcmFuZ2UuZnJvbTsKKyAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2VOb2RlID0gdGhp
cy5jaGlsZHJlbltjaGlsZEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhR3Jp
ZC5oaWdobGlnaHROb2RlKGluc3RhbmNlTm9kZSk7CisgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaW5kZXhPZkZpcnNDaGlsZEluUmFu
Z2UgKz0gcmFuZ2UudG8gLSByYW5nZS5mcm9tICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuZXhwYW5kKCk7CisgICAgICAgIHRoaXMuX3Byb3ZpZGVyLmdldE5v
ZGVQb3NpdGlvbihzbmFwc2hvdE9iamVjdElkLCBkaWRHZXROb2RlUG9zaXRpb24uYmluZCh0aGlz
KSk7CisgICAgfSwKKwogICAgIGNyZWF0ZUNlbGw6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIp
CiAgICAgewogICAgICAgICB2YXIgY2VsbCA9IGNvbHVtbklkZW50aWZpZXIgIT09ICJvYmplY3Qi
ID8gdGhpcy5fY3JlYXRlVmFsdWVDZWxsKGNvbHVtbklkZW50aWZpZXIpIDogV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsLmNhbGwodGhpcywgY29s
dW1uSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcwppbmRleCBmOWFlMzJkZWNlNmI2ZmJlZTc1MmRi
ZDEzYTYzYTI0ZWIwOWRjMTM2Li40MjE1YTc3OWRkMzg2MmM4OGI0NTlhMzc4OWQ2ZTM3YTcwZDU2
YWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBT
bmFwc2hvdFByb3h5LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90UHJveHkuanMKQEAgLTM4Miw2ICszODIsMTEgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFByb3h5LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5jYWxsTWV0aG9kKGNh
bGxiYWNrLCAiY2FsY3VsYXRlU25hcHNob3REaWZmIiwgYmFzZVNuYXBzaG90SWQsIGJhc2VTbmFw
c2hvdEFnZ3JlZ2F0ZXMpOwogICAgIH0sCiAKKyAgICBnZXROb2RlQ2xhc3NOYW1lOiBmdW5jdGlv
bihzbmFwc2hvdE9iamVjdElkLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuY2FsbE1l
dGhvZChjYWxsYmFjaywgImdldE5vZGVDbGFzc05hbWUiLCBzbmFwc2hvdE9iamVjdElkKTsKKyAg
ICB9LAorCiAgICAgY3JlYXRlRWRnZXNQcm92aWRlcjogZnVuY3Rpb24obm9kZUluZGV4LCBmaWx0
ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5jYWxsRmFjdG9yeU1ldGhvZChudWxsLCAi
Y3JlYXRlRWRnZXNQcm92aWRlciIsICJXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQ
cm94eSIsIG5vZGVJbmRleCwgZmlsdGVyKTsKQEAgLTQ4Niw2ICs0OTEsMTEgQEAgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkgPSBmdW5jdGlvbih3b3JrZXIsIG9iamVjdElk
KQogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eS5wcm90b3R5cGUg
PSB7CisgICAgZ2V0Tm9kZVBvc2l0aW9uOiBmdW5jdGlvbihzbmFwc2hvdE9iamVjdElkLCBjYWxs
YmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuY2FsbE1ldGhvZChjYWxsYmFjaywgImdldE5vZGVQ
b3NpdGlvbiIsIHNuYXBzaG90T2JqZWN0SWQpOworICAgIH0sCisKICAgICBpc0VtcHR5OiBmdW5j
dGlvbihjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHRoaXMuY2FsbEdldHRlcihjYWxsYmFjaywg
ImlzRW1wdHkiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzCmluZGV4IGI0NjU2ZDI0NTNiNzQ2
NzZkM2Q4ZDBkOWRlMjUxYmRlMzU1NWIzYzMuLjgzMGQzNzI4ZDU5NGZkMTdjNWEzYWNlYzZmZTdj
OWE5ODVlNzJiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwpAQCAtNTAsNyArNTAsNTQg
QEAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24ob2JqZWN0
LCB0aXRsZSwgc3VidGl0bGUsIGVtcHR5UGwKIAogV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRp
ZXNTZWN0aW9uLl9hcnJheUxvYWRUaHJlc2hvbGQgPSAxMDA7CiAKKworLyoqCisgKiBAaW50ZXJm
YWNlCisgKi8KK1dlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5Db250ZXh0TWVu
dVByb3ZpZXIgPSBmdW5jdGlvbigpCit7Cit9CisKK1dlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0
aWVzU2VjdGlvbi5Db250ZXh0TWVudVByb3ZpZXIucHJvdG90eXBlID0geworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9ufSBzZWN0aW9u
CisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnV9IGNvbnRleHRNZW51Cisg
ICAgICovCisgICAgcG9wdWxhdGVDb250ZXh0TWVudTogZnVuY3Rpb24oc2VjdGlvbiwgY29udGV4
dE1lbnUpCisgICAgeworICAgIH0KK30KKworCisvKioKKyAqIEB0eXBlIHtBcnJheS48V2ViSW5z
cGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLkNvbnRleHRNZW51UHJvdmllcj59CisgKi8K
K1dlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5fY29udGV4dE1lbnVQcm92aWVy
cyA9IFtdOworCisvKioKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNT
ZWN0aW9uLkNvbnRleHRNZW51UHJvdmllcn0gcHJvdmlkZXIKKyAqLworV2ViSW5zcGVjdG9yLk9i
amVjdFByb3BlcnRpZXNTZWN0aW9uLmFkZENvbnRleHRNZW51UHJvdmllciA9IGZ1bmN0aW9uKHBy
b3ZpZGVyKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5fY29u
dGV4dE1lbnVQcm92aWVycy5wdXNoKHByb3ZpZGVyKTsKK30KKwogV2ViSW5zcGVjdG9yLk9iamVj
dFByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBlbmFibGVDb250ZXh0TWVudTog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImNvbnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnVFdmVudEZpcmVkLmJpbmQodGhpcyksIHRy
dWUpOworICAgIH0sCisKKyAgICBfY29udGV4dE1lbnVFdmVudEZpcmVkOiBmdW5jdGlvbihldmVu
dCkKKyAgICB7CisgICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29u
dGV4dE1lbnUoKTsKKyAgICAgICAgdmFyIHByb3ZpZGVycyA9IFdlYkluc3BlY3Rvci5PYmplY3RQ
cm9wZXJ0aWVzU2VjdGlvbi5fY29udGV4dE1lbnVQcm92aWVyczsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwcm92aWRlcnMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBwcm92aWRlcnNb
aV0ucG9wdWxhdGVDb250ZXh0TWVudSh0aGlzLCBjb250ZXh0TWVudSk7CisgICAgICAgIGlmICgh
Y29udGV4dE1lbnUuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGV4dE1lbnUuc2hvdyhldmVu
dCk7CisgICAgfSwKKwogICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IHRoaXMudXBkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Byb2ZpbGVzUGFuZWwuanMKaW5kZXggMGVlMTE1N2YyZWIyYjJjOGRiYzAyZDE3MGE3OWQx
MzRjNjVmZjg1Yy4uYmU4OTgzMjNlNjIwMTRjMmM3Yjc5NTFmNjY0ZTYzMWQ1MmViNTg0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVs
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5l
bC5qcwpAQCAtMjI1LDYgKzIyNSw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsID0gZnVu
Y3Rpb24oKQogICAgIHRoaXMuX2NyZWF0ZUZpbGVTZWxlY3RvckVsZW1lbnQoKTsKICAgICB0aGlz
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVDb250
ZXh0TWVudUV2ZW50LmJpbmQodGhpcyksIHRydWUpOwogCisgICAgV2ViSW5zcGVjdG9yLk9iamVj
dFByb3BlcnRpZXNTZWN0aW9uLmFkZENvbnRleHRNZW51UHJvdmllcihuZXcgV2ViSW5zcGVjdG9y
LlJldmVhbEluSGVhcFNuYXBzaG90Q29udGV4dE1lbnVQcm92aWVyKCkpOwogfQogCiBXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5FdmVudFR5cGVzID0gewpAQCAtNTc4LDYgKzU3OSwyNyBAQCBX
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8q
KgorICAgICAqIEBwYXJhbSB7UHJvZmlsZXJBZ2VudC5IZWFwU25hcHNob3RPYmplY3RJZH0gc25h
cHNob3RPYmplY3RJZAorICAgICAqLworICAgIHNob3dPYmplY3Q6IGZ1bmN0aW9uKHNuYXBzaG90
T2JqZWN0SWQpCisgICAgeworICAgICAgICB2YXIgaGVhcFByb2ZpbGVzID0gdGhpcy5nZXRQcm9m
aWxlcyhXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFwUHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIHZhciBwcm9maWxlID0gaGVhcFByb2ZpbGVzW2ldOworICAgICAgICAgICAgLy8gVE9E
TzogYWxsb3cgdG8gY2hvb3NlIHNuYXBzaG90IGlmIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMu
CisgICAgICAgICAgICBpZiAocHJvZmlsZS5tYXhKU09iamVjdElkID49IHNuYXBzaG90T2JqZWN0
SWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNob3dQcm9maWxlKHByb2ZpbGUpOworICAgICAg
ICAgICAgICAgIHByb2ZpbGUuX3Byb2ZpbGVWaWV3LmNoYW5nZVZpZXcoIlN1bW1hcnkiLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUuX3Byb2ZpbGVWaWV3LmRh
dGFHcmlkICE9PSAgcHJvZmlsZS5fcHJvZmlsZVZpZXcuY29uc3RydWN0b3JzRGF0YUdyaWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHByb2Zp
bGUuX3Byb2ZpbGVWaWV3LmRhdGFHcmlkLmhpZ2hsaWdodE9iamVjdEJ5SGVhcFNuYXBzaG90SWQo
c25hcHNob3RPYmplY3RJZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCiAgICAg
ICogQHBhcmFtIHtzdHJpbmd9IHR5cGVJZAogICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Q
cm9maWxlSGVhZGVyfQogICAgICAqLwpAQCAtMTAzNiw2ICsxMDU4LDUyIEBAIFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFu
ZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGU7CiAK
KworLyoqCisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0
aW9uLkNvbnRleHRNZW51UHJvdmllcn0KKyAqIEBjb25zdHJ1Y3RvcgorICovCitXZWJJbnNwZWN0
b3IuUmV2ZWFsSW5IZWFwU25hcHNob3RDb250ZXh0TWVudVByb3ZpZXIgPSBmdW5jdGlvbigpCit7
Cit9CisKK1dlYkluc3BlY3Rvci5SZXZlYWxJbkhlYXBTbmFwc2hvdENvbnRleHRNZW51UHJvdmll
ci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb259IHNlY3Rpb24KKyAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudX0gY29udGV4dE1lbnUKKyAgICAgKi8KKyAg
ICBwb3B1bGF0ZUNvbnRleHRNZW51OiBmdW5jdGlvbihzZWN0aW9uLCBjb250ZXh0TWVudSkKKyAg
ICB7CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50UGFuZWwo
KSAhPT0gV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgb2JqZWN0SWQgPSBzZWN0aW9uLm9iamVjdC5vYmplY3RJZDsKKyAgICAg
ICAgaWYgKCFvYmplY3RJZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgaGVh
cFByb2ZpbGVzID0gV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy5nZXRQcm9maWxlcyhXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKKyAgICAgICAgaWYgKCFo
ZWFwUHJvZmlsZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZ1bmN0
aW9uIHJldmVhbEluU3VtbWFyeVZpZXcoKQorICAgICAgICB7CisgICAgICAgICAgICBQcm9maWxl
ckFnZW50LmdldEhlYXBPYmplY3RJZChvYmplY3RJZCwgZGlkUmVjZWl2ZUhlYXBPYmplY3RJZC5i
aW5kKHRoaXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRpZFJlY2VpdmVIZWFw
T2JqZWN0SWQoZXJyb3IsIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpICE9PSBXZWJJbnNwZWN0b3IucGFu
ZWxzLnByb2ZpbGVzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICgh
ZXJyb3IpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy5zaG93
T2JqZWN0KHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV2ZWFsIGluIFN1bW1hcnkgVmlldyIpLCByZXZl
YWxJblN1bW1hcnlWaWV3LmJpbmQodGhpcykpOworICAgIH0KK30KKworCiAvKioKICAqIEBjb25z
dHJ1Y3RvcgogICogQGltcGxlbWVudHMge1Byb2ZpbGVyQWdlbnQuRGlzcGF0Y2hlcn0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcHJvZmlsZXNQYW5lbC5j
c3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVzUGFuZWwuY3Nz
CmluZGV4IDEwZjZiNDlmZWRmMzdiNWQ3NTg1ZWE5ZmZhM2NhZTgxYzdhMjNiZGQuLmE3ZjJiYWNm
YjEzODIzZTkwMTc4ZjA0YjE0ZGQ4OWI2OGUyYTA3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcHJvZmlsZXNQYW5lbC5jc3MKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9wcm9maWxlc1BhbmVsLmNzcwpAQCAtMTg2LDMgKzE4
NiwxMiBAQAogYm9keS5pbmFjdGl2ZSAucHJvZmlsZS1sYXVuY2hlci12aWV3LWNvbnRlbnQgYnV0
dG9uLnJ1bm5pbmc6bm90KC5zdGF0dXMtYmFyLWl0ZW0pIHsKICAgICBjb2xvcjogcmdiKDIyMCwg
MTMwLCAxMzApOwogfQorCisuaGlnaGxpZ2h0ZWQtcm93IHsKKyAgICAtd2Via2l0LWFuaW1hdGlv
bjogInJvd19oaWdobGlnaHQiIDJzIDBzOworfQorCitALXdlYmtpdC1rZXlmcmFtZXMgcm93X2hp
Z2hsaWdodCB7CisgICAgZnJvbSB7YmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAxMjAp
OyB9CisgICAgdG8geyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfQorfQo=
</data>
<flag name="review"
          id="147740"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>